danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2 /**
|
danielebarchiesi@4
|
3 * @file
|
danielebarchiesi@4
|
4 * Contains the semantic row style plugin.
|
danielebarchiesi@4
|
5 */
|
danielebarchiesi@4
|
6
|
danielebarchiesi@4
|
7 /**
|
danielebarchiesi@4
|
8 * The semantic 'fields' row plugin
|
danielebarchiesi@4
|
9 *
|
danielebarchiesi@4
|
10 * This displays fields one after another, giving options for HTML element and
|
danielebarchiesi@4
|
11 * class.
|
danielebarchiesi@4
|
12 *
|
danielebarchiesi@4
|
13 * @ingroup views_row_plugins
|
danielebarchiesi@4
|
14 */
|
danielebarchiesi@4
|
15 class semanticviews_plugin_row_fields extends views_plugin_row {
|
danielebarchiesi@4
|
16 function option_definition() {
|
danielebarchiesi@4
|
17 $options = parent::option_definition();
|
danielebarchiesi@4
|
18 $options['skip_blank'] = array('default' => FALSE);
|
danielebarchiesi@4
|
19 // Field element_type and classes cannot be defined in the options
|
danielebarchiesi@4
|
20 // definition because the field handlers are not attached when the option
|
danielebarchiesi@4
|
21 // defaults are set up in the object's init() method.
|
danielebarchiesi@4
|
22 $options['semantic_html'] = array('default' => array());
|
danielebarchiesi@4
|
23 return $options;
|
danielebarchiesi@4
|
24 }
|
danielebarchiesi@4
|
25
|
danielebarchiesi@4
|
26 /**
|
danielebarchiesi@4
|
27 * Provide a form for setting options.
|
danielebarchiesi@4
|
28 */
|
danielebarchiesi@4
|
29 function options_form(&$form, &$form_state) {
|
danielebarchiesi@4
|
30 parent::options_form($form, $form_state);
|
danielebarchiesi@4
|
31 $form['semantic_html'] = array(
|
danielebarchiesi@4
|
32 '#tree' => TRUE,
|
danielebarchiesi@4
|
33 );
|
danielebarchiesi@4
|
34 foreach ($this->display->handler->get_handlers('field') as $field => $handler) {
|
danielebarchiesi@4
|
35 if (!$handler->options['exclude']) {
|
danielebarchiesi@4
|
36 $default_value = (isset($this->options['semantic_html'][$field]) && is_array($this->options['semantic_html'][$field])) ? $this->options['semantic_html'][$field] : array(
|
danielebarchiesi@4
|
37 'element_type' => 'div',
|
danielebarchiesi@4
|
38 'class' => '',
|
danielebarchiesi@4
|
39 'label_element_type' => 'label',
|
danielebarchiesi@4
|
40 'label_class' => ''
|
danielebarchiesi@4
|
41 );
|
danielebarchiesi@4
|
42 $form['semantic_html'][$field] = array(
|
danielebarchiesi@4
|
43 '#title' => $handler->label() ? $handler->label() : $handler->ui_name(),
|
danielebarchiesi@4
|
44 '#type' => 'fieldset',
|
danielebarchiesi@4
|
45 '#attributes' => array(
|
danielebarchiesi@4
|
46 'class' => 'clear-block',
|
danielebarchiesi@4
|
47 ),
|
danielebarchiesi@4
|
48 );
|
danielebarchiesi@4
|
49 $form['semantic_html'][$field]['element_type'] = array(
|
danielebarchiesi@4
|
50 '#prefix' => '<div class="views-left-30">',
|
danielebarchiesi@4
|
51 '#suffix' => '</div>',
|
danielebarchiesi@4
|
52 '#title' => 'Element',
|
danielebarchiesi@4
|
53 '#type' => 'textfield',
|
danielebarchiesi@4
|
54 '#size' => '10',
|
danielebarchiesi@4
|
55 '#default_value' => $default_value['element_type'],
|
danielebarchiesi@4
|
56 );
|
danielebarchiesi@4
|
57 $form['semantic_html'][$field]['class'] = array(
|
danielebarchiesi@4
|
58 '#prefix' => '<div class="views-right-70">',
|
danielebarchiesi@4
|
59 '#suffix' => '</div>',
|
danielebarchiesi@4
|
60 '#title' => 'Class attribute',
|
danielebarchiesi@4
|
61 '#type' => 'textfield',
|
danielebarchiesi@4
|
62 '#size' => '30',
|
danielebarchiesi@4
|
63 '#default_value' => $default_value['class'],
|
danielebarchiesi@4
|
64 );
|
danielebarchiesi@4
|
65 if ($handler->label()) {
|
danielebarchiesi@4
|
66 $form['semantic_html'][$field]['label_element_type'] = array(
|
danielebarchiesi@4
|
67 '#prefix' => '<div class="views-left-30">',
|
danielebarchiesi@4
|
68 '#suffix' => '</div>',
|
danielebarchiesi@4
|
69 '#title' => 'Label element',
|
danielebarchiesi@4
|
70 '#type' => 'textfield',
|
danielebarchiesi@4
|
71 '#size' => '10',
|
danielebarchiesi@4
|
72 '#default_value' => $default_value['label_element_type'],
|
danielebarchiesi@4
|
73 );
|
danielebarchiesi@4
|
74 $form['semantic_html'][$field]['label_class'] = array(
|
danielebarchiesi@4
|
75 '#prefix' => '<div class="views-right-70">',
|
danielebarchiesi@4
|
76 '#suffix' => '</div>',
|
danielebarchiesi@4
|
77 '#title' => 'Label class attribute',
|
danielebarchiesi@4
|
78 '#type' => 'textfield',
|
danielebarchiesi@4
|
79 '#size' => '30',
|
danielebarchiesi@4
|
80 '#default_value' => $default_value['label_class'],
|
danielebarchiesi@4
|
81 );
|
danielebarchiesi@4
|
82 }
|
danielebarchiesi@4
|
83 }
|
danielebarchiesi@4
|
84 }
|
danielebarchiesi@4
|
85 $form['skip_blank'] = array(
|
danielebarchiesi@4
|
86 '#type' => 'checkbox',
|
danielebarchiesi@4
|
87 '#default_value' => $this->options['skip_blank'],
|
danielebarchiesi@4
|
88 '#title' => t('Skip empty fields'),
|
danielebarchiesi@4
|
89 '#description' => t('Do not output anything when a field has no content. This has the same outcome as enabling the <em>Hide if empty</em> option for every field in this display.'),
|
danielebarchiesi@4
|
90 );
|
danielebarchiesi@4
|
91 }
|
danielebarchiesi@4
|
92
|
danielebarchiesi@4
|
93 /**
|
danielebarchiesi@4
|
94 * Validate the options form.
|
danielebarchiesi@4
|
95 */
|
danielebarchiesi@4
|
96 function options_validate(&$form, &$form_state) {
|
danielebarchiesi@4
|
97 parent::options_validate($form, $form_state);
|
danielebarchiesi@4
|
98 // TODO: validate that the elements and classes are valid HTML. This is not
|
danielebarchiesi@4
|
99 // a substitute for output filtering.
|
danielebarchiesi@4
|
100 }
|
danielebarchiesi@4
|
101
|
danielebarchiesi@4
|
102 /**
|
danielebarchiesi@4
|
103 * Validate the view.
|
danielebarchiesi@4
|
104 */
|
danielebarchiesi@4
|
105 function validate() {
|
danielebarchiesi@4
|
106 $errors = parent::validate();
|
danielebarchiesi@4
|
107
|
danielebarchiesi@4
|
108 $display_handler = $this->display->handler;
|
danielebarchiesi@4
|
109
|
danielebarchiesi@4
|
110 if (!$display_handler->is_defaulted('fields') && $display_handler->is_defaulted('row_plugin')) {
|
danielebarchiesi@4
|
111 $errors[] = t('Display "@display" overrides fields and must also override the row style plugin.', array('@display' => $this->display->display_title));
|
danielebarchiesi@4
|
112 }
|
danielebarchiesi@4
|
113
|
danielebarchiesi@4
|
114 return $errors;
|
danielebarchiesi@4
|
115 }
|
danielebarchiesi@4
|
116 }
|