From a648598b0a6928ef0eea45fcd1fedd8806f5f7c4 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Sun, 4 Mar 2018 20:18:59 +0100 Subject: [PATCH] builded submenu links for productions, created new CT page (static) --- .../src/Controller/HomeController.php | 2 +- .../edlp_productions/edlp_productions.module | 57 ++++++++++ .../content/node--page--full.html.twig | 106 ++++++++++++++++++ ...ase_field_override.node.static.promote.yml | 22 ++++ ...ntity_form_display.node.static.default.yml | 100 +++++++++++++++++ ....entity_view_display.node.page.default.yml | 5 + ...ntity_view_display.node.static.default.yml | 43 +++++++ ...entity_view_display.node.static.teaser.yml | 29 +++++ .../sync/field.field.node.static.body.yml | 22 ++++ .../field.field.node.static.field_visuel.yml | 45 ++++++++ ...eld.node.static.field_workflow_generic.yml | 22 ++++ .../language.content_settings.node.static.yml | 16 +++ sites/default/config/sync/node.type.page.yml | 4 +- .../default/config/sync/node.type.static.yml | 17 +++ sites/default/config/sync/user.role.admin.yml | 4 + sites/default/config/sync/user.role.root.yml | 8 ++ 16 files changed, 499 insertions(+), 3 deletions(-) create mode 100644 sites/all/themes/custom/edlptheme/templates/content/node--page--full.html.twig create mode 100644 sites/default/config/sync/core.base_field_override.node.static.promote.yml create mode 100644 sites/default/config/sync/core.entity_form_display.node.static.default.yml create mode 100644 sites/default/config/sync/core.entity_view_display.node.static.default.yml create mode 100644 sites/default/config/sync/core.entity_view_display.node.static.teaser.yml create mode 100644 sites/default/config/sync/field.field.node.static.body.yml create mode 100644 sites/default/config/sync/field.field.node.static.field_visuel.yml create mode 100644 sites/default/config/sync/field.field.node.static.field_workflow_generic.yml create mode 100644 sites/default/config/sync/language.content_settings.node.static.yml create mode 100644 sites/default/config/sync/node.type.static.yml diff --git a/sites/all/modules/figli/edlp_home/src/Controller/HomeController.php b/sites/all/modules/figli/edlp_home/src/Controller/HomeController.php index dd29ab996..cd6c5aa86 100644 --- a/sites/all/modules/figli/edlp_home/src/Controller/HomeController.php +++ b/sites/all/modules/figli/edlp_home/src/Controller/HomeController.php @@ -23,7 +23,7 @@ class HomeController extends ControllerBase { // presentation $query = \Drupal::entityQuery('node') ->condition('status', 1) - ->condition('nid', 12238); + ->condition('nid', 12242); // TODO: présentation nid should be a setting $pres_nid = $query->execute(); diff --git a/sites/all/modules/figli/edlp_productions/edlp_productions.module b/sites/all/modules/figli/edlp_productions/edlp_productions.module index 71b51e6c8..354a2d63a 100644 --- a/sites/all/modules/figli/edlp_productions/edlp_productions.module +++ b/sites/all/modules/figli/edlp_productions/edlp_productions.module @@ -7,6 +7,10 @@ # @Last modified time: 20-12-2017 # @License: GPL-V3 +use Drupal\Core\Menu\MenuTreeParameters; +use Drupal\menu_link_content\Entity\MenuLinkContent; + + /** * Implements hook_theme(). */ @@ -21,3 +25,56 @@ function edlp_productions_theme($existing, $type, $theme, $path) { ), ); } + +/** +* hook_entity_extra_field_info() +* +*/ +function edlp_productions_entity_extra_field_info(){ + $extra = []; + $extra['node']['page']['display']['production_subtree'] = [ + 'label' => t('Subtree'), + 'description' => 'display prodction menu subtree from current node', + 'weight' => 99, + 'visible' => FALSE, + ]; + return $extra; +} + + +/** + * Implements hook_ENTITY_TYPE_view(). + * @see https://www.amazeelabs.com/en/render-menu-tree-custom-code-drupal-8 + */ +function edlp_productions_node_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) { + $display_settings = $display->getComponent('production_subtree'); + if (!empty($display_settings)) { + $menu_name = 'productions'; + // Find the menu item corresponding to the entity (node). + $menu_link_service = \Drupal::getContainer()->get('plugin.manager.menu.link'); + $route_params = array('node' => $entity->id()); + $menu_links = $menu_link_service->loadLinksByRoute('entity.node.canonical', $route_params, $menu_name); + if (!empty($menu_links)) { + // We found a menu link so we can continue with generating the tree. + // First, setup the parameters: we need one level starting with the menu + // link we found, but excluding it from the tree. + $root_menu_item = reset($menu_links); + $menu_parameters = new \Drupal\Core\Menu\MenuTreeParameters(); + $menu_parameters->setMaxDepth(1); + $menu_parameters->setRoot($root_menu_item->getPluginId()); + $menu_parameters->excludeRoot(); + // Get the tree. + $menu_tree_service = \Drupal::service('menu.link_tree'); + $tree = $menu_tree_service->load($menu_name, $menu_parameters); + // Apply some manipulators (checking the access, sorting). + $manipulators = [ + ['callable' => 'menu.default_tree_manipulators:checkNodeAccess'], + ['callable' => 'menu.default_tree_manipulators:checkAccess'], + ['callable' => 'menu.default_tree_manipulators:generateIndexAndSort'], + ]; + $tree = $menu_tree_service->transform($tree, $manipulators); + // And the last step is to actually build the tree. + $build['production_subtree'] = $menu_tree_service->build($tree); + } + } +} diff --git a/sites/all/themes/custom/edlptheme/templates/content/node--page--full.html.twig b/sites/all/themes/custom/edlptheme/templates/content/node--page--full.html.twig new file mode 100644 index 000000000..dbd7d9c23 --- /dev/null +++ b/sites/all/themes/custom/edlptheme/templates/content/node--page--full.html.twig @@ -0,0 +1,106 @@ +{# +/** + * @file + * Theme override to display a node. + * + * Available variables: + * - node: The node entity with limited access to object properties and methods. + * Only method names starting with "get", "has", or "is" and a few common + * methods such as "id", "label", and "bundle" are available. For example: + * - node.getCreatedTime() will return the node creation timestamp. + * - node.hasField('field_example') returns TRUE if the node bundle includes + * field_example. (This does not indicate the presence of a value in this + * field.) + * - node.isPublished() will return whether the node is published or not. + * Calling other methods, such as node.delete(), will result in an exception. + * See \Drupal\node\Entity\Node for a full list of public properties and + * methods for the node object. + * - label: The title of the node. + * - content: All node items. Use {{ content }} to print them all, + * or print a subset such as {{ content.field_example }}. Use + * {{ content|without('field_example') }} to temporarily suppress the printing + * of a given child element. + * - author_picture: The node author user entity, rendered using the "compact" + * view mode. + * - metadata: Metadata for this node. + * - date: Themed creation date field. + * - author_name: Themed author name field. + * - url: Direct URL of the current node. + * - display_submitted: Whether submission information should be displayed. + * - attributes: HTML attributes for the containing element. + * The attributes.class element may contain one or more of the following + * classes: + * - node: The current template type (also known as a "theming hook"). + * - node--type-[type]: The current node type. For example, if the node is an + * "Article" it would result in "node--type-article". Note that the machine + * name will often be in a short form of the human readable label. + * - node--view-mode-[view_mode]: The View Mode of the node; for example, a + * teaser would result in: "node--view-mode-teaser", and + * full: "node--view-mode-full". + * The following are controlled through the node publishing options. + * - node--promoted: Appears on nodes promoted to the front page. + * - node--sticky: Appears on nodes ordered above other non-sticky nodes in + * teaser listings. + * - node--unpublished: Appears on unpublished nodes visible only to site + * admins. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - content_attributes: Same as attributes, except applied to the main + * content tag that appears in the template. + * - author_attributes: Same as attributes, except applied to the author of + * the node tag that appears in the template. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * - view_mode: View mode; for example, "teaser" or "full". + * - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'. + * - page: Flag for the full page state. Will be true if view_mode is 'full'. + * - readmore: Flag for more state. Will be true if the teaser content of the + * node cannot hold the main body content. + * - logged_in: Flag for authenticated user status. Will be true when the + * current user is a logged-in member. + * - is_admin: Flag for admin user status. Will be true when the current user + * is an administrator. + * + * @see template_preprocess_node() + * + * @todo Remove the id attribute (or make it a class), because if that gets + * rendered twice on a page this is invalid CSS for example: two lists + * in different view modes. + */ +#} +{% + set classes = [ + 'node', + 'node--type-' ~ node.bundle|clean_class, + node.isPromoted() ? 'node--promoted', + node.isSticky() ? 'node--sticky', + not node.isPublished() ? 'node--unpublished', + view_mode ? 'node--view-mode-' ~ view_mode|clean_class, + ] +%} +{{ attach_library('classy/node') }} + + + {{ title_prefix }} + + {{ label }} + + {{ title_suffix }} + + {% if display_submitted %} +
+ {{ author_picture }} + + {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %} + {{ metadata }} + +
+ {% endif %} + + + {{ content }} + + + diff --git a/sites/default/config/sync/core.base_field_override.node.static.promote.yml b/sites/default/config/sync/core.base_field_override.node.static.promote.yml new file mode 100644 index 000000000..52c95d366 --- /dev/null +++ b/sites/default/config/sync/core.base_field_override.node.static.promote.yml @@ -0,0 +1,22 @@ +uuid: a79d56dd-12cb-4c95-a50b-7934fd4f7dba +langcode: fr +status: true +dependencies: + config: + - node.type.static +id: node.static.promote +field_name: promote +entity_type: node +bundle: static +label: 'Promu en page d''accueil' +description: '' +required: false +translatable: true +default_value: + - + value: 0 +default_value_callback: '' +settings: + on_label: Activé + off_label: Désactivé +field_type: boolean diff --git a/sites/default/config/sync/core.entity_form_display.node.static.default.yml b/sites/default/config/sync/core.entity_form_display.node.static.default.yml new file mode 100644 index 000000000..f1628814c --- /dev/null +++ b/sites/default/config/sync/core.entity_form_display.node.static.default.yml @@ -0,0 +1,100 @@ +uuid: a8a64fd5-3d5f-45b0-9e36-46e75d6312cb +langcode: fr +status: true +dependencies: + config: + - field.field.node.static.body + - field.field.node.static.field_visuel + - field.field.node.static.field_workflow_generic + - image.style.thumbnail + - node.type.static + module: + - image + - path + - text + - workflow +id: node.static.default +targetEntityType: node +bundle: static +mode: default +content: + body: + type: text_textarea_with_summary + weight: 2 + settings: + rows: 9 + summary_rows: 3 + placeholder: '' + third_party_settings: { } + region: content + created: + type: datetime_timestamp + weight: 6 + region: content + settings: { } + third_party_settings: { } + field_visuel: + weight: 3 + settings: + progress_indicator: throbber + preview_image_style: thumbnail + third_party_settings: { } + type: image_image + region: content + field_workflow_generic: + weight: 4 + settings: { } + third_party_settings: { } + type: workflow_default + region: content + langcode: + type: language_select + weight: 1 + region: content + settings: + include_locked: true + third_party_settings: { } + path: + type: path + weight: 10 + region: content + settings: { } + third_party_settings: { } + promote: + type: boolean_checkbox + settings: + display_label: true + weight: 8 + region: content + third_party_settings: { } + sticky: + type: boolean_checkbox + settings: + display_label: true + weight: 9 + region: content + third_party_settings: { } + title: + type: string_textfield + weight: 0 + region: content + settings: + size: 60 + placeholder: '' + third_party_settings: { } + translation: + weight: 7 + region: content + settings: { } + third_party_settings: { } + uid: + type: entity_reference_autocomplete + weight: 5 + settings: + match_operator: CONTAINS + size: 60 + placeholder: '' + region: content + third_party_settings: { } +hidden: + status: true diff --git a/sites/default/config/sync/core.entity_view_display.node.page.default.yml b/sites/default/config/sync/core.entity_view_display.node.page.default.yml index 3c5ca1167..3341e50c1 100644 --- a/sites/default/config/sync/core.entity_view_display.node.page.default.yml +++ b/sites/default/config/sync/core.entity_view_display.node.page.default.yml @@ -44,6 +44,11 @@ content: type: image region: content links: + weight: 4 + region: content + settings: { } + third_party_settings: { } + production_subtree: weight: 3 region: content settings: { } diff --git a/sites/default/config/sync/core.entity_view_display.node.static.default.yml b/sites/default/config/sync/core.entity_view_display.node.static.default.yml new file mode 100644 index 000000000..6f62bb539 --- /dev/null +++ b/sites/default/config/sync/core.entity_view_display.node.static.default.yml @@ -0,0 +1,43 @@ +uuid: f337a5cf-a11b-44df-a592-060887812b61 +langcode: fr +status: true +dependencies: + config: + - field.field.node.static.body + - field.field.node.static.field_visuel + - field.field.node.static.field_workflow_generic + - image.style.large + - node.type.static + module: + - image + - text + - user +id: node.static.default +targetEntityType: node +bundle: static +mode: default +content: + body: + label: hidden + type: text_default + weight: 1 + settings: { } + third_party_settings: { } + region: content + field_visuel: + weight: 0 + label: hidden + settings: + image_style: large + image_link: '' + third_party_settings: { } + type: image + region: content + links: + weight: 2 + region: content + settings: { } + third_party_settings: { } +hidden: + field_workflow_generic: true + langcode: true diff --git a/sites/default/config/sync/core.entity_view_display.node.static.teaser.yml b/sites/default/config/sync/core.entity_view_display.node.static.teaser.yml new file mode 100644 index 000000000..faa89275b --- /dev/null +++ b/sites/default/config/sync/core.entity_view_display.node.static.teaser.yml @@ -0,0 +1,29 @@ +uuid: 33fe55bd-21da-4359-9040-456be2447915 +langcode: fr +status: true +dependencies: + config: + - core.entity_view_mode.node.teaser + - field.field.node.static.body + - node.type.static + module: + - text + - user +id: node.static.teaser +targetEntityType: node +bundle: static +mode: teaser +content: + body: + label: hidden + type: text_summary_or_trimmed + weight: 101 + settings: + trim_length: 600 + third_party_settings: { } + region: content + links: + weight: 100 + region: content +hidden: + langcode: true diff --git a/sites/default/config/sync/field.field.node.static.body.yml b/sites/default/config/sync/field.field.node.static.body.yml new file mode 100644 index 000000000..312455e5d --- /dev/null +++ b/sites/default/config/sync/field.field.node.static.body.yml @@ -0,0 +1,22 @@ +uuid: 6326e544-751a-4cd6-961f-c0a0089e2889 +langcode: fr +status: true +dependencies: + config: + - field.storage.node.body + - node.type.static + module: + - text +id: node.static.body +field_name: body +entity_type: node +bundle: static +label: Body +description: '' +required: false +translatable: true +default_value: { } +default_value_callback: '' +settings: + display_summary: true +field_type: text_with_summary diff --git a/sites/default/config/sync/field.field.node.static.field_visuel.yml b/sites/default/config/sync/field.field.node.static.field_visuel.yml new file mode 100644 index 000000000..f9921ba18 --- /dev/null +++ b/sites/default/config/sync/field.field.node.static.field_visuel.yml @@ -0,0 +1,45 @@ +uuid: e8ac8c4a-ac74-42ca-ae14-48c7e86fdc7d +langcode: fr +status: true +dependencies: + config: + - field.storage.node.field_visuel + - node.type.static + module: + - content_translation + - image +third_party_settings: + content_translation: + translation_sync: + alt: alt + title: title + file: '0' +id: node.static.field_visuel +field_name: field_visuel +entity_type: node +bundle: static +label: Visuel +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + file_directory: static + file_extensions: 'png gif jpg jpeg' + max_filesize: '' + max_resolution: '' + min_resolution: '' + alt_field: true + alt_field_required: false + title_field: false + title_field_required: false + default_image: + uuid: '' + alt: '' + title: '' + width: null + height: null + handler: 'default:file' + handler_settings: { } +field_type: image diff --git a/sites/default/config/sync/field.field.node.static.field_workflow_generic.yml b/sites/default/config/sync/field.field.node.static.field_workflow_generic.yml new file mode 100644 index 000000000..4ee2d4c57 --- /dev/null +++ b/sites/default/config/sync/field.field.node.static.field_workflow_generic.yml @@ -0,0 +1,22 @@ +uuid: 7d0c5740-34a9-4a6d-91e8-b82aa38b8124 +langcode: fr +status: true +dependencies: + config: + - field.storage.node.field_workflow_generic + - node.type.static + module: + - workflow +id: node.static.field_workflow_generic +field_name: field_workflow_generic +entity_type: node +bundle: static +label: Workflow +description: '' +required: true +translatable: false +default_value: + - { } +default_value_callback: '' +settings: { } +field_type: workflow diff --git a/sites/default/config/sync/language.content_settings.node.static.yml b/sites/default/config/sync/language.content_settings.node.static.yml new file mode 100644 index 000000000..af0b8fc77 --- /dev/null +++ b/sites/default/config/sync/language.content_settings.node.static.yml @@ -0,0 +1,16 @@ +uuid: 5cdb6c82-be6e-4d20-b476-31c1b18e1684 +langcode: fr +status: true +dependencies: + config: + - node.type.static + module: + - content_translation +third_party_settings: + content_translation: + enabled: true +id: node.static +target_entity_type_id: node +target_bundle: static +default_langcode: und +language_alterable: true diff --git a/sites/default/config/sync/node.type.page.yml b/sites/default/config/sync/node.type.page.yml index 24f56fd01..2b02adfa1 100644 --- a/sites/default/config/sync/node.type.page.yml +++ b/sites/default/config/sync/node.type.page.yml @@ -9,9 +9,9 @@ third_party_settings: available_menus: - productions parent: 'productions:' -name: Page +name: 'Page (production)' type: page -description: 'Generic page with wysiwyg' +description: "Content Type exclusively used for productions pages.\r\nFor static pages use Content Type Static." help: '' new_revision: true preview_mode: 1 diff --git a/sites/default/config/sync/node.type.static.yml b/sites/default/config/sync/node.type.static.yml new file mode 100644 index 000000000..ea3b8c226 --- /dev/null +++ b/sites/default/config/sync/node.type.static.yml @@ -0,0 +1,17 @@ +uuid: 8f6c6a17-7d96-4f49-b284-3f4c1c6a11c5 +langcode: fr +status: true +dependencies: + module: + - menu_ui +third_party_settings: + menu_ui: + available_menus: { } + parent: '' +name: 'Page (static)' +type: static +description: 'Content Type used for static pages as about or credit, etc' +help: '' +new_revision: true +preview_mode: 1 +display_submitted: false diff --git a/sites/default/config/sync/user.role.admin.yml b/sites/default/config/sync/user.role.admin.yml index 2061c8c73..374fd6491 100644 --- a/sites/default/config/sync/user.role.admin.yml +++ b/sites/default/config/sync/user.role.admin.yml @@ -23,11 +23,13 @@ permissions: - 'create fil content' - 'create generique workflow_transition' - 'create page content' + - 'create static content' - 'edit any autre_son content' - 'edit any enregistrement content' - 'edit any evenement content' - 'edit any fil content' - 'edit any page content' + - 'edit any static content' - 'edit own enregistrement content' - 'edit terms in collectionneurs' - 'edit terms in entrees' @@ -40,6 +42,7 @@ permissions: - 'revert evenement revisions' - 'revert fil revisions' - 'revert page revisions' + - 'revert static revisions' - 'schedule corpus_documents workflow_transition' - 'schedule generique workflow_transition' - 'translate any entity' @@ -49,4 +52,5 @@ permissions: - 'view evenement revisions' - 'view fil revisions' - 'view page revisions' + - 'view static revisions' - 'view the administration theme' diff --git a/sites/default/config/sync/user.role.root.yml b/sites/default/config/sync/user.role.root.yml index c30286e27..71e525849 100644 --- a/sites/default/config/sync/user.role.root.yml +++ b/sites/default/config/sync/user.role.root.yml @@ -83,6 +83,7 @@ permissions: - 'create fil content' - 'create generique workflow_transition' - 'create page content' + - 'create static content' - 'create url aliases' - 'delete all revisions' - 'delete any autre_son content' @@ -90,6 +91,7 @@ permissions: - 'delete any evenement content' - 'delete any fil content' - 'delete any page content' + - 'delete any static content' - 'delete assigned domains' - 'delete autre_son revisions' - 'delete content translations' @@ -103,7 +105,9 @@ permissions: - 'delete own evenement content' - 'delete own fil content' - 'delete own page content' + - 'delete own static content' - 'delete page revisions' + - 'delete static revisions' - 'delete terms in collectionneurs' - 'delete terms in entrees' - 'delete terms in genres' @@ -115,6 +119,7 @@ permissions: - 'edit any evenement content' - 'edit any fil content' - 'edit any page content' + - 'edit any static content' - 'edit assigned domains' - 'edit domain aliases' - 'edit own autre_son content' @@ -122,6 +127,7 @@ permissions: - 'edit own evenement content' - 'edit own fil content' - 'edit own page content' + - 'edit own static content' - 'edit terms in collectionneurs' - 'edit terms in entrees' - 'edit terms in genres' @@ -138,6 +144,7 @@ permissions: - 'revert evenement revisions' - 'revert fil revisions' - 'revert page revisions' + - 'revert static revisions' - 'schedule corpus_documents workflow_transition' - 'schedule generique workflow_transition' - 'select account cancellation method' @@ -165,4 +172,5 @@ permissions: - 'view own unpublished content' - 'view page revisions' - 'view profile' + - 'view static revisions' - 'view the administration theme'