You are here

class CmisRepositoryController in CMIS API 3.0.x

Same name and namespace in other branches
  1. 8.2 src/Controller/CmisRepositoryController.php \Drupal\cmis\Controller\CmisRepositoryController
  2. 8 src/Controller/CmisRepositoryController.php \Drupal\cmis\Controller\CmisRepositoryController

Class CmisRepositoryController.

@package Drupal\cmis\Controller

Hierarchy

Expanded class hierarchy of CmisRepositoryController

3 files declare their use of CmisRepositoryController
CmisBrowserDocumentUploadForm.php in src/Form/CmisBrowserDocumentUploadForm.php
CmisCreateFolderForm.php in src/Form/CmisCreateFolderForm.php
CmisFieldBrowserBuilder.php in src/Service/CmisFieldBrowserBuilder.php

File

src/Controller/CmisRepositoryController.php, line 21

Namespace

Drupal\cmis\Controller
View source
class CmisRepositoryController extends ControllerBase {

  /**
   * The browser object.
   *
   * @var browser
   */
  private $browser;

  /**
   * Call the CmisConnectionApi class.
   *
   * @var \Drupal\cmis\CmisConnectionApi
   */
  private $connection;

  /**
   * Construct.
   *
   * @param string $config
   *   Entity label.
   * @param string $folder_id
   *   CMIS folder id.
   * @param array $additional_settings
   *   Show additional_settings in field browser formatter.
   */
  public function __construct($config = '', $folder_id = '', array $additional_settings = []) {
    if (!empty($config) && !empty($folder_id)) {
      $this
        ->initBrowser($config, $folder_id, $additional_settings);
    }
  }

  /**
   * Browse.
   *
   * @param string $config
   *   Entity label.
   * @param string $folder_id
   *   CMIS folder id.
   *
   * @return array
   *   Return cmis browser render array or warning.
   */
  public function browse($config = '', $folder_id = '') {
    $entity_config = \Drupal::service('cmis.connection_api')
      ->getConfigFromId($config);
    if (empty($this->browser)) {
      if ($entity_config
        ->getCmisRootFolder() && empty($folder_id)) {
        $folder_id = $entity_config
          ->getCmisRootFolder();
      }
      $this
        ->initBrowser($config, $folder_id);
    }
    if (!empty($this->browser
      ->getCurrent())) {
      $cacheable = $this->browser
        ->getConnection()
        ->getConfig()
        ->getCmisCacheable();
      return $this->browser
        ->browse(!$cacheable);
    }
    return [];
  }

  /**
   * Get properties.
   *
   * @param string $config
   *   Entity label.
   * @param string $document_id
   *   CMIS document id.
   *
   * @return array
   *   Return properties table render array.
   */
  public function getProperties($config = '', $document_id = '') {
    if (empty($this->browser)) {
      $this
        ->initBrowser($config, $document_id);
    }
    if (!empty($this->browser
      ->getCurrent())) {
      return $this->browser
        ->getDocumentProperties();
    }
  }

  /**
   * Object delete verify popup.
   *
   * @param string $config
   *   Entity label.
   * @param string $object_id
   *   CMIS objet id.
   */
  public function objectDeleteVerify($config = '', $object_id = '') {
    $parameters = \Drupal::request()->query
      ->all();
    unset($parameters['_wrapper_format']);
    $type = '';
    $name = '';
    if (!empty($parameters['type']) && !empty($config) && !empty($object_id) && (!empty($parameters['parent']) || !empty($parameters['query_string']))) {
      $this
        ->setConnection($config);
      if ($this->connection) {
        if ($current = $this->connection
          ->getObjectById($object_id)) {
          $type = $current
            ->getBaseTypeId()
            ->__toString();
          $name = $current
            ->getName();
        }
        else {
          return [
            '#theme' => 'cmis_object_delete_verify',
            '#title' => $this
              ->t("Object can't delete"),
            '#description' => $this
              ->t('Object not found in repository.'),
            '#link' => '',
          ];
        }
      }
    }
    else {
      return [
        '#theme' => 'cmis_object_delete_verify',
        '#title' => $this
          ->t("Object can't delete"),
        '#description' => $this
          ->t('Argument or parameter missed.'),
        '#link' => '',
      ];
    }
    $args = [
      '@type' => str_replace('cmis:', '', $type),
      '@name' => $name,
    ];
    $url = Url::fromUserInput('/cmis/object-delete/' . $config . '/' . $object_id);
    $link_options = [
      'query' => $parameters,
    ];
    $url
      ->setOptions($link_options);
    $path = Link::fromTextAndUrl($this
      ->t('Delete'), $url)
      ->toRenderable();
    $link = render($path);
    return [
      '#theme' => 'cmis_object_delete_verify',
      '#title' => $this
        ->t('Are you sure you want to delete @type name @name', $args),
      '#description' => $this
        ->t('This action cannot be undone.'),
      '#link' => $link,
    ];
  }

