'value', '#value' => $preset['presetid']); return confirm_form( $form, t('Are you sure you want to delete the preset %preset?', array('%preset' => $preset['presetname']) ), 'admin/build/imagecache', t('This action cannot be undone.'), t('Delete'), t('Cancel') ); } function imagecache_ui_preset_delete_form_submit($form, &$form_state) { $preset = imagecache_preset($form_state['values']['presetid']); imagecache_preset_delete($preset); drupal_set_message(t('Preset %name (ID: @id) was deleted.', array('%name' => $preset['presetname'], '@id' => $preset['presetid']))); $form_state['redirect'] = 'admin/build/imagecache'; } function imagecache_ui_preset_flush_form(&$form_state, $preset = array()) { if (empty($preset)) { drupal_set_message(t('The specified preset was not found'), 'error'); $form_state['redirect'] = 'admin/build/imagecache'; } $form = array(); $form['presetid'] = array('#type' => 'value', '#value' => $preset['presetid']); return confirm_form( $form, t('Are you sure you want to flush the preset %preset?', array('%preset' => $preset['presetname']) ), 'admin/build/imagecache', t('This action cannot be undone.'), t('Flush'), t('Cancel') ); } function imagecache_ui_preset_flush_form_submit($form, &$form_state) { $preset = imagecache_preset($form_state['values']['presetid']); imagecache_preset_flush($preset); drupal_set_message(t('Preset %name (ID: @id) was flushed.', array('%name' => $preset['presetname'], '@id' => $preset['presetid']))); $form_state['redirect'] = 'admin/build/imagecache'; } /** * Imagecache preset export form. */ function imagecache_ui_preset_export_form(&$form_state, $preset = array()) { if (empty($preset)) { drupal_set_message(t('The specified preset was not found'), 'error'); $form_state['redirect'] = 'admin/build/imagecache'; } if (isset($preset['presetid'])) { unset($preset['presetid']); } if (isset($preset['storage'])) { unset($preset['storage']); } foreach ($preset['actions'] as $id => $action) { unset($preset['actions'][$id]['actionid']); unset($preset['actions'][$id]['presetid']); } $exported = '$presets = array();'; $exported .= "\n"; $exported .= '$presets[\''. $preset['presetname'] .'\'] = '; $exported .= var_export($preset, TRUE) .';'; $rows = substr_count($exported, "\n") + 1; $form = array(); $form['export'] = array( '#type' => 'textarea', '#default_value' => $exported, '#rows' => $rows, '#resizable' => FALSE, ); return $form; } function imagecache_ui_preset_form($form_state, $preset = array()) { $form = array(); $form['presetid'] = array( '#type' => 'value', '#value' => isset($preset['presetid']) ? $preset['presetid'] : '', ); // Browsers don't submit disabled form values so we've got to put two copies // of the name on the form: one for the submit handler and one for the user. if (isset($preset['storage']) && $preset['storage'] === IMAGECACHE_STORAGE_DEFAULT) { $form['presetname'] = array( '#type' => 'value', '#value' => $preset['presetname'], ); $form['presetname_display'] = array( '#type' => 'textfield', '#size' => '64', '#title' => t('Preset Namespace'), '#default_value' => $preset['presetname'], '#disabled' => TRUE, ); } else { $form['presetname'] = array( '#type' => 'textfield', '#size' => '64', '#title' => t('Preset Namespace'), '#default_value' => isset($preset['presetname']) ? $preset['presetname'] : '', '#description' => t('The namespace is used in URL\'s for images to tell imagecache how to process an image. Please only use alphanumeric characters, underscores (_), and hyphens (-) for preset names.'), '#validate' => array('imagecache_element_presetname_validate' => array()), ); } $form['submit'] = array( '#type' => 'submit', '#value' => isset($preset['storage']) && $preset['storage'] === IMAGECACHE_STORAGE_DEFAULT ? t('Override Defaults') : t('Save Preset'), '#weight' => 9, ); // For new presets don't show the preview or all actions to be added. if (empty($preset['presetid'])) { return $form; } $form['actions'] = array( '#type' => 'fieldset', '#title' => t('Actions'), '#tree' => TRUE, '#theme' => 'imagecache_ui_preset_actions', ); foreach ($preset['actions'] as $i => $action) { // skip unknown actions... if (!$definition = imagecache_action_definition($action['action'])) { continue; } $action_form['name'] = array( '#value' => t($definition['name']), ); $action_form['action'] = array( '#type' => 'value', '#value' => $action['action'], ); $action_form['actionid'] = array( '#type' => 'value', '#value' => $action['actionid'], ); $action_form['presetid'] = array( '#type' => 'value', '#value' => $action['presetid'], ); $action_form['settings'] = array( '#theme' => $action['action'], '#value' => $action['data'], ); $action_form['data'] = array( '#type' => 'value', '#value' => $action['data'], ); $action_form['weight'] = array( '#type' => 'weight', '#default_value' => $action['weight'], '#access' => $preset['storage'] !== IMAGECACHE_STORAGE_DEFAULT, ); $action_form['configure'] = array( '#value' => l(t('Configure'), 'admin/build/imagecache/'. $action['presetid'] .'/'. $action['actionid'] ), '#access' => $preset['storage'] !== IMAGECACHE_STORAGE_DEFAULT, ); $action_form['remove'] = array( '#value' => l(t('Delete'), 'admin/build/imagecache/'. $action['presetid'] .'/'. $action['actionid'] .'/delete'), '#access' => $preset['storage'] !== IMAGECACHE_STORAGE_DEFAULT, ); $form['actions'][$i] = $action_form; } $form['actions']['new'] = array( '#tree' => FALSE, '#type' => 'fieldset', '#title' => t('New Actions'), '#collapsible' => TRUE, '#collapsed' => count($preset['actions']) > 0, '#access' => $preset['storage'] !== IMAGECACHE_STORAGE_DEFAULT, ); foreach (imagecache_action_definitions() as $action => $definition) { $form['actions']['new'][] = array( '#type' => 'markup', '#prefix' => '
', '#suffix' => '
', '#value' => l(t('Add !action', array('!action' => $definition['name'])), 'admin/build/imagecache/'. $preset['presetid'] .'/add/'. $action) . ' - '. $definition['description'], ); } // Display a preview image for this action. Put it below the submit button so // users don't have to do a bunch of scrolling. $preview_path = file_create_path('imagecache_sample.png'); if (!file_exists($preview_path)) { // Copy of the image into the files directory so rather than generating it // from the original so we don't end up creating subdirectories mirroring // the path to the this module. $preview_path = drupal_get_path('module', 'imagecache_ui') .'/sample.png'; file_copy($preview_path, 'imagecache_sample.png'); } imagecache_image_flush($preview_path); $imagecache_path = imagecache_create_url($preset['presetname'], $preview_path, TRUE); $form['preview'] = array( '#type' => 'item', '#title' => t('Preview'), '#value' => l($imagecache_path, $imagecache_path) .'
'. l("", $imagecache_path, array('html' => TRUE)), '#weight' => 10, ); return $form; } function imagecache_ui_preset_form_validate($form, &$form_state) { $values = $form_state['values']; // Check for duplicates foreach (imagecache_presets() as $preset) { if ($values['presetname'] == $preset['presetname'] && $values['presetid'] != $preset['presetid']) { form_set_error('presetname', t('The preset name you have chosen is already in use.')); break; } } // Check for illegal characters in preset names if (preg_match('/[^0-9a-zA-Z_\-]/', $values['presetname'])) { form_set_error('presetname', t('Please only use alphanumeric characters, underscores (_), and hyphens (-) for preset names.')); } } function imagecache_ui_preset_form_submit($form, &$form_state) { // Save the preset first to retrieve the presetid when overriding $preset = imagecache_preset_save($form_state['values']); // Populate the presetid as needed for overrides if (isset($form_state['values']['actions'])) { foreach($form_state['values']['actions'] as $action) { if (empty($action['presetid'])) { $action['presetid'] = $preset['presetid']; } imagecache_action_save($action); } } // Push back to the preset form $form_state['redirect'] = 'admin/build/imagecache/'. $preset['presetid']; } function theme_imagecache_ui_preset_actions($form) { $header = array(t('Action'), t('Settings')); // $header = array(, t('Weight'), '',''); $rows = array(); foreach(element_children($form) as $key) { if (!is_numeric($key)) { continue; } $row = array(); $row[] = drupal_render($form[$key]['name']); $row[] = drupal_render($form[$key]['settings']); // Check for form access before rendering these portions of the table / header if (!empty($form[$key]['weight']['#access'])) { if (empty($header['weight'])) { $header['weight'] = t('Weight'); } $form[$key]['weight']['#attributes']['class'] = 'imagecache-action-order-weight'; $row[] = drupal_render($form[$key]['weight']); } if (!empty($form[$key]['configure']['#access'])) { if (empty($header['configure'])) { $header['configure'] = ''; } $row[] = drupal_render($form[$key]['configure']); } if (!empty($form[$key]['remove']['#access'])) { if (empty($header['remove'])) { $header['remove'] = ''; } $row[] = drupal_render($form[$key]['remove']); } $rows[] = array( 'data' => $row, 'class' => 'draggable', ); } $output = ''; if ($rows) { drupal_add_tabledrag('imagecache-preset-actions', 'order', 'sibling', 'imagecache-action-order-weight'); $output = theme('table', $header, $rows, array('id' => 'imagecache-preset-actions')); } $output .= drupal_render($form); return $output; } /** * Page with form for adding a new action to add to a preset. */ function imagecache_ui_action_add_page($preset, $actionname) { // Make sure the name is valid. if (!$definition = imagecache_action_definition($actionname)) { drupal_set_message(t('Unknown action.'), 'error'); drupal_goto('admin/build/imagecache/'. $preset['presetid']); } $action = array( 'presetid' => $preset['presetid'], 'action' => $actionname, 'data' => array(), ); return drupal_get_form('imagecache_ui_action_form', $preset, $action); } function imagecache_ui_action_form($form_state, $preset, $action) { // Do some error checking. if (empty($preset['presetid'])) { drupal_set_message(t('Unknown preset.'), 'error'); drupal_goto('admin/build/imagecache'); } if (empty($action['action']) || !$definition = imagecache_action_definition($action['action'])) { drupal_set_message(t('Unknown action.'), 'error'); drupal_goto('admin/build/imagecache/'. $preset['presetid']); } if ($action['presetid'] != $preset['presetid']) { drupal_set_message(t('This %action action is not associated %preset preset.', array('%action' => $action['action'], '%preset' => $preset['presetname'])), 'error'); drupal_goto('admin/build/imagecache/'. $preset['presetid']); } $form['#tree'] = TRUE; $form['presetid'] = array( '#type' => 'value', '#value' => $action['presetid'], ); $form['actionid'] = array( '#type' => 'value', '#value' => isset($action['actionid']) ? $action['actionid']: '', ); $form['action'] = array( '#type' => 'value', '#value' => $action['action'], ); if (!empty($definition['file'])) { require_once($definition['file']); } if (function_exists($action['action'] .'_form')) { $form['data'] = call_user_func($action['action'] .'_form', $action['data']); } $form['submit'] = array( '#type' => 'submit', '#value' => empty($action['actionid']) ? t('Create Action') : t('Update Action'), ); return $form; } function imagecache_ui_action_form_submit($form, &$form_state) { imagecache_action_save($form_state['values']); if (empty($form_state['values']['presetid'])) { drupal_set_message(t('The action was succesfully created.')); } else { drupal_set_message(t('The action was succesfully updated.')); } $form_state['redirect'] = 'admin/build/imagecache/'. $form_state['values']['presetid']; } function imagecache_ui_action_delete_form($form_state, $preset = array(), $action = array()) { if (empty($action)) { drupal_set_message(t('Unknown Action.'), 'error'); drupal_goto('admin/build/imagecache'); } if (empty($preset)) { drupal_set_message(t('Unknown Preset.'), 'error'); drupal_goto('admin/build/imagecache'); } $form = array(); $form['actionid'] = array('#type' => 'value', '#value' => $action['actionid']); return confirm_form( $form, t('Are you sure you want to delete the !action action from preset !preset?', array('!preset' => $preset['presetname'], '!action' => $action['name']) ), 'admin/build/imagecache', t('This action cannot be undone.'), t('Delete'), t('Cancel') ); } function imagecache_ui_action_delete_form_submit($form, &$form_state) { $action = imagecache_action($form_state['values']['actionid']); imagecache_action_delete($action); drupal_set_message(t('The action has been deleted.')); $form_state['redirect'] = 'admin/build/imagecache/'. $action['presetid']; }