View source
<?php
namespace Drupal\flag\FlagType;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Access\AccessResult;
use Drupal\Component\Plugin\PluginBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\flag\FlagInterface;
use Drupal\Core\Entity\EntityInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
abstract class FlagTypeBase extends PluginBase implements FlagTypePluginInterface {
use StringTranslationTrait;
protected $moduleHandler;
public function __construct(array $configuration, $plugin_id, array $plugin_definition, ModuleHandlerInterface $module_handler, TranslationInterface $string_translation) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->moduleHandler = $module_handler;
$this->configuration += $this
->defaultConfiguration();
$this->stringTranslation = $string_translation;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('module_handler'), $container
->get('string_translation'));
}
public function defaultConfiguration() {
return [];
}
public function calculateDependencies() {
return [];
}
public function getConfiguration() {
return $this->configuration;
}
public function setConfiguration(array $configuration) {
$this->configuration = NestedArray::mergeDeep($this
->defaultConfiguration(), $configuration);
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
return $form;
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
}
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
}
protected function getExtraPermissionsOptions() {
return [];
}
protected function hasExtraPermission($option) {
return in_array($option, $this->configuration['extra_permissions']);
}
public function actionPermissions(FlagInterface $flag) {
return [
'flag ' . $flag
->id() => [
'title' => $this
->t('Flag %flag_title', [
'%flag_title' => $flag
->label(),
]),
],
'unflag ' . $flag
->id() => [
'title' => $this
->t('Unflag %flag_title', [
'%flag_title' => $flag
->label(),
]),
],
];
}
public function actionAccess($action, FlagInterface $flag, AccountInterface $account, EntityInterface $flaggable = NULL) {
$results = $this->moduleHandler
->invokeAll('flag_action_access', [
$action,
$flag,
$account,
$flaggable,
]);
$results[] = AccessResult::allowedIfHasPermission($account, $action . ' ' . $flag
->id());
$return = array_shift($results);
foreach ($results as $next) {
$return = $return
->orIf($next);
}
return $return;
}
}