controller = $controller; $this->name = $name; } /** * Bootstrap the form fields for the content review modal * * @param DataObject $object * @return Form */ public function Form($object) { $placeholder = _t(__CLASS__ . '.Placeholder', 'Add comments (optional)'); $title = _t(__CLASS__ . '.MarkAsReviewedAction', 'Mark as reviewed'); $fields = FieldList::create([ HiddenField::create('ID', null, $object->ID), HiddenField::create('ClassName', null, $object->baseClass()), TextareaField::create('Review', '') ->setAttribute('placeholder', $placeholder) ->setSchemaData(['attributes' => ['placeholder' => $placeholder]]) ]); $action = FormAction::create('savereview', $title) ->setTitle($title) ->setUseButtonTag(false) ->addExtraClass('review-content__action btn btn-primary'); $actions = FieldList::create([$action]); $form = Form::create($this->controller, $this->name, $fields, $actions) ->setHTMLID('Form_EditForm_ReviewContent') ->addExtraClass('form--no-dividers review-content__form'); return $form; } /** * Validate, and save the submitted form's review * * @param DataObject $record * @param array $data * @return HTTPResponse|string * @throws ValidationException If the user cannot submit the review */ public function submitReview($record, $data) { /** @var DataObject|SiteTreeContentReview $record */ if (!$this->canSubmitReview($record)) { throw new ValidationException(_t( __CLASS__ . '.ErrorReviewPermissionDenied', 'It seems you don\'t have the necessary permissions to submit a content review' )); } $notes = (!empty($data['Review']) ? $data['Review'] : _t(__CLASS__ . '.NoComments', '(no comments)')); $record->addReviewNote(Security::getCurrentUser(), $notes); $record->advanceReviewDate(); $request = $this->controller->getRequest(); $message = _t(__CLASS__ . '.Success', 'Review successfully added'); if ($request->getHeader('X-Formschema-Request')) { return $message; } elseif (Director::is_ajax()) { $response = HTTPResponse::create($message, 200); $response->addHeader('Content-Type', 'text/html; charset=utf-8'); return $response; } return $this->controller->redirectBack(); } /** * Determine whether the user can submit a review * * @param DataObject $record * @return bool */ public function canSubmitReview($record) { // Ensure the parameter of correct data type if (!$record instanceof DataObject) { return false; } return $this->isContentReviewable($record, Security::getCurrentUser()); } }