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;
+ }
}