You are here

function submenutree_nodeapi in Submenu Tree 6

Same name and namespace in other branches
  1. 5 submenutree.module \submenutree_nodeapi()

Implementation of hook_nodeapi().

File

./submenutree.module, line 171

Code

function submenutree_nodeapi(&$node, $op, $teaser, $page) {
  switch ($op) {
    case 'delete':
      db_query('DELETE FROM {node_submenutree} WHERE nid = %d', $node->nid);
      break;
    case 'load':
      $additions = db_fetch_array(db_query('SELECT submenutree_enable, submenutree_title, submenutree_display, submenutree_weight, siblingmenutree_enable, siblingmenutree_title, siblingmenutree_display, siblingmenutree_weight FROM {node_submenutree} WHERE nid = %d', $node->nid));
      if ($additions) {
        return $additions;
      }
      break;
    case 'update':
      if (empty($node->submenutree_enable) && empty($node->siblingmenutree_enable)) {
        db_query('DELETE FROM {node_submenutree} WHERE nid = %d', $node->nid);
      }

    // deliberate fallthrough
    case 'insert':
      if ($node->submenutree_enable || $node->siblingmenutree_enable) {

        // SQL INSERT or UPDATE depending on whether a row already exists
        $num_rows = db_result(db_query('SELECT COUNT(*) FROM {node_submenutree} WHERE nid = %d', $node->nid));
        if ($num_rows > 0) {
          db_query("UPDATE {node_submenutree} SET submenutree_enable = %d, submenutree_title = '%s', submenutree_display = %d, submenutree_weight = %d, siblingmenutree_enable = %d, siblingmenutree_title = '%s', siblingmenutree_display = %d, siblingmenutree_weight = %d WHERE nid = %d", $node->submenutree_enable, $node->submenutree_title, $node->submenutree_display, $node->submenutree_weight, $node->siblingmenutree_enable, $node->siblingmenutree_title, $node->siblingmenutree_display, $node->siblingmenutree_weight, $node->nid);
        }
        else {
          db_query("INSERT INTO {node_submenutree} (nid, submenutree_enable, submenutree_title, submenutree_display, submenutree_weight, siblingmenutree_enable, siblingmenutree_title, siblingmenutree_display, siblingmenutree_weight) VALUES (%d, %d, '%s', %d, %d, %d, '%s', %d, %d)", $node->nid, $node->submenutree_enable, $node->submenutree_title, $node->submenutree_display, $node->submenutree_weight, $node->siblingmenutree_enable, $node->siblingmenutree_title, $node->siblingmenutree_display, $node->siblingmenutree_weight);
        }
      }
      break;
    case 'presave':

      // copy fields from $node->menu['submenutree']['submenutree_*'] to ['submenutree_*'] if necessary
      // Shouldn't drupal flatten these form fields already? Apparently not
      if (!empty($node->menu['submenutree']) && user_access('administer submenu trees')) {
        foreach ($node->menu['submenutree'] as $k => $v) {
          $node->{$k} = $v;
        }
      }
      if (!empty($node->menu['siblingmenutree']) && user_access('administer siblingmenu trees')) {
        foreach ($node->menu['siblingmenutree'] as $k => $v) {
          $node->{$k} = $v;
        }
      }
      break;
    case 'view':

      // Calling a helper function because it's too big to live in the switch
      submenutree_nodeapi_view($node, $op, $teaser, $page);
      break;
  }
}