quiz_maker-1.0.6/quiz_maker.install

quiz_maker.install
<?php

/**
 * @file
 * Install, update and uninstall functions for the Quiz Maker module.
 */

use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\taxonomy\Entity\Vocabulary;

/**
 * Implements hook_install().
 */
function quiz_maker_install($is_syncing): void {
  // Rebuild routes after view config importing, because menus are based on
  // view routes.
  \Drupal::service('router.builder')->rebuild();

  // Add roles permissions.
  user_role_grant_permissions('anonymous', [
    'view all question revisions',
    'view all quiz revisions',
    'view question',
    'view question revision',
    'view quiz',
    'view quiz revision',
    'view quiz_result',
    'take quiz',
  ]);

  user_role_grant_permissions('authenticated', [
    'take quiz',
  ]);
}

/**
 * Implements hook_uninstall().
 */
function quiz_maker_uninstall($is_syncing) {
  // Delete all terms and vocabulary related to this module.
  $vid = 'questions_tags';
  $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadByProperties(['vid' => $vid]);

  foreach ($terms as $term) {
    $term->delete();
  }

  $vocabulary = Vocabulary::load($vid);
  $vocabulary->delete();
}

/**
 * Add field 'feedback' to question response entity.
 */
function quiz_maker_update_9001(): void {
  $field_storage_definition = BaseFieldDefinition::create('text_long')
    ->setLabel(t("Feedback"))
    ->setDescription(t('A response feedback.'))
    ->setDefaultValue(FALSE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('feedback', 'question_response', 'quiz_maker', $field_storage_definition);

}

/**
 * Add AddToAny field to Quiz Result View display.
 */
function quiz_maker_update_9002(): void {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('core.entity_view_display.quiz_result.standard.default');
  if ($content = $config->get('content')) {
    $content['addtoany'] = [
      'settings' => [],
      'third_party_settings' => [],
      'weight' => '8',
      'region' => 'content',
    ];
    $config->set('content', $content);
    $config->save(TRUE);
  }
}

/**
 * Add field 'Result Feedbacks' to quiz entity.
 */
function quiz_maker_update_9003(): void {
  // Install "Paragraphs" module.
  \Drupal::service('module_installer')->install(['paragraphs']);

  // Quiz Result Feedback Paragraph configs.
  $configs = [
    'field.field.paragraph.quiz_feedback_by_score.field_min_score',
    'core.entity_view_display.paragraph.quiz_feedback_by_score.preview',
    'field.field.paragraph.quiz_feedback_by_score.field_feedback_text',
    'field.field.paragraph.quiz_feedback_by_score.field_max_score',
    'field.storage.paragraph.field_feedback_text',
    'field.storage.paragraph.field_max_score',
    'field.storage.paragraph.field_min_score',
    'core.entity_view_mode.paragraph.preview',
    'paragraphs.settings',
    'paragraphs.paragraphs_type.quiz_feedback_by_score',
    'core.entity_view_display.paragraph.quiz_feedback_by_score.default',
    'core.entity_form_display.paragraph.quiz_feedback_by_score.default',
  ];
  // Import new configs of "Quiz Results" feedbacks.
  foreach ($configs as $config) {
    _quiz_maker_import_config($config, '/config/optional');
  }

  $field_storage_definition = BaseFieldDefinition::create('entity_reference')
    ->setLabel(t('Result feedbacks'))
    ->setDescription(t('Quiz result feedbacks depends on score'))
    ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
    ->setDefaultValue(FALSE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('result_feedbacks', 'quiz', 'quiz_maker', $field_storage_definition);

  // Update "Quiz" default view mode - add "Feedbacks" tab.
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('core.entity_form_display.quiz.standard.default');
  $groups = $config->get('third_party_settings.field_group');

  $groups['group_feedback'] = [
    'children' => [
      0 => 'result_feedbacks',
    ],
    'label' => 'Feedbacks by score',
    'region' => 'content',
    'parent_name' => 'group_settings',
    'weight' => 24,
    'format_type' => 'tab',
    'format_settings' => [
      'classes' => '',
      'show_empty_fields' => FALSE,
      'id' => '',
      'label_as_html' => FALSE,
      'formatter' => 'closed',
      'description' => '',
      'required_fields' => TRUE,
    ],
  ];
  $groups['group_settings']['children'][] = 'group_feedback';

  $config->set('third_party_settings.field_group', $groups);

  $content = $config->get('content');
  $content['result_feedbacks'] = [
    'type' => 'inline_entity_form_complex',
    'weight' => 6,
    'region' => 'content',
    'settings' => [
      'form_mode' => 'default',
      'override_labels' => TRUE,
      'label_singular' => 'Feedback',
      'label_plural' => 'Feedbacks',
      'allow_new' => TRUE,
      'allow_existing' => FALSE,
      'match_operator' => 'CONTAINS',
      'allow_duplicate' => TRUE,
      'collapsible' => FALSE,
      'collapsed' => FALSE,
      'revision' => FALSE,
      'removed_reference' => 'optional',
    ],
    'third_party_settings' => [],
  ];
  $config->set('content', $content);
  $config->save(TRUE);

  // Fix user permissions.
  user_role_grant_permissions('authenticated', [
    'view all question revisions',
    'view all quiz revisions',
    'view question',
    'view question revision',
    'view quiz',
    'view quiz revision',
    'view quiz_result',
  ]);
}

/**
 * Allow take Quiz for Anonymous user.
 */
function quiz_maker_update_9004(): void {
  // Add roles permissions.
  user_role_grant_permissions('anonymous', [
    'take quiz',
    'view question',
    'view quiz',
    'view quiz_result',
  ]);

  user_role_grant_permissions('authenticated', [
    'take quiz',
    'view question',
    'view quiz',
    'view quiz_result',
    'take quiz',
  ]);
}

/**
 * Add field 'Session ID' to Quiz Result entity.
 */
function quiz_maker_update_9005(): void {
  $field_storage_definition = BaseFieldDefinition::create('string')
    ->setLabel(t('Session ID'))
    ->setDescription(t('A user session ID.'))
    ->setDefaultValue(FALSE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('session_id', 'quiz_result', 'quiz_maker', $field_storage_definition);
}

/**
 * Update Quiz Results view - add contextual filter by user session.
 */
function quiz_maker_update_9006(): void {
  $config = \Drupal::configFactory()->getEditable('views.view.quiz_results');
  $session_id_context = [
    'id' => 'session_id',
    'table' => 'quiz_result_field_data',
    'field' => 'session_id',
    'relationship' => 'none',
    'group_type' => 'group',
    'admin_label' => '',
    'entity_type' => 'quiz_result',
    'entity_field' => 'session_id',
    'plugin_id' => 'string',
    'default_action' => 'ignore',
    'exception' => [
      'value' => 'all',
      'title_enable' => FALSE,
      'title' => 'All',
    ],
    'title_enable' => FALSE,
    'title' => '',
    'default_argument_type' => 'fixed',
    'default_argument_options' => [
      'argument' => '',
    ],
    'summary_options' => [
      'base_path' => '',
      'count' => TRUE,
      'override' => FALSE,
      'items_per_page' => 25,
    ],
    'summary' => [
      'sort_order' => 'asc',
      'number_of_records' => 0,
      'format' => 'default_summary',
    ],
    'specify_validation' => FALSE,
    'validate' => [
      'type' => 'none',
      'fail' => 'not found',
    ],
    'validate_options' => [],
    'glossary' => FALSE,
    'limit' => 0,
    'case' => 'none',
    'path_case' => 'none',
    'transform_dash' => FALSE,
    'break_phrase' => FALSE,
  ];

  $access = [
    'type' => 'perm',
    'options' => [
      'perm' => 'view quiz_result',
    ],
  ];

  // Delete contextual filter by quiz id, because second filter should be by
  // user session_id.
  $quiz_target_id = $config->get('display.user_quiz_results.display_options.arguments.quiz__target_id');
  $config->clear('display.user_quiz_results.display_options.arguments.quiz__target_id');

  $config->set('display.user_quiz_results.display_options.arguments.session_id', $session_id_context);
  $config->set('display.user_quiz_results.display_options.arguments.quiz__target_id', $quiz_target_id);
  $config->set('display.user_quiz_results.display_options.access', $access);
  $config->set('display.user_quiz_results.display_options.defaults.access', FALSE);
  $config->save();
}

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

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