Automatically add a tag for every group messages

If you post to a group !foo, it's automatically listed as being tagged
"foo". This is to keep users from having to do !foo #foo in all their
messages.
This commit is contained in:
Evan Prodromou 2009-02-16 18:02:31 -05:00
parent 9978eadbf2
commit ca90d790aa
2 changed files with 36 additions and 17 deletions

View File

@ -94,22 +94,27 @@ class Notice extends Memcached_DataObject
/* Add them to the database */
foreach(array_unique($match[1]) as $hashtag) {
/* elide characters we don't want in the tag */
$this->saveTag($hashtag);
}
return true;
}
function saveTag($hashtag)
{
$hashtag = common_canonical_tag($hashtag);
$tag = DB_DataObject::factory('Notice_tag');
$tag = new Notice_tag();
$tag->notice_id = $this->id;
$tag->tag = $hashtag;
$tag->created = $this->created;
$id = $tag->insert();
if (!$id) {
$last_error = PEAR::getStaticProperty('DB_DataObject','lastError');
common_log(LOG_ERR, 'DB error inserting hashtag: ' . $last_error->message);
common_server_error(sprintf(_('DB error inserting hashtag: %s'), $last_error->message));
throw new ServerException(sprintf(_('DB error inserting hashtag: %s'),
$last_error->message));
return;
}
}
return true;
}
static function saveNew($profile_id, $content, $source=null, $is_local=1, $reply_to=null, $uri=null) {
@ -621,6 +626,15 @@ class Notice extends Memcached_DataObject
continue;
}
// we automatically add a tag for every group name, too
$tag = Notice_tag::pkeyGet(array('tag' => common_canonical_tag($nickname),
'notice_id' => $this->id));
if (is_null($tag)) {
$this->saveTag($nickname);
}
if ($profile->isMember($group)) {
$gi = new Group_inbox();

View File

@ -54,4 +54,9 @@ class Notice_tag extends Memcached_DataObject
$cache->delete(common_cache_key('notice_tag:notice_stream:' . $this->tag));
}
}
function &pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Notice_tag', $kv);
}
}