protected function processUnsubscribeFromListAction()
 {
     $actionAttributes = $this->action->getActionAttributes();
     if (count($actionAttributes) > 1 || !isset($actionAttributes['marketingList']) || !$this->triggeredModel instanceof Contact) {
         throw new NotSupportedException();
     }
     $marketingListId = $actionAttributes['marketingList']->value;
     $members = MarketingListMember::getByMarketingListIdContactIdAndUnsubscribed($marketingListId, (int) $this->triggeredModel->id, false);
     if ($members !== false) {
         $member = $members[0];
         $member->unsubscribed = true;
         if (!$member->unrestrictedSave()) {
             throw new FailedToSaveModelException();
         }
     } else {
         try {
             //Does the marketing list still exist
             MarketingList::getById((int) $marketingListId);
         } catch (NotFoundException $e) {
             $this->logAndNotifyOnMissingMarketingListModel(ActionForWorkflowForm::TYPE_UNSUBSCRIBE_FROM_LIST);
         }
     }
 }
 /**
  * @param ActionForWorkflowForm $action
  * @param RedBeanModel $model
  * @param User $triggeredByUser
  * @param RedBeanModel $triggeredModel
  */
 protected static function processActionAttributesForActionAfterSave(ActionForWorkflowForm $action, RedBeanModel $model, User $triggeredByUser, RedBeanModel $triggeredModel)
 {
     foreach ($action->getActionAttributes() as $attribute => $actionAttribute) {
         if (!$actionAttribute->resolveValueBeforeSave() && $actionAttribute->shouldSetValue) {
             if (null === ($relation = ActionForWorkflowForm::resolveFirstRelationName($attribute))) {
                 $resolvedModel = $model;
                 $resolvedAttribute = ActionForWorkflowForm::resolveRealAttributeName($attribute);
             } else {
                 $resolvedModel = $model->{$relation};
                 $resolvedAttribute = ActionForWorkflowForm::resolveRealAttributeName($attribute);
             }
             $adapter = new WorkflowActionProcessingModelAdapter($resolvedModel, $triggeredByUser, $triggeredModel);
             $actionAttribute->resolveValueAndSetToModel($adapter, $resolvedAttribute);
         }
     }
 }