Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Plugin / DMU / Converter / Blocks.php
diff --git a/web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Blocks.php b/web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Blocks.php
new file mode 100644 (file)
index 0000000..8edaba5
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Converter;
+
+use Drupal\drupalmoduleupgrader\ConverterBase;
+use Drupal\drupalmoduleupgrader\TargetInterface;
+use Drupal\drupalmoduleupgrader\Utility\StringTransformTrait;
+
+/**
+ * @Converter(
+ *  id = "blocks",
+ *  description = @Translation("Converts Drupal 7 blocks to plugins."),
+ *  hook = {
+ *    "hook_block_configure",
+ *    "hook_block_info",
+ *    "hook_block_save",
+ *    "hook_block_view"
+ *  },
+ *  fixme = @Translation("hook_!hook is gone in Drupal 8.
+
+It has been left here by the Drupal Module Upgrader so that you can move its
+logic into the appropriate block plugins, which should be in the
+src/Plugin/Block directory. Once all logic is moved into the plugins, delete
+this hook."),
+ *  documentation = {
+ *    "https://www.drupal.org/node/1880620"
+ *  }
+ * )
+ */
+class Blocks extends ConverterBase {
+
+  use StringTransformTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function convert(TargetInterface $target) {
+    try {
+      $blocks = $this->executeHook($target, 'block_info');
+    }
+    catch (\LogicException $e) {
+      $this->log->warning($e->getMessage(), [
+        'target' => $target->id(),
+        'hook' => $this->pluginDefinition['hook'],
+      ]);
+      return;
+    }
+
+    $indexer = $target->getIndexer('function');
+
+    foreach ($blocks as $id => $info) {
+      // Render the block plugin's shell.
+      $render = [
+        '#theme' => 'dmu_block',
+        '#module' => $target->id(),
+        '#class' => $this->toTitleCase(preg_replace('/[^a-zA-Z0-9_]+/', '_', $id)),
+        '#block_id' => $id,
+        '#block_label' => $info['info'],
+        '#configurable' => $indexer->has('block_configure'),
+      ];
+      $this->writeClass($target, $this->parse($render));
+    }
+
+    // Slap a FIXME on hook_block_info(), and on other block hooks which
+    // may or may not exist.
+    $this->addFixMe($target, 'block_info');
+
+    if ($indexer->has('hook_block_view')) {
+      $this->addFixMe($target, 'block_view');
+    }
+    if ($indexer->has('hook_block_save')) {
+      $this->addFixMe($target, 'block_save');
+    }
+    if ($indexer->has('hook_block_configure')) {
+      $this->addFixMe($target, 'block_configure');
+    }
+  }
+
+  /**
+   * Slaps a translated FIXME notice above a block-related hook.
+   *
+   * @param TargetInterface $target
+   *  The target module.
+   * @param string $hook
+   *  The hook to put the FIXME on. It's up to the calling code to ensure
+   *  that the hook actually exists.
+   */
+  private function addFixMe(TargetInterface $target, $hook) {
+    $variables = ['!hook' => $hook];
+
+    $function = $target
+      ->getIndexer('function')
+      ->get('hook_' . $hook)
+      ->setDocComment($this->buildFixMe(NULL, $variables, self::DOC_COMMENT));
+
+    $target->save($function);
+  }
+
+}