This post: http://drupal.org/node/43197 discusses the need for this type of module. Though I only just saw it today. Thought I would post a similar module I have been working on as a new thread so as not to confuse the two.

The name of this module is bioesque (stolen from the bio module) and provides the ability to limit node posts to one per user and is configurable by type. To install - copy the code to your text editor, save as bioesque.module. create bioesque directory in your modules directory and upload file to the new directory.

Would appreciate and feedback or comments to see if folks like this. If so, can create a project for the module.

/* Implementation of hook_help...
 */
function bioesque_help($section) { 
  switch ($section) { 
    case 'admin/modules#description': 
      // admin/modules description
      $out = 'Provides the ability to limit node creation (authoring) to one node per user. This setting is configurable for each node type.';
      return t($out); 
    case 'admin/help#bioesque':
      // admin/help - overall
      $out = '<p>This module provides the ability to limit node creation (authoring) to one node per user. This setting is configurable for each node type.</p>';
      
      $out .= '<fieldset><legend>Content Type (node type) Workflow</legend>';
      $out .= '<p>The setting is made in the node workflow at admin &raquo; content &raquo; configure &raquo; content types.</p>';
      $out .= '<p>The options for this setting are as follows, with (type) meaning a specific node type:';
      $out .= '<ul>';
      $out .= ' <li>No, users can create (author) multiple (type) nodes';
      $out .= '  <ul>';
      $out .= '   <li>default option</li>';
      $out .= '   <li>provides no limits on node creation</li>';
      $out .= '  </ul>';
      $out .= ' </li>';
      $out .= ' <li>Yes, limit each user to creating (authoring) only one (type) node';
      $out .= '  <ul>';
      $out .= '   <li>limits node creation to one per user</li>';
      $out .= '   <li>when this setting is made, no changes to node data are made, you made need to change the author of existing nodes (this can be reviewed at admin &raquo; setting &raquo; bioesque)</li>';
      $out .= '   <li>warning: users with multiple nodes will not be able to change their nodes unless the user has permission to administer nodes</li>';
      $out .= '   <li>after a user has created a node, the create option will still be listed on the create content page, but if a user attempts to create a 2nd node, the user will be redirected to their first node</li>';
      $out .= '   <li>users with permission to administer nodes are able to create nodes for other users</li>';
      $out .= '  </ul>';
      $out .= ' </li>';
      $out .= ' <li>Yes, but allow multiple (type) nodes to be attributed to the anonymous user';
      $out .= '  <ul>';
      $out .= '   <li>very similar to above in that it limits node creation to one per user and follows all the points defined above.  The exception is that the anonymous user is allowed to have multiple nodes</li>';
      $out .= '   <li>if you allow anonymous users to create nodes, they will be able to do so with this option</li>';
      $out .= '   <li>users with permission to administer nodes can create additional nodes by setting the author to blank</li>';
      $out .= '   <li>the actual creator of these anonymous nodes will, of course, not be known</li>';
      $out .= '  </ul>';
      $out .= ' </li>';
      $out .= '</ul>';
      $out .= '</p>';
      $out .= '</fieldset>';
      
      $out .= '<fieldset><legend>Reviewing Node Data</legend>';
      $out .= '<p>The module settings page (at admin &raquo; settings &raquo; bioesque) provides for some review of users and nodes to provide the ability to ';
      $out .= 'change the author of existing nodes to agree with a desired setting.  It should be noted again that';
      $out .= '<ul>';
      $out .= ' <li>when a limit is set, no changes to node data are made, you made need to change the author of existing nodes to agree with your desired setting</li>';
      $out .= ' <li>if a limit is set for a type, users with multiple nodes of the type will not be able to change those nodes unless the user has permission to administer nodes</li>';
      $out .= '</ul>';
      $out .= '</p>';
      $out .= '</fieldset>';

      $out .= '<fieldset><legend>Bioesque Module Settings</legend>';
      $out .= '<p>This module has 2 settings, both in regards to displaying a menu on the user account page. The settings are as follows:</p>';
      $out .= '<p>1. Display on user account page: options are:';
      $out .= '  <ul>';
      $out .= '   <li>No';
      $out .= '    <ul>';
      $out .= '     <li>default, no menu is displayed</li>';
      $out .= '    </ul>';
      $out .= '   </li>';
      $out .= '   <li>Yes, with all user accounts (for users with permission to access user profiles)';
      $out .= '    <ul>';
      $out .= '     <li>a horizontal menu (tab) will appear on the user account page</li>';
      $out .= '     <li>if multiple node types are limited, each node type will have a submenu (sub tab)</li>';
      $out .= '     <li>menu items only seen by users with permission to create a node of the type</li>';
      $out .= '     <li>the information displayed includes:';
      $out .= '      <ul>';
      $out .= '       <li>node name</li>';
      $out .= '       <li>create content description for the node type</li>';
      $out .= '       <li>if the user of the account being viewed has created a node of the type, the node title, created and changed information about the node, with a link to view the node</li>';
      $out .= '       <li>if the user of the account being viewed has NOT created a node of the type, and if the user account is the account of the logged-in user, a link to create a node of the type</li>';
      $out .= '      </ul>';
      $out .= '     </li>';
      $out .= '    </ul>';
      $out .= '   </li>';
      $out .= '   <li>Yes, but only with the user account of the logged-in user';
      $out .= '    <ul>';
      $out .= '     <li>very similar to above, except that the menu will only appear when the logged-in user is viewing his/her own account.</li>';
      $out .= '    </ul>';
      $out .= '   </li>';
      $out .= '  </ul>';
      $out .= '</p>';
      $out .= '<p>2. Menu Title: a text field';
      $out .= '  <ul>';
      $out .= '   <li>With a yes option above, you should enter a short title for the menu. ';
      $out .= '     Suggestions:  If you have only one node type with a one per user limit, use the name of the node type. ';
      $out .= '     If you have multiple node types with a one per user limit, you should use a more global title that describes all of them, ';
      $out .= '     such as: bio, special, my items, etc.</li>';
      $out .= '  </ul>';
      $out .= ' </li>';
      $out .= '</p>';
      $out .= '</fieldset>';
      return t($out); 
  }
} 

