annotate sites/all/modules/quicktabs/includes/quicktabs_style_plugin.inc @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents b74b41bb73f0
children
rev   line source
danielebarchiesi@2 1 <?php
danielebarchiesi@2 2 // Id:$
danielebarchiesi@2 3
danielebarchiesi@2 4 /**
danielebarchiesi@2 5 * @file Add Quicktabs style plugins to Views.
danielebarchiesi@2 6 */
danielebarchiesi@2 7
danielebarchiesi@2 8 /**
danielebarchiesi@2 9 * Style plugin to display Quicktabs.
danielebarchiesi@2 10 */
danielebarchiesi@2 11 class quicktabs_style_plugin extends views_plugin_style {
danielebarchiesi@2 12
danielebarchiesi@2 13 // Allow some options for the style.
danielebarchiesi@2 14 function option_definition() {
danielebarchiesi@2 15 $options = parent::option_definition();
danielebarchiesi@2 16 $options['tab_style'] = array('default' => 'default');
danielebarchiesi@2 17 $options['tab_title_field'] = array('default' => NULL);
danielebarchiesi@2 18
danielebarchiesi@2 19 return $options;
danielebarchiesi@2 20 }
danielebarchiesi@2 21
danielebarchiesi@2 22 // Create the options form.
danielebarchiesi@2 23 function options_form(&$form, &$form_state) {
danielebarchiesi@2 24 parent::options_form($form, $form_state);
danielebarchiesi@2 25 $options = array();
danielebarchiesi@2 26 $styles = module_invoke_all('quicktabs_tabstyles');
danielebarchiesi@2 27 // The keys used for options must be valid html id-s.
danielebarchiesi@2 28 // Removing the css file path, because that can't be used.
danielebarchiesi@2 29 foreach ($styles as $style) {
danielebarchiesi@2 30 $options[$style] = $style;
danielebarchiesi@2 31 }
danielebarchiesi@2 32 ksort($options);
danielebarchiesi@2 33 $form['tab_style'] = array(
danielebarchiesi@2 34 '#type' => 'select',
danielebarchiesi@2 35 '#title' => t('Tab style'),
danielebarchiesi@2 36 '#options' => array('nostyle' => t('No style'), 'default' => t('Default style')) + $options,
danielebarchiesi@2 37 '#default_value' => $this->options['tab_style'],
danielebarchiesi@2 38 '#description' => t('The tab style that will be applied to this set of tabs. Note that this style may not show in the live preview.'),
danielebarchiesi@2 39 '#weight' => -5,
danielebarchiesi@2 40 );
danielebarchiesi@2 41
danielebarchiesi@2 42 if (isset($form['grouping'])) {
danielebarchiesi@2 43 $options = array();
danielebarchiesi@2 44 foreach (element_children($form['grouping']) as $key => $value) {
danielebarchiesi@2 45 if (!empty($form['grouping'][$key]['field']['#options']) && is_array($form['grouping'][$key]['field']['#options'])) {
danielebarchiesi@2 46 $options = array_merge($options, $form['grouping'][$key]['field']['#options']);
danielebarchiesi@2 47 }
danielebarchiesi@2 48 }
danielebarchiesi@2 49
danielebarchiesi@2 50 unset($options['']);
danielebarchiesi@2 51 $form['tab_title_field'] = array(
danielebarchiesi@2 52 '#type' => 'select',
danielebarchiesi@2 53 '#title' => t('Title field'),
danielebarchiesi@2 54 '#options' => $options,
danielebarchiesi@2 55 '#required' => TRUE,
danielebarchiesi@2 56 '#default_value' => $this->options['tab_title_field'],
danielebarchiesi@2 57 '#description' => t('Select the field that will be used as the tab title.'),
danielebarchiesi@2 58 '#weight' => -3,
danielebarchiesi@2 59 );
danielebarchiesi@2 60 }
danielebarchiesi@2 61 }
danielebarchiesi@2 62
danielebarchiesi@2 63 // Ensure we have all the settings necessary to render into tabs.
danielebarchiesi@2 64 function validate() {
danielebarchiesi@2 65 $errors = parent::validate();
danielebarchiesi@2 66
danielebarchiesi@2 67 // Ensure that we're using the field row style.
danielebarchiesi@2 68 if (!$this->row_plugin->uses_fields()) {
danielebarchiesi@2 69 $errors[] = t('Display "@display" uses the "@style" row style, but the Quicktabs display style requires use of the "Fields" row style.', array('@display' => $this->display->display_title, '@style' => $this->row_plugin->definition['title']));
danielebarchiesi@2 70 }
danielebarchiesi@2 71
danielebarchiesi@2 72 // Ensure that a valid tab title field is selected.
danielebarchiesi@2 73 $fields = $this->display->handler->get_handlers('field');
danielebarchiesi@2 74 if (empty($this->options['tab_title_field']) || !isset($fields[$this->options['tab_title_field']])) {
danielebarchiesi@2 75 $errors[] = t('The Quicktabs display style requires that a field be configured to be used as the tab title.');
danielebarchiesi@2 76 }
danielebarchiesi@2 77
danielebarchiesi@2 78 return $errors;
danielebarchiesi@2 79 }
danielebarchiesi@2 80
danielebarchiesi@2 81 // Override the render functionality.
danielebarchiesi@2 82 function render() {
danielebarchiesi@2 83 if (empty($this->row_plugin)) {
danielebarchiesi@2 84 vpr('views_plugin_style_default: Missing row plugin');
danielebarchiesi@2 85 return;
danielebarchiesi@2 86 }
danielebarchiesi@2 87
danielebarchiesi@2 88 $view = $this->view;
danielebarchiesi@2 89 $qt_name = 'view__' . $view->name .'__'. $view->current_display;
danielebarchiesi@2 90
danielebarchiesi@2 91 // Group the rows according to the grouping field, if specified.
danielebarchiesi@2 92 $sets = $this->render_grouping($this->view->result, $this->options['grouping']);
danielebarchiesi@2 93 $tabs = array();
danielebarchiesi@2 94
danielebarchiesi@2 95 foreach ($sets as $title => $records) {
danielebarchiesi@2 96 if ($this->uses_row_plugin()) {
danielebarchiesi@2 97 $rows = array();
danielebarchiesi@2 98 foreach ($records as $row_index => $row) {
danielebarchiesi@2 99 $this->view->row_index = $row_index;
danielebarchiesi@2 100 $rows[] = $this->row_plugin->render($row);
danielebarchiesi@2 101 }
danielebarchiesi@2 102 }
danielebarchiesi@2 103 else {
danielebarchiesi@2 104 $rows = $records;
danielebarchiesi@2 105 }
danielebarchiesi@2 106
danielebarchiesi@2 107 // If grouped, we'll be using the group title for each tab.
danielebarchiesi@2 108 if ($this->options['grouping']) {
danielebarchiesi@2 109
danielebarchiesi@2 110 // Remove labels from titles.
danielebarchiesi@2 111 foreach (element_children($this->options['grouping']) as $key => $value) {
danielebarchiesi@2 112 if (!empty($this->view->field[$this->options['grouping'][$key]['field']]->options['label'])) {
danielebarchiesi@2 113 $title = str_replace($this->view->field[$this->options['grouping'][$key]['field']]->options['label'] . ': ', '', $title);
danielebarchiesi@2 114 }
danielebarchiesi@2 115 }
danielebarchiesi@2 116
danielebarchiesi@2 117 $contents = '';
danielebarchiesi@2 118 foreach ($rows as $row) {
danielebarchiesi@2 119 $contents .= '<div class="quicktabs-views-group">' . $row . '</div>';
danielebarchiesi@2 120 }
danielebarchiesi@2 121 $tabs[] = array(
danielebarchiesi@2 122 'title' => $title,
danielebarchiesi@2 123 'contents' => array('#markup' => $contents),
danielebarchiesi@2 124 );
danielebarchiesi@2 125 }
danielebarchiesi@2 126
danielebarchiesi@2 127 // If not grouped, there's just one set of rows that we loop through.
danielebarchiesi@2 128 else {
danielebarchiesi@2 129 foreach ($rows as $index => $row) {
danielebarchiesi@2 130 $title = $this->get_field($index, $this->options['tab_title_field']);
danielebarchiesi@2 131 $tabs[] = array(
danielebarchiesi@2 132 'title' => $title,
danielebarchiesi@2 133 'contents' => array('#markup' => $row),
danielebarchiesi@2 134 );
danielebarchiesi@2 135 }
danielebarchiesi@2 136 }
danielebarchiesi@2 137 }
danielebarchiesi@2 138
danielebarchiesi@2 139 $overrides = array('style' => $view->style_options['tab_style'], 'sorted' => TRUE);
danielebarchiesi@2 140 $quicktabs = quicktabs_build_quicktabs($qt_name, $overrides, $tabs);
danielebarchiesi@2 141
danielebarchiesi@2 142 $output = drupal_render($quicktabs);
danielebarchiesi@2 143
danielebarchiesi@2 144 // If doing a live preview, add the JavaScript directly to the output.
danielebarchiesi@2 145 if (isset($view->live_preview) && $view->live_preview) {
danielebarchiesi@2 146 $js = drupal_add_js();
danielebarchiesi@2 147 $qtsettings = array();
danielebarchiesi@2 148 foreach ($js['settings']['data'] as $settings) {
danielebarchiesi@2 149 if (isset($settings['quicktabs']['qt_'. $qt_name])) {
danielebarchiesi@2 150 $qtsettings = $settings['quicktabs']['qt_'. $qt_name];
danielebarchiesi@2 151 break;
danielebarchiesi@2 152 }
danielebarchiesi@2 153 }
danielebarchiesi@2 154
danielebarchiesi@2 155 $output .= "<script type=\"text/javascript\">\n";
danielebarchiesi@2 156 $output .= "Drupal.settings.quicktabs = Drupal.settings.quicktabs || {};\n";
danielebarchiesi@2 157 $output .= "jQuery.extend(Drupal.settings.quicktabs, ". json_encode(array('qt_'. $qt_name => $qtsettings)) .");\n";
danielebarchiesi@2 158 $output .= "</script>\n";
danielebarchiesi@2 159 }
danielebarchiesi@2 160
danielebarchiesi@2 161 unset($view->row_index);
danielebarchiesi@2 162
danielebarchiesi@2 163 return $output;
danielebarchiesi@2 164 }
danielebarchiesi@2 165
danielebarchiesi@2 166 }