t('Execute preset'), 'arguments' => array( 'node' => array('type' => 'node', 'label' => t('Content')), ), 'module' => 'Imagecache', ); return $options; } function imagecache_rules_execute_preset($node, $settings) { if (!isset($settings['presetname'])) { watchdog('imagecache', 'Imagecache rule could not be executed because there was no preset specified.'); return; } $preset = imagecache_preset($settings['presetname']); $field = $node->$settings['field_name']; $src = _imagecache_strip_file_directory($field[0]['filepath']); $dst = imagecache_create_path($preset['presetname'], $field[0]['filename']); if (is_file($dst)) { // File already exists. No need to re-generate it. return; } // check if the path to the file exists if (!is_file($src) && !is_file($src = file_create_path($src))) { watchdog('imagecache', 'File @filename does not exist.', array('@filename' => $src), WATCHDOG_ERROR); return; } // bail if the requested file isn't an image you can't just summon .php files etc... if (!getimagesize($src)) { watchdog('imagecache', 'Size of image @filename could not be determined.', array('@filename' => $src), WATCHDOG_ERROR); return; } $lockfile = file_directory_temp() .'/'. $preset['presetname'] . basename($src); if (file_exists($lockfile)) { watchdog('imagecache', 'ImageCache already generating: %dst, Lock file: %tmp.', array('%dst' => $dst, '%tmp' => $lockfile), WATCHDOG_NOTICE); return; } touch($lockfile); // register the shtdown function to clean up lock files. by the time shutdown // functions are being called the cwd has changed from document root, to // server root so absolute paths must be used for files in shutdown functions. register_shutdown_function('file_delete', realpath($lockfile)); // Execute the preset. imagecache_build_derivative($preset['actions'], $src, $dst); } function imagecache_rules_execute_preset_form($settings, &$form, $form_state) { if (empty($settings['field_name'])) { _imagecache_get_field($form, $settings); } else { $settings += array('presetname' => ''); $options = array(); foreach (imagecache_presets() as $preset) { $options[$preset['presetid']] = $preset['presetname']; } $form['settings']['presetname'] = array( '#type' => 'select', '#size' => 1, '#options' => $options, '#default_value' => isset($settings['presetname']) ? $settings['presetname'] : '', '#description' => t('Select the name of the preset to execute.'), '#required' => TRUE, ); } } /** * Inserts the imagefield selection field into the given form. * @param $form * The form to modify. * @param $settings * Current rules settings. */ function _imagecache_get_field(&$form, &$settings) { if (module_exists('imagefield')) { $settings += array('field_name' => ''); module_load_include('inc', 'content', 'content.rules'); $form['settings']['field_name'] = array( '#type' => 'select', '#title' => t('Field'), '#options' => content_rules_get_field_names_by_type(), '#default_value' => $settings['field_name'], '#description' => t('Select the machine-name of the field.'), '#required' => TRUE, ); // Replace the usual submit handlers with a own handler. $form['submit']['#submit'] = array('imagecache_rules_field_form_step_submit'); $form['submit']['#value'] = t('Continue'); } } function imagecache_rules_field_form_step_submit($form, &$form_state) { $form_state['element']['#settings']['field_name'] = $form_state['values']['settings']['field_name']; }