/**
 * Implementation of hook_settings...
 */
function bioesque_settings() { 
  // this implementation is a little different than a standard implementation in that it provides for some administration of nodes
  
  // basic description of module and link to help text
  $grp = 'This module provides the ability to limit node creation (authoring) to one node per user.  ';
  $grp .= 'This setting is configurable for each node type. ';
  $grp .= 'Please read the %help-link section for this module.';
  $output = '<p>'. t($grp, array('%help-link'=>l(t('help'), 'admin/help/bioesque'))) .'</p>';
  
  // review of current node type settings
  // this part of the implementation of this hook is the non standard part 
  // a list of all node types and current setting
  // this section is enclosed in fieldset tags to offset it from the module settings
  $header = array(t('node type (configure)'), t('current setting'), t('multiple nodes by same user'));
  $rows = array();
  $types = node_list();
  foreach ($types as $type) {
    $name = node_invoke($type, 'node_name');
    $bioesque_type = variable_get('bioesque_type_'. $type, 0);
    switch ($bioesque_type) {
      case 0:
        $current = t('No limit');
      break;
      case 1:
        $current = t('One %node-name node per user', array('%node-name'=>$name));
      break;
      case 2:
        $current = t('One per user except anonymous user');
      break;
    }
    $rows[] = array(l($name, 'admin/node/configure/types/'. $type), $current, l(t('review'), 'admin/settings/bioesque/'. $type));
  }
  if (count($rows)) {
    $grp = 'Below is a list of node types and their current setting. ';
    $grp .= 'Changing this setting does not change existing node data. ';
    $grp .= 'The <strong>multiple nodes by same user review</strong> provides a way to check (and change) node data. ';
    $grp .= 'You may need to change the author of some nodes to be in agreement with the desired limit.';
    $grp = '<p>'. t($grp) .'</p>';
    $grp .= theme('table', $header, $rows);
  }
  else {
    $grp = '<p>'. t('No node types were found.') .'</p>';
  }
  $output .= '<fieldset><legend>'. t('One Node Per User Limit') .'</legend>'. $grp .'</fieldset>';
  
  // module configuration
  // this part of the implementation of this hook is pretty standard
  $output .= '<h2>'. t('Bioesque Module Configuration') .'</h2>';
  // there are 2 settings
  // (1) setting to indicate if a menu should appear on the user account page
  $grp = '<p>'. t('This module has a few module specific settings. Please note: changing these settings has no impact on the <strong>One Node Per User Limit</strong> settings above.') .'</p>';
  $desc = 'With a yes option, a horizontal menu (tab) will appear on the user account page.  ';
  $desc .= 'If you have multiple node types with a one per user limit, each type will have a submenu (sub tab). ';
  $desc .= 'These menu items will appear only if the logged-in user has permission to create the node type. ';
  $desc .= 'Displayed on the page is the name of the node type along with its create content description, and:<ul>';
  $desc .= '<li>If the user being viewed has created (authored) a node: the title, created and updated information with a link to view the node</li>';
  $desc .= '<li>If not: a link to create a node (only if the user being viewed is the account of the logged-in user)</li>';
  $desc .= '</ul>';
  $desc = '<p>'. t($desc) .'</p>';
  $options = array(0 => t('No'), 1 => t('Yes, with all user accounts (for users with permission to access user profiles)'), 2 => t('Yes, but only with the user account of the logged-in user'));
  $grp .= form_radios(t('Display on user account page'), 'bioesque_menu', variable_get('bioesque_menu', 0), $options, $desc);
  // (2) setting to indicate title of menu
  $desc = 'With a yes option above, you should enter a short title for the menu. ';
  $desc .= 'Suggestions:  If you have only one node type with a one per user limit, use the name of the node type. ';
  $desc .= 'If you have multiple node types with a one per user limit, you should use a more global title that describes all of them, ';
  $desc .= 'such as: bio, special, my items, etc.';
  $desc = '<p>'. t($desc) .'</p>';
  $grp .= form_textfield(t('Menu title'), 'bioesque_menu_title', variable_get('bioesque_menu_title', ''), 25, 25, $desc, NULL, FALSE);
  $output .= $grp;
  
  // return the output
  return $output;
} 

