123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- <?php
- /**
- * @file
- * functionality for flushing image styles.
- */
- /**
- * Implements hook_menu().
- */
- function imagestyleflush_menu() {
- $items['admin/config/media/image-styles/flush'] = array(
- 'title' => 'Flush all styles',
- 'description' => 'Flush all image styles.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('imagestyleflush_form'),
- 'access arguments' => array('flush image styles'),
- 'type' => MENU_LOCAL_ACTION,
- 'weight' => 3,
- );
- $items['admin/config/media/image-styles/flush/%image_style'] = array(
- 'title' => 'Flush style',
- 'description' => 'Flush an image style.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('imagestyleflush_form', 5),
- 'access arguments' => array('flush image styles'),
- );
- return $items;
- }
- /**
- * Implements hook_permission().
- */
- function imagestyleflush_permission() {
- return array(
- 'flush image styles' => array(
- 'title' => t('Flush image styles'),
- 'description' => t('Allow users to flush image styles.'),
- ),
- );
- }
- /**
- * Implements hook_theme_registry_alter().
- */
- function imagestyleflush_theme_registry_alter(&$theme_registry) {
- $theme_registry['image_style_list']['function'] = 'imagestyleflush_image_style_list';
- }
- /**
- * theme_image_style_list() override function.
- *
- * @see image.admin.inc
- */
- function imagestyleflush_image_style_list($variables) {
- $styles = $variables['styles'];
- // Account for an extra column added by the image_styles_admin submodule of
- // the imagecache_actions module.
- $colspan = module_exists('image_styles_admin') ? 4 : 3;
- $header = array(t('Style name'), t('Settings'), array('data' => t('Operations'), 'colspan' => $colspan));
- $rows = array();
- foreach ($styles as $style) {
- $row = array();
- $row[] = l($style['label'], 'admin/config/media/image-styles/edit/' . $style['name']);
- $link_attributes = array(
- 'attributes' => array(
- 'class' => array('image-style-link'),
- ),
- );
- if ($style['storage'] == IMAGE_STORAGE_NORMAL) {
- $row[] = t('Custom');
- $row[] = l(t('edit'), 'admin/config/media/image-styles/edit/' . $style['name'], $link_attributes);
- $row[] = l(t('flush'), 'admin/config/media/image-styles/flush/' . $style['name'], $link_attributes);
- $row[] = l(t('delete'), 'admin/config/media/image-styles/delete/' . $style['name'], $link_attributes);
- }
- elseif ($style['storage'] == IMAGE_STORAGE_OVERRIDE) {
- $row[] = t('Overridden');
- $row[] = l(t('edit'), 'admin/config/media/image-styles/edit/' . $style['name'], $link_attributes);
- $row[] = l(t('flush'), 'admin/config/media/image-styles/flush/' . $style['name'], $link_attributes);
- $row[] = l(t('revert'), 'admin/config/media/image-styles/revert/' . $style['name'], $link_attributes);
- }
- else {
- $row[] = t('Default');
- $row[] = l(t('edit'), 'admin/config/media/image-styles/edit/' . $style['name'], $link_attributes);
- $row[] = l(t('flush'), 'admin/config/media/image-styles/flush/' . $style['name'], $link_attributes);
- $row[] = '';
- }
- $rows[] = $row;
- }
- if (empty($rows)) {
- $rows[] = array(array(
- 'colspan' => $colspan,
- 'data' => t('There are currently no styles. <a href="!url">Add a new one</a>.', array('!url' => url('admin/config/media/image-styles/add'))),
- ));
- }
- return theme('table', array('header' => $header, 'rows' => $rows));
- }
- /**
- * Form constructor for the confirm form.
- *
- * @param $style
- * Associative array can contain a style name. Optional.
- *
- * @see imagestyleflush_form_submit()
- * @ingroup forms
- */
- function imagestyleflush_form($form, &$form_state, $style = NULL) {
- if (isset($style)) {
- $form = confirm_form(
- array(
- 'style_name' => array(
- '#type' => 'value',
- '#value' => $style['name'],
- ),
- ),
- t('Are you sure you want to flush the %style image style?', array('%style' => $style['label'])),
- 'admin/config/media/image-styles',
- '<em>' . t('Note: this will only flush the images. It will not rebuild them.')
- . '</em><br><br>' . t('This action cannot be undone.'),
- t('Flush'), t('Cancel')
- );
- }
- else {
- $form = confirm_form(
- NULL,
- t('Are you sure you want to flush all image styles?'),
- 'admin/config/media/image-styles',
- '<em>' . t('Note: this will only flush the images. It will not rebuild them.')
- . '</em><br><br>' . t('This action cannot be undone.'),
- t('Flush'), t('Cancel')
- );
- }
- return $form;
- }
- /**
- * Form submission handler for imagestyleflush_form().
- *
- * @see imagestyleflush_form()
- */
- function imagestyleflush_form_submit($form, &$form_state) {
- if (isset($form_state['values']['style_name'])) {
- $style = image_style_load($form_state['values']['style_name']);
- $operations[] = array('image_style_flush', array($style));
- }
- else {
- foreach (image_styles() as $style) {
- $operations[] = array('image_style_flush', array($style));
- }
- }
- // Redirect to the destination URL.
- $destination = drupal_get_destination();
- if ($destination['destination'] != current_path()) {
- $operations[] = array('imagestyleflush_batch_destination_redirect', $destination);
- }
- $batch = array(
- 'operations' => $operations,
- 'finished' => 'imagestyleflush_batch_finished',
- );
- batch_set($batch);
- }
- /**
- * Batch operation. Redirect the batch operation if it was called from the
- * admin_menu item.
- */
- function imagestyleflush_batch_destination_redirect($destination, &$context) {
- // Set the destination redirect.
- $context['results']['redirect'] = $destination;
- }
- /**
- * Batch message.
- */
- function imagestyleflush_batch_finished($success, $results, $operations) {
- if ($success) {
- drupal_set_message(t('Image styles were successfully flushed.'));
- }
- else {
- drupal_set_message(t('An error occurred while flushing the image caches.'), 'error');
- }
- if (!empty($results['redirect'])) {
- drupal_goto($results['redirect']);
- }
- else {
- // Send the user to the right place depending on their access.
- if (user_access('administer image styles')) {
- drupal_goto('admin/config/media/image-styles');
- }
- else {
- drupal_goto();
- }
- }
- }
- /**
- * Implements hook_admin_menu_output_build().
- */
- function imagestyleflush_admin_menu_output_build(&$content) {
- // Add link to the icon menu to flush image styles.
- if (isset($content['icon'])) {
- $styles = image_styles();
- $access = user_access('flush image styles');
- $destination = drupal_get_destination();
- $style_links = array();
- foreach ($styles as $style) {
- $style_links[$style['name']] = array(
- '#title' => $style['label'],
- '#href' => 'admin/config/media/image-styles/flush/' . $style['name'],
- '#access' => $access,
- '#options' => array(
- 'query' => $destination,
- ),
- );
- }
- $content['icon']['icon']['flush-image-styles'] = array(
- '#title' => t('Flush all image styles'),
- '#access' => $access,
- '#href' => 'admin/config/media/image-styles/flush',
- '#options' => array(
- 'query' => $destination,
- ),
- '#weight' => 25,
- ) + $style_links;
- }
- }
|