~spreadubuntu/spreadubuntu/devel-drupal6

« back to all changes in this revision

Viewing changes to modules/og/modules/og_views/og_views.views.inc

  • Committer: ruben
  • Date: 2009-06-08 09:38:49 UTC
  • Revision ID: ruben@captive-20090608093849-s1qtsyctv2vwp1x1
SpreadUbuntu moving to Drupal6. Based on ubuntu-drupal theme and adding our modules

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
// $Id: og_views.views.inc,v 1.13.2.1 2009/04/10 03:09:23 weitzman Exp $
 
3
 
 
4
/**
 
5
 * Implementation of hook_views_handlers().
 
6
 */
 
7
function og_views_views_handlers() {
 
8
  return array(
 
9
    'info' => array(
 
10
      'path' => drupal_get_path('module', 'og_views') .'/includes',
 
11
    ),
 
12
    'handlers' => array(
 
13
      // filter
 
14
      'og_views_handler_filter_og_group_nid' => array(
 
15
        'parent' => 'views_handler_filter_many_to_one',
 
16
      ),
 
17
      'og_views_handler_filter_og_type_all' => array(
 
18
        'parent' => 'views_handler_filter',
 
19
      ),
 
20
      'og_views_handler_filter_og_type' => array(
 
21
        'parent' => 'views_handler_filter_node_type',
 
22
      ),
 
23
      'og_views_handler_filter_og_selective' => array(
 
24
        'parent' => 'views_handler_filter_in_operator',
 
25
      ),
 
26
      'og_views_handler_filter_og_picg' => array(
 
27
        'parent' => 'views_handler_filter',
 
28
      ),
 
29
      'og_views_handler_filter_og_is_admin' => array(
 
30
        'parent' => 'views_handler_filter_in_operator',
 
31
      ),
 
32
      // field
 
33
      'og_views_handler_field_og_post_count_new' => array(
 
34
        'parent' => 'views_handler_field_numeric',
 
35
      ),
 
36
      'og_views_handler_field_og_post_count' => array(
 
37
        'parent' => 'views_handler_field_numeric',
 
38
      ),
 
39
      'og_views_handler_field_og_member_count' => array(
 
40
        'parent' => 'views_handler_field_numeric',
 
41
      ),
 
42
      'og_views_handler_field_og_selective' => array(
 
43
        'parent' => 'views_handler_field',
 
44
      ),
 
45
      'og_views_handler_field_og_subscribe' => array(
 
46
        'parent' => 'views_handler_field',
 
47
      ),
 
48
      'og_views_handler_field_og_group_nids' => array(
 
49
        'parent' => 'views_handler_field_prerender_list',
 
50
      ),
 
51
      'og_views_handler_field_og_managelink' => array(
 
52
        'parent' => 'views_handler_field',
 
53
      ),
 
54
      'og_views_handler_field_og_is_active' => array(
 
55
        'parent' => 'views_handler_field',
 
56
      ),
 
57
      'og_views_handler_field_og_is_admin' => array(
 
58
        'parent' => 'views_handler_field',
 
59
      ),
 
60
      'og_views_handler_field_og_is_manager' => array(
 
61
        'parent' => 'views_handler_field',
 
62
      ),
 
63
      'og_views_handler_field_og_managelinkadmin' => array(
 
64
        'parent' => 'views_handler_field',
 
65
      ),
 
66
      'og_views_handler_field_og_managelinkmy' => array(
 
67
        'parent' => 'views_handler_field',
 
68
      ),
 
69
      'og_views_handler_field_og_uid_groups' => array(
 
70
        'parent' => 'views_handler_field_prerender_list',
 
71
      ),
 
72
      // argument
 
73
      'og_views_handler_argument_og_group_nid' => array(
 
74
        'parent' => 'views_handler_argument_numeric',
 
75
      ),
 
76
      'og_views_handler_argument_og_uid_nid' => array(
 
77
        'parent' => 'views_handler_argument_numeric',
 
78
      ),
 
79
      
 
80
    ),
 
81
  );
 
82
}
 
83
 
 
84
/**
 
85
 * Implementation of hook_views_plugins().
 
86
 */
 
