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;
 }