--- menu_stp.module	2009-01-28 19:38:47.000000000 -0500
+++ menu_stpNew.module	2009-03-03 15:10:11.000000000 -0500
@@ -64,17 +64,10 @@ function menu_stp_theme() {
  * Implementation of hook_form_alter().
  */
 function menu_stp_form_alter(&$form, $form_state, $form_id) {
-//	if($form_id == 'menu_edit_menu') {		
-	    print_r ($form);
-		$test='erer';
-		print_r ($form_id);
-		      $test='erer';
-		      $test='erer';	      
-//}	
-  if($form_id == 'menu_edit_menu') {
-      if (empty($form['mid']['#value'])) return;
+  if($form_id == 'menu_edit_item') {
+      if (empty($form['menu']['mlid']['#value'])) return;
 
-      $form['#submit'][] = 'menu_stp_form_submission'; // register callback
+      $form['#submit'][] = 'menu_stp_form_submit'; // register callback
 
       // add fields for additional permissions
       $form['menu_stp'] = array(
@@ -99,16 +92,13 @@ function menu_stp_form_alter(&$form, $fo
         '#type' => 'checkboxes',
         '#title' => t('Select Roles'), //... fieldset has title, no title needed here
         '#options' => user_roles(1),
-        '#default_value' => _menu_stp_roles($form['mid']['#value'])
+        '#default_value' => _menu_stp_roles($form['menu']['mlid']['#value'])
       );
 
-
-  
-  
   
   }
 
-    else if($form_id == 'menu_confirm_delete'){
+    else if($form_id == 'menu_item_delete_form'){
       $form['#submit'][] = 'menu_stp_delete_confirm'; // register callback
     }
 
@@ -128,28 +118,37 @@ function menu_stp_form_alter(&$form, $fo
 function _menu_stp_alter_node_edit_form(&$form) {
   $rids = _menu_stp_user_roles();
   if (!$rids) return; // no roles -> no menu-editing
+  $mlid = $form['menu']['mlid']['#value'];
+  if ($mlid) { // we already have a menu-item for here
+  	$pid = $form['menu']['#item']['plid'];
+  	if(!_menu_stp_has_perms_roles($pid, $rids)) return; // menu-item not in editable part of menu
 
-  $mid = $form['menu']['mid']['#value'];
-  if ($mid) { // we already have a menu-item for here
-  	$item = menu_get_item($mid);
-  	//$pid = $mid = $form['menu']['pid']['#value'];
-  	if(!_menu_stp_has_perms_roles($item['pid'], $rids)) return; // menu-item not in editable part of menu
   }
 
   // clean up the possible parent array
-  $mids = _menu_stp_editable_mids_by_roles($rids);
-  if (!$mids) return; // no items editable for the user's roles
+  $mlids = _menu_stp_editable_mids_by_roles($rids);
+  if (!$mlids) return; // no items editable for the user's roles
 
-  foreach(array_keys($form['menu']['pid']['#options']) as $ppid) {
-  	if (!isset($mids[$ppid])) {
-  	  unset($form['menu']['pid']['#options'][$ppid]);
-  	}
-  	elseif ($mids[$ppid] == 1) { // sub-tree root, fix title
-      $form['menu']['pid']['#options'][$ppid] = _menu_stp_full_title($ppid);
+
+  // create array of menu options for mlids that menu_stp allows
+  foreach($mlids as $mlid => $subtree) {
+     $item = menu_link_load($mlid);
+     $menu_name_mlid = $item['menu_name'] . ":" . $item['mlid'];
+     $options[$menu_name_mlid] = $subtree;
+     $options_mlid[$menu_name_mlid] = $mlid;
+  }
+
+ // go through menu options, remove those not allowed by menu_stp  
+  foreach(array_keys($form['menu']['parent']['#options']) as $menu_nameid) {
+  	if (!isset($options[$menu_nameid])) {
+  	  unset($form['menu']['parent']['#options'][$menu_nameid]);
   	}
+        elseif ($options[$menu_nameid] == 1) { // sub-tree root, fix title
+           $form['menu']['parent']['#options'][$menu_nameid] = _menu_stp_full_title($options_mlid[$menu_nameid]);
+        }
   }
 
-  // no advanced setting for normal user
+// no advanced setting for normal user
   unset($form['menu']['advanced']);
 
   // seems we can do something -> enable form part
@@ -159,75 +158,80 @@ function _menu_stp_alter_node_edit_form(
 /**
  * create a menu-title indicating the position in the menu-structure
  */
-function _menu_stp_full_title($mid) {
-  $mi = menu_get_item($mid);
+function _menu_stp_full_title($mlid) {
+  $mi = menu_link_load($mlid);
   $tstr = $mi['title'];
-  $mid = $mi['pid'];
-  $d = 0;
-  while($mid) {
+  $mlid = $mi['plid'];
+  $menu_name = $mi['menu_name'];
+  $d = 1;
+  while($mlid) {
   	$d++;
-    $mi = menu_get_item($mid);
+    $mi = menu_link_load($mlid);
   	$tstr = $mi['title'].'/'.$tstr;
-    $mid = $mi['pid'];
+    $mlid = $mi['plid'];
   }
+
+  $tstr = $menu_name. '/'. $tstr;  
   return str_repeat('--', $d).' '.$tstr;
 }
 
+
+
 /**
  * helper function to get all menu-ids a user with the supplied roles may edit items under
  * @returns array with the menu-ids as keys, values: 1 for subtree-roots, 2 for editable items below
  */
 function _menu_stp_editable_mids_by_roles(&$rids) {
-  $mids = array();
+  $mlids = array();
   $res = db_query("SELECT DISTINCT mid FROM {menu_stp_roles} WHERE rid IN (".implode(',',$rids).");");
   while($row = db_fetch_array($res)) {
-    $mids["{$row['mid']}"] = 1; // for the roots of the editable parts
+    $mlids["{$row['mid']}"] = 1; // for the roots of the editable parts
   }
   // and now start adding the children
-  $new_mids = array_keys($mids);
-  while ($new_mids) {
-    $res = db_query("SELECT mid FROM {menu} WHERE pid IN (".implode(',',$new_mids).");");
-    $new_mids = array();
+  $new_mlids = array_keys($mlids);
+  while ($new_mlids) {
+    $res = db_query("SELECT mlid FROM {menu_links} WHERE plid IN (".implode(',',$new_mlids).");");
+    $new_mlids = array();
     while($row = db_fetch_array($res)) {
-      $m = $row['mid'];
-      if(!isset($mids[$m])) {
-      	$new_mids[] = $m;
+      $m = $row['mlid'];
+      if(!isset($mlids[$m])) {
+      	$new_mlids[] = $m;
       }
-      $mids["$m"] = 2; // subitem in editable part
+      $mlids["$m"] = 2; // subitem in editable part
     }
   }
-  return $mids;
+  return $mlids;
 }
 
 /**
  * helper function to get all roles that are directly authorized for this menu-item
  */
-function _menu_stp_roles($mid) {
+function _menu_stp_roles($mlid) {
   $r = array();
-  $res = db_query("SELECT rid FROM {menu_stp_roles} WHERE mid = $mid");
+  $res = db_query("SELECT rid FROM {menu_stp_roles} WHERE mid = %d", $mlid);
   while($row = db_fetch_array($res)) {
   	$r[] = $row['rid'];
   }
-  return $r;
+ return $r;
 }
 
 /**
  * check if a user with the supplied roles has permission for the menu item
  */
-function _menu_stp_has_perms_roles($mid, &$rids, $recurse_up = true) {
-  $mids[] = $mid;
+function _menu_stp_has_perms_roles($mlid, &$rids, $recurse_up = true) {
+  $mlids[] = $mlid;
   if($recurse_up) {
     do {
-      $mi = menu_get_item($mid);
+      $mi = menu_link_load($mlid);
       if($mi['pid']) {
-      	$mids[] = $mi['pid'];
+      	$mlids[] = $mi['pid'];
       }
-      $mid = $mi['pid'];
-    } while($mid);
+      $mlid = $mi['pid'];
+    } while($mlid);
   }
   $ridstr = implode(',', $rids);
-  $midstr = implode(',', $mids);
-  $res = db_query("SELECT count(*) AS pnum FROM {menu_stp_roles} WHERE rid IN ($ridstr) AND mid IN ($midstr);");
+  $mlidstr = implode(',', $mlids);
+  $res = db_query("SELECT count(*) AS pnum FROM {menu_stp_roles} WHERE rid IN ($ridstr) AND mid IN ($mlidstr);");
   $perms = db_fetch_array($res);
   return ($perms['pnum'] > 0);
 }
@@ -308,7 +312,7 @@ function menu_stp_menu() {
 /**
  * callback function to show a form for permission editing
  *
-function menu_stp_form($type, $mid, $stp) {
+function menu_stp_form($type, $mlid, $stp) {
 }
 */
 
@@ -321,49 +325,45 @@ function menu_stp_nodeapi(&$node, $op, $
   case 'insert':
   case 'update':
     // TODO: work on code, stolen from menu.module
-    if ($node->menu['delete']) {
-      menu_node_form_delete($node);
-      menu_rebuild();
-    } elseif ($node->menu['title']) {
-      $node->menu['path'] = ($node->menu['path']) ? $node->menu['path'] : "node/$node->nid";
-      menu_edit_item_save($node->menu);
-      menu_rebuild();
-    }
+    //if ($node->menu['delete']) {
+    //  menu_node_form_delete($node);
+    //  menu_rebuild();
+    //} elseif ($node->menu['title']) {
+    //  $node->menu['path'] = ($node->menu['path']) ? $node->menu['path'] : "node/$node->nid";
+    //  menu_edit_item_save($node->menu);
+    //  menu_rebuild();
+    //}
     break;
   case 'delete':
     // TODO: delete menu-item for this node, if there is one - modify code stolen from menu.module
-    menu_node_form_delete($node);
-    menu_rebuild();
+    //menu_node_form_delete($node);
+    //menu_rebuild();
   }
 }
 
 /**
- * registered callback for form-submission
+ * registered callback for form-submit
  */
-function menu_stp_form_submission($form_id, &$form) {
-  switch($form_id) {
-  case 'menu_edit_item_form':
-  case 'menu_edit_menu_form':
-    $old_perms = _menu_stp_roles($form['mid']);
-    foreach($form['menu_stp_perms_roles'] as $rid => $sel) {
+function menu_stp_form_submit($form, &$form_state) {
+    $old_perms = _menu_stp_roles($form['menu']['mlid']['#value']);
+    foreach($form_state['values']['menu_stp_perms_roles'] as $rid => $sel) {
       $hasp = in_array($rid, $old_perms);
+
       if($sel && !$hasp) { // role gets permission
-      	db_query("INSERT INTO {menu_stp_roles} (mid,rid) VALUES ('$form[mid]','$rid');");
+      	db_query("INSERT INTO {menu_stp_roles} (mid,rid) VALUES ('%s','%s')", $form['menu']['mlid']['#value'], $rid);
       } elseif($hasp && !$sel) { // role looses permission
-      	db_query("DELETE FROM {menu_stp_roles} WHERE mid = '$form[mid]' AND rid = '$rid';");
+      	db_query("DELETE FROM {menu_stp_roles} WHERE mid = '%s' AND rid = '%s'", $form['menu']['mlid']['#value'], $rid);
       }
       // else no change in permission for this role
     }
-    break;
-  }
 }
 
 /**
  * registered callback for deleting an item
  */
-function menu_stp_delete_confirm($form_id, &$form) {
+function menu_stp_delete_confirm($form, &$form_state) {
   // menu-item get's deleted, delete special permissions as well
-  db_query("DELETE FROM {menu_stp_roles} WHERE mid = '$form[mid]';");
+  db_query("DELETE FROM {menu_stp_roles} WHERE mid = '%s'",$form['#item']['mlid']);
 }
 
 ?>
