You are here

public function GroupChannel::preSave in Rocket.Chat 8.2

@inheritDoc

Overrides FieldItemBase::preSave

File

modules/rocket_chat_group/src/Plugin/Field/FieldType/GroupChannel.php, line 140

Class

GroupChannel
Class GroupChannel

Namespace

Drupal\rocket_chat_group\Plugin\Field\FieldType

Code

public function preSave() {
  parent::preSave();
  $entity = $this
    ->getEntity();
  if ($entity
    ->isNew()) {
    $isNew = $entity
      ->isNew();
    $logger = Drupal::logger("Rocket Chat Group Channel");
    $logger
      ->info("Channel Created [" . $this
      ->get('value')
      ->getValue() . "]");
  }
  else {
    $original = $entity->original;
    $fd = $this
      ->getFieldDefinition();
    $newValue = $this
      ->get('value')
      ->getValue();
    $oldValue = $original
      ->get($fd
      ->getName())
      ->getValue()[0]['value'];
    $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);
    $channelsList = $channels
      ->getCache();
    $safeChannelName = Channel::toSafeChannelName($oldValue);
    $channelList = [];
    foreach ($channelsList as $channelList) {
      if (strcmp($channelList['name'], $safeChannelName) === 0) {
        break;
      }
      else {
        $channelList = [];
      }
    }
    if (empty($channelList)) {
      $channels = new Groups($rcState, $apiClient);
      $channelsList = $channels
        ->getCache();
      $channelList = [];
      foreach ($channelsList as $channelList) {
        if (strcmp($channelList['name'], $safeChannelName) === 0) {
          break;
        }
        else {
          $channelList = [];
        }
      }
    }
    $channelType = 0;
    if (isset($channelList['t'])) {
      switch ($channelList['t']) {
        case "c":

          //channel
          $channelType = $channelType | Channel::PUBLIC_CHANNEL;
          break;
        case "p":

          //group
          $channelType = $channelType | Channel::PRIVATE_CHANNEL;
          break;
      }
    }
    if (isset($channelList['ro'])) {
      if (!$channelList['ro']) {
        $channelType = $channelType | Channel::WRITE;
      }
      $channelType = $channelType | Channel::READ;
    }
    if ($channelType > 0) {
      $channel = new Channel($channelType, $oldValue);
      $cp = $channel
        ->getChannelProxy($apiClient);
      $channel
        ->changeChannelName($apiClient, $newValue);

      //not renameing non existant channel
    }
  }
}