You are here

public function NodeOrderManager::canBeOrdered in Node Order 8

Determine if a given node can be ordered in any vocabularies.

Parameters

\Drupal\node\NodeInterface $node: The node object.

Return value

bool Returns TRUE if the node has terms in any orderable vocabulary.

Overrides NodeOrderManagerInterface::canBeOrdered

File

src/NodeOrderManager.php, line 223

Class

NodeOrderManager
Defines a service that creates & manages node ordering within taxonomy terms.

Namespace

Drupal\nodeorder

Code

public function canBeOrdered(NodeInterface $node) {
  $cid = 'nodeorder:can_be_ordered:' . $node
    ->getType();
  if (($cache = $this->cache
    ->get($cid)) && !empty($cache->data)) {
    return $cache->data;
  }
  else {
    $can_be_ordered = FALSE;
    $nodeorder_vocabularies = [];
    foreach ($node
      ->getFieldDefinitions() as $field) {
      if ($field
        ->getType() != 'entity_reference' || $field
        ->getSetting('target_type') != 'taxonomy_term') {
        continue;
      }
      foreach ($field
        ->getSetting('handler_settings')['target_bundles'] as $vocabulary) {
        $nodeorder_vocabularies[] = $vocabulary;
      }
    }
    foreach ($nodeorder_vocabularies as $vid) {
      if (Vocabulary::load($vid)) {
        $can_be_ordered = TRUE;
      }
    }

    // Permanently cache the value for easy reuse.
    $this->cache
      ->set($cid, $can_be_ordered, Cache::PERMANENT, [
      'nodeorder',
    ]);
    return $can_be_ordered;
  }
}