diff --git a/og_menu.module b/og_menu.module index 4aa01dd..fbef29a 100644 --- a/og_menu.module +++ b/og_menu.module @@ -182,7 +182,7 @@ function og_menu_theme($existing, $type, $theme, $path) { function theme_og_menu_node_form($form) { $menus = og_menu_get_menus(); foreach ($menus as $menu) { - $settings['menus'][$menu->mname] = $menu->gid; + $settings['menus'][$menu->menu_name] = $menu->gid; } $settings['admin'] = user_access('administer menu'); drupal_add_js(array('og_menu' => $settings), 'setting'); @@ -207,18 +207,19 @@ 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_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->title, 'node/' . $context->etid); } else { - $block['subject'] = check_plain($menu->mtitle); + $block['subject'] = check_plain($menu->title); } - $block['content'] = menu_tree($menu->mname); + $block['content'] = menu_tree($menu->menu_name); } } if ($delta == 'og_multi_menu_block') { // @todo Test this!! @@ -227,9 +228,10 @@ 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); @@ -248,7 +250,7 @@ function og_menu_block_view($delta = '') { } $block['content'] = ''; foreach ($menus as $menu) { - $block['content'] .= render(menu_tree($menu->mname)); + $block['content'] .= render(menu_tree($menu->menu_name)); } } @@ -279,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); } /** @@ -304,8 +306,8 @@ function og_menu_form_node_form_alter(&$form, &$form_state) { if (!empty($menus)) { foreach ($menus as $menu) { - $list[$menu->mname] = $menu->mtitle; - $settings[$menu->mname] = $menu->gid; + $list[$menu->menu_name] = $menu->title; + $settings[$menu->menu_name] = $menu->gid; } // If user has administer menu permission, also show other menu options. if (user_access('administer menu')) { @@ -326,11 +328,6 @@ function og_menu_form_node_form_alter(&$form, &$form_state) { $merged_list = $list; } - $menus = og_menu_get_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']) { @@ -387,9 +384,9 @@ function og_menu_form_menu_edit_menu_alter(&$form, &$form_state) { $values = array(); // Populate gids if (user_access('administer organic groups')) { - $result = db_query("SELECT gid, label FROM {og} WHERE entity_type='node'"); + $result = db_query("SELECT 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 { @@ -466,14 +463,8 @@ function og_menu_form_menu_delete_menu_confirm_alter(&$form, &$form_state) { */ function og_menu_node_prepare($node) { // $node is a group type. - if (og_is_group_type('node', $node->type)) { - $node->og_menu = og_menu_get_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_menus(array($og->gid)); - } - } + if (og_is_group_type('node', $node->type) && !empty($node->nid)) { + $node->og_menu = og_menu_get_menus(array($node->nid)); } // $node is not a new node and is a group content type, menu link is not set. // @todo This used to exclude users with user_access('administer menu'), test the consequences of this change. @@ -509,14 +500,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) { + if (!empty($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); } } } @@ -526,21 +516,20 @@ 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_menus(array($og->gid)); + $menu = og_menu_get_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, @@ -562,9 +551,7 @@ function og_menu_node_delete($node) { * 'menu-og-' . [gid] - 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) { @@ -601,7 +588,7 @@ function og_menu_node_form_validate($form, &$form_state) { } foreach ($menus as $menu) { - if ($menu->mname == $parent) { + if ($menu->menu_name == $parent) { // Check if user has access to the chosen menu parent $has_menu_access = TRUE; // Check if menu belongs to one of the selected groups @@ -641,23 +628,19 @@ function og_menu_get_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'); + if (!empty($nodegroups['node'])) { + $gids = $nodegroups['node']; } } $menus = array(); if ($gids) { - // @todo Convert this query to use db_select(). - $result = db_query("SELECT - om.gid, - om.menu_name as omname, - m.menu_name as mname, - m.title as mtitle - FROM {og_menu} om - LEFT JOIN {menu_custom} m ON om.menu_name = m.menu_name - WHERE om.gid IN (:gids) - ORDER BY mtitle", array(':gids' => $gids)); + $query = db_select('og_menu', 'om'); + $query->join('menu_custom', 'm', 'm.menu_name = om.menu_name'); + $query->fields('om', array('gid', 'menu_name')); + $query->fields('m', array('title')); + $query->condition('gid', $gids, 'IN'); + $result = $query->execute(); foreach ($result as $menu) { $menus[] = $menu; } @@ -823,14 +806,15 @@ 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('og_membership', 'og'); + $query->join('node', 'n', 'n.nid = og.gid'); + $return = $query->fields('og', array('gid')) + ->fields('n', array('title')) + ->condition('n.title', '%' . db_like($string) . '%', 'LIKE') + ->range(0, 10) + ->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 41bc024..d736519 100644 --- a/og_menu.pages.inc +++ b/og_menu.pages.inc @@ -9,9 +9,6 @@ * Menu callback which shows an overview page of all the custom menus in user's groups and their descriptions. */ 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); @@ -20,7 +17,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) { @@ -45,7 +42,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) { @@ -60,7 +56,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'; @@ -162,7 +158,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_menus(array(og_get_group('node', $node->nid)->gid)); + $menus = og_menu_get_menus(array($node->nid)); foreach ($menus as $option) { $list[$option->mname] = $option->mtitle; }