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);
}
?>