/* Implementation of hook_menu...
 */

function bioesque_menu($may_cache) { 
  global $user;
  $items = array(); 

  if ($may_cache) { 
  }
  else {
    if (arg(0) == 'admin' && arg(1) == 'settings' && arg(2) == 'bioesque' && arg(3) != '') {
      $type = arg(3);
      $uid = is_numeric(arg(4)) ? arg(4) : NULL;
      $items[] = array('path' => 'admin/settings/bioesque/'. arg(3), 
        'title' => $type, 
        'callback' => 'bioesque_callback',
        'callback arguments' => array('admin', $type, $uid),
        'type' =>  MENU_CALLBACK,
        );
    }
    if (arg(0)=='user' && is_numeric(arg(1))) {
      $bioesque_menu = variable_get('bioesque_menu', 0);
      if ($bioesque_menu > 0) {
        $uid = arg(1);
        if (($bioesque_menu == 1) || ($bioesque_menu == 2 && $uid == $user->uid)) {
          $title = variable_get('bioesque_menu_title', 0);
          $menus = 1;
          $types = node_list();
          foreach ($types as $type) {
            if (node_access('create', $type) && variable_get('bioesque_type_'. $type, 0) > 0) {
              $name = node_invoke($type, 'node_name');
              if ($menus == 1) {
                $items[] = array('path' => 'user/'. $uid .'/bioesque', 
                  'title' => $title, 
                  'callback' => 'bioesque_callback',
                  'callback arguments' => array('user', $type, $uid),
                  'type' =>  MENU_LOCAL_TASK,
                  );
                $items[] = array('path' => 'user/'. $uid .'/bioesque/'. $type, 
                  'title' => $name, 
                  'type' =>  MENU_DEFAULT_LOCAL_TASK,
                  );
              }
              else {
                $items[] = array('path' => 'user/'. $uid .'/bioesque/'. $type, 
                  'title' => $name, 
                  'callback' => 'bioesque_callback',
                  'callback arguments' => array('user', $type, $uid),
                  'type' =>  MENU_LOCAL_TASK,
                  );
              }
              $menus++;
            }
          }
        }
      }
    }
  } 
  return $items; 
} 



/**
 * bioesque_callback
 */ 

