diff --git a/og_menu.js b/og_menu.js index 76d102e..d51e998 100644 --- a/og_menu.js +++ b/og_menu.js @@ -11,6 +11,7 @@ var enabled = $('#edit-menu-enabled').is(':checked'); var holder = document.createElement('select'); + var selectors = 'select[name^="og_group_ref"], input[name^="og_group_ref"'; // Toggle menu alteration function toggle(values) { @@ -61,12 +62,12 @@ }; // Alter menu on OG select change and init - if ($('select.group-audience').size()) { - $('select.group-audience').change(toggleSelect).ready(toggleSelect); + if ($(selectors).size()) { + $(selectors).change(toggleSelect).ready(toggleSelect); } // init - toggle($('select.group-audience').val()); + toggle($(selectors).val()); } } diff --git a/og_menu.module b/og_menu.module index f291d57..6ad9aaa 100644 --- a/og_menu.module +++ b/og_menu.module @@ -207,13 +207,13 @@ function og_menu_block_view($delta = '') { $block = array(); if ($delta == 'og_single_menu_block') { $context = og_context(); - $group = isset($context->gid) ? $context->gid : 0; + $group = isset($context['gid']) ? $context['gid'] : 0; $menus = og_menu_get_group_menus(array($group)); $menu = array_shift($menus); if ($menu) { if (variable_get('og_menu_block_links', FALSE)) { - $block['subject'] = l($menu->mtitle, 'node/' . $context->etid); + $block['subject'] = l($menu->mtitle, 'node/' . $context['gid']); } else { $block['subject'] = check_plain($menu->mtitle); @@ -227,13 +227,13 @@ function og_menu_block_view($delta = '') { $gids = array(); if ($node) { if (og_is_group_content_type('node', $node->type)) { - $nodegroups = og_load_multiple(og_get_entity_groups('node', $node)); - foreach ($nodegroups as $ng) - $gids[] = $ng->gid; + $nodegroups = og_get_entity_groups('node', $node); + if (!empty($nodegroups['node'])) { + $gids = $nodegroups['node']; + } } elseif (og_is_group_type('node', $node->type)) { - $group = og_get_group('node', $node->nid); - $gids = array($group->gid); + $gids = array($node->nid); } } // If no group was found, fallback to the regular og_get_group_context @@ -281,7 +281,7 @@ function og_menu_field_extra_fields() { */ function og_menu_get_context() { $context = og_context(); - return (isset($context->gid) ? $context->gid : 0); + return (isset($context['gid']) ? $context['gid'] : 0); } /** @@ -299,19 +299,17 @@ function og_menu_form_node_form_alter(&$form, &$form_state) { // Group content. if ($is_group_content) { // Check if we get any group context from the url - $gids = array_values(og_get_context_by_url()); + $gid = og_context(); $context_based_access = FALSE; $group_based_access = FALSE; - if (!empty($gids) && is_array($gids)) { - foreach ($gids as $gid) { - if (og_user_access($gid, 'administer og menu')) { + if (!empty($gid) && is_array($gid)) { + if (og_user_access('node', $gid['gid'], 'administer og menu')) { $context_based_access = TRUE; } - } } if (!$context_based_access && $group = og_context()) { // Performance, might be a gotcha later on. - $group_based_access = og_user_access($group->gid, 'administer og menu'); + $group_based_access = og_user_access('node', $group['gid'], 'administer og menu'); } if (user_access('administer og menu') || $context_based_access || $group_based_access) { @@ -320,8 +318,7 @@ function og_menu_form_node_form_alter(&$form, &$form_state) { $groups = og_get_entity_groups('user', $user); $list = array(); $settings = array(); - $menus = og_menu_get_group_menus($groups); - + $menus = og_menu_get_group_menus($groups['node']); if (!empty($menus)) { foreach ($menus as $menu) { $list[$menu->mname] = $menu->mtitle; @@ -346,11 +343,6 @@ function og_menu_form_node_form_alter(&$form, &$form_state) { $merged_list = $list; } - $menus = og_menu_get_group_menus(); - foreach ($menus as $menu) { - $settings[$menu->mname] = $menu->gid; - } - // Menu parent options will format the list in a way Drupal expects and give children, etc $options = menu_parent_options($merged_list, array('mlid' => 0)); if ($nid = $form['nid']['#value']) { @@ -367,7 +359,6 @@ function og_menu_form_node_form_alter(&$form, &$form_state) { } } } - // Group type. if ($is_group_type) { $form['og_menu'] = array( @@ -399,17 +390,20 @@ function og_menu_form_menu_edit_menu_alter(&$form, &$form_state) { $options = array('' => '--'); $values = array(); // Populate gids - if (user_access('administer organic groups')) { - $result = db_query("SELECT gid, label FROM {og} WHERE entity_type='node'"); + if (user_access('administer group')) { + $result = db_query("SELECT distinct ogm.gid, n.title FROM {og_membership} ogm LEFT JOIN {node} n ON n.nid = ogm.gid WHERE entity_type='node'"); foreach ($result as $group) { - $options[$group->gid] = $group->label; + $options[$group->gid] = $group->title; } } else { global $user; - $groups = og_load_multiple(og_get_entity_groups('user', $user)); - foreach ($groups as $group) { - $options[$group->gid] = $group->label; + $entities = og_get_entity_groups('user', $user); + foreach (array_keys($entities) as $entity_type) { + $groups = entity_load($entity_type, $entities[$entity_type]); + foreach ($groups as $gid => $group) { + $options[$gid] = $group->title; + } } } @@ -542,10 +536,7 @@ function og_menu_node_prepare($node) { if (og_is_group_type('node', $node->type)) { $node->og_menu = og_menu_get_group_menus(); if (!empty($node->nid)) { - $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING)); - if (isset($og->gid)) { - $node->og_menu = og_menu_get_group_menus(array($og->gid)); - } + $node->og_menu = og_menu_get_group_menus(array($node->nid)); } } // $node is not a new node and is a group content type, menu link is not set. @@ -581,14 +572,13 @@ function og_menu_node_prepare($node) { */ function og_menu_node_insert($node) { if (og_is_group_type('node', $node->type)) { - $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING)); if ($node->og_menu) { menu_save(array( - 'menu_name' => 'menu-og-' . $og->gid, + 'menu_name' => 'menu-og-' . $node->nid, 'title' => $node->title, 'description' => t('OG Menu for') . ' ' . check_plain($node->title), )); - og_menu_update_menu('menu-og-' . $og->gid, $og->gid); + og_menu_update_menu('menu-og-' . $node->nid, $node->nid); } } } @@ -598,22 +588,21 @@ function og_menu_node_insert($node) { */ function og_menu_node_update($node) { if (og_is_group_type('node', $node->type)) { - $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING)); if ($node->og_menu) { - $menu = og_menu_get_group_menus(array($og->gid)); + $menu = og_menu_get_group_menus(array($node->nid)); if (empty($menu)) { menu_save(array( - 'menu_name' => 'menu-og-' . $og->gid, + 'menu_name' => 'menu-og-' . $node->nid, 'title' => $node->title, 'description' => t('OG Menu for') . ' ' . check_plain($node->title), )); - og_menu_update_menu('menu-og-' . $og->gid, $og->gid); + og_menu_update_menu('menu-og-' . $node->nid, $node->nid); } } else { // We can't assume that the menu name is 'menu-og-[gid]' // we need to look up menus associated with this group - $result = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $og->gid))->fetchCol(); + $result = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $node->nid))->fetchCol(); foreach ($result as $menu_name) { menu_delete(array( 'menu_name' => $menu_name, @@ -636,9 +625,7 @@ function og_menu_node_delete($node) { * we need the gid of the group being deleted, see if its an og assosiated * menu from og_menu and then from that menu name, delete it. */ - $gid = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING))->gid; - - $results = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $gid))->fetchCol(); + $results = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $node->nid))->fetchCol(); // @todo This can be replaced with two db_delete queries foreach ($results as $menu_name) { @@ -717,9 +704,9 @@ function og_menu_get_group_menus($gids = NULL, $user = NULL) { global $user; } if (!$gids) { - $nodegroups = og_load_multiple(og_get_entity_groups('user', $user)); - foreach ($nodegroups as $ng) { - $gids[] = $ng->gid; + $nodegroups = og_get_entity_groups('user', $user); + if (!empty($nodegroups['node'])) { + $gids = $nodegroups['node']; } } $menus = array(); @@ -759,11 +746,10 @@ function og_menu_access($node, $menu = NULL, $op = NULL) { elseif (user_access('administer menu')) { return TRUE; } - elseif (user_access('administer og menu') || og_user_access_by_entity('administer og menu', 'node', $node->nid)) { + elseif (user_access('administer og menu') || og_user_access_entity('administer og menu', 'node', $node->nid)) { if ($op == 'new-menu') { - $group = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING)); $query = db_select('og_menu', 'ogm'); - $query->condition('ogm.gid', $group->gid, '='); + $query->condition('ogm.gid', $node->nid, '='); $count = $query->countQuery()->execute()->fetchField(); $max = variable_get('og_menu_max_menus_per_group', 1); if ($max > 0 && $count >= $max) { @@ -899,14 +885,16 @@ function og_menu_menu_alter(&$items) { */ function _og_menu_autocomplete($string) { $matches = array(); - $query = db_select('og', 'og'); - $return = $query - ->fields('og', array('gid', 'label')) - ->condition('og.label', '%' . db_like($string) . '%', 'LIKE') - ->range(0, 10) - ->execute(); + $query = db_select('node', 'n'); + $query->distinct(); + $query->join('og_membership','og', 'n.nid = og.gid'); + $query->fields('og', array('gid')); + $query->fields('n', array('title')); + $query->condition('n.title', '%' . db_like($string) . '%', 'LIKE'); + $query->range(0, 10); + $return = $query->execute(); foreach ($return as $row) { - $matches[$row->label . " [gid:$row->gid]"] = '
' . $row->label . '
'; + $matches[$row->title . " [gid:$row->gid]"] = '
' . $row->title . '
'; } // return for JS drupal_json_output($matches); diff --git a/og_menu.pages.inc b/og_menu.pages.inc index 19300c2..5faf8a8 100644 --- a/og_menu.pages.inc +++ b/og_menu.pages.inc @@ -10,9 +10,6 @@ * user's group and along with their description. */ function og_menu_overview_page($node) { - $gid = og_get_group_ids('node', array($node->nid), FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING)); - $gid = $gid[$node->nid]; - // Set the title of the page. drupal_set_title(t('List menus for @title', array('@title' => $node->title)), PASS_THROUGH); @@ -22,7 +19,7 @@ function og_menu_overview_page($node) { LEFT JOIN {menu_custom} m ON om.menu_name = m.menu_name WHERE om.gid = :gid - ORDER BY title", array(':gid' => $gid)); + ORDER BY title", array(':gid' => $node->nid)); $header = array(t('Title'), array('data' => t('Operations'), 'colspan' => '3')); $rows = array(); foreach ($result as $menu) { @@ -47,7 +44,6 @@ function og_menu_overview_page($node) { function og_menu_edit_menu_form($form, &$form_state, $type, $menu = array()) { module_load_include('inc', 'menu', 'menu.admin'); $node = menu_get_object('node', 1); - $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING)); // Set the title of the page. switch ($type) { @@ -62,7 +58,7 @@ function og_menu_edit_menu_form($form, &$form_state, $type, $menu = array()) { $form = drupal_retrieve_form('menu_edit_menu', $form_state, $type, $menu); $form['og_menu_gid'] = array( '#type' => 'value', - '#value' => $og->gid, + '#value' => $node->nid, ); // Add submit handlers. $form['#submit'][] = 'menu_edit_menu_submit'; @@ -164,7 +160,7 @@ function og_menu_edit_item_form($form, &$form_state, $type, $item, $menu, $node) module_load_include('inc', 'menu', 'menu.admin'); $form = drupal_retrieve_form('menu_edit_item', $form_state, $form, $type, $item, $menu); $list = array(); - $menus = og_menu_get_group_menus(array(og_get_group('node', $node->nid)->gid)); + $menus = og_menu_get_group_menus(array($node->nid)); foreach ($menus as $option) { $list[$option->mname] = $option->mtitle; }