diff --git a/actions/apisearchatom.php b/actions/apisearchatom.php index 3a24b771ea..e82ea39f9f 100644 --- a/actions/apisearchatom.php +++ b/actions/apisearchatom.php @@ -337,21 +337,21 @@ class ApiSearchAtomAction extends ApiPrivateAuthAction // @todo: Here is where we'd put in a link to an atom feed for threads $source = null; + $source_link = null; $ns = $notice->getSource(); if ($ns instanceof Notice_source) { - if (!empty($ns->name) && !empty($ns->url)) { - $source = '' - . htmlspecialchars($ns->name) - . ''; - } else { - $source = $ns->code; + $source = $ns->code; + if (!empty($ns->url)) { + $source_link = $ns->url; + if (!empty($ns->name)) { + $source = $ns->name; + } } } $this->element("twitter:source", null, $source); + $this->element("twitter:source_link", null, $source_link); $this->elementStart('author'); diff --git a/classes/Notice.php b/classes/Notice.php index b828678d87..587ca6a073 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -2123,11 +2123,7 @@ class Notice extends Managed_DataObject if (!empty($ns->url)) { $noticeInfoAttr['source_link'] = $ns->url; if (!empty($ns->name)) { - $noticeInfoAttr['source'] = '' - . htmlspecialchars($ns->name) - . ''; + $noticeInfoAttr['source'] = $ns->name; } } } diff --git a/extlib/DB.php b/extlib/DB.php index b9b5c4a79f..f36f919fe9 100644 --- a/extlib/DB.php +++ b/extlib/DB.php @@ -964,7 +964,7 @@ class DB_Error extends PEAR_Error { if (is_int($code)) { $this->PEAR_Error('DB Error: ' . DB::errorMessage($code), $code, - $mode, $level, $debuginfo); + $mode, $level, $debuginfo, common_log(LOG_ERR, var_export($debuginfo,true))); } else { $this->PEAR_Error("DB Error: $code", DB_ERROR, $mode, $level, $debuginfo); diff --git a/lib/activityhandlerplugin.php b/lib/activityhandlerplugin.php index c06f723a36..9ebcd8a218 100644 --- a/lib/activityhandlerplugin.php +++ b/lib/activityhandlerplugin.php @@ -556,6 +556,11 @@ abstract class ActivityHandlerPlugin extends Plugin if ($nli->notice->scope != 0 && $nli->notice->scope != 1) { $class .= ' limited-scope'; } + try { + $class .= ' notice-source-'.common_to_alphanumeric($this->notice->source); + } catch (Exception $e) { + // either source or what we filtered out was a zero-length string + } $nli->out->elementStart('li', array('class' => $class, 'id' => 'notice-' . $id)); } diff --git a/lib/apiaction.php b/lib/apiaction.php index 6f2f43ab9c..723e589408 100644 --- a/lib/apiaction.php +++ b/lib/apiaction.php @@ -337,22 +337,22 @@ class ApiAction extends Action $twitter_status['in_reply_to_status_id'] = $in_reply_to; $source = null; + $source_link = null; $ns = $notice->getSource(); if ($ns instanceof Notice_source) { - if (!empty($ns->name) && !empty($ns->url)) { - $source = '' - . htmlspecialchars($ns->name) - . ''; - } else { - $source = $ns->code; + $source = $ns->code; + if (!empty($ns->url)) { + $source_link = $ns->url; + if (!empty($ns->name)) { + $source = $ns->name; + } } } $twitter_status['uri'] = $notice->getUri(); $twitter_status['source'] = $source; + $twitter_status['source_link'] = $source_link; $twitter_status['id'] = intval($notice->id); $replier_profile = null; diff --git a/lib/jsonsearchresultslist.php b/lib/jsonsearchresultslist.php index 0f764a72be..80dc33e323 100644 --- a/lib/jsonsearchresultslist.php +++ b/lib/jsonsearchresultslist.php @@ -184,7 +184,8 @@ class ResultItem var $id; var $from_user_id; var $iso_language_code; - var $source; + var $source = null; + var $source_link = null; var $profile_image_url; var $created_at; @@ -234,7 +235,8 @@ class ResultItem $this->iso_language_code = Profile_prefs::getConfigData($this->profile, 'site', 'language'); - $this->source = $this->getSourceLink($this->notice->source); + // set source and source_link + $this->setSourceData(); $this->profile_image_url = $this->profile->avatarUrl(AVATAR_STREAM_SIZE); @@ -242,34 +244,43 @@ class ResultItem } /** - * Show the source of the notice + * Set the notice's source data (api/app name and URL) * * Either the name (and link) of the API client that posted the notice, - * or one of other other channels. + * or one of other other channels. Uses the local notice object. * - * @param string $source the source of the Notice - * - * @return string a fully rendered source of the Notice + * @return void */ - function getSourceLink($source) + function setSourceData() { - // Gettext translations for the below source types are available. - $source_name = _($source); + $source = null; + $source_link = null; + switch ($source) { case 'web': case 'xmpp': case 'mail': case 'omb': case 'api': + // Gettext translations for the below source types are available. + $source = _($this->notice->source); break; + default: - $ns = Notice_source::getKV($source); + $ns = Notice_source::getKV($this->notice->source); if ($ns instanceof Notice_source) { - $source_name = '' . $ns->name . ''; + $source = $ns->code; + if (!empty($ns->url)) { + $source_link = $ns->url; + if (!empty($ns->name)) { + $source = $ns->name; + } + } } break; } - return $source_name; + $this->source = $source; + $this->source_link = $source_link; } } diff --git a/lib/noticelistitem.php b/lib/noticelistitem.php index a10169e36d..45f39c456d 100644 --- a/lib/noticelistitem.php +++ b/lib/noticelistitem.php @@ -229,8 +229,10 @@ class NoticeListItem extends Widget if ($this->notice->scope != 0 && $this->notice->scope != 1) { $class .= ' limited-scope'; } - if (!empty($this->notice->source)) { - $class .= ' notice-source-'.$this->notice->source; + try { + $class .= ' notice-source-'.common_to_alphanumeric($this->notice->source); + } catch (Exception $e) { + // either source or what we filtered out was a zero-length string } $id_prefix = (strlen($this->id_prefix) ? $this->id_prefix . '-' : ''); $this->out->elementStart($this->item_tag, array('class' => $class, diff --git a/lib/util.php b/lib/util.php index 985b3773df..9815916ad1 100644 --- a/lib/util.php +++ b/lib/util.php @@ -581,7 +581,20 @@ function common_canonical_email($email) return $email; } +<<<<<<< HEAD function common_purify($html, array $args=array()) +======= +function common_to_alphanumeric($str) +{ + $filtered = preg_replace('/[^A-Za-z0-9]\s*/', '', $str); + if (strlen($filtered) < 1) { + throw new Exception('Filtered string was zero-length.'); + } + return $filtered; +} + +function common_purify($html) +>>>>>>> upstream/master { require_once INSTALLDIR.'/extlib/HTMLPurifier/HTMLPurifier.auto.php';