function bioesque_callback($option, $type, $uid=NULL) {
  global $user;
  $name = node_invoke($type, 'node_name');
  
  switch ($option) {
  
    case 'user':
      // outputs the page seen with the user account
      // the node name and the node create content text
      $output .= '<p><strong>'. $name .'</strong><br/>'. implode("\n", module_invoke_all('help', 'node/add#'. $type)) .'</p>';
      // check if user account has a node of the type
      $sql = "SELECT n.nid, n.title, n.created, n.changed FROM {node} n WHERE n.type='%s' AND n.uid=%d";
      $result = db_query($sql, $type, $uid);
      if (db_num_rows($result) > 0) {
        // user account has a node, display title (as link), created, and changed information about the node
        $row = db_fetch_object($result);
        $created = t('%time ago', array('%time' => format_interval(time() - $row->created)));
        // note: only showing changed if changed is more than 60 seconds after created.
        $changed = ($row->created + 60) > $row->changed ? '&nbsp;' : t('%time ago', array('%time' => format_interval(time() - $row->changed)));
        // display in themed table
        $header = array(t('title (view)'), t('created'), t('changed'));
        $rows[] = array(l($row->title, 'node/'. $row->nid), $created, $changed);
        $output .= theme('table', $header, $rows);
      }
      else {
        // user account has not yet created a node of the type
        if ($user->uid == $uid) {
          // the user account is the logged-in users account, provide link to create a node of the type
          $output .= '<p>'. l(t('create %node-name', array('%node-name'=>$name)), 'node/add/'. $type) .'</p>';
        }
      }
      // set page title to user account name
      if ($user->uid == $uid) {
        // already have the name
        drupal_set_title($user->name);
      }
      else {
        // get user name
        $sql = "SELECT u.name FROM {users} u WHERE u.uid=%d";
        $result = db_query($sql, $uid);
        if (db_num_rows($result) > 0) {
          $row = db_fetch_object($result);
          drupal_set_title($row->name);
        }
      }
      // print page
      print theme('page', $output);
      
    break;
    
    case 'admin':
      // outputs the additional pages seen with the module settings
      // there are 2 possiblities
      // (1) a list of users with multiple nodes of type
      // (2) a list of nodes of type by a user
      // both include the following text
      $bioesque_type = variable_get('bioesque_type_'. $type, 0);
      switch ($bioesque_type) {
        case 0:
          $output = '<p>'. t('%node-name nodes are currently configured with NO limits on the number of nodes a single user may create.', array('%node-name'=>$name)) .'</p>';
        break;
        case 1:
          $output = '<p>'. t('%node-name nodes are currently configured to allow only one node per user.', array('%node-name'=>$name)) .'</p>';
        break;
        case 2:
          $output = '<p>'. t('%node-name nodes are currently configured to allow only one node per user, except for the anonymous user.', array('%node-name'=>$name)) .'</p>';
        break;
      }
      // depending on $uid value ...
      if (is_null($uid)) {
        // uid is null
        // list all users with more than 1 node of type in a paged table
        // sql strings...
        $sql = "SELECT COUNT(n.nid) ncount, n.uid, u.name FROM {node} n LEFT JOIN {users} u ON n.uid=u.uid WHERE n.type='$type' GROUP BY n.uid, u.name HAVING COUNT(n.nid) > 1";
        $sql_count = "SELECT COUNT(DISTINCT n.uid) FROM {node} n WHERE n.type='$type' HAVING COUNT(n.nid) > 1";
        // get data
        $rows = array();
        $result = pager_query($sql, 20, 0, $sql_count);
        while ($user_row = db_fetch_object($result)) {
          // each row is user, node count, link to view nodes
          $rows[] = array(format_name($user_row), array('data'=>$user_row->ncount, 'align'=>'center'), l('view', 'admin/settings/bioesque/'. $type .'/'. $user_row->uid));
        }
        if (count($rows)) {
          // if data...
          // create header
          $header = array(t('user'), t('node count'), t('nodes by user'));
          // add pager 
          $pager = theme('pager', NULL, 20, 0);
          if (!empty($pager)) {
            $rows[] = array(array('data' => $pager, 'colspan' => count($header)));
          }
          // enclose in fieldset tags
          $output .= '<fieldset><legend>'. t('Users with multiple %node-name nodes', array('%node-name'=>$name)) .'</legend>';
          // text describing what is displayed
          $output .= '<p>'. t('The following users are currently indicated as the author of more than one %node-name node. ', array('%node-name'=>$name));
          switch ($bioesque_type) {
            case 1:
              $output .= t('To agree with the current limitation, there should NOT be any users listed here.');
            break;
            case 2:
              $output .= t('To agree with the current limitation, the only user (if any) listed here should be the anonymous user.');
            break;
          }
          $output .= '</p>';
          $output .= theme('table', $header, $rows);
          $output .= '</fieldset>';
        }
        else {
          // if no data, text informing user
          $output .= '<p>'. t('There are currently NO users indicated as authoring more than one %node-name node.', array('%node-name'=>$name)) .'</p>';
        }
        // list of related adminstrative links in fieldset tags
        $output .= '<fieldset><legend>'. t('Related Links') .'</legend><ul><li>'. l(t('bioesque module settings'),'admin/settings/bioesque') .'</li>';
        $output .= '<li>'. l(t('configure %node-name', array('%node-name'=>$name)), 'admin/node/configure/types/'. $type) .'</li></ul></fieldset>';
        // set title
        drupal_set_title(t('users with multiple %node-name nodes', array('%node-name'=>$name)));
        // print page
        print theme('page', $output);
        
      }
      else {
        // uid is a ##
        // list all posts of type for indicated user in a paged table
        $sql = "SELECT n.nid, n.title, n.uid, n.created, n.changed, u.name FROM {node} n LEFT JOIN {users} u ON n.uid=u.uid WHERE n.type='$type' AND n.uid=$uid";
        $sql_count = "SELECT COUNT(n.nid) FROM {node} n WHERE n.type='$type' AND n.uid=$uid";
        // get data
        $rows = array();
        $result = pager_query($sql, 20, 0, $sql_count);
        while ($node_row = db_fetch_object($result)) {
          // each row is user, node title, created, changed
          $created = t('%time ago', array('%time' => format_interval(time() - $node_row->created)));
          // note changed is only displayed if more than 60 seconds after created
          $changed = ($node_row->created + 60) > $node_row->changed ? '&nbsp;' : t('%time ago', array('%time' => format_interval(time() - $node_row->changed)));
          $rows[] = array(format_name($node_row), l($node_row->title, 'node/'. $node_row->nid .'/edit'), $created, $changed);
        }
        if (count($rows)) {
          // if data ...
          // create table header
          $header = array(t('user'), t('nodes'), t('created'), t('changed'));
          // add pager 
          $pager = theme('pager', NULL, 20, 0);
          if (!empty($pager)) {
            $rows[] = array(array('data' => $pager, 'colspan' => count($header)));
          }
          // enclose in fieldset tags
          $output .= '<fieldset><legend>'. t('%node-name nodes', array('%node-name'=>$name)) .'</legend>';
          // text describing what is displayed
          $output .= '<p>'. t('The following %node-name nodes are authored by the same user. ', array('%node-name'=>$name));
          switch ($bioesque_type) {
            case 1:
              $output .= t('To agree with the current limitation, no users should be listed as the author of multiple %node-name nodes.', array('%node-name'=>$name));
            break;
            case 2:
              $output .= t('To agree with the current limitation, only the anonymous user may be listed as the author of multiple %node-name nodes.', array('%node-name'=>$name));
            break;
          }
          $output .= '</p>';
          $output .= theme('table', $header, $rows);
          $output .= '</fieldset>';
        }
        else {
          // if no data, text informing user
          $output .= '<p>'. t('No %node-name nodes by user found.', array('%node-name'=>$name)) .'</p>';
        }
        // list of related adminstrative links in fieldset tags
        $output .= '<fieldset><legend>'. t('Related Links') .'</legend><ul><li>'. l(t('users with multiple %node-name nodes', array('%node-name'=>$name)),'admin/settings/bioesque/'. $type) .'</li>';
        $output .= '<li>'. l(t('bioesque module settings'),'admin/settings/bioesque') .'</li>';
        $output .= '<li>'. l(t('configure %node-name', array('%node-name'=>$name)), 'admin/node/configure/types/'. $type) .'</li></ul></fieldset>';
        // set title
        drupal_set_title(t('multiple %node-name nodes by same user', array('%node-name'=>$name)));
        // print page
        print theme('page', $output);
      
      }
    break;
  }
}

