diff --git a/src/composer.json b/src/composer.json index 240a214..55f6fbd 100644 --- a/src/composer.json +++ b/src/composer.json @@ -25,7 +25,7 @@ "drupal/flexible_permissions": "@beta", "drupal/genpass": "^1.1", "drupal/graphql": "4.x-dev@dev", - "drupal/group": "^3.0@beta", + "drupal/group": "3.0.x-dev@dev", "drupal/mail_login": "^2.6", "drupal/paragraphs": "^1.15", "drupal/restui": "^1.21", diff --git a/src/composer.lock b/src/composer.lock index fb9b2e8..5d58fe8 100644 --- a/src/composer.lock +++ b/src/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "738ea5aca8b978a6f7588d32987b2071", + "content-hash": "5365133aecbc598c646688e7709f48d0", "packages": [ { "name": "alchemy/zippy", @@ -5530,17 +5530,11 @@ }, { "name": "drupal/group", - "version": "3.0.0-beta3", + "version": "dev-3.0.x", "source": { "type": "git", "url": "https://git.drupalcode.org/project/group.git", - "reference": "3.0.0-beta3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/group-3.0.0-beta3.zip", - "reference": "3.0.0-beta3", - "shasum": "87717e1c5defe6157435683bb4ff052c02293863" + "reference": "cf02cb68fc355ff4221910e3d68e128252b1bb81" }, "require": { "drupal/core": "^9 || ^10", @@ -5549,12 +5543,15 @@ }, "type": "drupal-module", "extra": { + "branch-alias": { + "dev-3.0.x": "3.0.x-dev" + }, "drupal": { - "version": "3.0.0-beta3", - "datestamp": "1661862170", + "version": "3.0.0-beta3+1-dev", + "datestamp": "1662110070", "security-coverage": { "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." + "message": "Dev releases are not covered by Drupal security advisories." } } }, @@ -14038,7 +14035,7 @@ "drupal/audiofield": 20, "drupal/flexible_permissions": 10, "drupal/graphql": 20, - "drupal/group": 10, + "drupal/group": 20, "drupal/typed_data": 20, "drupal/autocomplete_deluxe": 5, "drupal/better_exposed_filters": 10, diff --git a/src/config/sync/amswap.amswapconfig.yml b/src/config/sync/amswap.amswapconfig.yml index fbb38ed..9490feb 100644 --- a/src/config/sync/amswap.amswapconfig.yml +++ b/src/config/sync/amswap.amswapconfig.yml @@ -5,3 +5,9 @@ role_menu_pairs: - role: admin menu: administrator + - + role: group_admin + menu: administrator + - + role: group_member + menu: administrator diff --git a/src/config/sync/core.entity_form_display.group_relationship.bourgeon-group_membership.default.yml b/src/config/sync/core.entity_form_display.group_relationship.bourgeon-group_membership.default.yml index ede48bf..7f6fd06 100644 --- a/src/config/sync/core.entity_form_display.group_relationship.bourgeon-group_membership.default.yml +++ b/src/config/sync/core.entity_form_display.group_relationship.bourgeon-group_membership.default.yml @@ -5,8 +5,6 @@ dependencies: config: - field.field.group_relationship.bourgeon-group_membership.group_roles - group.relationship_type.bourgeon-group_membership - module: - - path id: group_relationship.bourgeon-group_membership.default targetEntityType: group_relationship bundle: bourgeon-group_membership @@ -14,7 +12,7 @@ mode: default content: entity_id: type: entity_reference_autocomplete - weight: 1 + weight: 0 region: content settings: match_operator: CONTAINS @@ -24,31 +22,11 @@ content: third_party_settings: { } group_roles: type: options_buttons - weight: 3 + weight: 1 region: content settings: { } third_party_settings: { } - langcode: - type: language_select - weight: 0 - region: content - settings: - include_locked: true - third_party_settings: { } - path: - type: path - weight: 2 - region: content - settings: { } - third_party_settings: { } - uid: - type: entity_reference_autocomplete - weight: 4 - region: content - settings: - match_operator: CONTAINS - match_limit: 10 - size: 60 - placeholder: '' - third_party_settings: { } -hidden: { } +hidden: + langcode: true + path: true + uid: true diff --git a/src/config/sync/core.entity_view_display.group_relationship.bourgeon-group_membership.default.yml b/src/config/sync/core.entity_view_display.group_relationship.bourgeon-group_membership.default.yml index 9cfda88..3f9fb72 100644 --- a/src/config/sync/core.entity_view_display.group_relationship.bourgeon-group_membership.default.yml +++ b/src/config/sync/core.entity_view_display.group_relationship.bourgeon-group_membership.default.yml @@ -10,16 +10,23 @@ targetEntityType: group_relationship bundle: bourgeon-group_membership mode: default content: + entity_id: + type: entity_reference_label + label: above + settings: + link: true + third_party_settings: { } + weight: 0 + region: content group_roles: type: entity_reference_label label: above settings: link: false third_party_settings: { } - weight: -4 + weight: 1 region: content hidden: - entity_id: true langcode: true search_api_excerpt: true uid: true diff --git a/src/config/sync/group.relationship_type.bourgeon-group_node-concernement.yml b/src/config/sync/group.relationship_type.bourgeon-group_node-concernement.yml new file mode 100644 index 0000000..a60b8f9 --- /dev/null +++ b/src/config/sync/group.relationship_type.bourgeon-group_node-concernement.yml @@ -0,0 +1,17 @@ +uuid: c9499d4c-271f-4de2-80aa-9b676838a14f +langcode: fr +status: true +dependencies: + config: + - group.type.bourgeon + - node.type.concernement + module: + - gnode + - node +id: bourgeon-group_node-concernement +group_type: bourgeon +content_plugin: 'group_node:concernement' +plugin_config: + group_cardinality: 0 + entity_cardinality: 1 + use_creation_wizard: false diff --git a/src/config/sync/group.relationship_type.bourgeon-group_node-entite.yml b/src/config/sync/group.relationship_type.bourgeon-group_node-entite.yml new file mode 100644 index 0000000..148a3f3 --- /dev/null +++ b/src/config/sync/group.relationship_type.bourgeon-group_node-entite.yml @@ -0,0 +1,17 @@ +uuid: 0a5ed664-438a-4434-9bec-00dd1402daef +langcode: fr +status: true +dependencies: + config: + - group.type.bourgeon + - node.type.entite + module: + - gnode + - node +id: bourgeon-group_node-entite +group_type: bourgeon +content_plugin: 'group_node:entite' +plugin_config: + group_cardinality: 0 + entity_cardinality: 1 + use_creation_wizard: false diff --git a/src/config/sync/group.role.bourgeon-admin_indiv.yml b/src/config/sync/group.role.bourgeon-admin_indiv.yml new file mode 100644 index 0000000..f0af7e9 --- /dev/null +++ b/src/config/sync/group.role.bourgeon-admin_indiv.yml @@ -0,0 +1,12 @@ +uuid: 21139a98-5b43-45a4-8c43-d9d134a6e492 +langcode: fr +status: true +dependencies: { } +id: bourgeon-admin_indiv +label: admin +weight: null +admin: true +scope: individual +global_role: null +group_type: bourgeon +permissions: { } diff --git a/src/config/sync/group.role.bourgeon-member.yml b/src/config/sync/group.role.bourgeon-member.yml index 9021e7f..07fbf92 100644 --- a/src/config/sync/group.role.bourgeon-member.yml +++ b/src/config/sync/group.role.bourgeon-member.yml @@ -12,3 +12,9 @@ group_type: bourgeon permissions: - 'view group' - 'view group_membership relationship' + - 'create group_node:concernement entity' + - 'view unpublished group_node:concernement entity' + - 'view group_node:concernement entity' + - 'create group_node:entite entity' + - 'view unpublished group_node:entite entity' + - 'access group_node overview' diff --git a/src/config/sync/group.role.bourgeon-member_indiv.yml b/src/config/sync/group.role.bourgeon-member_indiv.yml new file mode 100644 index 0000000..4cc54d8 --- /dev/null +++ b/src/config/sync/group.role.bourgeon-member_indiv.yml @@ -0,0 +1,20 @@ +uuid: d5b298ce-ff97-4b13-884d-959cff923a7a +langcode: fr +status: true +dependencies: { } +id: bourgeon-member_indiv +label: member +weight: null +admin: false +scope: individual +global_role: null +group_type: bourgeon +permissions: + - 'view group' + - 'view group_membership relationship' + - 'access group_node overview' + - 'create group_node:concernement entity' + - 'view unpublished group_node:concernement entity' + - 'view group_node:concernement entity' + - 'create group_node:entite entity' + - 'view unpublished group_node:entite entity' diff --git a/src/config/sync/group.type.bourgeon.yml b/src/config/sync/group.type.bourgeon.yml index 34f6335..1b049a7 100644 --- a/src/config/sync/group.type.bourgeon.yml +++ b/src/config/sync/group.type.bourgeon.yml @@ -6,6 +6,6 @@ id: bourgeon label: Bourgeon description: '' new_revision: true -creator_membership: true -creator_wizard: true +creator_membership: false +creator_wizard: false creator_roles: { } diff --git a/src/config/sync/user.role.group_admin.yml b/src/config/sync/user.role.group_admin.yml index ac9ce1a..7c4bf13 100644 --- a/src/config/sync/user.role.group_admin.yml +++ b/src/config/sync/user.role.group_admin.yml @@ -2,18 +2,38 @@ uuid: 0dd28526-9c5f-46ce-a40d-8889503e420b langcode: fr status: true dependencies: + config: + - node.type.concernement + - node.type.entite module: - administerusersbyrole + - node - role_delegation + - system + - toolbar id: group_admin label: 'group admin' weight: -3 is_admin: null permissions: + - 'access administration pages' + - 'access toolbar' - 'access users overview' - 'assign group_member role' - 'cancel users with role group_member' + - 'create concernement content' + - 'create entite content' - 'create users' + - 'edit own concernement content' + - 'edit own entite content' + - 'edit users by role' - 'edit users with role group_member' + - 'revert concernement revisions' + - 'revert entite revisions' - 'role-assign users with role group_member' + - 'view concernement revisions' + - 'view entite revisions' + - 'view own unpublished content' + - 'view the administration theme' + - 'view users by role' - 'view users with role group_member' diff --git a/src/config/sync/user.role.group_member.yml b/src/config/sync/user.role.group_member.yml index 9365857..ab34099 100644 --- a/src/config/sync/user.role.group_member.yml +++ b/src/config/sync/user.role.group_member.yml @@ -1,9 +1,28 @@ uuid: b00d65da-067b-449f-85e1-8b38ac043348 langcode: fr status: true -dependencies: { } +dependencies: + config: + - node.type.concernement + - node.type.entite + module: + - node + - system + - toolbar id: group_member label: 'group member' weight: -2 is_admin: null -permissions: { } +permissions: + - 'access administration pages' + - 'access toolbar' + - 'create concernement content' + - 'create entite content' + - 'edit own concernement content' + - 'edit own entite content' + - 'revert concernement revisions' + - 'revert entite revisions' + - 'view concernement revisions' + - 'view entite revisions' + - 'view own unpublished content' + - 'view the administration theme' diff --git a/src/web/modules/custom/ouatt_graphql/graphql/ouatt_extension.base.graphqls b/src/web/modules/custom/ouatt_graphql/graphql/ouatt_extension.base.graphqls index 04b96d0..5f9225c 100644 --- a/src/web/modules/custom/ouatt_graphql/graphql/ouatt_extension.base.graphqls +++ b/src/web/modules/custom/ouatt_graphql/graphql/ouatt_extension.base.graphqls @@ -55,6 +55,7 @@ type Group { description: String owner: User members: [User] + concernements: [Concernement] } # type GroupMember { @@ -67,6 +68,8 @@ type User { email: String username: String roles: [String] + concernements: [Concernement] + groups: [Group] } # type Role { diff --git a/src/web/modules/custom/ouatt_graphql/src/Plugin/GraphQL/SchemaExtension/OuattSchemaExtension.php b/src/web/modules/custom/ouatt_graphql/src/Plugin/GraphQL/SchemaExtension/OuattSchemaExtension.php index 4ea92bc..a8737ef 100644 --- a/src/web/modules/custom/ouatt_graphql/src/Plugin/GraphQL/SchemaExtension/OuattSchemaExtension.php +++ b/src/web/modules/custom/ouatt_graphql/src/Plugin/GraphQL/SchemaExtension/OuattSchemaExtension.php @@ -536,17 +536,20 @@ class OuattSchemaExtension extends SdlSchemaExtensionPluginBase { ) ); - - // // GroupMembers - // $registry->addFieldResolver('GroupMember', 'id', - // $builder->produce('entity_id') - // ->map('entity', $builder->fromParent()) - // ); + // $registry->addFieldResolver('Group', 'concernements', + // $builder->compose( + // $builder->callback(function ($parent, $args) { + // $memberships = $parent->getMembers(); + // $users = []; + // foreach ($memberships as $member) { + // $users[] = $member->getUser(); + // } + // return $users; + // }), - // $registry->addFieldResolver('GroupMember', 'user', - // $builder->produce('entity_id') - // ->map('entity', $builder->fromParent()) + // ) // ); + } // __ __ @@ -592,6 +595,47 @@ class OuattSchemaExtension extends SdlSchemaExtensionPluginBase { // $builder->produce('entity_label') // ->map('entity', $builder->fromParent()) // ); + + $registry->addFieldResolver('User', 'concernements', + $builder->compose( + $builder->callback(function($parent, $arg){ + $entity_storage = \Drupal::entityTypeManager()->getStorage('node'); + $query = $entity_storage->getQuery() + ->condition('type', ['concernement'], 'IN') + ->condition('uid', $parent->id()) + ->accessCheck(TRUE); + $results = $query->execute(); + return $results; + }), + $builder->produce('entity_load_multiple') + ->map('type', $builder->fromValue('node')) + ->map('ids', $builder->fromParent()) + ) + ); + + $registry->addFieldResolver('User', 'groups', + $builder->compose( + $builder->callback(function($parent, $arg){ + $group_relationship_storage = \Drupal::entityTypeManager()->getStorage('group_relationship'); + + $query = $group_relationship_storage->getQuery() + ->condition('entity_id', $parent->id()) + ->accessCheck(TRUE); + $group_relationship_ids = $query->execute(); + + $group_relationships = $group_relationship_storage->loadMultiple($group_relationship_ids); + + $group_ids = []; + foreach ($group_relationships as $group_relationship) { + $group_ids[] = $group_relationship->getGroupId(); + } + return $group_ids; + }), + $builder->produce('entity_load_multiple') + ->map('type', $builder->fromValue('group')) + ->map('ids', $builder->fromParent()) + ) + ); }