array( 'name' => 'og', 'join' => array( 'left' => array( 'table' => 'node', 'field' => 'nid' ), 'right' => array( 'field' => 'nid' ), ), 'fields' => array( 'description' => array( 'name' => t('Og: Group: Description'), ), 'website' => array( 'name' => t('Og: Group: Website'), 'handler' => 'og_handler_field_website', ), 'count' => array( 'name' => t('Og: Group: Subscriber Count'), 'handler' => 'og_handler_field_count', 'sortable' => FALSE, 'notafield' => TRUE, ), 'selective' => array( 'name' => t('Og: Group: Selective'), ), 'subscribe' => array( 'name' => t('Og: Group: Subscribe Link'), 'handler' => 'og_handler_field_subscribe', 'addlfields' => array('selective'), 'sortable' => FALSE, 'notafield' => TRUE, ), 'notification' => array( 'name' => t('Og: Group: Notification'), 'handler' => 'og_handler_field_yesempty', 'help' => t('Displays yes if group automatically sends email notifications to subscribers'), ), 'language' => array( 'name' => t('Og: Group: Language'), 'help' => t('Displays the language selected for a given group'), ), ), 'filters' => array( 'directory' => array( 'name' => t('Og: Group: List in directory'), 'operator' => array('=' => 'Equals'), 'list' => 'views_handler_operator_yesno', 'list-type' => 'select', 'help' => t('Admin specifies whether or not a group appears in the public listings.'), ) ), ), 'og_ancestry' => array( 'name' => 'og_ancestry', 'join' => array( 'left' => array( 'table' => 'node', 'field' => 'nid', ), 'right' => array( 'field' => 'nid', ), ), 'filters' => array( 'gid' => array( 'name' => t('Og: Post in specified group'), 'operator' => 'views_handler_operator_eqneq', 'field' => 'group_nid', 'help' => t('Filter for a given organic group. Value should be a numeric nid.'), ), 'gtype' => array( 'name' => t('Og: Post in specified group type'), 'list' => variable_get('og_node_types', array('og')), 'list-type' => 'list', 'operator' => 'views_handler_operator_or', 'value-type' => 'array', 'field' => 'group_nid', 'handler' => 'og_handler_filter_post_og_type', 'help' => t('Filter for a given organic group type.'), ), ), 'fields' => array( 'is_public' => array( 'name' => t('Og: Public'), 'handler' => 'og_handler_field_yesempty', 'help' => t('Displays yes if post is public according to OG.'), ) ), ), 'og_node_data' => array( 'name' => 'node', 'join' => array( 'left' => array( 'table' => 'og_ancestry', 'field' => 'group_nid', ), 'right' => array( 'field' => 'nid', ), ), 'fields' => array( 'title' => array( 'name' => t('Og: Group names'), 'handler' => 'og_handler_field_nodelink', 'notafield' => TRUE, 'help' => t('Display links to any groups that are affiliated with a post.'), ), ), ), 'og_uid' => array( 'name' => 'og_uid', 'join' => array( 'left' => array( 'table' => 'node', 'field' => 'nid', ), 'right' => array( 'field' => 'nid', ), 'extra' => array( 'is_active' => 1, ), ), 'fields' => array( 'mail_type' => array( 'name' => t('Og: Subscription email'), 'handler' => 'og_handler_field_yesempty', 'sortable' => false, 'help' => t('Does subscriber receive email notifications for a group.'), ), 'managelink' => array( 'name' => t('Og: Manage subscription link'), 'handler' => 'og_handler_field_managelink', 'sortable' => FALSE, 'notafield' => TRUE, ), 'is_admin' => array( 'name' => t('Og: Is subscriber an admin in a group'), 'handler' => 'og_handler_field_yesempty', 'sortable' => FALSE, ), ), 'filters' => array( 'currentuidsimple' => array( 'field' => 'uid', 'name' => t('Og: Group in User Subbed Groups'), 'operator' => 'views_handler_operator_eqneq', 'list' => 'views_handler_filter_usercurrent', 'list-type' => 'select', 'help' => t('Groups are filtered to where current user is a member .'), ), ), ), 'og_uid_node' => array( 'name' => 'og_uid', 'join' => array( 'left' => array( 'table' => 'og_node_data', 'field' => 'nid', ), 'right' => array( 'field' => 'nid', ), 'extra' => array( 'is_active' => 1, ), ), 'filters' => array( 'currentuid' => array( 'field' => 'uid', 'name' => t('Og: Post in User Subbed Groups'), 'operator' => 'views_handler_operator_eqneq', 'list' => 'views_handler_filter_usercurrent', 'list-type' => 'select', 'help' => t('Posts are filtered to groups that current user is a member of.'), ), ), ), // pseudotable for adding filter on node table and eventually more 'og_views' => array( 'name' => 'node', 'join' => array( 'left' => array( 'table' => 'node', 'field' => 'nid', ), 'right' => array( 'field' => 'nid', ) ), // here's a filter that is limited to og content types to be used for exposed filters that should not contain other values 'filters' => array( 'og_type_selector' => array( 'field' => 'type_selector', 'name' => t('OG: type (selector)'), 'list' => $type_options, 'list-type' => 'list', 'operator' => 'views_handler_operator_or', 'value-type' => 'array', 'help' => t('A node type selector that is limited to og-enabled node types. Use as exposed filter that only contains og node types.'), ), 'og_type' => array( 'field' => 'type', 'name' => t('OG: type'), 'operator' => array('=' => t('Is')), 'list' => array('a group node'), 'list-type' => 'select', 'handler' => 'og_handler_filter_og_type', 'help' => t('Restrict to node types which have been designated behave as groups.'), ), ), ), ); } function og_views_arguments() { $args = array( 'gid' => array( 'name' => t("Og: Group nid"), 'handler' => 'og_handler_argument_gid', 'help' => t('Filter for a given organic group'), ) ); return $args; } /* * Custom argument for filtering by an og. */ function og_handler_argument_gid($op, &$query, $argtype, $arg = '') { switch ($op) { case 'filter': // TODO: maybe there is a nicer syntax for this? $query->ensure_table('og_ancestry'); $query->add_where('og_ancestry.group_nid = %d', $arg); break; case 'title': return db_result(db_query_range('SELECT title FROM {node} WHERE nid = %d', $query, 0, 1));; } } /** * Provide a default view for getting new posts in a group */ function og_views_default_views() { $view = new stdClass(); $view->name = 'og_mytracker'; $view->description = t('Shows all activity in subscribed groups.'); $view->access = array('2'); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = t('Recent posts in my groups'); $view->page_header = ''; $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = t('There are no posts in your subscribed groups.'); $view->page_empty_format = '1'; $view->page_type = 'table'; $view->url = 'group/mytracker'; $view->use_pager = TRUE; $view->nodes_per_page = '25'; $view->menu = TRUE; $view->menu_title = t('My recent'); $view->menu_tab = TRUE; $view->menu_tab_default = FALSE; $view->menu_weight = ''; $view->sort = array ( ); $view->argument = array ( array ( 'type' => 'rss_feed', 'argdefault' => '2', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( array ( 'tablename' => 'og_node_data', 'field' => 'title', 'label' => t('Group'), 'sortable' => '1', ), array ( 'tablename' => 'node', 'field' => 'type', 'label' => t('Type'), 'sortable' => '1', ), array ( 'tablename' => 'node', 'field' => 'title', 'label' => t('Group'), 'handler' => 'views_handler_field_nodelink_with_mark', 'sortable' => '1', ), array ( 'tablename' => 'users', 'field' => 'name', 'label' => t('Author'), 'sortable' => '1', ), array ( 'tablename' => 'node_comment_statistics', 'field' => 'comment_count', 'label' => t('Replies'), 'handler' => 'views_handler_comments_with_new', 'sortable' => '1', ), array ( 'tablename' => 'node_comment_statistics', 'field' => 'last_comment_timestamp', 'label' => t('Last Post'), 'handler' => 'views_handler_field_since', 'sortable' => '1', 'defaultsort' => 'DESC', ), ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), array ( 'tablename' => 'og_uid_node', 'field' => 'currentuid', 'operator' => '=', 'options' => '', 'value' => '***CURRENT_USER***', ), // array ( // 'tablename' => 'node', // 'field' => 'distinct', // 'operator' => '=', // 'options' => '', // 'value' => array(), // ), ); $view->requires = array(og_node_data, node, users, node_comment_statistics, og_uid_node); $views[$view->name] = $view; // OG_UNREAD VIEW $view = new stdClass(); $view->name = 'og_unread'; $view->description = t('Shows unread posts in subscribed groups.'); $view->access = array ( 0 => '2', ); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = t('Unread posts in my groups'); $view->page_header = ''; $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = t('There are no new posts in your subscribed groups.'); $view->page_empty_format = '1'; $view->page_type = 'table'; $view->url = 'group/myunread'; $view->use_pager = TRUE; $view->nodes_per_page = '25'; $view->menu = TRUE; $view->menu_title = t('My unread'); $view->menu_tab = TRUE; $view->menu_tab_default = TRUE; $view->menu_weight = ''; $view->sort = array ( ); $view->argument = array ( array ( 'type' => 'rss_feed', 'argdefault' => '2', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( array ( 'tablename' => 'og_node_data', 'field' => 'title', 'label' => t('Group'), 'sortable' => '1', ), array ( 'tablename' => 'node', 'field' => 'type', 'label' => t('Type'), 'sortable' => '1', ), array ( 'tablename' => 'node', 'field' => 'title', 'label' => t('Group'), 'handler' => 'views_handler_field_nodelink_with_mark', 'sortable' => '1', ), array ( 'tablename' => 'users', 'field' => 'name', 'label' => t('Author'), 'sortable' => '1', ), array ( 'tablename' => 'node_comment_statistics', 'field' => 'comment_count', 'label' => t('Replies'), 'handler' => 'views_handler_comments_with_new', 'sortable' => '1', ), array ( 'tablename' => 'node_comment_statistics', 'field' => 'last_comment_timestamp', 'label' => t('Last Post'), 'handler' => 'views_handler_field_since', 'sortable' => '1', 'defaultsort' => 'DESC', ), ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), array ( 'tablename' => 'og_uid_node', 'field' => 'currentuid', 'operator' => '=', 'options' => '', 'value' => '***CURRENT_USER***', ), array ( 'tablename' => 'history', 'field' => 'timestamp', 'operator' => '0', 'options' => '', 'value' => array (), ), ); $view->exposed_filter = array(); $view->requires = array(og_node_data, node, users, node_comment_statistics, og_uid_node, history); $views[$view->name] = $view; // Group home page: river of news $view = new stdClass(); $view->name = 'og_ghp_ron'; $view->description = 'OG: Group home page - River of news. Default'; $view->page_type = 'teaser'; $view->access = array (); $view->view_args_php = ''; $view->sort = array ( array ( 'tablename' => 'node', 'field' => 'sticky', 'sortorder' => 'DESC', 'options' => '', ), array ( 'tablename' => 'node', 'field' => 'created', 'sortorder' => 'DESC', 'options' => '', ), ); $view->argument = array ( array ( 'type' => 'gid', 'argdefault' => '1', 'title' => '%1', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), array ( 'type' => 'rss_feed', 'argdefault' => '2', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), ); $view->exposed_filter = array (); $view->requires = array(node); $views[$view->name] = $view; // og/my $view = new stdClass(); $view->name = 'og_my'; $view->description = t('List user\'s subscribed groups and provide link to manage subscription'); $view->access = array ( 0 => '2', ); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = t('My groups'); $view->page_header = t('You may edit your all your email subscription using this convenient page. Also, you might be interested in an OPML feed containing feeds from all your subscribed groups.', array('!url' => url('og/opml'))); $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '2'; $view->page_empty = t('No subscribed groups'); $view->page_empty_format = '1'; $view->page_type = 'table'; $view->url = 'og/my'; $view->use_pager = TRUE; $view->nodes_per_page = '50'; $view->menu = TRUE; $view->menu_title = ''; $view->menu_tab = TRUE; $view->menu_tab_default = FALSE; $view->menu_tab_weight = '0'; $view->block = FALSE; $view->sort = array ( array ( 'tablename' => 'node', 'field' => 'title', 'sortorder' => 'ASC', 'options' => '', ), ); $view->argument = array ( array ( 'type' => 'rss_feed', 'argdefault' => '2', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( array ( 'tablename' => 'node', 'field' => 'title', 'label' => t('Group'), 'handler' => 'views_handler_field_nodelink', 'options' => 'link', ), array ( 'tablename' => 'users', 'field' => 'name', 'label' => t('Manager'), ), array ( 'tablename' => 'og', 'field' => 'count', 'label' => t('Subscribers'), ), array ( 'tablename' => 'og_uid', 'field' => 'mail_type', 'label' => t('Email'), ), array ( 'tablename' => 'og_uid', 'field' => 'managelink', 'label' => t('Manage'), ), ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), array ( 'tablename' => 'og_uid', 'field' => 'currentuidsimple', 'operator' => '=', 'options' => '', 'value' => '***CURRENT_USER***', ), array ( 'tablename' => 'og_views', 'field' => 'og_type', 'operator' => '=', 'options' => '', 'value' => '\'0\'', ), ); $view->exposed_filter = array ( ); $view->requires = array(node, users, og, og_uid, og_views); $views[$view->name] = $view; // og view $view = new stdClass(); $view->name = 'og'; $view->description = t('groups directory'); $view->access = array ( ); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = t('Groups directory'); $view->page_header = ''; $view->page_header_format = '2'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = t('No groups'); $view->page_empty_format = '1'; $view->page_type = 'table'; $view->url = 'og/all'; $view->use_pager = TRUE; $view->nodes_per_page = '90'; $view->menu = TRUE; $view->menu_title = t('Groups'); $view->menu_tab = TRUE; $view->menu_tab_default = TRUE; $view->menu_tab_weight = '-5'; $view->sort = array ( ); $view->argument = array ( array ( 'type' => 'rss_feed', 'argdefault' => '2', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( array ( 'tablename' => 'node', 'field' => 'title', 'label' => t('Group'), 'handler' => 'views_handler_field_nodelink', 'sortable' => '1', 'options' => 'link', ), array ( 'tablename' => 'users', 'field' => 'name', 'label' => t('Manager'), ), array ( 'tablename' => 'og', 'field' => 'count', 'label' => t('Subscribers'), ), array ( 'tablename' => 'og', 'field' => 'description', 'label' => t('Description'), ), array ( 'tablename' => 'og', 'field' => 'subscribe', 'label' => t('Subscribe'), ), ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), array ( 'tablename' => 'og', 'field' => 'directory', 'operator' => '=', 'options' => '', 'value' => '1', ), array ( 'tablename' => 'node', 'field' => 'title', 'operator' => 'contains', 'options' => '', 'value' => '\'\'', ), array ( 'tablename' => 'og_views', 'field' => 'og_type', 'operator' => '=', 'options' => '', 'value' => '0', ), ); $view->exposed_filter = array ( array ( 'tablename' => 'node', 'field' => 'title', 'label' => t('Search for a group by name'), 'optional' => '1', 'is_default' => '0', 'operator' => '1', 'single' => '0', ), ); $view->requires = array(node, users, og, og_views); $views[$view->name] = $view; // og_tracker $view = new stdClass(); $view->name = 'og_tracker'; $view->description = t('Shows active posts across the whole site'); $view->access = array ( ); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = t('Recent posts across whole site'); $view->page_header = ''; $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = ''; $view->page_empty_format = '1'; $view->page_type = 'table'; $view->url = 'group/tracker'; $view->use_pager = TRUE; $view->nodes_per_page = '25'; $view->menu = TRUE; $view->menu_title = t('Recent posts'); $view->menu_tab = TRUE; $view->menu_tab_default = FALSE; $view->menu_tab_weight = '5'; $view->sort = array ( array ( 'tablename' => 'node_comment_statistics', 'field' => 'last_comment_timestamp', 'sortorder' => 'DESC', 'options' => 'normal', ), ); $view->argument = array ( array ( 'type' => 'uid', 'argdefault' => '2', 'title' => t('Recent posts for %1'), 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), array ( 'type' => 'rss_feed', 'argdefault' => '2', 'title' => '', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( array ( 'tablename' => 'node', 'field' => 'type', 'label' => t('Type'), ), array ( 'tablename' => 'node', 'field' => 'title', 'label' => t('Group'), 'handler' => 'views_handler_field_nodelink_with_mark', 'options' => 'link', ), array ( 'tablename' => 'users', 'field' => 'name', 'label' => t('Author'), ), array ( 'tablename' => 'node_comment_statistics', 'field' => 'comment_count', 'label' => t('Replies'), 'handler' => 'views_handler_comments_with_new', ), array ( 'tablename' => 'og_node_data', 'field' => 'title', 'label' => t('Groups'), ), array ( 'tablename' => 'node_comment_statistics', 'field' => 'last_comment_timestamp', 'label' => t('Last Post'), 'handler' => 'views_handler_field_since', ), ); $view->filter = array ( array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), ); $view->exposed_filter = array ( ); $view->requires = array(node_comment_statistics, node, users, og_node_data); $views[$view->name] = $view; // in group search - og_search $view = new stdClass(); $view->name = 'og_search'; $view->description = 'Search within a particular group'; $view->access = array ( ); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = 'Search'; $view->page_header = ''; $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = 'No posts found.'; $view->page_empty_format = '1'; $view->page_type = 'teaser'; $view->url = 'og/search'; $view->use_pager = TRUE; $view->nodes_per_page = '50'; $view->sort = array ( array ( 'tablename' => 'node', 'field' => 'created', 'sortorder' => 'DESC', 'options' => 'normal', ), ); $view->argument = array ( array ( 'type' => 'gid', 'argdefault' => '1', 'title' => 'Search results for %1', 'options' => '', 'wildcard' => '', 'wildcard_substitution' => '', ), ); $view->field = array ( ); $view->filter = array ( array ( 'tablename' => 'temp_search_results', 'field' => 'word', 'operator' => '=', 'options' => '', 'value' => '', ), array ( 'tablename' => 'node', 'field' => 'status', 'operator' => '=', 'options' => '', 'value' => '1', ), ); $view->exposed_filter = array ( array ( 'tablename' => 'temp_search_results', 'field' => 'word', 'label' => 'Enter keyword', 'optional' => '1', 'is_default' => '0', 'operator' => '1', 'single' => '1', ), ); $view->requires = array(node, temp_search_results); $views[$view->name] = $view; return $views; } /** * Views handler to display the number subscriptions */ function og_handler_field_count($fieldinfo, $fielddata, $value, $data) { global $user; $cnt = db_num_rows(db_query(og_list_users_sql(), $data->nid)); return in_array($data->nid, array_keys($user->og_groups)) ? l($cnt, "og/users/$data->nid") : $cnt; } /** * Views handler to display the external website field */ function og_handler_field_website($fieldinfo, $fielddata, $value, $data) { if ($value) { return l(t('external website'), $value); } } /** * Views handler to display the subscribe link */ function og_handler_field_subscribe($fieldinfo, $fielddata, $value, $data) { global $user; if (!in_array($data->nid, array_keys($user->og_groups))) { switch ($data->og_selective) { case OG_CLOSED: return ''. t('Closed'). ''; case OG_INVITE_ONLY: return ''. t('Invite only'). ''; default: return l(t('subscribe'), "og/subscribe/$data->nid", array('rel' => 'nofollow'), drupal_get_destination()); } } } function og_handler_field_nodelink($fieldinfo, $fielddata, $value, $data) { // we have to query to get all the groups into a single element $result = og_get_node_groups_result($data->nid); while ($row = db_fetch_object($result)) { $links[] = l($row->title, "node/$row->group_nid"); } if ($links) { return implode(', ', $links); } } function og_handler_field_managelink($fieldinfo, $fielddata, $value, $data) { return l(t('my subscription'), "og/manage/$data->nid", NULL, drupal_get_destination()); } function og_handler_field_yesempty($fieldinfo, $fielddata, $value, $data) { return $value ? t('yes') : ''; } function og_handler_filter_og_type($op, $filter, $filterinfo, &$query) { list($types, $in) = og_get_sql_args(); $query->add_where("node.type IN ($in)", $types); } function og_handler_filter_post_og_type($op, $filter, $filterinfo, &$query) { $query->ensure_table('og_ancestry'); $query->add_table('og_node_data'); $types = $filter['value']; $placeholders = array_fill(0, count($types), "'%s'"); $query->add_where("og_node_data.type IN (". implode(", ", $placeholders) .")", $types); }