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

This commit is contained in:
Brion Vibber
2010-04-06 15:22:23 -07:00
27 changed files with 6427 additions and 74 deletions

View File

@@ -55,9 +55,13 @@ class GeonamesPlugin extends Plugin
public $username = null;
public $token = null;
public $expiry = 7776000; // 90-day expiry
public $timeout = 2; // Web service timeout in seconds.
public $timeoutWindow = 60; // Further lookups in this process will be disabled for N seconds after a timeout.
public $cachePrefix = null; // Optional shared memcache prefix override
// to share lookups between local instances.
protected $lastTimeout = null; // timestamp of last web service timeout
/**
* convert a name into a Location object
*
@@ -437,9 +441,21 @@ class GeonamesPlugin extends Plugin
function getGeonames($method, $params)
{
$client = HTTPClient::start();
if ($this->lastTimeout && (time() - $this->lastTimeout < $this->timeoutWindow)) {
throw new Exception("skipping due to recent web service timeout");
}
$result = $client->get($this->wsUrl($method, $params));
$client = HTTPClient::start();
$client->setConfig('connect_timeout', $this->timeout);
$client->setConfig('timeout', $this->timeout);
try {
$result = $client->get($this->wsUrl($method, $params));
} catch (Exception $e) {
common_log(LOG_ERR, __METHOD__ . ": " . $e->getMessage());
$this->lastTimeout = time();
throw $e;
}
if (!$result->isOk()) {
throw new Exception("HTTP error code " . $result->code);

View File

@@ -65,6 +65,26 @@ class MeteorPlugin extends RealtimePlugin
parent::__construct();
}
/**
* Pull settings from config file/database if set.
*/
function initialize()
{
$settings = array('webserver',
'webport',
'controlport',
'controlserver',
'channelbase');
foreach ($settings as $name) {
$val = common_config('meteor', $name);
if ($val !== false) {
$this->$name = $val;
}
}
return parent::initialize();
}
function _getScripts()
{
$scripts = parent::_getScripts();

View File

@@ -73,9 +73,11 @@ class MobileProfilePlugin extends WAP20Plugin
$this->serveMobile = true;
} else {
// If they like the WAP 2.0 mimetype, serve them MP
if (strstr('application/vnd.wap.xhtml+xml', $type) !== false) {
$this->serveMobile = true;
} else {
// @fixme $type is undefined, making this if case useless and spewing errors.
// What's the intent?
//if (strstr('application/vnd.wap.xhtml+xml', $type) !== false) {
// $this->serveMobile = true;
//} else {
// If they are a mobile device that supports WAP 2.0,
// serve them MP
@@ -139,8 +141,19 @@ class MobileProfilePlugin extends WAP20Plugin
'windows ce'
);
$blacklist = array(
'ipad', // Larger screen handles the full theme fairly well.
);
$httpuseragent = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ($blacklist as $md) {
if (strstr($httpuseragent, $md) !== false) {
$this->serveMobile = false;
return true;
}
}
foreach ($this->mobiledevices as $md) {
if (strstr($httpuseragent, $md) !== false) {
$this->setMobileFeatures($httpuseragent);
@@ -149,7 +162,7 @@ class MobileProfilePlugin extends WAP20Plugin
break;
}
}
}
//}
// If they are okay with MP, and the site has a mobile server,
// redirect there
@@ -167,7 +180,9 @@ class MobileProfilePlugin extends WAP20Plugin
return true;
}
if (!$type) {
// @fixme $type is undefined, making this if case useless and spewing errors.
// What's the intent?
//if (!$type) {
$httpaccept = isset($_SERVER['HTTP_ACCEPT']) ?
$_SERVER['HTTP_ACCEPT'] : null;
@@ -180,7 +195,7 @@ class MobileProfilePlugin extends WAP20Plugin
throw new ClientException(_('This page is not available in a '.
'media type you accept'), 406);
}
}
//}
header('Content-Type: '.$type);
@@ -221,9 +236,12 @@ class MobileProfilePlugin extends WAP20Plugin
function onStartShowHeadElements($action)
{
if (!$action->serveMobile) {
return true;
}
// @fixme nothing appears to set a serveMobile on any action,
// so this is useless and spews errors. Is this supposed to be
// checking $this?
//if (!$action->serveMobile) {
// return true;
//}
$action->showTitle();
$action->showShortcutIcon();

View File

@@ -50,20 +50,47 @@ $encGroup = str_replace($marker, '%', $encGroup);
$sql = "SELECT * FROM ostatus_profile WHERE uri LIKE '%s' OR uri LIKE '%s'";
$oprofile->query(sprintf($sql, $encProfile, $encGroup));
echo "Found $oprofile->N bogus ostatus_profile entries for local users and groups:\n";
$count = $oprofile->N;
echo "Found $count bogus ostatus_profile entries shadowing local users and groups:\n";
while ($oprofile->fetch()) {
echo "$oprofile->uri";
if ($dry) {
echo " (unchanged)\n";
$uri = $oprofile->uri;
if (preg_match('!/group/(\d+)/id!', $oprofile->uri, $matches)) {
$id = intval($matches[1]);
$group = Local_group::staticGet('group_id', $id);
if ($group) {
$nick = $group->nickname;
} else {
$nick = '<deleted>';
}
echo "group $id ($nick) hidden by $uri";
} else if (preg_match('!/user/(\d+)!', $uri, $matches)) {
$id = intval($matches[1]);
$user = User::staticGet('id', $id);
if ($user) {
$nick = $user->nickname;
} else {
$nick = '<deleted>';
}
echo "user $id ($nick) hidden by $uri";
} else {
echo " removing bogus ostatus_profile entry...";
echo "$uri matched query, but we don't recognize it.\n";
continue;
}
if ($dry) {
echo " - skipping\n";
} else {
echo " - removing bogus ostatus_profile entry...";
$evil = clone($oprofile);
$evil->delete();
echo " ok\n";
}
}
echo "done.\n";
if ($count && $dry) {
echo "NO CHANGES MADE -- To delete the bogus entries, run again without --dry-run option.\n";
} else {
echo "done.\n";
}