3 namespace Drupal\book\Plugin\Validation\Constraint;
5 use Drupal\book\BookManagerInterface;
6 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
7 use Symfony\Component\DependencyInjection\ContainerInterface;
8 use Symfony\Component\Validator\Constraint;
9 use Symfony\Component\Validator\ConstraintValidator;
12 * Constraint validator for changing the book outline in pending revisions.
14 class BookOutlineConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
19 * @var \Drupal\book\BookManagerInterface
21 protected $bookManager;
24 * Creates a new BookOutlineConstraintValidator instance.
26 * @param \Drupal\book\BookManagerInterface $book_manager
29 public function __construct(BookManagerInterface $book_manager) {
30 $this->bookManager = $book_manager;
36 public static function create(ContainerInterface $container) {
38 $container->get('book.manager')
45 public function validate($entity, Constraint $constraint) {
46 if (isset($entity) && !$entity->isNew() && !$entity->isDefaultRevision()) {
47 /** @var \Drupal\Core\Entity\ContentEntityInterface $original */
48 $original = $this->bookManager->loadBookLink($entity->id(), FALSE) ?: [
52 if (empty($original['pid'])) {
53 $original['pid'] = -1;
56 if ($entity->book['bid'] != $original['bid']) {
57 $this->context->buildViolation($constraint->message)
59 ->setInvalidValue($entity)
62 if ($entity->book['pid'] != $original['pid']) {
63 $this->context->buildViolation($constraint->message)
65 ->setInvalidValue($entity)
68 if ($entity->book['weight'] != $original['weight']) {
69 $this->context->buildViolation($constraint->message)
70 ->atPath('book.weight')
71 ->setInvalidValue($entity)