Merge branch '0.9.x' of git://gitorious.org/statusnet/mainline into 0.9.x

This commit is contained in:
Brion Vibber 2009-10-12 11:10:06 -07:00
commit 712db3a897
10 changed files with 233 additions and 55 deletions

View File

@ -105,7 +105,7 @@ class GroupSearchResults extends GroupList
function __construct($user_group, $terms, $action) function __construct($user_group, $terms, $action)
{ {
parent::__construct($user_group, $terms, $action); parent::__construct($user_group, null, $action);
$this->terms = array_map('preg_quote', $this->terms = array_map('preg_quote',
array_map('htmlspecialchars', $terms)); array_map('htmlspecialchars', $terms));
$this->pattern = '/('.implode('|',$terms).')/i'; $this->pattern = '/('.implode('|',$terms).')/i';

View File

@ -428,7 +428,133 @@ require_once INSTALLDIR.'/lib/twitterapi.php';
function create($args, $apidata) function create($args, $apidata)
{ {
die("todo"); parent::handle($args);
common_debug("in groups api action");
if (!common_config('inboxes','enabled')) {
$this->serverError(_('Inboxes must be enabled for groups to work'));
return false;
}
$this->auth_user = $apidata['user'];
$nickname = $args['nickname'];
$fullname = $args['full_name'];
$homepage = $args['homepage'];
$description = $args['description'];
$location = $args['location'];
$aliasstring = $args['aliases'];
if (!Validate::string($nickname, array('min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT))) {
$this->clientError(_('Nickname must have only lowercase letters '.
'and numbers and no spaces.'), $code=403);
return;
} else if ($this->groupNicknameExists($nickname)) {
$this->clientError(_('Nickname already in use. Try another one.'), $code=403);
return;
} else if (!User_group::allowedNickname($nickname)) {
$this->clientError(_('Not a valid nickname.'), $code=403);
return;
} else if (!is_null($homepage) && (strlen($homepage) > 0) &&
!Validate::uri($homepage,
array('allowed_schemes' =>
array('http', 'https')))) {
$this->clientError(_('Homepage is not a valid URL.'), $code=403);
return;
} else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
$this->clientError(_('Full name is too long (max 255 chars).'), $code=403);
return;
} else if (User_group::descriptionTooLong($description)) {
$this->clientError(sprintf(_('description is too long (max %d chars).'), User_group::maxDescription()), $code=403);
return;
} else if (!is_null($location) && mb_strlen($location) > 255) {
$this->clientError(_('Location is too long (max 255 chars).'), $code=403);
return;
}
if (!empty($aliasstring)) {
$aliases = array_map('common_canonical_nickname', array_unique(preg_split('/[\s,]+/', $aliasstring)));
} else {
$aliases = array();
}
if (count($aliases) > common_config('group', 'maxaliases')) {
$this->clientError(sprintf(_('Too many aliases! Maximum %d.'),
common_config('group', 'maxaliases')), $code=403);
return;
}
foreach ($aliases as $alias) {
if (!Validate::string($alias, array('min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT))) {
$this->clientError(sprintf(_('Invalid alias: "%s"'), $alias), $code=403);
return;
}
if ($this->groupNicknameExists($alias)) {
$this->clientError(sprintf(_('Alias "%s" already in use. Try another one.'),
$alias), $code=403);
return;
}
// XXX assumes alphanum nicknames
if (strcmp($alias, $nickname) == 0) {
$this->clientError(_('Alias can\'t be the same as nickname.'), $code=403);
return;
}
}
$group = new User_group();
$group->query('BEGIN');
$group->nickname = $nickname;
$group->fullname = $fullname;
$group->homepage = $homepage;
$group->description = $description;
$group->location = $location;
$group->created = common_sql_now();
$result = $group->insert();
if (!$result) {
common_log_db_error($group, 'INSERT', __FILE__);
$this->serverError(_('Could not create group.'));
}
$result = $group->setAliases($aliases);
if (!$result) {
$this->serverError(_('Could not create aliases.'));
}
$member = new Group_member();
$member->group_id = $group->id;
$member->profile_id = $this->auth_user->id;
$member->is_admin = 1;
$member->created = $group->created;
$result = $member->insert();
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
$this->serverError(_('Could not set group membership.'));
}
$group->query('COMMIT');
switch($apidata['content-type']) {
case 'xml':
$this->show_single_xml_group($group);
break;
case 'json':
$this->show_single_json_group($group);
break;
default:
$this->clientError(_('API method not found!'), $code = 404);
}
} }
function update($args, $apidata) function update($args, $apidata)
@ -450,4 +576,21 @@ require_once INSTALLDIR.'/lib/twitterapi.php';
{ {
die("todo"); die("todo");
} }
function groupNicknameExists($nickname)
{
$group = User_group::staticGet('nickname', $nickname);
if (!empty($group)) {
return true;
}
$alias = Group_alias::staticGet('alias', $nickname);
if (!empty($alias)) {
return true;
}
return false;
}
} }

View File

@ -456,7 +456,7 @@ class TwitapistatusesAction extends TwitterapiAction
function friends($args, $apidata) function friends($args, $apidata)
{ {
parent::handle($args); parent::handle($args);
$includeStatuses=! (boolean) $args['lite']; $includeStatuses= !(array_key_exists('lite', $args) and $args['lite']);
return $this->subscriptions($apidata, 'subscribed', 'subscriber', false, $includeStatuses); return $this->subscriptions($apidata, 'subscribed', 'subscriber', false, $includeStatuses);
} }
@ -469,7 +469,7 @@ class TwitapistatusesAction extends TwitterapiAction
function followers($args, $apidata) function followers($args, $apidata)
{ {
parent::handle($args); parent::handle($args);
$includeStatuses=! (boolean) $args['lite']; $includeStatuses= !(array_key_exists('lite', $args) and $args['lite']);
return $this->subscriptions($apidata, 'subscriber', 'subscribed', false, $includeStatuses); return $this->subscriptions($apidata, 'subscriber', 'subscribed', false, $includeStatuses);
} }

View File

@ -85,9 +85,18 @@ class Session extends Memcached_DataObject
return $session->insert(); return $session->insert();
} else { } else {
if (strcmp($session->session_data, $session_data) == 0) {
self::logdeb("Not writing session '$id'; unchanged");
return true;
} else {
self::logdeb("Session '$id' data changed; updating");
$orig = clone($session);
$session->session_data = $session_data; $session->session_data = $session_data;
return $session->update(); return $session->update($orig);
}
} }
} }

