Merge branch '0.9.x' into finish-account-api

* 0.9.x: (26 commits)
  just sent a http 200 for the check-fancy from install.php
  Add a new event: CanUserChangeField
  shorten flag notification and include a class
  Added flag icon for UserFlag plugin
  Fixed notice option alignment in IE
  add a method to Theme class to list available themes
  Updated Realtime plugin to use the util's NoticeReply object
  Localisation updates from translatewiki.net (2009-11-08)
  Update pot again
  Rebuild pot file *without* --join-existing to get rid of the cruft. Not sure why "--join-existing" must be in. Only thing I can think of is manual additions, which I could not find.
  Revert "More precise field label"
  Remove more contractions
  Revert "* [Cc]an't -> [Cc]annot"
  Revert "More specifics on 'address'"
  * [Cc]an't -> [Cc]annot
  Revert "* check usage of 'people' in UI and change it to 'users' or something else in most places"
  add utilities for calculating local and installation theme root dirs
  Harmonise UI message "No such user."
  Restructure theme.php to define a class Theme
  entity_action responses look more inactive now
  ...
This commit is contained in:
Zach Copley 2009-11-10 00:43:58 -08:00
commit cae06a49ea
172 changed files with 127189 additions and 219898 deletions

View File

@ -489,6 +489,10 @@ ChangePassword: Handle a password change request
- $newpassword: the desired new password - $newpassword: the desired new password
- &$errormsg: set this to an error message if the password could not be changed. If the password was changed, leave this as false - &$errormsg: set this to an error message if the password could not be changed. If the password was changed, leave this as false
CanUserChangeField: Determines if a user is allowed to change a specific profile field
- $nickname: nickname of the user who would like to know which of their profile fields are mutable
- $field: name of the field the user wants to change (nickname, fullname, password, avatar, etc)
UserDeleteRelated: Specify additional tables to delete entries from when deleting users UserDeleteRelated: Specify additional tables to delete entries from when deleting users
- $user: User object - $user: User object
- &$related: array of DB_DataObject class names to delete entries on matching user_id. - &$related: array of DB_DataObject class names to delete entries on matching user_id.

View File

