2
// $Id: og_views.views.inc,v 1.13.2.1 2009/04/10 03:09:23 weitzman Exp $
5
* Implementation of hook_views_handlers().
7
function og_views_views_handlers() {
10
'path' => drupal_get_path('module', 'og_views') .'/includes',
14
'og_views_handler_filter_og_group_nid' => array(
15
'parent' => 'views_handler_filter_many_to_one',
17
'og_views_handler_filter_og_type_all' => array(
18
'parent' => 'views_handler_filter',
20
'og_views_handler_filter_og_type' => array(
21
'parent' => 'views_handler_filter_node_type',
23
'og_views_handler_filter_og_selective' => array(
24
'parent' => 'views_handler_filter_in_operator',
26
'og_views_handler_filter_og_picg' => array(
27
'parent' => 'views_handler_filter',
29
'og_views_handler_filter_og_is_admin' => array(
30
'parent' => 'views_handler_filter_in_operator',
33
'og_views_handler_field_og_post_count_new' => array(
34
'parent' => 'views_handler_field_numeric',
36
'og_views_handler_field_og_post_count' => array(
37
'parent' => 'views_handler_field_numeric',
39
'og_views_handler_field_og_member_count' => array(
40
'parent' => 'views_handler_field_numeric',
42
'og_views_handler_field_og_selective' => array(
43
'parent' => 'views_handler_field',
45
'og_views_handler_field_og_subscribe' => array(
46
'parent' => 'views_handler_field',
48
'og_views_handler_field_og_group_nids' => array(
49
'parent' => 'views_handler_field_prerender_list',
51
'og_views_handler_field_og_managelink' => array(
52
'parent' => 'views_handler_field',
54
'og_views_handler_field_og_is_active' => array(
55
'parent' => 'views_handler_field',
57
'og_views_handler_field_og_is_admin' => array(
58
'parent' => 'views_handler_field',
60
'og_views_handler_field_og_is_manager' => array(
61
'parent' => 'views_handler_field',
63
'og_views_handler_field_og_managelinkadmin' => array(
64
'parent' => 'views_handler_field',
66
'og_views_handler_field_og_managelinkmy' => array(
67
'parent' => 'views_handler_field',
69
'og_views_handler_field_og_uid_groups' => array(
70
'parent' => 'views_handler_field_prerender_list',
73
'og_views_handler_argument_og_group_nid' => array(
74
'parent' => 'views_handler_argument_numeric',
76
'og_views_handler_argument_og_uid_nid' => array(
77
'parent' => 'views_handler_argument_numeric',
85
* Implementation of hook_views_plugins().
87
function og_views_views_plugins() {
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',
100
* Implementation of hook_views_data().
102
function og_views_views_data() {
104
$tables = array('og', 'og_ancestry', 'og_uid');
105
foreach ($tables as $table) {
106
$function = "og_views_data_$table";
107
$data += $function();
114
* Implementation of hook_views_query_substitutions().
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);
123
// ---------- Table OG
125
function og_views_data_og() {
126
$data['og']['table']['group'] = t('Organic groups');
128
$data['og']['table']['join'] = array(
130
'left_field' => 'nid',
134
$data['og']['description'] = array(
135
'title' => t('Group: Description'),
136
'real field' => 'og_description',
138
'handler' => 'views_handler_field_markup',
139
'format' => FILTER_FORMAT_DEFAULT,
140
'click sortable' => FALSE,
143
$data['og']['member_count'] = array(
144
'title' => t('Group: Members count'),
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.'),
151
$data['og']['post_count'] = array(
152
'title' => t('Group: Post count'),
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.'),
160
$data['og']['post_count_new'] = array(
161
'title' => t('Group: Post count *new*'),
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.'),
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',
173
'handler' => 'og_views_handler_field_og_selective',
176
'handler' => 'og_views_handler_filter_og_selective',
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',
184
'handler' => 'views_handler_field_boolean',
187
'handler' => 'views_handler_filter_boolean_operator',
190
'handler' => 'views_handler_sort',
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',
198
'real field' => 'og_directory',
199
'handler' => 'views_handler_field_boolean',
202
'handler' => 'views_handler_filter_boolean_operator',
205
'handler' => 'views_handler_sort',
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.'),
212
'handler' => 'og_views_handler_field_og_subscribe',
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',
221
'handler' => 'views_handler_field_node_language',
222
'click sortable' => TRUE,
225
'handler' => 'views_handler_filter_node_language',
228
'handler' => 'views_handler_argument_node_language',
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',
239
'handler' => 'og_views_handler_filter_og_type',
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',
247
'handler' => 'og_views_handler_filter_og_type_all',
248
'help' => t('Restrict to all content types that have been marked as groups.'),
255
// ------------ Table 'og_ancestry'
257
function og_views_data_og_ancestry() {
258
$data['og_ancestry']['table']['group'] = t('Organic groups');
259
$data['og_ancestry']['table']['base'] = array(
261
'title' => t('Group posts'),
262
'help' => t('Posts which are affiiated with a group.'),
264
$data['og_ancestry']['table']['join'] = array(
266
'left_field' => 'nid',
271
$data['og_ancestry']['group_nid'] = array(
272
'title' => t('Groups'),
273
'help' => t('The groups for a post.'),
275
'handler' => 'og_views_handler_field_og_group_nids',
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."),
281
'field' => 'group_nid',
282
'handler' => 'views_handler_relationship',
283
'label' => t('Group node (post)'),
286
'handler' => 'og_views_handler_filter_og_group_nid',
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.'),
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.'),
299
$data['og_ancestry']['nid'] = array(
300
'title' => t('Post: Nid'),
301
'help' => t('The node ID of the node.'),
303
'handler' => 'views_handler_field_node',
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.'),
310
'handler' => 'og_views_handler_filter_og_picg',
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.'),
319
'handler' => 'views_handler_field_boolean',
322
'handler' => 'views_handler_filter_boolean_operator',
325
'handler' => 'views_handler_sort',
332
// --------- Table og_uid
334
function og_views_data_og_uid() {
335
$data['og_uid']['table']['group'] = t('Organic groups');
336
$data['og_uid']['table']['join'] = array(
338
'left_field' => 'nid',
342
'left_field' => 'uid',
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."),
354
'handler' => 'views_handler_relationship',
355
'label' => t('Group node (member)'),
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.'),
363
$data['og_uid']['groups'] = array(
364
'title' => t('User\'s groups'),
365
'help' => t('Groups that a member belongs to.'),
368
'handler' => 'og_views_handler_field_og_uid_groups',
369
'help' => t("OG: List of user's groups"),
372
$data['og_uid']['uid'] = array(
373
'title' => t('Group member'),
374
// 'help' => t('foo')
376
'handler' => 'views_handler_filter_user_current',
377
'help' => t("OG: Group in current user's groups"),
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."),
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.'),
389
'handler' => 'og_views_handler_field_og_managelinkadmin',
390
'click sortable' => FALSE,
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.'),
397
'handler' => 'og_views_handler_field_og_managelinkmy',
398
'click sortable' => FALSE,
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.'),
405
'handler' => 'og_views_handler_field_og_managelink',
406
'click sortable' => FALSE,
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.'),
413
'handler' => 'og_views_handler_field_og_is_admin',
414
'click sortable' => TRUE,
417
'handler' => 'og_views_handler_filter_og_is_admin',
420
'handler' => 'views_handler_sort',
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."),
427
'handler' => 'og_views_handler_field_og_is_active',
428
'click sortable' => TRUE,
431
'handler' => 'views_handler_filter_boolean_operator',
434
'handler' => 'views_handler_sort',
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.'),
442
'handler' => 'og_views_handler_field_og_is_manager',
443
'click sortable' => FALSE,
446
$data['og_uid']['created'] = array(
447
'title' => t('OG: Membership create date'),
448
'help' => t('The date when the membership was created.'),
450
'handler' => 'views_handler_field_date',
451
'click sortable' => TRUE,
454
'handler' => 'views_handler_filter_date',
457
'handler' => 'views_handler_sort_date',
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.'),
464
'handler' => 'views_handler_field_date',
465
'click sortable' => TRUE,
468
'handler' => 'views_handler_filter_date',
471
'handler' => 'views_handler_sort_date',
478
function og_views_set_breadcrumb($nid) {
479
$node = node_load((int)$nid);
481
'<front>' => t('Home'),
482
"node/$nid" => check_plain($node->title),