Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 38 |
TelephoneLinkFormatter | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
72 | |
0.00% |
0 / 38 |
defaultSettings | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
settingsForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
settingsSummary | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
viewElements | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 17 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\telephone\Plugin\Field\FieldFormatter\TelephoneLinkFormatter. | |
*/ | |
namespace Drupal\telephone\Plugin\Field\FieldFormatter; | |
use Drupal\Core\Field\FormatterBase; | |
use Drupal\Core\Field\FieldItemListInterface; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Url; | |
/** | |
* Plugin implementation of the 'telephone_link' formatter. | |
* | |
* @FieldFormatter( | |
* id = "telephone_link", | |
* label = @Translation("Telephone link"), | |
* field_types = { | |
* "telephone" | |
* } | |
* ) | |
*/ | |
class TelephoneLinkFormatter extends FormatterBase { | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function defaultSettings() { | |
return array( | |
'title' => '', | |
) + parent::defaultSettings(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function settingsForm(array $form, FormStateInterface $form_state) { | |
$elements['title'] = array( | |
'#type' => 'textfield', | |
'#title' => t('Title to replace basic numeric telephone number display'), | |
'#default_value' => $this->getSetting('title'), | |
); | |
return $elements; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function settingsSummary() { | |
$summary = array(); | |
$settings = $this->getSettings(); | |
if (!empty($settings['title'])) { | |
$summary[] = t('Link using text: @title', array('@title' => $settings['title'])); | |
} | |
else { | |
$summary[] = t('Link using provided telephone number.'); | |
} | |
return $summary; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function viewElements(FieldItemListInterface $items, $langcode) { | |
$element = array(); | |
$title_setting = $this->getSetting('title'); | |
foreach ($items as $delta => $item) { | |
// Render each element as link. | |
$element[$delta] = array( | |
'#type' => 'link', | |
// Use custom title if available, otherwise use the telephone number | |
// itself as title. | |
'#title' => $title_setting ?: $item->value, | |
// Prepend 'tel:' to the telephone number. | |
'#url' => Url::fromUri('tel:' . rawurlencode(preg_replace('/\s+/', '', $item->value))), | |
'#options' => array('external' => TRUE), | |
); | |
if (!empty($item->_attributes)) { | |
$element[$delta]['#options'] += array('attributes' => array()); | |
$element[$delta]['#options']['attributes'] += $item->_attributes; | |
// Unset field item attributes since they have been included in the | |
// formatter output and should not be rendered in the field template. | |
unset($item->_attributes); | |
} | |
} | |
return $element; | |
} | |
} |