diff --git a/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php b/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php index a3aed95c0c..499d376fcc 100644 --- a/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php +++ b/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php @@ -56,6 +56,10 @@ class GNUsocialPhotosPlugin extends Plugin include_once $dir . '/lib/photolib.php'; include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; break; + case 'EditphotoAction': + include_once $dir . '/lib/photolib.php'; + include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + break; default: break; } @@ -89,6 +93,7 @@ class GNUsocialPhotosPlugin extends Plugin $m->connect(':nickname/photos/:albumid', array('action' => 'photos')); $m->connect('main/uploadphoto', array('action' => 'photoupload')); $m->connect('photo/:photoid', array('action' => 'photo')); + $m->connect('editphoto/:photoid', array('action' => 'editphoto')); return true; } diff --git a/plugins/GNUsocialPhotos/actions/editphoto.php b/plugins/GNUsocialPhotos/actions/editphoto.php new file mode 100644 index 0000000000..d7f60e6752 --- /dev/null +++ b/plugins/GNUsocialPhotos/actions/editphoto.php @@ -0,0 +1,150 @@ +. + * + * @category Widget + * @package GNU Social + * @author Ian Denhardt + * @author Sean Corbett + * @author Max Shinn + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class EditphotoAction extends Action +{ + var $user = null; + + function prepare($args) + { + parent::prepare($args); + $args = $this->returnToArgs(); + $this->user = common_current_user(); + $this->photoid = $args[1]['photoid']; + $this->photo = GNUsocialPhoto::staticGet('id', $this->photoid); + return true; + } + + function handle($args) + { + parent::handle($args); + if($_SERVER['REQUEST_METHOD'] == 'POST') { + $this->handlePost(); + } + $this->showPage(); + } + + function title() + { + return _m('Upload Photos'); + } + + function showContent() + { + if($this->user->profile_id != $this->photo->profile_id) { + $this->element('p', array(), _('You are not authorized to edit this photo.')); + } else { + $this->element('img', array('src' => $this->photo->uri)); + $this->elementStart('form', array('method' => 'post', + 'action' => '/editphoto/' . $this->photo->id)); + $this->elementStart('ul', 'form_data'); + $this->elementStart('li'); + $this->input('phototitle', _("Title"), $this->photo->title, _("The title of the photo. (Optional)")); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->textarea('photo_description', _("Description"), $this->photo->photo_description, _("A description of the photo. (Optional)")); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->dropdown('album', _("Album"), $this->albumList(), _("The album in which to place this photo"), false, $this->photo->album_id); + $this->elementEnd('li'); + $this->elementEnd('ul'); + $this->submit('update', _('Update')); + $this->elementEnd('form'); + $this->element('br'); + } + } + + function handlePost() + { + + common_log(LOG_INFO, 'handlPost()!'); + + if ($this->arg('update')) { + $this->updatePhoto(); + } + } + + function showForm($msg, $success=false) + { + $this->msg = $msg; + $this->success = $success; + +// $this->showPage(); + } + + function albumList() + { + $cur = common_current_user(); + $album = new GNUsocialPhotoAlbum(); + $album->user_id = $cur->id; + + $albumlist = array(); + if (!$album->find()) { + GNUsocialPhotoAlbum::newAlbum($cur->id, 'Default'); + } + while ($album->fetch()) { + $albumlist[$album->album_id] = $album->album_name; + } + return $albumlist; + } + + function updatePhoto() + { + $cur = common_current_user(); + if($this->user->profile_id != $this->photo->profile_id) { + return; + } + + $this->photo->title = $this->trimmed('phototitle'); + $this->photo->photo_description = $this->trimmed('photo_description'); + + $profile_id = $cur->id; + + $album = GNUsocialPhotoAlbum::staticGet('album_id', $this->trimmed('album')); + if ($album->profile_id != $profile_id) { + $this->showForm(_('Error: This is not your album!')); + return; + } + $this->photo->album_id = $album->album_id; + if ($this->photo->validate()) + $this->photo->update(); + else { + $this->showForm(_('Error: The photo data is not valid.')); + return; + } + $this->showForm(_('Success!')); + + } + +} diff --git a/plugins/GNUsocialPhotos/actions/photo.php b/plugins/GNUsocialPhotos/actions/photo.php index e9d87b32d7..f6ec063586 100644 --- a/plugins/GNUsocialPhotos/actions/photo.php +++ b/plugins/GNUsocialPhotos/actions/photo.php @@ -90,6 +90,15 @@ class PhotoAction extends Action $this->elementStart('a', array('href' => $this->photo->uri)); $this->element('img', array('src' => $this->photo->uri)); $this->elementEnd('a'); + + //Image "toolbar" + $cur = common_current_user(); + if($this->photo->profile_id == $cur->profile_id) { + $this->elementStart('div', array('id' => 'image_toolbar')); + $this->element('a', array('href' => '/editphoto/' . $this->photo->id), 'Edit'); + $this->elementEnd('div'); + } + $this->element('p', array(), $this->photo->photo_description); //This is a hack to hide the top-level comment $this->element('style', array(), "#notice-{$this->photo->notice_id} div { display: none } #notice-{$this->photo->notice_id} ol li div { display: inline }"); diff --git a/plugins/GNUsocialPhotos/actions/photos.php b/plugins/GNUsocialPhotos/actions/photos.php index d113600850..5b750a6501 100644 --- a/plugins/GNUsocialPhotos/actions/photos.php +++ b/plugins/GNUsocialPhotos/actions/photos.php @@ -86,10 +86,10 @@ class PhotosAction extends Action $this->elementStart('div', array('class' => 'galleryheader')); $this->element('a', array('href' => '#', - 'onclick' => 'increasePhotoSize()'), '+'); + 'onclick' => 'return increasePhotoSize()'), '+'); $this->raw(' | '); $this->element('a', array('href' => '#', - 'onclick' => 'decreasePhotoSize()'), '-'); + 'onclick' => 'return decreasePhotoSize()'), '-'); $this->elementEnd('div'); while ($album->fetch()) { @@ -127,10 +127,10 @@ class PhotosAction extends Action $this->raw(' | '); } $this->element('a', array('href' => '#', - 'onclick' => 'increasePhotoSize()'), '+'); + 'onclick' => 'return increasePhotoSize()'), '+'); $this->raw(' | '); $this->element('a', array('href' => '#', - 'onclick' => 'decreasePhotoSize()'), '-'); + 'onclick' => 'return decreasePhotoSize()'), '-'); $this->elementEnd('div');