From 98f064e4fdea8a143c207ca1b8da3e0b62b6405d Mon Sep 17 00:00:00 2001 From: Jean Baptiste Favre Date: Sat, 3 Sep 2011 21:11:31 +0200 Subject: [PATCH 1/2] Adds new feature to dispatch avatar url between different servers. That allows parallel download from most browsers. To avoid caching issue, server choice is "profile_id" based so that avatar from a specific user will always be served from same server. Introduce new configuration parameter: $config['avatar']['server_modulo'] = 5; Very easy to implement using, for example, DNS wildcard. For example, if you have following configuration: $config['avatar']['server'] = 'static_rrdns_.domain.tld'; $config['avatar']['server_modulo'] = 5; Then, when building avatar's URL, domain will become, depending on profile_id: static0.domain.tld static1.domain.tld static2.domain.tld static3.domain.tld static4.domain.tld --- classes/Avatar.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/classes/Avatar.php b/classes/Avatar.php index 6edc817685..636eb77f9c 100644 --- a/classes/Avatar.php +++ b/classes/Avatar.php @@ -103,7 +103,11 @@ class Avatar extends Memcached_DataObject { $server = common_config('avatar', 'server'); if ($server) { - return Avatar::url($this->filename); + if (common_config('avatar', 'server_modulo') && common_config('avatar', 'server_modulo') > 1 ){ + return str_replace( '_rrdns_', ( $this->profile_id % common_config('avatar', 'server_modulo') ), Avatar::url($this->filename) ); + }else{ + return Avatar::url($this->filename); + } } else { return $this->url; } From e25400b4f21b3cc83ff82b71050766df070e4b5d Mon Sep 17 00:00:00 2001 From: Jean Baptiste Favre Date: Sat, 3 Sep 2011 22:41:46 +0200 Subject: [PATCH 2/2] Fix BitlyUrl plugin. Since Bit.ly changed its API from v2 to v3, BitlyURL plugin doesn't work anymore. This fix API version issue and also imporve a little plugin performance in removing useless code. --- plugins/BitlyUrl/BitlyUrlPlugin.php | 53 +++++++++-------------------- 1 file changed, 17 insertions(+), 36 deletions(-) diff --git a/plugins/BitlyUrl/BitlyUrlPlugin.php b/plugins/BitlyUrl/BitlyUrlPlugin.php index b4f80a50a4..a3507356d7 100644 --- a/plugins/BitlyUrl/BitlyUrlPlugin.php +++ b/plugins/BitlyUrl/BitlyUrlPlugin.php @@ -38,7 +38,7 @@ require_once INSTALLDIR.'/plugins/UrlShortener/UrlShortenerPlugin.php'; class BitlyUrlPlugin extends UrlShortenerPlugin { public $shortenerName = 'bit.ly'; - public $serviceUrl = 'http://bit.ly/api?method=shorten&version=2.0.1&longUrl=%s'; + public $serviceUrl = 'http://api.bit.ly/v3/shorten?longUrl=%s'; public $login; // To set a site-default when admins or users don't override it. public $apiKey; @@ -70,12 +70,10 @@ class BitlyUrlPlugin extends UrlShortenerPlugin * @return string shortened version of the url, or null if URL shortening failed */ protected function shorten($url) { + common_log(LOG_INFO, "bit.ly call for $url"); $response = $this->query($url); - if ($this->isOk($url, $response)) { - return $this->decode($url, $response->getBody()); - } else { - return null; - } + common_log(LOG_INFO, "bit.ly answer for $url is ".$response->getBody()); + return $this->decode($url, $response); } /** @@ -127,42 +125,25 @@ class BitlyUrlPlugin extends UrlShortenerPlugin /** * JSON decode for API result */ - protected function decode($url, $body) + protected function decode($url, $response) { - $json = json_decode($body, true); - return $json['results'][$url]['shortUrl']; - } - - /** - * JSON decode for API result - */ - protected function isOk($url, $response) - { - $code = 'unknown'; - $msg = ''; + $msg = "bit.ly returned unknown response with unknown message for $url"; if ($response->isOk()) { $body = $response->getBody(); common_log(LOG_INFO, $body); $json = json_decode($body, true); - if ($json['statusCode'] == 'OK') { - if (!isset($json['results'][$url])) { - common_log(LOG_ERR, "bit.ly returned OK response, but didn't find expected URL $url in $body"); - return false; + if ($json['status_code'] == 200) { + if (isset($json['data']['url'])) { + common_log(LOG_INFO, "bit.ly returned ".$json['data']['url']." as short URL for $url"); + return $json['data']['url']; } - $data = $json['results'][$url]; - if (isset($data['shortUrl'])) { - return true; - } else if (isset($data['statusCode']) && $data['statusCode'] == 'ERROR') { - $code = $data['errorCode']; - $msg = $data['errorMessage']; - } - } else if ($json['statusCode'] == 'ERROR') { - $code = $json['errorCode']; - $msg = $json['errorMessage']; - } - common_log(LOG_ERR, "bit.ly returned error $code $msg for $url"); - } - return false; + $msg = "bit.ly returned ".$json['status_code']." response, but didn't find expected URL $url in $body"; + }else{ + $msg = "bit.ly returned ".$json['status_code']." response with ".$json['status_txt']." for $url"; + } + } + common_log(LOG_ERR, $msg); + return null; } function onPluginVersion(&$versions)