Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\quickedit\Access;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Access\AccessResult;
|
Chris@0
|
6 use Drupal\Core\Routing\Access\AccessInterface;
|
Chris@0
|
7 use Drupal\Core\Session\AccountInterface;
|
Chris@0
|
8 use Drupal\Core\Entity\EntityInterface;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Access check for in-place editing entity fields.
|
Chris@0
|
12 */
|
Chris@0
|
13 class QuickEditEntityFieldAccessCheck implements AccessInterface, QuickEditEntityFieldAccessCheckInterface {
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * Checks Quick Edit access to the field.
|
Chris@0
|
17 *
|
Chris@0
|
18 * @param \Drupal\Core\Entity\EntityInterface $entity
|
Chris@0
|
19 * The entity containing the field.
|
Chris@0
|
20 * @param string $field_name
|
Chris@0
|
21 * The field name.
|
Chris@0
|
22 * @param string $langcode
|
Chris@0
|
23 * The langcode.
|
Chris@0
|
24 * @param \Drupal\Core\Session\AccountInterface $account
|
Chris@0
|
25 * The currently logged in account.
|
Chris@0
|
26 *
|
Chris@0
|
27 * @return \Drupal\Core\Access\AccessResultInterface
|
Chris@0
|
28 * The access result.
|
Chris@0
|
29 *
|
Chris@0
|
30 * @todo Use the $account argument: https://www.drupal.org/node/2266809.
|
Chris@0
|
31 */
|
Chris@0
|
32 public function access(EntityInterface $entity, $field_name, $langcode, AccountInterface $account) {
|
Chris@0
|
33 if (!$this->validateRequestAttributes($entity, $field_name, $langcode)) {
|
Chris@0
|
34 return AccessResult::forbidden();
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 return $this->accessEditEntityField($entity, $field_name);
|
Chris@0
|
38 }
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * {@inheritdoc}
|
Chris@0
|
42 */
|
Chris@0
|
43 public function accessEditEntityField(EntityInterface $entity, $field_name) {
|
Chris@0
|
44 return $entity->access('update', NULL, TRUE)->andIf($entity->get($field_name)->access('edit', NULL, TRUE));
|
Chris@0
|
45 }
|
Chris@0
|
46
|
Chris@0
|
47 /**
|
Chris@0
|
48 * Validates request attributes.
|
Chris@0
|
49 */
|
Chris@0
|
50 protected function validateRequestAttributes(EntityInterface $entity, $field_name, $langcode) {
|
Chris@0
|
51 // Validate the field name and language.
|
Chris@0
|
52 if (!$field_name || !$entity->hasField($field_name)) {
|
Chris@0
|
53 return FALSE;
|
Chris@0
|
54 }
|
Chris@0
|
55 if (!$langcode || !$entity->hasTranslation($langcode)) {
|
Chris@0
|
56 return FALSE;
|
Chris@0
|
57 }
|
Chris@0
|
58
|
Chris@0
|
59 return TRUE;
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 }
|