4 * Copyright (C) 2011, Free Software Foundation, Inc.
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Affero General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Affero General Public License for more details.
19 * You should have received a copy of the GNU Affero General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * @author Ian Denhardt <ian@zenhack.net>
25 * @copyright 2011 Free Software Foundation, Inc.
26 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
29 if (!defined('STATUSNET')) {
33 class GNUsocialPhotoPlugin extends MicroAppPlugin
36 function onCheckSchema()
38 $schema = Schema::get();
40 $schema->ensureTable('photo', Photo::schemaDef());
45 function onAutoload($cls)
47 $dir = dirname(__FILE__);
51 include_once $dir . '/Photo.php';
54 include_once $dir . '/newphotoform.php';
56 case 'NewphotoAction':
57 include_once $dir . '/newphoto.php';
65 function onRouterInitialized($m)
67 $m->connect('main/photo/new', array('action' => 'newphoto'));
68 $m->connect('main/photo/:id', array('action' => 'showphoto'));
72 function entryForm($out)
74 return new NewPhotoForm($out);
89 return array(Photo::OBJECT_TYPE);
92 function saveNoticeFromActivity($activity, $actor, $options=array())
95 if(count($activity->objects) != 1) {
96 throw new Exception('Too many activity objects.');
99 $photoObj = $activity->objects[0];
101 if ($photoObj->type != Photo::OBJECT_TYPE) {
102 throw new Exception('Wrong type for object.');
105 $photo_uri = $photoObj->largerImage;
106 $thumb_uri = $photo_uri;
107 if(!empty($photoObj->thumbnail)){
108 $thumb_uri = $photoObj->thumbnail;
111 $description = $photoObj->description;
112 $title = $photoObj->title;
114 $options['object_type'] = Photo::OBJECT_TYPE;
116 Photo::saveNew($actor, $photo_uri, $thumb_uri, $title, $description, $options);
120 function activityObjectFromNotice($notice)
123 $photo = Photo::getByNotice($notice);
125 $object = new ActivityObject();
126 $object->id = $notice->uri;
127 $object->type = Photo::OBJECT_TYPE;
128 $object->title = $photo->title;
129 $object->summary = $notice->content;
130 $object->link = $notice->bestUrl();
132 $object->largerImage = $photo->photo_uri;
133 $object->thumbnail = $photo->thumb_uri;
134 $object->description = $photo->description;
140 function showNotice($notice, $out)
142 $photo = Photo::getByNotice($notice);
145 // TODO: ugly. feel like we should have a more abstract way
146 // of choosing the h-level.
147 $out->element('h3', array(), $title);
149 $out->element('img', array('src' => $photo->photo_uri,
151 // TODO: add description
155 function deleteRelated($notice)
157 $photo = Photo::getByNotice($notice);