activitypub-1.0.x-dev/activitypub.install

activitypub.install
<?php

use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\File\FileSystemInterface;

/**
 * Implements hook_requirements().
 *
 * @param $phase
 *
 * @return array
 */
function activitypub_requirements($phase) {
  $requirements = [];

  if ($phase == 'runtime') {

    $directories = [
      activitypub_keys_path() => t('ActivityPub keys directory'),
      activitypub_cache_path() => t('ActivityPub cache directory')
    ];

    $delta = 0;
    foreach ($directories as $path => $label) {
      if (\Drupal::hasService('stream_wrapper.private') && !is_dir($path)) {
        \Drupal::service('file_system')->prepareDirectory($path, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
      }

      if (!\Drupal::hasService('stream_wrapper.private') || !is_dir($path)) {
        $description = t('An automated attempt to create the directory %directory failed, possibly due to a permissions problem or issues with how private files are set. Documentation about private files can be found in <a href=":private_files_docs">drupal docs</a>. To proceed with the installation, either create the directory and modify its permissions manually or ensure that private files are working and that the installer has the permissions to create it automatically. For more information, see INSTALL.txt or the <a href=":handbook_url">online handbook</a>.', ['%directory' => $path, ':private_files_docs'=>'https://www.drupal.org/docs/8/core/modules/file/overview#s-managing-file-locations-and-access',  ':handbook_url' => 'https://www.drupal.org/server-permissions']);
        $requirements['activitypub_directory_' . $delta] = [
          'title' => $label,
          'description' => $description,
          'severity' => REQUIREMENT_ERROR,
        ];
        $delta++;
      }
    }
  }

  return $requirements;
}

/**
 * Installs the "Summary" field for actor.
 */
function activitypub_update_8001() {
  $field =  BaseFieldDefinition::create('string_long')->setLabel('Summary');
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('summary', 'activitypub_actor', 'activitypub', $field);
}

/**
 * Installs the "To" field for activity.
 */
function activitypub_update_8002() {
  $field =  BaseFieldDefinition::create('string_long')->setLabel('To');
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('to', 'activitypub_activity', 'activitypub', $field);
}

/**
 * Installs the "Read" field for activity.
 */
function activitypub_update_8003() {
  $field =  BaseFieldDefinition::create('boolean')->setLabel('Read');
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('is_read', 'activitypub_activity', 'activitypub', $field);
}

/**
 * Updates is read to 0.
 */
function activitypub_update_8004() {
  \Drupal::database()->update('activitypub_activity')->fields(['is_read' => 0])->execute();
}

/**
 * Installs the "Context" field for activity.
 */
function activitypub_update_8005() {
  $field =  BaseFieldDefinition::create('string_long')->setLabel('Context');
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('context', 'activitypub_activity', 'activitypub', $field);
}

/**
 * Installs the "Direct message" field for activity.
 */
function activitypub_update_8006() {
  $field =  BaseFieldDefinition::create('boolean')->setLabel('Direct message');
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('direct', 'activitypub_activity', 'activitypub', $field);
}

/**
 * Updates direct to 0.
 */
function activitypub_update_8007() {
  \Drupal::database()->update('activitypub_activity')->fields(['direct' => 0])->execute();
}

/**
 * Installs the activitypub activity delete action.
 */
function activitypub_update_8008() {
  /** @var \Drupal\Core\Config\ConfigInstallerInterface $config_installer */
  $config_installer = \Drupal::service('config.installer');
  $restrict_by_dependency = ['module' => 'activitypub'];
  $config_installer->installOptionalConfig(NULL, $restrict_by_dependency);
}

/**
 * Installs the activitypub default avatar path.
 */
function activitypub_update_8009() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('activitypub.settings');
  $config->set('avatar_default_path', 'assets/avatar.png');
  $config->save(TRUE);
}

/**
 * Installs the 'published' entity key.
 */
function activitypub_update_8010() {
  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $entity_type = $definition_update_manager->getEntityType('activitypub_activity');
  $keys = $entity_type->getKeys();
  $keys['published'] = 'status';
  $entity_type->set('entity_keys', $keys);
  $definition_update_manager->updateEntityType($entity_type);
}

/**
 * Reinstall is_read field.
 */
function activitypub_update_8011() {
  $update_manager = \Drupal::entityDefinitionUpdateManager();
  $old = $update_manager->getFieldStorageDefinition('is_read', 'activitypub_activity');
  $update_manager->uninstallFieldStorageDefinition($old);
  activitypub_update_8003();
  activitypub_update_8004();
}

/**
 * Installs the activitypub log_unsaved_inbox_activity setting.
 */
function activitypub_update_8012() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('activitypub.settings');
  $config->set('log_unsaved_inbox_activity', FALSE);
  $config->save(TRUE);
}

/**
 * Deletes the 'direct' field and installs the 'Visibility' field for activity.
 */
