diff --git a/modules/if_then_else_group/if_then_else_group.libraries.yml b/modules/if_then_else_group/if_then_else_group.libraries.yml
index 15b7a3d..6b47d5f 100644
--- a/modules/if_then_else_group/if_then_else_group.libraries.yml
+++ b/modules/if_then_else_group/if_then_else_group.libraries.yml
@@ -2,5 +2,12 @@ UserRoleToGroupAction:
version: 1.0
js:
src/core/Nodes/Actions/UserRoleToGroupAction/UserRoleToGroupAction.js: {}
+ dependencies:
+ - if_then_else/external
+
+UserRoleInGroupCondition:
+ version: 1.0
+ js:
+ src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.js: {}
dependencies:
- if_then_else/external
\ No newline at end of file
diff --git a/modules/if_then_else_group/if_then_else_group.services.yml b/modules/if_then_else_group/if_then_else_group.services.yml
index 67bb6f5..22ba458 100644
--- a/modules/if_then_else_group/if_then_else_group.services.yml
+++ b/modules/if_then_else_group/if_then_else_group.services.yml
@@ -22,13 +22,13 @@ services:
arguments: ['@entity_type.manager']
tags:
- { name: 'event_subscriber' }
-
+
if_then_else_group_user_role_to_group_action_register:
class: Drupal\if_then_else_group\core\Nodes\Actions\UserRoleToGroupAction\UserRoleToGroupAction
arguments: ['@entity_type.manager']
tags:
- { name: 'event_subscriber' }
-
+
if_then_else_group_user_in_group_condition_register:
class: Drupal\if_then_else_group\core\Nodes\Conditions\UserInGroupCondition\UserInGroupCondition
arguments: ['@entity_type.manager']
@@ -40,3 +40,9 @@ services:
arguments: ['@entity_type.manager']
tags:
- { name: 'event_subscriber' }
+
+ if_then_else_group_user_role_in_group_condition_register:
+ class: Drupal\if_then_else_group\core\Nodes\Conditions\UserRoleInGroupCondition\UserRoleInGroupCondition
+ arguments: ['@entity_type.manager']
+ tags:
+ - { name: 'event_subscriber' }
\ No newline at end of file
diff --git a/modules/if_then_else_group/src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.js b/modules/if_then_else_group/src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.js
new file mode 100644
index 0000000..f991725
--- /dev/null
+++ b/modules/if_then_else_group/src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.js
@@ -0,0 +1,101 @@
+var VueUserRoleInGroupConditionControl = {
+ props: ['emitter', 'ikey', 'getData', 'putData', 'onChange'],
+ components: {
+ Multiselect: window.VueMultiselect.default
+ },
+ data() {
+ return {
+ type: drupalSettings.if_then_else.nodes.user_role_in_group_condition.type,
+ class: drupalSettings.if_then_else.nodes.user_role_in_group_condition.class,
+ name: drupalSettings.if_then_else.nodes.user_role_in_group_condition.name,
+ classArg: drupalSettings.if_then_else.nodes.user_role_in_group_condition.classArg,
+ value: [],
+ options: [],
+ selected_options: [],
+ group_roles: [],
+ selected_roles: [],
+ }
+ },
+ template: `
+
+
+
+
+
+
+
+
+
+
`,
+
+ methods: {
+ fieldValueChanged(value){
+ if(value !== undefined && value !== null && value !== ''){
+ //Triggered when selecting an field.
+ var selectedOptions = [];
+
+ selectedOptions = {name: value.name, code: value.code};
+
+ //check if selected field value is changed.
+ var prevSelectedField = this.getData('selected_options');
+ if(typeof prevSelectedField != 'undefined' && prevSelectedField.code != value.code){
+ this.selected_roles = '';
+ this.putData('selected_roles','');
+ }
+
+ var field_roles = drupalSettings.if_then_else.nodes.user_role_in_group_condition.group_roles
+ this.group_roles = field_roles[value.code];
+ this.putData('selected_options',selectedOptions);
+ editor.trigger('process');
+ }else{
+ this.putData('selected_options','');
+ this.putData('selected_roles','');
+ this.value = '';
+ }
+ },
+ entityFieldValueChanged(value){
+ if(value !== undefined && value !== null && value !== ''){
+ var selected_roles = [];
+ selected_roles.push({name: value.name, code: value.code});
+ this.putData('selected_roles',selected_roles);
+ editor.trigger('process');
+ }
+ },
+ },
+ mounted() {
+ //initialize variable for data
+ this.putData('type',drupalSettings.if_then_else.nodes.user_role_in_group_condition.type);
+ this.putData('class',drupalSettings.if_then_else.nodes.user_role_in_group_condition.class);
+ this.putData('name', drupalSettings.if_then_else.nodes.user_role_in_group_condition.name);
+ this.putData('classArg', drupalSettings.if_then_else.nodes.user_role_in_group_condition.classArg);
+
+ //setting values of selected fields when rule edit page loads.
+ //Setting values of retejs condition nodes when editing rule page loads
+ var get_selected_options = this.getData('selected_options');
+ var get_selected_roles = this.getData('selected_roles');
+ if(typeof get_selected_options != 'undefined'){
+ this.value = get_selected_options;
+ var field_roles = drupalSettings.if_then_else.nodes.user_role_in_group_condition.group_roles
+ this.group_roles = field_roles[get_selected_options.code];
+ this.selected_roles = this.getData('selected_roles');
+ }
+ else {
+ this.putData('selected_options',[]);
+ }
+ },
+ created() {
+ if(drupalSettings.if_then_else.nodes.user_role_in_group_condition.group_types){
+ //setting list of all fields for a form when rule edit page loads.
+ this.options = drupalSettings.if_then_else.nodes.user_role_in_group_condition.group_types;
+ }
+ }
+};
+class UserRoleInGroupConditionControl extends Rete.Control {
+ constructor(emitter, key, onChange) {
+ super(key);
+ this.component = VueUserRoleInGroupConditionControl;
+ this.props = { emitter, ikey: key, onChange};
+ }
+}
diff --git a/modules/if_then_else_group/src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.php b/modules/if_then_else_group/src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.php
new file mode 100644
index 0000000..39d2561
--- /dev/null
+++ b/modules/if_then_else_group/src/core/Nodes/Conditions/UserRoleInGroupCondition/UserRoleInGroupCondition.php
@@ -0,0 +1,155 @@
+entityTypeManager = $entity_manager;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getName() {
+ return 'user_role_in_group_condition';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function registerNode(NodeSubscriptionEvent $event) {
+ $groups = $this->entityTypeManager->getStorage('group_type')->loadMultiple();
+ $group_list = [];
+ foreach ($groups as $group_id => $group) {
+ if (!empty($group->getRoleIds(FALSE))) {
+ $group_list[$group_id]['name'] = $group->label();
+ $group_list[$group_id]['code'] = $group_id;
+ $group_roles = $group->getRoles(FALSE);
+
+ foreach ($group_roles as $group_role) {
+ $group_list[$group_id]['roles'][] = [
+ 'code' => $group_role->id(),
+ 'name' => $group_role->label(),
+ ];
+ }
+ }
+ }
+
+ $group_array = [];
+ $i = 0;
+ $group_roles = [];
+ foreach ($group_list as $group_type) {
+ $group_array[$i]['name'] = $group_type['name'];
+ $group_array[$i]['code'] = $group_type['code'];
+
+ $j = 0;
+ foreach ($group_type['roles'] as $roles) {
+ $group_roles[$group_type['code']][$j]['code'] = $roles['code'];
+ $group_roles[$group_type['code']][$j]['name'] = $roles['name'];
+ $j++;
+ }
+ $i++;
+ }
+
+ $event->nodes[static::getName()] = [
+ 'label' => $this->t('User Role In Group'),
+ 'type' => 'condition',
+ 'class' => 'Drupal\\if_then_else_group\\core\\Nodes\\Conditions\\UserRoleInGroupCondition\\UserRoleInGroupCondition',
+ 'classArg' => ['entity_type.manager'],
+ 'dependencies' => ['group', 'if_then_else_group'],
+ 'library' => 'if_then_else_group/UserRoleInGroupCondition',
+ 'control_class_name' => 'UserRoleInGroupConditionControl',
+ 'group_types' => $group_array,
+ 'group_roles' => $group_roles,
+ 'inputs' => [
+ 'user' => [
+ 'label' => $this->t('User Id / User object'),
+ 'description' => $this->t('User Id or User object.'),
+ 'sockets' => ['number', 'object.entity.user'],
+ 'required' => TRUE,
+ ],
+ 'group_id' => [
+ 'label' => $this->t('Group Id'),
+ 'description' => $this->t('The group id to add the user.'),
+ 'sockets' => ['number'],
+ 'required' => TRUE,
+ ],
+ ],
+ 'outputs' => [
+ 'success' => [
+ 'label' => $this->t('Success'),
+ 'description' => $this->t('Does the user in group(s)?'),
+ 'socket' => 'bool',
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * Validation function.
+ */
+ public function validateNode(NodeValidationEvent $event) {
+ $data = $event->node->data;
+ if (empty($data->selected_options)) {
+ $event->errors[] = $this->t('Selected a options name to fetch it\'s value in "@node_name".', ['@node_name' => $event->node->name]);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function process() {
+ $user = $this->inputs['user'];
+ $group_id = $this->inputs['group_id'];
+ if (is_numeric($user)) {
+ $user = $this->entityTypeManager->getStorage('user')->load($user);
+ if (empty($user)) {
+ $this->setSuccess(FALSE);
+ return;
+ }
+ }
+ elseif (!$user instanceof UserInterface) {
+ $this->setSuccess(FALSE);
+ return;
+ }
+
+ $group = Group::load($group_id);
+ $member = $group->getMember($user);
+ if ($member != NULL) {
+ $list_role = $member->getRoles();
+ $selected_roles = array_shift($this->data->selected_roles);
+ if (array_key_exists($selected_roles->code, $list_role)) {
+ $this->setSuccess(TRUE);
+ }
+ else {
+ $this->setSuccess(FALSE);
+ return;
+ }
+ }
+ }
+}