For anyone who runs across my same issue, of needing to limit number of PUBLISHED nodes of a particular content type, a friend of mine altered the above linked Badzilla module, and tweaked it to be the following. Thanks to Badzilla for providing the basis of the module, and my buddy for tweaking it to check on a user-basis rather than site-wide # of published nodes.
<?php
function node_limit_publish_menu() {
$items = array();
$items['admin/config/content/node_limit_publish'] = array(
'title' => 'Limit Number of Published Nodes per Node Type',
'description' => t('Zero represents an unlimited amount of published nodes'),
'page callback' => 'drupal_get_form',
'page arguments' => array('node_limit_publish_admin_settings'),
'access arguments' => array('administer node_limit_publish'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function node_limit_publish_admin_settings() {
$form = array();
if (is_array($types = node_type_get_types())) {
$form['title'] = array(
'#markup' => t('Zero represents an unlimited amount of published nodes'),
);
foreach($types as $key => $value)
$form['node_limit_publish_'.$key] = array(
'#type' => 'textfield',
'#description' => $key,
'#size' => 4,
'#maxlength' => 10,
'#element_validate' => array('node_limit_publish_is_numeric'),
'#default_value' => variable_get('node_limit_publish_'.$key, 0),
);
}
return system_settings_form($form);
}
function node_limit_publish_is_numeric($element, &$form_state, $form) {
if (!is_numeric($element['#value']))
form_error($element, t('This field must be numeric'));
}
function node_limit_publish_node_presave($node) {
global $user;
if (($limit = variable_get('node_limit_publish_'.$node->type, 0)) and $node->status == 1) {
$query = db_select('node')
->condition('type', $node->type)
->condition('status', 1)
->condition('uid', $user->uid);
if (isset($node->nid))
$query->condition('nid', $node->nid, '!=');
$count = $query->countQuery()
->execute()
->fetchField();
if ($count >= $limit) {
$node->status = 0;
drupal_set_message(t('Sorry, the maximum of this node are active already. You must first disable another!', array('%type' => $node->type)), 'warning');
}
}
}