/[drupal]/contributions/modules/webcomic/webcomic_views.inc
ViewVC logotype

Contents of /contributions/modules/webcomic/webcomic_views.inc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (show annotations) (download) (as text)
Tue Jan 29 06:21:11 2008 UTC (21 months, 4 weeks ago) by vyoma
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +0 -0 lines
File MIME type: text/x-php
#215354 by Vyoma: Switching on the views integration
1 <?php
2 // $Id: webcomic_views.inc,v 1.4 2006/04/19 16:08:41 eaton Exp $
3
4 /**
5 * @file
6 * This include file implements views functionality for webcomic.module
7 */
8
9 function webcomic_views_tables() {
10 $tables['webcomic_content'] = array(
11 'name' => 'webcomic_content',
12 'provider' => 'internal', // won't show up in external list.
13 'join' => array(
14 'left' => array(
15 'table' => 'node',
16 'field' => 'nid'
17 ),
18 'right' => array(
19 'field' => 'nid'
20 ),
21 ),
22 'fields' => array(
23 'publish_timestamp' => array(
24 'name' => t('Webcomic: Publish date'),
25 'sortable' => true,
26 'handler' => array(
27 'views_handler_field_date_small' => t('As Short Date'),
28 'views_handler_field_date' => t('As Medium Date'),
29 'views_handler_field_date_large' => t('As Long Date'),
30 'webcomic_views_handler_field_diff' => t('As Time Ago/Until'),
31 ),
32 'help' => t('Display the date a webcomic node was (or will be) published on.'),
33 ),
34 'storyline_timestamp' => array(
35 'name' => t('Webcomic: Storyline date'),
36 'sortable' => true,
37 'handler' => array(
38 'views_handler_field_date_small' => t('As Short Date'),
39 'views_handler_field_date' => t('As Medium Date'),
40 'views_handler_field_date_large' => t('As Long Date'),
41 'webcomic_views_handler_field_diff' => t('As Time Ago/Until'),
42 ),
43 'help' => t('Display the date a webcomic node takes place.'),
44 ),
45 'weight' => array(
46 'name' => t('Webcomic: Page/Episode number'),
47 'sortable' => true,
48 'help' => t('Display the storyline/issue/page/etc number of a webcomic node.'),
49 ),
50 'sequence' => array(
51 'name' => t('Webcomic: Sequence number'),
52 'sortable' => true,
53 'help' => t('Display the internal sorting number of the webcomic node.'),
54 ),
55 ),
56 'sorts' => array(
57 'publish_timestamp' => array(
58 'name' => t('Webcomic: Publish date'),
59 'help' => t('This allows you to sort by the date a webcomic node was (or will be) published on.'),
60 ),
61 'storyline_timestamp' => array(
62 'name' => t('Webcomic: Storyline date'),
63 'help' => t('This allows you to sort by the date a webcomic node takes place.'),
64 ),
65 'weight' => array(
66 'name' => t('Webcomic: Page/Episode number number'),
67 'help' => t('This allows you to sort by the storyline/issue/page/etc number of a webcomic node.'),
68 ),
69 'sequence' => array(
70 'name' => t('Webcomic: Sequence number'),
71 'help' => t('This allows you to sort by the internal sequence number of a webcomic node.'),
72 ),
73 ),
74 );
75
76 $tables['webcomic_parent'] = array(
77 'name' => 'webcomic_parent',
78 'provider' => 'internal',
79 'join' => array(
80 'left' => array(
81 'table' => 'node',
82 'field' => 'nid'
83 ),
84 'right' => array(
85 'field' => 'child_nid'
86 )
87 ),
88 "filters" => array(
89 'parent' => array(
90 'name' => t('Webomic: Parent Node'),
91 'list' => 'views_handler_filter_webcomic_parent_zero',
92 'operator' => 'views_handler_operator_andor',
93 'help' => t('This allows you to filter webcomics based on parent node.'),
94 ),
95 ),
96 );
97 $tables['webcomic_parent_node'] = array(
98 'name' => 'node',
99 'provider' => 'internal',
100 'join' => array(
101 'left' => array(
102 'table' => 'webcomic_parent',
103 'field' => 'parent_nid'
104 ),
105 'right' => array(
106 'field' => 'nid'
107 )
108 ),
109 'fields' => array(
110 'title' => array(
111 'name' => t('Webcomic: Parent Title'),
112 'handler' => array(
113 'views_handler_field_webcomic_parent_title' => t('As Link'),
114 'views_handler_field_webcomic_parent_title_nl' => t('Without Link'),
115 ),
116 'addlfields' => array('nid'),
117 'help' => t('Display the title of the parent node'),
118 ),
119 ),
120 'sorts' => array(
121 'title' => array(
122 'name' => t('Webcomic: Parent Title'),
123 'help' => t('Sort by the title of the parent node'),
124 ),
125 ),
126 );
127
128 return $tables;
129 }
130
131
132 function webcomic_views_arguments() {
133 $arguments = array(
134 'webcomic_parent' => array(
135 'name' => t("Webcomic: Parent Node ID"),
136 'handler' => "views_handler_arg_webcomic_parent",
137 ),
138 );
139
140 return $arguments;
141 }
142
143 function views_handler_arg_webcomic_parent($op, &$query, $arg_type, $arg = '') {
144 switch ($op) {
145 case 'summary' :
146 $query->ensure_table("webcomic_parent_node");
147 $query->add_field("nid");
148 $query->add_field("parent", "webcomic_parent");
149 $query->add_field("title", "webcomic_parent_node");
150 $query->add_field("nid", "webcomic_parent_node", "pnid");
151 $query->add_where("webcomic_parent_node.nid IS NOT NULL");
152 $field_info['field'] = "webcomic_parent_node.title";
153 return $field_info;
154 break;
155 case 'sort':
156 $query->add_orderby('webcomic_parent_node', 'title', $arg_type);
157 break;
158 case 'filter' :
159 $query->ensure_table("webcomic_parent");
160 $query->add_where("webcomic_parent.parent_nid = '$arg'");
161 break;
162 case 'link' :
163 return l($query->title, "$arg/$query->pnid");
164 case 'title' :
165 if ($query) {
166 $term = db_fetch_object(db_query("SELECT title FROM {node} WHERE nid = '%d'", $query));
167 return $term->title;
168 }
169 }
170 }
171
172 /*
173 * Format a field as a link to the webcomic parent node
174 */
175 function views_handler_field_webcomic_parent_title($field_info, $field_data, $value, $data) {
176 return l($value, "node/$data->webcomic_parent_node_nid");
177 }
178
179 function views_handler_field_webcomic_parent_title_nl($field_info, $field_data, $value, $data) {
180 return check_plain($value);
181 }
182
183 function views_handler_filter_webcomic_parent_zero() {
184 $parents = array();
185 $result = db_query("SELECT DISTINCT parent_nid FROM {webcomic_parent} ORDER BY parent_nid");
186 while ($obj = db_fetch_object($result)) {
187 $parents[$obj->parent_nid] = "$obj->parent_nid";
188 }
189
190 return $parents;
191 }
192
193 /*
194 /**
195 * Format a date as "X time ago/until".
196 */
197 function webcomic_views_handler_field_diff($field_info, $field_data, $value, $data) {
198 if ($value == 0) {
199 return '';
200 }
201
202 $current = time();
203 if ($current > $value) {
204 return format_interval($current - $value) .' ago';
205 }
206 else {
207 return format_interval($value - $current) .' from now';
208 }
209 }
210
211 function webcomic_views_default_views() {
212 $view = new stdClass();
213 $view->name = 'strip_archive';
214 $view->description = 'Strips in a simple list';
215 $view->access = array ();
216 $view->view_args_php = '';
217 $view->page = TRUE;
218 $view->page_title = '';
219 $view->page_header = '';
220 $view->page_header_format = '1';
221 $view->page_footer = '';
222 $view->page_footer_format = '1';
223 $view->page_empty = '';
224 $view->page_empty_format = '1';
225 $view->page_type = 'list';
226 $view->url = 'strips';
227 $view->use_pager = TRUE;
228 $view->nodes_per_page = '50';
229 $view->sort = array (
230 array (
231 'tablename' => 'webcomic_content',
232 'field' => 'sequence',
233 'sortorder' => 'ASC',
234 'options' => '',
235 ),
236 );
237 $view->argument = array ();
238 $view->field = array (
239 array (
240 'tablename' => 'node',
241 'field' => 'title',
242 'label' => '',
243 'handler' => 'views_handler_field_nodelink_with_mark',
244 ),
245 );
246 $view->filter = array (
247 array (
248 'tablename' => 'node',
249 'field' => 'type',
250 'operator' => 'OR',
251 'options' => '',
252 'value' => array (0 => 'webcomic_strip',),
253 ),
254 array (
255 'tablename' => 'node',
256 'field' => 'status',
257 'operator' => '=',
258 'options' => '',
259 'value' => '1',
260 ),
261 );
262 $view->requires = array(webcomic_content, node);
263 $views[$view->name] = $view;
264
265 $view = new stdClass();
266 $view->name = 'latest';
267 $view->description = 'latest webcomic';
268 $view->access = array ();
269 $view->view_args_php = '';
270 $view->page = TRUE;
271 $view->page_title = 'Latest comic';
272 $view->page_header = '';
273 $view->page_header_format = '1';
274 $view->page_footer = '';
275 $view->page_footer_format = '1';
276 $view->page_empty = '';
277 $view->page_empty_format = '1';
278 $view->page_type = 'node';
279 $view->url = 'latest';
280 $view->use_pager = FALSE;
281 $view->nodes_per_page = '1';
282 $view->block = TRUE;
283 $view->block_title = 'Latest comic';
284 $view->block_header = '';
285 $view->block_header_format = '1';
286 $view->block_footer = '';
287 $view->block_footer_format = '1';
288 $view->block_empty = '';
289 $view->block_empty_format = '1';
290 $view->block_type = 'teaser';
291 $view->nodes_per_block = '1';
292 $view->block_more = '1';
293 $view->block_use_page_header = FALSE;
294 $view->block_use_page_footer = FALSE;
295 $view->block_use_page_empty = FALSE;
296 $view->sort = array (
297 array (
298 'tablename' => 'webcomic_content',
299 'field' => 'sequence',
300 'sortorder' => 'DESC',
301 'options' => '',
302 ),
303 );
304 $view->argument = array ();
305 $view->field = array ();
306 $view->filter = array (
307 array (
308 'tablename' => 'node',
309 'field' => 'status',
310 'operator' => '=',
311 'options' => '',
312 'value' => '1',
313 ),
314 array (
315 'tablename' => 'node',
316 'field' => 'type',
317 'operator' => 'OR',
318 'options' => '',
319 'value' => array (0 => 'webcomic_strip',),
320 ),
321 );
322 $view->requires = array(webcomic_content, node);
323 $views[$view->name] = $view;
324
325 $view = new stdClass();
326 $view->name = 'cast';
327 $view->description = 'shows all the characters in a webcomic';
328 $view->access = array ();
329 $view->view_args_php = '';
330 $view->page = TRUE;
331 $view->page_title = 'Cast of characters';
332 $view->page_header = '';
333 $view->page_header_format = '1';
334 $view->page_footer = '';
335 $view->page_footer_format = '1';
336 $view->page_empty = '';
337 $view->page_empty_format = '1';
338 $view->page_type = 'teaser';
339 $view->url = 'cast';
340 $view->use_pager = FALSE;
341 $view->nodes_per_page = '99';
342 $view->sort = array (
343 array (
344 'tablename' => 'node',
345 'field' => 'title',
346 'sortorder' => 'ASC',
347 'options' => '',
348 ),
349 );
350 $view->argument = array ();
351 $view->field = array ();
352 $view->filter = array (
353 array (
354 'tablename' => 'node',
355 'field' => 'status',
356 'operator' => '=',
357 'options' => '',
358 'value' => '1',
359 ),
360 array (
361 'tablename' => 'node',
362 'field' => 'type',
363 'operator' => 'OR',
364 'options' => '',
365 'value' => array (0 => 'webcomic_character',),
366 ),
367 );
368 $view->requires = array(node);
369 $views[$view->name] = $view;
370
371 return $views;
372 }

  ViewVC Help
Powered by ViewVC 1.1.2