- # extract all @messages
- preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $notice->content, $match);
- $current_user = common_current_user();
- $sender = $current_user->getProfile();
- #store replied only for first @ (what user/notice what the reply directed, we assume first @ is it)
- $reply_for = User::staticGet('nickname', $match[1][0]);
- for ($i=0; $i<count($match[1]); $i++) {
- $nickname = $match[1][$i];
- #don't reply to myself
- if ($sender->nickname == $nickname) {
- continue;
- }
- $reply = DB_DataObject::factory('reply');
- $reply->notice_id = $notice->id;
- $recipient_user = User::staticGet('nickname', $nickname);
- #if recipient doesn't exist, skip
- if (!$recipient_user) {
- continue;
- }
- $reply->user_id = $recipient_user->id;
- $reply->created = DB_DataObject_Cast::dateTime();
- $recipient_notice = $reply_for->getCurrentNotice();
- $reply->replied_id = $recipient_notice->id;
- $id = $reply->insert();
- if (!$id) {
- common_server_error(_t('Problem saving reply.'));
- return;
- }
- }
+ # extract all @messages
+ $cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $notice->content, $match);
+ if (!$cnt) {
+ return true;
+ }
+ $sender = Profile::staticGet($notice->profile_id);
+ # store replied only for first @ (what user/notice what the reply directed,
+ # we assume first @ is it)
+ for ($i=0; $i<count($match[1]); $i++) {
+ $nickname = $match[1][$i];
+ $recipient = common_relative_profile($sender, $nickname, $notice->created);
+ if (!$recipient) {
+ continue;
+ }
+ if ($i == 0) {
+ $reply_for = $recipient;
+ }
+ $reply = new Reply();
+ $reply->notice_id = $notice->id;
+ $reply->profile_id = $recipient->id;
+ if ($reply_for) {
+# $recipient_notice = $reply_for->getCurrentNotice($notice->created);
+ $recipient_notice = $reply_for->getCurrentNotice();
+ $reply->replied_id = $recipient_notice->id;
+ }
+ $id = $reply->insert();
+ if (!$id) {
+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
+ common_log(LOG_ERROR, 'DB error inserting reply: ' . $last_error->message);
+ common_server_error('DB error inserting reply: ' . $last_error->message);
+ return;
+ }
+ }