Newer
Older
Dries Buytaert
committed
<?php
/**
* @file
* Contains \Drupal\tour\Entity\Tour.
Dries Buytaert
committed
*/
namespace Drupal\tour\Entity;
Dries Buytaert
committed
use Drupal\Core\Config\Entity\ConfigEntityBase;
use Drupal\Core\Entity\EntityStorageControllerInterface;
Dries Buytaert
committed
use Drupal\tour\TipsBag;
use Drupal\tour\TourInterface;
Dries Buytaert
committed
/**
* Defines the configured tour entity.
Dries Buytaert
committed
*
Alex Pott
committed
* @ConfigEntityType(
Dries Buytaert
committed
* id = "tour",
* label = @Translation("Tour"),
* controllers = {
Alex Pott
committed
* "view_builder" = "Drupal\tour\TourViewBuilder"
Dries Buytaert
committed
* entity_keys = {
* "id" = "id",
Dries Buytaert
committed
* "label" = "label"
Dries Buytaert
committed
* }
* )
*/
class Tour extends ConfigEntityBase implements TourInterface {
Dries Buytaert
committed
/**
* The name (plugin ID) of the tour.
*
* @var string
*/
public $id;
/**
* The module which this tour is assigned to.
*
* @var string
*/
public $module;
Dries Buytaert
committed
/**
* The label of the tour.
*
* @var string
*/
public $label;
/**
Alex Pott
committed
* The routes on which this tour should be displayed.
Dries Buytaert
committed
*
* @var array
*/
Alex Pott
committed
protected $routes = array();
/**
* The routes on which this tour should be displayed, keyed by route id.
*
* @var array
*/
protected $keyedRoutes;
Dries Buytaert
committed
/**
* Holds the collection of tips that are attached to this tour.
*
* @var \Drupal\tour\TipsBag
*/
protected $tipsBag;
/**
* The array of plugin config, only used for export and to populate the $tipsBag.
*
* @var array
*/
Dries Buytaert
committed
protected $tips = array();
Dries Buytaert
committed
/**
* Overrides \Drupal\Core\Config\Entity\ConfigEntityBase::__construct();
*/
public function __construct(array $values, $entity_type) {
parent::__construct($values, $entity_type);
$this->tipsBag = new TipsBag(\Drupal::service('plugin.manager.tour.tip'), $this->tips);
Dries Buytaert
committed
}
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
Alex Pott
committed
public function getRoutes() {
return $this->routes;
Dries Buytaert
committed
}
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getTip($id) {
return $this->tipsBag->get($id);
}
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
Dries Buytaert
committed
public function getTips() {
$tips = array();
foreach ($this->tips as $id => $tip) {
$tips[] = $this->getTip($id);
}
uasort($tips, function ($a, $b) {
if ($a->getWeight() == $b->getWeight()) {
return 0;
}
return ($a->getWeight() < $b->getWeight()) ? -1 : 1;
});
\Drupal::moduleHandler()->alter('tour_tips', $tips, $this);
Dries Buytaert
committed
return array_values($tips);
Dries Buytaert
committed
}
/**
Angie Byron
committed
* {@inheritdoc}
Dries Buytaert
committed
*/
Angie Byron
committed
public function toArray() {
$properties = parent::toArray();
Dries Buytaert
committed
$names = array(
Alex Pott
committed
'routes',
Dries Buytaert
committed
'tips',
);
foreach ($names as $name) {
$properties[$name] = $this->get($name);
}
return $properties;
}
Dries Buytaert
committed
Alex Pott
committed
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/**
* {@inheritdoc}
*/
public function hasMatchingRoute($route_name, $route_params) {
if (!isset($this->keyedRoutes)) {
$this->keyedRoutes = array();
foreach ($this->getRoutes() as $route) {
$this->keyedRoutes[$route['route_name']] = isset($route['route_params']) ? $route['route_params'] : array();
}
}
if (!isset($this->keyedRoutes[$route_name])) {
// We don't know about this route.
return FALSE;
}
if (empty($this->keyedRoutes[$route_name])) {
// We don't need to worry about route params, the route name is enough.
return TRUE;
}
foreach ($this->keyedRoutes[$route_name] as $key => $value) {
// If a required param is missing or doesn't match, return FALSE.
if (empty($route_params[$key]) || $route_params[$key] !== $value) {
return FALSE;
}
}
return TRUE;
}
/**
* {@inheritdoc}
*/
public function resetKeyedRoutes() {
unset($this->keyedRoutes);
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
parent::calculateDependencies();
foreach($this->tipsBag as $instance) {
$definition = $instance->getPluginDefinition();
$this->addDependency('module', $definition['provider']);
}
$this->addDependency('module', $this->module);
return $this->dependencies;
}