danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 *
|
danielebarchiesi@0
|
6 * Plugin to provide a node context. A node context is a node wrapped in a
|
danielebarchiesi@0
|
7 * context object that can be utilized by anything that accepts contexts.
|
danielebarchiesi@0
|
8 */
|
danielebarchiesi@0
|
9
|
danielebarchiesi@0
|
10 /**
|
danielebarchiesi@0
|
11 * Plugins are described by creating a $plugin array which will be used
|
danielebarchiesi@0
|
12 * by the system that includes this file.
|
danielebarchiesi@0
|
13 */
|
danielebarchiesi@0
|
14 $plugin = array(
|
danielebarchiesi@0
|
15 'title' => t("View"),
|
danielebarchiesi@0
|
16 'description' => t('Loads a view result into a context that can then be displayed across a panel or turned into other contexts.'),
|
danielebarchiesi@0
|
17 'context' => 'views_content_context_view_create',
|
danielebarchiesi@0
|
18
|
danielebarchiesi@0
|
19 'edit form' => 'views_content_context_view_settings_form',
|
danielebarchiesi@0
|
20 'edit form validate' => 'views_content_context_view_settings_form_validate',
|
danielebarchiesi@0
|
21 'edit form submit' => 'views_content_context_view_settings_form_submit',
|
danielebarchiesi@0
|
22
|
danielebarchiesi@0
|
23 'defaults' => array('view' => ''),
|
danielebarchiesi@0
|
24
|
danielebarchiesi@0
|
25 'keyword' => 'view',
|
danielebarchiesi@0
|
26 'context name' => 'view',
|
danielebarchiesi@0
|
27
|
danielebarchiesi@0
|
28 'get child' => 'views_content_context_view_get_child',
|
danielebarchiesi@0
|
29 'get children' => 'views_content_context_view_get_children',
|
danielebarchiesi@0
|
30 );
|
danielebarchiesi@0
|
31
|
danielebarchiesi@0
|
32 function views_content_context_view_get_child($plugin, $parent, $child) {
|
danielebarchiesi@0
|
33 list($name, $id) = explode('-', $child, 2);
|
danielebarchiesi@0
|
34 $view = views_get_view($name);
|
danielebarchiesi@0
|
35 if (!$view) {
|
danielebarchiesi@0
|
36 return;
|
danielebarchiesi@0
|
37 }
|
danielebarchiesi@0
|
38
|
danielebarchiesi@0
|
39 $view->set_display($id);
|
danielebarchiesi@0
|
40 if ($view->current_display != $id) {
|
danielebarchiesi@0
|
41 return;
|
danielebarchiesi@0
|
42 }
|
danielebarchiesi@0
|
43
|
danielebarchiesi@0
|
44 $info = _views_content_get_context_from_display($view, $id, $parent, FALSE);
|
danielebarchiesi@0
|
45 if ($info) {
|
danielebarchiesi@0
|
46 return $info;
|
danielebarchiesi@0
|
47 }
|
danielebarchiesi@0
|
48 return;
|
danielebarchiesi@0
|
49 }
|
danielebarchiesi@0
|
50
|
danielebarchiesi@0
|
51 function views_content_context_view_get_children($plugin, $parent) {
|
danielebarchiesi@0
|
52 $types = array(
|
danielebarchiesi@0
|
53 'view' => $plugin,
|
danielebarchiesi@0
|
54 );
|
danielebarchiesi@0
|
55
|
danielebarchiesi@0
|
56 // We're keeping the 'view' context around for legacy reasons but
|
danielebarchiesi@0
|
57 // we want to disable the UI so you can't add it that way anymore.
|
danielebarchiesi@0
|
58 $types['view']['no ui'] = TRUE;
|
danielebarchiesi@0
|
59
|
danielebarchiesi@0
|
60 $views = views_get_applicable_views('returns context');
|
danielebarchiesi@0
|
61 foreach ($views as $data) {
|
danielebarchiesi@0
|
62 list($view, $id) = $data;
|
danielebarchiesi@0
|
63 $info = _views_content_get_context_from_display($view, $id, $parent, FALSE);
|
danielebarchiesi@0
|
64 if ($info) {
|
danielebarchiesi@0
|
65 $info['no required context ui'] = TRUE;
|
danielebarchiesi@0
|
66 $types[$info['name']] = $info;
|
danielebarchiesi@0
|
67 }
|
danielebarchiesi@0
|
68 }
|
danielebarchiesi@0
|
69
|
danielebarchiesi@0
|
70 return $types;
|
danielebarchiesi@0
|
71 }
|
danielebarchiesi@0
|
72
|
danielebarchiesi@0
|
73 function views_content_context_view_create($empty, $data = NULL, $conf = FALSE, $plugin = array()) {
|
danielebarchiesi@0
|
74 $context = new ctools_context('view');
|
danielebarchiesi@0
|
75 $context->plugin = 'view';
|
danielebarchiesi@0
|
76
|
danielebarchiesi@0
|
77 if ($empty) {
|
danielebarchiesi@0
|
78 return $context;
|
danielebarchiesi@0
|
79 }
|
danielebarchiesi@0
|
80
|
danielebarchiesi@0
|
81 if ($conf) {
|
danielebarchiesi@0
|
82 if (is_array($data) && !empty($data['view'])) {
|
danielebarchiesi@0
|
83 // This code is left in for backward compatibility. Will not be used
|
danielebarchiesi@0
|
84 // with child plugins.
|
danielebarchiesi@0
|
85 list($name, $display_id) = explode(':', $data['view'], 2);
|
danielebarchiesi@0
|
86 $data = views_get_view($name);
|
danielebarchiesi@0
|
87 if ($data) {
|
danielebarchiesi@0
|
88 $data->set_display($display_id);
|
danielebarchiesi@0
|
89 }
|
danielebarchiesi@0
|
90 }
|
danielebarchiesi@0
|
91 else if (!empty($plugin['view name'])) {
|
danielebarchiesi@0
|
92 $data = views_get_view($plugin['view name']);
|
danielebarchiesi@0
|
93 $data->set_display($plugin['view display id']);
|
danielebarchiesi@0
|
94 }
|
danielebarchiesi@0
|
95 }
|
danielebarchiesi@0
|
96
|
danielebarchiesi@0
|
97 if (is_object($data) && $data->current_display != 'default') {
|
danielebarchiesi@0
|
98 // We don't store the loaded view as we don't want the view object
|
danielebarchiesi@0
|
99 // cached. However, in order to extract it you can use:
|
danielebarchiesi@0
|
100 // @code
|
danielebarchiesi@0
|
101 // $output = views_content_context_get_output($context);
|
danielebarchiesi@0
|
102 // $view = $output['view'];
|
danielebarchiesi@0
|
103 // @endcode
|
danielebarchiesi@0
|
104 $context->data = array(
|
danielebarchiesi@0
|
105 'name' => $data->name,
|
danielebarchiesi@0
|
106 'display' => $data->current_display,
|
danielebarchiesi@0
|
107 'args' => $data->args,
|
danielebarchiesi@0
|
108 );
|
danielebarchiesi@0
|
109
|
danielebarchiesi@0
|
110 // At runtime, this can get populated. Once it is populated this
|
danielebarchiesi@0
|
111 // object should not be cached.
|
danielebarchiesi@0
|
112 $context->view = NULL;
|
danielebarchiesi@0
|
113 $context->title = $data->get_title();
|
danielebarchiesi@0
|
114 $context->argument = $data->name . ':' . $data->current_display;
|
danielebarchiesi@0
|
115
|
danielebarchiesi@0
|
116 $context->restrictions['base'] = array($data->base_table);
|
danielebarchiesi@0
|
117
|
danielebarchiesi@0
|
118 return $context;
|
danielebarchiesi@0
|
119 }
|
danielebarchiesi@0
|
120 }
|
danielebarchiesi@0
|
121
|
danielebarchiesi@0
|
122 function views_content_context_view_settings_form($form, &$form_state) {
|
danielebarchiesi@0
|
123 $conf = $form_state['conf'];
|
danielebarchiesi@0
|
124 $views = views_get_applicable_views('returns context');
|
danielebarchiesi@0
|
125 foreach ($views as $data) {
|
danielebarchiesi@0
|
126 list($view, $id) = $data;
|
danielebarchiesi@0
|
127 $title = views_content_get_display_title($view, $id, 'admin_title');
|
danielebarchiesi@0
|
128 $options[$view->name . ':' . $id] = $title;
|
danielebarchiesi@0
|
129 }
|
danielebarchiesi@0
|
130
|
danielebarchiesi@0
|
131 if (!empty($options)) {
|
danielebarchiesi@0
|
132 natcasesort($options);
|
danielebarchiesi@0
|
133 $form['view'] = array(
|
danielebarchiesi@0
|
134 '#type' => 'select',
|
danielebarchiesi@0
|
135 '#options' => $options,
|
danielebarchiesi@0
|
136 '#title' => t('View'),
|
danielebarchiesi@0
|
137 );
|
danielebarchiesi@0
|
138 }
|
danielebarchiesi@0
|
139 else {
|
danielebarchiesi@0
|
140 $form['view'] = array(
|
danielebarchiesi@0
|
141 '#value' => '<p>' . t('There are currently no views with Context displays enabled. You should go to the view administration and add a Context display to use a view as a context.') . '</p>',
|
danielebarchiesi@0
|
142 );
|
danielebarchiesi@0
|
143 }
|
danielebarchiesi@0
|
144
|
danielebarchiesi@0
|
145 return $form;
|
danielebarchiesi@0
|
146 }
|
danielebarchiesi@0
|
147
|
danielebarchiesi@0
|
148 /**
|
danielebarchiesi@0
|
149 * Validate a node.
|
danielebarchiesi@0
|
150 */
|
danielebarchiesi@0
|
151 function views_content_context_view_settings_form_validate($form, &$form_state) {
|
danielebarchiesi@0
|
152 if (empty($form_state['values']['view'])) {
|
danielebarchiesi@0
|
153 form_error($form['view'], t('You must select a view.'));
|
danielebarchiesi@0
|
154 }
|
danielebarchiesi@0
|
155 }
|
danielebarchiesi@0
|
156
|
danielebarchiesi@0
|
157 /**
|
danielebarchiesi@0
|
158 * Provide a list of ways that this context can be converted to a string.
|
danielebarchiesi@0
|
159 */
|
danielebarchiesi@0
|
160 function views_content_context_view_convert_list() {
|
danielebarchiesi@0
|
161 $list = array(
|
danielebarchiesi@0
|
162 );
|
danielebarchiesi@0
|
163
|
danielebarchiesi@0
|
164 return $list;
|
danielebarchiesi@0
|
165 }
|
danielebarchiesi@0
|
166
|
danielebarchiesi@0
|
167 /**
|
danielebarchiesi@0
|
168 * Convert a context into a string.
|
danielebarchiesi@0
|
169 */
|
danielebarchiesi@0
|
170 function views_content_context_view_convert($context, $type) {
|
danielebarchiesi@0
|
171 switch ($type) {
|
danielebarchiesi@0
|
172 }
|
danielebarchiesi@0
|
173 }
|
danielebarchiesi@0
|
174
|