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
/*
* File : node_limit_publish.module
* Title : Limits the number of concurrently published node types dependent upon admin configurable limits
* Sponsor : Hangar Seven Digital
* Author : Badzilla www.badzilla.co.uk @badzillacouk
*
* This work is copyright Badzilla under the GPL licence terms and conditions
*
*/
/**
* Implementation of hook_menu().
*
*/
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'));
}
/**
* Implementation of hook_presave().
*
*/
function node_limit_publish_node_presave($node) {
global $user;
// Get the limit on this type
if (($limit = variable_get('node_limit_publish_'.$node->type, 0)) and $node->status == 1) {
// now check whether we have reached our maximum
$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;
// use %type for dynamic node type
drupal_set_message(t('Sorry, the maximum of this node are active already. You must first disable another!', array('%type' => $node->type)), 'warning');
}
}
}