View source
<?php
function imagecache_drush_command() {
$items = array();
$items['imagecache-flush'] = array(
'callback' => 'imagecache_drush_preset_flush',
'description' => dt('Flush an imagecache preset.'),
'examples' => array(
'drush imagecache-flush foobar' => dt('Flush the ImageCache preset "foobar".'),
),
'aliases' => array(
'icf',
),
);
$items['imagecache-build'] = array(
'callback' => 'imagecache_drush_preset_build',
'description' => dt('Build imagecache derivates for all images for a given preset.'),
'examples' => array(
'drush imagecache-build foobar' => dt('Build all images for preset "foobar".'),
),
'aliases' => array(
'icb',
),
);
return $items;
}
function imagecache_drush_help($section) {
switch ($section) {
case 'drush:imagecache-flush':
return dt('Flush a given preset.');
case 'drush:imagecache-build':
return dt('Build derivative images for a given preset.');
}
}
function imagecache_drush_preset_flush() {
$args = func_get_args();
foreach (imagecache_presets(TRUE) as $preset) {
$preset_names[] = $preset['presetname'];
}
if (empty($args)) {
$choice = drush_choice($preset_names, 'Enter a number to choose which preset to flush.');
if ($choice !== FALSE) {
$args[] = $preset_names[$choice];
}
}
else {
if (count($args) == 1 && $args[0] == 'all') {
$args = $preset_names;
}
}
$not_found = array_diff($args, $preset_names);
$args = array_intersect($args, $preset_names);
if ($not_found) {
drush_log(dt('Preset(s) not found: @presets', array(
'@presets' => implode($not_found, ' '),
)), 'error');
}
if (empty($args)) {
return FALSE;
}
$path = drush_get_context('DRUSH_DRUPAL_ROOT') . '/' . file_directory_path() . '/imagecache/';
foreach ($args as $arg) {
if ($preset = imagecache_preset_by_name($arg)) {
$presetdir = $path . $preset['presetname'];
if (is_dir($presetdir)) {
_imagecache_recursive_delete($presetdir);
drush_log(dt('Flushed "@preset" preset.', array(
'@preset' => $arg,
)), 'ok');
}
else {
drush_log(dt('Cache for preset "@preset" was already empty.', array(
'@preset' => $arg,
)), 'ok');
}
}
}
return TRUE;
}
function imagecache_drush_preset_build() {
$args = func_get_args();
foreach (imagecache_presets(TRUE) as $preset) {
$preset_names[] = $preset['presetname'];
}
if (empty($args)) {
$choice = drush_choice($preset_names, 'Enter a number to choose which preset to flush.');
if ($choice !== FALSE) {
$args[] = $preset_names[$choice];
}
}
elseif ($args[0] == 'all') {
$args = $preset_names;
}
$not_found = array_diff($args, $preset_names);
$args = array_intersect($args, $preset_names);
if ($not_found) {
drush_log(dt('Preset(s) not found: @presets', array(
'@presets' => implode($not_found, ' '),
)), 'error');
}
if (empty($args)) {
return FALSE;
}
$file_query = db_query("SELECT filepath FROM {files} where filemime LIKE 'image%' ORDER BY fid DESC");
$files = array();
drush_log(dt('Generating file list...', array()), 'ok');
while ($filepath = db_result($file_query)) {
if (file_exists($filepath)) {
$files[] = $filepath;
}
}
if (empty($files)) {
drush_log(dt('No images found in the files table.', array()), 'error');
return FALSE;
}
$count = count($files);
drush_log(dt('Done. @count files to process using these presets: @presets', array(
'@count' => $count,
'@presets' => implode(' ', $args),
)), 'ok');
$counter = 0;
$mod = round($count / 200);
foreach ($files as $filepath) {
foreach ($args as $arg) {
$path = imagecache_create_path($arg, $filepath);
if (!file_exists($path)) {
imagecache_generate_image($arg, $filepath);
if (file_exists($path)) {
drush_log(dt('File "@file" created.', array(
'@file' => $path,
)), 'ok');
}
else {
drush_log(dt('File "@file" not created.', array(
'@file' => $path,
)), 'error');
}
}
}
$counter++;
if ($counter % $mod == 0) {
drush_log(dt('@percent% done.', array(
'@percent' => round($counter / $count * 100, 2),
)), 'ok');
}
}
return TRUE;
}