Added album sorting #98
This commit is contained in:
parent
e64e29f81f
commit
90ac81acf1
BIN
dist/main.js
vendored
BIN
dist/main.js
vendored
Binary file not shown.
@ -279,9 +279,14 @@ class Admin extends Access {
|
|||||||
|
|
||||||
private function setSorting() {
|
private function setSorting() {
|
||||||
|
|
||||||
Module::dependencies(isset($_POST['type'], $_POST['order']));
|
Module::dependencies(isset($_POST['typeAlbums'], $_POST['orderAlbums'], $_POST['typePhotos'], $_POST['orderPhotos']));
|
||||||
$this->settings = new Settings($this->database);
|
$this->settings = new Settings($this->database);
|
||||||
echo $this->settings->setSorting($_POST['type'], $_POST['order']);
|
|
||||||
|
$sA = $this->settings->setSortingAlbums($_POST['typeAlbums'], $_POST['orderAlbums']);
|
||||||
|
$sP = $this->settings->setSortingPhotos($_POST['typePhotos'], $_POST['orderPhotos']);
|
||||||
|
|
||||||
|
if ($sA===true&&$sP===true) echo true;
|
||||||
|
else echo false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,18 @@ if (!$result) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add album sorting to settings
|
||||||
|
$query = Database::prepare($database, "SELECT `key` FROM `?` WHERE `key` = 'sortingAlbums' LIMIT 1", array(LYCHEE_TABLE_SETTINGS));
|
||||||
|
$result = $database->query($query);
|
||||||
|
if ($result->num_rows===0) {
|
||||||
|
$query = Database::prepare($database, "INSERT INTO `?` (`key`, `value`) VALUES ('sortingAlbums', 'ORDER BY id DESC')", array(LYCHEE_TABLE_SETTINGS));
|
||||||
|
$result = $database->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
Log::error($database, 'update_030001', __LINE__, 'Could not update database (' . $database->error . ')');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Set version
|
# Set version
|
||||||
if (Database::setVersion($database, '030001')===false) return false;
|
if (Database::setVersion($database, '030001')===false) return false;
|
||||||
|
|
||||||
|
@ -189,8 +189,8 @@ class Album extends Module {
|
|||||||
if ($public===false) $return['smartalbums'] = $this->getSmartInfo();
|
if ($public===false) $return['smartalbums'] = $this->getSmartInfo();
|
||||||
|
|
||||||
# Albums query
|
# Albums query
|
||||||
if ($public===false) $query = Database::prepare($this->database, 'SELECT id, title, public, sysstamp, password FROM ?', array(LYCHEE_TABLE_ALBUMS));
|
if ($public===false) $query = Database::prepare($this->database, 'SELECT id, title, public, sysstamp, password FROM ? ' . $this->settings['sortingAlbums'], array(LYCHEE_TABLE_ALBUMS));
|
||||||
else $query = Database::prepare($this->database, 'SELECT id, title, public, sysstamp, password FROM ? WHERE public = 1 AND visible <> 0', array(LYCHEE_TABLE_ALBUMS));
|
else $query = Database::prepare($this->database, 'SELECT id, title, public, sysstamp, password FROM ? WHERE public = 1 AND visible <> 0 ' . $this->settings['sortingAlbums'], array(LYCHEE_TABLE_ALBUMS));
|
||||||
|
|
||||||
# Execute query
|
# Execute query
|
||||||
$albums = $this->database->query($query);
|
$albums = $this->database->query($query);
|
||||||
|
@ -68,9 +68,12 @@ class Session extends Module {
|
|||||||
# Unset unused vars
|
# Unset unused vars
|
||||||
unset($return['config']['thumbQuality']);
|
unset($return['config']['thumbQuality']);
|
||||||
unset($return['config']['sorting']);
|
unset($return['config']['sorting']);
|
||||||
|
unset($return['config']['sortingAlbums']);
|
||||||
unset($return['config']['dropboxKey']);
|
unset($return['config']['dropboxKey']);
|
||||||
unset($return['config']['login']);
|
unset($return['config']['login']);
|
||||||
unset($return['config']['location']);
|
unset($return['config']['location']);
|
||||||
|
unset($return['config']['imagick']);
|
||||||
|
unset($return['config']['medium']);
|
||||||
unset($return['config']['plugins']);
|
unset($return['config']['plugins']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ class Settings extends Module {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setSorting($type, $order) {
|
public function setSortingPhotos($type, $order) {
|
||||||
|
|
||||||
# Check dependencies
|
# Check dependencies
|
||||||
self::dependencies(isset($this->database, $type, $order));
|
self::dependencies(isset($this->database, $type, $order));
|
||||||
@ -182,6 +182,7 @@ class Settings extends Module {
|
|||||||
# Execute query
|
# Execute query
|
||||||
# Do not prepare $sorting because it is a true statement
|
# Do not prepare $sorting because it is a true statement
|
||||||
# Preparing (escaping) the sorting would destroy it
|
# Preparing (escaping) the sorting would destroy it
|
||||||
|
# $sorting is save and can't contain user-input
|
||||||
$query = Database::prepare($this->database, "UPDATE ? SET value = '$sorting' WHERE `key` = 'sorting'", array(LYCHEE_TABLE_SETTINGS));
|
$query = Database::prepare($this->database, "UPDATE ? SET value = '$sorting' WHERE `key` = 'sorting'", array(LYCHEE_TABLE_SETTINGS));
|
||||||
$result = $this->database->query($query);
|
$result = $this->database->query($query);
|
||||||
|
|
||||||
@ -193,6 +194,62 @@ class Settings extends Module {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setSortingAlbums($type, $order) {
|
||||||
|
|
||||||
|
# Check dependencies
|
||||||
|
self::dependencies(isset($this->database, $type, $order));
|
||||||
|
|
||||||
|
$sorting = 'ORDER BY ';
|
||||||
|
|
||||||
|
# Set row
|
||||||
|
switch ($type) {
|
||||||
|
|
||||||
|
case 'id': $sorting .= 'id';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'title': $sorting .= 'title';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'description': $sorting .= 'description';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'public': $sorting .= 'public';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: exit('Error: Unknown type for sorting!');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$sorting .= ' ';
|
||||||
|
|
||||||
|
# Set order
|
||||||
|
switch ($order) {
|
||||||
|
|
||||||
|
case 'ASC': $sorting .= 'ASC';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'DESC': $sorting .= 'DESC';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: exit('Error: Unknown order for sorting!');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute query
|
||||||
|
# Do not prepare $sorting because it is a true statement
|
||||||
|
# Preparing (escaping) the sorting would destroy it
|
||||||
|
# $sorting is save and can't contain user-input
|
||||||
|
$query = Database::prepare($this->database, "UPDATE ? SET value = '$sorting' WHERE `key` = 'sortingAlbums'", array(LYCHEE_TABLE_SETTINGS));
|
||||||
|
$result = $this->database->query($query);
|
||||||
|
|
||||||
|
if (!$result) {
|
||||||
|
Log::error($this->database, __METHOD__, __LINE__, $this->database->error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -96,7 +96,7 @@ contextMenu.albumTitle = function(albumID, e) {
|
|||||||
|
|
||||||
title = "<img class='cover' width='16' height='16' src='" + that.thumbs[0] + "'><div class='title'>" + that.title + "</div>";
|
title = "<img class='cover' width='16' height='16' src='" + that.thumbs[0] + "'><div class='title'>" + that.title + "</div>";
|
||||||
|
|
||||||
if (that.id!=albumID) items.unshift({ type: 'item', title, fn: function() { lychee.goto(that.id) } });
|
if (that.id!=albumID) items.push({ type: 'item', title, fn: function() { lychee.goto(that.id) } });
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -127,9 +127,7 @@ contextMenu.mergeAlbum = function(albumID, e) {
|
|||||||
if (!that.thumbs[0]) that.thumbs[0] = 'src/images/no_cover.svg';
|
if (!that.thumbs[0]) that.thumbs[0] = 'src/images/no_cover.svg';
|
||||||
that.contextTitle = "<img class='cover' width='16' height='16' src='" + that.thumbs[0] + "'><div class='title'>" + that.title + "</div>";
|
that.contextTitle = "<img class='cover' width='16' height='16' src='" + that.thumbs[0] + "'><div class='title'>" + that.title + "</div>";
|
||||||
|
|
||||||
if (that.id!=album.getID()) {
|
if (that.id!=albumID) items.push({ type: 'item', title: that.contextTitle, fn: function() { album.merge([albumID, that.id]) } });
|
||||||
items.unshift({ type: 'item', title: that.contextTitle, fn: function() { album.merge([albumID, that.id]) } });
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -257,7 +255,7 @@ contextMenu.move = function(photoIDs, e) {
|
|||||||
if (!that.thumbs[0]) that.thumbs[0] = 'src/images/no_cover.svg';
|
if (!that.thumbs[0]) that.thumbs[0] = 'src/images/no_cover.svg';
|
||||||
that.title = "<img class='cover' width='16' height='16' src='" + that.thumbs[0] + "'><div class='title'>" + that.title + "</div>";
|
that.title = "<img class='cover' width='16' height='16' src='" + that.thumbs[0] + "'><div class='title'>" + that.title + "</div>";
|
||||||
|
|
||||||
if (that.id!=album.getID()) items.unshift({ type: 'item', title: that.title, fn: function() { photo.setAlbum(photoIDs, that.id) } });
|
if (that.id!=album.getID()) items.push({ type: 'item', title: that.title, fn: function() { photo.setAlbum(photoIDs, that.id) } });
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ lychee = {
|
|||||||
|
|
||||||
checkForUpdates:'1',
|
checkForUpdates:'1',
|
||||||
sorting: '',
|
sorting: '',
|
||||||
|
sortingAlbums: '',
|
||||||
location: '',
|
location: '',
|
||||||
|
|
||||||
dropbox: false,
|
dropbox: false,
|
||||||
@ -49,6 +50,7 @@ lychee.init = function() {
|
|||||||
// Logged in
|
// Logged in
|
||||||
|
|
||||||
lychee.sorting = data.config.sorting || '';
|
lychee.sorting = data.config.sorting || '';
|
||||||
|
lychee.sortingAlbums = data.config.sortingAlbums || '';
|
||||||
lychee.dropboxKey = data.config.dropboxKey || '';
|
lychee.dropboxKey = data.config.dropboxKey || '';
|
||||||
lychee.location = data.config.location || '';
|
lychee.location = data.config.location || '';
|
||||||
lychee.checkForUpdates = data.config.checkForUpdates || '1';
|
lychee.checkForUpdates = data.config.checkForUpdates || '1';
|
||||||
|
@ -281,7 +281,8 @@ settings.setLogin = function() {
|
|||||||
|
|
||||||
settings.setSorting = function() {
|
settings.setSorting = function() {
|
||||||
|
|
||||||
var sorting = [],
|
var sortingPhotos = [],
|
||||||
|
sortingAlbums = [],
|
||||||
action,
|
action,
|
||||||
msg = '';
|
msg = '';
|
||||||
|
|
||||||
@ -289,21 +290,27 @@ settings.setSorting = function() {
|
|||||||
|
|
||||||
var params;
|
var params;
|
||||||
|
|
||||||
sorting[0] = $('.basicModal select#settings_type').val();
|
sortingAlbums[0] = $('.basicModal select#settings_albums_type').val();
|
||||||
sorting[1] = $('.basicModal select#settings_order').val();
|
sortingAlbums[1] = $('.basicModal select#settings_albums_order').val();
|
||||||
|
|
||||||
|
sortingPhotos[0] = $('.basicModal select#settings_photos_type').val();
|
||||||
|
sortingPhotos[1] = $('.basicModal select#settings_photos_order').val();
|
||||||
|
|
||||||
basicModal.close();
|
basicModal.close();
|
||||||
albums.refresh();
|
albums.refresh();
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
type: sorting[0],
|
typeAlbums: sortingAlbums[0],
|
||||||
order: sorting[1]
|
orderAlbums: sortingAlbums[1],
|
||||||
|
typePhotos: sortingPhotos[0],
|
||||||
|
orderPhotos: sortingPhotos[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
api.post('Settings::setSorting', params, function(data) {
|
api.post('Settings::setSorting', params, function(data) {
|
||||||
|
|
||||||
if (data===true) {
|
if (data===true) {
|
||||||
lychee.sorting = 'ORDER BY ' + sorting[0] + ' ' + sorting[1];
|
lychee.sortingAlbums = 'ORDER BY ' + sortingAlbums[0] + ' ' + sortingAlbums[1];
|
||||||
|
lychee.sorting = 'ORDER BY ' + sortingPhotos[0] + ' ' + sortingPhotos[1];
|
||||||
lychee.load();
|
lychee.load();
|
||||||
} else lychee.error(null, params, data);
|
} else lychee.error(null, params, data);
|
||||||
|
|
||||||
@ -312,9 +319,24 @@ settings.setSorting = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
msg = `
|
msg = `
|
||||||
|
<p>
|
||||||
|
Sort albums by
|
||||||
|
<select id='settings_albums_type'>
|
||||||
|
<option value='id'>Creation Time</option>
|
||||||
|
<option value='title'>Title</option>
|
||||||
|
<option value='description'>Description</option>
|
||||||
|
<option value='public'>Public</option>
|
||||||
|
</select>
|
||||||
|
in an
|
||||||
|
<select id='settings_albums_order'>
|
||||||
|
<option value='ASC'>Ascending</option>
|
||||||
|
<option value='DESC'>Descending</option>
|
||||||
|
</select>
|
||||||
|
order.
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Sort photos by
|
Sort photos by
|
||||||
<select id='settings_type'>
|
<select id='settings_photos_type'>
|
||||||
<option value='id'>Upload Time</option>
|
<option value='id'>Upload Time</option>
|
||||||
<option value='takestamp'>Take Date</option>
|
<option value='takestamp'>Take Date</option>
|
||||||
<option value='title'>Title</option>
|
<option value='title'>Title</option>
|
||||||
@ -324,7 +346,7 @@ settings.setSorting = function() {
|
|||||||
<option value='type'>Photo Format</option>
|
<option value='type'>Photo Format</option>
|
||||||
</select>
|
</select>
|
||||||
in an
|
in an
|
||||||
<select id='settings_order'>
|
<select id='settings_photos_order'>
|
||||||
<option value='ASC'>Ascending</option>
|
<option value='ASC'>Ascending</option>
|
||||||
<option value='DESC'>Descending</option>
|
<option value='DESC'>Descending</option>
|
||||||
</select>
|
</select>
|
||||||
@ -346,12 +368,21 @@ settings.setSorting = function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (lychee.sortingAlbums!=='') {
|
||||||
|
|
||||||
|
sortingAlbums = lychee.sortingAlbums.replace('ORDER BY ', '').split(' ');
|
||||||
|
|
||||||
|
$('.basicModal select#settings_albums_type').val(sortingAlbums[0]);
|
||||||
|
$('.basicModal select#settings_albums_order').val(sortingAlbums[1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (lychee.sorting!=='') {
|
if (lychee.sorting!=='') {
|
||||||
|
|
||||||
sorting = lychee.sorting.replace('ORDER BY ', '').split(' ');
|
sortingPhotos = lychee.sorting.replace('ORDER BY ', '').split(' ');
|
||||||
|
|
||||||
$('.basicModal select#settings_type').val(sorting[0]);
|
$('.basicModal select#settings_photos_type').val(sortingPhotos[0]);
|
||||||
$('.basicModal select#settings_order').val(sorting[1]);
|
$('.basicModal select#settings_photos_order').val(sortingPhotos[1]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,9 +46,7 @@ view.albums = {
|
|||||||
|
|
||||||
$.each(albums.json.albums, function() {
|
$.each(albums.json.albums, function() {
|
||||||
albums.parse(this);
|
albums.parse(this);
|
||||||
|
albumsData += build.album(this);
|
||||||
// Display albums in reverse order
|
|
||||||
albumsData = build.album(this) + albumsData;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add divider
|
// Add divider
|
||||||
|
Loading…
Reference in New Issue
Block a user