You are here

public static function RocketChatGroupHelper::rebuildRocketchatState in Rocket.Chat 8.2

1 call to RocketChatGroupHelper::rebuildRocketchatState()
RocketChatSettingsForm::groupsSubmitForm in src/Form/RocketChatSettingsForm.php
Alternative submit handler for Button Precces that do not safe.

File

src/Form/RocketChatGroupHelper.php, line 23

Class

RocketChatGroupHelper

Namespace

Drupal\rocket_chat\Form

Code

public static function rebuildRocketchatState(array &$form, FormStateInterface $form_state = NULL) {
  $rcState = new Drupal8State(Drupal::service('state'));
  $apiConfig = new Drupal8Config(Drupal::configFactory(), Drupal::moduleHandler(), Drupal::state(), Drupal::messenger());
  $apiClient = new ApiClient($apiConfig);
  $Channels = new Channels($rcState, $apiClient);
  $Channels
    ->refreshCache(TRUE);
  $Groups = new Groups($rcState, $apiClient);
  $Groups
    ->refreshCache(TRUE);
  $Users = new Users($rcState, $apiClient);
  $Users
    ->refreshCache(TRUE);
  if ($apiConfig
    ->isReady()) {

    /** @var \Drupal\Core\Entity\EntityFieldManager $entityfieldManager */
    $entityfieldManager = Drupal::service('entity_field.manager');

    /** @var array $fieldMapping */
    $fieldMapping = $entityfieldManager
      ->getFieldMapByFieldType('channel');

    /** @var \Drupal\Core\Entity\Query\QueryInterface $groupseq */
    $groupseq = Drupal::entityQuery("group");
    $machineNames = [];
    foreach ($fieldMapping['group'] as $machinename => $definition) {
      $groupseq
        ->exists($machinename);
      $machineNames[] = $machinename;
    }
    $groups = Group::loadMultiple($groupseq
      ->execute());
    foreach ($groups as $group) {

      /** @var \Drupal\Core\Field\FieldItemListInterface[] $fields */
      $fields = $group
        ->getFields(FALSE);
      $fieldValue = [];
      foreach ($machineNames as $machineName) {
        foreach ($fields[$machineName]
          ->getValue() as $channelValues) {
          $value = $channelValues['value'];
          $fieldValue[] = $value;
        }
      }

      /** @var \Drupal\user\Entity\User $groupOwner */
      $groupOwner = $group
        ->getOwner();
      $owner = new User($rcState, $groupOwner
        ->getAccountName(), $groupOwner
        ->getEmail(), $groupOwner
        ->getDisplayName());

      /** @var \Drupal\group\GroupMembership[] $groupMembers */
      $groupMembers = $group
        ->getMembers();
      $members = [];
      foreach ($groupMembers as $groupMember) {
        $groupMemberUser = $groupMember
          ->getUser();
        $member = new User($rcState, $groupMemberUser
          ->getAccountName(), $groupMemberUser
          ->getEmail(), $groupMemberUser
          ->getDisplayName());
        $members[] = $member;
        try {
          $member
            ->getUserProxy($apiClient);
        } catch (Exception $e) {

          //TODO log user proxy failure!.
        }
      }
      $type = $group
        ->bundle();
      $Channels = [];
      foreach ($fieldValue as $channelName) {
        $Channel = new Channel(NULL, $fieldValue[0]);
        $Channels[] = $Channel;
        $Channel
          ->setOwner($owner);
        moduleHelper::updateChannelType($type, $Channel);
        try {
          $Channel
            ->getChannelProxy($apiClient);
          $Channel
            ->addMembers($apiClient, $members);
        } catch (Exception $e) {

          //Todo log proxy failure
        }
      }
      Drupal::messenger()
        ->addStatus("Group Channel | " . json_encode($fieldValue) . " | Group Type | " . json_encode($type) . " | Members " . count($members));
    }
  }
  else {
    Drupal::messenger()
      ->addError("Rocket Chat connection Failed");
    if (!empty($form_state)) {
      $form_state
        ->setErrorByName('url', "Rocket Chat connection Failed, is this correct?");
    }
  }
}