1 |
85ad3d82
|
Assos Assos
|
<?php
|
2 |
|
|
/**
|
3 |
|
|
* @file
|
4 |
|
|
* Contains the base row style plugin.
|
5 |
|
|
*/
|
6 |
|
|
|
7 |
|
|
/**
|
8 |
|
|
* The basic 'fields' row plugin
|
9 |
|
|
*
|
10 |
|
|
* This displays fields one after another, giving options for inline
|
11 |
|
|
* or not.
|
12 |
|
|
*
|
13 |
|
|
* @ingroup views_row_plugins
|
14 |
|
|
*/
|
15 |
|
|
class panels_views_plugin_row_fields extends views_plugin_row_fields {
|
16 |
|
|
function option_definition() {
|
17 |
|
|
$options = parent::option_definition();
|
18 |
|
|
|
19 |
|
|
$options['layout'] = array('default' => 'twocol');
|
20 |
|
|
$options['regions'] = array('default' => array());
|
21 |
|
|
|
22 |
|
|
return $options;
|
23 |
|
|
}
|
24 |
|
|
|
25 |
|
|
/**
|
26 |
|
|
* Provide a form for setting options.
|
27 |
|
|
*/
|
28 |
|
|
function options_form(&$form, &$form_state) {
|
29 |
|
|
parent::options_form($form, $form_state);
|
30 |
|
|
|
31 |
|
|
ctools_include('plugins', 'panels');
|
32 |
|
|
$layouts = panels_get_layouts();
|
33 |
|
|
$options = array();
|
34 |
|
|
foreach ($layouts as $name => $layout) {
|
35 |
|
|
if (empty($layout['builder'])) {
|
36 |
|
|
$options[$name] = $layout['title'];
|
37 |
|
|
}
|
38 |
|
|
if ($name == $this->options['layout']) {
|
39 |
|
|
$current_layout = $layout;
|
40 |
|
|
}
|
41 |
|
|
}
|
42 |
|
|
|
43 |
|
|
$form['layout'] = array(
|
44 |
|
|
'#prefix' => '<div class="container-inline">',
|
45 |
|
|
'#type' => 'select',
|
46 |
|
|
'#options' => $options,
|
47 |
|
|
'#title' => t('Panel layout'),
|
48 |
|
|
'#default_value' => $this->options['layout'],
|
49 |
|
|
);
|
50 |
|
|
|
51 |
|
|
$form['change'] = array(
|
52 |
|
|
'#type' => 'submit',
|
53 |
|
|
'#value' => t('Change'),
|
54 |
|
|
'#submit' => array('panels_change_layout_button'),
|
55 |
|
|
'#suffix' => '</div>',
|
56 |
|
|
);
|
57 |
|
|
|
58 |
|
|
if (!empty($current_layout)) {
|
59 |
|
|
$fields = $this->display->handler->get_field_labels();
|
60 |
|
|
$regions = panels_get_regions($current_layout, panels_new_display());
|
61 |
|
|
foreach ($fields as $id => $title) {
|
62 |
|
|
$form['regions'][$id] = array(
|
63 |
|
|
'#type' => 'select',
|
64 |
|
|
'#title' => $title,
|
65 |
|
|
'#options' => $regions,
|
66 |
|
|
);
|
67 |
|
|
if (!empty($this->options['regions'][$id]) && !empty($regions[$this->options['regions'][$id]])) {
|
68 |
|
|
$form['regions'][$id]['#default_value'] = $this->options['regions'][$id];
|
69 |
|
|
}
|
70 |
|
|
}
|
71 |
|
|
}
|
72 |
|
|
}
|
73 |
|
|
|
74 |
|
|
/**
|
75 |
|
|
* Perform any necessary changes to the form values prior to storage.
|
76 |
|
|
* There is no need for this function to actually store the data.
|
77 |
|
|
*/
|
78 |
|
|
function options_submit(&$form, &$form_state) {
|
79 |
|
|
$form_state['values']['row_options']['inline'] = array_filter($form_state['values']['row_options']['inline']);
|
80 |
|
|
}
|
81 |
|
|
|
82 |
|
|
/**
|
83 |
|
|
* Render a row object. This usually passes through to a theme template
|
84 |
|
|
* of some form, but not always.
|
85 |
|
|
*/
|
86 |
|
|
function render($row) {
|
87 |
|
|
ctools_include('plugins', 'panels');
|
88 |
|
|
$layout = panels_get_layout($this->options['layout']);
|
89 |
|
|
if (!$layout) {
|
90 |
|
|
// Fall back to normal behavior if the layout is somehow invalid. This
|
91 |
|
|
// can happen if the layout was removed, for example.
|
92 |
|
|
return theme($this->theme_functions(), array('view' => view, 'options' => $this->options, 'row' => $row, 'field_alias' => $this->field_alias));
|
93 |
|
|
}
|
94 |
|
|
|
95 |
|
|
// Store a backup copy of the array because we're going to be screwing
|
96 |
|
|
// with this a lot.
|
97 |
|
|
$fields = $this->view->field;
|
98 |
|
|
unset($this->view->field);
|
99 |
|
|
|
100 |
|
|
$meta = 'standard';
|
101 |
|
|
// This row style gets run many times; only run this code once.
|
102 |
|
|
if (empty($this->region_fields)) {
|
103 |
|
|
$this->region_fields = array();
|
104 |
|
|
$regions = panels_get_regions($layout, panels_new_display());
|
105 |
|
|
|
106 |
|
|
// Ensure each region has an empty array.
|
107 |
|
|
foreach ($regions as $region_id => $name) {
|
108 |
|
|
if (empty($default_region)) {
|
109 |
|
|
$default_region = $region_id;
|
110 |
|
|
}
|
111 |
|
|
|
112 |
|
|
$this->region_fields[$region_id] = array();
|
113 |
|
|
}
|
114 |
|
|
|
115 |
|
|
|
116 |
|
|
// Go through all our fields and place them in regions according to the
|
117 |
|
|
// settings.
|
118 |
|
|
foreach ($fields as $id => $field) {
|
119 |
|
|
$region_id = ''; // ensure we don't accidentlly use the last field's region.
|
120 |
|
|
if (!empty($this->options['regions'][$id]) && !empty($regions[$this->options['regions'][$id]])) {
|
121 |
|
|
$region_id = $this->options['regions'][$id];
|
122 |
|
|
}
|
123 |
|
|
else {
|
124 |
|
|
// Fallback to putting unknown fields into the first region.
|
125 |
|
|
$region_id = $default_region;
|
126 |
|
|
}
|
127 |
|
|
|
128 |
|
|
// Ensure this works in PHP4 by keeping the reference.
|
129 |
|
|
$this->region_fields[$region_id][$id] = &$fields[$id];
|
130 |
|
|
}
|
131 |
|
|
|
132 |
|
|
// We don't need to set 'inline' for every record, so we do it inside
|
133 |
|
|
// this loop. We do need to set inline if we are in the live preview
|
134 |
|
|
// so that the CSS will get transmitted via javascript:
|
135 |
|
|
$meta = !empty($this->view->live_preview) ? 'inline' : 'standard';
|
136 |
|
|
}
|
137 |
|
|
|
138 |
|
|
// Now that we have distributed our fields, go through the regions and
|
139 |
|
|
// render them into the content array.
|
140 |
5a7e6170
|
Florent Torregrosa
|
foreach ($this->region_fields as $region_id => $fields_list) {
|
141 |
|
|
$this->view->field = $fields_list;
|
142 |
85ad3d82
|
Assos Assos
|
$content[$region_id] = theme($this->theme_functions(), array('view' => $this->view, 'options' => $this->options, 'row' => $row));
|
143 |
|
|
}
|
144 |
|
|
|
145 |
|
|
// Restore our $fields array.
|
146 |
|
|
$this->view->field = $fields;
|
147 |
|
|
|
148 |
|
|
// Now that we have a rendered content array, render it.
|
149 |
|
|
return panels_print_layout($layout, $content, $meta);
|
150 |
|
|
}
|
151 |
|
|
}
|
152 |
|
|
|
153 |
|
|
/**
|
154 |
|
|
* Override handler for views_ui_edit_display_form
|
155 |
|
|
*/
|
156 |
|
|
function panels_change_layout_button($form, &$form_state) {
|
157 |
|
|
$display = &$form_state['view']->display[$form_state['display_id']];
|
158 |
|
|
$display->handler->options_submit($form, $form_state);
|
159 |
|
|
|
160 |
|
|
views_ui_cache_set($form_state['view']);
|
161 |
|
|
$form_state['rerender'] = TRUE;
|
162 |
|
|
$form_state['rebuild'] = TRUE;
|
163 |
|
|
} |