summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-10-06 17:16:13 -0700
committerBrion Vibber <brion@pobox.com>2010-10-06 17:16:13 -0700
commit99194e03fa50b61f99164674afc949b4bbefd44a (patch)
tree2d38f6ec4b1e6f314d925233c781315541772a0f /classes
parent033a7570133d4183c2e162859e9b85fe7df3e40b (diff)
parent71176b9a98ef5298162f821c621a0e467dd9570b (diff)
Merge branch '1.0.x' into schema-x
Conflicts: plugins/OStatus/classes/Ostatus_profile.php
Diffstat (limited to 'classes')
-rw-r--r--classes/Avatar.php5
-rw-r--r--classes/Config.php6
-rw-r--r--classes/Consumer.php1
-rwxr-xr-xclasses/Conversation.php2
-rw-r--r--classes/Fave.php28
-rw-r--r--classes/File.php1
-rw-r--r--classes/File_oembed.php1
-rw-r--r--classes/File_redirection.php9
-rw-r--r--classes/File_thumbnail.php1
-rw-r--r--classes/File_to_post.php1
-rw-r--r--classes/Foreign_link.php2
-rw-r--r--classes/Foreign_service.php4
-rw-r--r--classes/Foreign_subscription.php2
-rw-r--r--classes/Foreign_user.php1
-rw-r--r--classes/Group_block.php1
-rw-r--r--classes/Group_inbox.php2
-rw-r--r--classes/Group_member.php55
-rw-r--r--classes/Inbox.php9
-rw-r--r--classes/Invitation.php2
-rw-r--r--classes/Memcached_DataObject.php23
-rw-r--r--classes/Message.php1
-rw-r--r--classes/Nonce.php1
-rw-r--r--classes/Notice.php178
-rw-r--r--classes/Notice_source.php2
-rw-r--r--classes/Notice_tag.php6
-rw-r--r--classes/Oauth_application.php2
-rw-r--r--classes/Oauth_application_user.php1
-rw-r--r--classes/Profile.php114
-rw-r--r--classes/Profile_tag.php2
-rw-r--r--classes/Remember_me.php10
-rw-r--r--classes/Remote_profile.php8
-rw-r--r--classes/Safe_DataObject.php1
-rw-r--r--classes/Sms_carrier.php4
-rw-r--r--classes/Status_network.php26
-rw-r--r--classes/Status_network_tag.php70
-rw-r--r--classes/Subscription.php29
-rw-r--r--classes/User.php68
-rw-r--r--classes/User_group.php1
-rw-r--r--classes/User_username.php6
39 files changed, 487 insertions, 199 deletions
diff --git a/classes/Avatar.php b/classes/Avatar.php
index dbe2cd813..6edc81768 100644
--- a/classes/Avatar.php
+++ b/classes/Avatar.php
@@ -42,8 +42,9 @@ class Avatar extends Memcached_DataObject
return Memcached_DataObject::pkeyGet('Avatar', $kv);
}
- // where should the avatar go for this user?
-
+ /**
+ * Where should the avatar go for this user?
+ */
static function filename($id, $extension, $size=null, $extra=null)
{
if ($size) {
diff --git a/classes/Config.php b/classes/Config.php
index 43b99587f..e14730438 100644
--- a/classes/Config.php
+++ b/classes/Config.php
@@ -58,7 +58,7 @@ class Config extends Memcached_DataObject
$c = self::memcache();
if (!empty($c)) {
- $settings = $c->get(common_cache_key(self::settingsKey));
+ $settings = $c->get(Cache::key(self::settingsKey));
if ($settings !== false) {
return $settings;
}
@@ -77,7 +77,7 @@ class Config extends Memcached_DataObject
$config->free();
if (!empty($c)) {
- $c->set(common_cache_key(self::settingsKey), $settings);
+ $c->set(Cache::key(self::settingsKey), $settings);
}
return $settings;
@@ -154,7 +154,7 @@ class Config extends Memcached_DataObject
$c = self::memcache();
if (!empty($c)) {
- $c->delete(common_cache_key(self::settingsKey));
+ $c->delete(Cache::key(self::settingsKey));
}
}
}
diff --git a/classes/Consumer.php b/classes/Consumer.php
index ce399f278..c1090b85a 100644
--- a/classes/Consumer.php
+++ b/classes/Consumer.php
@@ -65,5 +65,4 @@ class Consumer extends Memcached_DataObject
$nonce->consumer_key = $this->consumer_key;
$nonce->delete();
}
-
}
diff --git a/classes/Conversation.php b/classes/Conversation.php
index f540004ef..aab55723f 100755
--- a/classes/Conversation.php
+++ b/classes/Conversation.php
@@ -74,6 +74,4 @@ class Conversation extends Memcached_DataObject
return $conv;
}
-
}
-
diff --git a/classes/Fave.php b/classes/Fave.php
index ed4f56aee..9922ae45c 100644
--- a/classes/Fave.php
+++ b/classes/Fave.php
@@ -129,4 +129,32 @@ class Fave extends Memcached_DataObject
return $ids;
}
+
+ function asActivity()
+ {
+ $notice = Notice::staticGet('id', $this->notice_id);
+ $profile = Profile::staticGet('id', $this->user_id);
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::FAVORITE;
+ $act->id = TagURI::mint('favor:%d:%d:%s',
+ $profile->id,
+ $notice->id,
+ common_date_iso8601($this->modified));
+
+ $act->time = strtotime($this->modified);
+ // TRANS: Activity title when marking a notice as favorite.
+ $act->title = _("Favor");
+ // TRANS: Ntofication given when a user marks a notice as favorite.
+ // TRANS: %1$s is a user nickname or full name, %2$s is a notice URI.
+ $act->content = sprintf(_('%1$s marked notice %2$s as a favorite.'),
+ $profile->getBestName(),
+ $notice->uri);
+
+ $act->actor = ActivityObject::fromProfile($profile);
+ $act->objects[] = ActivityObject::fromNotice($notice);
+
+ return $act;
+ }
}
diff --git a/classes/File.php b/classes/File.php
index 407fd3211..d457968b5 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -29,7 +29,6 @@ require_once INSTALLDIR.'/classes/File_to_post.php';
/**
* Table Definition for file
*/
-
class File extends Memcached_DataObject
{
###START_AUTOCODE
diff --git a/classes/File_oembed.php b/classes/File_oembed.php
index 041b44740..4813d5dda 100644
--- a/classes/File_oembed.php
+++ b/classes/File_oembed.php
@@ -131,4 +131,3 @@ class File_oembed extends Memcached_DataObject
}
}
}
-
diff --git a/classes/File_redirection.php b/classes/File_redirection.php
index 00ec75309..92f0125a4 100644
--- a/classes/File_redirection.php
+++ b/classes/File_redirection.php
@@ -240,6 +240,14 @@ class File_redirection extends Memcached_DataObject
} else if (is_string($redir_data)) {
// The file is a known redirect target.
$file = File::staticGet('url', $redir_data);
+ if (empty($file)) {
+ // @fixme should we save a new one?
+ // this case was triggering sometimes for redirects
+ // with unresolvable targets; found while fixing
+ // "can't linkify" bugs with shortened links to
+ // SSL sites with cert issues.
+ return null;
+ }
$file_id = $file->id;
}
} else {
@@ -303,4 +311,3 @@ class File_redirection extends Memcached_DataObject
$file_redir->insert();
}
}
-
diff --git a/classes/File_thumbnail.php b/classes/File_thumbnail.php
index f8b70356c..edae8ac21 100644
--- a/classes/File_thumbnail.php
+++ b/classes/File_thumbnail.php
@@ -57,4 +57,3 @@ class File_thumbnail extends Memcached_DataObject
$tn->insert();
}
}
-
diff --git a/classes/File_to_post.php b/classes/File_to_post.php
index 72a42b088..530921adc 100644
--- a/classes/File_to_post.php
+++ b/classes/File_to_post.php
@@ -67,4 +67,3 @@ class File_to_post extends Memcached_DataObject
return Memcached_DataObject::pkeyGet('File_to_post', $kv);
}
}
-
diff --git a/classes/Foreign_link.php b/classes/Foreign_link.php
index e47b2e309..60db51595 100644
--- a/classes/Foreign_link.php
+++ b/classes/Foreign_link.php
@@ -44,7 +44,6 @@ class Foreign_link extends Memcached_DataObject
$result = $flink->find(true);
return empty($result) ? null : $flink;
-
}
static function getByForeignID($foreign_id, $service)
@@ -129,5 +128,4 @@ class Foreign_link extends Memcached_DataObject
return false;
}
}
-
}
diff --git a/classes/Foreign_service.php b/classes/Foreign_service.php
index ef614dbd6..dd74fd2ca 100644
--- a/classes/Foreign_service.php
+++ b/classes/Foreign_service.php
@@ -4,7 +4,7 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Foreign_service extends Memcached_DataObject
+class Foreign_service extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -12,7 +12,7 @@ class Foreign_service extends Memcached_DataObject
public $__table = 'foreign_service'; // table name
public $id; // int(4) primary_key not_null
public $name; // varchar(32) unique_key not_null
- public $description; // varchar(255)
+ public $description; // varchar(255)
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
diff --git a/classes/Foreign_subscription.php b/classes/Foreign_subscription.php
index d50860621..ec2631238 100644
--- a/classes/Foreign_subscription.php
+++ b/classes/Foreign_subscription.php
@@ -4,7 +4,7 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Foreign_subscription extends Memcached_DataObject
+class Foreign_subscription extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
diff --git a/classes/Foreign_user.php b/classes/Foreign_user.php
index e98a16064..8e6e0b33e 100644
--- a/classes/Foreign_user.php
+++ b/classes/Foreign_user.php
@@ -83,5 +83,4 @@ class Foreign_user extends Memcached_DataObject
}
return $result;
}
-
}
diff --git a/classes/Group_block.php b/classes/Group_block.php
index 9f4d59295..ffc57a496 100644
--- a/classes/Group_block.php
+++ b/classes/Group_block.php
@@ -111,5 +111,4 @@ class Group_block extends Memcached_DataObject
return true;
}
-
}
diff --git a/classes/Group_inbox.php b/classes/Group_inbox.php
index 2a0787e38..8f5c65e59 100644
--- a/classes/Group_inbox.php
+++ b/classes/Group_inbox.php
@@ -1,8 +1,8 @@
<?php
+
/**
* Table Definition for group_inbox
*/
-
class Group_inbox extends Memcached_DataObject
{
###START_AUTOCODE
diff --git a/classes/Group_member.php b/classes/Group_member.php
index 2239461be..c40d06a1d 100644
--- a/classes/Group_member.php
+++ b/classes/Group_member.php
@@ -65,4 +65,59 @@ class Group_member extends Memcached_DataObject
return true;
}
+
+ function getMember()
+ {
+ $member = Profile::staticGet('id', $this->profile_id);
+
+ if (empty($member)) {
+ // TRANS: Exception thrown providing an invalid profile ID.
+ // TRANS: %s is the invalid profile ID.
+ throw new Exception(sprintf(_("Profile ID %s is invalid."),$this->profile_id));
+ }
+
+ return $member;
+ }
+
+ function getGroup()
+ {
+ $group = User_group::staticGet('id', $this->group_id);
+
+ if (empty($group)) {
+ // TRANS: Exception thrown providing an invalid group ID.
+ // TRANS: %s is the invalid group ID.
+ throw new Exception(sprintf(_("Group ID %s is invalid."),$this->group_id));
+ }
+
+ return $group;
+ }
+
+ function asActivity()
+ {
+ $member = $this->getMember();
+ $group = $this->getGroup();
+
+ $act = new Activity();
+
+ $act->id = TagURI::mint('join:%d:%d:%s',
+ $member->id,
+ $group->id,
+ common_date_iso8601($this->created));
+
+ $act->actor = ActivityObject::fromProfile($member);
+ $act->verb = ActivityVerb::JOIN;
+ $act->objects[] = ActivityObject::fromGroup($group);
+
+ $act->time = strtotime($this->created);
+ // TRANS: Activity title.
+ $act->title = _("Join");
+
+ // TRANS: Success message for subscribe to group attempt through OStatus.
+ // TRANS: %1$s is the member name, %2$s is the subscribed group's name.
+ $act->content = sprintf(_('%1$s has joined group %2$s.'),
+ $member->getBestName(),
+ $group->getBestName());
+
+ return $act;
+ }
}
diff --git a/classes/Inbox.php b/classes/Inbox.php
index 430419ba5..a1ab6215f 100644
--- a/classes/Inbox.php
+++ b/classes/Inbox.php
@@ -55,7 +55,6 @@ class Inbox extends Memcached_DataObject
/**
* Create a new inbox from existing Notice_inbox stuff
*/
-
static function initialize($user_id)
{
$inbox = Inbox::fromNoticeInbox($user_id);
@@ -115,10 +114,10 @@ class Inbox extends Memcached_DataObject
*/
static function insertNotice($user_id, $notice_id)
{
- // Going straight to the DB rather than trusting our caching
- // during an update. Note: not using DB_DataObject::staticGet,
- // which is unsafe to use directly (in-process caching causes
- // memory leaks, which accumulate in queue processes).
+ // Going straight to the DB rather than trusting our caching
+ // during an update. Note: not using DB_DataObject::staticGet,
+ // which is unsafe to use directly (in-process caching causes
+ // memory leaks, which accumulate in queue processes).
$inbox = new Inbox();
if (!$inbox->get('user_id', $user_id)) {
$inbox = Inbox::initialize($user_id);
diff --git a/classes/Invitation.php b/classes/Invitation.php
index 8a36fd8df..0e87c1629 100644
--- a/classes/Invitation.php
+++ b/classes/Invitation.php
@@ -4,7 +4,7 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Invitation extends Memcached_DataObject
+class Invitation extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index 0f1ed0489..8ffb46cc5 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -124,7 +124,7 @@ class Memcached_DataObject extends Safe_DataObject
}
static function memcache() {
- return common_memcache();
+ return Cache::instance();
}
static function cacheKey($cls, $k, $v) {
@@ -134,7 +134,7 @@ class Memcached_DataObject extends Safe_DataObject
str_replace("\n", " ", $e->getTraceAsString()));
}
$vstr = self::valueString($v);
- return common_cache_key(strtolower($cls).':'.$k.':'.$vstr);
+ return Cache::key(strtolower($cls).':'.$k.':'.$vstr);
}
static function getcached($cls, $k, $v) {
@@ -189,11 +189,11 @@ class Memcached_DataObject extends Safe_DataObject
str_replace("\n", " ", $e->getTraceAsString()));
return false;
} else {
- $keys = $this->_allCacheKeys();
+ $keys = $this->_allCacheKeys();
- foreach ($keys as $key) {
- $c->set($key, $this);
- }
+ foreach ($keys as $key) {
+ $c->set($key, $this);
+ }
}
}
@@ -302,8 +302,8 @@ class Memcached_DataObject extends Safe_DataObject
$inst->query($qry);
return $inst;
}
- $key_part = common_keyize($cls).':'.md5($qry);
- $ckey = common_cache_key($key_part);
+ $key_part = Cache::keyize($cls).':'.md5($qry);
+ $ckey = Cache::key($key_part);
$stored = $c->get($ckey);
if ($stored !== false) {
@@ -550,7 +550,7 @@ class Memcached_DataObject extends Safe_DataObject
$keyPart = vsprintf($format, $args);
- $cacheKey = common_cache_key($keyPart);
+ $cacheKey = Cache::key($keyPart);
return $c->delete($cacheKey);
}
@@ -592,7 +592,7 @@ class Memcached_DataObject extends Safe_DataObject
return false;
}
- $cacheKey = common_cache_key($keyPart);
+ $cacheKey = Cache::key($keyPart);
return $c->get($cacheKey);
}
@@ -605,7 +605,7 @@ class Memcached_DataObject extends Safe_DataObject
return false;
}
- $cacheKey = common_cache_key($keyPart);
+ $cacheKey = Cache::key($keyPart);
return $c->set($cacheKey, $value, $flag, $expiry);
}
@@ -637,4 +637,3 @@ class Memcached_DataObject extends Safe_DataObject
return $vstr;
}
}
-
diff --git a/classes/Message.php b/classes/Message.php
index fa0c5b318..353dc01f9 100644
--- a/classes/Message.php
+++ b/classes/Message.php
@@ -38,7 +38,6 @@ class Message extends Memcached_DataObject
}
static function saveNew($from, $to, $content, $source) {
-
$sender = Profile::staticGet('id', $from);
if (!$sender->hasRight(Right::NEWMESSAGE)) {
diff --git a/classes/Nonce.php b/classes/Nonce.php
index 2f8ab00b5..93191bd40 100644
--- a/classes/Nonce.php
+++ b/classes/Nonce.php
@@ -36,5 +36,4 @@ class Nonce extends Memcached_DataObject
{
return array('consumer_key,token' => 'token:consumer_key,token');
}
-
}
diff --git a/classes/Notice.php b/classes/Notice.php
index 0eeebfadf..2f8c7d5d5 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -121,16 +121,19 @@ class Notice extends Memcached_DataObject
$deleted->insert();
}
- // Clear related records
+ if (Event::handle('NoticeDeleteRelated', array($this))) {
- $this->clearReplies();
- $this->clearRepeats();
- $this->clearFaves();
- $this->clearTags();
- $this->clearGroupInboxes();
+ // Clear related records
- // NOTE: we don't clear inboxes
- // NOTE: we don't clear queue items
+ $this->clearReplies();
+ $this->clearRepeats();
+ $this->clearFaves();
+ $this->clearTags();
+ $this->clearGroupInboxes();
+
+ // NOTE: we don't clear inboxes
+ // NOTE: we don't clear queue items
+ }
$result = parent::delete();
@@ -245,6 +248,8 @@ class Notice extends Memcached_DataObject
if (!empty($options)) {
$options = $options + $defaults;
extract($options);
+ } else {
+ extract($defaults);
}
if (!isset($is_local)) {
@@ -578,7 +583,9 @@ class Notice extends Memcached_DataObject
if ($f2p->find()) {
while ($f2p->fetch()) {
$f = File::staticGet($f2p->file_id);
- $att[] = clone($f);
+ if ($f) {
+ $att[] = clone($f);
+ }
}
}
return $att;
@@ -586,7 +593,7 @@ class Notice extends Memcached_DataObject
function getStreamByIds($ids)
{
- $cache = common_memcache();
+ $cache = Cache::instance();
if (!empty($cache)) {
$notices = array();
@@ -738,6 +745,7 @@ class Notice extends Memcached_DataObject
1,
1
);
+
if ($conversation->N > 0) {
return true;
}
@@ -746,15 +754,22 @@ class Notice extends Memcached_DataObject
}
/**
- * @param $groups array of Group *objects*
- * @param $recipients array of profile *ids*
+ * Pull up a full list of local recipients who will be getting
+ * this notice in their inbox. Results will be cached, so don't
+ * change the input data wily-nilly!
+ *
+ * @param array $groups optional list of Group objects;
+ * if left empty, will be loaded from group_inbox records
+ * @param array $recipient optional list of reply profile ids
+ * if left empty, will be loaded from reply records
+ * @return array associating recipient user IDs with an inbox source constant
*/
function whoGets($groups=null, $recipients=null)
{
$c = self::memcache();
if (!empty($c)) {
- $ni = $c->get(common_cache_key('notice:who_gets:'.$this->id));
+ $ni = $c->get(Cache::key('notice:who_gets:'.$this->id));
if ($ni !== false) {
return $ni;
}
@@ -780,33 +795,33 @@ class Notice extends Memcached_DataObject
$ni[$id] = NOTICE_INBOX_SOURCE_SUB;
}
- $profile = $this->getProfile();
-
foreach ($groups as $group) {
$users = $group->getUserMembers();
foreach ($users as $id) {
if (!array_key_exists($id, $ni)) {
- $user = User::staticGet('id', $id);
- if (!$user->hasBlocked($profile)) {
- $ni[$id] = NOTICE_INBOX_SOURCE_GROUP;
- }
+ $ni[$id] = NOTICE_INBOX_SOURCE_GROUP;
}
}
}
foreach ($recipients as $recipient) {
-
if (!array_key_exists($recipient, $ni)) {
- $recipientUser = User::staticGet('id', $recipient);
- if (!empty($recipientUser)) {
- $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY;
- }
+ $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY;
+ }
+ }
+
+ // Exclude any deleted, non-local, or blocking recipients.
+ $profile = $this->getProfile();
+ foreach ($ni as $id => $source) {
+ $user = User::staticGet('id', $id);
+ if (empty($user) || $user->hasBlocked($profile)) {
+ unset($ni[$id]);
}
}
if (!empty($c)) {
// XXX: pack this data better
- $c->set(common_cache_key('notice:who_gets:'.$this->id), $ni);
+ $c->set(Cache::key('notice:who_gets:'.$this->id), $ni);
}
return $ni;
@@ -1014,25 +1029,31 @@ class Notice extends Memcached_DataObject
if (empty($uris)) {
return;
}
+
$sender = Profile::staticGet($this->profile_id);
foreach (array_unique($uris) as $uri) {
- $user = User::staticGet('uri', $uri);
+ $profile = Profile::fromURI($uri);
- if (!empty($user)) {
- if ($user->hasBlocked($sender)) {
- continue;
- }
+ if (empty($profile)) {
+ common_log(LOG_WARNING, "Unable to determine profile for URI '$uri'");
+ continue;
+ }
- $reply = new Reply();
+ if ($profile->hasBlocked($sender)) {
+ common_log(LOG_INFO, "Not saving reply to profile {$profile->id} ($uri) from sender {$sender->id} because of a block.");
+ continue;
+ }
- $reply->notice_id = $this->id;
- $reply->profile_id = $user->id;
- common_log(LOG_INFO, __METHOD__ . ": saving reply: notice $this->id to profile $user->id");
+ $reply = new Reply();
- $id = $reply->insert();
- }
+ $reply->notice_id = $this->id;
+ $reply->profile_id = $profile->id;
+
+ common_log(LOG_INFO, __METHOD__ . ": saving reply: notice $this->id to profile $profile->id");
+
+ $id = $reply->insert();
}
return;
@@ -1096,7 +1117,7 @@ class Notice extends Memcached_DataObject
common_log_db_error($reply, 'INSERT', __FILE__);
// TRANS: Server exception thrown when a reply cannot be saved.
// TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user.
- throw new ServerException(sprintf(_("Could not save reply for %1$d, %2$d."), $this->id, $mentioned->id));
+ throw new ServerException(sprintf(_('Could not save reply for %1$d, %2$d.'), $this->id, $mentioned->id));
} else {
$replied[$mentioned->id] = 1;
self::blow('reply:stream:%d', $mentioned->id);
@@ -1199,6 +1220,64 @@ class Notice extends Memcached_DataObject
return $groups;
}
+ function asActivity()
+ {
+ $profile = $this->getProfile();
+
+ $act = new Activity();
+
+ $act->actor = ActivityObject::fromProfile($profile);
+ $act->verb = ActivityVerb::POST;
+ $act->objects[] = ActivityObject::fromNotice($this);
+
+ $act->time = strtotime($this->created);
+ $act->link = $this->bestUrl();
+
+ $act->content = common_xml_safe_str($this->rendered);
+ $act->id = $this->uri;
+ $act->title = common_xml_safe_str($this->content);
+
+ $ctx = new ActivityContext();
+
+ if (!empty($this->reply_to)) {
+ $reply = Notice::staticGet('id', $this->reply_to);
+ if (!empty($reply)) {
+ $ctx->replyToID = $reply->uri;
+ $ctx->replyToUrl = $reply->bestUrl();
+ }
+ }
+
+ $ctx->location = $this->getLocation();
+
+ $conv = null;
+
+ if (!empty($this->conversation)) {
+ $conv = Conversation::staticGet('id', $this->conversation);
+ if (!empty($conv)) {
+ $ctx->conversation = $conv->uri;
+ }
+ }
+
+ $reply_ids = $this->getReplies();
+
+ foreach ($reply_ids as $id) {
+ $profile = Profile::staticGet('id', $id);
+ if (!empty($profile)) {
+ $ctx->attention[] = $profile->getUri();
+ }
+ }
+
+ $groups = $this->getGroups();
+
+ foreach ($groups as $group) {
+ $ctx->attention[] = $group->uri;
+ }
+
+ $act->context = $ctx;
+
+ return $act;
+ }
+
// This has gotten way too long. Needs to be sliced up into functional bits
// or ideally exported to a utility class.
@@ -1227,13 +1306,10 @@ class Notice extends Memcached_DataObject
}
if (Event::handle('StartActivitySource', array(&$this, &$xs))) {
-
if ($source) {
-
$atom_feed = $profile->getAtomFeed();
if (!empty($atom_feed)) {
-
$xs->elementStart('source');
// XXX: we should store the actual feed ID
@@ -1574,7 +1650,7 @@ class Notice extends Memcached_DataObject
function stream($fn, $args, $cachekey, $offset=0, $limit=20, $since_id=0, $max_id=0)
{
- $cache = common_memcache();
+ $cache = Cache::instance();
if (empty($cache) ||
$since_id != 0 || $max_id != 0 ||
@@ -1584,7 +1660,7 @@ class Notice extends Memcached_DataObject
$max_id)));
}
- $idkey = common_cache_key($cachekey);
+ $idkey = Cache::key($cachekey);
$idstr = $cache->get($idkey);
@@ -1766,17 +1842,17 @@ class Notice extends Memcached_DataObject
function repeatStream($limit=100)
{
- $cache = common_memcache();
+ $cache = Cache::instance();
if (empty($cache)) {
$ids = $this->_repeatStreamDirect($limit);
} else {
- $idstr = $cache->get(common_cache_key('notice:repeats:'.$this->id));
+ $idstr = $cache->get(Cache::key('notice:repeats:'.$this->id));
if ($idstr !== false) {
$ids = explode(',', $idstr);
} else {
$ids = $this->_repeatStreamDirect(100);
- $cache->set(common_cache_key('notice:repeats:'.$this->id), implode(',', $ids));
+ $cache->set(Cache::key('notice:repeats:'.$this->id), implode(',', $ids));
}
if ($limit < 100) {
// We do a max of 100, so slice down to limit
@@ -1821,7 +1897,6 @@ class Notice extends Memcached_DataObject
$options = array();
if (!empty($location_id) && !empty($location_ns)) {
-
$options['location_id'] = $location_id;
$options['location_ns'] = $location_ns;
@@ -1833,7 +1908,6 @@ class Notice extends Memcached_DataObject
}
} else if (!empty($lat) && !empty($lon)) {
-
$options['lat'] = $lat;
$options['lon'] = $lon;
@@ -1844,7 +1918,6 @@ class Notice extends Memcached_DataObject
$options['location_ns'] = $location->location_ns;
}
} else if (!empty($profile)) {
-
if (isset($profile->lat) && isset($profile->lon)) {
$options['lat'] = $profile->lat;
$options['lon'] = $profile->lon;
@@ -1930,10 +2003,10 @@ class Notice extends Memcached_DataObject
if ($tag->find()) {
while ($tag->fetch()) {
- self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, common_keyize($tag->tag));
- self::blow('profile:notice_ids_tagged:%d:%s;last', $this->profile_id, common_keyize($tag->tag));
- self::blow('notice_tag:notice_ids:%s', common_keyize($tag->tag));
- self::blow('notice_tag:notice_ids:%s;last', common_keyize($tag->tag));
+ self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, Cache::keyize($tag->tag));
+ self::blow('profile:notice_ids_tagged:%d:%s;last', $this->profile_id, Cache::keyize($tag->tag));
+ self::blow('notice_tag:notice_ids:%s', Cache::keyize($tag->tag));
+ self::blow('notice_tag:notice_ids:%s;last', Cache::keyize($tag->tag));
$tag->delete();
}
}
@@ -1961,6 +2034,7 @@ class Notice extends Memcached_DataObject
{
// We always insert for the author so they don't
// have to wait
+ Event::handle('StartNoticeDistribute', array($this));
$user = User::staticGet('id', $this->profile_id);
if (!empty($user)) {
diff --git a/classes/Notice_source.php b/classes/Notice_source.php
index e7568bbca..43893ebe1 100644
--- a/classes/Notice_source.php
+++ b/classes/Notice_source.php
@@ -4,7 +4,7 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Notice_source extends Memcached_DataObject
+class Notice_source extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
diff --git a/classes/Notice_tag.php b/classes/Notice_tag.php
index a5d0716a7..9ade36c34 100644
--- a/classes/Notice_tag.php
+++ b/classes/Notice_tag.php
@@ -40,7 +40,7 @@ class Notice_tag extends Memcached_DataObject
$ids = Notice::stream(array('Notice_tag', '_streamDirect'),
array($tag),
- 'notice_tag:notice_ids:' . common_keyize($tag),
+ 'notice_tag:notice_ids:' . Cache::keyize($tag),
$offset, $limit);
return Notice::getStreamByIds($ids);
@@ -82,9 +82,9 @@ class Notice_tag extends Memcached_DataObject
function blowCache($blowLast=false)
{
- self::blow('notice_tag:notice_ids:%s', common_keyize($this->tag));
+ self::blow('notice_tag:notice_ids:%s', Cache::keyize($this->tag));
if ($blowLast) {
- self::blow('notice_tag:notice_ids:%s;last', common_keyize($this->tag));
+ self::blow('notice_tag:notice_ids:%s;last', Cache::keyize($this->tag));
}
}
diff --git a/classes/Oauth_application.php b/classes/Oauth_application.php
index 748b64220..e81706104 100644
--- a/classes/Oauth_application.php
+++ b/classes/Oauth_application.php
@@ -110,7 +110,6 @@ class Oauth_application extends Memcached_DataObject
*
* @return void
*/
-
function uploadLogo()
{
if ($_FILES['app_icon']['error'] ==
@@ -153,5 +152,4 @@ class Oauth_application extends Memcached_DataObject
$oauser->application_id = $this->id;
$oauser->delete();
}
-
}
diff --git a/classes/Oauth_application_user.php b/classes/Oauth_application_user.php
index 57986281f..3d4238d64 100644
--- a/classes/Oauth_application_user.php
+++ b/classes/Oauth_application_user.php
@@ -40,5 +40,4 @@ class Oauth_application_user extends Memcached_DataObject
return empty($result) ? null : $oau;
}
-
}
diff --git a/classes/Profile.php b/classes/Profile.php
index d7617f0b7..1d130c44a 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -103,7 +103,6 @@ class Profile extends Memcached_DataObject
foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
# We don't do a scaled one if original is our scaled size
if (!($avatar->width == $size && $avatar->height == $size)) {
-
$scaled_filename = $imagefile->resize($size);
//$scaled = DB_DataObject::factory('avatar');
@@ -429,10 +428,10 @@ class Profile extends Memcached_DataObject
function subscriptionCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $cnt = $c->get(common_cache_key('profile:subscription_count:'.$this->id));
+ $cnt = $c->get(Cache::key('profile:subscription_count:'.$this->id));
if (is_integer($cnt)) {
return (int) $cnt;
}
@@ -446,7 +445,7 @@ class Profile extends Memcached_DataObject
$cnt = ($cnt > 0) ? $cnt - 1 : $cnt;
if (!empty($c)) {
- $c->set(common_cache_key('profile:subscription_count:'.$this->id), $cnt);
+ $c->set(Cache::key('profile:subscription_count:'.$this->id), $cnt);
}
return $cnt;
@@ -454,9 +453,9 @@ class Profile extends Memcached_DataObject
function subscriberCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $cnt = $c->get(common_cache_key('profile:subscriber_count:'.$this->id));
+ $cnt = $c->get(Cache::key('profile:subscriber_count:'.$this->id));
if (is_integer($cnt)) {
return (int) $cnt;
}
@@ -468,17 +467,52 @@ class Profile extends Memcached_DataObject
$cnt = (int) $sub->count('distinct subscriber');
if (!empty($c)) {
- $c->set(common_cache_key('profile:subscriber_count:'.$this->id), $cnt);
+ $c->set(Cache::key('profile:subscriber_count:'.$this->id), $cnt);
}
return $cnt;
}
+ function hasFave($notice)
+ {
+ $cache = Cache::instance();
+
+ // XXX: Kind of a hack.
+
+ if (!empty($cache)) {
+ // This is the stream of favorite notices, in rev chron
+ // order. This forces it into cache.
+
+ $ids = Fave::stream($this->id, 0, NOTICE_CACHE_WINDOW);
+
+ // If it's in the list, then it's a fave
+
+ if (in_array($notice->id, $ids)) {
+ return true;
+ }
+
+ // If we're not past the end of the cache window,
+ // then the cache has all available faves, so this one
+ // is not a fave.
+
+ if (count($ids) < NOTICE_CACHE_WINDOW) {
+ return false;
+ }
+
+ // Otherwise, cache doesn't have all faves;
+ // fall through to the default
+ }
+
+ $fave = Fave::pkeyGet(array('user_id' => $this->id,
+ 'notice_id' => $notice->id));
+ return ((is_null($fave)) ? false : true);
+ }
+
function faveCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $cnt = $c->get(common_cache_key('profile:fave_count:'.$this->id));
+ $cnt = $c->get(Cache::key('profile:fave_count:'.$this->id));
if (is_integer($cnt)) {
return (int) $cnt;
}
@@ -489,7 +523,7 @@ class Profile extends Memcached_DataObject
$cnt = (int) $faves->count('distinct notice_id');
if (!empty($c)) {
- $c->set(common_cache_key('profile:fave_count:'.$this->id), $cnt);
+ $c->set(Cache::key('profile:fave_count:'.$this->id), $cnt);
}
return $cnt;
@@ -497,10 +531,10 @@ class Profile extends Memcached_DataObject
function noticeCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $cnt = $c->get(common_cache_key('profile:notice_count:'.$this->id));
+ $cnt = $c->get(Cache::key('profile:notice_count:'.$this->id));
if (is_integer($cnt)) {
return (int) $cnt;
}
@@ -511,41 +545,55 @@ class Profile extends Memcached_DataObject
$cnt = (int) $notices->count('distinct id');
if (!empty($c)) {
- $c->set(common_cache_key('profile:notice_count:'.$this->id), $cnt);
+ $c->set(Cache::key('profile:notice_count:'.$this->id), $cnt);
}
return $cnt;
}
+ function blowFavesCache()
+ {
+ $cache = common_memcache();
+ if ($cache) {
+ // Faves don't happen chronologically, so we need to blow
+ // ;last cache, too
+ $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id));
+ $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last'));
+ $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id));
+ $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id.';last'));
+ }
+ $this->blowFaveCount();
+ }
+
function blowSubscriberCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $c->delete(common_cache_key('profile:subscriber_count:'.$this->id));
+ $c->delete(Cache::key('profile:subscriber_count:'.$this->id));
}
}
function blowSubscriptionCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $c->delete(common_cache_key('profile:subscription_count:'.$this->id));
+ $c->delete(Cache::key('profile:subscription_count:'.$this->id));
}
}
function blowFaveCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $c->delete(common_cache_key('profile:fave_count:'.$this->id));
+ $c->delete(Cache::key('profile:fave_count:'.$this->id));
}
}
function blowNoticeCount()
{
- $c = common_memcache();
+ $c = Cache::instance();
if (!empty($c)) {
- $c->delete(common_cache_key('profile:notice_count:'.$this->id));
+ $c->delete(Cache::key('profile:notice_count:'.$this->id));
}
}
@@ -790,13 +838,14 @@ class Profile extends Memcached_DataObject
* @param $right string Name of the right, usually a constant in class Right
* @return boolean whether the user has the right in question
*/
-
function hasRight($right)
{
$result = false;
+
if ($this->hasRole(Profile_role::DELETED)) {
return false;
}
+
if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
switch ($right)
{
@@ -960,4 +1009,25 @@ class Profile extends Memcached_DataObject
return $feed;
}
+
+ static function fromURI($uri)
+ {
+ $profile = null;
+
+ if (Event::handle('StartGetProfileFromURI', array($uri, &$profile))) {
+ // Get a local user or remote (OMB 0.1) profile
+ $user = User::staticGet('uri', $uri);
+ if (!empty($user)) {
+ $profile = $user->getProfile();
+ } else {
+ $remote_profile = Remote_profile::staticGet('uri', $uri);
+ if (!empty($remote_profile)) {
+ $profile = Profile::staticGet('id', $remote_profile->profile_id);
+ }
+ }
+ Event::handle('EndGetProfileFromURI', array($uri, $profile));
+ }
+
+ return $profile;
+ }
}
diff --git a/classes/Profile_tag.php b/classes/Profile_tag.php
index 0a1ad9cd6..ab6bab096 100644
--- a/classes/Profile_tag.php
+++ b/classes/Profile_tag.php
@@ -23,7 +23,6 @@ class Profile_tag extends Memcached_DataObject
###END_AUTOCODE
static function getTags($tagger, $tagged) {
-
$tags = array();
# XXX: store this in memcached
@@ -44,7 +43,6 @@ class Profile_tag extends Memcached_DataObject
}
static function setTags($tagger, $tagged, $newtags) {
-
$newtags = array_unique($newtags);
$oldtags = Profile_tag::getTags($tagger, $tagged);
diff --git a/classes/Remember_me.php b/classes/Remember_me.php
index 8dc29bfa3..3df7a9983 100644
--- a/classes/Remember_me.php
+++ b/classes/Remember_me.php
@@ -4,7 +4,7 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Remember_me extends Memcached_DataObject
+class Remember_me extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -16,11 +16,15 @@ class Remember_me extends Memcached_DataObject
/* Static get */
function staticGet($k,$v=null)
- { return Memcached_DataObject::staticGet('Remember_me',$k,$v); }
+ {
+ return Memcached_DataObject::staticGet('Remember_me',$k,$v);
+ }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
function sequenceKey()
- { return array(false, false); }
+ {
+ return array(false, false);
+ }
}
diff --git a/classes/Remote_profile.php b/classes/Remote_profile.php
index 77bfbcd99..1672e9f95 100644
--- a/classes/Remote_profile.php
+++ b/classes/Remote_profile.php
@@ -24,7 +24,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Remote_profile extends Memcached_DataObject
+class Remote_profile extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -32,8 +32,8 @@ class Remote_profile extends Memcached_DataObject
public $__table = 'remote_profile'; // table name
public $id; // int(4) primary_key not_null
public $uri; // varchar(255) unique_key
- public $postnoticeurl; // varchar(255)
- public $updateprofileurl; // varchar(255)
+ public $postnoticeurl; // varchar(255)
+ public $updateprofileurl; // varchar(255)
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@@ -43,7 +43,7 @@ class Remote_profile extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
-
+
function hasRight($right)
{
$profile = Profile::staticGet($this->id);
diff --git a/classes/Safe_DataObject.php b/classes/Safe_DataObject.php
index f0ea6b136..891e33a66 100644
--- a/classes/Safe_DataObject.php
+++ b/classes/Safe_DataObject.php
@@ -287,4 +287,3 @@ class Safe_DataObject extends DB_DataObject
return Safe_DataObject::$iniCache[$key];
}
}
-
diff --git a/classes/Sms_carrier.php b/classes/Sms_carrier.php
index ffa12de29..500cb4f04 100644
--- a/classes/Sms_carrier.php
+++ b/classes/Sms_carrier.php
@@ -4,7 +4,7 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Sms_carrier extends Memcached_DataObject
+class Sms_carrier extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -22,7 +22,7 @@ class Sms_carrier extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
-
+
function toEmailAddress($sms)
{
return sprintf($this->email_pattern, $sms);
diff --git a/classes/Status_network.php b/classes/Status_network.php
index 5680c1458..5d01e72cc 100644
--- a/classes/Status_network.php
+++ b/classes/Status_network.php
@@ -167,18 +167,17 @@ class Status_network extends Safe_DataObject
' WHERE nickname = ' . $this->_quote($this->nickname);
$orig->decache();
$result = $this->query($qry);
- if ($result) {
- $this->encache();
- }
+ $this->decache();
+
return $result;
}
-
+
function delete()
{
$this->decache(); # while we still have the values!
return parent::delete();
}
-
+
/**
* @param string $servername hostname
* @param string $wildcard hostname suffix to match wildcard config
@@ -308,27 +307,20 @@ class Status_network extends Safe_DataObject
*/
function getTags()
{
- $result = array();
-
- $tags = new Status_network_tag();
- $tags->site_id = $this->site_id;
- if ($tags->find()) {
- while ($tags->fetch()) {
- $result[] = $tags->tag;
- }
- }
+ $result = Status_network_tag::getTags($this->site_id);
// XXX : for backwards compatibility
if (empty($result)) {
return explode('|', $this->tags);
}
-
+
return $result;
}
/**
* Save a given set of tags
* @param array tags
+ * @fixme only add/remove differentials
*/
function setTags($tags)
{
@@ -339,7 +331,7 @@ class Status_network extends Safe_DataObject
$snt->site_id = $this->site_id;
$snt->tag = $tag;
$snt->created = common_sql_now();
-
+
$id = $snt->insert();
if (!$id) {
// TRANS: Exception thrown when a tag cannot be saved.
@@ -364,7 +356,7 @@ class Status_network extends Safe_DataObject
$tag->free();
}
-
+
/**
* Check if this site record has a particular meta-info tag attached.
* @param string $tag
diff --git a/classes/Status_network_tag.php b/classes/Status_network_tag.php
index 18c508bc8..a5893c114 100644
--- a/classes/Status_network_tag.php
+++ b/classes/Status_network_tag.php
@@ -26,7 +26,7 @@ class Status_network_tag extends Safe_DataObject
public $__table = 'status_network_tag'; // table name
public $site_id; // int(4) primary_key not_null
- public $tag; // varchar(64) primary_key not_null
+ public $tag; // varchar(64) primary_key not_null
public $created; // datetime() not_null
@@ -34,7 +34,7 @@ class Status_network_tag extends Safe_DataObject
{
global $config;
global $_DB_DATAOBJECT;
-
+
$sn = new Status_network();
$sn->_connect();
@@ -61,9 +61,73 @@ class Status_network_tag extends Safe_DataObject
###END_AUTOCODE
-
function pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Status_network_tag', $kv);
}
+
+ /**
+ * Fetch the (possibly cached) tag entries for the given site id.
+ * Uses status_network's cache settings.
+ *
+ * @param string $site_id
+ * @return array of strings
+ */
+ static function getTags($site_id)
+ {
+ $key = 'status_network_tags:' . $site_id;
+ if (Status_network::$cache) {
+ $packed = Status_network::$cache->get($key);
+ if (is_string($packed)) {
+ if ($packed == '') {
+ return array();
+ } else {
+ return explode('|', $packed);
+ }
+ }
+ }
+
+ $result = array();
+
+ $tags = new Status_network_tag();
+ $tags->site_id = $site_id;
+ if ($tags->find()) {
+ while ($tags->fetch()) {
+ $result[] = $tags->tag;
+ }
+ }
+
+ if (Status_network::$cache) {
+ $packed = implode('|', $result);
+ Status_network::$cache->set($key, $packed, 3600);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Drop the cached tag entries for this site.
+ * Needed after inserting/deleting a tag entry.
+ */
+ function decache()
+ {
+ $key = 'status_network_tags:' . $this->site_id;
+ if (Status_network::$cache) {
+ Status_network::$cache->delete($key);
+ }
+ }
+
+ function insert()
+ {
+ $ret = parent::insert();
+ $this->decache();
+ return $ret;
+ }
+
+ function delete()
+ {
+ $ret = parent::delete();
+ $this->decache();
+ return $ret;
+ }
}
diff --git a/classes/Subscription.php b/classes/Subscription.php
index 0225ed4df..e9ad2a5a2 100644
--- a/classes/Subscription.php
+++ b/classes/Subscription.php
@@ -235,4 +235,33 @@ class Subscription extends Memcached_DataObject
'subscribed' => $other->id));
return (empty($sub)) ? false : true;
}
+
+ function asActivity()
+ {
+ $subscriber = Profile::staticGet('id', $this->subscriber);
+ $subscribed = Profile::staticGet('id', $this->subscribed);
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::FOLLOW;
+
+ $act->id = TagURI::mint('follow:%d:%d:%s',
+ $subscriber->id,
+ $subscribed->id,
+ common_date_iso8601($this->created));
+
+ $act->time = strtotime($this->created);
+ // TRANS: Activity tile when subscribing to another person.
+ $act->title = _("Follow");
+ // TRANS: Notification given when one person starts following another.
+ // TRANS: %1$s is the subscriber, %2$s is the subscribed.
+ $act->content = sprintf(_('%1$s is now following %2$s.'),
+ $subscriber->getBestName(),
+ $subscribed->getBestName());
+
+ $act->actor = ActivityObject::fromProfile($subscriber);
+ $act->objects[] = ActivityObject::fromProfile($subscribed);
+
+ return $act;
+ }
}
diff --git a/classes/User.php b/classes/User.php
index 70e09c1dc..259df7e2c 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -250,6 +250,19 @@ class User extends Memcached_DataObject
$user->inboxed = 1;
+ // Set default-on options here, otherwise they'll be disabled
+ // initially for sites using caching, since the initial encache
+ // doesn't know about the defaults in the database.
+ $user->emailnotifysub = 1;
+ $user->emailnotifyfav = 1;
+ $user->emailnotifynudge = 1;
+ $user->emailnotifymsg = 1;
+ $user->emailnotifyattn = 1;
+ $user->emailmicroid = 1;
+ $user->emailpost = 1;
+ $user->jabbermicroid = 1;
+ $user->viewdesigns = 1;
+
$user->created = common_sql_now();
if (Event::handle('StartUserRegister', array(&$user, &$profile))) {
@@ -264,7 +277,13 @@ class User extends Memcached_DataObject
}
$user->id = $id;
- $user->uri = common_user_uri($user);
+
+ if (!empty($uri)) {
+ $user->uri = $uri;
+ } else {
+ $user->uri = common_user_uri($user);
+ }
+
if (!empty($password)) { // may not have a password for OpenID users
$user->password = common_munge_password($password, $id);
}
@@ -388,37 +407,8 @@ class User extends Memcached_DataObject
function hasFave($notice)
{
- $cache = common_memcache();
-
- // XXX: Kind of a hack.
-
- if ($cache) {
- // This is the stream of favorite notices, in rev chron
- // order. This forces it into cache.
-
- $ids = Fave::stream($this->id, 0, NOTICE_CACHE_WINDOW);
-
- // If it's in the list, then it's a fave
-
- if (in_array($notice->id, $ids)) {
- return true;
- }
-
- // If we're not past the end of the cache window,
- // then the cache has all available faves, so this one
- // is not a fave.
-
- if (count($ids) < NOTICE_CACHE_WINDOW) {
- return false;
- }
-
- // Otherwise, cache doesn't have all faves;
- // fall through to the default
- }
-
- $fave = Fave::pkeyGet(array('user_id' => $this->id,
- 'notice_id' => $notice->id));
- return ((is_null($fave)) ? false : true);
+ $profile = $this->getProfile();
+ return $profile->hasFave($notice);
}
function mutuallySubscribed($other)
@@ -487,17 +477,8 @@ class User extends Memcached_DataObject
function blowFavesCache()
{
- $cache = common_memcache();
- if ($cache) {
- // Faves don't happen chronologically, so we need to blow
- // ;last cache, too
- $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id));
- $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last'));
- $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id));
- $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id.';last'));
- }
$profile = $this->getProfile();
- $profile->blowFaveCount();
+ $profile->blowFavesCache();
}
function getSelfTags()
@@ -547,6 +528,9 @@ class User extends Memcached_DataObject
if (Subscription::exists($other, $self)) {
Subscription::cancel($other, $self);
}
+ if (Subscription::exists($self, $other)) {
+ Subscription::cancel($self, $other);
+ }
$block->query('COMMIT');
diff --git a/classes/User_group.php b/classes/User_group.php
index 0b83cfd47..cfdcef290 100644
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -465,7 +465,6 @@ class User_group extends Memcached_DataObject
}
static function register($fields) {
-
// MAGICALLY put fields into current scope
extract($fields);
diff --git a/classes/User_username.php b/classes/User_username.php
index 8d99cddd3..ae7785cc9 100644
--- a/classes/User_username.php
+++ b/classes/User_username.php
@@ -18,7 +18,9 @@ class User_username extends Memcached_DataObject
/* Static get */
function staticGet($k,$v=null)
- { return Memcached_DataObject::staticGet('User_username',$k,$v); }
+ {
+ return Memcached_DataObject::staticGet('User_username',$k,$v);
+ }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
@@ -37,6 +39,7 @@ class User_username extends Memcached_DataObject
$user_username->provider_name = $provider_name;
$user_username->username = $username;
$user_username->created = DB_DataObject_Cast::dateTime();
+
if($user_username->insert()){
return $user_username;
}else{
@@ -57,5 +60,4 @@ class User_username extends Memcached_DataObject
function keys() {
return array('provider_name' => 'K', 'username' => 'K');
}
-
}