| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | 
							- <?php
 
- /*
 
- 	Effet de workflow
 
- 	Execute une requete POST,GET... sur une url et récupere le résultat (json ou html) dans une variable de conf workflow
 
- */
 
- class CurlEffect{
 
- 	//Descriptif du type d'effet
 
- 	public static function manifest($key = null){
 
- 		$manifest = array(
 
- 			'slug' => 'curl',
 
- 			'label' => 'Lancer une requête',
 
- 			'class' => get_called_class(),
 
- 			'path' => __FILE__,
 
- 			'icon' => 'fas fa-atlas',
 
- 			'color' => '#ff9f43',
 
- 		);
 
- 		if(!isset($key)) return $manifest;
 
- 		return isset($manifest[$key]) ? $manifest[$key] : '' ;
 
- 	}
 
- 	//méthode d'affichage de l'effet
 
- 	public static function form($item){
 
- 		$html  = '';
 
- 		$class = get_called_class();
 
- 		ob_start();
 
- 		?>
 
- 		<div class="input-group">
 
- 			<div class="input-group-text input-group-prepend">
 
- 			Méthode
 
- 			</div>
 
- 			<input type="text" data-id="curl-method" class="form-control" value="<?php echo isset($item['curl-method']) ? $item['curl-method'] : 'GET' ?>" placeholder="POST,GET..." required>
 
- 			<div class="input-group-text input-group-prepend">
 
- 			URL
 
- 			</div>
 
- 			<input type="text" data-id="curl-url" class="form-control" value="<?php echo isset($item['curl-url']) ? $item['curl-url'] : 'http://' ?>" placeholder="http://..." required>
 
- 		</div>
 
- 		En-têtes
 
- 		<textarea data-id="curl-header" class="form-control"  placeholder="Une ligne par en-tête ex :
 
- Content-type:'application/json'"><?php echo isset($item['curl-header']) ? $item['curl-header'] : '' ?></textarea>
 
- 		Corps
 
- 		<textarea data-id="curl-body" class="form-control"  placeholder="{...}"><?php echo isset($item['curl-body']) ? $item['curl-url'] : '' ?></textarea>
 
- 		<hr>
 
- 		<div class="input-group">
 
- 			<div class="input-group-text input-group-prepend">
 
- 				Format de résultat
 
- 			</div>
 
- 			<select data-id="curl-result-type" class="form-control">
 
- 				<option <?php echo isset($item['curl-result-type']) && $item['curl-result-type']=='json' ? "selected='selected'" : '' ?> value="">Aucun</option>
 
- 				<option <?php echo isset($item['curl-result-type']) && $item['curl-result-type']=='html' ? "selected='selected'" : '' ?> value="html">HTML</option>
 
- 				<option <?php echo isset($item['curl-result-type']) && $item['curl-result-type']=='json' ? "selected='selected'" : '' ?> value="json">JSON</option>
 
- 			</select>
 
- 		</div>
 
- 		<div class="input-group mt-1">
 
- 			<div class="input-group-text input-group-prepend">
 
- 				Variable de résultat
 
- 			</div>
 
- 			<input type="text" data-id="curl-var" class="form-control" value="<?php echo isset($item['curl-var']) ? $item['curl-var'] : '' ?>" placeholder="Ma variable">
 
- 			<div class="input-group-text input-group-prepend">
 
- 				Prendre le chemin JSON
 
- 			</div>
 
- 			<input type="text" data-id="curl-var-path" class="form-control" value="<?php echo isset($item['curl-var-path']) ? $item['curl-var-path'] : '' ?>" placeholder="Ma variable">
 
- 		</div>
 
- 		<?php
 
- 		$html = ob_get_clean();
 
- 		return $html;
 
- 	}
 
- 	public static function run($effect,$parameters = array()){
 
- 		global $conf;
 
- 		$logs = '';
 
- 		if( in_array($parameters['workflow']['type'] , array( Workflow::TYPE_ENTITY, Workflow::TYPE_LIST))  ){
 
- 			if(isset($parameters['current'])) $parameters['current'] = $parameters['current']->toArray();
 
- 			if(isset($parameters['old'])) $parameters['old'] = $parameters['old']->toArray();
 
- 		}
 
- 		$effect->values['curl-method'] = template($effect->values['curl-method'],$parameters,true);
 
- 		$effect->values['curl-url'] = template($effect->values['curl-url'],$parameters,true);
 
- 		$effect->values['curl-header'] = template($effect->values['curl-header'],$parameters,true);
 
- 		$effect->values['curl-body'] = template($effect->values['curl-body'],$parameters,true);
 
- 		$ch = curl_init();
 
- 		$options = array(
 
- 			CURLOPT_URL => $effect->values['curl-url'],
 
- 		    CURLOPT_HEADER => false,
 
- 		    CURLOPT_SSL_VERIFYHOST => false,
 
-    			CURLOPT_SSL_VERIFYPEER => false,
 
-    			CURLOPT_RETURNTRANSFER => true,
 
-    			CURLOPT_CONNECTTIMEOUT=> 10000
 
- 		);
 
- 		$options[CURLOPT_HTTPHEADER] = explode(PHP_EOL,$effect->values['curl-header']);
 
- 		$options[CURLOPT_POSTFIELDS] = $effect->values['curl-body'] ;
 
- 		curl_setopt_array($ch, $options);
 
- 		$logs .= '<i class="'.self::manifest('icon').'"></i> Lancement de la requete '.$effect->values['curl-method'].' '.$effect->values['curl-url'].'<br>';
 
- 		$results = curl_exec($ch);
 
- 		$logs .= 'Résultat '.$results.'<br>';
 
- 		curl_close($ch);
 
- 		if(isset($effect->values['curl-var'])){
 
- 			$logs .= 'Stockage résultat en variable '.$effect->values['curl-var'].'<br>';
 
- 			if($effect->values['curl-result-type'] == 'json'){
 
- 				$results = json_decode($results,true);
 
- 				$logs .= 'Décodage json :'.($results==false?'JSON incorrect':'JSON correct').'<br>';
 
- 				if(!empty($effect->values['curl-var-path']) && $results!=false){
 
- 					foreach (explode('.',$effect->values['curl-var-path']) as $key => $value) {
 
- 						if(!isset($results[$value])) break;
 
- 						$results = $results[$value];
 
- 					}
 
- 				}
 
- 			}
 
- 			$logs .= 'Stokage résultat '.$effect->values['curl-var'].' = '.$results.'<br>';
 
- 			$workflowVars = json_decode($conf->get('workflow-var'),true);
 
- 			$workflowVars[$effect->values['curl-var']] = $results;
 
- 			$conf->put('workflow-var', json_encode($workflowVars));
 
- 		}
 
- 		return $logs;
 
- 	}
 
- }
 
- ?>
 
 
  |