@ -129,7 +129,7 @@ class AllAction extends ProfileAction
if (common_logged_in()) { if (common_logged_in()) {
$current_user = common_current_user(); $current_user = common_current_user();
if ($this->user->id === $current_user->id) { if ($this->user->id === $current_user->id) {
$message .= _('Try subscribing to more users, [join a group](%%action.groups%%) or post something yourself.'); $message .= _('Try subscribing to more people, [join a group](%%action.groups%%) or post something yourself.');
} else { } else {
$message .= sprintf(_('You can try to [nudge %s](../%s) from his profile or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname); $message .= sprintf(_('You can try to [nudge %s](../%s) from his profile or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
} }

View File

@ -56,7 +56,7 @@ class AllrssAction extends Rss10Action
* *
* @param array $args Web and URL arguments * @param array $args Web and URL arguments
* *
* @return boolean false if user doesn't exist * @return boolean false if user does not exist
*/ */
function prepare($args) function prepare($args)
{ {

View File

@ -36,7 +36,7 @@ if (!defined('STATUSNET')) {
require_once INSTALLDIR . '/lib/apibareauth.php'; require_once INSTALLDIR . '/lib/apibareauth.php';
/** /**
* We don't have a rate limit, but some clients check this method. * We do not have a rate limit, but some clients check this method.
* It always returns the same thing: 150 hits left. * It always returns the same thing: 150 hits left.
* *
* @category API * @category API

View File

@ -94,7 +94,7 @@ class ApiBlockCreateAction extends ApiAuthAction
} }
if (empty($this->user) || empty($this->other)) { if (empty($this->user) || empty($this->other)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -93,7 +93,7 @@ class ApiBlockDestroyAction extends ApiAuthAction
} }
if (empty($this->user) || empty($this->other)) { if (empty($this->user) || empty($this->other)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -74,7 +74,7 @@ class ApiDirectMessageAction extends ApiAuthAction
$this->user = $this->auth_user; $this->user = $this->auth_user;
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -72,7 +72,7 @@ class ApiDirectMessageNewAction extends ApiAuthAction
$this->user = $this->auth_user; $this->user = $this->auth_user;
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -113,7 +113,7 @@ class ApiFriendshipsDestroyAction extends ApiAuthAction
return; return;
} }
// Don't allow unsubscribing from yourself! // Do not allow unsubscribing from yourself!
if ($this->user->id == $this->other->id) { if ($this->user->id == $this->other->id) {
$this->clientError( $this->clientError(

View File

@ -109,7 +109,7 @@ class ApiGroupCreateAction extends ApiAuthAction
} }
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -87,7 +87,7 @@ class ApiGroupIsMemberAction extends ApiBareAuthAction
parent::handle($args); parent::handle($args);
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -96,7 +96,7 @@ class ApiGroupJoinAction extends ApiAuthAction
} }
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -96,7 +96,7 @@ class ApiGroupLeaveAction extends ApiAuthAction
} }
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -87,7 +87,7 @@ class ApiGroupListAction extends ApiBareAuthAction
parent::handle($args); parent::handle($args);
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -136,7 +136,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
} }
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -84,7 +84,7 @@ class ApiSubscriptionsAction extends ApiBareAuthAction
$this->user = $this->getTargetUser($this->arg('id')); $this->user = $this->getTargetUser($this->arg('id'));
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return false; return false;
} }

View File

@ -67,7 +67,7 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
$this->user = $this->getTargetUser($this->arg('id')); $this->user = $this->getTargetUser($this->arg('id'));
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -76,7 +76,7 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
$this->user = $this->getTargetUser($this->arg('id')); $this->user = $this->getTargetUser($this->arg('id'));
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -76,7 +76,7 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
$this->user = $this->getTargetUser($this->arg('id')); $this->user = $this->getTargetUser($this->arg('id'));
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -78,7 +78,7 @@ class ApiTimelineUserAction extends ApiBareAuthAction
$this->user = $this->getTargetUser($this->arg('id')); $this->user = $this->getTargetUser($this->arg('id'));
if (empty($this->user)) { if (empty($this->user)) {
$this->clientError(_('No such user!'), 404, $this->format); $this->clientError(_('No such user.'), 404, $this->format);
return; return;
} }

View File

@ -146,7 +146,7 @@ class AttachmentAction extends Action
} }
/** /**
* Don't show local navigation * Do not show local navigation
* *
* @return void * @return void
*/ */
@ -170,7 +170,7 @@ class AttachmentAction extends Action
} }
/** /**
* Don't show page notice * Do not show page notice
* *
* @return void * @return void
*/ */

View File

@ -49,7 +49,7 @@ class AvatarbynicknameAction extends Action
* *
* @param array $args query arguments * @param array $args query arguments
* *
* @return boolean false if nickname or user isn't found * @return boolean false if nickname or user is not found
*/ */
function handle($args) function handle($args)
{ {

View File

@ -67,7 +67,7 @@ class DeletenoticeAction extends Action
common_user_error(_('Not logged in.')); common_user_error(_('Not logged in.'));
exit; exit;
} else if ($this->notice->profile_id != $this->user_profile->id && } else if ($this->notice->profile_id != $this->user_profile->id &&
!$this->user->hasRight(Right::deleteOthersNotice)) { !$this->user->hasRight(Right::DELETEOTHERSNOTICE)) {
common_user_error(_('Can\'t delete this notice.')); common_user_error(_('Can\'t delete this notice.'));
exit; exit;
} }

View File

@ -136,7 +136,7 @@ class FoafAction extends Action
$person = $this->showMicrobloggingAccount($this->profile, $person = $this->showMicrobloggingAccount($this->profile,
common_root_url(), $this->user->uri, false); common_root_url(), $this->user->uri, false);
// Get users who subscribe to user // Get people who subscribe to user
$sub = new Subscription(); $sub = new Subscription();
$sub->subscribed = $this->profile->id; $sub->subscribed = $this->profile->id;
@ -250,7 +250,7 @@ class FoafAction extends Action
if ($isSubscriber) { if ($isSubscriber) {
$this->element('sioc:follows', array('rdf:resource'=>$this->user->uri . '#acct')); $this->element('sioc:follows', array('rdf:resource'=>$this->user->uri . '#acct'));
} else { } else {
// Get users user is subscribed to // Get people user is subscribed to
$sub = new Subscription(); $sub = new Subscription();
$sub->subscriber = $profile->id; $sub->subscriber = $profile->id;
$sub->whereAdd('subscriber != subscribed'); $sub->whereAdd('subscriber != subscribed');

View File

@ -95,7 +95,7 @@ class GroupblockAction extends Action
$this->clientError(_('User is already blocked from group.')); $this->clientError(_('User is already blocked from group.'));
return false; return false;
} }
// XXX: could have proactive blocks, but we don't have UI for it. // XXX: could have proactive blocks, but we do not have UI for it.
if (!$this->profile->isMember($this->group)) { if (!$this->profile->isMember($this->group)) {
$this->clientError(_('User is not a member of group.')); $this->clientError(_('User is not a member of group.'));
return false; return false;

View File

@ -88,12 +88,11 @@ class GroupsAction extends Action
{ {
$notice = $notice =
sprintf(_('%%%%site.name%%%% groups let you find and talk with ' . sprintf(_('%%%%site.name%%%% groups let you find and talk with ' .
'users of similar interests. After you join a group ' . 'people of similar interests. After you join a group ' .
'you can send messages to all other members using the ' . 'you can send messages to all other members using the ' .
'syntax "!groupname". Are you not seeing any groups ' . 'syntax "!groupname". Don\'t see a group you like? Try ' .
'you like? Try ' .
'[searching for one](%%%%action.groupsearch%%%%) or ' . '[searching for one](%%%%action.groupsearch%%%%) or ' .
'[start your own](%%%%action.newgroup%%%%)!')); '[start your own!](%%%%action.newgroup%%%%)'));
$this->elementStart('div', 'instructions'); $this->elementStart('div', 'instructions');
$this->raw(common_markup_to_html($notice)); $this->raw(common_markup_to_html($notice));
$this->elementEnd('div'); $this->elementEnd('div');

View File

@ -69,7 +69,7 @@ class ImsettingsAction extends ConnectSettingsAction
{ {
return _('You can send and receive notices through '. return _('You can send and receive notices through '.
'Jabber/GTalk [instant messages](%%doc.im%%). '. 'Jabber/GTalk [instant messages](%%doc.im%%). '.
'Configure your instant messages address and settings below.'); 'Configure your address and settings below.');
} }
/** /**
@ -97,7 +97,7 @@ class ImsettingsAction extends ConnectSettingsAction
'action' => 'action' =>
common_local_url('imsettings'))); common_local_url('imsettings')));
$this->elementStart('fieldset', array('id' => 'settings_im_address')); $this->elementStart('fieldset', array('id' => 'settings_im_address'));
$this->element('legend', null, _('IM address')); $this->element('legend', null, _('Address'));
$this->hidden('token', common_session_token()); $this->hidden('token', common_session_token());
if ($user->jabber) { if ($user->jabber) {
@ -111,7 +111,7 @@ class ImsettingsAction extends ConnectSettingsAction
if ($confirm) { if ($confirm) {
$this->element('p', 'form_unconfirmed', $confirm->address); $this->element('p', 'form_unconfirmed', $confirm->address);
$this->element('p', 'form_note', $this->element('p', 'form_note',
sprintf(_('Awaiting confirmation on this IM address. '. sprintf(_('Awaiting confirmation on this address. '.
'Check your Jabber/GTalk account for a '. 'Check your Jabber/GTalk account for a '.
'message with further instructions. '. 'message with further instructions. '.
'(Did you add %s to your buddy list?)'), '(Did you add %s to your buddy list?)'),
@ -151,7 +151,7 @@ class ImsettingsAction extends ConnectSettingsAction
$this->elementStart('li'); $this->elementStart('li');
$this->checkbox('jabberreplies', $this->checkbox('jabberreplies',
_('Send me replies through Jabber/GTalk '. _('Send me replies through Jabber/GTalk '.
'from users I am not subscribed to.'), 'from people I\'m not subscribed to.'),
$user->jabberreplies); $user->jabberreplies);
$this->elementEnd('li'); $this->elementEnd('li');
$this->elementStart('li'); $this->elementStart('li');

View File

@ -133,7 +133,7 @@ class InviteAction extends CurrentUserDesignAction
$this->elementEnd('ul'); $this->elementEnd('ul');
} }
if ($this->subbed) { if ($this->subbed) {
$this->element('p', null, _('These are already users and you were automatically subscribed to them:')); $this->element('p', null, _('These people are already users and you were automatically subscribed to them:'));
$this->elementStart('ul'); $this->elementStart('ul');
foreach ($this->subbed as $other) { foreach ($this->subbed as $other) {
$this->element('li', null, sprintf(_('%s (%s)'), $other->nickname, $other->email)); $this->element('li', null, sprintf(_('%s (%s)'), $other->nickname, $other->email));
@ -141,7 +141,7 @@ class InviteAction extends CurrentUserDesignAction
$this->elementEnd('ul'); $this->elementEnd('ul');
} }
if ($this->sent) { if ($this->sent) {
$this->element('p', null, _('Invitation(s) sent to the following e-mail addresses:')); $this->element('p', null, _('Invitation(s) sent to the following people:'));
$this->elementStart('ul'); $this->elementStart('ul');
foreach ($this->sent as $other) { foreach ($this->sent as $other) {
$this->element('li', null, $other); $this->element('li', null, $other);
@ -226,9 +226,9 @@ class InviteAction extends CurrentUserDesignAction
$headers['Subject'] = sprintf(_('%1$s has invited you to join them on %2$s'), $bestname, $sitename); $headers['Subject'] = sprintf(_('%1$s has invited you to join them on %2$s'), $bestname, $sitename);
$body = sprintf(_("%1\$s has invited you to join them on %2\$s (%3\$s).\n\n". $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 those you know and those who interest you.\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 users who know about you. ". "You can also share news about yourself, your thoughts, or your life online with people who know about you. ".
"It is also great for meeting others who share your interests.\n\n". "It's also great for meeting new people who share your interests.\n\n".
"%1\$s said:\n\n%4\$s\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". "You can see %1\$s's profile page on %2\$s here:\n\n".
"%5\$s\n\n". "%5\$s\n\n".

View File

@ -159,7 +159,7 @@ class LoginAction extends Action
$url = common_get_returnto(); $url = common_get_returnto();
if ($url) { if ($url) {
// We don't have to return to it again // We do not have to return to it again
common_set_returnto(null); common_set_returnto(null);
} else { } else {
$url = common_local_url('all', $url = common_local_url('all',

View File

@ -81,7 +81,7 @@ class LogoutAction extends Action
{ {
common_set_user(null); common_set_user(null);
common_real_login(false); // not logged in common_real_login(false); // not logged in
common_forgetme(); // don't log back in! common_forgetme(); // do not log back in!
} }
} }

View File

@ -59,7 +59,7 @@ class MicrosummaryAction extends Action
$user = User::staticGet('nickname', $nickname); $user = User::staticGet('nickname', $nickname);
if (!$user) { if (!$user) {
$this->clientError(_('No such user'), 404); $this->clientError(_('No such user.'), 404);
return; return;
} }

View File

@ -61,7 +61,7 @@ class NewmessageAction extends Action
/** /**
* Title of the page * Title of the page
* *
* Note that this usually doesn't get called unless something went wrong * Note that this usually does not get called unless something went wrong
* *
* @return string page title * @return string page title
*/ */
@ -113,7 +113,7 @@ class NewmessageAction extends Action
$this->other = User::staticGet('id', $this->to); $this->other = User::staticGet('id', $this->to);
if (!$this->other) { if (!$this->other) {
$this->clientError(_('No such user'), 404); $this->clientError(_('No such user.'), 404);
return false; return false;
} }

View File

@ -59,7 +59,7 @@ class NewnoticeAction extends Action
/** /**
* Title of the page * Title of the page
* *
* Note that this usually doesn't get called unless something went wrong * Note that this usually does not get called unless something went wrong
* *
* @return string page title * @return string page title
*/ */

View File

@ -44,7 +44,7 @@ require_once INSTALLDIR.'/lib/searchaction.php';
* @author Robin Millette <millette@status.net> * @author Robin Millette <millette@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/ * @link http://status.net/
* @todo common parent for user and content search? * @todo common parent for people and content search?
*/ */
class NoticesearchAction extends SearchAction class NoticesearchAction extends SearchAction
{ {

View File

@ -52,7 +52,7 @@ class OpensearchAction extends Action
* *
* @param array $args query arguments * @param array $args query arguments
* *
* @return boolean false if user doesn't exist * @return boolean false if user does not exist
*/ */
function handle($args) function handle($args)
{ {
@ -61,7 +61,7 @@ class OpensearchAction extends Action
$short_name = ''; $short_name = '';
if ($type == 'people') { if ($type == 'people') {
$type = 'peoplesearch'; $type = 'peoplesearch';
$short_name = _('User Search'); $short_name = _('People Search');
} else { } else {
$type = 'noticesearch'; $type = 'noticesearch';
$short_name = _('Notice Search'); $short_name = _('Notice Search');
@ -75,7 +75,7 @@ class OpensearchAction extends Action
$this->element('Url', array('type' => 'text/html', 'method' => 'get', $this->element('Url', array('type' => 'text/html', 'method' => 'get',
'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---'))))); 'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---')))));
$this->element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico')); $this->element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico'));
$this->element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), theme_path('logo.png')); $this->element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), Theme::path('logo.png'));
$this->element('AdultContent', null, 'false'); $this->element('AdultContent', null, 'false');
$this->element('Language', null, common_language()); $this->element('Language', null, common_language());
$this->element('OutputEncoding', null, 'UTF-8'); $this->element('OutputEncoding', null, 'UTF-8');

View File

@ -58,6 +58,19 @@ class PasswordsettingsAction extends AccountSettingsAction
return _('Change password'); return _('Change password');
} }
function prepare($args){
parent::prepare($args);
$user = common_current_user();
Event::handle('CanUserChangeField', array($user->nickname, 'password'));
if(! $fields['password']){
//user is not allowed to change his password
$this->clientError(_('You are not allowed to change your password'));
}
}
/** /**
* Instructions for use * Instructions for use
* *
@ -86,6 +99,7 @@ class PasswordsettingsAction extends AccountSettingsAction
function showContent() function showContent()
{ {
$user = common_current_user(); $user = common_current_user();
$this->elementStart('form', array('method' => 'POST', $this->elementStart('form', array('method' => 'POST',
'id' => 'form_password', 'id' => 'form_password',
'class' => 'form_settings', 'class' => 'form_settings',
@ -97,7 +111,7 @@ class PasswordsettingsAction extends AccountSettingsAction
$this->elementStart('ul', 'form_data'); $this->elementStart('ul', 'form_data');
// Users who logged in with OpenID won't have a pwd // Users who logged in with OpenID will not have a pwd
if ($user->password) { if ($user->password) {
$this->elementStart('li'); $this->elementStart('li');
$this->password('oldpassword', _('Old password')); $this->password('oldpassword', _('Old password'));

View File

@ -49,7 +49,7 @@ class PeoplesearchAction extends SearchAction
{ {
function getInstructions() function getInstructions()
{ {
return _('Search for users on %%site.name%% by their name, location, or interests. ' . 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.'); 'Separate the terms by spaces; they must be 3 characters or more.');
} }

View File

@ -67,7 +67,7 @@ class PeopletagAction extends Action
$this->tag = $this->trimmed('tag'); $this->tag = $this->trimmed('tag');
if (!common_valid_profile_tag($this->tag)) { if (!common_valid_profile_tag($this->tag)) {
$this->clientError(sprintf(_('Not a valid user tag: %s'), $this->clientError(sprintf(_('Not a valid people tag: %s'),
$this->tag)); $this->tag));
return; return;
} }

View File

@ -68,8 +68,8 @@ class ProfilesettingsAction extends AccountSettingsAction
function getInstructions() function getInstructions()
{ {
return _('You can update your personal profile info here ' . return _('You can update your personal profile info here '.
'so readers know more about you.'); 'so people know more about you.');
} }
function showScripts() function showScripts()

View File

@ -82,14 +82,14 @@ class RegisterAction extends Action
} }
if (common_config('site', 'inviteonly') && empty($this->code)) { if (common_config('site', 'inviteonly') && empty($this->code)) {
$this->clientError(_('Sorry. Only those invited can register.')); $this->clientError(_('Sorry, only invited people can register.'));
return false; return false;
} }
if (!empty($this->code)) { if (!empty($this->code)) {
$this->invite = Invitation::staticGet('code', $this->code); $this->invite = Invitation::staticGet('code', $this->code);
if (empty($this->invite)) { if (empty($this->invite)) {
$this->clientError(_('Sorry. This is an invalid invitation code.')); $this->clientError(_('Sorry, invalid invitation code.'));
return false; return false;
} }
// Store this in case we need it // Store this in case we need it
@ -174,7 +174,7 @@ class RegisterAction extends Action
$bio = $this->trimmed('bio'); $bio = $this->trimmed('bio');
$location = $this->trimmed('location'); $location = $this->trimmed('location');
// We don't trim these... whitespace is OK in a password! // We do not trim these... whitespace is OK in a password!
$password = $this->arg('password'); $password = $this->arg('password');
$confirm = $this->arg('confirm'); $confirm = $this->arg('confirm');
@ -186,7 +186,7 @@ class RegisterAction extends Action
} }
if (common_config('site', 'inviteonly') && !($code && $invite)) { if (common_config('site', 'inviteonly') && !($code && $invite)) {
$this->clientError(_('Sorry. Only those invited can register.')); $this->clientError(_('Sorry, only invited people can register.'));
return; return;
} }
@ -401,7 +401,7 @@ class RegisterAction extends Action
} }
if (common_config('site', 'inviteonly') && !($code && $invite)) { if (common_config('site', 'inviteonly') && !($code && $invite)) {
$this->clientError(_('Sorry. Only those invited can register.')); $this->clientError(_('Sorry, only invited people can register.'));
return; return;
} }
@ -542,7 +542,7 @@ class RegisterAction extends Action
'(%%%%action.imsettings%%%%) '. '(%%%%action.imsettings%%%%) '.
'so you can send notices '. 'so you can send notices '.
'through instant messages.' . "\n" . 'through instant messages.' . "\n" .
'* [Search for users](%%%%action.peoplesearch%%%%) '. '* [Search for people](%%%%action.peoplesearch%%%%) '.
'that you may know or '. 'that you may know or '.
'that share your interests. ' . "\n" . 'that share your interests. ' . "\n" .
'* Update your [profile settings]'. '* Update your [profile settings]'.

View File

@ -151,7 +151,7 @@ class RemotesubscribeAction extends Action
$this->profile_url = $this->trimmed('profile_url'); $this->profile_url = $this->trimmed('profile_url');
if (!$this->profile_url) { if (!$this->profile_url) {
$this->showForm(_('No such user')); $this->showForm(_('No such user.'));
return; return;
} }

View File

@ -195,12 +195,12 @@ class RepliesAction extends OwnerDesignAction
function showEmptyListMessage() function showEmptyListMessage()
{ {
$message = sprintf(_('This is the timeline showing replies to %s but %s has not received a notice to his attention yet.'), $this->user->nickname, $this->user->nickname) . ' '; $message = sprintf(_('This is the timeline showing replies to %s but %s hasn\'t received a notice to his attention yet.'), $this->user->nickname, $this->user->nickname) . ' ';
if (common_logged_in()) { if (common_logged_in()) {
$current_user = common_current_user(); $current_user = common_current_user();
if ($this->user->id === $current_user->id) { if ($this->user->id === $current_user->id) {
$message .= _('You can engage other users in a conversation, subscribe to more users or [join groups](%%action.groups%%).'); $message .= _('You can engage other users in a conversation, subscribe to more people or [join groups](%%action.groups%%).');
} else { } else {
$message .= sprintf(_('You can try to [nudge %s](../%s) or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname); $message .= sprintf(_('You can try to [nudge %s](../%s) or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
} }

View File

@ -418,7 +418,7 @@ class ShowgroupAction extends GroupDesignAction
// XXX: WORM cache this // XXX: WORM cache this
$members = $this->group->getMembers(); $members = $this->group->getMembers();
$members_count = 0; $members_count = 0;
/** $member->count() doesn't work. */ /** $member->count() does not work. */
while ($members->fetch()) { while ($members->fetch()) {
$members_count++; $members_count++;
} }

View File

@ -137,7 +137,7 @@ class ShowmessageAction extends MailboxAction
} }
/** /**
* Don't show local navigation * Do not show local navigation
* *
* @return void * @return void
*/ */
@ -147,7 +147,7 @@ class ShowmessageAction extends MailboxAction
} }
/** /**
* Don't show page notice * Do not show page notice
* *
* @return void * @return void
*/ */
@ -157,7 +157,7 @@ class ShowmessageAction extends MailboxAction
} }
/** /**
* Don't show aside * Do not show aside
* *
* @return void * @return void
*/ */
@ -167,7 +167,7 @@ class ShowmessageAction extends MailboxAction
} }
/** /**
* Don't show any instructions * Do not show any instructions
* *
* @return string * @return string
*/ */

