public function terminateExecution(DeliveryExecution $deliveryExecution, $reason = null)
    {
        $executionState = $deliveryExecution->getState()->getUri();
        $result = false;

        if (ProctoredDeliveryExecution::STATE_TERMINATED !== $executionState && ProctoredDeliveryExecution::STATE_FINISHED !== $executionState) {
            $proctor = \common_session_SessionManager::getSession()->getUser();
            $eventManager = $this->getServiceManager()->get(EventManager::CONFIG_ID);

            $session = $this->getTestSessionService()->getTestSession($deliveryExecution);
            $logData = [
                'reason' => $reason,
                'timestamp' => microtime(true),
                'context' => $this->getContext($deliveryExecution),
                'itemId' => $session ? $this->getCurrentItemId($deliveryExecution) : null,
            ];

            $this->getDeliveryLogService()->log($deliveryExecution->getIdentifier(), 'TEST_TERMINATE', $logData);

            if ($session) {
                if ($session->isRunning()) {
                    $session->endTestSession();
                }
                $this->getTestSessionService()->persist($session);
                $this->getServiceLocator()->get(ExtendedStateService::SERVICE_ID)->persist($session->getSessionId());
            }

            // Delivery execution state changes after test session ends, in the same way as it happens
            // when a human test taker takes the test.
            $this->setState($deliveryExecution, ProctoredDeliveryExecution::STATE_TERMINATED);
            $eventManager->trigger(new DeliveryExecutionTerminated($deliveryExecution, $proctor, $reason));
            $result = true;
        }

        return $result;
    }
public function terminateExecution(DeliveryExecution $deliveryExecution, $reason = null)
    {
        $executionState = $deliveryExecution->getState()->getUri();
        $result = false;

        if (ProctoredDeliveryExecution::STATE_TERMINATED !== $executionState && ProctoredDeliveryExecution::STATE_FINISHED !== $executionState) {
            $proctor = \common_session_SessionManager::getSession()->getUser();
            $eventManager = $this->getServiceManager()->get(EventManager::CONFIG_ID);

            $session = $this->getTestSessionService()->getTestSession($deliveryExecution);
            $logData = [
                'reason' => $reason,
                'timestamp' => microtime(true),
                'context' => $this->getContext($deliveryExecution),
                'itemId' => $session ? $this->getCurrentItemId($deliveryExecution) : null,
            ];

            $this->getDeliveryLogService()->log($deliveryExecution->getIdentifier(), 'TEST_TERMINATE', $logData);

            if ($session) {
                if ($session->isRunning()) {
                    $session->endTestSession();
                }
                $this->getTestSessionService()->persist($session);
                $this->getServiceLocator()->get(ExtendedStateService::SERVICE_ID)->persist($session->getSessionId());
            }

            // Delivery execution state changes after test session ends, in the same way as it happens
            // when a human test taker takes the test.
            $this->setState($deliveryExecution, ProctoredDeliveryExecution::STATE_TERMINATED);
            $eventManager->trigger(new DeliveryExecutionTerminated($deliveryExecution, $proctor, $reason));
            $result = true;
        }

        return $result;
    }
public function terminateExecution ( DeliveryExecution $ deliveryExecution , $ reason = null ) { $ executionState = $ deliveryExecution -> getState ( ) -> getUri ( ) ; $ result = false ; if ( ProctoredDeliveryExecution :: STATE_TERMINATED !== $ executionState && ProctoredDeliveryExecution :: STATE_FINISHED !== $ executionState ) { $ proctor = \ common_session_SessionManager :: getSession ( ) -> getUser ( ) ; $ eventManager = $ this -> getServiceManager ( ) -> get ( EventManager :: CONFIG_ID ) ; $ session = $ this -> getTestSessionService ( ) -> getTestSession ( $ deliveryExecution ) ; $ logData = [ 'reason' => $ reason , 'timestamp' => microtime ( true ) , 'context' => $ this -> getContext ( $ deliveryExecution ) , 'itemId' => $ session ? $ this -> getCurrentItemId ( $ deliveryExecution ) : null , ] ; $ this -> getDeliveryLogService ( ) -> log ( $ deliveryExecution -> getIdentifier ( ) , 'TEST_TERMINATE' , $ logData ) ; if ( $ session ) { if ( $ session -> isRunning ( ) ) { $ session -> endTestSession ( ) ; } $ this -> getTestSessionService ( ) -> persist ( $ session ) ; $ this -> getServiceLocator ( ) -> get ( ExtendedStateService :: SERVICE_ID ) -> persist ( $ session -> getSessionId ( ) ) ; } // Delivery execution state changes after test session ends, in the same way as it happens // when a human test taker takes the test. $ this -> setState ( $ deliveryExecution , ProctoredDeliveryExecution :: STATE_TERMINATED ) ; $ eventManager -> trigger ( new DeliveryExecutionTerminated ( $ deliveryExecution , $ proctor , $ reason ) ) ; $ result = true ; } return $ result ; }
Terminates a delivery execution

@param DeliveryExecution $deliveryExecution
@param array $reason
@return bool
Terminates a delivery execution