function activitypub_update_8013() {
  $database = \Drupal::database();
  $transaction = $database->startTransaction();

  $entity_type_manager = \Drupal::entityTypeManager();
  $bundle_of = 'activitypub_activity';

  $storage = $entity_type_manager->getStorage($bundle_of);
  $bundle_definition = $entity_type_manager->getDefinition($bundle_of);
  // Sometimes the primary key isn't 'id'. e.g. 'eid' or 'item_id'.
  $id_key = $bundle_definition->getKey('id');
  // If there is no data table defined then use the base table.
  $table_name = $storage->getDataTable() ?: $storage->getBaseTable();
  $definition_manager = \Drupal::entityDefinitionUpdateManager();

  // Store the existing values.
  $direct_values = $database->select($table_name)
    ->fields($table_name, [$id_key, 'direct'])
    ->condition('direct', 1)
    ->execute()
    ->fetchAllKeyed();

  // Clear out the values.
  $database->update($table_name)
    ->fields(['direct' => NULL])
    ->execute();

  // Uninstall the field.
  $field_storage_definition = $definition_manager->getFieldStorageDefinition('direct', $bundle_of);
  $definition_manager->uninstallFieldStorageDefinition($field_storage_definition);

  // Install new field.
  $field =  BaseFieldDefinition::create('integer')
    ->setLabel(t('Post privacy'))
    ->setDefaultValue(1);
  $definition_manager->installFieldStorageDefinition('visibility', 'activitypub_activity', 'activitypub', $field);

  foreach ($direct_values as $id => $value) {
    $database->update($table_name)
      ->fields(['visibility' => 4])
      ->condition($id_key, $id)
      ->execute();
  }

  $database->update($table_name)
    ->fields(['visibility' => 1])
    ->condition($id_key, array_keys($direct_values), 'NOT IN')
    ->execute();

  // Commit transaction.
  unset($transaction);
}

/**
 * Installs the "reply" field for activity.
 */
function activitypub_update_8014() {
  $field = BaseFieldDefinition::create('string')
    ->setLabel(t('Reply'))
    ->setSetting('max_length', 128);
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('reply', 'activitypub_activity', 'activitypub', $field);
}

/**
 * Installs the activitypub filter_format filter.
 */
function activitypub_update_8015() {
  /** @var \Drupal\Core\Config\ConfigInstallerInterface $config_installer */
  $config_installer = \Drupal::service('config.installer');
  $config_installer->installOptionalConfig(NULL, []);
}

/**
 * Installs the activitypub filter_format setting.
 */
function activitypub_update_8016() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('activitypub.settings');
  $config->set('filter_format', 'activitypub');
  $config->save(TRUE);
}

/**
 * Installs the activitypub inbox_remove_x_days setting.
 */
function activitypub_update_8017() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('activitypub.settings');
  $config->set('inbox_remove_x_days', 0);
  $config->save(TRUE);
}

/**
 * Installs the activitypub inbox_remove_x_days_keep_unread setting.
 */
function activitypub_update_8018() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('activitypub.settings');
  $config->set('inbox_remove_x_days_keep_unread', FALSE);
  $config->save(TRUE);
}

/**
 * Installs the activitypub inbox_remove_x_days_handler setting.
 */
function activitypub_update_8019() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('activitypub.settings');
  $config->set('inbox_remove_x_days_handler', '');
  $config->save(TRUE);
}

/**
 * Updates the activitypub inbox reply config entity.
 */
function activitypub_update_8020() {
  /** @var \Drupal\activitypub\Entity\ActivityPubTypeInterface $activityPubType */
  $activityPubType = \Drupal::entityTypeManager()->getStorage('activitypub_type')->load('inbox_reply');
  if ($activityPubType) {
    $plugin = [
      'id' => 'activitypub_comment',
      'configuration' => [
        'comment_type' => 'comment',
        'comment_body_field' => 'comment_body',
        'activity_reference_field' => 'activitypub_activity',
        'node_comment_field' => 'comment',
        'comment_status' => TRUE,
        'comment_filter_format' => 'restricted_html',
      ],
    ];
    $activityPubType->setPlugin($plugin['id'], $plugin['configuration']);
    $activityPubType->save();
  }
}

/**
 * Cleans up static type configuration files.
 */
function activitypub_update_8021() {
  $types_to_clean = ['accept', 'delete', 'follow', 'undo'];
  /** @var \Drupal\activitypub\Entity\ActivityPubTypeInterface $activityPubType */
  foreach ($types_to_clean as $type) {
    $activityPubType = \Drupal::entityTypeManager()->getStorage('activitypub_type')->load($type);
    if ($activityPubType) {
      $plugin = $activityPubType->getPlugin();
      unset($plugin['configuration']['target_entity_type_id']);
      unset($plugin['configuration']['target_bundle']);
      unset($plugin['configuration']['object']);
      $activityPubType->setPlugin($plugin['id'], $plugin['configuration']);
      $activityPubType->save();
    }
  }
}

/**
 * Installs the "Mute" field for activity.
 */
function activitypub_update_8022() {
  $field =  BaseFieldDefinition::create('boolean')->setLabel('Mute');
  $definition_manager = \Drupal::entityDefinitionUpdateManager();
  $definition_manager->installFieldStorageDefinition('mute', 'activitypub_activity', 'activitypub', $field);
  \Drupal::database()->update('activitypub_activity')->fields(['mute' => 0])->execute();
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc