Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / workspaces / workspaces.module
diff --git a/web/core/modules/workspaces/workspaces.module b/web/core/modules/workspaces/workspaces.module
new file mode 100644 (file)
index 0000000..f279c43
--- /dev/null
@@ -0,0 +1,200 @@
+<?php
+
+/**
+ * @file
+ * Provides full-site preview functionality for content staging.
+ */
+
+use Drupal\Component\Serialization\Json;
+use Drupal\Core\Entity\EntityFormInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\views\Plugin\views\query\QueryPluginBase;
+use Drupal\views\ViewExecutable;
+use Drupal\workspaces\EntityAccess;
+use Drupal\workspaces\EntityOperations;
+use Drupal\workspaces\EntityTypeInfo;
+use Drupal\workspaces\FormOperations;
+use Drupal\workspaces\ViewsQueryAlter;
+
+/**
+ * Implements hook_help().
+ */
+function workspaces_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    // Main module help for the Workspaces module.
+    case 'help.page.workspaces':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The Workspaces module allows workspaces to be defined and switched between. Content is then assigned to the active workspace when created. For more information, see the <a href=":workspaces">online documentation for the Workspaces module</a>.', [':workspaces' => 'https://www.drupal.org/node/2824024']) . '</p>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_entity_type_build().
+ */
+function workspaces_entity_type_build(array &$entity_types) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityTypeInfo::class)
+    ->entityTypeBuild($entity_types);
+}
+
+/**
+ * Implements hook_form_alter().
+ */
+function workspaces_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  if ($form_state->getFormObject() instanceof EntityFormInterface) {
+    \Drupal::service('class_resolver')
+      ->getInstanceFromDefinition(EntityOperations::class)
+      ->entityFormAlter($form, $form_state, $form_id);
+  }
+  \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(FormOperations::class)
+    ->formAlter($form, $form_state, $form_id);
+}
+
+/**
+ * Implements hook_entity_load().
+ */
+function workspaces_entity_load(array &$entities, $entity_type_id) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityOperations::class)
+    ->entityLoad($entities, $entity_type_id);
+}
+
+/**
+ * Implements hook_entity_presave().
+ */
+function workspaces_entity_presave(EntityInterface $entity) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityOperations::class)
+    ->entityPresave($entity);
+}
+
+/**
+ * Implements hook_entity_insert().
+ */
+function workspaces_entity_insert(EntityInterface $entity) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityOperations::class)
+    ->entityInsert($entity);
+}
+
+/**
+ * Implements hook_entity_update().
+ */
+function workspaces_entity_update(EntityInterface $entity) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityOperations::class)
+    ->entityUpdate($entity);
+}
+
+/**
+ * Implements hook_entity_predelete().
+ */
+function workspaces_entity_predelete(EntityInterface $entity) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityOperations::class)
+    ->entityPredelete($entity);
+}
+
+/**
+ * Implements hook_entity_access().
+ *
+ * @see \Drupal\workspaces\EntityAccess
+ */
+function workspaces_entity_access(EntityInterface $entity, $operation, AccountInterface $account) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityAccess::class)
+    ->entityOperationAccess($entity, $operation, $account);
+}
+
+/**
+ * Implements hook_entity_create_access().
+ *
+ * @see \Drupal\workspaces\EntityAccess
+ */
+function workspaces_entity_create_access(AccountInterface $account, array $context, $entity_bundle) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(EntityAccess::class)
+    ->entityCreateAccess($account, $context, $entity_bundle);
+}
+
+/**
+ * Implements hook_views_query_alter().
+ */
+function workspaces_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
+  return \Drupal::service('class_resolver')
+    ->getInstanceFromDefinition(ViewsQueryAlter::class)
+    ->alterQuery($view, $query);
+}
+
+/**
+ * Implements hook_cron().
+ */
+function workspaces_cron() {
+  \Drupal::service('workspaces.manager')->purgeDeletedWorkspacesBatch();
+}
+
+/**
+ * Implements hook_toolbar().
+ */
+function workspaces_toolbar() {
+  $items = [];
+  $items['workspace'] = [
+    '#cache' => [
+      'contexts' => [
+        'user.permissions',
+      ],
+    ],
+  ];
+
+  $current_user = \Drupal::currentUser();
+  if (!$current_user->hasPermission('administer workspaces')
+    || !$current_user->hasPermission('view own workspace')
+    || !$current_user->hasPermission('view any workspace')) {
+    return $items;
+  }
+
+  /** @var \Drupal\workspaces\WorkspaceInterface $active_workspace */
+  $active_workspace = \Drupal::service('workspaces.manager')->getActiveWorkspace();
+
+  $items['workspace'] = [
+    '#type' => 'toolbar_item',
+    'tab' => [
+      '#type' => 'link',
+      '#title' => $active_workspace->label(),
+      '#url' => $active_workspace->toUrl('collection'),
+      '#attributes' => [
+        'title' => t('Switch workspace'),
+        'class' => ['use-ajax', 'toolbar-icon', 'toolbar-icon-workspace'],
+        'data-dialog-type' => 'dialog',
+        'data-dialog-renderer' => 'off_canvas_top',
+        'data-dialog-options' => Json::encode([
+          'height' => 161,
+          'classes' => [
+            'ui-dialog' => 'workspaces-dialog',
+          ],
+        ]),
+      ],
+    ],
+    '#wrapper_attributes' => [
+      'class' => ['workspaces-toolbar-tab'],
+    ],
+    '#attached' => [
+      'library' => ['workspaces/drupal.workspaces.toolbar'],
+    ],
+    '#weight' => 500,
+  ];
+
+  // Add a special class to the wrapper if we are in the default workspace so we
+  // can highlight it with a different color.
+  if ($active_workspace->isDefaultWorkspace()) {
+    $items['workspace']['#wrapper_attributes']['class'][] = 'workspaces-toolbar-tab--is-default';
+  }
+
+  return $items;
+}