Version 1
[yaffs-website] / web / core / modules / views / src / Plugin / views / field / Url.php
diff --git a/web/core/modules/views/src/Plugin/views/field/Url.php b/web/core/modules/views/src/Plugin/views/field/Url.php
new file mode 100644 (file)
index 0000000..08e1fba
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url as CoreUrl;
+use Drupal\views\ResultRow;
+
+/**
+ * Field handler to provide simple renderer that turns a URL into a clickable link.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("url")
+ */
+class Url extends FieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+
+    $options['display_as_link'] = ['default' => TRUE];
+
+    return $options;
+  }
+
+  /**
+   * Provide link to the page being visited.
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    $form['display_as_link'] = [
+      '#title' => $this->t('Display as link'),
+      '#type' => 'checkbox',
+      '#default_value' => !empty($this->options['display_as_link']),
+    ];
+    parent::buildOptionsForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $values) {
+    $value = $this->getValue($values);
+    if (!empty($this->options['display_as_link'])) {
+      // @todo Views should expect and store a leading /. See:
+      //   https://www.drupal.org/node/2423913
+      return \Drupal::l($this->sanitizeValue($value), CoreUrl::fromUserInput('/' . $value));
+    }
+    else {
+      return $this->sanitizeValue($value, 'url');
+    }
+  }
+
+}