From eeaf539a4414e3081b6f6652167363a3221a1973 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Thu, 8 Dec 2011 20:04:56 +0100
Subject: [PATCH] Gallery: splitout model code

---
 apps/gallery/ajax/createAlbum.php             |  3 +-
 apps/gallery/ajax/getAlbums.php               |  6 ++--
 apps/gallery/ajax/getCovers.php               | 16 +++++++----
 apps/gallery/ajax/scanForAlbums.php           |  3 +-
 apps/gallery/ajax/thumbnail.php               | 17 +++++++----
 apps/gallery/appinfo/app.php                  |  4 +++
 apps/gallery/css/styles.css                   | 13 ++++++++-
 apps/gallery/index.php                        |  7 ++---
 apps/gallery/lib/album.php                    | 18 ++++++++++++
 apps/gallery/lib/photo.php                    | 28 +++++++++++++++++++
 .../{lib_scanner.php => lib/scanner.php}      | 22 +++++----------
 apps/gallery/templates/view_album.php         | 10 +++++--
 lib/db.php                                    |  2 +-
 13 files changed, 105 insertions(+), 44 deletions(-)
 create mode 100644 apps/gallery/lib/album.php
 create mode 100644 apps/gallery/lib/photo.php
 rename apps/gallery/{lib_scanner.php => lib/scanner.php} (59%)

diff --git a/apps/gallery/ajax/createAlbum.php b/apps/gallery/ajax/createAlbum.php
index 610f761b72..9413b54718 100644
--- a/apps/gallery/ajax/createAlbum.php
+++ b/apps/gallery/ajax/createAlbum.php
@@ -3,8 +3,7 @@ require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
 
-$stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_albums ("uid_owner", "album_name") VALUES ("'.OC_User::getUser().'", "'.$_GET['album_name'].'")');
-$stmt->execute(array());
+OC_Gallery_Album::create(OC_User::getUser(), $_GET['album_name']);
 
 OC_JSON::success(array('name' => $_GET['album_name']));
 
diff --git a/apps/gallery/ajax/getAlbums.php b/apps/gallery/ajax/getAlbums.php
index 38bea74636..856f29344d 100644
--- a/apps/gallery/ajax/getAlbums.php
+++ b/apps/gallery/ajax/getAlbums.php
@@ -4,13 +4,11 @@ OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
 
 $a = array();
-$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE `uid_owner` = ?');
-$result = $stmt->execute(array(OC_User::getUser()));
+$result = OC_Gallery_Album::find(OC_User::getUser());
 
 while ($r = $result->fetchRow()) {
   $album_name = $r['album_name'];
-  $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_photos WHERE `album_id` = ?');
-  $tmp_res = $stmt->execute(array($r['album_id']));
+  $tmp_res = OC_Gallery_Photo::find($r['album_id']);
   $a[] = array('name' => $album_name, 'numOfItems' => min($tmp_res->numRows(), 10));
 }
 
diff --git a/apps/gallery/ajax/getCovers.php b/apps/gallery/ajax/getCovers.php
index b9c7558a53..db7c8e9fcd 100644
--- a/apps/gallery/ajax/getCovers.php
+++ b/apps/gallery/ajax/getCovers.php
@@ -18,7 +18,7 @@ function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $
       default:
         exit();
     }
-		if(!$myImage) exit();
+    if(!$myImage) exit();
     $ratio_orig = $width_orig/$height_orig;
     
     if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
@@ -44,15 +44,19 @@ function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $
 $box_size = 200;
 $album_name= $_GET['album_name'];
 
-$stmt = OC_DB::prepare('SELECT `file_path` FROM *PREFIX*gallery_photos,*PREFIX*gallery_albums WHERE *PREFIX*gallery_albums.`uid_owner` = ? AND `album_name` = ? AND *PREFIX*gallery_photos.`album_id` = *PREFIX*gallery_albums.`album_id`');
-$result = $stmt->execute(array(OC_User::getUser(), $album_name));
+$result = OC_Gallery_Photo::findForAlbum(OC_User::getUser(), $album_name);
 
 $numOfItems = min($result->numRows(),10);
 
