From 0b21ac3dd79d2bf39341a4f0ff3566def8282eae Mon Sep 17 00:00:00 2001 From: "matthew.gregg" Date: Sun, 22 Jun 2008 23:08:37 -0400 Subject: First pass at replies support http://laconi.ca/PITS/00080 Doesn't handle a reply to a user that has never updated. darcs-hash:20080623030837-982e4-532ccd8899fd8be00575f8840da0defb44cd56f8.gz --- lib/stream.php | 42 ++++++++++++++++++++++++++++++++++++++++++ lib/util.php | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) (limited to 'lib') diff --git a/lib/stream.php b/lib/stream.php index a37e4dfa3..6bba0eace 100644 --- a/lib/stream.php +++ b/lib/stream.php @@ -20,6 +20,7 @@ if (!defined('LACONICA')) { exit(1); } define('NOTICES_PER_PAGE', 20); +define('REPLIES_PER_PAGE', 20); class StreamAction extends Action { @@ -44,6 +45,11 @@ class StreamAction extends Action { _t('Personal'), (($user && $user->fullname) ? $user->fullname : $nickname) . _t(' and friends'), $action == 'all'); + common_menu_item(common_local_url('replies', array('nickname' => + $nickname)), + _t('Replies'), + ($user && $user->fullname) ? $user->fullname : $nickname, + $action == 'replies'); common_menu_item(common_local_url('showstream', array('nickname' => $nickname)), _t('Profile'), @@ -84,4 +90,40 @@ class StreamAction extends Action { common_element_end('p'); common_element_end('li'); } + + function show_reply($notice, $replied_id) { + global $config; + $profile = $notice->getProfile(); + # XXX: RDFa + common_element_start('li', array('class' => 'notice_single', + 'id' => 'notice-' . $notice->id)); + $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); + common_element_start('a', array('href' => $profile->profileurl)); + common_element('img', array('src' => ($avatar) ? $avatar->url : common_default_avatar(AVATAR_STREAM_SIZE), + 'class' => 'avatar stream', + 'width' => AVATAR_STREAM_SIZE, + 'height' => AVATAR_STREAM_SIZE, + 'alt' => + ($profile->fullname) ? $profile->fullname : + $profile->nickname)); + common_element_end('a'); + common_element('a', array('href' => $profile->profileurl, + 'class' => 'nickname'), + $profile->nickname); + # FIXME: URL, image, video, audio + common_element_start('p', array('class' => 'content')); + common_raw(common_render_content($notice->content, $notice)); + common_element_end('p'); + $replyurl = common_local_url('shownotice', array('notice' => $replied_id)); + $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); + common_element_start('p', 'time'); + common_element('a', array('class' => 'notice', + 'href' => $noticeurl), + common_date_string($notice->created)); + common_element('a', array('class' => 'notice', + 'href' => $replyurl), + " in reply to ".$profile->nickname ); + common_element_end('p'); + common_element_end('li'); + } } diff --git a/lib/util.php b/lib/util.php index 4b781c0a8..0aa1bd53e 100644 --- a/lib/util.php +++ b/lib/util.php @@ -808,6 +808,38 @@ function common_redirect($url, $code=307) { common_end_xml(); } +function common_save_replies($notice) { + # 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; $inickname == $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; + } + } +} + function common_broadcast_notice($notice, $remote=false) { if (common_config('queue', 'enabled')) { # Do it later! -- cgit v1.2.3-54-g00ecf