  /**
   * Object delete popup.
   *
   * @param string $config
   *   Entity label.
   * @param string $object_id
   *   CMIS object id.
   */
  public function objectDelete($config = '', $object_id = '') {
    $parameters = \Drupal::request()->query
      ->all();
    if (!empty($parameters['type']) && !empty($config) && !empty($object_id) && (!empty($parameters['parent']) || !empty($parameters['query_string']))) {
      switch ($parameters['type']) {
        case 'browser':
          $redirect = $this
            ->redirect('cmis.cmis_repository_controller_browser', [
            'config' => $config,
          ]);
          break;
        case 'query':
          $parameters += [
            'config' => $config,
          ];
          $redirect = $this
            ->redirect('cmis.cmis_query_form_callback', [], [
            'query' => $parameters,
          ]);
          break;
        default:

          // Back to frontpage if not browser or not query.
          $redirect = new RedirectResponse('/');
      }
      $this
        ->setConnection($config);
      if ($this->connection) {
        $root = $this->connection
          ->getRootFolder();
        if ($root
          ->getId() != $object_id && ($current = $this->connection
          ->getObjectById($object_id))) {

          // Exists object and not root folder.
          $type = $current
            ->getBaseTypeId()
            ->__toString();
          $name = $current
            ->getName();
          $args = [
            '@type' => str_replace('cmis:', '', $type),
            '@name' => $name,
          ];
          $current
            ->delete(TRUE);
          $this
            ->messenger()
            ->addStatus($this
            ->t('The @type name @name has now been deleted.', $args));
          if ($parameters['type'] == 'browser') {
            $redirect = $this
              ->redirect('cmis.cmis_repository_controller_browser', [
              'config' => $config,
              'folder_id' => $parameters['parent'],
            ]);
          }
        }
        else {
          if ($root
            ->getId() != $object_id) {
            $this
              ->messenger()
              ->addWarning($this
              ->t('Could not delete object. Object is not exists in repository.'));
          }
          else {
            $this
              ->messenger()
              ->addWarning($this
              ->t('Could not delete root folder.'));
          }
        }
      }
    }
    else {
      $this
        ->messenger()
        ->addWarning($this
        ->t('Argument or parameter missed.'));

      // Back to frontpage.
      $redirect = new RedirectResponse('/');
    }
    return $redirect;
  }

  /**
   * Set connection.
   *
   * @param string $config
   *   The connection ID.
   */
  private function setConnection($config = '') {
    if (!empty($config)) {
      if ($this->connection = new CmisConnectionApi($config)) {
        $this->connection
          ->setDefaultParameters();
      }
    }
  }

  /**
   * Init browser.
   *
   * @param string $config
   *   Entity label.
   * @param string $folder_id
   *   CMIS folder id.
   * @param array $additional_settings
   *   Show additional_settings in field browser formatter.
   *
   * @return array|void
   *   A renderable array in case of error.
   */
  private function initBrowser($config, $folder_id, array $additional_settings = []) {
    \Drupal::service('cmis.connection_api')
      ->checkConnectionIsAlive($config);
    if (!empty($config)) {
      $browser = new CmisBrowser($config, $folder_id, $additional_settings);
      if ($browser
        ->getConnection()) {
        $this->browser = $browser;
      }
      else {
        return $this
          ->connectionError($config);
      }
    }
    else {
      return $this
        ->configureError();
    }
  }

  /**
   * Get browser.
   *
   * @return object
   *   Return browser object.
   */
  public function getBrowser() {
    return $this->browser;
  }

  /**
   * Prepare configure error.
   *
   * @return array
   *   Return markup.
   */
  private function configureError() {
    return [
      '#markup' => $this
        ->t('No configure defined. Please go to CMIS configure page and create configure.'),
    ];
  }

  /**
   * Prepare connection error.
   *
   * @param string $config
   *   Entity label.
   *
   * @return array
   *   Return markup.
   */
  private function connectionError($config) {
    return [
      '#markup' => $this
        ->t('No connection ready of config: @config. Please go to CMIS configure page and create properly configure.', [
        '@config' => $config,
      ]),
    ];
  }

  /**
   * Check permission.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   Get Account.
   *
   * @return \Drupal\Core\Access\AccessResultInterface
   *   The access result.
   */
  public function access(AccountInterface $account) {
    $config_id = \Drupal::requestStack()
      ->getCurrentRequest()
      ->get('config');
    if (!is_null($config_id)) {
      $permissions = [
        'access cmis browser ' . $config_id,
        'access all cmis browsers',
      ];
      return AccessResult::allowedIfHasPermissions($account, $permissions, 'OR');
    }
    return AccessResult::neutral();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CmisRepositoryController::$browser private property The browser object.
CmisRepositoryController::$connection private property Call the CmisConnectionApi class.
CmisRepositoryController::access public function Check permission.
CmisRepositoryController::browse public function Browse.
CmisRepositoryController::configureError private function Prepare configure error.
CmisRepositoryController::connectionError private function Prepare connection error.
CmisRepositoryController::getBrowser public function Get browser.
CmisRepositoryController::getProperties public function Get properties.
CmisRepositoryController::initBrowser private function Init browser.
CmisRepositoryController::objectDelete public function Object delete popup.
CmisRepositoryController::objectDeleteVerify public function Object delete verify popup.
CmisRepositoryController::setConnection private function Set connection.
CmisRepositoryController::__construct public function Construct.
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create 46
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.