-$targetImg = imagecreatetruecolor($numOfItems*$box_size, $box_size);
+if ($numOfItems){
+	$targetImg = imagecreatetruecolor($numOfItems*$box_size, $box_size);
+}
+else{
+	$targetImg = imagecreatetruecolor($box_size, $box_size);
+}
 $counter = 0;
 while (($i = $result->fetchRow()) && $counter < $numOfItems) {
-  $imagePath = OC::$CONFIG_DATADIRECTORY . $i['file_path'];
+	$imagePath = OC_Filesystem::getLocalFile($i['file_path']);
 	if(file_exists($imagePath))
 	{
 		CroppedThumbnail($imagePath, $box_size, $box_size, $targetImg, $counter*$box_size);
@@ -65,7 +69,7 @@ header('Content-Type: image/png');
 $offset = 3600 * 24;
 // calc the string in GMT not localtime and add the offset
 header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
-header('Cache-Control: max-age=3600, must-revalidate');
+header('Cache-Control: max-age='.$offset.', must-revalidate');
 header('Pragma: public');
 
 imagepng($targetImg);
diff --git a/apps/gallery/ajax/scanForAlbums.php b/apps/gallery/ajax/scanForAlbums.php
index de0b141a36..ff696804b0 100644
--- a/apps/gallery/ajax/scanForAlbums.php
+++ b/apps/gallery/ajax/scanForAlbums.php
@@ -3,9 +3,8 @@
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
-require_once('../lib_scanner.php');
 
-OC_JSON::success(array('albums' => OC_GALLERY_SCANNER::scan('')));
+OC_JSON::success(array('albums' => OC_Gallery_Scanner::scan('')));
 //OC_JSON::success(array('albums' => array(array('name' => 'test', 'imagesCount' => 1, 'images' => array('dupa')))));
 
 ?>
diff --git a/apps/gallery/ajax/thumbnail.php b/apps/gallery/ajax/thumbnail.php
index a141645293..d937691fa0 100644
--- a/apps/gallery/ajax/thumbnail.php
+++ b/apps/gallery/ajax/thumbnail.php
@@ -49,12 +49,19 @@ function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height) { //$imgSr
 $box_size = 200;
 $img = $_GET['img'];
 
-$tmp = OC::$CONFIG_DATADIRECTORY . $img;
+$imagePath = OC_Filesystem::getLocalFile($img);
 
-if(file_exists($tmp))
+if(file_exists($imagePath))
 {
-  header('Content-Type: image/png');
-	$image = CroppedThumbnail($tmp, $box_size, $box_size);
+	$image = CroppedThumbnail($imagePath, $box_size, $box_size);
+
+	header('Content-Type: image/png');
+	$offset = 3600 * 24;
+	// calc the string in GMT not localtime and add the offset
+	header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
+	header('Cache-Control: max-age='.$offset.', must-revalidate');
+	header('Pragma: public');
+
 	imagepng($image);
 	imagedestroy($image);
-}
\ No newline at end of file
+}
diff --git a/apps/gallery/appinfo/app.php b/apps/gallery/appinfo/app.php
index 8f855c470e..2b1ab857af 100644
--- a/apps/gallery/appinfo/app.php
+++ b/apps/gallery/appinfo/app.php
@@ -1,4 +1,8 @@
 <?php
+OC::$CLASSPATH['OC_Gallery_Album'] = 'apps/gallery/lib/album.php';
+OC::$CLASSPATH['OC_Gallery_Photo'] = 'apps/gallery/lib/photo.php';
+OC::$CLASSPATH['OC_Gallery_Scanner'] = 'apps/gallery/lib/scanner.php';
+
 OC_App::register(array(
   'order' => 20,
   'id' => 'gallery',
diff --git a/apps/gallery/css/styles.css b/apps/gallery/css/styles.css
index 03b179138e..070effe3a9 100644
--- a/apps/gallery/css/styles.css
+++ b/apps/gallery/css/styles.css
@@ -1,14 +1,22 @@
 div#gallery_list {
   margin: 90pt 20pt;
 }
+div#gallery_list.leftcontent {
+  padding-top: 15px;
+  margin: 0;
+  text-align: center;
+}
 
 div#gallery_album_box {
   width: 200px;
   text-align: center;
   border: 0;
-  float: left;
+  display: inline-block;
   margin: 5pt;
 }
