Skip to content
Snippets Groups Projects
Commit 8b08a614 authored by mxh's avatar mxh
Browse files

Issue #3270766 by mxh: Support multiple values

parent 98db3686
No related branches found
No related tags found
No related merge requests found
......@@ -156,14 +156,20 @@ abstract class GroupActionBase extends ConfigurableActionBase implements Contain
$values = $this->decodeValues($values);
}
$values_string = '';
foreach ($values as $k => $v) {
$values_string .= "${k}: ${v}\n";
foreach ($values as $k => $vs) {
if (!is_array($vs)) {
$vs = [$vs];
$values[$k] = $vs;
}
foreach ($vs as $v) {
$values_string .= "${k}: ${v}\n";
}
}
$form['values'] = [
'#type' => 'textarea',
'#title' => $this->t('Group content values'),
'#default_value' => $this->configuration['values'] ?? '',
'#description' => $this->t('A key-value list of raw field values to set for the Group content. Supports tokens. Set one value per line. Example:<em><br/>field_mynumber: 1<br/>group_roles: mygroup-myrole</em>'),
'#default_value' => $values_string,
'#description' => $this->t('A key-value list of raw field values to set for the Group content. Supports tokens. Set one value per line. Example:<em><br/>field_mynumber: 1<br/>group_roles: mygroup-myrole1<br/>group_roles: mygroup-myrole2</em>'),
];
}
if ((($this->configuration['operation'] ?? 'create') === 'create') && ($this->configuration['content_plugin'] ?? 'group_membership') !== 'group_membership') {
......@@ -252,9 +258,16 @@ abstract class GroupActionBase extends ConfigurableActionBase implements Contain
$values = $this->configuration['values'] ?? [];
$values_contain_token = FALSE;
foreach ($values as $k => $v) {
if (!empty($v) && strpos($v, '[') !== FALSE) {
$values_contain_token = TRUE;
foreach ($values as $k => $vs) {
if (!is_array($vs)) {
$vs = [$vs];
$values[$k] = $vs;
}
foreach ($vs as $v) {
if (!empty($v) && strpos($v, '[') !== FALSE) {
$values_contain_token = TRUE;
break 2;
}
}
}
if ($values_contain_token) {
......@@ -264,16 +277,27 @@ abstract class GroupActionBase extends ConfigurableActionBase implements Contain
$token_data['group'] = $group;
}
$token_options = ['clear' => TRUE];
foreach ($values as $k => $v) {
$v = trim((string) $this->token->replace($v, $token_data, $token_options));
if ($v === '') {
unset($values[$k]);
foreach ($values as $k => $vs) {
if (!is_array($vs)) {
$vs = [$vs];
$values[$k] = $vs;
}
else {
$values[$k] = $v;
foreach ($vs as $i => $v) {
$v = trim((string) $this->token->replace($v, $token_data, $token_options));
if ($v === '') {
unset($values[$k][$i]);
}
else {
$values[$k][$i] = $v;
}
}
}
}
foreach ($values as $k => $vs) {
if (is_array($vs) && (count($vs) === 1)) {
$values[$k] = reset($vs);
}
}
if ($operation === 'create') {
$may_add = TRUE;
......@@ -364,7 +388,7 @@ abstract class GroupActionBase extends ConfigurableActionBase implements Contain
while ($tok !== false) {
[$k, $v] = array_merge(explode(':', $tok, 2), ['']);
if (trim($k) !== '') {
$values[trim($k)] = trim($v);
$values[trim($k)][] = trim($v);
}
$tok = strtok("\n");
}
......
......@@ -8,8 +8,11 @@ namespace Drupal\group_action\Plugin\Action;
* @Action(
* id = "group_add_content",
* label = "Group: add content",
* type = "entity"
* type = "node"
* )
*
* @TODO, support multiple entity types once core is fixed.
* @see https://www.drupal.org/node/2011038
*/
class GroupAddContent extends GroupActionBase {
......
......@@ -8,8 +8,11 @@ namespace Drupal\group_action\Plugin\Action;
* @Action(
* id = "group_remove_content",
* label = "Group: remove content",
* type = "entity"
* type = "node"
* )
*
* @TODO, support multiple entity types once core is fixed.
* @see https://www.drupal.org/node/2011038
*/
class GroupRemoveContent extends GroupActionBase {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment