/**
  * Save a context in the current activity execution
  */
 public function save()
 {
     $session = PHPSession::singleton();
     if (!$session->hasAttribute('activityExecutionUri')) {
         throw new common_exception_Error('missing activityExecutionUri in Session during RecoveryContext::retrieve()');
     }
     if (!$this->hasRequestParameter('context')) {
         throw new common_exception_MissingParameter('context');
     }
     $saved = false;
     $activityExecutionUri = $session->getAttribute('activityExecutionUri');
     if (!empty($activityExecutionUri)) {
         $activityExecution = new core_kernel_classes_Resource($activityExecutionUri);
         $recoveryService = wfEngine_models_classes_RecoveryService::singleton();
         $context = $this->getRequestParameter('context');
         if (is_array($context)) {
             if (count($context) > 0) {
                 $saved = $recoveryService->saveContext($activityExecution, $context);
             }
         } else {
             if (is_null($context) || $context == 'null') {
                 //if the data sent are null [set context to null], we remove it
                 $saved = $recoveryService->removeContext($activityExecution);
             }
         }
     }
     echo json_encode(array('saved' => $saved));
 }
 /**
  * initialize a test method
  */
 public function setUp()
 {
     TaoPhpUnitTestRunner::initTest();
     $activityExecutionClass = new core_kernel_classes_Class(CLASS_ACTIVITY_EXECUTION);
     $this->activityExecution = $activityExecutionClass->createInstance('test');
     $this->service = wfEngine_models_classes_RecoveryService::singleton();
 }
 /**
  * To build the audit trail of a process execution.
  * Return the list of all activity executions, ordered by creation time,
  * with their row data.
  *
  * @access public
  * @author Somsack Sipasseuth, <*****@*****.**>
  * @param  Resource processExecution
  * @param  boolean withData
  * @return array
  */
 public function getExecutionHistory(core_kernel_classes_Resource $processExecution, $withData = false)
 {
     $returnValue = array();
     $previousProperty = new core_kernel_classes_Property(PROPERTY_ACTIVITY_EXECUTION_PREVIOUS);
     $followingProperty = new core_kernel_classes_Property(PROPERTY_ACTIVITY_EXECUTION_FOLLOWING);
     $recoveryService = wfEngine_models_classes_RecoveryService::singleton();
     $currentActivityExecutions = $this->getCurrentActivityExecutions($processExecution);
     $creationTime = array();
     $unorderedActivityExecutions = array();
     $allActivityExecutions = $processExecution->getPropertyValues($this->processInstancesActivityExecutionsProp);
     $count = count($allActivityExecutions);
     for ($i = 0; $i < $count; $i++) {
         $uri = $allActivityExecutions[$i];
         if (common_Utils::isUri($uri)) {
             $activityExecution = new core_kernel_classes_Resource($uri);
             $createdOn = (string) $activityExecution->getUniquePropertyValue(new core_kernel_classes_Property(PROPERTY_ACTIVITY_EXECUTION_TIME_CREATED));
             if ($withData) {
                 $previousArray = array();
                 $followingArray = array();
                 $previous = $activityExecution->getPropertyValues($previousProperty);
                 $countPrevious = count($previous);
                 for ($j = 0; $j < $countPrevious; $j++) {
                     if (common_Utils::isUri($previous[$j])) {
                         $prevousActivityExecution = new core_kernel_classes_Resource($previous[$j]);
                         $previousArray[] = $prevousActivityExecution->getUri();
                     }
                 }
                 $following = $activityExecution->getPropertyValues($followingProperty);
                 $countFollowing = count($following);
                 for ($k = 0; $k < $countFollowing; $k++) {
                     if (common_Utils::isUri($following[$k])) {
                         $followingActivityExecution = new core_kernel_classes_Resource($following[$k]);
                         $followingArray[] = $followingActivityExecution->getUri();
                     }
                 }
                 $unorderedActivityExecutions[$uri] = array('activityExecution' => $activityExecution, 'executionOf' => $this->activityExecutionService->getExecutionOf($activityExecution), 'createdOn' => date('d-m-Y G:i:s', $createdOn), 'current' => array_key_exists($activityExecution->getUri(), $currentActivityExecutions), 'status' => $this->activityExecutionService->getStatus($activityExecution), 'ACLmode' => $this->activityExecutionService->getAclMode($activityExecution), 'restrictedRole' => $this->activityExecutionService->getRestrictedRole($activityExecution), 'restrictedUser' => $this->activityExecutionService->getRestrictedUser($activityExecution), 'user' => $this->activityExecutionService->getActivityExecutionUser($activityExecution), 'previous' => $previousArray, 'following' => $followingArray, 'nonce' => $this->activityExecutionService->getNonce($activityExecution), 'context' => $recoveryService->getContext($activityExecution, ''), 'variables' => $this->activityExecutionService->getVariables($activityExecution));
             } else {
                 $unorderedActivityExecutions[$uri] = $activityExecution->getUri();
             }
             $creationTime[$uri] = $createdOn;
         }
     }
     asort($creationTime);
     foreach ($creationTime as $uri => $time) {
         $returnValue[] = $unorderedActivityExecutions[$uri];
     }
     return (array) $returnValue;
 }