From eb6cece8e4b18ebba99e36af2fa9ac35e63acb79 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 22 Aug 2011 23:48:38 -0400 Subject: [PATCH] update Activity plugin for 1.0.x --- plugins/Activity/ActivityPlugin.php | 230 +++++++++++++-------------- plugins/Activity/Notice_activity.php | 154 ------------------ 2 files changed, 107 insertions(+), 277 deletions(-) delete mode 100644 plugins/Activity/Notice_activity.php diff --git a/plugins/Activity/ActivityPlugin.php b/plugins/Activity/ActivityPlugin.php index 7ea705fbe2..e6e9ca82b2 100644 --- a/plugins/Activity/ActivityPlugin.php +++ b/plugins/Activity/ActivityPlugin.php @@ -57,41 +57,12 @@ class ActivityPlugin extends Plugin public $StartLike = true; public $StopLike = true; - /** - * Database schema setup - * - * @see Schema - * @see ColumnDef - * - * @return boolean hook value; true means continue processing, false means stop. - */ - - function onCheckSchema() - { - $schema = Schema::get(); - - // For storing the activity part of a notice - - $schema->ensureTable('notice_activity', - array(new ColumnDef('notice_id', 'integer', null, - false, 'PRI'), - new ColumnDef('verb', 'varchar', 255, - false, 'MUL'), - new ColumnDef('object', 'varchar', 255, - true, 'MUL'))); - - return true; - } - function onAutoload($cls) { $dir = dirname(__FILE__); switch ($cls) { - case 'Notice_activity': - include_once $dir . '/'.$cls.'.php'; - return false; default: return true; } @@ -101,23 +72,28 @@ class ActivityPlugin extends Plugin { // Only do this if config is enabled if(!$this->StartFollowUser) return true; - $user = User::staticGet('id', $subscriber->id); + $user = $subscriber->getUser(); if (!empty($user)) { - $rendered = sprintf(_m('Started following %s.'), + $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id, + 'subscribed' => $other->id)); + $rendered = sprintf(_m('%s started following %s.'), + $subscriber->profileurl, + $usbscriber->getBestName(), $other->profileurl, $other->getBestName()); - $content = sprintf(_m('Started following %s : %s'), + $content = sprintf(_m('%s (%s) started following %s (%s).'), + $subscriber->getBestName(), + $subscriber->profileurl, $other->getBestName(), - $other->profileurl); + $other->profileurl); $notice = Notice::saveNew($user->id, $content, 'activity', - array('rendered' => $rendered)); - - Notice_activity::setActivity($notice->id, - ActivityVerb::FOLLOW, - $other->getUri()); + array('rendered' => $rendered, + 'verb' => ActivityVerb::FOLLOW, + 'object_type' => ActivityObject::PERSON, + 'uri' => $sub->uri)); } return true; } @@ -126,23 +102,31 @@ class ActivityPlugin extends Plugin { // Only do this if config is enabled if(!$this->StopFollowUser) return true; - $user = User::staticGet('id', $subscriber->id); + $user = $subscriber->getUser(); if (!empty($user)) { - $rendered = sprintf(_m('Stopped following %s.'), + $rendered = sprintf(_m('%s stopped following %s.'), + $subscriber->profileurl, + $subscriber->getBestName(), $other->profileurl, $other->getBestName()); - $content = sprintf(_m('Stopped following %s : %s'), + $content = sprintf(_m('%s (%s) stopped following %s (%s).'), + $subscriber->getBestName(), + $subscriber->profileurl, $other->getBestName(), - $other->profileurl); + $other->profileurl); + $uri = TagURI::mint('stop-following:%d:%d:%s', + $subscriber->id, + $other->id, + common_date_iso8601(common_sql_now())); + $notice = Notice::saveNew($user->id, $content, 'activity', - array('rendered' => $rendered)); - - Notice_activity::setActivity($notice->id, - ActivityVerb::UNFOLLOW, - $other->getUri()); + array('rendered' => $rendered, + 'uri' => $uri, + 'verb' => ActivityVerb::UNFOLLOW, + 'object_type' => ActivityObject::PERSON)); } return true; } @@ -151,25 +135,34 @@ class ActivityPlugin extends Plugin { // Only do this if config is enabled if(!$this->StartLike) return true; - $user = User::staticGet('id', $profile->id); - + + $user = $profile->getUser(); + if (!empty($user)) { - $author = Profile::staticGet('id', $notice->profile_id); - $rendered = sprintf(_m('Liked %s\'s status.'), + + $author = $notice->getProfile(); + $fave = Fave::staticGet(array('user_id' => $user->id, + 'notice_id' => $notice->id)); + + $rendered = sprintf(_m('%s liked %s\'s update.'), + $profile->profileurl, + $profile->getBestName(), $notice->bestUrl(), $author->getBestName()); - $content = sprintf(_m('Liked %s\'s status: %s'), + $content = sprintf(_m('%s (%s) liked %s\'s status (%s)'), + $profile->getBestName(), + $profile->profileurl, $author->getBestName(), - $notice->bestUrl()); + $notice->bestUrl()); $notice = Notice::saveNew($user->id, $content, 'activity', - array('rendered' => $rendered)); - - Notice_activity::setActivity($notice->id, - ActivityVerb::FAVORITE, - $notice->uri); + array('rendered' => $rendered, + 'uri' => $fave->getURI(), + 'verb' => ActivityVerb::FAVOR, + 'object_type' => (($notice->verb == ActivityVerb::POST) ? + $notice->object_type : ActivityObject::ACTIVITY))); } return true; } @@ -182,21 +175,30 @@ class ActivityPlugin extends Plugin if (!empty($user)) { $author = Profile::staticGet('id', $notice->profile_id); - $rendered = sprintf(_m('Stopped liking %s\'s status.'), + $rendered = sprintf(_m('%s stopped liking %s\'s update.'), + $profile->profileurl, + $profile->getBestName(), $notice->bestUrl(), $author->getBestName()); - $content = sprintf(_m('Stopped liking %s\'s status: %s'), - $author->getBestName(), - $notice->bestUrl()); - + $content = sprintf(_m('%s (%s) stopped liking %s\'s status (%s)'), + $profile->getBestName(), + $profile->profileurl, + $author->getBestName(), + $notice->bestUrl()); + + $uri = TagURI::mint('unlike:%d:%d:%s', + $profile->id, + $notice->id, + common_date_iso8601(common_sql_now())); + $notice = Notice::saveNew($user->id, $content, 'activity', - array('rendered' => $rendered)); - - Notice_activity::setActivity($notice->id, - ActivityVerb::UNFAVORITE, - $notice->uri); + array('rendered' => $rendered, + 'uri' => $uri, + 'verb' => ActivityVerb::UNFAVORITE, + 'object_type' => (($notice->verb == ActivityVerb::POST) ? + $notice->object_type : ActivityObject::ACTIVITY))); } return true; } @@ -205,21 +207,30 @@ class ActivityPlugin extends Plugin { // Only do this if config is enabled if(!$this->JoinGroup) return true; - $rendered = sprintf(_m('Joined the group "%s".'), + + $profile = $user->getProfile(); + + $rendered = sprintf(_m('%s joined the group "%s".'), + $profile->profileurl, + $profile->getBestName(), $group->homeUrl(), $group->getBestName()); - $content = sprintf(_m('Joined the group %s : %s'), + $content = sprintf(_m('%s (%s) joined the group %s (%s).'), + $profile->getBestName(), + $profile->profileurl, $group->getBestName(), - $group->homeUrl()); + $group->homeUrl()); + $mem = Group_member::staticGet(array('group_id' => $group->id, + 'profile_id' => $profile->id)); + $notice = Notice::saveNew($user->id, $content, 'activity', - array('rendered' => $rendered)); - - Notice_activity::setActivity($notice->id, - ActivityVerb::JOIN, - $group->getUri()); + array('rendered' => $rendered, + 'uri' => $mem->getURI(), + 'verb' => ActivityVerb::JOIN, + 'object_type' => ActivityObject::GROUP)); return true; } @@ -227,65 +238,38 @@ class ActivityPlugin extends Plugin { // Only do this if config is enabled if(!$this->LeaveGroup) return true; - $rendered = sprintf(_m('Left the group "%s".'), + + $profile = $user->getProfile(); + + $rendered = sprintf(_m('%s left the group "%s".'), + $profile->profileurl, + $profile->getBestName(), $group->homeUrl(), $group->getBestName()); - $content = sprintf(_m('Left the group "%s" : %s'), + $content = sprintf(_m('%s (%s) left the group %s (%s)'), + $profile->getBestName(), + $profile->profileurl, $group->getBestName(), - $group->homeUrl()); + $group->homeUrl()); + + $uri = TagURI::mint('leave:%d:%d:%s', + $user->id, + $group->id, + common_date_iso8601(common_sql_now())); $notice = Notice::saveNew($user->id, $content, 'activity', - array('rendered' => $rendered)); - - Notice_activity::setActivity($notice->id, - ActivityVerb::LEAVE, - $group->getUri()); + array('rendered' => $rendered, + 'uri' => $uri, + 'verb' => ActivityVerb::LEAVE, + 'object_type' => ActivityObject::GROUP)); return true; } function onEndNoticeAsActivity($notice, &$activity) { - $na = Notice_activity::staticGet('notice_id', $notice->id); - - if (!empty($na)) { - - $activity->verb = $na->verb; - - // wipe the old object! - - $activity->objects = array(); - - switch ($na->verb) - { - case ActivityVerb::FOLLOW: - case ActivityVerb::UNFOLLOW: - $profile = Profile::fromURI($na->object); - if (!empty($profile)) { - $activity->objects[] = ActivityObject::fromProfile($profile); - } - break; - case ActivityVerb::FAVORITE: - case ActivityVerb::UNFAVORITE: - $target = Notice::staticGet('uri', $na->object); - if (!empty($target)) { - $activity->objects[] = ActivityObject::fromNotice($target); - } - break; - case ActivityVerb::JOIN: - case ActivityVerb::LEAVE: - $group = User_group::staticGet('uri', $na->object); - if (!empty($notice)) { - $activity->objects[] = ActivityObject::fromGroup($group); - } - break; - default: - break; - } - } - - return true; + return true; } diff --git a/plugins/Activity/Notice_activity.php b/plugins/Activity/Notice_activity.php deleted file mode 100644 index abc5f59c8f..0000000000 --- a/plugins/Activity/Notice_activity.php +++ /dev/null @@ -1,154 +0,0 @@ - - * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 - * @link http://status.net/ - * - * StatusNet - the distributed open-source microblogging tool - * Copyright (C) 2009, StatusNet, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -if (!defined('STATUSNET')) { - exit(1); -} - -require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; - -/** - * Data class for saving social activities as notices - * - * @category Action - * @package StatusNet - * @author Evan Prodromou - * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 - * @link http://status.net/ - * - * @see DB_DataObject - */ - -class Notice_activity extends Memcached_DataObject -{ - public $__table = 'notice_activity'; // table name - - public $notice_id; // int(4) primary_key not_null - public $verb; // varchar(255) - public $object; // varchar(255) - - /** - * Get an instance by key - * - * This is a utility method to get a single instance with a given key value. - * - * @param string $k Key to use to lookup (usually 'notice_id' for this class) - * @param mixed $v Value to lookup - * - * @return Notice_activity object found, or null for no hits - * - */ - - function staticGet($k, $v=null) - { - $result = Memcached_DataObject::staticGet('Notice_activity', $k, $v); - return $result; - } - - /** - * return table definition for DB_DataObject - * - * DB_DataObject needs to know something about the table to manipulate - * instances. This method provides all the DB_DataObject needs to know. - * - * @return array array of column definitions - */ - function table() - { - return array('notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, - 'verb' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL, - 'object' => DB_DATAOBJECT_STR); - } - - /** - * return key definitions for DB_DataObject - * - * DB_DataObject needs to know about keys that the table has, since it - * won't appear in StatusNet's own keys list. In most cases, this will - * simply reference your keyTypes() function. - * - * @return array list of key field names - */ - - function keys() - { - return array_keys($this->keyTypes()); - } - - /** - * return key definitions for Memcached_DataObject - * - * Our caching system uses the same key definitions, but uses a different - * method to get them. This key information is used to store and clear - * cached data, so be sure to list any key that will be used for static - * lookups. - * - * @return array associative array of key definitions, field name to type: - * 'K' for primary key: for compound keys, add an entry for each component; - * 'U' for unique keys: compound keys are not well supported here. - */ - function keyTypes() - { - return array('notice_id' => 'K'); - } - - /** - * Magic formula for non-autoincrementing integer primary keys - * - * If a table has a single integer column as its primary key, DB_DataObject - * assumes that the column is auto-incrementing and makes a sequence table - * to do this incrementation. Since we don't need this for our class, we - * overload this method and return the magic formula that DB_DataObject needs. - * - * @return array magic three-false array that stops auto-incrementing. - */ - - function sequenceKey() - { - return array(false, false, false); - } - - static function setActivity($notice_id, $verb, $object=null) - { - $act = self::staticGet('notice_id', $notice_id); - - if (empty($act)) { - $act = new Notice_activity(); - $act->notice_id = $notice_id; - $act->verb = $verb; - $act->object = $object; - $act->insert(); - } else { - $orig = clone($act); - $act->verb = $verb; - $act->object = $object; - $act->update($orig); - } - } -} -- 2.39.5