1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-12 01:34:31 +02:00

Fix issue processwire/processwire-issues#1255 where rename didn't work for 1-image allowed image field, plus a related issue where rename of image could leave some variations unrenamed.

This commit is contained in:
Ryan Cramer
2021-07-16 14:34:53 -04:00
parent ec761e75bd
commit 785d66a4b5
5 changed files with 39 additions and 6 deletions

View File

@@ -205,8 +205,7 @@ class PagefileExtra extends WireData {
* *
*/ */
public function rename() { public function rename() {
if(!$this->exists()) return false; if(!$this->filenamePrevious || !is_readable($this->filenamePrevious)) return false;
if(!$this->filenamePrevious) return false;
return $this->wire('files')->rename($this->filenamePrevious, $this->filename()); return $this->wire('files')->rename($this->filenamePrevious, $this->filename());
} }

View File

@@ -1755,6 +1755,39 @@ class Pageimage extends Pagefile {
return $extras; return $extras;
} }
/**
* Rename this file
*
* Remember to follow this up with a `$page->save()` for the page that the file lives on.
*
* #pw-group-manipulation
*
* @param string $basename New name to use. Must be just the file basename (no path).
* @return string|bool Returns new name (basename) on success, or boolean false if rename failed.
*
*/
public function rename($basename) {
$variations = $this->getVariations();
$oldBasename = $this->basename;
$newBasename = parent::rename($basename);
if($newBasename === false) return false;
$ext = '.' . $this->ext();
$oldName = basename($oldBasename, $ext);
$newName = basename($newBasename, $ext);
foreach($variations as $pageimage) {
/** @var Pageimage $pageimage */
if(strpos($pageimage->basename, $oldName) !== 0) continue;
$newVariationName = $newName . substr($pageimage->basename, strlen($oldName));
$pageimage->rename($newVariationName);
}
return $newBasename;
}
/** /**
* Replace file with another * Replace file with another
* *

View File

@@ -1022,8 +1022,9 @@ function InputfieldImage($) {
var $span = $(this).children('span'); var $span = $(this).children('span');
var $input = $span.closest('.gridImage, .InputfieldImageEdit').find('.InputfieldFileRename'); var $input = $span.closest('.gridImage, .InputfieldImageEdit').find('.InputfieldFileRename');
var $list = $span.closest('.gridImages'); var $list = $span.closest('.gridImages');
var sortable = $list.hasClass('ui-sortable');
$list.sortable('disable'); if(sortable) $list.sortable('disable');
$input.val($span.text()); $input.val($span.text());
$span.on('keypress', function(e) { $span.on('keypress', function(e) {
@@ -1049,7 +1050,7 @@ function InputfieldImage($) {
//console.log('changed to: ' + val); //console.log('changed to: ' + val);
} }
$span.off('keypress'); $span.off('keypress');
$list.sortable('enable'); if(sortable) $list.sortable('enable');
}); });
}); });
} }

File diff suppressed because one or more lines are too long

View File

@@ -54,7 +54,7 @@ class InputfieldImage extends InputfieldFile implements InputfieldItemList, Inpu
return array( return array(
'title' => __('Images', __FILE__), // Module Title 'title' => __('Images', __FILE__), // Module Title
'summary' => __('One or more image uploads (sortable)', __FILE__), // Module Summary 'summary' => __('One or more image uploads (sortable)', __FILE__), // Module Summary
'version' => 123, 'version' => 124,
'permanent' => true, 'permanent' => true,
); );
} }