Duplicate photos by right-clicking them (#186)
This commit is contained in:
parent
c291ab35bf
commit
d686a2b083
@ -164,6 +164,7 @@ contextMenu = {
|
|||||||
function() { photo.setStar([photoID]) },
|
function() { photo.setStar([photoID]) },
|
||||||
function() { photo.editTags([photoID]) },
|
function() { photo.editTags([photoID]) },
|
||||||
function() { photo.setTitle([photoID]) },
|
function() { photo.setTitle([photoID]) },
|
||||||
|
function() { photo.duplicate([photoID]) },
|
||||||
function() { contextMenu.move([photoID], e, "right") },
|
function() { contextMenu.move([photoID], e, "right") },
|
||||||
function() { photo.delete([photoID]) }
|
function() { photo.delete([photoID]) }
|
||||||
];
|
];
|
||||||
@ -173,8 +174,9 @@ contextMenu = {
|
|||||||
["<a class='icon-tags'></a> Tags", 1],
|
["<a class='icon-tags'></a> Tags", 1],
|
||||||
["separator", -1],
|
["separator", -1],
|
||||||
["<a class='icon-edit'></a> Rename", 2],
|
["<a class='icon-edit'></a> Rename", 2],
|
||||||
["<a class='icon-folder-open'></a> Move", 3],
|
["<a class='icon-copy'></a> Duplicate", 3],
|
||||||
["<a class='icon-trash'></a> Delete", 4]
|
["<a class='icon-folder-open'></a> Move", 4],
|
||||||
|
["<a class='icon-trash'></a> Delete", 5]
|
||||||
];
|
];
|
||||||
|
|
||||||
contextMenu.show(items, mouse_x, mouse_y, "right");
|
contextMenu.show(items, mouse_x, mouse_y, "right");
|
||||||
@ -195,6 +197,7 @@ contextMenu = {
|
|||||||
function() { photo.setStar(photoIDs) },
|
function() { photo.setStar(photoIDs) },
|
||||||
function() { photo.editTags(photoIDs) },
|
function() { photo.editTags(photoIDs) },
|
||||||
function() { photo.setTitle(photoIDs) },
|
function() { photo.setTitle(photoIDs) },
|
||||||
|
function() { photo.duplicate(photoIDs) },
|
||||||
function() { contextMenu.move(photoIDs, e, "right") },
|
function() { contextMenu.move(photoIDs, e, "right") },
|
||||||
function() { photo.delete(photoIDs) }
|
function() { photo.delete(photoIDs) }
|
||||||
];
|
];
|
||||||
@ -204,8 +207,9 @@ contextMenu = {
|
|||||||
["<a class='icon-tags'></a> Tag All", 1],
|
["<a class='icon-tags'></a> Tag All", 1],
|
||||||
["separator", -1],
|
["separator", -1],
|
||||||
["<a class='icon-edit'></a> Rename All", 2],
|
["<a class='icon-edit'></a> Rename All", 2],
|
||||||
["<a class='icon-folder-open'></a> Move All", 3],
|
["<a class='icon-copy'></a> Duplicate All", 3],
|
||||||
["<a class='icon-trash'></a> Delete All", 4]
|
["<a class='icon-folder-open'></a> Move All", 4],
|
||||||
|
["<a class='icon-trash'></a> Delete All", 5]
|
||||||
];
|
];
|
||||||
|
|
||||||
contextMenu.show(items, mouse_x, mouse_y, "right");
|
contextMenu.show(items, mouse_x, mouse_y, "right");
|
||||||
|
@ -117,6 +117,23 @@ photo = {
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
duplicate: function(photoIDs) {
|
||||||
|
|
||||||
|
var params;
|
||||||
|
|
||||||
|
if (!photoIDs) return false;
|
||||||
|
if (photoIDs instanceof Array===false) photoIDs = [photoIDs];
|
||||||
|
|
||||||
|
params = "duplicatePhoto&photoIDs=" + photoIDs;
|
||||||
|
lychee.api(params, function(data) {
|
||||||
|
|
||||||
|
if (data!==true) lychee.error(null, params, data);
|
||||||
|
else album.load(album.getID(), false);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
delete: function(photoIDs) {
|
delete: function(photoIDs) {
|
||||||
|
|
||||||
var params,
|
var params,
|
||||||
|
File diff suppressed because one or more lines are too long
@ -32,6 +32,7 @@ class Admin extends Access {
|
|||||||
case 'setPhotoPublic': $this->setPhotoPublic(); break;
|
case 'setPhotoPublic': $this->setPhotoPublic(); break;
|
||||||
case 'setPhotoAlbum': $this->setPhotoAlbum(); break;
|
case 'setPhotoAlbum': $this->setPhotoAlbum(); break;
|
||||||
case 'setPhotoTags': $this->setPhotoTags(); break;
|
case 'setPhotoTags': $this->setPhotoTags(); break;
|
||||||
|
case 'duplicatePhoto': $this->duplicatePhoto(); break;
|
||||||
case 'deletePhoto': $this->deletePhoto(); break;
|
case 'deletePhoto': $this->deletePhoto(); break;
|
||||||
|
|
||||||
# Add functions
|
# Add functions
|
||||||
@ -181,6 +182,14 @@ class Admin extends Access {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function duplicatePhoto() {
|
||||||
|
|
||||||
|
Module::dependencies(isset($_POST['photoIDs']));
|
||||||
|
$photo = new Photo($this->database, $this->plugins, null, $_POST['photoIDs']);
|
||||||
|
echo $photo->duplicate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private function deletePhoto() {
|
private function deletePhoto() {
|
||||||
|
|
||||||
Module::dependencies(isset($_POST['photoIDs']));
|
Module::dependencies(isset($_POST['photoIDs']));
|
||||||
|
@ -818,6 +818,41 @@ class Photo extends Module {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function duplicate() {
|
||||||
|
|
||||||
|
# Check dependencies
|
||||||
|
self::dependencies(isset($this->database, $this->photoIDs));
|
||||||
|
|
||||||
|
# Call plugins
|
||||||
|
$this->plugins(__METHOD__, 0, func_get_args());
|
||||||
|
|
||||||
|
# Get photos
|
||||||
|
$photos = $this->database->query("SELECT id, checksum FROM lychee_photos WHERE id IN ($this->photoIDs);");
|
||||||
|
if (!$photos) {
|
||||||
|
Log::error($this->database, __METHOD__, __LINE__, $this->database->error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
# For each photo
|
||||||
|
while ($photo = $photos->fetch_object()) {
|
||||||
|
|
||||||
|
# Generate id
|
||||||
|
$id = str_replace('.', '', microtime(true));
|
||||||
|
while(strlen($id)<14) $id .= 0;
|
||||||
|
|
||||||
|
# Duplicate entry
|
||||||
|
$duplicate = $this->database->query("INSERT INTO lychee_photos(id, title, url, description, tags, type, width, height, size, iso, aperture, make, model, shutter, focal, takestamp, thumbUrl, album, public, star, checksum) SELECT '$id' AS id, title, url, description, tags, type, width, height, size, iso, aperture, make, model, shutter, focal, takestamp, thumbUrl, album, public, star, checksum FROM lychee_photos WHERE id = '$photo->id';");
|
||||||
|
if (!$duplicate) {
|
||||||
|
Log::error($this->database, __METHOD__, __LINE__, $this->database->error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function delete() {
|
public function delete() {
|
||||||
|
|
||||||
# Check dependencies
|
# Check dependencies
|
||||||
|
Loading…
Reference in New Issue
Block a user