Newer
Older
namespace Drupal\linkit\Plugin\Linkit\Matcher;
use Drupal\Core\Form\FormStateInterface;
/**
* Provides specific linkit matchers for the node entity type.
*
* id = "entity:node",
* label = @Translation("Content"),
* provider = "node"
class NodeMatcher extends EntityMatcher {
/**
* {@inheritdoc}
*/
public function getSummary() {
$summery = parent::getSummary();
$summery[] = $this->t('Include unpublished: @include_unpublished', [
'@include_unpublished' => $this->configuration['include_unpublished'] ? $this->t('Yes') : $this->t('No'),
]);
return $summery;
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return parent::defaultConfiguration() + [
'include_unpublished' => FALSE,
];
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
return parent::calculateDependencies() + [
'module' => ['node'],
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$form['unpublished_nodes'] = array(
'#type' => 'details',
'#title' => t('Unpublished nodes'),
'#open' => TRUE,
);
$form['unpublished_nodes']['include_unpublished'] = [
'#title' => t('Include unpublished nodes'),
'#type' => 'checkbox',
'#default_value' => $this->configuration['include_unpublished'],
'#description' => t('In order to see unpublished nodes, users must also have permissions to do so.'),
return $form;
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
parent::submitConfigurationForm($form, $form_state);
$this->configuration['include_unpublished'] = $form_state->getValue('include_unpublished');
}
protected function buildEntityQuery($search_string) {
$query = parent::buildEntityQuery($search_string);
Emil Stjerneman
committed
$no_access = !$this->currentUser->hasPermission('bypass node access') && !count($this->moduleHandler->getImplementations('node_grants'));
if ($this->configuration['include_unpublished'] !== TRUE || $no_access) {
$query->condition('status', NODE_PUBLISHED);
}
return $query;
}