cincopa-8.x-1.x-dev/src/Plugin/Filter/FilterCincopa.php
src/Plugin/Filter/FilterCincopa.php
<?php
namespace Drupal\cincopa\Plugin\Filter;
use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;
/**
* Replace "[cincopa STRING]" strings in text fields.
*
* @Filter(
* id = "filter_cincopa",
* title = @Translation("Parse Cincopa Tags"),
* description = @Translation("Parse the Cincopa tag and replace it with the gallery code."),
* type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
* )
*/
class FilterCincopa extends FilterBase {
/**
* A list of unique strings.
*
* @var array
*/
public $uniqueData = [];
/**
* {@inheritdoc}
*/
public function process($text, $langcode) {
$text = preg_replace_callback("/\[cincopa ([[:print:]]+?)\]/", function ($m) {
$unique = uniqid('');
array_push($m, $unique);
array_push($this->uniqueData, $m);
return '<div id="_cp_widget_' . $unique . '">...</div>';
},
$text);
$result = new FilterProcessResult($text);
$result->setProcessedText($text)
->addAttachments(['library' => ['cincopa/cincopa.filter.main']]);
$args = [];
foreach ($this->uniqueData as $index => $match) {
$args['cincopa'][$match[2]]['arg0'] = $match[0];
$args['cincopa'][$match[2]]['arg1'] = $match[1];
$args['cincopa'][$match[2]]['arg2'] = "_cp_widget_" . $match[2];
}
$result->addAttachments([
'library' => [
'cincopa/cincopa.filter',
],
'drupalSettings' => $args,
]);
return $result;
}
}
