Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Workflow/BasicWorkflow.php
Строк: 240
<?php
namespace ConcreteCoreWorkflow;

use 
ConcreteCorePermissionKeyKey;
use 
ConcreteCoreWorkflowHistoryEntryBasicHistoryEntry as BasicWorkflowHistoryEntry;
use 
ConcreteCoreWorkflowProgressActionApprovalAction as WorkflowProgressApprovalAction;
use 
ConcreteCoreWorkflowProgressActionCancelAction as WorkflowProgressCancelAction;
use 
ConcreteCoreWorkflowProgressBasicData as BasicWorkflowProgressData;
use 
ConcreteCoreWorkflowProgressProgress as WorkflowProgress;
use 
Loader;
use 
Core;
use 
PermissionAccess;
use 
PermissionKey;
use 
User;
use 
UserInfo;
use 
Config;

class 
BasicWorkflow extends ConcreteCoreWorkflowWorkflow
{
    public function 
getPermissionAssignmentClassName()
    {
        return 
'\Concrete\Core\Permission\Assignment\BasicWorkflowAssignment';
    }

    public function 
updateDetails($post)
    {
        
$permissions = PermissionKey::getList('basic_workflow');
        foreach (
$permissions as $pk) {
            
$pk->setPermissionObject($this);
            
$pt = $pk->getPermissionAssignmentObject();
            
$paID = $post['pkID'][$pk->getPermissionKeyID()];
            
$pt->clearPermissionAssignment();
            if (
$paID > 0) {
                
$pa = PermissionAccess::getByID($paID, $pk);
                if (
is_object($pa)) {
                    
$pt->assignPermissionAccess($pa);
                }
            }
        }
    }

    
/**
    +     * Returns true if the logged-in user can approve the current workflow
    +     */
    
public function canApproveWorkflow()
    {
        
$pk = Key::getByHandle('approve_basic_workflow_action');
        
$pk->setPermissionObject($this);
        return 
$pk->validate();
    }

    public function 
loadDetails()
    {
    }

    public function 
delete()
    {
        
$db = Loader::db();
        
$db->Execute('DELETE FROM BasicWorkflowPermissionAssignments WHERE wfID = ?', array($this->wfID));
        
parent::delete();
    }

    public function 
start(WorkflowProgress $wp)
    {
        
// lets save the basic data associated with this workflow.
        
$req = $wp->getWorkflowRequestObject();
        
$db = Loader::db();
        
$db->Execute(
            
'INSERT INTO BasicWorkflowProgressData (wpID, uIDStarted) VALUES (?, ?)',
            array(
$wp->getWorkflowProgressID(), $req->getRequesterUserID()));

        if (
$this->canApproveWorkflow()) {
            
// Then that means we have the ability to approve the workflow we just started.
            // In that case, we transparently approve it, and skip the entry notification step.
            
$wpr = $req->approve($wp);
            
$wp->delete();

        } else {

            
$ui = UserInfo::getByID($req->getRequesterUserID());

            
// let's get all the people who are set to be notified on entry
            
$message = t(
                
'On %s, user %s submitted the following request: %s',
                
Core::make('helper/date')->formatDateTime($wp->getWorkflowProgressDateAdded(), true),
                
$ui->getUserName(),
                
$req->getWorkflowRequestDescriptionObject()->getEmailDescription());
            
$this->notify($wp, $message, 'notify_on_basic_workflow_entry');
        }

    }

    protected function 
notify(
        
WorkflowProgress $wp,
        
$message,
        
$permission = 'notify_on_basic_workflow_entry',
        
$parameters = array()
    ) {
        
$nk = PermissionKey::getByHandle($permission);
        
$nk->setPermissionObject($this);
        
$users = $nk->getCurrentlyActiveUsers($wp);
        
$req = $wp->getWorkflowRequestObject();

        foreach (
$users as $ui) {
            
$mh = Loader::helper('mail');
            
$mh->addParameter('uName', $ui->getUserName());
            
$mh->to($ui->getUserEmail());
            
$adminUser = UserInfo::getByID(USER_SUPER_ID);
            
$mh->from($adminUser->getUserEmail(), t('Basic Workflow'));
            
$mh->addParameter('message', $message);
            foreach (
$parameters as $key => $value) {
                
$mh->addParameter($key, $value);
            }
            
$mh->addParameter('siteName', Config::get('concrete.site'));
            
$mh->load('basic_workflow_notification');
            
$mh->sendMail();
            unset(
$mh);
        }
    }

    public function 
getWorkflowProgressCurrentDescription(WorkflowProgress $wp)
    {
        
$bdw = new BasicWorkflowProgressData($wp);
        
$ux = UserInfo::getByID($bdw->getUserStartedID());
        
$req = $wp->getWorkflowRequestObject();
        
$description = $req->getWorkflowRequestDescriptionObject()->getInContextDescription();

        return 
t(
            
'%s Submitted by <strong>%s</strong> on %s.',
            
$description,
            
$ux->getUserName(),
            
Core::make('helper/date')->formatDateTime($wp->getWorkflowProgressDateAdded(), true)
        );
    }

    public function 
getWorkflowProgressStatusDescription(WorkflowProgress $wp)
    {
        
$req = $wp->getWorkflowRequestObject();

        return 
$req->getWorkflowRequestDescriptionObject()->getShortStatus();
    }

    public function 
cancel(WorkflowProgress $wp)
    {
        if (
$this->canApproveWorkflowProgressObject($wp)) {

            
$req = $wp->getWorkflowRequestObject();
            
$bdw = new BasicWorkflowProgressData($wp);
            
$u = new User();
            
$bdw->markCompleted($u);

            
$ux = UserInfo::getByID($bdw->getUserCompletedID());

            
$message = t(
                
"On %s, user %s cancelled the following request: nn---n%sn---nn",
                
Core::make('helper/date')->formatDateTime($bdw->getDateCompleted(), true),
                
$ux->getUserName(),
                
$req->getWorkflowRequestDescriptionObject()->getEmailDescription());
            
$this->notify($wp, $message, 'notify_on_basic_workflow_deny');

            
$hist = new BasicWorkflowHistoryEntry();
            
$hist->setAction('cancel');
            
$hist->setRequesterUserID($u->getUserID());
            
$wp->addWorkflowProgressHistoryObject($hist);

            
$wpr = $req->runTask('cancel', $wp);
            
$wp->markCompleted();

            
$bdw = new BasicWorkflowProgressData($wp);
            
$bdw->delete();

            return 
$wpr;
        }
    }

    public function 
canApproveWorkflowProgressObject(WorkflowProgress $wp)
    {
        return 
$this->canApproveWorkflow();
    }

    public function 
approve(WorkflowProgress $wp)
    {
        if (
$this->canApproveWorkflowProgressObject($wp)) {
            
$req = $wp->getWorkflowRequestObject();
            
$bdw = new BasicWorkflowProgressData($wp);
            
$u = new User();
            
$bdw->markCompleted($u);

            
$ux = UserInfo::getByID($bdw->getUserCompletedID());

            
$message = t(
                
"On %s, user %s approved the following request: nn---n%sn---nn",
                
Core::make('helper/date')->formatDateTime($bdw->getDateCompleted(), true),
                
$ux->getUserName(),
                
$req->getWorkflowRequestDescriptionObject()->getEmailDescription());
            
$this->notify($wp, $message, 'notify_on_basic_workflow_approve');

            
$wpr = $req->runTask('approve', $wp);
            
$wp->markCompleted();

            
$hist = new BasicWorkflowHistoryEntry();
            
$hist->setAction('approve');
            
$hist->setRequesterUserID($u->getUserID());
            
$wp->addWorkflowProgressHistoryObject($hist);

            
$bdw = new BasicWorkflowProgressData($wp);
            
$bdw->delete();

            return 
$wpr;
        }
    }

    public function 
getWorkflowProgressActions(WorkflowProgress $wp)
    {
        
$pk = PermissionKey::getByHandle('approve_basic_workflow_action');
        
$pk->setPermissionObject($this);
        
$buttons = array();
        if (
$this->canApproveWorkflowProgressObject($wp)) {
            
$req = $wp->getWorkflowRequestObject();
            
$button1 = new WorkflowProgressCancelAction();

            
$button2 = new WorkflowProgressApprovalAction();
            
$button2->setWorkflowProgressActionStyleClass($req->getWorkflowRequestApproveButtonClass());
            
$button2->setWorkflowProgressActionStyleInnerButtonRightHTML(
                
$req->getWorkflowRequestApproveButtonInnerButtonRightHTML());
            
$button2->setWorkflowProgressActionLabel($req->getWorkflowRequestApproveButtonText());

            
$buttons[] = $button1;
            
$buttons[] = $button2;
        }

        return 
$buttons;
    }

}
Онлайн: 1
Реклама