View File

@ -208,7 +208,7 @@ class ShownoticeAction extends OwnerDesignAction
} }
/** /**
* Don't show local navigation * Do not show local navigation
* *
* @return void * @return void
*/ */
@ -234,7 +234,7 @@ class ShownoticeAction extends OwnerDesignAction
} }
/** /**
* Don't show page notice * Do not show page notice
* *
* @return void * @return void
*/ */
@ -244,7 +244,7 @@ class ShownoticeAction extends OwnerDesignAction
} }
/** /**
* Don't show aside * Do not show aside
* *
* @return void * @return void
*/ */

View File

@ -253,7 +253,7 @@ class ShowstreamAction extends ProfileAction
} }
} }
// We don't show the author for a profile, since we already know who it is! // We do not show the author for a profile, since we already know who it is!
class ProfileNoticeList extends NoticeList class ProfileNoticeList extends NoticeList
{ {

View File

@ -101,7 +101,7 @@ class SmssettingsAction extends ConnectSettingsAction
common_local_url('smssettings'))); common_local_url('smssettings')));
$this->elementStart('fieldset', array('id' => 'settings_sms_address')); $this->elementStart('fieldset', array('id' => 'settings_sms_address'));
$this->element('legend', null, _('SMS address')); $this->element('legend', null, _('Address'));
$this->hidden('token', common_session_token()); $this->hidden('token', common_session_token());
if ($user->sms) { if ($user->sms) {

View File

@ -60,12 +60,12 @@ class SubscribersAction extends GalleryAction
$user =& common_current_user(); $user =& common_current_user();
if ($user && ($user->id == $this->profile->id)) { if ($user && ($user->id == $this->profile->id)) {
$this->element('p', null, $this->element('p', null,
_('These are the users who have subscribed to '. _('These are the people who listen to '.
'your notices.')); 'your notices.'));
} else { } else {
$this->element('p', null, $this->element('p', null,
sprintf(_('These are the users who '. sprintf(_('These are the people who '.
'have subscribed to %s\'s notices.'), 'listen to %s\'s notices.'),
$this->profile->nickname)); $this->profile->nickname));
} }
} }
@ -105,7 +105,7 @@ class SubscribersAction extends GalleryAction
if (common_logged_in()) { if (common_logged_in()) {
$current_user = common_current_user(); $current_user = common_current_user();
if ($this->user->id === $current_user->id) { if ($this->user->id === $current_user->id) {
$message = _('You have no subscribers. Try subscribing to users you know and they might return the favor'); $message = _('You have no subscribers. Try subscribing to people you know and they might return the favor');
} else { } else {
$message = sprintf(_('%s has no subscribers. Want to be the first?'), $this->user->nickname); $message = sprintf(_('%s has no subscribers. Want to be the first?'), $this->user->nickname);
} }

View File

@ -62,12 +62,12 @@ class SubscriptionsAction extends GalleryAction
$user =& common_current_user(); $user =& common_current_user();
if ($user && ($user->id == $this->profile->id)) { if ($user && ($user->id == $this->profile->id)) {
$this->element('p', null, $this->element('p', null,
_('These are the users whose notices '. _('These are the people whose notices '.
'you have subscribed to.')); 'you listen to.'));
} else { } else {
$this->element('p', null, $this->element('p', null,
sprintf(_('These are the users whose '. sprintf(_('These are the people whose '.
'notices %s has subscribed to.'), 'notices %s listens to.'),
$this->profile->nickname)); $this->profile->nickname));
} }
} }
@ -118,7 +118,7 @@ class SubscriptionsAction extends GalleryAction
if (common_logged_in()) { if (common_logged_in()) {
$current_user = common_current_user(); $current_user = common_current_user();
if ($this->user->id === $current_user->id) { if ($this->user->id === $current_user->id) {
$message = _('You have not subscribed to anyone\'s notices right now. Try subscribing to users you know. Try [user search](%%action.peoplesearch%%), look for members in groups you\'re interested in and in our [featured users](%%action.featured%%). If you are a [Twitter user](%%action.twittersettings%%), you can automatically subscribe to users you already follow there.'); $message = _('You\'re not listening to anyone\'s notices right now, try subscribing to people you know. Try [people search](%%action.peoplesearch%%), look for members in groups you\'re interested in and in our [featured users](%%action.featured%%). If you\'re a [Twitter user](%%action.twittersettings%%), you can automatically subscribe to people you already follow there.');
} else { } else {
$message = sprintf(_('%s is not listening to anyone.'), $this->user->nickname); $message = sprintf(_('%s is not listening to anyone.'), $this->user->nickname);
} }

View File

@ -61,7 +61,7 @@ class SupAction extends Action
$notice = new Notice(); $notice = new Notice();
# XXX: cache this. Depends on how big this protocol becomes; # XXX: cache this. Depends on how big this protocol becomes;
# Re-doing this query every 15 seconds isn't the end of the world. # Re-doing this query every 15 seconds is not the end of the world.
$divider = common_sql_date(time() - $seconds); $divider = common_sql_date(time() - $seconds);

View File

@ -190,7 +190,7 @@ class TagotherAction extends Action
!Subscription::pkeyGet(array('subscriber' => $this->profile->id, !Subscription::pkeyGet(array('subscriber' => $this->profile->id,
'subscribed' => $user->id))) 'subscribed' => $user->id)))
{ {
$this->clientError(_('You can only tag users you are subscribed to or who are subscribed to you.')); $this->clientError(_('You can only tag people you are subscribed to or who are subscribed to you.'));
return; return;
} }

View File

@ -250,7 +250,7 @@ class TwitapisearchatomAction extends ApiAction
} }
// FIXME: this alternate link is not quite right because our // FIXME: this alternate link is not quite right because our
// web-based notice search doesn't support a rpp (responses per // web-based notice search does not support a rpp (responses per
// page) param yet // page) param yet
$this->element('link', array('type' => 'text/html', $this->element('link', array('type' => 'text/html',

View File

@ -55,7 +55,7 @@ class TwitapitrendsAction extends ApiAction
* *
* @param array $args Web and URL arguments * @param array $args Web and URL arguments
* *
* @return boolean false if user doesn't exist * @return boolean false if user does not exist
*/ */
function prepare($args) function prepare($args)
{ {

View File

@ -102,6 +102,6 @@ class Avatar extends Memcached_DataObject
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
AVATAR_STREAM_SIZE => 'stream', AVATAR_STREAM_SIZE => 'stream',
AVATAR_MINI_SIZE => 'mini'); AVATAR_MINI_SIZE => 'mini');
return theme_path('default-avatar-'.$sizenames[$size].'.png'); return Theme::path('default-avatar-'.$sizenames[$size].'.png');
} }
} }

View File

@ -53,7 +53,7 @@ class File_redirection extends Memcached_DataObject
'connect_timeout' => 10, // # seconds to wait 'connect_timeout' => 10, // # seconds to wait
'max_redirs' => $redirs, // # max number of http redirections to follow 'max_redirs' => $redirs, // # max number of http redirections to follow
'follow_redirects' => true, // Follow redirects 'follow_redirects' => true, // Follow redirects
'store_body' => false, // We won't need body content here. 'store_body' => false, // We will not need body content here.
)); ));
return $request; return $request;
} }
@ -81,12 +81,12 @@ class File_redirection extends Memcached_DataObject
} }
try { try {
$request = self::_commonHttp($short_url, $redirs); $request = self::_commonHttp($short_url, $redirs);
// Don't include body in output // Do not include body in output
$request->setMethod(HTTP_Request2::METHOD_HEAD); $request->setMethod(HTTP_Request2::METHOD_HEAD);
$response = $request->send(); $response = $request->send();
if (405 == $response->getStatus()) { if (405 == $response->getStatus()) {
// Server doesn't support HEAD method? Can this really happen? // Server does not support HEAD method? Can this really happen?
// We'll try again as a GET and ignore the response data. // We'll try again as a GET and ignore the response data.
$request = self::_commonHttp($short_url, $redirs); $request = self::_commonHttp($short_url, $redirs);
$response = $request->send(); $response = $request->send();
@ -178,7 +178,7 @@ class File_redirection extends Memcached_DataObject
case 'aim': case 'aim':
case 'jabber': case 'jabber':
case 'xmpp': case 'xmpp':
// don't touch anything // do not touch anything
break; break;
default: default:

View File

@ -146,7 +146,7 @@ class Notice extends Memcached_DataObject
/* Add them to the database */ /* Add them to the database */
foreach(array_unique($hashtags) as $hashtag) { foreach(array_unique($hashtags) as $hashtag) {
/* elide characters we don't want in the tag */ /* elide characters we do not want in the tag */
$this->saveTag($hashtag); $this->saveTag($hashtag);
} }
return true; return true;
@ -1105,7 +1105,7 @@ class Notice extends Memcached_DataObject
if (empty($recipient)) { if (empty($recipient)) {
continue; continue;
} }
// Don't save replies from blocked profile to local user // Do not save replies from blocked profile to local user
$recipient_user = User::staticGet('id', $recipient->id); $recipient_user = User::staticGet('id', $recipient->id);
if (!empty($recipient_user) && $recipient_user->hasBlocked($sender)) { if (!empty($recipient_user) && $recipient_user->hasBlocked($sender)) {
continue; continue;
@ -1131,7 +1131,7 @@ class Notice extends Memcached_DataObject
$tagged = Profile_tag::getTagged($sender->id, $tag); $tagged = Profile_tag::getTagged($sender->id, $tag);
foreach ($tagged as $t) { foreach ($tagged as $t) {
if (!$replied[$t->id]) { if (!$replied[$t->id]) {
// Don't save replies from blocked profile to local user // Do not save replies from blocked profile to local user
$t_user = User::staticGet('id', $t->id); $t_user = User::staticGet('id', $t->id);
if ($t_user && $t_user->hasBlocked($sender)) { if ($t_user && $t_user->hasBlocked($sender)) {
continue; continue;

View File

@ -101,7 +101,7 @@ class Profile extends Memcached_DataObject
} }
foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { 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 # We do not do a scaled one if original is our scaled size
if (!($avatar->width == $size && $avatar->height == $size)) { if (!($avatar->width == $size && $avatar->height == $size)) {
$scaled_filename = $imagefile->resize($size); $scaled_filename = $imagefile->resize($size);
@ -174,7 +174,7 @@ class Profile extends Memcached_DataObject
function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null) function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
{ {
// XXX: I'm not sure this is going to be any faster. It probably isn't. // XXX: I'm not sure this is going to be any faster. It probably is not.
$ids = Notice::stream(array($this, '_streamDirect'), $ids = Notice::stream(array($this, '_streamDirect'),
array(), array(),
'profile:notice_ids:' . $this->id, 'profile:notice_ids:' . $this->id,

View File

@ -87,7 +87,7 @@ class User extends Memcached_DataObject
return (is_null($sub)) ? false : true; return (is_null($sub)) ? false : true;
} }
// 'update' won't write key columns, so we have to do it ourselves. // 'update' will not write key columns, so we have to do it ourselves.
function updateKeys(&$orig) function updateKeys(&$orig)
{ {
@ -384,7 +384,7 @@ class User extends Memcached_DataObject
return false; return false;
} }
// Otherwise, cache doesn't have all faves; // Otherwise, cache does not have all faves;
// fall through to the default // fall through to the default
} }
@ -463,7 +463,7 @@ class User extends Memcached_DataObject
{ {
$cache = common_memcache(); $cache = common_memcache();
if ($cache) { if ($cache) {
// Faves don't happen chronologically, so we need to blow // Faves do not happen chronologically, so we need to blow
// ;last cache, too // ;last cache, too
$cache->delete(common_cache_key('fave:ids_by_user:'.$this->id)); $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id));
$cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last')); $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last'));
@ -705,10 +705,12 @@ class User extends Memcached_DataObject
if (Event::handle('UserRightsCheck', array($this, $right, &$result))) { if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
switch ($right) switch ($right)
{ {
case Right::deleteOthersNotice: case Right::DELETEOTHERSNOTICE:
$result = $this->hasRole('moderator'); $result = $this->hasRole(User_role::MODERATOR);
break; break;
default: case Right::CONFIGURESITE:
$result = $this->hasRole(User_role::ADMINISTRATOR);
default:
$result = false; $result = false;
break; break;
} }

View File

@ -34,7 +34,7 @@ class User_group extends Memcached_DataObject
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
AVATAR_STREAM_SIZE => 'stream', AVATAR_STREAM_SIZE => 'stream',
AVATAR_MINI_SIZE => 'mini'); AVATAR_MINI_SIZE => 'mini');
return theme_path('default-avatar-'.$sizenames[$size].'.png'); return Theme::path('default-avatar-'.$sizenames[$size].'.png');
} }
function homeUrl() function homeUrl()

View File

@ -45,4 +45,7 @@ class User_role extends Memcached_DataObject
{ {
return Memcached_DataObject::pkeyGet('User_role', $kv); return Memcached_DataObject::pkeyGet('User_role', $kv);
} }
const MODERATOR = 'moderator';
const ADMINISTRATOR = 'administrator';
} }

View File

@ -102,26 +102,31 @@ class AccountSettingsNav extends Widget
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartAccountSettingsNav', array(&$this->action))) { if (Event::handle('StartAccountSettingsNav', array(&$this->action))) {
$user = common_current_user();
$menu = $menu = array();
array('profilesettings' => $menu['profilesettings'] =
array(_('Profile'), array(_('Profile'),
_('Change your profile settings')), _('Change your profile settings'));
'avatarsettings' => if(Event::handle('CanUserChangeField', array($user->nickname, 'avatar'))){
array(_('Avatar'), $menu['avatarsettings'] =
_('Upload an avatar')), array(_('Avatar'),
'passwordsettings' => _('Upload an avatar'));
array(_('Password'), }
_('Change your password')), if(Event::handle('CanUserChangeField', array($user->nickname, 'password'))){
'emailsettings' => $menu['passwordsettings'] =
array(_('Password'),
_('Change your password'));
}
$menu['emailsettings'] =
array(_('Email'), array(_('Email'),
_('Change email handling')), _('Change email handling'));
'userdesignsettings' => $menu['userdesignsettings'] =
array(_('Design'), array(_('Design'),
_('Design your profile')), _('Design your profile'));
'othersettings' => $menu['othersettings'] =
array(_('Other'), array(_('Other'),
_('Other options'))); _('Other options'));
foreach ($menu as $menuaction => $menudesc) { foreach ($menu as $menuaction => $menudesc) {
$this->action->menuItem(common_local_url($menuaction), $this->action->menuItem(common_local_url($menuaction),

View File

@ -168,7 +168,7 @@ class Action extends HTMLOutputter // lawsuit
{ {
if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/favicon.ico')) { if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/favicon.ico')) {
$this->element('link', array('rel' => 'shortcut icon', $this->element('link', array('rel' => 'shortcut icon',
'href' => theme_path('favicon.ico'))); 'href' => Theme::path('favicon.ico')));
} else { } else {
$this->element('link', array('rel' => 'shortcut icon', $this->element('link', array('rel' => 'shortcut icon',
'href' => common_path('favicon.ico'))); 'href' => common_path('favicon.ico')));
@ -177,7 +177,7 @@ class Action extends HTMLOutputter // lawsuit
if (common_config('site', 'mobile')) { if (common_config('site', 'mobile')) {
if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/apple-touch-icon.png')) { if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/apple-touch-icon.png')) {
$this->element('link', array('rel' => 'apple-touch-icon', $this->element('link', array('rel' => 'apple-touch-icon',
'href' => theme_path('apple-touch-icon.png'))); 'href' => Theme::path('apple-touch-icon.png')));
} else { } else {
$this->element('link', array('rel' => 'apple-touch-icon', $this->element('link', array('rel' => 'apple-touch-icon',
'href' => common_path('apple-touch-icon.png'))); 'href' => common_path('apple-touch-icon.png')));
@ -210,16 +210,16 @@ class Action extends HTMLOutputter // lawsuit
if (Event::handle('StartShowUAStyles', array($this))) { if (Event::handle('StartShowUAStyles', array($this))) {
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '. $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]'); 'href="'.Theme::path('css/ie.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
foreach (array(6,7) as $ver) { foreach (array(6,7) as $ver) {
if (file_exists(theme_file('css/ie'.$ver.'.css', 'base'))) { if (file_exists(Theme::file('css/ie'.$ver.'.css', 'base'))) {
// Yes, IE people should be put in jail. // Yes, IE people should be put in jail.
$this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '. $this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie'.$ver.'.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]'); 'href="'.Theme::path('css/ie'.$ver.'.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
} }
} }
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '. $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie.css', null).'?version='.STATUSNET_VERSION.'" /><![endif]'); 'href="'.Theme::path('css/ie.css', null).'?version='.STATUSNET_VERSION.'" /><![endif]');
Event::handle('EndShowUAStyles', array($this)); Event::handle('EndShowUAStyles', array($this));
} }
@ -391,9 +391,9 @@ class Action extends HTMLOutputter // lawsuit
if (Event::handle('StartAddressData', array($this))) { if (Event::handle('StartAddressData', array($this))) {
$this->elementStart('a', array('class' => 'url home bookmark', $this->elementStart('a', array('class' => 'url home bookmark',
'href' => common_local_url('public'))); 'href' => common_local_url('public')));
if (common_config('site', 'logo') || file_exists(theme_file('logo.png'))) { if (common_config('site', 'logo') || file_exists(Theme::file('logo.png'))) {
$this->element('img', array('class' => 'logo photo', $this->element('img', array('class' => 'logo photo',
'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : theme_path('logo.png'), 'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png'),
'alt' => common_config('site', 'name'))); 'alt' => common_config('site', 'name')));
} }
$this->element('span', array('class' => 'fn org'), common_config('site', 'name')); $this->element('span', array('class' => 'fn org'), common_config('site', 'name'));
@ -456,7 +456,7 @@ class Action extends HTMLOutputter // lawsuit
_('Help'), _('Help me!'), false, 'nav_help'); _('Help'), _('Help me!'), false, 'nav_help');
if ($user || !common_config('site', 'private')) { if ($user || !common_config('site', 'private')) {
$this->menuItem(common_local_url('peoplesearch'), $this->menuItem(common_local_url('peoplesearch'),
_('Search'), _('Search for users or text'), false, 'nav_search'); _('Search'), _('Search for people or text'), false, 'nav_search');
} }
Event::handle('EndPrimaryNav', array($this)); Event::handle('EndPrimaryNav', array($this));
} }
@ -1101,4 +1101,22 @@ class Action extends HTMLOutputter // lawsuit
{ {
return Design::siteDesign(); return Design::siteDesign();
} }
/**
* Check the session token.
*
* Checks that the current form has the correct session token,
* and throw an exception if it does not.
*
* @return void
*/
function checkSessionToken()
{
// CSRF protection
$token = $this->trimmed('token');
if (empty($token) || $token != common_session_token()) {
$this->clientError(_('There was a problem with your session token.'));
}
}
} }

View File

@ -66,7 +66,7 @@ class ApiAction extends Action
* *
* @param array $args Web and URL arguments * @param array $args Web and URL arguments
* *
* @return boolean false if user doesn't exist * @return boolean false if user does not exist
*/ */
function prepare($args) function prepare($args)
@ -138,7 +138,7 @@ class ApiAction extends Action
$design = null; $design = null;
$user = $profile->getUser(); $user = $profile->getUser();
// Note: some profiles don't have an associated user // Note: some profiles do not have an associated user
if (!empty($user)) { if (!empty($user)) {
$design = $user->getDesign(); $design = $user->getDesign();
@ -208,7 +208,7 @@ class ApiAction extends Action
if ($get_notice) { if ($get_notice) {
$notice = $profile->getCurrentNotice(); $notice = $profile->getCurrentNotice();
if ($notice) { if ($notice) {
# don't get user! # do not get user!
$twitter_user['status'] = $this->twitterStatusArray($notice, false); $twitter_user['status'] = $this->twitterStatusArray($notice, false);
} }
} }
@ -268,7 +268,7 @@ class ApiAction extends Action
} }
if ($include_user) { if ($include_user) {
# Don't get notice (recursive!) # Do not get notice (recursive!)
$twitter_user = $this->twitterUserArray($profile, false); $twitter_user = $this->twitterUserArray($profile, false);
$twitter_status['user'] = $twitter_user; $twitter_status['user'] = $twitter_user;
} }
@ -1079,7 +1079,7 @@ class ApiAction extends Action
function initTwitterAtom() function initTwitterAtom()
{ {
$this->startXML(); $this->startXML();
// FIXME: don't hardcode the language here! // FIXME: do not hardcode the language here!
$this->elementStart('feed', array('xmlns' => 'http://www.w3.org/2005/Atom', $this->elementStart('feed', array('xmlns' => 'http://www.w3.org/2005/Atom',
'xml:lang' => 'en-US', 'xml:lang' => 'en-US',
'xmlns:thr' => 'http://purl.org/syndication/thread/1.0')); 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0'));
@ -1121,7 +1121,7 @@ class ApiAction extends Action
return User::staticGet('nickname', $nickname); return User::staticGet('nickname', $nickname);
} else if ($this->arg('user_id')) { } else if ($this->arg('user_id')) {
// This is to ensure that a non-numeric user_id still // This is to ensure that a non-numeric user_id still
// overrides screen_name even if it doesn't get used // overrides screen_name even if it does not get used
if (is_numeric($this->arg('user_id'))) { if (is_numeric($this->arg('user_id'))) {
return User::staticGet('id', $this->arg('user_id')); return User::staticGet('id', $this->arg('user_id'));
} }
@ -1151,7 +1151,7 @@ class ApiAction extends Action
return User_group::staticGet('nickname', $nickname); return User_group::staticGet('nickname', $nickname);
} else if ($this->arg('group_id')) { } else if ($this->arg('group_id')) {
// This is to ensure that a non-numeric user_id still // This is to ensure that a non-numeric user_id still
// overrides screen_name even if it doesn't get used // overrides screen_name even if it does not get used
if (is_numeric($this->arg('group_id'))) { if (is_numeric($this->arg('group_id'))) {
return User_group::staticGet('id', $this->arg('group_id')); return User_group::staticGet('id', $this->arg('group_id'));
} }

View File

@ -87,7 +87,7 @@ class ApiAuthAction extends ApiAction
} }
/** /**
* Check for a user specified via HTTP basic auth. If there isn't * Check for a user specified via HTTP basic auth. If there is not
* one, try to get one by outputting the basic auth header. * one, try to get one by outputting the basic auth header.
* *
* @return boolean true or false * @return boolean true or false

View File

@ -38,6 +38,8 @@ define('FOREIGN_NOTICE_SEND_REPLY', 4);
define('FOREIGN_FRIEND_SEND', 1); define('FOREIGN_FRIEND_SEND', 1);
define('FOREIGN_FRIEND_RECV', 2); define('FOREIGN_FRIEND_RECV', 2);
if ( $_REQUEST['p'] == 'check-fancy') { exit; } //exit with 200 response, if this is checking fancy from the installer
define_syslog_variables(); define_syslog_variables();
# append our extlib dir as the last-resort place to find libs # append our extlib dir as the last-resort place to find libs
@ -227,7 +229,6 @@ require_once 'markdown.php';
require_once INSTALLDIR.'/lib/util.php'; require_once INSTALLDIR.'/lib/util.php';
require_once INSTALLDIR.'/lib/action.php'; require_once INSTALLDIR.'/lib/action.php';
require_once INSTALLDIR.'/lib/theme.php';
require_once INSTALLDIR.'/lib/mail.php'; require_once INSTALLDIR.'/lib/mail.php';
require_once INSTALLDIR.'/lib/subs.php'; require_once INSTALLDIR.'/lib/subs.php';
require_once INSTALLDIR.'/lib/Shorturl_api.php'; require_once INSTALLDIR.'/lib/Shorturl_api.php';

View File

@ -39,7 +39,7 @@ require_once INSTALLDIR.'/lib/servererroraction.php';
* *
* This only occurs if there's been a DB_DataObject_Error that's * This only occurs if there's been a DB_DataObject_Error that's
* reported through PEAR, so we try to avoid doing anything that connects * reported through PEAR, so we try to avoid doing anything that connects
* to the DB, so we don't trigger it again. * to the DB, so we do not trigger it again.
* *
* @category Action * @category Action
* @package StatusNet * @package StatusNet
@ -62,12 +62,12 @@ class DBErrorAction extends ServerErrorAction
function getLanguage() function getLanguage()
{ {
// Don't try to figure out user's language; just show the page // Do not try to figure out user's language; just show the page
return common_config('site', 'language'); return common_config('site', 'language');
} }
function showPrimaryNav() function showPrimaryNav()
{ {
// don't show primary nav // do not show primary nav
} }
} }

View File

@ -104,11 +104,11 @@ class ErrorAction extends Action
{ {
parent::showPage(); parent::showPage();
// We don't want to have any more output after this // We do not want to have any more output after this
exit(); exit();
} }
// Overload a bunch of stuff so the page isn't too bloated // Overload a bunch of stuff so the page is not too bloated
function showBody() function showBody()
{ {

View File

@ -76,7 +76,7 @@ class HTMLOutputter extends XMLOutputter
/** /**
* Start an HTML document * Start an HTML document
* *
* If $type isn't specified, will attempt to do content negotiation. * If $type is not specified, will attempt to do content negotiation.
* *
* Attempts to do content negotiation for language, also. * Attempts to do content negotiation for language, also.
* *
@ -375,8 +375,8 @@ class HTMLOutputter extends XMLOutputter
$url = parse_url($src); $url = parse_url($src);
if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment)) if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
{ {
if(file_exists(theme_file($src,$theme))){ if(file_exists(Theme::file($src,$theme))){
$src = theme_path($src, $theme) . '?version=' . STATUSNET_VERSION; $src = Theme::path($src, $theme) . '?version=' . STATUSNET_VERSION;
}else{ }else{
$src = common_path($src); $src = common_path($src);
} }

View File

@ -119,7 +119,7 @@ class ImageFile
return; return;
} }
// Don't crop/scale if it isn't necessary // Do not crop/scale if it is not necessary
if ($size === $this->width if ($size === $this->width
&& $size === $this->height && $size === $this->height
&& $x === 0 && $x === 0

View File

@ -437,7 +437,7 @@ function jabber_public_notice($notice)
$public = common_config('xmpp', 'public'); $public = common_config('xmpp', 'public');
// FIXME PRIV don't send out private messages here // FIXME PRIV do not send out private messages here
// XXX: should we send out non-local messages if public,localonly // XXX: should we send out non-local messages if public,localonly
// = false? I think not // = false? I think not

View File

@ -467,7 +467,7 @@ function mail_notify_nudge($from, $to)
"these days and is inviting you to post some news.\n\n". "these days and is inviting you to post some news.\n\n".
"So let's hear from you :)\n\n". "So let's hear from you :)\n\n".
"%3\$s\n\n". "%3\$s\n\n".
"Don't reply to this email; it won't get to them.\n\n". "Do not reply to this email. It will not get to them.\n\n".
"With kind regards,\n". "With kind regards,\n".
"%4\$s\n"), "%4\$s\n"),
$from_profile->getBestName(), $from_profile->getBestName(),
@ -516,7 +516,7 @@ function mail_notify_message($message, $from=null, $to=null)
"------------------------------------------------------\n\n". "------------------------------------------------------\n\n".
"You can reply to their message here:\n\n". "You can reply to their message here:\n\n".
"%4\$s\n\n". "%4\$s\n\n".
"Don't reply to this email; it won't get to them.\n\n". "Do not reply to this email. It will not get to them.\n\n".
"With kind regards,\n". "With kind regards,\n".
"%5\$s\n"), "%5\$s\n"),
$from_profile->getBestName(), $from_profile->getBestName(),
@ -532,7 +532,7 @@ function mail_notify_message($message, $from=null, $to=null)
/** /**
* notify a user that one of their notices has been chosen as a 'fave' * notify a user that one of their notices has been chosen as a 'fave'
* *
* Doesn't check that the user has an email address nor if they * Does not check that the user has an email address nor if they
* want to receive notification of faves. Maybe this happens higher * want to receive notification of faves. Maybe this happens higher
* up the stack...? * up the stack...?
* *

View File

@ -347,7 +347,7 @@ class NoticeListItem extends Widget
* show the link to the main page for the notice * show the link to the main page for the notice
* *
* Displays a link to the page for a notice, with "relative" time. Tries to * Displays a link to the page for a notice, with "relative" time. Tries to
* get remote notice URLs correct, but doesn't always succeed. * get remote notice URLs correct, but does not always succeed.
* *
* @return void * @return void
*/ */
@ -483,7 +483,7 @@ class NoticeListItem extends Widget
* show a link to reply to the current notice * show a link to reply to the current notice
* *
* Should either do the reply in the current notice form (if available), or * Should either do the reply in the current notice form (if available), or
* link out to the notice-posting form. A little flakey, doesn't always work. * link out to the notice-posting form. A little flakey, does not always work.
* *
* @return void * @return void
*/ */
@ -513,7 +513,7 @@ class NoticeListItem extends Widget
$user = common_current_user(); $user = common_current_user();
if (!empty($user) && if (!empty($user) &&
($this->notice->profile_id == $user->id || $user->hasRight(Right::deleteOthersNotice))) { ($this->notice->profile_id == $user->id || $user->hasRight(Right::DELETEOTHERSNOTICE))) {
$deleteurl = common_local_url('deletenotice', $deleteurl = common_local_url('deletenotice',
array('notice' => $this->notice->id)); array('notice' => $this->notice->id));

View File

@ -114,7 +114,7 @@ class NoticeSection extends Section
$att_class = 'attachments'; $att_class = 'attachments';
} }
$clip = theme_path('images/icons/clip.png', 'base'); $clip = Theme::path('images/icons/clip.png', 'base');
$this->out->elementStart('a', array('class' => $att_class, 'style' => "font-style: italic;", 'href' => $href, 'title' => "# of attachments: $count")); $this->out->elementStart('a', array('class' => $att_class, 'style' => "font-style: italic;", 'href' => $href, 'title' => "# of attachments: $count"));
$this->out->raw(" ($count&nbsp"); $this->out->raw(" ($count&nbsp");
$this->out->element('img', array('style' => 'display: inline', 'align' => 'top', 'width' => 20, 'height' => 20, 'src' => $clip, 'alt' => 'alt')); $this->out->element('img', array('style' => 'display: inline', 'align' => 'top', 'width' => 20, 'height' => 20, 'src' => $clip, 'alt' => 'alt'));

View File

@ -351,7 +351,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
$author = User::staticGet('uri', $author_uri); $author = User::staticGet('uri', $author_uri);
} }
if (!$author) { if (!$author) {
throw new Exception('No such user'); throw new Exception('No such user.');
} }
common_log(LOG_DEBUG, print_r($author, true), __FILE__); common_log(LOG_DEBUG, print_r($author, true), __FILE__);
@ -407,7 +407,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
$user = User::staticGet('uri', $uri); $user = User::staticGet('uri', $uri);
} }
if (!$user) { if (!$user) {
throw new Exception('No such user'); throw new Exception('No such user.');
} }
return $user; return $user;
} }

View File

@ -96,8 +96,8 @@ class QueueHandler extends Daemon
* Initialization, run when the queue handler starts. * Initialization, run when the queue handler starts.
* If this function indicates failure, the handler run will be aborted. * If this function indicates failure, the handler run will be aborted.
* *
* @fixme run() will abort if this doesn't return true, * @fixme run() will abort if this does not return true,
* but some subclasses don't bother. * but some subclasses do not bother.
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
function start() function start()
@ -108,8 +108,8 @@ class QueueHandler extends Daemon
* Cleanup, run when the queue handler ends. * Cleanup, run when the queue handler ends.
* If this function indicates failure, a warning will be logged. * If this function indicates failure, a warning will be logged.
* *
* @fixme run() will throw warnings if this doesn't return true, * @fixme run() will throw warnings if this does not return true,
* but many subclasses don't bother. * but many subclasses do not bother.
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
function finish() function finish()
@ -137,7 +137,7 @@ class QueueHandler extends Daemon
* method, which passes control back to our handle_notice() method for * method, which passes control back to our handle_notice() method for
* each notice that comes in on the queue. * each notice that comes in on the queue.
* *
* Most of the time this won't need to be overridden in a subclass. * Most of the time this will not need to be overridden in a subclass.
* *
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
@ -173,7 +173,7 @@ class QueueHandler extends Daemon
* Called by QueueHandler after each handled item or empty polling cycle. * Called by QueueHandler after each handled item or empty polling cycle.
* This is a good time to e.g. service your XMPP connection. * This is a good time to e.g. service your XMPP connection.
* *
* Doesn't need to be overridden if there's no maintenance to do. * Does not need to be overridden if there's no maintenance to do.
* *
* @param int $timeout seconds to sleep if there's nothing to do * @param int $timeout seconds to sleep if there's nothing to do
*/ */

View File

@ -45,6 +45,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
class Right class Right
{ {
const deleteOthersNotice = 'deleteothersnotice'; const DELETEOTHERSNOTICE = 'deleteothersnotice';
const CONFIGURESITE = 'configuresite';
} }

View File

@ -386,7 +386,7 @@ class Rss10Action extends Action
return null; return null;
} }
// FIXME: doesn't handle modified profiles, avatars, deleted notices // FIXME: does not handle modified profiles, avatars, deleted notices
return strtotime($this->notices[0]->created); return strtotime($this->notices[0]->created);
} }

View File

@ -119,7 +119,7 @@ class MySQLSearch extends SearchEngine
return true; return true;
} else if ('identica_notices' === $this->table) { } else if ('identica_notices' === $this->table) {
// Don't show imported notices // Do not show imported notices
$this->target->whereAdd('notice.is_local != ' . Notice::GATEWAY); $this->target->whereAdd('notice.is_local != ' . Notice::GATEWAY);
if (strtolower($q) != $q) { if (strtolower($q) != $q) {

View File

@ -23,7 +23,7 @@
* @package StatusNet * @package StatusNet
* @author Evan Prodromou <evan@status.net> * @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net> * @author Sarven Capadisli <csarven@status.net>
* @copyright 2008 StatusNet, Inc. * @copyright 2008-2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
@ -33,62 +33,215 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
} }
/** /**
* Gets the full path of a file in a theme dir based on its relative name * Class for querying and manipulating a theme
* *
* @param string $relative relative path within the theme directory * Themes are directories with some expected sub-directories and files
* @param string $theme name of the theme; defaults to current theme * in them. They're found in either local/theme (for locally-installed themes)
* or theme/ subdir of installation dir.
* *
* @return string File path to the theme file * This used to be a couple of functions, but for various reasons it's nice
* to have a class instead.
*
* @category Output
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/ */
function theme_file($relative, $theme=null) class Theme
{ {
if (empty($theme)) { var $dir = null;
$theme = common_config('site', 'theme'); var $path = null;
/**
* Constructor
*
* Determines the proper directory and path for this theme.
*
* @param string $name Name of the theme; defaults to config value
*/
function __construct($name=null)
{
if (empty($name)) {
$name = common_config('site', 'theme');
}
// Check to see if it's in the local dir
$localroot = self::localRoot();
$fulldir = $localroot.'/'.$name;
if (file_exists($fulldir) && is_dir($fulldir)) {
$this->dir = $fulldir;
$this->path = common_path('local/theme/'.$name.'/');
return;
}
// Check to see if it's in the distribution dir
$instroot = self::installRoot();
$fulldir = $instroot.'/'.$name;
if (file_exists($fulldir) && is_dir($fulldir)) {
$this->dir = $fulldir;
$path = common_config('theme', 'path');
if (empty($path)) {
$path = common_config('site', 'path') . '/theme/';
}
if ($path[strlen($path)-1] != '/') {
$path .= '/';
}
if ($path[0] != '/') {
$path = '/'.$path;
}
$server = common_config('theme', 'server');
if (empty($server)) {
$server = common_config('site', 'server');
}
// XXX: protocol
$this->path = 'http://'.$server.$path.$name;
}
} }
$dir = common_config('theme', 'dir');
if (empty($dir)) { /**
$dir = INSTALLDIR.'/theme'; * Gets the full local filename of a file in this theme.
*
* @param string $relative relative name, like 'logo.png'
*
* @return string full pathname, like /var/www/mublog/theme/default/logo.png
*/
function getFile($relative)
{
return $this->dir.'/'.$relative;
}
/**
* Gets the full HTTP url of a file in this theme
*
* @param string $relative relative name, like 'logo.png'
*
* @return string full URL, like 'http://example.com/theme/default/logo.png'
*/
function getPath($relative)
{
return $this->path.'/'.$relative;
}
/**
* Gets the full path of a file in a theme dir based on its relative name
*
* @param string $relative relative path within the theme directory
* @param string $name name of the theme; defaults to current theme
*
* @return string File path to the theme file
*/
static function file($relative, $name=null)
{
$theme = new Theme($name);
return $theme->getFile($relative);
}
/**
* Gets the full URL of a file in a theme dir based on its relative name
*
* @param string $relative relative path within the theme directory
* @param string $name name of the theme; defaults to current theme
*
* @return string URL of the file
*/
static function path($relative, $name=null)
{
$theme = new Theme($name);
return $theme->getPath($relative);
}
/**
* list available theme names
*
* @return array list of available theme names
*/
static function listAvailable()
{
$local = self::subdirsOf(self::localRoot());
$install = self::subdirsOf(self::installRoot());
$i = array_search('base', $install);
unset($install[$i]);
return array_merge($local, $install);
}
/**
* Utility for getting subdirs of a directory
*
* @param string $dir full path to directory to check
*
* @return array relative filenames of subdirs, or empty array
*/
protected static function subdirsOf($dir)
{
$subdirs = array();
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($filename = readdir($dh)) !== false) {
if ($filename != '..' && $filename !== '.' &&
is_dir($dir.'/'.$filename)) {
$subdirs[] = $filename;
}
}
closedir($dh);
}
}
return $subdirs;
}
/**
* Local root dir for themes
*
* @return string local root dir for themes
*/
protected static function localRoot()
{
return INSTALLDIR.'/local/theme';
}
/**
* Root dir for themes that are shipped with StatusNet
*
* @return string root dir for StatusNet themes
*/
protected static function installRoot()
{
$instroot = common_config('theme', 'dir');
if (empty($instroot)) {
$instroot = INSTALLDIR.'/theme';
}
return $instroot;
} }
return $dir.'/'.$theme.'/'.$relative;
}
/**
* Gets the full URL of a file in a theme dir based on its relative name
*
* @param string $relative relative path within the theme directory
* @param string $theme name of the theme; defaults to current theme
*
* @return string URL of the file
*/
function theme_path($relative, $theme=null)
{
if (empty($theme)) {
$theme = common_config('site', 'theme');
}
$path = common_config('theme', 'path');
if (empty($path)) {
$path = common_config('site', 'path') . '/theme/';
}
if ($path[strlen($path)-1] != '/') {
$path .= '/';
}
if ($path[0] != '/') {
$path = '/'.$path;
}
$server = common_config('theme', 'server');
if (empty($server)) {
$server = common_config('site', 'server');
}
// XXX: protocol
return 'http://'.$server.$path.$theme.'/'.$relative;
} }

View File

@ -62,7 +62,7 @@ function common_init_language()
$locale_set = common_init_locale($language); $locale_set = common_init_locale($language);
setlocale(LC_CTYPE, 'C'); setlocale(LC_CTYPE, 'C');
// So we don't have to make people install the gettext locales // So we do not have to make people install the gettext locales
$path = common_config('site','locale_path'); $path = common_config('site','locale_path');
bindtextdomain("statusnet", $path); bindtextdomain("statusnet", $path);
bind_textdomain_codeset("statusnet", "UTF-8"); bind_textdomain_codeset("statusnet", "UTF-8");
@ -139,7 +139,7 @@ function common_check_user($nickname, $password)
} }
} }
}else{ }else{
//no handler indicated the credentials were valid, and we know their not valid because the user isn't in the database //no handler indicated the credentials were valid, and we know their not valid because the user is not in the database
return false; return false;
} }
} else { } else {
@ -396,7 +396,7 @@ function common_current_user()
} }
// Logins that are 'remembered' aren't 'real' -- they're subject to // Logins that are 'remembered' aren't 'real' -- they're subject to
// cookie-stealing. So, we don't let them do certain things. New reg, // cookie-stealing. So, we do not let them do certain things. New reg,
// OpenID, and password logins _are_ real. // OpenID, and password logins _are_ real.
function common_real_login($real=true) function common_real_login($real=true)
@ -1147,7 +1147,7 @@ function common_accept_to_prefs($accept, $def = '*/*')
$parts = explode(',', $accept); $parts = explode(',', $accept);
foreach($parts as $part) { foreach($parts as $part) {
// FIXME: doesn't deal with params like 'text/html; level=1' // FIXME: does not deal with params like 'text/html; level=1'
@list($value, $qpart) = explode(';', trim($part)); @list($value, $qpart) = explode(';', trim($part));
$match = array(); $match = array();
if(!isset($qpart)) { if(!isset($qpart)) {
@ -1346,7 +1346,7 @@ function common_error_handler($errno, $errstr, $errfile, $errline, $errcontext)
} }
// FIXME: show error page if we're on the Web // FIXME: show error page if we're on the Web
/* Don't execute PHP internal error handler */ /* Do not execute PHP internal error handler */
return true; return true;
} }
@ -1448,7 +1448,7 @@ function common_shorten_url($long_url)
} }
global $_shorteners; global $_shorteners;
if (!isset($_shorteners[$svc])) { if (!isset($_shorteners[$svc])) {
//the user selected service doesn't exist, so default to ur1.ca //the user selected service does not exist, so default to ur1.ca
$svc = 'ur1.ca'; $svc = 'ur1.ca';
} }
if (!isset($_shorteners[$svc])) { if (!isset($_shorteners[$svc])) {

View File

@ -112,7 +112,7 @@ class XMLOutputter
* *
* Utility for outputting an XML element. A convenient wrapper * Utility for outputting an XML element. A convenient wrapper
* for a bunch of longer XMLWriter calls. This is best for * for a bunch of longer XMLWriter calls. This is best for
* when an element doesn't have any sub-elements; if that's the * when an element does not have any sub-elements; if that's the
* case, use elementStart() and elementEnd() instead. * case, use elementStart() and elementEnd() instead.
* *
* The $content element will be escaped for XML. If you need * The $content element will be escaped for XML. If you need

View File

@ -37,7 +37,7 @@ class XmppQueueHandler extends QueueHandler
function start() function start()
{ {
# Low priority; we don't want to receive messages # Low priority; we do not want to receive messages
$this->log(LOG_INFO, "INITIALIZE"); $this->log(LOG_INFO, "INITIALIZE");
$this->conn = jabber_connect($this->_id.$this->transport()); $this->conn = jabber_connect($this->_id.$this->transport());

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More