executable = $executable; } /** * Retrieves the executable version of this view. * * @param bool $reset * Get a new Drupal\views\ViewExecutable instance. * * @return Drupal\views\ViewExecutable * The executable version of this view. */ public function getExecutable($reset = FALSE) { if (!isset($this->executable) || $reset) { $this->setExecutable(new ViewExecutable($this)); } return $this->executable; } /** * Initializes the display. * * @todo Inspect calls to this and attempt to clean up. * * @param bool $reset * If the display should be reset. Defaults to FALSE. * * @see Drupal\views\ViewExecutable::initDisplay() */ public function initDisplay($reset = FALSE) { $this->getExecutable()->initDisplay($reset); } /** * Returns the name of the module implementing this view. */ public function getModule() { return $this->module; } /** * Overrides Drupal\Core\Entity\EntityInterface::uri(). */ public function uri() { $info = $this->entityInfo(); return array( 'path' => $info['list path'], ); } /** * Overrides Drupal\Core\Entity\EntityInterface::id(). */ public function id() { return $this->name; } /** * Implements Drupal\views\ViewStorageInterface::enable(). */ public function enable() { $this->disabled = FALSE; $this->save(); } /** * Implements Drupal\views\ViewStorageInterface::disable(). */ public function disable() { $this->disabled = TRUE; $this->save(); } /** * Implements Drupal\views\ViewStorageInterface::isEnabled(). */ public function isEnabled() { return !$this->disabled; } /** * Return the human readable name for a view. * * When a certain view doesn't have a human readable name return the machine readable name. */ public function getHumanName() { if (!empty($this->human_name)) { $human_name = $this->human_name; } else { $human_name = $this->name; } return $human_name; } /** * Perform automatic updates when loading or importing a view. * * Over time, some things about Views or Drupal data has changed. * this attempts to do some automatic updates that must happen * to ensure older views will at least try to work. */ public function update() { // When views are converted automatically the base_table should be renamed // to have a working query. $this->base_table = views_move_table($this->base_table); } /** * Adds a new display handler to the view, automatically creating an ID. * * @param string $plugin_id * (optional) The plugin type from the Views plugin annotation. Defaults to * 'page'. * @param string $title * (optional) The title of the display. Defaults to NULL. * @param string $id * (optional) The ID to use, e.g., 'default', 'page_1', 'block_2'. Defaults * to NULL. * * @return string|false * The key to the display in $view->display, or FALSE if no plugin ID was * provided. */ public function addDisplay($plugin_id = 'page', $title = NULL, $id = NULL) { if (empty($plugin_id)) { return FALSE; } $plugin = views_get_plugin_definition('display', $plugin_id); if (empty($plugin)) { $plugin['title'] = t('Broken'); } if (empty($id)) { $id = $this->generateDisplayId($plugin_id); // Generate a unique human-readable name by inspecting the counter at the // end of the previous display ID, e.g., 'page_1'. if ($id !== 'default') { preg_match("/[0-9]+/", $id, $count); $count = $count[0]; } else { $count = ''; } if (empty($title)) { // If there is no title provided, use the plugin title, and if there are // multiple displays, append the count. $title = $plugin['title']; if ($count > 1) { $title .= ' ' . $count; } } } $display_options = array( 'display_plugin' => $plugin_id, 'id' => $id, 'display_title' => $title, 'position' => NULL, 'display_options' => array(), ); // Add the display options to the view. $this->display[$id] = $display_options; return $id; } /** * Generates a display ID of a certain plugin type. * * @param string $plugin_id * Which plugin should be used for the new display ID. */ protected function generateDisplayId($plugin_id) { // 'default' is singular and is unique, so just go with 'default' // for it. For all others, start counting. if ($plugin_id == 'default') { return 'default'; } // Initial ID. $id = $plugin_id . '_1'; $count = 1; // Loop through IDs based upon our style plugin name until // we find one that is unused. while (!empty($this->display[$id])) { $id = $plugin_id . '_' . ++$count; } return $id; } /** * Creates a new display and a display handler for it. * * @param string $plugin_id * (optional) The plugin type from the Views plugin annotation. Defaults to * 'page'. * @param string $title * (optional) The title of the display. Defaults to NULL. * @param string $id * (optional) The ID to use, e.g., 'default', 'page_1', 'block_2'. Defaults * to NULL. * * @return Drupal\views\Plugin\views\display\DisplayPluginBase * A reference to the new handler object. */ public function &newDisplay($plugin_id = 'page', $title = NULL, $id = NULL) { $id = $this->addDisplay($plugin_id, $title, $id); return $this->getExecutable()->newDisplay($id); } /** * Gets a list of displays included in the view. * * @return array * An array of display types that this view includes. */ function getDisplaysList() { $manager = drupal_container()->get('plugin.manager.views.display'); $displays = array(); foreach ($this->display as $display) { $definition = $manager->getDefinition($display['display_plugin']); if (!empty($definition['admin'])) { $displays[$definition['admin']] = TRUE; } } ksort($displays); return array_keys($displays); } /** * Gets a list of paths assigned to the view. * * @return array * An array of paths for this view. */ public function getPaths() { $all_paths = array(); if (empty($this->display)) { $all_paths[] = t('Edit this view to add a display.'); } else { foreach ($this->display as $display) { if (!empty($display['display_options']['path'])) { $path = $display['display_options']['path']; if ($this->isEnabled() && strpos($path, '%') === FALSE) { $all_paths[] = l('/' . $path, $path); } else { $all_paths[] = check_plain('/' . $path); } } } } return array_unique($all_paths); } }