Файл: concrete5.7.5.6/concrete/src/Workflow/Request/Request.php
Строк: 130
<?php
namespace ConcreteCoreWorkflowRequest;
use ConcreteCoreFoundationObject;
use Workflow;
use ConcreteCoreWorkflowEmptyWorkflow;
use Database;
use ConcreteCoreWorkflowProgressProgress as WorkflowProgress;
use PermissionKey;
abstract class Request extends Object
{
protected $currentWP;
protected $uID;
protected $wrStatusNum = 0;
public function __construct($pk)
{
$this->pkID = $pk->getPermissionKeyID();
}
public function getWorkflowRequestStatusNum()
{
return $this->wrStatusNum;
}
public function getWorkflowRequestID()
{
return $this->wrID;
}
public function getWorkflowRequestPermissionKeyID()
{
return $this->pkID;
}
public function getWorkflowRequestPermissionKeyObject()
{
return PermissionKey::getByID($this->pkID);
}
public function setCurrentWorkflowProgressObject(WorkflowProgress $wp)
{
$this->currentWP = $wp;
}
public function getCurrentWorkflowProgressObject()
{
return $this->currentWP;
}
public function setRequesterUserID($uID)
{
$this->uID = $uID;
}
public function getRequesterUserID()
{
return $this->uID;
}
public static function getByID($wrID)
{
$db = Database::connection();
$wrObject = $db->getOne('select wrObject from WorkflowRequestObjects where wrID = ?', array($wrID));
if ($wrObject) {
$wr = unserialize($wrObject);
return $wr;
}
}
public function delete()
{
$db = Database::connection();
$db->Execute('delete from WorkflowRequestObjects where wrID = ?', array($this->wrID));
}
public function save()
{
$db = Database::connection();
if (!$this->wrID) {
$wrObject = '';
$db->Execute('insert into WorkflowRequestObjects (wrObject) values (?)', array($wrObject));
$this->wrID = $db->Insert_ID();
}
$wrObject = serialize($this);
$db->Execute('update WorkflowRequestObjects set wrObject = ? where wrID = ?', array($wrObject, $this->wrID));
}
/**
* Triggers a workflow request, queries a permission key to see what workflows are attached to it
* and initiates them.
*
* @param PermissionKey $pk
*
* @return optional WorkflowProgress
*/
protected function triggerRequest(PermissionKey $pk)
{
if (!$this->wrID) {
$this->save();
}
if (!$pk->canPermissionKeyTriggerWorkflow()) {
throw new Exception(t('This permission key cannot start a workflow.'));
}
$pa = $pk->getPermissionAccessObject();
$workflows = array();
$workflowsStarted = 0;
if (is_object($pa)) {
$workflows = $pa->getWorkflows();
foreach ($workflows as $wf) {
if ($wf->validateTrigger($this)) {
$this->addWorkflowProgress($wf);
++$workflowsStarted;
}
}
}
if ($workflowsStarted == 0) {
$defaultWorkflow = new EmptyWorkflow();
$wp = $this->addWorkflowProgress($defaultWorkflow);
return $wp->getWorkflowProgressResponseObject();
}
}
abstract public function addWorkflowProgress(ConcreteCoreWorkflowWorkflow $wf);
abstract public function getWorkflowRequestDescriptionObject();
abstract public function getWorkflowRequestStyleClass();
abstract public function getWorkflowRequestApproveButtonText();
abstract public function getWorkflowRequestApproveButtonClass();
abstract public function getWorkflowRequestApproveButtonInnerButtonRightHTML();
public function getWorkflowRequestAdditionalActions(WorkflowProgress $wp)
{
return array();
}
public function runTask($task, WorkflowProgress $wp)
{
if (method_exists($this, $task)) {
if ($task == 'approve') {
// we check to see if any other outstanding workflowprogress requests have this id
// if they don't we proceed
$db = Database::connection();
$num = $db->GetOne(
'select count(wpID) as total from WorkflowProgress where wpID <> ? and wrID = ? and wpIsCompleted = 0',
array(
$wp->getWorkflowProgressID(),
$this->getWorkflowRequestID(),
)
);
if ($num == 0) {
$wpr = call_user_func_array(array($this, $task), array($wp));
return $wpr;
}
} else {
$wpr = call_user_func_array(array($this, $task), array($wp));
return $wpr;
}
}
}
}