@@ -127,7 +127,7 @@ function plugin_pre_item_update_processmaker(CommonITILObject $parm) {
127
127
//global $DB;//, $PM_SOAP;
128
128
129
129
// look at previous status
130
- if (isset ($ parm ->input ['status ' ])
130
+ if (isset ($ parm ->input ['status ' ])
131
131
&& $ parm ->input ['status ' ] == CommonITILObject::SOLVED
132
132
&& !in_array ($ parm ->fields ['status ' ], [CommonITILObject::SOLVED , CommonITILObject::CLOSED ])
133
133
&& !PluginProcessmakerCase::canSolve (['item ' => $ parm ])) {
@@ -194,7 +194,7 @@ function plugin_item_update_processmaker_satisfaction($parm) {
194
194
global $ PM_SOAP ;
195
195
if (Session::isCron ()) { // Task cron log with user admin
196
196
$ PM_SOAP ->login (true );
197
- }
197
+ }
198
198
$ cases = PluginProcessmakerCase::getIDsFromItem ('Ticket ' , $ parm ->fields ['tickets_id ' ]);
199
199
foreach ($ cases as $ cases_id ) {
200
200
$ locCase = new PluginProcessmakerCase ;
@@ -282,7 +282,6 @@ function plugin_item_update_processmaker_tasks($parm) {
282
282
$ locCase = new PluginProcessmakerCase ;
283
283
$ locCase ->getFromDB ($ pmTask ->fields ['plugin_processmaker_cases_id ' ]);
284
284
$ srccase_guid = $ locCase ->fields ['case_guid ' ];
285
-
286
285
//$msg = Toolbox::backtrace(false);
287
286
//$msg .= ' $locCase: '.str_replace("\n", "\n ", print_r($locCase, true))."\n";
288
287
//$msg .= ' $task: '.str_replace("\n", "\n ", print_r($parm, true))."\n";
@@ -320,25 +319,34 @@ function plugin_item_update_processmaker_tasks($parm) {
320
319
$ casevariables = array_merge ( $ casevariables , $ matches [1 ] );
321
320
}
322
321
}
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
+
323
331
}
324
332
325
333
// ask for those case variables
326
334
//$PM_SOAP = new PluginProcessmakerProcessmaker();
327
335
//$PM_SOAP->login( );
328
336
// now tries to get the variables to check condition
329
337
$ infoForTasks = $ locCase ->getVariables ($ casevariables );
338
+ $ infoForURL = [];
330
339
foreach ($ infoForTasks as $ casevar => $ varval ) {
331
340
$ infoForTasks [ "@@ $ casevar " ] = "' $ varval' " ;
341
+ $ infoForURL [ "@@ $ casevar " ] = $ varval ;
332
342
unset( $ infoForTasks [ $ casevar ] );
333
343
}
334
344
335
345
//$msg .= " ***********\n";
336
346
//$msg .= ' $targetTask: '.str_replace("\n", "\n ", print_r($targetTask, true))."\n";
337
347
338
348
$ targetTask ['sourcecondition ' ] = str_replace ( array_keys ($ infoForTasks ), $ infoForTasks , $ targetTask ['sourcecondition ' ] );
339
-
340
349
$ eval = eval ( "return ( " .$ targetTask ['sourcecondition ' ]." ? 1 : 0); " );
341
-
342
350
//$msg .= ' $infoForTasks: '.str_replace("\n", "\n ", print_r($infoForTasks, true))."\n";
343
351
//$msg .= ' $targetTask[\'sourcecondition\']: '.str_replace("\n", "\n ", print_r($targetTask['sourcecondition'], true))."\n";
344
352
//$msg .= ' $result: '."$eval\n";
@@ -366,7 +374,8 @@ function plugin_item_update_processmaker_tasks($parm) {
366
374
}
367
375
$ externalapplicationparams ['callback ' ] = $ CFG_GLPI ["url_base " ]."/plugins/processmaker/ajax/asynchronousdatas.php " ;
368
376
$ 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 ' ]);
370
379
curl_setopt ($ ch , CURLOPT_URL , $ externalapplication ['url ' ] );
371
380
if (isset ($ externalapplication ['method ' ]) && $ externalapplication ['method ' ] == 'POST ' ) {
372
381
curl_setopt ($ ch , CURLOPT_POST , 1 );
@@ -391,18 +400,17 @@ function plugin_item_update_processmaker_tasks($parm) {
391
400
$ pmconfig = $ PM_SOAP ->config ; //PluginProcessmakerConfig::getInstance();
392
401
393
402
$ 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 );
406
414
407
415
if ($ externalapplication ) {
408
416
// must call external application in order to get the needed data asynchroneously
@@ -415,12 +423,26 @@ function plugin_item_update_processmaker_tasks($parm) {
415
423
$ externalapplicationparams = json_encode ( $ externalapplicationparams , JSON_HEX_APOS | JSON_HEX_QUOT );
416
424
417
425
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 );
419
440
curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , 1 );
420
441
curl_setopt ($ ch , CURLOPT_VERBOSE , 1 );
421
442
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 );
424
446
curl_setopt ($ ch , CURLOPT_SSL_VERIFYHOST , $ externalapplication ['ssl_verify ' ]);
425
447
}
426
448
@@ -432,7 +454,9 @@ function plugin_item_update_processmaker_tasks($parm) {
432
454
$ response = curl_exec ($ ch );
433
455
if ($ response === false ) {
434
456
//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 ]);
436
460
}
437
461
438
462
curl_close ($ ch );
0 commit comments