settings page.", array('!admin-settings-asset_import' => url('admin/settings/asset_import'))), 'error'); return $form; } $files = file_scan_directory($dirpath, '.*'); ksort($files); if ($files) { // Display a list of asset directories include_once(drupal_get_path('module', 'asset') . '/inc/asset_wizard.inc'); $list = asset_wizard_directory_options(); $form['parent'] = array( '#type' => 'select', '#title' => t('Parent directory'), '#default_value' => $form_values['parent'] ? $form_values['parent'] : $_GET['dir'], '#options' => asset_wizard_directory_options(), ); // Put the files into an array for the checkboxes and gather // additional information like dimensions and filesizes. Make sure that // there's no 0th element, because a checkbox with a zero value is seen as // unchecked and won't be imported. $fields = array('filesize', 'dimensions', 'title', 'body'); foreach ($fields as $field) { $form['files'][$field][0] = NULL; } $filelist = array(0 => NULL); foreach ($files as $file) { $_title = db_fetch_array(db_query("SELECT n.title, n.type, f.filename FROM {node} n, {files} f WHERE f.filepath='%s' AND n.nid = f.nid LIMIT 1", $file->filename)); if(!empty($_title)) { if($_title['type']=="image") { // This is an image created by the image module, we have information about the image size name $title = $_title['title'] ." (". str_replace("_original", "original", $_title['filename']) .")"; } else { // This is a file created by a drupal module, we have some information about it $title = $_title['title']; } } else { // This file was not created by a drupal module but uploaded using ftp for instance, we don't have any information about it $title = basename($file->name); } $info = image_get_info($file->filename); if ($info && isset($info['extension'])) { // This is an image so we provide as much details as possible $filelist[] = substr($file->filename, strlen($dirpath) + 1); $form['files']['filesize'][] = array( '#type' => 'item', '#value' => format_size(filesize($file->filename)), ); $form['files']['dimensions'][] = array( '#type' => 'item', '#value' => $info['width'] .'x'. $info['height'], ); $form['files']['title'][] = array( '#type' => 'textfield', '#size' => 20, '#default_value' => $title, ); $form['files']['body'][] = array( '#type' => 'textfield', '#size' => 20, ); } else { // This is not an image $filelist[] = substr($file->filename, strlen($dirpath) + 1); $form['files']['filesize'][] = array( '#type' => 'item', '#value' => format_size(filesize($file->filename)), ); $form['files']['dimensions'][] = array( '#type' => 'item', '#value' => '', ); $form['files']['title'][] = array( '#type' => 'textfield', '#size' => 20, '#default_value' => basename($file->name), ); $form['files']['body'][] = array( '#type' => 'textfield', '#size' => 20, ); } } // Remove our 0 elements. unset($filelist[0]); foreach ($fields as $field) { $form['files'][$field][0] = NULL; } // Put the titles into an array. $form['files']['title']['#tree'] = TRUE; $form['files']['body']['#tree'] = TRUE; // Store a copy of the list into a form value so we can compare it to what // they submit and not have to worry about files being added or removed from // the filesystem. $form['file_list'] = array( '#type' => 'value', '#value' => $filelist, ); $form['import_file'] = array( '#type' => 'checkboxes', '#options' => $filelist, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Import'), ); } else { $form['import_file'] = array( '#type' => 'item', '#value' => t('No files were found'), ); } return $form; } function asset_import_form_submit($form, &$form_state) { $nodes = array(); // We will save the results in this array $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Import')) { $dirpath = variable_get('asset_import_path', ''); if (file_check_directory($dirpath)) { $nodes = array(); $files = array(); foreach (array_filter($form_state['values']['import_file']) as $index) { // try to avoid php's script timeout with a bunch of large files or a slow machine if (!ini_get('safe_mode')) set_time_limit(0); $origname = $form_state['values']['file_list'][$index]; $filename = file_check_location($dirpath .'/'. $origname, $dirpath); $target = file_directory_path() .'/'. $form_state['values']['parent'] .'/'. $origname; if ($filename && rename($filename, $target)) { $options = array( 'title' => $form_state['values']['title'][$index], 'author' => $form_state['values']['body'][$index], 'status' => 1, // PUBLIC ); $asset = new StdClass; $asset->filepath = $target; $asset->filesize = filesize($target); asset_save($asset, $options); $nodes[] = t('%filename', array('%filename' => $origname)); } } // report back on our progress if (!empty($nodes)) { drupal_set_message(t('Successfully imported: ') . theme('item_list', $nodes)); } else { drupal_set_message(t('No files were imported.')); } } } } function asset_import_admin_settings() { $descr = ''; $descr .= t("The directory to import assets from. Drupal will need to have write access to this directory so we can move the file."); $descr .= '
'; $descr .= t("Note: a path begining with a / indicates the path is relative to the server's root, not the website's root. One starting without a / specifies a path relative to Drupal's root. For example: /tmp/image would be the temp directory off the root while tmp/image would be inside Drupal's directory."); $form['asset_import_path'] = array( '#type' => 'textfield', '#title' => t('Import path'), '#default_value' => variable_get('asset_import_path', file_directory_path()), '#after_build' => array('_asset_import_settings_check_directory'), '#description' => $descr, '#required' => TRUE, ); return system_settings_form($form); } ?>