From 0c79026f7717f5975703f075f0935182887a30fa Mon Sep 17 00:00:00 2001 From: Hannes Mannerheim Date: Thu, 2 Jul 2015 15:00:57 +0200 Subject: [PATCH] human readable text-field for qvitter's new deleted-notice activity --- QvitterPlugin.php | 443 ++++++++++++++++++++++---------------------- css/qvitter.css | 10 + js/dom-functions.js | 9 +- 3 files changed, 236 insertions(+), 226 deletions(-) diff --git a/QvitterPlugin.php b/QvitterPlugin.php index 6971353..a5a061a 100644 --- a/QvitterPlugin.php +++ b/QvitterPlugin.php @@ -1,6 +1,6 @@ \\\\_\ · · \\) \____) · · · - · · + · · · · · Qvitter is free software: you can redistribute it and / or modify it · · under the terms of the GNU Affero General Public License as published by · @@ -31,7 +31,7 @@ · along with Qvitter. If not, see . · · · · Contact h@nnesmannerhe.im if you have any questions. · - · · + · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ const QVITTERDIR = __DIR__; @@ -42,12 +42,12 @@ class QvitterPlugin extends Plugin { static function settings($setting) { - + /* · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · S E T T I N G S · · · - · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ + · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ // THESE SETTINGS CAN BE OVERRIDDEN IN CONFIG.PHP // e.g. $config['site']['qvitter']['enabledbydefault'] = 'false'; @@ -71,10 +71,10 @@ class QvitterPlugin extends Plugin { $settings['defaultlinkcolor'] = '#0084B4'; // ENABLE DEFAULT WELCOME TEXT - $settings['enablewelcometext'] = true; + $settings['enablewelcometext'] = true; // CUSTOM WELCOME TEXT (overrides the previous setting) - $settings['customwelcometext'] = false; + $settings['customwelcometext'] = false; // Example: // $settings['customwelcometext']['sv'] = '

Välkommen till Quitter.se – en federerad1 mikrobloggsallmänning!

Etc etc...

