Merge branch 'master' of https://github.com/electerious/Lychee into uploader
Conflicts: assets/min/main.css assets/min/main.js assets/min/view.js
This commit is contained in:
commit
e4592190bc
@ -148,6 +148,9 @@
|
||||
.photo .overlay a {
|
||||
margin: 155px 0px 5px 15px;
|
||||
}
|
||||
.photo .overlay a span {
|
||||
margin: 0px 5px 0px 0px;
|
||||
}
|
||||
|
||||
/* Badges ------------------------------------------------*/
|
||||
.album .badge,
|
||||
@ -173,6 +176,10 @@
|
||||
.photo .badge.icon-share {
|
||||
padding: 12px 6px 3px 8px;
|
||||
}
|
||||
.album .badge.icon-time,
|
||||
.photo .badge.icon-time {
|
||||
padding: 12px 8px 3px 9px;
|
||||
}
|
||||
.album .badge::after,
|
||||
.photo .badge::after {
|
||||
content: "";
|
||||
@ -195,6 +202,10 @@
|
||||
.photo .badge.icon-share::after {
|
||||
margin-left: -31px;
|
||||
}
|
||||
.album .badge.icon-time::after,
|
||||
.photo .badge.icon-time::after {
|
||||
margin-left: -29px;
|
||||
}
|
||||
.album .badge.icon-reorder::after {
|
||||
margin-left: -30px;
|
||||
}
|
||||
|
@ -43,6 +43,7 @@
|
||||
height: 100%;
|
||||
width: 300px;
|
||||
overflow: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
#infobox .edit {
|
||||
display: inline;
|
||||
|
@ -18,6 +18,7 @@ album = {
|
||||
else id = $(".album:hover, .album.active").attr("data-id");
|
||||
|
||||
// Search
|
||||
if (!id) id = $(".album:hover, .album.active").attr("data-id");
|
||||
if (!id) id = $(".photo:hover, .photo.active").attr("data-album-id");
|
||||
|
||||
if (id) return id;
|
||||
@ -36,7 +37,7 @@ album = {
|
||||
|
||||
if (!refresh) {
|
||||
loadingBar.show();
|
||||
lychee.animate(".album, .photo", "contentZoomOut");
|
||||
lychee.animate(".album:nth-child(-n+50), .photo:nth-child(-n+50)", "contentZoomOut");
|
||||
lychee.animate(".divider", "fadeOut");
|
||||
}
|
||||
|
||||
@ -73,7 +74,7 @@ album = {
|
||||
view.album.init();
|
||||
|
||||
if (!refresh) {
|
||||
lychee.animate(".album, .photo", "contentZoomIn");
|
||||
lychee.animate(".album:nth-child(-n+50), .photo:nth-child(-n+50)", "contentZoomIn");
|
||||
view.header.mode("album");
|
||||
}
|
||||
|
||||
@ -87,8 +88,7 @@ album = {
|
||||
|
||||
parse: function(photo) {
|
||||
|
||||
if (photo&&photo.thumbUrl) photo.thumbUrl = lychee.upload_path_thumb + photo.thumbUrl;
|
||||
else if (!album.json.title) album.json.title = "Untitled";
|
||||
if (!album.json.title) album.json.title = "Untitled";
|
||||
|
||||
},
|
||||
|
||||
@ -201,6 +201,7 @@ album = {
|
||||
// Get old title if only one album is selected
|
||||
if (album.json) oldTitle = album.json.title;
|
||||
else if (albums.json) oldTitle = albums.json.content[albumIDs].title;
|
||||
if (!oldTitle) oldTitle = "";
|
||||
oldTitle = oldTitle.replace("'", "'");
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ albums = {
|
||||
durationTime,
|
||||
waitTime;
|
||||
|
||||
lychee.animate(".album, .photo", "contentZoomOut");
|
||||
lychee.animate(".album:nth-child(-n+50), .photo:nth-child(-n+50)", "contentZoomOut");
|
||||
lychee.animate(".divider", "fadeOut");
|
||||
|
||||
startTime = new Date().getTime();
|
||||
@ -53,6 +53,16 @@ albums = {
|
||||
thumb2: data.publicThumb2
|
||||
};
|
||||
|
||||
data.recentAlbum = {
|
||||
id: "r",
|
||||
title: "Recent",
|
||||
sysdate: data.recentNum + " photos",
|
||||
recent: 1,
|
||||
thumb0: data.recentThumb0,
|
||||
thumb1: data.recentThumb1,
|
||||
thumb2: data.recentThumb2
|
||||
};
|
||||
|
||||
albums.json = data;
|
||||
|
||||
durationTime = (new Date().getTime() - startTime);
|
||||
@ -64,7 +74,7 @@ albums = {
|
||||
|
||||
view.header.mode("albums");
|
||||
view.albums.init();
|
||||
lychee.animate(".album, .photo", "contentZoomIn");
|
||||
lychee.animate(".album:nth-child(-n+50), .photo:nth-child(-n+50)", "contentZoomIn");
|
||||
|
||||
}, waitTime);
|
||||
|
||||
@ -79,9 +89,9 @@ albums = {
|
||||
album.thumb1 = "assets/img/password.svg";
|
||||
album.thumb2 = "assets/img/password.svg";
|
||||
} else {
|
||||
if (album.thumb0) album.thumb0 = lychee.upload_path_thumb + album.thumb0; else album.thumb0 = "assets/img/no_images.svg";
|
||||
if (album.thumb1) album.thumb1 = lychee.upload_path_thumb + album.thumb1; else album.thumb1 = "assets/img/no_images.svg";
|
||||
if (album.thumb2) album.thumb2 = lychee.upload_path_thumb + album.thumb2; else album.thumb2 = "assets/img/no_images.svg";
|
||||
if (!album.thumb0) album.thumb0 = "assets/img/no_images.svg";
|
||||
if (!album.thumb1) album.thumb1 = "assets/img/no_images.svg";
|
||||
if (!album.thumb2) album.thumb2 = "assets/img/no_images.svg";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -54,9 +54,10 @@ build = {
|
||||
album += "<a>" + albumJSON.sysdate + "</a>";
|
||||
album += "</div>";
|
||||
|
||||
if(!lychee.publicMode&&albumJSON.star==1) album += "<a class='badge red icon-star'></a>";
|
||||
if(!lychee.publicMode&&albumJSON.public==1) album += "<a class='badge red icon-share'></a>";
|
||||
if(!lychee.publicMode&&albumJSON.unsorted==1) album += "<a class='badge red icon-reorder'></a>";
|
||||
if(!lychee.publicMode&&albumJSON.star===1) album += "<a class='badge red icon-star'></a>";
|
||||
if(!lychee.publicMode&&albumJSON.public===1) album += "<a class='badge red icon-share'></a>";
|
||||
if(!lychee.publicMode&&albumJSON.unsorted===1) album += "<a class='badge red icon-reorder'></a>";
|
||||
if(!lychee.publicMode&&albumJSON.recent===1) album += "<a class='badge red icon-time'></a>";
|
||||
|
||||
album += "</div>";
|
||||
|
||||
@ -81,7 +82,13 @@ build = {
|
||||
photo += "<img src='" + photoJSON.thumbUrl + "' width='200' height='200' alt='thumb'>";
|
||||
photo += "<div class='overlay'>";
|
||||
photo += "<h1 title='" + longTitle + "'>" + title + "</h1>";
|
||||
photo += "<a>" + photoJSON.sysdate + "</a>";
|
||||
|
||||
if (photoJSON.cameraDate==1) {
|
||||
photo += "<a><span class='icon-camera' title='Photo Date'></span>" + photoJSON.sysdate + "</a>";
|
||||
} else {
|
||||
photo += "<a>" + photoJSON.sysdate + "</a>";
|
||||
}
|
||||
|
||||
photo += "</div>";
|
||||
|
||||
if (photoJSON.star==1) photo += "<a class='badge red icon-star'></a>";
|
||||
|
@ -114,7 +114,7 @@ contextMenu = {
|
||||
mouse_y = e.pageY - $(document).scrollTop(),
|
||||
items;
|
||||
|
||||
if (albumID==="0"||albumID==="f"||albumID==="s") return false;
|
||||
if (albumID==="0"||albumID==="f"||albumID==="s"||albumID==="r") return false;
|
||||
|
||||
contextMenu.fns = [
|
||||
function() { album.setTitle([albumID]) },
|
||||
|
@ -8,17 +8,14 @@
|
||||
var lychee = {
|
||||
|
||||
title: "",
|
||||
version: "2.5 rc1",
|
||||
version_code: "020500",
|
||||
version: "2.5.5",
|
||||
version_code: "020505",
|
||||
|
||||
api_path: "php/api.php",
|
||||
update_path: "http://lychee.electerious.com/version/index.php",
|
||||
updateURL: "https://github.com/electerious/Lychee",
|
||||
website: "http://lychee.electerious.com",
|
||||
|
||||
upload_path_thumb: "uploads/thumb/",
|
||||
upload_path_big: "uploads/big/",
|
||||
|
||||
publicMode: false,
|
||||
viewMode: false,
|
||||
debugMode: false,
|
||||
|
@ -135,7 +135,7 @@ multiselect = {
|
||||
|
||||
id = $(this).data('id');
|
||||
|
||||
if (id!=='0'&&id!==0&&id!=='f'&&id!=='s'&&id!==null&id!==undefined) {
|
||||
if (id!=='0'&&id!==0&&id!=='f'&&id!=='s'&&id!=='r'&&id!==null&id!==undefined) {
|
||||
|
||||
ids.push(id);
|
||||
$(this).addClass('active');
|
||||
|
@ -52,7 +52,6 @@ photo = {
|
||||
parse: function() {
|
||||
|
||||
if (!photo.json.title) photo.json.title = "Untitled";
|
||||
photo.json.url = lychee.upload_path_big + photo.json.url;
|
||||
|
||||
},
|
||||
|
||||
|
@ -49,7 +49,7 @@ search = {
|
||||
|
||||
$(".no_content").remove();
|
||||
|
||||
lychee.animate(".album, .photo", "contentZoomOut");
|
||||
lychee.animate(".album:nth-child(-n+50), .photo:nth-child(-n+50)", "contentZoomOut");
|
||||
lychee.animate(".divider", "fadeOut");
|
||||
|
||||
search.code = md5(code);
|
||||
@ -59,7 +59,7 @@ search = {
|
||||
if (code==="error") $("body").append(build.no_content("search"));
|
||||
else {
|
||||
lychee.content.html(code);
|
||||
lychee.animate(".album, .photo", "contentZoomIn");
|
||||
lychee.animate(".album:nth-child(-n+50), .photo:nth-child(-n+50)", "contentZoomIn");
|
||||
$("img[data-type!='svg']").retina();
|
||||
}
|
||||
|
||||
@ -82,7 +82,12 @@ search = {
|
||||
|
||||
if (search.code!=="") {
|
||||
|
||||
// Trash data
|
||||
albums.json = null;
|
||||
album.json = null;
|
||||
photo.json = null;
|
||||
search.code = "";
|
||||
|
||||
lychee.animate(".divider", "fadeOut");
|
||||
albums.load();
|
||||
|
||||
|
@ -64,7 +64,7 @@ view = {
|
||||
$("#tools_albums, #tools_photo").hide();
|
||||
$("#tools_album").show();
|
||||
album.json.content === false ? $("#button_archive").hide() : $("#button_archive").show();
|
||||
if (albumID==="s"||albumID==="f") {
|
||||
if (albumID==="s"||albumID==="f"||albumID==="r") {
|
||||
$("#button_info_album, #button_trash_album, #button_share_album").hide();
|
||||
} else if (albumID==="0") {
|
||||
$("#button_info_album, #button_share_album").hide();
|
||||
@ -130,7 +130,8 @@ view = {
|
||||
albums.parse(albums.json.unsortedAlbum);
|
||||
albums.parse(albums.json.publicAlbum);
|
||||
albums.parse(albums.json.starredAlbum);
|
||||
if (!lychee.publicMode) smartData = build.divider("Smart Albums") + build.album(albums.json.unsortedAlbum) + build.album(albums.json.starredAlbum) + build.album(albums.json.publicAlbum);
|
||||
albums.parse(albums.json.recentAlbum);
|
||||
if (!lychee.publicMode) smartData = build.divider("Smart Albums") + build.album(albums.json.unsortedAlbum) + build.album(albums.json.starredAlbum) + build.album(albums.json.publicAlbum) + build.album(albums.json.recentAlbum);
|
||||
|
||||
/* Albums */
|
||||
if (albums.json.content) {
|
||||
@ -216,6 +217,9 @@ view = {
|
||||
case "s":
|
||||
lychee.setTitle("Public", false);
|
||||
break;
|
||||
case "r":
|
||||
lychee.setTitle("Recent", false);
|
||||
break;
|
||||
case "0":
|
||||
lychee.setTitle("Unsorted", false);
|
||||
break;
|
||||
@ -242,7 +246,6 @@ view = {
|
||||
var photosData = "";
|
||||
|
||||
$.each(album.json.content, function() {
|
||||
album.parse(this);
|
||||
photosData += build.photo(this);
|
||||
});
|
||||
lychee.content.html(photosData);
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,6 +1,15 @@
|
||||
## v2.5.5
|
||||
|
||||
Released July 5, 2014
|
||||
|
||||
- `New` Smart Album "Recent"
|
||||
- `New` Checksum of photo in database (#48)
|
||||
- `New` Show takedate in photo-overlay (when available)
|
||||
- `Improved` Permission check when running with the same UID (#174)
|
||||
|
||||
## v2.5
|
||||
|
||||
Released -
|
||||
Released June 24, 2014
|
||||
|
||||
- `New` Swipe gestures on mobile devices
|
||||
- `New` Plugin-System
|
||||
|
13
docs/FAQ.md
13
docs/FAQ.md
@ -18,12 +18,12 @@ If possible, change these settings directly in your `php.ini`. We recommend to i
|
||||
#### Which browsers are supported?
|
||||
Lychee supports the latest versions of Google Chrome, Apple Safari, Mozilla Firefox and Opera. Photos you share with others can be viewed from every browser.
|
||||
|
||||
#### How can I set thumbnails for my albums?
|
||||
Thumbnails are chosen automatically by the photos you have starred and in the order you uploaded them. Star a photo inside an album to set it as a thumbnail.
|
||||
|
||||
#### What is new?
|
||||
Take a look at the [Changelog](Changelog.md) to see what's new.
|
||||
|
||||
#### How can I set thumbnails for my albums?
|
||||
Thumbnails are chosen automatically by the photos you have starred and in the order you uploaded them. Star a photo inside an album to set it as a thumbnail.
|
||||
|
||||
#### How can I backup my installation?
|
||||
To backup your Lychee installation you need to do the following steps:
|
||||
|
||||
@ -42,5 +42,8 @@ No. Lychee has it's own folder-structure and database. Please upload or import a
|
||||
#### Can I upload videos?
|
||||
No. Video support is not planned.
|
||||
|
||||
#### What's the advantage of buying Lychee?
|
||||
Lychee is completely free to use for personal usage. However, if you like Lychee or want to use in commercially, you need to buy Lychee from [our site](http://lychee.electerious.com). I hope you appreciate my work and support further development by buying a license.
|
||||
#### Is it possible to create multiple users?
|
||||
[No, not yet.](https://github.com/electerious/Lychee/issues/132)
|
||||
|
||||
#### Blank screen when viewing a photo using iOS
|
||||
There's a problem with images compressed by ImageOptim. [Read more.](https://github.com/electerious/Lychee/issues/175#issuecomment-47403992)
|
||||
|
@ -61,7 +61,7 @@ if (!empty($_POST['function'])||!empty($_GET['function'])) {
|
||||
# Validate parameters
|
||||
if (isset($_POST['albumIDs'])&&preg_match('/^[0-9\,]{1,}$/', $_POST['albumIDs'])!==1) exit('Error: Wrong parameter type for albumIDs!');
|
||||
if (isset($_POST['photoIDs'])&&preg_match('/^[0-9\,]{1,}$/', $_POST['photoIDs'])!==1) exit('Error: Wrong parameter type for photoIDs!');
|
||||
if (isset($_POST['albumID'])&&preg_match('/^[0-9sf]{1,}$/', $_POST['albumID'])!==1) exit('Error: Wrong parameter type for albumID!');
|
||||
if (isset($_POST['albumID'])&&preg_match('/^[0-9sfr]{1,}$/', $_POST['albumID'])!==1) exit('Error: Wrong parameter type for albumID!');
|
||||
if (isset($_POST['photoID'])&&preg_match('/^[0-9]{14}$/', $_POST['photoID'])!==1) exit('Error: Wrong parameter type for photoID!');
|
||||
|
||||
# Function for switch statement
|
||||
|
@ -23,5 +23,6 @@ CREATE TABLE IF NOT EXISTS `lychee_photos` (
|
||||
`star` tinyint(1) NOT NULL,
|
||||
`thumbUrl` varchar(50) NOT NULL,
|
||||
`album` varchar(30) NOT NULL DEFAULT '0',
|
||||
`checksum` VARCHAR(100) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
25
php/database/update_020505.php
Normal file
25
php/database/update_020505.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
###
|
||||
# @name Update to version 2.5.5
|
||||
# @author Tobias Reich
|
||||
# @copyright 2014 by Tobias Reich
|
||||
###
|
||||
|
||||
# Add `checksum`
|
||||
if (!$database->query("SELECT `checksum` FROM `lychee_photos` LIMIT 1;")) {
|
||||
$result = $database->query("ALTER TABLE `lychee_photos` ADD `checksum` VARCHAR(100) DEFAULT NULL");
|
||||
if (!$result) {
|
||||
Log::error($database, 'update_020500', __LINE__, 'Could not update database (' . $database->error . ')');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
# Set version
|
||||
$result = $database->query("UPDATE lychee_settings SET value = '020505' WHERE `key` = 'version';");
|
||||
if (!$result) {
|
||||
Log::error($database, 'update_020505', __LINE__, 'Could not update database (' . $database->error . ')');
|
||||
return false;
|
||||
}
|
||||
|
||||
?>
|
@ -21,4 +21,8 @@ define('LYCHEE_PLUGINS', LYCHEE . 'plugins/');
|
||||
# Define files
|
||||
define('LYCHEE_CONFIG_FILE', LYCHEE_DATA . 'config.php');
|
||||
|
||||
# Define urls
|
||||
define('LYCHEE_URL_UPLOADS_THUMB', 'uploads/thumb/');
|
||||
define('LYCHEE_URL_UPLOADS_BIG', 'uploads/big/');
|
||||
|
||||
?>
|
@ -29,7 +29,7 @@ class Album extends Module {
|
||||
public function add($title = 'Untitled', $public = 0, $visible = 1) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database));
|
||||
self::dependencies(isset($this->database));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -55,7 +55,7 @@ class Album extends Module {
|
||||
public function get() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->settings, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->settings, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -64,22 +64,26 @@ class Album extends Module {
|
||||
switch ($this->albumIDs) {
|
||||
|
||||
case 'f': $return['public'] = false;
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl FROM lychee_photos WHERE star = 1 " . $this->settings['sorting'];
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl, takestamp FROM lychee_photos WHERE star = 1 " . $this->settings['sorting'];
|
||||
break;
|
||||
|
||||
case 's': $return['public'] = false;
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl FROM lychee_photos WHERE public = 1 " . $this->settings['sorting'];
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl, takestamp FROM lychee_photos WHERE public = 1 " . $this->settings['sorting'];
|
||||
break;
|
||||
|
||||
case 'r': $return['public'] = false;
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl, takestamp FROM lychee_photos WHERE LEFT(id, 10) >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 1 DAY)) " . $this->settings['sorting'];
|
||||
break;
|
||||
|
||||
case '0': $return['public'] = false;
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl FROM lychee_photos WHERE album = 0 " . $this->settings['sorting'];
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl, takestamp FROM lychee_photos WHERE album = 0 " . $this->settings['sorting'];
|
||||
break;
|
||||
|
||||
default: $albums = $this->database->query("SELECT * FROM lychee_albums WHERE id = '$this->albumIDs' LIMIT 1;");
|
||||
$return = $albums->fetch_assoc();
|
||||
$return['sysdate'] = date('d M. Y', $return['sysstamp']);
|
||||
$return['password'] = ($return['password']=='' ? false : true);
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl FROM lychee_photos WHERE album = '$this->albumIDs' " . $this->settings['sorting'];
|
||||
$query = "SELECT id, title, tags, public, star, album, thumbUrl, takestamp FROM lychee_photos WHERE album = '$this->albumIDs' " . $this->settings['sorting'];
|
||||
break;
|
||||
|
||||
}
|
||||
@ -92,7 +96,13 @@ class Album extends Module {
|
||||
# Parse
|
||||
$photo['sysdate'] = date('d F Y', substr($photo['id'], 0, -4));
|
||||
$photo['previousPhoto'] = $previousPhotoID;
|
||||
$photo['nextPhoto'] = '';
|
||||
$photo['nextPhoto'] = '';
|
||||
$photo['thumbUrl'] = LYCHEE_URL_UPLOADS_THUMB . $photo['thumbUrl'];
|
||||
|
||||
if ($photo['takestamp']!=='0') {
|
||||
$photo['cameraDate'] = 1;
|
||||
$photo['sysdate'] = date('d F Y', $photo['takestamp']);
|
||||
}
|
||||
|
||||
if ($previousPhotoID!=='') $return['content'][$previousPhotoID]['nextPhoto'] = $photo['id'];
|
||||
$previousPhotoID = $photo['id'];
|
||||
@ -135,7 +145,7 @@ class Album extends Module {
|
||||
public function getAll($public) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->settings, $public));
|
||||
self::dependencies(isset($this->database, $this->settings, $public));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -166,7 +176,7 @@ class Album extends Module {
|
||||
# For each thumb
|
||||
$k = 0;
|
||||
while ($thumb = $thumbs->fetch_object()) {
|
||||
$album["thumb$k"] = $thumb->thumbUrl;
|
||||
$album["thumb$k"] = LYCHEE_URL_UPLOADS_THUMB . $thumb->thumbUrl;
|
||||
$k++;
|
||||
}
|
||||
|
||||
@ -190,14 +200,14 @@ class Album extends Module {
|
||||
private function getSmartInfo() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->settings));
|
||||
self::dependencies(isset($this->database, $this->settings));
|
||||
|
||||
# Unsorted
|
||||
$unsorted = $this->database->query("SELECT thumbUrl FROM lychee_photos WHERE album = 0 " . $this->settings['sorting']);
|
||||
$i = 0;
|
||||
while($row = $unsorted->fetch_object()) {
|
||||
if ($i<3) {
|
||||
$return["unsortedThumb$i"] = $row->thumbUrl;
|
||||
$return["unsortedThumb$i"] = LYCHEE_URL_UPLOADS_THUMB . $row->thumbUrl;
|
||||
$i++;
|
||||
} else break;
|
||||
}
|
||||
@ -208,7 +218,7 @@ class Album extends Module {
|
||||
$i = 0;
|
||||
while($row2 = $public->fetch_object()) {
|
||||
if ($i<3) {
|
||||
$return["publicThumb$i"] = $row2->thumbUrl;
|
||||
$return["publicThumb$i"] = LYCHEE_URL_UPLOADS_THUMB . $row2->thumbUrl;
|
||||
$i++;
|
||||
} else break;
|
||||
}
|
||||
@ -219,12 +229,23 @@ class Album extends Module {
|
||||
$i = 0;
|
||||
while($row3 = $starred->fetch_object()) {
|
||||
if ($i<3) {
|
||||
$return["starredThumb$i"] = $row3->thumbUrl;
|
||||
$return["starredThumb$i"] = LYCHEE_URL_UPLOADS_THUMB . $row3->thumbUrl;
|
||||
$i++;
|
||||
} else break;
|
||||
}
|
||||
$return['starredNum'] = $starred->num_rows;
|
||||
|
||||
# Recent
|
||||
$recent = $this->database->query("SELECT thumbUrl FROM lychee_photos WHERE LEFT(id, 10) >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 1 DAY)) " . $this->settings['sorting']);
|
||||
$i = 0;
|
||||
while($row3 = $recent->fetch_object()) {
|
||||
if ($i<3) {
|
||||
$return["recentThumb$i"] = LYCHEE_URL_UPLOADS_THUMB . $row3->thumbUrl;
|
||||
$i++;
|
||||
} else break;
|
||||
}
|
||||
$return['recentNum'] = $recent->num_rows;
|
||||
|
||||
return $return;
|
||||
|
||||
}
|
||||
@ -232,7 +253,7 @@ class Album extends Module {
|
||||
public function getArchive() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -253,6 +274,10 @@ class Album extends Module {
|
||||
$photos = "SELECT title, url FROM lychee_photos WHERE star = '1';";
|
||||
$zipTitle = 'Starred';
|
||||
break;
|
||||
case 'r':
|
||||
$photos = "SELECT title, url FROM lychee_photos WHERE LEFT(id, 10) >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 1 DAY));";
|
||||
$zipTitle = 'Recent';
|
||||
break;
|
||||
default:
|
||||
$photos = "SELECT title, url FROM lychee_photos WHERE album = '$this->albumIDs';";
|
||||
$zipTitle = 'Unsorted';
|
||||
@ -346,7 +371,7 @@ class Album extends Module {
|
||||
public function setTitle($title = 'Untitled') {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -371,7 +396,7 @@ class Album extends Module {
|
||||
public function setDescription($description = '') {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -397,7 +422,7 @@ class Album extends Module {
|
||||
public function getPublic() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -419,7 +444,7 @@ class Album extends Module {
|
||||
public function setPublic($password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -463,7 +488,7 @@ class Album extends Module {
|
||||
public function setPassword($password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -497,7 +522,7 @@ class Album extends Module {
|
||||
public function checkPassword($password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -518,7 +543,7 @@ class Album extends Module {
|
||||
public function delete($albumIDs) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->albumIDs));
|
||||
self::dependencies(isset($this->database, $this->albumIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
|
@ -46,7 +46,8 @@ class Database extends Module {
|
||||
'020100', #2.1
|
||||
'020101', #2.1.1
|
||||
'020200', #2.2
|
||||
'020500' #2.5
|
||||
'020500', #2.5
|
||||
'020505' #2.5.5
|
||||
);
|
||||
|
||||
# For each update
|
||||
|
@ -26,7 +26,7 @@ class Module {
|
||||
|
||||
}
|
||||
|
||||
public function dependencies($available = false) {
|
||||
public static function dependencies($available = false) {
|
||||
|
||||
if ($available===false) exit('Error: Can not execute function. Missing parameters or variables.');
|
||||
|
||||
|
@ -41,7 +41,7 @@ class Photo extends Module {
|
||||
public function add($files, $albumID, $description = '', $tags = '') {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database));
|
||||
self::dependencies(isset($this->database));
|
||||
|
||||
# Check permissions
|
||||
if (hasPermissions(LYCHEE_UPLOADS_BIG)===false||hasPermissions(LYCHEE_UPLOADS_THUMB)===false) {
|
||||
@ -68,6 +68,13 @@ class Photo extends Module {
|
||||
$albumID = 0;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
# r for recent
|
||||
$public = 0;
|
||||
$star = 0;
|
||||
$albumID = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
$star = 0;
|
||||
$public = 0;
|
||||
@ -130,7 +137,7 @@ class Photo extends Module {
|
||||
}
|
||||
|
||||
# Save to DB
|
||||
$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)
|
||||
$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)
|
||||
VALUES (
|
||||
'" . $id . "',
|
||||
'" . $info['title'] . "',
|
||||
@ -151,7 +158,8 @@ class Photo extends Module {
|
||||
'" . md5($id) . ".jpeg',
|
||||
'" . $albumID . "',
|
||||
'" . $public . "',
|
||||
'" . $star . "');";
|
||||
'" . $star . "',
|
||||
'" . md5_file($path) . "');";
|
||||
$result = $this->database->query($query);
|
||||
|
||||
if (!$result) {
|
||||
@ -171,7 +179,7 @@ class Photo extends Module {
|
||||
private function createThumb($url, $filename, $width = 200, $height = 200) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->settings, $url, $filename));
|
||||
self::dependencies(isset($this->database, $this->settings, $url, $filename));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -255,7 +263,7 @@ class Photo extends Module {
|
||||
private function adjustFile($path, $info) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($path, $info));
|
||||
self::dependencies(isset($path, $info));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -369,7 +377,7 @@ class Photo extends Module {
|
||||
public function get($albumID) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -382,6 +390,9 @@ class Photo extends Module {
|
||||
$photo['sysdate'] = date('d M. Y', substr($photo['id'], 0, -4));
|
||||
if (strlen($photo['takestamp'])>1) $photo['takedate'] = date('d M. Y', $photo['takestamp']);
|
||||
|
||||
# Parse url
|
||||
$photo['url'] = LYCHEE_URL_UPLOADS_BIG . $photo['url'];
|
||||
|
||||
if ($albumID!='false') {
|
||||
|
||||
if ($photo['album']!=0) {
|
||||
@ -410,7 +421,7 @@ class Photo extends Module {
|
||||
private function getInfo($url) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $url));
|
||||
self::dependencies(isset($this->database, $url));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -504,7 +515,7 @@ class Photo extends Module {
|
||||
public function getArchive() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -541,7 +552,7 @@ class Photo extends Module {
|
||||
public function setTitle($title) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -566,7 +577,7 @@ class Photo extends Module {
|
||||
public function setDescription($description) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -592,7 +603,7 @@ class Photo extends Module {
|
||||
public function setStar() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -629,7 +640,7 @@ class Photo extends Module {
|
||||
public function getPublic($password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -657,7 +668,7 @@ class Photo extends Module {
|
||||
public function setPublic() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -686,7 +697,7 @@ class Photo extends Module {
|
||||
function setAlbum($albumID) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -708,7 +719,7 @@ class Photo extends Module {
|
||||
public function setTags($tags) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -738,7 +749,7 @@ class Photo extends Module {
|
||||
public function delete() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $this->photoIDs));
|
||||
self::dependencies(isset($this->database, $this->photoIDs));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
|
@ -25,7 +25,7 @@ class Session extends Module {
|
||||
public function init($database, $dbName, $public, $version) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->settings, $public, $version));
|
||||
self::dependencies(isset($this->settings, $public, $version));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
@ -75,7 +75,7 @@ class Session extends Module {
|
||||
public function login($username, $password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->settings, $username, $password));
|
||||
self::dependencies(isset($this->settings, $username, $password));
|
||||
|
||||
# Call plugins
|
||||
$this->plugins(__METHOD__, 0, func_get_args());
|
||||
|
@ -24,7 +24,7 @@ class Settings extends Module {
|
||||
public function get() {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database));
|
||||
self::dependencies(isset($this->database));
|
||||
|
||||
# Execute query
|
||||
$settings = $this->database->query('SELECT * FROM lychee_settings;');
|
||||
@ -42,7 +42,7 @@ class Settings extends Module {
|
||||
public function setLogin($oldPassword = '', $username, $password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database));
|
||||
self::dependencies(isset($this->database));
|
||||
|
||||
# Load settings
|
||||
$settings = $this->get();
|
||||
@ -66,7 +66,7 @@ class Settings extends Module {
|
||||
private function setUsername($username) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database));
|
||||
self::dependencies(isset($this->database));
|
||||
|
||||
# Parse
|
||||
$username = htmlentities($username);
|
||||
@ -89,7 +89,7 @@ class Settings extends Module {
|
||||
private function setPassword($password) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database));
|
||||
self::dependencies(isset($this->database));
|
||||
|
||||
$password = get_hashed_password($password);
|
||||
|
||||
@ -107,7 +107,7 @@ class Settings extends Module {
|
||||
public function setDropboxKey($key) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $key));
|
||||
self::dependencies(isset($this->database, $key));
|
||||
|
||||
if (strlen($key)<1||strlen($key)>50) {
|
||||
Log::notice($this->database, __METHOD__, __LINE__, 'Dropbox key is either too short or too long');
|
||||
@ -128,7 +128,7 @@ class Settings extends Module {
|
||||
public function setSorting($type, $order) {
|
||||
|
||||
# Check dependencies
|
||||
$this->dependencies(isset($this->database, $type, $order));
|
||||
self::dependencies(isset($this->database, $type, $order));
|
||||
|
||||
$sorting = 'ORDER BY ';
|
||||
|
||||
|
@ -120,6 +120,9 @@ function get_hashed_password($password) {
|
||||
|
||||
function hasPermissions($path, $permissions = '0777') {
|
||||
|
||||
/* assume that if running with the same uid as the owner of the directory it's ok */
|
||||
$stat = @stat($path);
|
||||
if ($stat && ($stat['uid'] == getmyuid())) return true;
|
||||
if (substr(sprintf('%o', @fileperms($path)), -4)!=$permissions) return false;
|
||||
else return true;
|
||||
|
||||
@ -157,4 +160,4 @@ function fastimagecopyresampled(&$dst_image, $src_image, $dst_x, $dst_y, $src_x,
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
|
Loading…
Reference in New Issue
Block a user