View File

@ -140,15 +140,14 @@ $default =
array('enabled' => true), array('enabled' => true),
'sms' => 'sms' =>
array('enabled' => true), array('enabled' => true),
'twitter' =>
array('enabled' => true),
'twitterbridge' => 'twitterbridge' =>
array('enabled' => false), array('enabled' => false),
'integration' => 'integration' =>
array('source' => 'StatusNet', # source attribute for Twitter array('source' => 'StatusNet', # source attribute for Twitter
'taguri' => $_server.',2009'), # base for tag URIs 'taguri' => $_server.',2009'), # base for tag URIs
'twitter' => 'twitter' =>
array('consumer_key' => null, array('enabled' => true,
'consumer_key' => null,
'consumer_secret' => null), 'consumer_secret' => null),
'memcached' => 'memcached' =>
array('enabled' => false, array('enabled' => false,

View File

@ -135,16 +135,21 @@ class SearchAction extends Action
} }
function searchSuggestions($q) { function searchSuggestions($q) {
$qe = urlencode($q); $message = _(<<<E_O_T
$message = sprintf(_(<<<E_O_T
* Make sure all words are spelled correctly. * Make sure all words are spelled correctly.
* Try different keywords. * Try different keywords.
* Try more general keywords. * Try more general keywords.
* Try fewer keywords. * Try fewer keywords.
E_O_T
);
if (!common_config('site', 'private')) {
$qe = urlencode($q);
$message .= sprintf(_(<<<E_O_T
You can also try your search on other engines: You can also try your search on other engines:
* [Twingly](http://www.twingly.com/search?q=%s&content=microblog&site=identi.ca) * [Twingly](http://www.twingly.com/search?q=%s&content=microblog&site=%%%%site.server%%%%)
* [Tweet scan](http://www.tweetscan.com/indexi.php?s=%s) * [Tweet scan](http://www.tweetscan.com/indexi.php?s=%s)
* [Google](http://www.google.com/search?q=site%%3A%%%%site.server%%%%+%s) * [Google](http://www.google.com/search?q=site%%3A%%%%site.server%%%%+%s)
* [Yahoo](http://search.yahoo.com/search?p=site%%3A%%%%site.server%%%%+%s) * [Yahoo](http://search.yahoo.com/search?p=site%%3A%%%%site.server%%%%+%s)
@ -152,6 +157,7 @@ You can also try your search on other engines:
E_O_T E_O_T
), $qe, $qe, $qe, $qe, $qe); ), $qe, $qe, $qe, $qe, $qe);
}
$this->elementStart('dl', array('id' => 'help_search', 'class' => 'help')); $this->elementStart('dl', array('id' => 'help_search', 'class' => 'help'));
$this->element('dt', null, _('Search help')); $this->element('dt', null, _('Search help'));
$this->elementStart('dd', 'instructions'); $this->elementStart('dd', 'instructions');

View File

@ -998,7 +998,7 @@ function common_set_returnto($url)
function common_get_returnto() function common_get_returnto()
{ {
common_ensure_session(); common_ensure_session();
return $_SESSION['returnto']; return (array_key_exists('returnto', $_SESSION)) ? $_SESSION['returnto'] : null;
} }
function common_timestamp() function common_timestamp()

View File

@ -78,6 +78,7 @@ class FBCLoginGroupNav extends Widget
// action => array('prompt', 'title') // action => array('prompt', 'title')
$menu = array(); $menu = array();
if (!common_config('site','openidonly')) {
$menu['login'] = array(_('Login'), $menu['login'] = array(_('Login'),
_('Login with a username and password')); _('Login with a username and password'));
@ -85,9 +86,12 @@ class FBCLoginGroupNav extends Widget
$menu['register'] = array(_('Register'), $menu['register'] = array(_('Register'),
_('Sign up for a new account')); _('Sign up for a new account'));
} }
}
if (common_config('openid', 'enabled')) {
$menu['openidlogin'] = array(_('OpenID'), $menu['openidlogin'] = array(_('OpenID'),
_('Login or register with OpenID')); _('Login or register with OpenID'));
}
$menu['FBConnectLogin'] = array(_('Facebook'), $menu['FBConnectLogin'] = array(_('Facebook'),
_('Login or register using Facebook')); _('Login or register using Facebook'));

View File

@ -77,28 +77,30 @@ class FBCSettingsNav extends Widget
$this->action->elementStart('dd'); $this->action->elementStart('dd');
# action => array('prompt', 'title') # action => array('prompt', 'title')
$menu = $menu = array();
array('imsettings' => if (common_config('xmpp', 'enabled')) {
$menu['imsettings'] =
array(_('IM'), array(_('IM'),
_('Updates by instant messenger (IM)')), _('Updates by instant messenger (IM)'));
'smssettings' => }
if (common_config('sms', 'enabled')) {
$menu['smssettings'] =
array(_('SMS'), array(_('SMS'),
_('Updates by SMS')), _('Updates by SMS'));
'twittersettings' => }
if (common_config('twitter', 'enabled')) {
$menu['twittersettings'] =
array(_('Twitter'), array(_('Twitter'),
_('Twitter integration options')), _('Twitter integration options'));
'FBConnectSettings' => }
$menu['FBConnectSettings'] =
array(_('Facebook'), array(_('Facebook'),
_('Facebook Connect settings'))); _('Facebook Connect settings'));
$action_name = $this->action->trimmed('action'); $action_name = $this->action->trimmed('action');
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
foreach ($menu as $menuaction => $menudesc) { foreach ($menu as $menuaction => $menudesc) {
if ($menuaction == 'imsettings' &&
!common_config('xmpp', 'enabled')) {
continue;
}
$this->action->menuItem(common_local_url($menuaction), $this->action->menuItem(common_local_url($menuaction),
$menudesc[0], $menudesc[0],
$menudesc[1], $menudesc[1],

View File

@ -232,6 +232,14 @@ class FBConnectPlugin extends Plugin
{ {
$user = common_current_user(); $user = common_current_user();
$connect = 'FBConnectSettings';
if (common_config('xmpp', 'enabled')) {
$connect = 'imsettings';
} else if (common_config('sms', 'enabled')) {
$connect = 'smssettings';
} else if (common_config('twitter', 'enabled')) {
$connect = 'twittersettings';
}
if (!empty($user)) { if (!empty($user)) {
@ -266,13 +274,8 @@ class FBConnectPlugin extends Plugin
_('Home'), _('Personal profile and friends timeline'), false, 'nav_home'); _('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
$action->menuItem(common_local_url('profilesettings'), $action->menuItem(common_local_url('profilesettings'),
_('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account'); _('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
if (common_config('xmpp', 'enabled')) { $action->menuItem(common_local_url($connect),
$action->menuItem(common_local_url('imsettings'), _('Connect'), _('Connect to services'), false, 'nav_connect');
_('Connect'), _('Connect to IM, SMS, Twitter'), false, 'nav_connect');
} else {
$action->menuItem(common_local_url('smssettings'),
_('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
}
if (common_config('invite', 'enabled')) { if (common_config('invite', 'enabled')) {
$action->menuItem(common_local_url('invite'), $action->menuItem(common_local_url('invite'),
_('Invite'), _('Invite'),
@ -300,18 +303,30 @@ class FBConnectPlugin extends Plugin
} }
} }
else { else {
if (!common_config('site', 'openidonly')) {
if (!common_config('site', 'closed')) { if (!common_config('site', 'closed')) {
$action->menuItem(common_local_url('register'), $action->menuItem(common_local_url('register'),
_('Register'), _('Create an account'), false, 'nav_register'); _('Register'), _('Create an account'), false, 'nav_register');
} }
$action->menuItem(common_local_url('login'), $action->menuItem(common_local_url('login'),
_('Login'), _('Login to the site'), false, 'nav_login'); _('Login'), _('Login to the site'), false, 'nav_login');
} else {
$this->menuItem(common_local_url('openidlogin'),
_('OpenID'), _('Login with OpenID'), false, 'nav_openid');
}
} }
$action->menuItem(common_local_url('doc', array('title' => 'help')), $action->menuItem(common_local_url('doc', array('title' => 'help')),
_('Help'), _('Help me!'), false, 'nav_help'); _('Help'), _('Help me!'), false, 'nav_help');
if ($user || !common_config('site', 'private')) {
$action->menuItem(common_local_url('peoplesearch'), $action->menuItem(common_local_url('peoplesearch'),
_('Search'), _('Search for people or text'), false, 'nav_search'); _('Search'), _('Search for people or text'), false, 'nav_search');
}
// We are replacing the primary nav entirely; give other
// plugins a chance to handle it here.
Event::handle('EndPrimaryNav', array($action));
return false; return false;
} }