/**
 * Implementation of hook_nodeapi().
 */ 

function bioesque_nodeapi(&$node, $op, $teaser, $page) { 
global $user;
  
  switch ($op) { 
    
    // settings
    case 'settings': 
      // one node per user
      // options include: No, Yes, and Yes-except anonymous
      // nothing unusual in the implementation of this nodeapi option
      $settings = array(); 
      $name = node_invoke($node->type, 'node_name');
      $desc = 'Choosing a yes option limits users to creating (authoring) only one %node-name node.  Users with administer nodes permission are allowed to create %node-name nodes for other users.  ';
      $desc .= 'See '. l('admin/settings/bioesque', 'admin/settings/bioesque') .' for more information.';
      $desc = t($desc, array('%node-name'=>$name));
      $options = array(0 => t('No, users can create (author) multiple %node-name nodes', array('%node-name'=>$name)), 1 => t('Yes, limit each user to creating (authoring) only one %node-name node', array('%node-name'=>$name)), 2 => t('Yes, but allow multiple %node-name nodes to be attributed to the anonymous user', array('%node-name'=>$name)));
      $settings[] = form_radios(t('Limit %node-name nodes to one per user', array('%node-name'=>$name)), 'bioesque_type_'. $node->type, variable_get('bioesque_type_'. $node->type, 0), $options, $desc);
      return $settings; 
    break;
    
    // validate
    case 'validate': 
      // this nodeapi option is the one that does all the work
      // is this a one per user node type ?
      $bioesque_type = variable_get('bioesque_type_'. $node->type, 0);
      if ($bioesque_type > 0) {
        // only one per user is allowed ...
        // get the node name
        $name = node_invoke($node->type, 'node_name');
        // user has administer nodes permission ?
        if (user_access('administer nodes')) {
          // yes, this user can create nodes for other users
          if ($bioesque_type == 1) {
            // this is for one and only one per user
            // set message to inform user 
            drupal_set_message(t('Note: Only one %node-name post is allowed per user.  Your permissions allow you to author %node-name posts for other users.', array('%node-name'=>$name)));
            // check if user already has a node of this type
            $result = db_query("SELECT n.nid FROM {node} n WHERE n.type='%s' AND n.uid=%d AND n.nid<>%d", $node->type, $node->uid, $node->nid);
            if (db_num_rows($result) > 0) {
              // the user already has a node of this type ...
              // set form error and message to inform user
              form_set_error('name', t($node->name .' already has a %node-name post, you must indicate a different user as the author of this post.', array('%node-name'=>$name)));
            }
          }
          else {
            // this is for one per user, except anonymous
            // set message to inform user 
            drupal_set_message(t('Note: Only one %node-name post is allowed per user.  Your permissions allow you to author %node-name posts for other users.  You can set the author to blank if you need to create additional %node-name posts.', array('%node-name'=>$name)));
            // check if user already has a node of this type
            $result = db_query("SELECT n.nid FROM {node} n WHERE n.type='%s' AND n.uid=%d AND n.nid<>%d AND n.uid>0", $node->type, $node->uid, $node->nid);
            if (db_num_rows($result) > 0) {
              // the user already has a node of this type ...
              // set form error and message to inform user
              form_set_error('name', t($node->name .' already has a %node-name post, you must indicate a different user as the author of this post.', array('%node-name'=>$name)));
            }            
          }
        }
        else {
          // this user can only create his/her node
          // is this an add or edit ?
          if (arg(1) == 'add') {
            // this is an add
            // check if user already has a node of this type
            if ($bioesque_type == 1) {
              // one and only one per user, use this sql string
              $sql = "SELECT n.nid FROM {node} n WHERE n.type='%s' AND n.uid=%d AND n.nid<>%d";
            }
            else {
              // one per user except anonymous, use this sql string
              $sql = "SELECT n.nid FROM {node} n WHERE n.type='%s' AND n.uid=%d AND n.nid<>%d AND n.uid>0";
            }
            // using sql string, check if user already has a node of this type
            $result = db_query($sql, $node->type, $user->uid, $node->nid);
            if (db_num_rows($result) > 0) {
              // user already has a node of this type ...
              // set message to inform user
              drupal_set_message(t('Note: Only one %node-name post is allowed per user.  You have been redirected to your %node-name post.', array('%node-name'=>$name)));
              // redirect user to node edit page ...
              $row = db_fetch_object($result);
              $nid = $row->nid;
              drupal_goto('node/'. $nid);
            }
          }
        }
      }
    break;
  }
}

