Source of file WorkflowField.php
Size: 3,297 Bytes - Last Modified: 2021-12-24T06:44:28+00:00
/var/www/docs.ssmods.com/process/src/code/formfields/WorkflowField.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | <?php /** * A form field that allows workflow actions and transitions to be edited, * while showing a visual overview of the flow. * * @package advancedworkflow */ use SilverStripe\Forms\FormField; use SilverStripe\View\ArrayData; use SilverStripe\View\Requirements; use SilverStripe\ORM\ArrayList; use SilverStripe\Core\ClassInfo; class WorkflowField extends FormField { private static $allowed_actions = array( 'action', 'transition', 'sort' ); protected $definition; public function __construct($name, $title, WorkflowDefinition $definition) { $this->definition = $definition; $this->addExtraClass('workflow-field'); parent::__construct($name, $title); } public function action() { return new WorkflowFieldActionController($this, 'action'); } public function transition() { return new WorkflowFieldTransitionController($this, 'transition'); } public function sort($request) { if(!SecurityToken::inst()->checkRequest($request)) { $this->httpError(404); } $class = $request->postVar('class'); $ids = $request->postVar('id'); if($class == 'WorkflowAction') { $objects = $this->Definition()->Actions(); } elseif($class == 'WorkflowTransition') { $parent = $request->postVar('parent'); $action = $this->Definition()->Actions()->byID($parent); if(!$action) { $this->httpError(400, _t('AdvancedWorkflowAdmin.INVALIDPARENTID', 'An invalid parent ID was specified.')); } $objects = $action->Transitions(); } else { $this->httpError(400, _t('AdvancedWorkflowAdmin.INVALIDCLASSTOORDER', 'An invalid class to order was specified.')); } if(array_diff($ids, $objects->column('ID'))) { $this->httpError(400, _t('AdvancedWorkflowAdmin.INVALIDIDLIST', 'An invalid list of IDs was provided.')); } singleton('WorkflowService')->reorder($objects, $ids); return new SS_HTTPResponse( null, 200, _t('AdvancedWorkflowAdmin.SORTORDERSAVED', 'The sort order has been saved.') ); } public function getTemplate() { return 'WorkflowField'; } public function FieldHolder($properties = array()) { Requirements::javascript('silverstripe/admin:thirdparty/jquery/jquery.js'); Requirements::javascript('silverstripe/admin:thirdparty/jquery-entwine/dist/jquery.entwine-dist.js'); Requirements::javascript(ADVANCED_WORKFLOW_DIR . '/javascript/WorkflowField.js'); Requirements::css(ADVANCED_WORKFLOW_DIR . '/css/WorkflowField.css'); return $this->Field($properties); } public function Definition() { return $this->definition; } public function ActionLink() { $parts = func_get_args(); array_unshift($parts, 'action'); return $this->Link(implode('/', $parts)); } public function TransitionLink() { $parts = func_get_args(); array_unshift($parts, 'transition'); return $this->Link(implode('/', $parts)); } public function CreateableActions() { $list = new ArrayList(); $classes = ClassInfo::subclassesFor('WorkflowAction'); array_shift($classes); sort($classes); foreach($classes as $class) { $reflect = new ReflectionClass($class); $can = singleton($class)->canCreate() && !$reflect->isAbstract(); if($can) $list->push(new ArrayData(array( 'Title' => singleton($class)->singular_name(), 'Class' => $class ))); } return $list; } } |