Photo albums on photos page

This commit is contained in:
Max Shinn 2010-12-28 08:31:34 -06:00
parent 22fe5d0215
commit 330ac5dd12
4 changed files with 56 additions and 14 deletions

View File

@ -86,6 +86,7 @@ class GNUsocialPhotosPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect(':nickname/photos', array('action' => 'photos')); $m->connect(':nickname/photos', array('action' => 'photos'));
$m->connect(':nickname/photos/:albumid', array('action' => 'photos'));
$m->connect('main/uploadphoto', array('action' => 'photoupload')); $m->connect('main/uploadphoto', array('action' => 'photoupload'));
$m->connect('photo/:photoid', array('action' => 'photo')); $m->connect('photo/:photoid', array('action' => 'photo'));
return true; return true;

View File

@ -23,6 +23,7 @@
* @package GNU Social * @package GNU Social
* @author Ian Denhardt <ian@zenhack.net> * @author Ian Denhardt <ian@zenhack.net>
* @author Sean Corbett <sean@gnu.org> * @author Sean Corbett <sean@gnu.org>
* @author Max Shinn <trombonechamp@gmail.com>
* @copyright 2010 Free Software Foundation, Inc. * @copyright 2010 Free Software Foundation, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
*/ */
@ -43,6 +44,7 @@ class PhotosAction extends Action
$args = $this->returnToArgs(); $args = $this->returnToArgs();
$username = $args[1]['nickname']; $username = $args[1]['nickname'];
$this->albumid = $args[1]['albumid'];
if (common_valid_profile_tag($username) == 0) { if (common_valid_profile_tag($username) == 0) {
$this->user = null; $this->user = null;
} else { } else {
@ -72,29 +74,46 @@ class PhotosAction extends Action
$nav->show(); $nav->show();
} }
function showContent() function showAlbums()
{ {
if(empty($this->user)) { $album = new GNUsocialPhotoAlbum();
$album->user_id = $this->user->id;
$albums = array();
if (!$album->find()) {
GNUsocialPhotoAlbum::newAlbum($cur->id, 'Default');
}
$this->elementStart('ul', array('class' => 'photothumbs'));
while ($album->fetch()) {
$this->elementStart('li');
$this->element('h3', array(), $album->title);
$this->elementStart('a', array('href' => $album->getPageLink()));
$this->element('img', array('src' => $album->getThumbUri()));
$this->elementEnd('a');
$this->elementEnd('li');
}
$this->elementEnd('ul');
}
function showAlbum($album_id)
{
$album = GNUSocialPhotoAlbum::staticGet('album_id', $album_id);
if (!$album) {
return; return;
} }
$page = $_GET['pageid']; $page = $_GET['pageid'];
if (!filter_var($page, FILTER_VALIDATE_INT)){ if (!filter_var($page, FILTER_VALIDATE_INT)){
$page = 1; $page = 1;
} }
//TODO choice of available albums by user.
//Currently based on fact that each user can only have one album.
$album = GNUSocialPhotoAlbum::staticGet('profile_id', $this->user->id);
if (!$album) {
$album = GNUSocialPhotoAlbum::newAlbum($this->user->id, 'Default');
}
$photos = GNUsocialPhoto::getGalleryPage($page, $album->album_id, 9); $photos = GNUsocialPhoto::getGalleryPage($page, $album->album_id, 9);
if ($page > 1) { if ($page > 1) {
$this->element('a', array('href' => 'photos?pageid=' . ($page-1)), 'Previous page'); $this->element('a', array('href' => $album->getPageLink() . '?pageid=' . ($page-1)), 'Previous page');
} }
if (GNUsocialPhoto::getGalleryPage($page+1, $album->album_id, 9)) { if (GNUsocialPhoto::getGalleryPage($page+1, $album->album_id, 9)) {
$this->element('a', array('href' => 'photos?pageid=' . ($page+1) ), 'Next page'); $this->element('a', array('href' => $album->getPageLink() . '?pageid=' . ($page+1) ), 'Next page');
} }
$this->elementStart('ul', array('class' => 'photothumbs')); $this->elementStart('ul', array('class' => 'photothumbs'));
@ -107,4 +126,13 @@ class PhotosAction extends Action
} }
$this->elementEnd('ul'); $this->elementEnd('ul');
} }
function showContent()
{
if (!empty($this->albumid))
$this->showAlbum($this->albumid);
else
$this->showAlbums();
}
} }

View File

@ -193,7 +193,6 @@ class PhotouploadAction extends Action
$thumb_uri = 'http://' . common_config('site', 'server') . '/file/thumb.' . $filename; $thumb_uri = 'http://' . common_config('site', 'server') . '/file/thumb.' . $filename;
$profile_id = $cur->id; $profile_id = $cur->id;
// TODO: proper multiple album support
$album = GNUsocialPhotoAlbum::staticGet('album_id', $this->trimmed('album')); $album = GNUsocialPhotoAlbum::staticGet('album_id', $this->trimmed('album'));
if ($album->profile_id != $profile_id) { if ($album->profile_id != $profile_id) {
$this->showForm(_('Error: This is not your album!')); $this->showForm(_('Error: This is not your album!'));

View File

@ -74,6 +74,20 @@ class GNUsocialPhotoAlbum extends Memcached_DataObject
return array('album_id', true, false); return array('album_id', true, false);
} }
function getPageLink()
{
$profile = Profile::StaticGet('id', $this->profile_id);
return '/' . $profile->nickname . '/photos/' . $this->album_id;
}
function getThumbUri()
{
$photo = GNUsocialPhoto::staticGet('album_id', $this->album_id);
if (empty($photo))
return '/theme/default/default-avatar-profile.png'; //For now...
return $photo->thumb_uri;
}
static function newAlbum($profile_id, $album_name, $album_description) static function newAlbum($profile_id, $album_name, $album_description)
{ {
//TODO: Should use foreign key instead... //TODO: Should use foreign key instead...