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';