controller = $controller; if ($data instanceof DataObject) { $data = $data->toMap(); } $this->data = $data; $this->name = $name; } /** * Bootstrap the form fields for the content review modal * * @param DataObject $object * @return Form */ public function Form($object) { $placeholder = 'Add comments (optional)'; $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]]) ]); $actions = FieldList::create([ ReviewContentHandlerFormAction::create() ->setTitle(_t(__CLASS__ . '.MarkAsReviewedAction', 'Mark as reviewed')) ->addExtraClass('review-content__action') ]); $form = Form::create($this->controller, $this->name, $fields, $actions); $form->setHTMLID('Form_EditForm_ReviewContent'); $form->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 */ public function submitReview($record, $data) { if (!$record || !$record->exists()) { throw new ValidationException(_t(__CLASS__ . '.ObjectDoesntExist', 'That object doesn\'t exist')); } if (!$record->canEdit() || !$record->hasMethod('canBeReviewedBy') || !$record->canBeReviewedBy(Security::getCurrentUser()) ) { throw new ValidationException(_t( __CLASS__ . '.ErrorReviewPermissionDenied', 'It seems you don\'t have the necessary permissions to submit a content review' )); } $this->saveRecord($record, $data); $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; } else { return $this->controller->redirectBack(); } } /** * Save the review provided in $data to the $record * * @param DataObject $record * @param array $data */ protected function saveRecord($record, $data) { $notes = (!empty($data['Review']) ? $data['Review'] : _t(__CLASS__ . '.NoComments', '(no comments)')); $record->addReviewNote(Security::getCurrentUser(), $notes); $record->advanceReviewDate(); } }