+.leftcontent div#gallery_album_box {
+  margin: 5px;
+}
 
 div#gallery_album_box h1 {
   font-size: 12pt;
@@ -21,3 +29,6 @@ div#gallery_album_cover {
   border: solid 1px black;
 }
 
+#gallery_images {
+padding:10px 5px;
+}
diff --git a/apps/gallery/index.php b/apps/gallery/index.php
index 87fdafcf13..2c409089eb 100644
--- a/apps/gallery/index.php
+++ b/apps/gallery/index.php
@@ -7,8 +7,7 @@ OC_App::setActiveNavigationEntry( 'gallery_index' );
 
 
 if (!isset($_GET['view'])) {
-  $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ?');
-  $result = $stmt->execute(array(OC_User::getUser()));
+  $result = OC_Gallery_Album::find(OC_User::getUser());
 
   $r = array();
   while ($row = $result->fetchRow())
@@ -18,9 +17,7 @@ if (!isset($_GET['view'])) {
   $tmpl->assign('r', $r);
   $tmpl->printPage();
 } else {
-  $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_photos, *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name = ? AND *PREFIX*gallery_albums.album_id = *PREFIX*gallery_photos.album_id');
-  
-  $result = $stmt->execute(array(OC_User::getUser(), $_GET['view']));
+  $result = OC_Gallery_Photo::findForAlbum(OC_User::getUser(), $_GET['view']);
 
   $photos = array();
   while ($p = $result->fetchRow())
diff --git a/apps/gallery/lib/album.php b/apps/gallery/lib/album.php
new file mode 100644
index 0000000000..6ddfe46de3
--- /dev/null
+++ b/apps/gallery/lib/album.php
@@ -0,0 +1,18 @@
+<?php
+
+class OC_Gallery_Album{
+	public static function create($owner, $name){
+		$stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_albums (uid_owner, album_name) VALUES (?, ?)');
+		$stmt->execute(array($owner, $name));
+	}
+	public static function find($owner, $name=null){
+		$sql = 'SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ?';
+		$args = array($owner);
+		if (!is_null($name)){
+			$sql .= ' AND album_name = ?';
+			$args[] = $name;
+		}
+		$stmt = OC_DB::prepare($sql);
+		return $stmt->execute($args);
+	}
+}
diff --git a/apps/gallery/lib/photo.php b/apps/gallery/lib/photo.php
new file mode 100644
index 0000000000..97d159935f
--- /dev/null
+++ b/apps/gallery/lib/photo.php
@@ -0,0 +1,28 @@
+<?php
+
+class OC_Gallery_Photo{
+	public static function create($albumId, $img){
+		$stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_photos (album_id, file_path) VALUES (?, ?)');
+		$stmt->execute(array($albumId, $img));
+	}
+	public static function find($albumId, $img=null){
+		$sql = 'SELECT * FROM *PREFIX*gallery_photos WHERE album_id = ?';
+		$args = array($albumId);
+		$args = array($albumId);
+		if (!is_null($img)){
+			$sql .= ' AND file_path = ?';
+			$args[] = $img;
+		}
+		$stmt = OC_DB::prepare($sql);
+		return $stmt->execute($args);
+	}
+	public static function findForAlbum($owner, $album_name){
+		$stmt = OC_DB::prepare('SELECT *'
+			.' FROM *PREFIX*gallery_photos photos,'
+				.' *PREFIX*gallery_albums albums'
+			.' WHERE albums.uid_owner = ?'
+				.' AND albums.album_name = ?'
+				.' AND photos.album_id = albums.album_id');
+		return $stmt->execute(array($owner, $album_name));
+	}
+}
diff --git a/apps/gallery/lib_scanner.php b/apps/gallery/lib/scanner.php
similarity index 59%
rename from apps/gallery/lib_scanner.php
rename to apps/gallery/lib/scanner.php
index 1231de3f3c..1590051c48 100644
--- a/apps/gallery/lib_scanner.php
+++ b/apps/gallery/lib/scanner.php
@@ -1,9 +1,6 @@
 <?php
 
-require_once('base.php'); // base lib
-
-class OC_GALLERY_SCANNER {
-
+class OC_Gallery_Scanner {
   public static function scan($root) {
     $albums = array();
     self::scanDir($root, $albums);
@@ -24,26 +21,21 @@ class OC_GALLERY_SCANNER {
         } elseif (self::isPhoto($path.'/'.$filename)) {
           $current_album['images'][] = $filepath;
         }
-      } 
+      }
     }
     $current_album['imagesCount'] = count($current_album['images']);
     $albums[] = $current_album;
-    $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE `uid_owner` = ? AND `album_name` = ?');
-    $result = $stmt->execute(array(OC_User::getUser(), $current_album['name']));
+    $result = OC_Gallery_Album::find(OC_User::getUser(), $current_album['name']);
     if ($result->numRows() == 0 && count($current_album['images'])) {
-      $stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_albums (`uid_owner`, `album_name`) VALUES (?, ?)');
-      $stmt->execute(array(OC_User::getUser(), $current_album['name']));
+	    OC_Gallery_Album::create(OC_User::getUser(), $current_album['name']);
+	    $result = OC_Gallery_Album::find(OC_User::getUser(), $current_album['name']);
     }
-    $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE `uid_owner` = ? AND `album_name` = ?');
-    $result = $stmt->execute(array(OC_User::getUser(), $current_album['name']));
     $albumId = $result->fetchRow();
     $albumId = $albumId['album_id'];
     foreach ($current_album['images'] as $img) {
-      $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_photos WHERE `album_id` = ? AND `file_path` = ?');
-      $result = $stmt->execute(array($albumId, $img));
+      $result = OC_Gallery_Photo::find($albumId, $img);
       if ($result->numRows() == 0) {
-        $stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_photos (`album_id`, `file_path`) VALUES (?, ?)');
-        $stmt->execute(array($albumId, $img));
+	      OC_Gallery_Photo::create($albumId, $img);
       }
     }
   }
diff --git a/apps/gallery/templates/view_album.php b/apps/gallery/templates/view_album.php
index 230e2a5c21..ae43e2fc55 100644
--- a/apps/gallery/templates/view_album.php
+++ b/apps/gallery/templates/view_album.php
@@ -1,5 +1,6 @@
 <?php
 OC_Util::addStyle('gallery', 'styles');
+OC_Util::addScript('gallery', 'albums');
 OC_Util::addScript('gallery', 'album_cover');
 OC_Util::addScript('files_imageviewer', 'jquery.mousewheel-3.0.4.pack');
 OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
@@ -16,13 +17,16 @@ OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
 <div id="controls">
   <a href="?"><input type="button" value="Back" /></a><br/>
 </div>
-<div id="gallery_list">
+
+<div id="gallery_list" class="leftcontent">
+</div>
+
+<div id="gallery_images" class="rightcontent">
 <?php
 foreach ($_['photos'] as $a) {
 ?>
-<a rel="images" href="../../files/ajax/download.php?files=<?php echo $a; ?>"><img src="ajax/thumbnail.php?img=<?php echo $a ?>"></a>
+<a rel="images" href="../../files/download.php?file=<?php echo urlencode($a); ?>"><img src="ajax/thumbnail.php?img=<?php echo urlencode($a) ?>"></a>
 <?php
   }
 ?>
-
 </div>
diff --git a/lib/db.php b/lib/db.php
index c059f5ab33..bcfe320665 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -492,7 +492,7 @@ class PDOStatementWrapper{
 	}
 	
 	/**
-	 * make exucute return the result instead of a bool
+	 * make execute return the result instead of a bool
 	 */
 	public function execute($input=array()){
 		$this->lastArguments=$input;
-- 
GitLab