summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEvan Prodromou <evan@controlyourself.ca>2009-03-12 11:56:23 -0400
committerEvan Prodromou <evan@controlyourself.ca>2009-03-12 11:56:23 -0400
commitb3a0eea3b66e95becb6c4595ed71c7fe71ed6437 (patch)
tree76666150701f03205bfff77e7d034dfa724f8764 /lib
parent399669b1fb955d2d8c18098a7b551184d534a94c (diff)
parente185c0395a6cd250ccd7c8e385c54830be73f937 (diff)
Merge branch '0.7.x' into 0.8.x
Conflicts: classes/Notice.php lib/action.php lib/router.php lib/twitter.php
Diffstat (limited to 'lib')
-rw-r--r--lib/action.php18
-rw-r--r--lib/common.php9
-rw-r--r--lib/jabber.php4
-rw-r--r--lib/jsonsearchresultslist.php69
-rw-r--r--lib/mail.php7
-rw-r--r--lib/oauthstore.php9
-rw-r--r--lib/omb.php5
-rw-r--r--lib/openid.php2
-rw-r--r--lib/profilelist.php22
-rw-r--r--lib/router.php17
-rw-r--r--lib/searchaction.php4
-rw-r--r--lib/subgroupnav.php2
-rw-r--r--lib/topposterssection.php2
-rw-r--r--lib/twitter.php5
-rw-r--r--lib/twitterapi.php103
-rw-r--r--lib/util.php32
16 files changed, 120 insertions, 190 deletions
diff --git a/lib/action.php b/lib/action.php
index ee2305911..5020b92b0 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -156,17 +156,12 @@ class Action extends HTMLOutputter // lawsuit
{
if (Event::handle('StartShowStyles', array($this))) {
if (Event::handle('StartShowLaconicaStyles', array($this))) {
-
$this->element('link', array('rel' => 'stylesheet',
'type' => 'text/css',
'href' => theme_path('css/display.css', 'base') . '?version=' . LACONICA_VERSION,
'media' => 'screen, projection, tv'));
$this->element('link', array('rel' => 'stylesheet',
'type' => 'text/css',
- 'href' => theme_path('css/modal.css', 'base') . '?version=' . LACONICA_VERSION,
- 'media' => 'screen, projection, tv'));
- $this->element('link', array('rel' => 'stylesheet',
- 'type' => 'text/css',
'href' => theme_path('css/display.css', null) . '?version=' . LACONICA_VERSION,
'media' => 'screen, projection, tv'));
if (common_config('site', 'mobile')) {
@@ -215,11 +210,6 @@ class Action extends HTMLOutputter // lawsuit
$this->element('script', array('type' => 'text/javascript',
'src' => common_path('js/jquery.form.js')),
' ');
-
- $this->element('script', array('type' => 'text/javascript',
- 'src' => common_path('js/jquery.simplemodal-1.2.2.pack.js')),
- ' ');
-
Event::handle('EndShowJQueryScripts', array($this));
}
if (Event::handle('StartShowLaconicaScripts', array($this))) {
@@ -232,14 +222,6 @@ class Action extends HTMLOutputter // lawsuit
// Frame-busting code to avoid clickjacking attacks.
$this->element('script', array('type' => 'text/javascript'),
'if (window.top !== window.self) { window.top.location.href = window.self.location.href; }');
-
- $this->element('script', array('type' => 'text/javascript',
- 'src' => common_path('js/flowplayer-3.0.5.min.js')),
- ' ');
-
- $this->element('script', array('type' => 'text/javascript',
- 'src' => common_path('js/video.js')),
- ' ');
Event::handle('EndShowLaconicaScripts', array($this));
}
Event::handle('EndShowScripts', array($this));
diff --git a/lib/common.php b/lib/common.php
index 0355d01e3..44ed270d7 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -19,7 +19,7 @@
if (!defined('LACONICA')) { exit(1); }
-define('LACONICA_VERSION', '0.7.1');
+define('LACONICA_VERSION', '0.7.2');
define('AVATAR_PROFILE_SIZE', 96);
define('AVATAR_STREAM_SIZE', 48);
@@ -73,6 +73,7 @@ $config =
'theme' => 'default',
'path' => $_path,
'logfile' => null,
+ 'logo' => null,
'logdebug' => false,
'fancy' => false,
'locale_path' => INSTALLDIR.'/locale',
@@ -85,7 +86,8 @@ $config =
'broughtbyurl' => null,
'closed' => false,
'inviteonly' => false,
- 'private' => false),
+ 'private' => false,
+ 'dupelimit' => 60), # default for same person saying the same thing
'syslog' =>
array('appname' => 'laconica', # for syslog
'priority' => 'debug'), # XXX: currently ignored
@@ -139,7 +141,8 @@ $config =
'user' => false,
'group' => false),
'integration' =>
- array('source' => 'Laconica'), # source attribute for Twitter
+ array('source' => 'Laconica', # source attribute for Twitter
+ 'taguri' => $_server.',2009'), # base for tag URIs
'memcached' =>
array('enabled' => false,
'server' => 'localhost',
diff --git a/lib/jabber.php b/lib/jabber.php
index 3fbb3e1ab..3cd3b0d37 100644
--- a/lib/jabber.php
+++ b/lib/jabber.php
@@ -410,8 +410,8 @@ function jabber_broadcast_notice($notice)
"ON $UT.id = notice_inbox.user_id " .
'WHERE notice_inbox.notice_id = ' . $notice->id . ' ' .
'AND notice_inbox.source = 2 ' .
- 'AND user.jabber is not null ' .
- 'AND user.jabbernotify = 1 ');
+ "AND $UT.jabber is not null " .
+ "AND $UT.jabbernotify = 1 ");
while ($user->fetch()) {
if (!array_key_exists($user->id, $sent_to)) {
diff --git a/lib/jsonsearchresultslist.php b/lib/jsonsearchresultslist.php
index 171e1db4d..0cdcf0c51 100644
--- a/lib/jsonsearchresultslist.php
+++ b/lib/jsonsearchresultslist.php
@@ -22,7 +22,7 @@
* @category Search
* @package Laconica
* @author Zach Copley <zach@controlyourself.ca>
- * @copyright 2008-2009 Control Yourself, Inc.
+ * @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
@@ -62,14 +62,19 @@ class JSONSearchResultsList
/**
* constructor
*
- * @param Notice $notice stream of notices from DB_DataObject
+ * @param Notice $notice stream of notices from DB_DataObject
+ * @param string $query the original search query
+ * @param int $rpp the number of results to display per page
+ * @param int $page a page offset
+ * @param int $since_id only display notices newer than this
*/
function __construct($notice, $query, $rpp, $page, $since_id = 0)
{
$this->notice = $notice;
$this->query = urlencode($query);
- $this->results_per_page = $this->rpp = $rpp;
+ $this->results_per_page = $rpp;
+ $this->rpp = $rpp;
$this->page = $page;
$this->since_id = $since_id;
$this->results = array();
@@ -78,7 +83,7 @@ class JSONSearchResultsList
/**
* show the list of search results
*
- * @return int count of the search results listed.
+ * @return int $count of the search results listed.
*/
function show()
@@ -103,7 +108,7 @@ class JSONSearchResultsList
array_push($this->results, $item);
}
- $time_end = microtime(true);
+ $time_end = microtime(true);
$this->completed_in = $time_end - $time_start;
// Set other attrs
@@ -197,7 +202,7 @@ class ResultItem
function buildResult()
{
- $this->text = $this->notice->content;
+ $this->text = $this->notice->content;
$replier_profile = null;
if ($this->notice->reply_to) {
@@ -209,18 +214,21 @@ class ResultItem
$this->to_user_id = ($replier_profile) ?
intval($replier_profile->id) : null;
- $this->to_user = ($replier_profile) ?
+ $this->to_user = ($replier_profile) ?
$replier_profile->nickname : null;
- $this->from_user = $this->profile->nickname;
- $this->id = $this->notice->id;
+
+ $this->from_user = $this->profile->nickname;
+ $this->id = $this->notice->id;
$this->from_user_id = $this->profile->id;
$user = User::staticGet('id', $this->profile->id);
+
$this->iso_language_code = $this->user->language;
$this->source = $this->getSourceLink($this->notice->source);
$avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
+
$this->profile_image_url = ($avatar) ?
$avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE);
@@ -233,27 +241,30 @@ class ResultItem
* Either the name (and link) of the API client that posted the notice,
* or one of other other channels.
*
- * @return string the source of the Notice
+ * @param string $source the source of the Notice
+ *
+ * @return string a fully rendered source of the Notice
*/
- function getSourceLink($source)
- {
- $source_name = _($source);
- switch ($source) {
- case 'web':
- case 'xmpp':
- case 'mail':
- case 'omb':
- case 'api':
- break;
- default:
- $ns = Notice_source::staticGet($source);
- if ($ns) {
- $source_name = '<a href="' . $ns->url . '">' . $ns->name . '</a>';
- }
- break;
- }
- return $source_name;
- }
+ function getSourceLink($source)
+ {
+ $source_name = _($source);
+ switch ($source) {
+ case 'web':
+ case 'xmpp':
+ case 'mail':
+ case 'omb':
+ case 'api':
+ break;
+ default:
+ $ns = Notice_source::staticGet($source);
+ if ($ns) {
+ $source_name = '<a href="' . $ns->url . '">' . $ns->name . '</a>';
+ }
+ break;
+ }
+
+ return $source_name;
+ }
}
diff --git a/lib/mail.php b/lib/mail.php
index 9fa86de5c..dde7571eb 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -50,10 +50,9 @@ function mail_backend()
static $backend = null;
if (!$backend) {
- global $config;
- $backend = Mail::factory($config['mail']['backend'],
- ($config['mail']['params']) ?
- $config['mail']['params'] :
+ $backend = Mail::factory(common_config('mail', 'backend'),
+ (common_config('mail', 'params')) ?
+ common_config('mail', 'params') :
array());
if (PEAR::isError($backend)) {
common_server_error($backend->getMessage(), 500);
diff --git a/lib/oauthstore.php b/lib/oauthstore.php
index 9af05ea2d..183164e17 100644
--- a/lib/oauthstore.php
+++ b/lib/oauthstore.php
@@ -54,16 +54,21 @@ class LaconicaOAuthDataStore extends OAuthDataStore
}
}
+ // http://oauth.net/core/1.0/#nonce
+ // "The Consumer SHALL then generate a Nonce value that is unique for
+ // all requests with that timestamp."
+
+ // XXX: It's not clear why the token is here
+
function lookup_nonce($consumer, $token, $nonce, $timestamp)
{
$n = new Nonce();
$n->consumer_key = $consumer->key;
- $n->tok = $token->key;
+ $n->ts = $timestamp;
$n->nonce = $nonce;
if ($n->find(true)) {
return true;
} else {
- $n->ts = $timestamp;
$n->created = DB_DataObject_Cast::dateTime();
$n->insert();
return false;
diff --git a/lib/omb.php b/lib/omb.php
index befcf4666..e8e1acc41 100644
--- a/lib/omb.php
+++ b/lib/omb.php
@@ -251,7 +251,6 @@ function omb_broadcast_profile($profile)
function omb_update_profile($profile, $remote_profile, $subscription)
{
- global $config; # for license URL
$user = User::staticGet($profile->id);
$con = omb_oauth_consumer();
$token = new OAuthToken($subscription->token, $subscription->secret);
@@ -295,7 +294,7 @@ function omb_update_profile($profile, $remote_profile, $subscription)
common_debug('Got HTTP result "'.print_r($result,true).'"', __FILE__);
- if (empty($result) || $result) {
+ if (empty($result) || !$result) {
common_debug("Unable to contact " . $req->get_normalized_http_url());
} else if ($result->status == 403) { # not authorized, don't send again
common_debug('403 result, deleting subscription', __FILE__);
@@ -306,7 +305,7 @@ function omb_update_profile($profile, $remote_profile, $subscription)
return false;
} else { # success!
parse_str($result->body, $return);
- if ($return['omb_version'] == OMB_VERSION_01) {
+ if (isset($return['omb_version']) && $return['omb_version'] === OMB_VERSION_01) {
return true;
} else {
return false;
diff --git a/lib/openid.php b/lib/openid.php
index 5c3d460da..3aa488b6d 100644
--- a/lib/openid.php
+++ b/lib/openid.php
@@ -160,7 +160,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
$auth_request->addExtension($sreg_request);
}
- $trust_root = common_local_url('public');
+ $trust_root = common_path('');
$process_url = common_local_url($returnto);
if ($auth_request->shouldSendRedirect()) {
diff --git a/lib/profilelist.php b/lib/profilelist.php
index c2040fbc2..766189ab4 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -89,6 +89,7 @@ class ProfileList extends Widget
'id' => 'profile-' . $this->profile->id));
$user = common_current_user();
+ $is_own = !is_null($user) && isset($this->user) && ($user->id === $this->user->id);
$this->out->elementStart('div', 'entity_profile vcard');
@@ -102,13 +103,13 @@ class ProfileList extends Widget
'alt' =>
($this->profile->fullname) ? $this->profile->fullname :
$this->profile->nickname));
- $hasFN = ($this->profile->fullname) ? 'nickname' : 'fn nickname';
+ $hasFN = ($this->profile->fullname !== '') ? 'nickname' : 'fn nickname';
$this->out->elementStart('span', $hasFN);
$this->out->raw($this->highlight($this->profile->nickname));
$this->out->elementEnd('span');
$this->out->elementEnd('a');
- if ($this->profile->fullname) {
+ if ($this->profile->fullname !== '') {
$this->out->elementStart('dl', 'entity_fn');
$this->out->element('dt', null, 'Full name');
$this->out->elementStart('dd');
@@ -118,7 +119,7 @@ class ProfileList extends Widget
$this->out->elementEnd('dd');
$this->out->elementEnd('dl');
}
- if ($this->profile->location) {
+ if ($this->profile->location !== '') {
$this->out->elementStart('dl', 'entity_location');
$this->out->element('dt', null, _('Location'));
$this->out->elementStart('dd', 'label');
@@ -126,7 +127,7 @@ class ProfileList extends Widget
$this->out->elementEnd('dd');
$this->out->elementEnd('dl');
}
- if ($this->profile->homepage) {
+ if ($this->profile->homepage !== '') {
$this->out->elementStart('dl', 'entity_url');
$this->out->element('dt', null, _('URL'));
$this->out->elementStart('dd');
@@ -137,7 +138,7 @@ class ProfileList extends Widget
$this->out->elementEnd('dd');
$this->out->elementEnd('dl');
}
- if ($this->profile->bio) {
+ if ($this->profile->bio !== '') {
$this->out->elementStart('dl', 'entity_note');
$this->out->element('dt', null, _('Note'));
$this->out->elementStart('dd', 'note');
@@ -154,7 +155,7 @@ class ProfileList extends Widget
$this->out->elementStart('dl', 'entity_tags');
$this->out->elementStart('dt');
- if ($user->id == $this->owner->id) {
+ if ($is_own) {
$this->out->element('a', array('href' => common_local_url('tagother',
array('id' => $this->profile->id))),
_('Tags'));
@@ -183,7 +184,7 @@ class ProfileList extends Widget
$this->out->elementEnd('dl');
}
- if ($user && $user->id == $this->owner->id) {
+ if ($is_own) {
$this->showOwnerControls($this->profile);
}
@@ -193,11 +194,11 @@ class ProfileList extends Widget
$this->out->elementStart('ul');
- if ($user && $user->id != $this->profile->id) {
+ if (!$is_own) {
# XXX: special-case for user looking at own
# subscriptions page
$this->out->elementStart('li', 'entity_subscribe');
- if ($user->isSubscribed($this->profile)) {
+ if (!is_null($user) && $user->isSubscribed($this->profile)) {
$usf = new UnsubscribeForm($this->out, $this->profile);
$usf->show();
} else {
@@ -206,9 +207,6 @@ class ProfileList extends Widget
}
$this->out->elementEnd('li');
$this->out->elementStart('li', 'entity_block');
- if ($user && $user->id == $this->owner->id) {
- $this->showBlockForm();
- }
$this->out->elementEnd('li');
}
diff --git a/lib/router.php b/lib/router.php
index aab286721..d0b56e88b 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -49,6 +49,9 @@ class Router
{
var $m = null;
static $inst = null;
+ static $bare = array('requesttoken', 'accesstoken', 'userauthorization',
+ 'postnotice', 'updateprofile', 'finishremotesubscribe',
+ 'finishopenidlogin', 'finishaddopenid');
static function get()
{
@@ -98,7 +101,7 @@ class Router
$main = array('login', 'logout', 'register', 'subscribe',
'unsubscribe', 'confirmaddress', 'recoverpassword',
'invite', 'favor', 'disfavor', 'sup',
- 'block');
+ 'block', 'subedit');
foreach ($main as $a) {
$m->connect('main/'.$a, array('action' => $a));
@@ -118,8 +121,7 @@ class Router
$m->connect('main/remote', array('action' => 'remotesubscribe'));
$m->connect('main/remote?nickname=:nickname', array('action' => 'remotesubscribe'), array('nickname' => '[A-Za-z0-9_-]+'));
- foreach (array('requesttoken', 'accesstoken', 'userauthorization',
- 'postnotice', 'updateprofile', 'finishremotesubscribe') as $action) {
+ foreach (Router::$bare as $action) {
$m->connect('index.php?action=' . $action, array('action' => $action));
}
@@ -230,7 +232,7 @@ class Router
$m->connect('api/statuses/:method/:argument',
array('action' => 'api',
'apiaction' => 'statuses'),
- array('method' => '(user_timeline|friends_timeline|show|destroy|friends|followers)'));
+ array('method' => '(user_timeline|friends_timeline|replies|show|destroy|friends|followers)'));
// users
@@ -261,7 +263,7 @@ class Router
}
foreach (array('xml', 'json', 'rss', 'atom') as $e) {
- $m->connect('api/direct_message/sent.'.$e,
+ $m->connect('api/direct_messages/sent.'.$e,
array('action' => 'api',
'apiaction' => 'direct_messages',
'method' => 'sent.'.$e));
@@ -281,7 +283,7 @@ class Router
$m->connect('api/friendships/:method',
array('action' => 'api',
'apiaction' => 'friendships'),
- array('method' => 'exists(\.(xml|json|rss|atom))'));
+ array('method' => 'exists(\.(xml|json))'));
// Social graph
@@ -357,7 +359,6 @@ class Router
array('action' => 'api',
'apiaction' => 'laconica'));
-
// search
$m->connect('api/search.atom', array('action' => 'twitapisearchatom'));
$m->connect('api/search.json', array('action' => 'twitapisearchjson'));
@@ -365,7 +366,7 @@ class Router
// user stuff
- foreach (array('subscriptions', 'subscribers',
+ foreach (array('subscriptions', 'subscribers',
'nudge', 'xrds', 'all', 'foaf',
'replies', 'inbox', 'outbox', 'microsummary') as $a) {
$m->connect(':nickname/'.$a,
diff --git a/lib/searchaction.php b/lib/searchaction.php
index df6876445..c762db16f 100644
--- a/lib/searchaction.php
+++ b/lib/searchaction.php
@@ -110,8 +110,6 @@ class SearchAction extends Action
function showForm($error=null)
{
- global $config;
-
$q = $this->trimmed('q');
$page = $this->trimmed('page', 1);
$this->elementStart('form', array('method' => 'get',
@@ -122,7 +120,7 @@ class SearchAction extends Action
$this->element('legend', null, _('Search site'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
- if (!isset($config['site']['fancy']) || !$config['site']['fancy']) {
+ if (!common_config('site', 'fancy')) {
$this->hidden('action', $this->trimmed('action'));
}
$this->input('q', 'Keyword(s)', $q);
diff --git a/lib/subgroupnav.php b/lib/subgroupnav.php
index 5fd8a72a2..31c3ea0b5 100644
--- a/lib/subgroupnav.php
+++ b/lib/subgroupnav.php
@@ -98,7 +98,7 @@ class SubGroupNav extends Widget
$this->user->nickname),
$action == 'usergroups',
'nav_usergroups');
- if ($this->user->id == $cur->id) {
+ if (!is_null($cur) && $this->user->id === $cur->id) {
$this->out->menuItem(common_local_url('invite'),
_('Invite'),
sprintf(_('Invite friends and colleagues to join you on %s'),
diff --git a/lib/topposterssection.php b/lib/topposterssection.php
index 4bd59ac79..1a2ce0014 100644
--- a/lib/topposterssection.php
+++ b/lib/topposterssection.php
@@ -51,7 +51,7 @@ class TopPostersSection extends ProfileSection
$qry = 'SELECT profile.*, count(*) as value ' .
'FROM profile JOIN notice ON profile.id = notice.profile_id ' .
(common_config('public', 'localonly') ? 'WHERE is_local = 1 ' : '') .
- 'GROUP BY profile.id ' .
+ 'GROUP BY profile.id,nickname,fullname,profileurl,homepage,bio,location,profile.created,profile.modified,textsearch ' .
'ORDER BY value DESC ';
$limit = PROFILES_PER_SECTION;
diff --git a/lib/twitter.php b/lib/twitter.php
index 8a54afb9c..db2092210 100644
--- a/lib/twitter.php
+++ b/lib/twitter.php
@@ -224,7 +224,6 @@ function is_twitter_bound($notice, $flink) {
function broadcast_twitter($notice)
{
- global $config;
$success = true;
$flink = Foreign_link::getByUserID($notice->profile_id,
@@ -232,7 +231,7 @@ function broadcast_twitter($notice)
// XXX: Not sure WHERE to check whether a notice should go to
// Twitter. Should we even put in the queue if it shouldn't? --Zach
- if (is_twitter_bound($notice, $flink)) {
+ if (!is_null($flink) && is_twitter_bound($notice, $flink)) {
$fuser = $flink->getForeignUser();
$twitter_user = $fuser->nickname;
@@ -248,7 +247,7 @@ function broadcast_twitter($notice)
CURLOPT_POSTFIELDS =>
array(
'status' => $statustxt,
- 'source' => $config['integration']['source']
+ 'source' => common_config('integration', 'source')
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FAILONERROR => true,
diff --git a/lib/twitterapi.php b/lib/twitterapi.php
index 1de169a0b..e7239acd5 100644
--- a/lib/twitterapi.php
+++ b/lib/twitterapi.php
@@ -127,8 +127,6 @@ class TwitterapiAction extends Action
{
$profile = $notice->getProfile();
-
- $server = common_config('site', 'server');
$entry = array();
# We trim() to avoid extraneous whitespace in the output
@@ -137,8 +135,12 @@ class TwitterapiAction extends Action
$entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content));
$entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
$entry['published'] = common_date_iso8601($notice->created);
- $entry['id'] = "tag:$server,2008:$entry[link]";
+
+ $taguribase = common_config('integration', 'taguri');
+ $entry['id'] = "tag:$taguribase:$entry[link]";
+
$entry['updated'] = $entry['published'];
+ $entry['author'] = $profile->getBestName();
# RSS Item specific
$entry['description'] = $entry['content'];
@@ -151,7 +153,6 @@ class TwitterapiAction extends Action
function twitter_rss_dmsg_array($message)
{
- $server = common_config('site', 'server');
$entry = array();
$entry['title'] = sprintf('Message from %s to %s',
@@ -160,8 +161,12 @@ class TwitterapiAction extends Action
$entry['content'] = common_xml_safe_str(trim($message->content));
$entry['link'] = common_local_url('showmessage', array('message' => $message->id));
$entry['published'] = common_date_iso8601($message->created);
- $entry['id'] = "tag:$server,2008:$entry[link]";
+
+ $taguribase = common_config('integration', 'taguri');
+
+ $entry['id'] = "tag:$taguribase,:$entry[link]";
$entry['updated'] = $entry['published'];
+ $entry['author'] = $message->getFrom()->getBestName();
# RSS Item specific
$entry['description'] = $entry['content'];
@@ -242,6 +247,9 @@ class TwitterapiAction extends Action
$this->element('published', null, $entry['published']);
$this->element('updated', null, $entry['updated']);
$this->element('link', array('href' => $entry['link'], 'rel' => 'alternate', 'type' => 'text/html'), null);
+ $this->elementStart('author');
+ $this->element('name', null, $entry['author']);
+ $this->elementEnd('author');
$this->elementEnd('entry');
}
@@ -358,7 +366,7 @@ class TwitterapiAction extends Action
$this->end_twitter_rss();
}
- function show_atom_timeline($notice, $title, $id, $link, $subtitle=null, $suplink=null)
+ function show_atom_timeline($notice, $title, $id, $link, $subtitle=null, $suplink=null, $selfuri=null)
{
$this->init_document('atom');
@@ -366,12 +374,20 @@ class TwitterapiAction extends Action
$this->element('title', null, $title);
$this->element('id', null, $id);
$this->element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), null);
+
if (!is_null($suplink)) {
# For FriendFeed's SUP protocol
$this->element('link', array('rel' => 'http://api.friendfeed.com/2008/03#sup',
'href' => $suplink,
'type' => 'application/json'));
}
+
+ if (!is_null($selfuri)) {
+ $this->element('link', array('href' => $selfuri,
+ 'rel' => 'self', 'type' => 'application/atom+xml'), null);
+ }
+
+ $this->element('updated', null, common_date_iso8601('now'));
$this->element('subtitle', null, $subtitle);
if (is_array($notice)) {
@@ -634,79 +650,4 @@ class TwitterapiAction extends Action
return $source_name;
}
- function show_extended_profile($user, $apidata)
- {
-
- $this->auth_user = $apidata['user'];
-
- $profile = $user->getProfile();
-
- if (!$profile) {
- common_server_error(_('User has no profile.'));
- return;
- }
-
- $twitter_user = $this->twitter_user_array($profile, true);
-
- // Add in extended user fields offered up by this method
- $twitter_user['created_at'] = $this->date_twitter($profile->created);
-
- $subbed = DB_DataObject::factory('subscription');
- $subbed->subscriber = $profile->id;
- $subbed_count = (int) $subbed->count() - 1;
-
- $notices = DB_DataObject::factory('notice');
- $notices->profile_id = $profile->id;
- $notice_count = (int) $notices->count();
-
- $twitter_user['friends_count'] = (is_int($subbed_count)) ? $subbed_count : 0;
- $twitter_user['statuses_count'] = (is_int($notice_count)) ? $notice_count : 0;
-
- // Other fields Twitter sends...
- $twitter_user['profile_background_color'] = '';
- $twitter_user['profile_text_color'] = '';
- $twitter_user['profile_link_color'] = '';
- $twitter_user['profile_sidebar_fill_color'] = '';
-
- $faves = DB_DataObject::factory('fave');
- $faves->user_id = $user->id;
- $faves_count = (int) $faves->count();
- $twitter_user['favourites_count'] = $faves_count;
-
- $timezone = 'UTC';
-
- if ($user->timezone) {
- $timezone = $user->timezone;
- }
-
- $t = new DateTime;
- $t->setTimezone(new DateTimeZone($timezone));
- $twitter_user['utc_offset'] = $t->format('Z');
- $twitter_user['time_zone'] = $timezone;
-
- $following = 'false';
-
- if (isset($this->auth_user)) {
- if ($this->auth_user->isSubscribed($profile)) {
- $following = 'true';
- }
-
- // Not implemented yet
- $twitter_user['notifications'] = 'false';
- }
-
- $twitter_user['following'] = $following;
-
- if ($apidata['content-type'] == 'xml') {
- $this->init_document('xml');
- $this->show_twitter_xml_user($twitter_user);
- $this->end_document('xml');
- } elseif ($apidata['content-type'] == 'json') {
- $this->init_document('json');
- $this->show_json_objects($twitter_user);
- $this->end_document('json');
- }
-
- }
-
}
diff --git a/lib/util.php b/lib/util.php
index 9637dc506..a43666fa5 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -72,8 +72,7 @@ function common_timezone()
}
}
- global $config;
- return $config['site']['timezone'];
+ return common_config('site', 'timezone');
}
function common_language()
@@ -467,7 +466,7 @@ function common_replace_urls_callback($text, $callback) {
$url = (mb_strpos($orig_url, htmlspecialchars($url)) === FALSE) ? $url:htmlspecialchars($url);
// Call user specified func
- $modified_url = $callback($url);
+ $modified_url = call_user_func($callback, $url);
// Replace it!
$start = mb_strpos($text, $url, $offset);
@@ -481,18 +480,12 @@ function common_replace_urls_callback($text, $callback) {
function common_linkify($url) {
// It comes in special'd, so we unspecial it before passing to the stringifying
// functions
- $ext = pathinfo($url, PATHINFO_EXTENSION);
$url = htmlspecialchars_decode($url);
- $video_ext = array('mp4', 'flv', 'avi', 'mpg', 'mp3', 'ogg');
$display = $url;
$url = (!preg_match('#^([a-z]+://|(mailto|aim|tel):)#i', $url)) ? 'http://'.$url : $url;
$attrs = array('href' => $url, 'rel' => 'external');
- if (in_array($ext, $video_ext)) {
- $attrs['class'] = 'media';
- }
-
if ($longurl = common_longurl($url)) {
$attrs['title'] = $longurl;
}
@@ -688,7 +681,7 @@ function common_relative_profile($sender, $nickname, $dt=null)
$recipient = new Profile();
// XXX: use a join instead of a subquery
$recipient->whereAdd('EXISTS (SELECT subscribed from subscription where subscriber = '.$sender->id.' and subscribed = id)', 'AND');
- $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND');
+ $recipient->whereAdd("nickname = '" . trim($nickname) . "'", 'AND');
if ($recipient->find(true)) {
// XXX: should probably differentiate between profiles with
// the same name by date of most recent update
@@ -698,7 +691,7 @@ function common_relative_profile($sender, $nickname, $dt=null)
$recipient = new Profile();
// XXX: use a join instead of a subquery
$recipient->whereAdd('EXISTS (SELECT subscriber from subscription where subscribed = '.$sender->id.' and subscriber = id)', 'AND');
- $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND');
+ $recipient->whereAdd("nickname = '" . trim($nickname) . "'", 'AND');
if ($recipient->find(true)) {
// XXX: should probably differentiate between profiles with
// the same name by date of most recent update
@@ -722,21 +715,23 @@ function common_local_url($action, $args=null, $params=null, $fragment=null)
{
$r = Router::get();
$path = $r->build($action, $args, $params, $fragment);
- if ($path) {
- }
+
if (common_config('site','fancy')) {
$url = common_path(mb_substr($path, 1));
} else {
- $url = common_path('index.php'.$path);
+ if (mb_strpos($path, '/index.php') === 0) {
+ $url = common_path(mb_substr($path, 1));
+ } else {
+ $url = common_path('index.php'.$path);
+ }
}
return $url;
}
function common_path($relative)
{
- global $config;
- $pathpart = ($config['site']['path']) ? $config['site']['path']."/" : '';
- return "http://".$config['site']['server'].'/'.$pathpart.$relative;
+ $pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
+ return "http://".common_config('site', 'server').'/'.$pathpart.$relative;
}
function common_date_string($dt)
@@ -989,8 +984,7 @@ function common_ensure_syslog()
{
static $initialized = false;
if (!$initialized) {
- global $config;
- openlog($config['syslog']['appname'], 0, LOG_USER);
+ openlog(common_config('syslog', 'appname'), 0, LOG_USER);
$initialized = true;
}
}