1
|
<?php
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
class panels_layouts_ui extends ctools_export_ui {
|
9
|
var $lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam egestas congue nibh, vel dictum ante posuere vitae. Cras gravida massa tempor metus eleifend sed elementum tortor scelerisque. Vivamus egestas, tortor quis luctus tristique, sem velit adipiscing risus, et tempus enim felis in massa. Morbi viverra, nisl quis rhoncus imperdiet, turpis massa vestibulum turpis, egestas faucibus nibh metus vel nunc. In hac habitasse platea dictumst. Nunc sit amet nisi quis ipsum tincidunt semper. Donec ac urna enim, et placerat arcu. Morbi eu laoreet justo. Nullam nec velit eu neque mattis pulvinar sed non libero. Sed sed vulputate erat. Fusce sit amet dui nibh.";
|
10
|
|
11
|
function hook_menu(&$items) {
|
12
|
|
13
|
|
14
|
if (empty($this->plugin['menu']['items']['add'])) {
|
15
|
return;
|
16
|
}
|
17
|
|
18
|
|
19
|
$this->plugin['menu']['items']['list callback']['type'] = MENU_LOCAL_TASK;
|
20
|
|
21
|
|
22
|
$base = $this->plugin['menu']['items']['add'];
|
23
|
|
24
|
unset($this->plugin['menu']['items']['add']);
|
25
|
|
26
|
ctools_include('plugins', 'panels');
|
27
|
$this->builders = panels_get_layout_builders();
|
28
|
asort($this->builders);
|
29
|
foreach ($this->builders as $name => $builder) {
|
30
|
|
31
|
$item = $base;
|
32
|
$item['title'] = !empty($builder['builder tab title']) ? $builder['builder tab title'] : 'Add ' . $builder['title'];
|
33
|
$item['page arguments'][] = $name;
|
34
|
$item['path'] = 'add-' . $name;
|
35
|
$this->plugin['menu']['items']['add ' . $name] = $item;
|
36
|
}
|
37
|
|
38
|
parent::hook_menu($items);
|
39
|
}
|
40
|
|
41
|
function edit_form(&$form, &$form_state) {
|
42
|
ctools_include('plugins', 'panels');
|
43
|
|
44
|
if (!isset($form_state['item']->plugin)) {
|
45
|
$form_state['item']->plugin = $form_state['function args'][2];
|
46
|
}
|
47
|
|
48
|
parent::edit_form($form, $form_state);
|
49
|
|
50
|
$form['category'] = array(
|
51
|
'#type' => 'textfield',
|
52
|
'#title' => t('Category'),
|
53
|
'#description' => t('What category this layout should appear in. If left blank the category will be "Miscellaneous".'),
|
54
|
'#default_value' => $form_state['item']->category,
|
55
|
);
|
56
|
|
57
|
ctools_include('context');
|
58
|
ctools_include('display-edit', 'panels');
|
59
|
ctools_include('content');
|
60
|
|
61
|
|
62
|
|
63
|
$cache_key = 'builder-' . $form_state['item']->name;
|
64
|
|
65
|
|
66
|
if (!empty($_POST) && is_object($cache = panels_edit_cache_get($cache_key))) {
|
67
|
$display = &$cache->display;
|
68
|
}
|
69
|
else {
|
70
|
$content_types = ctools_content_get_available_types();
|
71
|
|
72
|
panels_cache_clear('display', $cache_key);
|
73
|
$cache = new stdClass();
|
74
|
|
75
|
$display = panels_new_display();
|
76
|
$display->did = $form_state['item']->name;
|
77
|
$display->layout = $form_state['item']->plugin;
|
78
|
$display->layout_settings = $form_state['item']->settings;
|
79
|
$display->cache_key = $cache_key;
|
80
|
$display->editing_layout = TRUE;
|
81
|
|
82
|
$cache->display = $display;
|
83
|
$cache->content_types = $content_types;
|
84
|
$cache->display_title = FALSE;
|
85
|
panels_edit_cache_set($cache);
|
86
|
}
|
87
|
|
88
|
|
89
|
$display->content = array();
|
90
|
$display->panels = array();
|
91
|
$custom = ctools_get_content_type('custom');
|
92
|
$layout = panels_get_layout($display->layout);
|
93
|
|
94
|
$regions = panels_get_regions($layout, $display);
|
95
|
foreach ($regions as $id => $title) {
|
96
|
$pane = panels_new_pane('custom', 'custom');
|
97
|
$pane->pid = $id;
|
98
|
$pane->panel = $id;
|
99
|
$pane->configuration = ctools_content_get_defaults($custom, 'custom');
|
100
|
$pane->configuration['title'] = 'Lorem Ipsum';
|
101
|
$pane->configuration['body'] = $this->lipsum;
|
102
|
$display->content[$id] = $pane;
|
103
|
$display->panels[$id] = array($id);
|
104
|
}
|
105
|
|
106
|
$form_state['display'] = &$display;
|
107
|
|
108
|
$form_state['no buttons'] = TRUE;
|
109
|
$form_state['no display settings'] = TRUE;
|
110
|
|
111
|
$form_state['cache_key'] = $cache_key;
|
112
|
$form_state['content_types'] = $cache->content_types;
|
113
|
$form_state['display_title'] = FALSE;
|
114
|
|
115
|
$form_state['renderer'] = panels_get_renderer_handler('editor', $cache->display);
|
116
|
$form_state['renderer']->cache = &$cache;
|
117
|
|
118
|
$form = panels_edit_display_form($form, $form_state);
|
119
|
|
120
|
|
121
|
|
122
|
|
123
|
$form['preview']['button']['#submit'] = array('panels_edit_display_form_preview');
|
124
|
}
|
125
|
|
126
|
function edit_form_submit(&$form, &$form_state) {
|
127
|
parent::edit_form_submit($form, $form_state);
|
128
|
|
129
|
|
130
|
panels_edit_display_settings_form_submit($form, $form_state);
|
131
|
$form_state['item']->settings = $form_state['display']->layout_settings;
|
132
|
}
|
133
|
|
134
|
function edit_form_validate(&$form, &$form_state) {
|
135
|
parent::edit_form_validate($form, $form_state);
|
136
|
|
137
|
|
138
|
panels_edit_display_settings_form_validate($form, $form_state);
|
139
|
}
|
140
|
|
141
|
function list_form(&$form, &$form_state) {
|
142
|
ctools_include('plugins', 'panels');
|
143
|
$this->builders = panels_get_layout_builders();
|
144
|
parent::list_form($form, $form_state);
|
145
|
|
146
|
$categories = $plugins = array('all' => t('- All -'));
|
147
|
foreach ($this->items as $item) {
|
148
|
$categories[$item->category] = $item->category ? $item->category : t('Miscellaneous');
|
149
|
}
|
150
|
|
151
|
$form['top row']['category'] = array(
|
152
|
'#type' => 'select',
|
153
|
'#title' => t('Category'),
|
154
|
'#options' => $categories,
|
155
|
'#default_value' => 'all',
|
156
|
'#weight' => -10,
|
157
|
);
|
158
|
|
159
|
foreach ($this->builders as $name => $plugin) {
|
160
|
$plugins[$name] = $plugin['title'];
|
161
|
}
|
162
|
|
163
|
$form['top row']['plugin'] = array(
|
164
|
'#type' => 'select',
|
165
|
'#title' => t('Type'),
|
166
|
'#options' => $plugins,
|
167
|
'#default_value' => 'all',
|
168
|
'#weight' => -9,
|
169
|
);
|
170
|
}
|
171
|
|
172
|
function list_filter($form_state, $item) {
|
173
|
if ($form_state['values']['category'] != 'all' && $form_state['values']['category'] != $item->category) {
|
174
|
return TRUE;
|
175
|
}
|
176
|
|
177
|
if ($form_state['values']['plugin'] != 'all' && $form_state['values']['plugin'] != $item->plugin) {
|
178
|
return TRUE;
|
179
|
}
|
180
|
|
181
|
return parent::list_filter($form_state, $item);
|
182
|
}
|
183
|
|
184
|
function list_sort_options() {
|
185
|
return array(
|
186
|
'disabled' => t('Enabled, title'),
|
187
|
'title' => t('Title'),
|
188
|
'name' => t('Name'),
|
189
|
'category' => t('Category'),
|
190
|
'storage' => t('Storage'),
|
191
|
'plugin' => t('Type'),
|
192
|
);
|
193
|
}
|
194
|
|
195
|
function list_build_row($item, &$form_state, $operations) {
|
196
|
|
197
|
switch ($form_state['values']['order']) {
|
198
|
case 'disabled':
|
199
|
$this->sorts[$item->name] = empty($item->disabled) . $item->admin_title;
|
200
|
break;
|
201
|
case 'title':
|
202
|
$this->sorts[$item->name] = $item->admin_title;
|
203
|
break;
|
204
|
case 'name':
|
205
|
$this->sorts[$item->name] = $item->name;
|
206
|
break;
|
207
|
case 'category':
|
208
|
$this->sorts[$item->name] = ($item->category ? $item->category : t('Miscellaneous')) . $item->admin_title;
|
209
|
break;
|
210
|
case 'plugin':
|
211
|
$this->sorts[$item->name] = $item->plugin;
|
212
|
break;
|
213
|
case 'storage':
|
214
|
$this->sorts[$item->name] = $item->type . $item->admin_title;
|
215
|
break;
|
216
|
}
|
217
|
|
218
|
$type = !empty($this->builders[$item->plugin]) ? $this->builders[$item->plugin]['title'] : t('Broken/missing plugin');
|
219
|
$category = $item->category ? check_plain($item->category) : t('Miscellaneous');
|
220
|
|
221
|
$ops = theme('links__ctools_dropbutton', array('links' => $operations, 'attributes' => array('class' => array('links', 'inline'))));
|
222
|
|
223
|
$this->rows[$item->name] = array(
|
224
|
'data' => array(
|
225
|
array('data' => check_plain($type), 'class' => array('ctools-export-ui-type')),
|
226
|
array('data' => check_plain($item->name), 'class' => array('ctools-export-ui-name')),
|
227
|
array('data' => check_plain($item->admin_title), 'class' => array('ctools-export-ui-title')),
|
228
|
array('data' => $category, 'class' => array('ctools-export-ui-category')),
|
229
|
array('data' => $ops, 'class' => array('ctools-export-ui-operations')),
|
230
|
),
|
231
|
'title' => check_plain($item->admin_description),
|
232
|
'class' => array(!empty($item->disabled) ? 'ctools-export-ui-disabled' : 'ctools-export-ui-enabled'),
|
233
|
);
|
234
|
}
|
235
|
|
236
|
function list_table_header() {
|
237
|
return array(
|
238
|
array('data' => t('Type'), 'class' => array('ctools-export-ui-type')),
|
239
|
array('data' => t('Name'), 'class' => array('ctools-export-ui-name')),
|
240
|
array('data' => t('Title'), 'class' => array('ctools-export-ui-title')),
|
241
|
array('data' => t('Category'), 'class' => array('ctools-export-ui-category')),
|
242
|
array('data' => t('Operations'), 'class' => array('ctools-export-ui-operations')),
|
243
|
);
|
244
|
}
|
245
|
}
|