Index: upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v
retrieving revision 1.148
diff -u -r1.148 upload.module
--- upload.module	15 Jan 2007 11:22:34 -0000	1.148
+++ upload.module	17 Jan 2007 21:08:09 -0000
@@ -160,7 +160,8 @@
 function upload_admin_settings() {
   $upload_extensions_default = variable_get('upload_extensions_default', 'jpg jpeg gif png txt html doc xls pdf ppt pps odt ods odp');
   $upload_uploadsize_default = variable_get('upload_uploadsize_default', 1);
-  $upload_usersize_default = variable_get('upload_usersize_default', 1);
+  $upload_usersize_default = variable_get('upload_usersize_default', 1);
+  $upload_numfiles_default =  variable_get('upload_numfiles_default', 0);
 
   $form['settings_general'] = array(
     '#type' => 'fieldset',
@@ -208,6 +209,14 @@
     '#maxlength' => 5,
     '#description' => t('The default maximum size of all files a user can have on the site.'),
     '#field_suffix' => t('MB')
+  );
+  $form['settings_general']['upload_numfiles_default'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Default number of files per node'),
+    '#default_value' => $upload_numfiles_default,
+    '#size' => 5,
+    '#maxlength' => 5,
+    '#description' => t('The default maximum number of files a user can post on one node. Set to 0 for no restrictions.'),
   );
 
   $form['settings_general']['upload_max_size'] = array('#value' => '<p>'. t('Your PHP settings limit the maximum file size per upload to %size.', array('%size' => format_size(file_upload_max_size()))).'</p>');
@@ -244,6 +253,14 @@
       '#size' => 5,
       '#maxlength' => 5,
       '#description' => t('The maximum size of all files a user can have on the site (in megabytes).'),
+    );
+    $form['settings_role_'. $rid]['upload_numfiles_'. $rid] = array(
+      '#type' => 'textfield',
+      '#title' => t('Total number of files user can upload'),
+      '#default_value' => variable_get('upload_numfiles_'. $rid, $upload_numfiles_default),
+      '#size' => 5,
+      '#maxlength' => 5,
+      '#description' => t('The maximum number of files a user can post on one node. Set to 0 for no restrictions.'),
     );
   }
 
@@ -613,6 +630,19 @@
  */
 function upload_total_space_used() {
   return db_result(db_query('SELECT SUM(filesize) FROM {files}'));
+}
+/**
+ * Determine how many files user can upload in one node
+ */
+function upload_max_num_files() {
+	global $user;
+	$max_num_files = variable_get('upload_numfiles_default', 0);
+	foreach ($user->roles as $rid => $name) {
+		if (variable_get('upload_numfiles_' . $rid, $max_num_files) > $max_num_files) {
+			$max_num_files = variable_get('upload_numfiles_' . $rid, $max_num_files);
+		}
+	}
+	return $max_num_files;
 }
 
 /**
@@ -763,8 +793,8 @@
   db_query('DELETE FROM {file_revisions} WHERE vid = %d', $node->vid);
 }
 
-function _upload_form($node) {
-
+function _upload_form($node) {
+
   $form['#theme'] = 'upload_form_new';
 
   if (is_array($node->files) && count($node->files)) {
@@ -790,8 +820,8 @@
       $form['files'][$key]['fid'] = array('#type' => 'value',  '#value' => $file->fid);
     }
   }
-
-  if (user_access('upload files')) {
+  $max_num_files = upload_max_num_files();
+  if (user_access('upload files') && ($max_num_files == 0 || count($node->files) < $max_num_files)) {
     // This div is hidden when the user uploads through JS.
     $form['new'] = array(
       '#prefix' => '<div id="attach-hide">',
