type, array()); // Now we are in the loop of every node type, we can loop every role :-) foreach ($roles as $key => $role) { $roles[$key] = $role; // Set a default value if array is empty if (empty($settings[$role])) { $settings[$role]->filepath = '%file_directory_path'; $settings[$role]->max_img_resolution = '800x600'; $settings[$role]->list = 1; $settings[$role]->file_extensions = 'jpg jpeg gif png txt'; $settings[$role]->max_file_size = 1; $settings[$role]->node_max_file_size = 0; $settings[$role]->max_files = 1; $settings[$role]->upload_usersize = 10; if ($role == t('authenticated user')) { $settings[$role]->upload_usersize = round((file_upload_max_size() / (1024 * 1024))); } } // Create the prefix for each role $form_prefix = $node_type->type .'_'. str_replace(' ', '_', $role); // Path settings $form[$form_prefix .'_filepath'] = array( '#type' => 'textfield', '#title' => t('Path settings'), '#default_value' => $settings[$role]->filepath, '#maxlength' => 255, ); // Resolution $form[$form_prefix .'_max_img_resolution'] = array( '#type' => 'textfield', '#title' => t('Maximum resolution for uploaded images'), '#default_value' => $settings[$role]->max_img_resolution, '#size' => 15, '#maxlength' => 10, '#field_suffix' => ''. t('WIDTHxHEIGHT') .'' ); // Display attachments $form[$form_prefix .'_list'] = array( '#type' => 'checkbox', '#title' => t('List files by default'), '#default_value' => $settings[$role]->list, ); // Total files per node $form[$form_prefix .'_max_files'] = array( '#type' => 'select', '#title' => t('Maximum files per node'), '#default_value' => $settings[$role]->max_files, '#options' => array(0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 10 => 10, 20 => 20, 50 => 50), ); // Allowed extentions $form[$form_prefix .'_file_extensions'] = array( '#type' => 'textfield', '#title' => t('Permitted file extensions'), '#default_value' => $settings[$role]->file_extensions, '#maxlength' => 255, ); $form[$form_prefix .'_max_file_size'] = array( '#type' => 'textfield', '#title' => t('Maximum file size per upload'), '#default_value' => $settings[$role]->max_file_size, '#size' => 5, '#maxlength' => 5, '#field_suffix' => t('MB'), ); $form[$form_prefix .'_node_max_file_size'] = array( '#type' => 'textfield', '#title' => t('Total file size per node'), '#default_value' => $settings[$role]->node_max_file_size, '#size' => 5, '#maxlength' => 5, '#field_suffix' => t('MB'), ); $form[$form_prefix .'_upload_usersize'] = array( '#type' => 'textfield', '#title' => t('Total file size per user'), '#default_value' => $settings[$role]->upload_usersize, '#size' => 5, '#maxlength' => 5, '#field_suffix' => t('MB'), ); } } $form['node_types'] = array('#type' => 'value', '#value' => $node_types); $form['roles'] = array('#type' => 'value', '#value' => $roles); $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration')); return $form; } /** * Theme function for the file settings form */ function theme_swfupload_settings_form($form) { // Create an array for all fields we want to render. $fields = array('filepath', 'max_img_resolution', 'list', 'max_files', 'file_extensions', 'max_file_size', 'node_max_file_size', 'upload_usersize', ); // Loop trough all node types foreach ($form['node_types']['#value'] as $node_type) { // Reset the output array $output = array('
'); // Loop trough all roles foreach ($form['roles']['#value'] as $role) { // Reset the rows array $rows = array(); // Create the prefix for each role $form_prefix = $node_type->type .'_'. str_replace(' ', '_', $role); // Loop trough the fields we want to render foreach ($fields as $field) { $title = $form[$form_prefix ."_". $field]['#title']; unset($form[$form_prefix ."_". $field]['#title']); $rows[] = array( array( 'data' => $title, 'class' => 'left' ), drupal_render($form[$form_prefix ."_". $field]) ); } $output[] = theme('table', array(array('data' => $role, 'colspan' => 2, 'class' => 'left2')), $rows); } $output[] = '
'; $lis[] = "". join("\n", $output); } return theme('item_list', $lis) . drupal_render($form) .'
'; } /** * validation of the file settings form */ function swfupload_settings_form_validate($form, &$form_state) { // Loop trough all node types foreach ($form['node_types']['#value'] as $node_type) { // Loop trough all the roles foreach ($form['roles']['#value'] as $role) { // Create the prefix for each role $form_prefix = $node_type->type .'_'. str_replace(' ', '_', $role); // Max resolution if ($form_state['values'][$form_prefix .'_max_img_resolution'] != 0) { $max_resolution = explode('x', $form_state['values'][$form_prefix .'_max_img_resolution']); if (count($max_resolution) != 2) { form_set_error($form_prefix .'_max_img_resolution', t('Maximum resolution for uploaded images is not valid')); } else { if (!is_numeric($max_resolution[0]) or !is_numeric($max_resolution[1])) { form_set_error($form_prefix .'_max_img_resolution', t('Maximum resolution for uploaded images is not valid')); } } } // Permited extentions $extensions = explode(' ', $form_state['values'][$form_prefix .'_file_extensions']); foreach ($extensions as $extention) { if (!preg_match("/^([A-Z0-9]){2,10}$/i", $extention)) { form_set_error($form_prefix .'_file_extensions', t('One of more extentions are not valid')); break; } } // Maximum file size if (!is_numeric($form_state['values'][$form_prefix .'_max_file_size'])) { form_set_error($form_prefix .'_max_file_size', t('Maximum file size per upload is not valid')); } // Total node size if (!is_numeric($form_state['values'][$form_prefix .'_node_max_file_size'])) { form_set_error($form_prefix .'_node_max_file_size', t('Total file size per node is not valid')); } // Total user size if (!is_numeric($form_state['values'][$form_prefix .'_upload_usersize'])) { form_set_error($form_prefix .'_upload_usersize', t('Total file size per user is not valid')); } } } } /** * Submittion of the file settings form */ function swfupload_settings_form_submit($form, &$form_state) { // Loop trough all node types foreach ($form['node_types']['#value'] as $node_type) { // Loop trough all the roles foreach ($form['roles']['#value'] as $role) { // Create the prefix for each role $form_prefix = $node_type->type .'_'. str_replace(' ', '_', $role); $settings[$role]->filepath = $form_state['values'][$form_prefix .'_filepath']; $settings[$role]->max_img_resolution = $form_state['values'][$form_prefix .'_max_img_resolution']; $settings[$role]->list = $form_state['values'][$form_prefix .'_list']; $settings[$role]->file_extensions = drupal_strtolower($form_state['values'][$form_prefix .'_file_extensions']); $settings[$role]->max_file_size = $form_state['values'][$form_prefix .'_max_file_size']; $settings[$role]->upload_usersize = $form_state['values'][$form_prefix .'_upload_usersize']; $settings[$role]->node_max_file_size = $form_state['values'][$form_prefix .'_node_max_file_size']; $settings[$role]->max_files = $form_state['values'][$form_prefix .'_max_files']; } variable_set('swfupload_setting_'. $node_type->type, $settings); } drupal_set_message(t('The configuration options have been saved.')); }