87
function og_views_views_plugins() {
 
88
  return array(
 
89
    'argument validator' => array(
 
90
      'og_group_types' => array(
 
91
        'title' => t('Group nodes'),
 
92
        'handler' => 'og_views_plugin_argument_validate_og_group_types',
 
93
        'path' => drupal_get_path('module', 'og_views') . '/includes',
 
94
      ),
 
95
    ),
 
96
  );
 
97
}
 
98
 
 
99
/**
 
100
 * Implementation of hook_views_data().
 
101
 */
 
102
function og_views_views_data() {
 
103
  $data = array();
 
104
  $tables = array('og', 'og_ancestry', 'og_uid');
 
105
  foreach ($tables as $table) {
 
106
    $function = "og_views_data_$table";
 
107
    $data += $function();
 
108
  }
 
109
  
 
110
  return $data; 
 
111
}
 
112
 
 
113
/**
 
114
 * Implementation of hook_views_query_substitutions().
 
115
 */
 
116
function og_views_query_substitutions($view) {
 
117
  $groupnode = og_get_group_context();
 
118
  // return -1 instead of 0 to avoid matching all posts without a group
 
119
  return array('***CURRENT_GID***' => $groupnode ? $groupnode->nid : -1);
 
120
}
 
121
 
 
122
 
 
123
// ---------- Table OG
 
124
 
 
125
function og_views_data_og() {
 
126
  $data['og']['table']['group']  = t('Organic groups');
 
127
 
 
128
  $data['og']['table']['join'] = array(
 
129
    'node' => array(
 
130
      'left_field' => 'nid',
 
131
      'field' => 'nid',
 
132
    ),
 
133
  );
 
134
  $data['og']['description'] = array(
 
135
    'title' => t('Group: Description'),
 
136
    'real field' => 'og_description',
 
137
    'field' => array(
 
138
      'handler' => 'views_handler_field_markup',
 
139
      'format' => FILTER_FORMAT_DEFAULT,
 
140
      'click sortable' => FALSE,
 
141
    ),
 
142
  );
 
143
  $data['og']['member_count'] = array(
 
144
    'title' => t('Group: Members count'),
 
145
    'field' => array(
 
146
      'handler' => 'og_views_handler_field_og_member_count',
 
147
      'click sortable' => TRUE,
 
148
      'help' => t('Number of members for a group. Excludes memberships which are pending approval.'),
 
149
    ),
 
150
  );
 
151
  $data['og']['post_count'] = array(
 
152
    'title' => t('Group: Post count'),
 
153
    'field' => array(
 
154
      'handler' => 'og_views_handler_field_og_post_count',
 
155
      'click sortable' => TRUE,
 
156
      'help' => t('Number of published posts in a group. Can be restricted by node type using the <em>Option</em> dropdown.'),
 
157
      'notafield' => TRUE,
 
158
     ),
 
159
  );
 
160
  $data['og']['post_count_new'] = array(
 
161
      'title' => t('Group: Post count *new*'),
 
162
      'field' => array(
 
163
        'handler' => 'og_views_handler_field_og_post_count_new',
 
164
        'click sortable' => TRUE,
 
165
        'help' => t('Number of new posts in a group for the current user.'),
 
166
      ),
 
167
  );
 
168
  $data['og']['selective'] = array(
 
169
    'title' => t('Group: Selective'),
 
170
    'help' => t('The group preference which determines how membership requests are managed (moderated, invite only, etc.).'),
 
171
    'real field' => 'og_selective',
 
172
    'field' => array(
 
173
      'handler' => 'og_views_handler_field_og_selective',
 
174
    ),
 
175
    'filter' => array(
 
176
      'handler' => 'og_views_handler_filter_og_selective',
 
177
    ),
 
178
  );
 
179
  $data['og']['private'] = array(
 
180
    'title' => t('Group: Private'),
 
181
    'help' => t('Is the group home page private or not.'),
 
182
    'real field' => 'og_private',
 
183
    'field' => array(
 
184
      'handler' => 'views_handler_field_boolean',
 
185
    ),
 
186
    'filter' => array(
 
187
      'handler' => 'views_handler_filter_boolean_operator',
 
188
    ),
 
189
    'sort' => array(
 
190
      'handler' => 'views_handler_sort',
 
191
    ),
 
192
  );
 
193
  $data['og']['directory'] = array(
 
194
    'title' => t('Group: List in directory'),
 
195
    'help' => t('Admin specifies whether or not a group appears in the public listings.'),
 
196
    'real field' => 'og_directory',
 
197
    'field' => array(
 
198
      'real field' => 'og_directory',
 
199
      'handler' => 'views_handler_field_boolean',
 
200
    ),
 
201
    'filter' => array(
 
202
      'handler' => 'views_handler_filter_boolean_operator',
 
203
    ),
 
204
    'sort' => array(
 
205
      'handler' => 'views_handler_sort',
 
206
    ),
 
207
  );
 
208
  $data['og']['subscribe'] = array(
 
209
    'title' => t('Group: Join link'),
 
210
    'help' => t('Displays a link for joining a group when a user is not already a member.'),
 
211
    'field' => array(
 
212
      'handler' => 'og_views_handler_field_og_subscribe',
 
213
    ),
 
214
  );
 
215
  if (module_exists('locale')) {
 
216
    $data['og']['language'] = array(
 
217
      'title' => t('Group: Language'),
 
218
      'help' => t('Displays the language selected for a given group.'),
 
219
      'real field' => 'og_language',
 
220
      'field' => array(
 
221
        'handler' => 'views_handler_field_node_language',
 
222
        'click sortable' => TRUE,
 
223
      ),
 
224
      'filter' => array(
 
225
        'handler' => 'views_handler_filter_node_language',
 
226
      ),
 
227
      'argument' => array(
 
228
        'handler' => 'views_handler_argument_node_language',
 
229
      ),
 
230
    );
 
231
  }
 
232
  
 
233
  // Pseudofield which actually operates on node.type
 
234
  $data['og']['type_groups'] = array(
 
235
    'title' => t('Group types'), // The item it appears as on the UI,
 
236
    'help' => t('The type of a group (for example, "blog entry", "forum post", "story", etc).'),
 
237
    'real field' => 'type',
 
238
    'filter' => array(
 
239
      'handler' => 'og_views_handler_filter_og_type',
 
240
    ),
 
241
  );
 
242
  $data['og']['type_groups_all'] = array(
 
243
    'title' => t('Group types (all)'), // The item it appears as on the UI,
 
244
    'help' => t('The type of a group (for example, "blog entry", "forum post", "story", etc).'),
 
245
    'real field' => 'type',
 
246
    'filter' => array(
 
247
      'handler' => 'og_views_handler_filter_og_type_all',
 
248
      'help' => t('Restrict to all content types that have been marked as groups.'),
 
249
    ),
 
250
  );
 
251
  
 
252
  return $data;
 
253
}
 
