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 README
------ ------
StatusNet 0.9.2 ("King of Birds") StatusNet 0.9.3 ("Half a World Away")
3 May 2010 29 June 2010
This is the README file for StatusNet, the Open Source microblogging This is the README file for StatusNet, the Open Source microblogging
platform. It includes installation instructions, descriptions of platform. It includes installation instructions, descriptions of
@ -77,40 +77,27 @@ for additional terms.
New this version New this version
================ ================
This is a minor bug and feature release since version 0.9.1 released 28 This is a minor bug and feature release since version 0.9.2 released on
March 2010. 4 May 2010.
Because of fixes to OStatus bugs, it is highly recommended that all For best compatibility with client software and site federation, and a lot of
public sites upgrade to the new version immediately. bug fixes, it is highly recommended that all public sites upgrade to the new
version.
Notable changes this version: Notable changes this version:
- Installer no longer fails with a PHP fatal error when trying to set up the - Enhanced API output to aid StatusNet-specific clients
subscription to update@status.net - Many updates to user interface translation from TranslateWiki
- Fixed email notifications for @-replies that come in via OStatus - OStatus now works subscribing to SSL-protected sites by default
- OStatus related Fixes to the cloudy theme - OpenID now works on PHP 5.3, supports closer site integration.
- Pass geo locations over Twitter bridge (will only be used if enabled on the - Numerous API and FOAF output fixes.
Twitter side) - Fixes to Facebook integration for FB API behavior changes
- scripts/showplugins.php - script to dump the list of activated plugins and - PostgreSQL support updates
their settings - Initial version of a custom theme uploader (disabled by default)
- scripts/fixup_blocks.php - script to finds any stray subscriptions in - LDAP auth plugins cleanup
violation of blocks, and removes them - Many other bugfixes
- 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
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 Prerequisites
============= =============
@ -121,8 +108,8 @@ run correctly.
- PHP 5.2.3+. It may be possible to run this software on earlier - 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 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 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 daemons on 64-bit platforms. PHP 5.3.x should work correctly in this
to cause some failures for OpenID. release, but problems with some plugins are possible.
- MySQL 5.x. The StatusNet database is stored, by default, in a MySQL - 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 server. It has been primarily tested on 5.x servers, although it may
be possible to install on earlier (or later!) versions. The server 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') { if ($this->format == 'xml') {
$this->initDocument('xml'); $this->initDocument('xml');
$this->showTwitterXmlUser($twitter_user); $this->showTwitterXmlUser($twitter_user, 'user', true);
$this->endDocument('xml'); $this->endDocument('xml');
} elseif ($this->format == 'json') { } elseif ($this->format == 'json') {
$this->initDocument('json'); $this->initDocument('json');

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -206,7 +206,8 @@ class ApiSubscriptionsAction extends ApiBareAuthAction
{ {
switch ($this->format) { switch ($this->format) {
case 'xml': 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) { foreach ($this->profiles as $profile) {
$this->showProfile( $this->showProfile(
$profile, $profile,

View File

@ -22,7 +22,7 @@
* @category Search * @category Search
* @package StatusNet * @package StatusNet
* @author Zach Copley <zach@status.net> * @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 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
@ -31,6 +31,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1); exit(1);
} }
require_once INSTALLDIR.'/lib/apiprivateauth.php';
/** /**
* Returns the top ten queries that are currently trending * Returns the top ten queries that are currently trending
* *
@ -43,7 +45,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
* @see ApiAction * @see ApiAction
*/ */
class TwitapitrendsAction extends ApiAction class ApiTrendsAction extends ApiPrivateAuthAction
{ {
var $callback; var $callback;
@ -82,7 +84,7 @@ class TwitapitrendsAction extends ApiAction
*/ */
function showTrends() 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() 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', $this->elementStart('div', array('id' => 'entity_statistics',
'class' => 'section')); 'class' => 'section'));
@ -451,7 +443,7 @@ class ShowgroupAction extends GroupDesignAction
$this->elementStart('dl', 'entity_members'); $this->elementStart('dl', 'entity_members');
$this->element('dt', null, _('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('dl');
$this->elementEnd('div'); $this->elementEnd('div');

View File

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

View File

@ -1192,7 +1192,7 @@ class Notice extends Memcached_DataObject
'xmlns:media' => 'http://purl.org/syndication/atommedia', 'xmlns:media' => 'http://purl.org/syndication/atommedia',
'xmlns:poco' => 'http://portablecontacts.net/spec/1.0', 'xmlns:poco' => 'http://portablecontacts.net/spec/1.0',
'xmlns:ostatus' => 'http://ostatus.org/schema/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 { } else {
$attrs = array(); $attrs = array();
} }
@ -1227,7 +1227,7 @@ class Notice extends Memcached_DataObject
$xs->element('title', null, common_xml_safe_str($this->content)); $xs->element('title', null, common_xml_safe_str($this->content));
if ($author) { if ($author) {
$xs->raw($profile->asAtomAuthor()); $xs->raw($profile->asAtomAuthor($cur));
$xs->raw($profile->asActivityActor()); $xs->raw($profile->asActivityActor());
} }
@ -1240,9 +1240,25 @@ class Notice extends Memcached_DataObject
$xs->element('published', null, common_date_w3dtf($this->created)); $xs->element('published', null, common_date_w3dtf($this->created));
$xs->element('updated', 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( $noticeInfoAttr = array(
'local_id' => $this->id, // local notice ID (useful to clients for ordering) 'local_id' => $this->id, // local notice ID (useful to clients for ordering)
'source' => $this->source, // the client name (source attribution) 'source' => $source, // the client name (source attribution)
); );
$ns = $this->getSource(); $ns = $this->getSource();

View File

@ -849,15 +849,23 @@ class Profile extends Memcached_DataObject
* *
* Assumes that Atom has been previously set up as the base namespace. * Assumes that Atom has been previously set up as the base namespace.
* *
* @param Profile $cur the current authenticated user
*
* @return string * @return string
*/ */
function asAtomAuthor() function asAtomAuthor($cur = null)
{ {
$xs = new XMLStringer(true); $xs = new XMLStringer(true);
$xs->elementStart('author'); $xs->elementStart('author');
$xs->element('name', null, $this->nickname); $xs->element('name', null, $this->nickname);
$xs->element('uri', null, $this->getUri()); $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'); $xs->elementEnd('author');
return $xs->getString(); return $xs->getString();

View File

@ -64,4 +64,17 @@ class Queue_item extends Memcached_DataObject
$qi = null; $qi = null;
return 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); 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() function delete()
{ {
$this->decache(); # while we still have the values! $this->decache(); # while we still have the values!

View File

@ -154,6 +154,21 @@ class User_group extends Memcached_DataObject
return $members; 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) function getAdmins($offset=0, $limit=null)
{ {
$qry = $qry =

View File

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

View File

@ -20,7 +20,7 @@
/** /**
* The library version string * The library version string
*/ */
define('Auth_OpenID_VERSION', '2.1.3'); define('Auth_OpenID_VERSION', '2.2.2');
/** /**
* Require the fetcher code. * Require the fetcher code.
@ -102,9 +102,7 @@ define('Auth_OpenID_digits',
define('Auth_OpenID_punct', define('Auth_OpenID_punct',
"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"); "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~");
if (Auth_OpenID_getMathLib() === null) { Auth_OpenID_include_init();
Auth_OpenID_setNoMathSupport();
}
/** /**
* The OpenID utility function class. * The OpenID utility function class.
@ -120,7 +118,7 @@ class Auth_OpenID {
* *
* @access private * @access private
*/ */
function isFailure($thing) static function isFailure($thing)
{ {
return is_a($thing, 'Auth_OpenID_FailureResponse'); 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 * Returns an empty array if neither GET nor POST was used, or if
* POST was used but php://input cannot be opened. * POST was used but php://input cannot be opened.
* *
* See background:
* http://lists.openidenabled.com/pipermail/dev/2007-March/000395.html
*
* @access private * @access private
*/ */
function getQuery($query_str=null) static function getQuery($query_str=null)
{ {
$data = array(); $data = array();
@ -177,7 +178,7 @@ class Auth_OpenID {
return $data; return $data;
} }
function params_from_string($str) static function params_from_string($str)
{ {
$chunks = explode("&", $str); $chunks = explode("&", $str);
@ -190,7 +191,7 @@ class Auth_OpenID {
} }
list($k, $v) = $parts; list($k, $v) = $parts;
$data[$k] = urldecode($v); $data[urldecode($k)] = urldecode($v);
} }
return $data; return $data;
@ -203,7 +204,7 @@ class Auth_OpenID {
* *
* @access private * @access private
*/ */
function ensureDir($dir_name) static function ensureDir($dir_name)
{ {
if (is_dir($dir_name) || @mkdir($dir_name)) { if (is_dir($dir_name) || @mkdir($dir_name)) {
return true; return true;
@ -225,7 +226,7 @@ class Auth_OpenID {
* *
* @access private * @access private
*/ */
function addPrefix($values, $prefix) static function addPrefix($values, $prefix)
{ {
$new_values = array(); $new_values = array();
foreach ($values as $s) { foreach ($values as $s) {
@ -241,7 +242,7 @@ class Auth_OpenID {
* *
* @access private * @access private
*/ */
function arrayGet($arr, $key, $fallback = null) static function arrayGet($arr, $key, $fallback = null)
{ {
if (is_array($arr)) { if (is_array($arr)) {
if (array_key_exists($key, $arr)) { if (array_key_exists($key, $arr)) {
@ -261,7 +262,7 @@ class Auth_OpenID {
/** /**
* Replacement for PHP's broken parse_str. * Replacement for PHP's broken parse_str.
*/ */
function parse_str($query) static function parse_str($query)
{ {
if ($query === null) { if ($query === null) {
return null; return null;
@ -278,7 +279,7 @@ class Auth_OpenID {
} }
list($key, $value) = $pair; list($key, $value) = $pair;
$new_parts[$key] = urldecode($value); $new_parts[urldecode($key)] = urldecode($value);
} }
return $new_parts; return $new_parts;
@ -295,7 +296,7 @@ class Auth_OpenID {
* pairs from $data into a URL query string * pairs from $data into a URL query string
* (e.g. "username=bob&id=56"). * (e.g. "username=bob&id=56").
*/ */
function httpBuildQuery($data) static function httpBuildQuery($data)
{ {
$pairs = array(); $pairs = array();
foreach ($data as $key => $value) { foreach ($data as $key => $value) {
@ -323,7 +324,7 @@ class Auth_OpenID {
* @return string $url The original URL with the new parameters added. * @return string $url The original URL with the new parameters added.
* *
*/ */
function appendArgs($url, $args) static function appendArgs($url, $args)
{ {
if (count($args) == 0) { if (count($args) == 0) {
return $url; return $url;
@ -367,7 +368,7 @@ class Auth_OpenID {
* @return string $url The URL resulting from assembling the * @return string $url The URL resulting from assembling the
* specified components. * specified components.
*/ */
function urlunparse($scheme, $host, $port = null, $path = '/', static function urlunparse($scheme, $host, $port = null, $path = '/',
$query = '', $fragment = '') $query = '', $fragment = '')
{ {
@ -412,7 +413,7 @@ class Auth_OpenID {
* @return mixed $new_url The URL after normalization, or null if * @return mixed $new_url The URL after normalization, or null if
* $url was malformed. * $url was malformed.
*/ */
function normalizeUrl($url) static function normalizeUrl($url)
{ {
@$parsed = parse_url($url); @$parsed = parse_url($url);
@ -443,7 +444,7 @@ class Auth_OpenID {
* *
* @access private * @access private
*/ */
function intval($value) static function intval($value)
{ {
$re = "/^\\d+$/"; $re = "/^\\d+$/";
@ -461,7 +462,7 @@ class Auth_OpenID {
* @param string $str The string of bytes to count. * @param string $str The string of bytes to count.
* @return int The number of bytes in $str. * @return int The number of bytes in $str.
*/ */
function bytes($str) static function bytes($str)
{ {
return strlen(bin2hex($str)) / 2; return strlen(bin2hex($str)) / 2;
} }
@ -470,7 +471,7 @@ class Auth_OpenID {
* Get the bytes in a string independently of multibyte support * Get the bytes in a string independently of multibyte support
* conditions. * conditions.
*/ */
function toBytes($str) static function toBytes($str)
{ {
$hex = bin2hex($str); $hex = bin2hex($str);
@ -486,7 +487,7 @@ class Auth_OpenID {
return $b; return $b;
} }
function urldefrag($url) static function urldefrag($url)
{ {
$parts = explode("#", $url, 2); $parts = explode("#", $url, 2);
@ -497,7 +498,7 @@ class Auth_OpenID {
} }
} }
function filter($callback, &$sequence) static function filter($callback, &$sequence)
{ {
$result = array(); $result = array();
@ -510,7 +511,7 @@ class Auth_OpenID {
return $result; return $result;
} }
function update(&$dest, &$src) static function update(&$dest, &$src)
{ {
foreach ($src as $k => $v) { foreach ($src as $k => $v) {
$dest[$k] = $v; $dest[$k] = $v;
@ -524,14 +525,14 @@ class Auth_OpenID {
* *
* @param string $format_string The sprintf format for the message * @param string $format_string The sprintf format for the message
*/ */
function log($format_string) static function log($format_string)
{ {
$args = func_get_args(); $args = func_get_args();
$message = call_user_func_array('sprintf', $args); $message = call_user_func_array('sprintf', $args);
error_log($message); error_log($message);
} }
function autoSubmitHTML($form, $title="OpenId transaction in progress") static function autoSubmitHTML($form, $title="OpenId transaction in progress")
{ {
return("<html>". return("<html>".
"<head><title>". "<head><title>".
@ -549,4 +550,14 @@ class Auth_OpenID {
"</html>"); "</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 * @return bool true if $thing is an Auth_OpenID_AX_Error; false
* if not. * if not.
*/ */
function isError($thing) static function isError($thing)
{ {
return is_a($thing, 'Auth_OpenID_AX_Error'); return is_a($thing, 'Auth_OpenID_AX_Error');
} }
@ -191,7 +191,7 @@ class Auth_OpenID_AX_AttrInfo {
* Construct an attribute information object. For parameter * Construct an attribute information object. For parameter
* details, see the constructor. * details, see the constructor.
*/ */
function make($type_uri, $count=1, $required=false, static function make($type_uri, $count=1, $required=false,
$alias=null) $alias=null)
{ {
if ($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 * return null If an alias is present in the list of aliases but
* is not present in the namespace map. * 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(); $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 * Auth_OpenID_AX_FetchRequest extracted from the request message if
* successful * successful
*/ */
function &fromOpenIDRequest($request) static function fromOpenIDRequest($request)
{ {
$m = $request->message; $m = $request->message;
$obj = new Auth_OpenID_AX_FetchRequest(); $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')); Auth_OpenID::arrayGet($ax_args, 'required'));
foreach ($required as $type_uri) { foreach ($required as $type_uri) {
$attrib =& $this->requested_attributes[$type_uri]; $attrib = $this->requested_attributes[$type_uri];
$attrib->required = true; $attrib->required = true;
} }
@ -587,7 +587,7 @@ class Auth_OpenID_AX_KeyValueMessage extends Auth_OpenID_AX_Message {
* *
* @access private * @access private
*/ */
function _getExtensionKVArgs(&$aliases) function _getExtensionKVArgs($aliases)
{ {
if ($aliases === null) { if ($aliases === null) {
$aliases = new Auth_OpenID_NamespaceMap(); $aliases = new Auth_OpenID_NamespaceMap();
@ -652,7 +652,7 @@ class Auth_OpenID_AX_KeyValueMessage extends Auth_OpenID_AX_Message {
foreach ($aliases->iteritems() as $pair) { foreach ($aliases->iteritems() as $pair) {
list($type_uri, $alias) = $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_key = 'count.' . $alias;
$count_s = $ax_args[$count_key]; $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; $ax_args['update_url'] = $update_url;
} }
Auth_OpenID::update(&$ax_args, $kv_args); Auth_OpenID::update($ax_args, $kv_args);
return $ax_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 * @return $response A FetchResponse containing the data from the
* OpenID message * OpenID message
*/ */
function fromSuccessResponse($success_response, $signed=true) static function fromSuccessResponse($success_response, $signed=true)
{ {
$obj = new Auth_OpenID_AX_FetchResponse(); $obj = new Auth_OpenID_AX_FetchResponse();
if ($signed) { if ($signed) {
@ -960,7 +960,7 @@ class Auth_OpenID_AX_StoreRequest extends Auth_OpenID_AX_KeyValueMessage {
{ {
$ax_args = $this->_newArgs(); $ax_args = $this->_newArgs();
$kv_args = $this->_getExtensionKVArgs($aliases); $kv_args = $this->_getExtensionKVArgs($aliases);
Auth_OpenID::update(&$ax_args, $kv_args); Auth_OpenID::update($ax_args, $kv_args);
return $ax_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 * Returns Auth_OpenID_AX_Error on error or an
* Auth_OpenID_AX_StoreResponse object on success. * 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)) { if (($succeeded) && ($error_message !== null)) {
return new Auth_OpenID_AX_Error('An error message may only be '. 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} * @return association An {@link Auth_OpenID_Association}
* instance. * instance.
*/ */
function fromExpiresIn($expires_in, $handle, $secret, $assoc_type) static function fromExpiresIn($expires_in, $handle, $secret, $assoc_type)
{ {
$issued = time(); $issued = time();
$lifetime = $expires_in; $lifetime = $expires_in;
@ -132,7 +132,7 @@ class Auth_OpenID_Association {
$handle, $secret, $issued, $lifetime, $assoc_type) $handle, $secret, $issued, $lifetime, $assoc_type)
{ {
if (!in_array($assoc_type, if (!in_array($assoc_type,
Auth_OpenID_getSupportedAssociationTypes())) { Auth_OpenID_getSupportedAssociationTypes(), true)) {
$fmt = 'Unsupported association type (%s)'; $fmt = 'Unsupported association type (%s)';
trigger_error(sprintf($fmt, $assoc_type), E_USER_ERROR); 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() * @param string $assoc_s Association as serialized by serialize()
* @return Auth_OpenID_Association $result instance of this class * @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); $pairs = Auth_OpenID_KVForm::toArray($assoc_s, $strict = true);
$keys = array(); $keys = array();
@ -327,7 +327,7 @@ class Auth_OpenID_Association {
* *
* @access private * @access private
*/ */
function _makePairs(&$message) function _makePairs($message)
{ {
$signed = $message->getArg(Auth_OpenID_OPENID_NS, 'signed'); $signed = $message->getArg(Auth_OpenID_OPENID_NS, 'signed');
if (!$signed || Auth_OpenID::isFailure($signed)) { if (!$signed || Auth_OpenID::isFailure($signed)) {
@ -352,7 +352,7 @@ class Auth_OpenID_Association {
* *
* @access private * @access private
*/ */
function getMessageSignature(&$message) function getMessageSignature($message)
{ {
$pairs = $this->_makePairs($message); $pairs = $this->_makePairs($message);
return base64_encode($this->sign($pairs)); return base64_encode($this->sign($pairs));
@ -364,7 +364,7 @@ class Auth_OpenID_Association {
* *
* @access private * @access private
*/ */
function checkMessageSignature(&$message) function checkMessageSignature($message)
{ {
$sig = $message->getArg(Auth_OpenID_OPENID_NS, $sig = $message->getArg(Auth_OpenID_OPENID_NS,
'sig'); 'sig');
@ -469,18 +469,16 @@ function Auth_OpenID_getOnlyEncryptedOrder()
return $result; return $result;
} }
function &Auth_OpenID_getDefaultNegotiator() function Auth_OpenID_getDefaultNegotiator()
{ {
$x = new Auth_OpenID_SessionNegotiator( return new Auth_OpenID_SessionNegotiator(
Auth_OpenID_getDefaultAssociationOrder()); 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()); 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'); 'class' => 'Auth_OpenID_GmpMathWrapper');
} }
$result[] = array( $result[] = array('modules' => array('bcmath', 'php_bcmath'),
'modules' => array('bcmath', 'php_bcmath'),
'extension' => 'bcmath', 'extension' => 'bcmath',
'class' => 'Auth_OpenID_BcMathWrapper'); 'class' => 'Auth_OpenID_BcMathWrapper');
@ -366,27 +365,9 @@ function Auth_OpenID_detectMathLibrary($exts)
{ {
$loaded = false; $loaded = false;
$hasDl = function_exists('dl');
foreach ($exts as $extension) { foreach ($exts as $extension) {
// See if the extension specified is already loaded. if (extension_loaded($extension['extension'])) {
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) {
return $extension; return $extension;
} }
} }
@ -405,7 +386,7 @@ function Auth_OpenID_detectMathLibrary($exts)
* instance of a wrapper for that extension module. If no extension * instance of a wrapper for that extension module. If no extension
* module is found, an instance of {@link Auth_OpenID_MathWrapper} is * module is found, an instance of {@link Auth_OpenID_MathWrapper} is
* returned, which wraps the native PHP integer implementation. The * 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(). * Auth_OpenID_getMathLib().
* *
* This function checks for the existence of specific long number * This function checks for the existence of specific long number
@ -416,7 +397,7 @@ function Auth_OpenID_detectMathLibrary($exts)
* *
* @package OpenID * @package OpenID
*/ */
function &Auth_OpenID_getMathLib() function Auth_OpenID_getMathLib()
{ {
// The instance of Auth_OpenID_MathWrapper that we choose to // The instance of Auth_OpenID_MathWrapper that we choose to
// supply will be stored here, so that subseqent calls to this // 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'); 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 * when creating the internal consumer object. This is used for
* testing. * testing.
*/ */
function Auth_OpenID_Consumer(&$store, $session = null, function Auth_OpenID_Consumer($store, $session = null,
$consumer_cls = null) $consumer_cls = null)
{ {
if ($session === null) { if ($session === null) {
$session = new Auth_Yadis_PHPSession(); $session = new Auth_Yadis_PHPSession();
} }
$this->session =& $session; $this->session = $session;
if ($consumer_cls !== null) { if ($consumer_cls !== null) {
$this->consumer =& new $consumer_cls($store); $this->consumer = new $consumer_cls($store);
} else { } 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; $this->_token_key = $this->session_key_prefix . $this->_token_suffix;
@ -281,7 +281,7 @@ class Auth_OpenID_Consumer {
* *
* @access private * @access private
*/ */
function getDiscoveryObject(&$session, $openid_url, function getDiscoveryObject($session, $openid_url,
$session_key_prefix) $session_key_prefix)
{ {
return new Auth_Yadis_Discovery($session, $openid_url, return new Auth_Yadis_Discovery($session, $openid_url,
@ -339,7 +339,7 @@ class Auth_OpenID_Consumer {
$this->consumer->fetcher); $this->consumer->fetcher);
// Reset the 'stale' attribute of the manager. // Reset the 'stale' attribute of the manager.
$m =& $disco->getManager(); $m = $disco->getManager();
if ($m) { if ($m) {
$m->stale = false; $m->stale = false;
$disco->session->set($disco->session_key, $disco->session->set($disco->session_key,
@ -370,7 +370,7 @@ class Auth_OpenID_Consumer {
* @return Auth_OpenID_AuthRequest $auth_request An OpenID * @return Auth_OpenID_AuthRequest $auth_request An OpenID
* authentication request object. * authentication request object.
*/ */
function &beginWithoutDiscovery($endpoint, $anonymous=false) function beginWithoutDiscovery($endpoint, $anonymous=false)
{ {
$loader = new Auth_OpenID_ServiceEndpointLoader(); $loader = new Auth_OpenID_ServiceEndpointLoader();
$auth_req = $this->consumer->begin($endpoint); $auth_req = $this->consumer->begin($endpoint);
@ -467,7 +467,7 @@ class Auth_OpenID_DiffieHellmanSHA1ConsumerSession {
function getRequest() function getRequest()
{ {
$math =& Auth_OpenID_getMathLib(); $math = Auth_OpenID_getMathLib();
$cpub = $math->longToBase64($this->dh->public); $cpub = $math->longToBase64($this->dh->public);
@ -496,7 +496,7 @@ class Auth_OpenID_DiffieHellmanSHA1ConsumerSession {
return null; return null;
} }
$math =& Auth_OpenID_getMathLib(); $math = Auth_OpenID_getMathLib();
$spub = $math->base64ToLong($response->getArg(Auth_OpenID_OPENID_NS, $spub = $math->base64ToLong($response->getArg(Auth_OpenID_OPENID_NS,
'dh_server_public')); 'dh_server_public'));
@ -611,11 +611,11 @@ class Auth_OpenID_GenericConsumer {
* in the module description. The default value is False, which * in the module description. The default value is False, which
* disables immediate mode. * disables immediate mode.
*/ */
function Auth_OpenID_GenericConsumer(&$store) function Auth_OpenID_GenericConsumer($store)
{ {
$this->store =& $store; $this->store = $store;
$this->negotiator =& Auth_OpenID_getDefaultNegotiator(); $this->negotiator = Auth_OpenID_getDefaultNegotiator();
$this->_use_assocs = ($this->store ? true : false); $this->_use_assocs = (is_null($this->store) ? false : true);
$this->fetcher = Auth_Yadis_Yadis::getHTTPFetcher(); $this->fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
@ -665,14 +665,14 @@ class Auth_OpenID_GenericConsumer {
$method = Auth_OpenID::arrayGet($mode_methods, $mode, $method = Auth_OpenID::arrayGet($mode_methods, $mode,
'_completeInvalid'); '_completeInvalid');
return call_user_func_array(array(&$this, $method), return call_user_func_array(array($this, $method),
array($message, $endpoint, $return_to)); array($message, &$endpoint, $return_to));
} }
/** /**
* @access private * @access private
*/ */
function _completeInvalid($message, &$endpoint, $unused) function _completeInvalid($message, $endpoint, $unused)
{ {
$mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode', $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode',
'<No mode set>'); '<No mode set>');
@ -684,7 +684,7 @@ class Auth_OpenID_GenericConsumer {
/** /**
* @access private * @access private
*/ */
function _complete_cancel($message, &$endpoint, $unused) function _complete_cancel($message, $endpoint, $unused)
{ {
return new Auth_OpenID_CancelResponse($endpoint); return new Auth_OpenID_CancelResponse($endpoint);
} }
@ -692,7 +692,7 @@ class Auth_OpenID_GenericConsumer {
/** /**
* @access private * @access private
*/ */
function _complete_error($message, &$endpoint, $unused) function _complete_error($message, $endpoint, $unused)
{ {
$error = $message->getArg(Auth_OpenID_OPENID_NS, 'error'); $error = $message->getArg(Auth_OpenID_OPENID_NS, 'error');
$contact = $message->getArg(Auth_OpenID_OPENID_NS, 'contact'); $contact = $message->getArg(Auth_OpenID_OPENID_NS, 'contact');
@ -705,7 +705,7 @@ class Auth_OpenID_GenericConsumer {
/** /**
* @access private * @access private
*/ */
function _complete_setup_needed($message, &$endpoint, $unused) function _complete_setup_needed($message, $endpoint, $unused)
{ {
if (!$message->isOpenID2()) { if (!$message->isOpenID2()) {
return $this->_completeInvalid($message, $endpoint); return $this->_completeInvalid($message, $endpoint);
@ -719,7 +719,7 @@ class Auth_OpenID_GenericConsumer {
/** /**
* @access private * @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 = $message->getArg(Auth_OpenID_OPENID1_NS,
'user_setup_url'); 'user_setup_url');
@ -1181,7 +1181,7 @@ class Auth_OpenID_GenericConsumer {
// oidutil.log('Performing discovery on %s' % (claimed_id,)) // oidutil.log('Performing discovery on %s' % (claimed_id,))
list($unused, $services) = call_user_func($this->discoverMethod, list($unused, $services) = call_user_func($this->discoverMethod,
$claimed_id, $claimed_id,
$this->fetcher); &$this->fetcher);
if (!$services) { if (!$services) {
return new Auth_OpenID_FailureResponse(null, return new Auth_OpenID_FailureResponse(null,
@ -1197,7 +1197,7 @@ class Auth_OpenID_GenericConsumer {
* @access private * @access private
*/ */
function _verifyDiscoveryServices($claimed_id, function _verifyDiscoveryServices($claimed_id,
&$services, &$to_match_endpoints) $services, $to_match_endpoints)
{ {
// Search the services resulting from discovery to find one // Search the services resulting from discovery to find one
// that matches the information from the assertion // that matches the information from the assertion
@ -1216,8 +1216,8 @@ class Auth_OpenID_GenericConsumer {
} }
return new Auth_OpenID_FailureResponse(null, return new Auth_OpenID_FailureResponse(null,
sprintf('No matching endpoint found after discovering %s', sprintf('No matching endpoint found after discovering %s: %s',
$claimed_id)); $claimed_id, $result->message));
} }
/** /**
@ -1397,7 +1397,7 @@ class Auth_OpenID_GenericConsumer {
* *
* @access private * @access private
*/ */
function _httpResponseToMessage($response, $server_url) static function _httpResponseToMessage($response, $server_url)
{ {
// Should this function be named Message.fromHTTPResponse instead? // Should this function be named Message.fromHTTPResponse instead?
$response_message = Auth_OpenID_Message::fromKVForm($response->body); $response_message = Auth_OpenID_Message::fromKVForm($response->body);
@ -1461,7 +1461,7 @@ class Auth_OpenID_GenericConsumer {
* *
* @access private * @access private
*/ */
function _extractSupportedAssociationType(&$server_error, &$endpoint, function _extractSupportedAssociationType($server_error, $endpoint,
$assoc_type) $assoc_type)
{ {
// Any error message whose code is not 'unsupported-type' // Any error message whose code is not 'unsupported-type'
@ -1566,7 +1566,7 @@ class Auth_OpenID_GenericConsumer {
/** /**
* @access private * @access private
*/ */
function _extractAssociation(&$assoc_response, &$assoc_session) function _extractAssociation($assoc_response, $assoc_session)
{ {
// Extract the common fields from the response, raising an // Extract the common fields from the response, raising an
// exception if they are not found // 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 * class. Instances of this class are created by the library when
* needed. * needed.
*/ */
function Auth_OpenID_AuthRequest(&$endpoint, $assoc) function Auth_OpenID_AuthRequest($endpoint, $assoc)
{ {
$this->assoc = $assoc; $this->assoc = $assoc;
$this->endpoint =& $endpoint; $this->endpoint = $endpoint;
$this->return_to_args = array(); $this->return_to_args = array();
$this->message = new Auth_OpenID_Message( $this->message = new Auth_OpenID_Message(
$endpoint->preferredNamespace()); $endpoint->preferredNamespace());
@ -1764,7 +1764,7 @@ class Auth_OpenID_AuthRequest {
* $extension_request: An object that implements the extension * $extension_request: An object that implements the extension
* request interface for adding arguments to an OpenID message. * request interface for adding arguments to an OpenID message.
*/ */
function addExtension(&$extension_request) function addExtension($extension_request)
{ {
$extension_request->toMessage($this->message); $extension_request->toMessage($this->message);
} }
@ -2089,7 +2089,7 @@ class Auth_OpenID_SuccessResponse extends Auth_OpenID_ConsumerResponse {
foreach ($msg_args as $key => $value) { foreach ($msg_args as $key => $value) {
if (!$this->isSigned($ns_uri, $key)) { if (!$this->isSigned($ns_uri, $key)) {
return null; unset($msg_args[$key]);
} }
} }
@ -2167,7 +2167,7 @@ class Auth_OpenID_ServerErrorContainer {
/** /**
* @access private * @access private
*/ */
function fromMessage($message) static function fromMessage($message)
{ {
$error_text = $message->getArg( $error_text = $message->getArg(
Auth_OpenID_OPENID_NS, 'error', '<no error message supplied>'); 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 * @param int $num_bytes The length of the return value
* @return string $bytes random bytes * @return string $bytes random bytes
*/ */
function getBytes($num_bytes) static function getBytes($num_bytes)
{ {
static $f = null; static $f = null;
$bytes = ''; $bytes = '';
@ -77,7 +77,7 @@ class Auth_OpenID_CryptUtil {
* @return string $result A string of randomly-chosen characters * @return string $result A string of randomly-chosen characters
* from $chrs * from $chrs
*/ */
function randomString($length, $population = null) static function randomString($length, $population = null)
{ {
if ($population === null) { if ($population === null) {
return Auth_OpenID_CryptUtil::getBytes($length); 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) $private = null, $lib = null)
{ {
if ($lib === null) { if ($lib === null) {
$this->lib =& Auth_OpenID_getMathLib(); $this->lib = Auth_OpenID_getMathLib();
} else { } else {
$this->lib =& $lib; $this->lib = $lib;
} }
if ($mod === null) { 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_2_0,
Auth_OpenID_TYPE_1_2, Auth_OpenID_TYPE_1_2,
Auth_OpenID_TYPE_1_1, Auth_OpenID_TYPE_1_1,
Auth_OpenID_TYPE_1_0, Auth_OpenID_TYPE_1_0);
Auth_OpenID_RP_RETURN_TO_URL_TYPE); }
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); 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 // Construct an OP-Identifier OpenIDServiceEndpoint object for
// a given OP Endpoint URL // 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. * Parse the given document as XRDS looking for OpenID services.
* *
* @return array of Auth_OpenID_ServiceEndpoint or null if the * @return array of Auth_OpenID_ServiceEndpoint or null if the
* document cannot be parsed. * 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) { if ($xrds) {
$yadis_services = $yadis_services =
@ -197,7 +242,7 @@ class Auth_OpenID_ServiceEndpoint {
* @return array of Auth_OpenID_ServiceEndpoint or null if * @return array of Auth_OpenID_ServiceEndpoint or null if
* endpoints cannot be created. * endpoints cannot be created.
*/ */
function fromDiscoveryResult($discoveryResult) static function fromDiscoveryResult($discoveryResult)
{ {
if ($discoveryResult->isXRDS()) { if ($discoveryResult->isXRDS()) {
return Auth_OpenID_ServiceEndpoint::fromXRDS( 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( $discovery_types = array(
array(Auth_OpenID_TYPE_2_0, array(Auth_OpenID_TYPE_2_0,
@ -273,7 +318,7 @@ function Auth_OpenID_findOPLocalIdentifier($service, $type_uris)
$service->parser->registerNamespace('xrd', $service->parser->registerNamespace('xrd',
Auth_Yadis_XMLNS_XRD_2_0); Auth_Yadis_XMLNS_XRD_2_0);
$parser =& $service->parser; $parser = $service->parser;
$permitted_tags = array(); $permitted_tags = array();
@ -305,7 +350,7 @@ function Auth_OpenID_findOPLocalIdentifier($service, $type_uris)
return $local_id; return $local_id;
} }
function filter_MatchesAnyOpenIDType(&$service) function filter_MatchesAnyOpenIDType($service)
{ {
$uris = $service->getTypes(); $uris = $service->getTypes();
@ -318,6 +363,19 @@ function filter_MatchesAnyOpenIDType(&$service)
return false; 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) function Auth_OpenID_bestMatchingService($service, $preferred_types)
{ {
// Return the index of the first matching type, or something // Return the index of the first matching type, or something
@ -415,7 +473,7 @@ function Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services)
return $s; return $s;
} }
function Auth_OpenID_discoverWithYadis($uri, &$fetcher, function Auth_OpenID_discoverWithYadis($uri, $fetcher,
$endpoint_filter='Auth_OpenID_getOPOrUserServices', $endpoint_filter='Auth_OpenID_getOPOrUserServices',
$discover_function=null) $discover_function=null)
{ {
@ -433,12 +491,12 @@ function Auth_OpenID_discoverWithYadis($uri, &$fetcher,
$openid_services = array(); $openid_services = array();
$response = call_user_func_array($discover_function, $response = call_user_func_array($discover_function,
array($uri, &$fetcher)); array($uri, $fetcher));
$yadis_url = $response->normalized_uri; $yadis_url = $response->normalized_uri;
$yadis_services = array(); $yadis_services = array();
if ($response->isFailure()) { if ($response->isFailure() && !$response->isXRDS()) {
return array($uri, array()); return array($uri, array());
} }
@ -460,18 +518,18 @@ function Auth_OpenID_discoverWithYadis($uri, &$fetcher,
} }
$openid_services = call_user_func_array($endpoint_filter, $openid_services = call_user_func_array($endpoint_filter,
array(&$openid_services)); array($openid_services));
return array($yadis_url, $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); $uri = Auth_OpenID::normalizeUrl($uri);
return Auth_OpenID_discoverWithYadis($uri, $fetcher); return Auth_OpenID_discoverWithYadis($uri, $fetcher);
} }
function Auth_OpenID_discoverWithoutYadis($uri, &$fetcher) function Auth_OpenID_discoverWithoutYadis($uri, $fetcher)
{ {
$http_resp = @$fetcher->get($uri); $http_resp = @$fetcher->get($uri);
@ -490,7 +548,7 @@ function Auth_OpenID_discoverWithoutYadis($uri, &$fetcher)
return array($identity_url, $openid_services); return array($identity_url, $openid_services);
} }
function Auth_OpenID_discoverXRI($iname, &$fetcher) function Auth_OpenID_discoverXRI($iname, $fetcher)
{ {
$resolver = new Auth_Yadis_ProxyResolver($fetcher); $resolver = new Auth_Yadis_ProxyResolver($fetcher);
list($canonicalID, $yadis_services) = list($canonicalID, $yadis_services) =
@ -513,7 +571,7 @@ function Auth_OpenID_discoverXRI($iname, &$fetcher)
return array($iname, $openid_services); 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 // If the fetcher (i.e., PHP) doesn't support SSL, we can't do
// discovery on an HTTPS URL. // discovery on an HTTPS URL.
@ -545,4 +603,4 @@ function Auth_OpenID_discover($uri, &$fetcher)
return $result; 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. * Returns the message with the extension arguments added.
*/ */
function toMessage(&$message) function toMessage($message)
{ {
$implicit = $message->isOpenID1(); $implicit = $message->isOpenID1();
$added = $message->namespaces->addAlias($this->ns_uri, $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 ) { if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
return False; return false;
} }
if ($server_url) { if ($server_url) {
@ -519,7 +519,7 @@ class Auth_OpenID_FileStore extends Auth_OpenID_OpenIDStore {
/** /**
* @access private * @access private
*/ */
function _mkdtemp($dir) static function _mkdtemp($dir)
{ {
foreach (range(0, 4) as $i) { foreach (range(0, 4) as $i) {
$name = $dir . strval(DIRECTORY_SEPARATOR) . strval(getmypid()) . $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); 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 * @static
* @access private * @access private
*/ */
function toArray($kvs, $strict=false) static function toArray($kvs, $strict=false)
{ {
$lines = explode("\n", $kvs); $lines = explode("\n", $kvs);
@ -78,7 +78,7 @@ class Auth_OpenID_KVForm {
* @static * @static
* @access private * @access private
*/ */
function fromArray($values) static function fromArray($values)
{ {
if ($values === null) { if ($values === null) {
return 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 * Returns true if $thing is an Auth_OpenID_Mapping object; false
* if not. * if not.
*/ */
function isA($thing) static function isA($thing)
{ {
return (is_object($thing) && return (is_object($thing) &&
strtolower(get_class($thing)) == 'auth_openid_mapping'); strtolower(get_class($thing)) == 'auth_openid_mapping');
@ -442,7 +442,7 @@ class Auth_OpenID_Message {
return $this->getOpenIDNamespace() == Auth_OpenID_OPENID2_NS; return $this->getOpenIDNamespace() == Auth_OpenID_OPENID2_NS;
} }
function fromPostArgs($args) static function fromPostArgs($args)
{ {
// Construct a Message containing a set of POST arguments // Construct a Message containing a set of POST arguments
$obj = new Auth_OpenID_Message(); $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. // Takes an array.
@ -594,7 +594,7 @@ class Auth_OpenID_Message {
return $this->_openid_ns_uri; return $this->_openid_ns_uri;
} }
function fromKVForm($kvform_string) static function fromKVForm($kvform_string)
{ {
// Create a Message from a KVForm string // Create a Message from a KVForm string
return Auth_OpenID_Message::fromOpenIDArgs( 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; 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'); 'http://schemas.openid.net/pape/policies/2007/06/phishing-resistant');
define('PAPE_TIME_VALIDATOR', 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 * A Provider Authentication Policy request, sent from a relying party
* to a provider * 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_* * Instantiate a Request object from the arguments in a checkid_*
* OpenID message * OpenID message
*/ */
function fromOpenIDRequest($request) static function fromOpenIDRequest($request)
{ {
$obj = new Auth_OpenID_PAPE_Request(); $obj = new Auth_OpenID_PAPE_Request();
$args = $request->message->getArgs(Auth_OpenID_PAPE_NS_URI); $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 * @returns: A provider authentication policy response from the
* data that was supplied with the id_res response. * data that was supplied with the id_res response.
*/ */
function fromSuccessResponse($success_response) static function fromSuccessResponse($success_response)
{ {
$obj = new Auth_OpenID_PAPE_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'); $auth_time = Auth_OpenID::arrayGet($args, 'auth_time');
if ($auth_time !== null) { if ($auth_time !== null) {
if (ereg(PAPE_TIME_VALIDATOR, $auth_time)) { if (preg_match(PAPE_TIME_VALIDATOR, $auth_time)) {
$this->auth_time = $auth_time; $this->auth_time = $auth_time;
} else if ($strict) { } else if ($strict) {
return false; return false;
@ -287,7 +287,7 @@ class Auth_OpenID_PAPE_Response extends Auth_OpenID_Extension {
} }
if ($this->auth_time !== null) { if ($this->auth_time !== null) {
if (!ereg(PAPE_TIME_VALIDATOR, $this->auth_time)) { if (!preg_match(PAPE_TIME_VALIDATOR, $this->auth_time)) {
return false; 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 * Starts with the tag name at a word boundary, where the tag name
* is not a namespace * 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\/<>]+)'; var $_attr_find = '\b(\w+)=("[^"]*"|\'[^\']*\'|[^\'"\s\/<>]+)';
@ -216,10 +216,30 @@ class Auth_OpenID_Parse {
} }
} }
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 * Find all link tags in a string representing a HTML document and
* return a list of their attributes. * 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 * @param string $html The text to parse
* @return array $list An array of arrays of attributes, one for each * @return array $list An array of arrays of attributes, one for each
* link tag * link tag
@ -244,18 +264,23 @@ class Auth_OpenID_Parse {
$stripped = substr($stripped, $html_begin, $stripped = substr($stripped, $html_begin,
$html_end - $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. // Try to find the <HEAD> tag.
$head_re = $this->headFind(); $head_re = $this->headFind();
$head_matches = array(); $head_match = '';
if (!preg_match($head_re, $stripped, $head_matches)) { if (!$this->match($head_re, $stripped, $head_match)) {
ini_set( 'pcre.backtrack_limit', $old_btlimit );
return array(); return array();
} }
$link_data = array(); $link_data = array();
$link_matches = 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)) { $link_matches)) {
ini_set( 'pcre.backtrack_limit', $old_btlimit );
return array(); return array();
} }
@ -273,6 +298,7 @@ class Auth_OpenID_Parse {
$link_data[] = $link_attrs; $link_data[] = $link_attrs;
} }
ini_set( 'pcre.backtrack_limit', $old_btlimit );
return $link_data; 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 * @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 * @access private
*/ */
@ -89,8 +79,6 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
$associations_table = null, $associations_table = null,
$nonces_table = null) $nonces_table = null)
{ {
global $__Auth_OpenID_PEAR_AVAILABLE;
$this->associations_table_name = "oid_associations"; $this->associations_table_name = "oid_associations";
$this->nonces_table_name = "oid_nonces"; $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 // constant, so only try to use it if PEAR is present. Note
// that Auth_Openid_Databaseconnection instances need not // that Auth_Openid_Databaseconnection instances need not
// implement ::setFetchMode for this reason. // implement ::setFetchMode for this reason.
if ($__Auth_OpenID_PEAR_AVAILABLE) { if (is_subclass_of($this->connection, 'db_common')) {
$this->connection->setFetchMode(DB_FETCHMODE_ASSOC); $this->connection->setFetchMode(DB_FETCHMODE_ASSOC);
} }
@ -482,7 +470,7 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
global $Auth_OpenID_SKEW; global $Auth_OpenID_SKEW;
if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) { if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
return False; return false;
} }
return $this->_add_nonce($server_url, $timestamp, $salt); 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. * $endpoint: The endpoint object as returned by OpenID discovery.
* returns whether an sreg type was advertised by the endpoint * 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) || return ($endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_1) ||
$endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_0)); $endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_0));
@ -122,7 +122,7 @@ class Auth_OpenID_SRegBase extends Auth_OpenID_Extension {
* *
* @access private * @access private
*/ */
function _getSRegNS(&$message) static function _getSRegNS($message)
{ {
$alias = null; $alias = null;
$found_ns_uri = null; $found_ns_uri = null;
@ -173,7 +173,7 @@ class Auth_OpenID_SRegRequest extends Auth_OpenID_SRegBase {
/** /**
* Initialize an empty simple registration request. * Initialize an empty simple registration request.
*/ */
function build($required=null, $optional=null, static function build($required=null, $optional=null,
$policy_url=null, $policy_url=null,
$sreg_ns_uri=Auth_OpenID_SREG_NS_URI, $sreg_ns_uri=Auth_OpenID_SREG_NS_URI,
$cls='Auth_OpenID_SRegRequest') $cls='Auth_OpenID_SRegRequest')
@ -213,7 +213,7 @@ class Auth_OpenID_SRegRequest extends Auth_OpenID_SRegBase {
* *
* Returns the newly created simple registration request * 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'), $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 * string (unicode) value. For instance, the nickname should be
* stored under the key 'nickname'. * stored under the key 'nickname'.
*/ */
function extractResponse($request, $data) static function extractResponse($request, $data)
{ {
$obj = new Auth_OpenID_SRegResponse(); $obj = new Auth_OpenID_SRegResponse();
$obj->ns_uri = $request->ns_uri; $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 * Returns a simple registration response containing the data that
* was supplied with the C{id_res} response. * 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; 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 * consumers to add extensions to their requests. For example, with
* sites using the Simple Registration * sites using the Simple Registration
* Extension * 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 user can agree to have their nickname and e-mail address sent to
* a site when they sign up. * a site when they sign up.
* *
@ -365,7 +365,7 @@ class Auth_OpenID_CheckAuthRequest extends Auth_OpenID_Request {
$this->message = null; $this->message = null;
} }
function fromMessage($message, $server=null) static function fromMessage($message, $server=null)
{ {
$required_keys = array('assoc_handle', 'sig', 'signed'); $required_keys = array('assoc_handle', 'sig', 'signed');
@ -396,7 +396,7 @@ class Auth_OpenID_CheckAuthRequest extends Auth_OpenID_Request {
return $result; return $result;
} }
function answer(&$signatory) function answer($signatory)
{ {
$is_valid = $signatory->verify($this->assoc_handle, $this->signed); $is_valid = $signatory->verify($this->assoc_handle, $this->signed);
@ -436,7 +436,7 @@ class Auth_OpenID_PlainTextServerSession {
var $needs_math = false; var $needs_math = false;
var $allowed_assoc_types = array('HMAC-SHA1', 'HMAC-SHA256'); var $allowed_assoc_types = array('HMAC-SHA1', 'HMAC-SHA256');
function fromMessage($unused_request) static function fromMessage($unused_request)
{ {
return new Auth_OpenID_PlainTextServerSession(); return new Auth_OpenID_PlainTextServerSession();
} }
@ -469,7 +469,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
$this->consumer_pubkey = $consumer_pubkey; $this->consumer_pubkey = $consumer_pubkey;
} }
function getDH($message) static function getDH($message)
{ {
$dh_modulus = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_modulus'); $dh_modulus = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_modulus');
$dh_gen = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_gen'); $dh_gen = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_gen');
@ -489,7 +489,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
$missing); $missing);
} }
$lib =& Auth_OpenID_getMathLib(); $lib = Auth_OpenID_getMathLib();
if ($dh_modulus || $dh_gen) { if ($dh_modulus || $dh_gen) {
$dh_modulus = $lib->base64ToLong($dh_modulus); $dh_modulus = $lib->base64ToLong($dh_modulus);
@ -523,7 +523,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
return array($dh, $consumer_pubkey); return array($dh, $consumer_pubkey);
} }
function fromMessage($message) static function fromMessage($message)
{ {
$result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message); $result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message);
@ -538,7 +538,7 @@ class Auth_OpenID_DiffieHellmanSHA1ServerSession {
function answer($secret) function answer($secret)
{ {
$lib =& Auth_OpenID_getMathLib(); $lib = Auth_OpenID_getMathLib();
$mac_key = $this->dh->xorSecret($this->consumer_pubkey, $secret, $mac_key = $this->dh->xorSecret($this->consumer_pubkey, $secret,
$this->hash_func); $this->hash_func);
return array( return array(
@ -560,7 +560,7 @@ class Auth_OpenID_DiffieHellmanSHA256ServerSession
var $hash_func = 'Auth_OpenID_SHA256'; var $hash_func = 'Auth_OpenID_SHA256';
var $allowed_assoc_types = array('HMAC-SHA256'); var $allowed_assoc_types = array('HMAC-SHA256');
function fromMessage($message) static function fromMessage($message)
{ {
$result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message); $result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message);
@ -582,7 +582,7 @@ class Auth_OpenID_DiffieHellmanSHA256ServerSession
class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request { class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
var $mode = "associate"; var $mode = "associate";
function getSessionClasses() static function getSessionClasses()
{ {
return array( return array(
'no-encryption' => 'Auth_OpenID_PlainTextServerSession', 'no-encryption' => 'Auth_OpenID_PlainTextServerSession',
@ -590,14 +590,14 @@ class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
'DH-SHA256' => 'Auth_OpenID_DiffieHellmanSHA256ServerSession'); '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->namespace = Auth_OpenID_OPENID2_NS;
$this->assoc_type = $assoc_type; $this->assoc_type = $assoc_type;
} }
function fromMessage($message, $server=null) static function fromMessage($message, $server=null)
{ {
if ($message->isOpenID1()) { if ($message->isOpenID1()) {
$session_type = $message->getArg(Auth_OpenID_OPENID_NS, $session_type = $message->getArg(Auth_OpenID_OPENID_NS,
@ -696,7 +696,7 @@ class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
'session_type', 'session_type',
$preferred_session_type); $preferred_session_type);
} }
$response->code = AUTH_OPENID_HTTP_ERROR;
return $response; return $response;
} }
} }
@ -734,7 +734,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
*/ */
var $namespace; 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) $immediate = false, $assoc_handle = null, $server = null)
{ {
if ($server === null) { if ($server === null) {
@ -752,7 +752,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
$assoc_handle, $server); $assoc_handle, $server);
$r->namespace = $message->getOpenIDNamespace(); $r->namespace = $message->getOpenIDNamespace();
$r->message =& $message; $r->message = $message;
if (!$r->trustRootValid()) { if (!$r->trustRootValid()) {
return new Auth_OpenID_UntrustedReturnURL($message, return new Auth_OpenID_UntrustedReturnURL($message,
@ -778,7 +778,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
} }
$this->return_to = $return_to; $this->return_to = $return_to;
$this->trust_root = $trust_root; $this->trust_root = $trust_root;
$this->server =& $server; $this->server = $server;
if ($immediate) { if ($immediate) {
$this->immediate = true; $this->immediate = true;
@ -817,11 +817,12 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
*/ */
function returnToVerified() function returnToVerified()
{ {
$fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
return call_user_func_array($this->verifyReturnTo, 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'); $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode');
$immediate = null; $immediate = null;
@ -1097,7 +1098,7 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
in OpenID 1.x immediate mode.'); in OpenID 1.x immediate mode.');
} }
$setup_request =& new Auth_OpenID_CheckIDRequest( $setup_request = new Auth_OpenID_CheckIDRequest(
$this->identity, $this->identity,
$this->return_to, $this->return_to,
$this->trust_root, $this->trust_root,
@ -1183,9 +1184,9 @@ class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
*/ */
class Auth_OpenID_ServerResponse { 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); $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. * Create a new signatory using a given store.
*/ */
function Auth_OpenID_Signatory(&$store) function Auth_OpenID_Signatory($store)
{ {
// assert store is not None // 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 * Encode an {@link Auth_OpenID_ServerResponse} and return an
* {@link Auth_OpenID_WebResponse}. * {@link Auth_OpenID_WebResponse}.
*/ */
function encode(&$response) function encode($response)
{ {
$cls = $this->responseFactory; $cls = $this->responseFactory;
@ -1463,10 +1464,14 @@ class Auth_OpenID_Encoder {
array('location' => $location)); array('location' => $location));
} else if ($encode_as == Auth_OpenID_ENCODE_HTML_FORM) { } else if ($encode_as == Auth_OpenID_ENCODE_HTML_FORM) {
$wr = new $cls(AUTH_OPENID_HTTP_OK, array(), $wr = new $cls(AUTH_OPENID_HTTP_OK, array(),
$response->toFormMarkup()); $response->toHTML());
} else { } else {
return new Auth_OpenID_EncodingError($response); 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; return $wr;
} }
} }
@ -1478,16 +1483,16 @@ class Auth_OpenID_Encoder {
*/ */
class Auth_OpenID_SigningEncoder extends 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 * Sign an {@link Auth_OpenID_ServerResponse} and return an
* {@link Auth_OpenID_WebResponse}. * {@link Auth_OpenID_WebResponse}.
*/ */
function encode(&$response) function encode($response)
{ {
// the isinstance is a bit of a kludge... it means there isn't // the isinstance is a bit of a kludge... it means there isn't
// really an adapter to make the interfaces quite match. // 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 { class Auth_OpenID_Decoder {
function Auth_OpenID_Decoder(&$server) function Auth_OpenID_Decoder($server)
{ {
$this->server =& $server; $this->server = $server;
$this->handlers = array( $this->handlers = array(
'checkid_setup' => 'Auth_OpenID_CheckIDRequest', 'checkid_setup' => 'Auth_OpenID_CheckIDRequest',
@ -1599,9 +1604,9 @@ class Auth_OpenID_Decoder {
* @package OpenID * @package OpenID
*/ */
class Auth_OpenID_EncodingError { 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 * @package OpenID
*/ */
class Auth_OpenID_Server { class Auth_OpenID_Server {
function Auth_OpenID_Server(&$store, $op_endpoint=null) function Auth_OpenID_Server($store, $op_endpoint=null)
{ {
$this->store =& $store; $this->store = $store;
$this->signatory =& new Auth_OpenID_Signatory($this->store); $this->signatory = new Auth_OpenID_Signatory($this->store);
$this->encoder =& new Auth_OpenID_SigningEncoder($this->signatory); $this->encoder = new Auth_OpenID_SigningEncoder($this->signatory);
$this->decoder =& new Auth_OpenID_Decoder($this); $this->decoder = new Auth_OpenID_Decoder($this);
$this->op_endpoint = $op_endpoint; $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)) { if (method_exists($this, "openid_" . $request->mode)) {
$handler = array($this, "openid_" . $request->mode); $handler = array($this, "openid_" . $request->mode);
return call_user_func($handler, $request); return call_user_func($handler, &$request);
} }
return null; return null;
} }
@ -1707,7 +1712,7 @@ class Auth_OpenID_Server {
/** /**
* The callback for 'check_authentication' messages. * The callback for 'check_authentication' messages.
*/ */
function openid_check_authentication(&$request) function openid_check_authentication($request)
{ {
return $request->answer($this->signatory); return $request->answer($this->signatory);
} }
@ -1715,7 +1720,7 @@ class Auth_OpenID_Server {
/** /**
* The callback for 'associate' messages. * The callback for 'associate' messages.
*/ */
function openid_associate(&$request) function openid_associate($request)
{ {
$assoc_type = $request->assoc_type; $assoc_type = $request->assoc_type;
$session_type = $request->session->session_type; $session_type = $request->session->session_type;
@ -1738,7 +1743,7 @@ class Auth_OpenID_Server {
* Encodes as response in the appropriate format suitable for * Encodes as response in the appropriate format suitable for
* sending to the user agent. * sending to the user agent.
*/ */
function encodeResponse(&$response) function encodeResponse($response)
{ {
return $this->encoder->encode($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 * @return The URL upon which relying party discovery should be
* run in order to verify the return_to URL * run in order to verify the return_to URL
*/ */
function buildDiscoveryURL($realm) static function buildDiscoveryURL($realm)
{ {
$parsed = Auth_OpenID_TrustRoot::_parse($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 * @return mixed $parsed Either an associative array of trust root
* parts or false if parsing failed. * parts or false if parsing failed.
*/ */
function _parse($trust_root) static function _parse($trust_root)
{ {
$trust_root = Auth_OpenID_urinorm($trust_root); $trust_root = Auth_OpenID_urinorm($trust_root);
if ($trust_root === null) { if ($trust_root === null) {
@ -199,7 +199,7 @@ class Auth_OpenID_TrustRoot {
* @param string $trust_root The trust root to check * @param string $trust_root The trust root to check
* @return bool $sanity Whether the trust root looks OK * @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); $parts = Auth_OpenID_TrustRoot::_parse($trust_root);
if ($parts === false) { if ($parts === false) {
@ -269,7 +269,7 @@ class Auth_OpenID_TrustRoot {
* @return bool $matches Whether the URL matches against the * @return bool $matches Whether the URL matches against the
* trust root * trust root
*/ */
function match($trust_root, $url) static function match($trust_root, $url)
{ {
$trust_root_parsed = Auth_OpenID_TrustRoot::_parse($trust_root); $trust_root_parsed = Auth_OpenID_TrustRoot::_parse($trust_root);
$url_parsed = Auth_OpenID_TrustRoot::_parse($url); $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 * @returns: The endpoint URL or None if the endpoint is not a
* relying party endpoint. * relying party endpoint.
*/ */
function filter_extractReturnURL(&$endpoint) function filter_extractReturnURL($endpoint)
{ {
if ($endpoint->matchTypes(array(Auth_OpenID_RP_RETURN_TO_URL_TYPE))) { if ($endpoint->matchTypes(array(Auth_OpenID_RP_RETURN_TO_URL_TYPE))) {
return $endpoint; 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 * Given a relying party discovery URL return a list of return_to
* URLs. * URLs.
*/ */
function Auth_OpenID_getAllowedReturnURLs($relying_party_url, &$fetcher, function Auth_OpenID_getAllowedReturnURLs($relying_party_url, $fetcher,
$discover_function=null) $discover_function=null)
{ {
if ($discover_function === null) { if ($discover_function === null) {
$discover_function = array('Auth_Yadis_Yadis', 'discover'); $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) = list($rp_url_after_redirects, $endpoints) =
Auth_Yadis_getServiceEndpoints($relying_party_url, $xrds_parse_cb, 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, call_user_func_array($discover_function,
array($relying_party_url, $fetcher)); array($relying_party_url, &$fetcher));
$return_to_urls = array(); $return_to_urls = array();
$matching_endpoints = Auth_OpenID_extractReturnURL($endpoints); $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 * @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') $_vrfy='Auth_OpenID_getAllowedReturnURLs')
{ {
$disco_url = Auth_OpenID_TrustRoot::buildDiscoveryURL($realm_str); $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, $allowable_urls = call_user_func_array($_vrfy,
array($disco_url, &$fetcher)); array($disco_url, $fetcher));
// The realm_str could not be parsed. // The realm_str could not be parsed.
if ($allowable_urls === false) { 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; return $scheme . '://' . $authority . $path . $query . $fragment;
} }
?>

View File

@ -115,12 +115,40 @@ class Auth_Yadis_HTTPFetcher {
/** /**
* @access private * @access private
*/ */
function _findRedirect($headers) function _findRedirect($headers, $url)
{ {
foreach ($headers as $line) { foreach ($headers as $line) {
if (strpos(strtolower($line), "location: ") === 0) { if (strpos(strtolower($line), "location: ") === 0) {
$parts = explode(" ", $line, 2); $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; 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 * @param string $session_key_suffix The optional session key
* suffix override. * suffix override.
*/ */
function Auth_Yadis_Discovery(&$session, $url, function Auth_Yadis_Discovery($session, $url,
$session_key_suffix = null) $session_key_suffix = null)
{ {
/// Initialize a discovery object /// Initialize a discovery object
$this->session =& $session; $this->session = $session;
$this->url = $url; $this->url = $url;
if ($session_key_suffix === null) { if ($session_key_suffix === null) {
$session_key_suffix = $this->DEFAULT_SUFFIX; $session_key_suffix = $this->DEFAULT_SUFFIX;
@ -405,7 +405,7 @@ class Auth_Yadis_Discovery {
* Return the next authentication service for the pair of * Return the next authentication service for the pair of
* user_input and session. This function handles fallback. * user_input and session. This function handles fallback.
*/ */
function getNextService($discover_cb, &$fetcher) function getNextService($discover_cb, $fetcher)
{ {
$manager = $this->getManager(); $manager = $this->getManager();
if (!$manager || (!$manager->services)) { if (!$manager || (!$manager->services)) {
@ -413,7 +413,7 @@ class Auth_Yadis_Discovery {
list($yadis_url, $services) = call_user_func($discover_cb, list($yadis_url, $services) = call_user_func($discover_cb,
$this->url, $this->url,
$fetcher); &$fetcher);
$manager = $this->createManager($services, $yadis_url); $manager = $this->createManager($services, $yadis_url);
} }
@ -466,7 +466,7 @@ class Auth_Yadis_Discovery {
* @param $force True if the manager should be returned regardless * @param $force True if the manager should be returned regardless
* of whether it's a manager for $this->url. * 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 // Extract the YadisServiceManager for this object's URL and
// suffix from the session. // suffix from the session.
@ -481,16 +481,13 @@ class Auth_Yadis_Discovery {
if ($manager && ($manager->forURL($this->url) || $force)) { if ($manager && ($manager->forURL($this->url) || $force)) {
return $manager; return $manager;
} else {
$unused = null;
return $unused;
} }
} }
/** /**
* @access private * @access private
*/ */
function &createManager($services, $yadis_url = null) function createManager($services, $yadis_url = null)
{ {
$key = $this->getSessionKey(); $key = $this->getSessionKey();
if ($this->getManager()) { if ($this->getManager()) {
@ -504,10 +501,6 @@ class Auth_Yadis_Discovery {
$this->session->set($this->session_key, $this->session->set($this->session_key,
serialize($loader->toSession($manager))); serialize($loader->toSession($manager)));
return $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; return strpos($s, $stuff) === 0;
} }
?>

View File

@ -109,9 +109,9 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
} }
curl_setopt($c, CURLOPT_WRITEFUNCTION, curl_setopt($c, CURLOPT_WRITEFUNCTION,
array(&$this, "_writeData")); array($this, "_writeData"));
curl_setopt($c, CURLOPT_HEADERFUNCTION, curl_setopt($c, CURLOPT_HEADERFUNCTION,
array(&$this, "_writeHeader")); array($this, "_writeHeader"));
if ($extra_headers) { if ($extra_headers) {
curl_setopt($c, CURLOPT_HTTPHEADER, $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_TIMEOUT, $off);
curl_setopt($c, CURLOPT_URL, $url); 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); curl_exec($c);
$code = curl_getinfo($c, CURLINFO_HTTP_CODE); $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))) { if (in_array($code, array(301, 302, 303, 307))) {
$url = $this->_findRedirect($headers); $url = $this->_findRedirect($headers, $url);
$redir = true; $redir = true;
} else { } else {
$redir = false; $redir = false;
curl_close($c); 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(); $new_headers = array();
foreach ($headers as $header) { 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_TIMEOUT, $this->timeout);
curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_WRITEFUNCTION, 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); curl_exec($c);
@ -198,9 +212,15 @@ class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
if (!$code) { if (!$code) {
Auth_OpenID::log("Got no response code when fetching %s", $url); 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; 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; $body = $this->data;
curl_close($c); 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]; $code = $http_code[1];
if (in_array($code, array('301', '302'))) { if (in_array($code, array('301', '302'))) {
$url = $this->_findRedirect($headers); $url = $this->_findRedirect($headers, $url);
$redir = true; $redir = true;
} else { } else {
$redir = false; $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 * @param Auth_Yadis_XMLParser $parser An instance of a
* Auth_Yadis_XMLParser subclass. * Auth_Yadis_XMLParser subclass.
*/ */
function Auth_Yadis_setDefaultParser(&$parser) function Auth_Yadis_setDefaultParser($parser)
{ {
global $__Auth_Yadis_defaultParser; global $__Auth_Yadis_defaultParser;
$__Auth_Yadis_defaultParser =& $parser; $__Auth_Yadis_defaultParser = $parser;
} }
function Auth_Yadis_getSupportedExtensions() function Auth_Yadis_getSupportedExtensions()
{ {
return array( return array('dom' => 'Auth_Yadis_dom',
'dom' => array('classname' => 'Auth_Yadis_dom', 'domxml' => 'Auth_Yadis_domxml');
'libname' => array('dom.so', 'dom.dll')),
'domxml' => array('classname' => 'Auth_Yadis_domxml',
'libname' => array('domxml.so', 'php_domxml.dll')),
);
} }
/** /**
@ -332,7 +328,7 @@ function Auth_Yadis_getSupportedExtensions()
* Auth_Yadis_setDefaultParser has been called, the parser used in * Auth_Yadis_setDefaultParser has been called, the parser used in
* that call will be returned instead. * that call will be returned instead.
*/ */
function &Auth_Yadis_getXMLParser() function Auth_Yadis_getXMLParser()
{ {
global $__Auth_Yadis_defaultParser; global $__Auth_Yadis_defaultParser;
@ -340,35 +336,17 @@ function &Auth_Yadis_getXMLParser()
return $__Auth_Yadis_defaultParser; return $__Auth_Yadis_defaultParser;
} }
$p = null; foreach(Auth_Yadis_getSupportedExtensions() as $extension => $classname)
$classname = null; {
if (extension_loaded($extension))
$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(); $p = new $classname();
return $p;
}
}
if (!isset($p)) {
trigger_error('No XML parser was found', E_USER_ERROR);
} else {
Auth_Yadis_setDefaultParser($p); 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 * Instantiate a Auth_Yadis_XRDS object. Requires an XPath
* instance which has been used to parse a valid XRDS document. * 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->xrdNode = $xrdNodes[count($xrdNodes) - 1];
$this->allXrdNodes =& $xrdNodes; $this->allXrdNodes = $xrdNodes;
$this->serviceList = array(); $this->serviceList = array();
$this->_parse(); $this->_parse();
} }
@ -273,7 +273,7 @@ class Auth_Yadis_XRDS {
* @return mixed $xrds An instance of Auth_Yadis_XRDS or null, * @return mixed $xrds An instance of Auth_Yadis_XRDS or null,
* depending on the validity of $xml_string * 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; $_null = null;
@ -352,9 +352,9 @@ class Auth_Yadis_XRDS {
$services = $this->parser->evalXPath('xrd:Service', $this->xrdNode); $services = $this->parser->evalXPath('xrd:Service', $this->xrdNode);
foreach ($services as $node) { foreach ($services as $node) {
$s =& new Auth_Yadis_Service(); $s = new Auth_Yadis_Service();
$s->element = $node; $s->element = $node;
$s->parser =& $this->parser; $s->parser = $this->parser;
$priority = $s->getPriority(); $priority = $s->getPriority();
@ -428,7 +428,8 @@ class Auth_Yadis_XRDS {
$matches = 0; $matches = 0;
foreach ($filters as $filter) { foreach ($filters as $filter) {
if (call_user_func_array($filter, array($service))) {
if (call_user_func_array($filter, array(&$service))) {
$matches++; $matches++;
if ($filter_mode == SERVICES_YADIS_MATCH_ANY) { 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. // Now nodes are in reverse order.
$xrd_list = array_reverse($xrds->allXrdNodes); $xrd_list = array_reverse($xrds->allXrdNodes);
$parser =& $xrds->parser; $parser = $xrds->parser;
$node = $xrd_list[0]; $node = $xrd_list[0];
$canonicalID_nodes = $parser->evalXPath('xrd:CanonicalID', $node); $canonicalID_nodes = $parser->evalXPath('xrd:CanonicalID', $node);
@ -231,4 +231,4 @@ function Auth_Yadis_getCanonicalID($iname, $xrds)
return $canonicalID; return $canonicalID;
} }
?>

View File

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

View File

@ -271,11 +271,13 @@ class ApiAction extends Action
// Is the requesting user following this user? // Is the requesting user following this user?
$twitter_user['following'] = false; $twitter_user['following'] = false;
$twitter_user['statusnet:blocking'] = false;
$twitter_user['notifications'] = false; $twitter_user['notifications'] = false;
if (isset($this->auth_user)) { if (isset($this->auth_user)) {
$twitter_user['following'] = $this->auth_user->isSubscribed($profile); $twitter_user['following'] = $this->auth_user->isSubscribed($profile);
$twitter_user['statusnet:blocking'] = $this->auth_user->hasBlocked($profile);
// Notifications on? // Notifications on?
$sub = Subscription::pkeyGet(array('subscriber' => $sub = Subscription::pkeyGet(array('subscriber' =>
@ -410,10 +412,21 @@ class ApiAction extends Action
function twitterGroupArray($group) function twitterGroupArray($group)
{ {
$twitter_group = array(); $twitter_group = array();
$twitter_group['id'] = $group->id; $twitter_group['id'] = $group->id;
$twitter_group['url'] = $group->permalink(); $twitter_group['url'] = $group->permalink();
$twitter_group['nickname'] = $group->nickname; $twitter_group['nickname'] = $group->nickname;
$twitter_group['fullname'] = $group->fullname; $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['original_logo'] = $group->original_logo;
$twitter_group['homepage_logo'] = $group->homepage_logo; $twitter_group['homepage_logo'] = $group->homepage_logo;
$twitter_group['stream_logo'] = $group->stream_logo; $twitter_group['stream_logo'] = $group->stream_logo;
@ -423,6 +436,7 @@ class ApiAction extends Action
$twitter_group['location'] = $group->location; $twitter_group['location'] = $group->location;
$twitter_group['created'] = $this->dateTwitter($group->created); $twitter_group['created'] = $this->dateTwitter($group->created);
$twitter_group['modified'] = $this->dateTwitter($group->modified); $twitter_group['modified'] = $this->dateTwitter($group->modified);
return $twitter_group; 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) function getTargetGroup($id)
{ {
if (empty($id)) { if (empty($id)) {

View File

@ -96,4 +96,23 @@ class AtomGroupNoticeFeed extends AtomNoticeFeed
return $this->group; 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( $this->addNamespace(
'statusnet', 'statusnet',
'http://status.net/ont/' 'http://status.net/schema/api/1/'
); );
} }

View File

@ -76,8 +76,8 @@ class AvatarLink
$alink = new AvatarLink(); $alink = new AvatarLink();
$alink->url = $filename; $alink->url = $filename;
$alink->height = $size; $alink->height = $size;
if (!empty($filename)) {
$alink->width = $size; $alink->width = $size;
if (!empty($filename)) {
$alink->type = self::mediatype($filename); $alink->type = self::mediatype($filename);
} else { } else {
$alink->url = User_group::defaultLogo($size); $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 //exit with 200 response, if this is checking fancy from the installer
if (isset($_REQUEST['p']) && $_REQUEST['p'] == 'check-fancy') { exit; } 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('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_PROFILE_SIZE', 96);
define('AVATAR_STREAM_SIZE', 48); define('AVATAR_STREAM_SIZE', 48);

View File

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

View File

@ -180,7 +180,8 @@ class MediaFile
return; return;
} }
$mimetype = MediaFile::getUploadedFileType($_FILES[$param]['tmp_name']); $mimetype = MediaFile::getUploadedFileType($_FILES[$param]['tmp_name'],
$_FILES[$param]['name']);
$filename = null; $filename = null;
@ -241,19 +242,41 @@ class MediaFile
return new MediaFile($user, $filename, $mimetype); 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.php';
require_once 'MIME/Type/Extension.php';
$mte = new MIME_Type_Extension();
$cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd'); $cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd');
$cmd = common_config('attachments', 'filecommand'); $cmd = common_config('attachments', 'filecommand');
$filetype = null; $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)) { if (is_string($f)) {
// assuming a filename // assuming a filename
$filetype = MIME_Type::autoDetect($f); $filetype = MIME_Type::autoDetect($f);
} else { } else {
// assuming a filehandle // assuming a filehandle
@ -262,7 +285,32 @@ class MediaFile
$filetype = MIME_Type::autoDetect($stream['uri']); $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; return $filetype;
} }
$media = MIME_Type::getMedia($filetype); $media = MIME_Type::getMedia($filetype);

View File

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

View File

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

View File

@ -55,10 +55,10 @@ class ThemeUploader
public static function fromUpload($name) public static function fromUpload($name)
{ {
if (!isset($_FILES[$name]['error'])) { 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) { 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']); return new ThemeUploader($_FILES[$name]['tmp_name']);
} }

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Afrikaans\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: af\n" "X-Language-Code: af\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n" "X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n" "X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n" "X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n" "X-Language-Code: br\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n" "X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -1135,13 +1135,12 @@ msgid "Theme for the site."
msgstr "Tema del lloc." msgstr "Tema del lloc."
#: actions/designadminpanel.php:467 #: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme" msgid "Custom theme"
msgstr "Tema del lloc" msgstr "Tema personalitzat"
#: actions/designadminpanel.php:471 #: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive." 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 #: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image" msgid "Change background image"
@ -1200,11 +1199,11 @@ msgstr "Enllaços"
#: actions/designadminpanel.php:651 #: actions/designadminpanel.php:651
msgid "Advanced" msgid "Advanced"
msgstr "" msgstr "Avançat"
#: actions/designadminpanel.php:655 #: actions/designadminpanel.php:655
msgid "Custom CSS" msgid "Custom CSS"
msgstr "" msgstr "CSS personalitzat"
#: actions/designadminpanel.php:676 lib/designsettings.php:247 #: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults" msgid "Use defaults"
@ -6876,48 +6875,48 @@ msgstr "Cap"
#: lib/themeuploader.php:50 #: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support." 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 #: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed." 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:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257 #: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272 #: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme." msgid "Failed saving theme."
msgstr "Error en actualitzar avatar." msgstr "Ha fallat el desament del tema."
#: lib/themeuploader.php:139 #: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure." 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 #: lib/themeuploader.php:166
#, php-format #, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed." msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr "" msgstr ""
"El tema pujat és massa gran; ha de tenir menys de %d bytes descomprimit."
#: lib/themeuploader.php:178 #: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css" 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 #: lib/themeuploader.php:205
msgid "" msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, " "Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign." "digits, underscore, and minus sign."
msgstr "" 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 #: lib/themeuploader.php:216
#, php-format #, php-format
msgid "Theme contains file of type '.%s', which is not allowed." 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 #: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive." 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 #: lib/topposterssection.php:74
msgid "Top posters" msgid "Top posters"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n" "X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

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

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n" "X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -12,11 +12,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n" "X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -1,5 +1,6 @@
# Translation of StatusNet to Spanish # Translation of StatusNet to Spanish
# #
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Crazymadlover # Author@translatewiki.net: Crazymadlover
# Author@translatewiki.net: Locos epraix # Author@translatewiki.net: Locos epraix
# Author@translatewiki.net: McDutchie # Author@translatewiki.net: McDutchie
@ -15,11 +16,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n" "X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -1135,13 +1136,12 @@ msgid "Theme for the site."
msgstr "Tema para el sitio." msgstr "Tema para el sitio."
#: actions/designadminpanel.php:467 #: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme" msgid "Custom theme"
msgstr "Tema del sitio" msgstr "Personalizar tema"
#: actions/designadminpanel.php:471 #: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive." 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 #: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image" msgid "Change background image"
@ -1201,11 +1201,11 @@ msgstr "Vínculos"
#: actions/designadminpanel.php:651 #: actions/designadminpanel.php:651
msgid "Advanced" msgid "Advanced"
msgstr "" msgstr "Avanzado"
#: actions/designadminpanel.php:655 #: actions/designadminpanel.php:655
msgid "Custom CSS" msgid "Custom CSS"
msgstr "" msgstr "Personalizar CSS"
#: actions/designadminpanel.php:676 lib/designsettings.php:247 #: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults" msgid "Use defaults"
@ -6885,48 +6885,48 @@ msgstr "Ninguno"
#: lib/themeuploader.php:50 #: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support." 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 #: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed." 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:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257 #: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272 #: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme." msgid "Failed saving theme."
msgstr "Error al actualizar la imagen." msgstr "Grabado de tema errado."
#: lib/themeuploader.php:139 #: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure." msgid "Invalid theme: bad directory structure."
msgstr "" msgstr "Tema inválido: mala estructura de directorio."
#: lib/themeuploader.php:166 #: lib/themeuploader.php:166
#, php-format #, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed." msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr "" msgstr ""
"Tema subido es demasiado grande; debe ser menor que %d bytes sin comprimir."
#: lib/themeuploader.php:178 #: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css" 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 #: lib/themeuploader.php:205
msgid "" msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, " "Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign." "digits, underscore, and minus sign."
msgstr "" 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 #: lib/themeuploader.php:216
#, php-format #, php-format
msgid "Theme contains file of type '.%s', which is not allowed." 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 #: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive." msgid "Error opening theme archive."
msgstr "Error al actualizar el perfil remoto." msgstr "Error al abrir archivo de tema."
#: lib/topposterssection.php:74 #: lib/topposterssection.php:74
msgid "Top posters" msgid "Top posters"

View File

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

View File

@ -11,11 +11,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n" "X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -16,11 +16,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n" "X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -1144,13 +1144,13 @@ msgid "Theme for the site."
msgstr "Thème pour le site." msgstr "Thème pour le site."
#: actions/designadminpanel.php:467 #: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme" msgid "Custom theme"
msgstr "Thème du site" msgstr "Thème personnalisé"
#: actions/designadminpanel.php:471 #: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr "" msgstr ""
"Vous pouvez importer un thème StatusNet personnalisé dans une archive .ZIP."
#: actions/designadminpanel.php:486 lib/designsettings.php:101 #: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image" msgid "Change background image"
@ -1210,11 +1210,11 @@ msgstr "Liens"
#: actions/designadminpanel.php:651 #: actions/designadminpanel.php:651
msgid "Advanced" msgid "Advanced"
msgstr "" msgstr "Avancé"
#: actions/designadminpanel.php:655 #: actions/designadminpanel.php:655
msgid "Custom CSS" msgid "Custom CSS"
msgstr "" msgstr "CSS personnalisé"
#: actions/designadminpanel.php:676 lib/designsettings.php:247 #: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults" msgid "Use defaults"
@ -6919,47 +6919,50 @@ msgstr "Aucun"
#: lib/themeuploader.php:50 #: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support." msgid "This server cannot handle theme uploads without ZIP support."
msgstr "" 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 #: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed." 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:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257 #: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272 #: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme." msgid "Failed saving theme."
msgstr "La mise à jour de lavatar a échoué." msgstr "Lenregistrement du thème a échoué."
#: lib/themeuploader.php:139 #: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure." msgid "Invalid theme: bad directory structure."
msgstr "" msgstr "Thème invalide : mauvaise arborescence."
#: lib/themeuploader.php:166 #: lib/themeuploader.php:166
#, php-format #, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed." msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr "" msgstr ""
"Le thème importé est trop volumineux. Non compressé, il doit occuper moins "
"de %d octets."
#: lib/themeuploader.php:178 #: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css" 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 #: lib/themeuploader.php:205
msgid "" msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, " "Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign." "digits, underscore, and minus sign."
msgstr "" 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 #: lib/themeuploader.php:216
#, php-format #, php-format
msgid "Theme contains file of type '.%s', which is not allowed." 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 #: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive." 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 #: lib/topposterssection.php:74
msgid "Top posters" msgid "Top posters"

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n" "X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Galician\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: gl\n" "X-Language-Code: gl\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"
@ -1132,13 +1132,13 @@ msgid "Theme for the site."
msgstr "Tema visual para o sitio." msgstr "Tema visual para o sitio."
#: actions/designadminpanel.php:467 #: actions/designadminpanel.php:467
#, fuzzy
msgid "Custom theme" msgid "Custom theme"
msgstr "Tema visual do sitio" msgstr "Tema visual personalizado"
#: actions/designadminpanel.php:471 #: actions/designadminpanel.php:471
msgid "You can upload a custom StatusNet theme as a .ZIP archive." msgid "You can upload a custom StatusNet theme as a .ZIP archive."
msgstr "" msgstr ""
"Pode cargar como arquivo .ZIP un tema visual personalizado para StatusNet"
#: actions/designadminpanel.php:486 lib/designsettings.php:101 #: actions/designadminpanel.php:486 lib/designsettings.php:101
msgid "Change background image" msgid "Change background image"
@ -1198,11 +1198,11 @@ msgstr "Ligazóns"
#: actions/designadminpanel.php:651 #: actions/designadminpanel.php:651
msgid "Advanced" msgid "Advanced"
msgstr "" msgstr "Avanzado"
#: actions/designadminpanel.php:655 #: actions/designadminpanel.php:655
msgid "Custom CSS" msgid "Custom CSS"
msgstr "" msgstr "CSS personalizado"
#: actions/designadminpanel.php:676 lib/designsettings.php:247 #: actions/designadminpanel.php:676 lib/designsettings.php:247
msgid "Use defaults" msgid "Use defaults"
@ -6878,47 +6878,50 @@ msgstr "Ningún"
#: lib/themeuploader.php:50 #: lib/themeuploader.php:50
msgid "This server cannot handle theme uploads without ZIP support." msgid "This server cannot handle theme uploads without ZIP support."
msgstr "" 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 #: lib/themeuploader.php:58 lib/themeuploader.php:61
#, fuzzy
msgid "Theme upload missing or failed." 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:91 lib/themeuploader.php:102
#: lib/themeuploader.php:253 lib/themeuploader.php:257 #: lib/themeuploader.php:253 lib/themeuploader.php:257
#: lib/themeuploader.php:265 lib/themeuploader.php:272 #: lib/themeuploader.php:265 lib/themeuploader.php:272
#, fuzzy
msgid "Failed saving theme." msgid "Failed saving theme."
msgstr "Non se puido actualizar o avatar." msgstr "Non se puido gardar o tema visual."
#: lib/themeuploader.php:139 #: lib/themeuploader.php:139
msgid "Invalid theme: bad directory structure." msgid "Invalid theme: bad directory structure."
msgstr "" msgstr "Tema visual inválido: a estrutura do directorio é incorrecta"
#: lib/themeuploader.php:166 #: lib/themeuploader.php:166
#, php-format #, php-format
msgid "Uploaded theme is too large; must be less than %d bytes uncompressed." msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
msgstr "" msgstr ""
"O tema visual cargado é grande de máis; o tamaño descomprimido non pode "
"superar os %d bytes."
#: lib/themeuploader.php:178 #: lib/themeuploader.php:178
msgid "Invalid theme archive: missing file css/display.css" 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 #: lib/themeuploader.php:205
msgid "" msgid ""
"Theme contains invalid file or folder name. Stick with ASCII letters, " "Theme contains invalid file or folder name. Stick with ASCII letters, "
"digits, underscore, and minus sign." "digits, underscore, and minus sign."
msgstr "" 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 #: lib/themeuploader.php:216
#, php-format #, php-format
msgid "Theme contains file of type '.%s', which is not allowed." 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 #: lib/themeuploader.php:234
#, fuzzy
msgid "Error opening theme archive." 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 #: lib/topposterssection.php:74
msgid "Top posters" msgid "Top posters"

View File

@ -8,11 +8,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n" "X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

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

View File

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

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n" "X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

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

View File

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

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n" "X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

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

View File

@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Norwegian (bokmål)\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n" "X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

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

View File

@ -9,11 +9,11 @@ msgstr ""
"Project-Id-Version: StatusNet\n" "Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-16 22:18+0000\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" "Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n" "X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n" "X-Message-Group: out-statusnet\n"

View File

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

View File

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

View File

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

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