Comments

sangamreddi’s picture

Though I have not tested it seems to be good, this module will be useful for creating an application from one node for an user. I have tried the noderestrict moduel some time back. it works. It has some its own advantages and disadvantages.this one has many additional features where the other lacks. I would be betetr to integrate the userpoints module with this.

I think there was anotehr module called usernodes, does the same functionality.

IMO all together there are 4 modules - limit nodes

bio module
noderestrict
usernodes
bioesque

Thanks, keep it up.
have a nice day
Sunny                      
www.gleez.com | www.sandeepone.com

nathandigriz’s picture

I am happy to see this since bio and usernodes are 4.7 beta. More 4.6 modules like this is very pleasing to see.

jjeff’s picture

NIce work! However, I think that this really duplicates the functionality of the usernodes module. Maybe you could take a look at that module and submit a patch to improve it based on what you've done in bioesque.

Your improved help section alone would be a great patch. I think that combining the great ideas in both of these modules is going to be a really great thing.

--= Jeff Robbins | www.lullabot.com =--

rjl’s picture

I had seen the bio module before, but had only just seen the noderestrict in the forums and now the usernodes module which was just posted a few weeks ago - wow.

I think it's funny that so many people have been working on the same idea.

Thanks for the feed back (both of you).

I will definately take a look at the usernodes module and see if I can provide anything to help, I notice it is only 4.7 and while I am trying to keep abreast of what's happening with 4.7 (especially for new forms API), my understanding is fairly minimal.

