You are here

function _patchinfo_process_module in PatchInfo 8.2

Same name and namespace in other branches
  1. 8 patchinfo.module \_patchinfo_process_module()
  2. 7 patchinfo.module \_patchinfo_process_module()

Process patch information for a module.

Parameters

string $module: Machine readable module name.

array $patch_info: Patch info from module info.yml file.

Throws

\Exception

1 call to _patchinfo_process_module()
patchinfo_system_info_alter in ./patchinfo.module
Implements hook_system_info_alter().

File

./patchinfo.module, line 256
Patch Info primary module file.

Code

function _patchinfo_process_module($source_module, $module, array $patch_info) {
  if (!empty($source_module) && !empty($module)) {
    foreach ($patch_info as $key => $info) {

      // Calculate an index for each patch, which is not 0.
      $index = $key + 1;
      if (!is_array($info)) {
        continue;
      }
      $source = isset($info['source']) ? $info['source'] : '';
      $info = isset($info['info']) ? $info['info'] : '';

      // Extract URL from patch information, if any.
      $info = explode(' ', $info);
      $url = '';
      if (filter_var($info[0], FILTER_VALIDATE_URL) !== FALSE) {
        $url = $info[0];
        unset($info[0]);
      }
      $info = implode(' ', $info);

      // We need to wrap this in a try/catch, sice the code might be called
      // during the update process from 8.x-1.x when the source_module and
      // source fields are still missing. The alternative would be to check the
      // schema everytime, which would be much more expensive.
      try {

        // Write patch information to db.
        \Drupal::database()
          ->merge('patchinfo')
          ->keys([
          'source_module' => $source_module,
          'module' => $module,
          'id' => $index,
        ])
          ->fields([
          'url' => $url,
          'info' => $info,
          'source' => $source,
        ])
          ->execute();
      } catch (Exception $e) {
        watchdog_exception('patchinfo', $e);
      }
    }
  }
}