174 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
class ClassWorkflow {
 | 
						|
    public function __construct(){}
 | 
						|
    public function __destruct(){}
 | 
						|
    
 | 
						|
  private function _getWorkflow($workflow){
 | 
						|
    $this->_workflow = $workflow;
 | 
						|
    $oPDOLink = ClassConfig::databaseConnect();
 | 
						|
    $sql = "SELECT * FROM workflow_workflow WHERE name=:name LIMIT 1";
 | 
						|
    $execSQL = $oPDOLink->prepare($sql);
 | 
						|
    $execSQL->execute(array());
 | 
						|
    $row = $execSQL->fetch(PDO::FETCH_ASSOC);
 | 
						|
    return $row;
 | 
						|
  }
 | 
						|
  
 | 
						|
  private function _getTransition($workflow, $transition){
 | 
						|
    $this->_transition = $transition;
 | 
						|
    $this->_workflow = $workflow;
 | 
						|
    $oPDOLink = ClassConfig::databaseConnect();
 | 
						|
    
 | 
						|
    //$wf = $this->_getWorkflow($this->_workflow);
 | 
						|
    $sql = "
 | 
						|
    SELECT wt.*
 | 
						|
    FROM workflow_transition wt
 | 
						|
    WHERE code=:transition_code
 | 
						|
        AND wf_id=(SELECT id FROM workflow_workflow WHERE name=:workflow_name LIMIT 1)
 | 
						|
    LIMIT 1;
 | 
						|
    ";
 | 
						|
    $execSQL = $oPDOLink->prepare($sql);
 | 
						|
    $execSQL->execute(array(':transition_code'=>$this->_transition, ':workflow_name'=>$this->_workflow));
 | 
						|
    $row = $execSQL->fetch(PDO::FETCH_ASSOC);
 | 
						|
    return $row;
 | 
						|
  }
 | 
						|
  
 | 
						|
  private function _getWorkflowItem($model, $model_id){
 | 
						|
    $this->_model = $model;
 | 
						|
    $this->_modelId = $model_id;
 | 
						|
    
 | 
						|
    $oPDOLink = ClassConfig::databaseConnect();
 | 
						|
    $sql="
 | 
						|
    SELECT *
 | 
						|
    FROM workflow_item
 | 
						|
    WHERE model=:model
 | 
						|
        AND model_id=:model_id
 | 
						|
    LIMIT 1
 | 
						|
    ";
 | 
						|
    $execSQL = $oPDOLink->prepare($sql);
 | 
						|
    $execSQL->execute(array(
 | 
						|
            ':model'=>$this->_model,
 | 
						|
            ':model_id'=>$this->_modelId
 | 
						|
    ));
 | 
						|
    $row = $execSQL->fetch(PDO::FETCH_ASSOC);
 | 
						|
    return $row;
 | 
						|
  }
 | 
						|
  
 | 
						|
    // _createItemHistory($wf_trans, $wf_item, $this->_userId);
 | 
						|
    private function _createItemHistory($wf_trans, $wf_item, $user_id){
 | 
						|
        $this->_wfTrans = $wf_trans;
 | 
						|
        $this->_wfItem = $wf_item;
 | 
						|
        $this->_userId = $user_id;		
 | 
						|
        $oPDOLink = ClassConfig::databaseConnect();
 | 
						|
        
 | 
						|
        $sql="
 | 
						|
        INSERT INTO workflow_item_history(
 | 
						|
            wf_item_id, wf_status_src_id,
 | 
						|
            wf_status_dest_id, model, model_id,
 | 
						|
            user_id
 | 
						|
        ) VALUES (
 | 
						|
            :wf_item_id, :wf_status_src_id,
 | 
						|
            :wf_status_dest_id,
 | 
						|
            :model, :model_id,
 | 
						|
            :user_id
 | 
						|
        );
 | 
						|
        ";
 | 
						|
        $execSQL = $oPDOLink->prepare($sql);
 | 
						|
        $execSQL->execute(array(
 | 
						|
            ':wf_item_id'=>$this->_wfItem['id'],
 | 
						|
            ':wf_status_src_id'=>$this->_wfItem['wf_status_id'],
 | 
						|
            //':wf_status_src_id'=>$this->_wfTrans['wf_status_src_id'],
 | 
						|
            ':wf_status_dest_id'=>$this->_wfTrans['wf_status_dest_id'],
 | 
						|
            ':model'=>trim($this->_wfItem['model']),
 | 
						|
            ':model_id'=>$this->_wfItem['model_id'],
 | 
						|
            ':user_id'=>$this->_userId
 | 
						|
        ));
 | 
						|
        
 | 
						|
    }
 | 
						|
    
