t('Mass image import'), 'description' => t('Import tons of images at once.'), 'page callback' => 'mass_image_import', 'access arguments' => array('administer content'), 'type' => MENU_NORMAL_ITEM, ); return $items; } /** * Include image_import helper functions. */ require_once drupal_get_path('module', 'image_import') .'/image_import.pages.inc'; /** * Menu callback. */ function mass_image_import() { $output = t('Mass image import.'); $output .= drupal_get_form('mass_image_import_form'); return $output; } /** * Mass import form. */ function mass_image_import_form(&$form_state) { $form['submit'] = array( '#type' => 'submit', '#value' => t('Import images'), ); return $form; } /** * Handle post-validation form-submission. */ function mass_image_import_form_submit($form, &$form_state) { // Setup batch configuration $batch = array( 'title' => t('Importing images'), 'operations' => array(array('mass_image_import_batch', array())), 'finished' => 'mass_image_import_batch_finished', 'file' => drupal_get_path('module', 'bcc') . '/bcc.import.inc', ); // Run batch for operations batch_set($batch); batch_process(); } /** * Batch operation callback for image import. */ function mass_image_import_batch(&$context) { if (empty($context['sandbox'])) { $files = mass_image_import_get_files(); $context['sandbox']['images'] = $files; $context['sandbox']['progress'] = 0; $context['sandbox']['max'] = count($files); } $limit = variable_get('image_import_page_size', 50); for ($n = 0; $n <= $limit; $n++) { if ($context['sandbox']['progress']++ > $context['sandbox']['max']) { $context['finished'] = 1; break; } $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; $image = $context['sandbox']['images'][$context['sandbox']['progress']]; $context['results'][] = $image->filename; $context['message'] = t('Importing @file...', array( '@file' => $image->filename, )); mass_image_import_file($image); } } /** * Make a list of image files. * * @return * List of available images for import. */ function mass_image_import_get_files() { $dirpath = variable_get('image_import_path', ''); if (!file_check_directory($dirpath)) { drupal_set_message( t("You need to configure the import directory on the image import module's settings page.", array('!admin-settings-import' => url('admin/settings/image/image_import'))), 'error'); return; } // Get file names $files = file_scan_directory($dirpath, '.*'); if (!$files) { return; } // Sort ksort($files); // Convert to indexed array foreach ($files as $file) { $images[] = $file; } return $images; } /** * Import a single file. * * @param $file * Image object to import. */ function mass_image_import_file($file) { $dirpath = variable_get('image_import_path', ''); $origname = $file->basename; // Debug watchdog('bcc', 'Importing '. $origname); // Assembly import data $file_metadata_modules = module_implements('file_metadata'); $problems = image_import_validate_file($file); // Allow other modules to supply metadata about the images being imported. // hook_file_metadata() may populate the $file properties 'title' and // 'description'. foreach ($file_metadata_modules as $module) { $function = $module . '_file_metadata'; $function($file); } // Build form if ($filepath = file_check_location($dirpath .'/'. $origname, $dirpath)) { $args = array( 'node_type' => 'image', 'title' => isset($file->title) ? $file->title : basename($file->name), 'body' => isset($file->body) ? $file->body : basename($file->name), 'taxonomy' => isset($form_state['values']['taxonomy']) ? $form_state['values']['taxonomy'] : array(), 'filepath' => $filepath, 'origname' => $origname, ); } // Create the node object. if ($node = image_create_node_from($args['filepath'], $args['title'], $args['body'], $args['taxonomy'])) { // Remove the original image now that the import has completed. file_delete($args['filepath']); } else { watchdog('image_import', 'There was an error that prevented %filename from being imported.', array('%filename' => $args['filepath']), WATCHDOG_ERROR); } } /** * Callback for image import. */ function mass_image_import_batch_finished($success, $results, $operations) { if ($success) { if ($results > 0) { $message = format_plural(count($results), t('One processed.'), t('@count processed.')); } } else { $message = t('Finished with an error.'); } drupal_set_message($message); }