annotate core/modules/tour/src/Entity/Tour.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\tour\Entity;
Chris@0 4
Chris@0 5 use Drupal\Core\Config\Entity\ConfigEntityBase;
Chris@0 6 use Drupal\tour\TipsPluginCollection;
Chris@0 7 use Drupal\tour\TourInterface;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Defines the configured tour entity.
Chris@0 11 *
Chris@0 12 * @ConfigEntityType(
Chris@0 13 * id = "tour",
Chris@0 14 * label = @Translation("Tour"),
Chris@0 15 * handlers = {
Chris@0 16 * "view_builder" = "Drupal\tour\TourViewBuilder",
Chris@0 17 * "access" = "Drupal\tour\TourAccessControlHandler",
Chris@0 18 * },
Chris@0 19 * admin_permission = "administer site configuration",
Chris@0 20 * entity_keys = {
Chris@0 21 * "id" = "id",
Chris@0 22 * "label" = "label"
Chris@0 23 * },
Chris@0 24 * config_export = {
Chris@0 25 * "id",
Chris@0 26 * "label",
Chris@0 27 * "module",
Chris@0 28 * "routes",
Chris@0 29 * "tips",
Chris@0 30 * },
Chris@0 31 * lookup_keys = {
Chris@0 32 * "routes.*.route_name"
Chris@0 33 * }
Chris@0 34 * )
Chris@0 35 */
Chris@0 36 class Tour extends ConfigEntityBase implements TourInterface {
Chris@0 37
Chris@0 38 /**
Chris@0 39 * The name (plugin ID) of the tour.
Chris@0 40 *
Chris@0 41 * @var string
Chris@0 42 */
Chris@0 43 protected $id;
Chris@0 44
Chris@0 45 /**
Chris@0 46 * The module which this tour is assigned to.
Chris@0 47 *
Chris@0 48 * @var string
Chris@0 49 */
Chris@0 50 protected $module;
Chris@0 51
Chris@0 52 /**
Chris@0 53 * The label of the tour.
Chris@0 54 *
Chris@0 55 * @var string
Chris@0 56 */
Chris@0 57 protected $label;
Chris@0 58
Chris@0 59 /**
Chris@0 60 * The routes on which this tour should be displayed.
Chris@0 61 *
Chris@0 62 * @var array
Chris@0 63 */
Chris@0 64 protected $routes = [];
Chris@0 65
Chris@0 66 /**
Chris@0 67 * The routes on which this tour should be displayed, keyed by route id.
Chris@0 68 *
Chris@0 69 * @var array
Chris@0 70 */
Chris@0 71 protected $keyedRoutes;
Chris@0 72
Chris@0 73 /**
Chris@0 74 * Holds the collection of tips that are attached to this tour.
Chris@0 75 *
Chris@0 76 * @var \Drupal\tour\TipsPluginCollection
Chris@0 77 */
Chris@0 78 protected $tipsCollection;
Chris@0 79
Chris@0 80 /**
Chris@0 81 * The array of plugin config, only used for export and to populate the $tipsCollection.
Chris@0 82 *
Chris@0 83 * @var array
Chris@0 84 */
Chris@0 85 protected $tips = [];
Chris@0 86
Chris@0 87 /**
Chris@0 88 * {@inheritdoc}
Chris@0 89 */
Chris@0 90 public function __construct(array $values, $entity_type) {
Chris@0 91 parent::__construct($values, $entity_type);
Chris@0 92
Chris@0 93 $this->tipsCollection = new TipsPluginCollection(\Drupal::service('plugin.manager.tour.tip'), $this->tips);
Chris@0 94 }
Chris@0 95
Chris@0 96 /**
Chris@0 97 * {@inheritdoc}
Chris@0 98 */
Chris@0 99 public function getRoutes() {
Chris@0 100 return $this->routes;
Chris@0 101 }
Chris@0 102
Chris@0 103 /**
Chris@0 104 * {@inheritdoc}
Chris@0 105 */
Chris@0 106 public function getTip($id) {
Chris@0 107 return $this->tipsCollection->get($id);
Chris@0 108 }
Chris@0 109
Chris@0 110 /**
Chris@0 111 * {@inheritdoc}
Chris@0 112 */
Chris@0 113 public function getTips() {
Chris@0 114 $tips = [];
Chris@0 115 foreach ($this->tips as $id => $tip) {
Chris@0 116 $tips[] = $this->getTip($id);
Chris@0 117 }
Chris@0 118 uasort($tips, function ($a, $b) {
Chris@0 119 if ($a->getWeight() == $b->getWeight()) {
Chris@0 120 return 0;
Chris@0 121 }
Chris@0 122 return ($a->getWeight() < $b->getWeight()) ? -1 : 1;
Chris@0 123 });
Chris@0 124
Chris@0 125 \Drupal::moduleHandler()->alter('tour_tips', $tips, $this);
Chris@0 126 return array_values($tips);
Chris@0 127 }
Chris@0 128
Chris@0 129 /**
Chris@0 130 * {@inheritdoc}
Chris@0 131 */
Chris@0 132 public function getModule() {
Chris@0 133 return $this->module;
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * {@inheritdoc}
Chris@0 138 */
Chris@0 139 public function hasMatchingRoute($route_name, $route_params) {
Chris@0 140 if (!isset($this->keyedRoutes)) {
Chris@0 141 $this->keyedRoutes = [];
Chris@0 142 foreach ($this->getRoutes() as $route) {
Chris@0 143 $this->keyedRoutes[$route['route_name']] = isset($route['route_params']) ? $route['route_params'] : [];
Chris@0 144 }
Chris@0 145 }
Chris@0 146 if (!isset($this->keyedRoutes[$route_name])) {
Chris@0 147 // We don't know about this route.
Chris@0 148 return FALSE;
Chris@0 149 }
Chris@0 150 if (empty($this->keyedRoutes[$route_name])) {
Chris@0 151 // We don't need to worry about route params, the route name is enough.
Chris@0 152 return TRUE;
Chris@0 153 }
Chris@0 154 foreach ($this->keyedRoutes[$route_name] as $key => $value) {
Chris@0 155 // If a required param is missing or doesn't match, return FALSE.
Chris@0 156 if (empty($route_params[$key]) || $route_params[$key] !== $value) {
Chris@0 157 return FALSE;
Chris@0 158 }
Chris@0 159 }
Chris@0 160 return TRUE;
Chris@0 161 }
Chris@0 162
Chris@0 163 /**
Chris@0 164 * {@inheritdoc}
Chris@0 165 */
Chris@0 166 public function resetKeyedRoutes() {
Chris@0 167 unset($this->keyedRoutes);
Chris@0 168 }
Chris@0 169
Chris@0 170 /**
Chris@0 171 * {@inheritdoc}
Chris@0 172 */
Chris@0 173 public function calculateDependencies() {
Chris@0 174 parent::calculateDependencies();
Chris@0 175
Chris@0 176 foreach ($this->tipsCollection as $instance) {
Chris@0 177 $definition = $instance->getPluginDefinition();
Chris@0 178 $this->addDependency('module', $definition['provider']);
Chris@0 179 }
Chris@0 180
Chris@0 181 $this->addDependency('module', $this->module);
Chris@0 182 return $this;
Chris@0 183 }
Chris@0 184
Chris@0 185 }