EditAsset: allow changing an asset's parent album
This commit is contained in:
parent
44c6bf5914
commit
0c861bf976
@ -31,6 +31,25 @@ class EditAsset extends HTMLController
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get a list of available photo albums
|
||||||
|
$allAlbums = [];
|
||||||
|
foreach (PhotoAlbum::getHierarchy('tag', 'up') as $album)
|
||||||
|
$allAlbums[$album['id_tag']] = $album['tag'];
|
||||||
|
|
||||||
|
// Figure out the current album id
|
||||||
|
$currentAlbumId = 0;
|
||||||
|
$currentAlbumSlug = '';
|
||||||
|
$currentTags = $asset->getTags();
|
||||||
|
foreach ($currentTags as $tag)
|
||||||
|
{
|
||||||
|
if ($tag->kind === 'Album')
|
||||||
|
{
|
||||||
|
$currentAlbumId = $tag->id_tag;
|
||||||
|
$currentAlbumSlug = $tag->slug;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($_POST))
|
if (!empty($_POST))
|
||||||
{
|
{
|
||||||
if (isset($_GET['updatethumb']))
|
if (isset($_GET['updatethumb']))
|
||||||
@ -48,6 +67,26 @@ class EditAsset extends HTMLController
|
|||||||
$asset->setKeyData(htmlspecialchars($_POST['title']), $slug, $date_captured, intval($_POST['priority']));
|
$asset->setKeyData(htmlspecialchars($_POST['title']), $slug, $date_captured, intval($_POST['priority']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Changing parent album?
|
||||||
|
if ($_POST['id_album'] != $currentAlbumId)
|
||||||
|
{
|
||||||
|
$targetAlbum = Tag::fromId($_POST['id_album']);
|
||||||
|
|
||||||
|
// First move the asset, then sort out the album tag
|
||||||
|
if (($retCode = $asset->moveToSubDir($targetAlbum->slug)) === true)
|
||||||
|
{
|
||||||
|
if (!isset($_POST['tag']))
|
||||||
|
$_POST['tag'] = [];
|
||||||
|
|
||||||
|
// Unset tag for current parent album
|
||||||
|
if (isset($_POST['tag'][$currentAlbumId]))
|
||||||
|
unset($_POST['tag'][$currentAlbumId]);
|
||||||
|
|
||||||
|
// Set tag for new parent album
|
||||||
|
$_POST['tag'][$_POST['id_album']] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle tags
|
// Handle tags
|
||||||
$new_tags = [];
|
$new_tags = [];
|
||||||
if (isset($_POST['tag']) && is_array($_POST['tag']))
|
if (isset($_POST['tag']) && is_array($_POST['tag']))
|
||||||
@ -98,10 +137,13 @@ class EditAsset extends HTMLController
|
|||||||
header('Location: ' . BASEURL . '/editasset/?id=' . $asset->getId());
|
header('Location: ' . BASEURL . '/editasset/?id=' . $asset->getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get list of thumbnails
|
$page = new EditAssetForm([
|
||||||
$thumbs = $this->getThumbs($asset);
|
'asset' => $asset,
|
||||||
|
'thumbs' => $this->getThumbs($asset),
|
||||||
|
'allAlbums' => $allAlbums,
|
||||||
|
'currentAlbumId' => $currentAlbumId,
|
||||||
|
]);
|
||||||
|
|
||||||
$page = new EditAssetForm($asset, $thumbs);
|
|
||||||
parent::__construct('Edit asset \'' . $asset->getTitle() . '\' (' . $asset->getFilename() . ') - ' . SITE_TITLE);
|
parent::__construct('Edit asset \'' . $asset->getTitle() . '\' (' . $asset->getFilename() . ') - ' . SITE_TITLE);
|
||||||
$this->page->adopt($page);
|
$this->page->adopt($page);
|
||||||
}
|
}
|
||||||
|
@ -398,6 +398,45 @@ class Asset
|
|||||||
return $this->id_user_uploaded == $user->getUserId();
|
return $this->id_user_uploaded == $user->getUserId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function moveToSubDir($destSubDir)
|
||||||
|
{
|
||||||
|
// Verify the original exists
|
||||||
|
$source = ASSETSDIR . '/' . $this->subdir . '/' . $this->filename;
|
||||||
|
if (!file_exists($source))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Ensure the intended target file doesn't exist yet
|
||||||
|
$destDir = ASSETSDIR . '/' . $destSubDir;
|
||||||
|
$destFile = $destDir . '/' . $this->filename;
|
||||||
|
|
||||||
|
if (file_exists($destFile))
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
// Can we write to the target directory?
|
||||||
|
if (!is_writable($destDir))
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
// Perform move
|
||||||
|
if (rename($source, $destFile))
|
||||||
|
{
|
||||||
|
$this->subdir = $destSubDir;
|
||||||
|
$this->slug = $this->subdir . '/' . $this->title;
|
||||||
|
Registry::get('db')->query('
|
||||||
|
UPDATE assets
|
||||||
|
SET subdir = {string:subdir},
|
||||||
|
slug = {string:slug}
|
||||||
|
WHERE id_asset = {int:id_asset}',
|
||||||
|
[
|
||||||
|
'id_asset' => $this->id_asset,
|
||||||
|
'subdir' => $this->subdir,
|
||||||
|
'slug' => $this->slug,
|
||||||
|
]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -4;
|
||||||
|
}
|
||||||
|
|
||||||
public function replaceFile($filename)
|
public function replaceFile($filename)
|
||||||
{
|
{
|
||||||
// No filename? Abort!
|
// No filename? Abort!
|
||||||
|
@ -8,13 +8,17 @@
|
|||||||
|
|
||||||
class EditAssetForm extends Template
|
class EditAssetForm extends Template
|
||||||
{
|
{
|
||||||
|
private $allAlbums;
|
||||||
private $asset;
|
private $asset;
|
||||||
|
private $currentAlbumId;
|
||||||
private $thumbs;
|
private $thumbs;
|
||||||
|
|
||||||
public function __construct(Asset $asset, array $thumbs = [])
|
public function __construct(array $options)
|
||||||
{
|
{
|
||||||
$this->asset = $asset;
|
$this->allAlbums = $options['allAlbums'];
|
||||||
$this->thumbs = $thumbs;
|
$this->asset = $options['asset'];
|
||||||
|
$this->currentAlbumId = $options['currentAlbumId'];
|
||||||
|
$this->thumbs = $options['thumbs'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function html_main()
|
public function html_main()
|
||||||
@ -67,6 +71,21 @@ class EditAssetForm extends Template
|
|||||||
<div class="content-box key_info">
|
<div class="content-box key_info">
|
||||||
<h3>Key info</h3>
|
<h3>Key info</h3>
|
||||||
|
|
||||||
|
<div class="row mb-2">
|
||||||
|
<label class="col-form-label col-sm-3">Album:</label>
|
||||||
|
<div class="col-sm">
|
||||||
|
<select class="form-select" name="id_album">';
|
||||||
|
|
||||||
|
foreach ($this->allAlbums as $id_album => $album)
|
||||||
|
echo '
|
||||||
|
<option value="', $id_album, '"',
|
||||||
|
$this->currentAlbumId == $id_album ? ' selected' : '',
|
||||||
|
'>', htmlspecialchars($album), '</option>';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<label class="col-form-label col-sm-3">Title (internal):</label>
|
<label class="col-form-label col-sm-3">Title (internal):</label>
|
||||||
<div class="col-sm">
|
<div class="col-sm">
|
||||||
|
Loading…
Reference in New Issue
Block a user