'; @@ -86,30 +86,30 @@ class QvitterPlugin extends Plugin { // URL SHORTENER $settings['urlshortenerapiurl'] = 'http://qttr.at/yourls-api.php'; $settings['urlshortenersignature'] = 'b6afeec983'; - + // CUSTOM TERMS OF USE $settings['customtermsofuse'] = false; - + // IP ADDRESSES BLOCKED FROM REGISTRATION $settings['blocked_ips'] = array(); /* · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · - · · + · · · (o> >o) · · \\\\_\ /_//// . - · \____) (____/ · + · \____) (____/ · · · - · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ - - // config.php settings override the settings in this file + · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ + + // config.php settings override the settings in this file $configphpsettings = common_config('site','qvitter') ?: array(); foreach($configphpsettings as $configphpsetting=>$value) { $settings[$configphpsetting] = $value; } if(isset($settings[$setting])) { - return $settings[$setting]; + return $settings[$setting]; } else { return false; @@ -134,7 +134,7 @@ class QvitterPlugin extends Plugin { // show qvitter link in the admin panel common_config_append('admin', 'panels', 'qvitteradm'); } - + // make sure we have a notifications table function onCheckSchema() { @@ -142,11 +142,11 @@ class QvitterPlugin extends Plugin { $schema->ensureTable('qvitternotification', QvitterNotification::schemaDef()); return true; } - + // route/reroute urls public function onRouterInitialized($m) { - + $m->connect('api/qvitter/favs_and_repeats/:notice_id.json', array('action' => 'ApiFavsAndRepeats'), array('notice_id' => '[0-9]+')); @@ -158,80 +158,80 @@ class QvitterPlugin extends Plugin { $m->connect('api/qvitter/update_background_color.json', array('action' => 'apiqvitterupdatebackgroundcolor')); $m->connect('api/qvitter/checklogin.json', - array('action' => 'apiqvitterchecklogin')); + array('action' => 'apiqvitterchecklogin')); $m->connect('api/qvitter/allfollowing/:id.json', array('action' => 'apiqvitterallfollowing', - 'id' => Nickname::INPUT_FMT)); + 'id' => Nickname::INPUT_FMT)); $m->connect('api/qvitter/update_cover_photo.json', - array('action' => 'ApiUpdateCoverPhoto')); + array('action' => 'ApiUpdateCoverPhoto')); $m->connect('api/qvitter/update_background_image.json', - array('action' => 'ApiUpdateBackgroundImage')); + array('action' => 'ApiUpdateBackgroundImage')); $m->connect('api/qvitter/update_avatar.json', - array('action' => 'ApiUpdateAvatar')); + array('action' => 'ApiUpdateAvatar')); $m->connect('api/qvitter/upload_image.json', - array('action' => 'ApiUploadImage')); + array('action' => 'ApiUploadImage')); $m->connect('api/qvitter/external_user_show.json', array('action' => 'ApiExternalUserShow')); $m->connect('api/qvitter/toggle_qvitter.json', - array('action' => 'ApiToggleQvitter')); + array('action' => 'ApiToggleQvitter')); $m->connect('api/qvitter/statuses/notifications.json', - array('action' => 'apiqvitternotifications')); + array('action' => 'apiqvitternotifications')); $m->connect(':nickname/notifications', array('action' => 'qvitter', - 'nickname' => Nickname::INPUT_FMT)); + 'nickname' => Nickname::INPUT_FMT)); $m->connect('settings/qvitter', array('action' => 'qvittersettings')); $m->connect('panel/qvitter', - array('action' => 'qvitteradminsettings')); + array('action' => 'qvitteradminsettings')); $m->connect('main/qlogin', - array('action' => 'qvitterlogin')); - + array('action' => 'qvitterlogin')); + if ($this->hijack_ui) { - $m->connect('', array('action' => 'qvitter')); - $m->connect('main/all', array('action' => 'qvitter')); - $m->connect('search/notice', array('action' => 'qvitter')); - - + $m->connect('', array('action' => 'qvitter')); + $m->connect('main/all', array('action' => 'qvitter')); + $m->connect('search/notice', array('action' => 'qvitter')); + + URLMapperOverwrite::overwrite_variable($m, ':nickname', array('action' => 'showstream'), - array('nickname' => Nickname::DISPLAY_FMT), + array('nickname' => Nickname::DISPLAY_FMT), 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/', array('action' => 'showstream'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/all', array('action' => 'all'), - array('nickname' => Nickname::DISPLAY_FMT), + array('nickname' => Nickname::DISPLAY_FMT), 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/subscriptions', array('action' => 'subscriptions'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/subscribers', array('action' => 'subscribers'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/groups', array('action' => 'usergroups'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/replies', array('action' => 'replies'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, ':nickname/favorites', array('action' => 'showfavorites'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, 'group/:nickname', array('action' => 'showgroup'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, 'group/:nickname/members', array('action' => 'groupmembers'), - array('nickname' => Nickname::DISPLAY_FMT), - 'qvitter'); + array('nickname' => Nickname::DISPLAY_FMT), + 'qvitter'); $m->connect('group/:nickname/admins', array('action' => 'qvitter'), @@ -239,29 +239,29 @@ class QvitterPlugin extends Plugin { URLMapperOverwrite::overwrite_variable($m, 'tag/:tag', array('action' => 'showstream'), - array('tag' => Router::REGEX_TAG), - 'qvitter'); + array('tag' => Router::REGEX_TAG), + 'qvitter'); URLMapperOverwrite::overwrite_variable($m, 'notice/:notice', array('action' => 'shownotice'), - array('notice' => '[0-9]+'), - 'qvitter'); - } - + array('notice' => '[0-9]+'), + 'qvitter'); + } + // if qvitter is opt-out, disable the default register page (if we don't have a valid invitation code) $valid_code = isset($_POST['code']) ? Invitation::getKV('code', $_POST['code']) : null; if(self::settings('enabledbydefault') && empty($valid_code)) { $m->connect('main/register', - array('action' => 'qvitter')); + array('action' => 'qvitter')); } - - + + // add user arrays for some urls, to use to build profile cards // this way we don't have to request this in a separate http request - + if(isset($_GET['withuserarray'])) switch (getPath($_REQUEST)) { case 'api/statuses/followers.json': case 'api/statuses/friends.json': @@ -270,42 +270,42 @@ class QvitterPlugin extends Plugin { case 'api/favorites.json': case 'api/statuses/friends_timeline.json': case 'api/statuses/user_timeline.json': - + // add logged in user's user array if (common_logged_in() && !isset($_GET['screen_name'])) { - $profilecurrent = Profile::current(); + $profilecurrent = Profile::current(); header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($profilecurrent))); } // add screen_name's user array - elseif(isset($_GET['screen_name'])){ + elseif(isset($_GET['screen_name'])){ $screen_name_user = User::getKV('nickname', $_GET['screen_name']); - if($screen_name_user instanceof User) { + if($screen_name_user instanceof User) { if (common_logged_in()) { $profilecurrent = Profile::current(); - $currentuser = $profilecurrent->getUser(); + $currentuser = $profilecurrent->getUser(); header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($screen_name_user->getProfile(),$currentuser))); } else { - header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($screen_name_user->getProfile()))); + header('Qvitter-User-Array: '.json_encode($this->qvitterTwitterUserArray($screen_name_user->getProfile()))); } } - } + } break; - } - + } + } - - + + /** * Add script to default ui, to be able to toggle Qvitter with one click * * @return boolean hook return - */ + */ function onEndShowScripts($action){ - if (common_logged_in()) { + if (common_logged_in()) { $user = common_current_user(); $profile = $user->getProfile(); @@ -330,13 +330,13 @@ class QvitterPlugin extends Plugin { var toggleText = \'New '.str_replace("'","\'",common_config('site','name')).'\'; var qvitterEnabled = '.$qvitter_enabled.'; var qvitterAllLink = \''.common_local_url('all', array('nickname' => $user->nickname)).'\'; - '); + '); $action->script($this->path('js/toggleqvitter.js').'?changed='.date('YmdHis',filemtime(QVITTERDIR.'/js/toggleqvitter.js'))); } } - + /** * Menu item for Qvitter * @@ -358,7 +358,7 @@ class QvitterPlugin extends Plugin { return true; } - + /** * Menu item for admin panel * @@ -369,7 +369,7 @@ class QvitterPlugin extends Plugin { function onEndAdminPanelNav($action) { - + $action_name = $action->trimmed('action'); $action->out->menuItem(common_local_url('qvitteradminsettings'), @@ -380,7 +380,7 @@ class QvitterPlugin extends Plugin { $action_name === 'qvitteradminsettings'); return true; - } + } @@ -395,14 +395,14 @@ class QvitterPlugin extends Plugin { function onNoticeSimpleStatusArray($notice, &$twitter_status, $scoped) { - + // groups $notice_groups = $notice->getGroups(); $group_addressees = false; foreach($notice_groups as $g) { $group_addressees = array('nickname'=>$g->nickname,'url'=>$g->mainpage); } - $twitter_status['statusnet_in_groups'] = $group_addressees; + $twitter_status['statusnet_in_groups'] = $group_addressees; // include the repeat-id, which we need when unrepeating later if(array_key_exists('repeated', $twitter_status) && $twitter_status['repeated'] === true) { @@ -412,22 +412,22 @@ class QvitterPlugin extends Plugin { } // thumb urls - + // find all thumbs $attachments = $notice->attachments(); $attachment_url_to_id = array(); if (!empty($attachments)) { foreach ($attachments as $attachment) { - if(is_object($attachment)) { + if(is_object($attachment)) { try { $enclosure_o = $attachment->getEnclosure(); $thumb = $attachment->getThumbnail(); - + $attachment_url_to_id[$enclosure_o->url]['id'] = $attachment->id; - $attachment_url_to_id[$enclosure_o->url]['thumb_url'] = $thumb->getUrl(); + $attachment_url_to_id[$enclosure_o->url]['thumb_url'] = $thumb->getUrl(); $attachment_url_to_id[$enclosure_o->url]['width'] = $attachment->width; - $attachment_url_to_id[$enclosure_o->url]['height'] = $attachment->height; - + $attachment_url_to_id[$enclosure_o->url]['height'] = $attachment->height; + // animated gif? if($attachment->mimetype == 'image/gif') { $image = ImageFile::fromFileObject($attachment); @@ -435,18 +435,18 @@ class QvitterPlugin extends Plugin { $attachment_url_to_id[$enclosure_o->url]['animated'] = true; } else { - $attachment_url_to_id[$enclosure_o->url]['animated'] = false; + $attachment_url_to_id[$enclosure_o->url]['animated'] = false; } } - + } catch (ServerException $e) { $thumb = File_thumbnail::getKV('file_id', $attachment->id); if ($thumb instanceof File_thumbnail) { $attachment_url_to_id[$enclosure_o->url]['id'] = $attachment->id; $attachment_url_to_id[$enclosure_o->url]['thumb_url'] = $thumb->getUrl(); $attachment_url_to_id[$enclosure_o->url]['width'] = $attachment->width; - $attachment_url_to_id[$enclosure_o->url]['height'] = $attachment->height; - + $attachment_url_to_id[$enclosure_o->url]['height'] = $attachment->height; + // animated gif? if($attachment->mimetype == 'image/gif') { $image = ImageFile::fromFileObject($attachment); @@ -454,30 +454,30 @@ class QvitterPlugin extends Plugin { $attachment_url_to_id[$enclosure_o->url]['animated'] = true; } else { - $attachment_url_to_id[$enclosure_o->url]['animated'] = false; + $attachment_url_to_id[$enclosure_o->url]['animated'] = false; } - } - } + } + } } } } } - + // add thumbs to $twitter_status if (!empty($twitter_status['attachments'])) { foreach ($twitter_status['attachments'] as &$attachment) { if (!empty($attachment_url_to_id[$attachment['url']])) { $attachment['id'] = $attachment_url_to_id[$attachment['url']]['id']; $attachment['width'] = $attachment_url_to_id[$attachment['url']]['width']; - $attachment['height'] = $attachment_url_to_id[$attachment['url']]['height']; + $attachment['height'] = $attachment_url_to_id[$attachment['url']]['height']; $attachment['thumb_url'] = $attachment_url_to_id[$attachment['url']]['thumb_url']; if(isset($attachment_url_to_id[$attachment['url']]['animated'])) { - $attachment['animated'] = $attachment_url_to_id[$attachment['url']]['animated']; + $attachment['animated'] = $attachment_url_to_id[$attachment['url']]['animated']; } } } - } - + } + // reply-to profile url try { $reply = $notice->getParent(); @@ -490,41 +490,41 @@ class QvitterPlugin extends Plugin { $faves = Fave::byNotice($notice); $favenum = count($faves); $twitter_status['fave_num'] = $favenum; - + // repeat number $repeats = $notice->repeatStream(); $repeatnum=0; while ($repeats->fetch()) { $repeatnum++; } - $twitter_status['repeat_num'] = $repeatnum; - + $twitter_status['repeat_num'] = $repeatnum; + // some more metadata about notice if($notice->is_local == '1') { - $twitter_status['is_local'] = true; + $twitter_status['is_local'] = true; } else { - $twitter_status['is_local'] = false; + $twitter_status['is_local'] = false; if($notice->object_type != 'activity') { - $twitter_status['external_url'] = $notice->getUrl(true); + $twitter_status['external_url'] = $notice->getUrl(true); } } - + if($notice->object_type == 'activity' || $notice->object_type == 'http://activitystrea.ms/schema/1.0/activity') { - $twitter_status['is_activity'] = true; + $twitter_status['is_activity'] = true; } else { - $twitter_status['is_activity'] = false; - } - + $twitter_status['is_activity'] = false; + } + if($notice->verb == 'qvitter-delete-notice') { - $twitter_status['qvitter_delete_notice'] = true; + $twitter_status['qvitter_delete_notice'] = true; } return true; } - - + + /** * Cover photo in API response, also follows_you, etc * @@ -534,22 +534,22 @@ class QvitterPlugin extends Plugin { function onTwitterUserArray($profile, &$twitter_user, $scoped) { - $twitter_user['cover_photo'] = Profile_prefs::getConfigData($profile, 'qvitter', 'cover_photo'); - $twitter_user['background_image'] = Profile_prefs::getConfigData($profile, 'qvitter', 'background_image'); - + $twitter_user['cover_photo'] = Profile_prefs::getConfigData($profile, 'qvitter', 'cover_photo'); + $twitter_user['background_image'] = Profile_prefs::getConfigData($profile, 'qvitter', 'background_image'); + // follows me? if ($scoped) { $twitter_user['follows_you'] = $profile->isSubscribed($scoped); } - - // local user? + + // local user? $twitter_user['is_local'] = $profile->isLocal(); return true; - } - + } + /** @@ -557,7 +557,7 @@ class QvitterPlugin extends Plugin { */ function insertNotification($to_profile_id, $from_profile_id, $ntype, $notice_id=false) { - + $to_user = User::getKV('id', $to_profile_id); $from_profile = Profile::getKV($from_profile_id); @@ -570,56 +570,56 @@ class QvitterPlugin extends Plugin { if ($to_user->hasBlocked($from_profile)) { return false; } - + // never notify myself if($to_profile_id == $from_profile_id) { return false; } - - // insert + + // insert $notif = new QvitterNotification(); $notif->to_profile_id = $to_profile_id; - $notif->from_profile_id = $from_profile_id; + $notif->from_profile_id = $from_profile_id; $notif->ntype = $ntype; - $notif->notice_id = $notice_id; - $notif->created = common_sql_now(); + $notif->notice_id = $notice_id; + $notif->created = common_sql_now(); if (!$notif->insert()) { common_log_db_error($notif, 'INSERT', __FILE__); return false; } return true; - } - + } + /** * Insert likes in notification table */ public function onEndFavorNotice($profile, $notice) { - - // don't notify people favoriting their own notices + + // don't notify people favoriting their own notices if($notice->profile_id != $profile->id) { $this->insertNotification($notice->profile_id, $profile->id, 'like', $notice->id); - } - } - - + } + } + + /** * Remove likes in notification table on dislike */ public function onEndDisfavorNotice($profile, $notice) { $notif = new QvitterNotification(); - $notif->from_profile_id = $profile->id; + $notif->from_profile_id = $profile->id; $notif->notice_id = $notice->id; $notif->ntype = 'like'; $notif->delete(); return true; - } - - - + } + + + /** * Insert notifications for replies, mentions and repeats * @@ -631,7 +631,7 @@ class QvitterPlugin extends Plugin { // don't add notifications for activity type notices if($notice->object_type == 'activity') { - return true; + return true; } // mark reply/mention-notifications as read if we're replying to a notice we're notified about @@ -644,21 +644,21 @@ class QvitterPlugin extends Plugin { && ($notification_to_mark_as_seen->ntype == 'mention' || $notification_to_mark_as_seen->ntype == 'reply')) { $orig = clone($notification_to_mark_as_seen); $notification_to_mark_as_seen->is_seen = 1; - $notification_to_mark_as_seen->update($orig); - } - } + $notification_to_mark_as_seen->update($orig); + } + } // repeats if ($notice->isRepeat()) { $repeated_notice = Notice::getKV('id', $notice->repeat_of); - if ($repeated_notice instanceof Notice) { + if ($repeated_notice instanceof Notice) { $this->insertNotification($repeated_notice->profile_id, $notice->profile_id, 'repeat', $repeated_notice->id); } - } + } // replies and mentions (no notifications for these if this is a repeat) else { - $reply_notification_to = false; + $reply_notification_to = false; // check for reply to insert in notifications if($notice->reply_to) { try { @@ -673,28 +673,28 @@ class QvitterPlugin extends Plugin { } } - // check for mentions to insert in notifications + // check for mentions to insert in notifications $mentions = $notice->getReplies(); - $sender = Profile::getKV($notice->profile_id); + $sender = Profile::getKV($notice->profile_id); $all_mentioned_user_ids = array(); - foreach ($mentions as $mentioned) { + foreach ($mentions as $mentioned) { // no duplicate mentions if(in_array($mentioned, $all_mentioned_user_ids)) { continue; - } + } $all_mentioned_user_ids[] = $mentioned; - + // only notify if mentioned user is not already notified for reply if($reply_notification_to != $mentioned) { - $this->insertNotification($mentioned, $notice->profile_id, 'mention', $notice->id); + $this->insertNotification($mentioned, $notice->profile_id, 'mention', $notice->id); } - } + } } - + return true; } - + /** * Delete any notifications tied to deleted notices and un-repeats @@ -709,16 +709,16 @@ class QvitterPlugin extends Plugin { // unrepeats if ($notice->isRepeat()) { $repeated_notice = Notice::getKV('id', $notice->repeat_of); - $notif->notice_id = $repeated_notice->id; - $notif->from_profile_id = $notice->profile_id; - } + $notif->notice_id = $repeated_notice->id; + $notif->from_profile_id = $notice->profile_id; + } // notices else { $notif->notice_id = $notice->id; - } - - $notif->delete(); - + } + + $notif->delete(); + // outputs an activity notice that this notice was deleted $profile = $notice->getProfile(); $rendered = sprintf(_m('%2$s deleted notice {{%4$s}}.'), @@ -726,22 +726,25 @@ class QvitterPlugin extends Plugin { $profile->getBestName(), $notice->getUrl(), $notice->uri); + $text = sprintf(_m('%1$s deleted notice {{%2$s}}.'), + $profile->getBestName(), + $notice->uri); $uri = TagURI::mint('delete-notice:%d:%d:%s', $notice->profile_id, $notice->id, common_date_iso8601(common_sql_now())); $notice = Notice::saveNew($notice->profile_id, - $notice->uri, + $text, ActivityPlugin::SOURCE, array('rendered' => $rendered, 'urls' => array(), 'uri' => $uri, 'verb' => 'qvitter-delete-notice', - 'object_type' => ActivityObject::ACTIVITY)); + 'object_type' => ActivityObject::ACTIVITY)); return true; - } - + } + /** @@ -750,7 +753,7 @@ class QvitterPlugin extends Plugin { * * @return boolean hook flag */ - + public function onEndHandleFeedEntry($activity) { if($activity->verb == 'qvitter-delete-notice') { @@ -768,23 +771,23 @@ class QvitterPlugin extends Plugin { $deleter_profile = Profile::getKV('id', $deleter_ostatus_profile->profile_id); $deleted_notice = Notice::getKV('uri', $deleted_notice_uri); - + if(!($deleter_profile instanceof Profile) || !($deleted_notice instanceof Notice)) { return true; - } - + } + if($deleter_profile->id != $deleted_notice->profile_id) { - return true; - } + return true; + } $deleted_notice->delete(); - } - + } + return true; } - + /** * Add notification on subscription, remove on unsubscribe * @@ -793,23 +796,23 @@ class QvitterPlugin extends Plugin { public function onEndSubscribe($subscriber, $other) { if(Subscription::exists($subscriber, $other)) { - $this->insertNotification($other->id, $subscriber->id, 'follow', 1); + $this->insertNotification($other->id, $subscriber->id, 'follow', 1); } - + return true; - } + } public function onEndUnsubscribe($subscriber, $other) { if(!Subscription::exists($subscriber, $other)) { $notif = new QvitterNotification(); - $notif->to_profile_id = $other->id; - $notif->from_profile_id = $subscriber->id; + $notif->to_profile_id = $other->id; + $notif->from_profile_id = $subscriber->id; $notif->ntype = 'follow'; $notif->delete(); } - + return true; - } + } /** * Replace GNU Social's default FAQ with Qvitter's @@ -818,24 +821,24 @@ class QvitterPlugin extends Plugin { */ public function onEndLoadDoc($title, &$output) { - + if($title == 'faq') { - $faq = file_get_contents(QVITTERDIR.'/doc/en/faq.html'); - $faq = str_replace('{instance-name}',common_config('site','name'),$faq); - $faq = str_replace('{instance-url}',common_config('site','server'),$faq); - $faq = str_replace('{instance-url-with-protocol}',common_path('', true),$faq); - - if (common_logged_in()) { + $faq = file_get_contents(QVITTERDIR.'/doc/en/faq.html'); + $faq = str_replace('{instance-name}',common_config('site','name'),$faq); + $faq = str_replace('{instance-url}',common_config('site','server'),$faq); + $faq = str_replace('{instance-url-with-protocol}',common_path('', true),$faq); + + if (common_logged_in()) { $user = common_current_user(); $faq = str_replace('{nickname}',$user->nickname,$faq); } $output = $faq; } - + return true; - } - + } + /** * Add menu items to top header in Classic * @@ -843,7 +846,7 @@ class QvitterPlugin extends Plugin { */ public function onStartPrimaryNav($action) { - + $action->menuItem(common_local_url('doc', array('title' => 'faq')), // TRANS: Menu item in primary navigation panel. _m('MENU','FAQ'), @@ -851,9 +854,9 @@ class QvitterPlugin extends Plugin { _('Frequently asked questions'), false, 'top_nav_doc_faq'); - + return true; - } + } /** @@ -863,23 +866,23 @@ class QvitterPlugin extends Plugin { */ public function onStartUserRegister($profile) { - + if(is_array(self::settings("blocked_ips"))) { if(in_array($_SERVER['REMOTE_ADDR'], self::settings("blocked_ips"))) { return false; } - } - + } + return true; - } - - + } + + /** * Add unread notification count to all API responses, when logged in * * @return boolean hook flag - */ + */ public function onEndSetApiUser($user) { if (!$user instanceof User) { return true; @@ -890,24 +893,24 @@ class QvitterPlugin extends Plugin { $notification->selectAdd(); $notification->selectAdd('ntype'); - $notification->selectAdd('count(id) as count'); + $notification->selectAdd('count(id) as count'); $notification->whereAdd("(to_profile_id = '".$user_id."')"); - $notification->groupBy('ntype'); + $notification->groupBy('ntype'); $notification->whereAdd("(is_seen = '0')"); - $notification->whereAdd("(notice_id IS NOT NULL)"); // sometimes notice_id is NULL, those notifications are corrupt and should be discarded + $notification->whereAdd("(notice_id IS NOT NULL)"); // sometimes notice_id is NULL, those notifications are corrupt and should be discarded $notification->find(); - + $new_notifications = array(); while ($notification->fetch()) { $new_notifications[$notification->ntype] = $notification->count; } - - header('Qvitter-Notifications: '.json_encode($new_notifications)); + + header('Qvitter-Notifications: '.json_encode($new_notifications)); return true; } - - + + function onPluginVersion(array &$versions) { $versions[] = array('name' => 'Qvitter', @@ -981,7 +984,7 @@ class QvitterPlugin extends Plugin { // Is the requesting user following this user? $twitter_user['following'] = false; $twitter_user['statusnet_blocking'] = false; - + $logged_in_profile = Profile::current(); if ($logged_in) { @@ -998,7 +1001,7 @@ class QvitterPlugin extends Plugin { $twitter_user['statusnet_profile_url'] = $profile->profileurl; // The event call to handle NoticeSimpleStatusArray lets plugins add data to the output array - + Event::handle('TwitterUserArray', array($profile, &$twitter_user, $logged_in_profile, array())); return $twitter_user; @@ -1018,13 +1021,13 @@ class URLMapperOverwrite extends URLMapper { static function overwrite_variable($m, $path, $args, $paramPatterns, $newaction) { - - $m->connect($path, array('action' => $newaction), $paramPatterns); - + + $m->connect($path, array('action' => $newaction), $paramPatterns); + $regex = self::makeRegex($path, $paramPatterns); - + foreach($m->variables as $n=>$v) - if($v[1] == $regex) + if($v[1] == $regex) $m->variables[$n][0]['action'] = $newaction; } } diff --git a/css/qvitter.css b/css/qvitter.css index 7498297..fe441f1 100644 --- a/css/qvitter.css +++ b/css/qvitter.css @@ -1673,6 +1673,16 @@ body.rtl .queet.rtl .expanded-content { color:#999999; } +/* only show activity notices if they are conversation starters + we never need to see these, but sometimes someone replies to + an activity notice, and then it can be good to know what the + user is replying to... */ +#feed-body > .stream-item.activity { + display:none; + } +.stream-item > .stream-item.activity:first-child { + display:block; + } .queet .queet-thumbs { -webkit-transition: max-height 0s linear; diff --git a/js/dom-functions.js b/js/dom-functions.js index 45d64c2..8ba8796 100644 --- a/js/dom-functions.js +++ b/js/dom-functions.js @@ -1769,8 +1769,10 @@ function addToFeed(feed, after, extraClasses, isReply) { // if this is a special qvitter-delete-notice activity notice it means we try to hide // the deleted notice from our stream + // the uri is in the obj.text var, between the double curly brackets if(typeof obj.qvitter_delete_notice != 'undefined' && obj.qvitter_delete_notice == true) { - var streamItemToHide = $('.stream-item[data-uri="' + obj.text + '"]'); + var uriToHide = obj.text.substring(obj.text.indexOf('{{')+2,obj.text.indexOf('}}')); + var streamItemToHide = $('.stream-item[data-uri="' + uriToHide + '"]'); streamItemToHide.animate({opacity:'0.2'},1000,'linear',function(){ $(this).css('height',$(this).height() + 'px'); $(this).animate({height:'0px'},500,'linear',function(){ @@ -1779,11 +1781,6 @@ function addToFeed(feed, after, extraClasses, isReply) { }); } - // don't show any notices with object_type "activity" - if(typeof obj.is_activity != 'undefined' && obj.is_activity === true) { - return true; - } - // only if not already exist if($('#q-' + obj.id).length == 0) {