From eb2f9c98ac115ce67e9a740b200c832153ffa05c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 23 Dec 2008 14:21:29 -0500 Subject: replace NULL with null Another global search-and-replace update. Here, I've replaced the PHP keyword 'NULL' with its lowercase version. This is another PEAR code standards change. darcs-hash:20081223192129-84dde-4a0182e0ec16a01ad88745ad3e08f7cb501aee0b.gz --- _darcs/tentative_pristine | 29165 ++------------------------------------------ 1 file changed, 1223 insertions(+), 27942 deletions(-) (limited to '_darcs/tentative_pristine') diff --git a/_darcs/tentative_pristine b/_darcs/tentative_pristine index ffadf4b71..62c02a301 100644 --- a/_darcs/tentative_pristine +++ b/_darcs/tentative_pristine @@ -1,28057 +1,1338 @@ -hunk ./actions/accesstoken.php 25 -- function handle($args) { -- parent::handle($args); -- try { -- common_debug('getting request from env variables', __FILE__); -- common_remove_magic_from_request(); -- $req = OAuthRequest::from_request(); -- common_debug('getting a server', __FILE__); -- $server = omb_oauth_server(); -- common_debug('fetching the access token', __FILE__); -- $token = $server->fetch_access_token($req); -- common_debug('got this token: "'.print_r($token,TRUE).'"', __FILE__); -- common_debug('printing the access token', __FILE__); -- print $token; -- } catch (OAuthException $e) { -- common_server_error($e->getMessage()); -- } -- } -+ function handle($args) { -+ parent::handle($args); -+ try { -+ common_debug('getting request from env variables', __FILE__); -+ common_remove_magic_from_request(); -+ $req = OAuthRequest::from_request(); -+ common_debug('getting a server', __FILE__); -+ $server = omb_oauth_server(); -+ common_debug('fetching the access token', __FILE__); -+ $token = $server->fetch_access_token($req); -+ common_debug('got this token: "'.print_r($token,TRUE).'"', __FILE__); -+ common_debug('printing the access token', __FILE__); -+ print $token; -+ } catch (OAuthException $e) { -+ common_server_error($e->getMessage()); -+ } -+ } -hunk ./actions/all.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/all.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/all.php 30 -- $nickname = common_canonical_nickname($this->arg('nickname')); -- $user = User::staticGet('nickname', $nickname); -+ $nickname = common_canonical_nickname($this->arg('nickname')); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/all.php 33 -- if (!$user) { -- $this->client_error(_('No such user.')); -- return; -- } -+ if (!$user) { -+ $this->client_error(_('No such user.')); -+ return; -+ } -hunk ./actions/all.php 38 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/all.php 40 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/all.php 45 -- # Looks like we're good; show the header -+ # Looks like we're good; show the header -hunk ./actions/all.php 47 -- common_show_header(sprintf(_("%s and friends"), $profile->nickname), -- array($this, 'show_header'), $user, -- array($this, 'show_top')); -+ common_show_header(sprintf(_("%s and friends"), $profile->nickname), -+ array($this, 'show_header'), $user, -+ array($this, 'show_top')); -hunk ./actions/all.php 51 -- $this->show_notices($user); -+ $this->show_notices($user); -hunk ./actions/all.php 53 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/all.php 56 -- function show_header($user) { -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('allrss', array('nickname' => -- $user->nickname)), -- 'type' => 'application/rss+xml', -- 'title' => sprintf(_('Feed for friends of %s'), $user->nickname))); -- } -+ function show_header($user) { -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('allrss', array('nickname' => -+ $user->nickname)), -+ 'type' => 'application/rss+xml', -+ 'title' => sprintf(_('Feed for friends of %s'), $user->nickname))); -+ } -hunk ./actions/all.php 64 -- function show_top($user) { -- $cur = common_current_user(); -+ function show_top($user) { -+ $cur = common_current_user(); -hunk ./actions/all.php 67 -- if ($cur && $cur->id == $user->id) { -- common_notice_form('all'); -- } -+ if ($cur && $cur->id == $user->id) { -+ common_notice_form('all'); -+ } -hunk ./actions/all.php 71 -- $this->views_menu(); -+ $this->views_menu(); -hunk ./actions/all.php 73 -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('allrss', array('nickname' => $user->nickname)), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'allrss'))); -- } -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('allrss', array('nickname' => $user->nickname)), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'allrss'))); -+ } -hunk ./actions/all.php 79 -- function show_notices($user) { -+ function show_notices($user) { -hunk ./actions/all.php 81 -- $page = $this->trimmed('page'); -- if (!$page) { -- $page = 1; -- } -+ $page = $this->trimmed('page'); -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/all.php 86 -- $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -+ $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -hunk ./actions/all.php 90 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'all', array('nickname' => $user->nickname)); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'all', array('nickname' => $user->nickname)); -+ } hunk ./actions/allrss.php 28 -- var $user = NULL; -+ var $user = NULL; -hunk ./actions/allrss.php 30 -- function init() { -- $nickname = $this->trimmed('nickname'); -- $this->user = User::staticGet('nickname', $nickname); -+ function init() { -+ $nickname = $this->trimmed('nickname'); -+ $this->user = User::staticGet('nickname', $nickname); -hunk ./actions/allrss.php 34 -- if (!$this->user) { -- common_user_error(_('No such user.')); -- return false; -- } else { -- return true; -- } -- } -+ if (!$this->user) { -+ common_user_error(_('No such user.')); -+ return false; -+ } else { -+ return true; -+ } -+ } -hunk ./actions/allrss.php 42 -- function get_notices($limit=0) { -+ function get_notices($limit=0) { -hunk ./actions/allrss.php 44 -- $user = $this->user; -- -- $notice = $user->noticesWithFriends(0, $limit); -- -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ $user = $this->user; -+ -+ $notice = $user->noticesWithFriends(0, $limit); -+ -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/allrss.php 52 -- return $notices; -- } -+ return $notices; -+ } -hunk ./actions/allrss.php 55 -- function get_channel() { -- $user = $this->user; -- $c = array('url' => common_local_url('allrss', -- array('nickname' => -- $user->nickname)), -- 'title' => sprintf(_('%s and friends'), $user->nickname), -- 'link' => common_local_url('all', -- array('nickname' => -- $user->nickname)), -- 'description' => sprintf(_('Feed for friends of %s'), $user->nickname)); -- return $c; -- } -+ function get_channel() { -+ $user = $this->user; -+ $c = array('url' => common_local_url('allrss', -+ array('nickname' => -+ $user->nickname)), -+ 'title' => sprintf(_('%s and friends'), $user->nickname), -+ 'link' => common_local_url('all', -+ array('nickname' => -+ $user->nickname)), -+ 'description' => sprintf(_('Feed for friends of %s'), $user->nickname)); -+ return $c; -+ } -hunk ./actions/allrss.php 68 -- function get_image() { -- $user = $this->user; -- $profile = $user->getProfile(); -- if (!$profile) { -- return NULL; -- } -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -- return ($avatar) ? $avatar->url : NULL; -- } -+ function get_image() { -+ $user = $this->user; -+ $profile = $user->getProfile(); -+ if (!$profile) { -+ return NULL; -+ } -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ return ($avatar) ? $avatar->url : NULL; -+ } -hunk ./actions/api.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/api.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/api.php 24 -- var $user; -- var $content_type; -- var $api_arg; -- var $api_method; -- var $api_action; -+ var $user; -+ var $content_type; -+ var $api_arg; -+ var $api_method; -+ var $api_action; -hunk ./actions/api.php 30 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/api.php 33 -- $this->api_action = $this->arg('apiaction'); -- $method = $this->arg('method'); -- $argument = $this->arg('argument'); -+ $this->api_action = $this->arg('apiaction'); -+ $method = $this->arg('method'); -+ $argument = $this->arg('argument'); -hunk ./actions/api.php 37 -- if (isset($argument)) { -- $cmdext = explode('.', $argument); -- $this->api_arg = $cmdext[0]; -- $this->api_method = $method; -- $this->content_type = strtolower($cmdext[1]); -- } else { -+ if (isset($argument)) { -+ $cmdext = explode('.', $argument); -+ $this->api_arg = $cmdext[0]; -+ $this->api_method = $method; -+ $this->content_type = strtolower($cmdext[1]); -+ } else { -hunk ./actions/api.php 44 -- # Requested format / content-type will be an extension on the method -- $cmdext = explode('.', $method); -- $this->api_method = $cmdext[0]; -- $this->content_type = strtolower($cmdext[1]); -- } -+ # Requested format / content-type will be an extension on the method -+ $cmdext = explode('.', $method); -+ $this->api_method = $cmdext[0]; -+ $this->content_type = strtolower($cmdext[1]); -+ } -hunk ./actions/api.php 50 -- if ($this->requires_auth()) { -- if (!isset($_SERVER['PHP_AUTH_USER'])) { -+ if ($this->requires_auth()) { -+ if (!isset($_SERVER['PHP_AUTH_USER'])) { -hunk ./actions/api.php 53 -- # This header makes basic auth go -- header('WWW-Authenticate: Basic realm="Laconica API"'); -+ # This header makes basic auth go -+ header('WWW-Authenticate: Basic realm="Laconica API"'); -hunk ./actions/api.php 56 -- # If the user hits cancel -- bam! -- $this->show_basic_auth_error(); -- } else { -- $nickname = $_SERVER['PHP_AUTH_USER']; -- $password = $_SERVER['PHP_AUTH_PW']; -- $user = common_check_user($nickname, $password); -+ # If the user hits cancel -- bam! -+ $this->show_basic_auth_error(); -+ } else { -+ $nickname = $_SERVER['PHP_AUTH_USER']; -+ $password = $_SERVER['PHP_AUTH_PW']; -+ $user = common_check_user($nickname, $password); -hunk ./actions/api.php 63 -- if ($user) { -- $this->user = $user; -- $this->process_command(); -- } else { -- # basic authentication failed -- $this->show_basic_auth_error(); -- } -- } -- } else { -+ if ($user) { -+ $this->user = $user; -+ $this->process_command(); -+ } else { -+ # basic authentication failed -+ $this->show_basic_auth_error(); -+ } -+ } -+ } else { -hunk ./actions/api.php 73 -- # Look for the user in the session -- if (common_logged_in()) { -- $this->user = common_current_user(); -- } -+ # Look for the user in the session -+ if (common_logged_in()) { -+ $this->user = common_current_user(); -+ } -hunk ./actions/api.php 78 -- $this->process_command(); -- } -- } -+ $this->process_command(); -+ } -+ } -hunk ./actions/api.php 82 -- function process_command() { -- $action = "twitapi$this->api_action"; -- $actionfile = INSTALLDIR."/actions/$action.php"; -+ function process_command() { -+ $action = "twitapi$this->api_action"; -+ $actionfile = INSTALLDIR."/actions/$action.php"; -hunk ./actions/api.php 86 -- if (file_exists($actionfile)) { -- require_once($actionfile); -- $action_class = ucfirst($action)."Action"; -- $action_obj = new $action_class(); -+ if (file_exists($actionfile)) { -+ require_once($actionfile); -+ $action_class = ucfirst($action)."Action"; -+ $action_obj = new $action_class(); -hunk ./actions/api.php 95 -- if (method_exists($action_obj, $this->api_method)) { -- $apidata = array( 'content-type' => $this->content_type, -- 'api_method' => $this->api_method, -- 'api_arg' => $this->api_arg, -- 'user' => $this->user); -+ if (method_exists($action_obj, $this->api_method)) { -+ $apidata = array( 'content-type' => $this->content_type, -+ 'api_method' => $this->api_method, -+ 'api_arg' => $this->api_arg, -+ 'user' => $this->user); -hunk ./actions/api.php 101 -- call_user_func(array($action_obj, $this->api_method), $_REQUEST, $apidata); -- } else { -- common_user_error("API method not found!", $code=404); -- } -- } else { -- common_user_error("API method not found!", $code=404); -- } -- } -+ call_user_func(array($action_obj, $this->api_method), $_REQUEST, $apidata); -+ } else { -+ common_user_error("API method not found!", $code=404); -+ } -+ } else { -+ common_user_error("API method not found!", $code=404); -+ } -+ } -hunk ./actions/api.php 110 -- # Whitelist of API methods that don't need authentication -- function requires_auth() { -- static $noauth = array( 'statuses/public_timeline', -- 'statuses/show', -- 'users/show', -- 'help/test', -- 'help/downtime_schedule'); -+ # Whitelist of API methods that don't need authentication -+ function requires_auth() { -+ static $noauth = array( 'statuses/public_timeline', -+ 'statuses/show', -+ 'users/show', -+ 'help/test', -+ 'help/downtime_schedule'); -hunk ./actions/api.php 118 -- static $bareauth = array('statuses/user_timeline', -- 'statuses/friends', -- 'statuses/followers', -- 'favorites/favorites'); -+ static $bareauth = array('statuses/user_timeline', -+ 'statuses/friends', -+ 'statuses/followers', -+ 'favorites/favorites'); -hunk ./actions/api.php 129 -- $fullname = "$this->api_action/$this->api_method"; -+ $fullname = "$this->api_action/$this->api_method"; -hunk ./actions/api.php 131 -- if (in_array($fullname, $bareauth)) { -- # bareauth: only needs auth if without an argument -- if ($this->api_arg) { -- return false; -- } else { -- return true; -- } -- } else if (in_array($fullname, $noauth)) { -- # noauth: never needs auth -- return false; -- } else { -- # everybody else needs auth -- return true; -- } -- } -+ if (in_array($fullname, $bareauth)) { -+ # bareauth: only needs auth if without an argument -+ if ($this->api_arg) { -+ return false; -+ } else { -+ return true; -+ } -+ } else if (in_array($fullname, $noauth)) { -+ # noauth: never needs auth -+ return false; -+ } else { -+ # everybody else needs auth -+ return true; -+ } -+ } -hunk ./actions/api.php 147 -- function show_basic_auth_error() { -- header('HTTP/1.1 401 Unauthorized'); -- $msg = 'Could not authenticate you.'; -+ function show_basic_auth_error() { -+ header('HTTP/1.1 401 Unauthorized'); -+ $msg = 'Could not authenticate you.'; -hunk ./actions/api.php 151 -- if ($this->content_type == 'xml') { -- header('Content-Type: application/xml; charset=utf-8'); -- common_start_xml(); -- common_element_start('hash'); -- common_element('error', NULL, $msg); -- common_element('request', NULL, $_SERVER['REQUEST_URI']); -- common_element_end('hash'); -- common_end_xml(); -- } else if ($this->content_type == 'json') { -- header('Content-Type: application/json; charset=utf-8'); -- $error_array = array('error' => $msg, 'request' => $_SERVER['REQUEST_URI']); -- print(json_encode($error_array)); -- } else { -- header('Content-type: text/plain'); -- print "$msg\n"; -- } -- } -+ if ($this->content_type == 'xml') { -+ header('Content-Type: application/xml; charset=utf-8'); -+ common_start_xml(); -+ common_element_start('hash'); -+ common_element('error', NULL, $msg); -+ common_element('request', NULL, $_SERVER['REQUEST_URI']); -+ common_element_end('hash'); -+ common_end_xml(); -+ } else if ($this->content_type == 'json') { -+ header('Content-Type: application/json; charset=utf-8'); -+ $error_array = array('error' => $msg, 'request' => $_SERVER['REQUEST_URI']); -+ print(json_encode($error_array)); -+ } else { -+ header('Content-type: text/plain'); -+ print "$msg\n"; -+ } -+ } -hunk ./actions/api.php 169 -- function is_readonly() { -- # NOTE: before handle(), can't use $this->arg -- $apiaction = $_REQUEST['apiaction']; -- $method = $_REQUEST['method']; -- list($cmdtext, $fmt) = explode('.', $method); -+ function is_readonly() { -+ # NOTE: before handle(), can't use $this->arg -+ $apiaction = $_REQUEST['apiaction']; -+ $method = $_REQUEST['method']; -+ list($cmdtext, $fmt) = explode('.', $method); -hunk ./actions/api.php 175 -- static $write_methods = array( -- 'account' => array('update_location', 'update_delivery_device', 'end_session'), -- 'blocks' => array('create', 'destroy'), -- 'direct_messages' => array('create', 'destroy'), -- 'favorites' => array('create', 'destroy'), -- 'friendships' => array('create', 'destroy'), -- 'help' => array(), -- 'notifications' => array('follow', 'leave'), -- 'statuses' => array('update', 'destroy'), -- 'users' => array() -- ); -+ static $write_methods = array( -+ 'account' => array('update_location', 'update_delivery_device', 'end_session'), -+ 'blocks' => array('create', 'destroy'), -+ 'direct_messages' => array('create', 'destroy'), -+ 'favorites' => array('create', 'destroy'), -+ 'friendships' => array('create', 'destroy'), -+ 'help' => array(), -+ 'notifications' => array('follow', 'leave'), -+ 'statuses' => array('update', 'destroy'), -+ 'users' => array() -+ ); -hunk ./actions/api.php 187 -- if (array_key_exists($apiaction, $write_methods)) { -- if (!in_array($cmdtext, $write_methods[$apiaction])) { -- return true; -- } -- } -+ if (array_key_exists($apiaction, $write_methods)) { -+ if (!in_array($cmdtext, $write_methods[$apiaction])) { -+ return true; -+ } -+ } -hunk ./actions/api.php 193 -- return false; -- } -+ return false; -+ } -hunk ./actions/avatarbynickname.php 27 -- $this->client_error(_('No nickname.')); -- return; -- } -- $size = $this->trimmed('size'); -+ $this->client_error(_('No nickname.')); -+ return; -+ } -+ $size = $this->trimmed('size'); -hunk ./actions/avatarbynickname.php 32 -- $this->client_error(_('No size.')); -- return; -- } -- $size = strtolower($size); -- if (!in_array($size, array('original', '96', '48', '24'))) { -- $this->client_error(_('Invalid size.')); -- return; -- } -+ $this->client_error(_('No size.')); -+ return; -+ } -+ $size = strtolower($size); -+ if (!in_array($size, array('original', '96', '48', '24'))) { -+ $this->client_error(_('Invalid size.')); -+ return; -+ } -hunk ./actions/avatarbynickname.php 41 -- $user = User::staticGet('nickname', $nickname); -- if (!$user) { -- $this->client_error(_('No such user.')); -- return; -- } -- $profile = $user->getProfile(); -- if (!$profile) { -- $this->client_error(_('User has no profile.')); -- return; -- } -- if ($size == 'original') { -- $avatar = $profile->getOriginal(); -- } else { -- $avatar = $profile->getAvatar($size+0); -- } -+ $user = User::staticGet('nickname', $nickname); -+ if (!$user) { -+ $this->client_error(_('No such user.')); -+ return; -+ } -+ $profile = $user->getProfile(); -+ if (!$profile) { -+ $this->client_error(_('User has no profile.')); -+ return; -+ } -+ if ($size == 'original') { -+ $avatar = $profile->getOriginal(); -+ } else { -+ $avatar = $profile->getAvatar($size+0); -+ } -hunk ./actions/avatarbynickname.php 57 -- if ($avatar) { -- $url = $avatar->url; -- } else { -- if ($size == 'original') { -- $url = common_default_avatar(AVATAR_PROFILE_SIZE); -- } else { -- $url = common_default_avatar($size+0); -- } -- } -- common_redirect($url, 302); -- } -+ if ($avatar) { -+ $url = $avatar->url; -+ } else { -+ if ($size == 'original') { -+ $url = common_default_avatar(AVATAR_PROFILE_SIZE); -+ } else { -+ $url = common_default_avatar($size+0); -+ } -+ } -+ common_redirect($url, 302); -+ } -hunk ./actions/block.php 35 -- $token = $this->trimmed('token'); -+ $token = $this->trimmed('token'); -hunk ./actions/block.php 37 -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/block.php 78 -- common_show_header(_('Block user')); -+ common_show_header(_('Block user')); -hunk ./actions/confirmaddress.php 46 -- $type = $confirm->address_type; -- if (!in_array($type, array('email', 'jabber', 'sms'))) { -- $this->server_error(sprintf(_('Unrecognized address type %s'), $type)); -- return; -- } -+ $type = $confirm->address_type; -+ if (!in_array($type, array('email', 'jabber', 'sms'))) { -+ $this->server_error(sprintf(_('Unrecognized address type %s'), $type)); -+ return; -+ } -hunk ./actions/confirmaddress.php 53 -- return; -- } -+ return; -+ } -hunk ./actions/confirmaddress.php 60 -- $cur->$type = $confirm->address; -+ $cur->$type = $confirm->address; -hunk ./actions/confirmaddress.php 62 -- if ($type == 'sms') { -- $cur->carrier = ($confirm->address_extra)+0; -- $carrier = Sms_carrier::staticGet($cur->carrier); -- $cur->smsemail = $carrier->toEmailAddress($cur->sms); -- } -+ if ($type == 'sms') { -+ $cur->carrier = ($confirm->address_extra)+0; -+ $carrier = Sms_carrier::staticGet($cur->carrier); -+ $cur->smsemail = $carrier->toEmailAddress($cur->sms); -+ } -hunk ./actions/confirmaddress.php 68 -- $result = $cur->updateKeys($orig_user); -+ $result = $cur->updateKeys($orig_user); -hunk ./actions/confirmaddress.php 71 -- common_log_db_error($cur, 'UPDATE', __FILE__); -+ common_log_db_error($cur, 'UPDATE', __FILE__); -hunk ./actions/confirmaddress.php 76 -- if ($type == 'email') { -- $cur->emailChanged(); -- } -+ if ($type == 'email') { -+ $cur->emailChanged(); -+ } -hunk ./actions/confirmaddress.php 83 -- common_log_db_error($confirm, 'DELETE', __FILE__); -+ common_log_db_error($confirm, 'DELETE', __FILE__); -hunk ./actions/deletenotice.php 25 -- function handle($args) { -- parent::handle($args); -- # XXX: Ajax! -+ function handle($args) { -+ parent::handle($args); -+ # XXX: Ajax! -hunk ./actions/deletenotice.php 29 -- if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $this->delete_notice(); -- } else if ($_SERVER['REQUEST_METHOD'] == 'GET') { -- $this->show_form(); -- } -- } -+ if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $this->delete_notice(); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'GET') { -+ $this->show_form(); -+ } -+ } -hunk ./actions/deletenotice.php 36 -- function get_instructions() { -- return _('You are about to permanently delete a notice. Once this is done, it cannot be undone.'); -- } -+ function get_instructions() { -+ return _('You are about to permanently delete a notice. Once this is done, it cannot be undone.'); -+ } -hunk ./actions/deletenotice.php 40 -- function get_title() { -- return _('Delete notice'); -- } -+ function get_title() { -+ return _('Delete notice'); -+ } +- var $user = NULL; ++ var $user = null; +hunk ./actions/allrss.php 72 +- return NULL; ++ return null; +hunk ./actions/allrss.php 75 +- return ($avatar) ? $avatar->url : NULL; ++ return ($avatar) ? $avatar->url : null; +hunk ./actions/api.php 155 +- common_element('error', NULL, $msg); +- common_element('request', NULL, $_SERVER['REQUEST_URI']); ++ common_element('error', null, $msg); ++ common_element('request', null, $_SERVER['REQUEST_URI']); +hunk ./actions/block.php 24 +- var $profile = NULL; ++ var $profile = null; +hunk ./actions/block.php 80 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/confirmaddress.php 91 +- common_element('p', NULL, ++ common_element('p', null, hunk ./actions/deletenotice.php 44 -- function show_form($error=NULL) { -- $user = common_current_user(); -+ function show_form($error=NULL) { -+ $user = common_current_user(); -hunk ./actions/deletenotice.php 47 -- common_show_header($this->get_title(), array($this, 'show_header'), $error, -- array($this, 'show_top')); -- common_element_start('form', array('id' => 'notice_delete_form', -- 'method' => 'post', -- 'action' => common_local_url('deletenotice'))); -- common_hidden('token', common_session_token()); -- common_hidden('notice', $this->trimmed('notice')); -- common_element_start('p'); -- common_element('span', array('id' => 'confirmation_text'), _('Are you sure you want to delete this notice?')); -+ common_show_header($this->get_title(), array($this, 'show_header'), $error, -+ array($this, 'show_top')); -+ common_element_start('form', array('id' => 'notice_delete_form', -+ 'method' => 'post', -+ 'action' => common_local_url('deletenotice'))); -+ common_hidden('token', common_session_token()); -+ common_hidden('notice', $this->trimmed('notice')); -+ common_element_start('p'); -+ common_element('span', array('id' => 'confirmation_text'), _('Are you sure you want to delete this notice?')); -hunk ./actions/deletenotice.php 57 -- common_element('input', array('id' => 'submit_no', -- 'name' => 'submit', -- 'type' => 'submit', -- 'value' => _('No'))); -- common_element('input', array('id' => 'submit_yes', -- 'name' => 'submit', -- 'type' => 'submit', -- 'value' => _('Yes'))); -- common_element_end('p'); -- common_element_end('form'); -- common_show_footer(); -- } -+ common_element('input', array('id' => 'submit_no', -+ 'name' => 'submit', -+ 'type' => 'submit', -+ 'value' => _('No'))); -+ common_element('input', array('id' => 'submit_yes', -+ 'name' => 'submit', -+ 'type' => 'submit', -+ 'value' => _('Yes'))); -+ common_element_end('p'); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/deletenotice.php 70 -- function delete_notice() { -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -- $url = common_get_returnto(); -- $confirmed = $this->trimmed('submit'); -- if ($confirmed == _('Yes')) { -- $user = common_current_user(); -- $notice_id = $this->trimmed('notice'); -- $notice = Notice::staticGet($notice_id); -- $replies = new Reply; -- $replies->get('notice_id', $notice_id); -+ function delete_notice() { -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -+ $url = common_get_returnto(); -+ $confirmed = $this->trimmed('submit'); -+ if ($confirmed == _('Yes')) { -+ $user = common_current_user(); -+ $notice_id = $this->trimmed('notice'); -+ $notice = Notice::staticGet($notice_id); -+ $replies = new Reply; -+ $replies->get('notice_id', $notice_id); -hunk ./actions/deletenotice.php 86 -- common_dequeue_notice($notice); -- if (common_config('memcached', 'enabled')) { -- $notice->blowSubsCache(); -- } -- $replies->delete(); -- $notice->delete(); -- } else { -- if ($url) { -- common_set_returnto(NULL); -- } else { -- $url = common_local_url('public'); -- } -- } -- common_redirect($url); -- } -+ common_dequeue_notice($notice); -+ if (common_config('memcached', 'enabled')) { -+ $notice->blowSubsCache(); -+ } -+ $replies->delete(); -+ $notice->delete(); -+ } else { -+ if ($url) { -+ common_set_returnto(NULL); -+ } else { -+ $url = common_local_url('public'); -+ } -+ } -+ common_redirect($url); -+ } -hunk ./actions/deleteprofile.php 35 -- function get_instructions() { -- return _('Export and delete your user information.'); -- } -+ function get_instructions() { -+ return _('Export and delete your user information.'); -+ } +- function show_form($error=NULL) { ++ function show_form($error=null) { +hunk ./actions/deletenotice.php 94 +- common_set_returnto(NULL); ++ common_set_returnto(null); hunk ./actions/deleteprofile.php 39 -- function form_header($title, $msg=NULL, $success=false) { -- common_show_header($title, -- NULL, -- array($msg, $success), -- array($this, 'show_top')); -- } -+ function form_header($title, $msg=NULL, $success=false) { -+ common_show_header($title, -+ NULL, -+ array($msg, $success), -+ array($this, 'show_top')); -+ } -hunk ./actions/deleteprofile.php 46 -- function show_feeds_list($feeds) { -- common_element_start('div', array('class' => 'feedsdel')); -- common_element('p', null, 'Feeds:'); -- common_element_start('ul', array('class' => 'xoxo')); -+ function show_feeds_list($feeds) { -+ common_element_start('div', array('class' => 'feedsdel')); -+ common_element('p', null, 'Feeds:'); -+ common_element_start('ul', array('class' => 'xoxo')); -hunk ./actions/deleteprofile.php 51 -- foreach ($feeds as $key => $value) { -- $this->common_feed_item($feeds[$key]); -- } -- common_element_end('ul'); -- common_element_end('div'); -- } -+ foreach ($feeds as $key => $value) { -+ $this->common_feed_item($feeds[$key]); -+ } -+ common_element_end('ul'); -+ common_element_end('div'); -+ } -hunk ./actions/deleteprofile.php 59 -- function common_feed_item($feed) { -+ function common_feed_item($feed) { -hunk ./actions/deleteprofile.php 61 -- $nickname = $user->nickname; -+ $nickname = $user->nickname; -hunk ./actions/deleteprofile.php 63 -- switch($feed['item']) { -- case 'notices': default: -- $feed_classname = $feed['type']; -- $feed_mimetype = "application/".$feed['type']."+xml"; -- $feed_title = "$nickname's ".$feed['version']." notice feed"; -- $feed['textContent'] = "RSS"; -- break; -+ switch($feed['item']) { -+ case 'notices': default: -+ $feed_classname = $feed['type']; -+ $feed_mimetype = "application/".$feed['type']."+xml"; -+ $feed_title = "$nickname's ".$feed['version']." notice feed"; -+ $feed['textContent'] = "RSS"; -+ break; -hunk ./actions/deleteprofile.php 71 -- case 'foaf': -- $feed_classname = "foaf"; -- $feed_mimetype = "application/".$feed['type']."+xml"; -- $feed_title = "$nickname's FOAF file"; -- $feed['textContent'] = "FOAF"; -- break; -- } -- common_element_start('li'); -- common_element('a', array('href' => $feed['href'], -- 'class' => $feed_classname, -- 'type' => $feed_mimetype, -- 'title' => $feed_title), -- $feed['textContent']); -- common_element_end('li'); -- } -+ case 'foaf': -+ $feed_classname = "foaf"; -+ $feed_mimetype = "application/".$feed['type']."+xml"; -+ $feed_title = "$nickname's FOAF file"; -+ $feed['textContent'] = "FOAF"; -+ break; -+ } -+ common_element_start('li'); -+ common_element('a', array('href' => $feed['href'], -+ 'class' => $feed_classname, -+ 'type' => $feed_mimetype, -+ 'title' => $feed_title), -+ $feed['textContent']); -+ common_element_end('li'); -+ } +- function form_header($title, $msg=NULL, $success=false) { ++ function form_header($title, $msg=null, $success=false) { +hunk ./actions/deleteprofile.php 41 +- NULL, ++ null, hunk ./actions/deleteprofile.php 87 -- function show_form($msg=NULL, $success=false) { -- $this->form_header(_('Delete my account'), $msg, $success); -- common_element('h2', NULL, _('Delete my account confirmation')); -- $this->show_confirm_delete_form(); -- common_show_footer(); -- } -+ function show_form($msg=NULL, $success=false) { -+ $this->form_header(_('Delete my account'), $msg, $success); -+ common_element('h2', NULL, _('Delete my account confirmation')); -+ $this->show_confirm_delete_form(); -+ common_show_footer(); -+ } -hunk ./actions/deleteprofile.php 94 -- function show_confirm_delete_form() { -- $user = common_current_user(); -+ function show_confirm_delete_form() { -+ $user = common_current_user(); -hunk ./actions/deleteprofile.php 100 -- common_element_start('form', array('method' => 'POST', -- 'id' => 'delete', -- 'action' => -- common_local_url('deleteprofile'))); -+ common_element_start('form', array('method' => 'POST', -+ 'id' => 'delete', -+ 'action' => -+ common_local_url('deleteprofile'))); -hunk ./actions/deleteprofile.php 105 -- common_hidden('token', common_session_token()); -+ common_hidden('token', common_session_token()); -hunk ./actions/deleteprofile.php 108 -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('limit' => $notice_count, 'nickname' => $user->nickname)), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'notices'), -- 1=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), -- 'type' => 'rdf', -- 'version' => 'FOAF', -- 'item' => 'foaf'))); -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('limit' => $notice_count, 'nickname' => $user->nickname)), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'notices'), -+ 1=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), -+ 'type' => 'rdf', -+ 'version' => 'FOAF', -+ 'item' => 'foaf'))); -hunk ./actions/deleteprofile.php 119 -- common_submit('deleteaccount', _('Delete my account')); -- common_element_end('form'); -+ common_submit('deleteaccount', _('Delete my account')); -+ common_element_end('form'); -hunk ./actions/deleteprofile.php 123 -- function handle_post() { -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ function handle_post() { -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/deleteprofile.php 137 -- function delete_account() { -- $user = common_current_user(); -- assert(!is_null($user)); # should already be checked -+ function delete_account() { -+ $user = common_current_user(); -+ assert(!is_null($user)); # should already be checked -hunk ./actions/deleteprofile.php 222 -- function show_top($arr) { -- $msg = $arr[0]; -- $success = $arr[1]; -- if ($msg) { -- $this->message($msg, $success); -- } else { -- $inst = $this->get_instructions(); -- $output = common_markup_to_html($inst); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- } -- $this->settings_menu(); -- } -+ function show_top($arr) { -+ $msg = $arr[0]; -+ $success = $arr[1]; -+ if ($msg) { -+ $this->message($msg, $success); -+ } else { -+ $inst = $this->get_instructions(); -+ $output = common_markup_to_html($inst); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ } -+ $this->settings_menu(); -+ } -hunk ./actions/deleteprofile.php 239 -- $menu = -- array('profilesettings' => -- array(_('Profile'), -- _('Change your profile settings')), -- 'emailsettings' => -- array(_('Email'), -- _('Change email handling')), -- 'openidsettings' => -- array(_('OpenID'), -- _('Add or remove OpenIDs')), -- 'smssettings' => -- array(_('SMS'), -- _('Updates by SMS')), -- 'imsettings' => -- array(_('IM'), -- _('Updates by instant messenger (IM)')), -- 'twittersettings' => -- array(_('Twitter'), -- _('Twitter integration options')), -- 'othersettings' => -- array(_('Other'), -- _('Other options'))); -+ $menu = -+ array('profilesettings' => -+ array(_('Profile'), -+ _('Change your profile settings')), -+ 'emailsettings' => -+ array(_('Email'), -+ _('Change email handling')), -+ 'openidsettings' => -+ array(_('OpenID'), -+ _('Add or remove OpenIDs')), -+ 'smssettings' => -+ array(_('SMS'), -+ _('Updates by SMS')), -+ 'imsettings' => -+ array(_('IM'), -+ _('Updates by instant messenger (IM)')), -+ 'twittersettings' => -+ array(_('Twitter'), -+ _('Twitter integration options')), -+ 'othersettings' => -+ array(_('Other'), -+ _('Other options'))); -hunk ./actions/deleteprofile.php 265 -- if ($menuaction == 'imsettings' && -- !common_config('xmpp', 'enabled')) { -- continue; -- } -+ if ($menuaction == 'imsettings' && -+ !common_config('xmpp', 'enabled')) { -+ continue; -+ } -hunk ./actions/disfavor.php 24 -- function handle($args) { -+ function handle($args) { -hunk ./actions/disfavor.php 26 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/disfavor.php 28 -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- return; -- } -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ return; -+ } -hunk ./actions/disfavor.php 33 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/disfavor.php 35 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- common_redirect(common_local_url('showfavorites', array('nickname' => $user->nickname))); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ common_redirect(common_local_url('showfavorites', array('nickname' => $user->nickname))); -+ return; -+ } -hunk ./actions/disfavor.php 40 -- $id = $this->trimmed('notice'); -+ $id = $this->trimmed('notice'); -hunk ./actions/disfavor.php 42 -- $notice = Notice::staticGet($id); -+ $notice = Notice::staticGet($id); -hunk ./actions/disfavor.php 44 -- $token = $this->trimmed('token-'.$notice->id); -+ $token = $this->trimmed('token-'.$notice->id); -hunk ./actions/disfavor.php 46 -- if (!$token || $token != common_session_token()) { -- $this->client_error(_("There was a problem with your session token. Try again, please.")); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_("There was a problem with your session token. Try again, please.")); -+ return; -+ } -hunk ./actions/disfavor.php 51 -- $fave = new Fave(); -- $fave->user_id = $this->id; -- $fave->notice_id = $notice->id; -- if (!$fave->find(true)) { -- $this->client_error(_('This notice is not a favorite!')); -- return; -- } -+ $fave = new Fave(); -+ $fave->user_id = $this->id; -+ $fave->notice_id = $notice->id; -+ if (!$fave->find(true)) { -+ $this->client_error(_('This notice is not a favorite!')); -+ return; -+ } -hunk ./actions/disfavor.php 59 -- $result = $fave->delete(); -+ $result = $fave->delete(); -hunk ./actions/disfavor.php 61 -- if (!$result) { -- common_log_db_error($fave, 'DELETE', __FILE__); -- $this->server_error(_('Could not delete favorite.')); -- return; -- } -- -- $user->blowFavesCache(); -+ if (!$result) { -+ common_log_db_error($fave, 'DELETE', __FILE__); -+ $this->server_error(_('Could not delete favorite.')); -+ return; -+ } -+ -+ $user->blowFavesCache(); -hunk ./actions/disfavor.php 69 -- if ($this->boolean('ajax')) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Add to favorites')); -- common_element_end('head'); -- common_element_start('body'); -- common_favor_form($notice); -- common_element_end('body'); -- common_element_end('html'); -- } else { -- common_redirect(common_local_url('showfavorites', -- array('nickname' => $user->nickname))); -- } -- } -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Add to favorites')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_favor_form($notice); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -+ common_redirect(common_local_url('showfavorites', -+ array('nickname' => $user->nickname))); -+ } -+ } -hunk ./actions/doc.php 24 -- function handle($args) { -- parent::handle($args); -- $title = $this->trimmed('title'); -- $filename = INSTALLDIR.'/doc/'.$title; -- if (!file_exists($filename)) { -- common_user_error(_('No such document.')); -- return; -- } -- $c = file_get_contents($filename); -- $output = common_markup_to_html($c); -- common_show_header(_(ucfirst($title))); -- common_raw($output); -- common_show_footer(); -- } -+ function handle($args) { -+ parent::handle($args); -+ $title = $this->trimmed('title'); -+ $filename = INSTALLDIR.'/doc/'.$title; -+ if (!file_exists($filename)) { -+ common_user_error(_('No such document.')); -+ return; -+ } -+ $c = file_get_contents($filename); -+ $output = common_markup_to_html($c); -+ common_show_header(_(ucfirst($title))); -+ common_raw($output); -+ common_show_footer(); -+ } -hunk ./actions/emailsettings.php 26 -- function get_instructions() { -- return _('Manage how you get email from %%site.name%%.'); -- } -+ function get_instructions() { -+ return _('Manage how you get email from %%site.name%%.'); -+ } +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { +hunk ./actions/deleteprofile.php 89 +- common_element('h2', NULL, _('Delete my account confirmation')); ++ common_element('h2', null, _('Delete my account confirmation')); +hunk ./actions/deleteprofile.php 216 +- common_set_user(NULL); ++ common_set_user(null); hunk ./actions/emailsettings.php 30 -- function show_form($msg=NULL, $success=false) { -- $user = common_current_user(); -- $this->form_header(_('Email Settings'), $msg, $success); -- common_element_start('form', array('method' => 'post', -- 'id' => 'emailsettings', -- 'action' => -- common_local_url('emailsettings'))); -- common_hidden('token', common_session_token()); -+ function show_form($msg=NULL, $success=false) { -+ $user = common_current_user(); -+ $this->form_header(_('Email Settings'), $msg, $success); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'emailsettings', -+ 'action' => -+ common_local_url('emailsettings'))); -+ common_hidden('token', common_session_token()); +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { hunk ./actions/emailsettings.php 39 -- common_element('h2', NULL, _('Address')); -+ common_element('h2', NULL, _('Address')); -hunk ./actions/emailsettings.php 41 -- if ($user->email) { -- common_element_start('p'); -- common_element('span', 'address confirmed', $user->email); -- common_element('span', 'input_instructions', -- _('Current confirmed email address.')); -- common_hidden('email', $user->email); -- common_element_end('p'); -- common_submit('remove', _('Remove')); -- } else { -- $confirm = $this->get_confirmation(); -- if ($confirm) { -- common_element_start('p'); -- common_element('span', 'address unconfirmed', $confirm->address); -- common_element('span', 'input_instructions', -- _('Awaiting confirmation on this address. Check your inbox (and spam box!) for a message with further instructions.')); -- common_hidden('email', $confirm->address); -- common_element_end('p'); -- common_submit('cancel', _('Cancel')); -- } else { -- common_input('email', _('Email Address'), -- ($this->arg('email')) ? $this->arg('email') : NULL, -- _('Email address, like "UserName@example.org"')); -- common_submit('add', _('Add')); -- } -- } -+ if ($user->email) { -+ common_element_start('p'); -+ common_element('span', 'address confirmed', $user->email); -+ common_element('span', 'input_instructions', -+ _('Current confirmed email address.')); -+ common_hidden('email', $user->email); -+ common_element_end('p'); -+ common_submit('remove', _('Remove')); -+ } else { -+ $confirm = $this->get_confirmation(); -+ if ($confirm) { -+ common_element_start('p'); -+ common_element('span', 'address unconfirmed', $confirm->address); -+ common_element('span', 'input_instructions', -+ _('Awaiting confirmation on this address. Check your inbox (and spam box!) for a message with further instructions.')); -+ common_hidden('email', $confirm->address); -+ common_element_end('p'); -+ common_submit('cancel', _('Cancel')); -+ } else { -+ common_input('email', _('Email Address'), -+ ($this->arg('email')) ? $this->arg('email') : NULL, -+ _('Email address, like "UserName@example.org"')); -+ common_submit('add', _('Add')); -+ } -+ } -hunk ./actions/emailsettings.php 67 -- if ($user->email) { -- common_element('h2', NULL, _('Incoming email')); -- -- if ($user->incomingemail) { -- common_element_start('p'); -- common_element('span', 'address', $user->incomingemail); -- common_element('span', 'input_instructions', -- _('Send email to this address to post new notices.')); -- common_element_end('p'); -- common_submit('removeincoming', _('Remove')); -- } -- -- common_element_start('p'); -- common_element('span', 'input_instructions', -- _('Make a new email address for posting to; cancels the old one.')); -- common_element_end('p'); -- common_submit('newincoming', _('New')); -- } -- -- common_element('h2', NULL, _('Preferences')); -+ if ($user->email) { -+ common_element('h2', NULL, _('Incoming email')); -+ -+ if ($user->incomingemail) { -+ common_element_start('p'); -+ common_element('span', 'address', $user->incomingemail); -+ common_element('span', 'input_instructions', -+ _('Send email to this address to post new notices.')); -+ common_element_end('p'); -+ common_submit('removeincoming', _('Remove')); -+ } -+ -+ common_element_start('p'); -+ common_element('span', 'input_instructions', -+ _('Make a new email address for posting to; cancels the old one.')); -+ common_element_end('p'); -+ common_submit('newincoming', _('New')); -+ } -+ -+ common_element('h2', NULL, _('Preferences')); -hunk ./actions/emailsettings.php 88 -- common_checkbox('emailnotifysub', -- _('Send me notices of new subscriptions through email.'), -- $user->emailnotifysub); -- common_checkbox('emailnotifyfav', -- _('Send me email when someone adds my notice as a favorite.'), -- $user->emailnotifyfav); -- common_checkbox('emailnotifymsg', -- _('Send me email when someone sends me a private message.'), -- $user->emailnotifymsg); -- common_checkbox('emailnotifynudge', -- _('Allow friends to nudge me and send me an email.'), -- $user->emailnotifynudge); -- common_checkbox('emailpost', -- _('I want to post notices by email.'), -- $user->emailpost); -- common_checkbox('emailmicroid', -- _('Publish a MicroID for my email address.'), -- $user->emailmicroid); -+ common_checkbox('emailnotifysub', -+ _('Send me notices of new subscriptions through email.'), -+ $user->emailnotifysub); -+ common_checkbox('emailnotifyfav', -+ _('Send me email when someone adds my notice as a favorite.'), -+ $user->emailnotifyfav); -+ common_checkbox('emailnotifymsg', -+ _('Send me email when someone sends me a private message.'), -+ $user->emailnotifymsg); -+ common_checkbox('emailnotifynudge', -+ _('Allow friends to nudge me and send me an email.'), -+ $user->emailnotifynudge); -+ common_checkbox('emailpost', -+ _('I want to post notices by email.'), -+ $user->emailpost); -+ common_checkbox('emailmicroid', -+ _('Publish a MicroID for my email address.'), -+ $user->emailmicroid); -hunk ./actions/emailsettings.php 107 -- common_submit('save', _('Save')); -- -- common_element_end('form'); -- common_show_footer(); -- } -+ common_submit('save', _('Save')); -+ -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/emailsettings.php 113 -- function get_confirmation() { -- $user = common_current_user(); -- $confirm = new Confirm_address(); -- $confirm->user_id = $user->id; -- $confirm->address_type = 'email'; -- if ($confirm->find(TRUE)) { -- return $confirm; -- } else { -- return NULL; -- } -- } -+ function get_confirmation() { -+ $user = common_current_user(); -+ $confirm = new Confirm_address(); -+ $confirm->user_id = $user->id; -+ $confirm->address_type = 'email'; -+ if ($confirm->find(TRUE)) { -+ return $confirm; -+ } else { -+ return NULL; -+ } -+ } -hunk ./actions/emailsettings.php 125 -- function handle_post() { -+ function handle_post() { -hunk ./actions/emailsettings.php 127 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/emailsettings.php 134 -- if ($this->arg('save')) { -- $this->save_preferences(); -- } else if ($this->arg('add')) { -- $this->add_address(); -- } else if ($this->arg('cancel')) { -- $this->cancel_confirmation(); -- } else if ($this->arg('remove')) { -- $this->remove_address(); -- } else if ($this->arg('removeincoming')) { -- $this->remove_incoming(); -- } else if ($this->arg('newincoming')) { -- $this->new_incoming(); -- } else { -- $this->show_form(_('Unexpected form submission.')); -- } -- } -+ if ($this->arg('save')) { -+ $this->save_preferences(); -+ } else if ($this->arg('add')) { -+ $this->add_address(); -+ } else if ($this->arg('cancel')) { -+ $this->cancel_confirmation(); -+ } else if ($this->arg('remove')) { -+ $this->remove_address(); -+ } else if ($this->arg('removeincoming')) { -+ $this->remove_incoming(); -+ } else if ($this->arg('newincoming')) { -+ $this->new_incoming(); -+ } else { -+ $this->show_form(_('Unexpected form submission.')); -+ } -+ } -hunk ./actions/emailsettings.php 151 -- function save_preferences() { -+ function save_preferences() { -hunk ./actions/emailsettings.php 153 -- $emailnotifysub = $this->boolean('emailnotifysub'); -- $emailnotifyfav = $this->boolean('emailnotifyfav'); -- $emailnotifymsg = $this->boolean('emailnotifymsg'); -- $emailnotifynudge = $this->boolean('emailnotifynudge'); -- $emailmicroid = $this->boolean('emailmicroid'); -- $emailpost = $this->boolean('emailpost'); -+ $emailnotifysub = $this->boolean('emailnotifysub'); -+ $emailnotifyfav = $this->boolean('emailnotifyfav'); -+ $emailnotifymsg = $this->boolean('emailnotifymsg'); -+ $emailnotifynudge = $this->boolean('emailnotifynudge'); -+ $emailmicroid = $this->boolean('emailmicroid'); -+ $emailpost = $this->boolean('emailpost'); -hunk ./actions/emailsettings.php 160 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/emailsettings.php 162 -- assert(!is_null($user)); # should already be checked -+ assert(!is_null($user)); # should already be checked -hunk ./actions/emailsettings.php 164 -- $user->query('BEGIN'); -+ $user->query('BEGIN'); -hunk ./actions/emailsettings.php 166 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/emailsettings.php 168 -- $user->emailnotifysub = $emailnotifysub; -- $user->emailnotifyfav = $emailnotifyfav; -- $user->emailnotifymsg = $emailnotifymsg; -- $user->emailnotifynudge = $emailnotifynudge; -- $user->emailmicroid = $emailmicroid; -- $user->emailpost = $emailpost; -+ $user->emailnotifysub = $emailnotifysub; -+ $user->emailnotifyfav = $emailnotifyfav; -+ $user->emailnotifymsg = $emailnotifymsg; -+ $user->emailnotifynudge = $emailnotifynudge; -+ $user->emailmicroid = $emailmicroid; -+ $user->emailpost = $emailpost; -hunk ./actions/emailsettings.php 175 -- $result = $user->update($original); -+ $result = $user->update($original); -hunk ./actions/emailsettings.php 177 -- if ($result === FALSE) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -hunk ./actions/emailsettings.php 183 -- $user->query('COMMIT'); -+ $user->query('COMMIT'); -hunk ./actions/emailsettings.php 185 -- $this->show_form(_('Preferences saved.'), true); -- } -+ $this->show_form(_('Preferences saved.'), true); -+ } -hunk ./actions/emailsettings.php 188 -- function add_address() { -+ function add_address() { -hunk ./actions/emailsettings.php 190 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/emailsettings.php 192 -- $email = $this->trimmed('email'); -+ $email = $this->trimmed('email'); -hunk ./actions/emailsettings.php 194 -- # Some validation -+ # Some validation -hunk ./actions/emailsettings.php 196 -- if (!$email) { -- $this->show_form(_('No email address.')); -- return; -- } -+ if (!$email) { -+ $this->show_form(_('No email address.')); -+ return; -+ } -hunk ./actions/emailsettings.php 201 -- $email = common_canonical_email($email); -+ $email = common_canonical_email($email); -hunk ./actions/emailsettings.php 203 -- if (!$email) { -- $this->show_form(_('Cannot normalize that email address')); -- return; -- } -- if (!Validate::email($email, true)) { -- $this->show_form(_('Not a valid email address')); -- return; -- } else if ($user->email == $email) { -- $this->show_form(_('That is already your email address.')); -- return; -- } else if ($this->email_exists($email)) { -- $this->show_form(_('That email address already belongs to another user.')); -- return; -- } -+ if (!$email) { -+ $this->show_form(_('Cannot normalize that email address')); -+ return; -+ } -+ if (!Validate::email($email, true)) { -+ $this->show_form(_('Not a valid email address')); -+ return; -+ } else if ($user->email == $email) { -+ $this->show_form(_('That is already your email address.')); -+ return; -+ } else if ($this->email_exists($email)) { -+ $this->show_form(_('That email address already belongs to another user.')); -+ return; -+ } -hunk ./actions/emailsettings.php 218 -- $confirm = new Confirm_address(); -- $confirm->address = $email; -- $confirm->address_type = 'email'; -- $confirm->user_id = $user->id; -- $confirm->code = common_confirmation_code(64); -+ $confirm = new Confirm_address(); -+ $confirm->address = $email; -+ $confirm->address_type = 'email'; -+ $confirm->user_id = $user->id; -+ $confirm->code = common_confirmation_code(64); -hunk ./actions/emailsettings.php 224 -- $result = $confirm->insert(); -+ $result = $confirm->insert(); -hunk ./actions/emailsettings.php 226 -- if ($result === FALSE) { -- common_log_db_error($confirm, 'INSERT', __FILE__); -- common_server_error(_('Couldn\'t insert confirmation code.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($confirm, 'INSERT', __FILE__); -+ common_server_error(_('Couldn\'t insert confirmation code.')); -+ return; -+ } -hunk ./actions/emailsettings.php 232 -- mail_confirm_address($user, $confirm->code, $user->nickname, $email); -+ mail_confirm_address($user, $confirm->code, $user->nickname, $email); -hunk ./actions/emailsettings.php 234 -- $msg = _('A confirmation code was sent to the email address you added. Check your inbox (and spam box!) for the code and instructions on how to use it.'); -+ $msg = _('A confirmation code was sent to the email address you added. Check your inbox (and spam box!) for the code and instructions on how to use it.'); -hunk ./actions/emailsettings.php 236 -- $this->show_form($msg, TRUE); -- } -+ $this->show_form($msg, TRUE); -+ } -hunk ./actions/emailsettings.php 239 -- function cancel_confirmation() { -- $email = $this->arg('email'); -- $confirm = $this->get_confirmation(); -- if (!$confirm) { -- $this->show_form(_('No pending confirmation to cancel.')); -- return; -- } -- if ($confirm->address != $email) { -- $this->show_form(_('That is the wrong IM address.')); -- return; -- } -+ function cancel_confirmation() { -+ $email = $this->arg('email'); -+ $confirm = $this->get_confirmation(); -+ if (!$confirm) { -+ $this->show_form(_('No pending confirmation to cancel.')); -+ return; -+ } -+ if ($confirm->address != $email) { -+ $this->show_form(_('That is the wrong IM address.')); -+ return; -+ } -hunk ./actions/emailsettings.php 254 -- common_log_db_error($confirm, 'DELETE', __FILE__); -+ common_log_db_error($confirm, 'DELETE', __FILE__); -hunk ./actions/emailsettings.php 260 -- } -+ } -hunk ./actions/emailsettings.php 262 -- function remove_address() { -+ function remove_address() { -hunk ./actions/emailsettings.php 264 -- $user = common_current_user(); -- $email = $this->arg('email'); -+ $user = common_current_user(); -+ $email = $this->arg('email'); -hunk ./actions/emailsettings.php 267 -- # Maybe an old tab open...? -+ # Maybe an old tab open...? -hunk ./actions/emailsettings.php 269 -- if ($user->email != $email) { -- $this->show_form(_('That is not your email address.')); -- return; -- } -+ if ($user->email != $email) { -+ $this->show_form(_('That is not your email address.')); -+ return; -+ } -hunk ./actions/emailsettings.php 274 -- $user->query('BEGIN'); -- $original = clone($user); -- $user->email = NULL; -- $result = $user->updateKeys($original); -- if (!$result) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -- $user->query('COMMIT'); -+ $user->query('BEGIN'); -+ $original = clone($user); -+ $user->email = NULL; -+ $result = $user->updateKeys($original); -+ if (!$result) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -+ $user->query('COMMIT'); -hunk ./actions/emailsettings.php 285 -- $this->show_form(_('The address was removed.'), TRUE); -- } -+ $this->show_form(_('The address was removed.'), TRUE); -+ } -hunk ./actions/emailsettings.php 288 -- function remove_incoming() { -- $user = common_current_user(); -- -- if (!$user->incomingemail) { -- $this->show_form(_('No incoming email address.')); -- return; -- } -- -- $orig = clone($user); -- $user->incomingemail = NULL; -+ function remove_incoming() { -+ $user = common_current_user(); -+ -+ if (!$user->incomingemail) { -+ $this->show_form(_('No incoming email address.')); -+ return; -+ } -+ -+ $orig = clone($user); -+ $user->incomingemail = NULL; -hunk ./actions/emailsettings.php 299 -- if (!$user->updateKeys($orig)) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- $this->server_error(_("Couldn't update user record.")); -- } -- -- $this->show_form(_('Incoming email address removed.'), TRUE); -- } -+ if (!$user->updateKeys($orig)) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ $this->server_error(_("Couldn't update user record.")); -+ } -+ -+ $this->show_form(_('Incoming email address removed.'), TRUE); -+ } -hunk ./actions/emailsettings.php 307 -- function new_incoming() { -- $user = common_current_user(); -- -- $orig = clone($user); -- $user->incomingemail = mail_new_incoming_address(); -- -- if (!$user->updateKeys($orig)) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- $this->server_error(_("Couldn't update user record.")); -- } -+ function new_incoming() { -+ $user = common_current_user(); -+ -+ $orig = clone($user); -+ $user->incomingemail = mail_new_incoming_address(); -+ -+ if (!$user->updateKeys($orig)) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ $this->server_error(_("Couldn't update user record.")); -+ } -hunk ./actions/emailsettings.php 318 -- $this->show_form(_('New incoming email address added.'), TRUE); -- } -- -- function email_exists($email) { -- $user = common_current_user(); -- $other = User::staticGet('email', $email); -- if (!$other) { -- return false; -- } else { -- return $other->id != $user->id; -- } -- } -+ $this->show_form(_('New incoming email address added.'), TRUE); -+ } -+ -+ function email_exists($email) { -+ $user = common_current_user(); -+ $other = User::staticGet('email', $email); -+ if (!$other) { -+ return false; -+ } else { -+ return $other->id != $user->id; -+ } -+ } -hunk ./actions/facebookhome.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/facebookhome.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/facebookhome.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/facebookhome.php 29 -- $this->login(); -- } -+ $this->login(); -+ } -hunk ./actions/facebookhome.php 32 -- function login() { -+ function login() { -hunk ./actions/facebookhome.php 34 -- $user = null; -+ $user = null; -hunk ./actions/facebookhome.php 36 -- $facebook = $this->get_facebook(); -- $fbuid = $facebook->require_login(); -+ $facebook = $this->get_facebook(); -+ $fbuid = $facebook->require_login(); -hunk ./actions/facebookhome.php 39 -- # check to see whether there's already a Facebook link for this user -- $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook -+ # check to see whether there's already a Facebook link for this user -+ $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook -hunk ./actions/facebookhome.php 42 -- if ($flink) { -+ if ($flink) { -hunk ./actions/facebookhome.php 44 -- $user = $flink->getUser(); -- $this->show_home($facebook, $fbuid, $user); -+ $user = $flink->getUser(); -+ $this->show_home($facebook, $fbuid, $user); -hunk ./actions/facebookhome.php 47 -- } else { -+ } else { -hunk ./actions/facebookhome.php 49 -- # Make the user put in her Laconica creds -- $nickname = common_canonical_nickname($this->trimmed('nickname')); -- $password = $this->arg('password'); -+ # Make the user put in her Laconica creds -+ $nickname = common_canonical_nickname($this->trimmed('nickname')); -+ $password = $this->arg('password'); -hunk ./actions/facebookhome.php 53 -- if ($nickname) { -+ if ($nickname) { -hunk ./actions/facebookhome.php 55 -- if (common_check_user($nickname, $password)) { -+ if (common_check_user($nickname, $password)) { -hunk ./actions/facebookhome.php 58 -- $user = User::staticGet('nickname', $nickname); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/facebookhome.php 60 -- if (!$user) { -- echo ''; -- $this->show_login_form(); -- } -+ if (!$user) { -+ echo ''; -+ $this->show_login_form(); -+ } -hunk ./actions/facebookhome.php 65 -- $flink = DB_DataObject::factory('foreign_link'); -- $flink->user_id = $user->id; -- $flink->foreign_id = $fbuid; -- $flink->service = 2; # Facebook -- $flink->created = common_sql_now(); -+ $flink = DB_DataObject::factory('foreign_link'); -+ $flink->user_id = $user->id; -+ $flink->foreign_id = $fbuid; -+ $flink->service = 2; # Facebook -+ $flink->created = common_sql_now(); -hunk ./actions/facebookhome.php 71 -- # $this->set_flags($flink, $noticesync, $replysync, $friendsync); -+ # $this->set_flags($flink, $noticesync, $replysync, $friendsync); -hunk ./actions/facebookhome.php 73 -- $flink_id = $flink->insert(); -+ $flink_id = $flink->insert(); -hunk ./actions/facebookhome.php 75 -- if ($flink_id) { -- echo ''; -- } -+ if ($flink_id) { -+ echo ''; -+ } -hunk ./actions/facebookhome.php 79 -- $this->show_home($facebook, $fbuid, $user); -+ $this->show_home($facebook, $fbuid, $user); -hunk ./actions/facebookhome.php 81 -- return; -- } else { -- echo ''; -- } -- } -+ return; -+ } else { -+ echo ''; -+ } -+ } -hunk ./actions/facebookhome.php 87 -- $this->show_login_form(); -- } -+ $this->show_login_form(); -+ } -hunk ./actions/facebookhome.php 90 -- } -+ } -hunk ./actions/facebookhome.php 92 -- function show_home($facebook, $fbuid, $user) { -+ function show_home($facebook, $fbuid, $user) { -hunk ./actions/facebookhome.php 94 -- $this->show_header('Home'); -+ $this->show_header('Home'); -hunk ./actions/facebookhome.php 96 -- echo $this->show_notices($user); -- $this->update_profile_box($facebook, $fbuid, $user); -+ echo $this->show_notices($user); -+ $this->update_profile_box($facebook, $fbuid, $user); -hunk ./actions/facebookhome.php 99 -- $this->show_footer(); -- } -+ $this->show_footer(); -+ } -hunk ./actions/facebookhome.php 102 -- function show_notices($user) { -+ function show_notices($user) { -hunk ./actions/facebookhome.php 104 -- $page = $this->trimmed('page'); -- if (!$page) { -- $page = 1; -- } -+ $page = $this->trimmed('page'); -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/facebookhome.php 109 -- $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -+ $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -hunk ./actions/facebookhome.php 111 -- echo '
    '; -+ echo '
      '; -hunk ./actions/facebookhome.php 113 -- $cnt = 0; -+ $cnt = 0; -hunk ./actions/facebookhome.php 115 -- while ($notice->fetch() && $cnt <= NOTICES_PER_PAGE) { -- $cnt++; -+ while ($notice->fetch() && $cnt <= NOTICES_PER_PAGE) { -+ $cnt++; -hunk ./actions/facebookhome.php 118 -- if ($cnt > NOTICES_PER_PAGE) { -- break; -- } -+ if ($cnt > NOTICES_PER_PAGE) { -+ break; -+ } -hunk ./actions/facebookhome.php 122 -- echo $this->render_notice($notice); -- } -+ echo $this->render_notice($notice); -+ } -hunk ./actions/facebookhome.php 125 -- echo '
        '; -+ echo '
          '; -hunk ./actions/facebookhome.php 127 -- $this->pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'index.php', array('nickname' => $user->nickname)); -+ $this->pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'index.php', array('nickname' => $user->nickname)); -hunk ./actions/facebookhome.php 130 -- } -+ } -hunk ./actions/facebookinvite.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/facebookinvite.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/facebookinvite.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/facebookinvite.php 29 -- $this->display(); -- } -+ $this->display(); -+ } -hunk ./actions/facebookinvite.php 32 -- function display() { -+ function display() { -hunk ./actions/facebookinvite.php 34 -- $facebook = $this->get_facebook(); -+ $facebook = $this->get_facebook(); -hunk ./actions/facebookinvite.php 36 -- $fbuid = $facebook->require_login(); -+ $fbuid = $facebook->require_login(); -hunk ./actions/facebookinvite.php 38 -- $this->show_header('Invite'); -+ $this->show_header('Invite'); -hunk ./actions/facebookinvite.php 40 -- echo '

          Coming soon...

          '; -+ echo '

          Coming soon...

          '; -hunk ./actions/facebookinvite.php 42 -- $this->show_footer(); -+ $this->show_footer(); -hunk ./actions/facebookinvite.php 44 -- } -+ } -hunk ./actions/facebookremove.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/facebookremove.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/facebookremove.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/facebookremove.php 29 -- $secret = common_config('facebook', 'secret'); -+ $secret = common_config('facebook', 'secret'); -hunk ./actions/facebookremove.php 31 -- $sig = ''; -+ $sig = ''; -hunk ./actions/facebookremove.php 33 -- ksort($_POST); -+ ksort($_POST); -hunk ./actions/facebookremove.php 35 -- foreach ($_POST as $key => $val) { -- if (substr($key, 0, 7) == 'fb_sig_') { -- $sig .= substr($key, 7) . '=' . $val; -- } -- } -+ foreach ($_POST as $key => $val) { -+ if (substr($key, 0, 7) == 'fb_sig_') { -+ $sig .= substr($key, 7) . '=' . $val; -+ } -+ } -hunk ./actions/facebookremove.php 41 -- $sig .= $secret; -- $verify = md5($sig); -+ $sig .= $secret; -+ $verify = md5($sig); -hunk ./actions/facebookremove.php 44 -- if ($verify == $this->arg('fb_sig')) { -+ if ($verify == $this->arg('fb_sig')) { -hunk ./actions/facebookremove.php 46 -- $flink = Foreign_link::getByForeignID($this->arg('fb_sig_user'), 2); -+ $flink = Foreign_link::getByForeignID($this->arg('fb_sig_user'), 2); -hunk ./actions/facebookremove.php 48 -- common_debug("Removing foreign link to Facebook - local user ID: $flink->user_id, Facebook ID: $flink->foreign_id"); -+ common_debug("Removing foreign link to Facebook - local user ID: $flink->user_id, Facebook ID: $flink->foreign_id"); -hunk ./actions/facebookremove.php 50 -- $result = $flink->delete(); -+ $result = $flink->delete(); -hunk ./actions/facebookremove.php 52 -- if (!$result) { -- common_log_db_error($flink, 'DELETE', __FILE__); -- common_server_error(_('Couldn\'t remove Facebook user.')); -- return; -- } -+ if (!$result) { -+ common_log_db_error($flink, 'DELETE', __FILE__); -+ common_server_error(_('Couldn\'t remove Facebook user.')); -+ return; -+ } -hunk ./actions/facebookremove.php 58 -- } else { -- # Someone bad tried to remove facebook link? -- common_log(LOG_ERR, "Someone from $_SERVER[REMOTE_ADDR] " . -- 'unsuccessfully tried to remove a foreign link to Facebook!'); -- } -- } -+ } else { -+ # Someone bad tried to remove facebook link? -+ common_log(LOG_ERR, "Someone from $_SERVER[REMOTE_ADDR] " . -+ 'unsuccessfully tried to remove a foreign link to Facebook!'); -+ } -+ } -hunk ./actions/facebooksettings.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/facebooksettings.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/facebooksettings.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/facebooksettings.php 29 -- $this->display(); -- } -+ $this->display(); -+ } -hunk ./actions/facebooksettings.php 32 -- function display() { -+ function display() { -hunk ./actions/facebooksettings.php 34 -- $facebook = $this->get_facebook(); -+ $facebook = $this->get_facebook(); -hunk ./actions/facebooksettings.php 36 -- $fbuid = $facebook->require_login(); -+ $fbuid = $facebook->require_login(); -hunk ./actions/facebooksettings.php 38 -- $fbml = '' -- .'

          Add an Identi.ca box to your profile!

          ' -- .'' -- .'
          '; -+ $fbml = '' -+ .'

          Add an Identi.ca box to your profile!

          ' -+ .'' -+ .'
          '; -hunk ./actions/facebooksettings.php 44 -- $this->show_header('Settings'); -+ $this->show_header('Settings'); -hunk ./actions/facebooksettings.php 46 -- echo $fbml; -+ echo $fbml; -hunk ./actions/facebooksettings.php 48 -- $this->show_footer(); -+ $this->show_footer(); -hunk ./actions/facebooksettings.php 50 -- } -+ } -hunk ./actions/favor.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/favor.php 29 -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- return; -- } -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ return; -+ } -hunk ./actions/favor.php 34 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/favor.php 36 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- common_redirect(common_local_url('showfavorites', array('nickname' => $user->nickname))); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ common_redirect(common_local_url('showfavorites', array('nickname' => $user->nickname))); -+ return; -+ } -hunk ./actions/favor.php 41 -- $id = $this->trimmed('notice'); -+ $id = $this->trimmed('notice'); -hunk ./actions/favor.php 43 -- $notice = Notice::staticGet($id); -+ $notice = Notice::staticGet($id); -hunk ./actions/favor.php 45 -- # CSRF protection -+ # CSRF protection -hunk ./actions/favor.php 47 -- $token = $this->trimmed('token-'.$notice->id); -- if (!$token || $token != common_session_token()) { -- $this->client_error(_("There was a problem with your session token. Try again, please.")); -- return; -- } -+ $token = $this->trimmed('token-'.$notice->id); -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_("There was a problem with your session token. Try again, please.")); -+ return; -+ } -hunk ./actions/favor.php 53 -- if ($user->hasFave($notice)) { -- $this->client_error(_('This notice is already a favorite!')); -- return; -- } -+ if ($user->hasFave($notice)) { -+ $this->client_error(_('This notice is already a favorite!')); -+ return; -+ } -hunk ./actions/favor.php 58 -- $fave = Fave::addNew($user, $notice); -+ $fave = Fave::addNew($user, $notice); -hunk ./actions/favor.php 60 -- if (!$fave) { -- $this->server_error(_('Could not create favorite.')); -- return; -- } -+ if (!$fave) { -+ $this->server_error(_('Could not create favorite.')); -+ return; -+ } -hunk ./actions/favor.php 65 -- $this->notify($fave, $notice, $user); -- $user->blowFavesCache(); -- -- if ($this->boolean('ajax')) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Disfavor favorite')); -- common_element_end('head'); -- common_element_start('body'); -- common_disfavor_form($notice); -- common_element_end('body'); -- common_element_end('html'); -- } else { -- common_redirect(common_local_url('showfavorites', -- array('nickname' => $user->nickname))); -- } -- } -+ $this->notify($fave, $notice, $user); -+ $user->blowFavesCache(); -+ -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Disfavor favorite')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_disfavor_form($notice); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -+ common_redirect(common_local_url('showfavorites', -+ array('nickname' => $user->nickname))); -+ } -+ } -hunk ./actions/favor.php 83 -- function notify($fave, $notice, $user) { -- $other = User::staticGet('id', $notice->profile_id); -- if ($other && $other->id != $user->id) { -- if ($other->email && $other->emailnotifyfav) { -- mail_notify_fave($other, $user, $notice); -- } -- # XXX: notify by IM -- # XXX: notify by SMS -- } -- } -+ function notify($fave, $notice, $user) { -+ $other = User::staticGet('id', $notice->profile_id); -+ if ($other && $other->id != $user->id) { -+ if ($other->email && $other->emailnotifyfav) { -+ mail_notify_fave($other, $user, $notice); -+ } -+ # XXX: notify by IM -+ # XXX: notify by SMS -+ } -+ } -hunk ./actions/favorited.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/favorited.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/favorited.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/favorited.php 29 -- $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -hunk ./actions/favorited.php 31 -- common_show_header(_('Popular notices'), -- array($this, 'show_header'), NULL, -- array($this, 'show_top')); -+ common_show_header(_('Popular notices'), -+ array($this, 'show_header'), NULL, -+ array($this, 'show_top')); -hunk ./actions/favorited.php 35 -- $this->show_notices($page); -+ $this->show_notices($page); -hunk ./actions/favorited.php 37 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/favorited.php 40 -- function show_top() { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- $this->public_views_menu(); -- } -+ function show_top() { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ $this->public_views_menu(); -+ } -hunk ./actions/favorited.php 49 -- function show_header() { -+ function show_header() { -hunk ./actions/favorited.php 51 -- } -+ } -hunk ./actions/favorited.php 53 -- function get_instructions() { -- return _('Showing recently popular notices'); -- } -+ function get_instructions() { -+ return _('Showing recently popular notices'); -+ } -hunk ./actions/favorited.php 57 -- function show_notices($page) { -+ function show_notices($page) { -hunk ./actions/favorited.php 59 -- $qry = 'SELECT notice.*, sum(exp(-(now() - fave.modified) / %s)) as weight ' . -- 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . -- 'GROUP BY fave.notice_id ' . -- 'ORDER BY weight DESC'; -+ $qry = 'SELECT notice.*, sum(exp(-(now() - fave.modified) / %s)) as weight ' . -+ 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . -+ 'GROUP BY fave.notice_id ' . -+ 'ORDER BY weight DESC'; -hunk ./actions/favorited.php 64 -- $offset = ($page - 1) * NOTICES_PER_PAGE; -- $limit = NOTICES_PER_PAGE + 1; -+ $offset = ($page - 1) * NOTICES_PER_PAGE; -+ $limit = NOTICES_PER_PAGE + 1; -hunk ./actions/favorited.php 67 -- if (common_config('db','type') == 'pgsql') { -- $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; -- } else { -- $qry .= ' LIMIT ' . $offset . ', ' . $limit; -- } -+ if (common_config('db','type') == 'pgsql') { -+ $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; -+ } else { -+ $qry .= ' LIMIT ' . $offset . ', ' . $limit; -+ } -hunk ./actions/favorited.php 73 -- # Figure out how to cache this query -+ # Figure out how to cache this query -hunk ./actions/favorited.php 75 -- $notice = new Notice; -- $notice->query(sprintf($qry, common_config('popular', 'dropoff'))); -+ $notice = new Notice; -+ $notice->query(sprintf($qry, common_config('popular', 'dropoff'))); -hunk ./actions/favorited.php 78 -- common_element_start('ul', array('id' => 'notices')); -+ common_element_start('ul', array('id' => 'notices')); -hunk ./actions/favorited.php 80 -- $cnt = 0; -+ $cnt = 0; -hunk ./actions/favorited.php 82 -- while ($notice->fetch() && $cnt <= NOTICES_PER_PAGE) { -- $cnt++; -+ while ($notice->fetch() && $cnt <= NOTICES_PER_PAGE) { -+ $cnt++; -hunk ./actions/favorited.php 85 -- if ($cnt > NOTICES_PER_PAGE) { -- break; -- } -+ if ($cnt > NOTICES_PER_PAGE) { -+ break; -+ } -hunk ./actions/favorited.php 91 -- } -+ } -hunk ./actions/favorited.php 93 -- common_element_end('ul'); -+ common_element_end('ul'); -hunk ./actions/favorited.php 95 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'favorited'); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'favorited'); -+ } +- common_element('h2', NULL, _('Address')); ++ common_element('h2', null, _('Address')); +hunk ./actions/emailsettings.php 61 +- ($this->arg('email')) ? $this->arg('email') : NULL, ++ ($this->arg('email')) ? $this->arg('email') : null, +hunk ./actions/emailsettings.php 68 +- common_element('h2', NULL, _('Incoming email')); ++ common_element('h2', null, _('Incoming email')); +hunk ./actions/emailsettings.php 86 +- common_element('h2', NULL, _('Preferences')); ++ common_element('h2', null, _('Preferences')); +hunk ./actions/emailsettings.php 121 +- return NULL; ++ return null; +hunk ./actions/emailsettings.php 276 +- $user->email = NULL; ++ $user->email = null; +hunk ./actions/emailsettings.php 297 +- $user->incomingemail = NULL; ++ $user->incomingemail = null; +hunk ./actions/favorited.php 32 +- array($this, 'show_header'), NULL, ++ array($this, 'show_header'), null, hunk ./actions/favoritesrss.php 28 -- var $user = NULL; -- -- function init() { -- $nickname = $this->trimmed('nickname'); -- $this->user = User::staticGet('nickname', $nickname); -+ var $user = NULL; -+ -+ function init() { -+ $nickname = $this->trimmed('nickname'); -+ $this->user = User::staticGet('nickname', $nickname); -hunk ./actions/favoritesrss.php 34 -- if (!$this->user) { -- common_user_error(_('No such user.')); -- return false; -- } else { -- return true; -- } -- } -+ if (!$this->user) { -+ common_user_error(_('No such user.')); -+ return false; -+ } else { -+ return true; -+ } -+ } -hunk ./actions/favoritesrss.php 42 -- function get_notices($limit=0) { -+ function get_notices($limit=0) { -hunk ./actions/favoritesrss.php 44 -- $user = $this->user; -+ $user = $this->user; -hunk ./actions/favoritesrss.php 46 -- $notice = $user->favoriteNotices(0, $limit); -+ $notice = $user->favoriteNotices(0, $limit); -hunk ./actions/favoritesrss.php 48 -- $notices = array(); -+ $notices = array(); -hunk ./actions/favoritesrss.php 50 -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/favoritesrss.php 54 -- return $notices; -- } -+ return $notices; -+ } -hunk ./actions/favoritesrss.php 57 -- function get_channel() { -- $user = $this->user; -- $c = array('url' => common_local_url('favoritesrss', -- array('nickname' => -- $user->nickname)), -- 'title' => sprintf(_("%s favorite notices"), $user->nickname), -- 'link' => common_local_url('showfavorites', -- array('nickname' => -- $user->nickname)), -- 'description' => sprintf(_('Feed of favorite notices of %s'), $user->nickname)); -- return $c; -- } -+ function get_channel() { -+ $user = $this->user; -+ $c = array('url' => common_local_url('favoritesrss', -+ array('nickname' => -+ $user->nickname)), -+ 'title' => sprintf(_("%s favorite notices"), $user->nickname), -+ 'link' => common_local_url('showfavorites', -+ array('nickname' => -+ $user->nickname)), -+ 'description' => sprintf(_('Feed of favorite notices of %s'), $user->nickname)); -+ return $c; -+ } -hunk ./actions/favoritesrss.php 70 -- function get_image() { -- return NULL; -- } -+ function get_image() { -+ return NULL; -+ } -hunk ./actions/featured.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/featured.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/featured.php 27 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/featured.php 30 -- $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -hunk ./actions/featured.php 32 -- common_show_header(_('Featured users'), -- array($this, 'show_header'), NULL, -- array($this, 'show_top')); -+ common_show_header(_('Featured users'), -+ array($this, 'show_header'), NULL, -+ array($this, 'show_top')); -hunk ./actions/featured.php 36 -- $this->show_notices($page); -+ $this->show_notices($page); -hunk ./actions/featured.php 38 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/featured.php 41 -- function show_top() { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- $this->public_views_menu(); -- } -+ function show_top() { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ $this->public_views_menu(); -+ } -hunk ./actions/featured.php 50 -- function show_header() { -- } -+ function show_header() { -+ } -hunk ./actions/featured.php 53 -- function get_instructions() { -- return _('Featured users'); -- } -+ function get_instructions() { -+ return _('Featured users'); -+ } -hunk ./actions/featured.php 57 -- function show_notices($page) { -+ function show_notices($page) { -hunk ./actions/featured.php 59 -- // XXX: Note I'm doing it this two-stage way because a raw query -- // with a JOIN was *not* working. --Zach -+ // XXX: Note I'm doing it this two-stage way because a raw query -+ // with a JOIN was *not* working. --Zach -hunk ./actions/featured.php 62 -- $featured_nicks = common_config('nickname', 'featured'); -+ $featured_nicks = common_config('nickname', 'featured'); -hunk ./actions/featured.php 64 -- if (count($featured_nicks) > 0) { -+ if (count($featured_nicks) > 0) { -hunk ./actions/featured.php 66 -- $quoted = array(); -+ $quoted = array(); -hunk ./actions/featured.php 68 -- foreach ($featured_nicks as $nick) { -- $quoted[] = "'$nick'"; -- } -+ foreach ($featured_nicks as $nick) { -+ $quoted[] = "'$nick'"; -+ } -hunk ./actions/featured.php 72 -- $user = new User; -- $user->whereAdd(sprintf('nickname IN (%s)', implode(',', $quoted))); -- $user->limit(($page - 1) * PROFILES_PER_PAGE, PROFILES_PER_PAGE + 1); -- $user->orderBy('user.nickname ASC'); -+ $user = new User; -+ $user->whereAdd(sprintf('nickname IN (%s)', implode(',', $quoted))); -+ $user->limit(($page - 1) * PROFILES_PER_PAGE, PROFILES_PER_PAGE + 1); -+ $user->orderBy('user.nickname ASC'); -hunk ./actions/featured.php 77 -- $user->find(); -+ $user->find(); -hunk ./actions/featured.php 79 -- $profile_ids = array(); -+ $profile_ids = array(); -hunk ./actions/featured.php 81 -- while ($user->fetch()) { -- $profile_ids[] = $user->id; -- } -+ while ($user->fetch()) { -+ $profile_ids[] = $user->id; -+ } -hunk ./actions/featured.php 85 -- $profile = new Profile; -- $profile->whereAdd(sprintf('profile.id IN (%s)', implode(',', $profile_ids))); -- $profile->orderBy('nickname ASC'); -+ $profile = new Profile; -+ $profile->whereAdd(sprintf('profile.id IN (%s)', implode(',', $profile_ids))); -+ $profile->orderBy('nickname ASC'); -hunk ./actions/featured.php 89 -- $cnt = $profile->find(); -+ $cnt = $profile->find(); -hunk ./actions/featured.php 91 -- if ($cnt > 0) { -- $featured = new ProfileList($profile); -- $featured->show_list(); -- } -+ if ($cnt > 0) { -+ $featured = new ProfileList($profile); -+ $featured->show_list(); -+ } -hunk ./actions/featured.php 96 -- $profile->free(); -+ $profile->free(); -hunk ./actions/featured.php 98 -- common_pagination($page > 1, $cnt > PROFILES_PER_PAGE, $page, 'featured'); -- } -- } -+ common_pagination($page > 1, $cnt > PROFILES_PER_PAGE, $page, 'featured'); -+ } -+ } -hunk ./actions/finishaddopenid.php 26 -- function handle($args) { -- parent::handle($args); -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- } else { -- $this->try_login(); -- } -- } -- -- function try_login() { -+ function handle($args) { -+ parent::handle($args); -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ } else { -+ $this->try_login(); -+ } -+ } -+ -+ function try_login() { -hunk ./actions/finishaddopenid.php 37 -- $consumer =& oid_consumer(); -+ $consumer =& oid_consumer(); -hunk ./actions/finishaddopenid.php 39 -- $response = $consumer->complete(common_local_url('finishaddopenid')); -+ $response = $consumer->complete(common_local_url('finishaddopenid')); -hunk ./actions/finishaddopenid.php 41 -- if ($response->status == Auth_OpenID_CANCEL) { -- $this->message(_('OpenID authentication cancelled.')); -- return; -- } else if ($response->status == Auth_OpenID_FAILURE) { -- // Authentication failed; display the error message. -- $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message)); -- } else if ($response->status == Auth_OpenID_SUCCESS) { -+ if ($response->status == Auth_OpenID_CANCEL) { -+ $this->message(_('OpenID authentication cancelled.')); -+ return; -+ } else if ($response->status == Auth_OpenID_FAILURE) { -+ // Authentication failed; display the error message. -+ $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message)); -+ } else if ($response->status == Auth_OpenID_SUCCESS) { -hunk ./actions/finishaddopenid.php 49 -- $display = $response->getDisplayIdentifier(); -- $canonical = ($response->endpoint && $response->endpoint->canonicalID) ? -- $response->endpoint->canonicalID : $display; -+ $display = $response->getDisplayIdentifier(); -+ $canonical = ($response->endpoint && $response->endpoint->canonicalID) ? -+ $response->endpoint->canonicalID : $display; -hunk ./actions/finishaddopenid.php 53 -- $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response); -+ $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response); -hunk ./actions/finishaddopenid.php 55 -- if ($sreg_resp) { -- $sreg = $sreg_resp->contents(); -- } -+ if ($sreg_resp) { -+ $sreg = $sreg_resp->contents(); -+ } -hunk ./actions/finishaddopenid.php 59 -- $cur =& common_current_user(); -- $other = oid_get_user($canonical); -+ $cur =& common_current_user(); -+ $other = oid_get_user($canonical); -hunk ./actions/finishaddopenid.php 62 -- if ($other) { -- if ($other->id == $cur->id) { -- $this->message(_('You already have this OpenID!')); -- } else { -- $this->message(_('Someone else already has this OpenID.')); -- } -- return; -- } -+ if ($other) { -+ if ($other->id == $cur->id) { -+ $this->message(_('You already have this OpenID!')); -+ } else { -+ $this->message(_('Someone else already has this OpenID.')); -+ } -+ return; -+ } -hunk ./actions/finishaddopenid.php 71 -- # start a transaction -+ # start a transaction -hunk ./actions/finishaddopenid.php 73 -- $cur->query('BEGIN'); -+ $cur->query('BEGIN'); -hunk ./actions/finishaddopenid.php 75 -- $result = oid_link_user($cur->id, $canonical, $display); -+ $result = oid_link_user($cur->id, $canonical, $display); -hunk ./actions/finishaddopenid.php 77 -- if (!$result) { -- $this->message(_('Error connecting user.')); -- return; -- } -- if ($sreg) { -- if (!oid_update_user($cur, $sreg)) { -- $this->message(_('Error updating profile')); -- return; -- } -- } -+ if (!$result) { -+ $this->message(_('Error connecting user.')); -+ return; -+ } -+ if ($sreg) { -+ if (!oid_update_user($cur, $sreg)) { -+ $this->message(_('Error updating profile')); -+ return; -+ } -+ } -hunk ./actions/finishaddopenid.php 88 -- # success! -+ # success! -hunk ./actions/finishaddopenid.php 90 -- $cur->query('COMMIT'); -+ $cur->query('COMMIT'); -hunk ./actions/finishaddopenid.php 92 -- oid_set_last($display); -+ oid_set_last($display); -hunk ./actions/finishaddopenid.php 94 -- common_redirect(common_local_url('openidsettings')); -- } -- } -+ common_redirect(common_local_url('openidsettings')); -+ } -+ } -hunk ./actions/finishaddopenid.php 98 -- function message($msg) { -- common_show_header(_('OpenID Login')); -- common_element('p', NULL, $msg); -- common_show_footer(); -- } -+ function message($msg) { -+ common_show_header(_('OpenID Login')); -+ common_element('p', NULL, $msg); -+ common_show_footer(); -+ } -hunk ./actions/finishimmediate.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/finishimmediate.php 29 -- $consumer = oid_consumer(); -+ $consumer = oid_consumer(); -hunk ./actions/finishimmediate.php 31 -- $response = $consumer->complete(common_local_url('finishimmediate')); -+ $response = $consumer->complete(common_local_url('finishimmediate')); -hunk ./actions/finishimmediate.php 33 -- if ($response->status == Auth_OpenID_SUCCESS) { -- $display = $response->getDisplayIdentifier(); -- $canonical = ($response->endpoint->canonicalID) ? -- $response->endpoint->canonicalID : $response->getDisplayIdentifier(); -+ if ($response->status == Auth_OpenID_SUCCESS) { -+ $display = $response->getDisplayIdentifier(); -+ $canonical = ($response->endpoint->canonicalID) ? -+ $response->endpoint->canonicalID : $response->getDisplayIdentifier(); -hunk ./actions/finishimmediate.php 38 -- $user = oid_get_user($canonical); -+ $user = oid_get_user($canonical); -hunk ./actions/finishimmediate.php 40 -- if ($user) { -- oid_update_user($user, $sreg); -- oid_set_last($display); # refresh for another year -- common_set_user($user->nickname); -- $this->go_backto(); -- return; -- } -- } -+ if ($user) { -+ oid_update_user($user, $sreg); -+ oid_set_last($display); # refresh for another year -+ common_set_user($user->nickname); -+ $this->go_backto(); -+ return; -+ } -+ } -hunk ./actions/finishimmediate.php 49 -- # Failure! Clear openid so we don't try it again -+ # Failure! Clear openid so we don't try it again -hunk ./actions/finishimmediate.php 51 -- oid_clear_last(); -- $this->go_backto(); -- return; -- } -+ oid_clear_last(); -+ $this->go_backto(); -+ return; -+ } -hunk ./actions/finishimmediate.php 56 -- function go_backto() { -- common_ensure_session(); -- $backto = $_SESSION['openid_immediate_backto']; -- if (!$backto) { -- # gar. Well, push them to the public page -- $backto = common_local_url('public'); -- } -- common_redirect($backto); -- } -+ function go_backto() { -+ common_ensure_session(); -+ $backto = $_SESSION['openid_immediate_backto']; -+ if (!$backto) { -+ # gar. Well, push them to the public page -+ $backto = common_local_url('public'); -+ } -+ common_redirect($backto); -+ } -hunk ./actions/finishopenidlogin.php 26 -- function handle($args) { -- parent::handle($args); -- if (common_logged_in()) { -- common_user_error(_('Already logged in.')); -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -- if ($this->arg('create')) { -- if (!$this->boolean('license')) { -- $this->show_form(_('You can\'t register if you don\'t agree to the license.'), -- $this->trimmed('newname')); -- return; -- } -- $this->create_new_user(); -- } else if ($this->arg('connect')) { -- $this->connect_user(); -- } else { -- common_debug(print_r($this->args, true), __FILE__); -- $this->show_form(_('Something weird happened.'), -- $this->trimmed('newname')); -- } -- } else { -- $this->try_login(); -- } -- } -+ function handle($args) { -+ parent::handle($args); -+ if (common_logged_in()) { -+ common_user_error(_('Already logged in.')); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -+ if ($this->arg('create')) { -+ if (!$this->boolean('license')) { -+ $this->show_form(_('You can\'t register if you don\'t agree to the license.'), -+ $this->trimmed('newname')); -+ return; -+ } -+ $this->create_new_user(); -+ } else if ($this->arg('connect')) { -+ $this->connect_user(); -+ } else { -+ common_debug(print_r($this->args, true), __FILE__); -+ $this->show_form(_('Something weird happened.'), -+ $this->trimmed('newname')); -+ } -+ } else { -+ $this->try_login(); -+ } -+ } +- var $user = NULL; ++ var $user = null; +hunk ./actions/favoritesrss.php 71 +- return NULL; ++ return null; +hunk ./actions/featured.php 33 +- array($this, 'show_header'), NULL, ++ array($this, 'show_header'), null, +hunk ./actions/finishaddopenid.php 100 +- common_element('p', NULL, $msg); ++ common_element('p', null, $msg); hunk ./actions/finishopenidlogin.php 55 -- function show_top($error=NULL) { -- if ($error) { -- common_element('div', array('class' => 'error'), $error); -- } else { -- global $config; -- common_element('div', 'instructions', -- sprintf(_('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), $config['site']['name'])); -- } -- } -+ function show_top($error=NULL) { -+ if ($error) { -+ common_element('div', array('class' => 'error'), $error); -+ } else { -+ global $config; -+ common_element('div', 'instructions', -+ sprintf(_('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), $config['site']['name'])); -+ } -+ } +- function show_top($error=NULL) { ++ function show_top($error=null) { hunk ./actions/finishopenidlogin.php 65 -- function show_form($error=NULL, $username=NULL) { -- common_show_header(_('OpenID Account Setup'), NULL, $error, -- array($this, 'show_top')); -+ function show_form($error=NULL, $username=NULL) { -+ common_show_header(_('OpenID Account Setup'), NULL, $error, -+ array($this, 'show_top')); -hunk ./actions/finishopenidlogin.php 69 -- common_element_start('form', array('method' => 'post', -- 'id' => 'account_connect', -- 'action' => common_local_url('finishopenidlogin'))); -- common_hidden('token', common_session_token()); -- common_element('h2', NULL, -- _('Create new account')); -- common_element('p', NULL, -- _('Create a new user with this nickname.')); -- common_input('newname', _('New nickname'), -- ($username) ? $username : '', -- _('1-64 lowercase letters or numbers, no punctuation or spaces')); -- common_element_start('p'); -- common_element('input', array('type' => 'checkbox', -- 'id' => 'license', -- 'name' => 'license', -- 'value' => 'true')); -- common_text(_('My text and files are available under ')); -- common_element('a', array(href => common_config('license', 'url')), -- common_config('license', 'title')); -- common_text(_(' except this private data: password, email address, IM address, phone number.')); -- common_element_end('p'); -- common_submit('create', _('Create')); -- common_element('h2', NULL, -- _('Connect existing account')); -- common_element('p', NULL, -- _('If you already have an account, login with your username and password to connect it to your OpenID.')); -- common_input('nickname', _('Existing nickname')); -- common_password('password', _('Password')); -- common_submit('connect', _('Connect')); -- common_element_end('form'); -- common_show_footer(); -- } -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'account_connect', -+ 'action' => common_local_url('finishopenidlogin'))); -+ common_hidden('token', common_session_token()); -+ common_element('h2', NULL, -+ _('Create new account')); -+ common_element('p', NULL, -+ _('Create a new user with this nickname.')); -+ common_input('newname', _('New nickname'), -+ ($username) ? $username : '', -+ _('1-64 lowercase letters or numbers, no punctuation or spaces')); -+ common_element_start('p'); -+ common_element('input', array('type' => 'checkbox', -+ 'id' => 'license', -+ 'name' => 'license', -+ 'value' => 'true')); -+ common_text(_('My text and files are available under ')); -+ common_element('a', array(href => common_config('license', 'url')), -+ common_config('license', 'title')); -+ common_text(_(' except this private data: password, email address, IM address, phone number.')); -+ common_element_end('p'); -+ common_submit('create', _('Create')); -+ common_element('h2', NULL, -+ _('Connect existing account')); -+ common_element('p', NULL, -+ _('If you already have an account, login with your username and password to connect it to your OpenID.')); -+ common_input('nickname', _('Existing nickname')); -+ common_password('password', _('Password')); -+ common_submit('connect', _('Connect')); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/finishopenidlogin.php 102 -- function try_login() { -+ function try_login() { -hunk ./actions/finishopenidlogin.php 104 -- $consumer = oid_consumer(); -+ $consumer = oid_consumer(); -hunk ./actions/finishopenidlogin.php 106 -- $response = $consumer->complete(common_local_url('finishopenidlogin')); -+ $response = $consumer->complete(common_local_url('finishopenidlogin')); -hunk ./actions/finishopenidlogin.php 108 -- if ($response->status == Auth_OpenID_CANCEL) { -- $this->message(_('OpenID authentication cancelled.')); -- return; -- } else if ($response->status == Auth_OpenID_FAILURE) { -- // Authentication failed; display the error message. -- $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message)); -- } else if ($response->status == Auth_OpenID_SUCCESS) { -- // This means the authentication succeeded; extract the -- // identity URL and Simple Registration data (if it was -- // returned). -- $display = $response->getDisplayIdentifier(); -- $canonical = ($response->endpoint->canonicalID) ? -- $response->endpoint->canonicalID : $response->getDisplayIdentifier(); -+ if ($response->status == Auth_OpenID_CANCEL) { -+ $this->message(_('OpenID authentication cancelled.')); -+ return; -+ } else if ($response->status == Auth_OpenID_FAILURE) { -+ // Authentication failed; display the error message. -+ $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message)); -+ } else if ($response->status == Auth_OpenID_SUCCESS) { -+ // This means the authentication succeeded; extract the -+ // identity URL and Simple Registration data (if it was -+ // returned). -+ $display = $response->getDisplayIdentifier(); -+ $canonical = ($response->endpoint->canonicalID) ? -+ $response->endpoint->canonicalID : $response->getDisplayIdentifier(); -hunk ./actions/finishopenidlogin.php 122 -- $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response); -+ $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response); -hunk ./actions/finishopenidlogin.php 124 -- if ($sreg_resp) { -- $sreg = $sreg_resp->contents(); -- } -+ if ($sreg_resp) { -+ $sreg = $sreg_resp->contents(); -+ } -hunk ./actions/finishopenidlogin.php 128 -- $user = oid_get_user($canonical); -+ $user = oid_get_user($canonical); -hunk ./actions/finishopenidlogin.php 130 -- if ($user) { -- oid_set_last($display); -- # XXX: commented out at @edd's request until better -- # control over how data flows from OpenID provider. -- # oid_update_user($user, $sreg); -- common_set_user($user); -- common_real_login(true); -- if (isset($_SESSION['openid_rememberme']) && $_SESSION['openid_rememberme']) { -- common_rememberme($user); -- } -+ if ($user) { -+ oid_set_last($display); -+ # XXX: commented out at @edd's request until better -+ # control over how data flows from OpenID provider. -+ # oid_update_user($user, $sreg); -+ common_set_user($user); -+ common_real_login(true); -+ if (isset($_SESSION['openid_rememberme']) && $_SESSION['openid_rememberme']) { -+ common_rememberme($user); -+ } -hunk ./actions/finishopenidlogin.php 141 -- $this->go_home($user->nickname); -- } else { -- $this->save_values($display, $canonical, $sreg); -- $this->show_form(NULL, $this->best_new_nickname($display, $sreg)); -- } -- } -- } -+ $this->go_home($user->nickname); -+ } else { -+ $this->save_values($display, $canonical, $sreg); -+ $this->show_form(NULL, $this->best_new_nickname($display, $sreg)); -+ } -+ } -+ } -hunk ./actions/finishopenidlogin.php 149 -- function message($msg) { -- common_show_header(_('OpenID Login')); -- common_element('p', NULL, $msg); -- common_show_footer(); -- } -+ function message($msg) { -+ common_show_header(_('OpenID Login')); -+ common_element('p', NULL, $msg); -+ common_show_footer(); -+ } -hunk ./actions/finishopenidlogin.php 155 -- function save_values($display, $canonical, $sreg) { -- common_ensure_session(); -- $_SESSION['openid_display'] = $display; -- $_SESSION['openid_canonical'] = $canonical; -- $_SESSION['openid_sreg'] = $sreg; -- } -+ function save_values($display, $canonical, $sreg) { -+ common_ensure_session(); -+ $_SESSION['openid_display'] = $display; -+ $_SESSION['openid_canonical'] = $canonical; -+ $_SESSION['openid_sreg'] = $sreg; -+ } -hunk ./actions/finishopenidlogin.php 162 -- function get_saved_values() { -- return array($_SESSION['openid_display'], -- $_SESSION['openid_canonical'], -- $_SESSION['openid_sreg']); -- } -+ function get_saved_values() { -+ return array($_SESSION['openid_display'], -+ $_SESSION['openid_canonical'], -+ $_SESSION['openid_sreg']); -+ } -hunk ./actions/finishopenidlogin.php 168 -- function create_new_user() { -+ function create_new_user() { -hunk ./actions/finishopenidlogin.php 172 -- if (common_config('site', 'closed') || common_config('site', 'inviteonly')) { -- common_user_error(_('Registration not allowed.')); -+ if (common_config('site', 'closed') || common_config('site', 'inviteonly')) { -+ common_user_error(_('Registration not allowed.')); -hunk ./actions/finishopenidlogin.php 177 -- $nickname = $this->trimmed('newname'); -+ $nickname = $this->trimmed('newname'); -hunk ./actions/finishopenidlogin.php 179 -- if (!Validate::string($nickname, array('min_length' => 1, -- 'max_length' => 64, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -- $this->show_form(_('Nickname must have only lowercase letters and numbers and no spaces.')); -- return; -- } -+ if (!Validate::string($nickname, array('min_length' => 1, -+ 'max_length' => 64, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -+ $this->show_form(_('Nickname must have only lowercase letters and numbers and no spaces.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 186 -- if (!User::allowed_nickname($nickname)) { -- $this->show_form(_('Nickname not allowed.')); -- return; -- } -+ if (!User::allowed_nickname($nickname)) { -+ $this->show_form(_('Nickname not allowed.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 191 -- if (User::staticGet('nickname', $nickname)) { -- $this->show_form(_('Nickname already in use. Try another one.')); -- return; -- } -+ if (User::staticGet('nickname', $nickname)) { -+ $this->show_form(_('Nickname already in use. Try another one.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 196 -- list($display, $canonical, $sreg) = $this->get_saved_values(); -+ list($display, $canonical, $sreg) = $this->get_saved_values(); -hunk ./actions/finishopenidlogin.php 198 -- if (!$display || !$canonical) { -- common_server_error(_('Stored OpenID not found.')); -- return; -- } -+ if (!$display || !$canonical) { -+ common_server_error(_('Stored OpenID not found.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 203 -- # Possible race condition... let's be paranoid -+ # Possible race condition... let's be paranoid -hunk ./actions/finishopenidlogin.php 205 -- $other = oid_get_user($canonical); -+ $other = oid_get_user($canonical); -hunk ./actions/finishopenidlogin.php 207 -- if ($other) { -- common_server_error(_('Creating new account for OpenID that already has a user.')); -- return; -- } -+ if ($other) { -+ common_server_error(_('Creating new account for OpenID that already has a user.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 212 -- if ($sreg['country']) { -- if ($sreg['postcode']) { -- # XXX: use postcode to get city and region -- # XXX: also, store postcode somewhere -- it's valuable! -- $location = $sreg['postcode'] . ', ' . $sreg['country']; -- } else { -- $location = $sreg['country']; -- } -- } -+ if ($sreg['country']) { -+ if ($sreg['postcode']) { -+ # XXX: use postcode to get city and region -+ # XXX: also, store postcode somewhere -- it's valuable! -+ $location = $sreg['postcode'] . ', ' . $sreg['country']; -+ } else { -+ $location = $sreg['country']; -+ } -+ } -hunk ./actions/finishopenidlogin.php 222 -- if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) { -- $fullname = $sreg['fullname']; -- } -+ if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) { -+ $fullname = $sreg['fullname']; -+ } -hunk ./actions/finishopenidlogin.php 226 -- if ($sreg['email'] && Validate::email($sreg['email'], true)) { -- $email = $sreg['email']; -- } -+ if ($sreg['email'] && Validate::email($sreg['email'], true)) { -+ $email = $sreg['email']; -+ } -hunk ./actions/finishopenidlogin.php 230 -- # XXX: add language -- # XXX: add timezone -+ # XXX: add language -+ # XXX: add timezone -hunk ./actions/finishopenidlogin.php 233 -- $user = User::register(array('nickname' => $nickname, -- 'email' => $email, -- 'fullname' => $fullname, -- 'location' => $location)); -+ $user = User::register(array('nickname' => $nickname, -+ 'email' => $email, -+ 'fullname' => $fullname, -+ 'location' => $location)); -hunk ./actions/finishopenidlogin.php 238 -- $result = oid_link_user($user->id, $canonical, $display); -+ $result = oid_link_user($user->id, $canonical, $display); -hunk ./actions/finishopenidlogin.php 240 -- oid_set_last($display); -- common_set_user($user); -- common_real_login(true); -+ oid_set_last($display); -+ common_set_user($user); -+ common_real_login(true); -hunk ./actions/finishopenidlogin.php 244 -- common_rememberme($user); -- } -+ common_rememberme($user); -+ } -hunk ./actions/finishopenidlogin.php 247 -- common_redirect(common_local_url('showstream', array('nickname' => $user->nickname))); -- } -+ common_redirect(common_local_url('showstream', array('nickname' => $user->nickname))); -+ } -hunk ./actions/finishopenidlogin.php 250 -- function connect_user() { -+ function connect_user() { -hunk ./actions/finishopenidlogin.php 252 -- $nickname = $this->trimmed('nickname'); -- $password = $this->trimmed('password'); -+ $nickname = $this->trimmed('nickname'); -+ $password = $this->trimmed('password'); -hunk ./actions/finishopenidlogin.php 255 -- if (!common_check_user($nickname, $password)) { -- $this->show_form(_('Invalid username or password.')); -- return; -- } -+ if (!common_check_user($nickname, $password)) { -+ $this->show_form(_('Invalid username or password.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 260 -- # They're legit! -+ # They're legit! -hunk ./actions/finishopenidlogin.php 262 -- $user = User::staticGet('nickname', $nickname); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/finishopenidlogin.php 264 -- list($display, $canonical, $sreg) = $this->get_saved_values(); -+ list($display, $canonical, $sreg) = $this->get_saved_values(); -hunk ./actions/finishopenidlogin.php 266 -- if (!$display || !$canonical) { -- common_server_error(_('Stored OpenID not found.')); -- return; -- } -+ if (!$display || !$canonical) { -+ common_server_error(_('Stored OpenID not found.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 271 -- $result = oid_link_user($user->id, $canonical, $display); -+ $result = oid_link_user($user->id, $canonical, $display); -hunk ./actions/finishopenidlogin.php 273 -- if (!$result) { -- common_server_error(_('Error connecting user to OpenID.')); -- return; -- } -+ if (!$result) { -+ common_server_error(_('Error connecting user to OpenID.')); -+ return; -+ } -hunk ./actions/finishopenidlogin.php 278 -- oid_update_user($user, $sreg); -- oid_set_last($display); -- common_set_user($user); -- common_real_login(true); -+ oid_update_user($user, $sreg); -+ oid_set_last($display); -+ common_set_user($user); -+ common_real_login(true); -hunk ./actions/finishopenidlogin.php 283 -- common_rememberme($user); -- } -- unset($_SESSION['openid_rememberme']); -- $this->go_home($user->nickname); -- } -+ common_rememberme($user); -+ } -+ unset($_SESSION['openid_rememberme']); -+ $this->go_home($user->nickname); -+ } -hunk ./actions/finishopenidlogin.php 289 -- function go_home($nickname) { -- $url = common_get_returnto(); -- if ($url) { -- # We don't have to return to it again -- common_set_returnto(NULL); -- } else { -- $url = common_local_url('all', -- array('nickname' => -- $nickname)); -- } -- common_redirect($url); -- } -+ function go_home($nickname) { -+ $url = common_get_returnto(); -+ if ($url) { -+ # We don't have to return to it again -+ common_set_returnto(NULL); -+ } else { -+ $url = common_local_url('all', -+ array('nickname' => -+ $nickname)); -+ } -+ common_redirect($url); -+ } -hunk ./actions/finishopenidlogin.php 302 -- function best_new_nickname($display, $sreg) { -+ function best_new_nickname($display, $sreg) { -hunk ./actions/finishopenidlogin.php 304 -- # Try the passed-in nickname -+ # Try the passed-in nickname -hunk ./actions/finishopenidlogin.php 306 -- if ($sreg['nickname']) { -- $nickname = $this->nicknamize($sreg['nickname']); -- if ($this->is_new_nickname($nickname)) { -- return $nickname; -- } -- } -+ if ($sreg['nickname']) { -+ $nickname = $this->nicknamize($sreg['nickname']); -+ if ($this->is_new_nickname($nickname)) { -+ return $nickname; -+ } -+ } -hunk ./actions/finishopenidlogin.php 313 -- # Try the full name -+ # Try the full name -hunk ./actions/finishopenidlogin.php 315 -- if ($sreg['fullname']) { -- $fullname = $this->nicknamize($sreg['fullname']); -- if ($this->is_new_nickname($fullname)) { -- return $fullname; -- } -- } -+ if ($sreg['fullname']) { -+ $fullname = $this->nicknamize($sreg['fullname']); -+ if ($this->is_new_nickname($fullname)) { -+ return $fullname; -+ } -+ } -hunk ./actions/finishopenidlogin.php 322 -- # Try the URL -+ # Try the URL -hunk ./actions/finishopenidlogin.php 324 -- $from_url = $this->openid_to_nickname($display); -+ $from_url = $this->openid_to_nickname($display); -hunk ./actions/finishopenidlogin.php 326 -- if ($from_url && $this->is_new_nickname($from_url)) { -- return $from_url; -- } -+ if ($from_url && $this->is_new_nickname($from_url)) { -+ return $from_url; -+ } -hunk ./actions/finishopenidlogin.php 330 -- # XXX: others? -+ # XXX: others? +- function show_form($error=NULL, $username=NULL) { +- common_show_header(_('OpenID Account Setup'), NULL, $error, ++ function show_form($error=null, $username=null) { ++ common_show_header(_('OpenID Account Setup'), null, $error, +hunk ./actions/finishopenidlogin.php 73 +- common_element('h2', NULL, ++ common_element('h2', null, +hunk ./actions/finishopenidlogin.php 75 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/finishopenidlogin.php 91 +- common_element('h2', NULL, ++ common_element('h2', null, +hunk ./actions/finishopenidlogin.php 93 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/finishopenidlogin.php 144 +- $this->show_form(NULL, $this->best_new_nickname($display, $sreg)); ++ $this->show_form(null, $this->best_new_nickname($display, $sreg)); +hunk ./actions/finishopenidlogin.php 151 +- common_element('p', NULL, $msg); ++ common_element('p', null, $msg); +hunk ./actions/finishopenidlogin.php 293 +- common_set_returnto(NULL); ++ common_set_returnto(null); hunk ./actions/finishopenidlogin.php 332 -- return NULL; -- } -+ return NULL; -+ } -hunk ./actions/finishopenidlogin.php 335 -- function is_new_nickname($str) { -- if (!Validate::string($str, array('min_length' => 1, -- 'max_length' => 64, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -- return false; -- } -- if (!User::allowed_nickname($str)) { -- return false; -- } -- if (User::staticGet('nickname', $str)) { -- return false; -- } -- return true; -- } -+ function is_new_nickname($str) { -+ if (!Validate::string($str, array('min_length' => 1, -+ 'max_length' => 64, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -+ return false; -+ } -+ if (!User::allowed_nickname($str)) { -+ return false; -+ } -+ if (User::staticGet('nickname', $str)) { -+ return false; -+ } -+ return true; -+ } -hunk ./actions/finishopenidlogin.php 350 -- function openid_to_nickname($openid) { -+ function openid_to_nickname($openid) { -hunk ./actions/finishopenidlogin.php 352 -- return $this->xri_to_nickname($openid); -- } else { -- return $this->url_to_nickname($openid); -- } -- } -+ return $this->xri_to_nickname($openid); -+ } else { -+ return $this->url_to_nickname($openid); -+ } -+ } -hunk ./actions/finishopenidlogin.php 358 -- # We try to use an OpenID URL as a legal Laconica user name in this order -- # 1. Plain hostname, like http://evanp.myopenid.com/ -- # 2. One element in path, like http://profile.typekey.com/EvanProdromou/ -- # or http://getopenid.com/evanprodromou -+ # We try to use an OpenID URL as a legal Laconica user name in this order -+ # 1. Plain hostname, like http://evanp.myopenid.com/ -+ # 2. One element in path, like http://profile.typekey.com/EvanProdromou/ -+ # or http://getopenid.com/evanprodromou -hunk ./actions/finishopenidlogin.php 364 -- static $bad = array('query', 'user', 'password', 'port', 'fragment'); -+ static $bad = array('query', 'user', 'password', 'port', 'fragment'); -hunk ./actions/finishopenidlogin.php 366 -- $parts = parse_url($openid); -+ $parts = parse_url($openid); -hunk ./actions/finishopenidlogin.php 368 -- # If any of these parts exist, this won't work -+ # If any of these parts exist, this won't work -hunk ./actions/finishopenidlogin.php 370 -- foreach ($bad as $badpart) { -- if (array_key_exists($badpart, $parts)) { -- return NULL; -- } -- } -+ foreach ($bad as $badpart) { -+ if (array_key_exists($badpart, $parts)) { -+ return NULL; -+ } -+ } -hunk ./actions/finishopenidlogin.php 376 -- # We just have host and/or path -+ # We just have host and/or path -hunk ./actions/finishopenidlogin.php 378 -- # If it's just a host... -- if (array_key_exists('host', $parts) && -- (!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0)) -- { -- $hostparts = explode('.', $parts['host']); -+ # If it's just a host... -+ if (array_key_exists('host', $parts) && -+ (!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0)) -+ { -+ $hostparts = explode('.', $parts['host']); -hunk ./actions/finishopenidlogin.php 384 -- # Try to catch common idiom of nickname.service.tld -+ # Try to catch common idiom of nickname.service.tld -hunk ./actions/finishopenidlogin.php 386 -- if ((count($hostparts) > 2) && -- (strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au -- (strcmp($hostparts[0], 'www') != 0)) -- { -- return $this->nicknamize($hostparts[0]); -- } else { -- # Do the whole hostname -- return $this->nicknamize($parts['host']); -- } -- } else { -- if (array_key_exists('path', $parts)) { -- # Strip starting, ending slashes -- $path = preg_replace('@/$@', '', $parts['path']); -- $path = preg_replace('@^/@', '', $path); -- if (strpos($path, '/') === false) { -- return $this->nicknamize($path); -- } -- } -- } -+ if ((count($hostparts) > 2) && -+ (strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au -+ (strcmp($hostparts[0], 'www') != 0)) -+ { -+ return $this->nicknamize($hostparts[0]); -+ } else { -+ # Do the whole hostname -+ return $this->nicknamize($parts['host']); -+ } -+ } else { -+ if (array_key_exists('path', $parts)) { -+ # Strip starting, ending slashes -+ $path = preg_replace('@/$@', '', $parts['path']); -+ $path = preg_replace('@^/@', '', $path); -+ if (strpos($path, '/') === false) { -+ return $this->nicknamize($path); -+ } -+ } -+ } +- return NULL; ++ return null; +hunk ./actions/finishopenidlogin.php 372 +- return NULL; ++ return null; hunk ./actions/finishopenidlogin.php 406 -- return NULL; -- } -+ return NULL; -+ } -hunk ./actions/finishopenidlogin.php 409 -- function xri_to_nickname($xri) { -- $base = $this->xri_base($xri); -+ function xri_to_nickname($xri) { -+ $base = $this->xri_base($xri); -hunk ./actions/finishopenidlogin.php 412 -- if (!$base) { -- return NULL; -- } else { -- # =evan.prodromou -- # or @gratis*evan.prodromou -- $parts = explode('*', substr($base, 1)); -- return $this->nicknamize(array_pop($parts)); -- } -- } -+ if (!$base) { -+ return NULL; -+ } else { -+ # =evan.prodromou -+ # or @gratis*evan.prodromou -+ $parts = explode('*', substr($base, 1)); -+ return $this->nicknamize(array_pop($parts)); -+ } -+ } -hunk ./actions/finishopenidlogin.php 422 -- function xri_base($xri) { -- if (substr($xri, 0, 6) == 'xri://') { -- return substr($xri, 6); -- } else { -- return $xri; -- } -- } -+ function xri_base($xri) { -+ if (substr($xri, 0, 6) == 'xri://') { -+ return substr($xri, 6); -+ } else { -+ return $xri; -+ } -+ } -hunk ./actions/finishopenidlogin.php 430 -- # Given a string, try to make it work as a nickname -+ # Given a string, try to make it work as a nickname -hunk ./actions/finishopenidlogin.php 432 -- function nicknamize($str) { -- $str = preg_replace('/\W/', '', $str); -- return strtolower($str); -- } -+ function nicknamize($str) { -+ $str = preg_replace('/\W/', '', $str); -+ return strtolower($str); -+ } -hunk ./actions/finishremotesubscribe.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/finishremotesubscribe.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/finishremotesubscribe.php 30 -- if (common_logged_in()) { -- common_user_error(_('You can use the local subscription!')); -- return; -- } -+ if (common_logged_in()) { -+ common_user_error(_('You can use the local subscription!')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 35 -- $omb = $_SESSION['oauth_authorization_request']; -+ $omb = $_SESSION['oauth_authorization_request']; -hunk ./actions/finishremotesubscribe.php 37 -- if (!$omb) { -- common_user_error(_('Not expecting this response!')); -- return; -- } -+ if (!$omb) { -+ common_user_error(_('Not expecting this response!')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 42 -- common_debug('stored request: '.print_r($omb,true), __FILE__); -+ common_debug('stored request: '.print_r($omb,true), __FILE__); -hunk ./actions/finishremotesubscribe.php 44 -- common_remove_magic_from_request(); -- $req = OAuthRequest::from_request(); -+ common_remove_magic_from_request(); -+ $req = OAuthRequest::from_request(); -hunk ./actions/finishremotesubscribe.php 47 -- $token = $req->get_parameter('oauth_token'); -+ $token = $req->get_parameter('oauth_token'); -hunk ./actions/finishremotesubscribe.php 49 -- # I think this is the success metric -+ # I think this is the success metric -hunk ./actions/finishremotesubscribe.php 51 -- if ($token != $omb['token']) { -- common_user_error(_('Not authorized.')); -- return; -- } -+ if ($token != $omb['token']) { -+ common_user_error(_('Not authorized.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 56 -- $version = $req->get_parameter('omb_version'); -+ $version = $req->get_parameter('omb_version'); -hunk ./actions/finishremotesubscribe.php 58 -- if ($version != OMB_VERSION_01) { -- common_user_error(_('Unknown version of OMB protocol.')); -- return; -- } -+ if ($version != OMB_VERSION_01) { -+ common_user_error(_('Unknown version of OMB protocol.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 63 -- $nickname = $req->get_parameter('omb_listener_nickname'); -+ $nickname = $req->get_parameter('omb_listener_nickname'); -hunk ./actions/finishremotesubscribe.php 65 -- if (!$nickname) { -- common_user_error(_('No nickname provided by remote server.')); -- return; -- } -+ if (!$nickname) { -+ common_user_error(_('No nickname provided by remote server.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 70 -- $profile_url = $req->get_parameter('omb_listener_profile'); -+ $profile_url = $req->get_parameter('omb_listener_profile'); -hunk ./actions/finishremotesubscribe.php 72 -- if (!$profile_url) { -- common_user_error(_('No profile URL returned by server.')); -- return; -- } -+ if (!$profile_url) { -+ common_user_error(_('No profile URL returned by server.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 77 -- if (!Validate::uri($profile_url, array('allowed_schemes' => array('http', 'https')))) { -- common_user_error(_('Invalid profile URL returned by server.')); -- return; -- } -+ if (!Validate::uri($profile_url, array('allowed_schemes' => array('http', 'https')))) { -+ common_user_error(_('Invalid profile URL returned by server.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 82 -- if ($profile_url == common_local_url('showstream', array('nickname' => $nickname))) { -- common_user_error(_('You can use the local subscription!')); -- return; -- } -+ if ($profile_url == common_local_url('showstream', array('nickname' => $nickname))) { -+ common_user_error(_('You can use the local subscription!')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 87 -- common_debug('listenee: "'.$omb['listenee'].'"', __FILE__); -+ common_debug('listenee: "'.$omb['listenee'].'"', __FILE__); -hunk ./actions/finishremotesubscribe.php 89 -- $user = User::staticGet('nickname', $omb['listenee']); -+ $user = User::staticGet('nickname', $omb['listenee']); -hunk ./actions/finishremotesubscribe.php 91 -- if (!$user) { -- common_user_error(_('User being listened to doesn\'t exist.')); -- return; -- } -+ if (!$user) { -+ common_user_error(_('User being listened to doesn\'t exist.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 96 -- $other = User::staticGet('uri', $omb['listener']); -+ $other = User::staticGet('uri', $omb['listener']); -hunk ./actions/finishremotesubscribe.php 98 -- if ($other) { -- common_user_error(_('You can use the local subscription!')); -- return; -- } -+ if ($other) { -+ common_user_error(_('You can use the local subscription!')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 103 -- $fullname = $req->get_parameter('omb_listener_fullname'); -- $homepage = $req->get_parameter('omb_listener_homepage'); -- $bio = $req->get_parameter('omb_listener_bio'); -- $location = $req->get_parameter('omb_listener_location'); -- $avatar_url = $req->get_parameter('omb_listener_avatar'); -+ $fullname = $req->get_parameter('omb_listener_fullname'); -+ $homepage = $req->get_parameter('omb_listener_homepage'); -+ $bio = $req->get_parameter('omb_listener_bio'); -+ $location = $req->get_parameter('omb_listener_location'); -+ $avatar_url = $req->get_parameter('omb_listener_avatar'); -hunk ./actions/finishremotesubscribe.php 109 -- list($newtok, $newsecret) = $this->access_token($omb); -+ list($newtok, $newsecret) = $this->access_token($omb); -hunk ./actions/finishremotesubscribe.php 111 -- if (!$newtok || !$newsecret) { -- common_user_error(_('Couldn\'t convert request tokens to access tokens.')); -- return; -- } -+ if (!$newtok || !$newsecret) { -+ common_user_error(_('Couldn\'t convert request tokens to access tokens.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 116 -- # XXX: possible attack point; subscribe and return someone else's profile URI -+ # XXX: possible attack point; subscribe and return someone else's profile URI -hunk ./actions/finishremotesubscribe.php 118 -- $remote = Remote_profile::staticGet('uri', $omb['listener']); -+ $remote = Remote_profile::staticGet('uri', $omb['listener']); -hunk ./actions/finishremotesubscribe.php 120 -- if ($remote) { -- $exists = true; -- $profile = Profile::staticGet($remote->id); -- $orig_remote = clone($remote); -- $orig_profile = clone($profile); -- # XXX: compare current postNotice and updateProfile URLs to the ones -- # stored in the DB to avoid (possibly...) above attack -- } else { -- $exists = false; -- $remote = new Remote_profile(); -- $remote->uri = $omb['listener']; -- $profile = new Profile(); -- } -+ if ($remote) { -+ $exists = true; -+ $profile = Profile::staticGet($remote->id); -+ $orig_remote = clone($remote); -+ $orig_profile = clone($profile); -+ # XXX: compare current postNotice and updateProfile URLs to the ones -+ # stored in the DB to avoid (possibly...) above attack -+ } else { -+ $exists = false; -+ $remote = new Remote_profile(); -+ $remote->uri = $omb['listener']; -+ $profile = new Profile(); -+ } -hunk ./actions/finishremotesubscribe.php 134 -- $profile->nickname = $nickname; -- $profile->profileurl = $profile_url; -+ $profile->nickname = $nickname; -+ $profile->profileurl = $profile_url; -hunk ./actions/finishremotesubscribe.php 137 -- if ($fullname) { -- $profile->fullname = $fullname; -- } -- if ($homepage) { -- $profile->homepage = $homepage; -- } -- if ($bio) { -- $profile->bio = $bio; -- } -- if ($location) { -- $profile->location = $location; -- } -+ if ($fullname) { -+ $profile->fullname = $fullname; -+ } -+ if ($homepage) { -+ $profile->homepage = $homepage; -+ } -+ if ($bio) { -+ $profile->bio = $bio; -+ } -+ if ($location) { -+ $profile->location = $location; -+ } -hunk ./actions/finishremotesubscribe.php 150 -- if ($exists) { -- $profile->update($orig_profile); -- } else { -- $profile->created = DB_DataObject_Cast::dateTime(); # current time -- $id = $profile->insert(); -- if (!$id) { -- common_server_error(_('Error inserting new profile')); -- return; -- } -- $remote->id = $id; -- } -+ if ($exists) { -+ $profile->update($orig_profile); -+ } else { -+ $profile->created = DB_DataObject_Cast::dateTime(); # current time -+ $id = $profile->insert(); -+ if (!$id) { -+ common_server_error(_('Error inserting new profile')); -+ return; -+ } -+ $remote->id = $id; -+ } -hunk ./actions/finishremotesubscribe.php 162 -- if ($avatar_url) { -- if (!$this->add_avatar($profile, $avatar_url)) { -- common_server_error(_('Error inserting avatar')); -- return; -- } -- } -+ if ($avatar_url) { -+ if (!$this->add_avatar($profile, $avatar_url)) { -+ common_server_error(_('Error inserting avatar')); -+ return; -+ } -+ } -hunk ./actions/finishremotesubscribe.php 169 -- $remote->postnoticeurl = $omb['post_notice_url']; -- $remote->updateprofileurl = $omb['update_profile_url']; -+ $remote->postnoticeurl = $omb['post_notice_url']; -+ $remote->updateprofileurl = $omb['update_profile_url']; -hunk ./actions/finishremotesubscribe.php 172 -- if ($exists) { -- if (!$remote->update($orig_remote)) { -- common_server_error(_('Error updating remote profile')); -- return; -- } -- } else { -- $remote->created = DB_DataObject_Cast::dateTime(); # current time -- if (!$remote->insert()) { -- common_server_error(_('Error inserting remote profile')); -- return; -- } -- } -+ if ($exists) { -+ if (!$remote->update($orig_remote)) { -+ common_server_error(_('Error updating remote profile')); -+ return; -+ } -+ } else { -+ $remote->created = DB_DataObject_Cast::dateTime(); # current time -+ if (!$remote->insert()) { -+ common_server_error(_('Error inserting remote profile')); -+ return; -+ } -+ } -hunk ./actions/finishremotesubscribe.php 190 -- $sub = new Subscription(); -+ $sub = new Subscription(); -hunk ./actions/finishremotesubscribe.php 192 -- $sub->subscriber = $remote->id; -- $sub->subscribed = $user->id; -+ $sub->subscriber = $remote->id; -+ $sub->subscribed = $user->id; -hunk ./actions/finishremotesubscribe.php 205 -- $sub->token = $newtok; -- $sub->secret = $newsecret; -+ $sub->token = $newtok; -+ $sub->secret = $newsecret; -hunk ./actions/finishremotesubscribe.php 214 -- if (!$result) { -+ if (!$result) { -hunk ./actions/finishremotesubscribe.php 216 -- common_user_error(_('Couldn\'t insert new subscription.')); -- return; -- } -+ common_user_error(_('Couldn\'t insert new subscription.')); -+ return; -+ } -hunk ./actions/finishremotesubscribe.php 220 -- # Notify user, if necessary -+ # Notify user, if necessary -hunk ./actions/finishremotesubscribe.php 222 -- mail_subscribe_notify_profile($user, $profile); -+ mail_subscribe_notify_profile($user, $profile); -hunk ./actions/finishremotesubscribe.php 224 -- # Clear the data -- unset($_SESSION['oauth_authorization_request']); -+ # Clear the data -+ unset($_SESSION['oauth_authorization_request']); -hunk ./actions/finishremotesubscribe.php 227 -- # If we show subscriptions in reverse chron order, this should -- # show up close to the top of the page -+ # If we show subscriptions in reverse chron order, this should -+ # show up close to the top of the page -hunk ./actions/finishremotesubscribe.php 230 -- common_redirect(common_local_url('subscribers', array('nickname' => -- $user->nickname))); -- } -+ common_redirect(common_local_url('subscribers', array('nickname' => -+ $user->nickname))); -+ } -hunk ./actions/finishremotesubscribe.php 234 -- function add_avatar($profile, $url) { -- $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar'); -- copy($url, $temp_filename); -- return $profile->setOriginal($temp_filename); -- } -+ function add_avatar($profile, $url) { -+ $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar'); -+ copy($url, $temp_filename); -+ return $profile->setOriginal($temp_filename); -+ } -hunk ./actions/finishremotesubscribe.php 240 -- function access_token($omb) { -+ function access_token($omb) { -hunk ./actions/finishremotesubscribe.php 242 -- common_debug('starting request for access token', __FILE__); -+ common_debug('starting request for access token', __FILE__); -hunk ./actions/finishremotesubscribe.php 244 -- $con = omb_oauth_consumer(); -- $tok = new OAuthToken($omb['token'], $omb['secret']); -+ $con = omb_oauth_consumer(); -+ $tok = new OAuthToken($omb['token'], $omb['secret']); -hunk ./actions/finishremotesubscribe.php 247 -- common_debug('using request token "'.$tok.'"', __FILE__); -+ common_debug('using request token "'.$tok.'"', __FILE__); -hunk ./actions/finishremotesubscribe.php 249 -- $url = $omb['access_token_url']; -+ $url = $omb['access_token_url']; -hunk ./actions/finishremotesubscribe.php 251 -- common_debug('using access token url "'.$url.'"', __FILE__); -+ common_debug('using access token url "'.$url.'"', __FILE__); -hunk ./actions/finishremotesubscribe.php 253 -- # XXX: Is this the right thing to do? Strip off GET params and make them -- # POST params? Seems wrong to me. -+ # XXX: Is this the right thing to do? Strip off GET params and make them -+ # POST params? Seems wrong to me. -hunk ./actions/finishremotesubscribe.php 256 -- $parsed = parse_url($url); -- $params = array(); -- parse_str($parsed['query'], $params); -+ $parsed = parse_url($url); -+ $params = array(); -+ parse_str($parsed['query'], $params); -hunk ./actions/finishremotesubscribe.php 260 -- $req = OAuthRequest::from_consumer_and_token($con, $tok, "POST", $url, $params); -+ $req = OAuthRequest::from_consumer_and_token($con, $tok, "POST", $url, $params); -hunk ./actions/finishremotesubscribe.php 262 -- $req->set_parameter('omb_version', OMB_VERSION_01); -+ $req->set_parameter('omb_version', OMB_VERSION_01); -hunk ./actions/finishremotesubscribe.php 264 -- # XXX: test to see if endpoint accepts this signature method -+ # XXX: test to see if endpoint accepts this signature method -hunk ./actions/finishremotesubscribe.php 266 -- $req->sign_request(omb_hmac_sha1(), $con, $tok); -+ $req->sign_request(omb_hmac_sha1(), $con, $tok); -hunk ./actions/finishremotesubscribe.php 268 -- # We re-use this tool's fetcher, since it's pretty good -+ # We re-use this tool's fetcher, since it's pretty good -hunk ./actions/finishremotesubscribe.php 270 -- common_debug('posting to access token url "'.$req->get_normalized_http_url().'"', __FILE__); -- common_debug('posting request data "'.$req->to_postdata().'"', __FILE__); -+ common_debug('posting to access token url "'.$req->get_normalized_http_url().'"', __FILE__); -+ common_debug('posting request data "'.$req->to_postdata().'"', __FILE__); -hunk ./actions/finishremotesubscribe.php 273 -- $fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); -- $result = $fetcher->post($req->get_normalized_http_url(), -- $req->to_postdata(), -+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); -+ $result = $fetcher->post($req->get_normalized_http_url(), -+ $req->to_postdata(), -hunk ./actions/finishremotesubscribe.php 278 -- common_debug('got result: "'.print_r($result,TRUE).'"', __FILE__); -+ common_debug('got result: "'.print_r($result,TRUE).'"', __FILE__); -hunk ./actions/finishremotesubscribe.php 280 -- if ($result->status != 200) { -- return NULL; -- } -+ if ($result->status != 200) { -+ return NULL; -+ } -hunk ./actions/finishremotesubscribe.php 284 -- parse_str($result->body, $return); -+ parse_str($result->body, $return); -hunk ./actions/finishremotesubscribe.php 286 -- return array($return['oauth_token'], $return['oauth_token_secret']); -- } -+ return array($return['oauth_token'], $return['oauth_token_secret']); -+ } -hunk ./actions/foaf.php 28 -- function is_readonly() { -- return true; -- } -+ function is_readonly() { -+ return true; -+ } -hunk ./actions/foaf.php 32 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/foaf.php 35 -- $nickname = $this->trimmed('nickname'); -+ $nickname = $this->trimmed('nickname'); -hunk ./actions/foaf.php 37 -- $user = User::staticGet('nickname', $nickname); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/foaf.php 39 -- if (!$user) { -- common_user_error(_('No such user.'), 404); -- return; -- } -+ if (!$user) { -+ common_user_error(_('No such user.'), 404); -+ return; -+ } -hunk ./actions/foaf.php 44 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/foaf.php 46 -- if (!$profile) { -- common_server_error(_('User has no profile.'), 500); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.'), 500); -+ return; -+ } -hunk ./actions/foaf.php 51 -- header('Content-Type: application/rdf+xml'); -+ header('Content-Type: application/rdf+xml'); -hunk ./actions/foaf.php 53 -- common_start_xml(); -- common_element_start('rdf:RDF', array('xmlns:rdf' => -- 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', -- 'xmlns:rdfs' => -- 'http://www.w3.org/2000/01/rdf-schema#', -- 'xmlns:geo' => -- 'http://www.w3.org/2003/01/geo/wgs84_pos#', -- 'xmlns' => 'http://xmlns.com/foaf/0.1/')); -+ common_start_xml(); -+ common_element_start('rdf:RDF', array('xmlns:rdf' => -+ 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', -+ 'xmlns:rdfs' => -+ 'http://www.w3.org/2000/01/rdf-schema#', -+ 'xmlns:geo' => -+ 'http://www.w3.org/2003/01/geo/wgs84_pos#', -+ 'xmlns' => 'http://xmlns.com/foaf/0.1/')); -hunk ./actions/foaf.php 62 -- # This is the document about the user -+ # This is the document about the user -hunk ./actions/foaf.php 64 -- $this->show_ppd('', $user->uri); -+ $this->show_ppd('', $user->uri); -hunk ./actions/foaf.php 66 -- # XXX: might not be a person -- common_element_start('Person', array('rdf:about' => -- $user->uri)); -- common_element('mbox_sha1sum', NULL, sha1('mailto:' . $user->email)); -- if ($profile->fullname) { -- common_element('name', NULL, $profile->fullname); -- } -- if ($profile->homepage) { -- common_element('homepage', array('rdf:resource' => $profile->homepage)); -- } -- if ($profile->bio) { -- common_element('rdfs:comment', NULL, $profile->bio); -- } -- # XXX: more structured location data -- if ($profile->location) { -- common_element_start('based_near'); -- common_element_start('geo:SpatialThing'); -- common_element('name', NULL, $profile->location); -- common_element_end('geo:SpatialThing'); -- common_element_end('based_near'); -- } -+ # XXX: might not be a person -+ common_element_start('Person', array('rdf:about' => -+ $user->uri)); -+ common_element('mbox_sha1sum', NULL, sha1('mailto:' . $user->email)); -+ if ($profile->fullname) { -+ common_element('name', NULL, $profile->fullname); -+ } -+ if ($profile->homepage) { -+ common_element('homepage', array('rdf:resource' => $profile->homepage)); -+ } -+ if ($profile->bio) { -+ common_element('rdfs:comment', NULL, $profile->bio); -+ } -+ # XXX: more structured location data -+ if ($profile->location) { -+ common_element_start('based_near'); -+ common_element_start('geo:SpatialThing'); -+ common_element('name', NULL, $profile->location); -+ common_element_end('geo:SpatialThing'); -+ common_element_end('based_near'); -+ } -hunk ./actions/foaf.php 88 -- $this->show_microblogging_account($profile, common_root_url()); -+ $this->show_microblogging_account($profile, common_root_url()); -hunk ./actions/foaf.php 90 -- $avatar = $profile->getOriginalAvatar(); -+ $avatar = $profile->getOriginalAvatar(); -hunk ./actions/foaf.php 92 -- if ($avatar) { -- common_element_start('img'); -- common_element_start('Image', array('rdf:about' => $avatar->url)); -- foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { -- $scaled = $profile->getAvatar($size); -- if (!$scaled->original) { # sometimes the original has one of our scaled sizes -- common_element_start('thumbnail'); -- common_element('Image', array('rdf:about' => $scaled->url)); -- common_element_end('thumbnail'); -- } -- } -- common_element_end('Image'); -- common_element_end('img'); -- } -+ if ($avatar) { -+ common_element_start('img'); -+ common_element_start('Image', array('rdf:about' => $avatar->url)); -+ foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { -+ $scaled = $profile->getAvatar($size); -+ if (!$scaled->original) { # sometimes the original has one of our scaled sizes -+ common_element_start('thumbnail'); -+ common_element('Image', array('rdf:about' => $scaled->url)); -+ common_element_end('thumbnail'); -+ } -+ } -+ common_element_end('Image'); -+ common_element_end('img'); -+ } -hunk ./actions/foaf.php 107 -- # Get people user is subscribed to -+ # Get people user is subscribed to -hunk ./actions/foaf.php 109 -- $person = array(); -+ $person = array(); -hunk ./actions/foaf.php 111 -- $sub = new Subscription(); -- $sub->subscriber = $profile->id; -- $sub->whereAdd('subscriber != subscribed'); -- -- if ($sub->find()) { -- while ($sub->fetch()) { -- if ($sub->token) { -- $other = Remote_profile::staticGet('id', $sub->subscribed); -- } else { -- $other = User::staticGet('id', $sub->subscribed); -- } -- if (!$other) { -- common_debug('Got a bad subscription: '.print_r($sub,TRUE)); -- continue; -- } -- common_element('knows', array('rdf:resource' => $other->uri)); -- $person[$other->uri] = array(LISTENEE, $other); -- } -- } -+ $sub = new Subscription(); -+ $sub->subscriber = $profile->id; -+ $sub->whereAdd('subscriber != subscribed'); -+ -+ if ($sub->find()) { -+ while ($sub->fetch()) { -+ if ($sub->token) { -+ $other = Remote_profile::staticGet('id', $sub->subscribed); -+ } else { -+ $other = User::staticGet('id', $sub->subscribed); -+ } -+ if (!$other) { -+ common_debug('Got a bad subscription: '.print_r($sub,TRUE)); -+ continue; -+ } -+ common_element('knows', array('rdf:resource' => $other->uri)); -+ $person[$other->uri] = array(LISTENEE, $other); -+ } -+ } -hunk ./actions/foaf.php 131 -- # Get people who subscribe to user -+ # Get people who subscribe to user -hunk ./actions/foaf.php 133 -- $sub = new Subscription(); -- $sub->subscribed = $profile->id; -- $sub->whereAdd('subscriber != subscribed'); -+ $sub = new Subscription(); -+ $sub->subscribed = $profile->id; -+ $sub->whereAdd('subscriber != subscribed'); -hunk ./actions/foaf.php 137 -- if ($sub->find()) { -- while ($sub->fetch()) { -- if ($sub->token) { -- $other = Remote_profile::staticGet('id', $sub->subscriber); -- } else { -- $other = User::staticGet('id', $sub->subscriber); -- } -- if (!$other) { -- common_debug('Got a bad subscription: '.print_r($sub,TRUE)); -- continue; -- } -- if (array_key_exists($other->uri, $person)) { -- $person[$other->uri][0] = BOTH; -- } else { -- $person[$other->uri] = array(LISTENER, $other); -- } -- } -- } -+ if ($sub->find()) { -+ while ($sub->fetch()) { -+ if ($sub->token) { -+ $other = Remote_profile::staticGet('id', $sub->subscriber); -+ } else { -+ $other = User::staticGet('id', $sub->subscriber); -+ } -+ if (!$other) { -+ common_debug('Got a bad subscription: '.print_r($sub,TRUE)); -+ continue; -+ } -+ if (array_key_exists($other->uri, $person)) { -+ $person[$other->uri][0] = BOTH; -+ } else { -+ $person[$other->uri] = array(LISTENER, $other); -+ } -+ } -+ } -hunk ./actions/foaf.php 156 -- common_element_end('Person'); -+ common_element_end('Person'); -hunk ./actions/foaf.php 158 -- foreach ($person as $uri => $p) { -- $foaf_url = NULL; -- if ($p[1] instanceof User) { -- $foaf_url = common_local_url('foaf', array('nickname' => $p[1]->nickname)); -- } -- $profile = Profile::staticGet($p[1]->id); -- common_element_start('Person', array('rdf:about' => $uri)); -- if ($p[0] == LISTENER || $p[0] == BOTH) { -- common_element('knows', array('rdf:resource' => $user->uri)); -- } -- $this->show_microblogging_account($profile, ($p[1] instanceof User) ? -- common_root_url() : NULL); -- if ($foaf_url) { -- common_element('rdfs:seeAlso', array('rdf:resource' => $foaf_url)); -- } -- common_element_end('Person'); -- if ($foaf_url) { -- $this->show_ppd($foaf_url, $uri); -- } -- } -+ foreach ($person as $uri => $p) { -+ $foaf_url = NULL; -+ if ($p[1] instanceof User) { -+ $foaf_url = common_local_url('foaf', array('nickname' => $p[1]->nickname)); -+ } -+ $profile = Profile::staticGet($p[1]->id); -+ common_element_start('Person', array('rdf:about' => $uri)); -+ if ($p[0] == LISTENER || $p[0] == BOTH) { -+ common_element('knows', array('rdf:resource' => $user->uri)); -+ } -+ $this->show_microblogging_account($profile, ($p[1] instanceof User) ? -+ common_root_url() : NULL); -+ if ($foaf_url) { -+ common_element('rdfs:seeAlso', array('rdf:resource' => $foaf_url)); -+ } -+ common_element_end('Person'); -+ if ($foaf_url) { -+ $this->show_ppd($foaf_url, $uri); -+ } -+ } -hunk ./actions/foaf.php 179 -- common_element_end('rdf:RDF'); -- } -+ common_element_end('rdf:RDF'); -+ } -hunk ./actions/foaf.php 182 -- function show_ppd($foaf_url, $person_uri) { -- common_element_start('PersonalProfileDocument', array('rdf:about' => $foaf_url)); -- common_element('maker', array('rdf:resource' => $person_uri)); -- common_element('primaryTopic', array('rdf:resource' => $person_uri)); -- common_element_end('PersonalProfileDocument'); -- } -+ function show_ppd($foaf_url, $person_uri) { -+ common_element_start('PersonalProfileDocument', array('rdf:about' => $foaf_url)); -+ common_element('maker', array('rdf:resource' => $person_uri)); -+ common_element('primaryTopic', array('rdf:resource' => $person_uri)); -+ common_element_end('PersonalProfileDocument'); -+ } +- return NULL; ++ return null; +hunk ./actions/finishopenidlogin.php 413 +- return NULL; ++ return null; +hunk ./actions/finishremotesubscribe.php 281 +- return NULL; ++ return null; +hunk ./actions/foaf.php 69 +- common_element('mbox_sha1sum', NULL, sha1('mailto:' . $user->email)); ++ common_element('mbox_sha1sum', null, sha1('mailto:' . $user->email)); +hunk ./actions/foaf.php 71 +- common_element('name', NULL, $profile->fullname); ++ common_element('name', null, $profile->fullname); +hunk ./actions/foaf.php 77 +- common_element('rdfs:comment', NULL, $profile->bio); ++ common_element('rdfs:comment', null, $profile->bio); +hunk ./actions/foaf.php 83 +- common_element('name', NULL, $profile->location); ++ common_element('name', null, $profile->location); +hunk ./actions/foaf.php 159 +- $foaf_url = NULL; ++ $foaf_url = null; +hunk ./actions/foaf.php 169 +- common_root_url() : NULL); ++ common_root_url() : null); hunk ./actions/foaf.php 189 -- function show_microblogging_account($profile, $service=NULL) { -- # Their account -- common_element_start('holdsAccount'); -- common_element_start('OnlineAccount'); -- if ($service) { -- common_element('accountServiceHomepage', array('rdf:resource' => -- $service)); -- } -- common_element('accountName', NULL, $profile->nickname); -- common_element('homepage', array('rdf:resource' => $profile->profileurl)); -- common_element_end('OnlineAccount'); -- common_element_end('holdsAccount'); -- } -+ function show_microblogging_account($profile, $service=NULL) { -+ # Their account -+ common_element_start('holdsAccount'); -+ common_element_start('OnlineAccount'); -+ if ($service) { -+ common_element('accountServiceHomepage', array('rdf:resource' => -+ $service)); -+ } -+ common_element('accountName', NULL, $profile->nickname); -+ common_element('homepage', array('rdf:resource' => $profile->profileurl)); -+ common_element_end('OnlineAccount'); -+ common_element_end('holdsAccount'); -+ } -hunk ./actions/imsettings.php 27 -- function get_instructions() { -- return _('You can send and receive notices through Jabber/GTalk [instant messages](%%doc.im%%). Configure your address and settings below.'); -- } -+ function get_instructions() { -+ return _('You can send and receive notices through Jabber/GTalk [instant messages](%%doc.im%%). Configure your address and settings below.'); -+ } +- function show_microblogging_account($profile, $service=NULL) { ++ function show_microblogging_account($profile, $service=null) { +hunk ./actions/foaf.php 197 +- common_element('accountName', NULL, $profile->nickname); ++ common_element('accountName', null, $profile->nickname); hunk ./actions/imsettings.php 31 -- function show_form($msg=NULL, $success=false) { -- $user = common_current_user(); -- $this->form_header(_('IM Settings'), $msg, $success); -- common_element_start('form', array('method' => 'post', -- 'id' => 'imsettings', -- 'action' => -- common_local_url('imsettings'))); -- common_hidden('token', common_session_token()); -+ function show_form($msg=NULL, $success=false) { -+ $user = common_current_user(); -+ $this->form_header(_('IM Settings'), $msg, $success); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'imsettings', -+ 'action' => -+ common_local_url('imsettings'))); -+ common_hidden('token', common_session_token()); +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { hunk ./actions/imsettings.php 40 -- common_element('h2', NULL, _('Address')); -+ common_element('h2', NULL, _('Address')); -hunk ./actions/imsettings.php 42 -- if ($user->jabber) { -- common_element_start('p'); -- common_element('span', 'address confirmed', $user->jabber); -- common_element('span', 'input_instructions', -- _('Current confirmed Jabber/GTalk address.')); -- common_hidden('jabber', $user->jabber); -- common_element_end('p'); -- common_submit('remove', _('Remove')); -- } else { -- $confirm = $this->get_confirmation(); -- if ($confirm) { -- common_element_start('p'); -- common_element('span', 'address unconfirmed', $confirm->address); -- common_element('span', 'input_instructions', -- sprintf(_('Awaiting confirmation on this address. Check your Jabber/GTalk account for a message with further instructions. (Did you add %s to your buddy list?)'), jabber_daemon_address())); -- common_hidden('jabber', $confirm->address); -- common_element_end('p'); -- common_submit('cancel', _('Cancel')); -- } else { -- common_input('jabber', _('IM Address'), -- ($this->arg('jabber')) ? $this->arg('jabber') : NULL, -- sprintf(_('Jabber or GTalk address, like "UserName@example.org". First, make sure to add %s to your buddy list in your IM client or on GTalk.'), jabber_daemon_address())); -- common_submit('add', _('Add')); -- } -- } -+ if ($user->jabber) { -+ common_element_start('p'); -+ common_element('span', 'address confirmed', $user->jabber); -+ common_element('span', 'input_instructions', -+ _('Current confirmed Jabber/GTalk address.')); -+ common_hidden('jabber', $user->jabber); -+ common_element_end('p'); -+ common_submit('remove', _('Remove')); -+ } else { -+ $confirm = $this->get_confirmation(); -+ if ($confirm) { -+ common_element_start('p'); -+ common_element('span', 'address unconfirmed', $confirm->address); -+ common_element('span', 'input_instructions', -+ sprintf(_('Awaiting confirmation on this address. Check your Jabber/GTalk account for a message with further instructions. (Did you add %s to your buddy list?)'), jabber_daemon_address())); -+ common_hidden('jabber', $confirm->address); -+ common_element_end('p'); -+ common_submit('cancel', _('Cancel')); -+ } else { -+ common_input('jabber', _('IM Address'), -+ ($this->arg('jabber')) ? $this->arg('jabber') : NULL, -+ sprintf(_('Jabber or GTalk address, like "UserName@example.org". First, make sure to add %s to your buddy list in your IM client or on GTalk.'), jabber_daemon_address())); -+ common_submit('add', _('Add')); -+ } -+ } +- common_element('h2', NULL, _('Address')); ++ common_element('h2', null, _('Address')); +hunk ./actions/imsettings.php 62 +- ($this->arg('jabber')) ? $this->arg('jabber') : NULL, ++ ($this->arg('jabber')) ? $this->arg('jabber') : null, hunk ./actions/imsettings.php 68 -- common_element('h2', NULL, _('Preferences')); -+ common_element('h2', NULL, _('Preferences')); -hunk ./actions/imsettings.php 70 -- common_checkbox('jabbernotify', -- _('Send me notices through Jabber/GTalk.'), -- $user->jabbernotify); -- common_checkbox('updatefrompresence', -- _('Post a notice when my Jabber/GTalk status changes.'), -- $user->updatefrompresence); -- common_checkbox('jabberreplies', -- _('Send me replies through Jabber/GTalk from people I\'m not subscribed to.'), -- $user->jabberreplies); -- common_checkbox('jabbermicroid', -- _('Publish a MicroID for my Jabber/GTalk address.'), -- $user->jabbermicroid); -- common_submit('save', _('Save')); -+ common_checkbox('jabbernotify', -+ _('Send me notices through Jabber/GTalk.'), -+ $user->jabbernotify); -+ common_checkbox('updatefrompresence', -+ _('Post a notice when my Jabber/GTalk status changes.'), -+ $user->updatefrompresence); -+ common_checkbox('jabberreplies', -+ _('Send me replies through Jabber/GTalk from people I\'m not subscribed to.'), -+ $user->jabberreplies); -+ common_checkbox('jabbermicroid', -+ _('Publish a MicroID for my Jabber/GTalk address.'), -+ $user->jabbermicroid); -+ common_submit('save', _('Save')); -hunk ./actions/imsettings.php 84 -- common_element_end('form'); -- common_show_footer(); -- } -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/imsettings.php 88 -- function get_confirmation() { -- $user = common_current_user(); -- $confirm = new Confirm_address(); -- $confirm->user_id = $user->id; -- $confirm->address_type = 'jabber'; -- if ($confirm->find(TRUE)) { -- return $confirm; -- } else { -- return NULL; -- } -- } -+ function get_confirmation() { -+ $user = common_current_user(); -+ $confirm = new Confirm_address(); -+ $confirm->user_id = $user->id; -+ $confirm->address_type = 'jabber'; -+ if ($confirm->find(TRUE)) { -+ return $confirm; -+ } else { -+ return NULL; -+ } -+ } -hunk ./actions/imsettings.php 100 -- function handle_post() { -+ function handle_post() { -hunk ./actions/imsettings.php 102 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/imsettings.php 109 -- if ($this->arg('save')) { -- $this->save_preferences(); -- } else if ($this->arg('add')) { -- $this->add_address(); -- } else if ($this->arg('cancel')) { -- $this->cancel_confirmation(); -- } else if ($this->arg('remove')) { -- $this->remove_address(); -- } else { -- $this->show_form(_('Unexpected form submission.')); -- } -- } -+ if ($this->arg('save')) { -+ $this->save_preferences(); -+ } else if ($this->arg('add')) { -+ $this->add_address(); -+ } else if ($this->arg('cancel')) { -+ $this->cancel_confirmation(); -+ } else if ($this->arg('remove')) { -+ $this->remove_address(); -+ } else { -+ $this->show_form(_('Unexpected form submission.')); -+ } -+ } -hunk ./actions/imsettings.php 122 -- function save_preferences() { -+ function save_preferences() { -hunk ./actions/imsettings.php 124 -- $jabbernotify = $this->boolean('jabbernotify'); -- $updatefrompresence = $this->boolean('updatefrompresence'); -- $jabberreplies = $this->boolean('jabberreplies'); -- $jabbermicroid = $this->boolean('jabbermicroid'); -+ $jabbernotify = $this->boolean('jabbernotify'); -+ $updatefrompresence = $this->boolean('updatefrompresence'); -+ $jabberreplies = $this->boolean('jabberreplies'); -+ $jabbermicroid = $this->boolean('jabbermicroid'); -hunk ./actions/imsettings.php 129 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/imsettings.php 131 -- assert(!is_null($user)); # should already be checked -+ assert(!is_null($user)); # should already be checked -hunk ./actions/imsettings.php 133 -- $user->query('BEGIN'); -+ $user->query('BEGIN'); -hunk ./actions/imsettings.php 135 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/imsettings.php 137 -- $user->jabbernotify = $jabbernotify; -- $user->updatefrompresence = $updatefrompresence; -- $user->jabberreplies = $jabberreplies; -- $user->jabbermicroid = $jabbermicroid; -+ $user->jabbernotify = $jabbernotify; -+ $user->updatefrompresence = $updatefrompresence; -+ $user->jabberreplies = $jabberreplies; -+ $user->jabbermicroid = $jabbermicroid; -hunk ./actions/imsettings.php 142 -- $result = $user->update($original); -+ $result = $user->update($original); -hunk ./actions/imsettings.php 144 -- if ($result === FALSE) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -hunk ./actions/imsettings.php 150 -- $user->query('COMMIT'); -+ $user->query('COMMIT'); -hunk ./actions/imsettings.php 152 -- $this->show_form(_('Preferences saved.'), true); -- } -+ $this->show_form(_('Preferences saved.'), true); -+ } -hunk ./actions/imsettings.php 155 -- function add_address() { -+ function add_address() { -hunk ./actions/imsettings.php 157 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/imsettings.php 159 -- $jabber = $this->trimmed('jabber'); -+ $jabber = $this->trimmed('jabber'); -hunk ./actions/imsettings.php 161 -- # Some validation -+ # Some validation -hunk ./actions/imsettings.php 163 -- if (!$jabber) { -- $this->show_form(_('No Jabber ID.')); -- return; -- } -+ if (!$jabber) { -+ $this->show_form(_('No Jabber ID.')); -+ return; -+ } -hunk ./actions/imsettings.php 168 -- $jabber = jabber_normalize_jid($jabber); -+ $jabber = jabber_normalize_jid($jabber); -hunk ./actions/imsettings.php 170 -- if (!$jabber) { -- $this->show_form(_('Cannot normalize that Jabber ID')); -- return; -- } -- if (!jabber_valid_base_jid($jabber)) { -- $this->show_form(_('Not a valid Jabber ID')); -- return; -- } else if ($user->jabber == $jabber) { -- $this->show_form(_('That is already your Jabber ID.')); -- return; -- } else if ($this->jabber_exists($jabber)) { -- $this->show_form(_('Jabber ID already belongs to another user.')); -- return; -- } -+ if (!$jabber) { -+ $this->show_form(_('Cannot normalize that Jabber ID')); -+ return; -+ } -+ if (!jabber_valid_base_jid($jabber)) { -+ $this->show_form(_('Not a valid Jabber ID')); -+ return; -+ } else if ($user->jabber == $jabber) { -+ $this->show_form(_('That is already your Jabber ID.')); -+ return; -+ } else if ($this->jabber_exists($jabber)) { -+ $this->show_form(_('Jabber ID already belongs to another user.')); -+ return; -+ } -hunk ./actions/imsettings.php 185 -- $confirm = new Confirm_address(); -- $confirm->address = $jabber; -- $confirm->address_type = 'jabber'; -- $confirm->user_id = $user->id; -- $confirm->code = common_confirmation_code(64); -+ $confirm = new Confirm_address(); -+ $confirm->address = $jabber; -+ $confirm->address_type = 'jabber'; -+ $confirm->user_id = $user->id; -+ $confirm->code = common_confirmation_code(64); -hunk ./actions/imsettings.php 191 -- $result = $confirm->insert(); -+ $result = $confirm->insert(); -hunk ./actions/imsettings.php 193 -- if ($result === FALSE) { -- common_log_db_error($confirm, 'INSERT', __FILE__); -- common_server_error(_('Couldn\'t insert confirmation code.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($confirm, 'INSERT', __FILE__); -+ common_server_error(_('Couldn\'t insert confirmation code.')); -+ return; -+ } -hunk ./actions/imsettings.php 199 -- if (!common_config('queue', 'enabled')) { -- jabber_confirm_address($confirm->code, -- $user->nickname, -- $jabber); -- } -+ if (!common_config('queue', 'enabled')) { -+ jabber_confirm_address($confirm->code, -+ $user->nickname, -+ $jabber); -+ } -hunk ./actions/imsettings.php 205 -- $msg = sprintf(_('A confirmation code was sent to the IM address you added. You must approve %s for sending messages to you.'), jabber_daemon_address()); -+ $msg = sprintf(_('A confirmation code was sent to the IM address you added. You must approve %s for sending messages to you.'), jabber_daemon_address()); -hunk ./actions/imsettings.php 207 -- $this->show_form($msg, TRUE); -- } -+ $this->show_form($msg, TRUE); -+ } -hunk ./actions/imsettings.php 210 -- function cancel_confirmation() { -- $jabber = $this->arg('jabber'); -- $confirm = $this->get_confirmation(); -- if (!$confirm) { -- $this->show_form(_('No pending confirmation to cancel.')); -- return; -- } -- if ($confirm->address != $jabber) { -- $this->show_form(_('That is the wrong IM address.')); -- return; -- } -+ function cancel_confirmation() { -+ $jabber = $this->arg('jabber'); -+ $confirm = $this->get_confirmation(); -+ if (!$confirm) { -+ $this->show_form(_('No pending confirmation to cancel.')); -+ return; -+ } -+ if ($confirm->address != $jabber) { -+ $this->show_form(_('That is the wrong IM address.')); -+ return; -+ } -hunk ./actions/imsettings.php 225 -- common_log_db_error($confirm, 'DELETE', __FILE__); -+ common_log_db_error($confirm, 'DELETE', __FILE__); -hunk ./actions/imsettings.php 231 -- } -+ } -hunk ./actions/imsettings.php 233 -- function remove_address() { -+ function remove_address() { -hunk ./actions/imsettings.php 235 -- $user = common_current_user(); -- $jabber = $this->arg('jabber'); -+ $user = common_current_user(); -+ $jabber = $this->arg('jabber'); -hunk ./actions/imsettings.php 238 -- # Maybe an old tab open...? -+ # Maybe an old tab open...? -hunk ./actions/imsettings.php 240 -- if ($user->jabber != $jabber) { -- $this->show_form(_('That is not your Jabber ID.')); -- return; -- } -+ if ($user->jabber != $jabber) { -+ $this->show_form(_('That is not your Jabber ID.')); -+ return; -+ } -hunk ./actions/imsettings.php 245 -- $user->query('BEGIN'); -- $original = clone($user); -- $user->jabber = NULL; -- $result = $user->updateKeys($original); -- if (!$result) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -- $user->query('COMMIT'); -+ $user->query('BEGIN'); -+ $original = clone($user); -+ $user->jabber = NULL; -+ $result = $user->updateKeys($original); -+ if (!$result) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -+ $user->query('COMMIT'); -hunk ./actions/imsettings.php 256 -- # XXX: unsubscribe to the old address -+ # XXX: unsubscribe to the old address -hunk ./actions/imsettings.php 258 -- $this->show_form(_('The address was removed.'), TRUE); -- } -+ $this->show_form(_('The address was removed.'), TRUE); -+ } -hunk ./actions/imsettings.php 261 -- function jabber_exists($jabber) { -- $user = common_current_user(); -- $other = User::staticGet('jabber', $jabber); -- if (!$other) { -- return false; -- } else { -- return $other->id != $user->id; -- } -- } -+ function jabber_exists($jabber) { -+ $user = common_current_user(); -+ $other = User::staticGet('jabber', $jabber); -+ if (!$other) { -+ return false; -+ } else { -+ return $other->id != $user->id; -+ } -+ } -hunk ./actions/invite.php 24 -- function is_readonly() { -- return false; -- } -+ function is_readonly() { -+ return false; -+ } -hunk ./actions/invite.php 30 -- if (!common_logged_in()) { -- $this->client_error(sprintf(_('You must be logged in to invite other users to use %s'), -- common_config('site', 'name'))); -- return; -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $this->send_invitations(); -- } else { -- $this->show_form(); -- } -- } -+ if (!common_logged_in()) { -+ $this->client_error(sprintf(_('You must be logged in to invite other users to use %s'), -+ common_config('site', 'name'))); -+ return; -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $this->send_invitations(); -+ } else { -+ $this->show_form(); -+ } -+ } -hunk ./actions/invite.php 41 -- function send_invitations() { -+ function send_invitations() { -hunk ./actions/invite.php 43 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/invite.php 50 -- $user = common_current_user(); -- $profile = $user->getProfile(); -+ $user = common_current_user(); -+ $profile = $user->getProfile(); -hunk ./actions/invite.php 53 -- $bestname = $profile->getBestName(); -- $sitename = common_config('site', 'name'); -- $personal = $this->trimmed('personal'); -+ $bestname = $profile->getBestName(); -+ $sitename = common_config('site', 'name'); -+ $personal = $this->trimmed('personal'); -hunk ./actions/invite.php 57 -- $addresses = explode("\n", $this->trimmed('addresses')); -+ $addresses = explode("\n", $this->trimmed('addresses')); -hunk ./actions/invite.php 59 -- foreach ($addresses as $email) { -- $email = trim($email); -- if (!Validate::email($email, true)) { -- $this->show_form(sprintf(_('Invalid email address: %s'), $email)); -- return; -- } -- } -+ foreach ($addresses as $email) { -+ $email = trim($email); -+ if (!Validate::email($email, true)) { -+ $this->show_form(sprintf(_('Invalid email address: %s'), $email)); -+ return; -+ } -+ } -hunk ./actions/invite.php 67 -- $already = array(); -- $subbed = array(); -+ $already = array(); -+ $subbed = array(); -hunk ./actions/invite.php 70 -- foreach ($addresses as $email) { -- $email = common_canonical_email($email); -- $other = User::staticGet('email', $email); -- if ($other) { -- if ($user->isSubscribed($other)) { -- $already[] = $other; -- } else { -- subs_subscribe_to($user, $other); -- $subbed[] = $other; -- } -- } else { -- $sent[] = $email; -- $this->send_invitation($email, $user, $personal); -- } -- } -+ foreach ($addresses as $email) { -+ $email = common_canonical_email($email); -+ $other = User::staticGet('email', $email); -+ if ($other) { -+ if ($user->isSubscribed($other)) { -+ $already[] = $other; -+ } else { -+ subs_subscribe_to($user, $other); -+ $subbed[] = $other; -+ } -+ } else { -+ $sent[] = $email; -+ $this->send_invitation($email, $user, $personal); -+ } -+ } -hunk ./actions/invite.php 86 -- common_show_header(_('Invitation(s) sent')); -- if ($already) { -- common_element('p', NULL, _('You are already subscribed to these users:')); -- common_element_start('ul'); -- foreach ($already as $other) { -- common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email)); -- } -- common_element_end('ul'); -- } -- if ($subbed) { -- common_element('p', NULL, _('These people are already users and you were automatically subscribed to them:')); -- common_element_start('ul'); -- foreach ($subbed as $other) { -- common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email)); -- } -- common_element_end('ul'); -- } -- if ($sent) { -- common_element('p', NULL, _('Invitation(s) sent to the following people:')); -- common_element_start('ul'); -- foreach ($sent as $other) { -- common_element('li', NULL, $other); -- } -- common_element_end('ul'); -- common_element('p', NULL, _('You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!')); -- } -- common_show_footer(); -- } -+ common_show_header(_('Invitation(s) sent')); -+ if ($already) { -+ common_element('p', NULL, _('You are already subscribed to these users:')); -+ common_element_start('ul'); -+ foreach ($already as $other) { -+ common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email)); -+ } -+ common_element_end('ul'); -+ } -+ if ($subbed) { -+ common_element('p', NULL, _('These people are already users and you were automatically subscribed to them:')); -+ common_element_start('ul'); -+ foreach ($subbed as $other) { -+ common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email)); -+ } -+ common_element_end('ul'); -+ } -+ if ($sent) { -+ common_element('p', NULL, _('Invitation(s) sent to the following people:')); -+ common_element_start('ul'); -+ foreach ($sent as $other) { -+ common_element('li', NULL, $other); -+ } -+ common_element_end('ul'); -+ common_element('p', NULL, _('You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!')); -+ } -+ common_show_footer(); -+ } +- common_element('h2', NULL, _('Preferences')); ++ common_element('h2', null, _('Preferences')); +hunk ./actions/imsettings.php 96 +- return NULL; ++ return null; +hunk ./actions/imsettings.php 247 +- $user->jabber = NULL; ++ $user->jabber = null; +hunk ./actions/invite.php 88 +- common_element('p', NULL, _('You are already subscribed to these users:')); ++ common_element('p', null, _('You are already subscribed to these users:')); +hunk ./actions/invite.php 91 +- common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email)); ++ common_element('li', null, sprintf(_('%s (%s)'), $other->nickname, $other->email)); +hunk ./actions/invite.php 96 +- common_element('p', NULL, _('These people are already users and you were automatically subscribed to them:')); ++ common_element('p', null, _('These people are already users and you were automatically subscribed to them:')); +hunk ./actions/invite.php 99 +- common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email)); ++ common_element('li', null, sprintf(_('%s (%s)'), $other->nickname, $other->email)); +hunk ./actions/invite.php 104 +- common_element('p', NULL, _('Invitation(s) sent to the following people:')); ++ common_element('p', null, _('Invitation(s) sent to the following people:')); +hunk ./actions/invite.php 107 +- common_element('li', NULL, $other); ++ common_element('li', null, $other); +hunk ./actions/invite.php 110 +- common_element('p', NULL, _('You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!')); ++ common_element('p', null, _('You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!')); hunk ./actions/invite.php 115 -- function show_top($error=NULL) { -- if ($error) { -- common_element('p', 'error', $error); -- } else { -- common_element_start('div', 'instructions'); -- common_element('p', NULL, -- _('Use this form to invite your friends and colleagues to use this service.')); -- common_element_end('div'); -- } -- } -+ function show_top($error=NULL) { -+ if ($error) { -+ common_element('p', 'error', $error); -+ } else { -+ common_element_start('div', 'instructions'); -+ common_element('p', NULL, -+ _('Use this form to invite your friends and colleagues to use this service.')); -+ common_element_end('div'); -+ } -+ } +- function show_top($error=NULL) { ++ function show_top($error=null) { +hunk ./actions/invite.php 120 +- common_element('p', NULL, ++ common_element('p', null, hunk ./actions/invite.php 126 -- function show_form($error=NULL) { -+ function show_form($error=NULL) { -hunk ./actions/invite.php 128 -- global $config; -+ global $config; +- function show_form($error=NULL) { ++ function show_form($error=null) { hunk ./actions/invite.php 130 -- common_show_header(_('Invite new users'), NULL, $error, array($this, 'show_top')); -+ common_show_header(_('Invite new users'), NULL, $error, array($this, 'show_top')); -hunk ./actions/invite.php 132 -- common_element_start('form', array('method' => 'post', -- 'id' => 'invite', -- 'action' => common_local_url('invite'))); -- common_hidden('token', common_session_token()); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'invite', -+ 'action' => common_local_url('invite'))); -+ common_hidden('token', common_session_token()); -hunk ./actions/invite.php 137 -- common_textarea('addresses', _('Email addresses'), -- $this->trimmed('addresses'), -- _('Addresses of friends to invite (one per line)')); -+ common_textarea('addresses', _('Email addresses'), -+ $this->trimmed('addresses'), -+ _('Addresses of friends to invite (one per line)')); -hunk ./actions/invite.php 141 -- common_textarea('personal', _('Personal message'), -- $this->trimmed('personal'), -- _('Optionally add a personal message to the invitation.')); -+ common_textarea('personal', _('Personal message'), -+ $this->trimmed('personal'), -+ _('Optionally add a personal message to the invitation.')); -hunk ./actions/invite.php 145 -- common_submit('send', _('Send')); -+ common_submit('send', _('Send')); -hunk ./actions/invite.php 147 -- common_element_end('form'); -+ common_element_end('form'); -hunk ./actions/invite.php 149 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/invite.php 152 -- function send_invitation($email, $user, $personal) { -+ function send_invitation($email, $user, $personal) { -hunk ./actions/invite.php 154 -- $profile = $user->getProfile(); -- $bestname = $profile->getBestName(); -+ $profile = $user->getProfile(); -+ $bestname = $profile->getBestName(); -hunk ./actions/invite.php 157 -- $sitename = common_config('site', 'name'); -+ $sitename = common_config('site', 'name'); -hunk ./actions/invite.php 159 -- $invite = new Invitation(); -+ $invite = new Invitation(); -hunk ./actions/invite.php 161 -- $invite->address = $email; -- $invite->address_type = 'email'; -- $invite->code = common_confirmation_code(128); -- $invite->user_id = $user->id; -- $invite->created = common_sql_now(); -+ $invite->address = $email; -+ $invite->address_type = 'email'; -+ $invite->code = common_confirmation_code(128); -+ $invite->user_id = $user->id; -+ $invite->created = common_sql_now(); -hunk ./actions/invite.php 167 -- if (!$invite->insert()) { -- common_log_db_error($invite, 'INSERT', __FILE__); -- return false; -- } -+ if (!$invite->insert()) { -+ common_log_db_error($invite, 'INSERT', __FILE__); -+ return false; -+ } -hunk ./actions/invite.php 172 -- $recipients = array($email); -+ $recipients = array($email); -hunk ./actions/invite.php 174 -- $headers['From'] = mail_notify_from(); -- $headers['To'] = $email; -- $headers['Subject'] = sprintf(_('%1$s has invited you to join them on %2$s'), $bestname, $sitename); -+ $headers['From'] = mail_notify_from(); -+ $headers['To'] = $email; -+ $headers['Subject'] = sprintf(_('%1$s has invited you to join them on %2$s'), $bestname, $sitename); -hunk ./actions/invite.php 178 -- $body = sprintf(_("%1\$s has invited you to join them on %2\$s (%3\$s).\n\n". -- "%2\$s is a micro-blogging service that lets you keep up-to-date with people you know and people who interest you.\n\n". -- "You can also share news about yourself, your thoughts, or your life online with people who know about you. ". -- "It's also great for meeting new people who share your interests.\n\n". -- "%1\$s said:\n\n%4\$s\n\n". -- "You can see %1\$s's profile page on %2\$s here:\n\n". -- "%5\$s\n\n". -- "If you'd like to try the service, click on the link below to accept the invitation.\n\n". -- "%6\$s\n\n". -- "If not, you can ignore this message. Thanks for your patience and your time.\n\n". -- "Sincerely, %2\$s\n"), -- $bestname, -- $sitename, -- common_root_url(), -- $personal, -- common_local_url('showstream', array('nickname' => $user->nickname)), -- common_local_url('register', array('code' => $invite->code))); -+ $body = sprintf(_("%1\$s has invited you to join them on %2\$s (%3\$s).\n\n". -+ "%2\$s is a micro-blogging service that lets you keep up-to-date with people you know and people who interest you.\n\n". -+ "You can also share news about yourself, your thoughts, or your life online with people who know about you. ". -+ "It's also great for meeting new people who share your interests.\n\n". -+ "%1\$s said:\n\n%4\$s\n\n". -+ "You can see %1\$s's profile page on %2\$s here:\n\n". -+ "%5\$s\n\n". -+ "If you'd like to try the service, click on the link below to accept the invitation.\n\n". -+ "%6\$s\n\n". -+ "If not, you can ignore this message. Thanks for your patience and your time.\n\n". -+ "Sincerely, %2\$s\n"), -+ $bestname, -+ $sitename, -+ common_root_url(), -+ $personal, -+ common_local_url('showstream', array('nickname' => $user->nickname)), -+ common_local_url('register', array('code' => $invite->code))); -hunk ./actions/invite.php 196 -- mail_send($recipients, $headers, $body); -- } -+ mail_send($recipients, $headers, $body); -+ } -hunk ./actions/login.php 24 -- function is_readonly() { -- return true; -- } -+ function is_readonly() { -+ return true; -+ } -hunk ./actions/login.php 28 -- function handle($args) { -- parent::handle($args); -- if (common_is_real_login()) { -- common_user_error(_('Already logged in.')); -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $this->check_login(); -- } else { -- $this->show_form(); -- } -- } -+ function handle($args) { -+ parent::handle($args); -+ if (common_is_real_login()) { -+ common_user_error(_('Already logged in.')); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $this->check_login(); -+ } else { -+ $this->show_form(); -+ } -+ } -hunk ./actions/login.php 39 -- function check_login() { -- # XXX: login throttle -+ function check_login() { -+ # XXX: login throttle -hunk ./actions/login.php 42 -- # CSRF protection - token set in common_notice_form() -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection - token set in common_notice_form() -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/login.php 49 -- $nickname = common_canonical_nickname($this->trimmed('nickname')); -- $password = $this->arg('password'); -- if (common_check_user($nickname, $password)) { -- # success! -- if (!common_set_user($nickname)) { -- common_server_error(_('Error setting user.')); -- return; -- } -- common_real_login(true); -- if ($this->boolean('rememberme')) { -- common_debug('Adding rememberme cookie for ' . $nickname); -- common_rememberme(); -- } -- # success! -- $url = common_get_returnto(); -- if ($url) { -- # We don't have to return to it again -- common_set_returnto(NULL); -- } else { -- $url = common_local_url('all', -- array('nickname' => -- $nickname)); -- } -- common_redirect($url); -- } else { -- $this->show_form(_('Incorrect username or password.')); -- return; -- } -+ $nickname = common_canonical_nickname($this->trimmed('nickname')); -+ $password = $this->arg('password'); -+ if (common_check_user($nickname, $password)) { -+ # success! -+ if (!common_set_user($nickname)) { -+ common_server_error(_('Error setting user.')); -+ return; -+ } -+ common_real_login(true); -+ if ($this->boolean('rememberme')) { -+ common_debug('Adding rememberme cookie for ' . $nickname); -+ common_rememberme(); -+ } -+ # success! -+ $url = common_get_returnto(); -+ if ($url) { -+ # We don't have to return to it again -+ common_set_returnto(NULL); -+ } else { -+ $url = common_local_url('all', -+ array('nickname' => -+ $nickname)); -+ } -+ common_redirect($url); -+ } else { -+ $this->show_form(_('Incorrect username or password.')); -+ return; -+ } -hunk ./actions/login.php 78 -- # success! -- if (!common_set_user($user)) { -- common_server_error(_('Error setting user.')); -- return; -- } -+ # success! -+ if (!common_set_user($user)) { -+ common_server_error(_('Error setting user.')); -+ return; -+ } -hunk ./actions/login.php 84 -- common_real_login(true); -+ common_real_login(true); -hunk ./actions/login.php 86 -- if ($this->boolean('rememberme')) { -- common_debug('Adding rememberme cookie for ' . $nickname); -- common_rememberme($user); -- } -- # success! -- $url = common_get_returnto(); -- if ($url) { -- # We don't have to return to it again -- common_set_returnto(NULL); -- } else { -- $url = common_local_url('all', -- array('nickname' => -- $nickname)); -- } -- common_redirect($url); -- } -+ if ($this->boolean('rememberme')) { -+ common_debug('Adding rememberme cookie for ' . $nickname); -+ common_rememberme($user); -+ } -+ # success! -+ $url = common_get_returnto(); -+ if ($url) { -+ # We don't have to return to it again -+ common_set_returnto(NULL); -+ } else { -+ $url = common_local_url('all', -+ array('nickname' => -+ $nickname)); -+ } -+ common_redirect($url); -+ } +- common_show_header(_('Invite new users'), NULL, $error, array($this, 'show_top')); ++ common_show_header(_('Invite new users'), null, $error, array($this, 'show_top')); +hunk ./actions/login.php 66 +- common_set_returnto(NULL); ++ common_set_returnto(null); +hunk ./actions/login.php 94 +- common_set_returnto(NULL); ++ common_set_returnto(null); hunk ./actions/login.php 103 -- function show_form($error=NULL) { -- common_show_header(_('Login'), NULL, $error, array($this, 'show_top')); -- common_element_start('form', array('method' => 'post', -- 'id' => 'login', -- 'action' => common_local_url('login'))); -- common_input('nickname', _('Nickname')); -- common_password('password', _('Password')); -- common_checkbox('rememberme', _('Remember me'), false, -- _('Automatically login in the future; ' . -- 'not for shared computers!')); -- common_submit('submit', _('Login')); -- common_hidden('token', common_session_token()); -- common_element_end('form'); -- common_element_start('p'); -- common_element('a', array('href' => common_local_url('recoverpassword')), -- _('Lost or forgotten password?')); -- common_element_end('p'); -- common_show_footer(); -- } -+ function show_form($error=NULL) { -+ common_show_header(_('Login'), NULL, $error, array($this, 'show_top')); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'login', -+ 'action' => common_local_url('login'))); -+ common_input('nickname', _('Nickname')); -+ common_password('password', _('Password')); -+ common_checkbox('rememberme', _('Remember me'), false, -+ _('Automatically login in the future; ' . -+ 'not for shared computers!')); -+ common_submit('submit', _('Login')); -+ common_hidden('token', common_session_token()); -+ common_element_end('form'); -+ common_element_start('p'); -+ common_element('a', array('href' => common_local_url('recoverpassword')), -+ _('Lost or forgotten password?')); -+ common_element_end('p'); -+ common_show_footer(); -+ } -hunk ./actions/login.php 123 -- function get_instructions() { -- if (common_logged_in() && -- !common_is_real_login() && -- common_get_returnto()) -- { -- # rememberme logins have to reauthenticate before -- # changing any profile settings (cookie-stealing protection) -- return _('For security reasons, please re-enter your ' . -- 'user name and password ' . -- 'before changing your settings.'); -- } else { -- return _('Login with your username and password. ' . -- 'Don\'t have a username yet? ' . -- '[Register](%%action.register%%) a new account, or ' . -- 'try [OpenID](%%action.openidlogin%%). '); -- } -- } -+ function get_instructions() { -+ if (common_logged_in() && -+ !common_is_real_login() && -+ common_get_returnto()) -+ { -+ # rememberme logins have to reauthenticate before -+ # changing any profile settings (cookie-stealing protection) -+ return _('For security reasons, please re-enter your ' . -+ 'user name and password ' . -+ 'before changing your settings.'); -+ } else { -+ return _('Login with your username and password. ' . -+ 'Don\'t have a username yet? ' . -+ '[Register](%%action.register%%) a new account, or ' . -+ 'try [OpenID](%%action.openidlogin%%). '); -+ } -+ } +- function show_form($error=NULL) { +- common_show_header(_('Login'), NULL, $error, array($this, 'show_top')); ++ function show_form($error=null) { ++ common_show_header(_('Login'), null, $error, array($this, 'show_top')); hunk ./actions/login.php 141 -- function show_top($error=NULL) { -- if ($error) { -- common_element('p', 'error', $error); -- } else { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- } -- } -+ function show_top($error=NULL) { -+ if ($error) { -+ common_element('p', 'error', $error); -+ } else { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ } -+ } -hunk ./actions/logout.php 25 -- -- function is_readonly() { -- return true; -- } -- -- function handle($args) { -- parent::handle($args); -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- } else { -- common_set_user(NULL); -- common_real_login(false); # not logged in -- common_forgetme(); # don't log back in! -- common_redirect(common_local_url('public')); -- } -- } -+ -+ function is_readonly() { -+ return true; -+ } -+ -+ function handle($args) { -+ parent::handle($args); -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ } else { -+ common_set_user(NULL); -+ common_real_login(false); # not logged in -+ common_forgetme(); # don't log back in! -+ common_redirect(common_local_url('public')); -+ } -+ } -hunk ./actions/microsummary.php 24 -- function handle($args) { -+ function handle($args) { -hunk ./actions/microsummary.php 26 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/microsummary.php 28 -- $nickname = common_canonical_nickname($this->arg('nickname')); -- $user = User::staticGet('nickname', $nickname); -+ $nickname = common_canonical_nickname($this->arg('nickname')); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/microsummary.php 31 -- if (!$user) { -- $this->client_error(_('No such user'), 404); -- return; -- } -- -- $notice = $user->getCurrentNotice(); -- -- if (!$notice) { -- $this->client_error(_('No current status'), 404); -- } -- -- header('Content-Type: text/plain'); -- -- print $user->nickname . ': ' . $notice->content; -- } -+ if (!$user) { -+ $this->client_error(_('No such user'), 404); -+ return; -+ } -+ -+ $notice = $user->getCurrentNotice(); -+ -+ if (!$notice) { -+ $this->client_error(_('No current status'), 404); -+ } -+ -+ header('Content-Type: text/plain'); -+ -+ print $user->nickname . ': ' . $notice->content; -+ } -hunk ./actions/newmessage.php 23 -- -- function handle($args) { -- parent::handle($args); -+ -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/newmessage.php 27 -- if (!common_logged_in()) { -- $this->client_error(_('Not logged in.'), 403); -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $this->save_new_message(); -- } else { -- $this->show_form(); -- } -- } -+ if (!common_logged_in()) { -+ $this->client_error(_('Not logged in.'), 403); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $this->save_new_message(); -+ } else { -+ $this->show_form(); -+ } -+ } -hunk ./actions/newmessage.php 36 -- function save_new_message() { -- $user = common_current_user(); -- assert($user); # XXX: maybe an error instead... -+ function save_new_message() { -+ $user = common_current_user(); -+ assert($user); # XXX: maybe an error instead... -hunk ./actions/newmessage.php 40 -- # CSRF protection -- -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -- -- $content = $this->trimmed('content'); -- $to = $this->trimmed('to'); -- -- if (!$content) { -- $this->show_form(_('No content!')); -- return; -- } else { -- $content_shortened = common_shorten_links($content); -+ # CSRF protection -+ -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -+ -+ $content = $this->trimmed('content'); -+ $to = $this->trimmed('to'); -+ -+ if (!$content) { -+ $this->show_form(_('No content!')); -+ return; -+ } else { -+ $content_shortened = common_shorten_links($content); -hunk ./actions/newmessage.php 57 -- if (mb_strlen($content_shortened) > 140) { -- common_debug("Content = '$content_shortened'", __FILE__); -- common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__); -- $this->show_form(_('That\'s too long. Max message size is 140 chars.')); -- return; -- } -- } -+ if (mb_strlen($content_shortened) > 140) { -+ common_debug("Content = '$content_shortened'", __FILE__); -+ common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__); -+ $this->show_form(_('That\'s too long. Max message size is 140 chars.')); -+ return; -+ } -+ } -hunk ./actions/newmessage.php 65 -- $other = User::staticGet('id', $to); -- -- if (!$other) { -- $this->show_form(_('No recipient specified.')); -- return; -- } else if (!$user->mutuallySubscribed($other)) { -- $this->client_error(_('You can\'t send a message to this user.'), 404); -- return; -- } else if ($user->id == $other->id) { -- $this->client_error(_('Don\'t send a message to yourself; just say it to yourself quietly instead.'), 403); -- return; -- } -- -- $message = Message::saveNew($user->id, $other->id, $content, 'web'); -- -- if (is_string($message)) { -- $this->show_form($message); -- return; -- } -+ $other = User::staticGet('id', $to); -+ -+ if (!$other) { -+ $this->show_form(_('No recipient specified.')); -+ return; -+ } else if (!$user->mutuallySubscribed($other)) { -+ $this->client_error(_('You can\'t send a message to this user.'), 404); -+ return; -+ } else if ($user->id == $other->id) { -+ $this->client_error(_('Don\'t send a message to yourself; just say it to yourself quietly instead.'), 403); -+ return; -+ } -+ -+ $message = Message::saveNew($user->id, $other->id, $content, 'web'); -+ -+ if (is_string($message)) { -+ $this->show_form($message); -+ return; -+ } -hunk ./actions/newmessage.php 85 -- $this->notify($user, $other, $message); -+ $this->notify($user, $other, $message); -hunk ./actions/newmessage.php 87 -- $url = common_local_url('outbox', array('nickname' => $user->nickname)); -+ $url = common_local_url('outbox', array('nickname' => $user->nickname)); -hunk ./actions/newmessage.php 89 -- common_redirect($url, 303); -- } -+ common_redirect($url, 303); -+ } -hunk ./actions/newmessage.php 92 -- function show_top($params) { -+ function show_top($params) { -hunk ./actions/newmessage.php 94 -- list($content, $user, $to) = $params; -- -- assert(!is_null($user)); -+ list($content, $user, $to) = $params; -+ -+ assert(!is_null($user)); -hunk ./actions/newmessage.php 98 -- common_message_form($content, $user, $to); -- } -+ common_message_form($content, $user, $to); -+ } +- function show_top($error=NULL) { ++ function show_top($error=null) { +hunk ./actions/logout.php 35 +- common_set_user(NULL); ++ common_set_user(null); hunk ./actions/newmessage.php 101 -- function show_form($msg=NULL) { -- -- $content = $this->trimmed('content'); -- $user = common_current_user(); -+ function show_form($msg=NULL) { -+ -+ $content = $this->trimmed('content'); -+ $user = common_current_user(); -hunk ./actions/newmessage.php 106 -- $to = $this->trimmed('to'); -- -- $other = User::staticGet('id', $to); -+ $to = $this->trimmed('to'); -+ -+ $other = User::staticGet('id', $to); -hunk ./actions/newmessage.php 110 -- if (!$other) { -- $this->client_error(_('No such user'), 404); -- return; -- } -+ if (!$other) { -+ $this->client_error(_('No such user'), 404); -+ return; -+ } -hunk ./actions/newmessage.php 115 -- if (!$user->mutuallySubscribed($other)) { -- $this->client_error(_('You can\'t send a message to this user.'), 404); -- return; -- } -- -- common_show_header(_('New message'), NULL, -- array($content, $user, $other), -- array($this, 'show_top')); -- -- if ($msg) { -- common_element('p', array('id'=>'error'), $msg); -- } -- -- common_show_footer(); -- } -- -- function notify($from, $to, $message) { -- mail_notify_message($message, $from, $to); -- # XXX: Jabber, SMS notifications... probably queued -- } -+ if (!$user->mutuallySubscribed($other)) { -+ $this->client_error(_('You can\'t send a message to this user.'), 404); -+ return; -+ } -+ -+ common_show_header(_('New message'), NULL, -+ array($content, $user, $other), -+ array($this, 'show_top')); -+ -+ if ($msg) { -+ common_element('p', array('id'=>'error'), $msg); -+ } -+ -+ common_show_footer(); -+ } -+ -+ function notify($from, $to, $message) { -+ mail_notify_message($message, $from, $to); -+ # XXX: Jabber, SMS notifications... probably queued -+ } -hunk ./actions/newnotice.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/newnotice.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/newnotice.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/newnotice.php 29 -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -hunk ./actions/newnotice.php 33 -- # CSRF protection - token set in common_notice_form() -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection - token set in common_notice_form() -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/newnotice.php 40 -- $this->save_new_notice(); -- } else { -- $this->show_form(); -- } -- } -+ $this->save_new_notice(); -+ } else { -+ $this->show_form(); -+ } -+ } -hunk ./actions/newnotice.php 46 -- function save_new_notice() { -+ function save_new_notice() { -hunk ./actions/newnotice.php 48 -- $user = common_current_user(); -- assert($user); # XXX: maybe an error instead... -- $content = $this->trimmed('status_textarea'); -+ $user = common_current_user(); -+ assert($user); # XXX: maybe an error instead... -+ $content = $this->trimmed('status_textarea'); -hunk ./actions/newnotice.php 52 -- if (!$content) { -- $this->show_form(_('No content!')); -- return; -- } else { -- $content_shortened = common_shorten_links($content); -+ if (!$content) { -+ $this->show_form(_('No content!')); -+ return; -+ } else { -+ $content_shortened = common_shorten_links($content); -hunk ./actions/newnotice.php 58 -- if (mb_strlen($content_shortened) > 140) { -- common_debug("Content = '$content_shortened'", __FILE__); -- common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__); -- $this->show_form(_('That\'s too long. Max notice size is 140 chars.')); -- return; -- } -- } -+ if (mb_strlen($content_shortened) > 140) { -+ common_debug("Content = '$content_shortened'", __FILE__); -+ common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__); -+ $this->show_form(_('That\'s too long. Max notice size is 140 chars.')); -+ return; -+ } -+ } -hunk ./actions/newnotice.php 66 -- $inter = new CommandInterpreter(); -+ $inter = new CommandInterpreter(); -hunk ./actions/newnotice.php 68 -- $cmd = $inter->handle_command($user, $content_shortened); -+ $cmd = $inter->handle_command($user, $content_shortened); -hunk ./actions/newnotice.php 70 -- if ($cmd) { -- if ($this->boolean('ajax')) { -- $cmd->execute(new AjaxWebChannel()); -- } else { -- $cmd->execute(new WebChannel()); -- } -- return; -- } -+ if ($cmd) { -+ if ($this->boolean('ajax')) { -+ $cmd->execute(new AjaxWebChannel()); -+ } else { -+ $cmd->execute(new WebChannel()); -+ } -+ return; -+ } -hunk ./actions/newnotice.php 79 -- $replyto = $this->trimmed('inreplyto'); -+ $replyto = $this->trimmed('inreplyto'); +- function show_form($msg=NULL) { ++ function show_form($msg=null) { +hunk ./actions/newmessage.php 120 +- common_show_header(_('New message'), NULL, ++ common_show_header(_('New message'), null, hunk ./actions/newnotice.php 81 -- $notice = Notice::saveNew($user->id, $content, 'web', 1, ($replyto == 'false') ? NULL : $replyto); -+ $notice = Notice::saveNew($user->id, $content, 'web', 1, ($replyto == 'false') ? NULL : $replyto); -hunk ./actions/newnotice.php 83 -- if (is_string($notice)) { -- $this->show_form($notice); -- return; -- } -+ if (is_string($notice)) { -+ $this->show_form($notice); -+ return; -+ } -hunk ./actions/newnotice.php 88 -- common_broadcast_notice($notice); -+ common_broadcast_notice($notice); -hunk ./actions/newnotice.php 90 -- if ($this->boolean('ajax')) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Notice posted')); -- common_element_end('head'); -- common_element_start('body'); -- $this->show_notice($notice); -- common_element_end('body'); -- common_element_end('html'); -- } else { -- $returnto = $this->trimmed('returnto'); -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Notice posted')); -+ common_element_end('head'); -+ common_element_start('body'); -+ $this->show_notice($notice); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -+ $returnto = $this->trimmed('returnto'); -hunk ./actions/newnotice.php 102 -- if ($returnto) { -- $url = common_local_url($returnto, -- array('nickname' => $user->nickname)); -- } else { -- $url = common_local_url('shownotice', -- array('notice' => $notice->id)); -- } -- common_redirect($url, 303); -- } -- } -+ if ($returnto) { -+ $url = common_local_url($returnto, -+ array('nickname' => $user->nickname)); -+ } else { -+ $url = common_local_url('shownotice', -+ array('notice' => $notice->id)); -+ } -+ common_redirect($url, 303); -+ } -+ } -hunk ./actions/newnotice.php 113 -- function ajax_error_msg($msg) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Ajax Error')); -- common_element_end('head'); -- common_element_start('body'); -- common_element('p', array('id' => 'error'), $msg); -- common_element_end('body'); -- common_element_end('html'); -- } -+ function ajax_error_msg($msg) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Ajax Error')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_element('p', array('id' => 'error'), $msg); -+ common_element_end('body'); -+ common_element_end('html'); -+ } +- $notice = Notice::saveNew($user->id, $content, 'web', 1, ($replyto == 'false') ? NULL : $replyto); ++ $notice = Notice::saveNew($user->id, $content, 'web', 1, ($replyto == 'false') ? null : $replyto); hunk ./actions/newnotice.php 124 -- function show_top($content=NULL) { -- common_notice_form(NULL, $content); -- } -+ function show_top($content=NULL) { -+ common_notice_form(NULL, $content); -+ } +- function show_top($content=NULL) { +- common_notice_form(NULL, $content); ++ function show_top($content=null) { ++ common_notice_form(null, $content); hunk ./actions/newnotice.php 128 -- function show_form($msg=NULL) { -- if ($msg && $this->boolean('ajax')) { -- $this->ajax_error_msg($msg); -- return; -- } -- $content = $this->trimmed('status_textarea'); -- if (!$content) { -- $replyto = $this->trimmed('replyto'); -- $profile = Profile::staticGet('nickname', $replyto); -- if ($profile) { -- $content = '@' . $profile->nickname . ' '; -- } -- } -- common_show_header(_('New notice'), NULL, $content, -- array($this, 'show_top')); -- if ($msg) { -- common_element('p', array('id' => 'error'), $msg); -- } -- common_show_footer(); -- } -+ function show_form($msg=NULL) { -+ if ($msg && $this->boolean('ajax')) { -+ $this->ajax_error_msg($msg); -+ return; -+ } -+ $content = $this->trimmed('status_textarea'); -+ if (!$content) { -+ $replyto = $this->trimmed('replyto'); -+ $profile = Profile::staticGet('nickname', $replyto); -+ if ($profile) { -+ $content = '@' . $profile->nickname . ' '; -+ } -+ } -+ common_show_header(_('New notice'), NULL, $content, -+ array($this, 'show_top')); -+ if ($msg) { -+ common_element('p', array('id' => 'error'), $msg); -+ } -+ common_show_footer(); -+ } -hunk ./actions/newnotice.php 149 -- function show_notice($notice) { -+ function show_notice($notice) { -hunk ./actions/newnotice.php 152 -- } -+ } -hunk ./actions/noticesearch.php 28 -- function get_instructions() { -- return _('Search for notices on %%site.name%% by their contents. Separate search terms by spaces; they must be 3 characters or more.'); -- } -+ function get_instructions() { -+ return _('Search for notices on %%site.name%% by their contents. Separate search terms by spaces; they must be 3 characters or more.'); -+ } -hunk ./actions/noticesearch.php 32 -- function get_title() { -- return _('Text search'); -- } -+ function get_title() { -+ return _('Text search'); -+ } -hunk ./actions/noticesearch.php 36 -- function show_results($q, $page) { -+ function show_results($q, $page) { -hunk ./actions/noticesearch.php 38 -- $notice = new Notice(); -+ $notice = new Notice(); -hunk ./actions/noticesearch.php 40 -- # lcase it for comparison -- $q = strtolower($q); -+ # lcase it for comparison -+ $q = strtolower($q); -hunk ./actions/noticesearch.php 46 -- # Ask for an extra to see if there's more. -- $search_engine->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); -+ # Ask for an extra to see if there's more. -+ $search_engine->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); -hunk ./actions/noticesearch.php 53 -- $cnt = $notice->find(); -+ $cnt = $notice->find(); -+ } -+ if ($cnt > 0) { -+ $terms = preg_split('/[\s,]+/', $q); -+ common_element_start('ul', array('id' => 'notices')); -+ for ($i = 0; $i < min($cnt, NOTICES_PER_PAGE); $i++) { -+ if ($notice->fetch()) { -+ $this->show_notice($notice, $terms); -+ } else { -+ // shouldn't happen! -+ break; -+ } -+ } -+ common_element_end('ul'); -+ } else { -+ common_element('p', 'error', _('No results')); -hunk ./actions/noticesearch.php 70 -- if ($cnt > 0) { -- $terms = preg_split('/[\s,]+/', $q); -- common_element_start('ul', array('id' => 'notices')); -- for ($i = 0; $i < min($cnt, NOTICES_PER_PAGE); $i++) { -- if ($notice->fetch()) { -- $this->show_notice($notice, $terms); -- } else { -- // shouldn't happen! -- break; -- } -- } -- common_element_end('ul'); -- } else { -- common_element('p', 'error', _('No results')); -- } -hunk ./actions/noticesearch.php 71 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'noticesearch', array('q' => $q)); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'noticesearch', array('q' => $q)); -+ } -hunk ./actions/noticesearch.php 75 -- function show_header($arr) { -- if ($arr) { -- $q = $arr[0]; -- } -- if ($q) { -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('noticesearchrss', -- array('q' => $q)), -- 'type' => 'application/rss+xml', -- 'title' => _('Search Stream Feed'))); -- } -- } -+ function show_header($arr) { -+ if ($arr) { -+ $q = $arr[0]; -+ } -+ if ($q) { -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('noticesearchrss', -+ array('q' => $q)), -+ 'type' => 'application/rss+xml', -+ 'title' => _('Search Stream Feed'))); -+ } -+ } -hunk ./actions/noticesearch.php 88 -- # XXX: refactor and combine with StreamAction::show_notice() -+ # XXX: refactor and combine with StreamAction::show_notice() -hunk ./actions/noticesearch.php 90 -- function show_notice($notice, $terms) { -- $profile = $notice->getProfile(); -- if (!$profile) { -- common_log_db_error($notice, 'SELECT', __FILE__); -- $this->server_error(_('Notice without matching profile')); -- return; -- } -- # XXX: RDFa -- common_element_start('li', array('class' => 'notice_single', -- 'id' => 'notice-' . $notice->id)); -- $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); -- common_element_start('a', array('href' => $profile->profileurl)); -- common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), -- 'class' => 'avatar stream', -- 'width' => AVATAR_STREAM_SIZE, -- 'height' => AVATAR_STREAM_SIZE, -- 'alt' => -- ($profile->fullname) ? $profile->fullname : -- $profile->nickname)); -- common_element_end('a'); -- common_element('a', array('href' => $profile->profileurl, -- 'class' => 'nickname'), -- $profile->nickname); -- # FIXME: URL, image, video, audio -- common_element_start('p', array('class' => 'content')); -- if ($notice->rendered) { -- common_raw($this->highlight($notice->rendered, $terms)); -- } else { -- # XXX: may be some uncooked notices in the DB, -- # we cook them right now. This should probably disappear in future -- # versions (>> 0.4.x) -- common_raw($this->highlight(common_render_content($notice->content, $notice), $terms)); -- } -- common_element_end('p'); -- $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); -- common_element_start('p', 'time'); -- common_element('a', array('class' => 'permalink', -- 'href' => $noticeurl, -- 'title' => common_exact_date($notice->created)), -- common_date_string($notice->created)); -- if ($notice->reply_to) { -- $replyurl = common_local_url('shownotice', array('notice' => $notice->reply_to)); -- common_text(' ('); -- common_element('a', array('class' => 'inreplyto', -- 'href' => $replyurl), -- _('in reply to...')); -- common_text(')'); -- } -- common_element_start('a', -- array('href' => common_local_url('newnotice', -- array('replyto' => $profile->nickname)), -- 'onclick' => 'doreply("'.$profile->nickname.'"); return false', -- 'title' => _('reply'), -- 'class' => 'replybutton')); -- common_hidden('posttoken', common_session_token()); -- -- common_raw('→'); -- common_element_end('a'); -- common_element_end('p'); -- common_element_end('li'); -- } -+ function show_notice($notice, $terms) { -+ $profile = $notice->getProfile(); -+ if (!$profile) { -+ common_log_db_error($notice, 'SELECT', __FILE__); -+ $this->server_error(_('Notice without matching profile')); -+ return; -+ } -+ # XXX: RDFa -+ common_element_start('li', array('class' => 'notice_single', -+ 'id' => 'notice-' . $notice->id)); -+ $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); -+ common_element_start('a', array('href' => $profile->profileurl)); -+ common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), -+ 'class' => 'avatar stream', -+ 'width' => AVATAR_STREAM_SIZE, -+ 'height' => AVATAR_STREAM_SIZE, -+ 'alt' => -+ ($profile->fullname) ? $profile->fullname : -+ $profile->nickname)); -+ common_element_end('a'); -+ common_element('a', array('href' => $profile->profileurl, -+ 'class' => 'nickname'), -+ $profile->nickname); -+ # FIXME: URL, image, video, audio -+ common_element_start('p', array('class' => 'content')); -+ if ($notice->rendered) { -+ common_raw($this->highlight($notice->rendered, $terms)); -+ } else { -+ # XXX: may be some uncooked notices in the DB, -+ # we cook them right now. This should probably disappear in future -+ # versions (>> 0.4.x) -+ common_raw($this->highlight(common_render_content($notice->content, $notice), $terms)); -+ } -+ common_element_end('p'); -+ $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); -+ common_element_start('p', 'time'); -+ common_element('a', array('class' => 'permalink', -+ 'href' => $noticeurl, -+ 'title' => common_exact_date($notice->created)), -+ common_date_string($notice->created)); -+ if ($notice->reply_to) { -+ $replyurl = common_local_url('shownotice', array('notice' => $notice->reply_to)); -+ common_text(' ('); -+ common_element('a', array('class' => 'inreplyto', -+ 'href' => $replyurl), -+ _('in reply to...')); -+ common_text(')'); -+ } -+ common_element_start('a', -+ array('href' => common_local_url('newnotice', -+ array('replyto' => $profile->nickname)), -+ 'onclick' => 'doreply("'.$profile->nickname.'"); return false', -+ 'title' => _('reply'), -+ 'class' => 'replybutton')); -+ common_hidden('posttoken', common_session_token()); -+ -+ common_raw('→'); -+ common_element_end('a'); -+ common_element_end('p'); -+ common_element_end('li'); -+ } -hunk ./actions/noticesearch.php 152 -- function highlight($text, $terms) { -- /* Highligh serach terms */ -- $pattern = '/('.implode('|',array_map('htmlspecialchars', $terms)).')/i'; -- $result = preg_replace($pattern, '\\1', $text); -+ function highlight($text, $terms) { -+ /* Highligh serach terms */ -+ $pattern = '/('.implode('|',array_map('htmlspecialchars', $terms)).')/i'; -+ $result = preg_replace($pattern, '\\1', $text); -hunk ./actions/noticesearch.php 157 -- /* Remove highlighting from inside links, loop incase multiple highlights in links */ -- $pattern = '/(href="[^"]*)('.implode('|',array_map('htmlspecialchars', $terms)).')<\/strong>([^"]*")/iU'; -- do { -- $result = preg_replace($pattern, '\\1\\2\\3', $result, -1, $count); -- } while ($count); -- return $result; -- } -+ /* Remove highlighting from inside links, loop incase multiple highlights in links */ -+ $pattern = '/(href="[^"]*)('.implode('|',array_map('htmlspecialchars', $terms)).')<\/strong>([^"]*")/iU'; -+ do { -+ $result = preg_replace($pattern, '\\1\\2\\3', $result, -1, $count); -+ } while ($count); -+ return $result; -+ } -hunk ./actions/noticesearchrss.php 28 -- function init() { -- return true; -- } -+ function init() { -+ return true; -+ } -hunk ./actions/noticesearchrss.php 32 -- function get_notices($limit=0) { -+ function get_notices($limit=0) { -hunk ./actions/noticesearchrss.php 34 -- $q = $this->trimmed('q'); -- $notices = array(); -+ $q = $this->trimmed('q'); -+ $notices = array(); -hunk ./actions/noticesearchrss.php 37 -- $notice = new Notice(); -+ $notice = new Notice(); -hunk ./actions/noticesearchrss.php 39 -- # lcase it for comparison -- $q = strtolower($q); -+ # lcase it for comparison -+ $q = strtolower($q); -hunk ./actions/noticesearchrss.php 45 -- if (!$limit) $limit = 20; -+ if (!$limit) $limit = 20; -hunk ./actions/noticesearchrss.php 48 -- $notice->find(); -+ $notice->find(); -hunk ./actions/noticesearchrss.php 50 -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/noticesearchrss.php 54 -- return $notices; -- } -+ return $notices; -+ } -hunk ./actions/noticesearchrss.php 57 -- function get_channel() { -- global $config; -- $q = $this->trimmed('q'); -- $c = array('url' => common_local_url('noticesearchrss', array('q' => $q)), -- 'title' => $config['site']['name'] . sprintf(_(' Search Stream for "%s"'), $q), -- 'link' => common_local_url('noticesearch', array('q' => $q)), -- 'description' => sprintf(_('All updates matching search term "%s"'), $q)); -- return $c; -- } -+ function get_channel() { -+ global $config; -+ $q = $this->trimmed('q'); -+ $c = array('url' => common_local_url('noticesearchrss', array('q' => $q)), -+ 'title' => $config['site']['name'] . sprintf(_(' Search Stream for "%s"'), $q), -+ 'link' => common_local_url('noticesearch', array('q' => $q)), -+ 'description' => sprintf(_('All updates matching search term "%s"'), $q)); -+ return $c; -+ } -hunk ./actions/noticesearchrss.php 67 -- function get_image() { -- return NULL; -- } -+ function get_image() { -+ return NULL; -+ } -hunk ./actions/nudge.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/nudge.php 29 -- if (!common_logged_in()) { -- $this->client_error(_('Not logged in.')); -- return; -- } -+ if (!common_logged_in()) { -+ $this->client_error(_('Not logged in.')); -+ return; -+ } -hunk ./actions/nudge.php 34 -- $user = common_current_user(); -- $other = User::staticGet('nickname', $this->arg('nickname')); -+ $user = common_current_user(); -+ $other = User::staticGet('nickname', $this->arg('nickname')); -hunk ./actions/nudge.php 37 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- common_redirect(common_local_url('showstream', array('nickname' => $other->nickname))); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ common_redirect(common_local_url('showstream', array('nickname' => $other->nickname))); -+ return; -+ } -hunk ./actions/nudge.php 42 -- # CSRF protection -+ # CSRF protection -hunk ./actions/nudge.php 44 -- $token = $this->trimmed('token'); -- -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ $token = $this->trimmed('token'); -+ -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/nudge.php 56 -- $this->notify($user, $other); -+ $this->notify($user, $other); -hunk ./actions/nudge.php 58 -- if ($this->boolean('ajax')) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Nudge sent')); -- common_element_end('head'); -- common_element_start('body'); -- common_nudge_response(); -- common_element_end('body'); -- common_element_end('html'); -- } else { -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Nudge sent')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_nudge_response(); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -hunk ./actions/nudge.php 69 -- common_redirect(common_local_url('showstream', -- array('nickname' => $other->nickname))); -- } -- } -+ common_redirect(common_local_url('showstream', -+ array('nickname' => $other->nickname))); -+ } -+ } -hunk ./actions/nudge.php 74 -- function notify($user, $other) { -- if ($other->id != $user->id) { -- if ($other->email && $other->emailnotifynudge) { -- mail_notify_nudge($user, $other); -- } -- # XXX: notify by IM -- # XXX: notify by SMS -- } -- } -+ function notify($user, $other) { -+ if ($other->id != $user->id) { -+ if ($other->email && $other->emailnotifynudge) { -+ mail_notify_nudge($user, $other); -+ } -+ # XXX: notify by IM -+ # XXX: notify by SMS -+ } -+ } -hunk ./actions/openidlogin.php 26 -- function handle($args) { -- parent::handle($args); -- if (common_logged_in()) { -- common_user_error(_('Already logged in.')); -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $openid_url = $this->trimmed('openid_url'); -+ function handle($args) { -+ parent::handle($args); -+ if (common_logged_in()) { -+ common_user_error(_('Already logged in.')); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $openid_url = $this->trimmed('openid_url'); -hunk ./actions/openidlogin.php 33 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.'), $openid_url); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.'), $openid_url); -+ return; -+ } -hunk ./actions/openidlogin.php 40 -- $rememberme = $this->boolean('rememberme'); -- -- common_ensure_session(); -- -- $_SESSION['openid_rememberme'] = $rememberme; -- -- $result = oid_authenticate($openid_url, -- 'finishopenidlogin'); -- -- if (is_string($result)) { # error message -- unset($_SESSION['openid_rememberme']); -- $this->show_form($result, $openid_url); -- } -- } else { -- $openid_url = oid_get_last(); -- $this->show_form(NULL, $openid_url); -- } -- } -+ $rememberme = $this->boolean('rememberme'); -+ -+ common_ensure_session(); -+ -+ $_SESSION['openid_rememberme'] = $rememberme; -+ -+ $result = oid_authenticate($openid_url, -+ 'finishopenidlogin'); -+ -+ if (is_string($result)) { # error message -+ unset($_SESSION['openid_rememberme']); -+ $this->show_form($result, $openid_url); -+ } -+ } else { -+ $openid_url = oid_get_last(); -+ $this->show_form(NULL, $openid_url); -+ } -+ } -hunk ./actions/openidlogin.php 59 -- function get_instructions() { -- return _('Login with an [OpenID](%%doc.openid%%) account.'); -- } -+ function get_instructions() { -+ return _('Login with an [OpenID](%%doc.openid%%) account.'); -+ } +- function show_form($msg=NULL) { ++ function show_form($msg=null) { +hunk ./actions/newnotice.php 141 +- common_show_header(_('New notice'), NULL, $content, ++ common_show_header(_('New notice'), null, $content, +hunk ./actions/noticesearchrss.php 68 +- return NULL; ++ return null; +hunk ./actions/openidlogin.php 55 +- $this->show_form(NULL, $openid_url); ++ $this->show_form(null, $openid_url); hunk ./actions/openidlogin.php 63 -- function show_top($error=NULL) { -- if ($error) { -- common_element('div', array('class' => 'error'), $error); -- } else { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- } -- } -+ function show_top($error=NULL) { -+ if ($error) { -+ common_element('div', array('class' => 'error'), $error); -+ } else { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ } -+ } +- function show_top($error=NULL) { ++ function show_top($error=null) { hunk ./actions/openidlogin.php 75 -- function show_form($error=NULL, $openid_url) { -- common_show_header(_('OpenID Login'), NULL, $error, array($this, 'show_top')); -- $formaction = common_local_url('openidlogin'); -- common_element_start('form', array('method' => 'post', -- 'id' => 'openidlogin', -- 'action' => $formaction)); -- common_hidden('token', common_session_token()); -- common_input('openid_url', _('OpenID URL'), -- $openid_url, -- _('Your OpenID URL')); -- common_checkbox('rememberme', _('Remember me'), false, -- _('Automatically login in the future; ' . -- 'not for shared computers!')); -- common_submit('submit', _('Login')); -- common_element_end('form'); -- common_show_footer(); -- } -+ function show_form($error=NULL, $openid_url) { -+ common_show_header(_('OpenID Login'), NULL, $error, array($this, 'show_top')); -+ $formaction = common_local_url('openidlogin'); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'openidlogin', -+ 'action' => $formaction)); -+ common_hidden('token', common_session_token()); -+ common_input('openid_url', _('OpenID URL'), -+ $openid_url, -+ _('Your OpenID URL')); -+ common_checkbox('rememberme', _('Remember me'), false, -+ _('Automatically login in the future; ' . -+ 'not for shared computers!')); -+ common_submit('submit', _('Login')); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/openidsettings.php 27 -- function get_instructions() { -- return _('[OpenID](%%doc.openid%%) lets you log into many sites ' . -- ' with the same user account. '. -- ' Manage your associated OpenIDs from here.'); -- } -+ function get_instructions() { -+ return _('[OpenID](%%doc.openid%%) lets you log into many sites ' . -+ ' with the same user account. '. -+ ' Manage your associated OpenIDs from here.'); -+ } +- function show_form($error=NULL, $openid_url) { +- common_show_header(_('OpenID Login'), NULL, $error, array($this, 'show_top')); ++ function show_form($error=null, $openid_url) { ++ common_show_header(_('OpenID Login'), null, $error, array($this, 'show_top')); hunk ./actions/openidsettings.php 33 -- function show_form($msg=NULL, $success=false) { -+ function show_form($msg=NULL, $success=false) { -hunk ./actions/openidsettings.php 35 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/openidsettings.php 37 -- $this->form_header(_('OpenID settings'), $msg, $success); -+ $this->form_header(_('OpenID settings'), $msg, $success); -hunk ./actions/openidsettings.php 39 -- common_element_start('form', array('method' => 'post', -- 'id' => 'openidadd', -- 'action' => -- common_local_url('openidsettings'))); -- common_hidden('token', common_session_token()); -- common_element('h2', NULL, _('Add OpenID')); -- common_element('p', NULL, -- _('If you want to add an OpenID to your account, ' . -- 'enter it in the box below and click "Add".')); -- common_element_start('p'); -- common_element('label', array('for' => 'openid_url'), -- _('OpenID URL')); -- common_element('input', array('name' => 'openid_url', -- 'type' => 'text', -- 'id' => 'openid_url')); -- common_element('input', array('type' => 'submit', -- 'id' => 'add', -- 'name' => 'add', -- 'class' => 'submit', -- 'value' => _('Add'))); -- common_element_end('p'); -- common_element_end('form'); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'openidadd', -+ 'action' => -+ common_local_url('openidsettings'))); -+ common_hidden('token', common_session_token()); -+ common_element('h2', NULL, _('Add OpenID')); -+ common_element('p', NULL, -+ _('If you want to add an OpenID to your account, ' . -+ 'enter it in the box below and click "Add".')); -+ common_element_start('p'); -+ common_element('label', array('for' => 'openid_url'), -+ _('OpenID URL')); -+ common_element('input', array('name' => 'openid_url', -+ 'type' => 'text', -+ 'id' => 'openid_url')); -+ common_element('input', array('type' => 'submit', -+ 'id' => 'add', -+ 'name' => 'add', -+ 'class' => 'submit', -+ 'value' => _('Add'))); -+ common_element_end('p'); -+ common_element_end('form'); -hunk ./actions/openidsettings.php 62 -- $oid = new User_openid(); -- $oid->user_id = $user->id; -+ $oid = new User_openid(); -+ $oid->user_id = $user->id; -hunk ./actions/openidsettings.php 65 -- $cnt = $oid->find(); -+ $cnt = $oid->find(); -hunk ./actions/openidsettings.php 67 -- if ($cnt > 0) { -+ if ($cnt > 0) { +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { +hunk ./actions/openidsettings.php 44 +- common_element('h2', NULL, _('Add OpenID')); +- common_element('p', NULL, ++ common_element('h2', null, _('Add OpenID')); ++ common_element('p', null, hunk ./actions/openidsettings.php 69 -- common_element('h2', NULL, _('Remove OpenID')); -+ common_element('h2', NULL, _('Remove OpenID')); -hunk ./actions/openidsettings.php 71 -- if ($cnt == 1 && !$user->password) { -+ if ($cnt == 1 && !$user->password) { +- common_element('h2', NULL, _('Remove OpenID')); ++ common_element('h2', null, _('Remove OpenID')); hunk ./actions/openidsettings.php 73 -- common_element('p', NULL, -- _('Removing your only OpenID would make it impossible to log in! ' . -- 'If you need to remove it, add another OpenID first.')); -+ common_element('p', NULL, -+ _('Removing your only OpenID would make it impossible to log in! ' . -+ 'If you need to remove it, add another OpenID first.')); -hunk ./actions/openidsettings.php 77 -- if ($oid->fetch()) { -- common_element_start('p'); -- common_element('a', array('href' => $oid->canonical), -- $oid->display); -- common_element_end('p'); -- } -+ if ($oid->fetch()) { -+ common_element_start('p'); -+ common_element('a', array('href' => $oid->canonical), -+ $oid->display); -+ common_element_end('p'); -+ } -hunk ./actions/openidsettings.php 84 -- } else { -+ } else { +- common_element('p', NULL, ++ common_element('p', null, hunk ./actions/openidsettings.php 86 -- common_element('p', NULL, -- _('You can remove an OpenID from your account '. -- 'by clicking the button marked "Remove".')); -- $idx = 0; -+ common_element('p', NULL, -+ _('You can remove an OpenID from your account '. -+ 'by clicking the button marked "Remove".')); -+ $idx = 0; -hunk ./actions/openidsettings.php 91 -- while ($oid->fetch()) { -- common_element_start('form', array('method' => 'POST', -- 'id' => 'openiddelete' . $idx, -- 'action' => -- common_local_url('openidsettings'))); -- common_element_start('p'); -- common_hidden('token', common_session_token()); -- common_element('a', array('href' => $oid->canonical), -- $oid->display); -- common_element('input', array('type' => 'hidden', -- 'id' => 'openid_url'.$idx, -- 'name' => 'openid_url', -- 'value' => $oid->canonical)); -- common_element('input', array('type' => 'submit', -- 'id' => 'remove'.$idx, -- 'name' => 'remove', -- 'class' => 'submit', -- 'value' => _('Remove'))); -- common_element_end('p'); -- common_element_end('form'); -- $idx++; -- } -- } -- } -+ while ($oid->fetch()) { -+ common_element_start('form', array('method' => 'POST', -+ 'id' => 'openiddelete' . $idx, -+ 'action' => -+ common_local_url('openidsettings'))); -+ common_element_start('p'); -+ common_hidden('token', common_session_token()); -+ common_element('a', array('href' => $oid->canonical), -+ $oid->display); -+ common_element('input', array('type' => 'hidden', -+ 'id' => 'openid_url'.$idx, -+ 'name' => 'openid_url', -+ 'value' => $oid->canonical)); -+ common_element('input', array('type' => 'submit', -+ 'id' => 'remove'.$idx, -+ 'name' => 'remove', -+ 'class' => 'submit', -+ 'value' => _('Remove'))); -+ common_element_end('p'); -+ common_element_end('form'); -+ $idx++; -+ } -+ } -+ } -hunk ./actions/openidsettings.php 116 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/openidsettings.php 119 -- function handle_post() { -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ function handle_post() { -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/openidsettings.php 127 -- if ($this->arg('add')) { -- $result = oid_authenticate($this->trimmed('openid_url'), 'finishaddopenid'); -- if (is_string($result)) { # error message -- $this->show_form($result); -- } -- } else if ($this->arg('remove')) { -- $this->remove_openid(); -- } else { -- $this->show_form(_('Something weird happened.')); -- } -- } -+ if ($this->arg('add')) { -+ $result = oid_authenticate($this->trimmed('openid_url'), 'finishaddopenid'); -+ if (is_string($result)) { # error message -+ $this->show_form($result); -+ } -+ } else if ($this->arg('remove')) { -+ $this->remove_openid(); -+ } else { -+ $this->show_form(_('Something weird happened.')); -+ } -+ } -hunk ./actions/openidsettings.php 139 -- function remove_openid() { -+ function remove_openid() { -hunk ./actions/openidsettings.php 141 -- $openid_url = $this->trimmed('openid_url'); -- $oid = User_openid::staticGet('canonical', $openid_url); -- if (!$oid) { -- $this->show_form(_('No such OpenID.')); -- return; -- } -- $cur = common_current_user(); -- if (!$cur || $oid->user_id != $cur->id) { -- $this->show_form(_('That OpenID does not belong to you.')); -- return; -- } -- $oid->delete(); -- $this->show_form(_('OpenID removed.'), true); -- return; -- } -+ $openid_url = $this->trimmed('openid_url'); -+ $oid = User_openid::staticGet('canonical', $openid_url); -+ if (!$oid) { -+ $this->show_form(_('No such OpenID.')); -+ return; -+ } -+ $cur = common_current_user(); -+ if (!$cur || $oid->user_id != $cur->id) { -+ $this->show_form(_('That OpenID does not belong to you.')); -+ return; -+ } -+ $oid->delete(); -+ $this->show_form(_('OpenID removed.'), true); -+ return; -+ } -hunk ./actions/opensearch.php 24 -- function handle($args) { -+ function handle($args) { -hunk ./actions/opensearch.php 26 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/opensearch.php 28 -- $type = $this->trimmed('type'); -+ $type = $this->trimmed('type'); -hunk ./actions/opensearch.php 30 -- $short_name = ''; -- if ($type == 'people') { -- $type = 'peoplesearch'; -- $short_name = _('People Search'); -- } else { -- $short_name = _('Notice Search'); -- $type = 'noticesearch'; -- } -+ $short_name = ''; -+ if ($type == 'people') { -+ $type = 'peoplesearch'; -+ $short_name = _('People Search'); -+ } else { -+ $short_name = _('Notice Search'); -+ $type = 'noticesearch'; -+ } -hunk ./actions/opensearch.php 39 -- header('Content-Type: text/html'); -+ header('Content-Type: text/html'); -hunk ./actions/opensearch.php 41 -- common_start_xml(); -- common_element_start('OpenSearchDescription', array('xmlns' => 'http://a9.com/-/spec/opensearch/1.1/')); -+ common_start_xml(); -+ common_element_start('OpenSearchDescription', array('xmlns' => 'http://a9.com/-/spec/opensearch/1.1/')); -hunk ./actions/opensearch.php 44 -- $short_name = common_config('site', 'name').' '.$short_name; -- common_element('ShortName', NULL, $short_name); -- common_element('Contact', NULL, common_config('site', 'email')); -- common_element('Url', array('type' => 'text/html', 'method' => 'get', -- 'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---'))))); -- common_element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico')); -- common_element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), theme_path('logo.png')); -- common_element('AdultContent', NULL, 'false'); -- common_element('Language', NULL, common_language()); -- common_element('OutputEncoding', NULL, 'UTF-8'); -- common_element('InputEncoding', NULL, 'UTF-8'); -+ $short_name = common_config('site', 'name').' '.$short_name; -+ common_element('ShortName', NULL, $short_name); -+ common_element('Contact', NULL, common_config('site', 'email')); -+ common_element('Url', array('type' => 'text/html', 'method' => 'get', -+ 'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---'))))); -+ common_element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico')); -+ common_element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), theme_path('logo.png')); -+ common_element('AdultContent', NULL, 'false'); -+ common_element('Language', NULL, common_language()); -+ common_element('OutputEncoding', NULL, 'UTF-8'); -+ common_element('InputEncoding', NULL, 'UTF-8'); -hunk ./actions/opensearch.php 56 -- common_element_end('OpenSearchDescription'); -- common_end_xml(); -- } -+ common_element_end('OpenSearchDescription'); -+ common_end_xml(); -+ } -hunk ./actions/othersettings.php 26 -- function get_instructions() { -- return _('Manage various other options.'); -- } -+ function get_instructions() { -+ return _('Manage various other options.'); -+ } +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/opensearch.php 45 +- common_element('ShortName', NULL, $short_name); +- common_element('Contact', NULL, common_config('site', 'email')); ++ common_element('ShortName', null, $short_name); ++ common_element('Contact', null, common_config('site', 'email')); +hunk ./actions/opensearch.php 51 +- common_element('AdultContent', NULL, 'false'); +- common_element('Language', NULL, common_language()); +- common_element('OutputEncoding', NULL, 'UTF-8'); +- common_element('InputEncoding', NULL, 'UTF-8'); ++ common_element('AdultContent', null, 'false'); ++ common_element('Language', null, common_language()); ++ common_element('OutputEncoding', null, 'UTF-8'); ++ common_element('InputEncoding', null, 'UTF-8'); hunk ./actions/othersettings.php 30 -- function show_form($msg=NULL, $success=false) { -- $user = common_current_user(); -+ function show_form($msg=NULL, $success=false) { -+ $user = common_current_user(); -hunk ./actions/othersettings.php 33 -- $this->form_header(_('Other Settings'), $msg, $success); -+ $this->form_header(_('Other Settings'), $msg, $success); +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { hunk ./actions/othersettings.php 35 -- common_element('h2', NULL, _('URL Auto-shortening')); -- common_element_start('form', array('method' => 'post', -- 'id' => 'othersettings', -- 'action' => -- common_local_url('othersettings'))); -- common_hidden('token', common_session_token()); -+ common_element('h2', NULL, _('URL Auto-shortening')); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'othersettings', -+ 'action' => -+ common_local_url('othersettings'))); -+ common_hidden('token', common_session_token()); -hunk ./actions/othersettings.php 42 -- $services = array( -- '' => 'None', -+ $services = array( -+ '' => 'None', -hunk ./actions/othersettings.php 48 -- 'tinyurl.com' => 'tinyurl.com', -- 'is.gd' => 'is.gd', -- 'snipr.com' => 'snipr.com', -- 'metamark.net' => 'metamark.net' -- ); -+ 'tinyurl.com' => 'tinyurl.com', -+ 'is.gd' => 'is.gd', -+ 'snipr.com' => 'snipr.com', -+ 'metamark.net' => 'metamark.net' -+ ); -hunk ./actions/othersettings.php 54 -- common_dropdown('urlshorteningservice', _('Service'), $services, _('Automatic shortening service to use.'), FALSE, $user->urlshorteningservice); -+ common_dropdown('urlshorteningservice', _('Service'), $services, _('Automatic shortening service to use.'), FALSE, $user->urlshorteningservice); -hunk ./actions/othersettings.php 56 -- common_submit('save', _('Save')); -+ common_submit('save', _('Save')); -hunk ./actions/othersettings.php 58 -- common_element_end('form'); -+ common_element_end('form'); +- common_element('h2', NULL, _('URL Auto-shortening')); ++ common_element('h2', null, _('URL Auto-shortening')); hunk ./actions/othersettings.php 60 --// common_element('h2', NULL, _('Delete my account')); --// $this->show_delete_form(); -+// common_element('h2', NULL, _('Delete my account')); -+// $this->show_delete_form(); -hunk ./actions/othersettings.php 63 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/othersettings.php 66 -- function show_feeds_list($feeds) { -- common_element_start('div', array('class' => 'feedsdel')); -- common_element('p', null, 'Feeds:'); -- common_element_start('ul', array('class' => 'xoxo')); -+ function show_feeds_list($feeds) { -+ common_element_start('div', array('class' => 'feedsdel')); -+ common_element('p', null, 'Feeds:'); -+ common_element_start('ul', array('class' => 'xoxo')); -hunk ./actions/othersettings.php 71 -- foreach ($feeds as $key => $value) { -- $this->common_feed_item($feeds[$key]); -- } -- common_element_end('ul'); -- common_element_end('div'); -- } -+ foreach ($feeds as $key => $value) { -+ $this->common_feed_item($feeds[$key]); -+ } -+ common_element_end('ul'); -+ common_element_end('div'); -+ } -hunk ./actions/othersettings.php 79 -- function common_feed_item($feed) { -+ function common_feed_item($feed) { -hunk ./actions/othersettings.php 81 -- $nickname = $user->nickname; -+ $nickname = $user->nickname; -hunk ./actions/othersettings.php 83 -- switch($feed['item']) { -- case 'notices': default: -- $feed_classname = $feed['type']; -- $feed_mimetype = "application/".$feed['type']."+xml"; -- $feed_title = "$nickname's ".$feed['version']." notice feed"; -- $feed['textContent'] = "RSS"; -- break; -+ switch($feed['item']) { -+ case 'notices': default: -+ $feed_classname = $feed['type']; -+ $feed_mimetype = "application/".$feed['type']."+xml"; -+ $feed_title = "$nickname's ".$feed['version']." notice feed"; -+ $feed['textContent'] = "RSS"; -+ break; -hunk ./actions/othersettings.php 91 -- case 'foaf': -- $feed_classname = "foaf"; -- $feed_mimetype = "application/".$feed['type']."+xml"; -- $feed_title = "$nickname's FOAF file"; -- $feed['textContent'] = "FOAF"; -- break; -- } -- common_element_start('li'); -- common_element('a', array('href' => $feed['href'], -- 'class' => $feed_classname, -- 'type' => $feed_mimetype, -- 'title' => $feed_title), -- $feed['textContent']); -- common_element_end('li'); -- } -+ case 'foaf': -+ $feed_classname = "foaf"; -+ $feed_mimetype = "application/".$feed['type']."+xml"; -+ $feed_title = "$nickname's FOAF file"; -+ $feed['textContent'] = "FOAF"; -+ break; -+ } -+ common_element_start('li'); -+ common_element('a', array('href' => $feed['href'], -+ 'class' => $feed_classname, -+ 'type' => $feed_mimetype, -+ 'title' => $feed_title), -+ $feed['textContent']); -+ common_element_end('li'); -+ } -hunk ./actions/othersettings.php 107 --// function show_delete_form() { --// $user = common_current_user(); -+// function show_delete_form() { -+// $user = common_current_user(); -hunk ./actions/othersettings.php 113 --// common_element_start('form', array('method' => 'POST', --// 'id' => 'delete', --// 'action' => --// common_local_url('deleteprofile'))); -+// common_element_start('form', array('method' => 'POST', -+// 'id' => 'delete', -+// 'action' => -+// common_local_url('deleteprofile'))); -hunk ./actions/othersettings.php 118 --// common_hidden('token', common_session_token()); -+// common_hidden('token', common_session_token()); -hunk ./actions/othersettings.php 121 --// $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('limit' => $notice_count, 'nickname' => $user->nickname)), --// 'type' => 'rss', --// 'version' => 'RSS 1.0', --// 'item' => 'notices'), --// 1=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), --// 'type' => 'rdf', --// 'version' => 'FOAF', --// 'item' => 'foaf'))); -+// $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('limit' => $notice_count, 'nickname' => $user->nickname)), -+// 'type' => 'rss', -+// 'version' => 'RSS 1.0', -+// 'item' => 'notices'), -+// 1=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), -+// 'type' => 'rdf', -+// 'version' => 'FOAF', -+// 'item' => 'foaf'))); -hunk ./actions/othersettings.php 130 --// common_submit('deleteaccount', _('Delete my account')); --// common_element_end('form'); --// } -+// common_submit('deleteaccount', _('Delete my account')); -+// common_element_end('form'); -+// } -hunk ./actions/othersettings.php 134 -- function handle_post() { -+ function handle_post() { -hunk ./actions/othersettings.php 136 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/othersettings.php 143 -- if ($this->arg('save')) { -- $this->save_preferences(); -- }else { -- $this->show_form(_('Unexpected form submission.')); -- } -- } -+ if ($this->arg('save')) { -+ $this->save_preferences(); -+ }else { -+ $this->show_form(_('Unexpected form submission.')); -+ } -+ } -hunk ./actions/othersettings.php 150 -- function save_preferences() { -+ function save_preferences() { -hunk ./actions/othersettings.php 152 -- $urlshorteningservice = $this->trimmed('urlshorteningservice'); -+ $urlshorteningservice = $this->trimmed('urlshorteningservice'); -hunk ./actions/othersettings.php 154 -- if (!is_null($urlshorteningservice) && strlen($urlshorteningservice) > 50) { -- $this->show_form(_('URL shortening service is too long (max 50 chars).')); -- return; -- } -+ if (!is_null($urlshorteningservice) && strlen($urlshorteningservice) > 50) { -+ $this->show_form(_('URL shortening service is too long (max 50 chars).')); -+ return; -+ } -hunk ./actions/othersettings.php 159 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/othersettings.php 161 -- assert(!is_null($user)); # should already be checked -+ assert(!is_null($user)); # should already be checked -hunk ./actions/othersettings.php 163 -- $user->query('BEGIN'); -+ $user->query('BEGIN'); -hunk ./actions/othersettings.php 165 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/othersettings.php 167 -- $user->urlshorteningservice = $urlshorteningservice; -+ $user->urlshorteningservice = $urlshorteningservice; -hunk ./actions/othersettings.php 169 -- $result = $user->update($original); -+ $result = $user->update($original); -hunk ./actions/othersettings.php 171 -- if ($result === FALSE) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -hunk ./actions/othersettings.php 177 -- $user->query('COMMIT'); -+ $user->query('COMMIT'); -hunk ./actions/othersettings.php 179 -- $this->show_form(_('Preferences saved.'), true); -- } -+ $this->show_form(_('Preferences saved.'), true); -+ } -hunk ./actions/peoplesearch.php 27 -- function get_instructions() { -- return _('Search for people on %%site.name%% by their name, location, or interests. ' . -- 'Separate the terms by spaces; they must be 3 characters or more.'); -- } -+ function get_instructions() { -+ return _('Search for people on %%site.name%% by their name, location, or interests. ' . -+ 'Separate the terms by spaces; they must be 3 characters or more.'); -+ } -hunk ./actions/peoplesearch.php 32 -- function get_title() { -- return _('People search'); -- } -+ function get_title() { -+ return _('People search'); -+ } -hunk ./actions/peoplesearch.php 36 -- function show_results($q, $page) { -+ function show_results($q, $page) { -hunk ./actions/peoplesearch.php 38 -- $profile = new Profile(); -+ $profile = new Profile(); -hunk ./actions/peoplesearch.php 40 -- # lcase it for comparison -- $q = strtolower($q); -+ # lcase it for comparison -+ $q = strtolower($q); -hunk ./actions/peoplesearch.php 46 -- # Ask for an extra to see if there's more. -+ # Ask for an extra to see if there's more. -hunk ./actions/peoplesearch.php 52 -- $cnt = $profile->find(); -+ $cnt = $profile->find(); -+ } -+ if ($cnt > 0) { -+ $terms = preg_split('/[\s,]+/', $q); -+ $results = new PeopleSearchResults($profile, $terms); -+ $results->show_list(); -+ } else { -+ common_element('p', 'error', _('No results')); -hunk ./actions/peoplesearch.php 61 -- if ($cnt > 0) { -- $terms = preg_split('/[\s,]+/', $q); -- $results = new PeopleSearchResults($profile, $terms); -- $results->show_list(); -- } else { -- common_element('p', 'error', _('No results')); -- } -hunk ./actions/peoplesearch.php 62 -- $profile->free(); -- -- common_pagination($page > 1, $cnt > PROFILES_PER_PAGE, -- $page, 'peoplesearch', array('q' => $q)); -- } -+ $profile->free(); -+ -+ common_pagination($page > 1, $cnt > PROFILES_PER_PAGE, -+ $page, 'peoplesearch', array('q' => $q)); -+ } +-// common_element('h2', NULL, _('Delete my account')); ++// common_element('h2', null, _('Delete my account')); hunk ./actions/peoplesearch.php 71 -- var $terms = NULL; -- var $pattern = NULL; -- -- function __construct($profile, $terms) { -- parent::__construct($profile); -- $this->terms = array_map('preg_quote', -- array_map('htmlspecialchars', $terms)); -- $this->pattern = '/('.implode('|',$terms).')/i'; -- } -- -- function highlight($text) { -- return preg_replace($this->pattern, '\\1', htmlspecialchars($text)); -- } -+ var $terms = NULL; -+ var $pattern = NULL; -+ -+ function __construct($profile, $terms) { -+ parent::__construct($profile); -+ $this->terms = array_map('preg_quote', -+ array_map('htmlspecialchars', $terms)); -+ $this->pattern = '/('.implode('|',$terms).')/i'; -+ } -+ -+ function highlight($text) { -+ return preg_replace($this->pattern, '\\1', htmlspecialchars($text)); -+ } -hunk ./actions/peopletag.php 25 -- -- function handle($args) { -+ -+ function handle($args) { -hunk ./actions/peopletag.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/peopletag.php 30 -- $tag = $this->trimmed('tag'); -- -- if (!common_valid_profile_tag($tag)) { -- $this->client_error(sprintf(_('Not a valid people tag: %s'), $tag)); -- return; -- } -+ $tag = $this->trimmed('tag'); -+ -+ if (!common_valid_profile_tag($tag)) { -+ $this->client_error(sprintf(_('Not a valid people tag: %s'), $tag)); -+ return; -+ } -hunk ./actions/peopletag.php 37 -- $page = $this->trimmed('page'); -- -- if (!$page) { -- $page = 1; -- } -- -- # Looks like we're good; show the header -+ $page = $this->trimmed('page'); -+ -+ if (!$page) { -+ $page = 1; -+ } -+ -+ # Looks like we're good; show the header -hunk ./actions/peopletag.php 45 -- common_show_header(sprintf(_('Users self-tagged with %s - page %d'), $tag, $page), -- NULL, $tag, array($this, 'show_top')); -+ common_show_header(sprintf(_('Users self-tagged with %s - page %d'), $tag, $page), -+ NULL, $tag, array($this, 'show_top')); -hunk ./actions/peopletag.php 48 -- $this->show_people($tag, $page); -+ $this->show_people($tag, $page); -hunk ./actions/peopletag.php 50 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/peopletag.php 53 -- function show_people($tag, $page) { -- -- $profile = new Profile(); -+ function show_people($tag, $page) { -+ -+ $profile = new Profile(); -hunk ./actions/peopletag.php 57 -- $offset = ($page-1)*PROFILES_PER_PAGE; -- $limit = PROFILES_PER_PAGE + 1; -- -- if (common_config('db','type') == 'pgsql') { -- $lim = ' LIMIT ' . $limit . ' OFFSET ' . $offset; -- } else { -- $lim = ' LIMIT ' . $offset . ', ' . $limit; -- } -+ $offset = ($page-1)*PROFILES_PER_PAGE; -+ $limit = PROFILES_PER_PAGE + 1; -+ -+ if (common_config('db','type') == 'pgsql') { -+ $lim = ' LIMIT ' . $limit . ' OFFSET ' . $offset; -+ } else { -+ $lim = ' LIMIT ' . $offset . ', ' . $limit; -+ } -hunk ./actions/peopletag.php 66 -- # XXX: memcached this -- -- $profile->query(sprintf('SELECT profile.* ' . -- 'FROM profile JOIN profile_tag ' . -- 'ON profile.id = profile_tag.tagger ' . -- 'WHERE profile_tag.tagger = profile_tag.tagged ' . -- 'AND tag = "%s" ' . -- 'ORDER BY profile_tag.modified DESC ' . -- $lim, $tag)); -+ # XXX: memcached this -+ -+ $profile->query(sprintf('SELECT profile.* ' . -+ 'FROM profile JOIN profile_tag ' . -+ 'ON profile.id = profile_tag.tagger ' . -+ 'WHERE profile_tag.tagger = profile_tag.tagged ' . -+ 'AND tag = "%s" ' . -+ 'ORDER BY profile_tag.modified DESC ' . -+ $lim, $tag)); -hunk ./actions/peopletag.php 76 -- $pl = new ProfileList($profile); -- $cnt = $pl->show_list(); -- -- common_pagination($page > 1, -- $cnt > PROFILES_PER_PAGE, -- $page, -- $this->trimmed('action'), -- array('tag' => $tag)); -- } -- -- function show_top($tag) { -- $instr = sprintf(_('These are users who have tagged themselves "%s" ' . -- 'to show a common interest, characteristic, hobby or job.'), $tag); -- common_element_start('div', 'instructions'); -- common_element_start('p'); -- common_text($instr); -- common_element_end('p'); -- common_element_end('div'); -- } -+ $pl = new ProfileList($profile); -+ $cnt = $pl->show_list(); -+ -+ common_pagination($page > 1, -+ $cnt > PROFILES_PER_PAGE, -+ $page, -+ $this->trimmed('action'), -+ array('tag' => $tag)); -+ } -+ -+ function show_top($tag) { -+ $instr = sprintf(_('These are users who have tagged themselves "%s" ' . -+ 'to show a common interest, characteristic, hobby or job.'), $tag); -+ common_element_start('div', 'instructions'); -+ common_element_start('p'); -+ common_text($instr); -+ common_element_end('p'); -+ common_element_end('div'); -+ } -hunk ./actions/peopletag.php 96 -- function get_title() { -- return NULL; -- } -+ function get_title() { -+ return NULL; -+ } -hunk ./actions/peopletag.php 100 -- function show_header($arr) { -- return; -- } -+ function show_header($arr) { -+ return; -+ } -hunk ./actions/postnotice.php 25 -- function handle($args) { -- parent::handle($args); -- try { -- common_remove_magic_from_request(); -- $req = OAuthRequest::from_request(); -- # Note: server-to-server function! -- $server = omb_oauth_server(); -- list($consumer, $token) = $server->verify_request($req); -- if ($this->save_notice($req, $consumer, $token)) { -- print "omb_version=".OMB_VERSION_01; -- } -- } catch (OAuthException $e) { -- common_server_error($e->getMessage()); -- return; -- } -- } -+ function handle($args) { -+ parent::handle($args); -+ try { -+ common_remove_magic_from_request(); -+ $req = OAuthRequest::from_request(); -+ # Note: server-to-server function! -+ $server = omb_oauth_server(); -+ list($consumer, $token) = $server->verify_request($req); -+ if ($this->save_notice($req, $consumer, $token)) { -+ print "omb_version=".OMB_VERSION_01; -+ } -+ } catch (OAuthException $e) { -+ common_server_error($e->getMessage()); -+ return; -+ } -+ } -hunk ./actions/postnotice.php 42 -- function save_notice(&$req, &$consumer, &$token) { -- $version = $req->get_parameter('omb_version'); -- if ($version != OMB_VERSION_01) { -- common_user_error(_('Unsupported OMB version'), 400); -- return false; -- } -- # First, check to see -- $listenee = $req->get_parameter('omb_listenee'); -- $remote_profile = Remote_profile::staticGet('uri', $listenee); -- if (!$remote_profile) { -- common_user_error(_('Profile unknown'), 403); -- return false; -- } -- $sub = Subscription::staticGet('token', $token->key); -- if (!$sub) { -- common_user_error(_('No such subscription'), 403); -- return false; -- } -- $content = $req->get_parameter('omb_notice_content'); -+ function save_notice(&$req, &$consumer, &$token) { -+ $version = $req->get_parameter('omb_version'); -+ if ($version != OMB_VERSION_01) { -+ common_user_error(_('Unsupported OMB version'), 400); -+ return false; -+ } -+ # First, check to see -+ $listenee = $req->get_parameter('omb_listenee'); -+ $remote_profile = Remote_profile::staticGet('uri', $listenee); -+ if (!$remote_profile) { -+ common_user_error(_('Profile unknown'), 403); -+ return false; -+ } -+ $sub = Subscription::staticGet('token', $token->key); -+ if (!$sub) { -+ common_user_error(_('No such subscription'), 403); -+ return false; -+ } -+ $content = $req->get_parameter('omb_notice_content'); -hunk ./actions/postnotice.php 66 -- $notice_uri = $req->get_parameter('omb_notice'); -- if (!Validate::uri($notice_uri) && -- !common_valid_tag($notice_uri)) { -- common_user_error(_('Invalid notice uri'), 400); -- return false; -- } -- $notice_url = $req->get_parameter('omb_notice_url'); -- if ($notice_url && !common_valid_http_url($notice_url)) { -- common_user_error(_('Invalid notice url'), 400); -- return false; -- } -- $notice = Notice::staticGet('uri', $notice_uri); -- if (!$notice) { -- $notice = Notice::saveNew($remote_profile->id, $content, 'omb', false, 0, $notice_uri); -- if (is_string($notice)) { -- common_server_serror($notice, 500); -- return false; -- } -- common_broadcast_notice($notice, true); -- } -- return true; -- } -+ $notice_uri = $req->get_parameter('omb_notice'); -+ if (!Validate::uri($notice_uri) && -+ !common_valid_tag($notice_uri)) { -+ common_user_error(_('Invalid notice uri'), 400); -+ return false; -+ } -+ $notice_url = $req->get_parameter('omb_notice_url'); -+ if ($notice_url && !common_valid_http_url($notice_url)) { -+ common_user_error(_('Invalid notice url'), 400); -+ return false; -+ } -+ $notice = Notice::staticGet('uri', $notice_uri); -+ if (!$notice) { -+ $notice = Notice::saveNew($remote_profile->id, $content, 'omb', false, 0, $notice_uri); -+ if (is_string($notice)) { -+ common_server_serror($notice, 500); -+ return false; -+ } -+ common_broadcast_notice($notice, true); -+ } -+ return true; -+ } -hunk ./actions/profilesettings.php 26 -- function get_instructions() { -- return _('You can update your personal profile info here '. -- 'so people know more about you.'); -- } -+ function get_instructions() { -+ return _('You can update your personal profile info here '. -+ 'so people know more about you.'); -+ } +- var $terms = NULL; +- var $pattern = NULL; ++ var $terms = null; ++ var $pattern = null; +hunk ./actions/peopletag.php 46 +- NULL, $tag, array($this, 'show_top')); ++ null, $tag, array($this, 'show_top')); +hunk ./actions/peopletag.php 97 +- return NULL; ++ return null; hunk ./actions/profilesettings.php 31 -- function show_form($msg=NULL, $success=false) { -- $this->form_header(_('Profile settings'), $msg, $success); -- $this->show_settings_form(); -- common_element('h2', NULL, _('Avatar')); -- $this->show_avatar_form(); -- common_element('h2', NULL, _('Change password')); -- $this->show_password_form(); --// common_element('h2', NULL, _('Delete my account')); --// $this->show_delete_form(); -- common_show_footer(); -- } -+ function show_form($msg=NULL, $success=false) { -+ $this->form_header(_('Profile settings'), $msg, $success); -+ $this->show_settings_form(); -+ common_element('h2', NULL, _('Avatar')); -+ $this->show_avatar_form(); -+ common_element('h2', NULL, _('Change password')); -+ $this->show_password_form(); -+// common_element('h2', NULL, _('Delete my account')); -+// $this->show_delete_form(); -+ common_show_footer(); -+ } -hunk ./actions/profilesettings.php 43 -- function handle_post() { -+ function handle_post() { -hunk ./actions/profilesettings.php 45 -- # CSRF protection -+ # CSRF protection -hunk ./actions/profilesettings.php 47 -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/profilesettings.php 53 -- if ($this->arg('save')) { -- $this->save_profile(); -- } else if ($this->arg('upload')) { -- $this->upload_avatar(); -- } else if ($this->arg('changepass')) { -- $this->change_password(); -- } -+ if ($this->arg('save')) { -+ $this->save_profile(); -+ } else if ($this->arg('upload')) { -+ $this->upload_avatar(); -+ } else if ($this->arg('changepass')) { -+ $this->change_password(); -+ } -hunk ./actions/profilesettings.php 61 -- } -+ } -hunk ./actions/profilesettings.php 63 -- function show_settings_form() { -+ function show_settings_form() { -hunk ./actions/profilesettings.php 65 -- $user = common_current_user(); -- $profile = $user->getProfile(); -+ $user = common_current_user(); -+ $profile = $user->getProfile(); -hunk ./actions/profilesettings.php 68 -- common_element_start('form', array('method' => 'POST', -- 'id' => 'profilesettings', -- 'action' => -- common_local_url('profilesettings'))); -- common_hidden('token', common_session_token()); -- -- # too much common patterns here... abstractable? -- -- common_input('nickname', _('Nickname'), -- ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, -- _('1-64 lowercase letters or numbers, no punctuation or spaces')); -- common_input('fullname', _('Full name'), -- ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname); -- common_input('homepage', _('Homepage'), -- ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage, -- _('URL of your homepage, blog, or profile on another site')); -- common_textarea('bio', _('Bio'), -- ($this->arg('bio')) ? $this->arg('bio') : $profile->bio, -- _('Describe yourself and your interests in 140 chars')); -- common_input('location', _('Location'), -- ($this->arg('location')) ? $this->arg('location') : $profile->location, -- _('Where you are, like "City, State (or Region), Country"')); -- common_input('tags', _('Tags'), -- ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), -- _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); -+ common_element_start('form', array('method' => 'POST', -+ 'id' => 'profilesettings', -+ 'action' => -+ common_local_url('profilesettings'))); -+ common_hidden('token', common_session_token()); -+ -+ # too much common patterns here... abstractable? -+ -+ common_input('nickname', _('Nickname'), -+ ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, -+ _('1-64 lowercase letters or numbers, no punctuation or spaces')); -+ common_input('fullname', _('Full name'), -+ ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname); -+ common_input('homepage', _('Homepage'), -+ ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage, -+ _('URL of your homepage, blog, or profile on another site')); -+ common_textarea('bio', _('Bio'), -+ ($this->arg('bio')) ? $this->arg('bio') : $profile->bio, -+ _('Describe yourself and your interests in 140 chars')); -+ common_input('location', _('Location'), -+ ($this->arg('location')) ? $this->arg('location') : $profile->location, -+ _('Where you are, like "City, State (or Region), Country"')); -+ common_input('tags', _('Tags'), -+ ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), -+ _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); -hunk ./actions/profilesettings.php 94 -- $language = common_language(); -- common_dropdown('language', _('Language'), get_nice_language_list(), _('Preferred language'), TRUE, $language); -- $timezone = common_timezone(); -- $timezones = array(); -- foreach(DateTimeZone::listIdentifiers() as $k => $v) { -- $timezones[$v] = $v; -- } -- common_dropdown('timezone', _('Timezone'), $timezones, _('What timezone are you normally in?'), TRUE, $timezone); -+ $language = common_language(); -+ common_dropdown('language', _('Language'), get_nice_language_list(), _('Preferred language'), TRUE, $language); -+ $timezone = common_timezone(); -+ $timezones = array(); -+ foreach(DateTimeZone::listIdentifiers() as $k => $v) { -+ $timezones[$v] = $v; -+ } -+ common_dropdown('timezone', _('Timezone'), $timezones, _('What timezone are you normally in?'), TRUE, $timezone); -hunk ./actions/profilesettings.php 103 -- common_checkbox('autosubscribe', _('Automatically subscribe to whoever subscribes to me (best for non-humans)'), -- ($this->arg('autosubscribe')) ? $this->boolean('autosubscribe') : $user->autosubscribe); -+ common_checkbox('autosubscribe', _('Automatically subscribe to whoever subscribes to me (best for non-humans)'), -+ ($this->arg('autosubscribe')) ? $this->boolean('autosubscribe') : $user->autosubscribe); -hunk ./actions/profilesettings.php 106 -- common_submit('save', _('Save')); -+ common_submit('save', _('Save')); -hunk ./actions/profilesettings.php 108 -- common_element_end('form'); -+ common_element_end('form'); -hunk ./actions/profilesettings.php 111 -- } -+ } -hunk ./actions/profilesettings.php 113 -- function show_avatar_form() { -+ function show_avatar_form() { -hunk ./actions/profilesettings.php 115 -- $user = common_current_user(); -- $profile = $user->getProfile(); -+ $user = common_current_user(); -+ $profile = $user->getProfile(); -hunk ./actions/profilesettings.php 118 -- if (!$profile) { -- common_log_db_error($user, 'SELECT', __FILE__); -- $this->server_error(_('User without matching profile')); -- return; -- } -- -- $original = $profile->getOriginalAvatar(); -+ if (!$profile) { -+ common_log_db_error($user, 'SELECT', __FILE__); -+ $this->server_error(_('User without matching profile')); -+ return; -+ } -+ -+ $original = $profile->getOriginalAvatar(); -hunk ./actions/profilesettings.php 127 -- common_element_start('form', array('enctype' => 'multipart/form-data', -- 'method' => 'POST', -- 'id' => 'avatar', -- 'action' => -- common_local_url('profilesettings'))); -- common_hidden('token', common_session_token()); -+ common_element_start('form', array('enctype' => 'multipart/form-data', -+ 'method' => 'POST', -+ 'id' => 'avatar', -+ 'action' => -+ common_local_url('profilesettings'))); -+ common_hidden('token', common_session_token()); -hunk ./actions/profilesettings.php 134 -- if ($original) { -- common_element('img', array('src' => $original->url, -- 'class' => 'avatar original', -- 'width' => $original->width, -- 'height' => $original->height, -- 'alt' => $user->nickname)); -- } -+ if ($original) { -+ common_element('img', array('src' => $original->url, -+ 'class' => 'avatar original', -+ 'width' => $original->width, -+ 'height' => $original->height, -+ 'alt' => $user->nickname)); -+ } -hunk ./actions/profilesettings.php 142 -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -hunk ./actions/profilesettings.php 144 -- if ($avatar) { -- common_element('img', array('src' => $avatar->url, -- 'class' => 'avatar profile', -- 'width' => AVATAR_PROFILE_SIZE, -- 'height' => AVATAR_PROFILE_SIZE, -- 'alt' => $user->nickname)); -- } -+ if ($avatar) { -+ common_element('img', array('src' => $avatar->url, -+ 'class' => 'avatar profile', -+ 'width' => AVATAR_PROFILE_SIZE, -+ 'height' => AVATAR_PROFILE_SIZE, -+ 'alt' => $user->nickname)); -+ } -hunk ./actions/profilesettings.php 153 -- common_element('input', array('name' => 'MAX_FILE_SIZE', -- 'type' => 'hidden', -- 'id' => 'MAX_FILE_SIZE', -- 'value' => MAX_AVATAR_SIZE)); -+ common_element('input', array('name' => 'MAX_FILE_SIZE', -+ 'type' => 'hidden', -+ 'id' => 'MAX_FILE_SIZE', -+ 'value' => MAX_AVATAR_SIZE)); -hunk ./actions/profilesettings.php 158 -- common_element_start('p'); -+ common_element_start('p'); -hunk ./actions/profilesettings.php 161 -- common_element('input', array('name' => 'avatarfile', -- 'type' => 'file', -- 'id' => 'avatarfile')); -- common_element_end('p'); -+ common_element('input', array('name' => 'avatarfile', -+ 'type' => 'file', -+ 'id' => 'avatarfile')); -+ common_element_end('p'); -hunk ./actions/profilesettings.php 166 -- common_submit('upload', _('Upload')); -- common_element_end('form'); -+ common_submit('upload', _('Upload')); -+ common_element_end('form'); -hunk ./actions/profilesettings.php 169 -- } -+ } -hunk ./actions/profilesettings.php 171 -- function show_password_form() { -+ function show_password_form() { -hunk ./actions/profilesettings.php 173 -- $user = common_current_user(); -- common_element_start('form', array('method' => 'POST', -- 'id' => 'password', -- 'action' => -- common_local_url('profilesettings'))); -+ $user = common_current_user(); -+ common_element_start('form', array('method' => 'POST', -+ 'id' => 'password', -+ 'action' => -+ common_local_url('profilesettings'))); -hunk ./actions/profilesettings.php 179 -- common_hidden('token', common_session_token()); -+ common_hidden('token', common_session_token()); -hunk ./actions/profilesettings.php 181 -- # Users who logged in with OpenID won't have a pwd -- if ($user->password) { -- common_password('oldpassword', _('Old password')); -- } -- common_password('newpassword', _('New password'), -- _('6 or more characters')); -- common_password('confirm', _('Confirm'), -- _('same as password above')); -- common_submit('changepass', _('Change')); -- common_element_end('form'); -- } -+ # Users who logged in with OpenID won't have a pwd -+ if ($user->password) { -+ common_password('oldpassword', _('Old password')); -+ } -+ common_password('newpassword', _('New password'), -+ _('6 or more characters')); -+ common_password('confirm', _('Confirm'), -+ _('same as password above')); -+ common_submit('changepass', _('Change')); -+ common_element_end('form'); -+ } -hunk ./actions/profilesettings.php 193 -- function save_profile() { -- $nickname = $this->trimmed('nickname'); -- $fullname = $this->trimmed('fullname'); -- $homepage = $this->trimmed('homepage'); -- $bio = $this->trimmed('bio'); -- $location = $this->trimmed('location'); -- $autosubscribe = $this->boolean('autosubscribe'); -- $language = $this->trimmed('language'); -- $timezone = $this->trimmed('timezone'); -- $tagstring = $this->trimmed('tags'); -- -- # Some validation -+ function save_profile() { -+ $nickname = $this->trimmed('nickname'); -+ $fullname = $this->trimmed('fullname'); -+ $homepage = $this->trimmed('homepage'); -+ $bio = $this->trimmed('bio'); -+ $location = $this->trimmed('location'); -+ $autosubscribe = $this->boolean('autosubscribe'); -+ $language = $this->trimmed('language'); -+ $timezone = $this->trimmed('timezone'); -+ $tagstring = $this->trimmed('tags'); -+ -+ # Some validation -hunk ./actions/profilesettings.php 206 -- if (!Validate::string($nickname, array('min_length' => 1, -- 'max_length' => 64, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -- $this->show_form(_('Nickname must have only lowercase letters and numbers and no spaces.')); -- return; -- } else if (!User::allowed_nickname($nickname)) { -- $this->show_form(_('Not a valid nickname.')); -- return; -- } else if (!is_null($homepage) && (strlen($homepage) > 0) && -- !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { -- $this->show_form(_('Homepage is not a valid URL.')); -- return; -- } else if (!is_null($fullname) && strlen($fullname) > 255) { -- $this->show_form(_('Full name is too long (max 255 chars).')); -- return; -- } else if (!is_null($bio) && strlen($bio) > 140) { -- $this->show_form(_('Bio is too long (max 140 chars).')); -- return; -- } else if (!is_null($location) && strlen($location) > 255) { -- $this->show_form(_('Location is too long (max 255 chars).')); -- return; -- } else if (is_null($timezone) || !in_array($timezone, DateTimeZone::listIdentifiers())) { -- $this->show_form(_('Timezone not selected.')); -- return; -- } else if ($this->nickname_exists($nickname)) { -- $this->show_form(_('Nickname already in use. Try another one.')); -- return; -+ if (!Validate::string($nickname, array('min_length' => 1, -+ 'max_length' => 64, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -+ $this->show_form(_('Nickname must have only lowercase letters and numbers and no spaces.')); -+ return; -+ } else if (!User::allowed_nickname($nickname)) { -+ $this->show_form(_('Not a valid nickname.')); -+ return; -+ } else if (!is_null($homepage) && (strlen($homepage) > 0) && -+ !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { -+ $this->show_form(_('Homepage is not a valid URL.')); -+ return; -+ } else if (!is_null($fullname) && strlen($fullname) > 255) { -+ $this->show_form(_('Full name is too long (max 255 chars).')); -+ return; -+ } else if (!is_null($bio) && strlen($bio) > 140) { -+ $this->show_form(_('Bio is too long (max 140 chars).')); -+ return; -+ } else if (!is_null($location) && strlen($location) > 255) { -+ $this->show_form(_('Location is too long (max 255 chars).')); -+ return; -+ } else if (is_null($timezone) || !in_array($timezone, DateTimeZone::listIdentifiers())) { -+ $this->show_form(_('Timezone not selected.')); -+ return; -+ } else if ($this->nickname_exists($nickname)) { -+ $this->show_form(_('Nickname already in use. Try another one.')); -+ return; -hunk ./actions/profilesettings.php 234 -- $this->show_form(_('Language is too long (max 50 chars).')); -- return; -- } -+ $this->show_form(_('Language is too long (max 50 chars).')); -+ return; -+ } -hunk ./actions/profilesettings.php 238 -- if ($tagstring) { -- $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring)); -- } else { -- $tags = array(); -- } -- -- foreach ($tags as $tag) { -- if (!common_valid_profile_tag($tag)) { -- $this->show_form(sprintf(_('Invalid tag: "%s"'), $tag)); -- return; -- } -- } -- -- $user = common_current_user(); -+ if ($tagstring) { -+ $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring)); -+ } else { -+ $tags = array(); -+ } -+ -+ foreach ($tags as $tag) { -+ if (!common_valid_profile_tag($tag)) { -+ $this->show_form(sprintf(_('Invalid tag: "%s"'), $tag)); -+ return; -+ } -+ } -+ -+ $user = common_current_user(); -hunk ./actions/profilesettings.php 253 -- $user->query('BEGIN'); -+ $user->query('BEGIN'); -hunk ./actions/profilesettings.php 255 -- if ($user->nickname != $nickname || -- $user->language != $language || -- $user->timezone != $timezone) { -+ if ($user->nickname != $nickname || -+ $user->language != $language || -+ $user->timezone != $timezone) { -hunk ./actions/profilesettings.php 259 -- common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname, -- __FILE__); -- common_debug('Updating user language from ' . $user->language . ' to ' . $language, -- __FILE__); -- common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone, -- __FILE__); -+ common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname, -+ __FILE__); -+ common_debug('Updating user language from ' . $user->language . ' to ' . $language, -+ __FILE__); -+ common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone, -+ __FILE__); -hunk ./actions/profilesettings.php 266 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/profilesettings.php 268 -- $user->nickname = $nickname; -- $user->language = $language; -- $user->timezone = $timezone; -+ $user->nickname = $nickname; -+ $user->language = $language; -+ $user->timezone = $timezone; -hunk ./actions/profilesettings.php 272 -- $result = $user->updateKeys($original); -+ $result = $user->updateKeys($original); -hunk ./actions/profilesettings.php 274 -- if ($result === FALSE) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } else { -- # Re-initialize language environment if it changed -- common_init_language(); -- } -- } -+ if ($result === FALSE) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } else { -+ # Re-initialize language environment if it changed -+ common_init_language(); -+ } -+ } -hunk ./actions/profilesettings.php 284 -- # XXX: XOR -+ # XXX: XOR -hunk ./actions/profilesettings.php 286 -- if ($user->autosubscribe ^ $autosubscribe) { -+ if ($user->autosubscribe ^ $autosubscribe) { -hunk ./actions/profilesettings.php 288 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/profilesettings.php 290 -- $user->autosubscribe = $autosubscribe; -+ $user->autosubscribe = $autosubscribe; -hunk ./actions/profilesettings.php 292 -- $result = $user->update($original); -+ $result = $user->update($original); -hunk ./actions/profilesettings.php 294 -- if ($result === FALSE) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user for autosubscribe.')); -- return; -- } -- } -+ if ($result === FALSE) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user for autosubscribe.')); -+ return; -+ } -+ } -hunk ./actions/profilesettings.php 301 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/profilesettings.php 303 -- $orig_profile = clone($profile); -+ $orig_profile = clone($profile); -hunk ./actions/profilesettings.php 305 -- $profile->nickname = $user->nickname; -- $profile->fullname = $fullname; -- $profile->homepage = $homepage; -- $profile->bio = $bio; -- $profile->location = $location; -- $profile->profileurl = common_profile_url($nickname); -+ $profile->nickname = $user->nickname; -+ $profile->fullname = $fullname; -+ $profile->homepage = $homepage; -+ $profile->bio = $bio; -+ $profile->location = $location; -+ $profile->profileurl = common_profile_url($nickname); -hunk ./actions/profilesettings.php 312 -- common_debug('Old profile: ' . common_log_objstring($orig_profile), __FILE__); -- common_debug('New profile: ' . common_log_objstring($profile), __FILE__); -+ common_debug('Old profile: ' . common_log_objstring($orig_profile), __FILE__); -+ common_debug('New profile: ' . common_log_objstring($profile), __FILE__); -hunk ./actions/profilesettings.php 315 -- $result = $profile->update($orig_profile); -+ $result = $profile->update($orig_profile); -hunk ./actions/profilesettings.php 317 -- if (!$result) { -- common_log_db_error($profile, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t save profile.')); -- return; -- } -+ if (!$result) { -+ common_log_db_error($profile, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t save profile.')); -+ return; -+ } -hunk ./actions/profilesettings.php 323 -- # Set the user tags -- -- $result = $user->setSelfTags($tags); -+ # Set the user tags -+ -+ $result = $user->setSelfTags($tags); -hunk ./actions/profilesettings.php 327 -- if (!$result) { -- common_server_error(_('Couldn\'t save tags.')); -- return; -- } -- -- $user->query('COMMIT'); -+ if (!$result) { -+ common_server_error(_('Couldn\'t save tags.')); -+ return; -+ } -+ -+ $user->query('COMMIT'); -hunk ./actions/profilesettings.php 334 -- common_broadcast_profile($profile); -+ common_broadcast_profile($profile); -hunk ./actions/profilesettings.php 336 -- $this->show_form(_('Settings saved.'), TRUE); -- } -+ $this->show_form(_('Settings saved.'), TRUE); -+ } -hunk ./actions/profilesettings.php 340 -- function upload_avatar() { -- switch ($_FILES['avatarfile']['error']) { -- case UPLOAD_ERR_OK: # success, jump out -- break; -- case UPLOAD_ERR_INI_SIZE: -- case UPLOAD_ERR_FORM_SIZE: -- $this->show_form(_('That file is too big.')); -- return; -- case UPLOAD_ERR_PARTIAL: -- @unlink($_FILES['avatarfile']['tmp_name']); -- $this->show_form(_('Partial upload.')); -- return; -- default: -- $this->show_form(_('System error uploading file.')); -- return; -- } -+ function upload_avatar() { -+ switch ($_FILES['avatarfile']['error']) { -+ case UPLOAD_ERR_OK: # success, jump out -+ break; -+ case UPLOAD_ERR_INI_SIZE: -+ case UPLOAD_ERR_FORM_SIZE: -+ $this->show_form(_('That file is too big.')); -+ return; -+ case UPLOAD_ERR_PARTIAL: -+ @unlink($_FILES['avatarfile']['tmp_name']); -+ $this->show_form(_('Partial upload.')); -+ return; -+ default: -+ $this->show_form(_('System error uploading file.')); -+ return; -+ } -hunk ./actions/profilesettings.php 357 -- $info = @getimagesize($_FILES['avatarfile']['tmp_name']); -+ $info = @getimagesize($_FILES['avatarfile']['tmp_name']); -hunk ./actions/profilesettings.php 359 -- if (!$info) { -- @unlink($_FILES['avatarfile']['tmp_name']); -- $this->show_form(_('Not an image or corrupt file.')); -- return; -- } -+ if (!$info) { -+ @unlink($_FILES['avatarfile']['tmp_name']); -+ $this->show_form(_('Not an image or corrupt file.')); -+ return; -+ } -hunk ./actions/profilesettings.php 365 -- switch ($info[2]) { -- case IMAGETYPE_GIF: -- case IMAGETYPE_JPEG: -- case IMAGETYPE_PNG: -- break; -- default: -- $this->show_form(_('Unsupported image file format.')); -- return; -- } -+ switch ($info[2]) { -+ case IMAGETYPE_GIF: -+ case IMAGETYPE_JPEG: -+ case IMAGETYPE_PNG: -+ break; -+ default: -+ $this->show_form(_('Unsupported image file format.')); -+ return; -+ } -hunk ./actions/profilesettings.php 375 -- $user = common_current_user(); -- $profile = $user->getProfile(); -+ $user = common_current_user(); -+ $profile = $user->getProfile(); -hunk ./actions/profilesettings.php 378 -- if ($profile->setOriginal($_FILES['avatarfile']['tmp_name'])) { -- $this->show_form(_('Avatar updated.'), true); -- } else { -- $this->show_form(_('Failed updating avatar.')); -- } -+ if ($profile->setOriginal($_FILES['avatarfile']['tmp_name'])) { -+ $this->show_form(_('Avatar updated.'), true); -+ } else { -+ $this->show_form(_('Failed updating avatar.')); -+ } -hunk ./actions/profilesettings.php 384 -- @unlink($_FILES['avatarfile']['tmp_name']); -- } -+ @unlink($_FILES['avatarfile']['tmp_name']); -+ } -hunk ./actions/profilesettings.php 387 -- function nickname_exists($nickname) { -- $user = common_current_user(); -- $other = User::staticGet('nickname', $nickname); -- if (!$other) { -- return false; -- } else { -- return $other->id != $user->id; -- } -- } -+ function nickname_exists($nickname) { -+ $user = common_current_user(); -+ $other = User::staticGet('nickname', $nickname); -+ if (!$other) { -+ return false; -+ } else { -+ return $other->id != $user->id; -+ } -+ } -hunk ./actions/profilesettings.php 397 -- function change_password() { -+ function change_password() { -hunk ./actions/profilesettings.php 399 -- $user = common_current_user(); -- assert(!is_null($user)); # should already be checked -+ $user = common_current_user(); -+ assert(!is_null($user)); # should already be checked -hunk ./actions/profilesettings.php 402 -- # FIXME: scrub input -+ # FIXME: scrub input -hunk ./actions/profilesettings.php 404 -- $newpassword = $this->arg('newpassword'); -- $confirm = $this->arg('confirm'); -- $token = $this->arg('token'); -+ $newpassword = $this->arg('newpassword'); -+ $confirm = $this->arg('confirm'); -+ $token = $this->arg('token'); -hunk ./actions/profilesettings.php 408 -- if (0 != strcmp($newpassword, $confirm)) { -- $this->show_form(_('Passwords don\'t match.')); -- return; -- } -+ if (0 != strcmp($newpassword, $confirm)) { -+ $this->show_form(_('Passwords don\'t match.')); -+ return; -+ } -hunk ./actions/profilesettings.php 413 -- if ($user->password) { -- $oldpassword = $this->arg('oldpassword'); -+ if ($user->password) { -+ $oldpassword = $this->arg('oldpassword'); -hunk ./actions/profilesettings.php 416 -- if (!common_check_user($user->nickname, $oldpassword)) { -- $this->show_form(_('Incorrect old password')); -- return; -- } -- } -+ if (!common_check_user($user->nickname, $oldpassword)) { -+ $this->show_form(_('Incorrect old password')); -+ return; -+ } -+ } -hunk ./actions/profilesettings.php 422 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/profilesettings.php 424 -- $user->password = common_munge_password($newpassword, $user->id); -+ $user->password = common_munge_password($newpassword, $user->id); -hunk ./actions/profilesettings.php 426 -- $val = $user->validate(); -- if ($val !== TRUE) { -- $this->show_form(_('Error saving user; invalid.')); -- return; -- } -+ $val = $user->validate(); -+ if ($val !== TRUE) { -+ $this->show_form(_('Error saving user; invalid.')); -+ return; -+ } -hunk ./actions/profilesettings.php 432 -- if (!$user->update($original)) { -- common_server_error(_('Can\'t save new password.')); -- return; -- } -+ if (!$user->update($original)) { -+ common_server_error(_('Can\'t save new password.')); -+ return; -+ } -hunk ./actions/profilesettings.php 437 -- $this->show_form(_('Password saved.'), true); -- } -+ $this->show_form(_('Password saved.'), true); -+ } -hunk ./actions/public.php 26 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/public.php 29 -- $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -hunk ./actions/public.php 31 -- header('X-XRDS-Location: '. common_local_url('publicxrds')); -+ header('X-XRDS-Location: '. common_local_url('publicxrds')); -hunk ./actions/public.php 33 -- common_show_header(_('Public timeline'), -- array($this, 'show_header'), NULL, -- array($this, 'show_top')); -+ common_show_header(_('Public timeline'), -+ array($this, 'show_header'), NULL, -+ array($this, 'show_top')); -hunk ./actions/public.php 37 -- # XXX: Public sidebar here? -+ # XXX: Public sidebar here? -hunk ./actions/public.php 39 -- $this->show_notices($page); -+ $this->show_notices($page); -hunk ./actions/public.php 41 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/public.php 44 -- function show_top() { -- if (common_logged_in()) { -- common_notice_form('public'); -- } else { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- } -+ function show_top() { -+ if (common_logged_in()) { -+ common_notice_form('public'); -+ } else { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ } -hunk ./actions/public.php 55 -- $this->public_views_menu(); -+ $this->public_views_menu(); -hunk ./actions/public.php 57 -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('publicrss'), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'publicrss'), -- 1=>array('href'=>common_local_url('publicatom'), -- 'type' => 'atom', -- 'version' => 'Atom 1.0', -- 'item' => 'publicatom'))); -- } -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('publicrss'), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'publicrss'), -+ 1=>array('href'=>common_local_url('publicatom'), -+ 'type' => 'atom', -+ 'version' => 'Atom 1.0', -+ 'item' => 'publicatom'))); -+ } -hunk ./actions/public.php 67 -- function get_instructions() { -- return _('This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . -- 'based on the Free Software [Laconica](http://laconi.ca/) tool. ' . -- '[Join now](%%action.register%%) to share notices about yourself with friends, family, and colleagues! ([Read more](%%doc.help%%))'); -- } -+ function get_instructions() { -+ return _('This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . -+ 'based on the Free Software [Laconica](http://laconi.ca/) tool. ' . -+ '[Join now](%%action.register%%) to share notices about yourself with friends, family, and colleagues! ([Read more](%%doc.help%%))'); -+ } -hunk ./actions/public.php 73 -- function show_header() { -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('publicrss'), -- 'type' => 'application/rss+xml', -- 'title' => _('Public Stream Feed'))); -- # for client side of OpenID authentication -- common_element('meta', array('http-equiv' => 'X-XRDS-Location', -- 'content' => common_local_url('publicxrds'))); -- } -+ function show_header() { -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('publicrss'), -+ 'type' => 'application/rss+xml', -+ 'title' => _('Public Stream Feed'))); -+ # for client side of OpenID authentication -+ common_element('meta', array('http-equiv' => 'X-XRDS-Location', -+ 'content' => common_local_url('publicxrds'))); -+ } -hunk ./actions/public.php 83 -- function show_notices($page) { -+ function show_notices($page) { -hunk ./actions/public.php 85 -- $cnt = 0; -- $notice = Notice::publicStream(($page-1)*NOTICES_PER_PAGE, -- NOTICES_PER_PAGE + 1); -+ $cnt = 0; -+ $notice = Notice::publicStream(($page-1)*NOTICES_PER_PAGE, -+ NOTICES_PER_PAGE + 1); -hunk ./actions/public.php 89 -- if (!$notice) { -+ if (!$notice) { -hunk ./actions/public.php 92 -- } -+ } -hunk ./actions/public.php 96 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'public'); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'public'); -+ } -hunk ./actions/publicrss.php 28 -- function init() { -- return true; -- } -+ function init() { -+ return true; -+ } -hunk ./actions/publicrss.php 32 -- function get_notices($limit=0) { -- -- $notices = array(); -- -- $notice = Notice::publicStream(0, ($limit == 0) ? 48 : $limit); -- -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -- -- return $notices; -- } -+ function get_notices($limit=0) { -+ -+ $notices = array(); -+ -+ $notice = Notice::publicStream(0, ($limit == 0) ? 48 : $limit); -+ -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -+ -+ return $notices; -+ } -hunk ./actions/publicrss.php 45 -- function get_channel() { -- global $config; -- $c = array('url' => common_local_url('publicrss'), -- 'title' => sprintf(_('%s Public Stream'), $config['site']['name']), -- 'link' => common_local_url('public'), -- 'description' => sprintf(_('All updates for %s'), $config['site']['name'])); -- return $c; -- } -+ function get_channel() { -+ global $config; -+ $c = array('url' => common_local_url('publicrss'), -+ 'title' => sprintf(_('%s Public Stream'), $config['site']['name']), -+ 'link' => common_local_url('public'), -+ 'description' => sprintf(_('All updates for %s'), $config['site']['name'])); -+ return $c; -+ } -hunk ./actions/publicrss.php 54 -- function get_image() { -- return NULL; -- } -+ function get_image() { -+ return NULL; -+ } -hunk ./actions/publicxrds.php 28 -- function is_readonly() { -- return true; -- } -+ function is_readonly() { -+ return true; -+ } -hunk ./actions/publicxrds.php 32 -- function handle($args) { -+ function handle($args) { -hunk ./actions/publicxrds.php 34 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/publicxrds.php 36 -- header('Content-Type: application/xrds+xml'); -+ header('Content-Type: application/xrds+xml'); -hunk ./actions/publicxrds.php 38 -- common_start_xml(); -- common_element_start('XRDS', array('xmlns' => 'xri://$xrds')); -+ common_start_xml(); -+ common_element_start('XRDS', array('xmlns' => 'xri://$xrds')); -hunk ./actions/publicxrds.php 41 -- common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -- 'xmlns:simple' => 'http://xrds-simple.net/core/1.0', -- 'version' => '2.0')); -+ common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -+ 'xmlns:simple' => 'http://xrds-simple.net/core/1.0', -+ 'version' => '2.0')); +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { +hunk ./actions/profilesettings.php 34 +- common_element('h2', NULL, _('Avatar')); ++ common_element('h2', null, _('Avatar')); +hunk ./actions/profilesettings.php 36 +- common_element('h2', NULL, _('Change password')); ++ common_element('h2', null, _('Change password')); +hunk ./actions/profilesettings.php 38 +-// common_element('h2', NULL, _('Delete my account')); ++// common_element('h2', null, _('Delete my account')); +hunk ./actions/public.php 34 +- array($this, 'show_header'), NULL, ++ array($this, 'show_header'), null, +hunk ./actions/publicrss.php 55 +- return NULL; ++ return null; hunk ./actions/publicxrds.php 45 -- common_element('Type', NULL, 'xri://$xrds*simple'); -+ common_element('Type', NULL, 'xri://$xrds*simple'); -hunk ./actions/publicxrds.php 47 -- foreach (array('finishopenidlogin', 'finishaddopenid', 'finishimmediate') as $finish) { -- $this->show_service(Auth_OpenID_RP_RETURN_TO_URL_TYPE, -- common_local_url($finish)); -- } -+ foreach (array('finishopenidlogin', 'finishaddopenid', 'finishimmediate') as $finish) { -+ $this->show_service(Auth_OpenID_RP_RETURN_TO_URL_TYPE, -+ common_local_url($finish)); -+ } -hunk ./actions/publicxrds.php 52 -- common_element_end('XRD'); -+ common_element_end('XRD'); -hunk ./actions/publicxrds.php 54 -- common_element_end('XRDS'); -- common_end_xml(); -- } -+ common_element_end('XRDS'); -+ common_end_xml(); -+ } +- common_element('Type', NULL, 'xri://$xrds*simple'); ++ common_element('Type', null, 'xri://$xrds*simple'); hunk ./actions/publicxrds.php 58 -- function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) { -- common_element_start('Service'); -- if ($uri) { -- common_element('URI', NULL, $uri); -- } -- common_element('Type', NULL, $type); -- if ($params) { -- foreach ($params as $param) { -- common_element('Type', NULL, $param); -- } -- } -- if ($sigs) { -- foreach ($sigs as $sig) { -- common_element('Type', NULL, $sig); -- } -- } -- if ($localId) { -- common_element('LocalID', NULL, $localId); -- } -- common_element_end('Service'); -- } -+ function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) { -+ common_element_start('Service'); -+ if ($uri) { -+ common_element('URI', NULL, $uri); -+ } -+ common_element('Type', NULL, $type); -+ if ($params) { -+ foreach ($params as $param) { -+ common_element('Type', NULL, $param); -+ } -+ } -+ if ($sigs) { -+ foreach ($sigs as $sig) { -+ common_element('Type', NULL, $sig); -+ } -+ } -+ if ($localId) { -+ common_element('LocalID', NULL, $localId); -+ } -+ common_element_end('Service'); -+ } -hunk ./actions/recoverpassword.php 31 -- $this->client_error(_('You are already logged in!')); -+ $this->client_error(_('You are already logged in!')); -hunk ./actions/recoverpassword.php 34 -- if ($this->arg('recover')) { -- $this->recover_password(); -+ if ($this->arg('recover')) { -+ $this->recover_password(); -hunk ./actions/recoverpassword.php 37 -- $this->reset_password(); -- } else { -- $this->client_error(_('Unexpected form submission.')); -- } -- } else { -- if ($this->trimmed('code')) { -- $this->check_code(); -- } else { -- $this->show_form(); -- } -- } -- } -+ $this->reset_password(); -+ } else { -+ $this->client_error(_('Unexpected form submission.')); -+ } -+ } else { -+ if ($this->trimmed('code')) { -+ $this->check_code(); -+ } else { -+ $this->show_form(); -+ } -+ } -+ } -hunk ./actions/recoverpassword.php 50 -- function check_code() { -+ function check_code() { -hunk ./actions/recoverpassword.php 52 -- $code = $this->trimmed('code'); -- $confirm = Confirm_address::staticGet('code', $code); -+ $code = $this->trimmed('code'); -+ $confirm = Confirm_address::staticGet('code', $code); -hunk ./actions/recoverpassword.php 55 -- if (!$confirm) { -- $this->client_error(_('No such recovery code.')); -- return; -- } -- if ($confirm->address_type != 'recover') { -- $this->client_error(_('Not a recovery code.')); -- return; -- } -+ if (!$confirm) { -+ $this->client_error(_('No such recovery code.')); -+ return; -+ } -+ if ($confirm->address_type != 'recover') { -+ $this->client_error(_('Not a recovery code.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 64 -- $user = User::staticGet($confirm->user_id); -+ $user = User::staticGet($confirm->user_id); -hunk ./actions/recoverpassword.php 66 -- if (!$user) { -- $this->server_error(_('Recovery code for unknown user.')); -- return; -- } -+ if (!$user) { -+ $this->server_error(_('Recovery code for unknown user.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 71 -- $touched = strtotime($confirm->modified); -- $email = $confirm->address; -+ $touched = strtotime($confirm->modified); -+ $email = $confirm->address; -hunk ./actions/recoverpassword.php 74 -- # Burn this code -+ # Burn this code -hunk ./actions/recoverpassword.php 76 -- $result = $confirm->delete(); -+ $result = $confirm->delete(); -hunk ./actions/recoverpassword.php 78 -- if (!$result) { -- common_log_db_error($confirm, 'DELETE', __FILE__); -- common_server_error(_('Error with confirmation code.')); -- return; -- } -+ if (!$result) { -+ common_log_db_error($confirm, 'DELETE', __FILE__); -+ common_server_error(_('Error with confirmation code.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 84 -- # These should be reaped, but for now we just check mod time -- # Note: it's still deleted; let's avoid a second attempt! -+ # These should be reaped, but for now we just check mod time -+ # Note: it's still deleted; let's avoid a second attempt! -hunk ./actions/recoverpassword.php 87 -- if ((time() - $touched) > MAX_RECOVERY_TIME) { -- common_log(LOG_WARNING, -- 'Attempted redemption on recovery code ' . -- 'that is ' . $touched . ' seconds old. '); -- $this->client_error(_('This confirmation code is too old. ' . -- 'Please start again.')); -- return; -- } -+ if ((time() - $touched) > MAX_RECOVERY_TIME) { -+ common_log(LOG_WARNING, -+ 'Attempted redemption on recovery code ' . -+ 'that is ' . $touched . ' seconds old. '); -+ $this->client_error(_('This confirmation code is too old. ' . -+ 'Please start again.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 96 -- # If we used an outstanding confirmation to send the email, -- # it's been confirmed at this point. -+ # If we used an outstanding confirmation to send the email, -+ # it's been confirmed at this point. -hunk ./actions/recoverpassword.php 99 -- if (!$user->email) { -- $orig = clone($user); -- $user->email = $email; -- $result = $user->updateKeys($orig); -- if (!$result) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- $this->server_error(_('Could not update user with confirmed email address.')); -- return; -- } -- } -+ if (!$user->email) { -+ $orig = clone($user); -+ $user->email = $email; -+ $result = $user->updateKeys($orig); -+ if (!$result) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ $this->server_error(_('Could not update user with confirmed email address.')); -+ return; -+ } -+ } -hunk ./actions/recoverpassword.php 110 -- # Success! -+ # Success! -hunk ./actions/recoverpassword.php 112 -- $this->set_temp_user($user); -- $this->show_password_form(); -- } -+ $this->set_temp_user($user); -+ $this->show_password_form(); -+ } -hunk ./actions/recoverpassword.php 116 -- function set_temp_user(&$user) { -- common_ensure_session(); -- $_SESSION['tempuser'] = $user->id; -- } -+ function set_temp_user(&$user) { -+ common_ensure_session(); -+ $_SESSION['tempuser'] = $user->id; -+ } -hunk ./actions/recoverpassword.php 121 -- function get_temp_user() { -- common_ensure_session(); -- $user_id = $_SESSION['tempuser']; -- if ($user_id) { -- $user = User::staticGet($user_id); -- } -- return $user; -- } -+ function get_temp_user() { -+ common_ensure_session(); -+ $user_id = $_SESSION['tempuser']; -+ if ($user_id) { -+ $user = User::staticGet($user_id); -+ } -+ return $user; -+ } -hunk ./actions/recoverpassword.php 130 -- function clear_temp_user() { -- common_ensure_session(); -- unset($_SESSION['tempuser']); -- } -+ function clear_temp_user() { -+ common_ensure_session(); -+ unset($_SESSION['tempuser']); -+ } +- function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) { ++ function show_service($type, $uri, $params=null, $sigs=null, $localId=null) { +hunk ./actions/publicxrds.php 61 +- common_element('URI', NULL, $uri); ++ common_element('URI', null, $uri); +hunk ./actions/publicxrds.php 63 +- common_element('Type', NULL, $type); ++ common_element('Type', null, $type); +hunk ./actions/publicxrds.php 66 +- common_element('Type', NULL, $param); ++ common_element('Type', null, $param); +hunk ./actions/publicxrds.php 71 +- common_element('Type', NULL, $sig); ++ common_element('Type', null, $sig); +hunk ./actions/publicxrds.php 75 +- common_element('LocalID', NULL, $localId); ++ common_element('LocalID', null, $localId); hunk ./actions/recoverpassword.php 135 -- function show_top($msg=NULL) { -- if ($msg) { -+ function show_top($msg=NULL) { -+ if ($msg) { -hunk ./actions/recoverpassword.php 138 -- } else { -- common_element_start('div', 'instructions'); -- common_element('p', NULL, -- _('If you\'ve forgotten or lost your' . -- ' password, you can get a new one sent to' . -- ' the email address you have stored ' . -- ' in your account.')); -- common_element_end('div'); -- } -- } -+ } else { -+ common_element_start('div', 'instructions'); -+ common_element('p', NULL, -+ _('If you\'ve forgotten or lost your' . -+ ' password, you can get a new one sent to' . -+ ' the email address you have stored ' . -+ ' in your account.')); -+ common_element_end('div'); -+ } -+ } +- function show_top($msg=NULL) { ++ function show_top($msg=null) { +hunk ./actions/recoverpassword.php 140 +- common_element('p', NULL, ++ common_element('p', null, hunk ./actions/recoverpassword.php 149 -- function show_password_top($msg=NULL) { -- if ($msg) { -+ function show_password_top($msg=NULL) { -+ if ($msg) { -hunk ./actions/recoverpassword.php 152 -- } else { -- common_element('div', 'instructions', -- _('You\'ve been identified. Enter a ' . -- ' new password below. ')); -- } -- } -+ } else { -+ common_element('div', 'instructions', -+ _('You\'ve been identified. Enter a ' . -+ ' new password below. ')); -+ } -+ } +- function show_password_top($msg=NULL) { ++ function show_password_top($msg=null) { hunk ./actions/recoverpassword.php 159 -- function show_form($msg=NULL) { -+ function show_form($msg=NULL) { +- function show_form($msg=NULL) { ++ function show_form($msg=null) { hunk ./actions/recoverpassword.php 161 -- common_show_header(_('Recover password'), NULL, -- $msg, array($this, 'show_top')); -+ common_show_header(_('Recover password'), NULL, -+ $msg, array($this, 'show_top')); -hunk ./actions/recoverpassword.php 164 -- common_element_start('form', array('method' => 'post', -- 'id' => 'recoverpassword', -- 'action' => common_local_url('recoverpassword'))); -- common_input('nicknameoremail', _('Nickname or email'), -- $this->trimmed('nicknameoremail'), -- _('Your nickname on this server, ' . -- 'or your registered email address.')); -- common_submit('recover', _('Recover')); -- common_element_end('form'); -- common_show_footer(); -- } -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'recoverpassword', -+ 'action' => common_local_url('recoverpassword'))); -+ common_input('nicknameoremail', _('Nickname or email'), -+ $this->trimmed('nicknameoremail'), -+ _('Your nickname on this server, ' . -+ 'or your registered email address.')); -+ common_submit('recover', _('Recover')); -+ common_element_end('form'); -+ common_show_footer(); -+ } +- common_show_header(_('Recover password'), NULL, ++ common_show_header(_('Recover password'), null, hunk ./actions/recoverpassword.php 176 -- function show_password_form($msg=NULL) { -+ function show_password_form($msg=NULL) { +- function show_password_form($msg=NULL) { ++ function show_password_form($msg=null) { hunk ./actions/recoverpassword.php 178 -- common_show_header(_('Reset password'), NULL, -- $msg, array($this, 'show_password_top')); -+ common_show_header(_('Reset password'), NULL, -+ $msg, array($this, 'show_password_top')); -hunk ./actions/recoverpassword.php 181 -- common_element_start('form', array('method' => 'post', -- 'id' => 'recoverpassword', -- 'action' => common_local_url('recoverpassword'))); -- common_hidden('token', common_session_token()); -- common_password('newpassword', _('New password'), -- _('6 or more characters, and don\'t forget it!')); -- common_password('confirm', _('Confirm'), -- _('Same as password above')); -- common_submit('reset', _('Reset')); -- common_element_end('form'); -- common_show_footer(); -- } -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'recoverpassword', -+ 'action' => common_local_url('recoverpassword'))); -+ common_hidden('token', common_session_token()); -+ common_password('newpassword', _('New password'), -+ _('6 or more characters, and don\'t forget it!')); -+ common_password('confirm', _('Confirm'), -+ _('Same as password above')); -+ common_submit('reset', _('Reset')); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/recoverpassword.php 194 -- function recover_password() { -- $nore = $this->trimmed('nicknameoremail'); -- if (!$nore) { -- $this->show_form(_('Enter a nickname or email address.')); -- return; -- } -+ function recover_password() { -+ $nore = $this->trimmed('nicknameoremail'); -+ if (!$nore) { -+ $this->show_form(_('Enter a nickname or email address.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 201 -- $user = User::staticGet('email', common_canonical_email($nore)); -+ $user = User::staticGet('email', common_canonical_email($nore)); -hunk ./actions/recoverpassword.php 203 -- if (!$user) { -- $user = User::staticGet('nickname', common_canonical_nickname($nore)); -- } -+ if (!$user) { -+ $user = User::staticGet('nickname', common_canonical_nickname($nore)); -+ } -hunk ./actions/recoverpassword.php 207 -- # See if it's an unconfirmed email address -+ # See if it's an unconfirmed email address -hunk ./actions/recoverpassword.php 209 -- if (!$user) { -- $confirm_email = Confirm_address::staticGet('address', common_canonical_email($nore)); -- if ($confirm_email && $confirm_email->address_type == 'email') { -- $user = User::staticGet($confirm_email->user_id); -- } -- } -+ if (!$user) { -+ $confirm_email = Confirm_address::staticGet('address', common_canonical_email($nore)); -+ if ($confirm_email && $confirm_email->address_type == 'email') { -+ $user = User::staticGet($confirm_email->user_id); -+ } -+ } -hunk ./actions/recoverpassword.php 216 -- if (!$user) { -- $this->show_form(_('No user with that email address or username.')); -- return; -- } -+ if (!$user) { -+ $this->show_form(_('No user with that email address or username.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 221 -- # Try to get an unconfirmed email address if they used a user name -+ # Try to get an unconfirmed email address if they used a user name -hunk ./actions/recoverpassword.php 223 -- if (!$user->email && !$confirm_email) { -- $confirm_email = Confirm_address::staticGet('user_id', $user->id); -- if ($confirm_email && $confirm_email->address_type != 'email') { -- # Skip non-email confirmations -- $confirm_email = NULL; -- } -- } -+ if (!$user->email && !$confirm_email) { -+ $confirm_email = Confirm_address::staticGet('user_id', $user->id); -+ if ($confirm_email && $confirm_email->address_type != 'email') { -+ # Skip non-email confirmations -+ $confirm_email = NULL; -+ } -+ } -hunk ./actions/recoverpassword.php 231 -- if (!$user->email && !$confirm_email) { -- $this->client_error(_('No registered email address for that user.')); -- return; -- } -+ if (!$user->email && !$confirm_email) { -+ $this->client_error(_('No registered email address for that user.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 236 -- # Success! We have a valid user and a confirmed or unconfirmed email address -+ # Success! We have a valid user and a confirmed or unconfirmed email address -hunk ./actions/recoverpassword.php 238 -- $confirm = new Confirm_address(); -- $confirm->code = common_confirmation_code(128); -- $confirm->address_type = 'recover'; -- $confirm->user_id = $user->id; -- $confirm->address = (isset($user->email)) ? $user->email : $confirm_email->address; -+ $confirm = new Confirm_address(); -+ $confirm->code = common_confirmation_code(128); -+ $confirm->address_type = 'recover'; -+ $confirm->user_id = $user->id; -+ $confirm->address = (isset($user->email)) ? $user->email : $confirm_email->address; -hunk ./actions/recoverpassword.php 244 -- if (!$confirm->insert()) { -- common_log_db_error($confirm, 'INSERT', __FILE__); -- $this->server_error(_('Error saving address confirmation.')); -- return; -- } -+ if (!$confirm->insert()) { -+ common_log_db_error($confirm, 'INSERT', __FILE__); -+ $this->server_error(_('Error saving address confirmation.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 250 -- $body = "Hey, $user->nickname."; -- $body .= "\n\n"; -- $body .= 'Someone just asked for a new password ' . -- 'for this account on ' . common_config('site', 'name') . '.'; -- $body .= "\n\n"; -- $body .= 'If it was you, and you want to confirm, use the URL below:'; -- $body .= "\n\n"; -- $body .= "\t".common_local_url('recoverpassword', -- array('code' => $confirm->code)); -- $body .= "\n\n"; -- $body .= 'If not, just ignore this message.'; -- $body .= "\n\n"; -- $body .= 'Thanks for your time, '; -- $body .= "\n"; -- $body .= common_config('site', 'name'); -- $body .= "\n"; -+ $body = "Hey, $user->nickname."; -+ $body .= "\n\n"; -+ $body .= 'Someone just asked for a new password ' . -+ 'for this account on ' . common_config('site', 'name') . '.'; -+ $body .= "\n\n"; -+ $body .= 'If it was you, and you want to confirm, use the URL below:'; -+ $body .= "\n\n"; -+ $body .= "\t".common_local_url('recoverpassword', -+ array('code' => $confirm->code)); -+ $body .= "\n\n"; -+ $body .= 'If not, just ignore this message.'; -+ $body .= "\n\n"; -+ $body .= 'Thanks for your time, '; -+ $body .= "\n"; -+ $body .= common_config('site', 'name'); -+ $body .= "\n"; -hunk ./actions/recoverpassword.php 267 -- mail_to_user($user, _('Password recovery requested'), $body, $confirm->address); -+ mail_to_user($user, _('Password recovery requested'), $body, $confirm->address); -hunk ./actions/recoverpassword.php 269 -- common_show_header(_('Password recovery requested')); -- common_element('p', NULL, -- _('Instructions for recovering your password ' . -- 'have been sent to the email address registered to your ' . -- 'account.')); -- common_show_footer(); -- } -+ common_show_header(_('Password recovery requested')); -+ common_element('p', NULL, -+ _('Instructions for recovering your password ' . -+ 'have been sent to the email address registered to your ' . -+ 'account.')); -+ common_show_footer(); -+ } -hunk ./actions/recoverpassword.php 277 -- function reset_password() { -+ function reset_password() { -hunk ./actions/recoverpassword.php 279 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 286 -- $user = $this->get_temp_user(); -+ $user = $this->get_temp_user(); -hunk ./actions/recoverpassword.php 288 -- if (!$user) { -- $this->client_error(_('Unexpected password reset.')); -- return; -- } -+ if (!$user) { -+ $this->client_error(_('Unexpected password reset.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 293 -- $newpassword = $this->trimmed('newpassword'); -- $confirm = $this->trimmed('confirm'); -+ $newpassword = $this->trimmed('newpassword'); -+ $confirm = $this->trimmed('confirm'); -hunk ./actions/recoverpassword.php 296 -- if (!$newpassword || strlen($newpassword) < 6) { -- $this->show_password_form(_('Password must be 6 chars or more.')); -- return; -- } -- if ($newpassword != $confirm) { -- $this->show_password_form(_('Password and confirmation do not match.')); -- return; -- } -+ if (!$newpassword || strlen($newpassword) < 6) { -+ $this->show_password_form(_('Password must be 6 chars or more.')); -+ return; -+ } -+ if ($newpassword != $confirm) { -+ $this->show_password_form(_('Password and confirmation do not match.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 305 -- # OK, we're ready to go -+ # OK, we're ready to go -hunk ./actions/recoverpassword.php 307 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/recoverpassword.php 309 -- $user->password = common_munge_password($newpassword, $user->id); -+ $user->password = common_munge_password($newpassword, $user->id); -hunk ./actions/recoverpassword.php 311 -- if (!$user->update($original)) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Can\'t save new password.')); -- return; -- } -+ if (!$user->update($original)) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Can\'t save new password.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 317 -- $this->clear_temp_user(); -+ $this->clear_temp_user(); -hunk ./actions/recoverpassword.php 319 -- if (!common_set_user($user->nickname)) { -- common_server_error(_('Error setting user.')); -- return; -- } -+ if (!common_set_user($user->nickname)) { -+ common_server_error(_('Error setting user.')); -+ return; -+ } -hunk ./actions/recoverpassword.php 324 -- common_real_login(true); -+ common_real_login(true); -hunk ./actions/recoverpassword.php 326 -- common_show_header(_('Password saved.')); -- common_element('p', NULL, _('New password successfully saved. ' . -- 'You are now logged in.')); -- common_show_footer(); -- } -+ common_show_header(_('Password saved.')); -+ common_element('p', NULL, _('New password successfully saved. ' . -+ 'You are now logged in.')); -+ common_show_footer(); -+ } -hunk ./actions/register.php 24 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/register.php 27 -- if (common_config('site', 'closed')) { -- common_user_error(_('Registration not allowed.')); -- } else if (common_logged_in()) { -- common_user_error(_('Already logged in.')); -- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $this->try_register(); -- } else { -- $this->show_form(); -- } -- } -+ if (common_config('site', 'closed')) { -+ common_user_error(_('Registration not allowed.')); -+ } else if (common_logged_in()) { -+ common_user_error(_('Already logged in.')); -+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $this->try_register(); -+ } else { -+ $this->show_form(); -+ } -+ } -hunk ./actions/register.php 38 -- function try_register() { -+ function try_register() { -hunk ./actions/register.php 40 -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/register.php 46 -- $nickname = $this->trimmed('nickname'); -- $email = $this->trimmed('email'); -- $fullname = $this->trimmed('fullname'); -- $homepage = $this->trimmed('homepage'); -- $bio = $this->trimmed('bio'); -- $location = $this->trimmed('location'); -+ $nickname = $this->trimmed('nickname'); -+ $email = $this->trimmed('email'); -+ $fullname = $this->trimmed('fullname'); -+ $homepage = $this->trimmed('homepage'); -+ $bio = $this->trimmed('bio'); -+ $location = $this->trimmed('location'); -hunk ./actions/register.php 53 -- # We don't trim these... whitespace is OK in a password! -+ # We don't trim these... whitespace is OK in a password! -hunk ./actions/register.php 55 -- $password = $this->arg('password'); -- $confirm = $this->arg('confirm'); -+ $password = $this->arg('password'); -+ $confirm = $this->arg('confirm'); -hunk ./actions/register.php 58 -- # invitation code, if any -+ # invitation code, if any -hunk ./actions/register.php 60 -- $code = $this->trimmed('code'); -+ $code = $this->trimmed('code'); -hunk ./actions/register.php 62 -- if ($code) { -- $invite = Invitation::staticGet($code); -- } -+ if ($code) { -+ $invite = Invitation::staticGet($code); -+ } -hunk ./actions/register.php 66 -- if (common_config('site', 'inviteonly') && !($code && $invite)) { -- $this->client_error(_('Sorry, only invited people can register.')); -- return; -- } -+ if (common_config('site', 'inviteonly') && !($code && $invite)) { -+ $this->client_error(_('Sorry, only invited people can register.')); -+ return; -+ } -hunk ./actions/register.php 71 -- # Input scrubbing -+ # Input scrubbing -hunk ./actions/register.php 73 -- $nickname = common_canonical_nickname($nickname); -- $email = common_canonical_email($email); -+ $nickname = common_canonical_nickname($nickname); -+ $email = common_canonical_email($email); -hunk ./actions/register.php 76 -- if (!$this->boolean('license')) { -- $this->show_form(_('You can\'t register if you don\'t agree to the license.')); -- } else if ($email && !Validate::email($email, true)) { -- $this->show_form(_('Not a valid email address.')); -- } else if (!Validate::string($nickname, array('min_length' => 1, -- 'max_length' => 64, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -- $this->show_form(_('Nickname must have only lowercase letters and numbers and no spaces.')); -- } else if ($this->nickname_exists($nickname)) { -- $this->show_form(_('Nickname already in use. Try another one.')); -- } else if (!User::allowed_nickname($nickname)) { -- $this->show_form(_('Not a valid nickname.')); -- } else if ($this->email_exists($email)) { -- $this->show_form(_('Email address already exists.')); -- } else if (!is_null($homepage) && (strlen($homepage) > 0) && -- !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { -- $this->show_form(_('Homepage is not a valid URL.')); -- return; -- } else if (!is_null($fullname) && strlen($fullname) > 255) { -- $this->show_form(_('Full name is too long (max 255 chars).')); -- return; -- } else if (!is_null($bio) && strlen($bio) > 140) { -- $this->show_form(_('Bio is too long (max 140 chars).')); -- return; -- } else if (!is_null($location) && strlen($location) > 255) { -- $this->show_form(_('Location is too long (max 255 chars).')); -- return; -- } else if (strlen($password) < 6) { -- $this->show_form(_('Password must be 6 or more characters.')); -- return; -- } else if ($password != $confirm) { -- $this->show_form(_('Passwords don\'t match.')); -- } else if ($user = User::register(array('nickname' => $nickname, 'password' => $password, 'email' => $email, -- 'fullname' => $fullname, 'homepage' => $homepage, 'bio' => $bio, -- 'location' => $location, 'code' => $code))) { -- if (!$user) { -- $this->show_form(_('Invalid username or password.')); -- return; -- } -- # success! -- if (!common_set_user($user)) { -- common_server_error(_('Error setting user.')); -- return; -- } -- # this is a real login -- common_real_login(true); -- if ($this->boolean('rememberme')) { -- common_debug('Adding rememberme cookie for ' . $nickname); -- common_rememberme($user); -- } -- # Re-init language env in case it changed (not yet, but soon) -- common_init_language(); -- $this->show_success(); -- } else { -- $this->show_form(_('Invalid username or password.')); -- } -- } -+ if (!$this->boolean('license')) { -+ $this->show_form(_('You can\'t register if you don\'t agree to the license.')); -+ } else if ($email && !Validate::email($email, true)) { -+ $this->show_form(_('Not a valid email address.')); -+ } else if (!Validate::string($nickname, array('min_length' => 1, -+ 'max_length' => 64, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -+ $this->show_form(_('Nickname must have only lowercase letters and numbers and no spaces.')); -+ } else if ($this->nickname_exists($nickname)) { -+ $this->show_form(_('Nickname already in use. Try another one.')); -+ } else if (!User::allowed_nickname($nickname)) { -+ $this->show_form(_('Not a valid nickname.')); -+ } else if ($this->email_exists($email)) { -+ $this->show_form(_('Email address already exists.')); -+ } else if (!is_null($homepage) && (strlen($homepage) > 0) && -+ !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { -+ $this->show_form(_('Homepage is not a valid URL.')); -+ return; -+ } else if (!is_null($fullname) && strlen($fullname) > 255) { -+ $this->show_form(_('Full name is too long (max 255 chars).')); -+ return; -+ } else if (!is_null($bio) && strlen($bio) > 140) { -+ $this->show_form(_('Bio is too long (max 140 chars).')); -+ return; -+ } else if (!is_null($location) && strlen($location) > 255) { -+ $this->show_form(_('Location is too long (max 255 chars).')); -+ return; -+ } else if (strlen($password) < 6) { -+ $this->show_form(_('Password must be 6 or more characters.')); -+ return; -+ } else if ($password != $confirm) { -+ $this->show_form(_('Passwords don\'t match.')); -+ } else if ($user = User::register(array('nickname' => $nickname, 'password' => $password, 'email' => $email, -+ 'fullname' => $fullname, 'homepage' => $homepage, 'bio' => $bio, -+ 'location' => $location, 'code' => $code))) { -+ if (!$user) { -+ $this->show_form(_('Invalid username or password.')); -+ return; -+ } -+ # success! -+ if (!common_set_user($user)) { -+ common_server_error(_('Error setting user.')); -+ return; -+ } -+ # this is a real login -+ common_real_login(true); -+ if ($this->boolean('rememberme')) { -+ common_debug('Adding rememberme cookie for ' . $nickname); -+ common_rememberme($user); -+ } -+ # Re-init language env in case it changed (not yet, but soon) -+ common_init_language(); -+ $this->show_success(); -+ } else { -+ $this->show_form(_('Invalid username or password.')); -+ } -+ } -hunk ./actions/register.php 134 -- # checks if *CANONICAL* nickname exists -+ # checks if *CANONICAL* nickname exists -hunk ./actions/register.php 136 -- function nickname_exists($nickname) { -- $user = User::staticGet('nickname', $nickname); -- return ($user !== false); -- } -+ function nickname_exists($nickname) { -+ $user = User::staticGet('nickname', $nickname); -+ return ($user !== false); -+ } -hunk ./actions/register.php 141 -- # checks if *CANONICAL* email exists -+ # checks if *CANONICAL* email exists -hunk ./actions/register.php 143 -- function email_exists($email) { -- $email = common_canonical_email($email); -- if (!$email || strlen($email) == 0) { -- return false; -- } -- $user = User::staticGet('email', $email); -- return ($user !== false); -- } -+ function email_exists($email) { -+ $email = common_canonical_email($email); -+ if (!$email || strlen($email) == 0) { -+ return false; -+ } -+ $user = User::staticGet('email', $email); -+ return ($user !== false); -+ } +- common_show_header(_('Reset password'), NULL, ++ common_show_header(_('Reset password'), null, +hunk ./actions/recoverpassword.php 227 +- $confirm_email = NULL; ++ $confirm_email = null; +hunk ./actions/recoverpassword.php 270 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/recoverpassword.php 327 +- common_element('p', NULL, _('New password successfully saved. ' . ++ common_element('p', null, _('New password successfully saved. ' . hunk ./actions/register.php 152 -- function show_top($error=NULL) { -- if ($error) { -- common_element('p', 'error', $error); -- } else { -- $instr = common_markup_to_html(_('With this form you can create a new account. ' . -- 'You can then post notices and link up to friends and colleagues. '. -- '(Have an [OpenID](http://openid.net/)? ' . -- 'Try our [OpenID registration](%%action.openidlogin%%)!)')); -+ function show_top($error=NULL) { -+ if ($error) { -+ common_element('p', 'error', $error); -+ } else { -+ $instr = common_markup_to_html(_('With this form you can create a new account. ' . -+ 'You can then post notices and link up to friends and colleagues. '. -+ '(Have an [OpenID](http://openid.net/)? ' . -+ 'Try our [OpenID registration](%%action.openidlogin%%)!)')); -hunk ./actions/register.php 161 -- common_element_start('div', 'instructions'); -- common_raw($instr); -- common_element_end('div'); -- } -- } -+ common_element_start('div', 'instructions'); -+ common_raw($instr); -+ common_element_end('div'); -+ } -+ } +- function show_top($error=NULL) { ++ function show_top($error=null) { hunk ./actions/register.php 167 -- function show_form($error=NULL) { -- global $config; -+ function show_form($error=NULL) { -+ global $config; -hunk ./actions/register.php 170 -- $code = $this->trimmed('code'); -+ $code = $this->trimmed('code'); -hunk ./actions/register.php 172 -- if ($code) { -- $invite = Invitation::staticGet($code); -- } -+ if ($code) { -+ $invite = Invitation::staticGet($code); -+ } -hunk ./actions/register.php 176 -- if (common_config('site', 'inviteonly') && !($code && $invite)) { -- $this->client_error(_('Sorry, only invited people can register.')); -- return; -- } -+ if (common_config('site', 'inviteonly') && !($code && $invite)) { -+ $this->client_error(_('Sorry, only invited people can register.')); -+ return; -+ } +- function show_form($error=NULL) { ++ function show_form($error=null) { hunk ./actions/register.php 181 -- common_show_header(_('Register'), NULL, $error, array($this, 'show_top')); -- common_element_start('form', array('method' => 'post', -- 'id' => 'login', -- 'action' => common_local_url('register'))); -+ common_show_header(_('Register'), NULL, $error, array($this, 'show_top')); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'login', -+ 'action' => common_local_url('register'))); -hunk ./actions/register.php 186 -- common_hidden('token', common_session_token()); -+ common_hidden('token', common_session_token()); -hunk ./actions/register.php 188 -- if ($code) { -- common_hidden('code', $code); -- } -+ if ($code) { -+ common_hidden('code', $code); -+ } -hunk ./actions/register.php 192 -- common_input('nickname', _('Nickname'), $this->trimmed('nickname'), -- _('1-64 lowercase letters or numbers, no punctuation or spaces. Required.')); -- common_password('password', _('Password'), -- _('6 or more characters. Required.')); -- common_password('confirm', _('Confirm'), -- _('Same as password above. Required.')); -- if ($invite && $invite->address_type == 'email') { -- common_input('email', _('Email'), $invite->address, -- _('Used only for updates, announcements, and password recovery')); -- } else { -- common_input('email', _('Email'), $this->trimmed('email'), -- _('Used only for updates, announcements, and password recovery')); -- } -- common_input('fullname', _('Full name'), -- $this->trimmed('fullname'), -- _('Longer name, preferably your "real" name')); -- common_input('homepage', _('Homepage'), -- $this->trimmed('homepage'), -- _('URL of your homepage, blog, or profile on another site')); -- common_textarea('bio', _('Bio'), -- $this->trimmed('bio'), -- _('Describe yourself and your interests in 140 chars')); -- common_input('location', _('Location'), -- $this->trimmed('location'), -- _('Where you are, like "City, State (or Region), Country"')); -- common_checkbox('rememberme', _('Remember me'), -- $this->boolean('rememberme'), -- _('Automatically login in the future; not for shared computers!')); -- common_element_start('p'); -- $attrs = array('type' => 'checkbox', -- 'id' => 'license', -- 'name' => 'license', -- 'value' => 'true'); -- if ($this->boolean('license')) { -- $attrs['checked'] = 'checked'; -- } -- common_element('input', $attrs); -- common_text(_('My text and files are available under ')); -- common_element('a', array('href' => $config['license']['url']), -- $config['license']['title']); -- common_text(_(' except this private data: password, email address, IM address, phone number.')); -- common_element_end('p'); -- common_submit('submit', _('Register')); -- common_element_end('form'); -- common_show_footer(); -- } -+ common_input('nickname', _('Nickname'), $this->trimmed('nickname'), -+ _('1-64 lowercase letters or numbers, no punctuation or spaces. Required.')); -+ common_password('password', _('Password'), -+ _('6 or more characters. Required.')); -+ common_password('confirm', _('Confirm'), -+ _('Same as password above. Required.')); -+ if ($invite && $invite->address_type == 'email') { -+ common_input('email', _('Email'), $invite->address, -+ _('Used only for updates, announcements, and password recovery')); -+ } else { -+ common_input('email', _('Email'), $this->trimmed('email'), -+ _('Used only for updates, announcements, and password recovery')); -+ } -+ common_input('fullname', _('Full name'), -+ $this->trimmed('fullname'), -+ _('Longer name, preferably your "real" name')); -+ common_input('homepage', _('Homepage'), -+ $this->trimmed('homepage'), -+ _('URL of your homepage, blog, or profile on another site')); -+ common_textarea('bio', _('Bio'), -+ $this->trimmed('bio'), -+ _('Describe yourself and your interests in 140 chars')); -+ common_input('location', _('Location'), -+ $this->trimmed('location'), -+ _('Where you are, like "City, State (or Region), Country"')); -+ common_checkbox('rememberme', _('Remember me'), -+ $this->boolean('rememberme'), -+ _('Automatically login in the future; not for shared computers!')); -+ common_element_start('p'); -+ $attrs = array('type' => 'checkbox', -+ 'id' => 'license', -+ 'name' => 'license', -+ 'value' => 'true'); -+ if ($this->boolean('license')) { -+ $attrs['checked'] = 'checked'; -+ } -+ common_element('input', $attrs); -+ common_text(_('My text and files are available under ')); -+ common_element('a', array('href' => $config['license']['url']), -+ $config['license']['title']); -+ common_text(_(' except this private data: password, email address, IM address, phone number.')); -+ common_element_end('p'); -+ common_submit('submit', _('Register')); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/register.php 239 -- function show_success() { -- $nickname = $this->arg('nickname'); -- common_show_header(_('Registration successful')); -- common_element_start('div', 'success'); -- $instr = sprintf(_('Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may want to...'. "\n\n" . -- '* Go to [your profile](%s) and post your first message.' . "\n" . -- '* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send notices through instant messages.' . "\n" . -- '* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that share your interests. ' . "\n" . -- '* Update your [profile settings](%%%%action.profilesettings%%%%) to tell others more about you. ' . "\n" . -- '* Read over the [online docs](%%%%doc.help%%%%) for features you may have missed. ' . "\n\n" . -- 'Thanks for signing up and we hope you enjoy using this service.'), -- $nickname, common_local_url('showstream', array('nickname' => $nickname))); -- common_raw(common_markup_to_html($instr)); -- $have_email = $this->trimmed('email'); -- if ($have_email) { -- $emailinstr = _('(You should receive a message by email momentarily, with ' . -- 'instructions on how to confirm your email address.)'); -- common_raw(common_markup_to_html($emailinstr)); -- } -- common_element_end('div'); -- common_show_footer(); -- } -+ function show_success() { -+ $nickname = $this->arg('nickname'); -+ common_show_header(_('Registration successful')); -+ common_element_start('div', 'success'); -+ $instr = sprintf(_('Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may want to...'. "\n\n" . -+ '* Go to [your profile](%s) and post your first message.' . "\n" . -+ '* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send notices through instant messages.' . "\n" . -+ '* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that share your interests. ' . "\n" . -+ '* Update your [profile settings](%%%%action.profilesettings%%%%) to tell others more about you. ' . "\n" . -+ '* Read over the [online docs](%%%%doc.help%%%%) for features you may have missed. ' . "\n\n" . -+ 'Thanks for signing up and we hope you enjoy using this service.'), -+ $nickname, common_local_url('showstream', array('nickname' => $nickname))); -+ common_raw(common_markup_to_html($instr)); -+ $have_email = $this->trimmed('email'); -+ if ($have_email) { -+ $emailinstr = _('(You should receive a message by email momentarily, with ' . -+ 'instructions on how to confirm your email address.)'); -+ common_raw(common_markup_to_html($emailinstr)); -+ } -+ common_element_end('div'); -+ common_show_footer(); -+ } -hunk ./actions/remotesubscribe.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/remotesubscribe.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/remotesubscribe.php 30 -- if (common_logged_in()) { -- common_user_error(_('You can use the local subscription!')); -- return; -- } -+ if (common_logged_in()) { -+ common_user_error(_('You can use the local subscription!')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 35 -- if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ if ($_SERVER['REQUEST_METHOD'] == 'POST') { -hunk ./actions/remotesubscribe.php 37 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 44 -- $this->remote_subscription(); -- } else { -- $this->show_form(); -- } -- } -+ $this->remote_subscription(); -+ } else { -+ $this->show_form(); -+ } -+ } -hunk ./actions/remotesubscribe.php 50 -- function get_instructions() { -- return _('To subscribe, you can [login](%%action.login%%),' . -- ' or [register](%%action.register%%) a new ' . -- ' account. If you already have an account ' . -- ' on a [compatible microblogging site](%%doc.openmublog%%), ' . -- ' enter your profile URL below.'); -- } -+ function get_instructions() { -+ return _('To subscribe, you can [login](%%action.login%%),' . -+ ' or [register](%%action.register%%) a new ' . -+ ' account. If you already have an account ' . -+ ' on a [compatible microblogging site](%%doc.openmublog%%), ' . -+ ' enter your profile URL below.'); -+ } +- common_show_header(_('Register'), NULL, $error, array($this, 'show_top')); ++ common_show_header(_('Register'), null, $error, array($this, 'show_top')); hunk ./actions/remotesubscribe.php 58 -- function show_top($err=NULL) { -- if ($err) { -- common_element('div', 'error', $err); -- } else { -- $instructions = $this->get_instructions(); -- $output = common_markup_to_html($instructions); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('p'); -- } -- } -+ function show_top($err=NULL) { -+ if ($err) { -+ common_element('div', 'error', $err); -+ } else { -+ $instructions = $this->get_instructions(); -+ $output = common_markup_to_html($instructions); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('p'); -+ } -+ } +- function show_top($err=NULL) { ++ function show_top($err=null) { hunk ./actions/remotesubscribe.php 70 -- function show_form($err=NULL) { -- $nickname = $this->trimmed('nickname'); -- $profile = $this->trimmed('profile_url'); -- common_show_header(_('Remote subscribe'), NULL, $err, -- array($this, 'show_top')); -- # id = remotesubscribe conflicts with the -- # button on profile page -- common_element_start('form', array('id' => 'remsub', 'method' => 'post', -- 'action' => common_local_url('remotesubscribe'))); -- common_hidden('token', common_session_token()); -- common_input('nickname', _('User nickname'), $nickname, -- _('Nickname of the user you want to follow')); -- common_input('profile_url', _('Profile URL'), $profile, -- _('URL of your profile on another compatible microblogging service')); -- common_submit('submit', _('Subscribe')); -- common_element_end('form'); -- common_show_footer(); -- } -+ function show_form($err=NULL) { -+ $nickname = $this->trimmed('nickname'); -+ $profile = $this->trimmed('profile_url'); -+ common_show_header(_('Remote subscribe'), NULL, $err, -+ array($this, 'show_top')); -+ # id = remotesubscribe conflicts with the -+ # button on profile page -+ common_element_start('form', array('id' => 'remsub', 'method' => 'post', -+ 'action' => common_local_url('remotesubscribe'))); -+ common_hidden('token', common_session_token()); -+ common_input('nickname', _('User nickname'), $nickname, -+ _('Nickname of the user you want to follow')); -+ common_input('profile_url', _('Profile URL'), $profile, -+ _('URL of your profile on another compatible microblogging service')); -+ common_submit('submit', _('Subscribe')); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/remotesubscribe.php 89 -- function remote_subscription() { -- $user = $this->get_user(); -+ function remote_subscription() { -+ $user = $this->get_user(); -hunk ./actions/remotesubscribe.php 92 -- if (!$user) { -- $this->show_form(_('No such user.')); -- return; -- } -+ if (!$user) { -+ $this->show_form(_('No such user.')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 97 -- $profile = $this->trimmed('profile_url'); -+ $profile = $this->trimmed('profile_url'); -hunk ./actions/remotesubscribe.php 99 -- if (!$profile) { -- $this->show_form(_('No such user.')); -- return; -- } -+ if (!$profile) { -+ $this->show_form(_('No such user.')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 104 -- if (!Validate::uri($profile, array('allowed_schemes' => array('http', 'https')))) { -- $this->show_form(_('Invalid profile URL (bad format)')); -- return; -- } -+ if (!Validate::uri($profile, array('allowed_schemes' => array('http', 'https')))) { -+ $this->show_form(_('Invalid profile URL (bad format)')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 109 -- $fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); -- $yadis = Auth_Yadis_Yadis::discover($profile, $fetcher); -+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); -+ $yadis = Auth_Yadis_Yadis::discover($profile, $fetcher); -hunk ./actions/remotesubscribe.php 112 -- if (!$yadis || $yadis->failed) { -- $this->show_form(_('Not a valid profile URL (no YADIS document).')); -- return; -- } -+ if (!$yadis || $yadis->failed) { -+ $this->show_form(_('Not a valid profile URL (no YADIS document).')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 117 -- # XXX: a little liberal for sites that accidentally put whitespace before the xml declaration -+ # XXX: a little liberal for sites that accidentally put whitespace before the xml declaration -hunk ./actions/remotesubscribe.php 121 -- if (!$xrds) { -- $this->show_form(_('Not a valid profile URL (no XRDS defined).')); -- return; -- } -+ if (!$xrds) { -+ $this->show_form(_('Not a valid profile URL (no XRDS defined).')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 126 -- $omb = $this->getOmb($xrds); -+ $omb = $this->getOmb($xrds); -hunk ./actions/remotesubscribe.php 128 -- if (!$omb) { -- $this->show_form(_('Not a valid profile URL (incorrect services).')); -- return; -- } -+ if (!$omb) { -+ $this->show_form(_('Not a valid profile URL (incorrect services).')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 133 -- if (omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]) == -- common_local_url('requesttoken')) -- { -- $this->show_form(_('That\'s a local profile! Login to subscribe.')); -- return; -- } -+ if (omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]) == -+ common_local_url('requesttoken')) -+ { -+ $this->show_form(_('That\'s a local profile! Login to subscribe.')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 140 -- if (User::staticGet('uri', omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]))) { -- $this->show_form(_('That\'s a local profile! Login to subscribe.')); -- return; -- } -+ if (User::staticGet('uri', omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]))) { -+ $this->show_form(_('That\'s a local profile! Login to subscribe.')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 145 -- list($token, $secret) = $this->request_token($omb); -+ list($token, $secret) = $this->request_token($omb); -hunk ./actions/remotesubscribe.php 147 -- if (!$token || !$secret) { -- $this->show_form(_('Couldn\'t get a request token.')); -- return; -- } -+ if (!$token || !$secret) { -+ $this->show_form(_('Couldn\'t get a request token.')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 152 -- $this->request_authorization($user, $omb, $token, $secret); -- } -+ $this->request_authorization($user, $omb, $token, $secret); -+ } -hunk ./actions/remotesubscribe.php 155 -- function get_user() { -- $user = NULL; -- $nickname = $this->trimmed('nickname'); -- if ($nickname) { -- $user = User::staticGet('nickname', $nickname); -- } -- return $user; -- } -+ function get_user() { -+ $user = NULL; -+ $nickname = $this->trimmed('nickname'); -+ if ($nickname) { -+ $user = User::staticGet('nickname', $nickname); -+ } -+ return $user; -+ } -hunk ./actions/remotesubscribe.php 164 -- function getOmb($xrds) { -+ function getOmb($xrds) { -hunk ./actions/remotesubscribe.php 166 -- static $omb_endpoints = array(OMB_ENDPOINT_UPDATEPROFILE, OMB_ENDPOINT_POSTNOTICE); -- static $oauth_endpoints = array(OAUTH_ENDPOINT_REQUEST, OAUTH_ENDPOINT_AUTHORIZE, -- OAUTH_ENDPOINT_ACCESS); -- $omb = array(); -+ static $omb_endpoints = array(OMB_ENDPOINT_UPDATEPROFILE, OMB_ENDPOINT_POSTNOTICE); -+ static $oauth_endpoints = array(OAUTH_ENDPOINT_REQUEST, OAUTH_ENDPOINT_AUTHORIZE, -+ OAUTH_ENDPOINT_ACCESS); -+ $omb = array(); -hunk ./actions/remotesubscribe.php 171 -- # XXX: the following code could probably be refactored to eliminate dupes -+ # XXX: the following code could probably be refactored to eliminate dupes -hunk ./actions/remotesubscribe.php 173 -- $oauth_services = omb_get_services($xrds, OAUTH_DISCOVERY); -+ $oauth_services = omb_get_services($xrds, OAUTH_DISCOVERY); -hunk ./actions/remotesubscribe.php 175 -- if (!$oauth_services) { -- return NULL; -- } -+ if (!$oauth_services) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 179 -- $oauth_service = $oauth_services[0]; -+ $oauth_service = $oauth_services[0]; -hunk ./actions/remotesubscribe.php 181 -- $oauth_xrd = $this->getXRD($oauth_service, $xrds); -+ $oauth_xrd = $this->getXRD($oauth_service, $xrds); -hunk ./actions/remotesubscribe.php 183 -- if (!$oauth_xrd) { -- return NULL; -- } -+ if (!$oauth_xrd) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 187 -- if (!$this->addServices($oauth_xrd, $oauth_endpoints, $omb)) { -- return NULL; -- } -+ if (!$this->addServices($oauth_xrd, $oauth_endpoints, $omb)) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 191 -- $omb_services = omb_get_services($xrds, OMB_NAMESPACE); -+ $omb_services = omb_get_services($xrds, OMB_NAMESPACE); -hunk ./actions/remotesubscribe.php 193 -- if (!$omb_services) { -- return NULL; -- } -+ if (!$omb_services) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 197 -- $omb_service = $omb_services[0]; -+ $omb_service = $omb_services[0]; -hunk ./actions/remotesubscribe.php 199 -- $omb_xrd = $this->getXRD($omb_service, $xrds); -+ $omb_xrd = $this->getXRD($omb_service, $xrds); -hunk ./actions/remotesubscribe.php 201 -- if (!$omb_xrd) { -- return NULL; -- } -+ if (!$omb_xrd) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 205 -- if (!$this->addServices($omb_xrd, $omb_endpoints, $omb)) { -- return NULL; -- } -+ if (!$this->addServices($omb_xrd, $omb_endpoints, $omb)) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 209 -- # XXX: check that we got all the services we needed -+ # XXX: check that we got all the services we needed -hunk ./actions/remotesubscribe.php 211 -- foreach (array_merge($omb_endpoints, $oauth_endpoints) as $type) { -- if (!array_key_exists($type, $omb) || !$omb[$type]) { -- return NULL; -- } -- } -+ foreach (array_merge($omb_endpoints, $oauth_endpoints) as $type) { -+ if (!array_key_exists($type, $omb) || !$omb[$type]) { -+ return NULL; -+ } -+ } -hunk ./actions/remotesubscribe.php 217 -- if (!omb_local_id($omb[OAUTH_ENDPOINT_REQUEST])) { -- return NULL; -- } -+ if (!omb_local_id($omb[OAUTH_ENDPOINT_REQUEST])) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 221 -- return $omb; -- } -+ return $omb; -+ } -hunk ./actions/remotesubscribe.php 224 -- function getXRD($main_service, $main_xrds) { -- $uri = omb_service_uri($main_service); -- if (strpos($uri, "#") !== 0) { -- # FIXME: more rigorous handling of external service definitions -- return NULL; -- } -- $id = substr($uri, 1); -- $nodes = $main_xrds->allXrdNodes; -- $parser = $main_xrds->parser; -- foreach ($nodes as $node) { -- $attrs = $parser->attributes($node); -- if (array_key_exists('xml:id', $attrs) && -- $attrs['xml:id'] == $id) { -- # XXX: trick the constructor into thinking this is the only node -- $bogus_nodes = array($node); -- return new Auth_Yadis_XRDS($parser, $bogus_nodes); -- } -- } -- return NULL; -- } -+ function getXRD($main_service, $main_xrds) { -+ $uri = omb_service_uri($main_service); -+ if (strpos($uri, "#") !== 0) { -+ # FIXME: more rigorous handling of external service definitions -+ return NULL; -+ } -+ $id = substr($uri, 1); -+ $nodes = $main_xrds->allXrdNodes; -+ $parser = $main_xrds->parser; -+ foreach ($nodes as $node) { -+ $attrs = $parser->attributes($node); -+ if (array_key_exists('xml:id', $attrs) && -+ $attrs['xml:id'] == $id) { -+ # XXX: trick the constructor into thinking this is the only node -+ $bogus_nodes = array($node); -+ return new Auth_Yadis_XRDS($parser, $bogus_nodes); -+ } -+ } -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 245 -- function addServices($xrd, $types, &$omb) { -- foreach ($types as $type) { -- $matches = omb_get_services($xrd, $type); -- if ($matches) { -- $omb[$type] = $matches[0]; -- } else { -- # no match for type -- return false; -- } -- } -- return true; -- } -+ function addServices($xrd, $types, &$omb) { -+ foreach ($types as $type) { -+ $matches = omb_get_services($xrd, $type); -+ if ($matches) { -+ $omb[$type] = $matches[0]; -+ } else { -+ # no match for type -+ return false; -+ } -+ } -+ return true; -+ } -hunk ./actions/remotesubscribe.php 258 -- function request_token($omb) { -- $con = omb_oauth_consumer(); -+ function request_token($omb) { -+ $con = omb_oauth_consumer(); -hunk ./actions/remotesubscribe.php 261 -- $url = omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]); -+ $url = omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]); -hunk ./actions/remotesubscribe.php 263 -- # XXX: Is this the right thing to do? Strip off GET params and make them -- # POST params? Seems wrong to me. -+ # XXX: Is this the right thing to do? Strip off GET params and make them -+ # POST params? Seems wrong to me. -hunk ./actions/remotesubscribe.php 266 -- $parsed = parse_url($url); -- $params = array(); -- parse_str($parsed['query'], $params); -+ $parsed = parse_url($url); -+ $params = array(); -+ parse_str($parsed['query'], $params); +- function show_form($err=NULL) { ++ function show_form($err=null) { +hunk ./actions/remotesubscribe.php 73 +- common_show_header(_('Remote subscribe'), NULL, $err, ++ common_show_header(_('Remote subscribe'), null, $err, +hunk ./actions/remotesubscribe.php 156 +- $user = NULL; ++ $user = null; +hunk ./actions/remotesubscribe.php 176 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 184 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 188 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 194 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 202 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 206 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 213 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 218 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 228 +- return NULL; ++ return null; +hunk ./actions/remotesubscribe.php 242 +- return NULL; ++ return null; hunk ./actions/remotesubscribe.php 270 -- $req = OAuthRequest::from_consumer_and_token($con, NULL, "POST", $url, $params); -+ $req = OAuthRequest::from_consumer_and_token($con, NULL, "POST", $url, $params); -hunk ./actions/remotesubscribe.php 272 -- $listener = omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]); -+ $listener = omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]); -hunk ./actions/remotesubscribe.php 274 -- if (!$listener) { -- return NULL; -- } -+ if (!$listener) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 278 -- $req->set_parameter('omb_listener', $listener); -- $req->set_parameter('omb_version', OMB_VERSION_01); -+ $req->set_parameter('omb_listener', $listener); -+ $req->set_parameter('omb_version', OMB_VERSION_01); -hunk ./actions/remotesubscribe.php 281 -- # XXX: test to see if endpoint accepts this signature method -+ # XXX: test to see if endpoint accepts this signature method +- $req = OAuthRequest::from_consumer_and_token($con, NULL, "POST", $url, $params); ++ $req = OAuthRequest::from_consumer_and_token($con, null, "POST", $url, $params); +hunk ./actions/remotesubscribe.php 275 +- return NULL; ++ return null; hunk ./actions/remotesubscribe.php 283 -- $req->sign_request(omb_hmac_sha1(), $con, NULL); -+ $req->sign_request(omb_hmac_sha1(), $con, NULL); -hunk ./actions/remotesubscribe.php 285 -- # We re-use this tool's fetcher, since it's pretty good -+ # We re-use this tool's fetcher, since it's pretty good -hunk ./actions/remotesubscribe.php 287 -- $fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); -+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); -hunk ./actions/remotesubscribe.php 289 -- $result = $fetcher->post($req->get_normalized_http_url(), -- $req->to_postdata(), -+ $result = $fetcher->post($req->get_normalized_http_url(), -+ $req->to_postdata(), -hunk ./actions/remotesubscribe.php 293 -- if ($result->status != 200) { -- return NULL; -- } -+ if ($result->status != 200) { -+ return NULL; -+ } -hunk ./actions/remotesubscribe.php 297 -- parse_str($result->body, $return); -+ parse_str($result->body, $return); -hunk ./actions/remotesubscribe.php 299 -- return array($return['oauth_token'], $return['oauth_token_secret']); -- } -+ return array($return['oauth_token'], $return['oauth_token_secret']); -+ } -hunk ./actions/remotesubscribe.php 302 -- function request_authorization($user, $omb, $token, $secret) { -- global $config; # for license URL -+ function request_authorization($user, $omb, $token, $secret) { -+ global $config; # for license URL -hunk ./actions/remotesubscribe.php 305 -- $con = omb_oauth_consumer(); -- $tok = new OAuthToken($token, $secret); -+ $con = omb_oauth_consumer(); -+ $tok = new OAuthToken($token, $secret); -hunk ./actions/remotesubscribe.php 308 -- $url = omb_service_uri($omb[OAUTH_ENDPOINT_AUTHORIZE]); -+ $url = omb_service_uri($omb[OAUTH_ENDPOINT_AUTHORIZE]); -hunk ./actions/remotesubscribe.php 310 -- # XXX: Is this the right thing to do? Strip off GET params and make them -- # POST params? Seems wrong to me. -+ # XXX: Is this the right thing to do? Strip off GET params and make them -+ # POST params? Seems wrong to me. -hunk ./actions/remotesubscribe.php 313 -- $parsed = parse_url($url); -- $params = array(); -- parse_str($parsed['query'], $params); -+ $parsed = parse_url($url); -+ $params = array(); -+ parse_str($parsed['query'], $params); -hunk ./actions/remotesubscribe.php 317 -- $req = OAuthRequest::from_consumer_and_token($con, $tok, 'GET', $url, $params); -+ $req = OAuthRequest::from_consumer_and_token($con, $tok, 'GET', $url, $params); -hunk ./actions/remotesubscribe.php 319 -- # We send over a ton of information. This lets the other -- # server store info about our user, and it lets the current -- # user decide if they really want to authorize the subscription. -+ # We send over a ton of information. This lets the other -+ # server store info about our user, and it lets the current -+ # user decide if they really want to authorize the subscription. -hunk ./actions/remotesubscribe.php 323 -- $req->set_parameter('omb_version', OMB_VERSION_01); -- $req->set_parameter('omb_listener', omb_local_id($omb[OAUTH_ENDPOINT_REQUEST])); -- $req->set_parameter('omb_listenee', $user->uri); -- $req->set_parameter('omb_listenee_profile', common_profile_url($user->nickname)); -- $req->set_parameter('omb_listenee_nickname', $user->nickname); -- $req->set_parameter('omb_listenee_license', $config['license']['url']); -+ $req->set_parameter('omb_version', OMB_VERSION_01); -+ $req->set_parameter('omb_listener', omb_local_id($omb[OAUTH_ENDPOINT_REQUEST])); -+ $req->set_parameter('omb_listenee', $user->uri); -+ $req->set_parameter('omb_listenee_profile', common_profile_url($user->nickname)); -+ $req->set_parameter('omb_listenee_nickname', $user->nickname); -+ $req->set_parameter('omb_listenee_license', $config['license']['url']); -hunk ./actions/remotesubscribe.php 330 -- $profile = $user->getProfile(); -- if (!$profile) { -- common_log_db_error($user, 'SELECT', __FILE__); -- $this->server_error(_('User without matching profile')); -- return; -- } -+ $profile = $user->getProfile(); -+ if (!$profile) { -+ common_log_db_error($user, 'SELECT', __FILE__); -+ $this->server_error(_('User without matching profile')); -+ return; -+ } -hunk ./actions/remotesubscribe.php 337 -- if ($profile->fullname) { -- $req->set_parameter('omb_listenee_fullname', $profile->fullname); -- } -- if ($profile->homepage) { -- $req->set_parameter('omb_listenee_homepage', $profile->homepage); -- } -- if ($profile->bio) { -- $req->set_parameter('omb_listenee_bio', $profile->bio); -- } -- if ($profile->location) { -- $req->set_parameter('omb_listenee_location', $profile->location); -- } -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -- if ($avatar) { -- $req->set_parameter('omb_listenee_avatar', $avatar->url); -- } -+ if ($profile->fullname) { -+ $req->set_parameter('omb_listenee_fullname', $profile->fullname); -+ } -+ if ($profile->homepage) { -+ $req->set_parameter('omb_listenee_homepage', $profile->homepage); -+ } -+ if ($profile->bio) { -+ $req->set_parameter('omb_listenee_bio', $profile->bio); -+ } -+ if ($profile->location) { -+ $req->set_parameter('omb_listenee_location', $profile->location); -+ } -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ if ($avatar) { -+ $req->set_parameter('omb_listenee_avatar', $avatar->url); -+ } -hunk ./actions/remotesubscribe.php 354 -- # XXX: add a nonce to prevent replay attacks -+ # XXX: add a nonce to prevent replay attacks -hunk ./actions/remotesubscribe.php 356 -- $req->set_parameter('oauth_callback', common_local_url('finishremotesubscribe')); -+ $req->set_parameter('oauth_callback', common_local_url('finishremotesubscribe')); -hunk ./actions/remotesubscribe.php 358 -- # XXX: test to see if endpoint accepts this signature method -+ # XXX: test to see if endpoint accepts this signature method -hunk ./actions/remotesubscribe.php 360 -- $req->sign_request(omb_hmac_sha1(), $con, $tok); -+ $req->sign_request(omb_hmac_sha1(), $con, $tok); -hunk ./actions/remotesubscribe.php 362 -- # store all our info here -+ # store all our info here -hunk ./actions/remotesubscribe.php 364 -- $omb['listenee'] = $user->nickname; -- $omb['listener'] = omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]); -- $omb['token'] = $token; -- $omb['secret'] = $secret; -- # call doesn't work after bounce back so we cache; maybe serialization issue...? -- $omb['access_token_url'] = omb_service_uri($omb[OAUTH_ENDPOINT_ACCESS]); -- $omb['post_notice_url'] = omb_service_uri($omb[OMB_ENDPOINT_POSTNOTICE]); -- $omb['update_profile_url'] = omb_service_uri($omb[OMB_ENDPOINT_UPDATEPROFILE]); -+ $omb['listenee'] = $user->nickname; -+ $omb['listener'] = omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]); -+ $omb['token'] = $token; -+ $omb['secret'] = $secret; -+ # call doesn't work after bounce back so we cache; maybe serialization issue...? -+ $omb['access_token_url'] = omb_service_uri($omb[OAUTH_ENDPOINT_ACCESS]); -+ $omb['post_notice_url'] = omb_service_uri($omb[OMB_ENDPOINT_POSTNOTICE]); -+ $omb['update_profile_url'] = omb_service_uri($omb[OMB_ENDPOINT_UPDATEPROFILE]); -hunk ./actions/remotesubscribe.php 373 -- common_ensure_session(); -+ common_ensure_session(); -hunk ./actions/remotesubscribe.php 375 -- $_SESSION['oauth_authorization_request'] = $omb; -+ $_SESSION['oauth_authorization_request'] = $omb; -hunk ./actions/remotesubscribe.php 377 -- # Redirect to authorization service -+ # Redirect to authorization service -hunk ./actions/remotesubscribe.php 379 -- common_redirect($req->to_url()); -- return; -- } -+ common_redirect($req->to_url()); -+ return; -+ } -hunk ./actions/remotesubscribe.php 383 -- function make_nonce() { -- return common_good_rand(16); -- } -+ function make_nonce() { -+ return common_good_rand(16); -+ } -hunk ./actions/replies.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/replies.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/replies.php 30 -- $nickname = common_canonical_nickname($this->arg('nickname')); -- $user = User::staticGet('nickname', $nickname); -+ $nickname = common_canonical_nickname($this->arg('nickname')); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/replies.php 33 -- if (!$user) { -- $this->no_such_user(); -- return; -- } -+ if (!$user) { -+ $this->no_such_user(); -+ return; -+ } -hunk ./actions/replies.php 38 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/replies.php 40 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/replies.php 45 -- # Looks like we're good; show the header -+ # Looks like we're good; show the header -hunk ./actions/replies.php 47 -- common_show_header(sprintf(_("Replies to %s"), $profile->nickname), -- array($this, 'show_header'), $user, -- array($this, 'show_top')); -+ common_show_header(sprintf(_("Replies to %s"), $profile->nickname), -+ array($this, 'show_header'), $user, -+ array($this, 'show_top')); -hunk ./actions/replies.php 51 -- $this->show_replies($user); -+ $this->show_replies($user); -hunk ./actions/replies.php 53 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/replies.php 56 -- function no_such_user() { -- common_user_error(_('No such user.')); -- } -+ function no_such_user() { -+ common_user_error(_('No such user.')); -+ } -hunk ./actions/replies.php 60 -- function show_header($user) { -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('repliesrss', array('nickname' => -- $user->nickname)), -- 'type' => 'application/rss+xml', -- 'title' => sprintf(_('Feed for replies to %s'), $user->nickname))); -- } -+ function show_header($user) { -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('repliesrss', array('nickname' => -+ $user->nickname)), -+ 'type' => 'application/rss+xml', -+ 'title' => sprintf(_('Feed for replies to %s'), $user->nickname))); -+ } -hunk ./actions/replies.php 68 -- function show_top($user) { -- $cur = common_current_user(); -+ function show_top($user) { -+ $cur = common_current_user(); -hunk ./actions/replies.php 71 -- if ($cur && $cur->id == $user->id) { -- common_notice_form('replies'); -- } -+ if ($cur && $cur->id == $user->id) { -+ common_notice_form('replies'); -+ } -hunk ./actions/replies.php 75 -- $this->views_menu(); -+ $this->views_menu(); -hunk ./actions/replies.php 77 -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('repliesrss', array('nickname' => $user->nickname)), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'repliesrss'))); -- } -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('repliesrss', array('nickname' => $user->nickname)), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'repliesrss'))); -+ } -hunk ./actions/replies.php 83 -- function show_replies($user) { -+ function show_replies($user) { -hunk ./actions/replies.php 85 -- $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -hunk ./actions/replies.php 87 -- $notice = $user->getReplies(($page-1) * NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -+ $notice = $user->getReplies(($page-1) * NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -hunk ./actions/replies.php 89 -- $cnt = $this->show_notice_list($notice); -+ $cnt = $this->show_notice_list($notice); -hunk ./actions/replies.php 91 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'replies', array('nickname' => $user->nickname)); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'replies', array('nickname' => $user->nickname)); -+ } +- $req->sign_request(omb_hmac_sha1(), $con, NULL); ++ $req->sign_request(omb_hmac_sha1(), $con, null); +hunk ./actions/remotesubscribe.php 294 +- return NULL; ++ return null; hunk ./actions/repliesrss.php 28 -- var $user = NULL; -+ var $user = NULL; -hunk ./actions/repliesrss.php 30 -- function init() { -- $nickname = $this->trimmed('nickname'); -- $this->user = User::staticGet('nickname', $nickname); -+ function init() { -+ $nickname = $this->trimmed('nickname'); -+ $this->user = User::staticGet('nickname', $nickname); -hunk ./actions/repliesrss.php 34 -- if (!$this->user) { -- common_user_error(_('No such user.')); -- return false; -- } else { -- return true; -- } -- } -+ if (!$this->user) { -+ common_user_error(_('No such user.')); -+ return false; -+ } else { -+ return true; -+ } -+ } -hunk ./actions/repliesrss.php 42 -- function get_notices($limit=0) { -+ function get_notices($limit=0) { -hunk ./actions/repliesrss.php 44 -- $user = $this->user; -+ $user = $this->user; -hunk ./actions/repliesrss.php 46 -- $notice = $user->getReplies(0, ($limit == 0) ? 48 : $limit); -+ $notice = $user->getReplies(0, ($limit == 0) ? 48 : $limit); -hunk ./actions/repliesrss.php 48 -- $notices = array(); -- -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ $notices = array(); -+ -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/repliesrss.php 54 -- return $notices; -- } -+ return $notices; -+ } -hunk ./actions/repliesrss.php 57 -- function get_channel() { -- $user = $this->user; -- $c = array('url' => common_local_url('repliesrss', -- array('nickname' => -- $user->nickname)), -- 'title' => sprintf(_("Replies to %s"), $user->nickname), -- 'link' => common_local_url('replies', -- array('nickname' => -- $user->nickname)), -- 'description' => sprintf(_('Feed for replies to %s'), $user->nickname)); -- return $c; -- } -+ function get_channel() { -+ $user = $this->user; -+ $c = array('url' => common_local_url('repliesrss', -+ array('nickname' => -+ $user->nickname)), -+ 'title' => sprintf(_("Replies to %s"), $user->nickname), -+ 'link' => common_local_url('replies', -+ array('nickname' => -+ $user->nickname)), -+ 'description' => sprintf(_('Feed for replies to %s'), $user->nickname)); -+ return $c; -+ } -hunk ./actions/repliesrss.php 70 -- function get_image() { -- $user = $this->user; -- $profile = $user->getProfile(); -- if (!$profile) { -- return NULL; -- } -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -- return ($avatar) ? $avatar->url : NULL; -- } -+ function get_image() { -+ $user = $this->user; -+ $profile = $user->getProfile(); -+ if (!$profile) { -+ return NULL; -+ } -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ return ($avatar) ? $avatar->url : NULL; -+ } -hunk ./actions/requesttoken.php 25 -- -- function is_readonly() { -- return false; -- } -- -- function handle($args) { -- parent::handle($args); -- try { -- common_remove_magic_from_request(); -- $req = OAuthRequest::from_request(); -- $server = omb_oauth_server(); -- $token = $server->fetch_request_token($req); -- print $token; -- } catch (OAuthException $e) { -- common_server_error($e->getMessage()); -- } -- } -+ -+ function is_readonly() { -+ return false; -+ } -+ -+ function handle($args) { -+ parent::handle($args); -+ try { -+ common_remove_magic_from_request(); -+ $req = OAuthRequest::from_request(); -+ $server = omb_oauth_server(); -+ $token = $server->fetch_request_token($req); -+ print $token; -+ } catch (OAuthException $e) { -+ common_server_error($e->getMessage()); -+ } -+ } -hunk ./actions/showfavorites.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/showfavorites.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/showfavorites.php 30 -- $nickname = common_canonical_nickname($this->arg('nickname')); -- $user = User::staticGet('nickname', $nickname); -+ $nickname = common_canonical_nickname($this->arg('nickname')); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/showfavorites.php 33 -- if (!$user) { -- $this->client_error(_('No such user.')); -- return; -- } -+ if (!$user) { -+ $this->client_error(_('No such user.')); -+ return; -+ } -hunk ./actions/showfavorites.php 38 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/showfavorites.php 40 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/showfavorites.php 45 -- # Looks like we're good; show the header -+ # Looks like we're good; show the header -hunk ./actions/showfavorites.php 47 -- common_show_header(sprintf(_("%s favorite notices"), $profile->nickname), -- array($this, 'show_header'), $user, -- array($this, 'show_top')); -+ common_show_header(sprintf(_("%s favorite notices"), $profile->nickname), -+ array($this, 'show_header'), $user, -+ array($this, 'show_top')); -hunk ./actions/showfavorites.php 51 -- $this->show_notices($user); -+ $this->show_notices($user); -hunk ./actions/showfavorites.php 53 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/showfavorites.php 56 -- function show_header($user) { -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('favoritesrss', array('nickname' => -- $user->nickname)), -- 'type' => 'application/rss+xml', -- 'title' => sprintf(_('Feed for favorites of %s'), $user->nickname))); -- } -+ function show_header($user) { -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('favoritesrss', array('nickname' => -+ $user->nickname)), -+ 'type' => 'application/rss+xml', -+ 'title' => sprintf(_('Feed for favorites of %s'), $user->nickname))); -+ } -hunk ./actions/showfavorites.php 64 -- function show_top($user) { -- $cur = common_current_user(); -+ function show_top($user) { -+ $cur = common_current_user(); -hunk ./actions/showfavorites.php 67 -- if ($cur && $cur->id == $user->id) { -- common_notice_form('all'); -- } -+ if ($cur && $cur->id == $user->id) { -+ common_notice_form('all'); -+ } -hunk ./actions/showfavorites.php 71 -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('favoritesrss', array('nickname' => $user->nickname)), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'Favorites'))); -- $this->views_menu(); -- } -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('favoritesrss', array('nickname' => $user->nickname)), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'Favorites'))); -+ $this->views_menu(); -+ } -hunk ./actions/showfavorites.php 78 -- function show_notices($user) { -+ function show_notices($user) { -hunk ./actions/showfavorites.php 80 -- $page = $this->trimmed('page'); -- if (!$page) { -- $page = 1; -- } -+ $page = $this->trimmed('page'); -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/showfavorites.php 85 -- $notice = $user->favoriteNotices(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -+ $notice = $user->favoriteNotices(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -hunk ./actions/showfavorites.php 87 -- if (!$notice) { -- $this->server_error(_('Could not retrieve favorite notices.')); -- return; -- } -+ if (!$notice) { -+ $this->server_error(_('Could not retrieve favorite notices.')); -+ return; -+ } -hunk ./actions/showfavorites.php 94 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'showfavorites', array('nickname' => $user->nickname)); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'showfavorites', array('nickname' => $user->nickname)); -+ } -hunk ./actions/showmessage.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/showmessage.php 28 -- Action::handle($args); -+ Action::handle($args); -hunk ./actions/showmessage.php 30 -- $message = $this->get_message(); -+ $message = $this->get_message(); -hunk ./actions/showmessage.php 32 -- if (!$message) { -- $this->client_error(_('No such message.'), 404); -- return; -- } -- -- $cur = common_current_user(); -- -- if ($cur && ($cur->id == $message->from_profile || $cur->id == $message->to_profile)) { -- $this->show_page($cur, 1); -- } else { -- $this->client_error(_('Only the sender and recipient may read this message.'), 403); -- return; -- } -- } -- -- function get_message() { -- $id = $this->trimmed('message'); -- $message = Message::staticGet('id', $id); -- return $message; -- } -- -- function get_title($user, $page) { -- $message = $this->get_message(); -- if (!$message) { -- return NULL; -- } -- -- if ($user->id == $message->from_profile) { -- $to = $message->getTo(); -- $title = sprintf(_("Message to %1\$s on %2\$s"), -- $to->nickname, -- common_exact_date($message->created)); -- } else if ($user->id == $message->to_profile) { -- $from = $message->getFrom(); -- $title = sprintf(_("Message from %1\$s on %2\$s"), -- $from->nickname, -- common_exact_date($message->created)); -- } -- return $title; -- } -+ if (!$message) { -+ $this->client_error(_('No such message.'), 404); -+ return; -+ } -+ -+ $cur = common_current_user(); -+ -+ if ($cur && ($cur->id == $message->from_profile || $cur->id == $message->to_profile)) { -+ $this->show_page($cur, 1); -+ } else { -+ $this->client_error(_('Only the sender and recipient may read this message.'), 403); -+ return; -+ } -+ } -+ -+ function get_message() { -+ $id = $this->trimmed('message'); -+ $message = Message::staticGet('id', $id); -+ return $message; -+ } -+ -+ function get_title($user, $page) { -+ $message = $this->get_message(); -+ if (!$message) { -+ return NULL; -+ } -+ -+ if ($user->id == $message->from_profile) { -+ $to = $message->getTo(); -+ $title = sprintf(_("Message to %1\$s on %2\$s"), -+ $to->nickname, -+ common_exact_date($message->created)); -+ } else if ($user->id == $message->to_profile) { -+ $from = $message->getFrom(); -+ $title = sprintf(_("Message from %1\$s on %2\$s"), -+ $from->nickname, -+ common_exact_date($message->created)); -+ } -+ return $title; -+ } -hunk ./actions/showmessage.php 73 -- function get_messages($user, $page) { -- $message = new Message(); -- $message->id = $this->trimmed('message'); -- $message->find(); -- return $message; -- } -- -- function get_message_profile($message) { -- $user = common_current_user(); -- if ($user->id == $message->from_profile) { -- return $message->getTo(); -- } else if ($user->id == $message->to_profile) { -- return $message->getFrom(); -- } else { -- # This shouldn't happen -- return NULL; -- } -- } -- -- function get_instructions() { -- return ''; -- } -- -- function views_menu() { -- return; -- } -+ function get_messages($user, $page) { -+ $message = new Message(); -+ $message->id = $this->trimmed('message'); -+ $message->find(); -+ return $message; -+ } -+ -+ function get_message_profile($message) { -+ $user = common_current_user(); -+ if ($user->id == $message->from_profile) { -+ return $message->getTo(); -+ } else if ($user->id == $message->to_profile) { -+ return $message->getFrom(); -+ } else { -+ # This shouldn't happen -+ return NULL; -+ } -+ } -+ -+ function get_instructions() { -+ return ''; -+ } -+ -+ function views_menu() { -+ return; -+ } -hunk ./actions/showmessage.php 100 -- -+ +- var $user = NULL; ++ var $user = null; +hunk ./actions/repliesrss.php 74 +- return NULL; ++ return null; +hunk ./actions/repliesrss.php 77 +- return ($avatar) ? $avatar->url : NULL; ++ return ($avatar) ? $avatar->url : null; +hunk ./actions/showmessage.php 56 +- return NULL; ++ return null; +hunk ./actions/showmessage.php 88 +- return NULL; ++ return null; hunk ./actions/shownotice.php 26 -- var $notice = NULL; -- var $profile = NULL; -- var $avatar = NULL; -+ var $notice = NULL; -+ var $profile = NULL; -+ var $avatar = NULL; -hunk ./actions/shownotice.php 30 -- function prepare($args) { -+ function prepare($args) { -hunk ./actions/shownotice.php 32 -- parent::prepare($args); -+ parent::prepare($args); -hunk ./actions/shownotice.php 34 -- $id = $this->arg('notice'); -- $this->notice = Notice::staticGet($id); -+ $id = $this->arg('notice'); -+ $this->notice = Notice::staticGet($id); -hunk ./actions/shownotice.php 37 -- if (!$this->notice) { -- $this->client_error(_('No such notice.'), 404); -- return false; -- } -+ if (!$this->notice) { -+ $this->client_error(_('No such notice.'), 404); -+ return false; -+ } -hunk ./actions/shownotice.php 42 -- $this->profile = $this->notice->getProfile(); -+ $this->profile = $this->notice->getProfile(); -hunk ./actions/shownotice.php 44 -- if (!$this->profile) { -- $this->server_error(_('Notice has no profile'), 500); -- return false; -- } -+ if (!$this->profile) { -+ $this->server_error(_('Notice has no profile'), 500); -+ return false; -+ } -hunk ./actions/shownotice.php 49 -- $this->avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); -+ $this->avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); -hunk ./actions/shownotice.php 51 -- return true; -- } -+ return true; -+ } -hunk ./actions/shownotice.php 54 -- function last_modified() { -- return max(strtotime($this->notice->created), -- strtotime($this->profile->modified), -- ($this->avatar) ? strtotime($this->avatar->modified) : 0); -- } -+ function last_modified() { -+ return max(strtotime($this->notice->created), -+ strtotime($this->profile->modified), -+ ($this->avatar) ? strtotime($this->avatar->modified) : 0); -+ } -hunk ./actions/shownotice.php 60 -- function etag() { -- return 'W/"' . implode(':', array($this->arg('action'), -- common_language(), -- $this->notice->id, -- strtotime($this->notice->created), -- strtotime($this->profile->modified), -- ($this->avatar) ? strtotime($this->avatar->modified) : 0)) . '"'; -- } -+ function etag() { -+ return 'W/"' . implode(':', array($this->arg('action'), -+ common_language(), -+ $this->notice->id, -+ strtotime($this->notice->created), -+ strtotime($this->profile->modified), -+ ($this->avatar) ? strtotime($this->avatar->modified) : 0)) . '"'; -+ } -hunk ./actions/shownotice.php 69 -- function handle($args) { -+ function handle($args) { -hunk ./actions/shownotice.php 71 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/shownotice.php 73 -- common_show_header(sprintf(_('%1$s\'s status on %2$s'), -- $this->profile->nickname, -- common_exact_date($this->notice->created)), -- array($this, 'show_header'), NULL, -- array($this, 'show_top')); -+ common_show_header(sprintf(_('%1$s\'s status on %2$s'), -+ $this->profile->nickname, -+ common_exact_date($this->notice->created)), -+ array($this, 'show_header'), NULL, -+ array($this, 'show_top')); -hunk ./actions/shownotice.php 79 -- common_element_start('ul', array('id' => 'notices')); -+ common_element_start('ul', array('id' => 'notices')); -hunk ./actions/shownotice.php 82 -- common_element_end('ul'); -+ common_element_end('ul'); -hunk ./actions/shownotice.php 84 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/shownotice.php 87 -- function show_header() { -+ function show_header() { -hunk ./actions/shownotice.php 89 -- $user = User::staticGet($this->profile->id); -+ $user = User::staticGet($this->profile->id); -hunk ./actions/shownotice.php 91 -- if (!$user) { -- return; -- } -+ if (!$user) { -+ return; -+ } -hunk ./actions/shownotice.php 95 -- if ($user->emailmicroid && $user->email && $this->notice->uri) { -- common_element('meta', array('name' => 'microid', -- 'content' => "mailto+http:sha1:" . sha1(sha1('mailto:' . $user->email) . sha1($this->notice->uri)))); -- } -+ if ($user->emailmicroid && $user->email && $this->notice->uri) { -+ common_element('meta', array('name' => 'microid', -+ 'content' => "mailto+http:sha1:" . sha1(sha1('mailto:' . $user->email) . sha1($this->notice->uri)))); -+ } -hunk ./actions/shownotice.php 100 -- if ($user->jabbermicroid && $user->jabber && $this->notice->uri) { -- common_element('meta', array('name' => 'microid', -- 'content' => "xmpp+http:sha1:" . sha1(sha1('xmpp:' . $user->jabber) . sha1($this->notice->uri)))); -- } -- } -+ if ($user->jabbermicroid && $user->jabber && $this->notice->uri) { -+ common_element('meta', array('name' => 'microid', -+ 'content' => "xmpp+http:sha1:" . sha1(sha1('xmpp:' . $user->jabber) . sha1($this->notice->uri)))); -+ } -+ } -hunk ./actions/shownotice.php 106 -- function show_top() { -- $cur = common_current_user(); -- if ($cur && $cur->id == $this->profile->id) { -- common_notice_form(); -- } -- } -+ function show_top() { -+ $cur = common_current_user(); -+ if ($cur && $cur->id == $this->profile->id) { -+ common_notice_form(); -+ } -+ } -hunk ./actions/shownotice.php 113 -- function no_such_notice() { -- common_user_error(_('No such notice.')); -- } -+ function no_such_notice() { -+ common_user_error(_('No such notice.')); -+ } -hunk ./actions/showstream.php 29 -- function handle($args) { -+ function handle($args) { -hunk ./actions/showstream.php 31 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/showstream.php 34 -- $nickname = common_canonical_nickname($nickname_arg); -+ $nickname = common_canonical_nickname($nickname_arg); -hunk ./actions/showstream.php 47 -- $user = User::staticGet('nickname', $nickname); -+ $user = User::staticGet('nickname', $nickname); -hunk ./actions/showstream.php 49 -- if (!$user) { -- $this->no_such_user(); -- return; -- } -+ if (!$user) { -+ $this->no_such_user(); -+ return; -+ } -hunk ./actions/showstream.php 54 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/showstream.php 56 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/showstream.php 61 -- # Looks like we're good; start output -+ # Looks like we're good; start output -hunk ./actions/showstream.php 63 -- # For YADIS discovery, we also have a tag -+ # For YADIS discovery, we also have a tag -hunk ./actions/showstream.php 65 -- header('X-XRDS-Location: '. common_local_url('xrds', array('nickname' => -- $user->nickname))); -+ header('X-XRDS-Location: '. common_local_url('xrds', array('nickname' => -+ $user->nickname))); -hunk ./actions/showstream.php 68 -- common_show_header($profile->nickname, -- array($this, 'show_header'), $user, -- array($this, 'show_top')); -+ common_show_header($profile->nickname, -+ array($this, 'show_header'), $user, -+ array($this, 'show_top')); -hunk ./actions/showstream.php 72 -- $this->show_profile($profile); -+ $this->show_profile($profile); -hunk ./actions/showstream.php 74 -- $this->show_notices($user); -+ $this->show_notices($user); -hunk ./actions/showstream.php 76 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/showstream.php 79 -- function show_top($user) { -- $cur = common_current_user(); -+ function show_top($user) { -+ $cur = common_current_user(); -hunk ./actions/showstream.php 82 -- if ($cur && $cur->id == $user->id) { -- common_notice_form('showstream'); -- } -+ if ($cur && $cur->id == $user->id) { -+ common_notice_form('showstream'); -+ } -hunk ./actions/showstream.php 86 -- $this->views_menu(); -+ $this->views_menu(); -hunk ./actions/showstream.php 88 -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('nickname' => $user->nickname)), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'notices'), -- 1=>array('href'=>common_local_url('usertimeline', array('nickname' => $user->nickname)), -- 'type' => 'atom', -- 'version' => 'Atom 1.0', -- 'item' => 'usertimeline'), -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('nickname' => $user->nickname)), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'notices'), -+ 1=>array('href'=>common_local_url('usertimeline', array('nickname' => $user->nickname)), -+ 'type' => 'atom', -+ 'version' => 'Atom 1.0', -+ 'item' => 'usertimeline'), -hunk ./actions/showstream.php 97 -- 2=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), -- 'type' => 'rdf', -- 'version' => 'FOAF', -- 'item' => 'foaf'))); -- } -+ 2=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), -+ 'type' => 'rdf', -+ 'version' => 'FOAF', -+ 'item' => 'foaf'))); -+ } -hunk ./actions/showstream.php 103 -- function show_header($user) { -- # Feeds -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('api', -- array('apiaction' => 'statuses', -- 'method' => 'user_timeline.rss', -- 'argument' => $user->nickname)), -- 'type' => 'application/rss+xml', -- 'title' => sprintf(_('Notice feed for %s'), $user->nickname))); -- common_element('link', array('rel' => 'alternate feed', -- 'href' => common_local_url('api', -- array('apiaction' => 'statuses', -- 'method' => 'user_timeline.atom', -- 'argument' => $user->nickname)), -- 'type' => 'application/atom+xml', -- 'title' => sprintf(_('Notice feed for %s'), $user->nickname))); -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('userrss', array('nickname' => -- $user->nickname)), -- 'type' => 'application/rdf+xml', -- 'title' => sprintf(_('Notice feed for %s'), $user->nickname))); -- # FOAF -- common_element('link', array('rel' => 'meta', -- 'href' => common_local_url('foaf', array('nickname' => -- $user->nickname)), -- 'type' => 'application/rdf+xml', -- 'title' => 'FOAF')); -- # for remote subscriptions etc. -- common_element('meta', array('http-equiv' => 'X-XRDS-Location', -- 'content' => common_local_url('xrds', array('nickname' => -- $user->nickname)))); -- $profile = $user->getProfile(); -- if ($profile->bio) { -- common_element('meta', array('name' => 'description', -- 'content' => $profile->bio)); -- } -+ function show_header($user) { -+ # Feeds -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('api', -+ array('apiaction' => 'statuses', -+ 'method' => 'user_timeline.rss', -+ 'argument' => $user->nickname)), -+ 'type' => 'application/rss+xml', -+ 'title' => sprintf(_('Notice feed for %s'), $user->nickname))); -+ common_element('link', array('rel' => 'alternate feed', -+ 'href' => common_local_url('api', -+ array('apiaction' => 'statuses', -+ 'method' => 'user_timeline.atom', -+ 'argument' => $user->nickname)), -+ 'type' => 'application/atom+xml', -+ 'title' => sprintf(_('Notice feed for %s'), $user->nickname))); -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('userrss', array('nickname' => -+ $user->nickname)), -+ 'type' => 'application/rdf+xml', -+ 'title' => sprintf(_('Notice feed for %s'), $user->nickname))); -+ # FOAF -+ common_element('link', array('rel' => 'meta', -+ 'href' => common_local_url('foaf', array('nickname' => -+ $user->nickname)), -+ 'type' => 'application/rdf+xml', -+ 'title' => 'FOAF')); -+ # for remote subscriptions etc. -+ common_element('meta', array('http-equiv' => 'X-XRDS-Location', -+ 'content' => common_local_url('xrds', array('nickname' => -+ $user->nickname)))); -+ $profile = $user->getProfile(); -+ if ($profile->bio) { -+ common_element('meta', array('name' => 'description', -+ 'content' => $profile->bio)); -+ } -hunk ./actions/showstream.php 140 -- if ($user->emailmicroid && $user->email && $profile->profileurl) { -- common_element('meta', array('name' => 'microid', -- 'content' => "mailto+http:sha1:" . sha1(sha1('mailto:' . $user->email) . sha1($profile->profileurl)))); -- } -- if ($user->jabbermicroid && $user->jabber && $profile->profileurl) { -- common_element('meta', array('name' => 'microid', -- 'content' => "xmpp+http:sha1:" . sha1(sha1('xmpp:' . $user->jabber) . sha1($profile->profileurl)))); -- } -+ if ($user->emailmicroid && $user->email && $profile->profileurl) { -+ common_element('meta', array('name' => 'microid', -+ 'content' => "mailto+http:sha1:" . sha1(sha1('mailto:' . $user->email) . sha1($profile->profileurl)))); -+ } -+ if ($user->jabbermicroid && $user->jabber && $profile->profileurl) { -+ common_element('meta', array('name' => 'microid', -+ 'content' => "xmpp+http:sha1:" . sha1(sha1('xmpp:' . $user->jabber) . sha1($profile->profileurl)))); -+ } -hunk ./actions/showstream.php 149 -- # See https://wiki.mozilla.org/Microsummaries -+ # See https://wiki.mozilla.org/Microsummaries -hunk ./actions/showstream.php 151 -- common_element('link', array('rel' => 'microsummary', -- 'href' => common_local_url('microsummary', -- array('nickname' => $profile->nickname)))); -- } -+ common_element('link', array('rel' => 'microsummary', -+ 'href' => common_local_url('microsummary', -+ array('nickname' => $profile->nickname)))); -+ } -hunk ./actions/showstream.php 156 -- function no_such_user() { -- $this->client_error(_('No such user.'), 404); -- } -+ function no_such_user() { -+ $this->client_error(_('No such user.'), 404); -+ } -hunk ./actions/showstream.php 160 -- function show_profile($profile) { -+ function show_profile($profile) { -hunk ./actions/showstream.php 162 -- common_element_start('div', array('id' => 'profile', 'class' => 'vcard')); -+ common_element_start('div', array('id' => 'profile', 'class' => 'vcard')); -hunk ./actions/showstream.php 164 -- $this->show_personal($profile); -+ $this->show_personal($profile); -hunk ./actions/showstream.php 166 -- $this->show_last_notice($profile); -+ $this->show_last_notice($profile); -hunk ./actions/showstream.php 168 -- $cur = common_current_user(); -+ $cur = common_current_user(); -hunk ./actions/showstream.php 170 -- $this->show_subscriptions($profile); -+ $this->show_subscriptions($profile); -hunk ./actions/showstream.php 172 -- common_element_end('div'); -- } -+ common_element_end('div'); -+ } -hunk ./actions/showstream.php 175 -- function show_personal($profile) { -+ function show_personal($profile) { -hunk ./actions/showstream.php 177 -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -- common_element_start('div', array('id' => 'profile_avatar')); -- common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), -- 'class' => 'avatar profile photo', -- 'width' => AVATAR_PROFILE_SIZE, -- 'height' => AVATAR_PROFILE_SIZE, -- 'alt' => $profile->nickname)); -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ common_element_start('div', array('id' => 'profile_avatar')); -+ common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), -+ 'class' => 'avatar profile photo', -+ 'width' => AVATAR_PROFILE_SIZE, -+ 'height' => AVATAR_PROFILE_SIZE, -+ 'alt' => $profile->nickname)); -hunk ./actions/showstream.php 188 -- $cur = common_current_user(); -- if ($cur) { -- if ($cur->id != $profile->id) { -- if ($cur->isSubscribed($profile)) { -- common_unsubscribe_form($profile); -- } else { -- common_subscribe_form($profile); -- } -- } -- } else { -- $this->show_remote_subscribe_link($profile); -- } -+ $cur = common_current_user(); -+ if ($cur) { -+ if ($cur->id != $profile->id) { -+ if ($cur->isSubscribed($profile)) { -+ common_unsubscribe_form($profile); -+ } else { -+ common_subscribe_form($profile); -+ } -+ } -+ } else { -+ $this->show_remote_subscribe_link($profile); -+ } -hunk ./actions/showstream.php 202 -- $user = User::staticGet('id', $profile->id); -- common_profile_new_message_nudge($cur, $user, $profile); -+ $user = User::staticGet('id', $profile->id); -+ common_profile_new_message_nudge($cur, $user, $profile); -hunk ./actions/showstream.php 218 -- common_element_end('ul'); -+ common_element_end('ul'); -hunk ./actions/showstream.php 220 -- common_element_end('div'); -+ common_element_end('div'); -hunk ./actions/showstream.php 222 -- common_element_start('div', array('id' => 'profile_information')); -+ common_element_start('div', array('id' => 'profile_information')); -hunk ./actions/showstream.php 224 -- if ($profile->fullname) { -- common_element('h1', array('class' => 'fn'), $profile->fullname . ' (' . $profile->nickname . ')'); -- } else { -- common_element('h1', array('class' => 'fn nickname'), $profile->nickname); -- } -+ if ($profile->fullname) { -+ common_element('h1', array('class' => 'fn'), $profile->fullname . ' (' . $profile->nickname . ')'); -+ } else { -+ common_element('h1', array('class' => 'fn nickname'), $profile->nickname); -+ } -hunk ./actions/showstream.php 230 -- if ($profile->location) { -- common_element('p', 'location', $profile->location); -- } -- if ($profile->bio) { -- common_element('p', 'description note', $profile->bio); -- } -- if ($profile->homepage) { -- common_element_start('p', 'website'); -- common_element('a', array('href' => $profile->homepage, -- 'rel' => 'me', 'class' => 'url'), -- $profile->homepage); -- common_element_end('p'); -- } -+ if ($profile->location) { -+ common_element('p', 'location', $profile->location); -+ } -+ if ($profile->bio) { -+ common_element('p', 'description note', $profile->bio); -+ } -+ if ($profile->homepage) { -+ common_element_start('p', 'website'); -+ common_element('a', array('href' => $profile->homepage, -+ 'rel' => 'me', 'class' => 'url'), -+ $profile->homepage); -+ common_element_end('p'); -+ } -hunk ./actions/showstream.php 244 -- $this->show_statistics($profile); -+ $this->show_statistics($profile); -hunk ./actions/showstream.php 246 -- common_element_end('div'); -- } -+ common_element_end('div'); -+ } -hunk ./actions/showstream.php 249 -- function show_remote_subscribe_link($profile) { -- $url = common_local_url('remotesubscribe', -- array('nickname' => $profile->nickname)); -- common_element('a', array('href' => $url, -- 'id' => 'remotesubscribe'), -- _('Subscribe')); -- } -+ function show_remote_subscribe_link($profile) { -+ $url = common_local_url('remotesubscribe', -+ array('nickname' => $profile->nickname)); -+ common_element('a', array('href' => $url, -+ 'id' => 'remotesubscribe'), -+ _('Subscribe')); -+ } -hunk ./actions/showstream.php 257 -- function show_unsubscribe_form($profile) { -- common_element_start('form', array('id' => 'unsubscribe', 'method' => 'post', -- 'action' => common_local_url('unsubscribe'))); -- common_hidden('token', common_session_token()); -- common_element('input', array('id' => 'unsubscribeto', -- 'name' => 'unsubscribeto', -- 'type' => 'hidden', -- 'value' => $profile->nickname)); -- common_element('input', array('type' => 'submit', -- 'class' => 'submit', -- 'value' => _('Unsubscribe'))); -- common_element_end('form'); -- } -+ function show_unsubscribe_form($profile) { -+ common_element_start('form', array('id' => 'unsubscribe', 'method' => 'post', -+ 'action' => common_local_url('unsubscribe'))); -+ common_hidden('token', common_session_token()); -+ common_element('input', array('id' => 'unsubscribeto', -+ 'name' => 'unsubscribeto', -+ 'type' => 'hidden', -+ 'value' => $profile->nickname)); -+ common_element('input', array('type' => 'submit', -+ 'class' => 'submit', -+ 'value' => _('Unsubscribe'))); -+ common_element_end('form'); -+ } -hunk ./actions/showstream.php 271 -- function show_subscriptions($profile) { -- global $config; -+ function show_subscriptions($profile) { -+ global $config; -hunk ./actions/showstream.php 274 -- $subs = DB_DataObject::factory('subscription'); -- $subs->subscriber = $profile->id; -- $subs->whereAdd('subscribed != ' . $profile->id); -+ $subs = DB_DataObject::factory('subscription'); -+ $subs->subscriber = $profile->id; -+ $subs->whereAdd('subscribed != ' . $profile->id); -hunk ./actions/showstream.php 278 -- $subs->orderBy('created DESC'); -+ $subs->orderBy('created DESC'); -hunk ./actions/showstream.php 280 -- # We ask for an extra one to know if we need to do another page -+ # We ask for an extra one to know if we need to do another page -hunk ./actions/showstream.php 282 -- $subs->limit(0, SUBSCRIPTIONS + 1); -+ $subs->limit(0, SUBSCRIPTIONS + 1); -hunk ./actions/showstream.php 284 -- $subs_count = $subs->find(); -+ $subs_count = $subs->find(); -hunk ./actions/showstream.php 286 -- common_element_start('div', array('id' => 'subscriptions')); -+ common_element_start('div', array('id' => 'subscriptions')); +- var $notice = NULL; +- var $profile = NULL; +- var $avatar = NULL; ++ var $notice = null; ++ var $profile = null; ++ var $avatar = null; +hunk ./actions/shownotice.php 76 +- array($this, 'show_header'), NULL, ++ array($this, 'show_header'), null, hunk ./actions/showstream.php 288 -- common_element('h2', NULL, _('Subscriptions')); -+ common_element('h2', NULL, _('Subscriptions')); -hunk ./actions/showstream.php 290 -- if ($subs_count > 0) { -+ if ($subs_count > 0) { -hunk ./actions/showstream.php 292 -- common_element_start('ul', array('id' => 'subscriptions_avatars')); -+ common_element_start('ul', array('id' => 'subscriptions_avatars')); -hunk ./actions/showstream.php 294 -- for ($i = 0; $i < min($subs_count, SUBSCRIPTIONS); $i++) { -+ for ($i = 0; $i < min($subs_count, SUBSCRIPTIONS); $i++) { -hunk ./actions/showstream.php 296 -- if (!$subs->fetch()) { -- common_debug('Weirdly, broke out of subscriptions loop early', __FILE__); -- break; -- } -+ if (!$subs->fetch()) { -+ common_debug('Weirdly, broke out of subscriptions loop early', __FILE__); -+ break; -+ } -hunk ./actions/showstream.php 301 -- $other = Profile::staticGet($subs->subscribed); -+ $other = Profile::staticGet($subs->subscribed); -hunk ./actions/showstream.php 303 -- if (!$other) { -- common_log_db_error($subs, 'SELECT', __FILE__); -- continue; -- } -+ if (!$other) { -+ common_log_db_error($subs, 'SELECT', __FILE__); -+ continue; -+ } -hunk ./actions/showstream.php 308 -- common_element_start('li', 'vcard'); -- common_element_start('a', array('title' => ($other->fullname) ? -- $other->fullname : -- $other->nickname, -- 'href' => $other->profileurl, -- 'rel' => 'contact', -- 'class' => 'subscription fn url')); -- $avatar = $other->getAvatar(AVATAR_MINI_SIZE); -- common_element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), -- 'width' => AVATAR_MINI_SIZE, -- 'height' => AVATAR_MINI_SIZE, -- 'class' => 'avatar mini photo', -- 'alt' => ($other->fullname) ? -- $other->fullname : -- $other->nickname)); -- common_element_end('a'); -- common_element_end('li'); -- } -+ common_element_start('li', 'vcard'); -+ common_element_start('a', array('title' => ($other->fullname) ? -+ $other->fullname : -+ $other->nickname, -+ 'href' => $other->profileurl, -+ 'rel' => 'contact', -+ 'class' => 'subscription fn url')); -+ $avatar = $other->getAvatar(AVATAR_MINI_SIZE); -+ common_element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), -+ 'width' => AVATAR_MINI_SIZE, -+ 'height' => AVATAR_MINI_SIZE, -+ 'class' => 'avatar mini photo', -+ 'alt' => ($other->fullname) ? -+ $other->fullname : -+ $other->nickname)); -+ common_element_end('a'); -+ common_element_end('li'); -+ } -hunk ./actions/showstream.php 327 -- common_element_end('ul'); -- } -+ common_element_end('ul'); -+ } -hunk ./actions/showstream.php 330 -- if ($subs_count > SUBSCRIPTIONS) { -- common_element_start('p', array('id' => 'subscriptions_viewall')); -+ if ($subs_count > SUBSCRIPTIONS) { -+ common_element_start('p', array('id' => 'subscriptions_viewall')); -hunk ./actions/showstream.php 333 -- common_element('a', array('href' => common_local_url('subscriptions', -- array('nickname' => $profile->nickname)), -- 'class' => 'moresubscriptions'), -- _('All subscriptions')); -- common_element_end('p'); -- } -+ common_element('a', array('href' => common_local_url('subscriptions', -+ array('nickname' => $profile->nickname)), -+ 'class' => 'moresubscriptions'), -+ _('All subscriptions')); -+ common_element_end('p'); -+ } -hunk ./actions/showstream.php 340 -- common_element_end('div'); -- } -+ common_element_end('div'); -+ } -hunk ./actions/showstream.php 343 -- function show_statistics($profile) { -+ function show_statistics($profile) { -hunk ./actions/showstream.php 345 -- // XXX: WORM cache this -- $subs = DB_DataObject::factory('subscription'); -- $subs->subscriber = $profile->id; -- $subs_count = (int) $subs->count() - 1; -+ // XXX: WORM cache this -+ $subs = DB_DataObject::factory('subscription'); -+ $subs->subscriber = $profile->id; -+ $subs_count = (int) $subs->count() - 1; -hunk ./actions/showstream.php 350 -- $subbed = DB_DataObject::factory('subscription'); -- $subbed->subscribed = $profile->id; -- $subbed_count = (int) $subbed->count() - 1; -+ $subbed = DB_DataObject::factory('subscription'); -+ $subbed->subscribed = $profile->id; -+ $subbed_count = (int) $subbed->count() - 1; -hunk ./actions/showstream.php 354 -- $notices = DB_DataObject::factory('notice'); -- $notices->profile_id = $profile->id; -- $notice_count = (int) $notices->count(); -+ $notices = DB_DataObject::factory('notice'); -+ $notices->profile_id = $profile->id; -+ $notice_count = (int) $notices->count(); -hunk ./actions/showstream.php 358 -- common_element_start('div', 'statistics'); -- common_element('h2', 'statistics', _('Statistics')); -+ common_element_start('div', 'statistics'); -+ common_element('h2', 'statistics', _('Statistics')); -hunk ./actions/showstream.php 361 -- # Other stats...? -- common_element_start('dl', 'statistics'); -- common_element('dt', 'membersince', _('Member since')); -- common_element('dd', 'membersince', date('j M Y', -- strtotime($profile->created))); -+ # Other stats...? -+ common_element_start('dl', 'statistics'); -+ common_element('dt', 'membersince', _('Member since')); -+ common_element('dd', 'membersince', date('j M Y', -+ strtotime($profile->created))); -hunk ./actions/showstream.php 367 -- common_element_start('dt', 'subscriptions'); -- common_element('a', array('href' => common_local_url('subscriptions', -- array('nickname' => $profile->nickname))), -- _('Subscriptions')); -- common_element_end('dt'); -- common_element('dd', 'subscriptions', (is_int($subs_count)) ? $subs_count : '0'); -- common_element_start('dt', 'subscribers'); -- common_element('a', array('href' => common_local_url('subscribers', -- array('nickname' => $profile->nickname))), -- _('Subscribers')); -- common_element_end('dt'); -- common_element('dd', 'subscribers', (is_int($subbed_count)) ? $subbed_count : '0'); -- common_element('dt', 'notices', _('Notices')); -- common_element('dd', 'notices', (is_int($notice_count)) ? $notice_count : '0'); -- # XXX: link these to something -- common_element('dt', 'tags', _('Tags')); -- common_element_start('dd', 'tags'); -- $tags = Profile_tag::getTags($profile->id, $profile->id); -+ common_element_start('dt', 'subscriptions'); -+ common_element('a', array('href' => common_local_url('subscriptions', -+ array('nickname' => $profile->nickname))), -+ _('Subscriptions')); -+ common_element_end('dt'); -+ common_element('dd', 'subscriptions', (is_int($subs_count)) ? $subs_count : '0'); -+ common_element_start('dt', 'subscribers'); -+ common_element('a', array('href' => common_local_url('subscribers', -+ array('nickname' => $profile->nickname))), -+ _('Subscribers')); -+ common_element_end('dt'); -+ common_element('dd', 'subscribers', (is_int($subbed_count)) ? $subbed_count : '0'); -+ common_element('dt', 'notices', _('Notices')); -+ common_element('dd', 'notices', (is_int($notice_count)) ? $notice_count : '0'); -+ # XXX: link these to something -+ common_element('dt', 'tags', _('Tags')); -+ common_element_start('dd', 'tags'); -+ $tags = Profile_tag::getTags($profile->id, $profile->id); -hunk ./actions/showstream.php 386 -- common_element_start('ul', 'tags xoxo'); -- foreach ($tags as $tag) { -- common_element_start('li'); -- common_element('a', array('rel' => 'bookmark tag', -- 'href' => common_local_url('peopletag', -- array('tag' => $tag))), -- $tag); -- common_element_end('li'); -- } -- common_element_end('ul'); -- common_element_end('dd'); -+ common_element_start('ul', 'tags xoxo'); -+ foreach ($tags as $tag) { -+ common_element_start('li'); -+ common_element('a', array('rel' => 'bookmark tag', -+ 'href' => common_local_url('peopletag', -+ array('tag' => $tag))), -+ $tag); -+ common_element_end('li'); -+ } -+ common_element_end('ul'); -+ common_element_end('dd'); -hunk ./actions/showstream.php 398 -- common_element_end('dl'); -+ common_element_end('dl'); -hunk ./actions/showstream.php 400 -- common_element_end('div'); -- } -+ common_element_end('div'); -+ } -hunk ./actions/showstream.php 403 -- function show_notices($user) { -+ function show_notices($user) { -hunk ./actions/showstream.php 405 -- $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -hunk ./actions/showstream.php 407 -- $notice = $user->getNotices(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -+ $notice = $user->getNotices(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -hunk ./actions/showstream.php 412 -- common_pagination($page>1, $cnt>NOTICES_PER_PAGE, $page, -- 'showstream', array('nickname' => $user->nickname)); -- } -+ common_pagination($page>1, $cnt>NOTICES_PER_PAGE, $page, -+ 'showstream', array('nickname' => $user->nickname)); -+ } -hunk ./actions/showstream.php 416 -- function show_last_notice($profile) { -+ function show_last_notice($profile) { +- common_element('h2', NULL, _('Subscriptions')); ++ common_element('h2', null, _('Subscriptions')); hunk ./actions/showstream.php 418 -- common_element('h2', NULL, _('Currently')); -+ common_element('h2', NULL, _('Currently')); -hunk ./actions/showstream.php 420 -- $notice = $profile->getCurrentNotice(); -+ $notice = $profile->getCurrentNotice(); -hunk ./actions/showstream.php 422 -- if ($notice) { -- # FIXME: URL, image, video, audio -- common_element_start('p', array('class' => 'notice_current')); -- if ($notice->rendered) { -- common_raw($notice->rendered); -- } else { -- # XXX: may be some uncooked notices in the DB, -- # we cook them right now. This can probably disappear in future -- # versions (>> 0.4.x) -- common_raw(common_render_content($notice->content, $notice)); -- } -- common_element_end('p'); -- } -- } -+ if ($notice) { -+ # FIXME: URL, image, video, audio -+ common_element_start('p', array('class' => 'notice_current')); -+ if ($notice->rendered) { -+ common_raw($notice->rendered); -+ } else { -+ # XXX: may be some uncooked notices in the DB, -+ # we cook them right now. This can probably disappear in future -+ # versions (>> 0.4.x) -+ common_raw(common_render_content($notice->content, $notice)); -+ } -+ common_element_end('p'); -+ } -+ } -hunk ./actions/smssettings.php 27 -- function get_instructions() { -- return _('You can receive SMS messages through email from %%site.name%%.'); -- } -+ function get_instructions() { -+ return _('You can receive SMS messages through email from %%site.name%%.'); -+ } +- common_element('h2', NULL, _('Currently')); ++ common_element('h2', null, _('Currently')); hunk ./actions/smssettings.php 31 -- function show_form($msg=NULL, $success=false) { -- $user = common_current_user(); -- $this->form_header(_('SMS Settings'), $msg, $success); -- common_element_start('form', array('method' => 'post', -- 'id' => 'smssettings', -- 'action' => -- common_local_url('smssettings'))); -- common_hidden('token', common_session_token()); -- common_element('h2', NULL, _('Address')); -+ function show_form($msg=NULL, $success=false) { -+ $user = common_current_user(); -+ $this->form_header(_('SMS Settings'), $msg, $success); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'smssettings', -+ 'action' => -+ common_local_url('smssettings'))); -+ common_hidden('token', common_session_token()); -+ common_element('h2', NULL, _('Address')); -hunk ./actions/smssettings.php 41 -- if ($user->sms) { -- common_element_start('p'); -- $carrier = $user->getCarrier(); -- common_element('span', 'address confirmed', $user->sms . ' (' . $carrier->name . ')'); -- common_element('span', 'input_instructions', -- _('Current confirmed SMS-enabled phone number.')); -- common_hidden('sms', $user->sms); -- common_hidden('carrier', $user->carrier); -- common_element_end('p'); -- common_submit('remove', _('Remove')); -- } else { -- $confirm = $this->get_confirmation(); -- if ($confirm) { -- $carrier = Sms_carrier::staticGet($confirm->address_extra); -- common_element_start('p'); -- common_element('span', 'address unconfirmed', $confirm->address . ' (' . $carrier->name . ')'); -- common_element('span', 'input_instructions', -- _('Awaiting confirmation on this phone number.')); -- common_hidden('sms', $confirm->address); -- common_hidden('carrier', $confirm->address_extra); -- common_element_end('p'); -- common_submit('cancel', _('Cancel')); -- common_input('code', _('Confirmation code'), NULL, -- _('Enter the code you received on your phone.')); -- common_submit('confirm', _('Confirm')); -- } else { -- common_input('sms', _('SMS Phone number'), -- ($this->arg('sms')) ? $this->arg('sms') : NULL, -- _('Phone number, no punctuation or spaces, with area code')); -- $this->carrier_select(); -- common_submit('add', _('Add')); -- } -- } -+ if ($user->sms) { -+ common_element_start('p'); -+ $carrier = $user->getCarrier(); -+ common_element('span', 'address confirmed', $user->sms . ' (' . $carrier->name . ')'); -+ common_element('span', 'input_instructions', -+ _('Current confirmed SMS-enabled phone number.')); -+ common_hidden('sms', $user->sms); -+ common_hidden('carrier', $user->carrier); -+ common_element_end('p'); -+ common_submit('remove', _('Remove')); -+ } else { -+ $confirm = $this->get_confirmation(); -+ if ($confirm) { -+ $carrier = Sms_carrier::staticGet($confirm->address_extra); -+ common_element_start('p'); -+ common_element('span', 'address unconfirmed', $confirm->address . ' (' . $carrier->name . ')'); -+ common_element('span', 'input_instructions', -+ _('Awaiting confirmation on this phone number.')); -+ common_hidden('sms', $confirm->address); -+ common_hidden('carrier', $confirm->address_extra); -+ common_element_end('p'); -+ common_submit('cancel', _('Cancel')); -+ common_input('code', _('Confirmation code'), NULL, -+ _('Enter the code you received on your phone.')); -+ common_submit('confirm', _('Confirm')); -+ } else { -+ common_input('sms', _('SMS Phone number'), -+ ($this->arg('sms')) ? $this->arg('sms') : NULL, -+ _('Phone number, no punctuation or spaces, with area code')); -+ $this->carrier_select(); -+ common_submit('add', _('Add')); -+ } -+ } -hunk ./actions/smssettings.php 75 -- if ($user->sms) { -- common_element('h2', NULL, _('Incoming email')); -- -- if ($user->incomingemail) { -- common_element_start('p'); -- common_element('span', 'address', $user->incomingemail); -- common_element('span', 'input_instructions', -- _('Send email to this address to post new notices.')); -- common_element_end('p'); -- common_submit('removeincoming', _('Remove')); -- } -- -- common_element_start('p'); -- common_element('span', 'input_instructions', -- _('Make a new email address for posting to; cancels the old one.')); -- common_element_end('p'); -- common_submit('newincoming', _('New')); -- } -- -- common_element('h2', NULL, _('Preferences')); -- -- common_checkbox('smsnotify', -- _('Send me notices through SMS; I understand I may incur exorbitant charges from my carrier.'), -- $user->smsnotify); -- -- common_submit('save', _('Save')); -- -- common_element_end('form'); -- common_show_footer(); -- } -+ if ($user->sms) { -+ common_element('h2', NULL, _('Incoming email')); -+ -+ if ($user->incomingemail) { -+ common_element_start('p'); -+ common_element('span', 'address', $user->incomingemail); -+ common_element('span', 'input_instructions', -+ _('Send email to this address to post new notices.')); -+ common_element_end('p'); -+ common_submit('removeincoming', _('Remove')); -+ } -+ -+ common_element_start('p'); -+ common_element('span', 'input_instructions', -+ _('Make a new email address for posting to; cancels the old one.')); -+ common_element_end('p'); -+ common_submit('newincoming', _('New')); -+ } -+ -+ common_element('h2', NULL, _('Preferences')); -+ -+ common_checkbox('smsnotify', -+ _('Send me notices through SMS; I understand I may incur exorbitant charges from my carrier.'), -+ $user->smsnotify); -+ -+ common_submit('save', _('Save')); -+ -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/smssettings.php 106 -- function get_confirmation() { -- $user = common_current_user(); -- $confirm = new Confirm_address(); -- $confirm->user_id = $user->id; -- $confirm->address_type = 'sms'; -- if ($confirm->find(TRUE)) { -- return $confirm; -- } else { -- return NULL; -- } -- } -+ function get_confirmation() { -+ $user = common_current_user(); -+ $confirm = new Confirm_address(); -+ $confirm->user_id = $user->id; -+ $confirm->address_type = 'sms'; -+ if ($confirm->find(TRUE)) { -+ return $confirm; -+ } else { -+ return NULL; -+ } -+ } -hunk ./actions/smssettings.php 118 -- function handle_post() { -+ function handle_post() { -hunk ./actions/smssettings.php 120 -- # CSRF protection -+ # CSRF protection -hunk ./actions/smssettings.php 122 -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/smssettings.php 128 -- if ($this->arg('save')) { -- $this->save_preferences(); -- } else if ($this->arg('add')) { -- $this->add_address(); -- } else if ($this->arg('cancel')) { -- $this->cancel_confirmation(); -- } else if ($this->arg('remove')) { -- $this->remove_address(); -- } else if ($this->arg('removeincoming')) { -- $this->remove_incoming(); -- } else if ($this->arg('newincoming')) { -- $this->new_incoming(); -- } else if ($this->arg('confirm')) { -- $this->confirm_code(); -- } else { -- $this->show_form(_('Unexpected form submission.')); -- } -- } -+ if ($this->arg('save')) { -+ $this->save_preferences(); -+ } else if ($this->arg('add')) { -+ $this->add_address(); -+ } else if ($this->arg('cancel')) { -+ $this->cancel_confirmation(); -+ } else if ($this->arg('remove')) { -+ $this->remove_address(); -+ } else if ($this->arg('removeincoming')) { -+ $this->remove_incoming(); -+ } else if ($this->arg('newincoming')) { -+ $this->new_incoming(); -+ } else if ($this->arg('confirm')) { -+ $this->confirm_code(); -+ } else { -+ $this->show_form(_('Unexpected form submission.')); -+ } -+ } -hunk ./actions/smssettings.php 147 -- function save_preferences() { -+ function save_preferences() { -hunk ./actions/smssettings.php 149 -- $smsnotify = $this->boolean('smsnotify'); -- -- $user = common_current_user(); -+ $smsnotify = $this->boolean('smsnotify'); -+ -+ $user = common_current_user(); -hunk ./actions/smssettings.php 153 -- assert(!is_null($user)); # should already be checked -+ assert(!is_null($user)); # should already be checked -hunk ./actions/smssettings.php 155 -- $user->query('BEGIN'); -+ $user->query('BEGIN'); -hunk ./actions/smssettings.php 157 -- $original = clone($user); -+ $original = clone($user); -hunk ./actions/smssettings.php 159 -- $user->smsnotify = $smsnotify; -+ $user->smsnotify = $smsnotify; -hunk ./actions/smssettings.php 161 -- $result = $user->update($original); -+ $result = $user->update($original); -hunk ./actions/smssettings.php 163 -- if ($result === FALSE) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -hunk ./actions/smssettings.php 169 -- $user->query('COMMIT'); -+ $user->query('COMMIT'); -hunk ./actions/smssettings.php 171 -- $this->show_form(_('Preferences saved.'), true); -- } -+ $this->show_form(_('Preferences saved.'), true); -+ } -hunk ./actions/smssettings.php 174 -- function add_address() { -+ function add_address() { -hunk ./actions/smssettings.php 176 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/smssettings.php 178 -- $sms = $this->trimmed('sms'); -- $carrier_id = $this->trimmed('carrier'); -- -- # Some validation -+ $sms = $this->trimmed('sms'); -+ $carrier_id = $this->trimmed('carrier'); -+ -+ # Some validation -hunk ./actions/smssettings.php 183 -- if (!$sms) { -- $this->show_form(_('No phone number.')); -- return; -- } -+ if (!$sms) { -+ $this->show_form(_('No phone number.')); -+ return; -+ } -hunk ./actions/smssettings.php 188 -- if (!$carrier_id) { -- $this->show_form(_('No carrier selected.')); -- return; -- } -- -- $sms = common_canonical_sms($sms); -- -- if ($user->sms == $sms) { -- $this->show_form(_('That is already your phone number.')); -- return; -- } else if ($this->sms_exists($sms)) { -- $this->show_form(_('That phone number already belongs to another user.')); -- return; -- } -+ if (!$carrier_id) { -+ $this->show_form(_('No carrier selected.')); -+ return; -+ } -+ -+ $sms = common_canonical_sms($sms); -+ -+ if ($user->sms == $sms) { -+ $this->show_form(_('That is already your phone number.')); -+ return; -+ } else if ($this->sms_exists($sms)) { -+ $this->show_form(_('That phone number already belongs to another user.')); -+ return; -+ } -hunk ./actions/smssettings.php 203 -- $confirm = new Confirm_address(); -- $confirm->address = $sms; -- $confirm->address_extra = $carrier_id; -- $confirm->address_type = 'sms'; -- $confirm->user_id = $user->id; -- $confirm->code = common_confirmation_code(40); -+ $confirm = new Confirm_address(); -+ $confirm->address = $sms; -+ $confirm->address_extra = $carrier_id; -+ $confirm->address_type = 'sms'; -+ $confirm->user_id = $user->id; -+ $confirm->code = common_confirmation_code(40); -hunk ./actions/smssettings.php 210 -- $result = $confirm->insert(); -+ $result = $confirm->insert(); -hunk ./actions/smssettings.php 212 -- if ($result === FALSE) { -- common_log_db_error($confirm, 'INSERT', __FILE__); -- common_server_error(_('Couldn\'t insert confirmation code.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($confirm, 'INSERT', __FILE__); -+ common_server_error(_('Couldn\'t insert confirmation code.')); -+ return; -+ } -hunk ./actions/smssettings.php 218 -- $carrier = Sms_carrier::staticGet($carrier_id); -- -- mail_confirm_sms($confirm->code, -- $user->nickname, -- $carrier->toEmailAddress($sms)); -+ $carrier = Sms_carrier::staticGet($carrier_id); -+ -+ mail_confirm_sms($confirm->code, -+ $user->nickname, -+ $carrier->toEmailAddress($sms)); -hunk ./actions/smssettings.php 224 -- $msg = _('A confirmation code was sent to the phone number you added. Check your inbox (and spam box!) for the code and instructions on how to use it.'); -+ $msg = _('A confirmation code was sent to the phone number you added. Check your inbox (and spam box!) for the code and instructions on how to use it.'); -hunk ./actions/smssettings.php 226 -- $this->show_form($msg, TRUE); -- } -+ $this->show_form($msg, TRUE); -+ } -hunk ./actions/smssettings.php 229 -- function cancel_confirmation() { -- -- $sms = $this->trimmed('sms'); -- $carrier = $this->trimmed('carrier'); -- -- $confirm = $this->get_confirmation(); -- -- if (!$confirm) { -- $this->show_form(_('No pending confirmation to cancel.')); -- return; -- } -- if ($confirm->address != $sms) { -- $this->show_form(_('That is the wrong confirmation number.')); -- return; -- } -+ function cancel_confirmation() { -+ -+ $sms = $this->trimmed('sms'); -+ $carrier = $this->trimmed('carrier'); -+ -+ $confirm = $this->get_confirmation(); -+ -+ if (!$confirm) { -+ $this->show_form(_('No pending confirmation to cancel.')); -+ return; -+ } -+ if ($confirm->address != $sms) { -+ $this->show_form(_('That is the wrong confirmation number.')); -+ return; -+ } -hunk ./actions/smssettings.php 248 -- common_log_db_error($confirm, 'DELETE', __FILE__); -+ common_log_db_error($confirm, 'DELETE', __FILE__); -hunk ./actions/smssettings.php 254 -- } -+ } -hunk ./actions/smssettings.php 256 -- function remove_address() { -+ function remove_address() { -hunk ./actions/smssettings.php 258 -- $user = common_current_user(); -- $sms = $this->arg('sms'); -- $carrier = $this->arg('carrier'); -- -- # Maybe an old tab open...? -+ $user = common_current_user(); -+ $sms = $this->arg('sms'); -+ $carrier = $this->arg('carrier'); -+ -+ # Maybe an old tab open...? -hunk ./actions/smssettings.php 264 -- if ($user->sms != $sms) { -- $this->show_form(_('That is not your phone number.')); -- return; -- } -+ if ($user->sms != $sms) { -+ $this->show_form(_('That is not your phone number.')); -+ return; -+ } -hunk ./actions/smssettings.php 269 -- $user->query('BEGIN'); -- $original = clone($user); -- $user->sms = NULL; -- $user->carrier = NULL; -- $user->smsemail = NULL; -- $result = $user->updateKeys($original); -- if (!$result) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t update user.')); -- return; -- } -- $user->query('COMMIT'); -+ $user->query('BEGIN'); -+ $original = clone($user); -+ $user->sms = NULL; -+ $user->carrier = NULL; -+ $user->smsemail = NULL; -+ $result = $user->updateKeys($original); -+ if (!$result) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t update user.')); -+ return; -+ } -+ $user->query('COMMIT'); -hunk ./actions/smssettings.php 282 -- $this->show_form(_('The address was removed.'), TRUE); -- } -- -- function sms_exists($sms) { -- $user = common_current_user(); -- $other = User::staticGet('sms', $sms); -- if (!$other) { -- return false; -- } else { -- return $other->id != $user->id; -- } -- } -+ $this->show_form(_('The address was removed.'), TRUE); -+ } -+ -+ function sms_exists($sms) { -+ $user = common_current_user(); -+ $other = User::staticGet('sms', $sms); -+ if (!$other) { -+ return false; -+ } else { -+ return $other->id != $user->id; -+ } -+ } -hunk ./actions/smssettings.php 295 -- function carrier_select() { -- $carrier = new Sms_carrier(); -- $cnt = $carrier->find(); -+ function carrier_select() { -+ $carrier = new Sms_carrier(); -+ $cnt = $carrier->find(); -hunk ./actions/smssettings.php 299 -- common_element_start('p'); -- common_element('label', array('for' => 'carrier')); -- common_element_start('select', array('name' => 'carrier', -- 'id' => 'carrier')); -- common_element('option', array('value' => 0), -- _('Select a carrier')); -- while ($carrier->fetch()) { -- common_element('option', array('value' => $carrier->id), -- $carrier->name); -- } -- common_element_end('select'); -- common_element_end('p'); -- common_element('span', 'input_instructions', -- sprintf(_('Mobile carrier for your phone. '. -- 'If you know a carrier that accepts ' . -- 'SMS over email but isn\'t listed here, ' . -- 'send email to let us know at %s.'), -- common_config('site', 'email'))); -- } -+ common_element_start('p'); -+ common_element('label', array('for' => 'carrier')); -+ common_element_start('select', array('name' => 'carrier', -+ 'id' => 'carrier')); -+ common_element('option', array('value' => 0), -+ _('Select a carrier')); -+ while ($carrier->fetch()) { -+ common_element('option', array('value' => $carrier->id), -+ $carrier->name); -+ } -+ common_element_end('select'); -+ common_element_end('p'); -+ common_element('span', 'input_instructions', -+ sprintf(_('Mobile carrier for your phone. '. -+ 'If you know a carrier that accepts ' . -+ 'SMS over email but isn\'t listed here, ' . -+ 'send email to let us know at %s.'), -+ common_config('site', 'email'))); -+ } -hunk ./actions/smssettings.php 319 -- function confirm_code() { -- -- $code = $this->trimmed('code'); -- -- if (!$code) { -- $this->show_form(_('No code entered')); -- return; -- } -- -- common_redirect(common_local_url('confirmaddress', -- array('code' => $code))); -- } -+ function confirm_code() { -+ -+ $code = $this->trimmed('code'); -+ -+ if (!$code) { -+ $this->show_form(_('No code entered')); -+ return; -+ } -+ -+ common_redirect(common_local_url('confirmaddress', -+ array('code' => $code))); -+ } -hunk ./actions/subedit.php 35 -- $token = $this->trimmed('token'); -+ $token = $this->trimmed('token'); -hunk ./actions/subedit.php 37 -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/subscribe.php 24 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/subscribe.php 27 -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- return; -- } -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ return; -+ } -hunk ./actions/subscribe.php 32 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/subscribe.php 34 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname))); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname))); -+ return; -+ } -hunk ./actions/subscribe.php 39 -- # CSRF protection -+ # CSRF protection -hunk ./actions/subscribe.php 41 -- $token = $this->trimmed('token'); -+ $token = $this->trimmed('token'); -hunk ./actions/subscribe.php 43 -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/subscribe.php 48 -- $other_id = $this->arg('subscribeto'); -+ $other_id = $this->arg('subscribeto'); -hunk ./actions/subscribe.php 53 -- $this->client_error(_('Not a local user.')); -- return; -+ $this->client_error(_('Not a local user.')); -+ return; -hunk ./actions/subscribe.php 57 -- $result = subs_subscribe_to($user, $other); -+ $result = subs_subscribe_to($user, $other); -hunk ./actions/subscribe.php 59 -- if($result != true) { -- common_user_error($result); -- return; -- } -+ if($result != true) { -+ common_user_error($result); -+ return; -+ } -hunk ./actions/subscribe.php 64 -- if ($this->boolean('ajax')) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Subscribed')); -- common_element_end('head'); -- common_element_start('body'); -- common_unsubscribe_form($other->getProfile()); -- common_element_end('body'); -- common_element_end('html'); -- } else { -- common_redirect(common_local_url('subscriptions', array('nickname' => -- $user->nickname))); -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Subscribed')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_unsubscribe_form($other->getProfile()); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -+ common_redirect(common_local_url('subscriptions', array('nickname' => -+ $user->nickname))); -hunk ./actions/subscribe.php 77 -- } -+ } -hunk ./actions/subscribers.php 26 -- function gallery_type() { -- return _('Subscribers'); -- } -+ function gallery_type() { -+ return _('Subscribers'); -+ } -hunk ./actions/subscribers.php 30 -- function get_instructions(&$profile) { -- $user =& common_current_user(); -- if ($user && ($user->id == $profile->id)) { -- return _('These are the people who listen to your notices.'); -- } else { -- return sprintf(_('These are the people who listen to %s\'s notices.'), $profile->nickname); -- } -- } -+ function get_instructions(&$profile) { -+ $user =& common_current_user(); -+ if ($user && ($user->id == $profile->id)) { -+ return _('These are the people who listen to your notices.'); -+ } else { -+ return sprintf(_('These are the people who listen to %s\'s notices.'), $profile->nickname); -+ } -+ } -hunk ./actions/subscribers.php 39 -- function fields() { -- return array('subscriber', 'subscribed'); -- } -+ function fields() { -+ return array('subscriber', 'subscribed'); -+ } -hunk ./actions/subscribers.php 43 -- function div_class() { -- return 'subscribers'; -- } -+ function div_class() { -+ return 'subscribers'; -+ } -hunk ./actions/subscribers.php 47 -- function get_other(&$subs) { -- return $subs->subscriber; -- } -+ function get_other(&$subs) { -+ return $subs->subscriber; -+ } -hunk ./actions/subscriptions.php 26 -- function gallery_type() { -- return _('Subscriptions'); -- } -+ function gallery_type() { -+ return _('Subscriptions'); -+ } -hunk ./actions/subscriptions.php 30 -- function get_instructions(&$profile) { -- $user =& common_current_user(); -- if ($user && ($user->id == $profile->id)) { -- return _('These are the people whose notices you listen to.'); -- } else { -- return sprintf(_('These are the people whose notices %s listens to.'), $profile->nickname); -- } -- } -+ function get_instructions(&$profile) { -+ $user =& common_current_user(); -+ if ($user && ($user->id == $profile->id)) { -+ return _('These are the people whose notices you listen to.'); -+ } else { -+ return sprintf(_('These are the people whose notices %s listens to.'), $profile->nickname); -+ } -+ } -hunk ./actions/subscriptions.php 39 -- function fields() { -- return array('subscribed', 'subscriber'); -- } -+ function fields() { -+ return array('subscribed', 'subscriber'); -+ } -hunk ./actions/subscriptions.php 43 -- function div_class() { -- return 'subscriptions'; -- } -+ function div_class() { -+ return 'subscriptions'; -+ } -hunk ./actions/subscriptions.php 47 -- function get_other(&$subs) { -- return $subs->subscribed; -- } -+ function get_other(&$subs) { -+ return $subs->subscribed; -+ } -hunk ./actions/subscriptions.php 60 -- $sub = Subscription::pkeyGet(array('subscriber' => $this->owner->id, -- 'subscribed' => $profile->id)); -+ $sub = Subscription::pkeyGet(array('subscriber' => $this->owner->id, -+ 'subscribed' => $profile->id)); -hunk ./actions/sup.php 23 -- -- function handle($args) { -- -- parent::handle($args); -- -- $seconds = $this->trimmed('seconds'); -- -- if (!$seconds) { -- $seconds = 15; -- } -+ -+ function handle($args) { -+ -+ parent::handle($args); -+ -+ $seconds = $this->trimmed('seconds'); -+ -+ if (!$seconds) { -+ $seconds = 15; -+ } -hunk ./actions/sup.php 34 -- $updates = $this->get_updates($seconds); -- -- header('Content-Type: application/json; charset=utf-8'); -- -- print json_encode(array('updated_time' => date('c'), -- 'since_time' => date('c', time() - $seconds), -- 'available_periods' => $this->available_periods(), -- 'period' => $seconds, -- 'updates' => $updates)); -- } -- -- function available_periods() { -- static $periods = array(86400, 43200, 21600, 7200, -- 3600, 1800, 600, 300, 120, -- 60, 30, 15); -- $available = array(); -- foreach ($periods as $period) { -- $available[$period] = common_local_url('sup', -- array('seconds' => $period)); -- } -- -- return $available; -- } -- -- function get_updates($seconds) { -- $notice = new Notice(); -+ $updates = $this->get_updates($seconds); -+ -+ header('Content-Type: application/json; charset=utf-8'); -+ -+ print json_encode(array('updated_time' => date('c'), -+ 'since_time' => date('c', time() - $seconds), -+ 'available_periods' => $this->available_periods(), -+ 'period' => $seconds, -+ 'updates' => $updates)); -+ } -+ -+ function available_periods() { -+ static $periods = array(86400, 43200, 21600, 7200, -+ 3600, 1800, 600, 300, 120, -+ 60, 30, 15); -+ $available = array(); -+ foreach ($periods as $period) { -+ $available[$period] = common_local_url('sup', -+ array('seconds' => $period)); -+ } -+ -+ return $available; -+ } -+ -+ function get_updates($seconds) { -+ $notice = new Notice(); -hunk ./actions/sup.php 61 -- # XXX: cache this. Depends on how big this protocol becomes; -- # Re-doing this query every 15 seconds isn't the end of the world. -+ # XXX: cache this. Depends on how big this protocol becomes; -+ # Re-doing this query every 15 seconds isn't the end of the world. -hunk ./actions/sup.php 64 -- $notice->query('SELECT profile_id, max(id) AS max_id ' . -- 'FROM notice ' . -- 'WHERE created > (now() - ' . $seconds . ') ' . -- 'GROUP BY profile_id'); -- -- $updates = array(); -- -- while ($notice->fetch()) { -- $updates[] = array($notice->profile_id, $notice->max_id); -- } -- -- return $updates; -- } -- -- function is_readonly() { -- return true; -- } -+ $notice->query('SELECT profile_id, max(id) AS max_id ' . -+ 'FROM notice ' . -+ 'WHERE created > (now() - ' . $seconds . ') ' . -+ 'GROUP BY profile_id'); -+ -+ $updates = array(); -+ -+ while ($notice->fetch()) { -+ $updates[] = array($notice->profile_id, $notice->max_id); -+ } -+ -+ return $updates; -+ } -+ -+ function is_readonly() { -+ return true; -+ } -hunk ./actions/tag.php 27 -- function handle($args) { -+ function handle($args) { -hunk ./actions/tag.php 29 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/tag.php 31 -- # Looks like we're good; show the header -+ # Looks like we're good; show the header -hunk ./actions/tag.php 33 -- if (isset($args['tag']) && $args['tag']) { -- $tag = $args['tag']; -- common_show_header(sprintf(_("Notices tagged with %s"), $tag), -- array($this, 'show_header'), $tag, -- array($this, 'show_top')); -- $this->show_notices($tag); -- } else { -- common_show_header(_("Tags"), -- array($this, 'show_header'), '', -- array($this, 'show_top')); -- $this->show_tags(); -- } -+ if (isset($args['tag']) && $args['tag']) { -+ $tag = $args['tag']; -+ common_show_header(sprintf(_("Notices tagged with %s"), $tag), -+ array($this, 'show_header'), $tag, -+ array($this, 'show_top')); -+ $this->show_notices($tag); -+ } else { -+ common_show_header(_("Tags"), -+ array($this, 'show_header'), '', -+ array($this, 'show_top')); -+ $this->show_tags(); -+ } -hunk ./actions/tag.php 46 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/tag.php 49 -- function show_header($tag = false) { -- if ($tag) { -- common_element('link', array('rel' => 'alternate', -- 'href' => common_local_url('tagrss', array('tag' => $tag)), -- 'type' => 'application/rss+xml', -- 'title' => sprintf(_('Feed for tag %s'), $tag))); -- } -- } -+ function show_header($tag = false) { -+ if ($tag) { -+ common_element('link', array('rel' => 'alternate', -+ 'href' => common_local_url('tagrss', array('tag' => $tag)), -+ 'type' => 'application/rss+xml', -+ 'title' => sprintf(_('Feed for tag %s'), $tag))); -+ } -+ } -hunk ./actions/tag.php 58 -- function get_instructions() { -- return _('Showing most popular tags from the last week'); -- } -+ function get_instructions() { -+ return _('Showing most popular tags from the last week'); -+ } -hunk ./actions/tag.php 62 -- function show_top($tag = false) { -- if (!$tag) { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- $this->public_views_menu(); -- } -- else { -- $this->show_feeds_list(array(0=>array('href'=>common_local_url('tagrss'), -- 'type' => 'rss', -- 'version' => 'RSS 1.0', -- 'item' => 'tagrss'))); -- } -- } -+ function show_top($tag = false) { -+ if (!$tag) { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ $this->public_views_menu(); -+ } -+ else { -+ $this->show_feeds_list(array(0=>array('href'=>common_local_url('tagrss'), -+ 'type' => 'rss', -+ 'version' => 'RSS 1.0', -+ 'item' => 'tagrss'))); -+ } -+ } -hunk ./actions/tag.php 79 -- function show_tags() -- { -- # This should probably be cached rather than recalculated -- $tags = DB_DataObject::factory('Notice_tag'); -+ function show_tags() -+ { -+ # This should probably be cached rather than recalculated -+ $tags = DB_DataObject::factory('Notice_tag'); -hunk ./actions/tag.php 84 -- #Need to clear the selection and then only re-add the field -- #we are grouping by, otherwise it's not a valid 'group by' -- #even though MySQL seems to let it slide... -- $tags->selectAdd(); -- $tags->selectAdd('tag'); -+ #Need to clear the selection and then only re-add the field -+ #we are grouping by, otherwise it's not a valid 'group by' -+ #even though MySQL seems to let it slide... -+ $tags->selectAdd(); -+ $tags->selectAdd('tag'); -hunk ./actions/tag.php 90 -- #Add the aggregated columns... -- $tags->selectAdd('max(notice_id) as last_notice_id'); -- if(common_config('db','type')=='pgsql') { -- $calc='sum(exp(-extract(epoch from (now()-created))/%s)) as weight'; -- } else { -- $calc='sum(exp(-(now() - created)/%s)) as weight'; -- } -- $tags->selectAdd(sprintf($calc, common_config('tag', 'dropoff'))); -- $tags->groupBy('tag'); -- $tags->orderBy('weight DESC'); -+ #Add the aggregated columns... -+ $tags->selectAdd('max(notice_id) as last_notice_id'); -+ if(common_config('db','type')=='pgsql') { -+ $calc='sum(exp(-extract(epoch from (now()-created))/%s)) as weight'; -+ } else { -+ $calc='sum(exp(-(now() - created)/%s)) as weight'; -+ } -+ $tags->selectAdd(sprintf($calc, common_config('tag', 'dropoff'))); -+ $tags->groupBy('tag'); -+ $tags->orderBy('weight DESC'); -hunk ./actions/tag.php 101 -- # $tags->whereAdd('created > "' . strftime('%Y-%m-%d %H:%M:%S', strtotime('-1 MONTH')) . '"'); -+ # $tags->whereAdd('created > "' . strftime('%Y-%m-%d %H:%M:%S', strtotime('-1 MONTH')) . '"'); -hunk ./actions/tag.php 103 -- $tags->limit(TAGS_PER_PAGE); -+ $tags->limit(TAGS_PER_PAGE); -hunk ./actions/tag.php 105 -- $cnt = $tags->find(); -+ $cnt = $tags->find(); -hunk ./actions/tag.php 107 -- if ($cnt > 0) { -- common_element_start('p', 'tagcloud'); -+ if ($cnt > 0) { -+ common_element_start('p', 'tagcloud'); -hunk ./actions/tag.php 110 -- $tw = array(); -- $sum = 0; -- while ($tags->fetch()) { -- $tw[$tags->tag] = $tags->weight; -- $sum += $tags->weight; -- } -+ $tw = array(); -+ $sum = 0; -+ while ($tags->fetch()) { -+ $tw[$tags->tag] = $tags->weight; -+ $sum += $tags->weight; -+ } -hunk ./actions/tag.php 117 -- ksort($tw); -+ ksort($tw); -hunk ./actions/tag.php 119 -- foreach ($tw as $tag => $weight) { -- $this->show_tag($tag, $weight, $weight/$sum); -- } -+ foreach ($tw as $tag => $weight) { -+ $this->show_tag($tag, $weight, $weight/$sum); -+ } -hunk ./actions/tag.php 123 -- common_element_end('p'); -- } -- } -+ common_element_end('p'); -+ } -+ } -hunk ./actions/tag.php 127 -- function show_tag($tag, $weight, $relative) { -+ function show_tag($tag, $weight, $relative) { -hunk ./actions/tag.php 129 -- # XXX: these should probably tune to the size of the site -- if ($relative > 0.1) { -- $cls = 'largest'; -- } else if ($relative > 0.05) { -- $cls = 'verylarge'; -- } else if ($relative > 0.02) { -- $cls = 'large'; -- } else if ($relative > 0.01) { -- $cls = 'medium'; -- } else if ($relative > 0.005) { -- $cls = 'small'; -- } else if ($relative > 0.002) { -- $cls = 'verysmall'; -- } else { -- $cls = 'smallest'; -- } -+ # XXX: these should probably tune to the size of the site -+ if ($relative > 0.1) { -+ $cls = 'largest'; -+ } else if ($relative > 0.05) { -+ $cls = 'verylarge'; -+ } else if ($relative > 0.02) { -+ $cls = 'large'; -+ } else if ($relative > 0.01) { -+ $cls = 'medium'; -+ } else if ($relative > 0.005) { -+ $cls = 'small'; -+ } else if ($relative > 0.002) { -+ $cls = 'verysmall'; -+ } else { -+ $cls = 'smallest'; -+ } -hunk ./actions/tag.php 146 -- common_element('a', array('class' => "$cls weight-$weight relative-$relative", -- 'href' => common_local_url('tag', array('tag' => $tag))), -- $tag); -- common_text(' '); -- } -+ common_element('a', array('class' => "$cls weight-$weight relative-$relative", -+ 'href' => common_local_url('tag', array('tag' => $tag))), -+ $tag); -+ common_text(' '); -+ } -hunk ./actions/tag.php 152 -- function show_notices($tag) { -+ function show_notices($tag) { -hunk ./actions/tag.php 154 -- $cnt = 0; -+ $cnt = 0; -hunk ./actions/tag.php 156 -- $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; -hunk ./actions/tag.php 158 -- $notice = Notice_tag::getStream($tag, (($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); -+ $notice = Notice_tag::getStream($tag, (($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); -hunk ./actions/tag.php 162 -- common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -- $page, 'tag', array('tag' => $tag)); -- } -+ common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, -+ $page, 'tag', array('tag' => $tag)); -+ } -hunk ./actions/tagother.php 26 -- function handle($args) { -+ function handle($args) { -hunk ./actions/tagother.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/tagother.php 30 -- if (!common_logged_in()) { -- $this->client_error(_('Not logged in'), 403); -- return; -- } -+ if (!common_logged_in()) { -+ $this->client_error(_('Not logged in'), 403); -+ return; -+ } -hunk ./actions/tagother.php 35 -- if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- $this->save_tags(); -- } else { -- $id = $this->trimmed('id'); -- if (!$id) { -- $this->client_error(_('No id argument.')); -- return; -- } -- $profile = Profile::staticGet('id', $id); -- if (!$profile) { -- $this->client_error(_('No profile with that ID.')); -- return; -- } -- $this->show_form($profile); -- } -- } -+ if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ $this->save_tags(); -+ } else { -+ $id = $this->trimmed('id'); -+ if (!$id) { -+ $this->client_error(_('No id argument.')); -+ return; -+ } -+ $profile = Profile::staticGet('id', $id); -+ if (!$profile) { -+ $this->client_error(_('No profile with that ID.')); -+ return; -+ } -+ $this->show_form($profile); -+ } -+ } +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { +hunk ./actions/smssettings.php 39 +- common_element('h2', NULL, _('Address')); ++ common_element('h2', null, _('Address')); +hunk ./actions/smssettings.php 63 +- common_input('code', _('Confirmation code'), NULL, ++ common_input('code', _('Confirmation code'), null, +hunk ./actions/smssettings.php 68 +- ($this->arg('sms')) ? $this->arg('sms') : NULL, ++ ($this->arg('sms')) ? $this->arg('sms') : null, +hunk ./actions/smssettings.php 76 +- common_element('h2', NULL, _('Incoming email')); ++ common_element('h2', null, _('Incoming email')); +hunk ./actions/smssettings.php 94 +- common_element('h2', NULL, _('Preferences')); ++ common_element('h2', null, _('Preferences')); +hunk ./actions/smssettings.php 114 +- return NULL; ++ return null; +hunk ./actions/smssettings.php 271 +- $user->sms = NULL; +- $user->carrier = NULL; +- $user->smsemail = NULL; ++ $user->sms = null; ++ $user->carrier = null; ++ $user->smsemail = null; +hunk ./actions/subedit.php 24 +- var $profile = NULL; ++ var $profile = null; hunk ./actions/tagother.php 52 -- function show_form($profile, $error=NULL) { -+ function show_form($profile, $error=NULL) { -hunk ./actions/tagother.php 54 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/tagother.php 56 -- common_show_header(_('Tag a person'), -- NULL, array($profile, $error), array($this, 'show_top')); -+ common_show_header(_('Tag a person'), -+ NULL, array($profile, $error), array($this, 'show_top')); -hunk ./actions/tagother.php 59 -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -hunk ./actions/tagother.php 61 -- common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), -- 'class' => 'avatar stream', -- 'width' => AVATAR_PROFILE_SIZE, -- 'height' => AVATAR_PROFILE_SIZE, -- 'alt' => -- ($profile->fullname) ? $profile->fullname : -- $profile->nickname)); -+ common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), -+ 'class' => 'avatar stream', -+ 'width' => AVATAR_PROFILE_SIZE, -+ 'height' => AVATAR_PROFILE_SIZE, -+ 'alt' => -+ ($profile->fullname) ? $profile->fullname : -+ $profile->nickname)); -hunk ./actions/tagother.php 69 -- common_element('a', array('href' => $profile->profileurl, -- 'class' => 'external profile nickname'), -- $profile->nickname); -+ common_element('a', array('href' => $profile->profileurl, -+ 'class' => 'external profile nickname'), -+ $profile->nickname); -hunk ./actions/tagother.php 73 -- if ($profile->fullname) { -- common_element_start('div', 'fullname'); -- if ($profile->homepage) { -- common_element('a', array('href' => $profile->homepage), -- $profile->fullname); -- } else { -- common_text($profile->fullname); -- } -- common_element_end('div'); -- } -- if ($profile->location) { -- common_element('div', 'location', $profile->location); -- } -- if ($profile->bio) { -- common_element('div', 'bio', $profile->bio); -- } -+ if ($profile->fullname) { -+ common_element_start('div', 'fullname'); -+ if ($profile->homepage) { -+ common_element('a', array('href' => $profile->homepage), -+ $profile->fullname); -+ } else { -+ common_text($profile->fullname); -+ } -+ common_element_end('div'); -+ } -+ if ($profile->location) { -+ common_element('div', 'location', $profile->location); -+ } -+ if ($profile->bio) { -+ common_element('div', 'bio', $profile->bio); -+ } -hunk ./actions/tagother.php 90 -- common_element_start('form', array('method' => 'post', -- 'id' => 'tag_user', -- 'name' => 'tagother', -- 'action' => $this->self_url())); -- common_hidden('token', common_session_token()); -- common_hidden('id', $profile->id); -- common_input('tags', _('Tags'), -- ($this->arg('tags')) ? $this->arg('tags') : implode(' ', Profile_tag::getTags($user->id, $profile->id)), -- _('Tags for this user (letters, numbers, -, ., and _), comma- or space- separated')); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'tag_user', -+ 'name' => 'tagother', -+ 'action' => $this->self_url())); -+ common_hidden('token', common_session_token()); -+ common_hidden('id', $profile->id); -+ common_input('tags', _('Tags'), -+ ($this->arg('tags')) ? $this->arg('tags') : implode(' ', Profile_tag::getTags($user->id, $profile->id)), -+ _('Tags for this user (letters, numbers, -, ., and _), comma- or space- separated')); -hunk ./actions/tagother.php 100 -- common_submit('save', _('Save')); -- common_element_end('form'); -- common_show_footer(); -+ common_submit('save', _('Save')); -+ common_element_end('form'); -+ common_show_footer(); -hunk ./actions/tagother.php 104 -- } -+ } -hunk ./actions/tagother.php 106 -- function save_tags() { -+ function save_tags() { -hunk ./actions/tagother.php 108 -- $id = $this->trimmed('id'); -- $tagstring = $this->trimmed('tags'); -- $token = $this->trimmed('token'); -+ $id = $this->trimmed('id'); -+ $tagstring = $this->trimmed('tags'); -+ $token = $this->trimmed('token'); -hunk ./actions/tagother.php 112 -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/tagother.php 117 -- $profile = Profile::staticGet('id', $id); -+ $profile = Profile::staticGet('id', $id); -hunk ./actions/tagother.php 119 -- if (!$profile) { -- $this->client_error(_('No such profile.')); -- return; -- } -+ if (!$profile) { -+ $this->client_error(_('No such profile.')); -+ return; -+ } -hunk ./actions/tagother.php 124 -- if (is_string($tagstring) && strlen($tagstring) > 0) { -+ if (is_string($tagstring) && strlen($tagstring) > 0) { -hunk ./actions/tagother.php 126 -- $tags = array_map('common_canonical_tag', -- preg_split('/[\s,]+/', $tagstring)); -+ $tags = array_map('common_canonical_tag', -+ preg_split('/[\s,]+/', $tagstring)); -hunk ./actions/tagother.php 129 -- foreach ($tags as $tag) { -- if (!common_valid_profile_tag($tag)) { -- $this->show_form($profile, sprintf(_('Invalid tag: "%s"'), $tag)); -- return; -- } -- } -- } else { -- $tags = array(); -- } -+ foreach ($tags as $tag) { -+ if (!common_valid_profile_tag($tag)) { -+ $this->show_form($profile, sprintf(_('Invalid tag: "%s"'), $tag)); -+ return; -+ } -+ } -+ } else { -+ $tags = array(); -+ } -hunk ./actions/tagother.php 139 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/tagother.php 141 -- if (!Subscription::pkeyGet(array('subscriber' => $user->id, -- 'subscribed' => $profile->id)) && -- !Subscription::pkeyGet(array('subscriber' => $profile->id, -- 'subscribed' => $user->id))) -- { -- $this->client_error(_('You can only tag people you are subscribed to or who are subscribed to you.')); -- return; -- } -+ if (!Subscription::pkeyGet(array('subscriber' => $user->id, -+ 'subscribed' => $profile->id)) && -+ !Subscription::pkeyGet(array('subscriber' => $profile->id, -+ 'subscribed' => $user->id))) -+ { -+ $this->client_error(_('You can only tag people you are subscribed to or who are subscribed to you.')); -+ return; -+ } -hunk ./actions/tagother.php 150 -- $result = Profile_tag::setTags($user->id, $profile->id, $tags); -+ $result = Profile_tag::setTags($user->id, $profile->id, $tags); -hunk ./actions/tagother.php 152 -- if (!$result) { -- $this->client_error(_('Could not save tags.')); -- return; -- } -+ if (!$result) { -+ $this->client_error(_('Could not save tags.')); -+ return; -+ } -hunk ./actions/tagother.php 157 -- $action = $user->isSubscribed($profile) ? 'subscriptions' : 'subscribers'; -+ $action = $user->isSubscribed($profile) ? 'subscriptions' : 'subscribers'; -hunk ./actions/tagother.php 159 -- if ($this->boolean('ajax')) { -- common_start_html('text/xml'); -- common_element_start('head'); -- common_element('title', null, _('Tags')); -- common_element_end('head'); -- common_element_start('body'); -- common_element_start('p', 'subtags'); -- foreach ($tags as $tag) { -- common_element('a', array('href' => common_local_url($action, -- array('nickname' => $user->nickname, -- 'tag' => $tag))), -- $tag); -- } -- common_element_end('p'); -- common_element_end('body'); -- common_element_end('html'); -- } else { -- common_redirect(common_local_url($action, array('nickname' => -- $user->nickname))); -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml'); -+ common_element_start('head'); -+ common_element('title', null, _('Tags')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_element_start('p', 'subtags'); -+ foreach ($tags as $tag) { -+ common_element('a', array('href' => common_local_url($action, -+ array('nickname' => $user->nickname, -+ 'tag' => $tag))), -+ $tag); -+ } -+ common_element_end('p'); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -+ common_redirect(common_local_url($action, array('nickname' => -+ $user->nickname))); -hunk ./actions/tagother.php 179 -- } -+ } +- function show_form($profile, $error=NULL) { ++ function show_form($profile, $error=null) { +hunk ./actions/tagother.php 57 +- NULL, array($profile, $error), array($this, 'show_top')); ++ null, array($profile, $error), array($this, 'show_top')); hunk ./actions/tagother.php 181 -- function show_top($arr = NULL) { -- list($profile, $error) = $arr; -- if ($error) { -- common_element('p', 'error', $error); -- } else { -- common_element_start('div', 'instructions'); -- common_element('p', NULL, -- _('Use this form to add tags to your subscribers or subscriptions.')); -- common_element_end('div'); -- } -- } -+ function show_top($arr = NULL) { -+ list($profile, $error) = $arr; -+ if ($error) { -+ common_element('p', 'error', $error); -+ } else { -+ common_element_start('div', 'instructions'); -+ common_element('p', NULL, -+ _('Use this form to add tags to your subscribers or subscriptions.')); -+ common_element_end('div'); -+ } -+ } -hunk ./actions/tagrss.php 28 -- function init() { -- $tag = $this->trimmed('tag'); -- $this->tag = Notice_tag::staticGet('tag', $tag); -+ function init() { -+ $tag = $this->trimmed('tag'); -+ $this->tag = Notice_tag::staticGet('tag', $tag); -hunk ./actions/tagrss.php 32 -- if (!$this->tag) { -- common_user_error(_('No such tag.')); -- return false; -- } else { -- return true; -- } -- } -+ if (!$this->tag) { -+ common_user_error(_('No such tag.')); -+ return false; -+ } else { -+ return true; -+ } -+ } -hunk ./actions/tagrss.php 40 -- function get_notices($limit=0) { -- $tag = $this->tag; -+ function get_notices($limit=0) { -+ $tag = $this->tag; -hunk ./actions/tagrss.php 43 -- if (is_null($tag)) { -- return NULL; -- } -+ if (is_null($tag)) { -+ return NULL; -+ } -hunk ./actions/tagrss.php 47 -- $notice = Notice_tag::getStream($tag->tag, 0, ($limit == 0) ? NOTICES_PER_PAGE : $limit); -+ $notice = Notice_tag::getStream($tag->tag, 0, ($limit == 0) ? NOTICES_PER_PAGE : $limit); -hunk ./actions/tagrss.php 49 -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/tagrss.php 53 -- return $notices; -- } -+ return $notices; -+ } -hunk ./actions/tagrss.php 56 -- function get_channel() { -- $tag = $this->tag->tag; -+ function get_channel() { -+ $tag = $this->tag->tag; -hunk ./actions/tagrss.php 59 -- $c = array('url' => common_local_url('tagrss', array('tag' => $tagname)), -- 'title' => $tagname, -- 'link' => common_local_url('tagrss', array('tag' => $tagname)), -- 'description' => sprintf(_('Microblog tagged with %s'), $tagname)); -- return $c; -- } -+ $c = array('url' => common_local_url('tagrss', array('tag' => $tagname)), -+ 'title' => $tagname, -+ 'link' => common_local_url('tagrss', array('tag' => $tagname)), -+ 'description' => sprintf(_('Microblog tagged with %s'), $tagname)); -+ return $c; -+ } -hunk ./actions/twitapiaccount.php 26 -- function verify_credentials($args, $apidata) { -- parent::handle($args); -+ function verify_credentials($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapiaccount.php 29 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapiaccount.php 34 -- $this->show_extended_profile($apidata['user'], $apidata); -- } -+ $this->show_extended_profile($apidata['user'], $apidata); -+ } -hunk ./actions/twitapiaccount.php 37 -- function end_session($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function end_session($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapiaccount.php 42 -- function update_location($args, $apidata) { -- parent::handle($args); -+ function update_location($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapiaccount.php 45 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapiaccount.php 50 -- $location = trim($this->arg('location')); -+ $location = trim($this->arg('location')); -hunk ./actions/twitapiaccount.php 52 -- if (!is_null($location) && strlen($location) > 255) { -+ if (!is_null($location) && strlen($location) > 255) { -hunk ./actions/twitapiaccount.php 54 -- // XXX: But Twitter just truncates and runs with it. -- Zach -- $this->client_error(_('That\'s too long. Max notice size is 255 chars.'), 406, $apidate['content-type']); -- return; -- } -+ // XXX: But Twitter just truncates and runs with it. -- Zach -+ $this->client_error(_('That\'s too long. Max notice size is 255 chars.'), 406, $apidate['content-type']); -+ return; -+ } -hunk ./actions/twitapiaccount.php 59 -- $user = $apidata['user']; -- $profile = $user->getProfile(); -+ $user = $apidata['user']; -+ $profile = $user->getProfile(); -hunk ./actions/twitapiaccount.php 62 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/twitapiaccount.php 67 -- $orig_profile = clone($profile); -- $profile->location = $location; -+ $orig_profile = clone($profile); -+ $profile->location = $location; -hunk ./actions/twitapiaccount.php 70 -- $result = $profile->update($orig_profile); -+ $result = $profile->update($orig_profile); -hunk ./actions/twitapiaccount.php 72 -- if (!$result) { -- common_log_db_error($profile, 'UPDATE', __FILE__); -- common_server_error(_('Couldn\'t save profile.')); -- return; -- } -+ if (!$result) { -+ common_log_db_error($profile, 'UPDATE', __FILE__); -+ common_server_error(_('Couldn\'t save profile.')); -+ return; -+ } -hunk ./actions/twitapiaccount.php 78 -- common_broadcast_profile($profile); -- $type = $apidata['content-type']; -+ common_broadcast_profile($profile); -+ $type = $apidata['content-type']; -hunk ./actions/twitapiaccount.php 81 -- $this->init_document($type); -- $this->show_profile($profile, $type); -- $this->end_document($type); -- } -+ $this->init_document($type); -+ $this->show_profile($profile, $type); -+ $this->end_document($type); -+ } -hunk ./actions/twitapiaccount.php 87 -- function update_delivery_device($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function update_delivery_device($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapiaccount.php 92 -- function rate_limit_status($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function rate_limit_status($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapiblocks.php 26 -- function create($args, $apidata) { -+ function create($args, $apidata) { -hunk ./actions/twitapiblocks.php 28 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/twitapiblocks.php 30 -- $blockee = $this->get_user($apidata['api_arg'], $apidata); -+ $blockee = $this->get_user($apidata['api_arg'], $apidata); -hunk ./actions/twitapiblocks.php 33 -- $this->client_error('Not Found', 404, $apidata['content-type']); -- return; -+ $this->client_error('Not Found', 404, $apidata['content-type']); -+ return; -hunk ./actions/twitapiblocks.php 45 -- common_server_error(_('Block user failed.')); -+ common_server_error(_('Block user failed.')); -hunk ./actions/twitapiblocks.php 47 -- } -+ } -hunk ./actions/twitapiblocks.php 49 -- function destroy($args, $apidata) { -- parent::handle($args); -- $blockee = $this->get_user($apidata['api_arg'], $apidata); -+ function destroy($args, $apidata) { -+ parent::handle($args); -+ $blockee = $this->get_user($apidata['api_arg'], $apidata); -hunk ./actions/twitapiblocks.php 54 -- $this->client_error('Not Found', 404, $apidata['content-type']); -- return; -+ $this->client_error('Not Found', 404, $apidata['content-type']); -+ return; -hunk ./actions/twitapiblocks.php 66 -- common_server_error(_('Unblock user failed.')); -+ common_server_error(_('Unblock user failed.')); -hunk ./actions/twitapiblocks.php 68 -- } -+ } -hunk ./actions/twitapidirect_messages.php 26 -- function direct_messages($args, $apidata) { -- parent::handle($args); -- return $this->show_messages($args, $apidata, 'received'); -- } -+ function direct_messages($args, $apidata) { -+ parent::handle($args); -+ return $this->show_messages($args, $apidata, 'received'); -+ } -hunk ./actions/twitapidirect_messages.php 31 -- function sent($args, $apidata) { -- parent::handle($args); -- return $this->show_messages($args, $apidata, 'sent'); -- } -+ function sent($args, $apidata) { -+ parent::handle($args); -+ return $this->show_messages($args, $apidata, 'sent'); -+ } -hunk ./actions/twitapidirect_messages.php 36 -- function show_messages($args, $apidata, $type) { -+ function show_messages($args, $apidata, $type) { -hunk ./actions/twitapidirect_messages.php 38 -- $user = $apidata['user']; -+ $user = $apidata['user']; -hunk ./actions/twitapidirect_messages.php 40 -- $count = $this->arg('count'); -- $since = $this->arg('since'); -- $since_id = $this->arg('since_id'); -- $before_id = $this->arg('before_id'); -+ $count = $this->arg('count'); -+ $since = $this->arg('since'); -+ $since_id = $this->arg('since_id'); -+ $before_id = $this->arg('before_id'); -hunk ./actions/twitapidirect_messages.php 45 -- $page = $this->arg('page'); -+ $page = $this->arg('page'); -hunk ./actions/twitapidirect_messages.php 47 -- if (!$page) { -- $page = 1; -- } -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/twitapidirect_messages.php 51 -- if (!$count) { -- $count = 20; -- } -+ if (!$count) { -+ $count = 20; -+ } -hunk ./actions/twitapidirect_messages.php 55 -- $message = new Message(); -+ $message = new Message(); -hunk ./actions/twitapidirect_messages.php 57 -- $title = null; -- $subtitle = null; -- $link = null; -- $server = common_root_url(); -+ $title = null; -+ $subtitle = null; -+ $link = null; -+ $server = common_root_url(); -hunk ./actions/twitapidirect_messages.php 62 -- if ($type == 'received') { -- $message->to_profile = $user->id; -- $title = sprintf(_("Direct messages to %s"), $user->nickname); -- $subtitle = sprintf(_("All the direct messages sent to %s"), $user->nickname); -- $link = $server . $user->nickname . '/inbox'; -- } else { -- $message->from_profile = $user->id; -- $title = _('Direct Messages You\'ve Sent'); -- $subtitle = sprintf(_("All the direct messages sent from %s"), $user->nickname); -- $link = $server . $user->nickname . '/outbox'; -- } -+ if ($type == 'received') { -+ $message->to_profile = $user->id; -+ $title = sprintf(_("Direct messages to %s"), $user->nickname); -+ $subtitle = sprintf(_("All the direct messages sent to %s"), $user->nickname); -+ $link = $server . $user->nickname . '/inbox'; -+ } else { -+ $message->from_profile = $user->id; -+ $title = _('Direct Messages You\'ve Sent'); -+ $subtitle = sprintf(_("All the direct messages sent from %s"), $user->nickname); -+ $link = $server . $user->nickname . '/outbox'; -+ } -hunk ./actions/twitapidirect_messages.php 74 -- if ($before_id) { -- $message->whereAdd("id < $before_id"); -- } -+ if ($before_id) { -+ $message->whereAdd("id < $before_id"); -+ } -hunk ./actions/twitapidirect_messages.php 78 -- if ($since_id) { -- $message->whereAdd("id > $since_id"); -- } -+ if ($since_id) { -+ $message->whereAdd("id > $since_id"); -+ } -hunk ./actions/twitapidirect_messages.php 82 -- $since = strtotime($this->arg('since')); -+ $since = strtotime($this->arg('since')); -hunk ./actions/twitapidirect_messages.php 84 -- if ($since) { -- $d = date('Y-m-d H:i:s', $since); -- $message->whereAdd("created > '$d'"); -- } -+ if ($since) { -+ $d = date('Y-m-d H:i:s', $since); -+ $message->whereAdd("created > '$d'"); -+ } -hunk ./actions/twitapidirect_messages.php 89 -- $message->orderBy('created DESC, id DESC'); -- $message->limit((($page-1)*20), $count); -- $message->find(); -+ $message->orderBy('created DESC, id DESC'); -+ $message->limit((($page-1)*20), $count); -+ $message->find(); -hunk ./actions/twitapidirect_messages.php 93 -- switch($apidata['content-type']) { -- case 'xml': -- $this->show_xml_dmsgs($message); -- break; -- case 'rss': -- $this->show_rss_dmsgs($message, $title, $link, $subtitle); -- break; -- case 'atom': -- $this->show_atom_dmsgs($message, $title, $link, $subtitle); -- break; -- case 'json': -- $this->show_json_dmsgs($message); -- break; -- default: -- common_user_error(_('API method not found!'), $code = 404); -- } -+ switch($apidata['content-type']) { -+ case 'xml': -+ $this->show_xml_dmsgs($message); -+ break; -+ case 'rss': -+ $this->show_rss_dmsgs($message, $title, $link, $subtitle); -+ break; -+ case 'atom': -+ $this->show_atom_dmsgs($message, $title, $link, $subtitle); -+ break; -+ case 'json': -+ $this->show_json_dmsgs($message); -+ break; -+ default: -+ common_user_error(_('API method not found!'), $code = 404); -+ } -hunk ./actions/twitapidirect_messages.php 110 -- } -+ } -hunk ./actions/twitapidirect_messages.php 112 -- // had to change this from "new" to "create" to avoid PHP reserved word -- function create($args, $apidata) { -- parent::handle($args); -+ // had to change this from "new" to "create" to avoid PHP reserved word -+ function create($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapidirect_messages.php 116 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapidirect_messages.php 121 -- $user = $apidata['user']; -- $source = $this->trimmed('source'); // Not supported by Twitter. -+ $user = $apidata['user']; -+ $source = $this->trimmed('source'); // Not supported by Twitter. -hunk ./actions/twitapidirect_messages.php 125 -- if (!$source || in_array($source, $reserved_sources)) { -- $source = 'api'; -- } -+ if (!$source || in_array($source, $reserved_sources)) { -+ $source = 'api'; -+ } -hunk ./actions/twitapidirect_messages.php 129 -- $content = $this->trimmed('text'); -+ $content = $this->trimmed('text'); -hunk ./actions/twitapidirect_messages.php 131 -- if (!$content) { -- $this->client_error(_('No message text!'), $code = 406, $apidata['content-type']); -- } else { -- $content_shortened = common_shorten_links($content); -- if (mb_strlen($content_shortened) > 140) { -- $this->client_error(_('That\'s too long. Max message size is 140 chars.'), -- $code = 406, $apidata['content-type']); -- return; -- } -- } -+ if (!$content) { -+ $this->client_error(_('No message text!'), $code = 406, $apidata['content-type']); -+ } else { -+ $content_shortened = common_shorten_links($content); -+ if (mb_strlen($content_shortened) > 140) { -+ $this->client_error(_('That\'s too long. Max message size is 140 chars.'), -+ $code = 406, $apidata['content-type']); -+ return; -+ } -+ } -hunk ./actions/twitapidirect_messages.php 142 -- $other = $this->get_user($this->trimmed('user')); -+ $other = $this->get_user($this->trimmed('user')); -hunk ./actions/twitapidirect_messages.php 144 -- if (!$other) { -- $this->client_error(_('Recipient user not found.'), $code = 403, $apidata['content-type']); -- return; -- } else if (!$user->mutuallySubscribed($other)) { -- $this->client_error(_('Can\'t send direct messages to users who aren\'t your friend.'), -- $code = 403, $apidata['content-type']); -- return; -- } else if ($user->id == $other->id) { -- // Sending msgs to yourself is allowed by Twitter -- $this->client_error(_('Don\'t send a message to yourself; just say it to yourself quietly instead.'), -- $code = 403, $apidata['content-type']); -- return; -- } -+ if (!$other) { -+ $this->client_error(_('Recipient user not found.'), $code = 403, $apidata['content-type']); -+ return; -+ } else if (!$user->mutuallySubscribed($other)) { -+ $this->client_error(_('Can\'t send direct messages to users who aren\'t your friend.'), -+ $code = 403, $apidata['content-type']); -+ return; -+ } else if ($user->id == $other->id) { -+ // Sending msgs to yourself is allowed by Twitter -+ $this->client_error(_('Don\'t send a message to yourself; just say it to yourself quietly instead.'), -+ $code = 403, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapidirect_messages.php 158 -- $message = Message::saveNew($user->id, $other->id, -- html_entity_decode($content, ENT_NOQUOTES, 'UTF-8'), $source); -+ $message = Message::saveNew($user->id, $other->id, -+ html_entity_decode($content, ENT_NOQUOTES, 'UTF-8'), $source); -hunk ./actions/twitapidirect_messages.php 161 -- if (is_string($message)) { -- $this->server_error($message); -- return; -- } -+ if (is_string($message)) { -+ $this->server_error($message); -+ return; -+ } -hunk ./actions/twitapidirect_messages.php 166 -- $this->notify($user, $other, $message); -+ $this->notify($user, $other, $message); -hunk ./actions/twitapidirect_messages.php 168 -- if ($apidata['content-type'] == 'xml') { -- $this->show_single_xml_dmsg($message); -- } elseif ($apidata['content-type'] == 'json') { -- $this->show_single_json_dmsg($message); -- } -+ if ($apidata['content-type'] == 'xml') { -+ $this->show_single_xml_dmsg($message); -+ } elseif ($apidata['content-type'] == 'json') { -+ $this->show_single_json_dmsg($message); -+ } -hunk ./actions/twitapidirect_messages.php 174 -- } -+ } -hunk ./actions/twitapidirect_messages.php 176 -- function destroy($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function destroy($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapidirect_messages.php 181 -- function show_xml_dmsgs($message) { -+ function show_xml_dmsgs($message) { -hunk ./actions/twitapidirect_messages.php 183 -- $this->init_document('xml'); -- common_element_start('direct-messages', array('type' => 'array')); -+ $this->init_document('xml'); -+ common_element_start('direct-messages', array('type' => 'array')); -hunk ./actions/twitapidirect_messages.php 186 -- if (is_array($messages)) { -- foreach ($message as $m) { -- $twitter_dm = $this->twitter_dmsg_array($m); -- $this->show_twitter_xml_dmsg($twitter_dm); -- } -- } else { -- while ($message->fetch()) { -- $twitter_dm = $this->twitter_dmsg_array($message); -- $this->show_twitter_xml_dmsg($twitter_dm); -- } -- } -+ if (is_array($messages)) { -+ foreach ($message as $m) { -+ $twitter_dm = $this->twitter_dmsg_array($m); -+ $this->show_twitter_xml_dmsg($twitter_dm); -+ } -+ } else { -+ while ($message->fetch()) { -+ $twitter_dm = $this->twitter_dmsg_array($message); -+ $this->show_twitter_xml_dmsg($twitter_dm); -+ } -+ } -hunk ./actions/twitapidirect_messages.php 198 -- common_element_end('direct-messages'); -- $this->end_document('xml'); -+ common_element_end('direct-messages'); -+ $this->end_document('xml'); -hunk ./actions/twitapidirect_messages.php 201 -- } -+ } -hunk ./actions/twitapidirect_messages.php 203 -- function show_json_dmsgs($message) { -+ function show_json_dmsgs($message) { -hunk ./actions/twitapidirect_messages.php 205 -- $this->init_document('json'); -+ $this->init_document('json'); -hunk ./actions/twitapidirect_messages.php 207 -- $dmsgs = array(); -+ $dmsgs = array(); -hunk ./actions/twitapidirect_messages.php 209 -- if (is_array($message)) { -- foreach ($message as $m) { -- $twitter_dm = $this->twitter_dmsg_array($m); -- array_push($dmsgs, $twitter_dm); -- } -- } else { -- while ($message->fetch()) { -- $twitter_dm = $this->twitter_dmsg_array($message); -- array_push($dmsgs, $twitter_dm); -- } -- } -+ if (is_array($message)) { -+ foreach ($message as $m) { -+ $twitter_dm = $this->twitter_dmsg_array($m); -+ array_push($dmsgs, $twitter_dm); -+ } -+ } else { -+ while ($message->fetch()) { -+ $twitter_dm = $this->twitter_dmsg_array($message); -+ array_push($dmsgs, $twitter_dm); -+ } -+ } -hunk ./actions/twitapidirect_messages.php 221 -- $this->show_json_objects($dmsgs); -- $this->end_document('json'); -+ $this->show_json_objects($dmsgs); -+ $this->end_document('json'); -hunk ./actions/twitapidirect_messages.php 224 -- } -+ } -hunk ./actions/twitapidirect_messages.php 226 -- function show_rss_dmsgs($message, $title, $link, $subtitle) { -+ function show_rss_dmsgs($message, $title, $link, $subtitle) { -hunk ./actions/twitapidirect_messages.php 228 -- $this->init_document('rss'); -+ $this->init_document('rss'); -hunk ./actions/twitapidirect_messages.php 230 -- common_element_start('channel'); -- common_element('title', NULL, $title); -+ common_element_start('channel'); -+ common_element('title', NULL, $title); +- function show_top($arr = NULL) { ++ function show_top($arr = null) { +hunk ./actions/tagother.php 187 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/tagrss.php 44 +- return NULL; ++ return null; +hunk ./actions/twitapidirect_messages.php 231 +- common_element('title', NULL, $title); ++ common_element('title', null, $title); hunk ./actions/twitapidirect_messages.php 233 -- common_element('link', NULL, $link); -- common_element('description', NULL, $subtitle); -- common_element('language', NULL, 'en-us'); -- common_element('ttl', NULL, '40'); -+ common_element('link', NULL, $link); -+ common_element('description', NULL, $subtitle); -+ common_element('language', NULL, 'en-us'); -+ common_element('ttl', NULL, '40'); -hunk ./actions/twitapidirect_messages.php 238 -- if (is_array($message)) { -- foreach ($message as $m) { -- $entry = $this->twitter_rss_dmsg_array($m); -- $this->show_twitter_rss_item($entry); -- } -- } else { -- while ($message->fetch()) { -- $entry = $this->twitter_rss_dmsg_array($message); -- $this->show_twitter_rss_item($entry); -- } -- } -+ if (is_array($message)) { -+ foreach ($message as $m) { -+ $entry = $this->twitter_rss_dmsg_array($m); -+ $this->show_twitter_rss_item($entry); -+ } -+ } else { -+ while ($message->fetch()) { -+ $entry = $this->twitter_rss_dmsg_array($message); -+ $this->show_twitter_rss_item($entry); -+ } -+ } -hunk ./actions/twitapidirect_messages.php 250 -- common_element_end('channel'); -- $this->end_twitter_rss(); -+ common_element_end('channel'); -+ $this->end_twitter_rss(); -hunk ./actions/twitapidirect_messages.php 253 -- } -+ } -hunk ./actions/twitapidirect_messages.php 255 -- function show_atom_dmsgs($message, $title, $link, $subtitle) { -+ function show_atom_dmsgs($message, $title, $link, $subtitle) { -hunk ./actions/twitapidirect_messages.php 257 -- $this->init_document('atom'); -+ $this->init_document('atom'); +- common_element('link', NULL, $link); +- common_element('description', NULL, $subtitle); +- common_element('language', NULL, 'en-us'); +- common_element('ttl', NULL, '40'); ++ common_element('link', null, $link); ++ common_element('description', null, $subtitle); ++ common_element('language', null, 'en-us'); ++ common_element('ttl', null, '40'); hunk ./actions/twitapidirect_messages.php 259 -- common_element('title', NULL, $title); -- $siteserver = common_config('site', 'server'); -- common_element('id', NULL, "tag:$siteserver,2008:DirectMessage"); -- common_element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), NULL); -- common_element('updated', NULL, common_date_iso8601(strftime('%c'))); -- common_element('subtitle', NULL, $subtitle); -+ common_element('title', NULL, $title); -+ $siteserver = common_config('site', 'server'); -+ common_element('id', NULL, "tag:$siteserver,2008:DirectMessage"); -+ common_element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), NULL); -+ common_element('updated', NULL, common_date_iso8601(strftime('%c'))); -+ common_element('subtitle', NULL, $subtitle); -hunk ./actions/twitapidirect_messages.php 266 -- if (is_array($message)) { -- foreach ($message as $m) { -- $entry = $this->twitter_rss_dmsg_array($m); -- $this->show_twitter_atom_entry($entry); -- } -- } else { -- while ($message->fetch()) { -- $entry = $this->twitter_rss_dmsg_array($message); -- $this->show_twitter_atom_entry($entry); -- } -- } -+ if (is_array($message)) { -+ foreach ($message as $m) { -+ $entry = $this->twitter_rss_dmsg_array($m); -+ $this->show_twitter_atom_entry($entry); -+ } -+ } else { -+ while ($message->fetch()) { -+ $entry = $this->twitter_rss_dmsg_array($message); -+ $this->show_twitter_atom_entry($entry); -+ } -+ } -hunk ./actions/twitapidirect_messages.php 278 -- $this->end_document('atom'); -- } -+ $this->end_document('atom'); -+ } -hunk ./actions/twitapidirect_messages.php 281 -- // swiped from MessageAction. Should it be place in util.php? -- function notify($from, $to, $message) { -- mail_notify_message($message, $from, $to); -- # XXX: Jabber, SMS notifications... probably queued -- } -+ // swiped from MessageAction. Should it be place in util.php? -+ function notify($from, $to, $message) { -+ mail_notify_message($message, $from, $to); -+ # XXX: Jabber, SMS notifications... probably queued -+ } -hunk ./actions/twitapifavorites.php 26 -- function favorites($args, $apidata) { -- parent::handle($args); -+ function favorites($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapifavorites.php 29 -- $this->auth_user = $apidata['user']; -- $user = $this->get_user($apidata['api_arg'], $apidata); -+ $this->auth_user = $apidata['user']; -+ $user = $this->get_user($apidata['api_arg'], $apidata); -hunk ./actions/twitapifavorites.php 32 -- if (!$user) { -- $this->client_error('Not Found', 404, $apidata['content-type']); -- return; -- } -+ if (!$user) { -+ $this->client_error('Not Found', 404, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifavorites.php 37 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/twitapifavorites.php 39 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/twitapifavorites.php 44 -- $page = $this->arg('page'); -+ $page = $this->arg('page'); -hunk ./actions/twitapifavorites.php 46 -- if (!$page) { -- $page = 1; -- } -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/twitapifavorites.php 50 -- if (!$count) { -- $count = 20; -- } -+ if (!$count) { -+ $count = 20; -+ } -hunk ./actions/twitapifavorites.php 54 -- $notice = $user->favoriteNotices((($page-1)*20), $count); -+ $notice = $user->favoriteNotices((($page-1)*20), $count); -hunk ./actions/twitapifavorites.php 56 -- if (!$notice) { -- common_server_error(_('Could not retrieve favorite notices.')); -- return; -- } -+ if (!$notice) { -+ common_server_error(_('Could not retrieve favorite notices.')); -+ return; -+ } -hunk ./actions/twitapifavorites.php 61 -- $sitename = common_config('site', 'name'); -- $siteserver = common_config('site', 'server'); -+ $sitename = common_config('site', 'name'); -+ $siteserver = common_config('site', 'server'); -hunk ./actions/twitapifavorites.php 64 -- $title = sprintf(_('%s / Favorites from %s'), $sitename, $user->nickname); -- $id = "tag:$siteserver:favorites:".$user->id; -- $link = common_local_url('favorites', array('nickname' => $user->nickname)); -- $subtitle = sprintf(_('%s updates favorited by %s / %s.'), $sitename, $profile->getBestName(), $user->nickname); -+ $title = sprintf(_('%s / Favorites from %s'), $sitename, $user->nickname); -+ $id = "tag:$siteserver:favorites:".$user->id; -+ $link = common_local_url('favorites', array('nickname' => $user->nickname)); -+ $subtitle = sprintf(_('%s updates favorited by %s / %s.'), $sitename, $profile->getBestName(), $user->nickname); -hunk ./actions/twitapifavorites.php 69 -- switch($apidata['content-type']) { -- case 'xml': -- $this->show_xml_timeline($notice); -- break; -- case 'rss': -- $this->show_rss_timeline($notice, $title, $link, $subtitle); -- break; -- case 'atom': -- $this->show_atom_timeline($notice, $title, $id, $link, $subtitle); -- break; -- case 'json': -- $this->show_json_timeline($notice); -- break; -- default: -- common_user_error(_('API method not found!'), $code = 404); -- } -+ switch($apidata['content-type']) { -+ case 'xml': -+ $this->show_xml_timeline($notice); -+ break; -+ case 'rss': -+ $this->show_rss_timeline($notice, $title, $link, $subtitle); -+ break; -+ case 'atom': -+ $this->show_atom_timeline($notice, $title, $id, $link, $subtitle); -+ break; -+ case 'json': -+ $this->show_json_timeline($notice); -+ break; -+ default: -+ common_user_error(_('API method not found!'), $code = 404); -+ } -hunk ./actions/twitapifavorites.php 86 -- } -+ } -hunk ./actions/twitapifavorites.php 88 -- function create($args, $apidata) { -- parent::handle($args); -+ function create($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapifavorites.php 91 -- // Check for RESTfulness -- if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { -- // XXX: Twitter just prints the err msg, no XML / JSON. -- $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); -- return; -- } -+ // Check for RESTfulness -+ if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { -+ // XXX: Twitter just prints the err msg, no XML / JSON. -+ $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifavorites.php 98 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapifavorites.php 103 -- $this->auth_user = $apidata['user']; -- $user = $this->auth_user; -- $notice_id = $apidata['api_arg']; -- $notice = Notice::staticGet($notice_id); -+ $this->auth_user = $apidata['user']; -+ $user = $this->auth_user; -+ $notice_id = $apidata['api_arg']; -+ $notice = Notice::staticGet($notice_id); -hunk ./actions/twitapifavorites.php 108 -- if (!$notice) { -- $this->client_error(_('No status found with that ID.'), 404, $apidata['content-type']); -- return; -- } -+ if (!$notice) { -+ $this->client_error(_('No status found with that ID.'), 404, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifavorites.php 113 -- // XXX: Twitter lets you fave things repeatedly via api. -- if ($user->hasFave($notice)) { -- $this->client_error(_('This notice is already a favorite!'), 403, $apidata['content-type']); -- return; -- } -+ // XXX: Twitter lets you fave things repeatedly via api. -+ if ($user->hasFave($notice)) { -+ $this->client_error(_('This notice is already a favorite!'), 403, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifavorites.php 119 -- $fave = Fave::addNew($user, $notice); -+ $fave = Fave::addNew($user, $notice); -hunk ./actions/twitapifavorites.php 121 -- if (!$fave) { -- common_server_error(_('Could not create favorite.')); -- return; -- } -+ if (!$fave) { -+ common_server_error(_('Could not create favorite.')); -+ return; -+ } -hunk ./actions/twitapifavorites.php 126 -- $this->notify($fave, $notice, $user); -- $user->blowFavesCache(); -+ $this->notify($fave, $notice, $user); -+ $user->blowFavesCache(); -hunk ./actions/twitapifavorites.php 129 -- if ($apidata['content-type'] == 'xml') { -- $this->show_single_xml_status($notice); -- } elseif ($apidata['content-type'] == 'json') { -- $this->show_single_json_status($notice); -- } -+ if ($apidata['content-type'] == 'xml') { -+ $this->show_single_xml_status($notice); -+ } elseif ($apidata['content-type'] == 'json') { -+ $this->show_single_json_status($notice); -+ } -hunk ./actions/twitapifavorites.php 135 -- } -+ } -hunk ./actions/twitapifavorites.php 137 -- function destroy($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function destroy($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapifavorites.php 142 -- // XXX: these two funcs swiped from faves. Maybe put in util.php, or some common base class? -+ // XXX: these two funcs swiped from faves. Maybe put in util.php, or some common base class? -hunk ./actions/twitapifavorites.php 144 -- function notify($fave, $notice, $user) { -- $other = User::staticGet('id', $notice->profile_id); -- if ($other && $other->id != $user->id) { -- if ($other->email && $other->emailnotifyfav) { -- $this->notify_mail($other, $user, $notice); -- } -- # XXX: notify by IM -- # XXX: notify by SMS -- } -- } -+ function notify($fave, $notice, $user) { -+ $other = User::staticGet('id', $notice->profile_id); -+ if ($other && $other->id != $user->id) { -+ if ($other->email && $other->emailnotifyfav) { -+ $this->notify_mail($other, $user, $notice); -+ } -+ # XXX: notify by IM -+ # XXX: notify by SMS -+ } -+ } -hunk ./actions/twitapifavorites.php 155 -- function notify_mail($other, $user, $notice) { -- $profile = $user->getProfile(); -- $bestname = $profile->getBestName(); -- $subject = sprintf(_('%s added your notice as a favorite'), $bestname); -- $body = sprintf(_("%1\$s just added your notice from %2\$s as one of their favorites.\n\n" . -- "In case you forgot, you can see the text of your notice here:\n\n" . -- "%3\$s\n\n" . -- "You can see the list of %1\$s's favorites here:\n\n" . -- "%4\$s\n\n" . -- "Faithfully yours,\n" . -- "%5\$s\n"), -- $bestname, -- common_exact_date($notice->created), -- common_local_url('shownotice', array('notice' => $notice->id)), -- common_local_url('showfavorites', array('nickname' => $user->nickname)), -- common_config('site', 'name')); -+ function notify_mail($other, $user, $notice) { -+ $profile = $user->getProfile(); -+ $bestname = $profile->getBestName(); -+ $subject = sprintf(_('%s added your notice as a favorite'), $bestname); -+ $body = sprintf(_("%1\$s just added your notice from %2\$s as one of their favorites.\n\n" . -+ "In case you forgot, you can see the text of your notice here:\n\n" . -+ "%3\$s\n\n" . -+ "You can see the list of %1\$s's favorites here:\n\n" . -+ "%4\$s\n\n" . -+ "Faithfully yours,\n" . -+ "%5\$s\n"), -+ $bestname, -+ common_exact_date($notice->created), -+ common_local_url('shownotice', array('notice' => $notice->id)), -+ common_local_url('showfavorites', array('nickname' => $user->nickname)), -+ common_config('site', 'name')); -hunk ./actions/twitapifavorites.php 172 -- mail_to_user($other, $subject, $body); -- } -+ mail_to_user($other, $subject, $body); -+ } -hunk ./actions/twitapifriendships.php 26 -- function create($args, $apidata) { -- parent::handle($args); -+ function create($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapifriendships.php 29 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 34 -- $id = $apidata['api_arg']; -+ $id = $apidata['api_arg']; -hunk ./actions/twitapifriendships.php 36 -- $other = $this->get_user($id); -+ $other = $this->get_user($id); -hunk ./actions/twitapifriendships.php 38 -- if (!$other) { -- $this->client_error(_('Could not follow user: User not found.'), 403, $apidata['content-type']); -- return; -- } -+ if (!$other) { -+ $this->client_error(_('Could not follow user: User not found.'), 403, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 43 -- $user = $apidata['user']; -+ $user = $apidata['user']; -hunk ./actions/twitapifriendships.php 45 -- if ($user->isSubscribed($other)) { -- $errmsg = sprintf(_('Could not follow user: %s is already on your list.'), $other->nickname); -- $this->client_error($errmsg, 403, $apidata['content-type']); -- return; -- } -+ if ($user->isSubscribed($other)) { -+ $errmsg = sprintf(_('Could not follow user: %s is already on your list.'), $other->nickname); -+ $this->client_error($errmsg, 403, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 51 -- $sub = new Subscription(); -+ $sub = new Subscription(); -hunk ./actions/twitapifriendships.php 53 -- $sub->query('BEGIN'); -+ $sub->query('BEGIN'); -hunk ./actions/twitapifriendships.php 55 -- $sub->subscriber = $user->id; -- $sub->subscribed = $other->id; -- $sub->created = DB_DataObject_Cast::dateTime(); # current time -+ $sub->subscriber = $user->id; -+ $sub->subscribed = $other->id; -+ $sub->created = DB_DataObject_Cast::dateTime(); # current time -hunk ./actions/twitapifriendships.php 59 -- $result = $sub->insert(); -+ $result = $sub->insert(); -hunk ./actions/twitapifriendships.php 61 -- if (!$result) { -- $errmsg = sprintf(_('Could not follow user: %s is already on your list.'), $other->nickname); -- $this->client_error($errmsg, 400, $apidata['content-type']); -- return; -- } -+ if (!$result) { -+ $errmsg = sprintf(_('Could not follow user: %s is already on your list.'), $other->nickname); -+ $this->client_error($errmsg, 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 67 -- $sub->query('COMMIT'); -+ $sub->query('COMMIT'); -hunk ./actions/twitapifriendships.php 69 -- mail_subscribe_notify($other, $user); -+ mail_subscribe_notify($other, $user); -hunk ./actions/twitapifriendships.php 71 -- $type = $apidata['content-type']; -- $this->init_document($type); -- $this->show_profile($other, $type); -- $this->end_document($type); -+ $type = $apidata['content-type']; -+ $this->init_document($type); -+ $this->show_profile($other, $type); -+ $this->end_document($type); -hunk ./actions/twitapifriendships.php 76 -- } -+ } -hunk ./actions/twitapifriendships.php 78 -- function destroy($args, $apidata) { -- parent::handle($args); -+ function destroy($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapifriendships.php 81 -- if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { -- $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); -- return; -- } -+ if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { -+ $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 86 -- $id = $apidata['api_arg']; -+ $id = $apidata['api_arg']; -hunk ./actions/twitapifriendships.php 88 -- # We can't subscribe to a remote person, but we can unsub -+ # We can't subscribe to a remote person, but we can unsub -hunk ./actions/twitapifriendships.php 90 -- $other = $this->get_profile($id); -- $user = $apidata['user']; -+ $other = $this->get_profile($id); -+ $user = $apidata['user']; -hunk ./actions/twitapifriendships.php 93 -- $sub = new Subscription(); -- $sub->subscriber = $user->id; -- $sub->subscribed = $other->id; -+ $sub = new Subscription(); -+ $sub->subscriber = $user->id; -+ $sub->subscribed = $other->id; -hunk ./actions/twitapifriendships.php 97 -- if ($sub->find(TRUE)) { -- $sub->query('BEGIN'); -- $sub->delete(); -- $sub->query('COMMIT'); -- } else { -- $this->client_error(_('You are not friends with the specified user.'), 403, $apidata['content-type']); -- return; -- } -+ if ($sub->find(TRUE)) { -+ $sub->query('BEGIN'); -+ $sub->delete(); -+ $sub->query('COMMIT'); -+ } else { -+ $this->client_error(_('You are not friends with the specified user.'), 403, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 106 -- $type = $apidata['content-type']; -- $this->init_document($type); -- $this->show_profile($other, $type); -- $this->end_document($type); -+ $type = $apidata['content-type']; -+ $this->init_document($type); -+ $this->show_profile($other, $type); -+ $this->end_document($type); -hunk ./actions/twitapifriendships.php 111 -- } -+ } -hunk ./actions/twitapifriendships.php 113 -- function exists($args, $apidata) { -- parent::handle($args); -+ function exists($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapifriendships.php 116 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapifriendships.php 121 -- $user_a_id = $this->trimmed('user_a'); -- $user_b_id = $this->trimmed('user_b'); -+ $user_a_id = $this->trimmed('user_a'); -+ $user_b_id = $this->trimmed('user_b'); -hunk ./actions/twitapifriendships.php 124 -- $user_a = $this->get_user($user_a_id); -- $user_b = $this->get_user($user_b_id); -+ $user_a = $this->get_user($user_a_id); -+ $user_b = $this->get_user($user_b_id); -hunk ./actions/twitapifriendships.php 127 -- if (!$user_a || !$user_b) { -- $this->client_error(_('Two user ids or screen_names must be supplied.'), 400, $apidata['content-type']); -- return; -- } -+ if (!$user_a || !$user_b) { -+ $this->client_error(_('Two user ids or screen_names must be supplied.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapifriendships.php 132 -- if ($user_a->isSubscribed($user_b)) { -- $result = 'true'; -- } else { -- $result = 'false'; -- } -+ if ($user_a->isSubscribed($user_b)) { -+ $result = 'true'; -+ } else { -+ $result = 'false'; -+ } -hunk ./actions/twitapifriendships.php 138 -- switch ($apidata['content-type']) { -- case 'xml': -- $this->init_document('xml'); -- common_element('friends', NULL, $result); -- $this->end_document('xml'); -- break; -- case 'json': -- $this->init_document('json'); -- print json_encode($result); -- $this->end_document('json'); -- break; -- default: -- break; -- } -+ switch ($apidata['content-type']) { -+ case 'xml': -+ $this->init_document('xml'); -+ common_element('friends', NULL, $result); -+ $this->end_document('xml'); -+ break; -+ case 'json': -+ $this->init_document('json'); -+ print json_encode($result); -+ $this->end_document('json'); -+ break; -+ default: -+ break; -+ } -hunk ./actions/twitapifriendships.php 153 -- } -+ } -hunk ./actions/twitapihelp.php 26 -- /* Returns the string "ok" in the requested format with a 200 OK HTTP status code. -- * URL:http://identi.ca/api/help/test.format -- * Formats: xml, json -- */ -- function test($args, $apidata) { -- parent::handle($args); -+ /* Returns the string "ok" in the requested format with a 200 OK HTTP status code. -+ * URL:http://identi.ca/api/help/test.format -+ * Formats: xml, json -+ */ -+ function test($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapihelp.php 33 -- if ($apidata['content-type'] == 'xml') { -- $this->init_document('xml'); -- common_element('ok', NULL, 'true'); -- $this->end_document('xml'); -- } elseif ($apidata['content-type'] == 'json') { -- $this->init_document('json'); -- print '"ok"'; -- $this->end_document('json'); -- } else { -- common_user_error(_('API method not found!'), $code=404); -- } -+ if ($apidata['content-type'] == 'xml') { -+ $this->init_document('xml'); -+ common_element('ok', NULL, 'true'); -+ $this->end_document('xml'); -+ } elseif ($apidata['content-type'] == 'json') { -+ $this->init_document('json'); -+ print '"ok"'; -+ $this->end_document('json'); -+ } else { -+ common_user_error(_('API method not found!'), $code=404); -+ } -hunk ./actions/twitapihelp.php 45 -- } -+ } -hunk ./actions/twitapihelp.php 47 -- function downtime_schedule($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function downtime_schedule($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapinotifications.php 27 -- function follow($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function follow($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapinotifications.php 32 -- function leave($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function leave($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapistatuses.php 26 -- function public_timeline($args, $apidata) { -- parent::handle($args); -+ function public_timeline($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 29 -- $sitename = common_config('site', 'name'); -- $siteserver = common_config('site', 'server'); -- $title = sprintf(_("%s public timeline"), $sitename); -- $id = "tag:$siteserver:Statuses"; -- $link = common_root_url(); -- $subtitle = sprintf(_("%s updates from everyone!"), $sitename); -+ $sitename = common_config('site', 'name'); -+ $siteserver = common_config('site', 'server'); -+ $title = sprintf(_("%s public timeline"), $sitename); -+ $id = "tag:$siteserver:Statuses"; -+ $link = common_root_url(); -+ $subtitle = sprintf(_("%s updates from everyone!"), $sitename); -hunk ./actions/twitapistatuses.php 36 -- // Number of public statuses to return by default -- Twitter sends 20 -- $MAX_PUBSTATUSES = 20; -+ // Number of public statuses to return by default -- Twitter sends 20 -+ $MAX_PUBSTATUSES = 20; -hunk ./actions/twitapistatuses.php 39 -- // FIXME: To really live up to the spec we need to build a list -- // of notices by users who have custom avatars, so fix this SQL -- Zach -+ // FIXME: To really live up to the spec we need to build a list -+ // of notices by users who have custom avatars, so fix this SQL -- Zach -hunk ./actions/twitapistatuses.php 42 -- $page = $this->arg('page'); -- $since_id = $this->arg('since_id'); -- $before_id = $this->arg('before_id'); -+ $page = $this->arg('page'); -+ $since_id = $this->arg('since_id'); -+ $before_id = $this->arg('before_id'); -hunk ./actions/twitapistatuses.php 46 -- // NOTE: page, since_id, and before_id are extensions to Twitter API -- TB -- if (!$page) { -- $page = 1; -- } -- if (!$since_id) { -- $since_id = 0; -- } -- if (!$before_id) { -- $before_id = 0; -- } -+ // NOTE: page, since_id, and before_id are extensions to Twitter API -- TB -+ if (!$page) { -+ $page = 1; -+ } -+ if (!$since_id) { -+ $since_id = 0; -+ } -+ if (!$before_id) { -+ $before_id = 0; -+ } -hunk ./actions/twitapistatuses.php 57 -- $since = strtotime($this->arg('since')); -+ $since = strtotime($this->arg('since')); -hunk ./actions/twitapistatuses.php 59 -- $notice = Notice::publicStream((($page-1)*$MAX_PUBSTATUSES), $MAX_PUBSTATUSES, $since_id, $before_id, $since); -+ $notice = Notice::publicStream((($page-1)*$MAX_PUBSTATUSES), $MAX_PUBSTATUSES, $since_id, $before_id, $since); -hunk ./actions/twitapistatuses.php 61 -- if ($notice) { -+ if ($notice) { -hunk ./actions/twitapistatuses.php 63 -- switch($apidata['content-type']) { -- case 'xml': -- $this->show_xml_timeline($notice); -- break; -- case 'rss': -- $this->show_rss_timeline($notice, $title, $link, $subtitle); -- break; -- case 'atom': -- $this->show_atom_timeline($notice, $title, $id, $link, $subtitle); -- break; -- case 'json': -- $this->show_json_timeline($notice); -- break; -- default: -- common_user_error(_('API method not found!'), $code = 404); -- break; -- } -+ switch($apidata['content-type']) { -+ case 'xml': -+ $this->show_xml_timeline($notice); -+ break; -+ case 'rss': -+ $this->show_rss_timeline($notice, $title, $link, $subtitle); -+ break; -+ case 'atom': -+ $this->show_atom_timeline($notice, $title, $id, $link, $subtitle); -+ break; -+ case 'json': -+ $this->show_json_timeline($notice); -+ break; -+ default: -+ common_user_error(_('API method not found!'), $code = 404); -+ break; -+ } -hunk ./actions/twitapistatuses.php 81 -- } else { -- common_server_error(_('Couldn\'t find any statuses.'), $code = 503); -- } -+ } else { -+ common_server_error(_('Couldn\'t find any statuses.'), $code = 503); -+ } -hunk ./actions/twitapistatuses.php 85 -- } -+ } -hunk ./actions/twitapistatuses.php 87 -- function friends_timeline($args, $apidata) { -- parent::handle($args); -+ function friends_timeline($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 90 -- $since = $this->arg('since'); -- $since_id = $this->arg('since_id'); -- $count = $this->arg('count'); -- $page = $this->arg('page'); -- $before_id = $this->arg('before_id'); -+ $since = $this->arg('since'); -+ $since_id = $this->arg('since_id'); -+ $count = $this->arg('count'); -+ $page = $this->arg('page'); -+ $before_id = $this->arg('before_id'); -hunk ./actions/twitapistatuses.php 96 -- if (!$page) { -- $page = 1; -- } -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/twitapistatuses.php 100 -- if (!$count) { -- $count = 20; -- } -+ if (!$count) { -+ $count = 20; -+ } -hunk ./actions/twitapistatuses.php 104 -- if (!$since_id) { -- $since_id = 0; -- } -+ if (!$since_id) { -+ $since_id = 0; -+ } -hunk ./actions/twitapistatuses.php 108 -- // NOTE: before_id is an extension to Twitter API -- TB -- if (!$before_id) { -- $before_id = 0; -- } -+ // NOTE: before_id is an extension to Twitter API -- TB -+ if (!$before_id) { -+ $before_id = 0; -+ } -hunk ./actions/twitapistatuses.php 113 -- $since = strtotime($this->arg('since')); -+ $since = strtotime($this->arg('since')); +- common_element('title', NULL, $title); ++ common_element('title', null, $title); +hunk ./actions/twitapidirect_messages.php 261 +- common_element('id', NULL, "tag:$siteserver,2008:DirectMessage"); +- common_element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), NULL); +- common_element('updated', NULL, common_date_iso8601(strftime('%c'))); +- common_element('subtitle', NULL, $subtitle); ++ common_element('id', null, "tag:$siteserver,2008:DirectMessage"); ++ common_element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), null); ++ common_element('updated', null, common_date_iso8601(strftime('%c'))); ++ common_element('subtitle', null, $subtitle); +hunk ./actions/twitapifriendships.php 141 +- common_element('friends', NULL, $result); ++ common_element('friends', null, $result); +hunk ./actions/twitapihelp.php 35 +- common_element('ok', NULL, 'true'); ++ common_element('ok', null, 'true'); hunk ./actions/twitapistatuses.php 115 -- $user = $this->get_user(NULL, $apidata); -- $this->auth_user = $user; -+ $user = $this->get_user(NULL, $apidata); -+ $this->auth_user = $user; -hunk ./actions/twitapistatuses.php 118 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/twitapistatuses.php 120 -- $sitename = common_config('site', 'name'); -- $siteserver = common_config('site', 'server'); -+ $sitename = common_config('site', 'name'); -+ $siteserver = common_config('site', 'server'); -hunk ./actions/twitapistatuses.php 123 -- $title = sprintf(_("%s and friends"), $user->nickname); -- $id = "tag:$siteserver:friends:" . $user->id; -- $link = common_local_url('all', array('nickname' => $user->nickname)); -- $subtitle = sprintf(_('Updates from %1$s and friends on %2$s!'), $user->nickname, $sitename); -+ $title = sprintf(_("%s and friends"), $user->nickname); -+ $id = "tag:$siteserver:friends:" . $user->id; -+ $link = common_local_url('all', array('nickname' => $user->nickname)); -+ $subtitle = sprintf(_('Updates from %1$s and friends on %2$s!'), $user->nickname, $sitename); -hunk ./actions/twitapistatuses.php 128 -- $notice = $user->noticesWithFriends(($page-1)*20, $count, $since_id, $before_id, $since); -+ $notice = $user->noticesWithFriends(($page-1)*20, $count, $since_id, $before_id, $since); -hunk ./actions/twitapistatuses.php 130 -- switch($apidata['content-type']) { -- case 'xml': -- $this->show_xml_timeline($notice); -- break; -- case 'rss': -- $this->show_rss_timeline($notice, $title, $link, $subtitle); -- break; -- case 'atom': -- $this->show_atom_timeline($notice, $title, $id, $link, $subtitle); -- break; -- case 'json': -- $this->show_json_timeline($notice); -- break; -- default: -- common_user_error(_('API method not found!'), $code = 404); -- } -+ switch($apidata['content-type']) { -+ case 'xml': -+ $this->show_xml_timeline($notice); -+ break; -+ case 'rss': -+ $this->show_rss_timeline($notice, $title, $link, $subtitle); -+ break; -+ case 'atom': -+ $this->show_atom_timeline($notice, $title, $id, $link, $subtitle); -+ break; -+ case 'json': -+ $this->show_json_timeline($notice); -+ break; -+ default: -+ common_user_error(_('API method not found!'), $code = 404); -+ } -hunk ./actions/twitapistatuses.php 147 -- } -+ } -hunk ./actions/twitapistatuses.php 149 -- function user_timeline($args, $apidata) { -- parent::handle($args); -+ function user_timeline($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 152 -- $this->auth_user = $apidata['user']; -- $user = $this->get_user($apidata['api_arg'], $apidata); -+ $this->auth_user = $apidata['user']; -+ $user = $this->get_user($apidata['api_arg'], $apidata); -hunk ./actions/twitapistatuses.php 155 -- if (!$user) { -- $this->client_error('Not Found', 404, $apidata['content-type']); -- return; -- } -+ if (!$user) { -+ $this->client_error('Not Found', 404, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapistatuses.php 160 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/twitapistatuses.php 162 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/twitapistatuses.php 167 -- $count = $this->arg('count'); -- $since = $this->arg('since'); -- $since_id = $this->arg('since_id'); -- $page = $this->arg('page'); -- $before_id = $this->arg('before_id'); -+ $count = $this->arg('count'); -+ $since = $this->arg('since'); -+ $since_id = $this->arg('since_id'); -+ $page = $this->arg('page'); -+ $before_id = $this->arg('before_id'); -hunk ./actions/twitapistatuses.php 173 -- if (!$page) { -- $page = 1; -- } -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/twitapistatuses.php 177 -- if (!$count) { -- $count = 20; -- } -+ if (!$count) { -+ $count = 20; -+ } -hunk ./actions/twitapistatuses.php 181 -- if (!$since_id) { -- $since_id = 0; -- } -+ if (!$since_id) { -+ $since_id = 0; -+ } -hunk ./actions/twitapistatuses.php 185 -- // NOTE: before_id is an extensions to Twitter API -- TB -- if (!$before_id) { -- $before_id = 0; -- } -+ // NOTE: before_id is an extensions to Twitter API -- TB -+ if (!$before_id) { -+ $before_id = 0; -+ } -hunk ./actions/twitapistatuses.php 190 -- $since = strtotime($this->arg('since')); -+ $since = strtotime($this->arg('since')); -hunk ./actions/twitapistatuses.php 192 -- $sitename = common_config('site', 'name'); -- $siteserver = common_config('site', 'server'); -+ $sitename = common_config('site', 'name'); -+ $siteserver = common_config('site', 'server'); -hunk ./actions/twitapistatuses.php 195 -- $title = sprintf(_("%s timeline"), $user->nickname); -- $id = "tag:$siteserver:user:".$user->id; -- $link = common_local_url('showstream', array('nickname' => $user->nickname)); -- $subtitle = sprintf(_('Updates from %1$s on %2$s!'), $user->nickname, $sitename); -+ $title = sprintf(_("%s timeline"), $user->nickname); -+ $id = "tag:$siteserver:user:".$user->id; -+ $link = common_local_url('showstream', array('nickname' => $user->nickname)); -+ $subtitle = sprintf(_('Updates from %1$s on %2$s!'), $user->nickname, $sitename); -hunk ./actions/twitapistatuses.php 200 -- # FriendFeed's SUP protocol -- # Also added RSS and Atom feeds -+ # FriendFeed's SUP protocol -+ # Also added RSS and Atom feeds +- $user = $this->get_user(NULL, $apidata); ++ $user = $this->get_user(null, $apidata); hunk ./actions/twitapistatuses.php 203 -- $suplink = common_local_url('sup', NULL, $user->id); -- header('X-SUP-ID: '.$suplink); -+ $suplink = common_local_url('sup', NULL, $user->id); -+ header('X-SUP-ID: '.$suplink); -hunk ./actions/twitapistatuses.php 206 -- # XXX: since -+ # XXX: since -hunk ./actions/twitapistatuses.php 208 -- $notice = $user->getNotices((($page-1)*20), $count, $since_id, $before_id, $since); -+ $notice = $user->getNotices((($page-1)*20), $count, $since_id, $before_id, $since); -hunk ./actions/twitapistatuses.php 210 -- switch($apidata['content-type']) { -- case 'xml': -- $this->show_xml_timeline($notice); -- break; -- case 'rss': -- $this->show_rss_timeline($notice, $title, $link, $subtitle, $suplink); -- break; -- case 'atom': -- $this->show_atom_timeline($notice, $title, $id, $link, $subtitle, $suplink); -- break; -- case 'json': -- $this->show_json_timeline($notice); -- break; -- default: -- common_user_error(_('API method not found!'), $code = 404); -- } -+ switch($apidata['content-type']) { -+ case 'xml': -+ $this->show_xml_timeline($notice); -+ break; -+ case 'rss': -+ $this->show_rss_timeline($notice, $title, $link, $subtitle, $suplink); -+ break; -+ case 'atom': -+ $this->show_atom_timeline($notice, $title, $id, $link, $subtitle, $suplink); -+ break; -+ case 'json': -+ $this->show_json_timeline($notice); -+ break; -+ default: -+ common_user_error(_('API method not found!'), $code = 404); -+ } -hunk ./actions/twitapistatuses.php 227 -- } -+ } -hunk ./actions/twitapistatuses.php 229 -- function update($args, $apidata) { -+ function update($args, $apidata) { -hunk ./actions/twitapistatuses.php 231 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 233 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapistatuses.php 238 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapistatuses.php 243 -- $this->auth_user = $apidata['user']; -- $user = $this->auth_user; -- $status = $this->trimmed('status'); -- $source = $this->trimmed('source'); -- $in_reply_to_status_id = intval($this->trimmed('in_reply_to_status_id')); -+ $this->auth_user = $apidata['user']; -+ $user = $this->auth_user; -+ $status = $this->trimmed('status'); -+ $source = $this->trimmed('source'); -+ $in_reply_to_status_id = intval($this->trimmed('in_reply_to_status_id')); -hunk ./actions/twitapistatuses.php 249 -- if (!$source || in_array($source, $reserved_sources)) { -- $source = 'api'; -- } -+ if (!$source || in_array($source, $reserved_sources)) { -+ $source = 'api'; -+ } -hunk ./actions/twitapistatuses.php 253 -- if (!$status) { -+ if (!$status) { -hunk ./actions/twitapistatuses.php 255 -- // XXX: Note: In this case, Twitter simply returns '200 OK' -- // No error is given, but the status is not posted to the -- // user's timeline. Seems bad. Shouldn't we throw an -- // errror? -- Zach -- return; -+ // XXX: Note: In this case, Twitter simply returns '200 OK' -+ // No error is given, but the status is not posted to the -+ // user's timeline. Seems bad. Shouldn't we throw an -+ // errror? -- Zach -+ return; -hunk ./actions/twitapistatuses.php 261 -- } else { -+ } else { -hunk ./actions/twitapistatuses.php 263 -- $status_shortened = common_shorten_links($status); -+ $status_shortened = common_shorten_links($status); -hunk ./actions/twitapistatuses.php 265 -- if (mb_strlen($status_shortened) > 140) { -+ if (mb_strlen($status_shortened) > 140) { -hunk ./actions/twitapistatuses.php 267 -- // XXX: Twitter truncates anything over 140, flags the status -- // as "truncated." Sending this error may screw up some clients -- // that assume Twitter will truncate for them. Should we just -- // truncate too? -- Zach -- $this->client_error(_('That\'s too long. Max notice size is 140 chars.'), $code = 406, $apidata['content-type']); -- return; -+ // XXX: Twitter truncates anything over 140, flags the status -+ // as "truncated." Sending this error may screw up some clients -+ // that assume Twitter will truncate for them. Should we just -+ // truncate too? -- Zach -+ $this->client_error(_('That\'s too long. Max notice size is 140 chars.'), $code = 406, $apidata['content-type']); -+ return; -hunk ./actions/twitapistatuses.php 274 -- } -- } -+ } -+ } -hunk ./actions/twitapistatuses.php 277 -- // Check for commands -- $inter = new CommandInterpreter(); -- $cmd = $inter->handle_command($user, $status_shortened); -+ // Check for commands -+ $inter = new CommandInterpreter(); -+ $cmd = $inter->handle_command($user, $status_shortened); -hunk ./actions/twitapistatuses.php 281 -- if ($cmd) { -+ if ($cmd) { -hunk ./actions/twitapistatuses.php 283 -- if ($this->supported($cmd)) { -- $cmd->execute(new Channel()); -- } -+ if ($this->supported($cmd)) { -+ $cmd->execute(new Channel()); -+ } -hunk ./actions/twitapistatuses.php 287 -- // cmd not supported? Twitter just returns your latest status. -- // And, it returns your last status whether the cmd was successful -- // or not! -- $n = $user->getCurrentNotice(); -- $apidata['api_arg'] = $n->id; -- } else { -+ // cmd not supported? Twitter just returns your latest status. -+ // And, it returns your last status whether the cmd was successful -+ // or not! -+ $n = $user->getCurrentNotice(); -+ $apidata['api_arg'] = $n->id; -+ } else { +- $suplink = common_local_url('sup', NULL, $user->id); ++ $suplink = common_local_url('sup', null, $user->id); hunk ./actions/twitapistatuses.php 294 -- $reply_to = NULL; -+ $reply_to = NULL; -hunk ./actions/twitapistatuses.php 296 -- if ($in_reply_to_status_id) { -+ if ($in_reply_to_status_id) { -hunk ./actions/twitapistatuses.php 298 -- // check whether notice actually exists -- $reply = Notice::staticGet($in_reply_to_status_id); -+ // check whether notice actually exists -+ $reply = Notice::staticGet($in_reply_to_status_id); -hunk ./actions/twitapistatuses.php 301 -- if ($reply) { -- $reply_to = $in_reply_to_status_id; -- } else { -- $this->client_error(_('Not found'), $code = 404, $apidata['content-type']); -- return; -- } -- } -+ if ($reply) { -+ $reply_to = $in_reply_to_status_id; -+ } else { -+ $this->client_error(_('Not found'), $code = 404, $apidata['content-type']); -+ return; -+ } -+ } -hunk ./actions/twitapistatuses.php 309 -- $notice = Notice::saveNew($user->id, html_entity_decode($status, ENT_NOQUOTES, 'UTF-8'), -- $source, 1, $reply_to); -+ $notice = Notice::saveNew($user->id, html_entity_decode($status, ENT_NOQUOTES, 'UTF-8'), -+ $source, 1, $reply_to); -hunk ./actions/twitapistatuses.php 312 -- if (is_string($notice)) { -- $this->server_error($notice); -- return; -- } -+ if (is_string($notice)) { -+ $this->server_error($notice); -+ return; -+ } -hunk ./actions/twitapistatuses.php 317 -- common_broadcast_notice($notice); -- $apidata['api_arg'] = $notice->id; -- } -+ common_broadcast_notice($notice); -+ $apidata['api_arg'] = $notice->id; -+ } -hunk ./actions/twitapistatuses.php 321 -- $this->show($args, $apidata); -- } -+ $this->show($args, $apidata); -+ } -hunk ./actions/twitapistatuses.php 324 -- function replies($args, $apidata) { -+ function replies($args, $apidata) { -hunk ./actions/twitapistatuses.php 326 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 328 -- $since = $this->arg('since'); -- $count = $this->arg('count'); -- $page = $this->arg('page'); -- $since_id = $this->arg('since_id'); -- $before_id = $this->arg('before_id'); -+ $since = $this->arg('since'); -+ $count = $this->arg('count'); -+ $page = $this->arg('page'); -+ $since_id = $this->arg('since_id'); -+ $before_id = $this->arg('before_id'); -hunk ./actions/twitapistatuses.php 334 -- $this->auth_user = $apidata['user']; -- $user = $this->auth_user; -- $profile = $user->getProfile(); -+ $this->auth_user = $apidata['user']; -+ $user = $this->auth_user; -+ $profile = $user->getProfile(); -hunk ./actions/twitapistatuses.php 338 -- $sitename = common_config('site', 'name'); -- $siteserver = common_config('site', 'server'); -+ $sitename = common_config('site', 'name'); -+ $siteserver = common_config('site', 'server'); -hunk ./actions/twitapistatuses.php 341 -- $title = sprintf(_('%1$s / Updates replying to %2$s'), $sitename, $user->nickname); -- $id = "tag:$siteserver:replies:".$user->id; -- $link = common_local_url('replies', array('nickname' => $user->nickname)); -- $subtitle = sprintf(_('%1$s updates that reply to updates from %2$s / %3$s.'), $sitename, $user->nickname, $profile->getBestName()); -+ $title = sprintf(_('%1$s / Updates replying to %2$s'), $sitename, $user->nickname); -+ $id = "tag:$siteserver:replies:".$user->id; -+ $link = common_local_url('replies', array('nickname' => $user->nickname)); -+ $subtitle = sprintf(_('%1$s updates that reply to updates from %2$s / %3$s.'), $sitename, $user->nickname, $profile->getBestName()); -hunk ./actions/twitapistatuses.php 346 -- if (!$page) { -- $page = 1; -- } -+ if (!$page) { -+ $page = 1; -+ } -hunk ./actions/twitapistatuses.php 350 -- if (!$count) { -- $count = 20; -- } -+ if (!$count) { -+ $count = 20; -+ } -hunk ./actions/twitapistatuses.php 354 -- if (!$since_id) { -- $since_id = 0; -- } -+ if (!$since_id) { -+ $since_id = 0; -+ } -hunk ./actions/twitapistatuses.php 358 -- // NOTE: before_id is an extension to Twitter API -- TB -- if (!$before_id) { -- $before_id = 0; -- } -+ // NOTE: before_id is an extension to Twitter API -- TB -+ if (!$before_id) { -+ $before_id = 0; -+ } -hunk ./actions/twitapistatuses.php 363 -- $since = strtotime($this->arg('since')); -+ $since = strtotime($this->arg('since')); -hunk ./actions/twitapistatuses.php 365 -- $notice = $user->getReplies((($page-1)*20), $count, $since_id, $before_id, $since); -- $notices = array(); -+ $notice = $user->getReplies((($page-1)*20), $count, $since_id, $before_id, $since); -+ $notices = array(); -hunk ./actions/twitapistatuses.php 368 -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/twitapistatuses.php 372 -- switch($apidata['content-type']) { -- case 'xml': -- $this->show_xml_timeline($notices); -- break; -- case 'rss': -- $this->show_rss_timeline($notices, $title, $link, $subtitle); -- break; -- case 'atom': -- $this->show_atom_timeline($notices, $title, $id, $link, $subtitle); -- break; -- case 'json': -- $this->show_json_timeline($notices); -- break; -- default: -- common_user_error(_('API method not found!'), $code = 404); -- } -+ switch($apidata['content-type']) { -+ case 'xml': -+ $this->show_xml_timeline($notices); -+ break; -+ case 'rss': -+ $this->show_rss_timeline($notices, $title, $link, $subtitle); -+ break; -+ case 'atom': -+ $this->show_atom_timeline($notices, $title, $id, $link, $subtitle); -+ break; -+ case 'json': -+ $this->show_json_timeline($notices); -+ break; -+ default: -+ common_user_error(_('API method not found!'), $code = 404); -+ } -hunk ./actions/twitapistatuses.php 389 -- } -+ } -hunk ./actions/twitapistatuses.php 391 -- function show($args, $apidata) { -- parent::handle($args); -+ function show($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 394 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapistatuses.php 399 -- $this->auth_user = $apidata['user']; -- $notice_id = $apidata['api_arg']; -- $notice = Notice::staticGet($notice_id); -+ $this->auth_user = $apidata['user']; -+ $notice_id = $apidata['api_arg']; -+ $notice = Notice::staticGet($notice_id); -hunk ./actions/twitapistatuses.php 403 -- if ($notice) { -- if ($apidata['content-type'] == 'xml') { -- $this->show_single_xml_status($notice); -- } elseif ($apidata['content-type'] == 'json') { -- $this->show_single_json_status($notice); -- } -- } else { -- // XXX: Twitter just sets a 404 header and doens't bother to return an err msg -- $this->client_error(_('No status with that ID found.'), 404, $apidata['content-type']); -- } -+ if ($notice) { -+ if ($apidata['content-type'] == 'xml') { -+ $this->show_single_xml_status($notice); -+ } elseif ($apidata['content-type'] == 'json') { -+ $this->show_single_json_status($notice); -+ } -+ } else { -+ // XXX: Twitter just sets a 404 header and doens't bother to return an err msg -+ $this->client_error(_('No status with that ID found.'), 404, $apidata['content-type']); -+ } -hunk ./actions/twitapistatuses.php 414 -- } -+ } -hunk ./actions/twitapistatuses.php 416 -- function destroy($args, $apidata) { -+ function destroy($args, $apidata) { -hunk ./actions/twitapistatuses.php 418 -- parent::handle($args); -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 420 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapistatuses.php 425 -- // Check for RESTfulness -- if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { -- // XXX: Twitter just prints the err msg, no XML / JSON. -- $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); -- return; -- } -+ // Check for RESTfulness -+ if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { -+ // XXX: Twitter just prints the err msg, no XML / JSON. -+ $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapistatuses.php 432 -- $this->auth_user = $apidata['user']; -- $user = $this->auth_user; -- $notice_id = $apidata['api_arg']; -- $notice = Notice::staticGet($notice_id); -+ $this->auth_user = $apidata['user']; -+ $user = $this->auth_user; -+ $notice_id = $apidata['api_arg']; -+ $notice = Notice::staticGet($notice_id); -hunk ./actions/twitapistatuses.php 437 -- if (!$notice) { -- $this->client_error(_('No status found with that ID.'), 404, $apidata['content-type']); -- return; -- } -+ if (!$notice) { -+ $this->client_error(_('No status found with that ID.'), 404, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapistatuses.php 442 -- if ($user->id == $notice->profile_id) { -- $replies = new Reply; -- $replies->get('notice_id', $notice_id); -- common_dequeue_notice($notice); -- $replies->delete(); -- $notice->delete(); -+ if ($user->id == $notice->profile_id) { -+ $replies = new Reply; -+ $replies->get('notice_id', $notice_id); -+ common_dequeue_notice($notice); -+ $replies->delete(); -+ $notice->delete(); -hunk ./actions/twitapistatuses.php 449 -- if ($apidata['content-type'] == 'xml') { -- $this->show_single_xml_status($notice); -- } elseif ($apidata['content-type'] == 'json') { -- $this->show_single_json_status($notice); -- } -- } else { -- $this->client_error(_('You may not delete another user\'s status.'), 403, $apidata['content-type']); -- } -+ if ($apidata['content-type'] == 'xml') { -+ $this->show_single_xml_status($notice); -+ } elseif ($apidata['content-type'] == 'json') { -+ $this->show_single_json_status($notice); -+ } -+ } else { -+ $this->client_error(_('You may not delete another user\'s status.'), 403, $apidata['content-type']); -+ } -hunk ./actions/twitapistatuses.php 458 -- } -+ } -hunk ./actions/twitapistatuses.php 460 -- function friends($args, $apidata) { -- parent::handle($args); -- return $this->subscriptions($apidata, 'subscribed', 'subscriber'); -- } -+ function friends($args, $apidata) { -+ parent::handle($args); -+ return $this->subscriptions($apidata, 'subscribed', 'subscriber'); -+ } -hunk ./actions/twitapistatuses.php 465 -- function followers($args, $apidata) { -- parent::handle($args); -+ function followers($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapistatuses.php 468 -- return $this->subscriptions($apidata, 'subscriber', 'subscribed'); -- } -+ return $this->subscriptions($apidata, 'subscriber', 'subscribed'); -+ } -hunk ./actions/twitapistatuses.php 471 -- function subscriptions($apidata, $other_attr, $user_attr) { -+ function subscriptions($apidata, $other_attr, $user_attr) { -hunk ./actions/twitapistatuses.php 473 -- # XXX: lite -+ # XXX: lite -hunk ./actions/twitapistatuses.php 475 -- $this->auth_user = $apidate['user']; -- $user = $this->get_user($apidata['api_arg'], $apidata); -+ $this->auth_user = $apidate['user']; -+ $user = $this->get_user($apidata['api_arg'], $apidata); -hunk ./actions/twitapistatuses.php 478 -- if (!$user) { -- $this->client_error('Not Found', 404, $apidata['content-type']); -- return; -- } -+ if (!$user) { -+ $this->client_error('Not Found', 404, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapistatuses.php 483 -- $page = $this->trimmed('page'); -+ $page = $this->trimmed('page'); -hunk ./actions/twitapistatuses.php 485 -- if (!$page || !is_numeric($page)) { -- $page = 1; -- } -+ if (!$page || !is_numeric($page)) { -+ $page = 1; -+ } -hunk ./actions/twitapistatuses.php 489 -- $profile = $user->getProfile(); -+ $profile = $user->getProfile(); -hunk ./actions/twitapistatuses.php 491 -- if (!$profile) { -- common_server_error(_('User has no profile.')); -- return; -- } -+ if (!$profile) { -+ common_server_error(_('User has no profile.')); -+ return; -+ } -hunk ./actions/twitapistatuses.php 496 -- $sub = new Subscription(); -- $sub->$user_attr = $profile->id; -+ $sub = new Subscription(); -+ $sub->$user_attr = $profile->id; -hunk ./actions/twitapistatuses.php 499 -- $since = strtotime($this->trimmed('since')); -+ $since = strtotime($this->trimmed('since')); -hunk ./actions/twitapistatuses.php 501 -- if ($since) { -- $d = date('Y-m-d H:i:s', $since); -- $sub->whereAdd("created > '$d'"); -- } -+ if ($since) { -+ $d = date('Y-m-d H:i:s', $since); -+ $sub->whereAdd("created > '$d'"); -+ } -hunk ./actions/twitapistatuses.php 506 -- $sub->orderBy('created DESC'); -- $sub->limit(($page-1)*100, 100); -+ $sub->orderBy('created DESC'); -+ $sub->limit(($page-1)*100, 100); -hunk ./actions/twitapistatuses.php 509 -- $others = array(); -+ $others = array(); -hunk ./actions/twitapistatuses.php 511 -- if ($sub->find()) { -- while ($sub->fetch()) { -- $others[] = Profile::staticGet($sub->$other_attr); -- } -- } else { -- // user has no followers -- } -+ if ($sub->find()) { -+ while ($sub->fetch()) { -+ $others[] = Profile::staticGet($sub->$other_attr); -+ } -+ } else { -+ // user has no followers -+ } -hunk ./actions/twitapistatuses.php 519 -- $type = $apidata['content-type']; -+ $type = $apidata['content-type']; -hunk ./actions/twitapistatuses.php 521 -- $this->init_document($type); -- $this->show_profiles($others, $type); -- $this->end_document($type); -- } -+ $this->init_document($type); -+ $this->show_profiles($others, $type); -+ $this->end_document($type); -+ } -hunk ./actions/twitapistatuses.php 526 -- function show_profiles($profiles, $type) { -- switch ($type) { -- case 'xml': -- common_element_start('users', array('type' => 'array')); -- foreach ($profiles as $profile) { -- $this->show_profile($profile); -- } -- common_element_end('users'); -- break; -- case 'json': -- $arrays = array(); -- foreach ($profiles as $profile) { -- $arrays[] = $this->twitter_user_array($profile, true); -- } -- print json_encode($arrays); -- break; -- default: -- $this->client_error(_('unsupported file type')); -- } -- } -+ function show_profiles($profiles, $type) { -+ switch ($type) { -+ case 'xml': -+ common_element_start('users', array('type' => 'array')); -+ foreach ($profiles as $profile) { -+ $this->show_profile($profile); -+ } -+ common_element_end('users'); -+ break; -+ case 'json': -+ $arrays = array(); -+ foreach ($profiles as $profile) { -+ $arrays[] = $this->twitter_user_array($profile, true); -+ } -+ print json_encode($arrays); -+ break; -+ default: -+ $this->client_error(_('unsupported file type')); -+ } -+ } -hunk ./actions/twitapistatuses.php 547 -- function featured($args, $apidata) { -- parent::handle($args); -- common_server_error(_('API method under construction.'), $code=501); -- } -+ function featured($args, $apidata) { -+ parent::handle($args); -+ common_server_error(_('API method under construction.'), $code=501); -+ } -hunk ./actions/twitapistatuses.php 552 -- function supported($cmd) { -+ function supported($cmd) { -hunk ./actions/twitapistatuses.php 554 -- $cmdlist = array('MessageCommand', 'SubCommand', 'UnsubCommand', 'FavCommand', 'OnCommand', 'OffCommand'); -+ $cmdlist = array('MessageCommand', 'SubCommand', 'UnsubCommand', 'FavCommand', 'OnCommand', 'OffCommand'); -hunk ./actions/twitapistatuses.php 556 -- if (in_array(get_class($cmd), $cmdlist)) { -- return true; -- } -+ if (in_array(get_class($cmd), $cmdlist)) { -+ return true; -+ } -hunk ./actions/twitapistatuses.php 560 -- return false; -- } -+ return false; -+ } -hunk ./actions/twitapiusers.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./actions/twitapiusers.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./actions/twitapiusers.php 26 -- function show($args, $apidata) { -- parent::handle($args); -+ function show($args, $apidata) { -+ parent::handle($args); -hunk ./actions/twitapiusers.php 29 -- if (!in_array($apidata['content-type'], array('xml', 'json'))) { -- common_user_error(_('API method not found!'), $code = 404); -- return; -- } -+ if (!in_array($apidata['content-type'], array('xml', 'json'))) { -+ common_user_error(_('API method not found!'), $code = 404); -+ return; -+ } -hunk ./actions/twitapiusers.php 34 -- $user = null; -- $email = $this->arg('email'); -+ $user = null; -+ $email = $this->arg('email'); -hunk ./actions/twitapiusers.php 37 -- if ($email) { -- $user = User::staticGet('email', $email); -- } elseif (isset($apidata['api_arg'])) { -- $user = $this->get_user($apidata['api_arg']); -- } -+ if ($email) { -+ $user = User::staticGet('email', $email); -+ } elseif (isset($apidata['api_arg'])) { -+ $user = $this->get_user($apidata['api_arg']); -+ } -hunk ./actions/twitapiusers.php 43 -- if (!$user) { -- // XXX: Twitter returns a random(?) user instead of throwing and err! -- Zach -- $this->client_error(_('Not found.'), 404, $apidata['content-type']); -- return; -- } -+ if (!$user) { -+ // XXX: Twitter returns a random(?) user instead of throwing and err! -- Zach -+ $this->client_error(_('Not found.'), 404, $apidata['content-type']); -+ return; -+ } -hunk ./actions/twitapiusers.php 49 -- $this->show_extended_profile($user, $apidata); -- } -+ $this->show_extended_profile($user, $apidata); -+ } -hunk ./actions/twittersettings.php 28 -- function get_instructions() { -- return _('Add your Twitter account to automatically send your notices to Twitter, ' . -- 'and subscribe to Twitter friends already here.'); -- } -+ function get_instructions() { -+ return _('Add your Twitter account to automatically send your notices to Twitter, ' . -+ 'and subscribe to Twitter friends already here.'); -+ } +- $reply_to = NULL; ++ $reply_to = null; hunk ./actions/twittersettings.php 33 -- function show_form($msg=NULL, $success=false) { -- $user = common_current_user(); -- $profile = $user->getProfile(); -- $fuser = NULL; -- $flink = Foreign_link::getByUserID($user->id, 1); // 1 == Twitter -+ function show_form($msg=NULL, $success=false) { -+ $user = common_current_user(); -+ $profile = $user->getProfile(); -+ $fuser = NULL; -+ $flink = Foreign_link::getByUserID($user->id, 1); // 1 == Twitter -hunk ./actions/twittersettings.php 39 -- if ($flink) { -- $fuser = $flink->getForeignUser(); -- } -+ if ($flink) { -+ $fuser = $flink->getForeignUser(); -+ } -hunk ./actions/twittersettings.php 43 -- $this->form_header(_('Twitter settings'), $msg, $success); -- common_element_start('form', array('method' => 'post', -- 'id' => 'twittersettings', -- 'action' => -- common_local_url('twittersettings'))); -- common_hidden('token', common_session_token()); -+ $this->form_header(_('Twitter settings'), $msg, $success); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'twittersettings', -+ 'action' => -+ common_local_url('twittersettings'))); -+ common_hidden('token', common_session_token()); +- function show_form($msg=NULL, $success=false) { ++ function show_form($msg=null, $success=false) { +hunk ./actions/twittersettings.php 36 +- $fuser = NULL; ++ $fuser = null; hunk ./actions/twittersettings.php 50 -- common_element('h2', NULL, _('Twitter Account')); -+ common_element('h2', NULL, _('Twitter Account')); -hunk ./actions/twittersettings.php 52 -- if ($fuser) { -- common_element_start('p'); -+ if ($fuser) { -+ common_element_start('p'); -hunk ./actions/twittersettings.php 55 -- common_element('span', 'twitter_user', $fuser->nickname); -- common_element('a', array('href' => $fuser->uri), $fuser->uri); -- common_element('span', 'input_instructions', -- _('Current verified Twitter account.')); -- common_hidden('flink_foreign_id', $flink->foreign_id); -- common_element_end('p'); -- common_submit('remove', _('Remove')); -- } else { -- common_input('twitter_username', _('Twitter user name'), -- ($this->arg('twitter_username')) ? $this->arg('twitter_username') : $profile->nickname, -- _('No spaces, please.')); // hey, it's what Twitter says -+ common_element('span', 'twitter_user', $fuser->nickname); -+ common_element('a', array('href' => $fuser->uri), $fuser->uri); -+ common_element('span', 'input_instructions', -+ _('Current verified Twitter account.')); -+ common_hidden('flink_foreign_id', $flink->foreign_id); -+ common_element_end('p'); -+ common_submit('remove', _('Remove')); -+ } else { -+ common_input('twitter_username', _('Twitter user name'), -+ ($this->arg('twitter_username')) ? $this->arg('twitter_username') : $profile->nickname, -+ _('No spaces, please.')); // hey, it's what Twitter says -hunk ./actions/twittersettings.php 67 -- common_password('twitter_password', _('Twitter password')); -- } -+ common_password('twitter_password', _('Twitter password')); -+ } +- common_element('h2', NULL, _('Twitter Account')); ++ common_element('h2', null, _('Twitter Account')); hunk ./actions/twittersettings.php 70 -- common_element('h2', NULL, _('Preferences')); -+ common_element('h2', NULL, _('Preferences')); -hunk ./actions/twittersettings.php 72 -- common_checkbox('noticesync', _('Automatically send my notices to Twitter.'), -- ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_SEND) : true); -+ common_checkbox('noticesync', _('Automatically send my notices to Twitter.'), -+ ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_SEND) : true); -hunk ./actions/twittersettings.php 75 -- common_checkbox('replysync', _('Send local "@" replies to Twitter.'), -- ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true); -+ common_checkbox('replysync', _('Send local "@" replies to Twitter.'), -+ ($flink) ? ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true); -hunk ./actions/twittersettings.php 78 -- common_checkbox('friendsync', _('Subscribe to my Twitter friends here.'), -- ($flink) ? ($flink->friendsync & FOREIGN_FRIEND_RECV) : false); -+ common_checkbox('friendsync', _('Subscribe to my Twitter friends here.'), -+ ($flink) ? ($flink->friendsync & FOREIGN_FRIEND_RECV) : false); -hunk ./actions/twittersettings.php 81 -- if ($flink) { -- common_submit('save', _('Save')); -- } else { -- common_submit('add', _('Add')); -- } -+ if ($flink) { -+ common_submit('save', _('Save')); -+ } else { -+ common_submit('add', _('Add')); -+ } -hunk ./actions/twittersettings.php 87 -- $this->show_twitter_subscriptions(); -+ $this->show_twitter_subscriptions(); -hunk ./actions/twittersettings.php 89 -- common_element_end('form'); -+ common_element_end('form'); -hunk ./actions/twittersettings.php 91 -- common_show_footer(); -- } -+ common_show_footer(); -+ } -hunk ./actions/twittersettings.php 94 -- function subscribed_twitter_users() { -+ function subscribed_twitter_users() { -hunk ./actions/twittersettings.php 96 -- $current_user = common_current_user(); -+ $current_user = common_current_user(); -hunk ./actions/twittersettings.php 98 -- $qry = 'SELECT user.* ' . -- 'FROM subscription ' . -- 'JOIN user ON subscription.subscribed = user.id ' . -- 'JOIN foreign_link ON foreign_link.user_id = user.id ' . -- 'WHERE subscriber = %d ' . -- 'ORDER BY user.nickname'; -+ $qry = 'SELECT user.* ' . -+ 'FROM subscription ' . -+ 'JOIN user ON subscription.subscribed = user.id ' . -+ 'JOIN foreign_link ON foreign_link.user_id = user.id ' . -+ 'WHERE subscriber = %d ' . -+ 'ORDER BY user.nickname'; -hunk ./actions/twittersettings.php 105 -- $user = new User(); -+ $user = new User(); -hunk ./actions/twittersettings.php 107 -- $user->query(sprintf($qry, $current_user->id)); -+ $user->query(sprintf($qry, $current_user->id)); -hunk ./actions/twittersettings.php 109 -- $users = array(); -+ $users = array(); -hunk ./actions/twittersettings.php 111 -- while ($user->fetch()) { -+ while ($user->fetch()) { -hunk ./actions/twittersettings.php 113 -- // Don't include the user's own self-subscription -- if ($user->id != $current_user->id) { -- $users[] = clone($user); -- } -- } -+ // Don't include the user's own self-subscription -+ if ($user->id != $current_user->id) { -+ $users[] = clone($user); -+ } -+ } -hunk ./actions/twittersettings.php 119 -- return $users; -- } -+ return $users; -+ } -hunk ./actions/twittersettings.php 122 -- function show_twitter_subscriptions() { -+ function show_twitter_subscriptions() { -hunk ./actions/twittersettings.php 124 -- $friends = $this->subscribed_twitter_users(); -- $friends_count = count($friends); -+ $friends = $this->subscribed_twitter_users(); -+ $friends_count = count($friends); -hunk ./actions/twittersettings.php 127 -- if ($friends_count > 0) { -+ if ($friends_count > 0) { +- common_element('h2', NULL, _('Preferences')); ++ common_element('h2', null, _('Preferences')); hunk ./actions/twittersettings.php 129 -- common_element('h3', NULL, _('Twitter Friends')); -- common_element_start('div', array('id' => 'subscriptions')); -- common_element_start('ul', array('id' => 'subscriptions_avatars')); -+ common_element('h3', NULL, _('Twitter Friends')); -+ common_element_start('div', array('id' => 'subscriptions')); -+ common_element_start('ul', array('id' => 'subscriptions_avatars')); -hunk ./actions/twittersettings.php 133 -- for ($i = 0; $i < min($friends_count, SUBSCRIPTIONS); $i++) { -+ for ($i = 0; $i < min($friends_count, SUBSCRIPTIONS); $i++) { -hunk ./actions/twittersettings.php 135 -- $other = Profile::staticGet($friends[$i]->id); -+ $other = Profile::staticGet($friends[$i]->id); -hunk ./actions/twittersettings.php 137 -- if (!$other) { -- common_log_db_error($subs, 'SELECT', __FILE__); -- continue; -- } -+ if (!$other) { -+ common_log_db_error($subs, 'SELECT', __FILE__); -+ continue; -+ } -hunk ./actions/twittersettings.php 142 -- common_element_start('li'); -- common_element_start('a', array('title' => ($other->fullname) ? -- $other->fullname : -- $other->nickname, -- 'href' => $other->profileurl, -- 'rel' => 'contact', -- 'class' => 'subscription')); -- $avatar = $other->getAvatar(AVATAR_MINI_SIZE); -- common_element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), -- 'width' => AVATAR_MINI_SIZE, -- 'height' => AVATAR_MINI_SIZE, -- 'class' => 'avatar mini', -- 'alt' => ($other->fullname) ? -- $other->fullname : -- $other->nickname)); -- common_element_end('a'); -- common_element_end('li'); -+ common_element_start('li'); -+ common_element_start('a', array('title' => ($other->fullname) ? -+ $other->fullname : -+ $other->nickname, -+ 'href' => $other->profileurl, -+ 'rel' => 'contact', -+ 'class' => 'subscription')); -+ $avatar = $other->getAvatar(AVATAR_MINI_SIZE); -+ common_element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), -+ 'width' => AVATAR_MINI_SIZE, -+ 'height' => AVATAR_MINI_SIZE, -+ 'class' => 'avatar mini', -+ 'alt' => ($other->fullname) ? -+ $other->fullname : -+ $other->nickname)); -+ common_element_end('a'); -+ common_element_end('li'); -hunk ./actions/twittersettings.php 160 -- } -+ } -hunk ./actions/twittersettings.php 162 -- common_element_end('ul'); -- common_element_end('div'); -+ common_element_end('ul'); -+ common_element_end('div'); -hunk ./actions/twittersettings.php 165 -- } -+ } -hunk ./actions/twittersettings.php 167 -- // XXX Figure out a way to show all Twitter friends... ? -+ // XXX Figure out a way to show all Twitter friends... ? -hunk ./actions/twittersettings.php 169 -- /* -- if ($subs_count > SUBSCRIPTIONS) { -- common_element_start('p', array('id' => 'subscriptions_viewall')); -+ /* -+ if ($subs_count > SUBSCRIPTIONS) { -+ common_element_start('p', array('id' => 'subscriptions_viewall')); -hunk ./actions/twittersettings.php 173 -- common_element('a', array('href' => common_local_url('subscriptions', -- array('nickname' => $profile->nickname)), -- 'class' => 'moresubscriptions'), -- _('All subscriptions')); -- common_element_end('p'); -- } -- */ -+ common_element('a', array('href' => common_local_url('subscriptions', -+ array('nickname' => $profile->nickname)), -+ 'class' => 'moresubscriptions'), -+ _('All subscriptions')); -+ common_element_end('p'); -+ } -+ */ -hunk ./actions/twittersettings.php 181 -- } -+ } -hunk ./actions/twittersettings.php 183 -- function handle_post() { -+ function handle_post() { -hunk ./actions/twittersettings.php 185 -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $this->show_form(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $this->show_form(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/twittersettings.php 192 -- if ($this->arg('save')) { -- $this->save_preferences(); -- } else if ($this->arg('add')) { -- $this->add_twitter_acct(); -- } else if ($this->arg('remove')) { -- $this->remove_twitter_acct(); -- } else { -- $this->show_form(_('Unexpected form submission.')); -- } -- } -+ if ($this->arg('save')) { -+ $this->save_preferences(); -+ } else if ($this->arg('add')) { -+ $this->add_twitter_acct(); -+ } else if ($this->arg('remove')) { -+ $this->remove_twitter_acct(); -+ } else { -+ $this->show_form(_('Unexpected form submission.')); -+ } -+ } -hunk ./actions/twittersettings.php 203 -- function add_twitter_acct() { -+ function add_twitter_acct() { -hunk ./actions/twittersettings.php 205 -- $screen_name = $this->trimmed('twitter_username'); -- $password = $this->trimmed('twitter_password'); -- $noticesync = $this->boolean('noticesync'); -- $replysync = $this->boolean('replysync'); -- $friendsync = $this->boolean('friendsync'); -+ $screen_name = $this->trimmed('twitter_username'); -+ $password = $this->trimmed('twitter_password'); -+ $noticesync = $this->boolean('noticesync'); -+ $replysync = $this->boolean('replysync'); -+ $friendsync = $this->boolean('friendsync'); -hunk ./actions/twittersettings.php 211 -- if (!Validate::string($screen_name, -- array( 'min_length' => 1, -- 'max_length' => 15, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA . '_'))) { -- $this->show_form( -- _('Username must have only numbers, upper- and lowercase letters, and underscore (_). 15 chars max.')); -- return; -- } -+ if (!Validate::string($screen_name, -+ array( 'min_length' => 1, -+ 'max_length' => 15, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA . '_'))) { -+ $this->show_form( -+ _('Username must have only numbers, upper- and lowercase letters, and underscore (_). 15 chars max.')); -+ return; -+ } -hunk ./actions/twittersettings.php 220 -- if (!$this->verify_credentials($screen_name, $password)) { -- $this->show_form(_('Could not verify your Twitter credentials!')); -- return; -- } -+ if (!$this->verify_credentials($screen_name, $password)) { -+ $this->show_form(_('Could not verify your Twitter credentials!')); -+ return; -+ } -hunk ./actions/twittersettings.php 225 -- $twit_user = twitter_user_info($screen_name, $password); -+ $twit_user = twitter_user_info($screen_name, $password); -hunk ./actions/twittersettings.php 227 -- if (!$twit_user) { -- $this->show_form(sprintf(_('Unable to retrieve account information for "%s" from Twitter.'), -- $screen_name)); -- return; -- } -+ if (!$twit_user) { -+ $this->show_form(sprintf(_('Unable to retrieve account information for "%s" from Twitter.'), -+ $screen_name)); -+ return; -+ } -hunk ./actions/twittersettings.php 233 -- if (!save_twitter_user($twit_user->id, $screen_name)) { -- $this->show_form(_('Unable to save your Twitter settings!')); -- return; -- } -+ if (!save_twitter_user($twit_user->id, $screen_name)) { -+ $this->show_form(_('Unable to save your Twitter settings!')); -+ return; -+ } -hunk ./actions/twittersettings.php 238 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/twittersettings.php 240 -- $flink = DB_DataObject::factory('foreign_link'); -- $flink->user_id = $user->id; -- $flink->foreign_id = $twit_user->id; -- $flink->service = 1; // Twitter -- $flink->credentials = $password; -- $flink->created = common_sql_now(); -+ $flink = DB_DataObject::factory('foreign_link'); -+ $flink->user_id = $user->id; -+ $flink->foreign_id = $twit_user->id; -+ $flink->service = 1; // Twitter -+ $flink->credentials = $password; -+ $flink->created = common_sql_now(); -hunk ./actions/twittersettings.php 247 -- $this->set_flags($flink, $noticesync, $replysync, $friendsync); -+ $this->set_flags($flink, $noticesync, $replysync, $friendsync); -hunk ./actions/twittersettings.php 249 -- $flink_id = $flink->insert(); -+ $flink_id = $flink->insert(); -hunk ./actions/twittersettings.php 251 -- if (!$flink_id) { -- common_log_db_error($flink, 'INSERT', __FILE__); -- $this->show_form(_('Unable to save your Twitter settings!')); -- return; -- } -+ if (!$flink_id) { -+ common_log_db_error($flink, 'INSERT', __FILE__); -+ $this->show_form(_('Unable to save your Twitter settings!')); -+ return; -+ } -hunk ./actions/twittersettings.php 257 -- if ($friendsync) { -- save_twitter_friends($user, $twit_user->id, $screen_name, $password); -- } -+ if ($friendsync) { -+ save_twitter_friends($user, $twit_user->id, $screen_name, $password); -+ } -hunk ./actions/twittersettings.php 261 -- $this->show_form(_('Twitter settings saved.'), true); -- } -+ $this->show_form(_('Twitter settings saved.'), true); -+ } -hunk ./actions/twittersettings.php 264 -- function remove_twitter_acct() { -+ function remove_twitter_acct() { -hunk ./actions/twittersettings.php 266 -- $user = common_current_user(); -- $flink = Foreign_link::getByUserID($user->id, 1); -- $flink_foreign_id = $this->arg('flink_foreign_id'); -+ $user = common_current_user(); -+ $flink = Foreign_link::getByUserID($user->id, 1); -+ $flink_foreign_id = $this->arg('flink_foreign_id'); -hunk ./actions/twittersettings.php 270 -- # Maybe an old tab open...? -- if ($flink->foreign_id != $flink_foreign_id) { -- $this->show_form(_('That is not your Twitter account.')); -- return; -- } -+ # Maybe an old tab open...? -+ if ($flink->foreign_id != $flink_foreign_id) { -+ $this->show_form(_('That is not your Twitter account.')); -+ return; -+ } -hunk ./actions/twittersettings.php 276 -- $result = $flink->delete(); -+ $result = $flink->delete(); -hunk ./actions/twittersettings.php 278 -- if (!$result) { -- common_log_db_error($flink, 'DELETE', __FILE__); -- common_server_error(_('Couldn\'t remove Twitter user.')); -- return; -- } -+ if (!$result) { -+ common_log_db_error($flink, 'DELETE', __FILE__); -+ common_server_error(_('Couldn\'t remove Twitter user.')); -+ return; -+ } -hunk ./actions/twittersettings.php 284 -- $this->show_form(_('Twitter account removed.'), TRUE); -- } -+ $this->show_form(_('Twitter account removed.'), TRUE); -+ } -hunk ./actions/twittersettings.php 287 -- function save_preferences() { -+ function save_preferences() { -hunk ./actions/twittersettings.php 289 -- $noticesync = $this->boolean('noticesync'); -- $friendsync = $this->boolean('friendsync'); -- $replysync = $this->boolean('replysync'); -+ $noticesync = $this->boolean('noticesync'); -+ $friendsync = $this->boolean('friendsync'); -+ $replysync = $this->boolean('replysync'); -hunk ./actions/twittersettings.php 293 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/twittersettings.php 295 -- $flink = Foreign_link::getByUserID($user->id, 1); -+ $flink = Foreign_link::getByUserID($user->id, 1); -hunk ./actions/twittersettings.php 297 -- if (!$flink) { -- common_log_db_error($flink, 'SELECT', __FILE__); -- $this->show_form(_('Couldn\'t save Twitter preferences.')); -- return; -- } -+ if (!$flink) { -+ common_log_db_error($flink, 'SELECT', __FILE__); -+ $this->show_form(_('Couldn\'t save Twitter preferences.')); -+ return; -+ } -hunk ./actions/twittersettings.php 303 -- $twitter_id = $flink->foreign_id; -- $password = $flink->credentials; -+ $twitter_id = $flink->foreign_id; -+ $password = $flink->credentials; -hunk ./actions/twittersettings.php 306 -- $fuser = $flink->getForeignUser(); -+ $fuser = $flink->getForeignUser(); -hunk ./actions/twittersettings.php 308 -- if (!$fuser) { -- common_log_db_error($fuser, 'SELECT', __FILE__); -- $this->show_form(_('Couldn\'t save Twitter preferences.')); -- return; -- } -+ if (!$fuser) { -+ common_log_db_error($fuser, 'SELECT', __FILE__); -+ $this->show_form(_('Couldn\'t save Twitter preferences.')); -+ return; -+ } -hunk ./actions/twittersettings.php 314 -- $screen_name = $fuser->nickname; -+ $screen_name = $fuser->nickname; -hunk ./actions/twittersettings.php 316 -- $original = clone($flink); -- $this->set_flags($flink, $noticesync, $replysync, $friendsync); -- $result = $flink->update($original); -+ $original = clone($flink); -+ $this->set_flags($flink, $noticesync, $replysync, $friendsync); -+ $result = $flink->update($original); -hunk ./actions/twittersettings.php 320 -- if ($result === FALSE) { -- common_log_db_error($flink, 'UPDATE', __FILE__); -- $this->show_form(_('Couldn\'t save Twitter preferences.')); -- return; -- } -+ if ($result === FALSE) { -+ common_log_db_error($flink, 'UPDATE', __FILE__); -+ $this->show_form(_('Couldn\'t save Twitter preferences.')); -+ return; -+ } -hunk ./actions/twittersettings.php 326 -- if ($friendsync) { -- save_twitter_friends($user, $flink->foreign_id, $screen_name, $password); -- } -+ if ($friendsync) { -+ save_twitter_friends($user, $flink->foreign_id, $screen_name, $password); -+ } -hunk ./actions/twittersettings.php 330 -- $this->show_form(_('Twitter preferences saved.')); -- } -+ $this->show_form(_('Twitter preferences saved.')); -+ } -hunk ./actions/twittersettings.php 333 -- function verify_credentials($screen_name, $password) { -- $uri = 'http://twitter.com/account/verify_credentials.json'; -- $data = get_twitter_data($uri, $screen_name, $password); -+ function verify_credentials($screen_name, $password) { -+ $uri = 'http://twitter.com/account/verify_credentials.json'; -+ $data = get_twitter_data($uri, $screen_name, $password); -hunk ./actions/twittersettings.php 337 -- if (!$data) { -- return false; -- } -+ if (!$data) { -+ return false; -+ } -hunk ./actions/twittersettings.php 341 -- $user = json_decode($data); -+ $user = json_decode($data); -hunk ./actions/twittersettings.php 343 -- if (!$user) { -- return false; -- } -+ if (!$user) { -+ return false; -+ } -hunk ./actions/twittersettings.php 347 -- $twitter_id = $user->status->id; -+ $twitter_id = $user->status->id; -hunk ./actions/twittersettings.php 349 -- if ($twitter_id) { -- return $twitter_id; -- } -+ if ($twitter_id) { -+ return $twitter_id; -+ } -hunk ./actions/twittersettings.php 353 -- return false; -- } -+ return false; -+ } -hunk ./actions/twittersettings.php 356 -- function set_flags(&$flink, $noticesync, $replysync, $friendsync) { -- if ($noticesync) { -- $flink->noticesync |= FOREIGN_NOTICE_SEND; -- } else { -- $flink->noticesync &= ~FOREIGN_NOTICE_SEND; -- } -+ function set_flags(&$flink, $noticesync, $replysync, $friendsync) { -+ if ($noticesync) { -+ $flink->noticesync |= FOREIGN_NOTICE_SEND; -+ } else { -+ $flink->noticesync &= ~FOREIGN_NOTICE_SEND; -+ } -hunk ./actions/twittersettings.php 363 -- if ($replysync) { -- $flink->noticesync |= FOREIGN_NOTICE_SEND_REPLY; -- } else { -- $flink->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; -- } -+ if ($replysync) { -+ $flink->noticesync |= FOREIGN_NOTICE_SEND_REPLY; -+ } else { -+ $flink->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; -+ } -hunk ./actions/twittersettings.php 369 -- if ($friendsync) { -- $flink->friendsync |= FOREIGN_FRIEND_RECV; -- } else { -- $flink->friendsync &= ~FOREIGN_FRIEND_RECV; -- } -+ if ($friendsync) { -+ $flink->friendsync |= FOREIGN_FRIEND_RECV; -+ } else { -+ $flink->friendsync &= ~FOREIGN_FRIEND_RECV; -+ } -hunk ./actions/twittersettings.php 375 -- $flink->profilesync = 0; -- } -+ $flink->profilesync = 0; -+ } -hunk ./actions/unblock.php 35 -- $token = $this->trimmed('token'); -+ $token = $this->trimmed('token'); -hunk ./actions/unblock.php 37 -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/unsubscribe.php 22 -- function handle($args) { -- parent::handle($args); -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- return; -- } -+ function handle($args) { -+ parent::handle($args); -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ return; -+ } -hunk ./actions/unsubscribe.php 29 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./actions/unsubscribe.php 31 -- if ($_SERVER['REQUEST_METHOD'] != 'POST') { -- common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname))); -- return; -- } -+ if ($_SERVER['REQUEST_METHOD'] != 'POST') { -+ common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname))); -+ return; -+ } -hunk ./actions/unsubscribe.php 36 -- # CSRF protection -+ # CSRF protection -hunk ./actions/unsubscribe.php 38 -- $token = $this->trimmed('token'); -+ $token = $this->trimmed('token'); -hunk ./actions/unsubscribe.php 40 -- if (!$token || $token != common_session_token()) { -- $this->client_error(_('There was a problem with your session token. Try again, please.')); -- return; -- } -+ if (!$token || $token != common_session_token()) { -+ $this->client_error(_('There was a problem with your session token. Try again, please.')); -+ return; -+ } -hunk ./actions/unsubscribe.php 45 -- $other_id = $this->arg('unsubscribeto'); -+ $other_id = $this->arg('unsubscribeto'); -hunk ./actions/unsubscribe.php 59 -- $result = subs_unsubscribe_to($user, $other); -+ $result = subs_unsubscribe_to($user, $other); -hunk ./actions/unsubscribe.php 61 -- if ($result != true) { -- common_user_error($result); -- return; -- } -+ if ($result != true) { -+ common_user_error($result); -+ return; -+ } -hunk ./actions/unsubscribe.php 66 -- if ($this->boolean('ajax')) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Unsubscribed')); -- common_element_end('head'); -- common_element_start('body'); -- common_subscribe_form($other); -- common_element_end('body'); -- common_element_end('html'); -- } else { -- common_redirect(common_local_url('subscriptions', array('nickname' => -- $user->nickname))); -+ if ($this->boolean('ajax')) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Unsubscribed')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_subscribe_form($other); -+ common_element_end('body'); -+ common_element_end('html'); -+ } else { -+ common_redirect(common_local_url('subscriptions', array('nickname' => -+ $user->nickname))); -hunk ./actions/unsubscribe.php 79 -- } -+ } -hunk ./actions/updateprofile.php 25 -- -- function handle($args) { -- parent::handle($args); -- try { -- common_remove_magic_from_request(); -- $req = OAuthRequest::from_request(); -- # Note: server-to-server function! -- $server = omb_oauth_server(); -- list($consumer, $token) = $server->verify_request($req); -- if ($this->update_profile($req, $consumer, $token)) { -- print "omb_version=".OMB_VERSION_01; -- } -- } catch (OAuthException $e) { -- $this->server_error($e->getMessage()); -- return; -- } -- } -+ -+ function handle($args) { -+ parent::handle($args); -+ try { -+ common_remove_magic_from_request(); -+ $req = OAuthRequest::from_request(); -+ # Note: server-to-server function! -+ $server = omb_oauth_server(); -+ list($consumer, $token) = $server->verify_request($req); -+ if ($this->update_profile($req, $consumer, $token)) { -+ print "omb_version=".OMB_VERSION_01; -+ } -+ } catch (OAuthException $e) { -+ $this->server_error($e->getMessage()); -+ return; -+ } -+ } -hunk ./actions/updateprofile.php 43 -- function update_profile($req, $consumer, $token) { -- $version = $req->get_parameter('omb_version'); -- if ($version != OMB_VERSION_01) { -- $this->client_error(_('Unsupported OMB version'), 400); -- return false; -- } -- # First, check to see if listenee exists -- $listenee = $req->get_parameter('omb_listenee'); -- $remote = Remote_profile::staticGet('uri', $listenee); -- if (!$remote) { -- $this->client_error(_('Profile unknown'), 404); -- return false; -- } -- # Second, check to see if they should be able to post updates! -- # We see if there are any subscriptions to that remote user with -- # the given token. -+ function update_profile($req, $consumer, $token) { -+ $version = $req->get_parameter('omb_version'); -+ if ($version != OMB_VERSION_01) { -+ $this->client_error(_('Unsupported OMB version'), 400); -+ return false; -+ } -+ # First, check to see if listenee exists -+ $listenee = $req->get_parameter('omb_listenee'); -+ $remote = Remote_profile::staticGet('uri', $listenee); -+ if (!$remote) { -+ $this->client_error(_('Profile unknown'), 404); -+ return false; -+ } -+ # Second, check to see if they should be able to post updates! -+ # We see if there are any subscriptions to that remote user with -+ # the given token. -hunk ./actions/updateprofile.php 60 -- $sub = new Subscription(); -- $sub->subscribed = $remote->id; -- $sub->token = $token->key; -- if (!$sub->find(true)) { -- $this->client_error(_('You did not send us that profile'), 403); -- return false; -- } -+ $sub = new Subscription(); -+ $sub->subscribed = $remote->id; -+ $sub->token = $token->key; -+ if (!$sub->find(true)) { -+ $this->client_error(_('You did not send us that profile'), 403); -+ return false; -+ } -hunk ./actions/updateprofile.php 68 -- $profile = Profile::staticGet('id', $remote->id); -- if (!$profile) { -- # This one is our fault -- $this->server_error(_('Remote profile with no matching profile'), 500); -- return false; -- } -- $nickname = $req->get_parameter('omb_listenee_nickname'); -- if ($nickname && !Validate::string($nickname, array('min_length' => 1, -- 'max_length' => 64, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -- $this->client_error(_('Nickname must have only lowercase letters and numbers and no spaces.')); -- return false; -- } -- $license = $req->get_parameter('omb_listenee_license'); -- if ($license && !common_valid_http_url($license)) { -- $this->client_error(sprintf(_("Invalid license URL '%s'"), $license)); -- return false; -- } -- $profile_url = $req->get_parameter('omb_listenee_profile'); -- if ($profile_url && !common_valid_http_url($profile_url)) { -- $this->client_error(sprintf(_("Invalid profile URL '%s'."), $profile_url)); -- return false; -- } -- # optional stuff -- $fullname = $req->get_parameter('omb_listenee_fullname'); -- if ($fullname && strlen($fullname) > 255) { -- $this->client_error(_("Full name is too long (max 255 chars).")); -- return false; -- } -- $homepage = $req->get_parameter('omb_listenee_homepage'); -- if ($homepage && (!common_valid_http_url($homepage) || strlen($homepage) > 255)) { -- $this->client_error(sprintf(_("Invalid homepage '%s'"), $homepage)); -- return false; -- } -- $bio = $req->get_parameter('omb_listenee_bio'); -- if ($bio && strlen($bio) > 140) { -- $this->client_error(_("Bio is too long (max 140 chars).")); -- return false; -- } -- $location = $req->get_parameter('omb_listenee_location'); -- if ($location && strlen($location) > 255) { -- $this->client_error(_("Location is too long (max 255 chars).")); -- return false; -- } -- $avatar = $req->get_parameter('omb_listenee_avatar'); -- if ($avatar) { -- if (!common_valid_http_url($avatar) || strlen($avatar) > 255) { -- $this->client_error(sprintf(_("Invalid avatar URL '%s'"), $avatar)); -- return false; -- } -- $size = @getimagesize($avatar); -- if (!$size) { -- $this->client_error(sprintf(_("Can't read avatar URL '%s'"), $avatar)); -- return false; -- } -- if ($size[0] != AVATAR_PROFILE_SIZE || $size[1] != AVATAR_PROFILE_SIZE) { -- $this->client_error(sprintf(_("Wrong size image at '%s'"), $avatar)); -- return false; -- } -- if (!in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, -- IMAGETYPE_PNG))) { -- $this->client_error(sprintf(_("Wrong image type for '%s'"), $avatar)); -- return false; -- } -- } -+ $profile = Profile::staticGet('id', $remote->id); -+ if (!$profile) { -+ # This one is our fault -+ $this->server_error(_('Remote profile with no matching profile'), 500); -+ return false; -+ } -+ $nickname = $req->get_parameter('omb_listenee_nickname'); -+ if ($nickname && !Validate::string($nickname, array('min_length' => 1, -+ 'max_length' => 64, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -+ $this->client_error(_('Nickname must have only lowercase letters and numbers and no spaces.')); -+ return false; -+ } -+ $license = $req->get_parameter('omb_listenee_license'); -+ if ($license && !common_valid_http_url($license)) { -+ $this->client_error(sprintf(_("Invalid license URL '%s'"), $license)); -+ return false; -+ } -+ $profile_url = $req->get_parameter('omb_listenee_profile'); -+ if ($profile_url && !common_valid_http_url($profile_url)) { -+ $this->client_error(sprintf(_("Invalid profile URL '%s'."), $profile_url)); -+ return false; -+ } -+ # optional stuff -+ $fullname = $req->get_parameter('omb_listenee_fullname'); -+ if ($fullname && strlen($fullname) > 255) { -+ $this->client_error(_("Full name is too long (max 255 chars).")); -+ return false; -+ } -+ $homepage = $req->get_parameter('omb_listenee_homepage'); -+ if ($homepage && (!common_valid_http_url($homepage) || strlen($homepage) > 255)) { -+ $this->client_error(sprintf(_("Invalid homepage '%s'"), $homepage)); -+ return false; -+ } -+ $bio = $req->get_parameter('omb_listenee_bio'); -+ if ($bio && strlen($bio) > 140) { -+ $this->client_error(_("Bio is too long (max 140 chars).")); -+ return false; -+ } -+ $location = $req->get_parameter('omb_listenee_location'); -+ if ($location && strlen($location) > 255) { -+ $this->client_error(_("Location is too long (max 255 chars).")); -+ return false; -+ } -+ $avatar = $req->get_parameter('omb_listenee_avatar'); -+ if ($avatar) { -+ if (!common_valid_http_url($avatar) || strlen($avatar) > 255) { -+ $this->client_error(sprintf(_("Invalid avatar URL '%s'"), $avatar)); -+ return false; -+ } -+ $size = @getimagesize($avatar); -+ if (!$size) { -+ $this->client_error(sprintf(_("Can't read avatar URL '%s'"), $avatar)); -+ return false; -+ } -+ if ($size[0] != AVATAR_PROFILE_SIZE || $size[1] != AVATAR_PROFILE_SIZE) { -+ $this->client_error(sprintf(_("Wrong size image at '%s'"), $avatar)); -+ return false; -+ } -+ if (!in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, -+ IMAGETYPE_PNG))) { -+ $this->client_error(sprintf(_("Wrong image type for '%s'"), $avatar)); -+ return false; -+ } -+ } -hunk ./actions/updateprofile.php 134 -- $orig_profile = clone($profile); -+ $orig_profile = clone($profile); -hunk ./actions/updateprofile.php 136 -- if ($nickname) { -- $profile->nickname = $nickname; -- } -- if ($profile_url) { -- $profile->profileurl = $profile_url; -- } -- if ($fullname) { -- $profile->fullname = $fullname; -- } -- if ($homepage) { -- $profile->homepage = $homepage; -- } -- if ($bio) { -- $profile->bio = $bio; -- } -- if ($location) { -- $profile->location = $location; -- } -+ if ($nickname) { -+ $profile->nickname = $nickname; -+ } -+ if ($profile_url) { -+ $profile->profileurl = $profile_url; -+ } -+ if ($fullname) { -+ $profile->fullname = $fullname; -+ } -+ if ($homepage) { -+ $profile->homepage = $homepage; -+ } -+ if ($bio) { -+ $profile->bio = $bio; -+ } -+ if ($location) { -+ $profile->location = $location; -+ } -hunk ./actions/updateprofile.php 155 -- if (!$profile->update($orig_profile)) { -- $this->server_error(_('Could not save new profile info'), 500); -- return false; -- } else { -- if ($avatar) { -- $temp_filename = tempnam(sys_get_temp_dir(), 'listenee_avatar'); -- copy($avatar, $temp_filename); -- if (!$profile->setOriginal($temp_filename)) { -- $this->server_error(_('Could not save avatar info'), 500); -- return false; -- } -- } -- header('HTTP/1.1 200 OK'); -- header('Content-type: text/plain'); -- print 'Updated profile'; -- print "\n"; -- return true; -- } -- } -+ if (!$profile->update($orig_profile)) { -+ $this->server_error(_('Could not save new profile info'), 500); -+ return false; -+ } else { -+ if ($avatar) { -+ $temp_filename = tempnam(sys_get_temp_dir(), 'listenee_avatar'); -+ copy($avatar, $temp_filename); -+ if (!$profile->setOriginal($temp_filename)) { -+ $this->server_error(_('Could not save avatar info'), 500); -+ return false; -+ } -+ } -+ header('HTTP/1.1 200 OK'); -+ header('Content-type: text/plain'); -+ print 'Updated profile'; -+ print "\n"; -+ return true; -+ } -+ } -hunk ./actions/userauthorization.php 27 -- function handle($args) { -- parent::handle($args); -+ function handle($args) { -+ parent::handle($args); -hunk ./actions/userauthorization.php 30 -- if ($_SERVER['REQUEST_METHOD'] == 'POST') { -- # CSRF protection -- $token = $this->trimmed('token'); -- if (!$token || $token != common_session_token()) { -- $req = $this->get_stored_request(); -- $this->show_form(_('There was a problem with your session token. Try again, please.'), $req); -- return; -- } -- # We've shown the form, now post user's choice -- $this->send_authorization(); -- } else { -- if (!common_logged_in()) { -- # Go log in, and then come back -- common_debug('saving URL for returnto', __FILE__); -- common_set_returnto($_SERVER['REQUEST_URI']); -+ if ($_SERVER['REQUEST_METHOD'] == 'POST') { -+ # CSRF protection -+ $token = $this->trimmed('token'); -+ if (!$token || $token != common_session_token()) { -+ $req = $this->get_stored_request(); -+ $this->show_form(_('There was a problem with your session token. Try again, please.'), $req); -+ return; -+ } -+ # We've shown the form, now post user's choice -+ $this->send_authorization(); -+ } else { -+ if (!common_logged_in()) { -+ # Go log in, and then come back -+ common_debug('saving URL for returnto', __FILE__); -+ common_set_returnto($_SERVER['REQUEST_URI']); -hunk ./actions/userauthorization.php 46 -- common_debug('redirecting to login', __FILE__); -- common_redirect(common_local_url('login')); -- return; -- } -- try { -- # this must be a new request -- common_debug('getting new request', __FILE__); -- $req = $this->get_new_request(); -- if (!$req) { -- $this->client_error(_('No request found!')); -- } -- common_debug('validating request', __FILE__); -- # XXX: only validate new requests, since nonce is one-time use -- $this->validate_request($req); -- common_debug('showing form', __FILE__); -- $this->store_request($req); -- $this->show_form($req); -- } catch (OAuthException $e) { -- $this->clear_request(); -- $this->client_error($e->getMessage()); -- return; -- } -+ common_debug('redirecting to login', __FILE__); -+ common_redirect(common_local_url('login')); -+ return; -+ } -+ try { -+ # this must be a new request -+ common_debug('getting new request', __FILE__); -+ $req = $this->get_new_request(); -+ if (!$req) { -+ $this->client_error(_('No request found!')); -+ } -+ common_debug('validating request', __FILE__); -+ # XXX: only validate new requests, since nonce is one-time use -+ $this->validate_request($req); -+ common_debug('showing form', __FILE__); -+ $this->store_request($req); -+ $this->show_form($req); -+ } catch (OAuthException $e) { -+ $this->clear_request(); -+ $this->client_error($e->getMessage()); -+ return; -+ } -hunk ./actions/userauthorization.php 69 -- } -- } -+ } -+ } -hunk ./actions/userauthorization.php 72 -- function show_form($req) { -+ function show_form($req) { -hunk ./actions/userauthorization.php 74 -- $nickname = $req->get_parameter('omb_listenee_nickname'); -- $profile = $req->get_parameter('omb_listenee_profile'); -- $license = $req->get_parameter('omb_listenee_license'); -- $fullname = $req->get_parameter('omb_listenee_fullname'); -- $homepage = $req->get_parameter('omb_listenee_homepage'); -- $bio = $req->get_parameter('omb_listenee_bio'); -- $location = $req->get_parameter('omb_listenee_location'); -- $avatar = $req->get_parameter('omb_listenee_avatar'); -+ $nickname = $req->get_parameter('omb_listenee_nickname'); -+ $profile = $req->get_parameter('omb_listenee_profile'); -+ $license = $req->get_parameter('omb_listenee_license'); -+ $fullname = $req->get_parameter('omb_listenee_fullname'); -+ $homepage = $req->get_parameter('omb_listenee_homepage'); -+ $bio = $req->get_parameter('omb_listenee_bio'); -+ $location = $req->get_parameter('omb_listenee_location'); -+ $avatar = $req->get_parameter('omb_listenee_avatar'); -hunk ./actions/userauthorization.php 83 -- common_show_header(_('Authorize subscription')); -- common_element('p', NULL, _('Please check these details to make sure '. -- 'that you want to subscribe to this user\'s notices. '. -- 'If you didn\'t just ask to subscribe to someone\'s notices, '. -- 'click "Cancel".')); -- common_element_start('div', 'profile'); -- if ($avatar) { -- common_element('img', array('src' => $avatar, -- 'class' => 'avatar profile', -- 'width' => AVATAR_PROFILE_SIZE, -- 'height' => AVATAR_PROFILE_SIZE, -- 'alt' => $nickname)); -- } -- common_element('a', array('href' => $profile, -- 'class' => 'external profile nickname'), -- $nickname); -- if ($fullname) { -- common_element_start('div', 'fullname'); -- if ($homepage) { -- common_element('a', array('href' => $homepage), -- $fullname); -- } else { -- common_text($fullname); -- } -- common_element_end('div'); -- } -- if ($location) { -- common_element('div', 'location', $location); -- } -- if ($bio) { -- common_element('div', 'bio', $bio); -- } -- common_element_start('div', 'license'); -- common_element('a', array('href' => $license, -- 'class' => 'license'), -- $license); -- common_element_end('div'); -- common_element_end('div'); -- common_element_start('form', array('method' => 'post', -- 'id' => 'userauthorization', -- 'name' => 'userauthorization', -- 'action' => common_local_url('userauthorization'))); -- common_hidden('token', common_session_token()); -- common_submit('accept', _('Accept')); -- common_submit('reject', _('Reject')); -- common_element_end('form'); -- common_show_footer(); -- } -+ common_show_header(_('Authorize subscription')); -+ common_element('p', NULL, _('Please check these details to make sure '. -+ 'that you want to subscribe to this user\'s notices. '. -+ 'If you didn\'t just ask to subscribe to someone\'s notices, '. -+ 'click "Cancel".')); -+ common_element_start('div', 'profile'); -+ if ($avatar) { -+ common_element('img', array('src' => $avatar, -+ 'class' => 'avatar profile', -+ 'width' => AVATAR_PROFILE_SIZE, -+ 'height' => AVATAR_PROFILE_SIZE, -+ 'alt' => $nickname)); -+ } -+ common_element('a', array('href' => $profile, -+ 'class' => 'external profile nickname'), -+ $nickname); -+ if ($fullname) { -+ common_element_start('div', 'fullname'); -+ if ($homepage) { -+ common_element('a', array('href' => $homepage), -+ $fullname); -+ } else { -+ common_text($fullname); -+ } -+ common_element_end('div'); -+ } -+ if ($location) { -+ common_element('div', 'location', $location); -+ } -+ if ($bio) { -+ common_element('div', 'bio', $bio); -+ } -+ common_element_start('div', 'license'); -+ common_element('a', array('href' => $license, -+ 'class' => 'license'), -+ $license); -+ common_element_end('div'); -+ common_element_end('div'); -+ common_element_start('form', array('method' => 'post', -+ 'id' => 'userauthorization', -+ 'name' => 'userauthorization', -+ 'action' => common_local_url('userauthorization'))); -+ common_hidden('token', common_session_token()); -+ common_submit('accept', _('Accept')); -+ common_submit('reject', _('Reject')); -+ common_element_end('form'); -+ common_show_footer(); -+ } -hunk ./actions/userauthorization.php 132 -- function send_authorization() { -- $req = $this->get_stored_request(); -+ function send_authorization() { -+ $req = $this->get_stored_request(); -hunk ./actions/userauthorization.php 135 -- if (!$req) { -- common_user_error(_('No authorization request!')); -- return; -- } -+ if (!$req) { -+ common_user_error(_('No authorization request!')); -+ return; -+ } -hunk ./actions/userauthorization.php 140 -- $callback = $req->get_parameter('oauth_callback'); -+ $callback = $req->get_parameter('oauth_callback'); -hunk ./actions/userauthorization.php 142 -- if ($this->arg('accept')) { -- if (!$this->authorize_token($req)) { -- $this->client_error(_('Error authorizing token')); -- } -- if (!$this->save_remote_profile($req)) { -- $this->client_error(_('Error saving remote profile')); -- } -- if (!$callback) { -- $this->show_accept_message($req->get_parameter('oauth_token')); -- } else { -- $params = array(); -- $params['oauth_token'] = $req->get_parameter('oauth_token'); -- $params['omb_version'] = OMB_VERSION_01; -- $user = User::staticGet('uri', $req->get_parameter('omb_listener')); -- $profile = $user->getProfile(); -- if (!$profile) { -- common_log_db_error($user, 'SELECT', __FILE__); -- $this->server_error(_('User without matching profile')); -- return; -- } -- $params['omb_listener_nickname'] = $user->nickname; -- $params['omb_listener_profile'] = common_local_url('showstream', -- array('nickname' => $user->nickname)); -- if ($profile->fullname) { -- $params['omb_listener_fullname'] = $profile->fullname; -- } -- if ($profile->homepage) { -- $params['omb_listener_homepage'] = $profile->homepage; -- } -- if ($profile->bio) { -- $params['omb_listener_bio'] = $profile->bio; -- } -- if ($profile->location) { -- $params['omb_listener_location'] = $profile->location; -- } -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -- if ($avatar) { -- $params['omb_listener_avatar'] = $avatar->url; -- } -- $parts = array(); -- foreach ($params as $k => $v) { -- $parts[] = $k . '=' . OAuthUtil::urlencodeRFC3986($v); -- } -- $query_string = implode('&', $parts); -- $parsed = parse_url($callback); -- $url = $callback . (($parsed['query']) ? '&' : '?') . $query_string; -- common_redirect($url, 303); -- } -- } else { -- if (!$callback) { -- $this->show_reject_message(); -- } else { -- # XXX: not 100% sure how to signal failure... just redirect without token? -- common_redirect($callback, 303); -- } -- } -- } -+ if ($this->arg('accept')) { -+ if (!$this->authorize_token($req)) { -+ $this->client_error(_('Error authorizing token')); -+ } -+ if (!$this->save_remote_profile($req)) { -+ $this->client_error(_('Error saving remote profile')); -+ } -+ if (!$callback) { -+ $this->show_accept_message($req->get_parameter('oauth_token')); -+ } else { -+ $params = array(); -+ $params['oauth_token'] = $req->get_parameter('oauth_token'); -+ $params['omb_version'] = OMB_VERSION_01; -+ $user = User::staticGet('uri', $req->get_parameter('omb_listener')); -+ $profile = $user->getProfile(); -+ if (!$profile) { -+ common_log_db_error($user, 'SELECT', __FILE__); -+ $this->server_error(_('User without matching profile')); -+ return; -+ } -+ $params['omb_listener_nickname'] = $user->nickname; -+ $params['omb_listener_profile'] = common_local_url('showstream', -+ array('nickname' => $user->nickname)); -+ if ($profile->fullname) { -+ $params['omb_listener_fullname'] = $profile->fullname; -+ } -+ if ($profile->homepage) { -+ $params['omb_listener_homepage'] = $profile->homepage; -+ } -+ if ($profile->bio) { -+ $params['omb_listener_bio'] = $profile->bio; -+ } -+ if ($profile->location) { -+ $params['omb_listener_location'] = $profile->location; -+ } -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ if ($avatar) { -+ $params['omb_listener_avatar'] = $avatar->url; -+ } -+ $parts = array(); -+ foreach ($params as $k => $v) { -+ $parts[] = $k . '=' . OAuthUtil::urlencodeRFC3986($v); -+ } -+ $query_string = implode('&', $parts); -+ $parsed = parse_url($callback); -+ $url = $callback . (($parsed['query']) ? '&' : '?') . $query_string; -+ common_redirect($url, 303); -+ } -+ } else { -+ if (!$callback) { -+ $this->show_reject_message(); -+ } else { -+ # XXX: not 100% sure how to signal failure... just redirect without token? -+ common_redirect($callback, 303); -+ } -+ } -+ } -hunk ./actions/userauthorization.php 200 -- function authorize_token(&$req) { -- $consumer_key = $req->get_parameter('oauth_consumer_key'); -- $token_field = $req->get_parameter('oauth_token'); -- common_debug('consumer key = "'.$consumer_key.'"', __FILE__); -- common_debug('token field = "'.$token_field.'"', __FILE__); -- $rt = new Token(); -- $rt->consumer_key = $consumer_key; -- $rt->tok = $token_field; -- $rt->type = 0; -- $rt->state = 0; -- common_debug('request token to look up: "'.print_r($rt,TRUE).'"'); -- if ($rt->find(true)) { -- common_debug('found request token to authorize', __FILE__); -- $orig_rt = clone($rt); -- $rt->state = 1; # Authorized but not used -- if ($rt->update($orig_rt)) { -- common_debug('updated request token so it is authorized', __FILE__); -- return true; -- } -- } -- return FALSE; -- } -+ function authorize_token(&$req) { -+ $consumer_key = $req->get_parameter('oauth_consumer_key'); -+ $token_field = $req->get_parameter('oauth_token'); -+ common_debug('consumer key = "'.$consumer_key.'"', __FILE__); -+ common_debug('token field = "'.$token_field.'"', __FILE__); -+ $rt = new Token(); -+ $rt->consumer_key = $consumer_key; -+ $rt->tok = $token_field; -+ $rt->type = 0; -+ $rt->state = 0; -+ common_debug('request token to look up: "'.print_r($rt,TRUE).'"'); -+ if ($rt->find(true)) { -+ common_debug('found request token to authorize', __FILE__); -+ $orig_rt = clone($rt); -+ $rt->state = 1; # Authorized but not used -+ if ($rt->update($orig_rt)) { -+ common_debug('updated request token so it is authorized', __FILE__); -+ return true; -+ } -+ } -+ return FALSE; -+ } -hunk ./actions/userauthorization.php 223 -- # XXX: refactor with similar code in finishremotesubscribe.php -+ # XXX: refactor with similar code in finishremotesubscribe.php -hunk ./actions/userauthorization.php 225 -- function save_remote_profile(&$req) { -- # FIXME: we should really do this when the consumer comes -- # back for an access token. If they never do, we've got stuff in a -- # weird state. -+ function save_remote_profile(&$req) { -+ # FIXME: we should really do this when the consumer comes -+ # back for an access token. If they never do, we've got stuff in a -+ # weird state. -hunk ./actions/userauthorization.php 230 -- $nickname = $req->get_parameter('omb_listenee_nickname'); -- $fullname = $req->get_parameter('omb_listenee_fullname'); -- $profile_url = $req->get_parameter('omb_listenee_profile'); -- $homepage = $req->get_parameter('omb_listenee_homepage'); -- $bio = $req->get_parameter('omb_listenee_bio'); -- $location = $req->get_parameter('omb_listenee_location'); -- $avatar_url = $req->get_parameter('omb_listenee_avatar'); -+ $nickname = $req->get_parameter('omb_listenee_nickname'); -+ $fullname = $req->get_parameter('omb_listenee_fullname'); -+ $profile_url = $req->get_parameter('omb_listenee_profile'); -+ $homepage = $req->get_parameter('omb_listenee_homepage'); -+ $bio = $req->get_parameter('omb_listenee_bio'); -+ $location = $req->get_parameter('omb_listenee_location'); -+ $avatar_url = $req->get_parameter('omb_listenee_avatar'); -hunk ./actions/userauthorization.php 238 -- $listenee = $req->get_parameter('omb_listenee'); -- $remote = Remote_profile::staticGet('uri', $listenee); -+ $listenee = $req->get_parameter('omb_listenee'); -+ $remote = Remote_profile::staticGet('uri', $listenee); -hunk ./actions/userauthorization.php 241 -- if ($remote) { -- $exists = true; -- $profile = Profile::staticGet($remote->id); -- $orig_remote = clone($remote); -- $orig_profile = clone($profile); -- } else { -- $exists = false; -- $remote = new Remote_profile(); -- $remote->uri = $listenee; -- $profile = new Profile(); -- } -+ if ($remote) { -+ $exists = true; -+ $profile = Profile::staticGet($remote->id); -+ $orig_remote = clone($remote); -+ $orig_profile = clone($profile); -+ } else { -+ $exists = false; -+ $remote = new Remote_profile(); -+ $remote->uri = $listenee; -+ $profile = new Profile(); -+ } -hunk ./actions/userauthorization.php 253 -- $profile->nickname = $nickname; -- $profile->profileurl = $profile_url; -+ $profile->nickname = $nickname; -+ $profile->profileurl = $profile_url; -hunk ./actions/userauthorization.php 256 -- if ($fullname) { -- $profile->fullname = $fullname; -- } -- if ($homepage) { -- $profile->homepage = $homepage; -- } -- if ($bio) { -- $profile->bio = $bio; -- } -- if ($location) { -- $profile->location = $location; -- } -+ if ($fullname) { -+ $profile->fullname = $fullname; -+ } -+ if ($homepage) { -+ $profile->homepage = $homepage; -+ } -+ if ($bio) { -+ $profile->bio = $bio; -+ } -+ if ($location) { -+ $profile->location = $location; -+ } -hunk ./actions/userauthorization.php 269 -- if ($exists) { -- $profile->update($orig_profile); -- } else { -- $profile->created = DB_DataObject_Cast::dateTime(); # current time -- $id = $profile->insert(); -- if (!$id) { -- return FALSE; -- } -- $remote->id = $id; -- } -+ if ($exists) { -+ $profile->update($orig_profile); -+ } else { -+ $profile->created = DB_DataObject_Cast::dateTime(); # current time -+ $id = $profile->insert(); -+ if (!$id) { -+ return FALSE; -+ } -+ $remote->id = $id; -+ } -hunk ./actions/userauthorization.php 280 -- if ($exists) { -- if (!$remote->update($orig_remote)) { -- return FALSE; -- } -- } else { -- $remote->created = DB_DataObject_Cast::dateTime(); # current time -- if (!$remote->insert()) { -- return FALSE; -- } -- } -+ if ($exists) { -+ if (!$remote->update($orig_remote)) { -+ return FALSE; -+ } -+ } else { -+ $remote->created = DB_DataObject_Cast::dateTime(); # current time -+ if (!$remote->insert()) { -+ return FALSE; -+ } -+ } -hunk ./actions/userauthorization.php 291 -- if ($avatar_url) { -- if (!$this->add_avatar($profile, $avatar_url)) { -- return FALSE; -- } -- } -+ if ($avatar_url) { -+ if (!$this->add_avatar($profile, $avatar_url)) { -+ return FALSE; -+ } -+ } -hunk ./actions/userauthorization.php 297 -- $user = common_current_user(); -- $datastore = omb_oauth_datastore(); -- $consumer = $this->get_consumer($datastore, $req); -- $token = $this->get_token($datastore, $req, $consumer); -+ $user = common_current_user(); -+ $datastore = omb_oauth_datastore(); -+ $consumer = $this->get_consumer($datastore, $req); -+ $token = $this->get_token($datastore, $req, $consumer); -hunk ./actions/userauthorization.php 302 -- $sub = new Subscription(); -- $sub->subscriber = $user->id; -- $sub->subscribed = $remote->id; -- $sub->token = $token->key; # NOTE: request token, not valid for use! -- $sub->created = DB_DataObject_Cast::dateTime(); # current time -+ $sub = new Subscription(); -+ $sub->subscriber = $user->id; -+ $sub->subscribed = $remote->id; -+ $sub->token = $token->key; # NOTE: request token, not valid for use! -+ $sub->created = DB_DataObject_Cast::dateTime(); # current time -hunk ./actions/userauthorization.php 308 -- if (!$sub->insert()) { -- return FALSE; -- } -+ if (!$sub->insert()) { -+ return FALSE; -+ } -hunk ./actions/userauthorization.php 312 -- return TRUE; -- } -+ return TRUE; -+ } -hunk ./actions/userauthorization.php 315 -- function add_avatar($profile, $url) { -- $temp_filename = tempnam(sys_get_temp_dir(), 'listenee_avatar'); -- copy($url, $temp_filename); -- return $profile->setOriginal($temp_filename); -- } -+ function add_avatar($profile, $url) { -+ $temp_filename = tempnam(sys_get_temp_dir(), 'listenee_avatar'); -+ copy($url, $temp_filename); -+ return $profile->setOriginal($temp_filename); -+ } -hunk ./actions/userauthorization.php 321 -- function show_accept_message($tok) { -- common_show_header(_('Subscription authorized')); -- common_element('p', NULL, -- _('The subscription has been authorized, but no '. -- 'callback URL was passed. Check with the site\'s instructions for '. -- 'details on how to authorize the subscription. Your subscription token is:')); -- common_element('blockquote', 'token', $tok); -- common_show_footer(); -- } -+ function show_accept_message($tok) { -+ common_show_header(_('Subscription authorized')); -+ common_element('p', NULL, -+ _('The subscription has been authorized, but no '. -+ 'callback URL was passed. Check with the site\'s instructions for '. -+ 'details on how to authorize the subscription. Your subscription token is:')); -+ common_element('blockquote', 'token', $tok); -+ common_show_footer(); -+ } -hunk ./actions/userauthorization.php 331 -- function show_reject_message($tok) { -- common_show_header(_('Subscription rejected')); -- common_element('p', NULL, -- _('The subscription has been rejected, but no '. -- 'callback URL was passed. Check with the site\'s instructions for '. -- 'details on how to fully reject the subscription.')); -- common_show_footer(); -- } -+ function show_reject_message($tok) { -+ common_show_header(_('Subscription rejected')); -+ common_element('p', NULL, -+ _('The subscription has been rejected, but no '. -+ 'callback URL was passed. Check with the site\'s instructions for '. -+ 'details on how to fully reject the subscription.')); -+ common_show_footer(); -+ } -hunk ./actions/userauthorization.php 340 -- function store_request($req) { -- common_ensure_session(); -- $_SESSION['userauthorizationrequest'] = $req; -- } -+ function store_request($req) { -+ common_ensure_session(); -+ $_SESSION['userauthorizationrequest'] = $req; -+ } -hunk ./actions/userauthorization.php 345 -- function clear_request() { -- common_ensure_session(); -- unset($_SESSION['userauthorizationrequest']); -- } -+ function clear_request() { -+ common_ensure_session(); -+ unset($_SESSION['userauthorizationrequest']); -+ } -hunk ./actions/userauthorization.php 350 -- function get_stored_request() { -- common_ensure_session(); -- $req = $_SESSION['userauthorizationrequest']; -- return $req; -- } -+ function get_stored_request() { -+ common_ensure_session(); -+ $req = $_SESSION['userauthorizationrequest']; -+ return $req; -+ } -hunk ./actions/userauthorization.php 356 -- function get_new_request() { -- common_remove_magic_from_request(); -- $req = OAuthRequest::from_request(); -- return $req; -- } -+ function get_new_request() { -+ common_remove_magic_from_request(); -+ $req = OAuthRequest::from_request(); -+ return $req; -+ } -hunk ./actions/userauthorization.php 362 -- # Throws an OAuthException if anything goes wrong -+ # Throws an OAuthException if anything goes wrong -hunk ./actions/userauthorization.php 364 -- function validate_request(&$req) { -- # OAuth stuff -- have to copy from OAuth.php since they're -- # all private methods, and there's no user-authentication method -- common_debug('checking version', __FILE__); -- $this->check_version($req); -- common_debug('getting datastore', __FILE__); -- $datastore = omb_oauth_datastore(); -- common_debug('getting consumer', __FILE__); -- $consumer = $this->get_consumer($datastore, $req); -- common_debug('getting token', __FILE__); -- $token = $this->get_token($datastore, $req, $consumer); -- common_debug('checking timestamp', __FILE__); -- $this->check_timestamp($req); -- common_debug('checking nonce', __FILE__); -- $this->check_nonce($datastore, $req, $consumer, $token); -- common_debug('checking signature', __FILE__); -- $this->check_signature($req, $consumer, $token); -- common_debug('validating omb stuff', __FILE__); -- $this->validate_omb($req); -- common_debug('done validating', __FILE__); -- return true; -- } -+ function validate_request(&$req) { -+ # OAuth stuff -- have to copy from OAuth.php since they're -+ # all private methods, and there's no user-authentication method -+ common_debug('checking version', __FILE__); -+ $this->check_version($req); -+ common_debug('getting datastore', __FILE__); -+ $datastore = omb_oauth_datastore(); -+ common_debug('getting consumer', __FILE__); -+ $consumer = $this->get_consumer($datastore, $req); -+ common_debug('getting token', __FILE__); -+ $token = $this->get_token($datastore, $req, $consumer); -+ common_debug('checking timestamp', __FILE__); -+ $this->check_timestamp($req); -+ common_debug('checking nonce', __FILE__); -+ $this->check_nonce($datastore, $req, $consumer, $token); -+ common_debug('checking signature', __FILE__); -+ $this->check_signature($req, $consumer, $token); -+ common_debug('validating omb stuff', __FILE__); -+ $this->validate_omb($req); -+ common_debug('done validating', __FILE__); -+ return true; -+ } -hunk ./actions/userauthorization.php 387 -- function validate_omb(&$req) { -- foreach (array('omb_version', 'omb_listener', 'omb_listenee', -- 'omb_listenee_profile', 'omb_listenee_nickname', -- 'omb_listenee_license') as $param) -- { -- if (!$req->get_parameter($param)) { -- throw new OAuthException("Required parameter '$param' not found"); -- } -- } -- # Now, OMB stuff -- $version = $req->get_parameter('omb_version'); -- if ($version != OMB_VERSION_01) { -- throw new OAuthException("OpenMicroBlogging version '$version' not supported"); -- } -- $listener = $req->get_parameter('omb_listener'); -- $user = User::staticGet('uri', $listener); -- if (!$user) { -- throw new OAuthException("Listener URI '$listener' not found here"); -- } -- $cur = common_current_user(); -- if ($cur->id != $user->id) { -- throw new OAuthException("Can't add for another user!"); -- } -- $listenee = $req->get_parameter('omb_listenee'); -- if (!Validate::uri($listenee) && -- !common_valid_tag($listenee)) { -- throw new OAuthException("Listenee URI '$listenee' not a recognizable URI"); -- } -- if (strlen($listenee) > 255) { -- throw new OAuthException("Listenee URI '$listenee' too long"); -- } -+ function validate_omb(&$req) { -+ foreach (array('omb_version', 'omb_listener', 'omb_listenee', -+ 'omb_listenee_profile', 'omb_listenee_nickname', -+ 'omb_listenee_license') as $param) -+ { -+ if (!$req->get_parameter($param)) { -+ throw new OAuthException("Required parameter '$param' not found"); -+ } -+ } -+ # Now, OMB stuff -+ $version = $req->get_parameter('omb_version'); -+ if ($version != OMB_VERSION_01) { -+ throw new OAuthException("OpenMicroBlogging version '$version' not supported"); -+ } -+ $listener = $req->get_parameter('omb_listener'); -+ $user = User::staticGet('uri', $listener); -+ if (!$user) { -+ throw new OAuthException("Listener URI '$listener' not found here"); -+ } -+ $cur = common_current_user(); -+ if ($cur->id != $user->id) { -+ throw new OAuthException("Can't add for another user!"); -+ } -+ $listenee = $req->get_parameter('omb_listenee'); -+ if (!Validate::uri($listenee) && -+ !common_valid_tag($listenee)) { -+ throw new OAuthException("Listenee URI '$listenee' not a recognizable URI"); -+ } -+ if (strlen($listenee) > 255) { -+ throw new OAuthException("Listenee URI '$listenee' too long"); -+ } -hunk ./actions/userauthorization.php 419 -- $other = User::staticGet('uri', $listenee); -- if ($other) { -- throw new OAuthException("Listenee URI '$listenee' is local user"); -- } -+ $other = User::staticGet('uri', $listenee); -+ if ($other) { -+ throw new OAuthException("Listenee URI '$listenee' is local user"); -+ } -hunk ./actions/userauthorization.php 424 -- $remote = Remote_profile::staticGet('uri', $listenee); -- if ($remote) { -- $sub = new Subscription(); -- $sub->subscriber = $user->id; -- $sub->subscribed = $remote->id; -- if ($sub->find(TRUE)) { -- throw new OAuthException("Already subscribed to user!"); -- } -- } -- $nickname = $req->get_parameter('omb_listenee_nickname'); -- if (!Validate::string($nickname, array('min_length' => 1, -- 'max_length' => 64, -- 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -- throw new OAuthException('Nickname must have only letters and numbers and no spaces.'); -- } -- $profile = $req->get_parameter('omb_listenee_profile'); -- if (!common_valid_http_url($profile)) { -- throw new OAuthException("Invalid profile URL '$profile'."); -- } -+ $remote = Remote_profile::staticGet('uri', $listenee); -+ if ($remote) { -+ $sub = new Subscription(); -+ $sub->subscriber = $user->id; -+ $sub->subscribed = $remote->id; -+ if ($sub->find(TRUE)) { -+ throw new OAuthException("Already subscribed to user!"); -+ } -+ } -+ $nickname = $req->get_parameter('omb_listenee_nickname'); -+ if (!Validate::string($nickname, array('min_length' => 1, -+ 'max_length' => 64, -+ 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { -+ throw new OAuthException('Nickname must have only letters and numbers and no spaces.'); -+ } -+ $profile = $req->get_parameter('omb_listenee_profile'); -+ if (!common_valid_http_url($profile)) { -+ throw new OAuthException("Invalid profile URL '$profile'."); -+ } -hunk ./actions/userauthorization.php 444 -- if ($profile == common_local_url('showstream', array('nickname' => $nickname))) { -- throw new OAuthException("Profile URL '$profile' is for a local user."); -- } -+ if ($profile == common_local_url('showstream', array('nickname' => $nickname))) { -+ throw new OAuthException("Profile URL '$profile' is for a local user."); -+ } -hunk ./actions/userauthorization.php 448 -- $license = $req->get_parameter('omb_listenee_license'); -- if (!common_valid_http_url($license)) { -- throw new OAuthException("Invalid license URL '$license'."); -- } -- $site_license = common_config('license', 'url'); -- if (!common_compatible_license($license, $site_license)) { -- throw new OAuthException("Listenee stream license '$license' not compatible with site license '$site_license'."); -- } -- # optional stuff -- $fullname = $req->get_parameter('omb_listenee_fullname'); -- if ($fullname && strlen($fullname) > 255) { -- throw new OAuthException("Full name '$fullname' too long."); -- } -- $homepage = $req->get_parameter('omb_listenee_homepage'); -- if ($homepage && (!common_valid_http_url($homepage) || strlen($homepage) > 255)) { -- throw new OAuthException("Invalid homepage '$homepage'"); -- } -- $bio = $req->get_parameter('omb_listenee_bio'); -- if ($bio && strlen($bio) > 140) { -- throw new OAuthException("Bio too long '$bio'"); -- } -- $location = $req->get_parameter('omb_listenee_location'); -- if ($location && strlen($location) > 255) { -- throw new OAuthException("Location too long '$location'"); -- } -- $avatar = $req->get_parameter('omb_listenee_avatar'); -- if ($avatar) { -- if (!common_valid_http_url($avatar) || strlen($avatar) > 255) { -- throw new OAuthException("Invalid avatar URL '$avatar'"); -- } -- $size = @getimagesize($avatar); -- if (!$size) { -- throw new OAuthException("Can't read avatar URL '$avatar'"); -- } -- if ($size[0] != AVATAR_PROFILE_SIZE || $size[1] != AVATAR_PROFILE_SIZE) { -- throw new OAuthException("Wrong size image at '$avatar'"); -- } -- if (!in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, -- IMAGETYPE_PNG))) { -- throw new OAuthException("Wrong image type for '$avatar'"); -- } -- } -- $callback = $req->get_parameter('oauth_callback'); -- if ($callback && !common_valid_http_url($callback)) { -- throw new OAuthException("Invalid callback URL '$callback'"); -- } -- if ($callback && $callback == common_local_url('finishremotesubscribe')) { -- throw new OAuthException("Callback URL '$callback' is for local site."); -- } -- } -+ $license = $req->get_parameter('omb_listenee_license'); -+ if (!common_valid_http_url($license)) { -+ throw new OAuthException("Invalid license URL '$license'."); -+ } -+ $site_license = common_config('license', 'url'); -+ if (!common_compatible_license($license, $site_license)) { -+ throw new OAuthException("Listenee stream license '$license' not compatible with site license '$site_license'."); -+ } -+ # optional stuff -+ $fullname = $req->get_parameter('omb_listenee_fullname'); -+ if ($fullname && strlen($fullname) > 255) { -+ throw new OAuthException("Full name '$fullname' too long."); -+ } -+ $homepage = $req->get_parameter('omb_listenee_homepage'); -+ if ($homepage && (!common_valid_http_url($homepage) || strlen($homepage) > 255)) { -+ throw new OAuthException("Invalid homepage '$homepage'"); -+ } -+ $bio = $req->get_parameter('omb_listenee_bio'); -+ if ($bio && strlen($bio) > 140) { -+ throw new OAuthException("Bio too long '$bio'"); -+ } -+ $location = $req->get_parameter('omb_listenee_location'); -+ if ($location && strlen($location) > 255) { -+ throw new OAuthException("Location too long '$location'"); -+ } -+ $avatar = $req->get_parameter('omb_listenee_avatar'); -+ if ($avatar) { -+ if (!common_valid_http_url($avatar) || strlen($avatar) > 255) { -+ throw new OAuthException("Invalid avatar URL '$avatar'"); -+ } -+ $size = @getimagesize($avatar); -+ if (!$size) { -+ throw new OAuthException("Can't read avatar URL '$avatar'"); -+ } -+ if ($size[0] != AVATAR_PROFILE_SIZE || $size[1] != AVATAR_PROFILE_SIZE) { -+ throw new OAuthException("Wrong size image at '$avatar'"); -+ } -+ if (!in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, -+ IMAGETYPE_PNG))) { -+ throw new OAuthException("Wrong image type for '$avatar'"); -+ } -+ } -+ $callback = $req->get_parameter('oauth_callback'); -+ if ($callback && !common_valid_http_url($callback)) { -+ throw new OAuthException("Invalid callback URL '$callback'"); -+ } -+ if ($callback && $callback == common_local_url('finishremotesubscribe')) { -+ throw new OAuthException("Callback URL '$callback' is for local site."); -+ } -+ } -hunk ./actions/userauthorization.php 499 -- # Snagged from OAuthServer -+ # Snagged from OAuthServer -hunk ./actions/userauthorization.php 501 -- function check_version(&$req) { -- $version = $req->get_parameter("oauth_version"); -- if (!$version) { -- $version = 1.0; -- } -- if ($version != 1.0) { -- throw new OAuthException("OAuth version '$version' not supported"); -- } -- return $version; -- } -+ function check_version(&$req) { -+ $version = $req->get_parameter("oauth_version"); -+ if (!$version) { -+ $version = 1.0; -+ } -+ if ($version != 1.0) { -+ throw new OAuthException("OAuth version '$version' not supported"); -+ } -+ return $version; -+ } -hunk ./actions/userauthorization.php 512 -- # Snagged from OAuthServer -+ # Snagged from OAuthServer -hunk ./actions/userauthorization.php 514 -- function get_consumer($datastore, $req) { -- $consumer_key = @$req->get_parameter("oauth_consumer_key"); -- if (!$consumer_key) { -- throw new OAuthException("Invalid consumer key"); -- } -+ function get_consumer($datastore, $req) { -+ $consumer_key = @$req->get_parameter("oauth_consumer_key"); -+ if (!$consumer_key) { -+ throw new OAuthException("Invalid consumer key"); -+ } -hunk ./actions/userauthorization.php 520 -- $consumer = $datastore->lookup_consumer($consumer_key); -- if (!$consumer) { -- throw new OAuthException("Invalid consumer"); -- } -- return $consumer; -- } -+ $consumer = $datastore->lookup_consumer($consumer_key); -+ if (!$consumer) { -+ throw new OAuthException("Invalid consumer"); -+ } -+ return $consumer; -+ } -hunk ./actions/userauthorization.php 527 -- # Mostly cadged from OAuthServer -+ # Mostly cadged from OAuthServer -hunk ./actions/userauthorization.php 529 -- function get_token($datastore, &$req, $consumer) {/*{{{*/ -- $token_field = @$req->get_parameter('oauth_token'); -- $token = $datastore->lookup_token($consumer, 'request', $token_field); -- if (!$token) { -- throw new OAuthException("Invalid $token_type token: $token_field"); -- } -- return $token; -- } -+ function get_token($datastore, &$req, $consumer) {/*{{{*/ -+ $token_field = @$req->get_parameter('oauth_token'); -+ $token = $datastore->lookup_token($consumer, 'request', $token_field); -+ if (!$token) { -+ throw new OAuthException("Invalid $token_type token: $token_field"); -+ } -+ return $token; -+ } -hunk ./actions/userauthorization.php 538 -- function check_timestamp(&$req) { -- $timestamp = @$req->get_parameter('oauth_timestamp'); -- $now = time(); -- if ($now - $timestamp > TIMESTAMP_THRESHOLD) { -- throw new OAuthException("Expired timestamp, yours $timestamp, ours $now"); -- } -- } -+ function check_timestamp(&$req) { -+ $timestamp = @$req->get_parameter('oauth_timestamp'); -+ $now = time(); -+ if ($now - $timestamp > TIMESTAMP_THRESHOLD) { -+ throw new OAuthException("Expired timestamp, yours $timestamp, ours $now"); -+ } -+ } -hunk ./actions/userauthorization.php 546 -- # NOTE: don't call twice on the same request; will fail! -- function check_nonce(&$datastore, &$req, $consumer, $token) { -- $timestamp = @$req->get_parameter('oauth_timestamp'); -- $nonce = @$req->get_parameter('oauth_nonce'); -- $found = $datastore->lookup_nonce($consumer, $token, $nonce, $timestamp); -- if ($found) { -- throw new OAuthException("Nonce already used"); -- } -- return true; -- } -+ # NOTE: don't call twice on the same request; will fail! -+ function check_nonce(&$datastore, &$req, $consumer, $token) { -+ $timestamp = @$req->get_parameter('oauth_timestamp'); -+ $nonce = @$req->get_parameter('oauth_nonce'); -+ $found = $datastore->lookup_nonce($consumer, $token, $nonce, $timestamp); -+ if ($found) { -+ throw new OAuthException("Nonce already used"); -+ } -+ return true; -+ } -hunk ./actions/userauthorization.php 557 -- function check_signature(&$req, $consumer, $token) { -- $signature_method = $this->get_signature_method($req); -- $signature = $req->get_parameter('oauth_signature'); -- $valid_sig = $signature_method->check_signature($req, -- $consumer, -- $token, -- $signature); -- if (!$valid_sig) { -- throw new OAuthException("Invalid signature"); -- } -- } -+ function check_signature(&$req, $consumer, $token) { -+ $signature_method = $this->get_signature_method($req); -+ $signature = $req->get_parameter('oauth_signature'); -+ $valid_sig = $signature_method->check_signature($req, -+ $consumer, -+ $token, -+ $signature); -+ if (!$valid_sig) { -+ throw new OAuthException("Invalid signature"); -+ } -+ } -hunk ./actions/userauthorization.php 569 -- function get_signature_method(&$req) { -- $signature_method = @$req->get_parameter("oauth_signature_method"); -- if (!$signature_method) { -- $signature_method = "PLAINTEXT"; -- } -- if ($signature_method != 'HMAC-SHA1') { -- throw new OAuthException("Signature method '$signature_method' not supported."); -- } -- return omb_hmac_sha1(); -- } -+ function get_signature_method(&$req) { -+ $signature_method = @$req->get_parameter("oauth_signature_method"); -+ if (!$signature_method) { -+ $signature_method = "PLAINTEXT"; -+ } -+ if ($signature_method != 'HMAC-SHA1') { -+ throw new OAuthException("Signature method '$signature_method' not supported."); -+ } -+ return omb_hmac_sha1(); -+ } -hunk ./actions/userbyid.php 23 -- -- function is_readonly() { -- return true; -- } -- -+ -+ function is_readonly() { -+ return true; -+ } -+ -hunk ./actions/userbyid.php 32 -- $this->client_error(_('No id.')); -- } -- $user =& User::staticGet($id); -- if (!$user) { -- $this->client_error(_('No such user.')); -+ $this->client_error(_('No id.')); -+ } -+ $user =& User::staticGet($id); -+ if (!$user) { -+ $this->client_error(_('No such user.')); -hunk ./actions/userbyid.php 42 -- $type = common_negotiate_type(common_accept_to_prefs($httpaccept), -+ $type = common_negotiate_type(common_accept_to_prefs($httpaccept), -hunk ./actions/userbyid.php 44 -- $page = $type == 'application/rdf+xml' ? 'foaf' : 'showstream'; -+ $page = $type == 'application/rdf+xml' ? 'foaf' : 'showstream'; -hunk ./actions/userbyid.php 46 -- $url = common_local_url($page, array('nickname' => $user->nickname)); -- common_redirect($url, 303); -- } -+ $url = common_local_url($page, array('nickname' => $user->nickname)); -+ common_redirect($url, 303); -+ } +- common_element('h3', NULL, _('Twitter Friends')); ++ common_element('h3', null, _('Twitter Friends')); +hunk ./actions/unblock.php 24 +- var $profile = NULL; ++ var $profile = null; +hunk ./actions/userauthorization.php 84 +- common_element('p', NULL, _('Please check these details to make sure '. ++ common_element('p', null, _('Please check these details to make sure '. +hunk ./actions/userauthorization.php 323 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/userauthorization.php 333 +- common_element('p', NULL, ++ common_element('p', null, +hunk ./actions/userbyid.php 41 +- $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : NULL; ++ $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null; hunk ./actions/userrss.php 28 -- var $user = NULL; -+ var $user = NULL; -hunk ./actions/userrss.php 30 -- function init() { -- $nickname = $this->trimmed('nickname'); -- $this->user = User::staticGet('nickname', $nickname); -+ function init() { -+ $nickname = $this->trimmed('nickname'); -+ $this->user = User::staticGet('nickname', $nickname); -hunk ./actions/userrss.php 34 -- if (!$this->user) { -- common_user_error(_('No such user.')); -- return false; -- } else { -- return true; -- } -- } -+ if (!$this->user) { -+ common_user_error(_('No such user.')); -+ return false; -+ } else { -+ return true; -+ } -+ } -hunk ./actions/userrss.php 42 -- function get_notices($limit=0) { -+ function get_notices($limit=0) { -hunk ./actions/userrss.php 44 -- $user = $this->user; -- -- if (is_null($user)) { -- return NULL; -- } -- -- $notice = $user->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit); -- -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ $user = $this->user; -+ -+ if (is_null($user)) { -+ return NULL; -+ } -+ -+ $notice = $user->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit); -+ -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./actions/userrss.php 56 -- return $notices; -- } -+ return $notices; -+ } -hunk ./actions/userrss.php 59 -- function get_channel() { -- $user = $this->user; -- $profile = $user->getProfile(); -- $c = array('url' => common_local_url('userrss', -- array('nickname' => -- $user->nickname)), -- 'title' => $user->nickname, -- 'link' => $profile->profileurl, -- 'description' => sprintf(_('Microblog by %s'), $user->nickname)); -- return $c; -- } -+ function get_channel() { -+ $user = $this->user; -+ $profile = $user->getProfile(); -+ $c = array('url' => common_local_url('userrss', -+ array('nickname' => -+ $user->nickname)), -+ 'title' => $user->nickname, -+ 'link' => $profile->profileurl, -+ 'description' => sprintf(_('Microblog by %s'), $user->nickname)); -+ return $c; -+ } -hunk ./actions/userrss.php 71 -- function get_image() { -- $user = $this->user; -- $profile = $user->getProfile(); -- if (!$profile) { -- common_log_db_error($user, 'SELECT', __FILE__); -- $this->server_error(_('User without matching profile')); -- return NULL; -- } -- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -- return ($avatar) ? $avatar->url : NULL; -- } -+ function get_image() { -+ $user = $this->user; -+ $profile = $user->getProfile(); -+ if (!$profile) { -+ common_log_db_error($user, 'SELECT', __FILE__); -+ $this->server_error(_('User without matching profile')); -+ return NULL; -+ } -+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); -+ return ($avatar) ? $avatar->url : NULL; -+ } -hunk ./actions/userrss.php 83 -- # override parent to add X-SUP-ID URL -- -- function init_rss($limit=0) { -- $url = common_local_url('sup', NULL, $this->user->id); -- header('X-SUP-ID: '.$url); -- parent::init_rss($limit); -- } -+ # override parent to add X-SUP-ID URL -+ -+ function init_rss($limit=0) { -+ $url = common_local_url('sup', NULL, $this->user->id); -+ header('X-SUP-ID: '.$url); -+ parent::init_rss($limit); -+ } -hunk ./actions/xrds.php 26 -- function is_readonly() { -- return true; -- } -+ function is_readonly() { -+ return true; -+ } -hunk ./actions/xrds.php 30 -- function handle($args) { -- parent::handle($args); -- $nickname = $this->trimmed('nickname'); -- $user = User::staticGet('nickname', $nickname); -- if (!$user) { -- common_user_error(_('No such user.')); -- return; -- } -- $this->show_xrds($user); -- } -+ function handle($args) { -+ parent::handle($args); -+ $nickname = $this->trimmed('nickname'); -+ $user = User::staticGet('nickname', $nickname); -+ if (!$user) { -+ common_user_error(_('No such user.')); -+ return; -+ } -+ $this->show_xrds($user); -+ } -hunk ./actions/xrds.php 41 -- function show_xrds($user) { -+ function show_xrds($user) { -hunk ./actions/xrds.php 43 -- header('Content-Type: application/xrds+xml'); -+ header('Content-Type: application/xrds+xml'); -hunk ./actions/xrds.php 45 -- common_start_xml(); -- common_element_start('XRDS', array('xmlns' => 'xri://$xrds')); -+ common_start_xml(); -+ common_element_start('XRDS', array('xmlns' => 'xri://$xrds')); -hunk ./actions/xrds.php 48 -- common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -- 'xml:id' => 'oauth', -- 'xmlns:simple' => 'http://xrds-simple.net/core/1.0', -- 'version' => '2.0')); -+ common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -+ 'xml:id' => 'oauth', -+ 'xmlns:simple' => 'http://xrds-simple.net/core/1.0', -+ 'version' => '2.0')); +- var $user = NULL; ++ var $user = null; +hunk ./actions/userrss.php 47 +- return NULL; ++ return null; +hunk ./actions/userrss.php 77 +- return NULL; ++ return null; +hunk ./actions/userrss.php 80 +- return ($avatar) ? $avatar->url : NULL; ++ return ($avatar) ? $avatar->url : null; +hunk ./actions/userrss.php 86 +- $url = common_local_url('sup', NULL, $this->user->id); ++ $url = common_local_url('sup', null, $this->user->id); hunk ./actions/xrds.php 53 -- common_element('Type', NULL, 'xri://$xrds*simple'); -+ common_element('Type', NULL, 'xri://$xrds*simple'); -hunk ./actions/xrds.php 55 -- $this->show_service(OAUTH_ENDPOINT_REQUEST, -- common_local_url('requesttoken'), -- array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -- array(OAUTH_HMAC_SHA1), -- $user->uri); -+ $this->show_service(OAUTH_ENDPOINT_REQUEST, -+ common_local_url('requesttoken'), -+ array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -+ array(OAUTH_HMAC_SHA1), -+ $user->uri); -hunk ./actions/xrds.php 61 -- $this->show_service(OAUTH_ENDPOINT_AUTHORIZE, -- common_local_url('userauthorization'), -- array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -- array(OAUTH_HMAC_SHA1)); -+ $this->show_service(OAUTH_ENDPOINT_AUTHORIZE, -+ common_local_url('userauthorization'), -+ array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -+ array(OAUTH_HMAC_SHA1)); -hunk ./actions/xrds.php 66 -- $this->show_service(OAUTH_ENDPOINT_ACCESS, -- common_local_url('accesstoken'), -- array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -- array(OAUTH_HMAC_SHA1)); -+ $this->show_service(OAUTH_ENDPOINT_ACCESS, -+ common_local_url('accesstoken'), -+ array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -+ array(OAUTH_HMAC_SHA1)); -hunk ./actions/xrds.php 71 -- $this->show_service(OAUTH_ENDPOINT_RESOURCE, -- NULL, -- array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -- array(OAUTH_HMAC_SHA1)); -+ $this->show_service(OAUTH_ENDPOINT_RESOURCE, -+ NULL, -+ array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY), -+ array(OAUTH_HMAC_SHA1)); -hunk ./actions/xrds.php 76 -- common_element_end('XRD'); -+ common_element_end('XRD'); -hunk ./actions/xrds.php 78 -- # XXX: decide whether to include user's ID/nickname in postNotice URL -+ # XXX: decide whether to include user's ID/nickname in postNotice URL -hunk ./actions/xrds.php 80 -- common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -- 'xml:id' => 'omb', -- 'xmlns:simple' => 'http://xrds-simple.net/core/1.0', -- 'version' => '2.0')); -+ common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -+ 'xml:id' => 'omb', -+ 'xmlns:simple' => 'http://xrds-simple.net/core/1.0', -+ 'version' => '2.0')); +- common_element('Type', NULL, 'xri://$xrds*simple'); ++ common_element('Type', null, 'xri://$xrds*simple'); +hunk ./actions/xrds.php 72 +- NULL, ++ null, hunk ./actions/xrds.php 85 -- common_element('Type', NULL, 'xri://$xrds*simple'); -+ common_element('Type', NULL, 'xri://$xrds*simple'); -hunk ./actions/xrds.php 87 -- $this->show_service(OMB_ENDPOINT_POSTNOTICE, -- common_local_url('postnotice')); -+ $this->show_service(OMB_ENDPOINT_POSTNOTICE, -+ common_local_url('postnotice')); -hunk ./actions/xrds.php 90 -- $this->show_service(OMB_ENDPOINT_UPDATEPROFILE, -- common_local_url('updateprofile')); -+ $this->show_service(OMB_ENDPOINT_UPDATEPROFILE, -+ common_local_url('updateprofile')); -hunk ./actions/xrds.php 93 -- common_element_end('XRD'); -+ common_element_end('XRD'); -hunk ./actions/xrds.php 95 -- common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -- 'version' => '2.0')); -+ common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)', -+ 'version' => '2.0')); +- common_element('Type', NULL, 'xri://$xrds*simple'); ++ common_element('Type', null, 'xri://$xrds*simple'); hunk ./actions/xrds.php 98 -- common_element('Type', NULL, 'xri://$xrds*simple'); -+ common_element('Type', NULL, 'xri://$xrds*simple'); -hunk ./actions/xrds.php 100 -- $this->show_service(OAUTH_DISCOVERY, -- '#oauth'); -- $this->show_service(OMB_NAMESPACE, -- '#omb'); -+ $this->show_service(OAUTH_DISCOVERY, -+ '#oauth'); -+ $this->show_service(OMB_NAMESPACE, -+ '#omb'); -hunk ./actions/xrds.php 105 -- common_element_end('XRD'); -+ common_element_end('XRD'); -hunk ./actions/xrds.php 107 -- common_element_end('XRDS'); -- common_end_xml(); -- } -+ common_element_end('XRDS'); -+ common_end_xml(); -+ } +- common_element('Type', NULL, 'xri://$xrds*simple'); ++ common_element('Type', null, 'xri://$xrds*simple'); hunk ./actions/xrds.php 111 -- function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) { -- common_element_start('Service'); -- if ($uri) { -- common_element('URI', NULL, $uri); -- } -- common_element('Type', NULL, $type); -- if ($params) { -- foreach ($params as $param) { -- common_element('Type', NULL, $param); -- } -- } -- if ($sigs) { -- foreach ($sigs as $sig) { -- common_element('Type', NULL, $sig); -- } -- } -- if ($localId) { -- common_element('LocalID', NULL, $localId); -- } -- common_element_end('Service'); -- } -+ function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) { -+ common_element_start('Service'); -+ if ($uri) { -+ common_element('URI', NULL, $uri); -+ } -+ common_element('Type', NULL, $type); -+ if ($params) { -+ foreach ($params as $param) { -+ common_element('Type', NULL, $param); -+ } -+ } -+ if ($sigs) { -+ foreach ($sigs as $sig) { -+ common_element('Type', NULL, $sig); -+ } -+ } -+ if ($localId) { -+ common_element('LocalID', NULL, $localId); -+ } -+ common_element_end('Service'); -+ } -hunk ./classes/Avatar.php 29 -- # We clean up the file, too -+ # We clean up the file, too -hunk ./classes/Avatar.php 31 -- function delete() { -- $filename = $this->filename; -- if (parent::delete()) { -- @unlink(common_avatar_path($filename)); -- } -- } -+ function delete() { -+ $filename = $this->filename; -+ if (parent::delete()) { -+ @unlink(common_avatar_path($filename)); -+ } -+ } -hunk ./classes/Avatar.php 38 -- # Create and save scaled version of this avatar -- # XXX: maybe break into different methods -+ # Create and save scaled version of this avatar -+ # XXX: maybe break into different methods -hunk ./classes/Avatar.php 41 -- function scale($size) { -+ function scale($size) { -hunk ./classes/Avatar.php 43 -- $image_s = imagecreatetruecolor($size, $size); -- $image_a = $this->to_image(); -- $square = min($this->width, $this->height); -+ $image_s = imagecreatetruecolor($size, $size); -+ $image_a = $this->to_image(); -+ $square = min($this->width, $this->height); -hunk ./classes/Avatar.php 49 -- imagecopyresampled($image_s, $image_a, 0, 0, 0, 0, -- $size, $size, $square, $square); -+ imagecopyresampled($image_s, $image_a, 0, 0, 0, 0, -+ $size, $size, $square, $square); -hunk ./classes/Avatar.php 52 -- $ext = ($this->mediattype == 'image/jpeg') ? ".jpeg" : ".png"; -+ $ext = ($this->mediattype == 'image/jpeg') ? ".jpeg" : ".png"; -hunk ./classes/Avatar.php 54 -- $filename = common_avatar_filename($this->profile_id, $ext, $size, common_timestamp()); -+ $filename = common_avatar_filename($this->profile_id, $ext, $size, common_timestamp()); -hunk ./classes/Avatar.php 56 -- if ($this->mediatype == 'image/jpeg') { -- imagejpeg($image_s, common_avatar_path($filename)); -- } else { -- imagepng($image_s, common_avatar_path($filename)); -- } -+ if ($this->mediatype == 'image/jpeg') { -+ imagejpeg($image_s, common_avatar_path($filename)); -+ } else { -+ imagepng($image_s, common_avatar_path($filename)); -+ } -hunk ./classes/Avatar.php 62 -- $scaled = DB_DataObject::factory('avatar'); -- $scaled->profile_id = $this->profile_id; -- $scaled->width = $size; -- $scaled->height = $size; -- $scaled->original = false; -- $scaled->mediatype = ($this->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png'; -- $scaled->filename = $filename; -- $scaled->url = common_avatar_url($filename); -- $scaled->created = DB_DataObject_Cast::dateTime(); # current time -+ $scaled = DB_DataObject::factory('avatar'); -+ $scaled->profile_id = $this->profile_id; -+ $scaled->width = $size; -+ $scaled->height = $size; -+ $scaled->original = false; -+ $scaled->mediatype = ($this->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png'; -+ $scaled->filename = $filename; -+ $scaled->url = common_avatar_url($filename); -+ $scaled->created = DB_DataObject_Cast::dateTime(); # current time -hunk ./classes/Avatar.php 72 -- if ($scaled->insert()) { -- return $scaled; -- } else { -- return NULL; -- } -- } -+ if ($scaled->insert()) { -+ return $scaled; -+ } else { -+ return NULL; -+ } -+ } -hunk ./classes/Avatar.php 79 -- function to_image() { -- $filepath = common_avatar_path($this->filename); -- if ($this->mediatype == 'image/gif') { -- return imagecreatefromgif($filepath); -- } else if ($this->mediatype == 'image/jpeg') { -- return imagecreatefromjpeg($filepath); -- } else if ($this->mediatype == 'image/png') { -- return imagecreatefrompng($filepath); -- } else { -- return NULL; -- } -- } -- -- function &pkeyGet($kv) { -- return Memcached_DataObject::pkeyGet('Avatar', $kv); -- } -+ function to_image() { -+ $filepath = common_avatar_path($this->filename); -+ if ($this->mediatype == 'image/gif') { -+ return imagecreatefromgif($filepath); -+ } else if ($this->mediatype == 'image/jpeg') { -+ return imagecreatefromjpeg($filepath); -+ } else if ($this->mediatype == 'image/png') { -+ return imagecreatefrompng($filepath); -+ } else { -+ return NULL; -+ } -+ } -+ -+ function &pkeyGet($kv) { -+ return Memcached_DataObject::pkeyGet('Avatar', $kv); -+ } -hunk ./classes/Channel.php 23 -- -- function on($user) { -- return false; -- } -+ -+ function on($user) { -+ return false; -+ } -hunk ./classes/Channel.php 28 -- function off($user) { -- return false; -- } -+ function off($user) { -+ return false; -+ } -hunk ./classes/Channel.php 32 -- function output($user, $text) { -- return false; -- } -- -- function error($user, $text) { -- return false; -- } -- -- function source() { -- return NULL; -- } -+ function output($user, $text) { -+ return false; -+ } -+ -+ function error($user, $text) { -+ return false; -+ } -+ -+ function source() { -+ return NULL; -+ } +- function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) { ++ function show_service($type, $uri, $params=null, $sigs=null, $localId=null) { +hunk ./actions/xrds.php 114 +- common_element('URI', NULL, $uri); ++ common_element('URI', null, $uri); +hunk ./actions/xrds.php 116 +- common_element('Type', NULL, $type); ++ common_element('Type', null, $type); +hunk ./actions/xrds.php 119 +- common_element('Type', NULL, $param); ++ common_element('Type', null, $param); +hunk ./actions/xrds.php 124 +- common_element('Type', NULL, $sig); ++ common_element('Type', null, $sig); +hunk ./actions/xrds.php 128 +- common_element('LocalID', NULL, $localId); ++ common_element('LocalID', null, $localId); +hunk ./classes/Avatar.php 24 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Avatar',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Avatar',$k,$v); } +hunk ./classes/Avatar.php 75 +- return NULL; ++ return null; +hunk ./classes/Avatar.php 88 +- return NULL; ++ return null; +hunk ./classes/Channel.php 41 +- return NULL; ++ return null; hunk ./classes/Channel.php 47 -- var $conn = NULL; -- -- function source() { -- return 'xmpp'; -- } -- -- function __construct($conn) { -- $this->conn = $conn; -- } -- -- function on($user) { -- return $this->set_notify($user, 1); -- } -- -- function off($user) { -- return $this->set_notify($user, 0); -- } -+ var $conn = NULL; -+ -+ function source() { -+ return 'xmpp'; -+ } -+ -+ function __construct($conn) { -+ $this->conn = $conn; -+ } -+ -+ function on($user) { -+ return $this->set_notify($user, 1); -+ } -+ -+ function off($user) { -+ return $this->set_notify($user, 0); -+ } -hunk ./classes/Channel.php 65 -- function output($user, $text) { -- $text = '['.common_config('site', 'name') . '] ' . $text; -- jabber_send_message($user->jabber, $text); -- } -- -- function error($user, $text) { -- $text = '['.common_config('site', 'name') . '] ' . $text; -- jabber_send_message($user->jabber, $text); -- } -- -- function set_notify(&$user, $notify) { -- $orig = clone($user); -- $user->jabbernotify = $notify; -- $result = $user->update($orig); -- if (!$result) { -- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -- common_log(LOG_ERR, -- 'Could not set notify flag to ' . $notify . -- ' for user ' . common_log_objstring($user) . -- ': ' . $last_error->message); -- return false; -- } else { -- common_log(LOG_INFO, -- 'User ' . $user->nickname . ' set notify flag to ' . $notify); -- return true; -- } -- } -+ function output($user, $text) { -+ $text = '['.common_config('site', 'name') . '] ' . $text; -+ jabber_send_message($user->jabber, $text); -+ } -+ -+ function error($user, $text) { -+ $text = '['.common_config('site', 'name') . '] ' . $text; -+ jabber_send_message($user->jabber, $text); -+ } -+ -+ function set_notify(&$user, $notify) { -+ $orig = clone($user); -+ $user->jabbernotify = $notify; -+ $result = $user->update($orig); -+ if (!$result) { -+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -+ common_log(LOG_ERR, -+ 'Could not set notify flag to ' . $notify . -+ ' for user ' . common_log_objstring($user) . -+ ': ' . $last_error->message); -+ return false; -+ } else { -+ common_log(LOG_INFO, -+ 'User ' . $user->nickname . ' set notify flag to ' . $notify); -+ return true; -+ } -+ } -hunk ./classes/Channel.php 97 -- function source() { -- return 'web'; -- } -- -- function on($user) { -- return false; -- } -- -- function off($user) { -- return false; -- } -+ function source() { -+ return 'web'; -+ } -+ -+ function on($user) { -+ return false; -+ } -+ -+ function off($user) { -+ return false; -+ } -hunk ./classes/Channel.php 109 -- function output($user, $text) { -- # XXX: buffer all output and send it at the end -- # XXX: even better, redirect to appropriate page -- # depending on what command was run -- common_show_header(_('Command results')); -- common_element('p', NULL, $text); -- common_show_footer(); -- } -- -- function error($user, $text) { -- common_user_error($text); -- } -+ function output($user, $text) { -+ # XXX: buffer all output and send it at the end -+ # XXX: even better, redirect to appropriate page -+ # depending on what command was run -+ common_show_header(_('Command results')); -+ common_element('p', NULL, $text); -+ common_show_footer(); -+ } -+ -+ function error($user, $text) { -+ common_user_error($text); -+ } -hunk ./classes/Channel.php 126 -- function output($user, $text) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Command results')); -- common_element_end('head'); -- common_element_start('body'); -- common_element('p', array('id' => 'command_result'), $text); -- common_element_end('body'); -- common_element_end('html'); -- } -+ function output($user, $text) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Command results')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_element('p', array('id' => 'command_result'), $text); -+ common_element_end('body'); -+ common_element_end('html'); -+ } -hunk ./classes/Channel.php 137 -- function error($user, $text) { -- common_start_html('text/xml;charset=utf-8', true); -- common_element_start('head'); -- common_element('title', null, _('Ajax Error')); -- common_element_end('head'); -- common_element_start('body'); -- common_element('p', array('id' => 'error'), $text); -- common_element_end('body'); -- common_element_end('html'); -- } -+ function error($user, $text) { -+ common_start_html('text/xml;charset=utf-8', true); -+ common_element_start('head'); -+ common_element('title', null, _('Ajax Error')); -+ common_element_end('head'); -+ common_element_start('body'); -+ common_element('p', array('id' => 'error'), $text); -+ common_element_end('body'); -+ common_element_end('html'); -+ } +- var $conn = NULL; ++ var $conn = null; +hunk ./classes/Channel.php 114 +- common_element('p', NULL, $text); ++ common_element('p', null, $text); hunk ./classes/Channel.php 152 -- var $addr = NULL; -+ var $addr = NULL; -hunk ./classes/Channel.php 154 -- function source() { -- return 'mail'; -- } -- -- function __construct($addr=NULL) { -- $this->addr = $addr; -- } -- -- function on($user) { -- return $this->set_notify($user, 1); -- } -- -- function off($user) { -- return $this->set_notify($user, 0); -- } -+ function source() { -+ return 'mail'; -+ } -+ -+ function __construct($addr=NULL) { -+ $this->addr = $addr; -+ } -+ -+ function on($user) { -+ return $this->set_notify($user, 1); -+ } -+ -+ function off($user) { -+ return $this->set_notify($user, 0); -+ } -hunk ./classes/Channel.php 170 -- function output($user, $text) { -+ function output($user, $text) { -hunk ./classes/Channel.php 172 -- $headers['From'] = $user->incomingemail; -- $headers['To'] = $this->addr; -- -- $headers['Subject'] = _('Command complete'); -+ $headers['From'] = $user->incomingemail; -+ $headers['To'] = $this->addr; -+ -+ $headers['Subject'] = _('Command complete'); -hunk ./classes/Channel.php 177 -- return mail_send(array($this->addr), $headers, $text); -- } -- -- function error($user, $text) { -- -- $headers['From'] = $user->incomingemail; -- $headers['To'] = $this->addr; -- -- $headers['Subject'] = _('Command failed'); -+ return mail_send(array($this->addr), $headers, $text); -+ } -+ -+ function error($user, $text) { -+ -+ $headers['From'] = $user->incomingemail; -+ $headers['To'] = $this->addr; -+ -+ $headers['Subject'] = _('Command failed'); -hunk ./classes/Channel.php 187 -- return mail_send(array($this->addr), $headers, $text); -- } -- -- function set_notify($user, $value) { -- $orig = clone($user); -- $user->smsnotify = $value; -- $result = $user->update($orig); -- if (!$result) { -- common_log_db_error($user, 'UPDATE', __FILE__); -- return false; -- } -- return true; -- } -+ return mail_send(array($this->addr), $headers, $text); -+ } -+ -+ function set_notify($user, $value) { -+ $orig = clone($user); -+ $user->smsnotify = $value; -+ $result = $user->update($orig); -+ if (!$result) { -+ common_log_db_error($user, 'UPDATE', __FILE__); -+ return false; -+ } -+ return true; -+ } -hunk ./classes/Command.php 25 -- -- var $user = NULL; -- -- function __construct($user=NULL) { -- $this->user = $user; -- } -- -- function execute($channel) { -- return false; -- } -+ -+ var $user = NULL; -+ -+ function __construct($user=NULL) { -+ $this->user = $user; -+ } -+ -+ function execute($channel) { -+ return false; -+ } -hunk ./classes/Command.php 38 -- function execute($channel) { -- $channel->error($this->user, _("Sorry, this command is not yet implemented.")); -- } -+ function execute($channel) { -+ $channel->error($this->user, _("Sorry, this command is not yet implemented.")); -+ } +- var $addr = NULL; ++ var $addr = null; +hunk ./classes/Channel.php 158 +- function __construct($addr=NULL) { ++ function __construct($addr=null) { +hunk ./classes/Command.php 26 +- var $user = NULL; ++ var $user = null; +hunk ./classes/Command.php 28 +- function __construct($user=NULL) { ++ function __construct($user=null) { hunk ./classes/Command.php 50 -- var $word = NULL; -- function __construct($user, $word) { -- parent::__construct($user); -- $this->word = $word; -- } -+ var $word = NULL; -+ function __construct($user, $word) { -+ parent::__construct($user); -+ $this->word = $word; -+ } +- var $word = NULL; ++ var $word = null; hunk ./classes/Command.php 58 -- var $word = NULL; -- function __construct($user, $word) { -- parent::__construct($user); -- $this->word = $word; -- } -+ var $word = NULL; -+ function __construct($user, $word) { -+ parent::__construct($user); -+ $this->word = $word; -+ } +- var $word = NULL; ++ var $word = null; hunk ./classes/Command.php 66 -- var $other = NULL; -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -+ var $other = NULL; -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } +- var $other = NULL; ++ var $other = null; hunk ./classes/Command.php 74 -- var $other = NULL; -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -+ var $other = NULL; -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -hunk ./classes/Command.php 82 -- function execute($channel) { -+ function execute($channel) { -hunk ./classes/Command.php 84 -- $subs = new Subscription(); -- $subs->subscriber = $this->user->id; -- $subs_count = (int) $subs->count() - 1; -+ $subs = new Subscription(); -+ $subs->subscriber = $this->user->id; -+ $subs_count = (int) $subs->count() - 1; -hunk ./classes/Command.php 88 -- $subbed = new Subscription(); -- $subbed->subscribed = $this->user->id; -- $subbed_count = (int) $subbed->count() - 1; -+ $subbed = new Subscription(); -+ $subbed->subscribed = $this->user->id; -+ $subbed_count = (int) $subbed->count() - 1; -hunk ./classes/Command.php 92 -- $notices = new Notice(); -- $notices->profile_id = $this->user->id; -- $notice_count = (int) $notices->count(); -- -- $channel->output($this->user, sprintf(_("Subscriptions: %1\$s\n". -- "Subscribers: %2\$s\n". -- "Notices: %3\$s"), -- $subs_count, -- $subbed_count, -- $notice_count)); -- } -+ $notices = new Notice(); -+ $notices->profile_id = $this->user->id; -+ $notice_count = (int) $notices->count(); -+ -+ $channel->output($this->user, sprintf(_("Subscriptions: %1\$s\n". -+ "Subscribers: %2\$s\n". -+ "Notices: %3\$s"), -+ $subs_count, -+ $subbed_count, -+ $notice_count)); -+ } -hunk ./classes/Command.php 106 -- -- var $other = NULL; -- -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -- -- function execute($channel) { -- -- $recipient = -- common_relative_profile($this->user, common_canonical_nickname($this->other)); -- -- if (!$recipient) { -- $channel->error($this->user, _('No such user.')); -- return; -- } -- $notice = $recipient->getCurrentNotice(); -- if (!$notice) { -- $channel->error($this->user, _('User has no last notice')); -- return; -- } -- -- $fave = Fave::addNew($this->user, $notice); -+ -+ var $other = NULL; -+ -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -+ -+ function execute($channel) { -+ -+ $recipient = -+ common_relative_profile($this->user, common_canonical_nickname($this->other)); -+ -+ if (!$recipient) { -+ $channel->error($this->user, _('No such user.')); -+ return; -+ } -+ $notice = $recipient->getCurrentNotice(); -+ if (!$notice) { -+ $channel->error($this->user, _('User has no last notice')); -+ return; -+ } -+ -+ $fave = Fave::addNew($this->user, $notice); -hunk ./classes/Command.php 131 -- if (!$fave) { -- $channel->error($this->user, _('Could not create favorite.')); -- return; -- } -+ if (!$fave) { -+ $channel->error($this->user, _('Could not create favorite.')); -+ return; -+ } -hunk ./classes/Command.php 136 -- $other = User::staticGet('id', $recipient->id); -- -- if ($other && $other->id != $user->id) { -- if ($other->email && $other->emailnotifyfav) { -- mail_notify_fave($other, $this->user, $notice); -- } -- } -- -- $this->user->blowFavesCache(); -- -- $channel->output($this->user, _('Notice marked as fave.')); -- } -+ $other = User::staticGet('id', $recipient->id); -+ -+ if ($other && $other->id != $user->id) { -+ if ($other->email && $other->emailnotifyfav) { -+ mail_notify_fave($other, $this->user, $notice); -+ } -+ } -+ -+ $this->user->blowFavesCache(); -+ -+ $channel->output($this->user, _('Notice marked as fave.')); -+ } +- var $other = NULL; ++ var $other = null; +hunk ./classes/Command.php 107 +- var $other = NULL; ++ var $other = null; hunk ./classes/Command.php 151 -- var $other = NULL; -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -- -- function execute($channel) { -- $recipient = -- common_relative_profile($this->user, common_canonical_nickname($this->other)); -- -- if (!$recipient) { -- $channel->error($this->user, _('No such user.')); -- return; -- } -- -- $whois = sprintf(_("%1\$s (%2\$s)"), $recipient->nickname, -- $recipient->profileurl); -- if ($recipient->fullname) { -- $whois .= "\n" . sprintf(_('Fullname: %s'), $recipient->fullname); -- } -- if ($recipient->location) { -- $whois .= "\n" . sprintf(_('Location: %s'), $recipient->location); -- } -- if ($recipient->homepage) { -- $whois .= "\n" . sprintf(_('Homepage: %s'), $recipient->homepage); -- } -- if ($recipient->bio) { -- $whois .= "\n" . sprintf(_('About: %s'), $recipient->bio); -- } -- $channel->output($this->user, $whois); -- } -+ var $other = NULL; -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -+ -+ function execute($channel) { -+ $recipient = -+ common_relative_profile($this->user, common_canonical_nickname($this->other)); -+ -+ if (!$recipient) { -+ $channel->error($this->user, _('No such user.')); -+ return; -+ } -+ -+ $whois = sprintf(_("%1\$s (%2\$s)"), $recipient->nickname, -+ $recipient->profileurl); -+ if ($recipient->fullname) { -+ $whois .= "\n" . sprintf(_('Fullname: %s'), $recipient->fullname); -+ } -+ if ($recipient->location) { -+ $whois .= "\n" . sprintf(_('Location: %s'), $recipient->location); -+ } -+ if ($recipient->homepage) { -+ $whois .= "\n" . sprintf(_('Homepage: %s'), $recipient->homepage); -+ } -+ if ($recipient->bio) { -+ $whois .= "\n" . sprintf(_('About: %s'), $recipient->bio); -+ } -+ $channel->output($this->user, $whois); -+ } +- var $other = NULL; ++ var $other = null; hunk ./classes/Command.php 185 -- var $other = NULL; -- var $text = NULL; -- function __construct($user, $other, $text) { -- parent::__construct($user); -- $this->other = $other; -- $this->text = $text; -- } -- -- function execute($channel) { -- $other = User::staticGet('nickname', common_canonical_nickname($this->other)); -- $len = mb_strlen($this->text); -- if ($len == 0) { -- $channel->error($this->user, _('No content!')); -- return; -- } else if ($len > 140) { -- $content = common_shorten_links($content); -- if (mb_strlen($content) > 140) { -- $channel->error($this->user, sprintf(_('Message too long - maximum is 140 characters, you sent %d'), $len)); -- return; -- } -- } -- -- if (!$other) { -- $channel->error($this->user, _('No such user.')); -- return; -- } else if (!$this->user->mutuallySubscribed($other)) { -- $channel->error($this->user, _('You can\'t send a message to this user.')); -- return; -- } else if ($this->user->id == $other->id) { -- $channel->error($this->user, _('Don\'t send a message to yourself; just say it to yourself quietly instead.')); -- return; -- } -- $message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source()); -- if ($message) { -- $channel->output($this->user, sprintf(_('Direct message to %s sent'), $this->other)); -- } else { -- $channel->error($this->user, _('Error sending direct message.')); -- } -- } -+ var $other = NULL; -+ var $text = NULL; -+ function __construct($user, $other, $text) { -+ parent::__construct($user); -+ $this->other = $other; -+ $this->text = $text; -+ } -+ -+ function execute($channel) { -+ $other = User::staticGet('nickname', common_canonical_nickname($this->other)); -+ $len = mb_strlen($this->text); -+ if ($len == 0) { -+ $channel->error($this->user, _('No content!')); -+ return; -+ } else if ($len > 140) { -+ $content = common_shorten_links($content); -+ if (mb_strlen($content) > 140) { -+ $channel->error($this->user, sprintf(_('Message too long - maximum is 140 characters, you sent %d'), $len)); -+ return; -+ } -+ } -+ -+ if (!$other) { -+ $channel->error($this->user, _('No such user.')); -+ return; -+ } else if (!$this->user->mutuallySubscribed($other)) { -+ $channel->error($this->user, _('You can\'t send a message to this user.')); -+ return; -+ } else if ($this->user->id == $other->id) { -+ $channel->error($this->user, _('Don\'t send a message to yourself; just say it to yourself quietly instead.')); -+ return; -+ } -+ $message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source()); -+ if ($message) { -+ $channel->output($this->user, sprintf(_('Direct message to %s sent'), $this->other)); -+ } else { -+ $channel->error($this->user, _('Error sending direct message.')); -+ } -+ } -hunk ./classes/Command.php 227 -- -- var $other = NULL; -- -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -- -- function execute($channel) { -- $target_nickname = common_canonical_nickname($this->other); -- -- $target = -- common_relative_profile($this->user, $target_nickname); -+ -+ var $other = NULL; -+ -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -+ -+ function execute($channel) { -+ $target_nickname = common_canonical_nickname($this->other); -+ -+ $target = -+ common_relative_profile($this->user, $target_nickname); -hunk ./classes/Command.php 241 -- if (!$target) { -- $channel->error($this->user, _('No such user.')); -- return; -- } -- $notice = $target->getCurrentNotice(); -- if (!$notice) { -- $channel->error($this->user, _('User has no last notice')); -- return; -- } -- $notice_content = $notice->content; -- -- $channel->output($this->user, $target_nickname . ": " . $notice_content); -- } -+ if (!$target) { -+ $channel->error($this->user, _('No such user.')); -+ return; -+ } -+ $notice = $target->getCurrentNotice(); -+ if (!$notice) { -+ $channel->error($this->user, _('User has no last notice')); -+ return; -+ } -+ $notice_content = $notice->content; -+ -+ $channel->output($this->user, $target_nickname . ": " . $notice_content); -+ } -hunk ./classes/Command.php 257 -- -- var $other = NULL; -- -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -- -- function execute($channel) { -- -- if (!$this->other) { -- $channel->error($this->user, _('Specify the name of the user to subscribe to')); -- return; -- } -- -- $result = subs_subscribe_user($this->user, $this->other); -- -- if ($result == 'true') { -- $channel->output($this->user, sprintf(_('Subscribed to %s'), $this->other)); -- } else { -- $channel->error($this->user, $result); -- } -- } -+ -+ var $other = NULL; -+ -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -+ -+ function execute($channel) { -+ -+ if (!$this->other) { -+ $channel->error($this->user, _('Specify the name of the user to subscribe to')); -+ return; -+ } -+ -+ $result = subs_subscribe_user($this->user, $this->other); -+ -+ if ($result == 'true') { -+ $channel->output($this->user, sprintf(_('Subscribed to %s'), $this->other)); -+ } else { -+ $channel->error($this->user, $result); -+ } -+ } +- var $other = NULL; +- var $text = NULL; ++ var $other = null; ++ var $text = null; +hunk ./classes/Command.php 228 +- var $other = NULL; ++ var $other = null; +hunk ./classes/Command.php 258 +- var $other = NULL; ++ var $other = null; hunk ./classes/Command.php 284 -- var $other = NULL; -- -- function __construct($user, $other) { -- parent::__construct($user); -- $this->other = $other; -- } -+ var $other = NULL; -+ -+ function __construct($user, $other) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -hunk ./classes/Command.php 291 -- function execute($channel) { -- if(!$this->other) { -- $channel->error($this->user, _('Specify the name of the user to unsubscribe from')); -- return; -- } -- -- $result=subs_unsubscribe_user($this->user, $this->other); -- -- if ($result) { -- $channel->output($this->user, sprintf(_('Unsubscribed from %s'), $this->other)); -- } else { -- $channel->error($this->user, $result); -- } -- } -+ function execute($channel) { -+ if(!$this->other) { -+ $channel->error($this->user, _('Specify the name of the user to unsubscribe from')); -+ return; -+ } -+ -+ $result=subs_unsubscribe_user($this->user, $this->other); -+ -+ if ($result) { -+ $channel->output($this->user, sprintf(_('Unsubscribed from %s'), $this->other)); -+ } else { -+ $channel->error($this->user, $result); -+ } -+ } +- var $other = NULL; ++ var $other = null; hunk ./classes/Command.php 308 -- var $other = NULL; -- function __construct($user, $other=NULL) { -- parent::__construct($user); -- $this->other = $other; -- } -- function execute($channel) { -- if ($other) { -- $channel->error($this->user, _("Command not yet implemented.")); -- } else { -- if ($channel->off($this->user)) { -- $channel->output($this->user, _('Notification off.')); -- } else { -- $channel->error($this->user, _('Can\'t turn off notification.')); -- } -- } -- } -+ var $other = NULL; -+ function __construct($user, $other=NULL) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -+ function execute($channel) { -+ if ($other) { -+ $channel->error($this->user, _("Command not yet implemented.")); -+ } else { -+ if ($channel->off($this->user)) { -+ $channel->output($this->user, _('Notification off.')); -+ } else { -+ $channel->error($this->user, _('Can\'t turn off notification.')); -+ } -+ } -+ } +- var $other = NULL; +- function __construct($user, $other=NULL) { ++ var $other = null; ++ function __construct($user, $other=null) { hunk ./classes/Command.php 327 -- var $other = NULL; -- function __construct($user, $other=NULL) { -- parent::__construct($user); -- $this->other = $other; -- } -- -- function execute($channel) { -- if ($other) { -- $channel->error($this->user, _("Command not yet implemented.")); -- } else { -- if ($channel->on($this->user)) { -- $channel->output($this->user, _('Notification on.')); -- } else { -- $channel->error($this->user, _('Can\'t turn on notification.')); -- } -- } -- } -+ var $other = NULL; -+ function __construct($user, $other=NULL) { -+ parent::__construct($user); -+ $this->other = $other; -+ } -+ -+ function execute($channel) { -+ if ($other) { -+ $channel->error($this->user, _("Command not yet implemented.")); -+ } else { -+ if ($channel->on($this->user)) { -+ $channel->output($this->user, _('Notification on.')); -+ } else { -+ $channel->error($this->user, _('Can\'t turn on notification.')); -+ } -+ } -+ } -hunk ./classes/Command.php 347 -- function execute($channel) { -- $channel->output($this->user, -- _("Commands:\n". -- "on - turn on notifications\n". -- "off - turn off notifications\n". -- "help - show this help\n". -- "follow - subscribe to user\n". -- "leave - unsubscribe from user\n". -- "d - direct message to user\n". -- "get - get last notice from user\n". -- "whois - get profile info on user\n". -- "fav - add user's last notice as a 'fave'\n". -- "stats - get your stats\n". -- "stop - same as 'off'\n". -- "quit - same as 'off'\n". -- "sub - same as 'follow'\n". -- "unsub - same as 'leave'\n". -- "last - same as 'get'\n". -- "on - not yet implemented.\n". -- "off - not yet implemented.\n". -- "nudge - not yet implemented.\n". -- "invite - not yet implemented.\n". -- "track - not yet implemented.\n". -- "untrack - not yet implemented.\n". -- "track off - not yet implemented.\n". -- "untrack all - not yet implemented.\n". -- "tracks - not yet implemented.\n". -- "tracking - not yet implemented.\n")); -- } -+ function execute($channel) { -+ $channel->output($this->user, -+ _("Commands:\n". -+ "on - turn on notifications\n". -+ "off - turn off notifications\n". -+ "help - show this help\n". -+ "follow - subscribe to user\n". -+ "leave - unsubscribe from user\n". -+ "d - direct message to user\n". -+ "get - get last notice from user\n". -+ "whois - get profile info on user\n". -+ "fav - add user's last notice as a 'fave'\n". -+ "stats - get your stats\n". -+ "stop - same as 'off'\n". -+ "quit - same as 'off'\n". -+ "sub - same as 'follow'\n". -+ "unsub - same as 'leave'\n". -+ "last - same as 'get'\n". -+ "on - not yet implemented.\n". -+ "off - not yet implemented.\n". -+ "nudge - not yet implemented.\n". -+ "invite - not yet implemented.\n". -+ "track - not yet implemented.\n". -+ "untrack - not yet implemented.\n". -+ "track off - not yet implemented.\n". -+ "untrack all - not yet implemented.\n". -+ "tracks - not yet implemented.\n". -+ "tracking - not yet implemented.\n")); -+ } -hunk ./classes/CommandInterpreter.php 25 -- -- function handle_command($user, $text) { -- # XXX: localise -+ -+ function handle_command($user, $text) { -+ # XXX: localise -hunk ./classes/CommandInterpreter.php 29 -- $text = preg_replace('/\s+/', ' ', trim($text)); -- list($cmd, $arg) = explode(' ', $text, 2); -+ $text = preg_replace('/\s+/', ' ', trim($text)); -+ list($cmd, $arg) = explode(' ', $text, 2); -hunk ./classes/CommandInterpreter.php 32 -- # We try to support all the same commands as Twitter, see -- # http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands -- # There are a few compatibility commands from earlier versions of -- # Laconica -- -- switch(strtolower($cmd)) { -- case 'help': -- if ($arg) { -- return NULL; -- } -- return new HelpCommand($user); -- case 'on': -- if ($arg) { -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new OnCommand($user, $other); -- } -- } else { -- return new OnCommand($user); -- } -- case 'off': -- if ($arg) { -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new OffCommand($user, $other); -- } -- } else { -- return new OffCommand($user); -- } -- case 'stop': -- case 'quit': -- if ($arg) { -- return NULL; -- } else { -- return new OffCommand($user); -- } -- case 'follow': -- case 'sub': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new SubCommand($user, $other); -- } -- case 'leave': -- case 'unsub': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new UnsubCommand($user, $other); -- } -- case 'get': -- case 'last': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new GetCommand($user, $other); -- } -- case 'd': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if (!$extra) { -- return NULL; -- } else { -- return new MessageCommand($user, $other, $extra); -- } -- case 'whois': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new WhoisCommand($user, $other); -- } -- case 'fav': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new FavCommand($user, $other); -- } -- case 'nudge': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new NudgeCommand($user, $other); -- } -- case 'stats': -- if ($arg) { -- return NULL; -- } -- return new StatsCommand($user); -- case 'invite': -- if (!$arg) { -- return NULL; -- } -- list($other, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else { -- return new InviteCommand($user, $other); -- } -- case 'track': -- if (!$arg) { -- return NULL; -- } -- list($word, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else if ($word == 'off') { -- return new TrackOffCommand($user); -- } else { -- return new TrackCommand($user, $word); -- } -- case 'untrack': -- if (!$arg) { -- return NULL; -- } -- list($word, $extra) = explode(' ', $arg, 2); -- if ($extra) { -- return NULL; -- } else if ($word == 'all') { -- return new TrackOffCommand($user); -- } else { -- return new UntrackCommand($user, $word); -- } -- case 'tracks': -- case 'tracking': -- if ($arg) { -- return NULL; -- } -- return new TrackingCommand($user); -- default: -- return false; -- } -- } -+ # We try to support all the same commands as Twitter, see -+ # http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands -+ # There are a few compatibility commands from earlier versions of -+ # Laconica -+ -+ switch(strtolower($cmd)) { -+ case 'help': -+ if ($arg) { -+ return NULL; -+ } -+ return new HelpCommand($user); -+ case 'on': -+ if ($arg) { -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new OnCommand($user, $other); -+ } -+ } else { -+ return new OnCommand($user); -+ } -+ case 'off': -+ if ($arg) { -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new OffCommand($user, $other); -+ } -+ } else { -+ return new OffCommand($user); -+ } -+ case 'stop': -+ case 'quit': -+ if ($arg) { -+ return NULL; -+ } else { -+ return new OffCommand($user); -+ } -+ case 'follow': -+ case 'sub': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new SubCommand($user, $other); -+ } -+ case 'leave': -+ case 'unsub': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new UnsubCommand($user, $other); -+ } -+ case 'get': -+ case 'last': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new GetCommand($user, $other); -+ } -+ case 'd': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if (!$extra) { -+ return NULL; -+ } else { -+ return new MessageCommand($user, $other, $extra); -+ } -+ case 'whois': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new WhoisCommand($user, $other); -+ } -+ case 'fav': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new FavCommand($user, $other); -+ } -+ case 'nudge': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new NudgeCommand($user, $other); -+ } -+ case 'stats': -+ if ($arg) { -+ return NULL; -+ } -+ return new StatsCommand($user); -+ case 'invite': -+ if (!$arg) { -+ return NULL; -+ } -+ list($other, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else { -+ return new InviteCommand($user, $other); -+ } -+ case 'track': -+ if (!$arg) { -+ return NULL; -+ } -+ list($word, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else if ($word == 'off') { -+ return new TrackOffCommand($user); -+ } else { -+ return new TrackCommand($user, $word); -+ } -+ case 'untrack': -+ if (!$arg) { -+ return NULL; -+ } -+ list($word, $extra) = explode(' ', $arg, 2); -+ if ($extra) { -+ return NULL; -+ } else if ($word == 'all') { -+ return new TrackOffCommand($user); -+ } else { -+ return new UntrackCommand($user, $word); -+ } -+ case 'tracks': -+ case 'tracking': -+ if ($arg) { -+ return NULL; -+ } -+ return new TrackingCommand($user); -+ default: -+ return false; -+ } -+ } -hunk ./classes/Fave.php 23 -- static function addNew($user, $notice) { -- $fave = new Fave(); -- $fave->user_id = $user->id; -- $fave->notice_id = $notice->id; -- if (!$fave->insert()) { -- common_log_db_error($fave, 'INSERT', __FILE__); -- return false; -- } -- return $fave; -- } -- -- function &pkeyGet($kv) { -- return Memcached_DataObject::pkeyGet('Fave', $kv); -- } -+ static function addNew($user, $notice) { -+ $fave = new Fave(); -+ $fave->user_id = $user->id; -+ $fave->notice_id = $notice->id; -+ if (!$fave->insert()) { -+ common_log_db_error($fave, 'INSERT', __FILE__); -+ return false; -+ } -+ return $fave; -+ } -+ -+ function &pkeyGet($kv) { -+ return Memcached_DataObject::pkeyGet('Fave', $kv); -+ } -hunk ./classes/Foreign_link.php 29 -- // XXX: This only returns a 1->1 single obj mapping. Change? Or make -- // a getForeignUsers() that returns more than one? --Zach -- static function getByUserID($user_id, $service) { -- $flink = new Foreign_link(); -- $flink->service = $service; -- $flink->user_id = $user_id; -- $flink->limit(1); -+ // XXX: This only returns a 1->1 single obj mapping. Change? Or make -+ // a getForeignUsers() that returns more than one? --Zach -+ static function getByUserID($user_id, $service) { -+ $flink = new Foreign_link(); -+ $flink->service = $service; -+ $flink->user_id = $user_id; -+ $flink->limit(1); -hunk ./classes/Foreign_link.php 37 -- if ($flink->find(TRUE)) { -- return $flink; -- } -+ if ($flink->find(TRUE)) { -+ return $flink; -+ } +- var $other = NULL; +- function __construct($user, $other=NULL) { ++ var $other = null; ++ function __construct($user, $other=null) { +hunk ./classes/CommandInterpreter.php 40 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 47 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 58 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 68 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 75 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 79 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 86 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 90 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 97 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 101 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 107 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 111 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 117 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 121 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 127 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 131 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 137 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 141 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 147 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 152 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 156 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 162 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 166 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 174 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 178 +- return NULL; ++ return null; +hunk ./classes/CommandInterpreter.php 187 +- return NULL; ++ return null; +hunk ./classes/Confirm_address.php 23 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Confirm_address',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Confirm_address',$k,$v); } +hunk ./classes/Consumer.php 19 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Consumer',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Consumer',$k,$v); } +hunk ./classes/Fave.php 18 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Fave',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Fave',$k,$v); } +hunk ./classes/Foreign_link.php 24 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Foreign_link',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Foreign_link',$k,$v); } hunk ./classes/Foreign_link.php 41 -- return NULL; -- } -- -- static function getByForeignID($foreign_id, $service) { -- $flink = new Foreign_link(); -- $flink->service = $service; -- $flink->foreign_id = $foreign_id; -- $flink->limit(1); -+ return NULL; -+ } -+ -+ static function getByForeignID($foreign_id, $service) { -+ $flink = new Foreign_link(); -+ $flink->service = $service; -+ $flink->foreign_id = $foreign_id; -+ $flink->limit(1); -hunk ./classes/Foreign_link.php 50 -- if ($flink->find(TRUE)) { -- return $flink; -- } -+ if ($flink->find(TRUE)) { -+ return $flink; -+ } +- return NULL; ++ return null; hunk ./classes/Foreign_link.php 54 -- return NULL; -- } -- -- # Convenience methods -- function getForeignUser() { -- $fuser = new Foreign_user(); -- $fuser->service = $this->service; -- $fuser->id = $this->foreign_id; -- -- $fuser->limit(1); -- -- if ($fuser->find(TRUE)) { -- return $fuser; -- } -- -- return NULL; -- } -- -- function getUser() { -- return User::staticGet($this->user_id); -- } -- -+ return NULL; -+ } -+ -+ # Convenience methods -+ function getForeignUser() { -+ $fuser = new Foreign_user(); -+ $fuser->service = $this->service; -+ $fuser->id = $this->foreign_id; -+ -+ $fuser->limit(1); -+ -+ if ($fuser->find(TRUE)) { -+ return $fuser; -+ } -+ -+ return NULL; -+ } -+ -+ function getUser() { -+ return User::staticGet($this->user_id); -+ } -+ -hunk ./classes/Foreign_user.php 25 -- -- // XXX: This only returns a 1->1 single obj mapping. Change? Or make -- // a getForeignUsers() that returns more than one? --Zach -- static function getForeignUser($id, $service) { -- $fuser = new Foreign_user(); -- $fuser->whereAdd("service = $service"); -- $fuser->whereAdd("id = $id"); -- $fuser->limit(1); -- -- if ($fuser->find()) { -- $fuser->fetch(); -- return $fuser; -- } -- -- return NULL; -- } -- -- function updateKeys(&$orig) { -- $parts = array(); -- foreach (array('id', 'service', 'uri', 'nickname') as $k) { -- if (strcmp($this->$k, $orig->$k) != 0) { -- $parts[] = $k . ' = ' . $this->_quote($this->$k); -- } -- } -- if (count($parts) == 0) { -- # No changes -- return true; -- } -- $toupdate = implode(', ', $parts); -+ -+ // XXX: This only returns a 1->1 single obj mapping. Change? Or make -+ // a getForeignUsers() that returns more than one? --Zach -+ static function getForeignUser($id, $service) { -+ $fuser = new Foreign_user(); -+ $fuser->whereAdd("service = $service"); -+ $fuser->whereAdd("id = $id"); -+ $fuser->limit(1); -+ -+ if ($fuser->find()) { -+ $fuser->fetch(); -+ return $fuser; -+ } -+ -+ return NULL; -+ } -+ -+ function updateKeys(&$orig) { -+ $parts = array(); -+ foreach (array('id', 'service', 'uri', 'nickname') as $k) { -+ if (strcmp($this->$k, $orig->$k) != 0) { -+ $parts[] = $k . ' = ' . $this->_quote($this->$k); -+ } -+ } -+ if (count($parts) == 0) { -+ # No changes -+ return true; -+ } -+ $toupdate = implode(', ', $parts); -hunk ./classes/Foreign_user.php 55 -- $table = $this->tableName(); -- if(common_config('db','quote_identifiers')) { -- $table = '"' . $table . '"'; -- } -- $qry = 'UPDATE ' . $table . ' SET ' . $toupdate . -- ' WHERE id = ' . $this->id; -- $orig->decache(); -- $result = $this->query($qry); -- if ($result) { -- $this->encache(); -- } -- return $result; -- } -+ $table = $this->tableName(); -+ if(common_config('db','quote_identifiers')) { -+ $table = '"' . $table . '"'; -+ } -+ $qry = 'UPDATE ' . $table . ' SET ' . $toupdate . -+ ' WHERE id = ' . $this->id; -+ $orig->decache(); -+ $result = $this->query($qry); -+ if ($result) { -+ $this->encache(); -+ } -+ return $result; -+ } -hunk ./classes/Foreign_user.php 69 -- -+ -hunk ./classes/Memcached_DataObject.php 27 -- if (is_null($v)) { -- $v = $k; -- # XXX: HACK! -- $i = new $cls; -- $keys = $i->keys(); -- $k = $keys[0]; -- unset($i); -- } -- $i = Memcached_DataObject::getcached($cls, $k, $v); -- if ($i) { -- return $i; -- } else { -- $i = DB_DataObject::staticGet($cls, $k, $v); -- if ($i) { -- $i->encache(); -- } -- return $i; -- } -- } -+ if (is_null($v)) { -+ $v = $k; -+ # XXX: HACK! -+ $i = new $cls; -+ $keys = $i->keys(); -+ $k = $keys[0]; -+ unset($i); -+ } -+ $i = Memcached_DataObject::getcached($cls, $k, $v); -+ if ($i) { -+ return $i; -+ } else { -+ $i = DB_DataObject::staticGet($cls, $k, $v); -+ if ($i) { -+ $i->encache(); -+ } -+ return $i; -+ } -+ } -hunk ./classes/Memcached_DataObject.php 47 -- function &pkeyGet($cls, $kv) { -- $i = Memcached_DataObject::multicache($cls, $kv); -- if ($i) { -- return $i; -- } else { -- $i = new $cls(); -- foreach ($kv as $k => $v) { -- $i->$k = $v; -- } -- if ($i->find(true)) { -- $i->encache(); -- } else { -- $i = NULL; -- } -+ function &pkeyGet($cls, $kv) { -+ $i = Memcached_DataObject::multicache($cls, $kv); -+ if ($i) { -+ return $i; -+ } else { -+ $i = new $cls(); -+ foreach ($kv as $k => $v) { -+ $i->$k = $v; -+ } -+ if ($i->find(true)) { -+ $i->encache(); -+ } else { -+ $i = NULL; -+ } -hunk ./classes/Memcached_DataObject.php 62 -- } -- } -+ } -+ } -hunk ./classes/Memcached_DataObject.php 65 -- function insert() { -- $result = parent::insert(); -- return $result; -- } -- -- function update($orig=NULL) { -- if (is_object($orig) && $orig instanceof Memcached_DataObject) { -- $orig->decache(); # might be different keys -- } -- $result = parent::update($orig); -- if ($result) { -- $this->encache(); -- } -- return $result; -- } -- -- function delete() { -- $this->decache(); # while we still have the values! -- return parent::delete(); -- } -- -- static function memcache() { -- return common_memcache(); -- } -- -- static function cacheKey($cls, $k, $v) { -- return common_cache_key(strtolower($cls).':'.$k.':'.$v); -- } -- -- static function getcached($cls, $k, $v) { -- $c = Memcached_DataObject::memcache(); -- if (!$c) { -- return false; -- } else { -- return $c->get(Memcached_DataObject::cacheKey($cls, $k, $v)); -- } -- } -+ function insert() { -+ $result = parent::insert(); -+ return $result; -+ } -+ -+ function update($orig=NULL) { -+ if (is_object($orig) && $orig instanceof Memcached_DataObject) { -+ $orig->decache(); # might be different keys -+ } -+ $result = parent::update($orig); -+ if ($result) { -+ $this->encache(); -+ } -+ return $result; -+ } -+ -+ function delete() { -+ $this->decache(); # while we still have the values! -+ return parent::delete(); -+ } -+ -+ static function memcache() { -+ return common_memcache(); -+ } -+ -+ static function cacheKey($cls, $k, $v) { -+ return common_cache_key(strtolower($cls).':'.$k.':'.$v); -+ } -+ -+ static function getcached($cls, $k, $v) { -+ $c = Memcached_DataObject::memcache(); -+ if (!$c) { -+ return false; -+ } else { -+ return $c->get(Memcached_DataObject::cacheKey($cls, $k, $v)); -+ } -+ } -hunk ./classes/Memcached_DataObject.php 103 -- function keyTypes() { -- global $_DB_DATAOBJECT; -+ function keyTypes() { -+ global $_DB_DATAOBJECT; -hunk ./classes/Memcached_DataObject.php 106 -- $this->databaseStructure(); -+ $this->databaseStructure(); -hunk ./classes/Memcached_DataObject.php 109 -- return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"]; -- } -- -- function encache() { -- $c = $this->memcache(); -- if (!$c) { -- return false; -- } else { -- $pkey = array(); -- $pval = array(); -- $types = $this->keyTypes(); -- ksort($types); -- foreach ($types as $key => $type) { -- if ($type == 'K') { -- $pkey[] = $key; -- $pval[] = $this->$key; -- } else { -- $c->set($this->cacheKey($this->tableName(), $key, $this->$key), $this); -- } -- } -- # XXX: should work for both compound and scalar pkeys -- $pvals = implode(',', $pval); -- $pkeys = implode(',', $pkey); -- $c->set($this->cacheKey($this->tableName(), $pkeys, $pvals), $this); -- } -- } -- -- function decache() { -- $c = $this->memcache(); -- if (!$c) { -- return false; -- } else { -- $pkey = array(); -- $pval = array(); -- $types = $this->keyTypes(); -- ksort($types); -- foreach ($types as $key => $type) { -- if ($type == 'K') { -- $pkey[] = $key; -- $pval[] = $this->$key; -- } else { -- $c->delete($this->cacheKey($this->tableName(), $key, $this->$key)); -- } -- } -- # should work for both compound and scalar pkeys -- # XXX: comma works for now but may not be safe separator for future keys -- $pvals = implode(',', $pval); -- $pkeys = implode(',', $pkey); -- $c->delete($this->cacheKey($this->tableName(), $pkeys, $pvals)); -- } -- } -+ return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"]; -+ } -+ -+ function encache() { -+ $c = $this->memcache(); -+ if (!$c) { -+ return false; -+ } else { -+ $pkey = array(); -+ $pval = array(); -+ $types = $this->keyTypes(); -+ ksort($types); -+ foreach ($types as $key => $type) { -+ if ($type == 'K') { -+ $pkey[] = $key; -+ $pval[] = $this->$key; -+ } else { -+ $c->set($this->cacheKey($this->tableName(), $key, $this->$key), $this); -+ } -+ } -+ # XXX: should work for both compound and scalar pkeys -+ $pvals = implode(',', $pval); -+ $pkeys = implode(',', $pkey); -+ $c->set($this->cacheKey($this->tableName(), $pkeys, $pvals), $this); -+ } -+ } -+ -+ function decache() { -+ $c = $this->memcache(); -+ if (!$c) { -+ return false; -+ } else { -+ $pkey = array(); -+ $pval = array(); -+ $types = $this->keyTypes(); -+ ksort($types); -+ foreach ($types as $key => $type) { -+ if ($type == 'K') { -+ $pkey[] = $key; -+ $pval[] = $this->$key; -+ } else { -+ $c->delete($this->cacheKey($this->tableName(), $key, $this->$key)); -+ } -+ } -+ # should work for both compound and scalar pkeys -+ # XXX: comma works for now but may not be safe separator for future keys -+ $pvals = implode(',', $pval); -+ $pkeys = implode(',', $pkey); -+ $c->delete($this->cacheKey($this->tableName(), $pkeys, $pvals)); -+ } -+ } -hunk ./classes/Memcached_DataObject.php 161 -- function multicache($cls, $kv) { -- ksort($kv); -- $c = Memcached_DataObject::memcache(); -- if (!$c) { -- return false; -- } else { -- $pkeys = implode(',', array_keys($kv)); -- $pvals = implode(',', array_values($kv)); -- return $c->get(Memcached_DataObject::cacheKey($cls, $pkeys, $pvals)); -- } -- } -+ function multicache($cls, $kv) { -+ ksort($kv); -+ $c = Memcached_DataObject::memcache(); -+ if (!$c) { -+ return false; -+ } else { -+ $pkeys = implode(',', array_keys($kv)); -+ $pvals = implode(',', array_values($kv)); -+ return $c->get(Memcached_DataObject::cacheKey($cls, $pkeys, $pvals)); -+ } -+ } -hunk ./classes/Message.php 29 -- -- function getFrom() { -- return Profile::staticGet('id', $this->from_profile); -- } -- -- function getTo() { -- return Profile::staticGet('id', $this->to_profile); -- } -- -- static function saveNew($from, $to, $content, $source) { -- -- $msg = new Message(); -- -- $msg->from_profile = $from; -- $msg->to_profile = $to; -- $msg->content = common_shorten_links($content); -- $msg->rendered = common_render_text($content); -- $msg->created = common_sql_now(); -- $msg->source = $source; -- -- $result = $msg->insert(); -- -- if (!$result) { -- common_log_db_error($msg, 'INSERT', __FILE__); -- return _('Could not insert message.'); -- } -- -- $orig = clone($msg); -- $msg->uri = common_local_url('showmessage', array('message' => $msg->id)); -- -- $result = $msg->update($orig); -- -- if (!$result) { -- common_log_db_error($msg, 'UPDATE', __FILE__); -- return _('Could not update message with new URI.'); -- } -- -- return $msg; -- } -+ -+ function getFrom() { -+ return Profile::staticGet('id', $this->from_profile); -+ } -+ -+ function getTo() { -+ return Profile::staticGet('id', $this->to_profile); -+ } -+ -+ static function saveNew($from, $to, $content, $source) { -+ -+ $msg = new Message(); -+ -+ $msg->from_profile = $from; -+ $msg->to_profile = $to; -+ $msg->content = common_shorten_links($content); -+ $msg->rendered = common_render_text($content); -+ $msg->created = common_sql_now(); -+ $msg->source = $source; -+ -+ $result = $msg->insert(); -+ -+ if (!$result) { -+ common_log_db_error($msg, 'INSERT', __FILE__); -+ return _('Could not insert message.'); -+ } -+ -+ $orig = clone($msg); -+ $msg->uri = common_local_url('showmessage', array('message' => $msg->id)); -+ -+ $result = $msg->update($orig); -+ -+ if (!$result) { -+ common_log_db_error($msg, 'UPDATE', __FILE__); -+ return _('Could not update message with new URI.'); -+ } -+ -+ return $msg; -+ } -hunk ./classes/Notice.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./classes/Notice.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./classes/Notice.php 34 -- ###START_AUTOCODE -- /* the code below is auto generated do not remove the above tag */ -+ ###START_AUTOCODE -+ /* the code below is auto generated do not remove the above tag */ -hunk ./classes/Notice.php 37 -- public $__table = 'notice'; // table name -- public $id; // int(4) primary_key not_null -- public $profile_id; // int(4) not_null -- public $uri; // varchar(255) unique_key -- public $content; // varchar(140) -- public $rendered; // text() -- public $url; // varchar(255) -- public $created; // datetime() not_null -- public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP -- public $reply_to; // int(4) -- public $is_local; // tinyint(1) -- public $source; // varchar(32) -+ public $__table = 'notice'; // table name -+ public $id; // int(4) primary_key not_null -+ public $profile_id; // int(4) not_null -+ public $uri; // varchar(255) unique_key -+ public $content; // varchar(140) -+ public $rendered; // text() -+ public $url; // varchar(255) -+ public $created; // datetime() not_null -+ public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP -+ public $reply_to; // int(4) -+ public $is_local; // tinyint(1) -+ public $source; // varchar(32) -hunk ./classes/Notice.php 50 -- /* Static get */ -- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice',$k,$v); } -+ /* Static get */ -+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice',$k,$v); } -hunk ./classes/Notice.php 53 -- /* the code above is auto generated do not remove the tag below */ -- ###END_AUTOCODE -+ /* the code above is auto generated do not remove the tag below */ -+ ###END_AUTOCODE -hunk ./classes/Notice.php 56 -- function getProfile() { -- return Profile::staticGet('id', $this->profile_id); -- } -+ function getProfile() { -+ return Profile::staticGet('id', $this->profile_id); -+ } -hunk ./classes/Notice.php 60 -- function delete() { -- $this->blowCaches(true); -- $this->blowFavesCache(true); -- $this->blowInboxes(); -- return parent::delete(); -- } -+ function delete() { -+ $this->blowCaches(true); -+ $this->blowFavesCache(true); -+ $this->blowInboxes(); -+ return parent::delete(); -+ } -hunk ./classes/Notice.php 67 -- function saveTags() { -- /* extract all #hastags */ -- $count = preg_match_all('/(?:^|\s)#([A-Za-z0-9_\-\.]{1,64})/', strtolower($this->content), $match); -- if (!$count) { -- return true; -- } -+ function saveTags() { -+ /* extract all #hastags */ -+ $count = preg_match_all('/(?:^|\s)#([A-Za-z0-9_\-\.]{1,64})/', strtolower($this->content), $match); -+ if (!$count) { -+ return true; -+ } -hunk ./classes/Notice.php 74 -- /* elide characters we don't want in the tag */ -- $match[1] = str_replace(array('-', '_', '.'), '', $match[1]); -+ /* elide characters we don't want in the tag */ -+ $match[1] = str_replace(array('-', '_', '.'), '', $match[1]); -hunk ./classes/Notice.php 77 -- /* Add them to the database */ -- foreach(array_unique($match[1]) as $hashtag) { -- $tag = DB_DataObject::factory('Notice_tag'); -- $tag->notice_id = $this->id; -- $tag->tag = $hashtag; -- $tag->created = $this->created; -- $id = $tag->insert(); -- if (!$id) { -- $last_error = PEAR::getStaticProperty('DB_DataObject','lastError'); -- common_log(LOG_ERR, 'DB error inserting hashtag: ' . $last_error->message); -- common_server_error(sprintf(_('DB error inserting hashtag: %s'), $last_error->message)); -- return; -- } -- } -- return true; -- } -+ /* Add them to the database */ -+ foreach(array_unique($match[1]) as $hashtag) { -+ $tag = DB_DataObject::factory('Notice_tag'); -+ $tag->notice_id = $this->id; -+ $tag->tag = $hashtag; -+ $tag->created = $this->created; -+ $id = $tag->insert(); -+ if (!$id) { -+ $last_error = PEAR::getStaticProperty('DB_DataObject','lastError'); -+ common_log(LOG_ERR, 'DB error inserting hashtag: ' . $last_error->message); -+ common_server_error(sprintf(_('DB error inserting hashtag: %s'), $last_error->message)); -+ return; -+ } -+ } -+ return true; -+ } +- return NULL; ++ return null; +hunk ./classes/Foreign_link.php 69 +- return NULL; ++ return null; +hunk ./classes/Foreign_service.php 20 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Foreign_service',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Foreign_service',$k,$v); } +hunk ./classes/Foreign_subscription.php 19 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Foreign_subscription',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Foreign_subscription',$k,$v); } +hunk ./classes/Foreign_user.php 21 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Foreign_user',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Foreign_user',$k,$v); } +hunk ./classes/Foreign_user.php 39 +- return NULL; ++ return null; +hunk ./classes/Invitation.php 20 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Invitation',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Invitation',$k,$v); } +hunk ./classes/Memcached_DataObject.php 26 +- function &staticGet($cls, $k, $v=NULL) { ++ function &staticGet($cls, $k, $v=null) { +hunk ./classes/Memcached_DataObject.php 59 +- $i = NULL; ++ $i = null; +hunk ./classes/Memcached_DataObject.php 70 +- function update($orig=NULL) { ++ function update($orig=null) { +hunk ./classes/Message.php 25 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Message',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Message',$k,$v); } +hunk ./classes/Nonce.php 21 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Nonce',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Nonce',$k,$v); } +hunk ./classes/Notice.php 51 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Notice',$k,$v); } hunk ./classes/Notice.php 94 -- static function saveNew($profile_id, $content, $source=NULL, $is_local=1, $reply_to=NULL, $uri=NULL) { -+ static function saveNew($profile_id, $content, $source=NULL, $is_local=1, $reply_to=NULL, $uri=NULL) { -hunk ./classes/Notice.php 96 -- $profile = Profile::staticGet($profile_id); -+ $profile = Profile::staticGet($profile_id); -hunk ./classes/Notice.php 105 -- return _('Too many notices too fast; take a breather and post again in a few minutes.'); -+ return _('Too many notices too fast; take a breather and post again in a few minutes.'); -hunk ./classes/Notice.php 108 -- $banned = common_config('profile', 'banned'); -+ $banned = common_config('profile', 'banned'); -hunk ./classes/Notice.php 110 -- if ( in_array($profile_id, $banned) || in_array($profile->nickname, $banned)) { -- common_log(LOG_WARNING, "Attempted post from banned user: $profile->nickname (user id = $profile_id)."); -+ if ( in_array($profile_id, $banned) || in_array($profile->nickname, $banned)) { -+ common_log(LOG_WARNING, "Attempted post from banned user: $profile->nickname (user id = $profile_id)."); -hunk ./classes/Notice.php 113 -- } -+ } -hunk ./classes/Notice.php 115 -- $notice = new Notice(); -- $notice->profile_id = $profile_id; -+ $notice = new Notice(); -+ $notice->profile_id = $profile_id; -hunk ./classes/Notice.php 118 -- $blacklist = common_config('public', 'blacklist'); -+ $blacklist = common_config('public', 'blacklist'); -hunk ./classes/Notice.php 120 -- # Blacklisted are non-false, but not 1, either -+ # Blacklisted are non-false, but not 1, either -hunk ./classes/Notice.php 122 -- if ($blacklist && in_array($profile_id, $blacklist)) { -- $notice->is_local = -1; -- } else { -- $notice->is_local = $is_local; -- } -+ if ($blacklist && in_array($profile_id, $blacklist)) { -+ $notice->is_local = -1; -+ } else { -+ $notice->is_local = $is_local; -+ } -hunk ./classes/Notice.php 128 -- $notice->reply_to = $reply_to; -- $notice->created = common_sql_now(); -- $notice->content = common_shorten_links($content); -- $notice->rendered = common_render_content($notice->content, $notice); -- $notice->source = $source; -- $notice->uri = $uri; -+ $notice->reply_to = $reply_to; -+ $notice->created = common_sql_now(); -+ $notice->content = common_shorten_links($content); -+ $notice->rendered = common_render_content($notice->content, $notice); -+ $notice->source = $source; -+ $notice->uri = $uri; -hunk ./classes/Notice.php 135 -- $id = $notice->insert(); -+ $id = $notice->insert(); -hunk ./classes/Notice.php 137 -- if (!$id) { -- common_log_db_error($notice, 'INSERT', __FILE__); -- return _('Problem saving notice.'); -- } -+ if (!$id) { -+ common_log_db_error($notice, 'INSERT', __FILE__); -+ return _('Problem saving notice.'); -+ } -hunk ./classes/Notice.php 142 -- # Update the URI after the notice is in the database -- if (!$uri) { -- $orig = clone($notice); -- $notice->uri = common_notice_uri($notice); -+ # Update the URI after the notice is in the database -+ if (!$uri) { -+ $orig = clone($notice); -+ $notice->uri = common_notice_uri($notice); -hunk ./classes/Notice.php 147 -- if (!$notice->update($orig)) { -- common_log_db_error($notice, 'UPDATE', __FILE__); -- return _('Problem saving notice.'); -- } -- } -+ if (!$notice->update($orig)) { -+ common_log_db_error($notice, 'UPDATE', __FILE__); -+ return _('Problem saving notice.'); -+ } -+ } -hunk ./classes/Notice.php 153 -- # XXX: do we need to change this for remote users? -+ # XXX: do we need to change this for remote users? -hunk ./classes/Notice.php 155 -- common_save_replies($notice); -- $notice->saveTags(); -+ common_save_replies($notice); -+ $notice->saveTags(); -hunk ./classes/Notice.php 158 -- # Clear the cache for subscribed users, so they'll update at next request -- # XXX: someone clever could prepend instead of clearing the cache -+ # Clear the cache for subscribed users, so they'll update at next request -+ # XXX: someone clever could prepend instead of clearing the cache -hunk ./classes/Notice.php 161 -- if (common_config('memcached', 'enabled')) { -- $notice->blowCaches(); -- } -+ if (common_config('memcached', 'enabled')) { -+ $notice->blowCaches(); -+ } -hunk ./classes/Notice.php 165 -- $notice->addToInboxes(); -- return $notice; -- } -+ $notice->addToInboxes(); -+ return $notice; -+ } -hunk ./classes/Notice.php 187 -- function blowCaches($blowLast=false) { -- $this->blowSubsCache($blowLast); -- $this->blowNoticeCache($blowLast); -- $this->blowRepliesCache($blowLast); -- $this->blowPublicCache($blowLast); -- $this->blowTagCache($blowLast); -- } -+ function blowCaches($blowLast=false) { -+ $this->blowSubsCache($blowLast); -+ $this->blowNoticeCache($blowLast); -+ $this->blowRepliesCache($blowLast); -+ $this->blowPublicCache($blowLast); -+ $this->blowTagCache($blowLast); -+ } -hunk ./classes/Notice.php 195 -- function blowTagCache($blowLast=false) { -- $cache = common_memcache(); -- if ($cache) { -- $tag = new Notice_tag(); -- $tag->notice_id = $this->id; -- if ($tag->find()) { -- while ($tag->fetch()) { -- $cache->delete(common_cache_key('notice_tag:notice_stream:' . $tag->tag)); -- if ($blowLast) { -- $cache->delete(common_cache_key('notice_tag:notice_stream:' . $tag->tag . ';last')); -- } -- } -- } -- $tag->free(); -- unset($tag); -- } -- } -+ function blowTagCache($blowLast=false) { -+ $cache = common_memcache(); -+ if ($cache) { -+ $tag = new Notice_tag(); -+ $tag->notice_id = $this->id; -+ if ($tag->find()) { -+ while ($tag->fetch()) { -+ $cache->delete(common_cache_key('notice_tag:notice_stream:' . $tag->tag)); -+ if ($blowLast) { -+ $cache->delete(common_cache_key('notice_tag:notice_stream:' . $tag->tag . ';last')); -+ } -+ } -+ } -+ $tag->free(); -+ unset($tag); -+ } -+ } -hunk ./classes/Notice.php 213 -- function blowSubsCache($blowLast=false) { -- $cache = common_memcache(); -- if ($cache) { -- $user = new User(); -+ function blowSubsCache($blowLast=false) { -+ $cache = common_memcache(); -+ if ($cache) { -+ $user = new User(); -hunk ./classes/Notice.php 218 -- $user->query('SELECT id ' . -- 'FROM user JOIN subscription ON user.id = subscription.subscriber ' . -- 'WHERE subscription.subscribed = ' . $this->profile_id); -+ $user->query('SELECT id ' . -+ 'FROM user JOIN subscription ON user.id = subscription.subscriber ' . -+ 'WHERE subscription.subscribed = ' . $this->profile_id); -hunk ./classes/Notice.php 222 -- while ($user->fetch()) { -- $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id)); -- if ($blowLast) { -- $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id . ';last')); -- } -- } -- $user->free(); -- unset($user); -- } -- } -+ while ($user->fetch()) { -+ $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id)); -+ if ($blowLast) { -+ $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id . ';last')); -+ } -+ } -+ $user->free(); -+ unset($user); -+ } -+ } -hunk ./classes/Notice.php 233 -- function blowNoticeCache($blowLast=false) { -- if ($this->is_local) { -- $cache = common_memcache(); -- if ($cache) { -- $cache->delete(common_cache_key('profile:notices:'.$this->profile_id)); -- if ($blowLast) { -- $cache->delete(common_cache_key('profile:notices:'.$this->profile_id.';last')); -- } -- } -- } -- } -+ function blowNoticeCache($blowLast=false) { -+ if ($this->is_local) { -+ $cache = common_memcache(); -+ if ($cache) { -+ $cache->delete(common_cache_key('profile:notices:'.$this->profile_id)); -+ if ($blowLast) { -+ $cache->delete(common_cache_key('profile:notices:'.$this->profile_id.';last')); -+ } -+ } -+ } -+ } -hunk ./classes/Notice.php 245 -- function blowRepliesCache($blowLast=false) { -- $cache = common_memcache(); -- if ($cache) { -- $reply = new Reply(); -- $reply->notice_id = $this->id; -- if ($reply->find()) { -- while ($reply->fetch()) { -- $cache->delete(common_cache_key('user:replies:'.$reply->profile_id)); -- if ($blowLast) { -- $cache->delete(common_cache_key('user:replies:'.$reply->profile_id.';last')); -- } -- } -- } -- $reply->free(); -- unset($reply); -- } -- } -+ function blowRepliesCache($blowLast=false) { -+ $cache = common_memcache(); -+ if ($cache) { -+ $reply = new Reply(); -+ $reply->notice_id = $this->id; -+ if ($reply->find()) { -+ while ($reply->fetch()) { -+ $cache->delete(common_cache_key('user:replies:'.$reply->profile_id)); -+ if ($blowLast) { -+ $cache->delete(common_cache_key('user:replies:'.$reply->profile_id.';last')); -+ } -+ } -+ } -+ $reply->free(); -+ unset($reply); -+ } -+ } -hunk ./classes/Notice.php 263 -- function blowPublicCache($blowLast=false) { -- if ($this->is_local == 1) { -- $cache = common_memcache(); -- if ($cache) { -- $cache->delete(common_cache_key('public')); -- if ($blowLast) { -- $cache->delete(common_cache_key('public').';last'); -- } -- } -- } -- } -+ function blowPublicCache($blowLast=false) { -+ if ($this->is_local == 1) { -+ $cache = common_memcache(); -+ if ($cache) { -+ $cache->delete(common_cache_key('public')); -+ if ($blowLast) { -+ $cache->delete(common_cache_key('public').';last'); -+ } -+ } -+ } -+ } -hunk ./classes/Notice.php 275 -- function blowFavesCache($blowLast=false) { -- $cache = common_memcache(); -- if ($cache) { -- $fave = new Fave(); -- $fave->notice_id = $this->id; -- if ($fave->find()) { -- while ($fave->fetch()) { -- $cache->delete(common_cache_key('user:faves:'.$fave->user_id)); -- if ($blowLast) { -- $cache->delete(common_cache_key('user:faves:'.$fave->user_id.';last')); -- } -- } -- } -- $fave->free(); -- unset($fave); -- } -- } -+ function blowFavesCache($blowLast=false) { -+ $cache = common_memcache(); -+ if ($cache) { -+ $fave = new Fave(); -+ $fave->notice_id = $this->id; -+ if ($fave->find()) { -+ while ($fave->fetch()) { -+ $cache->delete(common_cache_key('user:faves:'.$fave->user_id)); -+ if ($blowLast) { -+ $cache->delete(common_cache_key('user:faves:'.$fave->user_id.';last')); -+ } -+ } -+ } -+ $fave->free(); -+ unset($fave); -+ } -+ } -hunk ./classes/Notice.php 293 -- # XXX: too many args; we need to move to named params or even a separate -- # class for notice streams -+ # XXX: too many args; we need to move to named params or even a separate -+ # class for notice streams +- static function saveNew($profile_id, $content, $source=NULL, $is_local=1, $reply_to=NULL, $uri=NULL) { ++ static function saveNew($profile_id, $content, $source=null, $is_local=1, $reply_to=null, $uri=null) { hunk ./classes/Notice.php 296 -- static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=NULL, $since=NULL) { -+ static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=NULL, $since=NULL) { -hunk ./classes/Notice.php 298 -- if (common_config('memcached', 'enabled')) { -+ if (common_config('memcached', 'enabled')) { -hunk ./classes/Notice.php 300 -- # Skip the cache if this is a since, since_id or before_id qry -- if ($since_id > 0 || $before_id > 0 || $since) { -- return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since); -- } else { -- return Notice::getCachedStream($qry, $cachekey, $offset, $limit, $order); -- } -- } -+ # Skip the cache if this is a since, since_id or before_id qry -+ if ($since_id > 0 || $before_id > 0 || $since) { -+ return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since); -+ } else { -+ return Notice::getCachedStream($qry, $cachekey, $offset, $limit, $order); -+ } -+ } -hunk ./classes/Notice.php 308 -- return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since); -- } -+ return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since); -+ } -hunk ./classes/Notice.php 311 -- static function getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since) { -+ static function getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since) { -hunk ./classes/Notice.php 313 -- $needAnd = FALSE; -- $needWhere = TRUE; -+ $needAnd = FALSE; -+ $needWhere = TRUE; -hunk ./classes/Notice.php 316 -- if (preg_match('/\bWHERE\b/i', $qry)) { -- $needWhere = FALSE; -- $needAnd = TRUE; -- } -+ if (preg_match('/\bWHERE\b/i', $qry)) { -+ $needWhere = FALSE; -+ $needAnd = TRUE; -+ } -hunk ./classes/Notice.php 321 -- if ($since_id > 0) { -+ if ($since_id > 0) { -hunk ./classes/Notice.php 323 -- if ($needWhere) { -- $qry .= ' WHERE '; -- $needWhere = FALSE; -- } else { -- $qry .= ' AND '; -- } -+ if ($needWhere) { -+ $qry .= ' WHERE '; -+ $needWhere = FALSE; -+ } else { -+ $qry .= ' AND '; -+ } -hunk ./classes/Notice.php 330 -- $qry .= ' notice.id > ' . $since_id; -- } -+ $qry .= ' notice.id > ' . $since_id; -+ } -hunk ./classes/Notice.php 333 -- if ($before_id > 0) { -+ if ($before_id > 0) { -hunk ./classes/Notice.php 335 -- if ($needWhere) { -- $qry .= ' WHERE '; -- $needWhere = FALSE; -- } else { -- $qry .= ' AND '; -- } -+ if ($needWhere) { -+ $qry .= ' WHERE '; -+ $needWhere = FALSE; -+ } else { -+ $qry .= ' AND '; -+ } -hunk ./classes/Notice.php 342 -- $qry .= ' notice.id < ' . $before_id; -- } -+ $qry .= ' notice.id < ' . $before_id; -+ } -hunk ./classes/Notice.php 345 -- if ($since) { -+ if ($since) { -hunk ./classes/Notice.php 347 -- if ($needWhere) { -- $qry .= ' WHERE '; -- $needWhere = FALSE; -- } else { -- $qry .= ' AND '; -- } -+ if ($needWhere) { -+ $qry .= ' WHERE '; -+ $needWhere = FALSE; -+ } else { -+ $qry .= ' AND '; -+ } -hunk ./classes/Notice.php 354 -- $qry .= ' notice.created > \'' . date('Y-m-d H:i:s', $since) . '\''; -- } -+ $qry .= ' notice.created > \'' . date('Y-m-d H:i:s', $since) . '\''; -+ } -hunk ./classes/Notice.php 357 -- # Allow ORDER override -+ # Allow ORDER override -hunk ./classes/Notice.php 359 -- if ($order) { -- $qry .= $order; -- } else { -- $qry .= ' ORDER BY notice.created DESC, notice.id DESC '; -- } -+ if ($order) { -+ $qry .= $order; -+ } else { -+ $qry .= ' ORDER BY notice.created DESC, notice.id DESC '; -+ } -hunk ./classes/Notice.php 365 -- if (common_config('db','type') == 'pgsql') { -- $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; -- } else { -- $qry .= ' LIMIT ' . $offset . ', ' . $limit; -- } -+ if (common_config('db','type') == 'pgsql') { -+ $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; -+ } else { -+ $qry .= ' LIMIT ' . $offset . ', ' . $limit; -+ } -hunk ./classes/Notice.php 371 -- $notice = new Notice(); -+ $notice = new Notice(); -hunk ./classes/Notice.php 373 -- $notice->query($qry); -+ $notice->query($qry); -hunk ./classes/Notice.php 375 -- return $notice; -- } -+ return $notice; -+ } -hunk ./classes/Notice.php 378 -- # XXX: this is pretty long and should probably be broken up into -- # some helper functions -+ # XXX: this is pretty long and should probably be broken up into -+ # some helper functions -hunk ./classes/Notice.php 381 -- static function getCachedStream($qry, $cachekey, $offset, $limit, $order) { -+ static function getCachedStream($qry, $cachekey, $offset, $limit, $order) { -hunk ./classes/Notice.php 383 -- # If outside our cache window, just go to the DB -+ # If outside our cache window, just go to the DB -hunk ./classes/Notice.php 385 -- if ($offset + $limit > NOTICE_CACHE_WINDOW) { -- return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order, NULL); -- } -+ if ($offset + $limit > NOTICE_CACHE_WINDOW) { -+ return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order, NULL); -+ } -hunk ./classes/Notice.php 389 -- # Get the cache; if we can't, just go to the DB -+ # Get the cache; if we can't, just go to the DB -hunk ./classes/Notice.php 391 -- $cache = common_memcache(); -+ $cache = common_memcache(); -hunk ./classes/Notice.php 393 -- if (!$cache) { -- return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order, NULL); -- } -+ if (!$cache) { -+ return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order, NULL); -+ } -hunk ./classes/Notice.php 397 -- # Get the notices out of the cache -+ # Get the notices out of the cache -hunk ./classes/Notice.php 399 -- $notices = $cache->get(common_cache_key($cachekey)); -+ $notices = $cache->get(common_cache_key($cachekey)); -hunk ./classes/Notice.php 401 -- # On a cache hit, return a DB-object-like wrapper -+ # On a cache hit, return a DB-object-like wrapper -hunk ./classes/Notice.php 403 -- if ($notices !== FALSE) { -- $wrapper = new NoticeWrapper(array_slice($notices, $offset, $limit)); -- return $wrapper; -- } -+ if ($notices !== FALSE) { -+ $wrapper = new NoticeWrapper(array_slice($notices, $offset, $limit)); -+ return $wrapper; -+ } -hunk ./classes/Notice.php 408 -- # If the cache was invalidated because of new data being -- # added, we can try and just get the new stuff. We keep an additional -- # copy of the data at the key + ';last' -+ # If the cache was invalidated because of new data being -+ # added, we can try and just get the new stuff. We keep an additional -+ # copy of the data at the key + ';last' -hunk ./classes/Notice.php 412 -- # No cache hit. Try to get the *last* cached version -+ # No cache hit. Try to get the *last* cached version -hunk ./classes/Notice.php 414 -- $last_notices = $cache->get(common_cache_key($cachekey) . ';last'); -+ $last_notices = $cache->get(common_cache_key($cachekey) . ';last'); -hunk ./classes/Notice.php 416 -- if ($last_notices) { -+ if ($last_notices) { -hunk ./classes/Notice.php 418 -- # Reverse-chron order, so last ID is last. -+ # Reverse-chron order, so last ID is last. -hunk ./classes/Notice.php 420 -- $last_id = $last_notices[0]->id; -+ $last_id = $last_notices[0]->id; -hunk ./classes/Notice.php 422 -- # XXX: this assumes monotonically increasing IDs; a fair -- # bet with our DB. -+ # XXX: this assumes monotonically increasing IDs; a fair -+ # bet with our DB. -hunk ./classes/Notice.php 425 -- $new_notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, -- $last_id, NULL, $order, NULL); -+ $new_notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, -+ $last_id, NULL, $order, NULL); -hunk ./classes/Notice.php 428 -- if ($new_notice) { -- $new_notices = array(); -- while ($new_notice->fetch()) { -- $new_notices[] = clone($new_notice); -- } -- $new_notice->free(); -- $notices = array_slice(array_merge($new_notices, $last_notices), -- 0, NOTICE_CACHE_WINDOW); -+ if ($new_notice) { -+ $new_notices = array(); -+ while ($new_notice->fetch()) { -+ $new_notices[] = clone($new_notice); -+ } -+ $new_notice->free(); -+ $notices = array_slice(array_merge($new_notices, $last_notices), -+ 0, NOTICE_CACHE_WINDOW); -hunk ./classes/Notice.php 437 -- # Store the array in the cache for next time -+ # Store the array in the cache for next time -hunk ./classes/Notice.php 439 -- $result = $cache->set(common_cache_key($cachekey), $notices); -- $result = $cache->set(common_cache_key($cachekey) . ';last', $notices); -+ $result = $cache->set(common_cache_key($cachekey), $notices); -+ $result = $cache->set(common_cache_key($cachekey) . ';last', $notices); -hunk ./classes/Notice.php 442 -- # return a wrapper of the array for use now -+ # return a wrapper of the array for use now -hunk ./classes/Notice.php 444 -- return new NoticeWrapper(array_slice($notices, $offset, $limit)); -- } -- } -+ return new NoticeWrapper(array_slice($notices, $offset, $limit)); -+ } -+ } -hunk ./classes/Notice.php 448 -- # Otherwise, get the full cache window out of the DB -+ # Otherwise, get the full cache window out of the DB +- static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=NULL, $since=NULL) { ++ static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=null, $since=null) { +hunk ./classes/Notice.php 386 +- return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order, NULL); ++ return Notice::getStreamDirect($qry, $offset, $limit, null, null, $order, null); +hunk ./classes/Notice.php 394 +- return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order, NULL); ++ return Notice::getStreamDirect($qry, $offset, $limit, null, null, $order, null); +hunk ./classes/Notice.php 426 +- $last_id, NULL, $order, NULL); ++ $last_id, null, $order, null); hunk ./classes/Notice.php 450 -- $notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, NULL, NULL, $order, NULL); -+ $notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, NULL, NULL, $order, NULL); -hunk ./classes/Notice.php 452 -- # If there are no hits, just return the value -+ # If there are no hits, just return the value -hunk ./classes/Notice.php 454 -- if (!$notice) { -- return $notice; -- } -+ if (!$notice) { -+ return $notice; -+ } -hunk ./classes/Notice.php 458 -- # Pack results into an array -+ # Pack results into an array -hunk ./classes/Notice.php 460 -- $notices = array(); -+ $notices = array(); -hunk ./classes/Notice.php 462 -- while ($notice->fetch()) { -- $notices[] = clone($notice); -- } -+ while ($notice->fetch()) { -+ $notices[] = clone($notice); -+ } -hunk ./classes/Notice.php 466 -- $notice->free(); -+ $notice->free(); -hunk ./classes/Notice.php 468 -- # Store the array in the cache for next time -+ # Store the array in the cache for next time -hunk ./classes/Notice.php 470 -- $result = $cache->set(common_cache_key($cachekey), $notices); -- $result = $cache->set(common_cache_key($cachekey) . ';last', $notices); -+ $result = $cache->set(common_cache_key($cachekey), $notices); -+ $result = $cache->set(common_cache_key($cachekey) . ';last', $notices); -hunk ./classes/Notice.php 473 -- # return a wrapper of the array for use now -+ # return a wrapper of the array for use now -hunk ./classes/Notice.php 475 -- $wrapper = new NoticeWrapper(array_slice($notices, $offset, $limit)); -+ $wrapper = new NoticeWrapper(array_slice($notices, $offset, $limit)); -hunk ./classes/Notice.php 477 -- return $wrapper; -- } -+ return $wrapper; -+ } +- $notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, NULL, NULL, $order, NULL); ++ $notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, null, null, $order, null); hunk ./classes/Notice.php 480 -- function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0, $since=NULL) { -+ function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0, $since=NULL) { -hunk ./classes/Notice.php 482 -- $parts = array(); -+ $parts = array(); -hunk ./classes/Notice.php 484 -- $qry = 'SELECT * FROM notice '; -+ $qry = 'SELECT * FROM notice '; -hunk ./classes/Notice.php 486 -- if (common_config('public', 'localonly')) { -- $parts[] = 'is_local = 1'; -- } else { -- # -1 == blacklisted -- $parts[] = 'is_local != -1'; -- } -+ if (common_config('public', 'localonly')) { -+ $parts[] = 'is_local = 1'; -+ } else { -+ # -1 == blacklisted -+ $parts[] = 'is_local != -1'; -+ } -hunk ./classes/Notice.php 493 -- if ($parts) { -- $qry .= ' WHERE ' . implode(' AND ', $parts); -- } -+ if ($parts) { -+ $qry .= ' WHERE ' . implode(' AND ', $parts); -+ } -hunk ./classes/Notice.php 497 -- return Notice::getStream($qry, -- 'public', -- $offset, $limit, $since_id, $before_id, NULL, $since); -- } -+ return Notice::getStream($qry, -+ 'public', -+ $offset, $limit, $since_id, $before_id, NULL, $since); -+ } -hunk ./classes/Notice.php 502 -- function addToInboxes() { -- $enabled = common_config('inboxes', 'enabled'); -+ function addToInboxes() { -+ $enabled = common_config('inboxes', 'enabled'); -hunk ./classes/Notice.php 505 -- if ($enabled === true || $enabled === 'transitional') { -- $inbox = new Notice_inbox(); -- $qry = 'INSERT INTO notice_inbox (user_id, notice_id, created) ' . -- 'SELECT user.id, ' . $this->id . ', "' . $this->created . '" ' . -- 'FROM user JOIN subscription ON user.id = subscription.subscriber ' . -- 'WHERE subscription.subscribed = ' . $this->profile_id . ' ' . -- 'AND NOT EXISTS (SELECT user_id, notice_id ' . -- 'FROM notice_inbox ' . -- 'WHERE user_id = user.id ' . -- 'AND notice_id = ' . $this->id . ' )'; -- if ($enabled === 'transitional') { -- $qry .= ' AND user.inboxed = 1'; -- } -- $inbox->query($qry); -- } -- return; -- } -+ if ($enabled === true || $enabled === 'transitional') { -+ $inbox = new Notice_inbox(); -+ $qry = 'INSERT INTO notice_inbox (user_id, notice_id, created) ' . -+ 'SELECT user.id, ' . $this->id . ', "' . $this->created . '" ' . -+ 'FROM user JOIN subscription ON user.id = subscription.subscriber ' . -+ 'WHERE subscription.subscribed = ' . $this->profile_id . ' ' . -+ 'AND NOT EXISTS (SELECT user_id, notice_id ' . -+ 'FROM notice_inbox ' . -+ 'WHERE user_id = user.id ' . -+ 'AND notice_id = ' . $this->id . ' )'; -+ if ($enabled === 'transitional') { -+ $qry .= ' AND user.inboxed = 1'; -+ } -+ $inbox->query($qry); -+ } -+ return; -+ } -hunk ./classes/Notice.php 523 -- # Delete from inboxes if we're deleted. -+ # Delete from inboxes if we're deleted. -hunk ./classes/Notice.php 525 -- function blowInboxes() { -+ function blowInboxes() { -hunk ./classes/Notice.php 527 -- $enabled = common_config('inboxes', 'enabled'); -+ $enabled = common_config('inboxes', 'enabled'); -hunk ./classes/Notice.php 529 -- if ($enabled === true || $enabled === 'transitional') { -- $inbox = new Notice_inbox(); -- $inbox->notice_id = $this->id; -- $inbox->delete(); -- } -+ if ($enabled === true || $enabled === 'transitional') { -+ $inbox = new Notice_inbox(); -+ $inbox->notice_id = $this->id; -+ $inbox->delete(); -+ } -hunk ./classes/Notice.php 535 -- return; -- } -+ return; -+ } +- function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0, $since=NULL) { ++ function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0, $since=null) { +hunk ./classes/Notice.php 499 +- $offset, $limit, $since_id, $before_id, NULL, $since); ++ $offset, $limit, $since_id, $before_id, null, $since); hunk ./classes/NoticeWrapper.php 38 -- var $notices = NULL; -- var $i = -1; -- -- function __construct($arr) { -- $this->notices = $arr; -- } -- -- function fetch() { -- static $fields = array('id', 'profile_id', 'uri', 'content', 'rendered', -- 'url', 'created', 'modified', 'reply_to', 'is_local', 'source'); -- $this->i++; -- if ($this->i >= count($this->notices)) { -- return false; -- } else { -- $n = $this->notices[$this->i]; -- foreach ($fields as $f) { -- $this->$f = $n->$f; -- } -- return true; -- } -- } -+ var $notices = NULL; -+ var $i = -1; -+ -+ function __construct($arr) { -+ $this->notices = $arr; -+ } -+ -+ function fetch() { -+ static $fields = array('id', 'profile_id', 'uri', 'content', 'rendered', -+ 'url', 'created', 'modified', 'reply_to', 'is_local', 'source'); -+ $this->i++; -+ if ($this->i >= count($this->notices)) { -+ return false; -+ } else { -+ $n = $this->notices[$this->i]; -+ foreach ($fields as $f) { -+ $this->$f = $n->$f; -+ } -+ return true; -+ } -+ } -hunk ./classes/Notice_tag.php 37 -- -- static function getStream($tag, $offset=0, $limit=20) { -- $qry = -- 'SELECT notice.* ' . -- 'FROM notice JOIN notice_tag ON notice.id = notice_tag.notice_id ' . -- 'WHERE notice_tag.tag = "%s" '; -+ -+ static function getStream($tag, $offset=0, $limit=20) { -+ $qry = -+ 'SELECT notice.* ' . -+ 'FROM notice JOIN notice_tag ON notice.id = notice_tag.notice_id ' . -+ 'WHERE notice_tag.tag = "%s" '; -hunk ./classes/Notice_tag.php 44 -- return Notice::getStream(sprintf($qry, $tag), -- 'notice_tag:notice_stream:' . common_keyize($tag), -- $offset, $limit); -- } -- -- function blowCache() { -- $cache = common_memcache(); -- if ($cache) { -- $cache->delete(common_cache_key('notice_tag:notice_stream:' . $this->tag)); -- } -- } -+ return Notice::getStream(sprintf($qry, $tag), -+ 'notice_tag:notice_stream:' . common_keyize($tag), -+ $offset, $limit); -+ } -+ -+ function blowCache() { -+ $cache = common_memcache(); -+ if ($cache) { -+ $cache->delete(common_cache_key('notice_tag:notice_stream:' . $this->tag)); -+ } -+ } +- var $notices = NULL; ++ var $notices = null; +hunk ./classes/Notice_inbox.php 36 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice_inbox',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Notice_inbox',$k,$v); } +hunk ./classes/Notice_source.php 20 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice_source',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Notice_source',$k,$v); } +hunk ./classes/Notice_tag.php 33 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice_tag',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Notice_tag',$k,$v); } +hunk ./classes/Profile.php 44 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Profile',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Profile',$k,$v); } hunk ./classes/Profile.php 49 -- function getAvatar($width, $height=NULL) { -- if (is_null($height)) { -- $height = $width; -- } -- return Avatar::pkeyGet(array('profile_id' => $this->id, -- 'width' => $width, -- 'height' => $height)); -- } -+ function getAvatar($width, $height=NULL) { -+ if (is_null($height)) { -+ $height = $width; -+ } -+ return Avatar::pkeyGet(array('profile_id' => $this->id, -+ 'width' => $width, -+ 'height' => $height)); -+ } -hunk ./classes/Profile.php 58 -- function getOriginalAvatar() { -- $avatar = DB_DataObject::factory('avatar'); -- $avatar->profile_id = $this->id; -- $avatar->original = true; -- if ($avatar->find(true)) { -- return $avatar; -- } else { -- return NULL; -- } -- } -+ function getOriginalAvatar() { -+ $avatar = DB_DataObject::factory('avatar'); -+ $avatar->profile_id = $this->id; -+ $avatar->original = true; -+ if ($avatar->find(true)) { -+ return $avatar; -+ } else { -+ return NULL; -+ } -+ } -hunk ./classes/Profile.php 69 -- function setOriginal($source) { -+ function setOriginal($source) { -hunk ./classes/Profile.php 71 -- $info = @getimagesize($source); -+ $info = @getimagesize($source); -hunk ./classes/Profile.php 73 -- if (!$info) { -- return NULL; -- } -+ if (!$info) { -+ return NULL; -+ } -hunk ./classes/Profile.php 77 -- $filename = common_avatar_filename($this->id, -- image_type_to_extension($info[2]), -- NULL, common_timestamp()); -- $filepath = common_avatar_path($filename); -+ $filename = common_avatar_filename($this->id, -+ image_type_to_extension($info[2]), -+ NULL, common_timestamp()); -+ $filepath = common_avatar_path($filename); -hunk ./classes/Profile.php 82 -- copy($source, $filepath); -+ copy($source, $filepath); -hunk ./classes/Profile.php 84 -- $avatar = new Avatar(); -+ $avatar = new Avatar(); -hunk ./classes/Profile.php 86 -- $avatar->profile_id = $this->id; -- $avatar->width = $info[0]; -- $avatar->height = $info[1]; -- $avatar->mediatype = image_type_to_mime_type($info[2]); -- $avatar->filename = $filename; -- $avatar->original = true; -- $avatar->url = common_avatar_url($filename); -- $avatar->created = DB_DataObject_Cast::dateTime(); # current time -+ $avatar->profile_id = $this->id; -+ $avatar->width = $info[0]; -+ $avatar->height = $info[1]; -+ $avatar->mediatype = image_type_to_mime_type($info[2]); -+ $avatar->filename = $filename; -+ $avatar->original = true; -+ $avatar->url = common_avatar_url($filename); -+ $avatar->created = DB_DataObject_Cast::dateTime(); # current time -hunk ./classes/Profile.php 95 -- # XXX: start a transaction here -+ # XXX: start a transaction here -hunk ./classes/Profile.php 97 -- if (!$this->delete_avatars()) { -- @unlink($filepath); -- return NULL; -- } -+ if (!$this->delete_avatars()) { -+ @unlink($filepath); -+ return NULL; -+ } -hunk ./classes/Profile.php 102 -- if (!$avatar->insert()) { -- @unlink($filepath); -- return NULL; -- } -+ if (!$avatar->insert()) { -+ @unlink($filepath); -+ return NULL; -+ } -hunk ./classes/Profile.php 107 -- foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { -- # We don't do a scaled one if original is our scaled size -- if (!($avatar->width == $size && $avatar->height == $size)) { -- $s = $avatar->scale($size); -- if (!$s) { -- return NULL; -- } -- } -- } -+ foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { -+ # We don't do a scaled one if original is our scaled size -+ if (!($avatar->width == $size && $avatar->height == $size)) { -+ $s = $avatar->scale($size); -+ if (!$s) { -+ return NULL; -+ } -+ } -+ } -hunk ./classes/Profile.php 117 -- return $avatar; -- } -+ return $avatar; -+ } -hunk ./classes/Profile.php 120 -- function delete_avatars() { -- $avatar = new Avatar(); -- $avatar->profile_id = $this->id; -- $avatar->find(); -- while ($avatar->fetch()) { -- $avatar->delete(); -- } -- return true; -- } -+ function delete_avatars() { -+ $avatar = new Avatar(); -+ $avatar->profile_id = $this->id; -+ $avatar->find(); -+ while ($avatar->fetch()) { -+ $avatar->delete(); -+ } -+ return true; -+ } -hunk ./classes/Profile.php 130 -- function getBestName() { -- return ($this->fullname) ? $this->fullname : $this->nickname; -- } -+ function getBestName() { -+ return ($this->fullname) ? $this->fullname : $this->nickname; -+ } +- function getAvatar($width, $height=NULL) { ++ function getAvatar($width, $height=null) { +hunk ./classes/Profile.php 65 +- return NULL; ++ return null; +hunk ./classes/Profile.php 74 +- return NULL; ++ return null; +hunk ./classes/Profile.php 79 +- NULL, common_timestamp()); ++ null, common_timestamp()); +hunk ./classes/Profile.php 99 +- return NULL; ++ return null; +hunk ./classes/Profile.php 104 +- return NULL; ++ return null; +hunk ./classes/Profile.php 112 +- return NULL; ++ return null; hunk ./classes/Profile.php 135 -- function getCurrentNotice($dt=NULL) { -- $notice = new Notice(); -- $notice->profile_id = $this->id; -- if ($dt) { -- $notice->whereAdd('created < "' . $dt . '"'); -- } -- $notice->orderBy('created DESC, notice.id DESC'); -- $notice->limit(1); -- if ($notice->find(true)) { -- return $notice; -- } -- return NULL; -- } -+ function getCurrentNotice($dt=NULL) { -+ $notice = new Notice(); -+ $notice->profile_id = $this->id; -+ if ($dt) { -+ $notice->whereAdd('created < "' . $dt . '"'); -+ } -+ $notice->orderBy('created DESC, notice.id DESC'); -+ $notice->limit(1); -+ if ($notice->find(true)) { -+ return $notice; -+ } -+ return NULL; -+ } -hunk ./classes/Profile.php 149 -- function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { -- $qry = -- 'SELECT * ' . -- 'FROM notice ' . -- 'WHERE profile_id = %d '; -+ function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { -+ $qry = -+ 'SELECT * ' . -+ 'FROM notice ' . -+ 'WHERE profile_id = %d '; -hunk ./classes/Profile.php 155 -- return Notice::getStream(sprintf($qry, $this->id), -- 'profile:notices:'.$this->id, -- $offset, $limit, $since_id, $before_id); -- } -+ return Notice::getStream(sprintf($qry, $this->id), -+ 'profile:notices:'.$this->id, -+ $offset, $limit, $since_id, $before_id); -+ } -hunk ./classes/Profile_tag.php 24 -- static function getTags($tagger, $tagged) { -- -- $tags = array(); -+ static function getTags($tagger, $tagged) { -+ -+ $tags = array(); -hunk ./classes/Profile_tag.php 28 -- # XXX: store this in memcached -- -- $profile_tag = new Profile_tag(); -- $profile_tag->tagger = $tagger; -- $profile_tag->tagged = $tagged; -- -- $profile_tag->find(); -- -- while ($profile_tag->fetch()) { -- $tags[] = $profile_tag->tag; -- } -- -- $profile_tag->free(); -- -- return $tags; -- } -- -- static function setTags($tagger, $tagged, $newtags) { -- -- $oldtags = Profile_tag::getTags($tagger, $tagged); -- -- # Delete stuff that's old that not in new -- -- $to_delete = array_diff($oldtags, $newtags); -- -- # Insert stuff that's in new and not in old -- -- $to_insert = array_diff($newtags, $oldtags); -- -- $profile_tag = new Profile_tag(); -- -- $profile_tag->tagger = $tagger; -- $profile_tag->tagged = $tagged; -- -- $profile_tag->query('BEGIN'); -- -- foreach ($to_delete as $deltag) { -- $profile_tag->tag = $deltag; -- $result = $profile_tag->delete(); -- if (!$result) { -- common_log_db_error($profile_tag, 'DELETE', __FILE__); -- return false; -- } -- } -- -- foreach ($to_insert as $instag) { -- $profile_tag->tag = $instag; -- $result = $profile_tag->insert(); -- if (!$result) { -- common_log_db_error($profile_tag, 'INSERT', __FILE__); -- return false; -- } -- } -- -- $profile_tag->query('COMMIT'); -- -- return true; -- } -- -- # Return profiles with a given tag -- static function getTagged($tagger, $tag) { -- $profile = new Profile(); -- $profile->query('SELECT profile.* ' . -- 'FROM profile JOIN profile_tag ' . -- 'ON profile.id = profile_tag.tagged ' . -- 'WHERE profile_tag.tagger = ' . $tagger . ' ' . -- 'AND profile_tag.tag = "' . $tag . '" '); -- $tagged = array(); -- while ($profile->fetch()) { -- $tagged[] = clone($profile); -- } -- return $tagged; -- } -+ # XXX: store this in memcached -+ -+ $profile_tag = new Profile_tag(); -+ $profile_tag->tagger = $tagger; -+ $profile_tag->tagged = $tagged; -+ -+ $profile_tag->find(); -+ -+ while ($profile_tag->fetch()) { -+ $tags[] = $profile_tag->tag; -+ } -+ -+ $profile_tag->free(); -+ -+ return $tags; -+ } -+ -+ static function setTags($tagger, $tagged, $newtags) { -+ -+ $oldtags = Profile_tag::getTags($tagger, $tagged); -+ -+ # Delete stuff that's old that not in new -+ -+ $to_delete = array_diff($oldtags, $newtags); -+ -+ # Insert stuff that's in new and not in old -+ -+ $to_insert = array_diff($newtags, $oldtags); -+ -+ $profile_tag = new Profile_tag(); -+ -+ $profile_tag->tagger = $tagger; -+ $profile_tag->tagged = $tagged; -+ -+ $profile_tag->query('BEGIN'); -+ -+ foreach ($to_delete as $deltag) { -+ $profile_tag->tag = $deltag; -+ $result = $profile_tag->delete(); -+ if (!$result) { -+ common_log_db_error($profile_tag, 'DELETE', __FILE__); -+ return false; -+ } -+ } -+ -+ foreach ($to_insert as $instag) { -+ $profile_tag->tag = $instag; -+ $result = $profile_tag->insert(); -+ if (!$result) { -+ common_log_db_error($profile_tag, 'INSERT', __FILE__); -+ return false; -+ } -+ } -+ -+ $profile_tag->query('COMMIT'); -+ -+ return true; -+ } -+ -+ # Return profiles with a given tag -+ static function getTagged($tagger, $tag) { -+ $profile = new Profile(); -+ $profile->query('SELECT profile.* ' . -+ 'FROM profile JOIN profile_tag ' . -+ 'ON profile.id = profile_tag.tagged ' . -+ 'WHERE profile_tag.tagger = ' . $tagger . ' ' . -+ 'AND profile_tag.tag = "' . $tag . '" '); -+ $tagged = array(); -+ while ($profile->fetch()) { -+ $tagged[] = clone($profile); -+ } -+ return $tagged; -+ } -hunk ./classes/Queue_item.php 25 -- -- static function top($transport) { -+ -+ static function top($transport) { -hunk ./classes/Queue_item.php 28 -- $qi = new Queue_item(); -- $qi->transport = $transport; -- $qi->orderBy('created'); -- $qi->whereAdd('claimed is NULL'); -+ $qi = new Queue_item(); -+ $qi->transport = $transport; -+ $qi->orderBy('created'); -+ $qi->whereAdd('claimed is NULL'); -hunk ./classes/Queue_item.php 33 -- $qi->limit(1); -+ $qi->limit(1); -hunk ./classes/Queue_item.php 35 -- $cnt = $qi->find(TRUE); -+ $cnt = $qi->find(TRUE); -hunk ./classes/Queue_item.php 37 -- if ($cnt) { -- # XXX: potential race condition -- # can we force it to only update if claimed is still NULL -- # (or old)? -- common_log(LOG_INFO, 'claiming queue item = ' . $qi->notice_id . ' for transport ' . $transport); -- $orig = clone($qi); -- $qi->claimed = common_sql_now(); -- $result = $qi->update($orig); -- if ($result) { -- common_log(LOG_INFO, 'claim succeeded.'); -- return $qi; -- } else { -- common_log(LOG_INFO, 'claim failed.'); -- } -- } -- $qi = NULL; -- return NULL; -- } -+ if ($cnt) { -+ # XXX: potential race condition -+ # can we force it to only update if claimed is still NULL -+ # (or old)? -+ common_log(LOG_INFO, 'claiming queue item = ' . $qi->notice_id . ' for transport ' . $transport); -+ $orig = clone($qi); -+ $qi->claimed = common_sql_now(); -+ $result = $qi->update($orig); -+ if ($result) { -+ common_log(LOG_INFO, 'claim succeeded.'); -+ return $qi; -+ } else { -+ common_log(LOG_INFO, 'claim failed.'); -+ } -+ } -+ $qi = NULL; -+ return NULL; -+ } -hunk ./classes/Sms_carrier.php 24 -- -- function toEmailAddress($sms) { -- return sprintf($this->email_pattern, $sms); -- } -+ -+ function toEmailAddress($sms) { -+ return sprintf($this->email_pattern, $sms); -+ } -hunk ./classes/Subscription.php 47 -- -- function &pkeyGet($kv) { -- return Memcached_DataObject::pkeyGet('Subscription', $kv); -- } -+ -+ function &pkeyGet($kv) { -+ return Memcached_DataObject::pkeyGet('Subscription', $kv); -+ } -hunk ./classes/User.php 70 -- function getProfile() { -- return Profile::staticGet('id', $this->id); -- } -+ function getProfile() { -+ return Profile::staticGet('id', $this->id); -+ } -hunk ./classes/User.php 74 -- function isSubscribed($other) { -- assert(!is_null($other)); -- # XXX: cache results of this query -- $sub = Subscription::pkeyGet(array('subscriber' => $this->id, -- 'subscribed' => $other->id)); -- return (is_null($sub)) ? false : true; -- } -+ function isSubscribed($other) { -+ assert(!is_null($other)); -+ # XXX: cache results of this query -+ $sub = Subscription::pkeyGet(array('subscriber' => $this->id, -+ 'subscribed' => $other->id)); -+ return (is_null($sub)) ? false : true; -+ } -hunk ./classes/User.php 82 -- # 'update' won't write key columns, so we have to do it ourselves. -+ # 'update' won't write key columns, so we have to do it ourselves. -hunk ./classes/User.php 84 -- function updateKeys(&$orig) { -- $parts = array(); -- foreach (array('nickname', 'email', 'jabber', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) { -- if (strcmp($this->$k, $orig->$k) != 0) { -- $parts[] = $k . ' = ' . $this->_quote($this->$k); -- } -- } -- if (count($parts) == 0) { -- # No changes -- return true; -- } -- $toupdate = implode(', ', $parts); -+ function updateKeys(&$orig) { -+ $parts = array(); -+ foreach (array('nickname', 'email', 'jabber', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) { -+ if (strcmp($this->$k, $orig->$k) != 0) { -+ $parts[] = $k . ' = ' . $this->_quote($this->$k); -+ } -+ } -+ if (count($parts) == 0) { -+ # No changes -+ return true; -+ } -+ $toupdate = implode(', ', $parts); -hunk ./classes/User.php 97 -- $table = $this->tableName(); -- if(common_config('db','quote_identifiers')) { -- $table = '"' . $table . '"'; -- } -- $qry = 'UPDATE ' . $table . ' SET ' . $toupdate . -- ' WHERE id = ' . $this->id; -- $orig->decache(); -- $result = $this->query($qry); -- if ($result) { -- $this->encache(); -- } -- return $result; -- } -+ $table = $this->tableName(); -+ if(common_config('db','quote_identifiers')) { -+ $table = '"' . $table . '"'; -+ } -+ $qry = 'UPDATE ' . $table . ' SET ' . $toupdate . -+ ' WHERE id = ' . $this->id; -+ $orig->decache(); -+ $result = $this->query($qry); -+ if ($result) { -+ $this->encache(); -+ } -+ return $result; -+ } -hunk ./classes/User.php 111 -- function allowed_nickname($nickname) { -- # XXX: should already be validated for size, content, etc. -- static $blacklist = array('rss', 'xrds', 'doc', 'main', -- 'settings', 'notice', 'user', -- 'search', 'avatar', 'tag', 'tags', -- 'api', 'message'); -- $merged = array_merge($blacklist, common_config('nickname', 'blacklist')); -- return !in_array($nickname, $merged); -- } -+ function allowed_nickname($nickname) { -+ # XXX: should already be validated for size, content, etc. -+ static $blacklist = array('rss', 'xrds', 'doc', 'main', -+ 'settings', 'notice', 'user', -+ 'search', 'avatar', 'tag', 'tags', -+ 'api', 'message'); -+ $merged = array_merge($blacklist, common_config('nickname', 'blacklist')); -+ return !in_array($nickname, $merged); -+ } +- function getCurrentNotice($dt=NULL) { ++ function getCurrentNotice($dt=null) { +hunk ./classes/Profile.php 146 +- return NULL; ++ return null; +hunk ./classes/Profile_block.php 39 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Profile_block',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Profile_block',$k,$v); } +hunk ./classes/Profile_tag.php 19 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Profile_tag',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Profile_tag',$k,$v); } +hunk ./classes/Queue_item.php 19 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Queue_item',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Queue_item',$k,$v); } +hunk ./classes/Queue_item.php 31 +- $qi->whereAdd('claimed is NULL'); ++ $qi->whereAdd('claimed is null'); +hunk ./classes/Queue_item.php 39 +- # can we force it to only update if claimed is still NULL ++ # can we force it to only update if claimed is still null +hunk ./classes/Queue_item.php 52 +- $qi = NULL; +- return NULL; ++ $qi = null; ++ return null; +hunk ./classes/Remember_me.php 18 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Remember_me',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Remember_me',$k,$v); } +hunk ./classes/Remote_profile.php 41 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Remote_profile',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Remote_profile',$k,$v); } +hunk ./classes/Reply.php 19 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Reply',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Reply',$k,$v); } +hunk ./classes/Sms_carrier.php 20 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Sms_carrier',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Sms_carrier',$k,$v); } +hunk ./classes/Subscription.php 43 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Subscription',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Subscription',$k,$v); } +hunk ./classes/Token.php 22 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Token',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('Token',$k,$v); } +hunk ./classes/User.php 65 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('User',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('User',$k,$v); } hunk ./classes/User.php 121 -- function getCurrentNotice($dt=NULL) { -- $profile = $this->getProfile(); -- if (!$profile) { -- return NULL; -- } -- return $profile->getCurrentNotice($dt); -- } -+ function getCurrentNotice($dt=NULL) { -+ $profile = $this->getProfile(); -+ if (!$profile) { -+ return NULL; -+ } -+ return $profile->getCurrentNotice($dt); -+ } -hunk ./classes/User.php 129 -- function getCarrier() { -- return Sms_carrier::staticGet('id', $this->carrier); -- } -+ function getCarrier() { -+ return Sms_carrier::staticGet('id', $this->carrier); -+ } -hunk ./classes/User.php 133 -- function subscribeTo($other) { -- $sub = new Subscription(); -- $sub->subscriber = $this->id; -- $sub->subscribed = $other->id; -+ function subscribeTo($other) { -+ $sub = new Subscription(); -+ $sub->subscriber = $this->id; -+ $sub->subscribed = $other->id; -hunk ./classes/User.php 138 -- $sub->created = common_sql_now(); # current time -+ $sub->created = common_sql_now(); # current time -hunk ./classes/User.php 140 -- if (!$sub->insert()) { -- return false; -- } -+ if (!$sub->insert()) { -+ return false; -+ } -hunk ./classes/User.php 144 -- return true; -- } -+ return true; -+ } -hunk ./classes/User.php 161 -- static function register($fields) { -+ static function register($fields) { -hunk ./classes/User.php 163 -- # MAGICALLY put fields into current scope -+ # MAGICALLY put fields into current scope -hunk ./classes/User.php 165 -- extract($fields); -+ extract($fields); -hunk ./classes/User.php 167 -- $profile = new Profile(); -+ $profile = new Profile(); -hunk ./classes/User.php 169 -- $profile->query('BEGIN'); -+ $profile->query('BEGIN'); -hunk ./classes/User.php 171 -- $profile->nickname = $nickname; -- $profile->profileurl = common_profile_url($nickname); -+ $profile->nickname = $nickname; -+ $profile->profileurl = common_profile_url($nickname); -hunk ./classes/User.php 174 -- if ($fullname) { -- $profile->fullname = $fullname; -- } -- if ($homepage) { -- $profile->homepage = $homepage; -- } -- if ($bio) { -- $profile->bio = $bio; -- } -- if ($location) { -- $profile->location = $location; -- } -+ if ($fullname) { -+ $profile->fullname = $fullname; -+ } -+ if ($homepage) { -+ $profile->homepage = $homepage; -+ } -+ if ($bio) { -+ $profile->bio = $bio; -+ } -+ if ($location) { -+ $profile->location = $location; -+ } -hunk ./classes/User.php 187 -- $profile->created = common_sql_now(); -+ $profile->created = common_sql_now(); -hunk ./classes/User.php 189 -- $id = $profile->insert(); -+ $id = $profile->insert(); -hunk ./classes/User.php 191 -- if (!$id) { -- common_log_db_error($profile, 'INSERT', __FILE__); -- return FALSE; -- } -+ if (!$id) { -+ common_log_db_error($profile, 'INSERT', __FILE__); -+ return FALSE; -+ } -hunk ./classes/User.php 196 -- $user = new User(); -+ $user = new User(); -hunk ./classes/User.php 198 -- $user->id = $id; -- $user->nickname = $nickname; -+ $user->id = $id; -+ $user->nickname = $nickname; -hunk ./classes/User.php 201 -- if ($password) { # may not have a password for OpenID users -- $user->password = common_munge_password($password, $id); -- } -+ if ($password) { # may not have a password for OpenID users -+ $user->password = common_munge_password($password, $id); -+ } -hunk ./classes/User.php 205 -- # Users who respond to invite email have proven their ownership of that address -+ # Users who respond to invite email have proven their ownership of that address -hunk ./classes/User.php 207 -- if ($code) { -- $invite = Invitation::staticGet($code); -- if ($invite && $invite->address && $invite->address_type == 'email' && $invite->address == $email) { -- $user->email = $invite->address; -- } -- } -+ if ($code) { -+ $invite = Invitation::staticGet($code); -+ if ($invite && $invite->address && $invite->address_type == 'email' && $invite->address == $email) { -+ $user->email = $invite->address; -+ } -+ } -hunk ./classes/User.php 214 -- $inboxes = common_config('inboxes', 'enabled'); -+ $inboxes = common_config('inboxes', 'enabled'); -hunk ./classes/User.php 216 -- if ($inboxes === true || $inboxes == 'transitional') { -- $user->inboxed = 1; -- } -+ if ($inboxes === true || $inboxes == 'transitional') { -+ $user->inboxed = 1; -+ } -hunk ./classes/User.php 220 -- $user->created = common_sql_now(); -- $user->uri = common_user_uri($user); -+ $user->created = common_sql_now(); -+ $user->uri = common_user_uri($user); -hunk ./classes/User.php 223 -- $result = $user->insert(); -+ $result = $user->insert(); -hunk ./classes/User.php 225 -- if (!$result) { -- common_log_db_error($user, 'INSERT', __FILE__); -- return FALSE; -- } -+ if (!$result) { -+ common_log_db_error($user, 'INSERT', __FILE__); -+ return FALSE; -+ } -hunk ./classes/User.php 230 -- # Everyone is subscribed to themself -+ # Everyone is subscribed to themself -hunk ./classes/User.php 232 -- $subscription = new Subscription(); -- $subscription->subscriber = $user->id; -- $subscription->subscribed = $user->id; -- $subscription->created = $user->created; -+ $subscription = new Subscription(); -+ $subscription->subscriber = $user->id; -+ $subscription->subscribed = $user->id; -+ $subscription->created = $user->created; -hunk ./classes/User.php 237 -- $result = $subscription->insert(); -+ $result = $subscription->insert(); -hunk ./classes/User.php 239 -- if (!$result) { -- common_log_db_error($subscription, 'INSERT', __FILE__); -- return FALSE; -- } -+ if (!$result) { -+ common_log_db_error($subscription, 'INSERT', __FILE__); -+ return FALSE; -+ } -hunk ./classes/User.php 244 -- if ($email && !$user->email) { -+ if ($email && !$user->email) { -hunk ./classes/User.php 246 -- $confirm = new Confirm_address(); -- $confirm->code = common_confirmation_code(128); -- $confirm->user_id = $user->id; -- $confirm->address = $email; -- $confirm->address_type = 'email'; -+ $confirm = new Confirm_address(); -+ $confirm->code = common_confirmation_code(128); -+ $confirm->user_id = $user->id; -+ $confirm->address = $email; -+ $confirm->address_type = 'email'; -hunk ./classes/User.php 252 -- $result = $confirm->insert(); -- if (!$result) { -- common_log_db_error($confirm, 'INSERT', __FILE__); -- return FALSE; -- } -- } -+ $result = $confirm->insert(); -+ if (!$result) { -+ common_log_db_error($confirm, 'INSERT', __FILE__); -+ return FALSE; -+ } -+ } -hunk ./classes/User.php 259 -- if ($code && $user->email) { -- $user->emailChanged(); -- } -+ if ($code && $user->email) { -+ $user->emailChanged(); -+ } -hunk ./classes/User.php 263 -- $profile->query('COMMIT'); -+ $profile->query('COMMIT'); -hunk ./classes/User.php 265 -- if ($email && !$user->email) { -- mail_confirm_address($user, $confirm->code, $profile->nickname, $email); -- } -+ if ($email && !$user->email) { -+ mail_confirm_address($user, $confirm->code, $profile->nickname, $email); -+ } -hunk ./classes/User.php 269 -- return $user; -- } -+ return $user; -+ } -hunk ./classes/User.php 272 -- # Things we do when the email changes -+ # Things we do when the email changes -hunk ./classes/User.php 274 -- function emailChanged() { -+ function emailChanged() { -hunk ./classes/User.php 276 -- $invites = new Invitation(); -- $invites->address = $this->email; -- $invites->address_type = 'email'; -+ $invites = new Invitation(); -+ $invites->address = $this->email; -+ $invites->address_type = 'email'; -hunk ./classes/User.php 280 -- if ($invites->find()) { -- while ($invites->fetch()) { -- $other = User::staticGet($invites->user_id); -- subs_subscribe_to($other, $this); -- } -- } -- } -+ if ($invites->find()) { -+ while ($invites->fetch()) { -+ $other = User::staticGet($invites->user_id); -+ subs_subscribe_to($other, $this); -+ } -+ } -+ } -hunk ./classes/User.php 288 -- function hasFave($notice) { -- $cache = common_memcache(); -+ function hasFave($notice) { -+ $cache = common_memcache(); -hunk ./classes/User.php 291 -- # XXX: Kind of a hack. -- if ($cache) { -- # This is the stream of favorite notices, in rev chron -- # order. This forces it into cache. -- $faves = $this->favoriteNotices(0, NOTICE_CACHE_WINDOW); -- $cnt = 0; -- while ($faves->fetch()) { -- if ($faves->id < $notice->id) { -- # If we passed it, it's not a fave -- return false; -- } else if ($faves->id == $notice->id) { -- # If it matches a cached notice, then it's a fave -- return true; -- } -- $cnt++; -- } -- # If we're not past the end of the cache window, -- # then the cache has all available faves, so this one -- # is not a fave. -- if ($cnt < NOTICE_CACHE_WINDOW) { -- return false; -- } -- # Otherwise, cache doesn't have all faves; -- # fall through to the default -- } -- $fave = Fave::pkeyGet(array('user_id' => $this->id, -- 'notice_id' => $notice->id)); -- return ((is_null($fave)) ? false : true); -- } -- function mutuallySubscribed($other) { -- return $this->isSubscribed($other) && -- $other->isSubscribed($this); -- } -+ # XXX: Kind of a hack. -+ if ($cache) { -+ # This is the stream of favorite notices, in rev chron -+ # order. This forces it into cache. -+ $faves = $this->favoriteNotices(0, NOTICE_CACHE_WINDOW); -+ $cnt = 0; -+ while ($faves->fetch()) { -+ if ($faves->id < $notice->id) { -+ # If we passed it, it's not a fave -+ return false; -+ } else if ($faves->id == $notice->id) { -+ # If it matches a cached notice, then it's a fave -+ return true; -+ } -+ $cnt++; -+ } -+ # If we're not past the end of the cache window, -+ # then the cache has all available faves, so this one -+ # is not a fave. -+ if ($cnt < NOTICE_CACHE_WINDOW) { -+ return false; -+ } -+ # Otherwise, cache doesn't have all faves; -+ # fall through to the default -+ } -+ $fave = Fave::pkeyGet(array('user_id' => $this->id, -+ 'notice_id' => $notice->id)); -+ return ((is_null($fave)) ? false : true); -+ } -+ function mutuallySubscribed($other) { -+ return $this->isSubscribed($other) && -+ $other->isSubscribed($this); -+ } -hunk ./classes/User.php 327 -- # 3-way join; probably should get cached -- $qry = 'SELECT user.* ' . -- 'FROM subscription sub1 JOIN user ON sub1.subscribed = user.id ' . -- 'JOIN subscription sub2 ON user.id = sub2.subscriber ' . -- 'WHERE sub1.subscriber = %d and sub2.subscribed = %d ' . -- 'ORDER BY user.nickname'; -- $user = new User(); -- $user->query(sprintf($qry, $this->id, $this->id)); -+ # 3-way join; probably should get cached -+ $qry = 'SELECT user.* ' . -+ 'FROM subscription sub1 JOIN user ON sub1.subscribed = user.id ' . -+ 'JOIN subscription sub2 ON user.id = sub2.subscriber ' . -+ 'WHERE sub1.subscriber = %d and sub2.subscribed = %d ' . -+ 'ORDER BY user.nickname'; -+ $user = new User(); -+ $user->query(sprintf($qry, $this->id, $this->id)); -hunk ./classes/User.php 336 -- return $user; -- } -+ return $user; -+ } +- function getCurrentNotice($dt=NULL) { ++ function getCurrentNotice($dt=null) { +hunk ./classes/User.php 124 +- return NULL; ++ return null; hunk ./classes/User.php 339 -- function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=NULL) { -- $qry = -- 'SELECT notice.* ' . -- 'FROM notice JOIN reply ON notice.id = reply.notice_id ' . -- 'WHERE reply.profile_id = %d '; -- return Notice::getStream(sprintf($qry, $this->id), -- 'user:replies:'.$this->id, -- $offset, $limit, $since_id, $before_id, NULL, $since); -- } -+ function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=NULL) { -+ $qry = -+ 'SELECT notice.* ' . -+ 'FROM notice JOIN reply ON notice.id = reply.notice_id ' . -+ 'WHERE reply.profile_id = %d '; -+ return Notice::getStream(sprintf($qry, $this->id), -+ 'user:replies:'.$this->id, -+ $offset, $limit, $since_id, $before_id, NULL, $since); -+ } -hunk ./classes/User.php 356 -- } -+ } -hunk ./classes/User.php 359 -- $qry = -- 'SELECT notice.* ' . -- 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . -- 'WHERE fave.user_id = %d '; -- return Notice::getStream(sprintf($qry, $this->id), -- 'user:faves:'.$this->id, -- $offset, $limit); -- } -+ $qry = -+ 'SELECT notice.* ' . -+ 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . -+ 'WHERE fave.user_id = %d '; -+ return Notice::getStream(sprintf($qry, $this->id), -+ 'user:faves:'.$this->id, -+ $offset, $limit); -+ } -hunk ./classes/User.php 369 -- $enabled = common_config('inboxes', 'enabled'); -+ $enabled = common_config('inboxes', 'enabled'); -hunk ./classes/User.php 371 -- # Complicated code, depending on whether we support inboxes yet -- # XXX: make this go away when inboxes become mandatory -+ # Complicated code, depending on whether we support inboxes yet -+ # XXX: make this go away when inboxes become mandatory -hunk ./classes/User.php 374 -- if ($enabled === false || -- ($enabled == 'transitional' && $this->inboxed == 0)) { -- $qry = -- 'SELECT notice.* ' . -- 'FROM notice JOIN subscription ON notice.profile_id = subscription.subscribed ' . -- 'WHERE subscription.subscriber = %d '; -- $order = NULL; -- } else if ($enabled === true || -- ($enabled == 'transitional' && $this->inboxed == 1)) { -+ if ($enabled === false || -+ ($enabled == 'transitional' && $this->inboxed == 0)) { -+ $qry = -+ 'SELECT notice.* ' . -+ 'FROM notice JOIN subscription ON notice.profile_id = subscription.subscribed ' . -+ 'WHERE subscription.subscriber = %d '; -+ $order = NULL; -+ } else if ($enabled === true || -+ ($enabled == 'transitional' && $this->inboxed == 1)) { -hunk ./classes/User.php 384 -- $qry = -- 'SELECT notice.* ' . -- 'FROM notice JOIN notice_inbox ON notice.id = notice_inbox.notice_id ' . -- 'WHERE notice_inbox.user_id = %d '; -- # NOTE: we override ORDER -- $order = 'ORDER BY notice_inbox.created DESC, notice_inbox.notice_id DESC '; -- } -- return Notice::getStream(sprintf($qry, $this->id), -- 'user:notices_with_friends:' . $this->id, -- $offset, $limit, $since_id, $before_id, -- $order, $since); -- } -+ $qry = -+ 'SELECT notice.* ' . -+ 'FROM notice JOIN notice_inbox ON notice.id = notice_inbox.notice_id ' . -+ 'WHERE notice_inbox.user_id = %d '; -+ # NOTE: we override ORDER -+ $order = 'ORDER BY notice_inbox.created DESC, notice_inbox.notice_id DESC '; -+ } -+ return Notice::getStream(sprintf($qry, $this->id), -+ 'user:notices_with_friends:' . $this->id, -+ $offset, $limit, $since_id, $before_id, -+ $order, $since); -+ } -hunk ./classes/User.php 398 -- $cache = common_memcache(); -- if ($cache) { -- # Faves don't happen chronologically, so we need to blow -- # ;last cache, too -- $cache->delete(common_cache_key('user:faves:'.$this->id)); -- $cache->delete(common_cache_key('user:faves:'.$this->id).';last'); -- } -- } -+ $cache = common_memcache(); -+ if ($cache) { -+ # Faves don't happen chronologically, so we need to blow -+ # ;last cache, too -+ $cache->delete(common_cache_key('user:faves:'.$this->id)); -+ $cache->delete(common_cache_key('user:faves:'.$this->id).';last'); -+ } -+ } -hunk ./classes/User.php 408 -- return Profile_tag::getTags($this->id, $this->id); -- } -+ return Profile_tag::getTags($this->id, $this->id); -+ } -hunk ./classes/User.php 412 -- return Profile_tag::setTags($this->id, $this->id, $newtags); -- } -+ return Profile_tag::setTags($this->id, $this->id, $newtags); -+ } -hunk ./classes/User.php 437 -- $sub = Subscription::pkeyGet(array('subscriber' => $other->id, -- 'subscribed' => $this->id)); -+ $sub = Subscription::pkeyGet(array('subscriber' => $other->id, -+ 'subscribed' => $this->id)); -hunk ./lib/common.php 57 -- array('name' => 'Just another Laconica microblog', -- 'server' => 'localhost', -- 'theme' => 'default', -- 'path' => '/', -- 'logfile' => NULL, -- 'fancy' => false, -- 'locale_path' => INSTALLDIR.'/locale', -- 'language' => 'en_US', -- 'languages' => get_all_languages(), -- 'email' => -- array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : NULL, -- 'broughtby' => NULL, -- 'timezone' => 'UTC', -- 'broughtbyurl' => NULL, -- 'closed' => false, -- 'inviteonly' => false, -+ array('name' => 'Just another Laconica microblog', -+ 'server' => 'localhost', -+ 'theme' => 'default', -+ 'path' => '/', -+ 'logfile' => NULL, -+ 'fancy' => false, -+ 'locale_path' => INSTALLDIR.'/locale', -+ 'language' => 'en_US', -+ 'languages' => get_all_languages(), -+ 'email' => -+ array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : NULL, -+ 'broughtby' => NULL, -+ 'timezone' => 'UTC', -+ 'broughtbyurl' => NULL, -+ 'closed' => false, -+ 'inviteonly' => false, -hunk ./lib/common.php 74 -- 'syslog' => -- array('appname' => 'laconica', # for syslog -- 'priority' => 'debug'), # XXX: currently ignored -- 'queue' => -- array('enabled' => false), -- 'license' => -- array('url' => 'http://creativecommons.org/licenses/by/3.0/', -- 'title' => 'Creative Commons Attribution 3.0', -- 'image' => 'http://i.creativecommons.org/l/by/3.0/88x31.png'), -- 'mail' => -- array('backend' => 'mail', -- 'params' => NULL), -- 'nickname' => -- array('blacklist' => array(), -- 'featured' => array()), -- 'profile' => -- array('banned' => array()), -- 'avatar' => -- array('server' => NULL), -- 'public' => -- array('localonly' => true, -- 'blacklist' => array()), -- 'theme' => -- array('server' => NULL), -- 'throttle' => -+ 'syslog' => -+ array('appname' => 'laconica', # for syslog -+ 'priority' => 'debug'), # XXX: currently ignored -+ 'queue' => -+ array('enabled' => false), -+ 'license' => -+ array('url' => 'http://creativecommons.org/licenses/by/3.0/', -+ 'title' => 'Creative Commons Attribution 3.0', -+ 'image' => 'http://i.creativecommons.org/l/by/3.0/88x31.png'), -+ 'mail' => -+ array('backend' => 'mail', -+ 'params' => NULL), -+ 'nickname' => -+ array('blacklist' => array(), -+ 'featured' => array()), -+ 'profile' => -+ array('banned' => array()), -+ 'avatar' => -+ array('server' => NULL), -+ 'public' => -+ array('localonly' => true, -+ 'blacklist' => array()), -+ 'theme' => -+ array('server' => NULL), -+ 'throttle' => -hunk ./lib/common.php 102 -- 'xmpp' => -- array('enabled' => false, -- 'server' => 'INVALID SERVER', -- 'port' => 5222, -- 'user' => 'update', -- 'encryption' => true, -- 'resource' => 'uniquename', -- 'password' => 'blahblahblah', -- 'host' => NULL, # only set if != server -- 'debug' => false, # print extra debug info -- 'public' => array()), # JIDs of users who want to receive the public stream -+ 'xmpp' => -+ array('enabled' => false, -+ 'server' => 'INVALID SERVER', -+ 'port' => 5222, -+ 'user' => 'update', -+ 'encryption' => true, -+ 'resource' => 'uniquename', -+ 'password' => 'blahblahblah', -+ 'host' => NULL, # only set if != server -+ 'debug' => false, # print extra debug info -+ 'public' => array()), # JIDs of users who want to receive the public stream -hunk ./lib/common.php 117 -- 'tag' => -- array('dropoff' => 864000.0), -- 'popular' => -- array('dropoff' => 864000.0), -- 'daemon' => -- array('piddir' => '/var/run', -- 'user' => false, -- 'group' => false), -- 'integration' => -- array('source' => 'Laconica'), # source attribute for Twitter -- 'memcached' => -- array('enabled' => false, -- 'server' => 'localhost', -- 'port' => 11211), -- 'inboxes' => -- array('enabled' => true), # on by default for new sites -- ); -+ 'tag' => -+ array('dropoff' => 864000.0), -+ 'popular' => -+ array('dropoff' => 864000.0), -+ 'daemon' => -+ array('piddir' => '/var/run', -+ 'user' => false, -+ 'group' => false), -+ 'integration' => -+ array('source' => 'Laconica'), # source attribute for Twitter -+ 'memcached' => -+ array('enabled' => false, -+ 'server' => 'localhost', -+ 'port' => 11211), -+ 'inboxes' => -+ array('enabled' => true), # on by default for new sites -+ ); -hunk ./lib/common.php 139 -- 'schema_location' => INSTALLDIR . '/classes', -- 'class_location' => INSTALLDIR . '/classes', -- 'require_prefix' => 'classes/', -- 'class_prefix' => '', -- 'mirror' => NULL, -+ 'schema_location' => INSTALLDIR . '/classes', -+ 'class_location' => INSTALLDIR . '/classes', -+ 'require_prefix' => 'classes/', -+ 'class_prefix' => '', -+ 'mirror' => NULL, -hunk ./lib/common.php 145 -- 'quote_identifiers' => false, -- 'type' => 'mysql' ); -+ 'quote_identifiers' => false, -+ 'type' => 'mysql' ); -hunk ./lib/common.php 149 -- /* Work internally in UTC */ -- date_default_timezone_set('UTC'); -+ /* Work internally in UTC */ -+ date_default_timezone_set('UTC'); -hunk ./lib/common.php 167 -- if ($class == 'OAuthRequest') { -- require_once('OAuth.php'); -- } else if (file_exists(INSTALLDIR.'/classes/' . $class . '.php')) { -+ if ($class == 'OAuthRequest') { -+ require_once('OAuth.php'); -+ } else if (file_exists(INSTALLDIR.'/classes/' . $class . '.php')) { -hunk ./lib/deleteaction.php 24 -- function handle($args) { -- parent::handle($args); -- $user = common_current_user(); -- $notice_id = $this->trimmed('notice'); -- $notice = Notice::staticGet($notice_id); -- if (!$notice) { -- common_user_error(_('No such notice.')); -- exit; -- } -+ function handle($args) { -+ parent::handle($args); -+ $user = common_current_user(); -+ $notice_id = $this->trimmed('notice'); -+ $notice = Notice::staticGet($notice_id); -+ if (!$notice) { -+ common_user_error(_('No such notice.')); -+ exit; -+ } -hunk ./lib/deleteaction.php 34 -- $profile = $notice->getProfile(); -- $user_profile = $user->getProfile(); -+ $profile = $notice->getProfile(); -+ $user_profile = $user->getProfile(); -hunk ./lib/deleteaction.php 37 -- if (!common_logged_in()) { -- common_user_error(_('Not logged in.')); -- exit; -- } else if ($notice->profile_id != $user_profile->id) { -- common_user_error(_('Can\'t delete this notice.')); -- exit; -- } -- } -+ if (!common_logged_in()) { -+ common_user_error(_('Not logged in.')); -+ exit; -+ } else if ($notice->profile_id != $user_profile->id) { -+ common_user_error(_('Can\'t delete this notice.')); -+ exit; -+ } -+ } +- function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=NULL) { ++ function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null) { +hunk ./classes/User.php 346 +- $offset, $limit, $since_id, $before_id, NULL, $since); ++ $offset, $limit, $since_id, $before_id, null, $since); +hunk ./classes/User.php 349 +- function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=NULL) { ++ function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null) { +hunk ./classes/User.php 352 +- return NULL; ++ return null; +hunk ./classes/User.php 368 +- function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=NULL) { ++ function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null) { +hunk ./classes/User.php 380 +- $order = NULL; ++ $order = null; +hunk ./classes/User_openid.php 20 +- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('User_openid',$k,$v); } ++ function staticGet($k,$v=null) { return Memcached_DataObject::staticGet('User_openid',$k,$v); } +hunk ./lib/common.php 61 +- 'logfile' => NULL, ++ 'logfile' => null, +hunk ./lib/common.php 67 +- array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : NULL, +- 'broughtby' => NULL, ++ array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : null, ++ 'broughtby' => null, +hunk ./lib/common.php 70 +- 'broughtbyurl' => NULL, ++ 'broughtbyurl' => null, +hunk ./lib/common.php 85 +- 'params' => NULL), ++ 'params' => null), +hunk ./lib/common.php 92 +- array('server' => NULL), ++ array('server' => null), +hunk ./lib/common.php 97 +- array('server' => NULL), ++ array('server' => null), +hunk ./lib/common.php 110 +- 'host' => NULL, # only set if != server ++ 'host' => null, # only set if != server +hunk ./lib/common.php 143 +- 'mirror' => NULL, ++ 'mirror' => null, hunk ./lib/deleteaction.php 46 -- function show_top($arr=NULL) { -- $instr = $this->get_instructions(); -- $output = common_markup_to_html($instr); -- common_element_start('div', 'instructions'); -- common_raw($output); -- common_element_end('div'); -- } -+ function show_top($arr=NULL) { -+ $instr = $this->get_instructions(); -+ $output = common_markup_to_html($instr); -+ common_element_start('div', 'instructions'); -+ common_raw($output); -+ common_element_end('div'); -+ } -hunk ./lib/deleteaction.php 54 -- function get_title() { -- return NULL; -- } -+ function get_title() { -+ return NULL; -+ } -hunk ./lib/deleteaction.php 58 -- function show_header() { -- return; -- } -+ function show_header() { -+ return; -+ } -hunk ./lib/facebookaction.php 13 -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -hunk ./lib/facebookaction.php 17 -- * along with this program. If not, see . -+ * along with this program. If not, see . -hunk ./lib/facebookaction.php 26 -- function handle($args) { -- parent::handle($args); -- } -+ function handle($args) { -+ parent::handle($args); -+ } -hunk ./lib/facebookaction.php 30 -- function get_facebook() { -- $apikey = common_config('facebook', 'apikey'); -- $secret = common_config('facebook', 'secret'); -- return new Facebook($apikey, $secret); -- } -+ function get_facebook() { -+ $apikey = common_config('facebook', 'apikey'); -+ $secret = common_config('facebook', 'secret'); -+ return new Facebook($apikey, $secret); -+ } -hunk ./lib/facebookaction.php 36 -- function update_profile_box($facebook, $fbuid, $user) { -+ function update_profile_box($facebook, $fbuid, $user) { -hunk ./lib/facebookaction.php 38 -- $notice = $user->getCurrentNotice(); -+ $notice = $user->getCurrentNotice(); -hunk ./lib/facebookaction.php 40 -- # Need to include inline CSS for styling the Profile box -+ # Need to include inline CSS for styling the Profile box -hunk ./lib/facebookaction.php 42 -- $style = ''; -+ $style = ''; -hunk ./lib/facebookaction.php 77 -- $html = $this->render_notice($notice); -+ $html = $this->render_notice($notice); -hunk ./lib/facebookaction.php 79 -- $fbml = "$content $html"; -- $fbml .= "$content $html"; -+ $fbml = "$content $html"; -+ $fbml .= "$content $html"; -hunk ./lib/facebookaction.php 82 -- $fbml_main = "$content $html"; -+ $fbml_main = "$content $html"; +- function show_top($arr=NULL) { ++ function show_top($arr=null) { +hunk ./lib/deleteaction.php 55 +- return NULL; ++ return null; hunk ./lib/facebookaction.php 84 -- $facebook->api_client->profile_setFBML(NULL, $fbuid, $fbml, NULL, NULL, $fbml_main); -- } -+ $facebook->api_client->profile_setFBML(NULL, $fbuid, $fbml, NULL, NULL, $fbml_main); -+ } -hunk ./lib/facebookaction.php 87 -- # Display methods -+ # Display methods -hunk ./lib/facebookaction.php 89 -- function show_header($selected ='Home') { -+ function show_header($selected ='Home') { -hunk ./lib/facebookaction.php 91 -- # Add a timestamp to the CSS file so Facebook cache wont ignore our changes -- $ts = filemtime(theme_file('facebookapp.css')); -- $cssurl = theme_path('facebookapp.css') . "?ts=$ts"; -+ # Add a timestamp to the CSS file so Facebook cache wont ignore our changes -+ $ts = filemtime(theme_file('facebookapp.css')); -+ $cssurl = theme_path('facebookapp.css') . "?ts=$ts"; -hunk ./lib/facebookaction.php 95 -- $header = ''; -- # $header .=''; -- $header .= ''; -+ $header = ''; -+ # $header .=''; -+ $header .= ''; -hunk ./lib/facebookaction.php 99 -- $header .= -- '' -- .'' -- .'' -- .'' -- .''; -- $header .= '
          '; -+ $header .= -+ '' -+ .'' -+ .'' -+ .'' -+ .''; -+ $header .= '
          '; -hunk ./lib/facebookaction.php 107 -- echo $header; -+ echo $header; -hunk ./lib/facebookaction.php 109 -- } -+ } -hunk ./lib/facebookaction.php 111 -- function show_footer() { -- $footer = '
          '; -- echo $footer; -- } -+ function show_footer() { -+ $footer = '
          '; -+ echo $footer; -+ } -hunk ./lib/facebookaction.php 116 -- function show_login_form() { -+ function show_login_form() { -hunk ./lib/facebookaction.php 118 -- $loginform = -- '

          To add the Identi.ca application, you need to log into your Identi.ca account.

          ' -- .'' -- .' ' -- .'' -- .'

          Login

          ' -- .'
          ' -- .'

          Login with your username and password. Don\'t have a username yet?' -- .' Register a new account.' -- .'

          ' -- .'
          ' -- .'
          ' -- .'
          ' -- .'

          ' -- .' ' -- .' ' -- .'

          ' -- .'

          ' -- .' ' -- .' ' -- .'

          ' -- .'

          ' -- .' ' -- .'

          ' -- .'
          ' -- .'

          ' -- .' Lost or forgotten password?' -- .'

          ' -- .'To add the Identi.ca application, you need to log into your Identi.ca account.' -+ .'' -+ .' ' -+ .'' -+ .'

          Login

          ' -+ .'
          ' -+ .'

          Login with your username and password. Don\'t have a username yet?' -+ .' Register a new account.' -+ .'

          ' -+ .'
          ' -+ .'
          ' -+ .'
          ' -+ .'

          ' -+ .' ' -+ .' ' -+ .'

          ' -+ .'

          ' -+ .' ' -+ .' ' -+ .'

          ' -+ .'

          ' -+ .' ' -+ .'

          ' -+ .'
          ' -+ .'

          ' -+ .' Lost or forgotten password?' -+ .'

          ' -+ .'getProfile(); -- $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); -+ $profile = $notice->getProfile(); -+ $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); -hunk ./lib/facebookaction.php 158 -- $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); -+ $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); -hunk ./lib/facebookaction.php 160 -- # XXX: we need to figure this out better. Is this right? -- if (strcmp($notice->uri, $noticeurl) != 0 && preg_match('/^http/', $notice->uri)) { -- $noticeurl = $notice->uri; -- } -+ # XXX: we need to figure this out better. Is this right? -+ if (strcmp($notice->uri, $noticeurl) != 0 && preg_match('/^http/', $notice->uri)) { -+ $noticeurl = $notice->uri; -+ } -hunk ./lib/facebookaction.php 165 -- $html = -- '
        • ' -- .'' -- .'' -+ .'' -+ .'';
-+        $html .=
-+        '' -- .'' . $profile->nickname . '' -- .'

          ' . $notice->rendered . '

          ' -- .'

          ' -- .''; -+ $html .= -+ '">' -+ .'' . $profile->nickname . '' -+ .'

          ' . $notice->rendered . '

          ' -+ .'

          ' -+ .''; -hunk ./lib/facebookaction.php 194 -- if ($notice->source) { -- $html .= _(' from '); -- $html .= $this->source_link($notice->source); -- } -+ if ($notice->source) { -+ $html .= _(' from '); -+ $html .= $this->source_link($notice->source); -+ } -hunk ./lib/facebookaction.php 199 -- if ($notice->reply_to) { -- $replyurl = common_local_url('shownotice', array('notice' => $notice->reply_to)); -- $html .= -- ' (' . _('in reply to...') . ')'; -- } -+ if ($notice->reply_to) { -+ $replyurl = common_local_url('shownotice', array('notice' => $notice->reply_to)); -+ $html .= -+ ' (' . _('in reply to...') . ')'; -+ } -hunk ./lib/facebookaction.php 205 -- $html .= '

        • '; -+ $html .= '

          '; -hunk ./lib/facebookaction.php 207 -- return $html; -- } -+ return $html; -+ } -hunk ./lib/facebookaction.php 210 -- function source_link($source) { -- $source_name = _($source); -+ function source_link($source) { -+ $source_name = _($source); -hunk ./lib/facebookaction.php 213 -- $html = ''; -+ $html = ''; -hunk ./lib/facebookaction.php 215 -- switch ($source) { -- case 'web': -- case 'xmpp': -- case 'mail': -- case 'omb': -- case 'api': -- $html .= $source_name; -- break; -- default: -- $ns = Notice_source::staticGet($source); -- if ($ns) { -- $html .= '
          ' . $ns->name . ''; -- } else { -- $html .= $source_name; -- } -- break; -- } -+ switch ($source) { -+ case 'web': -+ case 'xmpp': -+ case 'mail': -+ case 'omb': -+ case 'api': -+ $html .= $source_name; -+ break; -+ default: -+ $ns = Notice_source::staticGet($source); -+ if ($ns) { -+ $html .= '' . $ns->name . ''; -+ } else { -+ $html .= $source_name; -+ } -+ break; -+ } -hunk ./lib/facebookaction.php 233 -- $html .= ''; -+ $html .= ''; -hunk ./lib/facebookaction.php 235 -- return $html; -- } -+ return $html; -+ } +- $facebook->api_client->profile_setFBML(NULL, $fbuid, $fbml, NULL, NULL, $fbml_main); ++ $facebook->api_client->profile_setFBML(null, $fbuid, $fbml, null, null, $fbml_main); hunk ./lib/facebookaction.php 238 -- function pagination($have_before, $have_after, $page, $fbaction, $args=NULL) { -+ function pagination($have_before, $have_after, $page, $fbaction, $args=NULL) { -hunk ./lib/facebookaction.php 240 -- $html = ''; -+ $html = ''; -hunk ./lib/facebookaction.php 242 -- if ($have_before || $have_after) { -- $html = '