]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/GNUsocialPhotos/classes/gnusocialphoto.php
showAvatar requires a profile
[quix0rs-gnu-social.git] / plugins / GNUsocialPhotos / classes / gnusocialphoto.php
index c724db1f1c27a063b359d5504c8ab3ad54fb38ed..4f4e5fbfe44cc415ae66c8410c4686bb93567b2d 100644 (file)
@@ -32,79 +32,107 @@ if (!defined('STATUSNET')) {
 
 require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
 
-class GNUsocialPhoto extends Memcached_DataObject
+class GNUsocialPhoto extends Managed_DataObject
 {
     public $__table = 'GNUsocialPhoto';
-    public $noitce_id;   // integer
-    public $path;        // varchar(150)
-    public $thumb_path;  // varchar(156)
-    public $owner_id;    // int(11) (user who posted the photo)
+    public $id;         // int(11)
+    public $notice_id;  // int(11)
+    public $album_id;   // int(11)
+    public $uri;        // varchar(255)
+    public $thumb_uri;  // varchar(255)
+       public $title;      // varchar(255)
+       public $photo_description; // text
+    public $created;           // datetime()   not_null
+    public $modified;          // timestamp()   not_null default_CURRENT_TIMESTAMP
 
-    function staticGet($k,$v=NULL)
+/*    function delete()
     {
-        return Memcached_DataObject::staticGet('GNUsocialPhoto',$k,$v);
-    }
-
-    function delete()
-    {
-        if(!unlink(INSTALLDIR . $this->thumb_path)) {
+        if(!unlink(INSTALLDIR . $this->thumb_uri)) {
             return false;
         }
         if(!unlink(INSTALLDIR . $this->path)) {
             return false;
         }
         return parent::delete();
-    }
+    } */
 
-    function table()
+    public static function schemaDef()
     {
-        return array('notice_id' => DB_DATAOBJECT_INT,
-                     'path' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
-                     'thumb_path' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
-                     'owner_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL);
+        return array(
+            'fields' => array(
+                'id' => array('type' => 'serial', 'not null' => true, 'description' => 'Unique ID for Photo'),
+                'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'Notice ID for the related notice'),
+                'album_id' => array('type' => 'int', 'not null' => true, 'description' => 'The parent album ID'),
+                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'unique address for this photo'),
+                'thumb_uri' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'unique address for this photo thumbnail'),
+                'title' => array('type' => 'varchar', 'not null' => true, 'length' => 255, 'description' => 'The Photo title'),
+                'photo_description' => array('type' => 'text', 'not null' => true, 'description' => 'A description for this photo'),
+                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
+                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
+            ),
+            'primary key' => array('id'),
+            'unique keys' => array(
+                'gnusocialphoto_id_key' => array('notice_id'),
+                'gnusocialphoto_uri_key' => array('uri'),
+            ),
+            'foreign keys' => array(
+                'gnusocialphoto_notice_id_fkey' => array('notice', array('notice_id' => 'id')),
+                'gnusocialphoto_album_id_fkey' => array('GNUsocialPhotoAlbum', array('album_id' => 'id')),
+            ),
+            'indexes' => array(
+                'gnusocialphoto_title_idx' => array('title'),
+            ),
+        );
     }
 
-    function keys()
+    static function saveNew($profile_id, $album_id, $thumb_uri, $uri, $source, $insert_now, $title = null, $photo_description = null)
     {
-        return array_keys($this->keyTypes());
-    }
+        $photo = new GNUsocialPhoto();
+        $photo->thumb_uri = $thumb_uri;
+        $photo->uri = $uri;
+               $photo->album_id = $album_id;
+               if(!empty($title)) $photo->title = $title;
+               if(!empty($photo_description)) $photo->photo_description = (string)$photo_description;
 
-    function keyTypes()
-    {
-        return array('notice_id' => 'K');
+        if($insert_now) {
+            $notice = Notice::saveNew($profile_id, $uri, $source);
+            $photo->notice_id = $notice->id;
+            $photo_id = $photo->insert();
+            if (!$photo_id) {
+                common_log_db_error($photo, 'INSERT', __FILE__);
+                throw new ServerException(_m('Problem Saving Photo.'));
+            }
+        } else {
+            GNUsocialPhotoTemp::$tmp = $photo;
+            Notice::saveNew($profile_id, $uri, $source);
+        }
     }
 
-    function sequenceKey()
+    function getPageLink()
     {
-        return array(false, false, false);
+        return '/photo/' . $this->id;
     }
 
-    function saveNew($profile_id, $thumb_path, $path, $source)
+    /*
+     * TODO: -Sanitize input
+     * @param int page_id The desired page of the gallery to show.
+     * @param int album_id The id of the album to get photos from.
+     * @param int gallery_size The number of thumbnails to show per page in the gallery.
+     * @return array Array of GNUsocialPhotos for this gallery page.
+     */
+    static function getGalleryPage($page_id, $album_id, $gallery_size)
     {
+               $page_offset = ($page_id-1) * $gallery_size; 
+        $sql = 'SELECT * FROM GNUsocialPhoto WHERE album_id = ' . $album_id . 
+               ' ORDER BY notice_id LIMIT ' . $page_offset . ',' . $gallery_size;
         $photo = new GNUsocialPhoto();
-        $photo->thumb_path = $thumb_path;
-        $photo->path = $path;
-        $photo->owner_id = $profile_id;
+        $photo->query($sql);
+        $photos = array();
 
-        $rend = sprintf('<a href="http://%s%s"><img src="http://%s%s" /></a>', common_config('site', 'server'), $path, common_config('site', 'server'), $thumb_path);
-
-        $notice = Notice::saveNew($profile_id, 'http://' . common_config('site', 'server') . $path, $source, array('rendered' => $rend));
-        $photo->notice_id = $notice->id;
-        $photo_id = $photo->insert();
-        if (!$photo_id) {
-            common_log_db_error($photo, 'INSERT', __FILE__);
-            throw new ServerException(_m('Problem Saving Photo.'));
+        while ($photo->fetch()) {
+            $photos[] = clone($photo);
         }
-    }    
-    /*
-    function asActivityNoun($element)
-    {
-        $object = new ActivityObject();
 
-        $object->type = ActivityObject::PHOTO;
-        $object->title = "";
-        $object->thumbnail = 'http://' . common_config('site', 'server') . $this->thumb_path;
-        $object->largerImage = 'http://' . common_config('site', 'server') . $this->path;
-        return $object;
-    } */
+        return $photos;
+    }
 }