 | 
						|
    public function changeStatus($workflow, $transition, $model, $model_id, $user_id){
 | 
						|
        $this->_workflow = $workflow;
 | 
						|
        $this->_transition = $transition;
 | 
						|
        $this->_model = $model;
 | 
						|
        $this->_modelId = $model_id;
 | 
						|
        $this->_userId = $user_id;
 | 
						|
        $oPDOLink = ClassConfig::databaseConnect() or die();
 | 
						|
        
 | 
						|
        $wf_trans = ClassWorkflow::_getTransition($this->_workflow, $this->_transition);
 | 
						|
        if($wf_trans['create_item'] == '1'){
 | 
						|
            $sql="
 | 
						|
            INSERT INTO workflow_item(wf_status_id, model, model_id)
 | 
						|
            VALUES(:wf_status_id, :model, :model_id);
 | 
						|
            ";
 | 
						|
            $execSQL = $oPDOLink->prepare($sql);
 | 
						|
            if($execSQL->execute(array(
 | 
						|
                    ':wf_status_id'=>$wf_trans['wf_status_dest_id'],
 | 
						|
                    ':model'=>$this->_model,
 | 
						|
                    ':model_id'=>$this->_modelId
 | 
						|
            ))){
 | 
						|
                $wf_item = ClassWorkflow::_getWorkflowItem($this->_model, $this->_modelId);
 | 
						|
                ClassWorkflow::_createItemHistory($wf_trans, $wf_item, $this->_userId);
 | 
						|
                
 | 
						|
                //update status model/model_id to the new status
 | 
						|
                $sql="
 | 
						|
                UPDATE ".$this->_model."
 | 
						|
                SET wf_status_code=(SELECT code FROM workflow_status WHERE id=:wf_status_dest_id)
 | 
						|
                WHERE id=:model_id;
 | 
						|
                ";
 | 
						|
                $execSQL = $oPDOLink->prepare($sql);
 | 
						|
                $execSQL->execute(array(
 | 
						|
                    ':wf_status_dest_id'=>$wf_trans['wf_status_dest_id'],
 | 
						|
                    ':model_id'=>$this->_modelId
 | 
						|
                    ));
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            //TODO finish and test this else instructions
 | 
						|
            $wf_item = ClassWorkflow::_getWorkflowItem($this->_model, $this->_modelId);
 | 
						|
            $sql="
 | 
						|
            UPDATE workflow_item
 | 
						|
            SET wf_status_id=:wf_status_id
 | 
						|
            WHERE id=:item_id
 | 
						|
            ";
 | 
						|
            $execSQL = $oPDOLink->prepare($sql);
 | 
						|
            if($execSQL->execute(array(
 | 
						|
                    ':wf_status_id'=>$wf_trans['wf_status_dest_id'],
 | 
						|
                    ':item_id'=>$wf_item['id']))
 | 
						|
            ){
 | 
						|
                ClassWorkflow::_createItemHistory($wf_trans, $wf_item, $this->_userId);
 | 
						|
                
 | 
						|
                //update status model/model_id to the new status
 | 
						|
                $sql="
 | 
						|
                UPDATE ".$this->_model."
 | 
						|
                SET wf_status_code=(SELECT code FROM workflow_status WHERE id=:wf_status_dest_id)
 | 
						|
                WHERE id=:model_id;
 | 
						|
                ";
 | 
						|
                $execSQL = $oPDOLink->prepare($sql);
 | 
						|
                $execSQL->execute(array(
 | 
						|
                    ':wf_status_dest_id'=>$wf_trans['wf_status_dest_id'],
 | 
						|
                    ':model_id'=>$this->_modelId
 | 
						|
                    ));
 | 
						|
                
 | 
						|
                return true;
 | 
						|
            } else {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    public function getStatusByItemModelId($model, $wf_item_model_id){
 | 
						|
        $this->_model = $model;
 | 
						|
        $this->_wfItemModelId = $wf_item_model_id;
 | 
						|
        $oPDOLink = ClassConfig::databaseConnect();
 | 
						|
        $sql="
 | 
						|
        SELECT ws.code, (SELECT code FROM workflow_translation WHERE id=ws.wf_translation_id) AS name
 | 
						|
        FROM workflow_status ws
 | 
						|
        WHERE ws.id=(SELECT wf_status_id FROM workflow_item WHERE model=:model AND model_id=:wf_item_model_id)
 | 
						|
        ";
 | 
						|
        $execSQL = $oPDOLink->prepare($sql);
 | 
						|
        $execSQL->execute(array(':model'=>$this->_model, ':wf_item_model_id'=>$this->_wfItemModelId));
 | 
						|
        $row = $execSQL->fetch(PDO::FETCH_ASSOC);
 | 
						|
        return $row;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |