forked from GNUsocial/gnu-social
Move common_save_replies to Notice class
This commit is contained in:
parent
0a81b94a92
commit
2f043b74e7
@ -156,7 +156,7 @@ class Notice extends Memcached_DataObject
|
||||
|
||||
# XXX: do we need to change this for remote users?
|
||||
|
||||
common_save_replies($notice);
|
||||
$notice->saveReplies();
|
||||
$notice->saveTags();
|
||||
$notice->saveGroups();
|
||||
|
||||
@ -211,6 +211,16 @@ class Notice extends Memcached_DataObject
|
||||
if ($blowLast) {
|
||||
$cache->delete(common_cache_key('group:notices:'.$group_inbox->group_id.';last'));
|
||||
}
|
||||
$member = new Group_member();
|
||||
$member->group_id = $group_inbox->group_id;
|
||||
if ($member->find()) {
|
||||
while ($member->fetch()) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $member->profile_id));
|
||||
if ($blowLast) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $member->profile_id . ';last'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$group_inbox->free();
|
||||
@ -629,4 +639,88 @@ class Notice extends Memcached_DataObject
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveReplies()
|
||||
{
|
||||
// Alternative reply format
|
||||
$tname = false;
|
||||
if (preg_match('/^T ([A-Z0-9]{1,64}) /', $this->content, $match)) {
|
||||
$tname = $match[1];
|
||||
}
|
||||
// extract all @messages
|
||||
$cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $this->content, $match);
|
||||
|
||||
$names = array();
|
||||
|
||||
if ($cnt || $tname) {
|
||||
// XXX: is there another way to make an array copy?
|
||||
$names = ($tname) ? array_unique(array_merge(array(strtolower($tname)), $match[1])) : array_unique($match[1]);
|
||||
}
|
||||
|
||||
$sender = Profile::staticGet($this->profile_id);
|
||||
|
||||
$replied = array();
|
||||
|
||||
// store replied only for first @ (what user/notice what the reply directed,
|
||||
// we assume first @ is it)
|
||||
|
||||
for ($i=0; $i<count($names); $i++) {
|
||||
$nickname = $names[$i];
|
||||
$recipient = common_relative_profile($sender, $nickname, $this->created);
|
||||
if (!$recipient) {
|
||||
continue;
|
||||
}
|
||||
if ($i == 0 && ($recipient->id != $sender->id) && !$this->reply_to) { // Don't save reply to self
|
||||
$reply_for = $recipient;
|
||||
$recipient_notice = $reply_for->getCurrentNotice();
|
||||
if ($recipient_notice) {
|
||||
$orig = clone($this);
|
||||
$this->reply_to = $recipient_notice->id;
|
||||
$this->update($orig);
|
||||
}
|
||||
}
|
||||
// Don't save replies from blocked profile to local user
|
||||
$recipient_user = User::staticGet('id', $recipient->id);
|
||||
if ($recipient_user && $recipient_user->hasBlocked($sender)) {
|
||||
continue;
|
||||
}
|
||||
$reply = new Reply();
|
||||
$reply->notice_id = $this->id;
|
||||
$reply->profile_id = $recipient->id;
|
||||
$id = $reply->insert();
|
||||
if (!$id) {
|
||||
$last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
|
||||
common_log(LOG_ERR, 'DB error inserting reply: ' . $last_error->message);
|
||||
common_server_error(sprintf(_('DB error inserting reply: %s'), $last_error->message));
|
||||
return;
|
||||
} else {
|
||||
$replied[$recipient->id] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Hash format replies, too
|
||||
$cnt = preg_match_all('/(?:^|\s)@#([a-z0-9]{1,64})/', $this->content, $match);
|
||||
if ($cnt) {
|
||||
foreach ($match[1] as $tag) {
|
||||
$tagged = Profile_tag::getTagged($sender->id, $tag);
|
||||
foreach ($tagged as $t) {
|
||||
if (!$replied[$t->id]) {
|
||||
// Don't save replies from blocked profile to local user
|
||||
$t_user = User::staticGet('id', $t->id);
|
||||
if ($t_user && $t_user->hasBlocked($sender)) {
|
||||
continue;
|
||||
}
|
||||
$reply = new Reply();
|
||||
$reply->notice_id = $this->id;
|
||||
$reply->profile_id = $t->id;
|
||||
$id = $reply->insert();
|
||||
if (!$id) {
|
||||
common_log_db_error($reply, 'INSERT', __FILE__);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
84
lib/util.php
84
lib/util.php
@ -1069,90 +1069,6 @@ function common_redirect($url, $code=307)
|
||||
exit;
|
||||
}
|
||||
|
||||
function common_save_replies($notice)
|
||||
{
|
||||
// Alternative reply format
|
||||
$tname = false;
|
||||
if (preg_match('/^T ([A-Z0-9]{1,64}) /', $notice->content, $match)) {
|
||||
$tname = $match[1];
|
||||
}
|
||||
// extract all @messages
|
||||
$cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $notice->content, $match);
|
||||
|
||||
$names = array();
|
||||
|
||||
if ($cnt || $tname) {
|
||||
// XXX: is there another way to make an array copy?
|
||||
$names = ($tname) ? array_unique(array_merge(array(strtolower($tname)), $match[1])) : array_unique($match[1]);
|
||||
}
|
||||
|
||||
$sender = Profile::staticGet($notice->profile_id);
|
||||
|
||||
$replied = array();
|
||||
|
||||
// store replied only for first @ (what user/notice what the reply directed,
|
||||
// we assume first @ is it)
|
||||
|
||||
for ($i=0; $i<count($names); $i++) {
|
||||
$nickname = $names[$i];
|
||||
$recipient = common_relative_profile($sender, $nickname, $notice->created);
|
||||
if (!$recipient) {
|
||||
continue;
|
||||
}
|
||||
if ($i == 0 && ($recipient->id != $sender->id) && !$notice->reply_to) { // Don't save reply to self
|
||||
$reply_for = $recipient;
|
||||
$recipient_notice = $reply_for->getCurrentNotice();
|
||||
if ($recipient_notice) {
|
||||
$orig = clone($notice);
|
||||
$notice->reply_to = $recipient_notice->id;
|
||||
$notice->update($orig);
|
||||
}
|
||||
}
|
||||
// Don't save replies from blocked profile to local user
|
||||
$recipient_user = User::staticGet('id', $recipient->id);
|
||||
if ($recipient_user && $recipient_user->hasBlocked($sender)) {
|
||||
continue;
|
||||
}
|
||||
$reply = new Reply();
|
||||
$reply->notice_id = $notice->id;
|
||||
$reply->profile_id = $recipient->id;
|
||||
$id = $reply->insert();
|
||||
if (!$id) {
|
||||
$last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
|
||||
common_log(LOG_ERR, 'DB error inserting reply: ' . $last_error->message);
|
||||
common_server_error(sprintf(_('DB error inserting reply: %s'), $last_error->message));
|
||||
return;
|
||||
} else {
|
||||
$replied[$recipient->id] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Hash format replies, too
|
||||
$cnt = preg_match_all('/(?:^|\s)@#([a-z0-9]{1,64})/', $notice->content, $match);
|
||||
if ($cnt) {
|
||||
foreach ($match[1] as $tag) {
|
||||
$tagged = Profile_tag::getTagged($sender->id, $tag);
|
||||
foreach ($tagged as $t) {
|
||||
if (!$replied[$t->id]) {
|
||||
// Don't save replies from blocked profile to local user
|
||||
$t_user = User::staticGet('id', $t->id);
|
||||
if ($t_user && $t_user->hasBlocked($sender)) {
|
||||
continue;
|
||||
}
|
||||
$reply = new Reply();
|
||||
$reply->notice_id = $notice->id;
|
||||
$reply->profile_id = $t->id;
|
||||
$id = $reply->insert();
|
||||
if (!$id) {
|
||||
common_log_db_error($reply, 'INSERT', __FILE__);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function common_broadcast_notice($notice, $remote=false)
|
||||
{
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user