kae’s picture

nice! thank you. any interest in linking number of nodes to payment?

have you tested this with flexinodes?

rjl’s picture

this module should work great with flexinode

As for linking to payments, a major issue is that this module and the others listed here provide limits on node creation by node type and/or user role. I think what you are wanting (and the post above about user points) would be some sort of infrastructure that limits node creation at the individual user level. That would require fairly different logic than these modules provide.

Something to think about... I can definately see its usefulness.

kae’s picture

rjl, I see your point. Thank you for explaining it so clearly. I'll be looking forward to anything you write!

coupet’s picture

As mentioned, publishing to cvs is critical to avoid duplication of work! Also, agree, extensive work in helping user thru setup.

features request:
-------------------
1. change restriction to allow for a numeric value to be inputted. One might want to limit user access to 10, 5, 3, 1, etc

2. integrate with userpoint; userpoint provides api to query number of points available.

Darly

Apache is bandwidth limited, PHP is CPU limited, and MySQL is memory limited.

sangamreddi’s picture

1 st feature request seems to be a genuine request. Nice

Sunny                      
www.gleez.com | www.sandeepone.com

galgoz’s picture

I was looking for just this functionality as I want each user of a specific role to be able to create only one personal page. I will be testing this for the next few weeks on a clients site.

Thanks!

George Algozzini

galgoz’s picture

Installed your module and set a page limit and when I saved the settings I got this error.

warning: Cannot modify header information - headers already sent by (output started at /home/project/public_html/drupal/modules/bioesque.module:489) in /home/project/public_html/drupal/includes/common.inc on line 192.

George Algozzini

sangamreddi’s picture

Remove the white space after this "?>" on bioesque.module

Sunny                      
www.gleez.com | www.sandeepone.com

galgoz’s picture

One little bitty space. That was it, hit delete one time, saved and whalla, alls well.

Thanks

rjl’s picture

Thanks to everyone for all the input and comments, I tried to take them all in, and in doing so, I came up with another module that IMHO attempts to incorporate many of the features and feature requests and leave room for further developement. It's called nodelimit, please check out the code at http://drupal.org/node/55747 I would really appreciate any comments and input. I'm also going to attempt to contact the developers of the other related modules.

Thanks
Randall