Index: modules/upload/upload.module =================================================================== RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v retrieving revision 1.114 diff -u -p -r1.114 upload.module --- modules/upload/upload.module 31 Jul 2006 11:25:55 -0000 1.114 +++ modules/upload/upload.module 4 Aug 2006 00:43:48 -0000 @@ -112,6 +112,94 @@ function upload_menu($may_cache) { return $items; } + +/** + * Helper function for upload_max_size() + */ +function _convert_to_MB($val){ + + $val = trim($val); + $last = strtolower($val{strlen($val)-1}); + switch($last) { + // The 'G' modifier is available since PHP 5.1.0 + case 'g': + $size = $val*1024; + break; + case 'k': + $size = $val/1024; + break; + default: + $size = (int)$val; + } + return $size; +} + +/** + * Query the PHP settings and return the max upload size in MB. + */ +function upload_max_size() { + static $max_size = -1; + + if ($max_size < 0) { + $upload_max = _convert_to_MB(ini_get('upload_max_filesize')); + // sanity check- a single upload should not be more than 50% the size limit of the total post + $post_max = _convert_to_MB(ini_get('post_max_size'))/2; + $max_size = ($upload_max < $post_max) ? $upload_max : $post_max; + } + return $max_size; +} + +/** + * Form API callback to validate the upload settings form. + */ +function upload_admin_settings_validate($form_id, $form_values) { + + if (($form_values['upload_max_resolution'] != '0')){ + if (!preg_match("/^[0-9]+x[0-9]+$/",$form_values['upload_max_resolution'])){ + form_set_error('upload_max_resolution',t('The maximum allowed image size expressed as WIDTHxHEIGHT (e.g. 640x480). Set to 0 for no restriction.')); + } + } + + $default_uploadsize = $form_values['upload_uploadsize_default']; + $default_usersize = $form_values['upload_usersize_default']; + + if (!is_numeric($default_uploadsize) || ($default_uploadsize <= 0)){ + form_set_error('upload_uploadsize_default', t('%role file size limits must be numeric and greater than zero.', array('%role' => t('Default')))); + } + if (!is_numeric($default_usersize) || ($default_usersize <= 0)){ + form_set_error('upload_usersize_default', t('%role file size limits must be numeric and greater than zero.', array('%role' => t('Default')))); + } + if ($default_uploadsize > upload_max_size()) { + form_set_error('upload_uploadsize_default', t('Your PHP settings limit the maximum file size per upload to %size MB.', array('%size' => upload_max_size()))); + } + if ($default_uploadsize > $default_usersize) { + form_set_error('upload_uploadsize_default', t('error').': '. + t('Maximum file size per upload').' > '.t('Total file size per user')); + } + foreach ($form_values['roles'] as $rid => $role) { + + $uploadsize = $form_values["upload_uploadsize_$rid"]; + $usersize = $form_values["upload_usersize_$rid"]; + + if (!is_numeric($uploadsize) || ($uploadsize <= 0)){ + form_set_error("upload_uploadsize_$rid", t('%role file size limits must be numeric and greater than zero.', array('%role' => $role))); + } + if (!is_numeric($usersize) || ($usersize <= 0)){ + form_set_error("upload_usersize_$rid", t('%role file size limits must be numeric and greater than zero.', array('%role' => $role))); + } + if ($uploadsize > upload_max_size()) { + form_set_error("upload_uploadsize_$rid", t('Your PHP settings limit the maximum file size per upload to %size MB.', array('%size' => upload_max_size()))); + } + if ($uploadsize > $usersize) { + form_set_error("upload_uploadsize_$rid", t('error').': '. + t('Maximum file size per upload').' > '.t('Total file size per user')); + } + } +} + +/** + * Menu callback for the upload settings form. + */ function upload_admin_settings() { $upload_extensions_default = variable_get('upload_extensions_default', 'jpg jpeg gif png txt html doc xls pdf ppt pps'); $upload_uploadsize_default = variable_get('upload_uploadsize_default', 1); @@ -161,8 +249,11 @@ function upload_admin_settings() { '#maxlength' => 5, '#description' => t('The default maximum size of all files a user can have on the site (in megabytes).'), ); + + $form['upload_max_size'] = array('#value' => "

".t('Your PHP settings limit the maximum file size per upload to %size MB.', array('%size' => upload_max_size()))."

"); $roles = user_roles(0, 'upload files'); + $form['roles'] = array('#type' => 'value', '#value' => $roles); foreach ($roles as $rid => $role) { $form["settings_role_$rid"] = array(