Version 1
[yaffs-website] / web / core / modules / views / src / Plugin / views / style / Opml.php
diff --git a/web/core/modules/views/src/Plugin/views/style/Opml.php b/web/core/modules/views/src/Plugin/views/style/Opml.php
new file mode 100644 (file)
index 0000000..69679d3
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Url;
+
+/**
+ * Default style plugin to render an OPML feed.
+ *
+ * @ingroup views_style_plugins
+ *
+ * @ViewsStyle(
+ *   id = "opml",
+ *   title = @Translation("OPML Feed"),
+ *   help = @Translation("Generates an OPML feed from a view."),
+ *   theme = "views_view_opml",
+ *   display_types = {"feed"}
+ * )
+ */
+class Opml extends StylePluginBase {
+
+  /**
+   * Does the style plugin for itself support to add fields to its output.
+   *
+   * @var bool
+   */
+  protected $usesRowPlugin = TRUE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function attachTo(array &$build, $display_id, Url $feed_url, $title) {
+    $display = $this->view->displayHandlers->get($display_id);
+    $url_options = [];
+    $input = $this->view->getExposedInput();
+    if ($input) {
+      $url_options['query'] = $input;
+    }
+    $url_options['absolute'] = TRUE;
+
+    $url = $feed_url->setOptions($url_options)->toString();
+    if ($display->hasPath()) {
+      if (empty($this->preview)) {
+        $build['#attached']['feed'][] = [$url, $title];
+      }
+    }
+    else {
+      $this->view->feedIcons[] = [
+        '#theme' => 'feed_icon',
+        '#url' => $url,
+        '#title' => $title,
+      ];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render() {
+    if (empty($this->view->rowPlugin)) {
+      debug('Drupal\views\Plugin\views\style\Opml: Missing row plugin');
+      return;
+    }
+    $rows = [];
+
+    foreach ($this->view->result as $row_index => $row) {
+      $this->view->row_index = $row_index;
+      $rows[] = $this->view->rowPlugin->render($row);
+    }
+
+    $build = [
+      '#theme' => $this->themeFunctions(),
+      '#view' => $this->view,
+      '#options' => $this->options,
+      '#rows' => $rows,
+    ];
+    unset($this->view->row_index);
+    return $build;
+  }
+
+}