Restrict delete operation on a node referenced by another node I am using References module to make a node reference in my course content type that reference to school content type (a course belong to one school and a school have many courses).

Now what I want is if I'm going to delete a school, the delete operation will not be completed if the school referenced by any courses.

I've read hook_node_delete() and hook_delete(), written them in my custom module, tried to dpm($node) but no use!

function mymodule_delete($node) {
    dpm($node);
}
function mymodule_node_delete($node) {
    dpm($node);
}


The school node still be deleted!

According to hook_node_info() , I create:

function mymodule_node_info() {
  return array(
     'school' =&gt; array(
      'name' =&gt; t('School'),
      'base' =&gt; 'school',
      'description' =&gt; t('A short description'),
    )
  );
}



  base: (required) The base name for implementations of
  node-type-specific hooks that respond to this node type. Base is
  usually the name of the module or 'node_content', but not always


And then in my mymodule.module: 

function school_delete($node) {
    dpm($node);
}


The code still not working!
I believe you are invoking the hook incorrectly - according to the API page for hook_delete():


  This is a node-type-specific hook, which is invoked only for the node
  type being affected


Further disccussed on the Node API Hooks Page:


  Node-type-specific hooks: When defining a node type, hook_node_info()
  returns a 'base' component. Node-type-specific hooks are named
  base_hookname() instead of mymodule_hookname() (in a module called
  'mymodule' for example). Only the node type's corresponding
  implementation is invoked. For example, poll_node_info() in
  poll.module defines the base for the 'poll' node type as 'poll'. So
  when a poll node is created, hook_insert() is invoked on poll_insert()
  only. Hooks that are node-type-specific are noted below.