public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); // Show items submitted into a workflow for current user to action $fieldName = 'PendingObjects'; $pending = $this->userObjects(Member::currentUser(), $fieldName); if (self::$fieldOverrides) { $displayFields = self::$fieldOverrides; } else { $displayFields = array('Title' => _t('AdvancedWorkflowAdmin.Title', 'Title'), 'LastEdited' => _t('AdvancedWorkflowAdmin.LastEdited', 'Changed'), 'WorkflowTitle' => _t('AdvancedWorkflowAdmin.WorkflowTitle', 'Effective workflow'), 'WorkflowStatus' => _t('AdvancedWorkflowAdmin.WorkflowStatus', 'Current action')); } // Pending/Submitted items GridField Config $config = new GridFieldConfig_Base(); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridFieldDetailForm()); $config->getComponentByType('GridFieldPaginator')->setItemsPerPage(5); $columns = $config->getComponentByType('GridFieldDataColumns'); $columns->setFieldFormatting($this->setFieldFormatting($config)); if ($pending->count()) { $formFieldTop = GridField::create($fieldName, $this->isAdminUser(Member::currentUser()) ? _t('AdvancedWorkflowAdmin.GridFieldTitleAssignedAll', 'All pending items') : _t('AdvancedWorkflowAdmin.GridFieldTitleAssignedYour', 'Your pending items'), $pending, $config); $dataColumns = $formFieldTop->getConfig()->getComponentByType('GridFieldDataColumns'); $dataColumns->setDisplayFields($displayFields); $formFieldTop->setForm($form); $form->Fields()->insertBefore($formFieldTop, 'WorkflowDefinition'); } // Show items submitted into a workflow by current user $fieldName = 'SubmittedObjects'; $submitted = $this->userObjects(Member::currentUser(), $fieldName); if ($submitted->count()) { $formFieldBottom = GridField::create($fieldName, $this->isAdminUser(Member::currentUser()) ? _t('AdvancedWorkflowAdmin.GridFieldTitleSubmittedAll', 'All submitted items') : _t('AdvancedWorkflowAdmin.GridFieldTitleSubmittedYour', 'Your submitted items'), $submitted, $config); $dataColumns = $formFieldBottom->getConfig()->getComponentByType('GridFieldDataColumns'); $dataColumns->setDisplayFields($displayFields); $formFieldBottom->setForm($form); $formFieldBottom->getConfig()->removeComponentsByType('GridFieldEditButton'); $formFieldBottom->getConfig()->addComponent(new GridFieldWorkflowRestrictedEditButton()); $form->Fields()->insertBefore($formFieldBottom, 'WorkflowDefinition'); } $grid = $form->Fields()->dataFieldByName('WorkflowDefinition'); if ($grid) { $grid->getConfig()->getComponentByType('GridFieldDetailForm')->setItemEditFormCallback(function ($form) { $record = $form->getRecord(); if ($record) { $record->updateAdminActions($form->Actions()); } }); $grid->getConfig()->getComponentByType('GridFieldDetailForm')->setItemRequestClass('WorkflowDefinitionItemRequestClass'); $grid->getConfig()->addComponent(new GridFieldExportAction()); $grid->getConfig()->removeComponentsByType('GridFieldExportButton'); } return $form; }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); /** * In the instance that the editing results in the UserAgreement switching between GridField's, we need to * load all agreements into both GridFields to permit the Save action to succeed. * (ie. the archive boolean is toggled) * Use the EditForm action to detect when editing vs viewing */ $action = $this->request->param('Action'); if ($action && $action == 'EditForm') { $archived = UserAgreement::get(); $liveAgreements = $archived; } else { $archived = UserAgreement::get()->filter('Archived', true); $liveAgreements = UserAgreement::get()->filter('Archived', false); } // Show Archived agreements separate to current agreements $fieldName = 'ArchivedAgreements'; // Archived Agreements GridField Config $config = new GridFieldConfig_Base(); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridFieldDetailForm()); $config->addComponent(new GridFieldDeleteAction()); $config->addComponent(new GridFieldExportButton()); $config->addComponent(new GridFieldPrintButton()); $config->getComponentByType('GridFieldPaginator')->setItemsPerPage(5); if ($archived->count()) { $formFieldArchive = GridField::create($fieldName, _t('UserAgreements.ArchivedAgreements', 'Archived Agreements'), $archived, $config); $formFieldArchive->setForm($form); $form->Fields()->insertAfter($formFieldArchive, 'UserAgreement'); } // Omit Archived Agreements from main gridfield $grid = $form->Fields()->dataFieldByName('UserAgreement'); if ($grid) { $grid->setList($liveAgreements); $grid->setTitle(_t('UserAgreements.CurrentAgreements', 'Current Agreements')); } return $form; }
public function updateFields(FieldList $fields) { if (!$this->owner->ID) { return $fields; } $effective = $this->workflowService->getDefinitionFor($this->owner); $tab = $fields->fieldByName('Root') ? $fields->findOrMakeTab('Root.Workflow') : $fields; if (Permission::check('APPLY_WORKFLOW')) { $definition = new DropdownField('WorkflowDefinitionID', _t('WorkflowApplicable.DEFINITION', 'Applied Workflow')); $definition->setSource($this->workflowService->getDefinitions()->map()); $definition->setEmptyString(_t('WorkflowApplicable.INHERIT', 'Inherit from parent')); $tab->push($definition); // $fields->addFieldToTab($tab, $definition); } $tab->push(new ReadonlyField('EffectiveWorkflow', _t('WorkflowApplicable.EFFECTIVE_WORKFLOW', 'Effective Workflow'), $effective ? $effective->Title : _t('WorkflowApplicable.NONE', '(none)'))); if ($this->owner->ID) { $config = new GridFieldConfig_Base(); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridFieldDetailForm()); $insts = $this->owner->WorkflowInstances(); $log = new GridField('WorkflowLog', _t('WorkflowApplicable.WORKFLOWLOG', 'Workflow Log'), $insts, $config); $tab->push($log); } }
public function updateFields(FieldList $fields) { if (!$this->owner->ID) { return $fields; } $tab = $fields->fieldByName('Root') ? $fields->findOrMakeTab('Root.Workflow') : $fields; if (Permission::check('APPLY_WORKFLOW')) { $definition = new DropdownField('WorkflowDefinitionID', _t('WorkflowApplicable.DEFINITION', 'Applied Workflow')); $definitions = $this->workflowService->getDefinitions()->map()->toArray(); $definition->setSource($definitions); $definition->setEmptyString(_t('WorkflowApplicable.INHERIT', 'Inherit from parent')); $tab->push($definition); // Allow an optional selection of additional workflow definitions. if ($this->owner->WorkflowDefinitionID) { $fields->removeByName('AdditionalWorkflowDefinitions'); unset($definitions[$this->owner->WorkflowDefinitionID]); $tab->push($additional = ListboxField::create('AdditionalWorkflowDefinitions', _t('WorkflowApplicable.ADDITIONAL_WORKFLOW_DEFINITIONS', 'Additional Workflows'))); $additional->setSource($definitions); $additional->setMultiple(true); } } // Display the effective workflow definition. if ($effective = $this->getWorkflowInstance()) { $title = $effective->Definition()->Title; $tab->push(ReadonlyField::create('EffectiveWorkflow', _t('WorkflowApplicable.EFFECTIVE_WORKFLOW', 'Effective Workflow'), $title)); } if ($this->owner->ID) { $config = new GridFieldConfig_Base(); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridFieldDetailForm()); $insts = $this->owner->WorkflowInstances(); $log = new GridField('WorkflowLog', _t('WorkflowApplicable.WORKFLOWLOG', 'Workflow Log'), $insts, $config); $tab->push($log); } }
/** */ public function getCMSFields() { $cmsUsers = Member::mapInCMSGroups(); $fields = new FieldList(new TabSet('Root')); $fields->addFieldToTab('Root.Main', new TextField('Title', _t('WorkflowDefinition.TITLE', 'Title'))); $fields->addFieldToTab('Root.Main', new TextareaField('Description', _t('WorkflowDefinition.DESCRIPTION', 'Description'))); if ($this->ID) { $fields->addFieldToTab('Root.Main', new CheckboxSetField('Users', _t('WorkflowDefinition.USERS', 'Users'), $cmsUsers)); $fields->addFieldToTab('Root.Main', new TreeMultiselectField('Groups', _t('WorkflowDefinition.GROUPS', 'Groups'), 'Group')); } if (class_exists('AbstractQueuedJob')) { $before = _t('WorkflowDefinition.SENDREMINDERDAYSBEFORE', 'Send reminder email after '); $after = _t('WorkflowDefinition.SENDREMINDERDAYSAFTER', ' days without action.'); $fields->addFieldToTab('Root.Main', new FieldGroup(_t('WorkflowDefinition.REMINDEREMAIL', 'Reminder Email'), new LabelField('ReminderEmailBefore', $before), new NumericField('RemindDays', ''), new LabelField('ReminderEmailAfter', $after))); } if ($this->ID) { if ($this->Template) { $template = $this->workflowService->getNamedTemplate($this->Template); $fields->addFieldToTab('Root.Main', new ReadonlyField('Template', _t('WorkflowDefinition.TEMPLATE_NAME', 'Source Template'), $this->Template)); $fields->addFieldToTab('Root.Main', new ReadonlyField('TemplateDesc', _t('WorkflowDefinition.TEMPLATE_INFO', 'Template Info'), $template ? $template->getDescription() : '')); $fields->addFieldToTab('Root.Main', $tv = new ReadonlyField('TemplateVersion', _t('WorkflowDefinition:TEMPLATE_VERSION', 'Template Version'))); $tv->setRightTitle(sprintf(_t('WorkflowDefinition.LATEST_VERSION', 'Latest version is %s'), $template->getVersion())); } $fields->addFieldToTab('Root.Main', new WorkflowField('Workflow', _t('WorkflowDefinition.WORKFLOW', 'Workflow'), $this)); } else { // add in the 'template' info $templates = $this->workflowService->getTemplates(); if (is_array($templates)) { $items = array('' => ''); foreach ($templates as $template) { $items[$template->getName()] = $template->getName(); } $templates = array_combine(array_keys($templates), array_keys($templates)); $fields->addFieldToTab('Root.Main', $dd = new DropdownField('Template', _t('WorkflowDefinition.CHOOSE_TEMPLATE', 'Choose template (optional)'), $items)); $dd->setRightTitle('If set, this workflow definition will be automatically updated if the template is changed'); } $message = _t('WorkflowDefinition.ADDAFTERSAVING', 'You can add workflow steps after you save for the first time.'); $fields->addFieldToTab('Root.Main', new LiteralField('AddAfterSaving', "<p class='message notice'>{$message}</p>")); } if ($this->ID && Permission::check('VIEW_ACTIVE_WORKFLOWS')) { $active = $this->Instances()->filter(array('WorkflowStatus' => array('Active', 'Paused'))); $active = new GridField('Active', 'Active Workflow Instances', $active, new GridFieldConfig_RecordEditor()); $active->getConfig()->removeComponentsByType('GridFieldAddNewButton'); $active->getConfig()->removeComponentsByType('GridFieldDeleteAction'); if (!Permission::check('REASSIGN_ACTIVE_WORKFLOWS')) { $active->getConfig()->removeComponentsByType('GridFieldEditButton'); $active->getConfig()->addComponent(new GridFieldViewButton()); $active->getConfig()->addComponent(new GridFieldDetailForm()); } $completed = $this->Instances()->filter(array('WorkflowStatus' => array('Complete', 'Cancelled'))); $config = new GridFieldConfig_Base(); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridFieldDetailForm()); $completed = new GridField('Completed', 'Completed Workflow Instances', $completed, $config); $fields->addFieldToTab('Root.Active', $active); $fields->addFieldToTab('Root.Completed', $completed); } return $fields; }