254
 
 
255
// ------------ Table 'og_ancestry'
 
256
 
 
257
function og_views_data_og_ancestry() {
 
258
  $data['og_ancestry']['table']['group']  = t('Organic groups');
 
259
  $data['og_ancestry']['table']['base'] = array(
 
260
    'field' => 'nid',
 
261
    'title' => t('Group posts'),
 
262
    'help' => t('Posts which are affiiated with a group.'),
 
263
  );
 
264
  $data['og_ancestry']['table']['join'] = array(
 
265
    'node' => array(
 
266
      'left_field' => 'nid',
 
267
      'field' => 'nid',
 
268
    ),
 
269
  );
 
270
 
 
271
  $data['og_ancestry']['group_nid'] = array(
 
272
    'title' => t('Groups'),
 
273
    'help' => t('The groups for a post.'),
 
274
    'field' => array(
 
275
      'handler' => 'og_views_handler_field_og_group_nids',
 
276
    ),
 
277
    'relationship' => array(
 
278
      'title' => t('Group node (post)'),
 
279
      'help' => t("Bring in information about the group node based on a post's groups."),
 
280
      'base' => 'node',
 
281
      'field' => 'group_nid',
 
282
      'handler' => 'views_handler_relationship',
 
283
      'label' => t('Group node (post)'),
 
284
    ),
 
285
    'filter' => array(
 
286
      'handler' => 'og_views_handler_filter_og_group_nid',
 
287
      'numeric' => TRUE,
 
288
      'allow empty' => TRUE, // To select posts with no groups. Requires http://drupal.org/node/340824
 
289
      'help' => t('<strong>Posts</strong> are filtered for specific organic groups.'),
 
290
    ),
 
291
    'argument' => array(
 
292
      'name' => t('Post: in specified group (by number)'),
 
293
      'name field' => 'title', // the field to display in the summary.
 
294
      'validate type' => 'nid',
 
295
      'handler' => 'og_views_handler_argument_og_group_nid',
 
296
      'help' => t('<strong>Posts</strong> are filtered for specified organic groups. The page context (if Display is a page) will be set to the first listed group. That means that blocks and breadcrumbs (and theme and locale, if applicable) will be based upon the first specified node id.'),
 
297
    ),
 
298
  );
 
299
  $data['og_ancestry']['nid'] = array(
 
300
    'title' => t('Post: Nid'),
 
301
    'help' => t('The node ID of the node.'),
 
302
    'field' => array(
 
303
      'handler' => 'views_handler_field_node',
 
304
    ),    
 
305
  );
 
306
  $data['og_ancestry']['picg'] = array(
 
307
    'title' => t('OG: Posts in current group'),
 
308
    'help' => t('Posts in current group. Useful for blocks where determining context is hard. If page is not in any group context, no nodes are listed and thus a block would not appear.'),
 
309
    'filter' => array(
 
310
      'handler' => 'og_views_handler_filter_og_picg',
 
311
    ),
 
312
  );
 
313
  
 
314
  // TOODL: yes_empty field
 
315
  $data['og_ancestry']['is_public'] = array(
 
316
    'title' => t('Post: Public'),
 
317
    'help' => t('Is a given post public or private according to OG.'),
 
318
    'field' => array(
 
319
      'handler' => 'views_handler_field_boolean',
 
320
    ),
 
321
    'filter' => array(
 
322
      'handler' => 'views_handler_filter_boolean_operator',
 
323
    ),
 
324
    'sort' => array(
 
325
      'handler' => 'views_handler_sort',
 
326
    ),
 
327
  );
 
328
 
 
329
  return $data;
 
330
}
 
