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

This commit is contained in:
Brion Vibber 2010-06-29 08:53:05 -07:00
commit c038164c0f
133 changed files with 1189 additions and 800 deletions

53
README
View File

@ -2,8 +2,8 @@
README
------
StatusNet 0.9.2 ("King of Birds")
3 May 2010
StatusNet 0.9.3 ("Half a World Away")
29 June 2010
This is the README file for StatusNet, the Open Source microblogging
platform. It includes installation instructions, descriptions of
@ -77,40 +77,27 @@ for additional terms.
New this version
================
This is a minor bug and feature release since version 0.9.1 released 28
March 2010.
This is a minor bug and feature release since version 0.9.2 released on
4 May 2010.
Because of fixes to OStatus bugs, it is highly recommended that all
public sites upgrade to the new version immediately.
For best compatibility with client software and site federation, and a lot of
bug fixes, it is highly recommended that all public sites upgrade to the new
version.
Notable changes this version:
- Installer no longer fails with a PHP fatal error when trying to set up the
subscription to update@status.net
- Fixed email notifications for @-replies that come in via OStatus
- OStatus related Fixes to the cloudy theme
- Pass geo locations over Twitter bridge (will only be used if enabled on the
Twitter side)
- scripts/showplugins.php - script to dump the list of activated plugins and
their settings
- scripts/fixup_blocks.php - script to finds any stray subscriptions in
violation of blocks, and removes them
- Allow blocking someone who's not currently subscribed to you (prevents
seeing @-replies from them, or them subbing to you in future)
- Default 2-second timeout on Geonames web service lookups
- Improved localization for plugins
- New anti-spam measures: added nofollow rels to group members list,
subscribers list
- Shared cache key option for Geonames plugin (lets multi-instance sites
share their cached geoname lookups)
- Stability fixes to the TwitterStatusFetcher
- If user allows location sharing but turned off browser location use profile
location
- Improved group listing via the API
- Improved FOAF output
- Several other bugfixes
- Enhanced API output to aid StatusNet-specific clients
- Many updates to user interface translation from TranslateWiki
- OStatus now works subscribing to SSL-protected sites by default
- OpenID now works on PHP 5.3, supports closer site integration.
- Numerous API and FOAF output fixes.
- Fixes to Facebook integration for FB API behavior changes
- PostgreSQL support updates
- Initial version of a custom theme uploader (disabled by default)
- LDAP auth plugins cleanup
- Many other bugfixes
A full changelog is available at http://status.net/wiki/StatusNet_0.9.2.
A full changelog is available at http://status.net/wiki/StatusNet_0.9.3.
Prerequisites
=============
@ -121,8 +108,8 @@ run correctly.
- PHP 5.2.3+. It may be possible to run this software on earlier
versions of PHP, but many of the functions used are only available
in PHP 5.2 or above. 5.2.6 or later is needed for XMPP background
daemons on 64-bit platforms. PHP 5.3.x should work but is known
to cause some failures for OpenID.
daemons on 64-bit platforms. PHP 5.3.x should work correctly in this
release, but problems with some plugins are possible.
- MySQL 5.x. The StatusNet database is stored, by default, in a MySQL
server. It has been primarily tested on 5.x servers, although it may
be possible to install on earlier (or later!) versions. The server

View File

@ -75,7 +75,7 @@ class ApiAccountVerifyCredentialsAction extends ApiAuthAction
if ($this->format == 'xml') {
$this->initDocument('xml');
$this->showTwitterXmlUser($twitter_user);
$this->showTwitterXmlUser($twitter_user, 'user', true);
$this->endDocument('xml');
} elseif ($this->format == 'json') {
$this->initDocument('json');

View File

@ -23,7 +23,7 @@
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -65,7 +65,7 @@ class ApiBlockCreateAction extends ApiAuthAction
parent::prepare($args);
$this->user = $this->auth_user;
$this->other = $this->getTargetUser($this->arg('id'));
$this->other = $this->getTargetProfile($this->arg('id'));
return true;
}

View File

@ -23,7 +23,7 @@
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -64,7 +64,7 @@ class ApiBlockDestroyAction extends ApiAuthAction
parent::prepare($args);
$this->user = $this->auth_user;
$this->other = $this->getTargetUser($this->arg('id'));
$this->other = $this->getTargetProfile($this->arg('id'));
return true;
}

View File

@ -24,7 +24,7 @@
* @author Dan Moore <dan@moore.cx>
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -67,7 +67,7 @@ class ApiFriendshipsCreateAction extends ApiAuthAction
parent::prepare($args);
$this->user = $this->auth_user;
$this->other = $this->getTargetUser($id);
$this->other = $this->getTargetProfile($this->arg('id'));
return true;
}
@ -106,7 +106,7 @@ class ApiFriendshipsCreateAction extends ApiAuthAction
if (empty($this->other)) {
$this->clientError(
_('Could not follow user: User not found.'),
_('Could not follow user: profile not found.'),
403,
$this->format
);

View File

@ -24,7 +24,7 @@
* @author Dan Moore <dan@moore.cx>
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -67,7 +67,7 @@ class ApiFriendshipsDestroyAction extends ApiAuthAction
parent::prepare($args);
$this->user = $this->auth_user;
$this->other = $this->getTargetUser($id);
$this->other = $this->getTargetProfile($this->arg('id'));
return true;
}
@ -125,8 +125,7 @@ class ApiFriendshipsDestroyAction extends ApiAuthAction
}
// throws an exception on error
Subscription::cancel($this->user->getProfile(),
$this->other->getProfile());
Subscription::cancel($this->user->getProfile(), $this->other);
$this->initDocument($this->format);
$this->showProfile($this->other, $this->format);

View File

