/[drupal]/contributions/modules/spaces/spaces_casetracker/spaces_casetracker.module
ViewVC logotype

Contents of /contributions/modules/spaces/spaces_casetracker/spaces_casetracker.module

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


Revision 1.7 - (show annotations) (download) (as text)
Mon Oct 6 21:56:40 2008 UTC (13 months, 3 weeks ago) by yhahn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +353 -551 lines
File MIME type: text/x-php
Beginning merge of Spaces 2 to DRUPAL-6 branch
1 <?php
2 // $Id: spaces_casetracker.module,v 1.6.6.3 2008/10/01 06:00:58 yhahn Exp $
3
4 /**
5 * Implementation of hook_menu()
6 */
7 function spaces_casetracker_menu($may_cache) {
8 $items = array();
9 if ($may_cache) {
10 $items[] = array(
11 'path' => 'spaces/team/autocomplete',
12 'title' => t('Group Members'),
13 'callback' => 'spaces_casetracker_users_autocomplete',
14 'access' => user_access('access case tracker'),
15 'type' => MENU_CALLBACK,
16 );
17 }
18 return $items;
19 }
20
21 /**
22 * Implementation of hook_help()
23 */
24 function spaces_casetracker_help($page) {
25 if (context_get('spaces', 'feature') == 'casetracker') {
26 if (strpos('node/add', $page) === 0) {
27 }
28 else {
29 return "<p>". t('The casetracker allows you to file tickets for other team members and keep track of tasks that others have filed for you.') ."</p>";
30 }
31 }
32 }
33
34 /**
35 * Implementation of hook_block()
36 */
37 function spaces_casetracker_block($op = 'list', $delta = 0) {
38 if ($op == 'list') {
39 $blocks = array();
40 $blocks[1]['info'] = t('Spaces: User Casetracker Stats');
41 return $blocks;
42 }
43 else if ($op == 'view') {
44 switch ($delta) {
45 case 1:
46 $u = (object) array('uid' => arg(1));
47 $u = user_load($u);
48 $space = spaces_get_space();
49 $block['subject'] = t('Case Stats for @user', array('@user' => $u->name));
50 $block['content'] = theme('spaces_casestats', spaces_casetracker_case_stats(arg(1), $space->sid), $u->name);
51 return $block;
52 }
53 }
54 }
55
56 /**
57 * Implementation of hook_form_alter()
58 */
59 function spaces_casetracker_form_alter($form_id, &$form) {
60 switch ($form_id) {
61 case 'casetracker_basic_case_node_form':
62 case 'comment_form':
63 // Implement batch creation
64 if ($form_id == 'casetracker_basic_case_node_form') {
65 $form['batch'] = array(
66 '#type' => 'submit',
67 '#value' => t('Submit + create another'),
68 '#weight' => 50,
69 );
70 $form['#submit']['_spaces_casetracker_node_form_submit'] = array();
71 array_reverse($form['#submit']);
72 }
73
74 $space = spaces_get_space();
75 // Remove disallowed projects.
76 if (isset($form['casetracker_project_information'])) {
77 $pid = ($form_id == 'casetracker_basic_case_node_form' ? 'pid' : 'prid'); // "sigh." see casetracker_form_alter() for details.
78 if (is_array($form['casetracker_project_information'][$pid]['#options'])) {
79 foreach ($form['casetracker_project_information'][$pid]['#options'] as $key => $value) {
80 $node = array('nid' => $key, 'type' => 'casetracker_basic_project');
81 $groups = og_get_node_groups((object)($node));
82 if (!array_key_exists($space->sid, $groups)) {
83 unset($form['casetracker_project_information'][$pid]['#options'][$key]);
84 }
85 }
86 }
87 }
88
89 // Change the autocomplete callback to limit by group
90 $form['casetracker_case_information']['assign_to']['#autocomplete_path'] = 'spaces/team/autocomplete/'. $space->sid;
91 break;
92 // Views filters
93 // Handle exposed casetracker filters, sadly case tracker is dumb to og.
94 case 'views_filters':
95 switch ($form['#view_name']) {
96 case 'spaces_cases_my':
97 case 'spaces_cases_byproject':
98 case 'spaces_cases_bycreated':
99 unset($form['filter0']['#options']);
100 $form['filter0']['#options'] = spaces_casetracker_project_options();
101 break;
102 case 'spaces_cases_byuser':
103 unset($form['filter0']['#options']);
104 $form['filter0']['#options'] = spaces_casetracker_user_options();
105 break;
106 case 'spaces_cases_filter':
107 unset($form['filter0']['#options']);
108 $form['filter0']['#options'] = spaces_casetracker_project_options();
109 unset($form['filter1']['#options']);
110 $form['filter1']['#options'] = spaces_casetracker_user_options();
111 break;
112 }
113 break;
114 }
115 }
116
117 /**
118 * Custom submit handler for case node form for handling prepopulate &
119 * batch creation
120 */
121 function _spaces_casetracker_node_form_submit($form_id, $form_values) {
122 if (trim($form_values['op']) == t('Submit + create another')) {
123 $query = array();
124 if (module_exists('prepopulate')) {
125 if (isset($form_values['assign_to'])) {
126 $query[] = 'edit[casetracker_case_information][assign_to]='. $form_values['assign_to'];
127 }
128 if (isset($form_values['pid'])) {
129 $query[] = 'edit[casetracker_project_information][pid]='. $form_values['pid'];
130 }
131 }
132 $query = implode('&', $query);
133 drupal_goto('node/add/casetracker-basic-case', $query);
134 }
135 }
136
137 /**
138 * Implementation of hook_default_views
139 */
140 function spaces_casetracker_views_default_views() {
141 $default_views = array(
142 '_spaces_casetracker_views_cases',
143 '_spaces_casetracker_views_cases_recent',
144 '_spaces_casetracker_views_cases_bystatus',
145 '_spaces_casetracker_views_cases_byuser',
146 '_spaces_casetracker_views_cases_byproject',
147 '_spaces_casetracker_views_cases_my',
148 '_spaces_casetracker_views_cases_myblock',
149 '_spaces_casetracker_views_cases_mycreated',
150 '_spaces_casetracker_views_cases_filter',
151 '_spaces_casetracker_views_cases_projects',
152 );
153 if (module_exists('spaces_user')) {
154 $default_views[] = '_spaces_casetracker_views_user_cases';
155 $default_views[] = '_spaces_casetracker_views_user_cases_created';
156 }
157 foreach ($default_views as $v) {
158 $view = call_user_func($v);
159 if (is_object($view) && $view->name) {
160 $views[$view->name] = $view;
161 }
162 }
163 return $views;
164 }
165
166 /**
167 * hook_context_define()
168 */
169 function spaces_casetracker_context_define() {
170 $items = array();
171 $items[] = array(
172 'namespace' => 'spaces',
173 'attribute' => 'feature',
174 'value' => 'casetracker',
175 'node' => array('casetracker_basic_case', 'casetracker_basic_project'),
176 'views' => _spaces_casetracker_views(),
177 'block' => array(
178 array(
179 'module' => 'views',
180 'delta' => 'spaces_cases_myblock',
181 'region' => 'right',
182 'weight' => -11,
183 ),
184 ),
185 'spaces' => array(
186 'label' => t('Casetracker'),
187 'description' => t('A casetracker for managing projects.'),
188 'types' => array('og'),
189 'menu' => array(
190 'cases' => array('title' => t('Casetracker')),
191 'cases/my' => array('title' => t('My cases')),
192 'cases/mycreated' => array('title' => t('Created by me')),
193 'cases/projects' => array('title' => t('Projects')),
194 'cases/filter' => array('title' => t('Cases filter')),
195 'cases/by-status' => array('title' => t('Cases by status')),
196 'cases/by-project' => array('title' => t('Cases by project')),
197 'cases/by-user' => array('title' => t('Cases by user')),
198 ),
199 ),
200 );
201 if (module_exists('spaces_user')) {
202 $items[] = array(
203 'namespace' => 'spaces',
204 'attribute' => 'feature',
205 'value' => 'user_cases',
206 'node' => array('casetracker_basic_case'),
207 'views' => array(
208 'spaces_user_cases',
209 'spaces_user_cases_created',
210 ),
211 'block' => array(),
212 'spaces' => array(
213 'label' => t('Cases'),
214 'description' => t('Shows cases authored by and assigned to a user.'),
215 'types' => array('user'),
216 'menu' => array(
217 'user-cases' => array('title' => t('Cases')),
218 'user-cases/created' => array('title' => t('Created cases')),
219 ),
220 ),
221 );
222 }
223 return $items;
224 }
225
226 function _spaces_casetracker_views() {
227 return array(
228 'spaces_cases',
229 'spaces_cases_my',
230 'spaces_cases_mycreated',
231 'spaces_cases_bystatus',
232 'spaces_cases_byuser',
233 'spaces_cases_byproject',
234 'spaces_cases_filter',
235 'spaces_cases_recent',
236 'spaces_cases_projects',
237 'spaces_cases_myblock',
238 );
239 }
240
241 /**
242 * Implementation of hook_views_pre_query()
243 */
244 function spaces_casetracker_views_pre_query(&$view) {
245 // Switch the assigned to filter to the userspace
246 if ($view->name == 'spaces_user_cases') {
247 $space = spaces_get_space();
248 if ($space && $space->type == 'user') {
249 foreach ($view->filter as $k => $filter) {
250 if ($filter['field'] == 'casetracker_case.assign_to') {
251 $view->filter[$k]['value'] = array($space->sid);
252 $view->is_cacheable = false;
253 break;
254 }
255 }
256 }
257 }
258 }
259
260 /**
261 * Implementation of hook_views_post_view()
262 */
263 function spaces_casetracker_views_post_view(&$view) {
264 if ($view->build_type == 'page' && in_array($view->name, _spaces_casetracker_views())) {
265 context_set('theme', 'layout', 'wide');
266 }
267 }
268
269 /**
270 * Build option array of project id's for the current group.
271 */
272 function spaces_casetracker_project_options() {
273 if ($space = spaces_get_space()) {
274 $return = array();
275 $results = db_query(db_rewrite_sql("SELECT ct.project_number, n.title FROM {node} n INNER JOIN {casetracker_project} ct ON n.nid = ct.nid INNER JOIN {og_ancestry} og ON n.nid = og.nid WHERE n.type IN (".str_pad('', count(array_filter(variable_get('casetracker_project_node_types', array('casetracker_basic_project')))) * 5 - 1, "'%s',").") AND og.group_nid = %d AND n.status = 1 ORDER BY n.title"),
276 array_merge(
277 array_filter(variable_get('casetracker_project_node_types', array('casetracker_basic_project'))),
278 array($space->sid)
279 )
280 );
281 while ($row = db_fetch_object($results)) {
282 $return[$row->project_number] = $row->project_number ." - ". $row->title;
283 }
284 return $return;
285 }
286 }
287
288 /**
289 * Build option array of users in the current group
290 */
291 function spaces_casetracker_user_options() {
292 $users = array();
293 foreach (spaces_og_get_users() as $account) {
294 $users[$account->uid] = $account->name;
295 }
296 return $users;
297 }
298
299 /**
300 * Autocomplete callback. This should be moved into casetracker eventually.
301 */
302 function spaces_casetracker_users_autocomplete($gid, $string) {
303 $matches = array();
304 $result = db_query_range("SELECT name FROM {users} u INNER JOIN {og_uid} og ON u.uid = og.uid WHERE og.nid = %d AND LOWER(u.name) LIKE LOWER('%s%%')", $gid, $string, 0, 10);
305 while ($user = db_fetch_object($result)) {
306 $matches[$user->name] = check_plain($user->name);
307 }
308 print drupal_to_js($matches);
309 exit();
310 }
311
312 /**
313 * Casetracker: produce case stats for a user.
314 */
315 function spaces_casetracker_case_stats($uid, $gid = NULL) {
316 $status_closed = 7;
317 $status_open = 6;
318 $week = time() - 7*24*3600;
319 $args = array();
320
321 // ASSIGNED
322 if ($gid) {
323 $args[] = $gid;
324 $q = "SELECT COUNT(c.nid) AS count FROM {casetracker_case} c INNER JOIN {og_ancestry} og ON c.nid = og.nid WHERE og.group_nid = %d AND c.case_status_id = %d AND c.assign_to = %d";
325 }
326 else {
327 $q = "SELECT COUNT(nid) AS count FROM {casetracker_case} WHERE case_status_id = %d AND assign_to = %d";
328 }
329
330 $stats['assigned']['total_open'] = db_result(db_query($q, array_merge($args, array($status_open, $uid))));
331 $stats['assigned']['total_closed'] = db_result(db_query($q, array_merge($args, array($status_closed, $uid))));
332
333 if ($gid) {
334 $q = "SELECT COUNT(c.nid) AS count FROM {casetracker_case} c INNER JOIN {node} n ON c.nid = n.nid INNER JOIN {og_ancestry} og ON c.nid = og.nid WHERE og.group_nid = %d AND c.case_status_id = %d AND c.assign_to = %d AND n.created > %d";
335 }
336 else {
337 $q = "SELECT COUNT(c.nid) AS count FROM {casetracker_case} c INNER JOIN {node} n ON c.nid = n.nid WHERE c.case_status_id = %d AND c.assign_to = %d AND n.created > %d";
338 }
339
340 $stats['assigned']['week_open'] = db_result(db_query($q, array_merge($args, array($status_open, $uid, $week))));
341 $stats['assigned']['week_closed'] = db_result(db_query($q, array_merge($args, array($status_closed, $uid, $week))));
342
343 // CREATED
344 if ($gid) {
345 $q = "SELECT COUNT(c.nid) AS count FROM {casetracker_case} c INNER JOIN {node} n ON c.nid = n.nid INNER JOIN {og_ancestry} og ON c.nid = og.nid WHERE og.group_nid = %d AND c.case_status_id = %d AND n.uid = %d";
346 }
347 else{
348 $q = "SELECT COUNT(c.nid) AS count FROM {casetracker_case} c INNER JOIN {node} n ON c.nid = n.nid WHERE c.case_status_id = %d AND n.uid = %d";
349 }
350
351 $stats['created']['total_open'] = db_result(db_query($q, array_merge($args, array($status_open, $uid))));
352 $stats['created']['total_closed'] = db_result(db_query($q, array_merge($args, array($status_closed, $uid))));
353
354 $q .= " AND n.created > %d";
355
356 $stats['created']['week_open'] = db_result(db_query($q, array_merge($args, array($status_open, $uid, $week))));
357 $stats['created']['week_closed'] = db_result(db_query($q, array_merge($args, array($status_closed, $uid, $week))));
358
359 if ($gid) {
360 $q = "SELECT COUNT(c.case_type_id) AS count, cs.case_state_name AS name FROM {casetracker_case} c INNER JOIN {node} n ON c.nid = n.nid INNER JOIN {casetracker_case_states} cs ON c.case_type_id = cs.csid INNER JOIN {og_ancestry} og ON c.nid = og.nid WHERE og.group_nid = %d AND n.uid = %d GROUP BY c.case_type_id";
361 }
362 else {
363 $q = "SELECT COUNT(c.case_type_id) AS count, cs.case_state_name AS name FROM {casetracker_case} c INNER JOIN {node} n ON c.nid = n.nid INNER JOIN {casetracker_case_states} cs ON c.case_type_id = cs.csid WHERE n.uid = %d GROUP BY c.case_type_id";
364 }
365
366 $result = db_query($q, array_merge($args, array($uid)));
367
368 while($type = db_fetch_array($result)) {
369 $stats['created']['breakdown'][$type['name']] = $type['count'];
370 }
371
372 return $stats;
373 }
374
375 /*
376 * Theme out casestat counts
377 */
378 function _spaces_casestats_count($label, $count) {
379 $class = strtolower($label);
380 return "<span class='count $class'>$count</span><span class='label'>$label</span>";
381 }
382
383 /*
384 * Theme out casestats
385 */
386 function theme_spaces_casestats($stats, $username) {
387 drupal_add_css(drupal_get_path('module', 'spaces') . '/spaces.css');
388 $labels = array(
389 array(
390 'data' =>t('Assigned to !user', array('!user'=>$username)),
391 'colspan' =>2,
392 'class' =>'halfpoint',
393 ),
394 array(
395 'data'=>t('Created by !user', array('!user'=>$username)),
396 'colspan'=>2,
397 ),
398 );
399 $rows[] = array(
400 array(
401 'data' =>t('This Week'),
402 'colspan' =>2,
403 'class' =>'header halfpoint',
404 ),
405 array(
406 'data' =>t('This Week'),
407 'colspan' =>2,
408 'class' =>'header',
409 ),
410 );
411 $rows[] = array(
412 _spaces_casestats_count(t('Open'), $stats['assigned']['week_open']),
413 array('data'=>_spaces_casestats_count(t('Closed'), $stats['assigned']['week_closed']), 'class'=>'halfpoint'),
414 _spaces_casestats_count(t('Open'), $stats['created']['week_open']),
415 _spaces_casestats_count(t('Closed'), $stats['created']['week_closed']),
416 );
417 $rows[] = array(
418 array(
419 'data' =>t('Total'),
420 'colspan' =>2,
421 'class' =>'header halfpoint',
422 ),
423 array(
424 'data' =>t('Total'),
425 'colspan' =>2,
426 'class' =>'header',
427 ),
428 );
429 $rows[] = array(
430 _spaces_casestats_count(t('Open'), $stats['assigned']['total_open']),
431 array('data'=>_spaces_casestats_count(t('Closed'), $stats['assigned']['total_closed']), 'class'=>'halfpoint'),
432 _spaces_casestats_count(t('Open'), $stats['created']['total_open']),
433 _spaces_casestats_count(t('Closed'), $stats['created']['total_closed']),
434 );
435
436 $o = theme('table', $labels, $rows, array('class'=>'casestats'));
437
438 /*** Breakdown ***/
439 if ($stats['created']['breakdown']) {
440 $total = array_sum($stats['created']['breakdown']);
441 foreach ($stats['created']['breakdown'] as $label => $count) {
442 $pct = floor($count/$total * 1000)*.1;
443 $breakdown[] = "<span class='pct'>$pct%</span> ".t('in')." $label";
444 }
445 $breakdown = implode(', ', $breakdown) . ".";
446 $breakdown = "<div class='case-breakdown'><span class='label'>".t('Cases created:')."</span>$breakdown</div>";
447 }
448
449 return $o . $breakdown;
450 }
451
452 /* VIEWS */
453
454 function _spaces_casetracker_views_base() {
455 $view = new stdClass();
456 $view->access = array();
457 $view->view_args_php = '';
458 $view->menu = FALSE;
459 $view->page = TRUE;
460 $view->page_empty = '<?php print _spaces_views_empty("casetracker"); ?>';
461 $view->page_empty_format = '2';
462 $view->page_type = 'table';
463 $view->use_pager = TRUE;
464 $view->nodes_per_page = '50';
465 $view->sort = array ();
466 $view->argument = array();
467 $view->field = array (
468 'project' => array (
469 'tablename' => 'casetracker_case',
470 'field' => 'pid',
471 'label' => 'Project',
472 'handler' => 'spaces_views_handler_crayon_name',
473 'options' => 'casetracker',
474 'sortable' => '1',
475 ),
476 'title' => array (
477 'tablename' => 'node',
478 'field' => 'title',
479 'label' => 'Title',
480 'handler' => 'views_handler_field_nodelink',
481 'options' => 'link',
482 ),
483 'status' => array (
484 'tablename' => 'casetracker_case',
485 'field' => 'case_status_id',
486 'label' => 'Status',
487 ),
488 'assigned' => array (
489 'tablename' => 'casetracker_case',
490 'field' => 'assign_to',
491 'label' => 'Assigned',
492 'sortable' => '1',
493 ),
494 'priority' => array (
495 'tablename' => 'casetracker_case',
496 'field' => 'case_priority_id',
497 'label' => 'Priority',
498 'sortable' => '1',
499 ),
500 'changed' => array (
501 'tablename' => 'node',
502 'field' => 'changed',
503 'label' => 'Updated',
504 'handler' => 'views_handler_field_date_small',
505 'sortable' => '1',
506 'defaultsort' => 'DESC',
507 ),
508 );
509 $view->filter = array (
510 'type' => array (
511 'tablename' => 'node',
512 'field' => 'type',
513 'operator' => 'OR',
514 'options' => '',
515 'value' => array (
516 0 => 'casetracker_basic_case',
517 ),
518 ),
519 'status' => array (
520 'tablename' => 'node',
521 'field' => 'status',
522 'operator' => '=',
523 'options' => '',
524 'value' => '1',
525 ),
526 'spaces' => array (
527 'tablename' => 'spaces',
528 'field' => 'type',
529 'operator' => 'all',
530 'options' => '',
531 'value' => 'all',
532 ),
533 );
534 $view->exposed_filter = array();
535 $view->requires = array(node, casetracker_case);
536 return $view;
537 }
538
539 function _spaces_casetracker_views_cases() {
540 $view = _spaces_casetracker_views_base();
541 $view->name = 'spaces_cases';
542 $view->description = t('Spaces > Casetracker');
543
544 $view->menu = TRUE;
545 $view->menu_title = t('Cases');
546
547 $view->page = TRUE;
548 $view->page_title = t('Cases');
549 $view->url = 'cases';
550
551 $view->sort = array (
552 array (
553 'tablename' => 'casetracker_case',
554 'field' => 'case_status_id',
555 'sortorder' => 'ASC',
556 'options' => 'normal',
557 ),
558 );
559 return $view;
560 }
561
562 function _spaces_casetracker_views_cases_recent() {
563 $view = _spaces_casetracker_views_base();
564 $view->name = 'spaces_cases_recent';
565 $view->description = t('Spaces > Casetracker > Recent cases');
566
567 $view->page = TRUE;
568 $view->page_title = t('Recent Cases');
569 $view->url = 'recent-cases';
570
571 $view->block = TRUE;
572 $view->block_title = t('Recent Cases');
573 $view->block_empty = "<p class='views-empty'>" . t('No recent cases.') . "</p>";
574 $view->block_empty_format = '1';
575 $view->block_type = 'spaces_datetitle';
576 $view->nodes_per_block = '5';
577
578 $view->sort = array (
579 array (
580 'tablename' => 'node',
581 'field' => 'created',
582 'sortorder' => 'DESC',
583 'options' => 'normal',
584 ),
585 );
586 $view->field = array (
587 array (
588 'tablename' => 'og_node_data',
589 'field' => 'title',
590 'label' => 'Group',
591 'handler' => 'spaces_views_handler_crayon_name',
592 'options' => 'og',
593 ),
594 array (
595 'tablename' => 'node',
596 'field' => 'title',
597 'label' => 'Case',
598 'handler' => 'views_handler_field_nodelink',
599 'options' => 'link',
600 ),
601 array (
602 'tablename' => 'node',
603 'field' => 'created',
604 'label' => 'Created On',
605 'handler' => 'views_handler_field_since',
606 'options' => 1,
607 ),
608 array (
609 'tablename' => 'casetracker_case',
610 'field' => 'assign_to',
611 'label' => 'Assigned To',
612 ),
613 );
614
615 $view->filter['og'] = array (
616 'tablename' => 'og_uid_node',
617 'field' => 'currentuid',
618 'operator' => '=',
619 'options' => '',
620 'value' => '***CURRENT_USER***',
621 );
622 $view->filter['spaces']['operator'] = 'active';
623 $view->filter['changed'] = array(
624 'tablename' => 'node',
625 'field' => 'changed',
626 'operator' => '>',
627 'options' => -1*SPACES_ARCHIVE_TIMESTAMP,
628 'value' => 'now',
629 );
630
631 $view->requires = array(node, casetracker_case, og_node_data, og_uid_node);
632 return $view;
633 }
634
635 function _spaces_casetracker_views_cases_bystatus() {
636 $view = _spaces_casetracker_views_base();
637
638 $view->name = 'spaces_cases_bystatus';
639 $view->description = t('Filter cases by status.');
640
641 $view->menu = TRUE;
642 $view->menu_title = t('Cases by status');
643
644 $view->page = TRUE;
645 $view->page_title = t('Cases by status');
646 $view->url = 'cases/by-status';
647
648 $view->sort = array (
649 array (
650 'tablename' => 'casetracker_case',
651 'field' => 'case_status_id',
652 'sortorder' => 'ASC',
653 'options' => 'normal',
654 ),
655 );
656
657 $view->filter['status_id'] = array (
658 'tablename' => 'casetracker_case',
659 'field' => 'case_status_id',
660 'operator' => 'OR',
661 'options' => '',
662 'value' => array (
663 0 => '6',
664 ),
665 );
666
667 $view->exposed_filter = array (
668 array (
669 'tablename' => 'casetracker_case',
670 'field' => 'case_status_id',
671 'label' => t('Status'),
672 'optional' => '0',
673 'is_default' => '1',
674 'operator' => '1',
675 'single' => '1',
676 ),
677 );
678
679 return $view;
680 }
681
682 function _spaces_casetracker_views_cases_byuser() {
683 $view = _spaces_casetracker_views_base();
684
685 $view->name = 'spaces_cases_byuser';
686 $view->description = t('Filter cases by user.');
687
688 $view->menu = TRUE;
689 $view->menu_title = t('Cases by user');
690
691 $view->page = TRUE;
692 $view->page_title = t('Cases by user');
693 $view->url = 'cases/by-user';
694
695 $view->sort = array(
696 array (
697 'tablename' => 'casetracker_case',
698 'field' => 'case_status_id',
699 'sortorder' => 'ASC',
700 'options' => 'normal',
701 ),
702 );
703
704 $view->filter['assign'] = array (
705 'tablename' => 'casetracker_case',
706 'field' => 'assign_to',
707 'operator' => 'OR',
708 'options' => '',
709 'value' => array (
710 0 => '29',
711 ),
712 );
713
714 $view->exposed_filter = array (
715 array (
716 'tablename' => 'casetracker_case',
717 'field' => 'assign_to',
718 'label' => 'User',
719 'optional' => '0',
720 'is_default' => '0',
721 'operator' => '1',
722 'single' => '1',
723 ),
724 );
725
726 return $view;
727 }
728
729 function _spaces_casetracker_views_cases_my() {
730 $view = _spaces_casetracker_views_base();
731
732 $view->name = 'spaces_cases_my';
733 $view->description = 'My cases';
734
735 $view->menu = TRUE;
736 $view->menu_title = t('My cases');
737
738 $view->page = TRUE;
739 $view->page_title = 'My cases';
740 $view->page_type = 'table';
741 $view->url = 'cases/my';
742
743 $view->sort = array(
744 array (
745 'tablename' => 'casetracker_case',
746 'field' => 'case_status_id',
747 'sortorder' => 'ASC',
748 'options' => 'normal',
749 ),
750 );
751
752 $view->filter['user'] = array (
753 'tablename' => 'casetracker_case',
754 'field' => 'assign_to_currentuid',
755 'operator' => '=',
756 'options' => '',
757 'value' => '***CURRENT_USER***',
758 );
759 $view->filter['project'] = array (
760 'tablename' => 'casetracker_project',
761 'field' => 'project_number',
762 'operator' => 'OR',
763 'options' => '',
764 'value' => array (
765 0 => '100',
766 ),
767 );
768
769 $view->exposed_filter = array (
770 array (
771 'tablename' => 'casetracker_project',
772 'field' => 'project_number',
773 'label' => 'Project',
774 'optional' => '1',
775 'is_default' => '0',
776 'operator' => '1',
777 'single' => '1',
778 ),
779 );
780
781 return $view;
782 }
783
784 function _spaces_casetracker_views_cases_myblock() {
785 $view = new stdClass();
786 $view->name = 'spaces_cases_myblock';
787 $view->description = t('Provides a block listing of cases assigned to current user.');
788 $view->access = array ();
789 $view->view_args_php = '';
790 $view->page = FALSE;
791 $view->block = TRUE;
792 $view->block_title = t('My Cases');
793 $view->block_empty = "<p class='views-empty'>" . t('No cases found.') . "</p>";
794 $view->block_empty_format = '2';
795 $view->block_type = 'spaces_datetitle';
796 $view->nodes_per_block = '10';
797 $view->sort = array (
798 array (
799 'tablename' => 'node_comment_statistics',
800 'field' => 'last_comment_timestamp',
801 'sortorder' => 'DESC',
802 'options' => 'normal',
803 ),
804 );
805 $view->argument = array();
806 $view->field = array (
807 array (
808 'tablename' => 'node_comment_statistics',
809 'field' => 'last_comment_timestamp',
810 'label' => '',
811 'handler' => 'views_handler_field_since',
812 'options' => 1,
813 ),
814 array (
815 'tablename' => 'node',
816 'field' => 'title',
817 'label' => '',
818 'handler' => 'views_handler_field_nodelink',
819 'options' => 'link',
820 ),
821 array (
822 'tablename' => 'users',
823 'field' => 'name',
824 'label' => t('Author'),
825 ),
826 );
827 $view->filter = array (
828 array (
829 'tablename' => 'casetracker_case',
830 'field' => 'assign_to_currentuid',
831 'operator' => '=',
832 'options' => '',
833 'value' => '***CURRENT_USER***',
834 ),
835 array (
836 'tablename' => 'casetracker_case',
837 'field' => 'case_status_id',
838 'operator' => 'OR',
839 'options' => '',
840 'value' => array (
841 0 => '6',
842 1 => '8',
843 2 => '9',
844 3 => '10',
845 ),
846 ),
847 array (
848 'tablename' => 'spaces',
849 'field' => 'type',
850 'operator' => 'all',
851 'options' => '',
852 'value' => 'all',
853 ),
854 );
855 $view->exposed_filter = array ();
856 $view->requires = array(node_comment_statistics, node, casetracker_case);
857 return $view;
858 }
859
860 function _spaces_casetracker_views_cases_byproject() {
861 $view = _spaces_casetracker_views_base();
862
863 $view->name = 'spaces_cases_byproject';
864 $view->description = t('Filter cases by project.');
865
866 $view->menu = TRUE;
867 $view->menu_title = t('Cases by project');
868
869 $view->page = TRUE;
870 $view->page_title = 'Cases by project';
871 $view->url = 'cases/by-project';
872
873 $view->sort = array(
874 array (
875 'tablename' => 'casetracker_case',
876 'field' => 'case_status_id',
877 'sortorder' => 'ASC',
878 'options' => 'normal',
879 ),
880 );
881
882 $view->filter['project'] = array (
883 'tablename' => 'casetracker_project',
884 'field' => 'project_number',
885 'operator' => 'OR',
886 'options' => '',
887 'value' => array (
888 0 => '100',
889 ),
890 );
891
892 $view->exposed_filter = array (
893 array (
894 'tablename' => 'casetracker_project',
895 'field' => 'project_number',
896 'label' => 'Project',
897 'optional' => '0',
898 'is_default' => '1',
899 'operator' => '1',
900 'single' => '1',
901 ),
902 );
903
904 $view->requires = array(node, casetracker_case, casetracker_project);
905
906 return $view;
907 }
908
909 function _spaces_casetracker_views_cases_mycreated() {
910 $view = _spaces_casetracker_views_base();
911
912 $view->name = 'spaces_cases_mycreated';
913 $view->description = t('A view of all cases made by the current user.');
914
915 $view->menu = TRUE;
916 $view->menu_title = t('Created by me');
917
918 $view->page = TRUE;
919 $view->page_title = t('Created by me');
920 $view->url = 'cases/mycreated';
921
922 $view->sort = array (
923 array (
924 'tablename' => 'casetracker_case',
925 'field' => 'case_status_id',
926 'sortorder' => 'ASC',
927 'options' => 'normal',
928 ),
929 );
930
931 $view->filter['user'] = array (
932 'tablename' => 'node',
933 'field' => 'currentuid',
934 'operator' => '=',
935 'options' => '',
936 'value' => '***CURRENT_USER***',
937 );
938 $view->filter['project'] = array (
939 'tablename' => 'casetracker_project',
940 'field' => 'project_number',
941 'operator' => 'OR',
942 'options' => '',
943 'value' => array (
944 0 => '100',
945 ),
946 );
947
948 $view->exposed_filter = array (
949 array (
950 'tablename' => 'casetracker_project',
951 'field' => 'project_number',
952 'label' => 'Project',
953 'optional' => '1',
954 'is_default' => '0',
955 'operator' => '1',
956 'single' => '1',
957 ),
958 );
959
960 return $view;
961 }
962
963 function _spaces_casetracker_views_cases_filter() {
964 $view = new stdClass();
965 $view->name = 'spaces_cases_filter';
966 $view->description = t('A massive case filter form.');
967 $view->access = array();
968 $view->view_args_php = '';
969 $view->menu = TRUE;
970 $view->menu_title = t('Cases filter');
971 $view->page = TRUE;
972 $view->page_title = t('Cases filter');
973 $view->page_empty = '<?php print _spaces_views_empty("casetracker"); ?>';
974 $view->page_empty_format = '2';
975 $view->page_type = 'table';
976 $view->url = 'cases/filter';
977 $view->use_pager = TRUE;
978 $view->nodes_per_page = '100';
979 $view->argument = array();
980 $view->sort = array (
981 array (
982 'tablename' => 'casetracker_case',
983 'field' => 'case_status_id',
984 'sortorder' => 'ASC',
985 'options' => 'normal',
986 ),
987 );
988 $view->field = array (
989 array (
990 'tablename' => 'casetracker_case',
991 'field' => 'pid',
992 'label' => 'Project',
993 'handler' => 'spaces_views_handler_crayon_name',
994 'options' => 'casetracker',
995 'sortable' => '1',
996 ),
997 array (
998 'tablename' => 'node',
999 'field' => 'title',
1000 'label' => 'Title',
1001 'handler' => 'views_handler_field_nodelink',
1002 'options' => 'link',
1003 ),
1004 array (
1005 'tablename' => 'casetracker_case',
1006 'field' => 'case_status_id',
1007 'label' => 'Status',
1008 ),
1009 array (
1010 'tablename' => 'casetracker_case',
1011 'field' => 'assign_to',
1012 'label' => 'Assigned',
1013 'sortable' => '1',
1014 ),
1015 array (
1016 'tablename' => 'casetracker_case',
1017 'field' => 'case_priority_id',
1018 'label' => 'Priority',
1019 'sortable' => '1',
1020 ),
1021 array (
1022 'tablename' => 'node',
1023 'field' => 'changed',
1024 'label' => 'Updated',
1025 'handler' => 'views_handler_field_date_small',
1026 'sortable' => '1',
1027 'defaultsort' => 'DESC',
1028 ),
1029 );
1030 $view->filter = array (
1031 array (
1032 'tablename' => 'node',
1033 'field' => 'type',
1034 'operator' => 'OR',
1035 'options' => '',
1036 'value' => array (
1037 0 => 'casetracker_basic_case',
1038 ),
1039 ),
1040 array (
1041 'tablename' => 'node',
1042 'field' => 'status',
1043 'operator' => '=',
1044 'options' => '',
1045 'value' => '1',
1046 ),
1047 array (
1048 'tablename' => 'casetracker_project',
1049 'field' => 'project_number',
1050 'operator' => 'OR',
1051 'options' => '',
1052 'value' => array (
1053 0 => '100',
1054 ),
1055 ),
1056 array (
1057 'tablename' => 'casetracker_case',
1058 'field' => 'assign_to',
1059 'operator' => 'OR',
1060 'options' => '',
1061 'value' => array (
1062 0 => '1',
1063 ),
1064 ),
1065 array (
1066 'tablename' => 'casetracker_case',
1067 'field' => 'case_type_id',
1068 'operator' => 'OR',
1069 'options' => '',
1070 'value' => array (
1071 0 => '11',
1072 ),
1073 ),
1074 array (
1075 'tablename' => 'casetracker_case',
1076 'field' => 'case_priority_id',
1077 'operator' => 'OR',
1078 'options' => '',
1079 'value' => array (
1080 0 => '1',
1081 ),
1082 ),
1083 array (
1084 'tablename' => 'casetracker_case',
1085 'field' => 'case_status_id',
1086 'operator' => 'OR',
1087 'options' => '',
1088 'value' => array (
1089 0 => '6',
1090 ),
1091 ),
1092 array (
1093 'tablename' => 'spaces',
1094 'field' => 'type',
1095 'operator' => 'all',
1096 'options' => '',
1097 'value' => 'all',
1098 ),
1099 );
1100 $view->exposed_filter = array (
1101 array (
1102 'tablename' => 'casetracker_project',
1103 'field' => 'project_number',
1104 'label' => 'Project',
1105 'optional' => '1',
1106 'is_default' => '0',
1107 'operator' => '1',
1108 'single' => '0',
1109 ),
1110 array (
1111 'tablename' => 'casetracker_case',
1112 'field' => 'assign_to',
1113 'label' => 'For',
1114 'optional' => '1',
1115 'is_default' => '0',
1116 'operator' => '1',
1117 'single' => '0',
1118 ),
1119 array (
1120 'tablename' => 'casetracker_case',
1121 'field' => 'case_type_id',
1122 'label' => 'Type',
1123 'optional' => '1',
1124 'is_default' => '0',
1125 'operator' => '1',
1126 'single' => '0',
1127 ),
1128 array (
1129 'tablename' => 'casetracker_case',
1130 'field' => 'case_priority_id',
1131 'label' => 'Priority',
1132 'optional' => '1',
1133 'is_default' => '0',
1134 'operator' => '1',
1135 'single' => '0',