331
 
 
332
// --------- Table og_uid
 
333
 
 
334
function og_views_data_og_uid() {
 
335
  $data['og_uid']['table']['group']  = t('Organic groups');
 
336
  $data['og_uid']['table']['join'] = array(
 
337
    'node' => array(
 
338
      'left_field' => 'nid',
 
339
      'field' => 'nid',
 
340
    ),
 
341
    'users' => array(
 
342
      'left_field' => 'uid',
 
343
      'field' => 'uid',
 
344
    ),
 
345
  );
 
346
  $data['og_uid']['nid'] = array(
 
347
    'title' => t('Group'),
 
348
    'help' => t('Group that a member belongs to.'),
 
349
    'relationship' => array(
 
350
      'title' => t('Group node (member)'),
 
351
      'help' => t("Bring in information about the group node based on a user's membership."),
 
352
      'base' => 'node',
 
353
      'field' => 'nid',
 
354
      'handler' => 'views_handler_relationship',
 
355
      'label' => t('Group node (member)'),
 
356
    ),
 
357
    'argument' => array(
 
358
      'title' => t('Group node'),
 
359
      'handler' => 'og_views_handler_argument_og_uid_nid',
 
360
      'help' => t('<strong>Members</strong> are filtered for a specific group.'),
 
361
    ),
 
362
  ); 
 
363
  $data['og_uid']['groups'] = array(
 
364
    'title' => t('User\'s groups'),
 
365
    'help' => t('Groups that a member belongs to.'),
 
366
    'field' => array(
 
367
      'field' => 'uid',
 
368
      'handler' => 'og_views_handler_field_og_uid_groups',
 
369
      'help' => t("OG: List of user's groups"),
 
370
    ),
 
371
  );
 
372
  $data['og_uid']['uid'] = array(
 
373
    'title' => t('Group member'),
 
374
    // 'help' => t('foo')
 
375
    'filter' => array(
 
376
      'handler' => 'views_handler_filter_user_current',
 
377
      'help' => t("OG: Group in current user's groups"),
 
378
    ),
 
379
   'argument' => array(
 
380
     'title' => t('Member of a group'),
 
381
     'handler' => 'views_handler_argument_numeric',
 
382
     'help' => t("OG: Group in specified user's groups. Note that OG usually considers a user's groups to be private information. You may want to add access control to your View or validation to this argument."),
 
383
   ),
 
384
  );
 
385
  $data['og_uid']['managelinkadmin'] = array(
 
386
    'title' => t('OG: Admin manage link'),
 
387
    'help' => t('A link to the <em>Admin create or remove</em> page.'),
 
388
    'field' => array(
 
389
      'handler' => 'og_views_handler_field_og_managelinkadmin',
 
390
      'click sortable' => FALSE,
 
391
    ),
 
392
  );
 
393
  $data['og_uid']['managelinkmy'] = array(
 
394
    'title' => t('OG: Edit membership link'),
 
395
    'help' => t('A link to the <em>My membership</em> page.'),
 
396
    'field' => array(
 
397
      'handler' => 'og_views_handler_field_og_managelinkmy',
 
398
      'click sortable' => FALSE,
 
399
    ),
 
400
  );
 
401
  $data['og_uid']['managelink'] = array(
 
402
    'title' => t('OG: Approve/Deny/Remove membership link'),
 
403
    'help' => t('A link to approve/deny/remove a group member.'),
 
404
    'field' => array(
 
405
      'handler' => 'og_views_handler_field_og_managelink',
 
406
      'click sortable' => FALSE,
 
407
    ),
 
408
  );
 
409
  $data['og_uid']['is_admin'] = array(
 
410
    'title' => t('OG: Is member an admin in a group'),
 
411
    'help' => t('Add <em>admin</em> text if user is the group manager.'),
 
412
    'field' => array(
 
413
      'handler' => 'og_views_handler_field_og_is_admin',
 
414
      'click sortable' => TRUE,
 
415
    ),
 
416
    'filter' => array(
 
417
      'handler' => 'og_views_handler_filter_og_is_admin',
 
418
    ),
 
419
    'sort' => array(
 
420
       'handler' => 'views_handler_sort',
 
421
    ),
 
422
  );
 
423
  $data['og_uid']['is_active'] = array(
 
424
    'title' => t('OG: Is membership approved'),
 
425
    'help' => t("Add <em>approval needed</em> user if user's membership request is pending."),
 
426
    'field' => array(
 
427
      'handler' => 'og_views_handler_field_og_is_active',
 
428
      'click sortable' => TRUE,
 
429
    ),
 
430
    'filter' => array(
 
431
      'handler' => 'views_handler_filter_boolean_operator',
 
432
    ),
 
433
    'sort' => array(
 
434
       'handler' => 'views_handler_sort',
 
435
    ),
 
436
  );
 
437
  $data['og_uid']['is_manager'] = array(
 
438
    'title' => t('OG: Is the group manager'),
 
439
    'help' => t('Add <em>manager</em> text if user is the group manager.'),
 
440
    'field' => array(
 
441
      'field' => 'uid',
 
442
      'handler' => 'og_views_handler_field_og_is_manager',
 
443
      'click sortable' => FALSE,
 
444
    ),
 
445
  );
 
446
  $data['og_uid']['created'] = array(
 
447
    'title' => t('OG: Membership create date'),
 
448
    'help' => t('The date when the membership was created.'),
 
449
    'field' => array(
 
450
      'handler' => 'views_handler_field_date',
 
451
      'click sortable' => TRUE,
 
452
    ),
 
453
    'filter' => array(
 
454
      'handler' => 'views_handler_filter_date',
 
455
    ),
 
456
    'sort' => array(
 
457
       'handler' => 'views_handler_sort_date',
 
458
    ),
 
459
  );
 
460
  $data['og_uid']['changed'] = array(
 
461
    'title' => t('OG: Membership last updated date'),
 
462
    'help' => t('The date when the membership was last updated.'),
 
463
    'field' => array(
 
464
      'handler' => 'views_handler_field_date',
 
465
      'click sortable' => TRUE,
 
466
    ),
 
467
    'filter' => array(
 
468
      'handler' => 'views_handler_filter_date',
 
469
    ),
 
470
    'sort' => array(
 
471
       'handler' => 'views_handler_sort_date',
 
472
    ),
 
473
  );
 
474
    
 
475
  return $data;
 
476
}
 
477
 
 
478
function og_views_set_breadcrumb($nid) {
 
479
  $node = node_load((int)$nid);
 
480
  $bc = array(
 
481
    '<front>' => t('Home'),
 
482
    "node/$nid" => check_plain($node->title),
 
483
  );
 
484
  return $bc;
 
485
}