From df47b72743cd0f612e05db94f1a3e6d4f3fb5ffd Mon Sep 17 00:00:00 2001 From: dereine <dereine@99340.no-reply.drupal.org> Date: Sun, 26 Aug 2012 10:58:48 +0200 Subject: [PATCH] Issue #1747810 by dawehner, tim.plunkett: Move wizard-specific meta-information from plugin annotation to a class property. --- .../views/Plugin/views/wizard/Comment.php | 64 ++++--- lib/Drupal/views/Plugin/views/wizard/File.php | 26 ++- lib/Drupal/views/Plugin/views/wizard/Node.php | 69 +++++--- .../Plugin/views/wizard/NodeRevision.php | 72 ++++---- .../Plugin/views/wizard/TaxonomyTerm.php | 26 +-- .../views/Plugin/views/wizard/Users.php | 52 +++--- .../Plugin/views/wizard/WizardInterface.php | 2 +- .../Plugin/views/wizard/WizardPluginBase.php | 156 +++++++++++++++--- 8 files changed, 322 insertions(+), 145 deletions(-) diff --git a/lib/Drupal/views/Plugin/views/wizard/Comment.php b/lib/Drupal/views/Plugin/views/wizard/Comment.php index 48c0743f862c..20893eac9b9e 100644 --- a/lib/Drupal/views/Plugin/views/wizard/Comment.php +++ b/lib/Drupal/views/Plugin/views/wizard/Comment.php @@ -21,36 +21,48 @@ * @Plugin( * id = "comment", * base_table = "comment", - * created_column = "created", - * title = @Translation("Comments"), - * filters = { - * "status" = { - * "value" = 1, - * "table" = "comment", - * "field" = "status" - * }, - * "status_node" = { - * "value" = 1, - * "table" = "node", - * "field" = "status", - * "relationship" = "nid", - * } - * }, - * path_field = { - * "id" = "cid", - * "table" = "comment", - * "field" = "cid", - * "exclude" = TRUE, - * "link_to_comment" = FALSE, - * "alter" = { - * "alter_text" = 1, - * "text" = "comment/[cid]#comment-[cid]" - * } - * } + * title = @Translation("Comments") * ) */ class Comment extends WizardPluginBase { + /** + * Set the created column. + */ + protected $createdColumn = 'created'; + + /** + * Set default values for the path field options. + */ + protected $pathField = array( + 'id' => 'cid', + 'table' => 'comment', + 'field' => 'cid', + 'exclude' => TRUE, + 'link_to_comment' => FALSE, + 'alter' => array( + 'alter_text' => TRUE, + 'text' => 'comment/[cid]#comment-[cid]' + ), + ); + + /** + * Set default values for the filters. + */ + protected $filters = array( + 'status' => array( + 'value' => TRUE, + 'table' => 'comment', + 'field' => 'status' + ), + 'status_node' => array( + 'value' => TRUE, + 'table' => 'node', + 'field' => 'status', + 'relationship' => 'nid' + ) + ); + protected function row_style_options($type) { $options = array(); $options['comment'] = t('comments'); diff --git a/lib/Drupal/views/Plugin/views/wizard/File.php b/lib/Drupal/views/Plugin/views/wizard/File.php index 7ddc060d1ce3..d97460db08a7 100644 --- a/lib/Drupal/views/Plugin/views/wizard/File.php +++ b/lib/Drupal/views/Plugin/views/wizard/File.php @@ -17,19 +17,27 @@ * @Plugin( * id = "file_managed", * base_table = "file_managed", - * created_column = "timestamp", - * title = @Translation("Files"), - * path_field = { - * "id" = "uri", - * "table" = "file_managed", - * "field" = "uri", - * "exclude" = TRUE, - * "file_download_path" = TRUE - * } + * title = @Translation("Files") * ) */ class File extends WizardPluginBase { + /** + * Set the created column. + */ + protected $createdColumn = 'timestamp'; + + /** + * Set default values for the path field options. + */ + protected $pathField = array( + 'id' => 'uri', + 'table' => 'file_managed', + 'field' => 'uri', + 'exclude' => TRUE, + 'file_download_path' => TRUE + ); + protected function default_display_options($form, $form_state) { $display_options = parent::default_display_options($form, $form_state); diff --git a/lib/Drupal/views/Plugin/views/wizard/Node.php b/lib/Drupal/views/Plugin/views/wizard/Node.php index c9244b408805..4b1b5c1e7365 100644 --- a/lib/Drupal/views/Plugin/views/wizard/Node.php +++ b/lib/Drupal/views/Plugin/views/wizard/Node.php @@ -21,35 +21,56 @@ * @Plugin( * id = "node", * base_table = "node", - * created_column = "created", - * title = @Translation("Content"), - * available_sorts = { - * "title:DESC" = @Translation("Title") - * }, - * filters = { - * "status" = { - * "value" = 1, - * "table" = "node", - * "field" = "status" - * } - * }, - * path_field = { - * "id" = "nid", - * "table" = "node", - * "field" = "nid", - * "exclude" = TRUE, - * "link_to_node" = FALSE, - * "alter" = { - * "alter_text" = 1, - * "text" = "node/[nid]" - * } - * } + * title = @Translation("Content") * ) - * */ class Node extends WizardPluginBase { + /** + * Set the created column. + */ + protected $createdColumn = 'created'; + + /** + * Set default values for the path field options. + */ + protected $pathField = array( + 'id' => 'nid', + 'table' => 'node', + 'field' => 'nid', + 'exclude' => TRUE, + 'link_to_node' => FALSE, + 'alter' => array( + 'alter_text' => TRUE, + 'text' => 'node/[nid]' + ) + ); + + /** + * Set default values for the filters. + */ + protected $filters = array( + 'status' => array( + 'value' => TRUE, + 'table' => 'node', + 'field' => 'status' + ) + ); + + /** + * Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::getAvailableSorts(). + * + * @return array + */ + public function getAvailableSorts() { + // You can't execute functions in properties, so override the method + return array( + 'title:DESC' => t('Title') + ); + } + + protected function row_style_options($type) { $options = array(); $options['teasers'] = t('teasers'); diff --git a/lib/Drupal/views/Plugin/views/wizard/NodeRevision.php b/lib/Drupal/views/Plugin/views/wizard/NodeRevision.php index 9380cb42f208..8981260c75c4 100644 --- a/lib/Drupal/views/Plugin/views/wizard/NodeRevision.php +++ b/lib/Drupal/views/Plugin/views/wizard/NodeRevision.php @@ -21,38 +21,54 @@ * @Plugin( * id = "node_revision", * base_table = "node_revision", - * created_column = "timestamp", - * title = @Translation("Content revisions"), - * filters = { - * "status" = { - * "value" = 1, - * "table" = "node", - * "field" = "status" - * } - * }, - * path_field = { - * "id" = "vid", - * "table" = "node_revision", - * "field" = "vid", - * "exclude" = TRUE, - * "alter" = { - * "alter_text" = 1, - * "text" = "node/[nid]/revisions/[vid]/view" - * } - * }, - * path_fields_supplemental = { - * { - * "id" = "nid", - * "table" = "node", - * "field" = "nid", - * "exclude" = TRUE, - * "link_to_node" = FALSE - * } - * } + * title = @Translation("Content revisions") * ) */ class NodeRevision extends WizardPluginBase { + /** + * Set the created column. + */ + protected $createdColumn = 'timestamp'; + + /** + * Set default values for the path field options. + */ + protected $pathField = array( + 'id' => 'vid', + 'table' => 'node_revision', + 'field' => 'vid', + 'exclude' => TRUE, + 'alter' => array( + 'alter_text' => TRUE, + 'text' => 'node/[nid]/revisions/[vid]/view' + ) + ); + + /** + * Set the additional information for the pathField property. + */ + protected $pathFieldsSupplemental = array( + array( + 'id' => 'nid', + 'table' => 'node', + 'field' => 'nid', + 'exclude' => TRUE, + 'link_to_node' => FALSE + ) + ); + + /** + * Set default values for the filters. + */ + protected $filters = array( + 'status' => array( + 'value' => TRUE, + 'table' => 'node', + 'field' => 'status' + ) + ); + /** * Node revisions do not support full posts or teasers, so remove them. */ diff --git a/lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php b/lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php index 16655601accc..3ead80275c34 100644 --- a/lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php +++ b/lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php @@ -17,21 +17,25 @@ * @Plugin( * id = "taxonomy_term", * base_table = "taxonomy_term_data", - * title = @Translation("Taxonomy terms"), - * path_field = { - * "id" = "tid", - * "table" = "taxonomy_term_data", - * "field" = "tid", - * "exclude" = TRUE, - * "alter" = { - * "alter_text" = 1, - * "text" = "taxonomy/term/[tid]" - * } - * } + * title = @Translation("Taxonomy terms") * ) */ class TaxonomyTerm extends WizardPluginBase { + /** + * Set default values for the path field options. + */ + protected $pathField = array( + 'id' => 'tid', + 'table' => 'taxonomy_term_data', + 'field' => 'tid', + 'exclude' => TRUE, + 'alter' => array( + 'alter_text' => TRUE, + 'text' => 'taxonomy/term/[tid]' + ) + ); + protected function default_display_options($form, $form_state) { $display_options = parent::default_display_options($form, $form_state); diff --git a/lib/Drupal/views/Plugin/views/wizard/Users.php b/lib/Drupal/views/Plugin/views/wizard/Users.php index 0f007547d6c1..3d42f20d0265 100644 --- a/lib/Drupal/views/Plugin/views/wizard/Users.php +++ b/lib/Drupal/views/Plugin/views/wizard/Users.php @@ -21,30 +21,42 @@ * @Plugin( * id = "users", * base_table = "users", - * created_column = "created", - * title = @Translation("Users"), - * filters = { - * "status" = { - * "value" = 1, - * "table" = "users", - * "field" = "status" - * } - * }, - * path_field = { - * "id" = "uid", - * "table" = "users", - * "field" = "uid", - * "exclude" = TRUE, - * "link_to_user" = FALSE, - * "alter" = { - * "alter_text" = 1, - * "text" = "user/[uid]" - * } - * } + * title = @Translation("Users") * ) */ class Users extends WizardPluginBase { + /** + * Set the created column. + */ + protected $createdColumn = 'created'; + + /** + * Set default values for the path field options. + */ + protected $pathField = array( + 'id' => 'uid', + 'table' => 'users', + 'field' => 'uid', + 'exclude' => TRUE, + 'link_to_user' => FALSE, + 'alter' => array( + 'alter_text' => TRUE, + 'text' => 'user/[uid]' + ) + ); + + /** + * Set default values for the filters. + */ + protected $filters = array( + 'status' => array( + 'value' => TRUE, + 'table' => 'users', + 'field' => 'status' + ) + ); + protected function default_display_options($form, $form_state) { $display_options = parent::default_display_options($form, $form_state); diff --git a/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php b/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php index c7d702f7ca66..ea8914086440 100644 --- a/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php +++ b/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php @@ -31,7 +31,7 @@ function validate($form, &$form_state); * * @return a view object. * - * @throws ViewsWizardException in the event of a problem. + * @throws Drupal\views\Plugin\views\wizard\WizardException */ function create_view($form, &$form_state); diff --git a/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php b/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php index c10ddba4e629..6afe09e40ee1 100644 --- a/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php +++ b/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php @@ -17,16 +17,81 @@ */ abstract class WizardPluginBase implements WizardInterface { + /** + * Stores the base table connected with the wizard. + * + * @var string + */ protected $base_table; + /** + * Stores the entity type connected with the wizard. + * + * There might be base tables connected with entity types, if not this would + * be empty. + * + * @var string + */ protected $entity_type; + /** + * Contains the information from entity_get_info of the $entity_type. + * + * @var array + */ protected $entity_info = array(); protected $validated_views = array(); + /** + * The wizard plugin definition, like the base_table. + * + * @var array + */ protected $plugin = array(); + /** + * The table column used for sorting by create date of this wizard. + * + * @var string + */ + protected $createdColumn; + + /** + * Stores a views item configuration array used for a jump-menu field. + * + * @var array + */ + protected $pathField = array(); + + /** + * Stores additional fields required to generate the pathField. + * + * @var array + */ + protected $pathFieldsSupplemental = array(); + + /** + * Stores views items configuration arrays for filters added by the wizard. + * + * @var array + */ + protected $filters = array(); + + /** + * Stores views items configuration arrays for sorts added by the wizard. + * + * @var array + */ + protected $sorts = array(); + + /** + * Stores the available store criteria. + * + * @var array + */ + protected $availableSorts = array(); + protected $filter_defaults = array( 'id' => NULL, 'expose' => array('operator' => FALSE), @@ -37,13 +102,6 @@ function __construct($plugin) { $this->base_table = $plugin['base_table']; $default = $this->filter_defaults; - if (isset($plugin['filters'])) { - foreach ($plugin['filters'] as $name => $info) { - $default['id'] = $name; - $plugin['filters'][$name] = $info + $default; - } - } - $this->plugin = $plugin; $entities = entity_get_info(); @@ -56,15 +114,65 @@ function __construct($plugin) { } /** - * Gets the active stored plugin information. + * Returns the createdColumn property. + * + * @return string + */ + public function getCreatedColumn() { + return $this->createdColumn; + } + + /** + * Returns the pathField property. * * @return array - * The plugin information. */ - function getPlugin() { - return $this->plugin; + public function getPathField() { + return $this->pathField; } + /** + * Returns the pathFieldsSupplemental property. + * + * @var array() + */ + public function getPathFieldsSupplemental() { + return $this->pathFieldsSupplemental; + } + + /** + * Returns the filters property. + * + * @return array + */ + public function getFilters() { + $filters = array(); + + foreach ($this->filters as $name => $info) { + $default['id'] = $name; + $filters[$name] = $info + $default; + } + + return $filters; + } + + /** + * Returns the availableSorts property. + * + * @return array + */ + public function getAvailableSorts() { + return $this->availableSorts; + } + + /** + * Returns the sorts property. + * + * @return array + */ + public function getSorts() { + return $this->sorts; + } function build_form($form, &$form_state) { $style_options = views_fetch_plugin_names('style', 'normal', array($this->base_table)); @@ -314,7 +422,6 @@ protected function build_form_style(&$form, &$form_state, $type) { elseif ($style_plugin->usesFields()) { $style_form['row_plugin'] = array('#markup' => '<span>' . t('of fields') . '</span>'); } - $style_plugin->wizard_form($form, $form_state, $type); } /** @@ -436,14 +543,15 @@ protected function build_sorts(&$form, &$form_state) { 'none' => t('Unsorted'), ); // Check if we are allowed to sort by creation date. - if (!empty($this->plugin['created_column'])) { + $created_column = $this->getCreatedColumn(); + if ($created_column) { $sorts += array( - $this->plugin['created_column'] . ':DESC' => t('Newest first'), - $this->plugin['created_column'] . ':ASC' => t('Oldest first'), + $created_column . ':DESC' => t('Newest first'), + $created_column . ':ASC' => t('Oldest first'), ); } - if (isset($this->plugin['available_sorts'])) { - $sorts += $this->plugin['available_sorts']; + if ($available_sorts = $this->getAvailableSorts()) { + $sorts += $available_sorts; } foreach ($sorts as &$option) { @@ -458,7 +566,7 @@ protected function build_sorts(&$form, &$form_state) { '#type' => 'select', '#title' => t('sorted by'), '#options' => $sorts, - '#default_value' => isset($this->plugin['created_column']) ? $this->plugin['created_column'] . ':DESC' : 'none', + '#default_value' => isset($created_column) ? $created_column . ':DESC' : 'none', ); } } @@ -612,10 +720,8 @@ protected function default_display_filters($form, $form_state) { $filters = array(); // Add any filters provided by the plugin. - if (isset($this->plugin['filters'])) { - foreach ($this->plugin['filters'] as $name => $info) { - $filters[$name] = $info; - } + foreach ($this->getFilters() as $name => $info) { + $filters[$name] = $info; } // Add any filters specified by the user when filling out the wizard. @@ -691,10 +797,8 @@ protected function default_display_sorts($form, $form_state) { $sorts = array(); // Add any sorts provided by the plugin. - if (isset($this->plugin['sorts'])) { - foreach ($this->plugin['sorts'] as $name => $info) { - $sorts[$name] = $info; - } + foreach ($this->getSorts() as $name => $info) { + $sorts[$name] = $info; } // Add any sorts specified by the user when filling out the wizard. -- GitLab