@ -24,7 +24,7 @@
* @author Dan Moore <dan@moore.cx>
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -50,8 +50,8 @@ require_once INSTALLDIR . '/lib/apiprivateauth.php';
class ApiFriendshipsExistsAction extends ApiPrivateAuthAction
{
var $user_a = null;
var $user_b = null;
var $profile_a = null;
var $profile_b = null;
/**
* Take arguments for running
@ -66,11 +66,8 @@ class ApiFriendshipsExistsAction extends ApiPrivateAuthAction
{
parent::prepare($args);
$user_a_id = $this->trimmed('user_a');
$user_b_id = $this->trimmed('user_b');
$this->user_a = $this->getTargetUser($user_a_id);
$this->user_b = $this->getTargetUser($user_b_id);
$this->profile_a = $this->getTargetProfile($this->trimmed('user_a'));
$this->profile_b = $this->getTargetProfile($this->trimmed('user_b'));
return true;
}
@ -89,16 +86,16 @@ class ApiFriendshipsExistsAction extends ApiPrivateAuthAction
{
parent::handle($args);
if (empty($this->user_a) || empty($this->user_b)) {
if (empty($this->profile_a) || empty($this->profile_b)) {
$this->clientError(
_('Two user ids or screen_names must be supplied.'),
_('Two valid IDs or screen_names must be supplied.'),
400,
$this->format
);
return;
}
$result = $this->user_a->isSubscribed($this->user_b);
$result = Subscription::exists($this->profile_a, $this->profile_b);
switch ($this->format) {
case 'xml':

View File

@ -22,7 +22,7 @@
* @category Search
* @package StatusNet
* @author Zach Copley <zach@status.net>
* @copyright 2008-2009 StatusNet, Inc.
* @copyright 2008-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -31,6 +31,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/apiprivateauth.php';
/**
* Action for outputting search results in Twitter compatible Atom
* format.
@ -44,10 +46,10 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*
* @see ApiAction
* @see ApiPrivateAuthAction
*/
class TwitapisearchatomAction extends ApiAction
class ApiSearchAtomAction extends ApiPrivateAuthAction
{
var $cnt;
@ -96,8 +98,11 @@ class TwitapisearchatomAction extends ApiAction
function prepare($args)
{
common_debug("in apisearchatom prepare()");
parent::prepare($args);
$this->query = $this->trimmed('q');
$this->lang = $this->trimmed('lang');
$this->rpp = $this->trimmed('rpp');
@ -138,6 +143,7 @@ class TwitapisearchatomAction extends ApiAction
function handle($args)
{
parent::handle($args);
common_debug("In apisearchatom handle()");
$this->showAtom();
}

View File

@ -22,7 +22,7 @@
* @category Search
* @package StatusNet
* @author Zach Copley <zach@status.net>
* @copyright 2008-2009 StatusNet, Inc.
* @copyright 2008-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -31,6 +31,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/apiprivateauth.php';
require_once INSTALLDIR.'/lib/jsonsearchresultslist.php';
/**
@ -44,7 +45,7 @@ require_once INSTALLDIR.'/lib/jsonsearchresultslist.php';
* @see ApiAction
*/
class TwitapisearchjsonAction extends ApiAction
class ApiSearchJSONAction extends ApiPrivateAuthAction
{
var $query;
var $lang;
@ -64,6 +65,8 @@ class TwitapisearchjsonAction extends ApiAction
function prepare($args)
{
common_debug("apisearchjson prepare()");
parent::prepare($args);
$this->query = $this->trimmed('q');

View File

@ -206,7 +206,8 @@ class ApiSubscriptionsAction extends ApiBareAuthAction
{
switch ($this->format) {
case 'xml':
$this->elementStart('users', array('type' => 'array'));
$this->elementStart('users', array('type' => 'array',
'xmlns:statusnet' => 'http://status.net/schema/api/1/'));
foreach ($this->profiles as $profile) {
$this->showProfile(
$profile,

View File

@ -22,7 +22,7 @@
* @category Search
* @package StatusNet
* @author Zach Copley <zach@status.net>
* @copyright 2008-2009 StatusNet, Inc.
* @copyright 2008-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@ -31,6 +31,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/apiprivateauth.php';
/**
* Returns the top ten queries that are currently trending
*
@ -43,7 +45,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
* @see ApiAction
*/
class TwitapitrendsAction extends ApiAction
class ApiTrendsAction extends ApiPrivateAuthAction
{
var $callback;
@ -82,7 +84,7 @@ class TwitapitrendsAction extends ApiAction
*/
function showTrends()
{
$this->serverError(_('API method under construction.'), $code = 501);
$this->serverError(_('API method under construction.'), 501);
}
}

View File

@ -430,14 +430,6 @@ class ShowgroupAction extends GroupDesignAction
function showStatistics()
{
// XXX: WORM cache this
$members = $this->group->getMembers();
$members_count = 0;
/** $member->count() doesn't work. */
while ($members->fetch()) {
$members_count++;
}
$this->elementStart('div', array('id' => 'entity_statistics',
'class' => 'section'));
@ -451,7 +443,7 @@ class ShowgroupAction extends GroupDesignAction
$this->elementStart('dl', 'entity_members');
$this->element('dt', null, _('Members'));
$this->element('dd', null, (is_int($members_count)) ? $members_count : '0');
$this->element('dd', null, $this->group->getMemberCount());
$this->elementEnd('dl');
$this->elementEnd('div');

View File

@ -302,6 +302,7 @@ class File extends Memcached_DataObject
if(! isset($this->filename)){
$notEnclosureMimeTypes = array(null,'text/html','application/xhtml+xml');
$mimetype = $this->mimetype;
if($mimetype != null){
$mimetype = strtolower($this->mimetype);
}

View File

@ -1192,7 +1192,7 @@ class Notice extends Memcached_DataObject
'xmlns:media' => 'http://purl.org/syndication/atommedia',
'xmlns:poco' => 'http://portablecontacts.net/spec/1.0',
'xmlns:ostatus' => 'http://ostatus.org/schema/1.0',
'xmlns:statusnet' => 'http://status.net/ont/');
'xmlns:statusnet' => 'http://status.net/schema/api/1/');
} else {
$attrs = array();
}
@ -1227,7 +1227,7 @@ class Notice extends Memcached_DataObject
$xs->element('title', null, common_xml_safe_str($this->content));
if ($author) {
$xs->raw($profile->asAtomAuthor());
$xs->raw($profile->asAtomAuthor($cur));
$xs->raw($profile->asActivityActor());
}
@ -1240,9 +1240,25 @@ class Notice extends Memcached_DataObject
$xs->element('published', null, common_date_w3dtf($this->created));
$xs->element('updated', null, common_date_w3dtf($this->created));
$source = null;
$ns = $this->getSource();
if ($ns) {
if (!empty($ns->name) && !empty($ns->url)) {
$source = '<a href="'
. htmlspecialchars($ns->url)
. '" rel="nofollow">'
. htmlspecialchars($ns->name)
. '</a>';
} else {
$source = $ns->code;
}
}
$noticeInfoAttr = array(
'local_id' => $this->id, // local notice ID (useful to clients for ordering)
'source' => $this->source, // the client name (source attribution)
'local_id' => $this->id, // local notice ID (useful to clients for ordering)
'source' => $source, // the client name (source attribution)
);
$ns = $this->getSource();
@ -1254,8 +1270,8 @@ class Notice extends Memcached_DataObject
if (!empty($cur)) {
$noticeInfoAttr['favorite'] = ($cur->hasFave($this)) ? "true" : "false";
$profile = $cur->getProfile();
$noticeInfoAttr['repeated'] = ($profile->hasRepeated($this->id)) ? "true" : "false";
$profile = $cur->getProfile();
$noticeInfoAttr['repeated'] = ($profile->hasRepeated($this->id)) ? "true" : "false";
}
if (!empty($this->repeat_of)) {

View File

@ -849,15 +849,23 @@ class Profile extends Memcached_DataObject
*
* Assumes that Atom has been previously set up as the base namespace.
*
* @param Profile $cur the current authenticated user
*
* @return string
*/
function asAtomAuthor()
function asAtomAuthor($cur = null)
{
$xs = new XMLStringer(true);
$xs->elementStart('author');
$xs->element('name', null, $this->nickname);
$xs->element('uri', null, $this->getUri());
if ($cur != null) {
$attrs = Array();
$attrs['following'] = $cur->isSubscribed($this) ? 'true' : 'false';
$attrs['blocking'] = $cur->hasBlocked($this) ? 'true' : 'false';
$xs->element('statusnet:profile_info', $attrs, null);
}
$xs->elementEnd('author');
return $xs->getString();

View File

@ -64,4 +64,17 @@ class Queue_item extends Memcached_DataObject
$qi = null;
return null;
}
/**
* Release a claimed item.
*/
function releaseCLaim()
{
// DB_DataObject doesn't let us save nulls right now
$sql = sprintf("UPDATE queue_item SET claimed=NULL WHERE id=%d", $this->id);
$this->query($sql);
$this->claimed = null;
$this->encache();
}
}

View File

@ -144,6 +144,35 @@ class Status_network extends Safe_DataObject
return parent::update($orig);
}
/**
* DB_DataObject doesn't allow updating keys (even non-primary)
*/
function updateKeys(&$orig)
{
$this->_connect();
foreach (array('hostname', 'pathname') 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);
$table = common_database_tablename($this->tableName());
$qry = 'UPDATE ' . $table . ' SET ' . $toupdate .
' WHERE nickname = ' . $this->_quote($this->nickname);
$orig->decache();
$result = $this->query($qry);
if ($result) {
$this->encache();
}
return $result;
}
function delete()
{
$this->decache(); # while we still have the values!

View File

@ -154,6 +154,21 @@ class User_group extends Memcached_DataObject
return $members;
}
function getMemberCount()
{
// XXX: WORM cache this
$members = $this->getMembers();
$member_count = 0;
/** $member->count() doesn't work. */
while ($members->fetch()) {
$member_count++;
}
return $member_count;
}
function getAdmins($offset=0, $limit=null)
{
$qry =

View File

@ -51,6 +51,7 @@ VALUES
('smob','SMOB','http://smob.sioc-project.org/', now()),
('socialoomphBfD4pMqz31', 'SocialOomph', 'http://www.socialoomph.com/', now()),
('spaz','Spaz','http://funkatron.com/spaz', now()),
('StatusNet Desktop', 'StatusNet Desktop', 'http://status.net/desktop', now()),
('tarpipe','tarpipe','http://tarpipe.com/', now()),
('tjunar','Tjunar','http://nederflash.nl/boek/titels/tjunar-air', now()),
('tr.im','tr.im','http://tr.im/', now()),

View File

@ -20,7 +20,7 @@
/**
* The library version string
*/
define('Auth_OpenID_VERSION', '2.1.3');
define('Auth_OpenID_VERSION', '2.2.2');
/**
* Require the fetcher code.
@ -102,9 +102,7 @@ define('Auth_OpenID_digits',
define('Auth_OpenID_punct',
"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~");
if (Auth_OpenID_getMathLib() === null) {
Auth_OpenID_setNoMathSupport();
}
Auth_OpenID_include_init();
/**
* The OpenID utility function class.
@ -120,7 +118,7 @@ class Auth_OpenID {
*
* @access private
*/
function isFailure($thing)
static function isFailure($thing)
{
return is_a($thing, 'Auth_OpenID_FailureResponse');
}
@ -139,9 +137,12 @@ class Auth_OpenID {
* Returns an empty array if neither GET nor POST was used, or if
* POST was used but php://input cannot be opened.
*
* See background:
* http://lists.openidenabled.com/pipermail/dev/2007-March/000395.html
*
* @access private
*/
function getQuery($query_str=null)
static function getQuery($query_str=null)
{
$data = array();
@ -177,7 +178,7 @@ class Auth_OpenID {
return $data;
}
function params_from_string($str)
static function params_from_string($str)
{
$chunks = explode("&", $str);
@ -190,7 +191,7 @@ class Auth_OpenID {
}
list($k, $v) = $parts;
$data[$k] = urldecode($v);
$data[urldecode($k)] = urldecode($v);
}
return $data;
@ -203,7 +204,7 @@ class Auth_OpenID {
*
* @access private
*/
function ensureDir($dir_name)
static function ensureDir($dir_name)
{
if (is_dir($dir_name) || @mkdir($dir_name)) {
return true;
@ -225,7 +226,7 @@ class Auth_OpenID {
*
* @access private
*/
function addPrefix($values, $prefix)
static function addPrefix($values, $prefix)
{
$new_values = array();
foreach ($values as $s) {
@ -241,7 +242,7 @@ class Auth_OpenID {
*
* @access private
*/
function arrayGet($arr, $key, $fallback = null)
static function arrayGet($arr, $key, $fallback = null)
{
if (is_array($arr)) {
if (array_key_exists($key, $arr)) {
@ -261,7 +262,7 @@ class Auth_OpenID {
/**
* Replacement for PHP's broken parse_str.
*/
function parse_str($query)
static function parse_str($query)
{
if ($query === null) {
return null;
@ -278,7 +279,7 @@ class Auth_OpenID {
}
list($key, $value) = $pair;
$new_parts[$key] = urldecode($value);
$new_parts[urldecode($key)] = urldecode($value);
}
return $new_parts;
@ -295,7 +296,7 @@ class Auth_OpenID {
* pairs from $data into a URL query string
* (e.g. "username=bob&id=56").
*/
function httpBuildQuery($data)
static function httpBuildQuery($data)
{
$pairs = array();
foreach ($data as $key => $value) {
@ -323,7 +324,7 @@ class Auth_OpenID {
* @return string $url The original URL with the new parameters added.
*
*/
function appendArgs($url, $args)
static function appendArgs($url, $args)
{
if (count($args) == 0) {
return $url;
@ -367,7 +368,7 @@ class Auth_OpenID {
* @return string $url The URL resulting from assembling the
* specified components.
*/
function urlunparse($scheme, $host, $port = null, $path = '/',
static function urlunparse($scheme, $host, $port = null, $path = '/',
$query = '', $fragment = '')
{
@ -412,7 +413,7 @@ class Auth_OpenID {
* @return mixed $new_url The URL after normalization, or null if
* $url was malformed.
*/
function normalizeUrl($url)
static function normalizeUrl($url)
{
@$parsed = parse_url($url);
@ -443,7 +444,7 @@ class Auth_OpenID {
*
* @access private
*/
function intval($value)
static function intval($value)
{
$re = "/^\\d+$/";
@ -461,7 +462,7 @@ class Auth_OpenID {
* @param string $str The string of bytes to count.
* @return int The number of bytes in $str.
*/
function bytes($str)
static function bytes($str)
{
return strlen(bin2hex($str)) / 2;
}
@ -470,7 +471,7 @@ class Auth_OpenID {
* Get the bytes in a string independently of multibyte support
* conditions.
*/
function toBytes($str)
static function toBytes($str)
{
$hex = bin2hex($str);
@ -486,7 +487,7 @@ class Auth_OpenID {
return $b;
}
function urldefrag($url)
static function urldefrag($url)
{
$parts = explode("#", $url, 2);
@ -497,7 +498,7 @@ class Auth_OpenID {
}
}
function filter($callback, &$sequence)
static function filter($callback, &$sequence)
{
$result = array();
@ -510,7 +511,7 @@ class Auth_OpenID {
return $result;
}
function update(&$dest, &$src)
static function update(&$dest, &$src)
{
foreach ($src as $k => $v) {
$dest[$k] = $v;
@ -524,14 +525,14 @@ class Auth_OpenID {
*
* @param string $format_string The sprintf format for the message
*/
function log($format_string)
static function log($format_string)
{
$args = func_get_args();
$message = call_user_func_array('sprintf', $args);
error_log($message);
}
function autoSubmitHTML($form, $title="OpenId transaction in progress")
static function autoSubmitHTML($form, $title="OpenId transaction in progress")
{
return("<html>".
"<head><title>".
@ -549,4 +550,14 @@ class Auth_OpenID {
"</html>");
}
}
?>
/*
* Function to run when this file is included.
* Abstracted to a function to make life easier
* for some PHP optimizers.
*/
function Auth_OpenID_include_init() {
if (Auth_OpenID_getMathLib() === null) {
Auth_OpenID_setNoMathSupport();
}
}

View File

@ -38,7 +38,7 @@ class Auth_OpenID_AX {
* @return bool true if $thing is an Auth_OpenID_AX_Error; false
* if not.
*/
function isError($thing)
static function isError($thing)
{
return is_a($thing, 'Auth_OpenID_AX_Error');
}
@ -191,7 +191,7 @@ class Auth_OpenID_AX_AttrInfo {
* Construct an attribute information object. For parameter
* details, see the constructor.
*/
function make($type_uri, $count=1, $required=false,
static function make($type_uri, $count=1, $required=false,
$alias=null)
{
if ($alias !== null) {
@ -235,7 +235,7 @@ class Auth_OpenID_AX_AttrInfo {
* return null If an alias is present in the list of aliases but
* is not present in the namespace map.
*/
function Auth_OpenID_AX_toTypeURIs(&$namespace_map, $alias_list_s)
function Auth_OpenID_AX_toTypeURIs($namespace_map, $alias_list_s)
{
$uris = array();
@ -386,7 +386,7 @@ class Auth_OpenID_AX_FetchRequest extends Auth_OpenID_AX_Message {
* Auth_OpenID_AX_FetchRequest extracted from the request message if
* successful
*/
function &fromOpenIDRequest($request)
static function fromOpenIDRequest($request)
{
$m = $request->message;
$obj = new Auth_OpenID_AX_FetchRequest();
@ -484,7 +484,7 @@ class Auth_OpenID_AX_FetchRequest extends Auth_OpenID_AX_Message {
Auth_OpenID::arrayGet($ax_args, 'required'));
foreach ($required as $type_uri) {
$attrib =& $this->requested_attributes[$type_uri];
$attrib = $this->requested_attributes[$type_uri];
$attrib->required = true;
}
@ -587,7 +587,7 @@ class Auth_OpenID_AX_KeyValueMessage extends Auth_OpenID_AX_Message {
*
* @access private
*/
function _getExtensionKVArgs(&$aliases)
function _getExtensionKVArgs($aliases)
{
if ($aliases === null) {
$aliases = new Auth_OpenID_NamespaceMap();
@ -652,7 +652,7 @@ class Auth_OpenID_AX_KeyValueMessage extends Auth_OpenID_AX_Message {
foreach ($aliases->iteritems() as $pair) {
list($type_uri, $alias) = $pair;
if (array_key_exists('count.' . $alias, $ax_args)) {
if (array_key_exists('count.' . $alias, $ax_args) && ($ax_args['count.' . $alias] !== Auth_OpenID_AX_UNLIMITED_VALUES)) {
$count_key = 'count.' . $alias;
$count_s = $ax_args[$count_key];
@ -888,7 +888,7 @@ class Auth_OpenID_AX_FetchResponse extends Auth_OpenID_AX_KeyValueMessage {
$ax_args['update_url'] = $update_url;
}
Auth_OpenID::update(&$ax_args, $kv_args);
Auth_OpenID::update($ax_args, $kv_args);
return $ax_args;
}
@ -922,7 +922,7 @@ class Auth_OpenID_AX_FetchResponse extends Auth_OpenID_AX_KeyValueMessage {
* @return $response A FetchResponse containing the data from the
* OpenID message
*/
function fromSuccessResponse($success_response, $signed=true)
static function fromSuccessResponse($success_response, $signed=true)
{
$obj = new Auth_OpenID_AX_FetchResponse();
if ($signed) {
@ -960,7 +960,7 @@ class Auth_OpenID_AX_StoreRequest extends Auth_OpenID_AX_KeyValueMessage {
{
$ax_args = $this->_newArgs();
$kv_args = $this->_getExtensionKVArgs($aliases);
Auth_OpenID::update(&$ax_args, $kv_args);
Auth_OpenID::update($ax_args, $kv_args);
return $ax_args;
}
}
@ -980,7 +980,7 @@ class Auth_OpenID_AX_StoreResponse extends Auth_OpenID_AX_Message {
* Returns Auth_OpenID_AX_Error on error or an
* Auth_OpenID_AX_StoreResponse object on success.
*/
function &make($succeeded=true, $error_message=null)
function make($succeeded=true, $error_message=null)
{
if (($succeeded) && ($error_message !== null)) {
return new Auth_OpenID_AX_Error('An error message may only be '.
@ -1020,4 +1020,3 @@ class Auth_OpenID_AX_StoreResponse extends Auth_OpenID_AX_Message {
}
}
?>

View File

@ -94,7 +94,7 @@ class Auth_OpenID_Association {
* @return association An {@link Auth_OpenID_Association}
* instance.
*/
function fromExpiresIn($expires_in, $handle, $secret, $assoc_type)
static function fromExpiresIn($expires_in, $handle, $secret, $assoc_type)
{
$issued = time();
$lifetime = $expires_in;
@ -132,7 +132,7 @@ class Auth_OpenID_Association {
$handle, $secret, $issued, $lifetime, $assoc_type)
{
if (!in_array($assoc_type,
Auth_OpenID_getSupportedAssociationTypes())) {
Auth_OpenID_getSupportedAssociationTypes(), true)) {
$fmt = 'Unsupported association type (%s)';
trigger_error(sprintf($fmt, $assoc_type), E_USER_ERROR);
}
@ -206,7 +206,7 @@ class Auth_OpenID_Association {
* @param string $assoc_s Association as serialized by serialize()
* @return Auth_OpenID_Association $result instance of this class
*/
function deserialize($class_name, $assoc_s)
static function deserialize($class_name, $assoc_s)
{
$pairs = Auth_OpenID_KVForm::toArray($assoc_s, $strict = true);
$keys = array();
@ -327,7 +327,7 @@ class Auth_OpenID_Association {
*
* @access private
*/
function _makePairs(&$message)
function _makePairs($message)
{
$signed = $message->getArg(Auth_OpenID_OPENID_NS, 'signed');
if (!$signed || Auth_OpenID::isFailure($signed)) {
@ -352,7 +352,7 @@ class Auth_OpenID_Association {
*
* @access private
*/
function getMessageSignature(&$message)
function getMessageSignature($message)
{
$pairs = $this->_makePairs($message);
return base64_encode($this->sign($pairs));
@ -364,7 +364,7 @@ class Auth_OpenID_Association {
*
* @access private
*/
function checkMessageSignature(&$message)
function checkMessageSignature($message)
{
$sig = $message->getArg(Auth_OpenID_OPENID_NS,
'sig');
@ -469,18 +469,16 @@ function Auth_OpenID_getOnlyEncryptedOrder()
return $result;
}
function &Auth_OpenID_getDefaultNegotiator()
function Auth_OpenID_getDefaultNegotiator()
{
$x = new Auth_OpenID_SessionNegotiator(
return new Auth_OpenID_SessionNegotiator(
Auth_OpenID_getDefaultAssociationOrder());
return $x;
}
function &Auth_OpenID_getEncryptedNegotiator()
function Auth_OpenID_getEncryptedNegotiator()
{
$x = new Auth_OpenID_SessionNegotiator(
return new Auth_OpenID_SessionNegotiator(
Auth_OpenID_getOnlyEncryptedOrder());
return $x;
}
/**
@ -610,4 +608,3 @@ class Auth_OpenID_SessionNegotiator {
}
}
?>

View File

@ -351,8 +351,7 @@ function Auth_OpenID_math_extensions()
'class' => 'Auth_OpenID_GmpMathWrapper');
}
$result[] = array(
'modules' => array('bcmath', 'php_bcmath'),
$result[] = array('modules' => array('bcmath', 'php_bcmath'),
'extension' => 'bcmath',
'class' => 'Auth_OpenID_BcMathWrapper');
@ -366,27 +365,9 @@ function Auth_OpenID_detectMathLibrary($exts)
{
$loaded = false;
$hasDl = function_exists('dl');
foreach ($exts as $extension) {
// See if the extension specified is already loaded.
if ($extension['extension'] &&
extension_loaded($extension['extension'])) {
$loaded = true;
}
// Try to load dynamic modules.
if (!$loaded) {
foreach ($extension['modules'] as $module) {
if (@dl($module . "." . PHP_SHLIB_SUFFIX)) {
$loaded = true;
break;
}
}
}
// If the load succeeded, supply an instance of
// Auth_OpenID_MathWrapper which wraps the specified
// module's functionality.
if ($loaded) {
if (extension_loaded($extension['extension'])) {
return $extension;
}
}
@ -405,7 +386,7 @@ function Auth_OpenID_detectMathLibrary($exts)
* instance of a wrapper for that extension module. If no extension
* module is found, an instance of {@link Auth_OpenID_MathWrapper} is
* returned, which wraps the native PHP integer implementation. The
* proper calling convention for this method is $lib =&
* proper calling convention for this method is $lib =
* Auth_OpenID_getMathLib().
*
* This function checks for the existence of specific long number
@ -416,7 +397,7 @@ function Auth_OpenID_detectMathLibrary($exts)
*
* @package OpenID
*/
function &Auth_OpenID_getMathLib()
function Auth_OpenID_getMathLib()
{
// The instance of Auth_OpenID_MathWrapper that we choose to
// supply will be stored here, so that subseqent calls to this
@ -468,4 +449,4 @@ function Auth_OpenID_noMathSupport()
return defined('Auth_OpenID_NO_MATH_SUPPORT');
}
?>

View File

@ -258,19 +258,19 @@ class Auth_OpenID_Consumer {
* when creating the internal consumer object. This is used for
* testing.
*/
function Auth_OpenID_Consumer(&$store, $session = null,
function Auth_OpenID_Consumer($store, $session = null,
$consumer_cls = null)
{
if ($session === null) {
$session = new Auth_Yadis_PHPSession();
}
$this->session =& $session;
$this->session = $session;
if ($consumer_cls !== null) {
$this->consumer =& new $consumer_cls($store);
$this->consumer = new $consumer_cls($store);
} else {
$this->consumer =& new Auth_OpenID_GenericConsumer($store);
$this->consumer = new Auth_OpenID_GenericConsumer($store);
}
$this->_token_key = $this->session_key_prefix . $this->_token_suffix;
@ -281,7 +281,7 @@ class Auth_OpenID_Consumer {
*
* @access private
*/
function getDiscoveryObject(&$session, $openid_url,
function getDiscoveryObject($session, $openid_url,
$session_key_prefix)
{
return new Auth_Yadis_Discovery($session, $openid_url,
@ -339,7 +339,7 @@ class Auth_OpenID_Consumer {
$this->consumer->fetcher);
// Reset the 'stale' attribute of the manager.
$m =& $disco->getManager();
$m = $disco->getManager();
if ($m) {
$m->stale = false;
$disco->session->set($disco->session_key,
@ -370,7 +370,7 @@ class Auth_OpenID_Consumer {
* @return Auth_OpenID_AuthRequest $auth_request An OpenID
* authentication request object.
*/
function &beginWithoutDiscovery($endpoint, $anonymous=false)
function beginWithoutDiscovery($endpoint, $anonymous=false)
{
$loader = new Auth_OpenID_ServiceEndpointLoader();
$auth_req = $this->consumer->begin($endpoint);
@ -467,7 +467,7 @@ class Auth_OpenID_DiffieHellmanSHA1ConsumerSession {
function getRequest()
{
$math =& Auth_OpenID_getMathLib();
$math = Auth_OpenID_getMathLib();
$cpub = $math->longToBase64($this->dh->public);
@ -496,7 +496,7 @@ class Auth_OpenID_DiffieHellmanSHA1ConsumerSession {
return null;
}
$math =& Auth_OpenID_getMathLib();
$math = Auth_OpenID_getMathLib();
$spub = $math->base64ToLong($response->getArg(Auth_OpenID_OPENID_NS,
'dh_server_public'));
@ -611,11 +611,11 @@ class Auth_OpenID_GenericConsumer {
* in the module description. The default value is False, which
* disables immediate mode.
*/
function Auth_OpenID_GenericConsumer(&$store)
function Auth_OpenID_GenericConsumer($store)
{
$this->store =& $store;
$this->negotiator =& Auth_OpenID_getDefaultNegotiator();
$this->_use_assocs = ($this->store ? true : false);
$this->store = $store;
$this->negotiator = Auth_OpenID_getDefaultNegotiator();
$this->_use_assocs = (is_null($this->store) ? false : true);
$this->fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
@ -665,14 +665,14 @@ class Auth_OpenID_GenericConsumer {
$method = Auth_OpenID::arrayGet($mode_methods, $mode,
'_completeInvalid');
return call_user_func_array(array(&$this, $method),
array($message, $endpoint, $return_to));
return call_user_func_array(array($this, $method),
array($message, &$endpoint, $return_to));
}
/**
* @access private
*/
function _completeInvalid($message, &$endpoint, $unused)
function _completeInvalid($message, $endpoint, $unused)
{
$mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode',
'<No mode set>');
@ -684,7 +684,7 @@ class Auth_OpenID_GenericConsumer {
/**
* @access private
*/
function _complete_cancel($message, &$endpoint, $unused)
function _complete_cancel($message, $endpoint, $unused)
{
return new Auth_OpenID_CancelResponse($endpoint);
}
@ -692,7 +692,7 @@ class Auth_OpenID_GenericConsumer {
/**
* @access private
*/
function _complete_error($message, &$endpoint, $unused)
function _complete_error($message, $endpoint, $unused)
{
$error = $message->getArg(Auth_OpenID_OPENID_NS, 'error');
$contact = $message->getArg(Auth_OpenID_OPENID_NS, 'contact');
@ -705,7 +705,7 @@ class Auth_OpenID_GenericConsumer {
/**
* @access private
*/
function _complete_setup_needed($message, &$endpoint, $unused)
function _complete_setup_needed($message, $endpoint, $unused)
{
if (!$message->isOpenID2()) {
return $this->_completeInvalid($message, $endpoint);
@ -719,7 +719,7 @@ class Auth_OpenID_GenericConsumer {
/**
* @access private
*/
function _complete_id_res($message, &$endpoint, $return_to)
function _complete_id_res($message, $endpoint, $return_to)
{
$user_setup_url = $message->getArg(Auth_OpenID_OPENID1_NS,
'user_setup_url');
@ -1181,7 +1181,7 @@ class Auth_OpenID_GenericConsumer {
// oidutil.log('Performing discovery on %s' % (claimed_id,))
list($unused, $services) = call_user_func($this->discoverMethod,
$claimed_id,
$this->fetcher);
&$this->fetcher);
if (!$services) {
return new Auth_OpenID_FailureResponse(null,
@ -1197,7 +1197,7 @@ class Auth_OpenID_GenericConsumer {
* @access private
*/
function _verifyDiscoveryServices($claimed_id,
&$services, &$to_match_endpoints)
$services, $to_match_endpoints)
{
// Search the services resulting from discovery to find one
// that matches the information from the assertion
@ -1216,8 +1216,8 @@ class Auth_OpenID_GenericConsumer {
}
return new Auth_OpenID_FailureResponse(null,
sprintf('No matching endpoint found after discovering %s',
$claimed_id));
sprintf('No matching endpoint found after discovering %s: %s',
$claimed_id, $result->message));
}
/**
@ -1397,7 +1397,7 @@ class Auth_OpenID_GenericConsumer {
*
* @access private
*/
function _httpResponseToMessage($response, $server_url)
static function _httpResponseToMessage($response, $server_url)
{
// Should this function be named Message.fromHTTPResponse instead?
$response_message = Auth_OpenID_Message::fromKVForm($response->body);
@ -1461,7 +1461,7 @@ class Auth_OpenID_GenericConsumer {
*
* @access private
*/
function _extractSupportedAssociationType(&$server_error, &$endpoint,
function _extractSupportedAssociationType($server_error, $endpoint,
$assoc_type)
{
// Any error message whose code is not 'unsupported-type'
@ -1566,7 +1566,7 @@ class Auth_OpenID_GenericConsumer {
/**
* @access private
*/
function _extractAssociation(&$assoc_response, &$assoc_session)
function _extractAssociation($assoc_response, $assoc_session)
{
// Extract the common fields from the response, raising an
// exception if they are not found
@ -1748,10 +1748,10 @@ class Auth_OpenID_AuthRequest {
* class. Instances of this class are created by the library when
* needed.
*/
function Auth_OpenID_AuthRequest(&$endpoint, $assoc)
function Auth_OpenID_AuthRequest($endpoint, $assoc)
{
$this->assoc = $assoc;
$this->endpoint =& $endpoint;
$this->endpoint = $endpoint;
$this->return_to_args = array();
$this->message = new Auth_OpenID_Message(
$endpoint->preferredNamespace());
@ -1764,7 +1764,7 @@ class Auth_OpenID_AuthRequest {
* $extension_request: An object that implements the extension
* request interface for adding arguments to an OpenID message.
*/
function addExtension(&$extension_request)
function addExtension($extension_request)
{
$extension_request->toMessage($this->message);
}
@ -2089,7 +2089,7 @@ class Auth_OpenID_SuccessResponse extends Auth_OpenID_ConsumerResponse {
foreach ($msg_args as $key => $value) {
if (!$this->isSigned($ns_uri, $key)) {
return null;
unset($msg_args[$key]);
}
}
@ -2167,7 +2167,7 @@ class Auth_OpenID_ServerErrorContainer {
/**
* @access private
*/
function fromMessage($message)
static function fromMessage($message)
{
$error_text = $message->getArg(
Auth_OpenID_OPENID_NS, 'error', '<no error message supplied>');
@ -2227,4 +2227,4 @@ class Auth_OpenID_SetupNeededResponse extends Auth_OpenID_ConsumerResponse {
}
}
?>

View File

@ -37,7 +37,7 @@ class Auth_OpenID_CryptUtil {
* @param int $num_bytes The length of the return value
* @return string $bytes random bytes
*/
function getBytes($num_bytes)
static function getBytes($num_bytes)
{
static $f = null;
$bytes = '';
@ -77,7 +77,7 @@ class Auth_OpenID_CryptUtil {
* @return string $result A string of randomly-chosen characters
* from $chrs
*/
function randomString($length, $population = null)
static function randomString($length, $population = null)
{
if ($population === null) {
return Auth_OpenID_CryptUtil::getBytes($length);
@ -106,4 +106,3 @@ class Auth_OpenID_CryptUtil {
}
}
?>

View File

@ -128,4 +128,3 @@ class Auth_OpenID_DatabaseConnection {
}
}
?>

View File

@ -51,9 +51,9 @@ class Auth_OpenID_DiffieHellman {
$private = null, $lib = null)
{
if ($lib === null) {
$this->lib =& Auth_OpenID_getMathLib();
$this->lib = Auth_OpenID_getMathLib();
} else {
$this->lib =& $lib;
$this->lib = $lib;
}
if ($mod === null) {
@ -110,4 +110,4 @@ class Auth_OpenID_DiffieHellman {
}
}
?>

View File

@ -28,8 +28,34 @@ function Auth_OpenID_getOpenIDTypeURIs()
Auth_OpenID_TYPE_2_0,
Auth_OpenID_TYPE_1_2,
Auth_OpenID_TYPE_1_1,
Auth_OpenID_TYPE_1_0,
Auth_OpenID_RP_RETURN_TO_URL_TYPE);
Auth_OpenID_TYPE_1_0);
}
function Auth_OpenID_getOpenIDConsumerTypeURIs()
{
return array(Auth_OpenID_RP_RETURN_TO_URL_TYPE);
}
/*
* Provides a user-readable interpretation of a type uri.
* Useful for error messages.
*/
function Auth_OpenID_getOpenIDTypeName($type_uri) {
switch ($type_uri) {
case Auth_OpenID_TYPE_2_0_IDP:
return 'OpenID 2.0 IDP';
case Auth_OpenID_TYPE_2_0:
return 'OpenID 2.0';
case Auth_OpenID_TYPE_1_2:
return 'OpenID 1.2';
case Auth_OpenID_TYPE_1_1:
return 'OpenID 1.1';
case Auth_OpenID_TYPE_1_0:
return 'OpenID 1.0';
case Auth_OpenID_RP_RETURN_TO_URL_TYPE:
return 'OpenID relying party';
}
}
/**
@ -124,7 +150,7 @@ class Auth_OpenID_ServiceEndpoint {
return in_array(Auth_OpenID_TYPE_2_0_IDP, $this->type_uris);
}
function fromOPEndpointURL($op_endpoint_url)
static function fromOPEndpointURL($op_endpoint_url)
{
// Construct an OP-Identifier OpenIDServiceEndpoint object for
// a given OP Endpoint URL
@ -171,15 +197,34 @@ class Auth_OpenID_ServiceEndpoint {
}
}
/*
* Parse the given document as XRDS looking for OpenID consumer services.
*
* @return array of Auth_OpenID_ServiceEndpoint or null if the
* document cannot be parsed.
*/
function consumerFromXRDS($uri, $xrds_text)
{
$xrds =& Auth_Yadis_XRDS::parseXRDS($xrds_text);
if ($xrds) {
$yadis_services =
$xrds->services(array('filter_MatchesAnyOpenIDConsumerType'));
return Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services);
}
return null;
}
/*
* Parse the given document as XRDS looking for OpenID services.
*
* @return array of Auth_OpenID_ServiceEndpoint or null if the
* document cannot be parsed.
*/
function fromXRDS($uri, $xrds_text)
static function fromXRDS($uri, $xrds_text)
{
$xrds =& Auth_Yadis_XRDS::parseXRDS($xrds_text);
$xrds = Auth_Yadis_XRDS::parseXRDS($xrds_text);
if ($xrds) {
$yadis_services =
@ -197,7 +242,7 @@ class Auth_OpenID_ServiceEndpoint {
* @return array of Auth_OpenID_ServiceEndpoint or null if
* endpoints cannot be created.
*/
function fromDiscoveryResult($discoveryResult)
static function fromDiscoveryResult($discoveryResult)
{
if ($discoveryResult->isXRDS()) {
return Auth_OpenID_ServiceEndpoint::fromXRDS(
@ -210,7 +255,7 @@ class Auth_OpenID_ServiceEndpoint {
}
}
function fromHTML($uri, $html)
static function fromHTML($uri, $html)
{
$discovery_types = array(
array(Auth_OpenID_TYPE_2_0,
@ -273,7 +318,7 @@ function Auth_OpenID_findOPLocalIdentifier($service, $type_uris)
$service->parser->registerNamespace('xrd',
Auth_Yadis_XMLNS_XRD_2_0);
$parser =& $service->parser;
$parser = $service->parser;
$permitted_tags = array();
@ -305,7 +350,7 @@ function Auth_OpenID_findOPLocalIdentifier($service, $type_uris)
return $local_id;
}
function filter_MatchesAnyOpenIDType(&$service)
function filter_MatchesAnyOpenIDType($service)
{
$uris = $service->getTypes();
@ -318,6 +363,19 @@ function filter_MatchesAnyOpenIDType(&$service)
return false;
}
function filter_MatchesAnyOpenIDConsumerType(&$service)
{
$uris = $service->getTypes();
foreach ($uris as $uri) {
if (in_array($uri, Auth_OpenID_getOpenIDConsumerTypeURIs())) {
return true;
}
}
return false;
}
function Auth_OpenID_bestMatchingService($service, $preferred_types)
{
// Return the index of the first matching type, or something
@ -415,7 +473,7 @@ function Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services)
return $s;
}
function Auth_OpenID_discoverWithYadis($uri, &$fetcher,
function Auth_OpenID_discoverWithYadis($uri, $fetcher,
$endpoint_filter='Auth_OpenID_getOPOrUserServices',
$discover_function=null)
{
@ -433,12 +491,12 @@ function Auth_OpenID_discoverWithYadis($uri, &$fetcher,
$openid_services = array();
$response = call_user_func_array($discover_function,
array($uri, &$fetcher));
array($uri, $fetcher));
$yadis_url = $response->normalized_uri;
$yadis_services = array();
if ($response->isFailure()) {
if ($response->isFailure() && !$response->isXRDS()) {
return array($uri, array());
}
@ -460,18 +518,18 @@ function Auth_OpenID_discoverWithYadis($uri, &$fetcher,
}
$openid_services = call_user_func_array($endpoint_filter,
array(&$openid_services));
array($openid_services));
return array($yadis_url, $openid_services);
}
function Auth_OpenID_discoverURI($uri, &$fetcher)
function Auth_OpenID_discoverURI($uri, $fetcher)
{
$uri = Auth_OpenID::normalizeUrl($uri);
return Auth_OpenID_discoverWithYadis($uri, $fetcher);
}
function Auth_OpenID_discoverWithoutYadis($uri, &$fetcher)
function Auth_OpenID_discoverWithoutYadis($uri, $fetcher)
{
$http_resp = @$fetcher->get($uri);
@ -490,7 +548,7 @@ function Auth_OpenID_discoverWithoutYadis($uri, &$fetcher)
return array($identity_url, $openid_services);
}
function Auth_OpenID_discoverXRI($iname, &$fetcher)
function Auth_OpenID_discoverXRI($iname, $fetcher)
{
$resolver = new Auth_Yadis_ProxyResolver($fetcher);
list($canonicalID, $yadis_services) =
@ -513,7 +571,7 @@ function Auth_OpenID_discoverXRI($iname, &$fetcher)
return array($iname, $openid_services);
}
function Auth_OpenID_discover($uri, &$fetcher)
function Auth_OpenID_discover($uri, $fetcher)
{
// If the fetcher (i.e., PHP) doesn't support SSL, we can't do
// discovery on an HTTPS URL.
@ -545,4 +603,4 @@ function Auth_OpenID_discover($uri, &$fetcher)
return $result;
}
?>

View File

@ -97,4 +97,3 @@ class Auth_OpenID_DumbStore extends Auth_OpenID_OpenIDStore {
}
}
?>

View File

@ -39,7 +39,7 @@ class Auth_OpenID_Extension {
*
* Returns the message with the extension arguments added.
*/
function toMessage(&$message)
function toMessage($message)
{
$implicit = $message->isOpenID1();
$added = $message->namespaces->addAlias($this->ns_uri,
@ -59,4 +59,3 @@ class Auth_OpenID_Extension {
}
}
?>

View File

@ -367,7 +367,7 @@ class Auth_OpenID_FileStore extends Auth_OpenID_OpenIDStore {
}
if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
return False;
return false;
}
if ($server_url) {
@ -519,7 +519,7 @@ class Auth_OpenID_FileStore extends Auth_OpenID_OpenIDStore {
/**
* @access private
*/
function _mkdtemp($dir)
static function _mkdtemp($dir)
{
foreach (range(0, 4) as $i) {
$name = $dir . strval(DIRECTORY_SEPARATOR) . strval(getmypid()) .
@ -615,4 +615,4 @@ class Auth_OpenID_FileStore extends Auth_OpenID_OpenIDStore {
}
}
?>

View File

@ -96,4 +96,3 @@ if (function_exists('hash_hmac') &&
define('Auth_OpenID_HMACSHA256_SUPPORTED', false);
}
?>

View File

@ -194,4 +194,3 @@ class Auth_OpenID_OpenIDStore {
}
}
?>

View File

@ -26,7 +26,7 @@ class Auth_OpenID_KVForm {
* @static
* @access private
*/
function toArray($kvs, $strict=false)
static function toArray($kvs, $strict=false)
{
$lines = explode("\n", $kvs);
@ -78,7 +78,7 @@ class Auth_OpenID_KVForm {
* @static
* @access private
*/
function fromArray($values)
static function fromArray($values)
{
if ($values === null) {
return null;
@ -109,4 +109,3 @@ class Auth_OpenID_KVForm {
}
}
?>

View File

@ -205,4 +205,3 @@ class Auth_OpenID_MemcachedStore extends Auth_OpenID_OpenIDStore {
}
}
?>

View File

@ -143,7 +143,7 @@ class Auth_OpenID_Mapping {
* Returns true if $thing is an Auth_OpenID_Mapping object; false
* if not.
*/
function isA($thing)
static function isA($thing)
{
return (is_object($thing) &&
strtolower(get_class($thing)) == 'auth_openid_mapping');
@ -442,7 +442,7 @@ class Auth_OpenID_Message {
return $this->getOpenIDNamespace() == Auth_OpenID_OPENID2_NS;
}
function fromPostArgs($args)
static function fromPostArgs($args)
{
// Construct a Message containing a set of POST arguments
$obj = new Auth_OpenID_Message();
@ -477,7 +477,7 @@ class Auth_OpenID_Message {
}
}
function fromOpenIDArgs($openid_args)
static function fromOpenIDArgs($openid_args)
{
// Takes an array.
@ -594,7 +594,7 @@ class Auth_OpenID_Message {
return $this->_openid_ns_uri;
}
function fromKVForm($kvform_string)
static function fromKVForm($kvform_string)
{
// Create a Message from a KVForm string
return Auth_OpenID_Message::fromOpenIDArgs(
@ -917,4 +917,4 @@ class Auth_OpenID_Message {
}
}
?>

View File

@ -75,4 +75,3 @@ class Auth_OpenID_MySQLStore extends Auth_OpenID_SQLStore {
}
}
?>

View File

@ -106,4 +106,3 @@ function Auth_OpenID_mkNonce($when = null)
return $time_str . $salt;
}
?>

View File

@ -21,7 +21,7 @@ define('PAPE_AUTH_PHISHING_RESISTANT',
'http://schemas.openid.net/pape/policies/2007/06/phishing-resistant');
define('PAPE_TIME_VALIDATOR',
'^[0-9]{4,4}-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z$');
'/^[0-9]{4,4}-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z$/');
/**
* A Provider Authentication Policy request, sent from a relying party
* to a provider
@ -82,7 +82,7 @@ class Auth_OpenID_PAPE_Request extends Auth_OpenID_Extension {
* Instantiate a Request object from the arguments in a checkid_*
* OpenID message
*/
function fromOpenIDRequest($request)
static function fromOpenIDRequest($request)
{
$obj = new Auth_OpenID_PAPE_Request();
$args = $request->message->getArgs(Auth_OpenID_PAPE_NS_URI);
@ -201,7 +201,7 @@ class Auth_OpenID_PAPE_Response extends Auth_OpenID_Extension {
* @returns: A provider authentication policy response from the
* data that was supplied with the id_res response.
*/
function fromSuccessResponse($success_response)
static function fromSuccessResponse($success_response)
{
$obj = new Auth_OpenID_PAPE_Response();
@ -262,7 +262,7 @@ class Auth_OpenID_PAPE_Response extends Auth_OpenID_Extension {
$auth_time = Auth_OpenID::arrayGet($args, 'auth_time');
if ($auth_time !== null) {
if (ereg(PAPE_TIME_VALIDATOR, $auth_time)) {
if (preg_match(PAPE_TIME_VALIDATOR, $auth_time)) {
$this->auth_time = $auth_time;
} else if ($strict) {
return false;
@ -287,7 +287,7 @@ class Auth_OpenID_PAPE_Response extends Auth_OpenID_Extension {
}
if ($this->auth_time !== null) {
if (!ereg(PAPE_TIME_VALIDATOR, $this->auth_time)) {
if (!preg_match(PAPE_TIME_VALIDATOR, $this->auth_time)) {
return false;
}
@ -298,4 +298,3 @@ class Auth_OpenID_PAPE_Response extends Auth_OpenID_Extension {
}
}
?>

View File

@ -101,7 +101,7 @@ class Auth_OpenID_Parse {
* Starts with the tag name at a word boundary, where the tag name
* is not a namespace
*/
var $_tag_expr = "<%s\b(?!:)([^>]*?)(?:\/>|>(.*?)(?:<\/?%s\s*>|\Z))";
var $_tag_expr = "<%s\b(?!:)([^>]*?)(?:\/>|>(.*)(?:<\/?%s\s*>|\Z))";
var $_attr_find = '\b(\w+)=("[^"]*"|\'[^\']*\'|[^\'"\s\/<>]+)';
@ -215,11 +215,31 @@ class Auth_OpenID_Parse {
return $str;
}
}
function match($regexp, $text, &$match)
{
if (!is_callable('mb_ereg_search_init')) {
return preg_match($regexp, $text, $match);
}
$regexp = substr($regexp, 1, strlen($regexp) - 2 - strlen($this->_re_flags));
mb_ereg_search_init($text);
if (!mb_ereg_search($regexp)) {
return false;
}
list($match) = mb_ereg_search_getregs();
return true;
}
/**
* Find all link tags in a string representing a HTML document and
* return a list of their attributes.
*
* @todo This is quite ineffective and may fail with the default
* pcre.backtrack_limit of 100000 in PHP 5.2, if $html is big.
* It should rather use stripos (in PHP5) or strpos()+strtoupper()
* in PHP4 to manage this.
*
* @param string $html The text to parse
* @return array $list An array of arrays of attributes, one for each
* link tag
@ -244,18 +264,23 @@ class Auth_OpenID_Parse {
$stripped = substr($stripped, $html_begin,
$html_end - $html_begin);
// Workaround to prevent PREG_BACKTRACK_LIMIT_ERROR:
$old_btlimit = ini_set( 'pcre.backtrack_limit', -1 );
// Try to find the <HEAD> tag.
$head_re = $this->headFind();
$head_matches = array();
if (!preg_match($head_re, $stripped, $head_matches)) {
return array();
$head_match = '';
if (!$this->match($head_re, $stripped, $head_match)) {
ini_set( 'pcre.backtrack_limit', $old_btlimit );
return array();
}
$link_data = array();
$link_matches = array();
if (!preg_match_all($this->_link_find, $head_matches[0],
if (!preg_match_all($this->_link_find, $head_match,
$link_matches)) {
ini_set( 'pcre.backtrack_limit', $old_btlimit );
return array();
}
@ -273,6 +298,7 @@ class Auth_OpenID_Parse {
$link_data[] = $link_attrs;
}
ini_set( 'pcre.backtrack_limit', $old_btlimit );
return $link_data;
}
@ -349,4 +375,3 @@ function Auth_OpenID_legacy_discover($html_text, $server_rel,
}
}
?>

View File

@ -110,4 +110,3 @@ class Auth_OpenID_PostgreSQLStore extends Auth_OpenID_SQLStore {
}
}
?>

View File

@ -13,16 +13,6 @@
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache
*/
/**
* Require the PEAR DB module because we'll need it for the SQL-based
* stores implemented here. We silence any errors from the inclusion
* because it might not be present, and a user of the SQL stores may
* supply an Auth_OpenID_DatabaseConnection instance that implements
* its own storage.
*/
global $__Auth_OpenID_PEAR_AVAILABLE;
$__Auth_OpenID_PEAR_AVAILABLE = @include_once 'DB.php';
/**
* @access private
*/
@ -89,8 +79,6 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
$associations_table = null,
$nonces_table = null)
{
global $__Auth_OpenID_PEAR_AVAILABLE;
$this->associations_table_name = "oid_associations";
$this->nonces_table_name = "oid_nonces";
@ -113,7 +101,7 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
// constant, so only try to use it if PEAR is present. Note
// that Auth_Openid_Databaseconnection instances need not
// implement ::setFetchMode for this reason.
if ($__Auth_OpenID_PEAR_AVAILABLE) {
if (is_subclass_of($this->connection, 'db_common')) {
$this->connection->setFetchMode(DB_FETCHMODE_ASSOC);
}
@ -482,7 +470,7 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
global $Auth_OpenID_SKEW;
if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
return False;
return false;
}
return $this->_add_nonce($server_url, $timestamp, $salt);
@ -566,4 +554,4 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
}
}
?>

View File

@ -68,4 +68,3 @@ class Auth_OpenID_SQLiteStore extends Auth_OpenID_SQLStore {
}
}
?>

View File

@ -94,7 +94,7 @@ Auth_OpenID_registerNamespaceAlias(Auth_OpenID_SREG_NS_URI_1_1, 'sreg');
* $endpoint: The endpoint object as returned by OpenID discovery.
* returns whether an sreg type was advertised by the endpoint
*/
function Auth_OpenID_supportsSReg(&$endpoint)
function Auth_OpenID_supportsSReg($endpoint)
{
return ($endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_1) ||
$endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_0));
@ -122,7 +122,7 @@ class Auth_OpenID_SRegBase extends Auth_OpenID_Extension {
*
* @access private
*/
function _getSRegNS(&$message)
static function _getSRegNS($message)
{
$alias = null;
$found_ns_uri = null;
@ -173,7 +173,7 @@ class Auth_OpenID_SRegRequest extends Auth_OpenID_SRegBase {
/**
* Initialize an empty simple registration request.
*/
function build($required=null, $optional=null,
static function build($required=null, $optional=null,
$policy_url=null,
$sreg_ns_uri=Auth_OpenID_SREG_NS_URI,
$cls='Auth_OpenID_SRegRequest')
@ -213,7 +213,7 @@ class Auth_OpenID_SRegRequest extends Auth_OpenID_SRegBase {
*
* Returns the newly created simple registration request
*/
function fromOpenIDRequest($request, $cls='Auth_OpenID_SRegRequest')
static function fromOpenIDRequest($request, $cls='Auth_OpenID_SRegRequest')
{
$obj = call_user_func_array(array($cls, 'build'),
@ -442,7 +442,7 @@ class Auth_OpenID_SRegResponse extends Auth_OpenID_SRegBase {
* string (unicode) value. For instance, the nickname should be
* stored under the key 'nickname'.
*/
function extractResponse($request, $data)
static function extractResponse($request, $data)
{
$obj = new Auth_OpenID_SRegResponse();
$obj->ns_uri = $request->ns_uri;
@ -471,7 +471,7 @@ class Auth_OpenID_SRegResponse extends Auth_OpenID_SRegBase {
* Returns a simple registration response containing the data that
* was supplied with the C{id_res} response.
*/
function fromSuccessResponse(&$success_response, $signed_only=true)
static function fromSuccessResponse($success_response, $signed_only=true)
{
global $Auth_OpenID_sreg_data_fields;
@ -518,4 +518,4 @@ class Auth_OpenID_SRegResponse extends Auth_OpenID_SRegBase {
}
}
?>

View File

@ -43,7 +43,7 @@
* consumers to add extensions to their requests. For example, with
* sites using the Simple Registration
* Extension
* (http://www.openidenabled.com/openid/simple-registration-extension/),
* (http://openid.net/specs/openid-simple-registration-extension-1_0.html),
* a user can agree to have their nickname and e-mail address sent to
* a site when they sign up.
*
@ -365,7 +365,7 @@ class Auth_OpenID_CheckAuthRequest extends Auth_OpenID_Request {
$this->message = null;
}
function fromMessage($message, $server=null)
static function fromMessage($message, $server=null)
{
$required_keys = array('assoc_handle', 'sig', 'signed');
@ -396,7 +396,7 @@ class Auth_OpenID_CheckAuthRequest extends Auth_OpenID_Request {
return $result;
}
function answer(&$signatory)
function answer($signatory)
{
$is_valid = $signatory->verify($this->assoc_handle, $this->signed);
@ -436,7 +436,7 @@ class Auth_OpenID_PlainTextServerSession {
var $needs_math = false;
var $allowed_assoc_types = array('HMAC-SHA1', 'HMAC-SHA256');
function fromMessage($unused_request)
static function fromMessage($unused_request)
{
return new Auth_OpenID_PlainTextServerSession();
}
@ -469,7 +469,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
$this->consumer_pubkey = $consumer_pubkey;
}
function getDH($message)
static function getDH($message)
{
$dh_modulus = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_modulus');
$dh_gen = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_gen');
@ -489,7 +489,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
$missing);
}
$lib =& Auth_OpenID_getMathLib();
$lib = Auth_OpenID_getMathLib();
if ($dh_modulus || $dh_gen) {
$dh_modulus = $lib->base64ToLong($dh_modulus);
@ -523,7 +523,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
return array($dh, $consumer_pubkey);
}
function fromMessage($message)
static function fromMessage($message)
{
$result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message);
@ -538,7 +538,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
function answer($secret)
{
$lib =& Auth_OpenID_getMathLib();
$lib = Auth_OpenID_getMathLib();
$mac_key = $this->dh->xorSecret($this->consumer_pubkey, $secret,
$this->hash_func);
return array(
@ -560,7 +560,7 @@ class Auth_OpenID_DiffieHellmanSHA256ServerSession
var $hash_func = 'Auth_OpenID_SHA256';
var $allowed_assoc_types = array('HMAC-SHA256');
function fromMessage($message)
static function fromMessage($message)
{
$result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message);
@ -582,7 +582,7 @@ class Auth_OpenID_DiffieHellmanSHA256ServerSession
class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
var $mode = "associate";
function getSessionClasses()
static function getSessionClasses()
{
return array(
'no-encryption' => 'Auth_OpenID_PlainTextServerSession',
@ -590,14 +590,14 @@ class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
'DH-SHA256' => 'Auth_OpenID_DiffieHellmanSHA256ServerSession');
}
function Auth_OpenID_AssociateRequest(&$session, $assoc_type)
function Auth_OpenID_AssociateRequest($session, $assoc_type)
{
$this->session =& $session;
$this->session = $session;
$this->namespace = Auth_OpenID_OPENID2_NS;
$this->assoc_type = $assoc_type;
}
function fromMessage($message, $server=null)
static function fromMessage($message, $server=null)
{
if ($message->isOpenID1()) {
$session_type = $message->getArg(Auth_OpenID_OPENID_NS,
@ -696,7 +696,7 @@ class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
'session_type',
$preferred_session_type);
}
$response->code = AUTH_OPENID_HTTP_ERROR;
return $response;
}
}
@ -734,7 +734,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
*/
var $namespace;
function make(&$message, $identity, $return_to, $trust_root = null,
static function make($message, $identity, $return_to, $trust_root = null,
$immediate = false, $assoc_handle = null, $server = null)
{
if ($server === null) {
@ -752,7 +752,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
$assoc_handle, $server);
$r->namespace = $message->getOpenIDNamespace();
$r->message =& $message;
$r->message = $message;
if (!$r->trustRootValid()) {
return new Auth_OpenID_UntrustedReturnURL($message,
@ -778,7 +778,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
}
$this->return_to = $return_to;
$this->trust_root = $trust_root;
$this->server =& $server;
$this->server = $server;
if ($immediate) {
$this->immediate = true;
@ -817,11 +817,12 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
*/
function returnToVerified()
{
$fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
return call_user_func_array($this->verifyReturnTo,
array($this->trust_root, $this->return_to));
array($this->trust_root, $this->return_to, $fetcher));
}
function fromMessage(&$message, $server)
static function fromMessage($message, $server)
{
$mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode');
$immediate = null;
@ -1097,7 +1098,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
in OpenID 1.x immediate mode.');
}
$setup_request =& new Auth_OpenID_CheckIDRequest(
$setup_request = new Auth_OpenID_CheckIDRequest(
$this->identity,
$this->return_to,
$this->trust_root,
@ -1183,9 +1184,9 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
*/
class Auth_OpenID_ServerResponse {
function Auth_OpenID_ServerResponse(&$request)
function Auth_OpenID_ServerResponse($request)
{
$this->request =& $request;
$this->request = $request;
$this->fields = new Auth_OpenID_Message($this->request->namespace);
}
@ -1310,10 +1311,10 @@ class Auth_OpenID_Signatory {
/**
* Create a new signatory using a given store.
*/
function Auth_OpenID_Signatory(&$store)
function Auth_OpenID_Signatory($store)
{
// assert store is not None
$this->store =& $store;
$this->store = $store;
}
/**
@ -1447,7 +1448,7 @@ class Auth_OpenID_Encoder {
* Encode an {@link Auth_OpenID_ServerResponse} and return an
* {@link Auth_OpenID_WebResponse}.
*/
function encode(&$response)
function encode($response)
{
$cls = $this->responseFactory;
@ -1463,10 +1464,14 @@ class Auth_OpenID_Encoder {
array('location' => $location));
} else if ($encode_as == Auth_OpenID_ENCODE_HTML_FORM) {
$wr = new $cls(AUTH_OPENID_HTTP_OK, array(),
$response->toFormMarkup());
$response->toHTML());
} else {
return new Auth_OpenID_EncodingError($response);
}
/* Allow the response to carry a custom error code (ex: for Association errors) */
if(isset($response->code)) {
$wr->code = $response->code;
}
return $wr;
}
}
@ -1478,16 +1483,16 @@ class Auth_OpenID_Encoder {
*/
class Auth_OpenID_SigningEncoder extends Auth_OpenID_Encoder {
function Auth_OpenID_SigningEncoder(&$signatory)
function Auth_OpenID_SigningEncoder($signatory)
{
$this->signatory =& $signatory;
$this->signatory = $signatory;
}
/**
* Sign an {@link Auth_OpenID_ServerResponse} and return an
* {@link Auth_OpenID_WebResponse}.
*/
function encode(&$response)
function encode($response)
{
// the isinstance is a bit of a kludge... it means there isn't
// really an adapter to make the interfaces quite match.
@ -1516,9 +1521,9 @@ class Auth_OpenID_SigningEncoder extends Auth_OpenID_Encoder {
*/
class Auth_OpenID_Decoder {
function Auth_OpenID_Decoder(&$server)
function Auth_OpenID_Decoder($server)
{
$this->server =& $server;
$this->server = $server;
$this->handlers = array(
'checkid_setup' => 'Auth_OpenID_CheckIDRequest',
@ -1599,9 +1604,9 @@ class Auth_OpenID_Decoder {
* @package OpenID
*/
class Auth_OpenID_EncodingError {
function Auth_OpenID_EncodingError(&$response)
function Auth_OpenID_EncodingError($response)
{
$this->response =& $response;
$this->response = $response;
}
}
@ -1674,14 +1679,14 @@ class Auth_OpenID_UntrustedReturnURL extends Auth_OpenID_ServerError {
* @package OpenID
*/
class Auth_OpenID_Server {
function Auth_OpenID_Server(&$store, $op_endpoint=null)
function Auth_OpenID_Server($store, $op_endpoint=null)
{
$this->store =& $store;
$this->signatory =& new Auth_OpenID_Signatory($this->store);
$this->encoder =& new Auth_OpenID_SigningEncoder($this->signatory);
$this->decoder =& new Auth_OpenID_Decoder($this);
$this->store = $store;
$this->signatory = new Auth_OpenID_Signatory($this->store);
$this->encoder = new Auth_OpenID_SigningEncoder($this->signatory);
$this->decoder = new Auth_OpenID_Decoder($this);
$this->op_endpoint = $op_endpoint;
$this->negotiator =& Auth_OpenID_getDefaultNegotiator();
$this->negotiator = Auth_OpenID_getDefaultNegotiator();
}
/**
@ -1699,7 +1704,7 @@ class Auth_OpenID_Server {
{
if (method_exists($this, "openid_" . $request->mode)) {
$handler = array($this, "openid_" . $request->mode);
return call_user_func($handler, $request);
return call_user_func($handler, &$request);
}
return null;
}
@ -1707,7 +1712,7 @@ class Auth_OpenID_Server {
/**
* The callback for 'check_authentication' messages.
*/
function openid_check_authentication(&$request)
function openid_check_authentication($request)
{
return $request->answer($this->signatory);
}
@ -1715,7 +1720,7 @@ class Auth_OpenID_Server {
/**
* The callback for 'associate' messages.
*/
function openid_associate(&$request)
function openid_associate($request)
{
$assoc_type = $request->assoc_type;
$session_type = $request->session->session_type;
@ -1738,7 +1743,7 @@ class Auth_OpenID_Server {
* Encodes as response in the appropriate format suitable for
* sending to the user agent.
*/
function encodeResponse(&$response)
function encodeResponse($response)
{
return $this->encoder->encode($response);
}
@ -1757,4 +1762,4 @@ class Auth_OpenID_Server {
}
}
?>

View File

@ -34,4 +34,3 @@ class Auth_OpenID_ServerRequest {
}
}
?>

View File

@ -58,7 +58,7 @@ class Auth_OpenID_TrustRoot {
* @return The URL upon which relying party discovery should be
* run in order to verify the return_to URL
*/
function buildDiscoveryURL($realm)
static function buildDiscoveryURL($realm)
{
$parsed = Auth_OpenID_TrustRoot::_parse($realm);
@ -93,7 +93,7 @@ class Auth_OpenID_TrustRoot {
* @return mixed $parsed Either an associative array of trust root
* parts or false if parsing failed.
*/
function _parse($trust_root)
static function _parse($trust_root)
{
$trust_root = Auth_OpenID_urinorm($trust_root);
if ($trust_root === null) {
@ -199,7 +199,7 @@ class Auth_OpenID_TrustRoot {
* @param string $trust_root The trust root to check
* @return bool $sanity Whether the trust root looks OK
*/
function isSane($trust_root)
static function isSane($trust_root)
{
$parts = Auth_OpenID_TrustRoot::_parse($trust_root);
if ($parts === false) {
@ -269,7 +269,7 @@ class Auth_OpenID_TrustRoot {
* @return bool $matches Whether the URL matches against the
* trust root
*/
function match($trust_root, $url)
static function match($trust_root, $url)
{
$trust_root_parsed = Auth_OpenID_TrustRoot::_parse($trust_root);
$url_parsed = Auth_OpenID_TrustRoot::_parse($url);
@ -341,7 +341,7 @@ class Auth_OpenID_TrustRoot {
* @returns: The endpoint URL or None if the endpoint is not a
* relying party endpoint.
*/
function filter_extractReturnURL(&$endpoint)
function filter_extractReturnURL($endpoint)
{
if ($endpoint->matchTypes(array(Auth_OpenID_RP_RETURN_TO_URL_TYPE))) {
return $endpoint;
@ -394,14 +394,14 @@ function Auth_OpenID_returnToMatches($allowed_return_to_urls, $return_to)
* Given a relying party discovery URL return a list of return_to
* URLs.
*/
function Auth_OpenID_getAllowedReturnURLs($relying_party_url, &$fetcher,
function Auth_OpenID_getAllowedReturnURLs($relying_party_url, $fetcher,
$discover_function=null)
{
if ($discover_function === null) {
$discover_function = array('Auth_Yadis_Yadis', 'discover');
}
$xrds_parse_cb = array('Auth_OpenID_ServiceEndpoint', 'fromXRDS');
$xrds_parse_cb = array('Auth_OpenID_ServiceEndpoint', 'consumerFromXRDS');
list($rp_url_after_redirects, $endpoints) =
Auth_Yadis_getServiceEndpoints($relying_party_url, $xrds_parse_cb,
@ -413,7 +413,7 @@ function Auth_OpenID_getAllowedReturnURLs($relying_party_url, &$fetcher,
}
call_user_func_array($discover_function,
array($relying_party_url, $fetcher));
array($relying_party_url, &$fetcher));
$return_to_urls = array();
$matching_endpoints = Auth_OpenID_extractReturnURL($endpoints);
@ -435,7 +435,7 @@ function Auth_OpenID_getAllowedReturnURLs($relying_party_url, &$fetcher,
*
* @return true if the return_to URL is valid for the realm
*/
function Auth_OpenID_verifyReturnTo($realm_str, $return_to, &$fetcher,
function Auth_OpenID_verifyReturnTo($realm_str, $return_to, $fetcher,
$_vrfy='Auth_OpenID_getAllowedReturnURLs')
{
$disco_url = Auth_OpenID_TrustRoot::buildDiscoveryURL($realm_str);
@ -445,7 +445,7 @@ function Auth_OpenID_verifyReturnTo($realm_str, $return_to, &$fetcher,
}
$allowable_urls = call_user_func_array($_vrfy,
array($disco_url, &$fetcher));
array($disco_url, $fetcher));
// The realm_str could not be parsed.
if ($allowable_urls === false) {
@ -459,4 +459,3 @@ function Auth_OpenID_verifyReturnTo($realm_str, $return_to, &$fetcher,
}
}
?>

View File

@ -246,4 +246,4 @@ function Auth_OpenID_urinorm($uri)
return $scheme . '://' . $authority . $path . $query . $fragment;
}
?>

View File

@ -115,12 +115,40 @@ class Auth_Yadis_HTTPFetcher {
/**
* @access private
*/
function _findRedirect($headers)
function _findRedirect($headers, $url)
{
foreach ($headers as $line) {
if (strpos(strtolower($line), "location: ") === 0) {
$parts = explode(" ", $line, 2);
return $parts[1];
$loc = $parts[1];
$ppos = strpos($loc, "://");
if ($ppos === false || $ppos > strpos($loc, "/")) {
/* no host; add it */
$hpos = strpos($url, "://");
$prt = substr($url, 0, $hpos+3);
$url = substr($url, $hpos+3);
if (substr($loc, 0, 1) == "/") {
/* absolute path */
$fspos = strpos($url, "/");
if ($fspos) $loc = $prt.substr($url, 0, $fspos).$loc;
else $loc = $prt.$url.$loc;
} else {
/* relative path */
$pp = $prt;
while (1) {
$xpos = strpos($url, "/");
if ($xpos === false) break;
$apos = strpos($url, "?");
if ($apos !== false && $apos < $xpos) break;
$apos = strpos($url, "&");
if ($apos !== false && $apos < $xpos) break;
$pp .= substr($url, 0, $xpos+1);
$url = substr($url, $xpos+1);
}
$loc = $pp.$loc;
}
}
return $loc;
}
}
return null;
@ -144,4 +172,3 @@ class Auth_Yadis_HTTPFetcher {
}
}
?>

View File

@ -387,11 +387,11 @@ class Auth_Yadis_Discovery {
* @param string $session_key_suffix The optional session key
* suffix override.
*/
function Auth_Yadis_Discovery(&$session, $url,
function Auth_Yadis_Discovery($session, $url,
$session_key_suffix = null)
{
/// Initialize a discovery object
$this->session =& $session;
$this->session = $session;
$this->url = $url;
if ($session_key_suffix === null) {
$session_key_suffix = $this->DEFAULT_SUFFIX;
@ -405,7 +405,7 @@ class Auth_Yadis_Discovery {
* Return the next authentication service for the pair of
* user_input and session. This function handles fallback.
*/
function getNextService($discover_cb, &$fetcher)
function getNextService($discover_cb, $fetcher)
{
$manager = $this->getManager();
if (!$manager || (!$manager->services)) {
@ -413,7 +413,7 @@ class Auth_Yadis_Discovery {
list($yadis_url, $services) = call_user_func($discover_cb,
$this->url,
$fetcher);
&$fetcher);
$manager = $this->createManager($services, $yadis_url);
}
@ -466,7 +466,7 @@ class Auth_Yadis_Discovery {
* @param $force True if the manager should be returned regardless
* of whether it's a manager for $this->url.
*/
function &getManager($force=false)
function getManager($force=false)
{
// Extract the YadisServiceManager for this object's URL and
// suffix from the session.
@ -481,16 +481,13 @@ class Auth_Yadis_Discovery {
if ($manager && ($manager->forURL($this->url) || $force)) {
return $manager;
} else {
$unused = null;
return $unused;
}
}
/**
* @access private
*/
function &createManager($services, $yadis_url = null)
function createManager($services, $yadis_url = null)
{
$key = $this->getSessionKey();
if ($this->getManager()) {
@ -504,10 +501,6 @@ class Auth_Yadis_Discovery {
$this->session->set($this->session_key,
serialize($loader->toSession($manager)));
return $manager;
} else {
// Oh, PHP.
$unused = null;
return $unused;
}
}
@ -526,4 +519,3 @@ class Auth_Yadis_Discovery {
}
}
?>

View File

@ -56,4 +56,3 @@ function Auth_Yadis_startswith($s, $stuff)
return strpos($s, $stuff) === 0;
}
?>

View File

@ -109,9 +109,9 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
}
curl_setopt($c, CURLOPT_WRITEFUNCTION,
array(&$this, "_writeData"));
array($this, "_writeData"));
curl_setopt($c, CURLOPT_HEADERFUNCTION,
array(&$this, "_writeHeader"));
array($this, "_writeHeader"));
if ($extra_headers) {
curl_setopt($c, CURLOPT_HTTPHEADER, $extra_headers);
@ -128,6 +128,10 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
curl_setopt($c, CURLOPT_TIMEOUT, $off);
curl_setopt($c, CURLOPT_URL, $url);
if (defined('Auth_OpenID_VERIFY_HOST')) {
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
}
curl_exec($c);
$code = curl_getinfo($c, CURLINFO_HTTP_CODE);
@ -142,12 +146,17 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
}
if (in_array($code, array(301, 302, 303, 307))) {
$url = $this->_findRedirect($headers);
$url = $this->_findRedirect($headers, $url);
$redir = true;
} else {
$redir = false;
curl_close($c);
if (defined('Auth_OpenID_VERIFY_HOST') &&
$this->isHTTPS($url)) {
Auth_OpenID::log('OpenID: Verified SSL host %s using '.
'curl/get', $url);
}
$new_headers = array();
foreach ($headers as $header) {
@ -190,7 +199,12 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
curl_setopt($c, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_WRITEFUNCTION,
array(&$this, "_writeData"));
array($this, "_writeData"));
if (defined('Auth_OpenID_VERIFY_HOST')) {
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
}
curl_exec($c);
@ -198,9 +212,15 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
if (!$code) {
Auth_OpenID::log("Got no response code when fetching %s", $url);
Auth_OpenID::log("CURL error (%s): %s",
curl_errno($c), curl_error($c));
return null;
}
if (defined('Auth_OpenID_VERIFY_HOST') && $this->isHTTPS($url)) {
Auth_OpenID::log('OpenID: Verified SSL host %s using '.
'curl/post', $url);
}
$body = $this->data;
curl_close($c);
@ -223,4 +243,3 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
}
}
?>

View File

@ -256,4 +256,3 @@ class Auth_Yadis_ParseHTML {
}
}
?>

View File

@ -122,7 +122,7 @@ class Auth_Yadis_PlainHTTPFetcher extends Auth_Yadis_HTTPFetcher {
$code = $http_code[1];
if (in_array($code, array('301', '302'))) {
$url = $this->_findRedirect($headers);
$url = $this->_findRedirect($headers, $url);
$redir = true;
} else {
$redir = false;
@ -246,4 +246,3 @@ class Auth_Yadis_PlainHTTPFetcher extends Auth_Yadis_HTTPFetcher {
}
}
?>

View File

@ -310,20 +310,16 @@ $__Auth_Yadis_defaultParser = null;
* @param Auth_Yadis_XMLParser $parser An instance of a
* Auth_Yadis_XMLParser subclass.
*/
function Auth_Yadis_setDefaultParser(&$parser)
function Auth_Yadis_setDefaultParser($parser)
{
global $__Auth_Yadis_defaultParser;
$__Auth_Yadis_defaultParser =& $parser;
$__Auth_Yadis_defaultParser = $parser;
}
function Auth_Yadis_getSupportedExtensions()
{
return array(
'dom' => array('classname' => 'Auth_Yadis_dom',
'libname' => array('dom.so', 'dom.dll')),
'domxml' => array('classname' => 'Auth_Yadis_domxml',
'libname' => array('domxml.so', 'php_domxml.dll')),
);
return array('dom' => 'Auth_Yadis_dom',
'domxml' => 'Auth_Yadis_domxml');
}
/**
@ -332,43 +328,25 @@ function Auth_Yadis_getSupportedExtensions()
* Auth_Yadis_setDefaultParser has been called, the parser used in
* that call will be returned instead.
*/
function &Auth_Yadis_getXMLParser()
function Auth_Yadis_getXMLParser()
{
global $__Auth_Yadis_defaultParser;
if (isset($__Auth_Yadis_defaultParser)) {
return $__Auth_Yadis_defaultParser;
}
$p = null;
$classname = null;
$extensions = Auth_Yadis_getSupportedExtensions();
// Return a wrapper for the resident implementation, if any.
foreach ($extensions as $name => $params) {
if (!extension_loaded($name)) {
foreach ($params['libname'] as $libname) {
if (@dl($libname)) {
$classname = $params['classname'];
}
}
} else {
$classname = $params['classname'];
}
if (isset($classname)) {
$p = new $classname();
return $p;
}
}
if (!isset($p)) {
trigger_error('No XML parser was found', E_USER_ERROR);
} else {
foreach(Auth_Yadis_getSupportedExtensions() as $extension => $classname)
{
if (extension_loaded($extension))
{
$p = new $classname();
Auth_Yadis_setDefaultParser($p);
return $p;
}
}
return $p;
return false;
}
?>

View File

@ -255,11 +255,11 @@ class Auth_Yadis_XRDS {
* Instantiate a Auth_Yadis_XRDS object. Requires an XPath
* instance which has been used to parse a valid XRDS document.
*/
function Auth_Yadis_XRDS(&$xmlParser, &$xrdNodes)
function Auth_Yadis_XRDS($xmlParser, $xrdNodes)
{
$this->parser =& $xmlParser;
$this->parser = $xmlParser;
$this->xrdNode = $xrdNodes[count($xrdNodes) - 1];
$this->allXrdNodes =& $xrdNodes;
$this->allXrdNodes = $xrdNodes;
$this->serviceList = array();
$this->_parse();
}
@ -273,7 +273,7 @@ class Auth_Yadis_XRDS {
* @return mixed $xrds An instance of Auth_Yadis_XRDS or null,
* depending on the validity of $xml_string
*/
function &parseXRDS($xml_string, $extra_ns_map = null)
static function parseXRDS($xml_string, $extra_ns_map = null)
{
$_null = null;
@ -352,9 +352,9 @@ class Auth_Yadis_XRDS {
$services = $this->parser->evalXPath('xrd:Service', $this->xrdNode);
foreach ($services as $node) {
$s =& new Auth_Yadis_Service();
$s = new Auth_Yadis_Service();
$s->element = $node;
$s->parser =& $this->parser;
$s->parser = $this->parser;
$priority = $s->getPriority();
@ -428,7 +428,8 @@ class Auth_Yadis_XRDS {
$matches = 0;
foreach ($filters as $filter) {
if (call_user_func_array($filter, array($service))) {
if (call_user_func_array($filter, array(&$service))) {
$matches++;
if ($filter_mode == SERVICES_YADIS_MATCH_ANY) {
@ -475,4 +476,3 @@ class Auth_Yadis_XRDS {
}
}
?>

View File

@ -190,7 +190,7 @@ function Auth_Yadis_getCanonicalID($iname, $xrds)
// Now nodes are in reverse order.
$xrd_list = array_reverse($xrds->allXrdNodes);
$parser =& $xrds->parser;
$parser = $xrds->parser;
$node = $xrd_list[0];
$canonicalID_nodes = $parser->evalXPath('xrd:CanonicalID', $node);
@ -231,4 +231,4 @@ function Auth_Yadis_getCanonicalID($iname, $xrds)
return $canonicalID;
}
?>

View File

@ -8,9 +8,9 @@ require_once 'Auth/Yadis/XRDS.php';
require_once 'Auth/Yadis/XRI.php';
class Auth_Yadis_ProxyResolver {
function Auth_Yadis_ProxyResolver(&$fetcher, $proxy_url = null)
function Auth_Yadis_ProxyResolver($fetcher, $proxy_url = null)
{
$this->fetcher =& $fetcher;
$this->fetcher = $fetcher;
$this->proxy_url = $proxy_url;
if (!$this->proxy_url) {
$this->proxy_url = Auth_Yadis_getDefaultProxy();
@ -69,4 +69,4 @@ class Auth_Yadis_ProxyResolver {
}
}
?>

View File

@ -105,7 +105,7 @@ class Auth_Yadis_DiscoveryResult {
function usedYadisLocation()
{
// Was the Yadis protocol's indirection used?
return $this->normalized_uri != $this->xrds_uri;
return ($this->xrds_uri && $this->normalized_uri != $this->xrds_uri);
}
function isXRDS()
@ -141,7 +141,7 @@ function Auth_Yadis_getServiceEndpoints($input_url, $xrds_parse_func,
}
$yadis_result = call_user_func_array($discover_func,
array($input_url, $fetcher));
array($input_url, &$fetcher));
if ($yadis_result === null) {
return array($input_url, array());
@ -196,7 +196,7 @@ function Auth_Yadis_getServiceEndpoints($input_url, $xrds_parse_func,
* The filter functions (whose names appear in the array passed to
* services()) take the following form:
*
* <pre> function myFilter(&$service) {
* <pre> function myFilter($service) {
* // Query $service object here. Return true if the service
* // matches your query; false if not.
* }</pre>
@ -207,7 +207,7 @@ function Auth_Yadis_getServiceEndpoints($input_url, $xrds_parse_func,
* this contrived example):
*
* <pre>
* function URIMatcher(&$service) {
* function URIMatcher($service) {
* foreach ($service->getElements('xrd:URI') as $uri) {
* if (preg_match("/some_pattern/",
* $service->parser->content($uri))) {
@ -250,7 +250,7 @@ class Auth_Yadis_Yadis {
* If Auth_Yadis_CURL_OVERRIDE is defined, this method will always
* return a {@link Auth_Yadis_PlainHTTPFetcher}.
*/
function getHTTPFetcher($timeout = 20)
static function getHTTPFetcher($timeout = 20)
{
if (Auth_Yadis_Yadis::curlPresent() &&
(!defined('Auth_Yadis_CURL_OVERRIDE'))) {
@ -261,7 +261,7 @@ class Auth_Yadis_Yadis {
return $fetcher;
}
function curlPresent()
static function curlPresent()
{
return function_exists('curl_init');
}
@ -269,7 +269,7 @@ class Auth_Yadis_Yadis {
/**
* @access private
*/
function _getHeader($header_list, $names)
static function _getHeader($header_list, $names)
{
foreach ($header_list as $name => $value) {
foreach ($names as $n) {
@ -285,7 +285,7 @@ class Auth_Yadis_Yadis {
/**
* @access private
*/
function _getContentType($content_type_header)
static function _getContentType($content_type_header)
{
if ($content_type_header) {
$parts = explode(";", $content_type_header);
@ -317,7 +317,7 @@ class Auth_Yadis_Yadis {
* Auth_Yadis_Yadis, depending on whether the discovery
* succeeded.
*/
function discover($uri, &$fetcher,
static function discover($uri, $fetcher,
$extra_ns_map = null, $timeout = 20)
{
$result = new Auth_Yadis_DiscoveryResult($uri);
@ -379,4 +379,4 @@ class Auth_Yadis_Yadis {
}
}
?>

View File

@ -84,7 +84,7 @@ var SN = { // StatusNet
form.find('#'+SN.C.S.NoticeTextCount).text(jQuery.data(form[0], 'ElementData').MaxLength);
}
if ($('body')[0].id != 'conversation' && window.location.hash.length === 0) {
if ($('body')[0].id != 'conversation' && window.location.hash.length === 0 && $(window).scrollTop() == 0) {
form.find('textarea').focus();
}
},

View File

@ -271,11 +271,13 @@ class ApiAction extends Action
// Is the requesting user following this user?
$twitter_user['following'] = false;
$twitter_user['statusnet:blocking'] = false;
$twitter_user['notifications'] = false;
if (isset($this->auth_user)) {
$twitter_user['following'] = $this->auth_user->isSubscribed($profile);
$twitter_user['statusnet:blocking'] = $this->auth_user->hasBlocked($profile);
// Notifications on?
$sub = Subscription::pkeyGet(array('subscriber' =>
@ -409,20 +411,32 @@ class ApiAction extends Action
function twitterGroupArray($group)
{
$twitter_group=array();
$twitter_group['id']=$group->id;
$twitter_group['url']=$group->permalink();
$twitter_group['nickname']=$group->nickname;
$twitter_group['fullname']=$group->fullname;
$twitter_group['original_logo']=$group->original_logo;
$twitter_group['homepage_logo']=$group->homepage_logo;
$twitter_group['stream_logo']=$group->stream_logo;
$twitter_group['mini_logo']=$group->mini_logo;
$twitter_group['homepage']=$group->homepage;
$twitter_group['description']=$group->description;
$twitter_group['location']=$group->location;
$twitter_group['created']=$this->dateTwitter($group->created);
$twitter_group['modified']=$this->dateTwitter($group->modified);
$twitter_group = array();
$twitter_group['id'] = $group->id;
$twitter_group['url'] = $group->permalink();
$twitter_group['nickname'] = $group->nickname;
$twitter_group['fullname'] = $group->fullname;
if (isset($this->auth_user)) {
$twitter_group['member'] = $this->auth_user->isMember($group);
$twitter_group['blocked'] = Group_block::isBlocked(
$group,
$this->auth_user->getProfile()
);
}
$twitter_group['member_count'] = $group->getMemberCount();
$twitter_group['original_logo'] = $group->original_logo;
$twitter_group['homepage_logo'] = $group->homepage_logo;
$twitter_group['stream_logo'] = $group->stream_logo;
$twitter_group['mini_logo'] = $group->mini_logo;
$twitter_group['homepage'] = $group->homepage;
$twitter_group['description'] = $group->description;
$twitter_group['location'] = $group->location;
$twitter_group['created'] = $this->dateTwitter($group->created);
$twitter_group['modified'] = $this->dateTwitter($group->modified);
return $twitter_group;
}
@ -1360,6 +1374,34 @@ class ApiAction extends Action
}
}
function getTargetProfile($id)
{
if (empty($id)) {
// Twitter supports these other ways of passing the user ID
if (is_numeric($this->arg('id'))) {
return Profile::staticGet($this->arg('id'));
} else if ($this->arg('id')) {
$nickname = common_canonical_nickname($this->arg('id'));
return Profile::staticGet('nickname', $nickname);
} else if ($this->arg('user_id')) {
// This is to ensure that a non-numeric user_id still
// overrides screen_name even if it doesn't get used
if (is_numeric($this->arg('user_id'))) {
return Profile::staticGet('id', $this->arg('user_id'));
}
} else if ($this->arg('screen_name')) {
$nickname = common_canonical_nickname($this->arg('screen_name'));
return Profile::staticGet('nickname', $nickname);
}
} else if (is_numeric($id)) {
return Profile::staticGet($id);
} else {
$nickname = common_canonical_nickname($id);
return Profile::staticGet('nickname', $nickname);
}
}
function getTargetGroup($id)
{
if (empty($id)) {

View File

@ -96,4 +96,23 @@ class AtomGroupNoticeFeed extends AtomNoticeFeed
return $this->group;
}
function initFeed()
{
parent::initFeed();
$attrs = array();
if (!empty($this->cur)) {
$attrs['member'] = $this->cur->isMember($this->group)
? 'true' : 'false';
$attrs['blocked'] = Group_block::isBlocked(
$this->group,
$this->cur->getProfile()
) ? 'true' : 'false';
}
$attrs['member_count'] = $this->group->getMemberCount();
$this->element('statusnet:group_info', $attrs, null);
}
}

View File

@ -95,7 +95,7 @@ class AtomNoticeFeed extends Atom10Feed
$this->addNamespace(
'statusnet',
'http://status.net/ont/'
'http://status.net/schema/api/1/'
);
}

View File

@ -76,8 +76,8 @@ class AvatarLink
$alink = new AvatarLink();
$alink->url = $filename;
$alink->height = $size;
$alink->width = $size;
if (!empty($filename)) {
$alink->width = $size;
$alink->type = self::mediatype($filename);
} else {
$alink->url = User_group::defaultLogo($size);

View File

@ -22,10 +22,10 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
//exit with 200 response, if this is checking fancy from the installer
if (isset($_REQUEST['p']) && $_REQUEST['p'] == 'check-fancy') { exit; }
define('STATUSNET_VERSION', '0.9.2');
define('STATUSNET_VERSION', '0.9.3');
define('LACONICA_VERSION', STATUSNET_VERSION); // compatibility
define('STATUSNET_CODENAME', 'King of Birds');
define('STATUSNET_CODENAME', 'Half a World Away');
define('AVATAR_PROFILE_SIZE', 96);
define('AVATAR_STREAM_SIZE', 48);

View File

@ -135,9 +135,7 @@ class DBQueueManager extends QueueManager
if (empty($qi->claimed)) {
$this->_log(LOG_WARNING, "[$queue:item $qi->id] Ignoring failure for unclaimed queue item");
} else {
$orig = clone($qi);
$qi->claimed = null;
$qi->update($orig);
$qi->releaseClaim();
}
$this->stats('error', $queue);

View File

@ -180,7 +180,8 @@ class MediaFile
return;
}
$mimetype = MediaFile::getUploadedFileType($_FILES[$param]['tmp_name']);
$mimetype = MediaFile::getUploadedFileType($_FILES[$param]['tmp_name'],
$_FILES[$param]['name']);
$filename = null;
@ -241,19 +242,41 @@ class MediaFile
return new MediaFile($user, $filename, $mimetype);
}
static function getUploadedFileType($f) {
/**
* Attempt to identify the content type of a given file.
*
* @param mixed $f file handle resource, or filesystem path as string
* @param string $originalFilename (optional) for extension-based detection
* @return string
*
* @fixme is this an internal or public method? It's called from GetFileAction
* @fixme this seems to tie a front-end error message in, kinda confusing
* @fixme this looks like it could return a PEAR_Error in some cases, if
* type can't be identified and $config['attachments']['supported'] is true
*
* @throws ClientException if type is known, but not supported for local uploads
*/
static function getUploadedFileType($f, $originalFilename=false) {
require_once 'MIME/Type.php';
require_once 'MIME/Type/Extension.php';
$mte = new MIME_Type_Extension();
$cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd');
$cmd = common_config('attachments', 'filecommand');
$filetype = null;
// If we couldn't get a clear type from the file extension,
// we'll go ahead and try checking the content. Content checks
// are unambiguous for most image files, but nearly useless
// for office document formats.
if (is_string($f)) {
// assuming a filename
$filetype = MIME_Type::autoDetect($f);
} else {
// assuming a filehandle
@ -262,7 +285,32 @@ class MediaFile
$filetype = MIME_Type::autoDetect($stream['uri']);
}
if (common_config('attachments', 'supported') === true || in_array($filetype, common_config('attachments', 'supported'))) {
// The content-based sources for MIME_Type::autoDetect()
// are wildly unreliable for office-type documents. If we've
// gotten an unclear reponse back or just couldn't identify it,
// we'll try detecting a type from its extension...
$unclearTypes = array('application/octet-stream',
'application/vnd.ms-office',
'application/zip');
if ($originalFilename && (!$filetype || in_array($filetype, $unclearTypes))) {
$type = $mte->getMIMEType($originalFilename);
if (is_string($type)) {
$filetype = $type;
}
}
$supported = common_config('attachments', 'supported');
if (is_array($supported)) {
// Normalize extensions to mime types
foreach ($supported as $i => $entry) {
if (strpos($entry, '/') === false) {
common_log(LOG_INFO, "sample.$entry");
$supported[$i] = $mte->getMIMEType("sample.$entry");
}
}
}
if ($supported === true || in_array($filetype, $supported)) {
return $filetype;
}
$media = MIME_Type::getMedia($filetype);

View File

@ -463,12 +463,14 @@ class NoticeListItem extends Widget
$this->out->elementEnd('span');
}
/**
* @param number $dec decimal degrees
* @return array split into 'deg', 'min', and 'sec'
*/
function decimalDegreesToDMS($dec)
{
$vars = explode(".",$dec);
$deg = $vars[0];
$tempma = "0.".$vars[1];
$deg = intval($dec);
$tempma = abs($dec) - abs($deg);
$tempma = $tempma * 3600;
$min = floor($tempma / 60);

View File

@ -667,9 +667,9 @@ class Router
);
// search
$m->connect('api/search.atom', array('action' => 'twitapisearchatom'));
$m->connect('api/search.json', array('action' => 'twitapisearchjson'));
$m->connect('api/trends.json', array('action' => 'twitapitrends'));
$m->connect('api/search.atom', array('action' => 'ApiSearchAtom'));
$m->connect('api/search.json', array('action' => 'ApiSearchJSON'));
$m->connect('api/trends.json', array('action' => 'ApiTrends'));
$m->connect('api/oauth/request_token',
array('action' => 'apioauthrequesttoken'));

View File

@ -55,10 +55,10 @@ class ThemeUploader
public static function fromUpload($name)
{
if (!isset($_FILES[$name]['error'])) {
throw new ServerException(_("Theme upload missing or failed."));
throw new ServerException(_("The theme file is missing or the upload failed."));
}
if ($_FILES[$name]['error'] != UPLOAD_ERR_OK) {
throw new ServerException(_("Theme upload missing or failed."));
throw new ServerException(_("The theme file is missing or the upload failed."));
}
return new ThemeUploader($_FILES[$name]['tmp_name']);
}

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:18:33+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:38+0000\n"
"Language-Team: Afrikaans\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: af\n"
"X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:18:37+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:42+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:18:44+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:48+0000\n"
"Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:18:49+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:52+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:18:54+0000\n"
"PO-Revision-Date: 2010-06-21 18:02:56+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: out-statusnet\n"

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:18:58+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:01+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
@ -1135,13 +1135,12 @@ msgid "Theme for the site."
msgstr "Tema del lloc."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Tema del lloc"
msgstr "Tema personalitzat"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "Podeu pujar un tema personalitzat de l'StatusNet amb un arxiu ZIP."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1200,11 +1199,11 @@ msgstr "Enllaços"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avançat"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personalitzat"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -6876,48 +6875,48 @@ msgstr "Cap"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
msgstr "El servidor no pot gestionar la pujada de temes si no pot tractar ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Error del sistema en pujar el fitxer."
msgstr "La pujada del tema ha fallat o no hi és."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Error en actualitzar avatar."
msgstr "Ha fallat el desament del tema."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "El tema no és vàlid: l'estructura del directori no és correcta"
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"El tema pujat és massa gran; ha de tenir menys de %d bytes descomprimit."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "L'arxiu del tema no és vàlid: manca el fitxer de css / display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"El tema conté un fitxer o un nom de carpeta que no és vàlida. Feu servir "
"només lletres ASCII, dígits, caràcters de subratllat i el símbol de menys."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "El tema conté un tipus de fitxer «.%s», que no està permès."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "S'ha produït un error en actualitzar el perfil remot."
msgstr "S'ha produït un error en obrir l'arxiu del tema."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:03+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:06+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"

View File

@ -1,6 +1,7 @@
# Translation of StatusNet to German
#
# Author@translatewiki.net: Bavatar
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Lutzgh
# Author@translatewiki.net: March
# Author@translatewiki.net: McDutchie
@ -17,11 +18,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:08+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:12+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
@ -706,7 +707,7 @@ msgstr "%1$s / Aktualisierungen erwähnen %2$s"
#: actions/apitimelinementions.php:131
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "Nachrichten von %1$, die auf Nachrichten von %2$ / %3$ antworten."
msgstr "Nachrichten von %1$s, die auf Nachrichten von %2$s / %3$s antworten."
#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
#, php-format
@ -1208,11 +1209,11 @@ msgstr "Links"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Erweitert"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "Eigene CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -2638,7 +2639,7 @@ msgstr "Profil-Einstellungen ansehen"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
msgstr "Prifil-Designs anzeigen oder verstecken."
msgstr "Profil-Designs anzeigen oder verstecken."
#: actions/othersettings.php:153
msgid "URL shortening service is too long (max 50 chars)."

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:12+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:17+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"

View File

@ -12,11 +12,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:18+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:21+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"

View File

@ -1,5 +1,6 @@
# Translation of StatusNet to Spanish
#
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Crazymadlover
# Author@translatewiki.net: Locos epraix
# Author@translatewiki.net: McDutchie
@ -15,11 +16,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:22+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:25+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
@ -1135,13 +1136,12 @@ msgid "Theme for the site."
msgstr "Tema para el sitio."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Tema del sitio"
msgstr "Personalizar tema"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "Puedes subir un tema personalizado StatusNet como un archivo .ZIP."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1201,11 +1201,11 @@ msgstr "Vínculos"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avanzado"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "Personalizar CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -1640,7 +1640,7 @@ msgstr "Avisos favoritos de %s"
#: actions/favoritesrss.php:115
#, php-format
msgid "Updates favored by %1$s on %2$s!"
msgstr "¡Actualizaciones favorecidas por %1$ s en %2$s!"
msgstr "¡Actualizaciones favorecidas por %1$s en %2$s!"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
@ -6885,48 +6885,48 @@ msgstr "Ninguno"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
msgstr "Este servidor no puede manejar cargas de temas sin soporte ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Error del sistema subir el archivo"
msgstr "Sudida del tema perdido o errado."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Error al actualizar la imagen."
msgstr "Grabado de tema errado."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Tema inválido: mala estructura de directorio."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"Tema subido es demasiado grande; debe ser menor que %d bytes sin comprimir."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Archivo de tema inválido: archivo perdido css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"El tema contiene archivo o nombre de carpeta inválido. Restrínjase a letras "
"ASCII, dígitos, carácter de subrayado, y signo menos."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "El tema contiene archivo de tipo '.%s', que no está permitido."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Error al actualizar el perfil remoto."
msgstr "Error al abrir archivo de tema."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -1,6 +1,7 @@
# Translation of StatusNet to Persian
#
# Author@translatewiki.net: ArianHT
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Choxos
# Author@translatewiki.net: Everplays
# Author@translatewiki.net: Narcissus
@ -12,7 +13,7 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:31+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:35+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@ -21,7 +22,7 @@ msgstr ""
"X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#. TRANS: Page title
@ -197,7 +198,7 @@ msgstr "شما و دوستان"
#: actions/apitimelinehome.php:122
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "به روز رسانی از %1$ و دوستان در %2$"
msgstr "به روز رسانی از %1$s و دوستان در %2$s"
#: actions/apiaccountratelimitstatus.php:72
#: actions/apiaccountupdatedeliverydevice.php:94

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:27+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:30+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"

View File

@ -16,11 +16,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:36+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:40+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
@ -1144,13 +1144,13 @@ msgid "Theme for the site."
msgstr "Thème pour le site."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Thème du site"
msgstr "Thème personnalisé"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
"Vous pouvez importer un thème StatusNet personnalisé dans une archive .ZIP."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1210,11 +1210,11 @@ msgstr "Liens"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avancé"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personnalisé"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -6919,47 +6919,50 @@ msgstr "Aucun"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"Le serveur ne peut pas gérer limport de thèmes sans le support du format "
"ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Erreur système lors du transfert du fichier."
msgstr "Le thème est manquant ou son import a échoué."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "La mise à jour de lavatar a échoué."
msgstr "Lenregistrement du thème a échoué."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Thème invalide : mauvaise arborescence."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"Le thème importé est trop volumineux. Non compressé, il doit occuper moins "
"de %d octets."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Archive de thème invalide : fichier css/display.css manquant"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"Le thème contient un nom de fichier ou de dossier invalide. Limitez-vous aux "
"lettres ASCII et aux chiffres, caractère de soulignement et signe moins."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "Le thème contient un fichier de type « .%s », qui n'est pas autorisé."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Erreur lors de la mise à jour du profil distant."
msgstr "Erreur lors de louverture de larchive du thème."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:40+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:45+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:45+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:49+0000\n"
"Language-Team: Galician\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: gl\n"
"X-Message-Group: out-statusnet\n"
@ -1132,13 +1132,13 @@ msgid "Theme for the site."
msgstr "Tema visual para o sitio."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Tema visual do sitio"
msgstr "Tema visual personalizado"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
"Pode cargar como arquivo .ZIP un tema visual personalizado para StatusNet"
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1198,11 +1198,11 @@ msgstr "Ligazóns"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avanzado"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personalizado"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -6878,47 +6878,50 @@ msgstr "Ningún"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"O servidor non pode xestionar as cargas de temas visuais sen soporte para o "
"formato ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Houbo un erro no sistema ao cargar o ficheiro."
msgstr "Houbo un erro no sistema ao cargar o tema visual."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Non se puido actualizar o avatar."
msgstr "Non se puido gardar o tema visual."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Tema visual inválido: a estrutura do directorio é incorrecta"
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"O tema visual cargado é grande de máis; o tamaño descomprimido non pode "
"superar os %d bytes."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Arquivo de tema visual inválido: falta o ficheiro css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"O tema visual contén un ficheiro inválido ou nome de cartafol incorrecto. "
"Limíteo a letras ASCII, díxitos, barras baixas e signos menos."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "O tema visual contén o tipo de ficheiro \".%s\". Non está permitido."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Houbo un erro ao actualizar o perfil remoto."
msgstr "Houbo un erro ao abrir o arquivo do tema visual."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -8,11 +8,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:49+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:54+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:19:54+0000\n"
"PO-Revision-Date: 2010-06-21 18:03:58+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
@ -1099,9 +1099,8 @@ msgid "Theme for the site."
msgstr "Šat za sydło."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Šat sydła"
msgstr "Swójski šat"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@ -1164,11 +1163,11 @@ msgstr "Wotkazy"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Rozšěrjeny"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "Swójski CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -1423,7 +1422,7 @@ msgstr ""
#. TRANS: Checkbox label in e-mail preferences form.
#: actions/emailsettings.php:193
msgid "Send me email when someone sends me a private message."
msgstr ""
msgstr "E-mejl pósłać, hdyž něchtó priwatnu powěsć sćele."
#. TRANS: Checkbox label in e-mail preferences form.
#: actions/emailsettings.php:199
@ -1594,12 +1593,12 @@ msgstr ""
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
msgid "Featured users"
msgstr ""
msgstr "Nazhonići wužiwarjo"
#: actions/featured.php:71
#, php-format
msgid "Featured users, page %d"
msgstr ""
msgstr "Nazhonići wužiwarjo, strona %d"
#: actions/featured.php:99
#, php-format
@ -3053,7 +3052,7 @@ msgstr "Sy so identifikował. Zapodaj deleka nowe hesło. "
#: actions/recoverpassword.php:188
msgid "Password recovery"
msgstr ""
msgstr "Wobnowjenje hesła"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
@ -3066,7 +3065,7 @@ msgstr ""
#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
msgid "Recover"
msgstr ""
msgstr "Wobnowić"
#: actions/recoverpassword.php:208
msgid "Reset password"
@ -3074,11 +3073,11 @@ msgstr "Hesło wróćo stajić"
#: actions/recoverpassword.php:209
msgid "Recover password"
msgstr ""
msgstr "Hesło wobnowić"
#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
msgstr "Wobnowjenje hesła požadane"
#: actions/recoverpassword.php:213
msgid "Unknown action"
@ -6439,16 +6438,14 @@ msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Systemowy zmylk při nahrawanju dataje."
msgstr "Nahraće šata faluje abo je so njeporadźiło."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Aktualizowanje awatara je so njeporadźiło."
msgstr "Składowanje šata je so njeporadźiło."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
@ -6475,9 +6472,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Zmylk při aktualizaciji zdaleneho profila."
msgstr "Zmylk při wočinjenju šatoweho archiwa."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:00+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:03+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
@ -1129,13 +1129,14 @@ msgid "Theme for the site."
msgstr "Le thema de apparentia pro le sito."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Thema del sito"
msgstr "Apparentia personalisate"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
"Es possibile incargar un apparentia personalisate de StatusNet in un "
"archivo .ZIP."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1195,11 +1196,11 @@ msgstr "Ligamines"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avantiate"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personalisate"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -4613,7 +4614,7 @@ msgstr "Acceptar"
#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Subscriber me a iste usator"
msgstr "Subscriber a iste usator"
#: actions/userauthorization.php:219
msgid "Reject"
@ -6848,47 +6849,51 @@ msgstr "Nulle"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"Iste servitor non pote manear le incargamento de apparentias sin supporto de "
"ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Error de systema durante le incargamento del file."
msgstr "Le file del apparentia manca o le incargamento ha fallite."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Actualisation del avatar fallite."
msgstr "Salveguarda del apparentia fallite."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Apparentia invalide: mal structura de directorios."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"Le apparentia incargate es troppo voluminose; debe occupar minus de %d bytes "
"in forma non comprimite."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Archivo de apparentia invalide: manca le file css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"Le apparentia contine un nomine de file o dossier invalide. Limita te a "
"litteras ASCII, digitos, sublineamento, e signo minus."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
"Le apparentia contine un file del typo '.%s', le qual non es permittite."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Error durante le actualisation del profilo remote."
msgstr "Error durante le apertura del archivo del apparentia."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:07+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:07+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"

View File

@ -1,5 +1,6 @@
# Translation of StatusNet to Italian
#
# Author@translatewiki.net: HalphaZ
# Author@translatewiki.net: Milocasagrande
# Author@translatewiki.net: Nemo bis
# --
@ -10,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:12+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:12+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
@ -1129,13 +1130,12 @@ msgid "Theme for the site."
msgstr "Tema per questo sito."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Tema del sito"
msgstr "Tema personalizzato"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "Puoi caricare un tema per StatusNet personalizzato come un file ZIP."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1195,11 +1195,11 @@ msgstr "Collegamenti"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avanzate"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personalizzato"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -6854,47 +6854,48 @@ msgstr "Nessuno"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"Questo server non è in grado di gestire caricamenti senza il supporto ZIP."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Errore di sistema nel caricare il file."
msgstr "Tema caricato mancante o caricamento non riuscito."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Aggiornamento dell'immagine non riuscito."
msgstr "Salvataggio del tema non riuscito."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Tema non valido: struttura directory non corretta."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"Il tema caricato è troppo grande, deve essere meno di %d byte non compresso."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "File di tema non valido: manca il file css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"Il tema contiene file non o nomi di cartelle non validi. Utilizzare "
"solamente caratteri ASCII, numeri, il trattino basso e il segno meno."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "Il tema contiene file di tipo \".%s\" che non sono supportati."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Errore nell'aggiornare il profilo remoto."
msgstr "Errore nell'aprire il file del tema."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -1,5 +1,6 @@
# Translation of StatusNet to Japanese
#
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Fryed-peach
# Author@translatewiki.net: Sonoda
# Author@translatewiki.net: Whym
@ -11,11 +12,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:17+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:16+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
@ -2578,7 +2579,7 @@ msgstr "つぶやきにはプロファイルはありません。"
#: actions/oembed.php:87 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%2$s における %1$ のステータス"
msgstr "%2$s における %1$s のステータス"
#. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
#: actions/oembed.php:159

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:22+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:21+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:27+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:26+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
@ -29,7 +29,7 @@ msgstr "Пристап"
#. TRANS: Page notice
#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Нагодувања за пристап на веб-страницата"
msgstr "Нагодувања за пристап на мрежното место"
#. TRANS: Form legend for registration form.
#: actions/accessadminpanel.php:161
@ -40,8 +40,8 @@ msgstr "Регистрација"
#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Да им забранам на анонимните (ненајавени) корисници да ја гледаат веб-"
"страницата?"
"Да им забранам на анонимните (ненајавени) корисници да го гледаат мрежното "
"место?"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
@ -1101,7 +1101,7 @@ msgstr "Изглед"
#: actions/designadminpanel.php:74
msgid "Design settings for this StatusNet site."
msgstr "Нагодувања на изгледот на оваа StatusNet веб-страница."
msgstr "Нагодувања на изгледот на ова StatusNet-мрежно место."
#: actions/designadminpanel.php:318
msgid "Invalid logo URL."
@ -1118,28 +1118,27 @@ msgstr "Промени лого"
#: actions/designadminpanel.php:431
msgid "Site logo"
msgstr "Лого на веб-страницата"
msgstr "Лого на мрежното место"
#: actions/designadminpanel.php:443
msgid "Change theme"
msgstr "Промени тема"
msgstr "Промени изглед"
#: actions/designadminpanel.php:460
msgid "Site theme"
msgstr "Тема на веб-страницата"
msgstr "Изглед на мрежното место"
#: actions/designadminpanel.php:461
msgid "Theme for the site."
msgstr "Тема за веб-страницата."
msgstr "Изглед за мрежното место."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Тема на веб-страницата"
msgstr "Прилагоден мотив"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "Можете да подигнете свој изглед за StatusNet како .ZIP архив."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1156,7 +1155,7 @@ msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
"Може да подигнете позадинска слика за оваа веб-страница. Максималната "
"Може да подигнете позадинска слика за ова мрежно место. Максималната "
"големина на податотеката е %1$s."
#. TRANS: Used as radio button label to add a background image.
@ -1199,11 +1198,11 @@ msgstr "Врски"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Напредно"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "Прилагодено CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -1604,7 +1603,7 @@ msgstr "Популарни забелешки, стр. %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
msgstr "Моментално најпопуларни забелешки на веб-страницата."
msgstr "Моментално најпопуларни забелешки на мрежното место."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
@ -1721,7 +1720,7 @@ msgstr "Оваа улога е резервирана и не може да се
#: actions/grantrole.php:75
msgid "You cannot grant user roles on this site."
msgstr "Не можете да им доделувате улоги на корисниците на оваа веб-страница."
msgstr "Не можете да им доделувате улоги на корисниците на ова мрежно место."
#: actions/grantrole.php:82
msgid "User already has this role."
@ -2180,15 +2179,15 @@ msgid ""
"on the site. Thanks for growing the community!"
msgstr ""
"Ќе добиете известување кога луѓето кои сте ги поканиле ќе ја прифатат "
"поканата и ќе се регистрираат на веб-страницата. Ви благодариме за Вашата "
"помош со проширувањето на заедницата!"
"поканата и ќе се регистрираат на мрежното место. Ви благодариме што ни "
"помагате да ја прошириме заедницата!"
#: actions/invite.php:162
msgid ""
"Use this form to invite your friends and colleagues to use this service."
msgstr ""
"Со овој обраец можете да поканите пријатели и колеги да ја користат веб-"
"страницата."
"Со овој обраец можете да поканите пријатели и колеги да го користат мрежното "
"место."
#: actions/invite.php:187
msgid "Email addresses"
@ -2251,7 +2250,7 @@ msgid ""
msgstr ""
"%1$s Ве кани да се придружите на %2$s (%3$s).\n"
"\n"
"%2$s е веб-страница за микроблогирање што ви овозможува да бидете во тек "
"%2$s е мрежно место за микроблогирање што ви овозможува да бидете во тек "
"луѓето што ги познавате и луѓето кои ве интересираат.\n"
"\n"
"Можете да објавувате и новости за Вас, Ваши размисли, и настани од Вашиот "
@ -2266,7 +2265,7 @@ msgstr ""
"\n"
"%5$s\n"
"\n"
"Ако сакате да ја испробате оваа друштвена веб-страница, кликнете на врската "
"Ако сакате да ја испробате оваа друштвено мрежно место, кликнете на врската "
"подолу за да ја прифатите поканата.\n"
"\n"
"%6$s\n"
@ -2489,8 +2488,8 @@ msgid ""
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
"А зошто не [регистрирате сметка](%%%%action.register%%%%) и станете првиот "
"што ќе [објави нешто на оваа тема](%%%%action.newnotice%%%%?status_textarea="
"%s)!"
"што ќе [објави нешто на оваа тема](%%%%action.newnotice%%%%?status_textarea=%"
"s)!"
#: actions/noticesearchrss.php:96
#, php-format
@ -2759,7 +2758,7 @@ msgstr "Неважечки SSL-опслужувач. Дозволени се н
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Веб-страница"
msgstr "Мреж. место"
#: actions/pathsadminpanel.php:238
msgid "Server"
@ -2775,7 +2774,7 @@ msgstr "Патека"
#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Патека на веб-страницата"
msgstr "Патека на мрежното место"
#: actions/pathsadminpanel.php:246
msgid "Path to locales"
@ -2795,7 +2794,7 @@ msgstr "Да користам интересни (почитливи и повп
#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Тема"
msgstr "Изглед"
#: actions/pathsadminpanel.php:264
msgid "Theme server"
@ -2909,8 +2908,8 @@ msgstr "Неважечка содржина на забелешката."
#, php-format
msgid "Notice license %1$s is not compatible with site license %2$s."
msgstr ""
"Лиценцата на забелешката „%1$s“ не е компатибилна со лиценцата на веб-"
"страницата „%2$s“."
"Лиценцата на забелешката „%1$s“ не е соодветна на лиценцата на мрежното "
"место „%2$s“."
#: actions/profilesettings.php:60
msgid "Profile settings"
@ -2945,7 +2944,7 @@ msgstr "Домашна страница"
#: actions/profilesettings.php:117 actions/register.php:462
msgid "URL of your homepage, blog, or profile on another site"
msgstr "URL на Вашата домашна страница, блог или профил на друга веб-страница."
msgstr "URL на Вашата домашна страница, блог или профил на друго мрежно место."
#: actions/profilesettings.php:122 actions/register.php:468
#, php-format
@ -3108,10 +3107,10 @@ msgid ""
"tool. [Join now](%%action.register%%) to share notices about yourself with "
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
"Ова е %%site.name%%, веб-страница за [микроблогирање](http://mk.wikipedia."
"org/wiki/Микроблогирање) базирана на слободната програмска алатка [StatusNet]"
"(http://status.net/). [Зачленете се](%%action.register%%) за да си "
"споделувате забелешки за себе со приајтелите, семејството и колегите! "
"Ова е %%site.name%%, мрежно место за [микроблогирање](http://mk.wikipedia."
"org/wiki/Микроблогирање) заснована на слободната програмска алатка "
"[StatusNet](http://status.net/). [Зачленете се](%%action.register%%) за да "
"си споделувате забелешки за себе со приајтелите, семејството и колегите! "
"([Прочитајте повеќе](%%doc.help%%))"
#: actions/public.php:247
@ -3121,9 +3120,9 @@ msgid ""
"blogging) service based on the Free Software [StatusNet](http://status.net/) "
"tool."
msgstr ""
"Ова е %%site.name%%, веб-страница за [микроблогирање](http://mk.wikipedia."
"org/wiki/Микроблогирање) базирана на слободната програмска алатка [StatusNet]"
"(http://status.net/)."
"Ова е %%site.name%%, мрежно место за [микроблогирање](http://mk.wikipedia."
"org/wiki/Микроблогирање) заснована на слободната програмска алатка "
"[StatusNet](http://status.net/)."
#: actions/publictagcloud.php:57
msgid "Public tag cloud"
@ -3432,10 +3431,10 @@ msgid ""
"register%%) a new account. If you already have an account on a [compatible "
"microblogging site](%%doc.openmublog%%), enter your profile URL below."
msgstr ""
"За да се претплатите, може да се [најавите](%%action.login%%) или да "
"За да се претплатите, можете да се [најавите](%%action.login%%) или да "
"[регистрирате](%%action.register%%) нова сметка. Ако веќе имате сметка на "
"[компатибилна веб-страница за микроблогирање](%%doc.openmublog%%), внесете "
"го URL-то на Вашиот профил подолу."
"[усогласиво мреж. место за микроблогирање](%%doc.openmublog%%), внесете го "
"URL-то на Вашиот профил подолу."
#: actions/remotesubscribe.php:112
msgid "Remote subscribe"
@ -3459,7 +3458,7 @@ msgstr "URL на профилот"
#: actions/remotesubscribe.php:134
msgid "URL of your profile on another compatible microblogging service"
msgstr "URL на Вашиот профил на друга компатибилна служба за микроблогирање."
msgstr "URL на Вашиот профил на друга соодветна служба за микроблогирање."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
#: lib/userprofile.php:406
@ -3568,7 +3567,7 @@ msgstr "Одговори на %1$s на %2$s!"
#: actions/revokerole.php:75
msgid "You cannot revoke user roles on this site."
msgstr "На оваа веб-страница не можете да одземате кориснички улоги."
msgstr "На ова мрежно место не можете да одземате кориснички улоги."
#: actions/revokerole.php:82
msgid "User doesn't have this role."
@ -3580,7 +3579,7 @@ msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Не можете да ставате корисници во песочен режим на оваа веб-страница."
msgstr "Не можете да ставате корисници во песочен режим на ова мрежно место."
#: actions/sandbox.php:72
msgid "User is already sandboxed."
@ -3594,7 +3593,7 @@ msgstr "Сесии"
#: actions/sessionsadminpanel.php:65
msgid "Session settings for this StatusNet site."
msgstr "Нагодувања на сесиите за оваа StatusNet веб-страница."
msgstr "Нагодувања на сесиите за оваа StatusNet-мрежно место."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
@ -3615,7 +3614,7 @@ msgstr "Вклучи извод од поправка на грешки за с
#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Зачувај нагодувања на веб-страницата"
msgstr "Зачувај нагодувања на мреж. место"
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
@ -3839,8 +3838,8 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
"**%s** е корисничка група на %%%%site.name%%%%, веб-страница за "
"[микроблогирање](http://mk.wikipedia.org/wiki/Микроблогирање) базирана на "
"**%s** е корисничка група на %%%%site.name%%%%, мрежно место за "
"[микроблогирање](http://mk.wikipedia.org/wiki/Микроблогирање) заснована на "
"слободната програмска алатка [StatusNet](http://status.net/). Нејзините "
"членови си разменуваат кратки пораки за нивниот живот и интереси. [Зачленете "
"се](%%%%action.register%%%%) за да станете дел од оваа група и многу повеќе! "
@ -3854,8 +3853,8 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
"**%s** е корисничка група на %%%%site.name%%%%, веб-страница за "
"[микроблогирање](http://mk.wikipedia.org/wiki/Микроблогирање) базирана на "
"**%s** е корисничка група на %%%%site.name%%%%, мрежно место за "
"[микроблогирање](http://mk.wikipedia.org/wiki/Микроблогирање) заснована на "
"слободната програмска алатка [StatusNet](http://status.net/). Нејзините "
"членови си разменуваат кратки пораки за нивниот живот и интереси. "
@ -3950,8 +3949,8 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
"**%s** има сметка на %%%%site.name%%%%, веб-страница за [микроблогирање]"
"(http://mk.wikipedia.org/wiki/Микроблогирање) базирана на слободната "
"**%s** има сметка на %%%%site.name%%%%, мрежно место за [микроблогирање]"
"(http://mk.wikipedia.org/wiki/Микроблогирање) заснована на слободната "
"програмска алатка [StatusNet](http://status.net/). [Зачленете се](%%%%action."
"register%%%%) за да можете да ги следите забелешките на **%s** и многу "
"повеќе! ([Прочитајте повеќе](%%%%doc.help%%%%))"
@ -3963,8 +3962,8 @@ msgid ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
"**%s** има сметка на %%%%site.name%%%%, веб-страница за [микроблогирање]"
"(http://mk.wikipedia.org/wiki/Микроблогирање) базирана на слободната "
"**%s** има сметка на %%%%site.name%%%%, мрежно место за [микроблогирање]"
"(http://mk.wikipedia.org/wiki/Микроблогирање) заснована на слободната "
"програмска алатка [StatusNet](http://status.net/). "
#: actions/showstream.php:305
@ -3974,7 +3973,7 @@ msgstr "Повторувања на %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
msgstr "Не можете да замолчувате корисници на оваа веб-страница."
msgstr "Не можете да замолчувате корисници на ова мрежно место."
#: actions/silence.php:72
msgid "User is already silenced."
@ -3982,11 +3981,11 @@ msgstr "Корисникот е веќе замолчен."
#: actions/siteadminpanel.php:69
msgid "Basic settings for this StatusNet site"
msgstr "Основни поставки за оваа StatusNet веб-страница."
msgstr "Основни поставки за оваа StatusNet-мрежно место."
#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Должината на името на веб-страницата не може да изнесува нула."
msgstr "Должината на името на мрежното место не може да изнесува нула."
#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
@ -4011,11 +4010,11 @@ msgstr "Општи"
#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на веб-страницата"
msgstr "Име на мрежното место"
#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Името на Вашата веб-страница, како на пр. „Микроблог на Вашафирма“"
msgstr "Името на Вашето мрежно место, како на пр. „Микроблог на Вашафирма“"
#: actions/siteadminpanel.php:229
msgid "Brought by"
@ -4039,7 +4038,7 @@ msgstr ""
#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна е-пошта за Вашата веб-страница"
msgstr "Контактна е-пошта за Вашето мрежното место"
#: actions/siteadminpanel.php:245
msgid "Local"
@ -4051,7 +4050,7 @@ msgstr "Основна часовна зона"
#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Матична часовна зона за веб-страницата; обично UTC."
msgstr "Матична часовна зона за мрежното место; обично UTC."
#: actions/siteadminpanel.php:262
msgid "Default language"
@ -4059,9 +4058,7 @@ msgstr "Основен јазик"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
msgstr ""
"Јазик на мрежното место (веб-страницата) ако прелистувачот не може да го "
"препознае сам"
msgstr "Јазик на мрежното место ако прелистувачот не може да го препознае сам"
#: actions/siteadminpanel.php:271
msgid "Limits"
@ -4091,24 +4088,24 @@ msgstr "Објава на страница"
#: actions/sitenoticeadminpanel.php:67
msgid "Edit site-wide message"
msgstr "Уреди објава за цела веб-страница"
msgstr "Уреди објава за цело мрежно место"
#: actions/sitenoticeadminpanel.php:103
msgid "Unable to save site notice."
msgstr "Не можам да ја зачувам објавата за веб-страницата."
msgstr "Не можам да ја зачувам објавата за мрежното место."
#: actions/sitenoticeadminpanel.php:113
msgid "Max length for the site-wide notice is 255 chars."
msgstr "Објавата за цела веб-страница не треба да содржи повеќе од 255 знаци."
msgstr "Објавата за цело мрежно место не треба да содржи повеќе од 255 знаци."
#: actions/sitenoticeadminpanel.php:176
msgid "Site notice text"
msgstr "Текст на објавата за веб-страницата"
msgstr "Текст на објавата за мрежното место"
#: actions/sitenoticeadminpanel.php:178
msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
"Текст за главна објава по цела веб-страница (највеќе до 255 знаци; дозволено "
"Текст за главна објава по цело мрежно место (највеќе до 255 знаци; дозволено "
"и HTML)"
#: actions/sitenoticeadminpanel.php:198
@ -4539,8 +4536,8 @@ msgstr "Претплатата е откажана"
msgid ""
"Listenee stream license %1$s is not compatible with site license %2$s."
msgstr ""
"Лиценцата на потокот на следачот „%1$s“ не е компатибилна со лиценцата на "
"веб-страницата „%2$s“."
"Лиценцата на каналот на следачот „%1$s“ не е соодветна на лиценцата на "
"мрежното место „%2$s“."
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
@ -4550,7 +4547,7 @@ msgstr "Корисник"
#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Кориснички нагодувања за оваа StatusNet веб-страница."
msgstr "Кориснички нагодувања за ова StatusNet-мрежно место."
#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
@ -4661,7 +4658,7 @@ msgid ""
"subscription. Your subscription token is:"
msgstr ""
"Претплатата е одобрена, но не е зададена обратна URL-адреса. Проверете ги "
"инструкциите на веб-страницата за да дознаете како се одобрува претплата. "
"инструкциите на мрежното место за да дознаете како се одобрува претплата. "
"Жетонот на Вашата претплата е:"
#: actions/userauthorization.php:266
@ -4675,7 +4672,7 @@ msgid ""
"subscription."
msgstr ""
"Претплатата е одбиена, но не е зададена обратна URL-адреса. Проверете ги "
"инструкциите на веб-страницата за да дознаете како се одбива претплата во "
"инструкциите на мрежното место за да дознаете како се одбива претплата во "
"потполност."
#: actions/userauthorization.php:303
@ -4773,7 +4770,7 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
"Оваа веб-страница работи на %1$s верзија %2$s, Авторски права 2008-2010 "
"Ова мрежно место работи на %1$s верзија %2$s, Авторски права 2008-2010 "
"StatusNet, Inc. и учесници."
#: actions/version.php:163
@ -4910,7 +4907,7 @@ msgstr ""
#: classes/Notice.php:272
msgid "You are banned from posting notices on this site."
msgstr "Забрането Ви е да објавувате забелешки на оваа веб-страница."
msgstr "Забрането Ви е да објавувате забелешки на ова мрежно место."
#: classes/Notice.php:338 classes/Notice.php:364
msgid "Problem saving notice."
@ -5061,7 +5058,7 @@ msgstr "Поврзи се"
#: lib/action.php:458
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Промена на поставките на веб-страницата"
msgstr "Промена на поставките на мрежното место"
#. TRANS: Main menu option when logged in and site admin for access to site configuration
#: lib/action.php:461
@ -5143,7 +5140,7 @@ msgstr "Барај"
#. TRANS: Menu item for site administration
#: lib/action.php:525 lib/adminpanelaction.php:400
msgid "Site notice"
msgstr "Напомена за веб-страницата"
msgstr "Напомена за мрежното место"
#. TRANS: DT element for local views block. String is hidden in default CSS.
#: lib/action.php:592
@ -5235,7 +5232,7 @@ msgstr ""
#. TRANS: DT element for StatusNet site content license.
#: lib/action.php:850
msgid "Site content license"
msgstr "Лиценца на содржините на веб-страницата"
msgstr "Лиценца на содржините на мрежното место"
#. TRANS: Content license displayed when license is set to 'private'.
#. TRANS: %1$s is the site name.
@ -5303,7 +5300,7 @@ msgstr "Сè уште не е достапна обработката на вм
#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Не можете да ја менувате оваа веб-страница."
msgstr "Не можете да врште измени на ова мрежно место."
#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
#: lib/adminpanelaction.php:110
@ -5329,13 +5326,13 @@ msgstr "Не можам да ги избришам нагодувањата за
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:350
msgid "Basic site configuration"
msgstr "Основни нагодувања на веб-страницата"
msgstr "Основни нагодувања на мрежното место"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:352
msgctxt "MENU"
msgid "Site"
msgstr "Веб-страница"
msgstr "Мреж. место"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:358
@ -5376,7 +5373,7 @@ msgstr "Конфигурација на сесиите"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:398
msgid "Edit site notice"
msgstr "Уреди објава за веб-страницата"
msgstr "Уреди објава за мрежното место"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:406
@ -6792,7 +6789,7 @@ msgstr "Стави го корисников во песочен режим"
#: lib/searchaction.php:120
msgid "Search site"
msgstr "Пребарај по веб-страницата"
msgstr "Пребарај по мрежното место"
#: lib/searchaction.php:126
msgid "Keyword(s)"
@ -6812,7 +6809,7 @@ msgstr "Луѓе"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
msgstr "Пронајдете луѓе на оваа веб-страница"
msgstr "Пронајдете луѓе на ова мрежно место"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
@ -6820,7 +6817,7 @@ msgstr "Пронајдете содржини на забелешките"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
msgstr "Пронајдете групи на оваа веб-страница"
msgstr "Пронајдете групи на ова мрежно место"
#: lib/section.php:89
msgid "Untitled section"
@ -6879,47 +6876,48 @@ msgstr "Без ознаки"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"Опслужувачот не може да се справи со подигања на изгледи без ZIP-поддршка."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Системска грешка при подигањето на податотеката."
msgstr "Подигањето на мотивот недостасува или не успеа."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Подновата на аватарот не успеа."
msgstr "Зачувувањето на мотивот не успеа."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Неважечки изглед: лош состав на папката."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"Подигнатиот изглед е преголем; мора да биде помал од %d бајти (незбиен)."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Неважечки архив за изглеедот: недостасува податотеката css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"Изгледот содржи неважечки назив на податотека или папка. Дозволени се само "
"ASCII-букви, бројки, долна црта и знак за минус."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "Изгледот содржи податотека од типот „.%s“, која не е дозволена."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Грешка во подновувањето на далечинскиот профил."
msgstr "Грешка при отворањето на архивот за мотив."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:35+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:30+0000\n"
"Language-Team: Norwegian (bokmål)\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:48+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:39+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
@ -1143,13 +1143,12 @@ msgid "Theme for the site."
msgstr "Mogelijke vormgevingen voor deze website."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Vormgeving website"
msgstr "Aangepaste vormgeving"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "U kunt een vormgeving voor StatusNet uploaden als ZIP-archief."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1209,11 +1208,11 @@ msgstr "Verwijzingen"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Uitgebreid"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "Aangepaste CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -6928,48 +6927,54 @@ msgstr "Geen"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"Deze server kan niet overweg met uploads van vormgevingsbestanden zonder ZIP-"
"ondersteuning."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Er is een systeemfout opgetreden tijdens het uploaden van het bestand."
msgstr "Het uploaden van het bestand met de vormgeving is mislukt."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Het bijwerken van de avatar is mislukt."
msgstr "Het opslaan van de vormgeving is mislukt."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Ongeldige vormgeving: de mappenstructuur is onjuist."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"De toegevoegde vormgeving is te groot. Deze moet uitgepakt kleiner zijn dan %"
"d bytes."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
"Ongeldig bestand met vormgeving: het bestand display.css is niet aanwezig"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"De vormgeving bevat een ongeldige bestandsnaam of mapnaam. Gebruik alleen "
"maar ASCII-letters, getallen, liggende streepjes en het minteken."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
"De vormgeving bevat een bestand van het type \".%s\". Dit is niet toegestaan."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr ""
"Er is een fout opgetreden tijdens het bijwerken van het profiel op afstand."
"Er is een fout opgetreden tijdens het openen van het archiefbestand met de "
"vormgeving."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:43+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:35+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"

View File

@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:52+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:44+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
@ -1128,13 +1128,12 @@ msgid "Theme for the site."
msgstr "Motyw witryny."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Motyw witryny"
msgstr "Własny motyw"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
msgstr "Można wysłać własny motyw witryny StatusNet jako archiwum zip."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1192,11 +1191,11 @@ msgstr "Odnośniki"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Zaawansowane"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "Własny plik CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"
@ -6848,47 +6847,49 @@ msgstr "Brak"
#: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support."
msgstr ""
"Ten serwer nie może obsługiwać wysyłania motywu bez obsługi archiwów zip."
#: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed."
msgstr "Błąd systemu podczas wysyłania pliku."
msgstr "Brak wysłania motywu lub nie powiodło się."
#: lib/themeuploader.php:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme."
msgstr "Zaktualizowanie awatara nie powiodło się."
msgstr "Zapisanie motywu nie powiodło się."
#: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure."
msgstr ""
msgstr "Nieprawidłowy motyw: błędna struktura katalogów."
#: lib/themeuploader.php:166
#, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr ""
"Wysłany motyw jest za duży, musi być mniejszy niż %d bajtów po "
"zdekompresowaniu."
#: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css"
msgstr ""
msgstr "Nieprawidłowe archiwum motywu: brak pliku css/display.css"
#: lib/themeuploader.php:205
msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign."
msgstr ""
"Motyw zawiera nieprawidłowy plik lub nazwę katalogu. Należy używać tylko "
"liter, cyfr, podkreślników i znaku minus z zestawu ASCII."
#: lib/themeuploader.php:216
#, php-format
msgid "Theme contains file of type '.%s', which is not allowed."
msgstr ""
msgstr "Motyw zawiera plik typu \\\".%s\\\", który nie jest dozwolony."
#: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive."
msgstr "Błąd podczas aktualizowania zdalnego profilu."
msgstr "Błąd podczas otwierania archiwum motywu."
#: lib/topposterssection.php:74
msgid "Top posters"

View File

@ -1,6 +1,7 @@
# Translation of StatusNet to Portuguese
#
# Author@translatewiki.net: Gallaecio
# Author@translatewiki.net: Giro720
# Author@translatewiki.net: Hamilton Abreu
# Author@translatewiki.net: Ipublicis
# --
@ -11,11 +12,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:20:57+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:48+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
@ -1183,7 +1184,7 @@ msgstr "Texto"
#: actions/designadminpanel.php:626 lib/designsettings.php:230
msgid "Links"
msgstr "Ligações"
msgstr "Links"
#: actions/designadminpanel.php:651
msgid "Advanced"
@ -6683,7 +6684,7 @@ msgstr "Todos os subscritores"
#: lib/profileaction.php:191
msgid "User ID"
msgstr "ID do utilizador"
msgstr "Número de identificação"
#: lib/profileaction.php:196
msgid "Member since"

View File

@ -13,11 +13,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\n"
"PO-Revision-Date: 2010-06-16 22:21:01+0000\n"
"PO-Revision-Date: 2010-06-21 18:04:52+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: MediaWiki 1.17alpha (r68131); Translate extension (2010-06-12)\n"
"X-Generator: MediaWiki 1.17alpha (r68367); Translate extension (2010-06-12)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
@ -1136,13 +1136,14 @@ msgid "Theme for the site."
msgstr "Tema para o site."
#: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme"
msgstr "Tema do site"
msgstr "Tema personalizado"
#: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr ""
"Você pode enviar um tema personalizado para o StatusNet, na forma de um "
"arquivo .zip."
#: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image"
@ -1202,11 +1203,11 @@ msgstr "Links"
#: actions/designadminpanel.php:651
msgid "Advanced"
msgstr ""
msgstr "Avançado"
#: actions/designadminpanel.php:655
msgid "Custom CSS"
msgstr ""
msgstr "CSS personalizado"
#: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults"

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