@@ -127,7 +127,7 @@ function plugin_pre_item_update_processmaker(CommonITILObject $parm) {
127127 //global $DB;//, $PM_SOAP;
128128
129129 // look at previous status
130- if (isset ($ parm ->input ['status ' ])
130+ if (isset ($ parm ->input ['status ' ])
131131 && $ parm ->input ['status ' ] == CommonITILObject::SOLVED
132132 && !in_array ($ parm ->fields ['status ' ], [CommonITILObject::SOLVED , CommonITILObject::CLOSED ])
133133 && !PluginProcessmakerCase::canSolve (['item ' => $ parm ])) {
@@ -194,7 +194,7 @@ function plugin_item_update_processmaker_satisfaction($parm) {
194194 global $ PM_SOAP ;
195195 if (Session::isCron ()) { // Task cron log with user admin
196196 $ PM_SOAP ->login (true );
197- }
197+ }
198198 $ cases = PluginProcessmakerCase::getIDsFromItem ('Ticket ' , $ parm ->fields ['tickets_id ' ]);
199199 foreach ($ cases as $ cases_id ) {
200200 $ locCase = new PluginProcessmakerCase ;
@@ -282,7 +282,6 @@ function plugin_item_update_processmaker_tasks($parm) {
282282 $ locCase = new PluginProcessmakerCase ;
283283 $ locCase ->getFromDB ($ pmTask ->fields ['plugin_processmaker_cases_id ' ]);
284284 $ srccase_guid = $ locCase ->fields ['case_guid ' ];
285-
286285 //$msg = Toolbox::backtrace(false);
287286 //$msg .= ' $locCase: '.str_replace("\n", "\n ", print_r($locCase, true))."\n";
288287 //$msg .= ' $task: '.str_replace("\n", "\n ", print_r($parm, true))."\n";
@@ -320,25 +319,34 @@ function plugin_item_update_processmaker_tasks($parm) {
320319 $ casevariables = array_merge ( $ casevariables , $ matches [1 ] );
321320 }
322321 }
322+ if (preg_match_all ( "/@@(\w+)/u " , $ externalapplication ['url ' ], $ matches )) {
323+ $ casevariables = array_merge ( $ casevariables , $ matches [1 ] );
324+ }
325+ if (isset ($ externalapplication ['headers ' ]) && $ externalapplication ['headers ' ] != "" ) {
326+ if (preg_match_all ( "/@@(\w+)/u " , $ externalapplication ['headers ' ], $ matches )) {
327+ $ casevariables = array_merge ( $ casevariables , $ matches [1 ] );
328+ }
329+ }
330+
323331 }
324332
325333 // ask for those case variables
326334 //$PM_SOAP = new PluginProcessmakerProcessmaker();
327335 //$PM_SOAP->login( );
328336 // now tries to get the variables to check condition
329337 $ infoForTasks = $ locCase ->getVariables ($ casevariables );
338+ $ infoForURL = [];
330339 foreach ($ infoForTasks as $ casevar => $ varval ) {
331340 $ infoForTasks [ "@@ $ casevar " ] = "' $ varval' " ;
341+ $ infoForURL [ "@@ $ casevar " ] = $ varval ;
332342 unset( $ infoForTasks [ $ casevar ] );
333343 }
334344
335345 //$msg .= " ***********\n";
336346 //$msg .= ' $targetTask: '.str_replace("\n", "\n ", print_r($targetTask, true))."\n";
337347
338348 $ targetTask ['sourcecondition ' ] = str_replace ( array_keys ($ infoForTasks ), $ infoForTasks , $ targetTask ['sourcecondition ' ] );
339-
340349 $ eval = eval ( "return ( " .$ targetTask ['sourcecondition ' ]." ? 1 : 0); " );
341-
342350 //$msg .= ' $infoForTasks: '.str_replace("\n", "\n ", print_r($infoForTasks, true))."\n";
343351 //$msg .= ' $targetTask[\'sourcecondition\']: '.str_replace("\n", "\n ", print_r($targetTask['sourcecondition'], true))."\n";
344352 //$msg .= ' $result: '."$eval\n";
@@ -366,7 +374,8 @@ function plugin_item_update_processmaker_tasks($parm) {
366374 }
367375 $ externalapplicationparams ['callback ' ] = $ CFG_GLPI ["url_base " ]."/plugins/processmaker/ajax/asynchronousdatas.php " ;
368376 $ ch = curl_init ();
369- $ externalapplication ['url ' ] = eval ( "return ' " .str_replace ( array_keys ($ infoForTasks ), $ infoForTasks , $ externalapplication ['url ' ])."' ; " ); // '???
377+
378+ $ externalapplication ['url ' ] = str_replace ( array_keys ($ infoForURL ), $ infoForURL , $ externalapplication ['url ' ]);
370379 curl_setopt ($ ch , CURLOPT_URL , $ externalapplication ['url ' ] );
371380 if (isset ($ externalapplication ['method ' ]) && $ externalapplication ['method ' ] == 'POST ' ) {
372381 curl_setopt ($ ch , CURLOPT_POST , 1 );
@@ -391,18 +400,17 @@ function plugin_item_update_processmaker_tasks($parm) {
391400 $ pmconfig = $ PM_SOAP ->config ; //PluginProcessmakerConfig::getInstance();
392401
393402 $ cronaction = new PluginProcessmakerCrontaskaction ;
394- $ cronaction ->add ( [ 'plugin_processmaker_caselinks_id ' => $ targetTask ['id ' ],
395- 'plugin_processmaker_cases_id ' => $ locCase ->getID (),
396- //'itemtype' => $itemtype,
397- //'items_id' => $parm->fields['tickets_id'],
398- 'users_id ' => $ pmconfig ->fields ['users_id ' ],
399- 'is_targettoclaim ' => $ targetTask ['is_targettoclaim ' ],
400- 'state ' => ($ targetTask ['is_externaldata ' ] ? PluginProcessmakerCrontaskaction::WAITING_DATA : PluginProcessmakerCrontaskaction::DATA_READY ),
401- 'postdata ' => json_encode ( $ postdata , JSON_HEX_APOS | JSON_HEX_QUOT ),
402- 'logs_out ' => json_encode ( $ externalapplicationparams , JSON_HEX_APOS | JSON_HEX_QUOT )
403- ],
404- null ,
405- false );
403+ $ cronaction ->add ([
404+ 'plugin_processmaker_caselinks_id ' => $ targetTask ['id ' ],
405+ 'plugin_processmaker_cases_id ' => $ locCase ->getID (),
406+ //'itemtype' => $itemtype,
407+ //'items_id' => $parm->fields['tickets_id'],
408+ 'users_id ' => $ pmconfig ->fields ['users_id ' ],
409+ 'is_targettoclaim ' => $ targetTask ['is_targettoclaim ' ],
410+ 'state ' => ($ targetTask ['is_externaldata ' ] ? PluginProcessmakerCrontaskaction::WAITING_DATA : PluginProcessmakerCrontaskaction::DATA_READY ),
411+ 'postdata ' => json_encode ( $ postdata , JSON_HEX_APOS | JSON_HEX_QUOT ),
412+ 'logs_out ' => json_encode ( $ externalapplicationparams , JSON_HEX_APOS | JSON_HEX_QUOT )
413+ ], [], false );
406414
407415 if ($ externalapplication ) {
408416 // must call external application in order to get the needed data asynchroneously
@@ -415,12 +423,26 @@ function plugin_item_update_processmaker_tasks($parm) {
415423 $ externalapplicationparams = json_encode ( $ externalapplicationparams , JSON_HEX_APOS | JSON_HEX_QUOT );
416424
417425 curl_setopt ($ ch , CURLOPT_POSTFIELDS , $ externalapplicationparams );
418- curl_setopt ($ ch , CURLOPT_HTTPHEADER , ['Content-Type: application/json ' , 'Content-Length: ' . strlen ($ externalapplicationparams ), 'Expect: ' ]);
426+ $ headers = [
427+ 'Content-Type: application/json ' ,
428+ 'Content-Length: ' . strlen ($ externalapplicationparams ),
429+ 'Expect: ' ];
430+ if (isset ($ externalapplication ['headers ' ]) && $ externalapplication ['headers ' ] != "" ) {
431+ $ externalapplication ['headers ' ] = eval ( "return " .str_replace ( array_keys ($ infoForTasks ), $ infoForTasks , $ externalapplication ['headers ' ])." ; " ); // '???
432+ //Can't add an assoicative array in curlopt_httpheader
433+ foreach ($ externalapplication ['headers ' ] as $ key => $ h ) {
434+ array_push ($ headers , $ key .": " .$ h );
435+ }
436+ }
437+ //$headers = array_merge($headers, $externalapplication['headers']);
438+
439+ curl_setopt ($ ch , CURLOPT_HTTPHEADER , $ headers );
419440 curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , 1 );
420441 curl_setopt ($ ch , CURLOPT_VERBOSE , 1 );
421442
422- if (isset ($ externalapplication ['ssl_verify ' ])) {
423- curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , $ externalapplication ['ssl_verify ' ]);
443+ if (isset ($ externalapplication ['ssl_verify ' ]) && $ externalapplication ['ssl_verify ' ] > 0 ) {
444+ //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $externalapplication['ssl_verify']);
445+ curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , 1 );
424446 curl_setopt ($ ch , CURLOPT_SSL_VERIFYHOST , $ externalapplication ['ssl_verify ' ]);
425447 }
426448
@@ -432,7 +454,9 @@ function plugin_item_update_processmaker_tasks($parm) {
432454 $ response = curl_exec ($ ch );
433455 if ($ response === false ) {
434456 //throw new Exception(curl_error($ch), curl_errno($ch));
435- Toolbox::logDebug ( curl_error ($ ch ).": " .curl_errno ($ ch ) );
457+ Toolbox::logDebug (curl_error ($ ch ) . ": " . curl_errno ($ ch ));
458+ // Set 0 to the crontask action status
459+ $ cronaction ->update (['id ' => $ cronaction ->getID (), 'state ' => PluginProcessmakerCrontaskaction::CURL_ERROR ]);
436460 }
437461
438462 curl_close ($ ch );
0 commit comments