From 34d0e1088db29fc7329e70222f3a59335537e096 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 22 Aug 2011 16:36:23 -0400 Subject: [PATCH] add URI members to social activity classes --- classes/Fave.php | 28 +++++++++++++++++++++++----- classes/Group_member.php | 24 ++++++++++++++++++++---- classes/Subscription.php | 26 ++++++++++++++++++++++---- db/core.php | 13 ++++++++++++- 4 files changed, 77 insertions(+), 14 deletions(-) diff --git a/classes/Fave.php b/classes/Fave.php index c69a6816d0..d954117292 100644 --- a/classes/Fave.php +++ b/classes/Fave.php @@ -12,6 +12,7 @@ class Fave extends Memcached_DataObject public $__table = 'fave'; // table name public $notice_id; // int(4) primary_key not_null public $user_id; // int(4) primary_key not_null + public $uri; // varchar(255) public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP /* Static get */ @@ -39,7 +40,10 @@ class Fave extends Memcached_DataObject $fave->user_id = $profile->id; $fave->notice_id = $notice->id; - + $fave->modified = common_sql_now(); + $fave->uri = self::newURI($fave->user_id, + $fave->notice_id, + $fave->modified); if (!$fave->insert()) { common_log_db_error($fave, 'INSERT', __FILE__); return false; @@ -102,10 +106,7 @@ class Fave extends Memcached_DataObject // FIXME: rationalize this with URL below - $act->id = TagURI::mint('favor:%d:%d:%s', - $profile->id, - $notice->id, - common_date_iso8601($this->modified)); + $act->id = $this->getURI(); $act->time = strtotime($this->modified); // TRANS: Activity title when marking a notice as favorite. @@ -156,4 +157,21 @@ class Fave extends Memcached_DataObject return $fav; } + + function getURI() + { + if (!empty($this->uri)) { + return $this->uri; + } else { + return self::newURI($this->user_id, $this->notice_id, $this->modified); + } + } + + static function newURI($profile_id, $notice_id, $modified) + { + return TagURI::mint('favor:%d:%d:%s', + $profile_id, + $notice_id, + common_date_iso8601($modified)); + } } diff --git a/classes/Group_member.php b/classes/Group_member.php index 5385e0f487..a553af3475 100644 --- a/classes/Group_member.php +++ b/classes/Group_member.php @@ -12,6 +12,7 @@ class Group_member extends Memcached_DataObject public $group_id; // int(4) primary_key not_null public $profile_id; // int(4) primary_key not_null public $is_admin; // tinyint(1) + public $uri; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP @@ -43,6 +44,7 @@ class Group_member extends Memcached_DataObject $member->group_id = $group_id; $member->profile_id = $profile_id; $member->created = common_sql_now(); + $member->uri = self::newURI($profile_id, $group_id, $member->created); $result = $member->insert(); @@ -134,10 +136,7 @@ class Group_member extends Memcached_DataObject $act = new Activity(); - $act->id = TagURI::mint('join:%d:%d:%s', - $member->id, - $group->id, - common_date_iso8601($this->created)); + $act->id = $this->getURI(); $act->actor = ActivityObject::fromProfile($member); $act->verb = ActivityVerb::JOIN; @@ -171,4 +170,21 @@ class Group_member extends Memcached_DataObject { mail_notify_group_join($this->getGroup(), $this->getMember()); } + + function getURI() + { + if (!empty($this->uri)) { + return $this->uri; + } else { + return self::newURI($this->member_id, $this->group_id, $this->created); + } + } + + static function newURI($member_id, $group_id, $created) + { + return TagURI::mint('join:%d:%d:%s', + $member_id, + $group_id, + common_date_iso8601($created)); + } } diff --git a/classes/Subscription.php b/classes/Subscription.php index e83621eb86..e0c5b5ab0e 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -39,6 +39,7 @@ class Subscription extends Memcached_DataObject public $sms; // tinyint(1) default_1 public $token; // varchar(255) public $secret; // varchar(255) + public $uri; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP @@ -138,6 +139,9 @@ class Subscription extends Memcached_DataObject $sub->jabber = 1; $sub->sms = 1; $sub->created = common_sql_now(); + $sub->uri = self::newURI($sub->subscriber, + $sub->subscribed, + $sub->created); $result = $sub->insert(); @@ -238,10 +242,7 @@ class Subscription extends Memcached_DataObject // XXX: rationalize this with the URL - $act->id = TagURI::mint('follow:%d:%d:%s', - $subscriber->id, - $subscribed->id, - common_date_iso8601($this->created)); + $act->id = $this->getURI(); $act->time = strtotime($this->created); // TRANS: Activity title when subscribing to another person. @@ -404,4 +405,21 @@ class Subscription extends Memcached_DataObject return $result; } + + function getURI() + { + if (!empty($this->uri)) { + return $this->uri; + } else { + return self::newURI($this->subscriber, $this->subscribed, $this->created); + } + } + + static function newURI($subscriber_id, $subscribed_id, $created) + { + return TagURI::mint('follow:%d:%d:%s', + $subscriber_id, + $subscribed_id, + common_date_iso8601($created)); + } } diff --git a/db/core.php b/db/core.php index 7297081079..cfecd23d47 100644 --- a/db/core.php +++ b/db/core.php @@ -170,10 +170,14 @@ $schema['subscription'] = array( 'sms' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'deliver sms messages'), 'token' => array('type' => 'varchar', 'length' => 255, 'description' => 'authorization token'), 'secret' => array('type' => 'varchar', 'length' => 255, 'description' => 'token secret'), + 'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier'), '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('subscriber', 'subscribed'), + 'unique keys' => array( + 'subscription_uri_key' => array('uri'), + ), 'indexes' => array( 'subscription_subscriber_idx' => array('subscriber', 'created'), 'subscription_subscribed_idx' => array('subscribed', 'created'), @@ -263,9 +267,13 @@ $schema['fave'] = array( 'fields' => array( 'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice that is the favorite'), 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user who likes this notice'), + 'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'), 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), ), 'primary key' => array('notice_id', 'user_id'), + 'unique keys' => array( + 'fave_uri_key' => array('uri'), + ), 'foreign keys' => array( 'fave_notice_id_fkey' => array('notice', array('notice_id' => 'id')), 'fave_user_id_fkey' => array('profile', array('user_id' => 'id')), // note: formerly referenced notice.id, but we can now record remote users' favorites @@ -742,11 +750,14 @@ $schema['group_member'] = array( 'group_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to user_group'), 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'), 'is_admin' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'is this user an admin?'), - + 'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universal identifier'), '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('group_id', 'profile_id'), + 'unique keys' => array( + 'group_member_uri_key' => array('uri'), + ), 'foreign keys' => array( 'group_member_group_id_fkey' => array('user_group', array('group_id' => 'id')), 'group_member_profile_id_fkey' => array('profile', array('profile_id' => 'id')), -- 2.39.5