diff --git a/fillpdf.links.menu.yml b/fillpdf.links.menu.yml index 55d5d9ae1f6685f1305deb3ddf839acc1b49f2a2..9036f1330fb2b471a1ed6631e4f58914fe96986e 100644 --- a/fillpdf.links.menu.yml +++ b/fillpdf.links.menu.yml @@ -8,4 +8,4 @@ fillpdf.forms_admin: title: FillPDF description: Manage your PDFs route_name: fillpdf.forms_admin - parent: system.admin_structure \ No newline at end of file + parent: system.admin_structure diff --git a/fillpdf.permissions.yml b/fillpdf.permissions.yml index 2ae4ebc19da9b9be769b41045c74e704aa449095..66aaf7c01474d90312c82ffff6f9aaefc70999c7 100644 --- a/fillpdf.permissions.yml +++ b/fillpdf.permissions.yml @@ -8,4 +8,5 @@ publish own pdfs: publish all pdfs: title: 'Publish all PDFs' - description: 'Allows filling in and downloading PDFs with any site content.' \ No newline at end of file + description: 'Allows filling in and downloading PDFs with any site content.'add fillpdf file context entities: + title: 'Create new FillPDF file context entities' diff --git a/fillpdf.routing.yml b/fillpdf.routing.yml index ec34d9ba0208e3f7279fefceed13cf497763c35a..91f6594ac2450ed6f77bac77dc3fd29bfbb421b0 100644 --- a/fillpdf.routing.yml +++ b/fillpdf.routing.yml @@ -1,9 +1,11 @@ +--- fillpdf.settings: path: '/admin/config/media/fillpdf' defaults: _form: '\Drupal\fillpdf\Form\FillPdfSettingsForm' _title: 'FillPDF settings' requirements: + # TOOD: Use entity access instead _permission: 'administer pdfs' options: _admin_route: TRUE @@ -14,6 +16,8 @@ fillpdf.forms_admin: _form: '\Drupal\fillpdf\Form\FillPdfOverviewForm' _title: 'FillPDF' requirements: + # TOOD: Use entity access instead + _permission: 'administer pdfs' _permission: 'administer pdfs' options: _admin_route: TRUE @@ -54,3 +58,11 @@ entity.fillpdf_form_field.edit_form: _permission: 'administer pdfs' # todo: do we have an administer own pdfs perm? options: _admin_route: TRUE + +fillpdf_file_context.settings: + path: 'admin/structure/fillpdf_file_context' + defaults: + _form: '\Drupal\fillpdf\Entity\Form\FillPdfFileContextSettingsForm' + _title: 'FillPDF file context settings' + requirements: + _permission: 'administer fillpdf file context entities' diff --git a/src/Entity/FillPdfFileContext.php b/src/Entity/FillPdfFileContext.php new file mode 100644 index 0000000000000000000000000000000000000000..62443e839b5949f4557ee4d8c4176cb8f53b4aec --- /dev/null +++ b/src/Entity/FillPdfFileContext.php @@ -0,0 +1,74 @@ +<?php + +/** + * @file + * Contains Drupal\fillpdf\Entity\FillPdfFileContext. + */ + +namespace Drupal\fillpdf\Entity; + +use Drupal\Core\Annotation\Translation; +use Drupal\Core\Entity\Annotation\ContentEntityType; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\Core\Entity\ContentEntityBase; +use Drupal\Core\Entity\EntityChangedTrait; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\fillpdf\FillPdfFileContextInterface; +use Drupal\user\UserInterface; + +/** + * Defines the FillPDF file context entity. + * + * @ingroup fillpdf + * + * @ContentEntityType( + * id = "fillpdf_file_context", + * label = @Translation("FillPDF file context"), + * handlers = { + * "views_data" = "Drupal\fillpdf\Entity\FillPdfFileContextViewsData", + * + * "access" = "Drupal\fillpdf\FillPdfFileContextAccessControlHandler", + * }, + * base_table = "fillpdf_file_context", + * entity_keys = { + * "id" = "id", + * "label" = "name", + * "uuid" = "uuid" + * }, + * ) + */ +class FillPdfFileContext extends ContentEntityBase implements FillPdfFileContextInterface { + /** + * {@inheritdoc} + */ + public static function preCreate(EntityStorageInterface $storage_controller, array &$values) { + parent::preCreate($storage_controller, $values); + $values += array( + 'user_id' => \Drupal::currentUser()->id(), + ); + } + + /** + * {@inheritdoc} + */ + public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { + $fields['id'] = BaseFieldDefinition::create('integer') + ->setLabel(t('ID')) + ->setDescription(t('The ID of the FillPDF file context entity.')) + ->setReadOnly(TRUE); + + $fields['uuid'] = BaseFieldDefinition::create('uuid') + ->setLabel(t('UUID')) + ->setDescription(t('The UUID of the FillPDF file context entity.')) + ->setReadOnly(TRUE); + + $fields['context'] = BaseFieldDefinition::create('string_long') + ->setLabel(t('Generation context')) + ->setDescription(t('The normalized FillPDF Link (URL) that was used to generate the PDF.')) + ->setRequired(TRUE); + + return $fields; + } + +} diff --git a/src/Entity/FillPdfFileContextViewsData.php b/src/Entity/FillPdfFileContextViewsData.php new file mode 100644 index 0000000000000000000000000000000000000000..890f04f95210ca0cda1d799ab313b137208bbda8 --- /dev/null +++ b/src/Entity/FillPdfFileContextViewsData.php @@ -0,0 +1,32 @@ +<?php + +/** + * @file + * Contains Drupal\fillpdf\Entity\FillPdfFileContext. + */ + +namespace Drupal\fillpdf\Entity; + +use Drupal\views\EntityViewsData; +use Drupal\views\EntityViewsDataInterface; + +/** + * Provides Views data for FillPDF file context entities. + */ +class FillPdfFileContextViewsData extends EntityViewsData implements EntityViewsDataInterface { + /** + * {@inheritdoc} + */ + public function getViewsData() { + $data = parent::getViewsData(); + + $data['fillpdf_file_context']['table']['base'] = array( + 'field' => 'id', + 'title' => $this->t('FillPDF file context'), + 'help' => $this->t('The FillPDF file context ID.'), + ); + + return $data; + } + +} diff --git a/src/FillPdfFileContextAccessControlHandler.php b/src/FillPdfFileContextAccessControlHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..d550c8848056636780254025a9a26b6c9d4f1a59 --- /dev/null +++ b/src/FillPdfFileContextAccessControlHandler.php @@ -0,0 +1,42 @@ +<?php + +/** + * @file + * Contains Drupal\fillpdf\FillPdfFileContextAccessControlHandler. + */ + +namespace Drupal\fillpdf; + +use Drupal\Core\Entity\EntityAccessControlHandler; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Session\AccountInterface; +use Drupal\Core\Access\AccessResult; + +/** + * Access controller for the FillPDF file context entity. + * + * @see \Drupal\fillpdf\Entity\FillPdfFileContext. + */ +class FillPdfFileContextAccessControlHandler extends EntityAccessControlHandler { + /** + * {@inheritdoc} + */ + protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { + + switch ($operation) { + case 'view': + + // TODO: allow access if user has permission to entities user used to fill in PDF +// return AccessResult::allowedIfHasPermission($account, 'view fillpdf file context entities'); + + case 'update': + return AccessResult::allowedIfHasPermission($account, 'edit fillpdf file context entities'); + + case 'delete': + return AccessResult::allowedIfHasPermission($account, 'delete fillpdf file context entities'); + } + + return AccessResult::allowed(); + } + +} diff --git a/src/FillPdfFileContextInterface.php b/src/FillPdfFileContextInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..3de5d34c11a5af381e79612b725a2f03d76148df --- /dev/null +++ b/src/FillPdfFileContextInterface.php @@ -0,0 +1,22 @@ +<?php + +/** + * @file + * Contains Drupal\fillpdf\FillPdfFileContextInterface. + */ + +namespace Drupal\fillpdf; + +use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Entity\EntityChangedInterface; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\user\EntityOwnerInterface; + +/** + * Provides an interface for defining FillPDF file context entities. + * + * @ingroup fillpdf + */ +interface FillPdfFileContextInterface extends ContentEntityInterface { + +}