class DrupalOrg in Freelinking 4.0.x
Same name and namespace in other branches
- 8.3 src/Plugin/freelinking/DrupalOrg.php \Drupal\freelinking\Plugin\freelinking\DrupalOrg
Freelinking drupal.org and drupal.org project plugin.
Allows for a link like [[drupalorg:12345]] to be expanded to https://drupal.org/node/12345.
Plugin annotation
@Freelinking(
id = "drupalorg",
title = @Translation("Drupal.org External Link"),
weight = 0,
hidden = false,
settings = {
"scrape" = "1",
"project" = "1",
"node" = "1",
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\freelinking\Plugin\FreelinkingPluginBase implements FreelinkingPluginInterface
- class \Drupal\freelinking\Plugin\freelinking\External implements ContainerFactoryPluginInterface
- class \Drupal\freelinking\Plugin\freelinking\DrupalOrg
- class \Drupal\freelinking\Plugin\freelinking\External implements ContainerFactoryPluginInterface
- class \Drupal\freelinking\Plugin\FreelinkingPluginBase implements FreelinkingPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of DrupalOrg
1 file declares its use of DrupalOrg
- DrupalOrgTest.php in tests/
src/ Unit/ Plugin/ freelinking/ DrupalOrgTest.php
File
- src/
Plugin/ freelinking/ DrupalOrg.php, line 27
Namespace
Drupal\freelinking\Plugin\freelinkingView source
class DrupalOrg extends External {
/**
* {@inheritdoc}
*/
public function getIndicator() {
$settings = $this
->getConfiguration()['settings'];
if (!$settings['node'] && !$settings['project']) {
return '/^NONE$/';
}
$pattern = '/^d(rupal)?(';
if ($settings['node']) {
$pattern .= 'o(rg)?';
if ($settings['project']) {
$pattern .= '|';
}
}
if ($settings['project']) {
$pattern .= 'p(roject)?)$/';
}
else {
$pattern .= ')$/';
}
return $pattern;
}
/**
* {@inheritdoc}
*/
public function getTip() {
// Note that this is a change from Drupal 7 dev plugin behavior.
return $this
->t('Click to view on drupal.org.');
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
$configuration = parent::defaultConfiguration();
$configuration['settings']['node'] = TRUE;
$configuration['settings']['project'] = TRUE;
return $configuration;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
$settings = $this
->getConfiguration()['settings'];
$element['node'] = [
'#type' => 'select',
'#title' => $this
->t('drupal.org nodes'),
'#description' => $this
->t('Should freelinking allow links to any drupal.org node?'),
'#options' => [
'0' => $this
->t('No'),
'1' => $this
->t('Yes'),
],
'#default_value' => isset($settings['node']) ? $settings['node'] : '1',
];
$element['project'] = [
'#type' => 'select',
'#title' => $this
->t('drupal.org projects'),
'#description' => $this
->t('Should freelinking allow links to drupal.org projects?'),
'#options' => [
'0' => $this
->t('No'),
'1' => $this
->t('Yes'),
],
'#default_value' => isset($settings['project']) ? $settings['project'] : '1',
];
return $element;
}
/**
* {@inheritdoc}
*/
public function buildLink(array $target) {
$scrape = $this
->getConfiguration()['settings']['scrape'];
$path = preg_match('/o(rg)?$/', $target['indicator']) ? 'node' : 'project';
$url = 'https://drupal.org/' . $path . '/' . $target['dest'];
$link = [
'#type' => 'link',
'#url' => Url::fromUri($url, [
'absolute' => TRUE,
'language' => $target['language'],
]),
'#attributes' => [
'title' => isset($target['tooltip']) ? $target['tooltip'] : $this
->getTip(),
],
];
// Get the page title from the external URL or use the target text.
if (!$target['text'] && $scrape) {
try {
$page_title = $this
->getPageTitle($url);
if ($page_title) {
$link['#title'] = $this
->t('Drupal.org: “@title”', [
'@title' => $page_title,
]);
}
else {
$prefix = is_numeric($target['dest']) ? '#' : '';
$link['#title'] = $prefix . $target['dest'];
}
} catch (RequestException $e) {
$link = [
'#theme' => 'freelink_error',
'#plugin' => 'external',
];
if ($e
->getResponse()
->getStatusCode() >= 400) {
$link['#message'] = $this
->t('External target “@url” not found', [
'@url' => $url,
]);
}
}
}
else {
$link['#title'] = $target['text'] ? $target['text'] : ucwords($path) . ' ' . $target['dest'];
}
return $link;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
DrupalOrg:: |
public | function |
Build a link with the plugin. Overrides External:: |
|
DrupalOrg:: |
public | function |
Gets default configuration for this plugin. Overrides External:: |
|
DrupalOrg:: |
public | function |
A regular expression string to indicate what to replace for this plugin. Overrides External:: |
|
DrupalOrg:: |
public | function |
Provides tips for this freelinking plugin. Overrides External:: |
|
DrupalOrg:: |
public | function |
Plugin configuration form. Overrides External:: |
|
External:: |
protected | property | Drupal Guzzle Client. | |
External:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
External:: |
protected | function | Get the page title by fetching from the external URL. | |
External:: |
public | function |
Initialize method. Overrides PluginBase:: |
|
FreelinkingPluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
FreelinkingPluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
1 |
FreelinkingPluginBase:: |
public | function |
Get the failover plugin ID (if applicable). Overrides FreelinkingPluginInterface:: |
1 |
FreelinkingPluginBase:: |
public | function |
Determine if the plugin is built-in (always on). Overrides FreelinkingPluginInterface:: |
|
FreelinkingPluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
|
MessengerTrait:: |
protected | property | The messenger. | 27 |
MessengerTrait:: |
public | function | Gets the messenger. | 27 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
2 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |