Commit 8b08a614 authored by mxh's avatar mxh
Browse files

Issue #3270766 by mxh: Support multiple values

parent 98db3686
Loading
Loading
Loading
Loading
+38 −14
Original line number Diff line number Diff line
@@ -156,14 +156,20 @@ abstract class GroupActionBase extends ConfigurableActionBase implements Contain
        $values = $this->decodeValues($values);
      }
      $values_string = '';
      foreach ($values as $k => $v) {
      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) {
    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,14 +277,25 @@ abstract class GroupActionBase extends ConfigurableActionBase implements Contain
        $token_data['group'] = $group;
      }
      $token_options = ['clear' => TRUE];
      foreach ($values as $k => $v) {
      foreach ($values as $k => $vs) {
        if (!is_array($vs)) {
          $vs = [$vs];
          $values[$k] = $vs;
        }
        foreach ($vs as $i => $v) {
          $v = trim((string) $this->token->replace($v, $token_data, $token_options));
          if ($v === '') {
          unset($values[$k]);
            unset($values[$k][$i]);
          }
          else {
          $values[$k] = $v;
            $values[$k][$i] = $v;
          }
        }
      }
    }
    foreach ($values as $k => $vs) {
      if (is_array($vs) && (count($vs) === 1)) {
        $values[$k] = reset($vs);
      }
    }

@@ -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");
    }
+4 −1
Original line number Diff line number Diff line
@@ -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 {

+4 −1
Original line number Diff line number Diff line
@@ -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 {