Skip to content
Snippets Groups Projects
WorkflowLogFunctionsBehavior.php 2.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • Marcello Pivanti's avatar
    Marcello Pivanti committed
    <?php
    
    /**
     * Art-ER Attrattività, ricerca e territorio dell’Emilia-Romagna
     * OPEN 2.0
     *
     *
     * @package    elitedivision\amos\workflow\behaviors
     * @category   CategoryName
     * @author     Elite Division S.r.l.
     */
    
    namespace elitedivision\amos\workflow\behaviors;
    
    use elitedivision\amos\core\record\Record;
    use elitedivision\amos\workflow\components\events\SimpleWorkFlowEventsListener;
    use elitedivision\amos\workflow\models\WorkflowTransitionsLog;
    use yii\base\Behavior;
    use yii\helpers\Json;
    
    /**
     * Class WorkflowLogFunctionsBehavior
     * @package elitedivision\amos\workflow\behaviors
     */
    class WorkflowLogFunctionsBehavior extends Behavior
    {
    
        /**
         * @var string $changeStatusComment - attribute for model to send comment data on status change
         */
        public $changeStatusComment;
    
        public function getStatusLastUpdateTime($status)
        {
            /** @var Record $owner */
            $owner = $this->owner;
            return SimpleWorkFlowEventsListener::getLastUpdateTime($owner->className(), $owner->primaryKey, $status);
        }
    
        public function getStatusLastUpdateUser($status)
        {
            /** @var Record $owner */
            $owner = $this->owner;
            return SimpleWorkFlowEventsListener::getLastUpdateUser($owner->className(), $owner->primaryKey, $status);
        }
    
        public function getStatusFirstUpdateUser($status)
        {
            /** @var Record $owner */
            $owner = $this->owner;
            return SimpleWorkFlowEventsListener::getFirstUpdateUser($owner->className(), $owner->primaryKey, $status);
        }
    
        /**
         * @param $status string, the status of SimpleWorkflowBehavior
         * @return null|number (user)
         */
        public function getStatusLastUpdateComment($status)
        {
            /** @var Record $owner */
            $owner = $this->owner;
            $class = $owner->className();
            $primaryKey = $owner->primaryKey;
            $primaryKeyJson = Json::encode($primaryKey);
            $logList = WorkflowTransitionsLog::find()->andWhere([
                'classname' => $class,
                'owner_primary_key' => $primaryKeyJson,
                'end_status' => $status
            ])->orderBy('created_at DESC')->all();
            if (count($logList) >= 1) {
                /** @var WorkflowTransitionsLog $wtl */
                $wtl = reset($logList);
                return isset($wtl->comment) ? $wtl->comment : null;
            }
            return null;
        }
    
        public function getStatusUpdateHistory()
        {
            /** @var Record $owner */
            $owner = $this->owner;
            return SimpleWorkFlowEventsListener::getUpdateHistory($owner->className(), $owner->primaryKey);
        }
    }