module_test.module 4.92 KB
Newer Older
1 2
<?php

3 4
use Drupal\Core\Extension\Extension;

5 6
/**
 * Implements hook_system_info_alter().
7
 *
8 9
 * Manipulate module dependencies to test dependency chains.
 */
10
function module_test_system_info_alter(&$info, Extension $file, $type) {
11
  if (\Drupal::state()->get('module_test.dependency') == 'missing dependency') {
12 13 14
    if ($file->getName() == 'color') {
      // Make color module depend on config.
      $info['dependencies'][] = 'config';
15
    }
16 17
    elseif ($file->getName() == 'config') {
      // Make config module depend on a non-existing module.
18 19 20
      $info['dependencies'][] = 'foo';
    }
  }
21
  elseif (\Drupal::state()->get('module_test.dependency') == 'dependency') {
22 23 24
    if ($file->getName() == 'color') {
      // Make color module depend on config.
      $info['dependencies'][] = 'config';
25
    }
26 27 28
    elseif ($file->getName() == 'config') {
      // Make config module depend on help module.
      $info['dependencies'][] = 'help';
29
    }
30 31 32 33
    elseif ($file->getName() == 'entity_test') {
      // Make entity test module depend on help module.
      $info['dependencies'][] = 'help';
    }
34
  }
35
  elseif (\Drupal::state()->get('module_test.dependency') == 'version dependency') {
36 37 38
    if ($file->getName() == 'color') {
      // Make color module depend on config.
      $info['dependencies'][] = 'config';
39
    }
40 41 42
    elseif ($file->getName() == 'config') {
      // Make config module depend on a specific version of help module.
      $info['dependencies'][] = 'help (1.x)';
43
    }
44 45
    elseif ($file->getName() == 'help') {
      // Set help module to a version compatible with the above.
46
      $info['version'] = '8.x-1.0';
47 48
    }
  }
49
  if ($file->getName() == 'seven' && $type == 'theme') {
50 51
    $info['regions']['test_region'] = t('Test region');
  }
52
}
53 54 55 56 57 58 59 60 61 62

/**
 * Implements hook_hook_info().
 */
function module_test_hook_info() {
  $hooks['test_hook'] = array(
    'group' => 'file',
  );
  return $hooks;
}
63

64 65 66 67 68
/**
 * Page callback for 'hook dynamic loading' test.
 *
 * If the hook is dynamically loaded correctly, the menu callback should
 * return 'success!'.
69 70
 *
 * @deprecated \Drupal\module_test\Controller\ModuleTestController::hookDynamicLoadingInvoke()
71 72
 */
function module_test_hook_dynamic_loading_invoke() {
73
  $result = \Drupal::moduleHandler()->invoke('module_test', 'test_hook');
74 75 76 77 78 79 80 81
  return $result['module_test'];
}

/**
 * Page callback for 'hook dynamic loading' test.
 *
 * If the hook is dynamically loaded correctly, the menu callback should
 * return 'success!'.
82 83
 *
 * @deprecated \Drupal\module_test\Controller\ModuleTestController::hookDynamicLoadingInvokeAll()
84 85
 */
function module_test_hook_dynamic_loading_invoke_all() {
86
  $result = \Drupal::moduleHandler()->invokeAll('test_hook');
87 88 89
  return $result['module_test'];
}

90 91 92 93 94 95
/**
 * Load function used by module_test_hook_dynamic_loading_invoke_all_during_load().
 *
 * @see module_test_menu().
 */
function module_test_load($param) {
96
  $result = \Drupal::moduleHandler()->invokeAll('test_hook');
97 98 99
  return $result[$param];
}

100 101 102 103 104 105 106
/**
 * Page callback for 'class loading' test.
 *
 * This module does not have a dependency on module_autoload_test.module. If
 * that module is enabled, this function should return the string
 * 'Drupal\\module_autoload_test\\SomeClass::testMethod() was invoked.'. If
 * that module is not enabled, this function should return nothing.
107 108
 *
 * @deprecated \Drupal\module_test\Controller\ModuleTestController::testClassLoading()
109 110 111 112 113 114 115 116
 */
function module_test_class_loading() {
  if (class_exists('Drupal\module_autoload_test\SomeClass')) {
    $obj = new Drupal\module_autoload_test\SomeClass();
    return $obj->testMethod();
  }
}

117
/**
118
 * Implements hook_modules_installed().
119
 */
120
function module_test_modules_installed($modules) {
121 122
  // Record the ordered list of modules that were passed in to this hook so we
  // can check that the modules were enabled in the correct sequence.
123
  \Drupal::state()->set('module_test.install_order', $modules);
124 125 126 127 128 129 130 131
}

/**
 * Implements hook_modules_uninstalled().
 */
function module_test_modules_uninstalled($modules) {
  // Record the ordered list of modules that were passed in to this hook so we
  // can check that the modules were uninstalled in the correct sequence.
132
  \Drupal::state()->set('module_test.uninstall_order', $modules);
133
}
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

/**
 * Implements hook_module_implements_alter()
 *
 * @see module_test_altered_test_hook()
 * @see \Drupal\system\Tests\Module\ModuleImplementsAlterTest::testModuleImplementsAlter()
 */
function module_test_module_implements_alter(&$implementations, $hook) {
  if ($hook === 'altered_test_hook') {
    // Add a hook implementation, that will be found in
    // module_test.implementation.inc.
    $implementations['module_test'] = 'implementations';
  }
  if ($hook === 'unimplemented_test_hook') {
    // Add the non-existing function module_test_unimplemented_test_hook(). This
    // should cause an exception to be thrown in
    // \Drupal\Core\Extension\ModuleHandler::buildImplementationInfo('unimplemented_test_hook').
    $implementations['module_test'] = FALSE;
  }
}