functions.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. <?php
  2. /**
  3. * @name functions.php
  4. * @author Philipp Maurer
  5. * @author Tobias Reich
  6. * @copyright 2013 by Philipp Maurer, Tobias Reich
  7. */
  8. if (!defined('LYCHEE')) die('Direct access is not allowed!');
  9. // Database Functions
  10. function dbConnect() {
  11. global $db, $dbUser, $dbPassword, $dbHost;
  12. $database = new mysqli($dbHost, $dbUser, $dbPassword);
  13. if (mysqli_connect_errno() != 0) {
  14. echo mysqli_connect_errno().': '.mysqli_connect_error();
  15. return false;
  16. }
  17. if (!$database->select_db($db)) {
  18. createDatabase($db, $database);
  19. }
  20. $query = "SELECT * FROM lychee_photos, lychee_albums;";
  21. if (!$database->query($query)) createTables($database);
  22. return $database;
  23. }
  24. function dbClose() {
  25. global $database;
  26. if (!$database->close()) {
  27. echo "Closing the connection failed!";
  28. return false;
  29. }
  30. return true;
  31. }
  32. function createDatabase($db, $database) {
  33. $result = $database->query("CREATE DATABASE IF NOT EXISTS $db;");
  34. $database->select_db($db);
  35. if (!$result) return false;
  36. return true;
  37. }
  38. function createTables($database) {
  39. $query = "CREATE TABLE IF NOT EXISTS `lychee_albums` (
  40. `id` int(11) NOT NULL AUTO_INCREMENT,
  41. `title` varchar(50) NOT NULL,
  42. `sysdate` varchar(10) NOT NULL,
  43. `public` TINYINT(1) DEFAULT '0',
  44. `password` VARCHAR(100),
  45. PRIMARY KEY (`id`)
  46. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";
  47. $result = $database->query($query);
  48. if (!$result) return false;
  49. $query = "CREATE TABLE `lychee_photos` (
  50. `id` bigint(14) NOT NULL,
  51. `title` varchar(50) NOT NULL,
  52. `description` varchar(160) NOT NULL,
  53. `url` varchar(100) NOT NULL,
  54. `public` tinyint(1) NOT NULL,
  55. `type` varchar(10) NOT NULL,
  56. `width` int(11) NOT NULL,
  57. `height` int(11) NOT NULL,
  58. `size` varchar(10) NOT NULL,
  59. `sysdate` varchar(10) NOT NULL,
  60. `systime` varchar(8) NOT NULL,
  61. `iso` varchar(15) NOT NULL,
  62. `aperture` varchar(10) NOT NULL,
  63. `make` varchar(20) NOT NULL,
  64. `model` varchar(50) NOT NULL,
  65. `shutter` varchar(10) NOT NULL,
  66. `focal` varchar(10) NOT NULL,
  67. `takedate` varchar(10) NOT NULL,
  68. `taketime` varchar(8) NOT NULL,
  69. `star` tinyint(1) NOT NULL,
  70. `thumbUrl` varchar(50) NOT NULL,
  71. `album` varchar(30) NOT NULL DEFAULT '0',
  72. `import_name` varchar(100) DEFAULT '',
  73. PRIMARY KEY (`id`)
  74. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;";
  75. $result = $database->query($query);
  76. if (!$result) return false;
  77. return true;
  78. }
  79. // Upload Functions
  80. function upload($files, $albumID) {
  81. global $database;
  82. switch($albumID) {
  83. // s for public (share)
  84. case 's':
  85. $public = 1;
  86. $star = 0;
  87. $albumID = 0;
  88. break;
  89. // f for starred (fav)
  90. case 'f':
  91. $star = 1;
  92. $public = 0;
  93. $albumID = 0;
  94. break;
  95. default:
  96. $star = 0;
  97. $public = 0;
  98. }
  99. foreach ($files as $file) {
  100. $id = str_replace('.', '', microtime(true));
  101. while(strlen($id)<14) $id .= 0;
  102. $tmp_name = $file["tmp_name"];
  103. $type = getimagesize($tmp_name);
  104. if (($type[2]!=1)&&($type[2]!=2)&&($type[2]!=3)) return false;
  105. $data = $file["name"];
  106. $data = explode('.',$data);
  107. $data = array_reverse ($data);
  108. $data = $data[0];
  109. // Import if not uploaded via web
  110. if (!is_uploaded_file($file)) {
  111. if (copy($tmp_name, "../uploads/big/" . md5($id) . ".$data")) {
  112. unlink($tmp_name);
  113. $import_name = $tmp_name;
  114. }
  115. } else {
  116. move_uploaded_file($tmp_name, "../uploads/big/" . md5($id) . ".$data");
  117. $import_name = "";
  118. }
  119. // Create Thumb
  120. createThumb(md5($id).".".$data);
  121. // Read infos
  122. $info = getCamera(md5($id).".".$data);
  123. $title = "";
  124. if (isset($info['type'])){$type=$info['type'];} else {$type="";}
  125. if (isset($info['width'])){$width=$info['width'];} else {$width="";}
  126. if (isset($info['height'])){$height=$info['height'] OR "";} else {$height="";}
  127. if (isset($info['size'])){$size=$info['size'] OR "";} else {$size="";}
  128. if (isset($info['date'])){$sysdate=$info['date'];} else {$sysdate="";}
  129. if (isset($info['time'])){$systime=$info['time'];} else {$systime="";}
  130. if (isset($info['iso'])){$iso=$info['iso'];} else {$iso="";}
  131. if (isset($info['aperture'])){$aperture=$info['aperture'];} else {$aperture="";}
  132. if (isset($info['make'])){$make=$info['make'];} else {$make="";}
  133. if (isset($info['model'])){$model=$info['model'] OR "";} else {$model="";}
  134. if (isset($info['shutter'])){$shutter=$info['shutter'];} else {$shutter="";}
  135. if (isset($info['focal'])){$focal=$info['focal'];} else {$focal="";}
  136. if (isset($info['takeDate'])){$takeDate=$info['takeDate'];} else {$takeDate="";}
  137. if (isset($info['takeTime'])){$takeTime=$info['takeTime'];} else {$takeTime="";}
  138. $query = "INSERT INTO lychee_photos (id, title, url, type, width, height, size, sysdate, systime, iso, aperture, make, model, shutter, focal, takedate, taketime, thumbUrl, album, public, star, import_name)
  139. VALUES ('$id', '$title', '" . md5($id) . ".$data', '$type', '$width', '$height', '$size', '$sysdate', '$systime', '$iso', '$aperture', '$make', '$model', '$shutter', '$focal', '$takeDate', '$takeTime', '" . md5($id) . ".$data', '$albumID', '$public', '$star', '$import_name');";
  140. $result = $database->query($query);
  141. }
  142. return true;
  143. }
  144. function getCamera($filename) {
  145. global $database;
  146. $url = "../uploads/big/$filename";
  147. $type = getimagesize($url);
  148. $type = $type['mime'];
  149. if (($type == "image/jpeg") && function_exists('exif_read_data') ){
  150. $exif = exif_read_data($url, "EXIF", 0);
  151. // General information
  152. $return['name'] = $exif['FileName'];
  153. $generalInfos = getimagesize($url);
  154. $return['type'] = $generalInfos['mime'];
  155. $return['width'] = $generalInfos[0];
  156. $return['height'] = $generalInfos[1];
  157. $size = (filesize($url) / 1024);
  158. if ($size >= 1024){$size=round($size/1024,1)." MB";} else {$size=round($size,1)." KB";}
  159. $return['size'] = $size;
  160. $return['date'] = date("d.m.Y",filectime($url));
  161. $return['time'] = date("H:i:s",filectime($url));
  162. // Camera Information
  163. if (isset($exif['ISOSpeedRatings'])){$return['iso']="ISO-".$exif['ISOSpeedRatings'];}
  164. if (isset($exif['COMPUTED']['ApertureFNumber'])){$return['aperture']=$exif['COMPUTED']['ApertureFNumber'];}
  165. if (isset($exif['Make'])){$return['make']=$exif['Make'];}
  166. if (isset($exif['Model'])){$return['model']=$exif['Model'];}
  167. if (isset($exif['ExposureTime'])){$return['shutter']=$exif['ExposureTime']." Sek.";}
  168. if (isset($exif['FocalLength'])){$return['focal']=($exif['FocalLength']/1)." mm";}
  169. if (isset($exif['Software'])){$return['software']=$exif['Software'];}
  170. if (isset($exif['DateTimeOriginal'])) {
  171. $exifDate = explode(" ",$exif['DateTimeOriginal']);
  172. $date = explode(":", $exifDate[0]); $return['takeDate'] = $date[2].".".$date[1].".".$date[0];
  173. $return['takeTime'] = $exifDate[1];
  174. }
  175. } else {
  176. $exif = getimagesize($url);
  177. $return['type'] = $exif['mime'];
  178. $return['width'] = $exif[0];
  179. $return['height'] = $exif[1];
  180. $size = (filesize($url) / 1024);
  181. if ($size >= 1024){$size=round($size/1024,1)." MB";} else {$size=round($size,1)." KB";}
  182. $return['size'] = $size;
  183. $return['date'] = date("d.m.Y",filectime($url));
  184. $return['time'] = date("H:i:s",filectime($url));
  185. }
  186. return $return;
  187. }
  188. function createThumb($filename, $width = 200, $width2x = 400, $height = 200, $height2x = 400) {
  189. global $database, $thumbQuality;
  190. $photoUrl = "../uploads/big/$filename";
  191. $newUrl = "../uploads/thumb/$filename";
  192. $thumbPhotoName = explode(".", $filename);
  193. $newUrl2x = "../uploads/thumb/".$thumbPhotoName[0]."@2x.".$thumbPhotoName[1];
  194. $oldImg = getimagesize($photoUrl);
  195. $type = $oldImg['mime'];
  196. // Set position and size
  197. $thumb = imagecreatetruecolor($width, $height);
  198. $thumb2x = imagecreatetruecolor($width2x, $height2x);
  199. if ($oldImg[0]<$oldImg[1]) {
  200. $newSize = $oldImg[0];
  201. $startWidth = 0;
  202. $startHeight = $oldImg[1]/2 - $oldImg[0]/2;
  203. } else {
  204. $newSize = $oldImg[1];
  205. $startWidth = $oldImg[0]/2 - $oldImg[1]/2;
  206. $startHeight = 0;
  207. }
  208. // Create new image
  209. switch($type) {
  210. case "image/jpeg": $sourceImg = imagecreatefromjpeg($photoUrl); break;
  211. case "image/png": $sourceImg = imagecreatefrompng($photoUrl); break;
  212. case "image/gif": $sourceImg = imagecreatefromgif($photoUrl); break;
  213. default: return false;
  214. }
  215. imagecopyresampled($thumb,$sourceImg,0,0,$startWidth,$startHeight,$width,$height,$newSize,$newSize);
  216. imagecopyresampled($thumb2x,$sourceImg,0,0,$startWidth,$startHeight,$width2x,$height2x,$newSize,$newSize);
  217. switch($type) {
  218. case "image/jpeg": imagejpeg($thumb,$newUrl,$thumbQuality); imagejpeg($thumb2x,$newUrl2x,$thumbQuality); break;
  219. case "image/png": imagepng($thumb,$newUrl); imagepng($thumb2x,$newUrl2x); break;
  220. case "image/gif": imagegif($thumb,$newUrl); imagegif($thumb2x,$newUrl2x); break;
  221. default: return false;
  222. }
  223. return true;
  224. }
  225. // Session Functions
  226. function init($mode) {
  227. global $checkForUpdates;
  228. $return["config"]["checkForUpdates"] = $checkForUpdates;
  229. if ($mode=="admin") $return["loggedIn"] = true;
  230. else $return["loggedIn"] = false;
  231. return $return;
  232. }
  233. function login($loginUser, $loginPassword) {
  234. global $database, $user, $password;
  235. if ($loginUser==$user&&$loginPassword==md5($password)) {
  236. // Admin Login
  237. $_SESSION['login'] = true;
  238. return true;
  239. } else {
  240. return false;
  241. }
  242. }
  243. function logout() {
  244. session_destroy();
  245. return true;
  246. }
  247. // Album Functions
  248. function addAlbum($title) {
  249. global $database;
  250. $title = mysqli_real_escape_string($database, urldecode($title));
  251. if (strlen($title)<1||strlen($title)>30) return false;
  252. $sysdate = date("d.m.Y");
  253. $query = "INSERT INTO lychee_albums (title, sysdate) VALUES ('$title', '$sysdate');";
  254. $result = $database->query($query);
  255. if (!$result) return false;
  256. return $database->insert_id;
  257. }
  258. function getAlbums($public) {
  259. global $database, $sorting;
  260. // Smart Albums
  261. if (!$public) $return = getSmartInfo();
  262. // Albums
  263. if ($public) $query = "SELECT * FROM lychee_albums WHERE public = 1 ORDER BY id $sorting;";
  264. else $query = "SELECT * FROM lychee_albums ORDER BY id $sorting;";
  265. $result = $database->query($query) OR die("Error: $result <br>".$database->error);
  266. $i=0;
  267. while($row = $result->fetch_object()) {
  268. $return["content"][$row->id]['id'] = $row->id;
  269. $return["content"][$row->id]['title'] = $row->title;
  270. $return["content"][$row->id]['public'] = $row->public;
  271. $return["content"][$row->id]['sysdate'] = $row->sysdate;
  272. if ($row->password=="") $return["content"][$row->id]['password'] = false;
  273. else $return["content"][$row->id]['password'] = true;
  274. // Thumbs
  275. if (($public&&$row->password=="")||(!$public)) {
  276. $albumID = $row->id;
  277. $query = "SELECT thumbUrl FROM lychee_photos WHERE album = '$albumID' ORDER BY id $sorting LIMIT 0, 3;";
  278. $result2 = $database->query($query);
  279. $k = 0;
  280. while($row2 = $result2->fetch_object()){
  281. $return["content"][$row->id]["thumb$k"] = $row2->thumbUrl;
  282. $k++;
  283. }
  284. if (!isset($return["content"][$row->id]["thumb0"])) $return["content"][$row->id]["thumb0"]="";
  285. if (!isset($return["content"][$row->id]["thumb1"])) $return["content"][$row->id]["thumb1"]="";
  286. if (!isset($return["content"][$row->id]["thumb2"])) $return["content"][$row->id]["thumb2"]="";
  287. }
  288. $i++;
  289. }
  290. if ($i==0) $return["albums"] = false;
  291. else $return["albums"] = true;
  292. return $return;
  293. }
  294. function getAlbum($albumID) {
  295. global $database, $sorting;
  296. switch($albumID) {
  297. case "f":
  298. $return['public'] = false;
  299. $query = "SELECT id, title, sysdate, public, star, album, thumbUrl FROM lychee_photos WHERE star = 1 ORDER BY id $sorting;";
  300. break;
  301. case "s":
  302. $return['public'] = false;
  303. $query = "SELECT id, title, sysdate, public, star, album, thumbUrl FROM lychee_photos WHERE public = 1 ORDER BY id $sorting;";
  304. break;
  305. case 0:
  306. $return['public'] = false;
  307. $query = "SELECT id, title, sysdate, public, star, album, thumbUrl FROM lychee_photos WHERE album = 0 ORDER BY id $sorting;";
  308. default:
  309. $result = $database->query("SELECT title, public, password FROM lychee_albums WHERE id = '$albumID';");
  310. $row = $result->fetch_object();
  311. $return['title'] = $row->title;
  312. $return['public'] = $row->public;
  313. if ($row->password=="") $return['password'] = false;
  314. else $return['password'] = true;
  315. $query = "SELECT id, title, sysdate, public, star, album, thumbUrl FROM lychee_photos WHERE album = '$albumID' ORDER BY id $sorting;";
  316. break;
  317. }
  318. $result = $database->query($query);
  319. $i = 0;
  320. while($row = $result->fetch_array()) {
  321. $return['content'][$row['id']] = $row;
  322. $i++;
  323. }
  324. if ($i==0) $return['content'] = false;
  325. $return['id'] = $albumID;
  326. $return['num'] = $i;
  327. return $return;
  328. }
  329. function getSmartInfo() {
  330. global $database, $sorting;
  331. // Unsorted
  332. $query = "SELECT * FROM lychee_photos WHERE album = 0 ORDER BY id $sorting;";
  333. $result = $database->query($query);
  334. $i = 0;
  335. while($row = $result->fetch_object()) {
  336. if ($i<3) $return["unsortedThumb$i"] = $row->thumbUrl;
  337. $i++;
  338. }
  339. $return['unsortedNum'] = $i;
  340. // Public
  341. $query2 = "SELECT * FROM lychee_photos WHERE public = 1 ORDER BY id $sorting;";
  342. $result2 = $database->query($query2);
  343. $i = 0;
  344. while($row2 = $result2->fetch_object()) {
  345. if ($i<3) $return["publicThumb$i"] = $row2->thumbUrl;
  346. $i++;
  347. }
  348. $return['publicNum'] = $i;
  349. // Starred
  350. $query3 = "SELECT * FROM lychee_photos WHERE star = 1 ORDER BY id $sorting;";
  351. $result3 = $database->query($query3);
  352. $i = 0;
  353. while($row3 = $result3->fetch_object()) {
  354. if ($i<3) $return["starredThumb$i"] = $row3->thumbUrl;
  355. $i++;
  356. }
  357. $return['starredNum'] = $i;
  358. return $return;
  359. }
  360. function setAlbumTitle($albumID, $title) {
  361. global $database;
  362. $title = mysqli_real_escape_string($database, urldecode($title));
  363. if (strlen($title)<1||strlen($title)>30) return false;
  364. $query = "UPDATE lychee_albums SET title = '$title' WHERE id = '$albumID';";
  365. $result = $database->query($query);
  366. if (!$result) return false;
  367. return true;
  368. }
  369. function deleteAlbum($albumID, $delAll) {
  370. global $database;
  371. if ($delAll=="true") {
  372. $query = "SELECT id FROM lychee_photos WHERE album = '$albumID';";
  373. $result = $database->query($query);
  374. $error = false;
  375. while($row = $result->fetch_object()) {
  376. if (!deletePhoto($row->id)) $error = true;
  377. }
  378. } else {
  379. $query = "UPDATE lychee_photos SET album = '0' WHERE album = '$albumID';";
  380. $result = $database->query($query);
  381. if (!$result) return false;
  382. }
  383. if ($albumID!=0) {
  384. $query = "DELETE FROM lychee_albums WHERE id = '$albumID';";
  385. $result = $database->query($query);
  386. if (!$result) return false;
  387. }
  388. if ($error) return false;
  389. return true;
  390. }
  391. function getAlbumArchive($albumID) {
  392. global $database;
  393. switch($albumID) {
  394. case 's':
  395. $query = "SELECT * FROM lychee_photos WHERE public = '1';";
  396. $zipTitle = "Public";
  397. break;
  398. case 'f':
  399. $query = "SELECT * FROM lychee_photos WHERE star = '1';";
  400. $zipTitle = "Starred";
  401. break;
  402. default:
  403. $query = "SELECT * FROM lychee_photos WHERE album = '$albumID';";
  404. $zipTitle = "Unsorted";
  405. }
  406. $result = $database->query($query);
  407. $files = array();
  408. $i=0;
  409. while($row = $result->fetch_object()) {
  410. $files[$i] = "../uploads/big/".$row->url;
  411. $i++;
  412. }
  413. $query = "SELECT * FROM lychee_albums WHERE id = '$albumID';";
  414. $result = $database->query($query);
  415. $row = $result->fetch_object();
  416. if ($albumID!=0&&is_numeric($albumID))$zipTitle = $row->title;
  417. $filename = "../uploads/".$zipTitle.".zip";
  418. $zip = new ZipArchive();
  419. if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
  420. return false;
  421. }
  422. foreach($files AS $zipFile) {
  423. $newFile = explode("/",$zipFile);
  424. $newFile = array_reverse($newFile);
  425. $zip->addFile($zipFile, $zipTitle."/".$newFile[0]);
  426. }
  427. $zip->close();
  428. header("Content-Type: application/zip");
  429. header("Content-Disposition: attachment; filename=\"$zipTitle.zip\"");
  430. header("Content-Length: ".filesize($filename));
  431. readfile($filename);
  432. unlink($filename);
  433. return true;
  434. }
  435. function setAlbumPublic($albumID, $password) {
  436. global $database;
  437. $query = "SELECT public FROM lychee_albums WHERE id = '$albumID';";
  438. $result = $database->query($query);
  439. $row = $result->fetch_object();
  440. if ($row->public == 0){
  441. $public = 1;
  442. } else {
  443. $public = 0;
  444. }
  445. $query = "UPDATE lychee_albums SET public = '$public', password = NULL WHERE id = '$albumID';";
  446. $result = $database->query($query);
  447. if (!$result) return false;
  448. if ($public==1) {
  449. $query = "UPDATE lychee_photos SET public = 0 WHERE album = '$albumID';";
  450. $result = $database->query($query);
  451. if (!$result) return false;
  452. }
  453. if (strlen($password)>0) return setAlbumPassword($albumID, $password);
  454. else return true;
  455. }
  456. function setAlbumPassword($albumID, $password) {
  457. global $database;
  458. $query = "UPDATE lychee_albums SET password = '$password' WHERE id = '$albumID';";
  459. $result = $database->query($query);
  460. if (!$result) return false;
  461. return true;
  462. }
  463. function checkAlbumPassword($albumID, $password) {
  464. global $database;
  465. $query = "SELECT public, password FROM lychee_albums WHERE id = '$albumID';";
  466. $result = $database->query($query);
  467. $row = $result->fetch_object();
  468. if ($row->password=="") return true;
  469. else if ($row->password==$password) return true;
  470. else return false;
  471. }
  472. function isAlbumPublic($albumID) {
  473. global $database;
  474. $query = "SELECT public, password FROM lychee_albums WHERE id = '$albumID';";
  475. $result = $database->query($query);
  476. $row = $result->fetch_object();
  477. if ($row->public==1) return true;
  478. else return false;
  479. }
  480. // Photo Functions
  481. function getPhoto($photoID, $albumID) {
  482. global $database;
  483. if (!is_numeric($photoID)) {
  484. $query = "SELECT COUNT(*) AS quantity FROM lychee_photos WHERE import_name = '../uploads/import/$photoID';";
  485. $result = $database->query($query);
  486. $row = $result->fetch_object();
  487. if ($row->quantity == 0) {
  488. importPhoto($photoID, 's');
  489. }
  490. if (is_file("../uploads/import/$photoID")) {
  491. importPhoto($photoID, 's');
  492. }
  493. $query = "SELECT * FROM lychee_photos WHERE import_name = '../uploads/import/$photoID' ORDER BY ID DESC;";
  494. } else {
  495. $query = "SELECT * FROM lychee_photos WHERE id = '$photoID';";
  496. }
  497. $result = $database->query($query);
  498. $return = $result->fetch_array();
  499. if ($albumID!='false') {
  500. if ($return['album']!=0) {
  501. $result = $database->query("SELECT public FROM lychee_albums WHERE id = " . $return['album'] . ";");
  502. $return_album = $result->fetch_array();
  503. if ($return_album['public']=="1") $return['public'] = "2";
  504. }
  505. $return['original_album'] = $return['album'];
  506. $return['album'] = $albumID;
  507. $nextPhoto = getNextPhotoID($photoID, $albumID, false);
  508. if ($nextPhoto==$photoID) $return['nextPhoto'] = false;
  509. else $return['nextPhoto'] = $nextPhoto;
  510. $previousPhoto = getPreviousPhotoID($photoID, $albumID, false);
  511. if ($previousPhoto==$photoID) $return['previousPhoto'] = false;
  512. else $return['previousPhoto'] = $previousPhoto;
  513. }
  514. unset($return['album_public']);
  515. return $return;
  516. }
  517. function setPhotoPublic($photoID, $url) {
  518. global $database;
  519. $query = "SELECT public FROM lychee_photos WHERE id = '$photoID';";
  520. $result = $database->query($query);
  521. $row = $result->fetch_object();
  522. if ($row->public == 0){
  523. $public = 1;
  524. } else {
  525. $public = 0;
  526. }
  527. $query = "UPDATE lychee_photos SET public = '$public' WHERE id = '$photoID';";
  528. $result = $database->query($query);
  529. if (!$result) return false;
  530. return true;
  531. }
  532. function setPhotoStar($photoID) {
  533. global $database;
  534. $query = "SELECT star FROM lychee_photos WHERE id = '$photoID';";
  535. $result = $database->query($query);
  536. $row = $result->fetch_object();
  537. if ($row->star == 0) {
  538. $star = 1;
  539. } else {
  540. $star = 0;
  541. }
  542. $query = "UPDATE lychee_photos SET star = '$star' WHERE id = '$photoID';";
  543. $result = $database->query($query);
  544. return true;
  545. }
  546. function getNextPhotoID($photoID, $albumID, $innerCall) {
  547. global $database, $sorting;
  548. if (!$innerCall&&$sorting=="ASC") return getPreviousPhotoID($photoID, $albumID, true);
  549. switch($albumID) {
  550. case 'f': $query = "SELECT id FROM lychee_photos WHERE id < '$photoID' AND star = '1' ORDER BY id DESC LIMIT 0, 1;";
  551. break;
  552. case 's': $query = "SELECT id FROM lychee_photos WHERE id < '$photoID' AND public = '1' ORDER BY id DESC LIMIT 0, 1;";
  553. break;
  554. default: $query = "SELECT id FROM lychee_photos WHERE id < '$photoID' AND album = '$albumID' ORDER BY id DESC LIMIT 0, 1;";
  555. }
  556. $result = $database->query($query);
  557. $return = $result->fetch_array();
  558. if (!$return || ($return==0)) {
  559. switch($albumID) {
  560. case 'f': $query = "SELECT id FROM lychee_photos WHERE star = '1' ORDER BY id DESC LIMIT 0, 1;";
  561. break;
  562. case 's': $query = "SELECT id FROM lychee_photos WHERE public = '1' ORDER BY id DESC LIMIT 0, 1;";
  563. break;
  564. default: $query = "SELECT id FROM lychee_photos WHERE album = '$albumID' ORDER BY id DESC LIMIT 0, 1;";
  565. }
  566. $result = $database->query($query);
  567. $return = $result->fetch_array();
  568. }
  569. return $return['id'];
  570. }
  571. function getPreviousPhotoID($photoID, $albumID, $innerCall) {
  572. global $database, $sorting;
  573. if (!$innerCall&&$sorting=="ASC") return getNextPhotoID($photoID, $albumID, true);
  574. switch($albumID) {
  575. case 'f': $query = "SELECT id FROM lychee_photos WHERE id > '$photoID' AND star = '1' ORDER BY id LIMIT 0, 1;";
  576. break;
  577. case 's': $query = "SELECT id FROM lychee_photos WHERE id > '$photoID' AND public = '1' ORDER BY id LIMIT 0, 1;";
  578. break;
  579. default: $query = "SELECT id FROM lychee_photos WHERE id > '$photoID' AND album = '$albumID' ORDER BY id LIMIT 0, 1;";
  580. }
  581. $result = $database->query($query);
  582. $return = $result->fetch_array();
  583. if (!$return || ($return==0)) {
  584. switch($albumID) {
  585. case 'f': $query = "SELECT id FROM lychee_photos WHERE star = '1' ORDER BY id LIMIT 0, 1;";
  586. break;
  587. case 's': $query = "SELECT id FROM lychee_photos WHERE public = '1' ORDER BY id LIMIT 0, 1;";
  588. break;
  589. default: $query = "SELECT id FROM lychee_photos WHERE album = '$albumID' ORDER BY id LIMIT 0, 1;";
  590. }
  591. $result = $database->query($query);
  592. $return = $result->fetch_array();
  593. }
  594. return $return['id'];
  595. }
  596. function setAlbum($photoID, $newAlbum) {
  597. global $database;
  598. $query = "UPDATE lychee_photos SET album = '$newAlbum' WHERE id = '$photoID';";
  599. $result = $database->query($query);
  600. if (!$result) return false;
  601. else return true;
  602. }
  603. function setPhotoTitle($photoID, $title) {
  604. global $database;
  605. $title = mysqli_real_escape_string($database, urldecode($title));
  606. if (strlen($title)>30) return false;
  607. $query = "UPDATE lychee_photos SET title = '$title' WHERE id = '$photoID';";
  608. $result = $database->query($query);
  609. if (!$result) return false;
  610. else return true;
  611. }
  612. function setPhotoDescription($photoID, $description) {
  613. global $database;
  614. $description = mysqli_real_escape_string($database, htmlentities($description));
  615. if (strlen($description)>160) return false;
  616. $query = "UPDATE lychee_photos SET description = '$description' WHERE id = '$photoID';";
  617. $result = $database->query($query);
  618. if (!$result) return false;
  619. return true;
  620. }
  621. function deletePhoto($photoID) {
  622. global $database;
  623. $query = "SELECT * FROM lychee_photos WHERE id = '$photoID';";
  624. $result = $database->query($query);
  625. if (!$result) return false;
  626. $row = $result->fetch_object();
  627. $retinaUrl = explode(".", $row->thumbUrl);
  628. $unlink1 = unlink("../uploads/big/".$row->url);
  629. $unlink2 = unlink("../uploads/thumb/".$row->thumbUrl);
  630. $unlink3 = unlink("../uploads/thumb/".$retinaUrl[0].'@2x.'.$retinaUrl[1]);
  631. $query = "DELETE FROM lychee_photos WHERE id = '$photoID';";
  632. $result = $database->query($query);
  633. if (!$unlink1 || !$unlink2 || !$unlink3) return false;
  634. if (!$result) return false;
  635. return true;
  636. }
  637. function importPhoto($name, $albumID) {
  638. $tmp_name = "../uploads/import/$name";
  639. $details = getimagesize($tmp_name);
  640. $size = filesize($tmp_name);
  641. $nameFile = array(array());
  642. $nameFile[0]['name'] = $name;
  643. $nameFile[0]['type'] = $details['mime'];
  644. $nameFile[0]['tmp_name'] = $tmp_name;
  645. $nameFile[0]['error'] = 0;
  646. $nameFile[0]['size'] = $size;
  647. if (!upload($nameFile, $albumID)) return false;
  648. else return true;
  649. }
  650. function importUrl($url, $albumID) {
  651. if (@getimagesize($url)) {
  652. $pathinfo = pathinfo($url);
  653. $filename = $pathinfo['filename'].".".$pathinfo['extension'];
  654. $tmp_name = "../uploads/import/$filename";
  655. copy($url, $tmp_name);
  656. return importPhoto($filename, $albumID);
  657. } else {
  658. return false;
  659. }
  660. }
  661. // Share Functions
  662. function facebookHeader($photoID) {
  663. $database = dbConnect();
  664. if (!is_numeric($photoID)) return false;
  665. $query = "SELECT * FROM lychee_photos WHERE id = '$photoID';";
  666. $result = $database->query($query);
  667. $row = $result->fetch_object();
  668. $parseUrl = parse_url("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  669. $thumb = $parseUrl['scheme']."://".$parseUrl['host'].$parseUrl['path']."/../uploads/big/".$row->thumbUrl;
  670. $return .= '<!-- General Meta Data -->';
  671. $return = '<meta name="title" content="'.$row->title.'" />';
  672. $return .= '<meta name="description" content="'.$row->description.' - via Lychee" />';
  673. $return .= '<link rel="image_src" type="image/jpeg" href="'.$thumb.'" />';
  674. $return .= '<!-- Twitter Meta Data -->';
  675. $return .= '<meta name="twitter:card" content="photo">';
  676. $return .= '<meta name="twitter:title" content="'.$row->title.'">';
  677. $return .= '<meta name="twitter:image:src" content="'.$thumb.'">';
  678. $return .= '<!-- Facebook Meta Data -->';
  679. $return .= '<meta property="og:title" content="'.$row->title.'">';
  680. $return .= '<meta property="og:image" content="'.$thumb.'">';
  681. return $return;
  682. }
  683. function isPhotoPublic($photoID, $password) {
  684. global $database;
  685. $photoID = mysqli_real_escape_string($database, $photoID);
  686. if (is_numeric($photoID)) {
  687. $query = "SELECT * FROM lychee_photos WHERE id = '$photoID';";
  688. } else {
  689. $query = "SELECT * FROM lychee_photos WHERE import_name = '../uploads/import/$photoID';";
  690. }
  691. $result = $database->query($query);
  692. $row = $result->fetch_object();
  693. if (!is_numeric($photoID)&&!$row) return true;
  694. if ($row->public==1) return true;
  695. else {
  696. $cAP = checkAlbumPassword($row->album, $password);
  697. $iAP = isAlbumPublic($row->album);
  698. if ($iAP&&$cAP) return true;
  699. else return false;
  700. }
  701. }
  702. // Search Function
  703. function search($term) {
  704. global $database, $sorting;
  705. $return["albums"] = "";
  706. $term = mysqli_real_escape_string($database, $term);
  707. $query = "SELECT * FROM lychee_photos WHERE title like '%$term%' OR description like '%$term%';";
  708. $result = $database->query($query);
  709. while($row = $result->fetch_array()) {
  710. $return['photos'][$row['id']] = $row;
  711. }
  712. $query = "SELECT * FROM lychee_albums WHERE title like '%$term%';";
  713. $result = $database->query($query);
  714. $i=0;
  715. while($row = $result->fetch_object()) {
  716. $return["albums"][$row->id]['id'] = $row->id;
  717. $return["albums"][$row->id]['title'] = $row->title;
  718. $return["albums"][$row->id]['public'] = $row->public;
  719. $return["albums"][$row->id]['sysdate'] = $row->sysdate;
  720. if ($row->password=="") $return["albums"][$row->id]['password'] = false;
  721. else $return["albums"][$row->id]['password'] = true;
  722. $query2 = "SELECT thumbUrl FROM lychee_photos WHERE album = '".$row->id."' ORDER BY id $sorting LIMIT 0, 3;";
  723. $result2 = $database->query($query2);
  724. $k = 0;
  725. while($row2 = $result2->fetch_object()){
  726. $return['albums'][$row->id]["thumb$k"] = $row2->thumbUrl;
  727. $k++;
  728. }
  729. $i++;
  730. }
  731. return $return;
  732. }
  733. ?>