public function execute(WorkflowInstance $workflow)
 {
     $members = $workflow->getAssignedMembers();
     if (!$members || !count($members)) {
         return true;
     }
     $context = $this->getContextFields($workflow->getTarget());
     $member = $this->getMemberFields();
     $initiator = $this->getMemberFields($workflow->Initiator());
     $variables = array();
     foreach ($context as $field => $val) {
         $variables["\$Context.{$field}"] = $val;
     }
     foreach ($member as $field => $val) {
         $variables["\$Member.{$field}"] = $val;
     }
     foreach ($initiator as $field => $val) {
         $variables["\$Initiator.{$field}"] = $val;
     }
     $pastActions = $workflow->Actions()->sort('Created DESC');
     $variables["\$CommentHistory"] = $this->customise(array('PastActions' => $pastActions, 'Now' => SS_Datetime::now()))->renderWith('CommentHistory');
     $subject = str_replace(array_keys($variables), array_values($variables), $this->EmailSubject);
     $item = $workflow->customise(array('Items' => $workflow->Actions(), 'Member' => Member::currentUser(), 'Context' => $workflow->getTarget(), 'CommentHistory' => $variables["\$CommentHistory"]));
     if ($this->ListingTemplateID) {
         $item = $workflow->customise(array('Items' => $workflow->Actions(), 'Member' => Member::currentUser(), 'Initiator' => $workflow->Initiator(), 'Context' => $workflow->getTarget()));
         $template = DataObject::get_by_id('ListingTemplate', $this->ListingTemplateID);
         $view = SSViewer::fromString($template->ItemTemplate);
     } else {
         $view = SSViewer::fromString($this->EmailTemplate);
     }
     $body = $view->process($item);
     $from = str_replace(array_keys($variables), array_values($variables), $this->EmailFrom);
     foreach ($members as $member) {
         if ($member->Email) {
             $email = new Email();
             $email->setTo($member->Email);
             $email->setSubject($subject);
             $email->setFrom($from);
             $email->setBody($body);
             $email->send();
         }
     }
     return true;
 }
 public function execute(WorkflowInstance $workflow)
 {
     $workflow->Users()->removeAll();
     $workflow->Groups()->removeAll();
     $workflow->Users()->addMany($this->Users());
     $workflow->Groups()->addMany($this->Groups());
     if ($this->AssignInitiator) {
         $workflow->Users()->add($workflow->Initiator());
     }
     return true;
 }
    public function execute(WorkflowInstance $workflow)
    {
        $workflow->Users()->removeAll();
        //Due to http://open.silverstripe.org/ticket/8258, there are errors occuring if Group has been extended
        //We use a direct delete query here before ticket 8258 fixed
        //$workflow->Groups()->removeAll();
        $workflowID = $workflow->ID;
        $query = <<<SQL
\t\tDELETE FROM "WorkflowInstance_Groups" WHERE ("WorkflowInstance_Groups"."WorkflowInstanceID" = '{$workflowID}');
SQL;
        DB::query($query);
        $workflow->Users()->addMany($this->Users());
        $workflow->Groups()->addMany($this->Groups());
        if ($this->AssignInitiator) {
            $workflow->Users()->add($workflow->Initiator());
        }
        return true;
    }