Pour toute personne qui court dans ma même question, d'avoir besoin de limiter le nombre de nœuds PUBLIÉ d'un type de contenu particulier, un de mes amis modifié le module Badzilla lié ci-dessus, et pincé pour être le suivant. Merci à Badzilla pour avoir fourni la base du module, et mon pote pour l'avoir ajusté pour vérifier sur un utilisateur plutôt que sur le nombre de nœuds publiés sur le site.
<?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');
}
}
}
mon premier instinct est de faire une règle qui vérifie la publication sur ce contrôle le nombre de nœuds ont cet utilisateur comme auteur ... assez nouveau pour drupal, bien que – Ken