forked from GNUsocial/gnu-social
		
	Merge branch 'master' of gitorious.org:statusnet/mainline into testing
This commit is contained in:
		| @@ -62,6 +62,28 @@ class LoginAction extends Action | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Prepare page to run | ||||
|      * | ||||
|      * | ||||
|      * @param $args | ||||
|      * @return string title | ||||
|      */ | ||||
|  | ||||
|     function prepare($args) | ||||
|     { | ||||
|         parent::prepare($args); | ||||
|  | ||||
|         // @todo this check should really be in index.php for all sensitive actions | ||||
|         $ssl = common_config('site', 'ssl'); | ||||
|         if (empty($_SERVER['HTTPS']) && ($ssl == 'always' || $ssl == 'sometimes')) { | ||||
|             common_redirect(common_local_url('login')); | ||||
|             // exit | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Handle input, produce output | ||||
|      * | ||||
|   | ||||
| @@ -74,6 +74,13 @@ class RegisterAction extends Action | ||||
|         parent::prepare($args); | ||||
|         $this->code = $this->trimmed('code'); | ||||
|  | ||||
|         // @todo this check should really be in index.php for all sensitive actions | ||||
|         $ssl = common_config('site', 'ssl'); | ||||
|         if (empty($_SERVER['HTTPS']) && ($ssl == 'always' || $ssl == 'sometimes')) { | ||||
|             common_redirect(common_local_url('register')); | ||||
|             // exit | ||||
|         } | ||||
|  | ||||
|         if (empty($this->code)) { | ||||
|             common_ensure_session(); | ||||
|             if (array_key_exists('invitecode', $_SESSION)) { | ||||
|   | ||||
| @@ -342,10 +342,24 @@ class TwitapisearchatomAction extends ApiAction | ||||
|                                      'rel' => 'related', | ||||
|                                      'href' => $profile->avatarUrl())); | ||||
|  | ||||
|         // TODO: Here is where we'd put in a link to an atom feed for threads | ||||
|         // @todo: Here is where we'd put in a link to an atom feed for threads | ||||
|  | ||||
|         $this->element("twitter:source", null, | ||||
|             htmlentities($this->sourceLink($notice->source))); | ||||
|         $source = null; | ||||
|  | ||||
|         $ns = $notice->getSource(); | ||||
|         if ($ns) { | ||||
|             if (!empty($ns->name) && !empty($ns->url)) { | ||||
|                 $source = '<a href="' | ||||
| 		   . htmlspecialchars($ns->url) | ||||
| 		   . '" rel="nofollow">' | ||||
| 		   . htmlspecialchars($ns->name) | ||||
| 		   . '</a>'; | ||||
|             } else { | ||||
|                 $source = $ns->code; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $this->element("twitter:source", null, $source); | ||||
|  | ||||
|         $this->elementStart('author'); | ||||
|  | ||||
|   | ||||
| @@ -703,7 +703,7 @@ class Notice extends Memcached_DataObject | ||||
|  | ||||
|     /** | ||||
|      * Is this notice part of an active conversation? | ||||
|      *  | ||||
|      * | ||||
|      * @return boolean true if other messages exist in the same | ||||
|      *                 conversation, false if this is the only one | ||||
|      */ | ||||
| @@ -1171,7 +1171,7 @@ class Notice extends Memcached_DataObject | ||||
|         return $groups; | ||||
|     } | ||||
|  | ||||
|     function asAtomEntry($namespace=false, $source=false, $author=true) | ||||
|     function asAtomEntry($namespace=false, $source=false, $author=true, $cur=null) | ||||
|     { | ||||
|         $profile = $this->getProfile(); | ||||
|  | ||||
| @@ -1184,7 +1184,8 @@ class Notice extends Memcached_DataObject | ||||
|                            'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/', | ||||
|                            'xmlns:media' => 'http://purl.org/syndication/atommedia', | ||||
|                            'xmlns:poco' => 'http://portablecontacts.net/spec/1.0', | ||||
|                            'xmlns:ostatus' => 'http://ostatus.org/schema/1.0'); | ||||
|                            'xmlns:ostatus' => 'http://ostatus.org/schema/1.0', | ||||
|                            'xmlns:statusnet' => 'http://status.net/ont/'); | ||||
|         } else { | ||||
|             $attrs = array(); | ||||
|         } | ||||
| @@ -1232,6 +1233,24 @@ class Notice extends Memcached_DataObject | ||||
|         $xs->element('published', null, common_date_w3dtf($this->created)); | ||||
|         $xs->element('updated', null, common_date_w3dtf($this->created)); | ||||
|  | ||||
|         $noticeInfoAttr = array( | ||||
|             'local_id'   => $this->id,    // local notice ID (useful to clients for ordering) | ||||
|             'source'     => $this->source // the client name (source attribution) | ||||
|         ); | ||||
|  | ||||
|         $ns = $this->getSource(); | ||||
|         if ($ns) { | ||||
|             if (!empty($ns->url)) { | ||||
|                 $noticeInfoAttr['source_link'] = $ns->url; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (!empty($cur)) { | ||||
|             $noticeInfoAttr['favorited'] = ($cur->hasFave($this)) ? 'true' : 'false'; | ||||
|         } | ||||
|  | ||||
|         $xs->element('statusnet:notice_info', $noticeInfoAttr, null); | ||||
|  | ||||
|         if ($this->reply_to) { | ||||
|             $reply_notice = Notice::staticGet('id', $this->reply_to); | ||||
|             if (!empty($reply_notice)) { | ||||
| @@ -1796,4 +1815,41 @@ class Notice extends Memcached_DataObject | ||||
|  | ||||
|         return $result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the source of the notice | ||||
|      * | ||||
|      * @return Notice_source $ns A notice source object. 'code' is the only attribute | ||||
|      *                           guaranteed to be populated. | ||||
|      */ | ||||
|     function getSource() | ||||
|     { | ||||
|         $ns = new Notice_source(); | ||||
|         if (!empty($this->source)) { | ||||
|             switch ($this->source) { | ||||
|             case 'web': | ||||
|             case 'xmpp': | ||||
|             case 'mail': | ||||
|             case 'omb': | ||||
|             case 'system': | ||||
|             case 'api': | ||||
|                 $ns->code = $this->source; | ||||
|                 break; | ||||
|             default: | ||||
|                 $ns = Notice_source::staticGet($this->source); | ||||
|                 if (!$ns) { | ||||
|                     $ns = new Notice_source(); | ||||
|                     $ns->code = $this->source; | ||||
|                     $app = Oauth_application::staticGet('name', $this->source); | ||||
|                     if ($app) { | ||||
|                         $ns->name = $app->name; | ||||
|                         $ns->url  = $app->source_url; | ||||
|                     } | ||||
|                 } | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return $ns; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -260,7 +260,23 @@ class ApiAction extends Action | ||||
|         $twitter_status['created_at'] = $this->dateTwitter($notice->created); | ||||
|         $twitter_status['in_reply_to_status_id'] = ($notice->reply_to) ? | ||||
|             intval($notice->reply_to) : null; | ||||
|         $twitter_status['source'] = $this->sourceLink($notice->source); | ||||
|  | ||||
|         $source = null; | ||||
|  | ||||
|         $ns = $notice->getSource(); | ||||
|         if ($ns) { | ||||
|             if (!empty($ns->name) && !empty($ns->url)) { | ||||
|                 $source = '<a href="' | ||||
| 		    . htmlspecialchars($ns->url) | ||||
| 		    . '" rel="nofollow">' | ||||
| 		    . htmlspecialchars($ns->name) | ||||
| 		    . '</a>'; | ||||
|             } else { | ||||
|                 $source = $ns->code; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $twitter_status['source'] = $source; | ||||
|         $twitter_status['id'] = intval($notice->id); | ||||
|  | ||||
|         $replier_profile = null; | ||||
| @@ -1298,43 +1314,6 @@ class ApiAction extends Action | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     function sourceLink($source) | ||||
|     { | ||||
|         $source_name = _($source); | ||||
|         switch ($source) { | ||||
|         case 'web': | ||||
|         case 'xmpp': | ||||
|         case 'mail': | ||||
|         case 'omb': | ||||
|         case 'api': | ||||
|             break; | ||||
|         default: | ||||
|  | ||||
|             $name = null; | ||||
|             $url  = null; | ||||
|  | ||||
|             $ns = Notice_source::staticGet($source); | ||||
|  | ||||
|             if ($ns) { | ||||
|                 $name = $ns->name; | ||||
|                 $url  = $ns->url; | ||||
|             } else { | ||||
|                 $app = Oauth_application::staticGet('name', $source); | ||||
|                 if ($app) { | ||||
|                     $name = $app->name; | ||||
|                     $url  = $app->source_url; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (!empty($name) && !empty($url)) { | ||||
|                 $source_name = '<a href="' . $url . '">' . $name . '</a>'; | ||||
|             } | ||||
|  | ||||
|             break; | ||||
|         } | ||||
|         return $source_name; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns query argument or default value if not found. Certain | ||||
|      * parameters used throughout the API are lightly scrubbed and | ||||
|   | ||||
| @@ -79,6 +79,11 @@ class AtomNoticeFeed extends Atom10Feed | ||||
|             'ostatus', | ||||
|             'http://ostatus.org/schema/1.0' | ||||
|         ); | ||||
|  | ||||
|         $this->addNamespace( | ||||
|             'statusnet', | ||||
|             'http://status.net/ont/' | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -110,7 +115,9 @@ class AtomNoticeFeed extends Atom10Feed | ||||
|         $source = $this->showSource(); | ||||
|         $author = $this->showAuthor(); | ||||
|  | ||||
|         $this->addEntryRaw($notice->asAtomEntry(false, $source, $author)); | ||||
|         $cur = common_current_user(); | ||||
|  | ||||
|         $this->addEntryRaw($notice->asAtomEntry(false, $source, $author, $cur)); | ||||
|     } | ||||
|  | ||||
|     function showSource() | ||||
|   | ||||
							
								
								
									
										20
									
								
								lib/mail.php
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								lib/mail.php
									
									
									
									
									
								
							| @@ -224,9 +224,6 @@ function mail_subscribe_notify_profile($listenee, $other) | ||||
|     if ($other->hasRight(Right::EMAILONSUBSCRIBE) && | ||||
|         $listenee->email && $listenee->emailnotifysub) { | ||||
|  | ||||
|         // use the recipient's localization | ||||
|         common_init_locale($listenee->language); | ||||
|  | ||||
|         $profile = $listenee->getProfile(); | ||||
|  | ||||
|         $name = $profile->getBestName(); | ||||
| @@ -236,6 +233,9 @@ function mail_subscribe_notify_profile($listenee, $other) | ||||
|  | ||||
|         $recipients = $listenee->email; | ||||
|  | ||||
|         // use the recipient's localization | ||||
|         common_switch_locale($listenee->language); | ||||
|  | ||||
|         $headers = _mail_prepare_headers('subscribe', $listenee->nickname, $other->nickname); | ||||
|         $headers['From']    = mail_notify_from(); | ||||
|         $headers['To']      = $name . ' <' . $listenee->email . '>'; | ||||
| @@ -271,7 +271,7 @@ function mail_subscribe_notify_profile($listenee, $other) | ||||
|                         common_local_url('emailsettings')); | ||||
|  | ||||
|         // reset localization | ||||
|         common_init_locale(); | ||||
|         common_switch_locale(); | ||||
|         mail_send($recipients, $headers, $body); | ||||
|     } | ||||
| } | ||||
| @@ -473,7 +473,7 @@ function mail_confirm_sms($code, $nickname, $address) | ||||
|  | ||||
| function mail_notify_nudge($from, $to) | ||||
| { | ||||
|     common_init_locale($to->language); | ||||
|     common_switch_locale($to->language); | ||||
|     // TRANS: Subject for 'nudge' notification email | ||||
|     $subject = sprintf(_('You\'ve been nudged by %s'), $from->nickname); | ||||
|  | ||||
| @@ -491,7 +491,7 @@ function mail_notify_nudge($from, $to) | ||||
|                     $from->nickname, | ||||
|                     common_local_url('all', array('nickname' => $to->nickname)), | ||||
|                     common_config('site', 'name')); | ||||
|     common_init_locale(); | ||||
|     common_switch_locale(); | ||||
|  | ||||
|     $headers = _mail_prepare_headers('nudge', $to->nickname, $from->nickname); | ||||
|  | ||||
| @@ -525,7 +525,7 @@ function mail_notify_message($message, $from=null, $to=null) | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     common_init_locale($to->language); | ||||
|     common_switch_locale($to->language); | ||||
|     // TRANS: Subject for direct-message notification email | ||||
|     $subject = sprintf(_('New private message from %s'), $from->nickname); | ||||
|  | ||||
| @@ -549,7 +549,7 @@ function mail_notify_message($message, $from=null, $to=null) | ||||
|  | ||||
|     $headers = _mail_prepare_headers('message', $to->nickname, $from->nickname); | ||||
|  | ||||
|     common_init_locale(); | ||||
|     common_switch_locale(); | ||||
|     return mail_to_user($to, $subject, $body, $headers); | ||||
| } | ||||
|  | ||||
| @@ -577,7 +577,7 @@ function mail_notify_fave($other, $user, $notice) | ||||
|  | ||||
|     $bestname = $profile->getBestName(); | ||||
|  | ||||
|     common_init_locale($other->language); | ||||
|     common_switch_locale($other->language); | ||||
|  | ||||
|     // TRANS: Subject for favorite notification email | ||||
|     $subject = sprintf(_('%s (@%s) added your notice as a favorite'), $bestname, $user->nickname); | ||||
| @@ -605,7 +605,7 @@ function mail_notify_fave($other, $user, $notice) | ||||
|  | ||||
|     $headers = _mail_prepare_headers('fave', $other->nickname, $user->nickname); | ||||
|  | ||||
|     common_init_locale(); | ||||
|     common_switch_locale(); | ||||
|     mail_to_user($other, $subject, $body, $headers); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -480,54 +480,46 @@ class NoticeListItem extends Widget | ||||
|  | ||||
|     function showNoticeSource() | ||||
|     { | ||||
|         if ($this->notice->source) { | ||||
|         $ns = $this->notice->getSource(); | ||||
|  | ||||
|         if ($ns) { | ||||
|             $source_name = _($ns->code); | ||||
|             $this->out->text(' '); | ||||
|             $this->out->elementStart('span', 'source'); | ||||
|             $this->out->text(_('from')); | ||||
|             $source_name = _($this->notice->source); | ||||
|             $this->out->text(' '); | ||||
|             switch ($this->notice->source) { | ||||
|              case 'web': | ||||
|              case 'xmpp': | ||||
|              case 'mail': | ||||
|              case 'omb': | ||||
|              case 'system': | ||||
|              case 'api': | ||||
|                 $this->out->element('span', 'device', $source_name); | ||||
|                 break; | ||||
|              default: | ||||
|  | ||||
|             $name  = $source_name; | ||||
|             $url   = $ns->url; | ||||
|             $title = null; | ||||
|  | ||||
|             if (Event::handle('StartNoticeSourceLink', array($this->notice, &$name, &$url, &$title))) { | ||||
|                 $name = $source_name; | ||||
|                 $url  = null; | ||||
|  | ||||
|                 if (Event::handle('StartNoticeSourceLink', array($this->notice, &$name, &$url, &$title))) { | ||||
|                     $ns = Notice_source::staticGet($this->notice->source); | ||||
|  | ||||
|                     if ($ns) { | ||||
|                         $name = $ns->name; | ||||
|                         $url  = $ns->url; | ||||
|                     } else { | ||||
|                         $app = Oauth_application::staticGet('name', $this->notice->source); | ||||
|                         if ($app) { | ||||
|                             $name = $app->name; | ||||
|                             $url  = $app->source_url; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 Event::handle('EndNoticeSourceLink', array($this->notice, &$name, &$url, &$title)); | ||||
|  | ||||
|                 if (!empty($name) && !empty($url)) { | ||||
|                     $this->out->elementStart('span', 'device'); | ||||
|                     $this->out->element('a', array('href' => $url, | ||||
|                                                    'rel' => 'external', | ||||
|                                                    'title' => $title), | ||||
|                                         $name); | ||||
|                     $this->out->elementEnd('span'); | ||||
|                 } else { | ||||
|                     $this->out->element('span', 'device', $name); | ||||
|                 } | ||||
|                 break; | ||||
|                 $url  = $ns->url; | ||||
|             } | ||||
|             Event::handle('EndNoticeSourceLink', array($this->notice, &$name, &$url, &$title)); | ||||
|  | ||||
|             // if $ns->name and $ns->url are populated we have | ||||
|             // configured a source attr somewhere | ||||
|             if (!empty($name) && !empty($url)) { | ||||
|  | ||||
|                 $this->out->elementStart('span', 'device'); | ||||
|  | ||||
|                 $attrs = array( | ||||
|                     'href' => $url, | ||||
|                     'rel' => 'external' | ||||
|                 ); | ||||
|  | ||||
|                 if (!empty($title)) { | ||||
|                     $attrs['title'] = $title; | ||||
|                 } | ||||
|  | ||||
|                 $this->out->element('a', $attrs, $name); | ||||
|                 $this->out->elementEnd('span'); | ||||
|             } else { | ||||
|                 $this->out->element('span', 'device', $name); | ||||
|             } | ||||
|  | ||||
|             $this->out->elementEnd('span'); | ||||
|         } | ||||
|     } | ||||
|   | ||||
							
								
								
									
										17
									
								
								lib/util.php
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								lib/util.php
									
									
									
									
									
								
							| @@ -34,6 +34,14 @@ function common_user_error($msg, $code=400) | ||||
|     $err->showPage(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * This should only be used at setup; processes switching languages | ||||
|  * to send text to other users should use common_switch_locale(). | ||||
|  *  | ||||
|  * @param string $language Locale language code (optional; empty uses | ||||
|  *                         current user's preference or site default) | ||||
|  * @return mixed success | ||||
|  */ | ||||
| function common_init_locale($language=null) | ||||
| { | ||||
|     if(!$language) { | ||||
| @@ -50,6 +58,15 @@ function common_init_locale($language=null) | ||||
|     return $ok; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Initialize locale and charset settings and gettext with our message catalog, | ||||
|  * using the current user's language preference or the site default. | ||||
|  *  | ||||
|  * This should generally only be run at framework initialization; code switching | ||||
|  * languages at runtime should call common_switch_language(). | ||||
|  *  | ||||
|  * @access private | ||||
|  */ | ||||
| function common_init_language() | ||||
| { | ||||
|     mb_internal_encoding('UTF-8'); | ||||
|   | ||||
| @@ -4889,7 +4889,7 @@ msgstr "Primary site navigation" | ||||
| #: lib/action.php:432 | ||||
| msgctxt "TOOLTIP" | ||||
| msgid "Personal profile and friends timeline" | ||||
| msgstr "ersonal profile and friends timeline" | ||||
| msgstr "Personal profile and friends timeline" | ||||
|  | ||||
| #. TRANS: Main menu option when logged in for access to personal profile and friends timeline | ||||
| #: lib/action.php:435 | ||||
|   | ||||
| @@ -272,12 +272,12 @@ function remove_facebook_app($flink) | ||||
|  | ||||
| function mail_facebook_app_removed($user) | ||||
| { | ||||
|     common_init_locale($user->language); | ||||
|  | ||||
|     $profile = $user->getProfile(); | ||||
|  | ||||
|     $site_name = common_config('site', 'name'); | ||||
|  | ||||
|     common_switch_locale($user->language); | ||||
|  | ||||
|     $subject = sprintf( | ||||
|         _m('Your %1$s Facebook application access has been disabled.', | ||||
|             $site_name)); | ||||
| @@ -291,7 +291,7 @@ function mail_facebook_app_removed($user) | ||||
|         "re-installing the %2\$s Facebook application.\n\nRegards,\n\n%2\$s"), | ||||
|         $user->nickname, $site_name); | ||||
|  | ||||
|     common_init_locale(); | ||||
|     common_switch_locale(); | ||||
|     return mail_to_user($user, $subject, $body); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -452,6 +452,7 @@ class OStatusPlugin extends Plugin | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
| 	return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -335,10 +335,10 @@ function remove_twitter_link($flink) | ||||
|  | ||||
| function mail_twitter_bridge_removed($user) | ||||
| { | ||||
|     common_init_locale($user->language); | ||||
|  | ||||
|     $profile = $user->getProfile(); | ||||
|  | ||||
|     common_switch_locale($user->language); | ||||
|  | ||||
|     $subject = sprintf(_m('Your Twitter bridge has been disabled.')); | ||||
|  | ||||
|     $site_name = common_config('site', 'name'); | ||||
| @@ -354,7 +354,7 @@ function mail_twitter_bridge_removed($user) | ||||
|         common_local_url('twittersettings'), | ||||
|         common_config('site', 'name')); | ||||
|  | ||||
|     common_init_locale(); | ||||
|     common_switch_locale(); | ||||
|     return mail_to_user($user, $subject, $body); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user