From 01a548a9fb078476be5f54b54cfcba4035faea5b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 20 Dec 2008 19:39:55 -0500 Subject: some modifications to assuage phpcs darcs-hash:20081221003955-84dde-d6e8067a579f70dcb707f4525e588920a2375f5c.gz --- _darcs/inventory | 4 +- ...dde-d6e8067a579f70dcb707f4525e588920a2375f5c.gz | Bin 0 -> 1601 bytes _darcs/pristine/lib/action.php | 255 +- _darcs/tentative_pristine | 3506 ++------------------ lib/action.php | 255 +- 5 files changed, 464 insertions(+), 3556 deletions(-) create mode 100644 _darcs/patches/20081221003955-84dde-d6e8067a579f70dcb707f4525e588920a2375f5c.gz diff --git a/_darcs/inventory b/_darcs/inventory index 83b5a479f..0328b73d1 100644 --- a/_darcs/inventory +++ b/_darcs/inventory @@ -23,4 +23,6 @@ Evan Prodromou **20081212171135] [first step of phpcs-cleanup of index.php Evan Prodromou **20081221002332] [reformatting for phpcs in lib/util.php -Evan Prodromou **20081221003016] \ No newline at end of file +Evan Prodromou **20081221003016] +[some modifications to assuage phpcs +Evan Prodromou **20081221003955] \ No newline at end of file diff --git a/_darcs/patches/20081221003955-84dde-d6e8067a579f70dcb707f4525e588920a2375f5c.gz b/_darcs/patches/20081221003955-84dde-d6e8067a579f70dcb707f4525e588920a2375f5c.gz new file mode 100644 index 000000000..c3d9f2070 Binary files /dev/null and b/_darcs/patches/20081221003955-84dde-d6e8067a579f70dcb707f4525e588920a2375f5c.gz differ diff --git a/_darcs/pristine/lib/action.php b/_darcs/pristine/lib/action.php index 7a2461bb5..486b40387 100644 --- a/_darcs/pristine/lib/action.php +++ b/_darcs/pristine/lib/action.php @@ -1,5 +1,5 @@ . */ -if (!defined('LACONICA')) { exit(1); } - -class Action { // lawsuit - - var $args; - - function Action() { - } - - # For initializing members of the class - - function prepare($argarray) { - $this->args =& common_copy_args($argarray); - return true; - } - - # For comparison with If-Last-Modified - # If not applicable, return NULL - - function last_modified() { - return NULL; - } - - function etag() { - return NULL; - } - - function is_readonly() { - return false; - } - - function arg($key, $def=NULL) { - if (array_key_exists($key, $this->args)) { - return $this->args[$key]; - } else { - return $def; - } - } - - function trimmed($key, $def=NULL) { - $arg = $this->arg($key, $def); - return (is_string($arg)) ? trim($arg) : $arg; - } - - # Note: argarray ignored, since it's now passed in in prepare() - - function handle($argarray=NULL) { - - $lm = $this->last_modified(); - $etag = $this->etag(); - - if ($etag) { - header('ETag: ' . $etag); - } - - if ($lm) { - header('Last-Modified: ' . date(DATE_RFC1123, $lm)); - $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; - if ($if_modified_since) { - $ims = strtotime($if_modified_since); - if ($lm <= $ims) { - if (!$etag || $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { - header('HTTP/1.1 304 Not Modified'); - # Better way to do this? - exit(0); - } - } - } - } - } - - function _has_etag($etag, $if_none_match) { - return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); - } - - function boolean($key, $def=false) { - $arg = strtolower($this->trimmed($key)); - - if (is_null($arg)) { - return $def; - } else if (in_array($arg, array('true', 'yes', '1'))) { - return true; - } else if (in_array($arg, array('false', 'no', '0'))) { - return false; - } else { - return $def; - } - } - - function server_error($msg, $code=500) { - $action = $this->trimmed('action'); - common_debug("Server error '$code' on '$action': $msg", __FILE__); - common_server_error($msg, $code); - } - - function client_error($msg, $code=400) { - $action = $this->trimmed('action'); - common_debug("User error '$code' on '$action': $msg", __FILE__); - common_user_error($msg, $code); - } - - function self_url() { - $action = $this->trimmed('action'); - $args = $this->args; - unset($args['action']); - foreach (array_keys($_COOKIE) as $cookie) { - unset($args[$cookie]); - } - return common_local_url($action, $args); - } - - function nav_menu($menu) { +if (!defined('LACONICA')) { + exit(1); +} + +class Action // lawsuit +{ + + var $args; + + function Action() + { + } + + // For initializing members of the class + + function prepare($argarray) + { + $this->args =& common_copy_args($argarray); + return true; + } + + // For comparison with If-Last-Modified + // If not applicable, return null + + function last_modified() + { + return null; + } + + function etag() + { + return null; + } + + function is_readonly() + { + return false; + } + + function arg($key, $def=null) + { + if (array_key_exists($key, $this->args)) { + return $this->args[$key]; + } else { + return $def; + } + } + + function trimmed($key, $def=null) + { + $arg = $this->arg($key, $def); + return (is_string($arg)) ? trim($arg) : $arg; + } + + // Note: argarray ignored, since it's now passed in in prepare() + + function handle($argarray=null) + { + + $lm = $this->last_modified(); + $etag = $this->etag(); + + if ($etag) { + header('ETag: ' . $etag); + } + + if ($lm) { + header('Last-Modified: ' . date(DATE_RFC1123, $lm)); + $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; + if ($if_modified_since) { + $ims = strtotime($if_modified_since); + if ($lm <= $ims) { + if (!$etag || + $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { + header('HTTP/1.1 304 Not Modified'); + // Better way to do this? + exit(0); + } + } + } + } + } + + function _has_etag($etag, $if_none_match) + { + return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); + } + + function boolean($key, $def=false) + { + $arg = strtolower($this->trimmed($key)); + + if (is_null($arg)) { + return $def; + } else if (in_array($arg, array('true', 'yes', '1'))) { + return true; + } else if (in_array($arg, array('false', 'no', '0'))) { + return false; + } else { + return $def; + } + } + + function server_error($msg, $code=500) + { + $action = $this->trimmed('action'); + common_debug("Server error '$code' on '$action': $msg", __FILE__); + common_server_error($msg, $code); + } + + function client_error($msg, $code=400) + { + $action = $this->trimmed('action'); + common_debug("User error '$code' on '$action': $msg", __FILE__); + common_user_error($msg, $code); + } + + function self_url() + { + $action = $this->trimmed('action'); + $args = $this->args; + unset($args['action']); + foreach (array_keys($_COOKIE) as $cookie) { + unset($args[$cookie]); + } + return common_local_url($action, $args); + } + + function nav_menu($menu) + { $action = $this->trimmed('action'); common_element_start('ul', array('id' => 'nav_views')); foreach ($menu as $menuaction => $menudesc) { - common_menu_item(common_local_url($menuaction, isset($menudesc[2]) ? $menudesc[2] : NULL), - $menudesc[0], - $menudesc[1], - $action == $menuaction); + common_menu_item(common_local_url($menuaction, + isset($menudesc[2]) ? $menudesc[2] : null), + $menudesc[0], + $menudesc[1], + $action == $menuaction); } common_element_end('ul'); - } + } } diff --git a/_darcs/tentative_pristine b/_darcs/tentative_pristine index 487d2bcdc..529be5f2c 100644 --- a/_darcs/tentative_pristine +++ b/_darcs/tentative_pristine @@ -1,3368 +1,236 @@ -hunk ./lib/util.php 22 --# Show a server error -+// Show a server error -hunk ./lib/util.php 25 -- static $status = array(500 => 'Internal Server Error', -- 501 => 'Not Implemented', -- 502 => 'Bad Gateway', -- 503 => 'Service Unavailable', -- 504 => 'Gateway Timeout', -- 505 => 'HTTP Version Not Supported'); -+ static $status = array(500 => 'Internal Server Error', -+ 501 => 'Not Implemented', -+ 502 => 'Bad Gateway', -+ 503 => 'Service Unavailable', -+ 504 => 'Gateway Timeout', -+ 505 => 'HTTP Version Not Supported'); -hunk ./lib/util.php 32 -- if (!array_key_exists($code, $status)) { -- $code = 500; -- } -+ if (!array_key_exists($code, $status)) { -+ $code = 500; -+ } -hunk ./lib/util.php 36 -- $status_string = $status[$code]; -+ $status_string = $status[$code]; -hunk ./lib/util.php 38 -- header('HTTP/1.1 '.$code.' '.$status_string); -- header('Content-type: text/plain'); -+ header('HTTP/1.1 '.$code.' '.$status_string); -+ header('Content-type: text/plain'); -hunk ./lib/util.php 41 -- print $msg; -- print "\n"; -- exit(); -+ print $msg; -+ print "\n"; -+ exit(); -hunk ./lib/util.php 46 --# Show a user error -+// Show a user error -hunk ./lib/util.php 48 -- static $status = array(400 => 'Bad Request', -- 401 => 'Unauthorized', -- 402 => 'Payment Required', -- 403 => 'Forbidden', -- 404 => 'Not Found', -- 405 => 'Method Not Allowed', -- 406 => 'Not Acceptable', -- 407 => 'Proxy Authentication Required', -- 408 => 'Request Timeout', -- 409 => 'Conflict', -- 410 => 'Gone', -- 411 => 'Length Required', -- 412 => 'Precondition Failed', -- 413 => 'Request Entity Too Large', -- 414 => 'Request-URI Too Long', -- 415 => 'Unsupported Media Type', -- 416 => 'Requested Range Not Satisfiable', -- 417 => 'Expectation Failed'); -+ static $status = array(400 => 'Bad Request', -+ 401 => 'Unauthorized', -+ 402 => 'Payment Required', -+ 403 => 'Forbidden', -+ 404 => 'Not Found', -+ 405 => 'Method Not Allowed', -+ 406 => 'Not Acceptable', -+ 407 => 'Proxy Authentication Required', -+ 408 => 'Request Timeout', -+ 409 => 'Conflict', -+ 410 => 'Gone', -+ 411 => 'Length Required', -+ 412 => 'Precondition Failed', -+ 413 => 'Request Entity Too Large', -+ 414 => 'Request-URI Too Long', -+ 415 => 'Unsupported Media Type', -+ 416 => 'Requested Range Not Satisfiable', -+ 417 => 'Expectation Failed'); -hunk ./lib/util.php 67 -- if (!array_key_exists($code, $status)) { -- $code = 400; -- } -+ if (!array_key_exists($code, $status)) { -+ $code = 400; -+ } -hunk ./lib/util.php 71 -- $status_string = $status[$code]; -+ $status_string = $status[$code]; -hunk ./lib/util.php 73 -- header('HTTP/1.1 '.$code.' '.$status_string); -+ header('HTTP/1.1 '.$code.' '.$status_string); -hunk ./lib/util.php 75 -- common_show_header('Error'); -- common_element('div', array('class' => 'error'), $msg); -- common_show_footer(); -+ common_show_header('Error'); -+ common_element('div', array('class' => 'error'), $msg); -+ common_show_footer(); -hunk ./lib/util.php 82 --# Start an HTML element --function common_element_start($tag, $attrs=NULL) { -- global $xw; -- $xw->startElement($tag); -- if (is_array($attrs)) { -- foreach ($attrs as $name => $value) { -- $xw->writeAttribute($name, $value); -- } -- } else if (is_string($attrs)) { -- $xw->writeAttribute('class', $attrs); -- } -+// Start an HTML element -+function common_element_start($tag, $attrs=null) { -+ global $xw; -+ $xw->startElement($tag); -+ if (is_array($attrs)) { -+ foreach ($attrs as $name => $value) { -+ $xw->writeAttribute($name, $value); -+ } -+ } else if (is_string($attrs)) { -+ $xw->writeAttribute('class', $attrs); -+ } -hunk ./lib/util.php 96 -- static $empty_tag = array('base', 'meta', 'link', 'hr', -- 'br', 'param', 'img', 'area', -- 'input', 'col'); -- global $xw; -- # XXX: check namespace -- if (in_array($tag, $empty_tag)) { -- $xw->endElement(); -- } else { -- $xw->fullEndElement(); -- } -+ static $empty_tag = array('base', 'meta', 'link', 'hr', -+ 'br', 'param', 'img', 'area', -+ 'input', 'col'); -+ global $xw; -+ // XXX: check namespace -+ if (in_array($tag, $empty_tag)) { -+ $xw->endElement(); -+ } else { -+ $xw->fullEndElement(); -+ } -hunk ./lib/util.php 108 --function common_element($tag, $attrs=NULL, $content=NULL) { -- common_element_start($tag, $attrs); -- global $xw; -- if (!is_null($content)) { -- $xw->text($content); -- } -- common_element_end($tag); -+function common_element($tag, $attrs=null, $content=null) { -+ common_element_start($tag, $attrs); -+ global $xw; -+ if (!is_null($content)) { -+ $xw->text($content); -+ } -+ common_element_end($tag); -hunk ./lib/util.php 117 --function common_start_xml($doc=NULL, $public=NULL, $system=NULL, $indent=true) { -- global $xw; -- $xw = new XMLWriter(); -- $xw->openURI('php://output'); -- $xw->setIndent($indent); -- $xw->startDocument('1.0', 'UTF-8'); -- if ($doc) { -- $xw->writeDTD($doc, $public, $system); -- } -+function common_start_xml($doc=null, $public=null, $system=null, $indent=true) { -+ global $xw; -+ $xw = new XMLWriter(); -+ $xw->openURI('php://output'); -+ $xw->setIndent($indent); -+ $xw->startDocument('1.0', 'UTF-8'); -+ if ($doc) { -+ $xw->writeDTD($doc, $public, $system); -+ } -hunk ./lib/util.php 129 -- global $xw; -- $xw->endDocument(); -- $xw->flush(); -+ global $xw; -+ $xw->endDocument(); -+ $xw->flush(); -hunk ./lib/util.php 141 -- $language . ".UTF8", -- $language . ".utf-8", -- $language . ".UTF-8", -- $language); -+ $language . ".UTF8", -+ $language . ".utf-8", -+ $language . ".UTF-8", -+ $language); -hunk ./lib/util.php 148 -- mb_internal_encoding('UTF-8'); -- $language = common_language(); -- # So we don't have to make people install the gettext locales -- $locale_set = common_init_locale($language); -- bindtextdomain("laconica", common_config('site','locale_path')); -- bind_textdomain_codeset("laconica", "UTF-8"); -- textdomain("laconica"); -- setlocale(LC_CTYPE, 'C'); -- if(!$locale_set) { -- common_log(LOG_INFO,'Language requested:'.$language.' - locale could not be set:',__FILE__); -- } -+ mb_internal_encoding('UTF-8'); -+ $language = common_language(); -+ // So we don't have to make people install the gettext locales -+ $locale_set = common_init_locale($language); -+ bindtextdomain("laconica", common_config('site','locale_path')); -+ bind_textdomain_codeset("laconica", "UTF-8"); -+ textdomain("laconica"); -+ setlocale(LC_CTYPE, 'C'); -+ if(!$locale_set) { -+ common_log(LOG_INFO,'Language requested:'.$language.' - locale could not be set:',__FILE__); -+ } -hunk ./lib/util.php 163 --function common_show_header($pagetitle, $callable=NULL, $data=NULL, $headercall=NULL) { -+function common_show_header($pagetitle, $callable=null, $data=null, $headercall=null) { -hunk ./lib/util.php 165 -- global $config, $xw; -+ global $config, $xw; -hunk ./lib/util.php 168 -- common_start_html(); -+ common_start_html(); -hunk ./lib/util.php 170 -- common_element_start('head'); -- common_element('title', NULL, -- $pagetitle . " - " . $config['site']['name']); -- common_element('link', array('rel' => 'stylesheet', -- 'type' => 'text/css', -- 'href' => theme_path('display.css') . '?version=' . LACONICA_VERSION, -- 'media' => 'screen, projection, tv')); -- foreach (array(6,7) as $ver) { -- if (file_exists(theme_file('ie'.$ver.'.css'))) { -- # Yes, IE people should be put in jail. -- $xw->writeComment('[if lte IE '.$ver.']> 'stylesheet', -+ 'type' => 'text/css', -+ 'href' => theme_path('display.css') . '?version=' . LACONICA_VERSION, -+ 'media' => 'screen, projection, tv')); -+ foreach (array(6,7) as $ver) { -+ if (file_exists(theme_file('ie'.$ver.'.css'))) { -+ // Yes, IE people should be put in jail. -+ $xw->writeComment('[if lte IE '.$ver.']> 'text/javascript', -- 'src' => common_path('js/jquery.min.js')), -- ' '); -- common_element('script', array('type' => 'text/javascript', -- 'src' => common_path('js/jquery.form.js')), -- ' '); -- common_element('script', array('type' => 'text/javascript', -- 'src' => common_path('js/xbImportNode.js')), -- ' '); -- common_element('script', array('type' => 'text/javascript', -- 'src' => common_path('js/util.js?version='.LACONICA_VERSION)), -- ' '); -- common_element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml', -- 'href' => common_local_url('opensearch', array('type' => 'people')), -- 'title' => common_config('site', 'name').' People Search')); -+ common_element('script', array('type' => 'text/javascript', -+ 'src' => common_path('js/jquery.min.js')), -+ ' '); -+ common_element('script', array('type' => 'text/javascript', -+ 'src' => common_path('js/jquery.form.js')), -+ ' '); -+ common_element('script', array('type' => 'text/javascript', -+ 'src' => common_path('js/xbImportNode.js')), -+ ' '); -+ common_element('script', array('type' => 'text/javascript', -+ 'src' => common_path('js/util.js?version='.LACONICA_VERSION)), -+ ' '); -+ common_element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml', -+ 'href' => common_local_url('opensearch', array('type' => 'people')), -+ 'title' => common_config('site', 'name').' People Search')); -hunk ./lib/util.php 201 -- common_element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml', -- 'href' => common_local_url('opensearch', array('type' => 'notice')), -- 'title' => common_config('site', 'name').' Notice Search')); -+ common_element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml', -+ 'href' => common_local_url('opensearch', array('type' => 'notice')), -+ 'title' => common_config('site', 'name').' Notice Search')); -hunk ./lib/util.php 205 -- if ($callable) { -- if ($data) { -- call_user_func($callable, $data); -- } else { -- call_user_func($callable); -- } -- } -- common_element_end('head'); -- common_element_start('body', $action); -- common_element_start('div', array('id' => 'wrap')); -- common_element_start('div', array('id' => 'header')); -- common_nav_menu(); -- if ((isset($config['site']['logo']) && is_string($config['site']['logo']) && (strlen($config['site']['logo']) > 0)) -- || file_exists(theme_file('logo.png'))) -- { -- common_element_start('a', array('href' => common_local_url('public'))); -- common_element('img', array('src' => isset($config['site']['logo']) ? -- ($config['site']['logo']) : theme_path('logo.png'), -- 'alt' => $config['site']['name'], -- 'id' => 'logo')); -- common_element_end('a'); -- } else { -- common_element_start('p', array('id' => 'branding')); -- common_element('a', array('href' => common_local_url('public')), -- $config['site']['name']); -- common_element_end('p'); -- } -+ if ($callable) { -+ if ($data) { -+ call_user_func($callable, $data); -+ } else { -+ call_user_func($callable); -+ } -+ } -+ common_element_end('head'); -+ common_element_start('body', $action); -+ common_element_start('div', array('id' => 'wrap')); -+ common_element_start('div', array('id' => 'header')); -+ common_nav_menu(); -+ if ((isset($config['site']['logo']) && is_string($config['site']['logo']) && (strlen($config['site']['logo']) > 0)) -+ || file_exists(theme_file('logo.png'))) +hunk ./lib/action.php 2 +-/* ++/** +hunk ./lib/action.php 20 +-if (!defined('LACONICA')) { exit(1); } ++if (!defined('LACONICA')) { ++ exit(1); ++} +hunk ./lib/action.php 24 +-class Action { // lawsuit ++class Action // lawsuit ++{ +hunk ./lib/action.php 27 +- var $args; ++ var $args; +hunk ./lib/action.php 29 +- function Action() { +- } ++ function Action() + { -+ common_element_start('a', array('href' => common_local_url('public'))); -+ common_element('img', array('src' => isset($config['site']['logo']) ? -+ ($config['site']['logo']) : theme_path('logo.png'), -+ 'alt' => $config['site']['name'], -+ 'id' => 'logo')); -+ common_element_end('a'); -+ } else { -+ common_element_start('p', array('id' => 'branding')); -+ common_element('a', array('href' => common_local_url('public')), -+ $config['site']['name']); -+ common_element_end('p'); -+ } -hunk ./lib/util.php 233 -- common_element('h1', 'pagetitle', $pagetitle); -+ common_element('h1', 'pagetitle', $pagetitle); -hunk ./lib/util.php 235 -- if ($headercall) { -- if ($data) { -- call_user_func($headercall, $data); -- } else { -- call_user_func($headercall); -- } -- } -- common_element_end('div'); -- common_element_start('div', array('id' => 'content')); -+ if ($headercall) { -+ if ($data) { -+ call_user_func($headercall, $data); -+ } else { -+ call_user_func($headercall); -+ } -+ } -+ common_element_end('div'); -+ common_element_start('div', array('id' => 'content')); -hunk ./lib/util.php 246 --function common_start_html($type=NULL, $indent=true) { -+function common_start_html($type=null, $indent=true) { -hunk ./lib/util.php 248 -- if (!$type) { -- $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : NULL; -+ if (!$type) { -+ $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null; -hunk ./lib/util.php 251 -- # XXX: allow content negotiation for RDF, RSS, or XRDS -+ // XXX: allow content negotiation for RDF, RSS, or XRDS -hunk ./lib/util.php 253 -- $type = common_negotiate_type(common_accept_to_prefs($httpaccept), -- common_accept_to_prefs(PAGE_TYPE_PREFS)); -+ $type = common_negotiate_type(common_accept_to_prefs($httpaccept), -+ common_accept_to_prefs(PAGE_TYPE_PREFS)); -hunk ./lib/util.php 256 -- if (!$type) { -- common_user_error(_('This page is not available in a media type you accept'), 406); -- exit(0); -- } -- } -+ if (!$type) { -+ common_user_error(_('This page is not available in a media type you accept'), 406); -+ exit(0); -+ } -+ } -hunk ./lib/util.php 262 -- header('Content-Type: '.$type); -+ header('Content-Type: '.$type); -hunk ./lib/util.php 264 -- common_start_xml('html', -- '-//W3C//DTD XHTML 1.0 Strict//EN', -- 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd', $indent); -+ common_start_xml('html', -+ '-//W3C//DTD XHTML 1.0 Strict//EN', -+ 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd', $indent); -hunk ./lib/util.php 268 -- # FIXME: correct language for interface -+ // FIXME: correct language for interface -hunk ./lib/util.php 270 -- $language = common_language(); -+ $language = common_language(); -hunk ./lib/util.php 272 -- common_element_start('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', -- 'xml:lang' => $language, -- 'lang' => $language)); -+ common_element_start('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', -+ 'xml:lang' => $language, -+ 'lang' => $language)); -hunk ./lib/util.php 278 -- global $xw, $config; -- common_element_end('div'); # content div -- common_foot_menu(); -- common_element_start('div', array('id' => 'footer')); -- common_element_start('div', 'laconica'); -- if (common_config('site', 'broughtby')) { -- $instr = _('**%%site.name%%** is a microblogging service brought to you by [%%site.broughtby%%](%%site.broughtbyurl%%). '); -- } else { -- $instr = _('**%%site.name%%** is a microblogging service. '); -- } -- $instr .= sprintf(_('It runs the [Laconica](http://laconi.ca/) microblogging software, version %s, available under the [GNU Affero General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html).'), LACONICA_VERSION); -+ global $xw, $config; -+ common_element_end('div'); // content div -+ common_foot_menu(); -+ common_element_start('div', array('id' => 'footer')); -+ common_element_start('div', 'laconica'); -+ if (common_config('site', 'broughtby')) { -+ $instr = _('**%%site.name%%** is a microblogging service brought to you by [%%site.broughtby%%](%%site.broughtbyurl%%). '); -+ } else { -+ $instr = _('**%%site.name%%** is a microblogging service. '); -+ } -+ $instr .= sprintf(_('It runs the [Laconica](http://laconi.ca/) microblogging software, version %s, available under the [GNU Affero General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html).'), LACONICA_VERSION); -hunk ./lib/util.php 291 -- common_element_end('div'); -- common_element('img', array('id' => 'cc', -- 'src' => $config['license']['image'], -- 'alt' => $config['license']['title'])); -- common_element_start('p'); -- common_text(_('Unless otherwise specified, contents of this site are copyright by the contributors and available under the ')); -- common_element('a', array('class' => 'license', -- 'rel' => 'license', -- 'href' => $config['license']['url']), -- $config['license']['title']); -- common_text(_('. Contributors should be attributed by full name or nickname.')); -- common_element_end('p'); -- common_element_end('div'); -- common_element_end('div'); -- common_element_end('body'); -- common_element_end('html'); -- common_end_xml(); -+ common_element_end('div'); -+ common_element('img', array('id' => 'cc', -+ 'src' => $config['license']['image'], -+ 'alt' => $config['license']['title'])); -+ common_element_start('p'); -+ common_text(_('Unless otherwise specified, contents of this site are copyright by the contributors and available under the ')); -+ common_element('a', array('class' => 'license', -+ 'rel' => 'license', -+ 'href' => $config['license']['url']), -+ $config['license']['title']); -+ common_text(_('. Contributors should be attributed by full name or nickname.')); -+ common_element_end('p'); -+ common_element_end('div'); -+ common_element_end('div'); -+ common_element_end('body'); -+ common_element_end('html'); -+ common_end_xml(); -hunk ./lib/util.php 311 -- global $xw; -- $xw->text($txt); -+ global $xw; -+ $xw->text($txt); -hunk ./lib/util.php 316 -- global $xw; -- $xw->writeRaw($xml); -+ global $xw; -+ $xw->writeRaw($xml); -hunk ./lib/util.php 321 -- $user = common_current_user(); -- common_element_start('ul', array('id' => 'nav')); -- if ($user) { -- common_menu_item(common_local_url('all', array('nickname' => $user->nickname)), -- _('Home')); -- } -- common_menu_item(common_local_url('peoplesearch'), _('Search')); -- if ($user) { -- common_menu_item(common_local_url('profilesettings'), -- _('Settings')); -- common_menu_item(common_local_url('invite'), -- _('Invite')); -- common_menu_item(common_local_url('logout'), -- _('Logout')); -- } else { -- common_menu_item(common_local_url('login'), _('Login')); -- if (!common_config('site', 'closed')) { -- common_menu_item(common_local_url('register'), _('Register')); -- } -- common_menu_item(common_local_url('openidlogin'), _('OpenID')); -- } -- common_menu_item(common_local_url('doc', array('title' => 'help')), -- _('Help')); -- common_element_end('ul'); -+ $user = common_current_user(); -+ common_element_start('ul', array('id' => 'nav')); -+ if ($user) { -+ common_menu_item(common_local_url('all', array('nickname' => $user->nickname)), -+ _('Home')); -+ } -+ common_menu_item(common_local_url('peoplesearch'), _('Search')); -+ if ($user) { -+ common_menu_item(common_local_url('profilesettings'), -+ _('Settings')); -+ common_menu_item(common_local_url('invite'), -+ _('Invite')); -+ common_menu_item(common_local_url('logout'), -+ _('Logout')); -+ } else { -+ common_menu_item(common_local_url('login'), _('Login')); -+ if (!common_config('site', 'closed')) { -+ common_menu_item(common_local_url('register'), _('Register')); -+ } -+ common_menu_item(common_local_url('openidlogin'), _('OpenID')); -+ } -+ common_menu_item(common_local_url('doc', array('title' => 'help')), -+ _('Help')); -+ common_element_end('ul'); -hunk ./lib/util.php 348 -- common_element_start('ul', array('id' => 'nav_sub')); -- common_menu_item(common_local_url('doc', array('title' => 'help')), -- _('Help')); -- common_menu_item(common_local_url('doc', array('title' => 'about')), -- _('About')); -- common_menu_item(common_local_url('doc', array('title' => 'faq')), -- _('FAQ')); -- common_menu_item(common_local_url('doc', array('title' => 'privacy')), -- _('Privacy')); -- common_menu_item(common_local_url('doc', array('title' => 'source')), -- _('Source')); -- common_menu_item(common_local_url('doc', array('title' => 'contact')), -- _('Contact')); -- common_element_end('ul'); -+ common_element_start('ul', array('id' => 'nav_sub')); -+ common_menu_item(common_local_url('doc', array('title' => 'help')), -+ _('Help')); -+ common_menu_item(common_local_url('doc', array('title' => 'about')), -+ _('About')); -+ common_menu_item(common_local_url('doc', array('title' => 'faq')), -+ _('FAQ')); -+ common_menu_item(common_local_url('doc', array('title' => 'privacy')), -+ _('Privacy')); -+ common_menu_item(common_local_url('doc', array('title' => 'source')), -+ _('Source')); -+ common_menu_item(common_local_url('doc', array('title' => 'contact')), -+ _('Contact')); -+ common_element_end('ul'); -hunk ./lib/util.php 364 --function common_menu_item($url, $text, $title=NULL, $is_selected=false) { -- $lattrs = array(); -- if ($is_selected) { -- $lattrs['class'] = 'current'; -- } -- common_element_start('li', $lattrs); -- $attrs['href'] = $url; -- if ($title) { -- $attrs['title'] = $title; -- } -- common_element('a', $attrs, $text); -- common_element_end('li'); -+function common_menu_item($url, $text, $title=null, $is_selected=false) { -+ $lattrs = array(); -+ if ($is_selected) { -+ $lattrs['class'] = 'current'; -+ } -+ common_element_start('li', $lattrs); -+ $attrs['href'] = $url; -+ if ($title) { -+ $attrs['title'] = $title; -+ } -+ common_element('a', $attrs, $text); -+ common_element_end('li'); -hunk ./lib/util.php 378 --function common_input($id, $label, $value=NULL,$instructions=NULL) { -- common_element_start('p'); -- common_element('label', array('for' => $id), $label); -- $attrs = array('name' => $id, -- 'type' => 'text', -- 'class' => 'input_text', -- 'id' => $id); -- if ($value) { -- $attrs['value'] = htmlspecialchars($value); -- } -- common_element('input', $attrs); -- if ($instructions) { -- common_element('span', 'input_instructions', $instructions); -- } -- common_element_end('p'); -+function common_input($id, $label, $value=null,$instructions=null) { -+ common_element_start('p'); -+ common_element('label', array('for' => $id), $label); -+ $attrs = array('name' => $id, -+ 'type' => 'text', -+ 'class' => 'input_text', -+ 'id' => $id); -+ if ($value) { -+ $attrs['value'] = htmlspecialchars($value); -+ } -+ common_element('input', $attrs); -+ if ($instructions) { -+ common_element('span', 'input_instructions', $instructions); -+ } -+ common_element_end('p'); -hunk ./lib/util.php 395 --function common_checkbox($id, $label, $checked=false, $instructions=NULL, $value='true', $disabled=false) -+function common_checkbox($id, $label, $checked=false, $instructions=null, $value='true', $disabled=false) -hunk ./lib/util.php 397 -- common_element_start('p'); -- $attrs = array('name' => $id, -- 'type' => 'checkbox', -- 'class' => 'checkbox', -- 'id' => $id); -- if ($value) { -- $attrs['value'] = htmlspecialchars($value); -- } -- if ($checked) { -- $attrs['checked'] = 'checked'; -- } -- if ($disabled) { -- $attrs['disabled'] = 'true'; -- } -- common_element('input', $attrs); -- common_text(' '); -- common_element('label', array('class' => 'checkbox_label', 'for' => $id), $label); -- common_text(' '); -- if ($instructions) { -- common_element('span', 'input_instructions', $instructions); -- } -- common_element_end('p'); -+ common_element_start('p'); -+ $attrs = array('name' => $id, -+ 'type' => 'checkbox', -+ 'class' => 'checkbox', -+ 'id' => $id); -+ if ($value) { -+ $attrs['value'] = htmlspecialchars($value); -+ } -+ if ($checked) { -+ $attrs['checked'] = 'checked'; -+ } -+ if ($disabled) { -+ $attrs['disabled'] = 'true'; -+ } -+ common_element('input', $attrs); -+ common_text(' '); -+ common_element('label', array('class' => 'checkbox_label', 'for' => $id), $label); -+ common_text(' '); -+ if ($instructions) { -+ common_element('span', 'input_instructions', $instructions); -+ } -+ common_element_end('p'); -hunk ./lib/util.php 421 --function common_dropdown($id, $label, $content, $instructions=NULL, $blank_select=FALSE, $selected=NULL) { -- common_element_start('p'); -- common_element('label', array('for' => $id), $label); -- common_element_start('select', array('id' => $id, 'name' => $id)); -- if ($blank_select) { -- common_element('option', array('value' => '')); -- } -- foreach ($content as $value => $option) { -- if ($value == $selected) { -- common_element('option', array('value' => $value, 'selected' => $value), $option); -- } else { -- common_element('option', array('value' => $value), $option); -- } -- } -- common_element_end('select'); -- if ($instructions) { -- common_element('span', 'input_instructions', $instructions); -- } -- common_element_end('p'); -+function common_dropdown($id, $label, $content, $instructions=null, $blank_select=FALSE, $selected=null) { -+ common_element_start('p'); -+ common_element('label', array('for' => $id), $label); -+ common_element_start('select', array('id' => $id, 'name' => $id)); -+ if ($blank_select) { -+ common_element('option', array('value' => '')); -+ } -+ foreach ($content as $value => $option) { -+ if ($value == $selected) { -+ common_element('option', array('value' => $value, 'selected' => $value), $option); -+ } else { -+ common_element('option', array('value' => $value), $option); -+ } -+ } -+ common_element_end('select'); -+ if ($instructions) { -+ common_element('span', 'input_instructions', $instructions); -+ } -+ common_element_end('p'); -hunk ./lib/util.php 442 -- common_element('input', array('name' => $id, -- 'type' => 'hidden', -- 'id' => $id, -- 'value' => $value)); -+ common_element('input', array('name' => $id, -+ 'type' => 'hidden', -+ 'id' => $id, -+ 'value' => $value)); -hunk ./lib/util.php 448 --function common_password($id, $label, $instructions=NULL) { -- common_element_start('p'); -- common_element('label', array('for' => $id), $label); -- $attrs = array('name' => $id, -- 'type' => 'password', -- 'class' => 'password', -- 'id' => $id); -- common_element('input', $attrs); -- if ($instructions) { -- common_element('span', 'input_instructions', $instructions); -- } -- common_element_end('p'); -+function common_password($id, $label, $instructions=null) { -+ common_element_start('p'); -+ common_element('label', array('for' => $id), $label); -+ $attrs = array('name' => $id, -+ 'type' => 'password', -+ 'class' => 'password', -+ 'id' => $id); -+ common_element('input', $attrs); -+ if ($instructions) { -+ common_element('span', 'input_instructions', $instructions); -+ } -+ common_element_end('p'); -hunk ./lib/util.php 463 -- global $xw; -- common_element_start('p'); -- common_element('input', array('type' => 'submit', -- 'id' => $id, -- 'name' => $id, -- 'class' => $cls, -- 'value' => $label)); -- common_element_end('p'); -+ global $xw; -+ common_element_start('p'); -+ common_element('input', array('type' => 'submit', -+ 'id' => $id, -+ 'name' => $id, -+ 'class' => $cls, -+ 'value' => $label)); -+ common_element_end('p'); -hunk ./lib/util.php 473 --function common_textarea($id, $label, $content=NULL, $instructions=NULL) { -- common_element_start('p'); -- common_element('label', array('for' => $id), $label); -- common_element('textarea', array('rows' => 3, -- 'cols' => 40, -- 'name' => $id, -- 'id' => $id), -- ($content) ? $content : ''); -- if ($instructions) { -- common_element('span', 'input_instructions', $instructions); -- } -- common_element_end('p'); -+function common_textarea($id, $label, $content=null, $instructions=null) { -+ common_element_start('p'); -+ common_element('label', array('for' => $id), $label); -+ common_element('textarea', array('rows' => 3, -+ 'cols' => 40, -+ 'name' => $id, -+ 'id' => $id), -+ ($content) ? $content : ''); -+ if ($instructions) { -+ common_element('span', 'input_instructions', $instructions); -+ } -+ common_element_end('p'); -hunk ./lib/util.php 488 -- if (common_logged_in()) { -- $user = common_current_user(); -- if ($user->timezone) { -- return $user->timezone; -- } -- } -+ if (common_logged_in()) { -+ $user = common_current_user(); -+ if ($user->timezone) { -+ return $user->timezone; -+ } -+ } -hunk ./lib/util.php 495 -- global $config; -- return $config['site']['timezone']; -+ global $config; -+ return $config['site']['timezone']; -hunk ./lib/util.php 501 -- // If there is a user logged in and they've set a language preference -- // then return that one... -- if (common_logged_in()) { -- $user = common_current_user(); -- $user_language = $user->language; -- if ($user_language) -- return $user_language; -- } -+ // If there is a user logged in and they've set a language preference -+ // then return that one... -+ if (common_logged_in()) { -+ $user = common_current_user(); -+ $user_language = $user->language; -+ if ($user_language) -+ return $user_language; -+ } -hunk ./lib/util.php 510 -- // Otherwise, find the best match for the languages requested by the -- // user's browser... -- $httplang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : NULL; -- if (!empty($httplang)) { -- $language = client_prefered_language($httplang); -- if ($language) -- return $language; -- } -+ // Otherwise, find the best match for the languages requested by the -+ // user's browser... -+ $httplang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : null; -+ if (!empty($httplang)) { -+ $language = client_prefered_language($httplang); -+ if ($language) -+ return $language; -+ } -hunk ./lib/util.php 519 -- // Finally, if none of the above worked, use the site's default... -- return common_config('site', 'language'); -+ // Finally, if none of the above worked, use the site's default... -+ return common_config('site', 'language'); -hunk ./lib/util.php 522 --# salted, hashed passwords are stored in the DB -+// salted, hashed passwords are stored in the DB -hunk ./lib/util.php 525 -- return md5($password . $id); -+ return md5($password . $id); -hunk ./lib/util.php 528 --# check if a username exists and has matching password -+// check if a username exists and has matching password -hunk ./lib/util.php 530 -- # NEVER allow blank passwords, even if they match the DB -- if (mb_strlen($password) == 0) { -- return false; -- } -- $user = User::staticGet('nickname', $nickname); -- if (is_null($user)) { -- return false; -- } else { -- if (0 == strcmp(common_munge_password($password, $user->id), -- $user->password)) { -- return $user; -- } else { -- return false; -- } -- } -+ // NEVER allow blank passwords, even if they match the DB -+ if (mb_strlen($password) == 0) { -+ return false; + } -+ $user = User::staticGet('nickname', $nickname); -+ if (is_null($user)) { -+ return false; -+ } else { -+ if (0 == strcmp(common_munge_password($password, $user->id), -+ $user->password)) { -+ return $user; -+ } else { -+ return false; -+ } -+ } -hunk ./lib/util.php 547 --# is the current user logged in? -+// is the current user logged in? -hunk ./lib/util.php 549 -- return (!is_null(common_current_user())); -+ return (!is_null(common_current_user())); -hunk ./lib/util.php 553 -- return (0 != strcmp(session_id(), '')); -+ return (0 != strcmp(session_id(), '')); -hunk ./lib/util.php 557 -- if (!common_have_session()) { -- @session_start(); -- } -+ if (!common_have_session()) { -+ @session_start(); -+ } -hunk ./lib/util.php 562 --# Three kinds of arguments: --# 1) a user object --# 2) a nickname --# 3) NULL to clear -+// Three kinds of arguments: -+// 1) a user object -+// 2) a nickname -+// 3) null to clear -hunk ./lib/util.php 567 --# Initialize to false; set to NULL if none found -+// Initialize to false; set to null if none found -hunk ./lib/util.php 575 -- if (is_null($user) && common_have_session()) { -- $_cur = NULL; -- unset($_SESSION['userid']); +hunk ./lib/action.php 33 +- # For initializing members of the class ++ // For initializing members of the class +hunk ./lib/action.php 35 +- function prepare($argarray) { +- $this->args =& common_copy_args($argarray); - return true; -- } else if (is_string($user)) { -- $nickname = $user; -- $user = User::staticGet('nickname', $nickname); -- } else if (!($user instanceof User)) { -- return false; - } -+ if (is_null($user) && common_have_session()) { -+ $_cur = null; -+ unset($_SESSION['userid']); ++ function prepare($argarray) ++ { ++ $this->args =& common_copy_args($argarray); + return true; -+ } else if (is_string($user)) { -+ $nickname = $user; -+ $user = User::staticGet('nickname', $nickname); -+ } else if (!($user instanceof User)) { -+ return false; -+ } -hunk ./lib/util.php 586 -- if ($user) { -- common_ensure_session(); -- $_SESSION['userid'] = $user->id; -+ if ($user) { -+ common_ensure_session(); -+ $_SESSION['userid'] = $user->id; -hunk ./lib/util.php 590 -- return $_cur; -- } -- return false; -+ return $_cur; -+ } -+ return false; -hunk ./lib/util.php 596 -- $path = common_config('site', 'path'); -- $server = common_config('site', 'server'); -+ $path = common_config('site', 'path'); -+ $server = common_config('site', 'server'); -hunk ./lib/util.php 599 -- if ($path && ($path != '/')) { -- $cookiepath = '/' . $path . '/'; -- } else { -- $cookiepath = '/'; -- } -- return setcookie($key, -- $value, -- $expiration, -- $cookiepath, -- $server); -+ if ($path && ($path != '/')) { -+ $cookiepath = '/' . $path . '/'; -+ } else { -+ $cookiepath = '/'; + } -+ return setcookie($key, -+ $value, -+ $expiration, -+ $cookiepath, -+ $server); -hunk ./lib/util.php 612 --define('REMEMBERME_EXPIRY', 30 * 24 * 60 * 60); # 30 days -+define('REMEMBERME_EXPIRY', 30 * 24 * 60 * 60); // 30 days -hunk ./lib/util.php 614 --function common_rememberme($user=NULL) { -- if (!$user) { -- $user = common_current_user(); -- if (!$user) { -- common_debug('No current user to remember', __FILE__); -- return false; -- } +hunk ./lib/action.php 41 +- # For comparison with If-Last-Modified +- # If not applicable, return NULL ++ // For comparison with If-Last-Modified ++ // If not applicable, return null +hunk ./lib/action.php 44 +- function last_modified() { +- return NULL; - } -+function common_rememberme($user=null) { -+ if (!$user) { -+ $user = common_current_user(); -+ if (!$user) { -+ common_debug('No current user to remember', __FILE__); -+ return false; -+ } -+ } -hunk ./lib/util.php 623 -- $rm = new Remember_me(); -+ $rm = new Remember_me(); -hunk ./lib/util.php 625 -- $rm->code = common_good_rand(16); -- $rm->user_id = $user->id; -+ $rm->code = common_good_rand(16); -+ $rm->user_id = $user->id; -hunk ./lib/util.php 628 -- # Wrap the insert in some good ol' fashioned transaction code -+ // Wrap the insert in some good ol' fashioned transaction code -hunk ./lib/util.php 632 -- $result = $rm->insert(); -+ $result = $rm->insert(); -hunk ./lib/util.php 634 -- if (!$result) { -- common_log_db_error($rm, 'INSERT', __FILE__); -- common_debug('Error adding rememberme record for ' . $user->nickname, __FILE__); -- return false; -+ if (!$result) { -+ common_log_db_error($rm, 'INSERT', __FILE__); -+ common_debug('Error adding rememberme record for ' . $user->nickname, __FILE__); -+ return false; -hunk ./lib/util.php 642 -- common_debug('Inserted rememberme record (' . $rm->code . ', ' . $rm->user_id . '); result = ' . $result . '.', __FILE__); -+ common_debug('Inserted rememberme record (' . $rm->code . ', ' . $rm->user_id . '); result = ' . $result . '.', __FILE__); -hunk ./lib/util.php 646 -- common_log(LOG_INFO, 'adding rememberme cookie "' . $cookieval . '" for ' . $user->nickname); -+ common_log(LOG_INFO, 'adding rememberme cookie "' . $cookieval . '" for ' . $user->nickname); -hunk ./lib/util.php 648 -- common_set_cookie(REMEMBERME, $cookieval, time() + REMEMBERME_EXPIRY); -+ common_set_cookie(REMEMBERME, $cookieval, time() + REMEMBERME_EXPIRY); -hunk ./lib/util.php 650 -- return true; -+ return true; -hunk ./lib/util.php 655 -- $user = NULL; -+ $user = null; -hunk ./lib/util.php 657 -- $packed = isset($_COOKIE[REMEMBERME]) ? $_COOKIE[REMEMBERME] : NULL; -+ $packed = isset($_COOKIE[REMEMBERME]) ? $_COOKIE[REMEMBERME] : null; -hunk ./lib/util.php 659 -- if (!$packed) { -- return NULL; -+ if (!$packed) { -+ return null; -hunk ./lib/util.php 668 -- return NULL; -+ return null; -hunk ./lib/util.php 676 -- return NULL; -+ return null; -hunk ./lib/util.php 682 -- return NULL; -+ return null; -hunk ./lib/util.php 690 -- return NULL; -+ return null; -hunk ./lib/util.php 693 -- # successful! -+ // successful! -hunk ./lib/util.php 700 -- return NULL; ++ function last_modified() ++ { + return null; -hunk ./lib/util.php 708 -- # We issue a new cookie, so they can log in -- # automatically again after this session -+ // We issue a new cookie, so they can log in -+ // automatically again after this session -hunk ./lib/util.php 713 -- return $user; -+ return $user; -hunk ./lib/util.php 716 --# must be called with a valid user! -+// must be called with a valid user! -hunk ./lib/util.php 719 -- common_set_cookie(REMEMBERME, '', 0); -+ common_set_cookie(REMEMBERME, '', 0); -hunk ./lib/util.php 722 --# who is the current user? -+// who is the current user? -hunk ./lib/util.php 737 -- # that didn't work; try to remember; will init $_cur to NULL on failure -+ // that didn't work; try to remember; will init $_cur to null on failure -hunk ./lib/util.php 743 -- # XXX: Is this necessary? -+ // XXX: Is this necessary? -hunk ./lib/util.php 748 -- return $_cur; -+ return $_cur; -hunk ./lib/util.php 751 --# Logins that are 'remembered' aren't 'real' -- they're subject to --# cookie-stealing. So, we don't let them do certain things. New reg, --# OpenID, and password logins _are_ real. -+// Logins that are 'remembered' aren't 'real' -- they're subject to -+// cookie-stealing. So, we don't let them do certain things. New reg, -+// OpenID, and password logins _are_ real. -hunk ./lib/util.php 756 -- common_ensure_session(); -- $_SESSION['real_login'] = $real; -+ common_ensure_session(); -+ $_SESSION['real_login'] = $real; -hunk ./lib/util.php 761 -- return common_logged_in() && $_SESSION['real_login']; -+ return common_logged_in() && $_SESSION['real_login']; -hunk ./lib/util.php 764 --# get canonical version of nickname for comparison -+// get canonical version of nickname for comparison -hunk ./lib/util.php 766 -- # XXX: UTF-8 canonicalization (like combining chars) -- return strtolower($nickname); -+ // XXX: UTF-8 canonicalization (like combining chars) -+ return strtolower($nickname); -hunk ./lib/util.php 770 --# get canonical version of email for comparison -+// get canonical version of email for comparison -hunk ./lib/util.php 772 -- # XXX: canonicalize UTF-8 -- # XXX: lcase the domain part -- return $email; -+ // XXX: canonicalize UTF-8 -+ // XXX: lcase the domain part -+ return $email; -hunk ./lib/util.php 780 -- $r = common_render_text($text); -- $id = $notice->profile_id; -- $r = preg_replace('/(^|\s+)@([A-Za-z0-9]{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r); -- $r = preg_replace('/^T ([A-Z0-9]{1,64}) /e', "'T '.common_at_link($id, '\\1').' '", $r); -- $r = preg_replace('/(^|\s+)@#([A-Za-z0-9]{1,64})/e', "'\\1@#'.common_at_hash_link($id, '\\2')", $r); -- return $r; -+ $r = common_render_text($text); -+ $id = $notice->profile_id; -+ $r = preg_replace('/(^|\s+)@([A-Za-z0-9]{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r); -+ $r = preg_replace('/^T ([A-Z0-9]{1,64}) /e', "'T '.common_at_link($id, '\\1').' '", $r); -+ $r = preg_replace('/(^|\s+)@#([A-Za-z0-9]{1,64})/e', "'\\1@#'.common_at_hash_link($id, '\\2')", $r); -+ return $r; -hunk ./lib/util.php 789 -- $r = htmlspecialchars($text); -+ $r = htmlspecialchars($text); -hunk ./lib/util.php 791 -- $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r); -- $r = preg_replace_callback('@https?://[^\]>\s]+@', 'common_render_uri_thingy', $r); -- $r = preg_replace('/(^|\s+)#([A-Za-z0-9_\-\.]{1,64})/e', "'\\1#'.common_tag_link('\\2')", $r); -- # XXX: machine tags -- return $r; -+ $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r); -+ $r = preg_replace_callback('@https?://[^\]>\s]+@', 'common_render_uri_thingy', $r); -+ $r = preg_replace('/(^|\s+)#([A-Za-z0-9_\-\.]{1,64})/e', "'\\1#'.common_tag_link('\\2')", $r); -+ // XXX: machine tags -+ return $r; -hunk ./lib/util.php 799 -- $uri = $matches[0]; -- $trailer = ''; -+ $uri = $matches[0]; -+ $trailer = ''; -hunk ./lib/util.php 802 -- # Some heuristics for extracting URIs from surrounding punctuation -- # Strip from trailing text... -- if (preg_match('/^(.*)([,.:"\']+)$/', $uri, $matches)) { -- $uri = $matches[1]; -- $trailer = $matches[2]; -- } -+ // Some heuristics for extracting URIs from surrounding punctuation -+ // Strip from trailing text... -+ if (preg_match('/^(.*)([,.:"\']+)$/', $uri, $matches)) { -+ $uri = $matches[1]; -+ $trailer = $matches[2]; -+ } -hunk ./lib/util.php 809 -- $pairs = array( -- ']' => '[', # technically disallowed in URIs, but used in Java docs -- ')' => '(', # far too frequent in Wikipedia and MSDN -- ); -- $final = substr($uri, -1, 1); -- if (isset($pairs[$final])) { -- $openers = substr_count($uri, $pairs[$final]); -- $closers = substr_count($uri, $final); -- if ($closers > $openers) { -- // Assume the paren was opened outside the URI -- $uri = substr($uri, 0, -1); -- $trailer = $final . $trailer; -- } -- } -- if ($longurl = common_longurl($uri)) { -- $longurl = htmlentities($longurl, ENT_QUOTES, 'UTF-8'); -- $title = " title='$longurl'"; -- } -- else $title = ''; -+ $pairs = array( -+ ']' => '[', // technically disallowed in URIs, but used in Java docs -+ ')' => '(', // far too frequent in Wikipedia and MSDN -+ ); -+ $final = substr($uri, -1, 1); -+ if (isset($pairs[$final])) { -+ $openers = substr_count($uri, $pairs[$final]); -+ $closers = substr_count($uri, $final); -+ if ($closers > $openers) { -+ // Assume the paren was opened outside the URI -+ $uri = substr($uri, 0, -1); -+ $trailer = $final . $trailer; -+ } -+ } -+ if ($longurl = common_longurl($uri)) { -+ $longurl = htmlentities($longurl, ENT_QUOTES, 'UTF-8'); -+ $title = " title='$longurl'"; -+ } -+ else $title = ''; -hunk ./lib/util.php 829 -- return '' . $uri . '' . $trailer; -+ return '' . $uri . '' . $trailer; -hunk ./lib/util.php 839 -- $uri_e = urlencode($uri); -- $longurl = unserialize(file_get_contents("http://api.longurl.org/v1/expand?format=php&url=$uri_e")); -- if (empty($longurl['long_url']) || $uri === $longurl['long_url']) return false; -- return stripslashes($longurl['long_url']); -+ $uri_e = urlencode($uri); -+ $longurl = unserialize(file_get_contents("http://api.longurl.org/v1/expand?format=php&url=$uri_e")); -+ if (empty($longurl['long_url']) || $uri === $longurl['long_url']) return false; -+ return stripslashes($longurl['long_url']); -hunk ./lib/util.php 850 -- return $cache[$text] = preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text); -+ return $cache[$text] = preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text); -hunk ./lib/util.php 854 -- static $url_cache = array(); -+ static $url_cache = array(); -hunk ./lib/util.php 857 -- $user = common_current_user(); -+ $user = common_current_user(); -hunk ./lib/util.php 859 -- $curlh = curl_init(); -- curl_setopt($curlh, CURLOPT_CONNECTTIMEOUT, 20); // # seconds to wait -- curl_setopt($curlh, CURLOPT_USERAGENT, 'Laconica'); -- curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true); -+ $curlh = curl_init(); -+ curl_setopt($curlh, CURLOPT_CONNECTTIMEOUT, 20); // # seconds to wait -+ curl_setopt($curlh, CURLOPT_USERAGENT, 'Laconica'); -+ curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true); -hunk ./lib/util.php 864 -- switch($user->urlshorteningservice) { -- case 'ur1.ca': -- $short_url_service = new LilUrl; -- $short_url = $short_url_service->shorten($url); -- break; -+ switch($user->urlshorteningservice) { -+ case 'ur1.ca': -+ $short_url_service = new LilUrl; -+ $short_url = $short_url_service->shorten($url); -+ break; -hunk ./lib/util.php 870 -- case '2tu.us': -- $short_url_service = new TightUrl; -- $short_url = $short_url_service->shorten($url); -- break; -+ case '2tu.us': -+ $short_url_service = new TightUrl; -+ $short_url = $short_url_service->shorten($url); -+ break; -hunk ./lib/util.php 875 -- case 'ptiturl.com': -- $short_url_service = new PtitUrl; -- $short_url = $short_url_service->shorten($url); -- break; -+ case 'ptiturl.com': -+ $short_url_service = new PtitUrl; -+ $short_url = $short_url_service->shorten($url); -+ break; -hunk ./lib/util.php 880 -- case 'bit.ly': -- curl_setopt($curlh, CURLOPT_URL, 'http://bit.ly/api?method=shorten&long_url='.urlencode($url)); -- $short_url = current(json_decode(curl_exec($curlh))->results)->hashUrl; -- break; -+ case 'bit.ly': -+ curl_setopt($curlh, CURLOPT_URL, 'http://bit.ly/api?method=shorten&long_url='.urlencode($url)); -+ $short_url = current(json_decode(curl_exec($curlh))->results)->hashUrl; -+ break; -hunk ./lib/util.php 885 -- case 'is.gd': -- curl_setopt($curlh, CURLOPT_URL, 'http://is.gd/api.php?longurl='.urlencode($url)); -- $short_url = curl_exec($curlh); -- break; -- case 'snipr.com': -- curl_setopt($curlh, CURLOPT_URL, 'http://snipr.com/site/snip?r=simple&link='.urlencode($url)); -- $short_url = curl_exec($curlh); -- break; -- case 'metamark.net': -- curl_setopt($curlh, CURLOPT_URL, 'http://metamark.net/api/rest/simple?long_url='.urlencode($url)); -- $short_url = curl_exec($curlh); -- break; -- case 'tinyurl.com': -- curl_setopt($curlh, CURLOPT_URL, 'http://tinyurl.com/api-create.php?url='.urlencode($url)); -- $short_url = curl_exec($curlh); -- break; -- default: -- $short_url = false; -- } -+ case 'is.gd': -+ curl_setopt($curlh, CURLOPT_URL, 'http://is.gd/api.php?longurl='.urlencode($url)); -+ $short_url = curl_exec($curlh); -+ break; -+ case 'snipr.com': -+ curl_setopt($curlh, CURLOPT_URL, 'http://snipr.com/site/snip?r=simple&link='.urlencode($url)); -+ $short_url = curl_exec($curlh); -+ break; -+ case 'metamark.net': -+ curl_setopt($curlh, CURLOPT_URL, 'http://metamark.net/api/rest/simple?long_url='.urlencode($url)); -+ $short_url = curl_exec($curlh); -+ break; -+ case 'tinyurl.com': -+ curl_setopt($curlh, CURLOPT_URL, 'http://tinyurl.com/api-create.php?url='.urlencode($url)); -+ $short_url = curl_exec($curlh); -+ break; -+ default: -+ $short_url = false; -+ } -hunk ./lib/util.php 905 -- curl_close($curlh); -+ curl_close($curlh); -hunk ./lib/util.php 907 -- if ($short_url) { -+ if ($short_url) { -hunk ./lib/util.php 909 -- return (string)$short_url; -- } -- return $url; -+ return (string)$short_url; -+ } -+ return $url; -hunk ./lib/util.php 915 -- $xmlStr = htmlentities(iconv('UTF-8', 'UTF-8//IGNORE', $str), ENT_NOQUOTES, 'UTF-8'); -+ $xmlStr = htmlentities(iconv('UTF-8', 'UTF-8//IGNORE', $str), ENT_NOQUOTES, 'UTF-8'); -hunk ./lib/util.php 917 -- // Replace control, formatting, and surrogate characters with '*', ala Twitter -- return preg_replace('/[\p{Cc}\p{Cf}\p{Cs}]/u', '*', $str); -+ // Replace control, formatting, and surrogate characters with '*', ala Twitter -+ return preg_replace('/[\p{Cc}\p{Cf}\p{Cs}]/u', '*', $str); -hunk ./lib/util.php 922 -- $canonical = common_canonical_tag($tag); -- $url = common_local_url('tag', array('tag' => $canonical)); -- return ''; -+ $canonical = common_canonical_tag($tag); -+ $url = common_local_url('tag', array('tag' => $canonical)); -+ return ''; -hunk ./lib/util.php 928 -- return strtolower(str_replace(array('-', '_', '.'), '', $tag)); -+ return strtolower(str_replace(array('-', '_', '.'), '', $tag)); -hunk ./lib/util.php 932 -- return preg_match('/^[A-Za-z0-9_\-\.]{1,64}$/', $str); -+ return preg_match('/^[A-Za-z0-9_\-\.]{1,64}$/', $str); -hunk ./lib/util.php 936 -- $sender = Profile::staticGet($sender_id); -- $recipient = common_relative_profile($sender, common_canonical_nickname($nickname)); -- if ($recipient) { -- return ''.$nickname.''; -- } else { -- return $nickname; -- } -+ $sender = Profile::staticGet($sender_id); -+ $recipient = common_relative_profile($sender, common_canonical_nickname($nickname)); -+ if ($recipient) { -+ return ''.$nickname.''; -+ } else { -+ return $nickname; + } -hunk ./lib/util.php 946 -- $user = User::staticGet($sender_id); -- if (!$user) { -- return $tag; -- } -- $tagged = Profile_tag::getTagged($user->id, common_canonical_tag($tag)); -- if ($tagged) { -- $url = common_local_url('subscriptions', -- array('nickname' => $user->nickname, -- 'tag' => $tag)); -- return ''.$tag.''; -- } else { -- return $tag; -- } -+ $user = User::staticGet($sender_id); -+ if (!$user) { -+ return $tag; -+ } -+ $tagged = Profile_tag::getTagged($user->id, common_canonical_tag($tag)); -+ if ($tagged) { -+ $url = common_local_url('subscriptions', -+ array('nickname' => $user->nickname, -+ 'tag' => $tag)); -+ return ''.$tag.''; -+ } else { -+ return $tag; -+ } -hunk ./lib/util.php 961 --function common_relative_profile($sender, $nickname, $dt=NULL) { -- # Try to find profiles this profile is subscribed to that have this nickname -- $recipient = new Profile(); -- # XXX: use a join instead of a subquery -- $recipient->whereAdd('EXISTS (SELECT subscribed from subscription where subscriber = '.$sender->id.' and subscribed = id)', 'AND'); -- $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND'); -- if ($recipient->find(TRUE)) { -- # XXX: should probably differentiate between profiles with -- # the same name by date of most recent update -- return $recipient; -- } -- # Try to find profiles that listen to this profile and that have this nickname -- $recipient = new Profile(); -- # XXX: use a join instead of a subquery -- $recipient->whereAdd('EXISTS (SELECT subscriber from subscription where subscribed = '.$sender->id.' and subscriber = id)', 'AND'); -- $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND'); -- if ($recipient->find(TRUE)) { -- # XXX: should probably differentiate between profiles with -- # the same name by date of most recent update -- return $recipient; -- } -- # If this is a local user, try to find a local user with that nickname. -- $sender = User::staticGet($sender->id); -- if ($sender) { -- $recipient_user = User::staticGet('nickname', $nickname); -- if ($recipient_user) { -- return $recipient_user->getProfile(); -- } -- } -- # Otherwise, no links. @messages from local users to remote users, -- # or from remote users to other remote users, are just -- # outside our ability to make intelligent guesses about -- return NULL; -+function common_relative_profile($sender, $nickname, $dt=null) { -+ // Try to find profiles this profile is subscribed to that have this nickname -+ $recipient = new Profile(); -+ // XXX: use a join instead of a subquery -+ $recipient->whereAdd('EXISTS (SELECT subscribed from subscription where subscriber = '.$sender->id.' and subscribed = id)', 'AND'); -+ $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND'); -+ if ($recipient->find(TRUE)) { -+ // XXX: should probably differentiate between profiles with -+ // the same name by date of most recent update -+ return $recipient; -+ } -+ // Try to find profiles that listen to this profile and that have this nickname -+ $recipient = new Profile(); -+ // XXX: use a join instead of a subquery -+ $recipient->whereAdd('EXISTS (SELECT subscriber from subscription where subscribed = '.$sender->id.' and subscriber = id)', 'AND'); -+ $recipient->whereAdd('nickname = "' . trim($nickname) . '"', 'AND'); -+ if ($recipient->find(TRUE)) { -+ // XXX: should probably differentiate between profiles with -+ // the same name by date of most recent update -+ return $recipient; -+ } -+ // If this is a local user, try to find a local user with that nickname. -+ $sender = User::staticGet($sender->id); -+ if ($sender) { -+ $recipient_user = User::staticGet('nickname', $nickname); -+ if ($recipient_user) { -+ return $recipient_user->getProfile(); -+ } -+ } -+ // Otherwise, no links. @messages from local users to remote users, -+ // or from remote users to other remote users, are just -+ // outside our ability to make intelligent guesses about -+ return null; -hunk ./lib/util.php 998 --function common_avatar_filename($id, $extension, $size=NULL, $extra=NULL) { -- global $config; -+function common_avatar_filename($id, $extension, $size=null, $extra=null) { -+ global $config; -hunk ./lib/util.php 1001 -- if ($size) { -- return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension; -- } else { -- return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension; -- } -+ if ($size) { -+ return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension; -+ } else { -+ return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension; -+ } -hunk ./lib/util.php 1009 -- global $config; -- return INSTALLDIR . '/avatar/' . $filename; -+ global $config; -+ return INSTALLDIR . '/avatar/' . $filename; -hunk ./lib/util.php 1014 -- return common_path('avatar/'.$filename); -+ return common_path('avatar/'.$filename); -hunk ./lib/util.php 1018 -- $server = common_config('avatar', 'server'); -- if ($server) { -- return 'http://'.$server.'/'.$avatar->filename; -- } else { -- return $avatar->url; +hunk ./lib/action.php 49 +- function etag() { +- return NULL; - } -+ $server = common_config('avatar', 'server'); -+ if ($server) { -+ return 'http://'.$server.'/'.$avatar->filename; -+ } else { -+ return $avatar->url; ++ function etag() ++ { ++ return null; + } -hunk ./lib/util.php 1027 -- static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', -- AVATAR_STREAM_SIZE => 'stream', -- AVATAR_MINI_SIZE => 'mini'); -- return theme_path('default-avatar-'.$sizenames[$size].'.png'); -+ static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', -+ AVATAR_STREAM_SIZE => 'stream', -+ AVATAR_MINI_SIZE => 'mini'); -+ return theme_path('default-avatar-'.$sizenames[$size].'.png'); -hunk ./lib/util.php 1033 --function common_local_url($action, $args=NULL, $fragment=NULL) { -- $url = NULL; -- if (common_config('site','fancy')) { -- $url = common_fancy_url($action, $args); -- } else { -- $url = common_simple_url($action, $args); -- } -- if (!is_null($fragment)) { -- $url .= '#'.$fragment; +hunk ./lib/action.php 54 +- function is_readonly() { +- return false; - } -- return $url; -+function common_local_url($action, $args=null, $fragment=null) { -+ $url = null; -+ if (common_config('site','fancy')) { -+ $url = common_fancy_url($action, $args); -+ } else { -+ $url = common_simple_url($action, $args); -+ } -+ if (!is_null($fragment)) { -+ $url .= '#'.$fragment; ++ function is_readonly() ++ { ++ return false; + } -+ return $url; -hunk ./lib/util.php 1046 --function common_fancy_url($action, $args=NULL) { -- switch (strtolower($action)) { -- case 'public': -- if ($args && isset($args['page'])) { -- return common_path('?page=' . $args['page']); -- } else { -- return common_path(''); -- } -- case 'featured': -- if ($args && isset($args['page'])) { -- return common_path('featured?page=' . $args['page']); -- } else { -- return common_path('featured'); -- } -- case 'favorited': -- if ($args && isset($args['page'])) { -- return common_path('favorited?page=' . $args['page']); -- } else { -- return common_path('favorited'); -- } -- case 'publicrss': -- return common_path('rss'); -- case 'publicatom': -- return common_path("api/statuses/public_timeline.atom"); -- case 'publicxrds': -- return common_path('xrds'); -- case 'featuredrss': -- return common_path('featuredrss'); -- case 'favoritedrss': -- return common_path('favoritedrss'); -- case 'opensearch': -- if ($args && $args['type']) { -- return common_path('opensearch/'.$args['type']); -- } else { -- return common_path('opensearch/people'); -- } -- case 'doc': -- return common_path('doc/'.$args['title']); -+function common_fancy_url($action, $args=null) { -+ switch (strtolower($action)) { -+ case 'public': -+ if ($args && isset($args['page'])) { -+ return common_path('?page=' . $args['page']); -+ } else { -+ return common_path(''); -+ } -+ case 'featured': -+ if ($args && isset($args['page'])) { -+ return common_path('featured?page=' . $args['page']); -+ } else { -+ return common_path('featured'); -+ } -+ case 'favorited': -+ if ($args && isset($args['page'])) { -+ return common_path('favorited?page=' . $args['page']); -+ } else { -+ return common_path('favorited'); -+ } -+ case 'publicrss': -+ return common_path('rss'); -+ case 'publicatom': -+ return common_path("api/statuses/public_timeline.atom"); -+ case 'publicxrds': -+ return common_path('xrds'); -+ case 'featuredrss': -+ return common_path('featuredrss'); -+ case 'favoritedrss': -+ return common_path('favoritedrss'); -+ case 'opensearch': -+ if ($args && $args['type']) { -+ return common_path('opensearch/'.$args['type']); -+ } else { -+ return common_path('opensearch/people'); -+ } -+ case 'doc': -+ return common_path('doc/'.$args['title']); -hunk ./lib/util.php 1085 -- case 'login': -- case 'logout': -- case 'subscribe': -- case 'unsubscribe': -- case 'invite': -- return common_path('main/'.$action); -- case 'tagother': -- return common_path('main/tagother?id='.$args['id']); -- case 'register': -- if ($args && $args['code']) { -- return common_path('main/register/'.$args['code']); -- } else { -- return common_path('main/register'); -- } -- case 'remotesubscribe': -- if ($args && $args['nickname']) { -- return common_path('main/remote?nickname=' . $args['nickname']); -- } else { -- return common_path('main/remote'); -- } -- case 'nudge': -- return common_path($args['nickname'].'/nudge'); -- case 'openidlogin': -- return common_path('main/openid'); -- case 'profilesettings': -- return common_path('settings/profile'); -- case 'emailsettings': -- return common_path('settings/email'); -- case 'openidsettings': -- return common_path('settings/openid'); -- case 'smssettings': -- return common_path('settings/sms'); -- case 'twittersettings': -- return common_path('settings/twitter'); -- case 'othersettings': -- return common_path('settings/other'); -+ case 'login': -+ case 'logout': -+ case 'subscribe': -+ case 'unsubscribe': -+ case 'invite': -+ return common_path('main/'.$action); -+ case 'tagother': -+ return common_path('main/tagother?id='.$args['id']); -+ case 'register': -+ if ($args && $args['code']) { -+ return common_path('main/register/'.$args['code']); -+ } else { -+ return common_path('main/register'); -+ } -+ case 'remotesubscribe': -+ if ($args && $args['nickname']) { -+ return common_path('main/remote?nickname=' . $args['nickname']); -+ } else { -+ return common_path('main/remote'); -+ } -+ case 'nudge': -+ return common_path($args['nickname'].'/nudge'); -+ case 'openidlogin': -+ return common_path('main/openid'); -+ case 'profilesettings': -+ return common_path('settings/profile'); -+ case 'emailsettings': -+ return common_path('settings/email'); -+ case 'openidsettings': -+ return common_path('settings/openid'); -+ case 'smssettings': -+ return common_path('settings/sms'); -+ case 'twittersettings': -+ return common_path('settings/twitter'); -+ case 'othersettings': -+ return common_path('settings/other'); -hunk ./lib/util.php 1123 -- case 'newnotice': -- if ($args && $args['replyto']) { -- return common_path('notice/new?replyto='.$args['replyto']); +hunk ./lib/action.php 59 +- function arg($key, $def=NULL) { +- if (array_key_exists($key, $this->args)) { +- return $this->args[$key]; - } else { -- return common_path('notice/new'); +- return $def; - } -- case 'shownotice': -- return common_path('notice/'.$args['notice']); -- case 'deletenotice': -- if ($args && $args['notice']) { -- return common_path('notice/delete/'.$args['notice']); -- } else { -- return common_path('notice/delete'); -- } -- case 'microsummary': -- case 'xrds': -- case 'foaf': -- return common_path($args['nickname'].'/'.$action); -- case 'all': -- case 'replies': -- case 'inbox': -- case 'outbox': -- if ($args && isset($args['page'])) { -- return common_path($args['nickname'].'/'.$action.'?page=' . $args['page']); -- } else { -- return common_path($args['nickname'].'/'.$action); -- } -- case 'subscriptions': -- case 'subscribers': -- $nickname = $args['nickname']; -- unset($args['nickname']); -- if (isset($args['tag'])) { -- $tag = $args['tag']; -- unset($args['tag']); -- } -- $params = http_build_query($args); -- if ($params) { -- return common_path($nickname.'/'.$action . (($tag) ? '/' . $tag : '') . '?' . $params); -- } else { -- return common_path($nickname.'/'.$action . (($tag) ? '/' . $tag : '')); -- } -- case 'allrss': -- return common_path($args['nickname'].'/all/rss'); -- case 'repliesrss': -- return common_path($args['nickname'].'/replies/rss'); -- case 'userrss': -+ case 'newnotice': -+ if ($args && $args['replyto']) { -+ return common_path('notice/new?replyto='.$args['replyto']); -+ } else { -+ return common_path('notice/new'); -+ } -+ case 'shownotice': -+ return common_path('notice/'.$args['notice']); -+ case 'deletenotice': -+ if ($args && $args['notice']) { -+ return common_path('notice/delete/'.$args['notice']); -+ } else { -+ return common_path('notice/delete'); -+ } -+ case 'microsummary': -+ case 'xrds': -+ case 'foaf': -+ return common_path($args['nickname'].'/'.$action); -+ case 'all': -+ case 'replies': -+ case 'inbox': -+ case 'outbox': -+ if ($args && isset($args['page'])) { -+ return common_path($args['nickname'].'/'.$action.'?page=' . $args['page']); -+ } else { -+ return common_path($args['nickname'].'/'.$action); -+ } -+ case 'subscriptions': -+ case 'subscribers': -+ $nickname = $args['nickname']; -+ unset($args['nickname']); -+ if (isset($args['tag'])) { -+ $tag = $args['tag']; -+ unset($args['tag']); -+ } -+ $params = http_build_query($args); -+ if ($params) { -+ return common_path($nickname.'/'.$action . (($tag) ? '/' . $tag : '') . '?' . $params); -+ } else { -+ return common_path($nickname.'/'.$action . (($tag) ? '/' . $tag : '')); -+ } -+ case 'allrss': -+ return common_path($args['nickname'].'/all/rss'); -+ case 'repliesrss': -+ return common_path($args['nickname'].'/replies/rss'); -+ case 'userrss': -hunk ./lib/util.php 1170 -- return common_path($args['nickname'].'/rss?limit=' . $args['limit']); -- return common_path($args['nickname'].'/rss'); -- case 'showstream': -- if ($args && isset($args['page'])) { -- return common_path($args['nickname'].'?page=' . $args['page']); -- } else { -- return common_path($args['nickname']); -- } -+ return common_path($args['nickname'].'/rss?limit=' . $args['limit']); -+ return common_path($args['nickname'].'/rss'); -+ case 'showstream': -+ if ($args && isset($args['page'])) { -+ return common_path($args['nickname'].'?page=' . $args['page']); -+ } else { -+ return common_path($args['nickname']); -+ } -hunk ./lib/util.php 1179 -- case 'usertimeline': -- return common_path("api/statuses/user_timeline/".$args['nickname'].".atom"); -- case 'confirmaddress': -- return common_path('main/confirmaddress/'.$args['code']); -- case 'userbyid': -- return common_path('user/'.$args['id']); -- case 'recoverpassword': -- $path = 'main/recoverpassword'; -- if ($args['code']) { -- $path .= '/' . $args['code']; -- } -- return common_path($path); -- case 'imsettings': -- return common_path('settings/im'); -- case 'peoplesearch': -- return common_path('search/people' . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'noticesearch': -- return common_path('search/notice' . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'noticesearchrss': -- return common_path('search/notice/rss' . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'avatarbynickname': -- return common_path($args['nickname'].'/avatar/'.$args['size']); -- case 'tag': -- if (isset($args['tag']) && $args['tag']) { -- $path = 'tag/' . $args['tag']; -- unset($args['tag']); -- } else { -- $path = 'tags'; -- } -- return common_path($path . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'peopletag': -- $path = 'peopletag/' . $args['tag']; -- unset($args['tag']); -- return common_path($path . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'tags': -- return common_path('tags' . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'favor': -- return common_path('main/favor'); -- case 'disfavor': -- return common_path('main/disfavor'); -- case 'showfavorites': -- if ($args && isset($args['page'])) { -- return common_path($args['nickname'].'/favorites?page=' . $args['page']); -- } else { -- return common_path($args['nickname'].'/favorites'); -- } -- case 'favoritesrss': -- return common_path($args['nickname'].'/favorites/rss'); -- case 'showmessage': -- return common_path('message/' . $args['message']); -- case 'newmessage': -- return common_path('message/new' . (($args) ? ('?' . http_build_query($args)) : '')); -- case 'api': -- # XXX: do fancy URLs for all the API methods -- switch (strtolower($args['apiaction'])) { -- case 'statuses': -- switch (strtolower($args['method'])) { -- case 'user_timeline.rss': -- return common_path('api/statuses/user_timeline/'.$args['argument'].'.rss'); -- case 'user_timeline.atom': -- return common_path('api/statuses/user_timeline/'.$args['argument'].'.atom'); -- case 'user_timeline.json': -- return common_path('api/statuses/user_timeline/'.$args['argument'].'.json'); -- case 'user_timeline.xml': -- return common_path('api/statuses/user_timeline/'.$args['argument'].'.xml'); -- default: return common_simple_url($action, $args); -- } -- default: return common_simple_url($action, $args); -- } -- case 'sup': -- if ($args && isset($args['seconds'])) { -- return common_path('main/sup?seconds='.$args['seconds']); -- } else { -- return common_path('main/sup'); -- } -- default: -- return common_simple_url($action, $args); - } -+ case 'usertimeline': -+ return common_path("api/statuses/user_timeline/".$args['nickname'].".atom"); -+ case 'confirmaddress': -+ return common_path('main/confirmaddress/'.$args['code']); -+ case 'userbyid': -+ return common_path('user/'.$args['id']); -+ case 'recoverpassword': -+ $path = 'main/recoverpassword'; -+ if ($args['code']) { -+ $path .= '/' . $args['code']; -+ } -+ return common_path($path); -+ case 'imsettings': -+ return common_path('settings/im'); -+ case 'peoplesearch': -+ return common_path('search/people' . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'noticesearch': -+ return common_path('search/notice' . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'noticesearchrss': -+ return common_path('search/notice/rss' . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'avatarbynickname': -+ return common_path($args['nickname'].'/avatar/'.$args['size']); -+ case 'tag': -+ if (isset($args['tag']) && $args['tag']) { -+ $path = 'tag/' . $args['tag']; -+ unset($args['tag']); -+ } else { -+ $path = 'tags'; -+ } -+ return common_path($path . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'peopletag': -+ $path = 'peopletag/' . $args['tag']; -+ unset($args['tag']); -+ return common_path($path . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'tags': -+ return common_path('tags' . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'favor': -+ return common_path('main/favor'); -+ case 'disfavor': -+ return common_path('main/disfavor'); -+ case 'showfavorites': -+ if ($args && isset($args['page'])) { -+ return common_path($args['nickname'].'/favorites?page=' . $args['page']); -+ } else { -+ return common_path($args['nickname'].'/favorites'); -+ } -+ case 'favoritesrss': -+ return common_path($args['nickname'].'/favorites/rss'); -+ case 'showmessage': -+ return common_path('message/' . $args['message']); -+ case 'newmessage': -+ return common_path('message/new' . (($args) ? ('?' . http_build_query($args)) : '')); -+ case 'api': -+ // XXX: do fancy URLs for all the API methods -+ switch (strtolower($args['apiaction'])) { -+ case 'statuses': -+ switch (strtolower($args['method'])) { -+ case 'user_timeline.rss': -+ return common_path('api/statuses/user_timeline/'.$args['argument'].'.rss'); -+ case 'user_timeline.atom': -+ return common_path('api/statuses/user_timeline/'.$args['argument'].'.atom'); -+ case 'user_timeline.json': -+ return common_path('api/statuses/user_timeline/'.$args['argument'].'.json'); -+ case 'user_timeline.xml': -+ return common_path('api/statuses/user_timeline/'.$args['argument'].'.xml'); -+ default: return common_simple_url($action, $args); -+ } -+ default: return common_simple_url($action, $args); -+ } -+ case 'sup': -+ if ($args && isset($args['seconds'])) { -+ return common_path('main/sup?seconds='.$args['seconds']); ++ function arg($key, $def=null) ++ { ++ if (array_key_exists($key, $this->args)) { ++ return $this->args[$key]; + } else { -+ return common_path('main/sup'); -+ } -+ default: -+ return common_simple_url($action, $args); -+ } -hunk ./lib/util.php 1259 --function common_simple_url($action, $args=NULL) { -- global $config; -- /* XXX: pretty URLs */ -- $extra = ''; -- if ($args) { -- foreach ($args as $key => $value) { -- $extra .= "&${key}=${value}"; -- } -- } -- return common_path("index.php?action=${action}${extra}"); -+function common_simple_url($action, $args=null) { -+ global $config; -+ /* XXX: pretty URLs */ -+ $extra = ''; -+ if ($args) { -+ foreach ($args as $key => $value) { -+ $extra .= "&${key}=${value}"; ++ return $def; + } + } -+ return common_path("index.php?action=${action}${extra}"); -hunk ./lib/util.php 1272 -- global $config; -- $pathpart = ($config['site']['path']) ? $config['site']['path']."/" : ''; -- return "http://".$config['site']['server'].'/'.$pathpart.$relative; -+ global $config; -+ $pathpart = ($config['site']['path']) ? $config['site']['path']."/" : ''; -+ return "http://".$config['site']['server'].'/'.$pathpart.$relative; -hunk ./lib/util.php 1278 -- // XXX: do some sexy date formatting -- // return date(DATE_RFC822, $dt); -- $t = strtotime($dt); -- $now = time(); -- $diff = $now - $t; -+ // XXX: do some sexy date formatting -+ // return date(DATE_RFC822, $dt); -+ $t = strtotime($dt); -+ $now = time(); -+ $diff = $now - $t; -hunk ./lib/util.php 1284 -- if ($now < $t) { # that shouldn't happen! -- return common_exact_date($dt); -- } else if ($diff < 60) { -- return _('a few seconds ago'); -- } else if ($diff < 92) { -- return _('about a minute ago'); -- } else if ($diff < 3300) { -- return sprintf(_('about %d minutes ago'), round($diff/60)); -- } else if ($diff < 5400) { -- return _('about an hour ago'); -- } else if ($diff < 22 * 3600) { -- return sprintf(_('about %d hours ago'), round($diff/3600)); -- } else if ($diff < 37 * 3600) { -- return _('about a day ago'); -- } else if ($diff < 24 * 24 * 3600) { -- return sprintf(_('about %d days ago'), round($diff/(24*3600))); -- } else if ($diff < 46 * 24 * 3600) { -- return _('about a month ago'); -- } else if ($diff < 330 * 24 * 3600) { -- return sprintf(_('about %d months ago'), round($diff/(30*24*3600))); -- } else if ($diff < 480 * 24 * 3600) { -- return _('about a year ago'); -- } else { -- return common_exact_date($dt); -- } -+ if ($now < $t) { // that shouldn't happen! -+ return common_exact_date($dt); -+ } else if ($diff < 60) { -+ return _('a few seconds ago'); -+ } else if ($diff < 92) { -+ return _('about a minute ago'); -+ } else if ($diff < 3300) { -+ return sprintf(_('about %d minutes ago'), round($diff/60)); -+ } else if ($diff < 5400) { -+ return _('about an hour ago'); -+ } else if ($diff < 22 * 3600) { -+ return sprintf(_('about %d hours ago'), round($diff/3600)); -+ } else if ($diff < 37 * 3600) { -+ return _('about a day ago'); -+ } else if ($diff < 24 * 24 * 3600) { -+ return sprintf(_('about %d days ago'), round($diff/(24*3600))); -+ } else if ($diff < 46 * 24 * 3600) { -+ return _('about a month ago'); -+ } else if ($diff < 330 * 24 * 3600) { -+ return sprintf(_('about %d months ago'), round($diff/(30*24*3600))); -+ } else if ($diff < 480 * 24 * 3600) { -+ return _('about a year ago'); -+ } else { -+ return common_exact_date($dt); -+ } -hunk ./lib/util.php 1320 -- $dateStr = date('d F Y H:i:s', strtotime($dt)); -- $d = new DateTime($dateStr, $_utc); -- $d->setTimezone($_siteTz); -- return $d->format(DATE_RFC850); -+ $dateStr = date('d F Y H:i:s', strtotime($dt)); -+ $d = new DateTime($dateStr, $_utc); -+ $d->setTimezone($_siteTz); -+ return $d->format(DATE_RFC850); -hunk ./lib/util.php 1327 -- $dateStr = date('d F Y H:i:s', strtotime($dt)); -- $d = new DateTime($dateStr, new DateTimeZone('UTC')); -- $d->setTimezone(new DateTimeZone(common_timezone())); -- return $d->format(DATE_W3C); -+ $dateStr = date('d F Y H:i:s', strtotime($dt)); -+ $d = new DateTime($dateStr, new DateTimeZone('UTC')); -+ $d->setTimezone(new DateTimeZone(common_timezone())); -+ return $d->format(DATE_W3C); -hunk ./lib/util.php 1334 -- $dateStr = date('d F Y H:i:s', strtotime($dt)); -- $d = new DateTime($dateStr, new DateTimeZone('UTC')); -- $d->setTimezone(new DateTimeZone(common_timezone())); -- return $d->format('r'); -+ $dateStr = date('d F Y H:i:s', strtotime($dt)); -+ $d = new DateTime($dateStr, new DateTimeZone('UTC')); -+ $d->setTimezone(new DateTimeZone(common_timezone())); -+ return $d->format('r'); -hunk ./lib/util.php 1341 -- $dateStr = date('d F Y H:i:s', strtotime($dt)); -- $d = new DateTime($dateStr, new DateTimeZone('UTC')); -- $d->setTimezone(new DateTimeZone(common_timezone())); -- return $d->format('c'); -+ $dateStr = date('d F Y H:i:s', strtotime($dt)); -+ $d = new DateTime($dateStr, new DateTimeZone('UTC')); -+ $d->setTimezone(new DateTimeZone(common_timezone())); -+ return $d->format('c'); -hunk ./lib/util.php 1348 -- return strftime('%Y-%m-%d %H:%M:%S', time()); -+ return strftime('%Y-%m-%d %H:%M:%S', time()); -hunk ./lib/util.php 1352 -- static $status = array(301 => "Moved Permanently", -- 302 => "Found", -- 303 => "See Other", -- 307 => "Temporary Redirect"); -- header("Status: ${code} $status[$code]"); -- header("Location: $url"); -+ static $status = array(301 => "Moved Permanently", -+ 302 => "Found", -+ 303 => "See Other", -+ 307 => "Temporary Redirect"); -+ header("Status: ${code} $status[$code]"); -+ header("Location: $url"); -hunk ./lib/util.php 1359 -- common_start_xml('a', -- '-//W3C//DTD XHTML 1.0 Strict//EN', -- 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); -- common_element('a', array('href' => $url), $url); -- common_end_xml(); -+ common_start_xml('a', -+ '-//W3C//DTD XHTML 1.0 Strict//EN', -+ 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); -+ common_element('a', array('href' => $url), $url); -+ common_end_xml(); -hunk ./lib/util.php 1368 -- # Alternative reply format -- $tname = false; -- if (preg_match('/^T ([A-Z0-9]{1,64}) /', $notice->content, $match)) { -- $tname = $match[1]; -- } -- # extract all @messages -- $cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $notice->content, $match); -+ // Alternative reply format -+ $tname = false; -+ if (preg_match('/^T ([A-Z0-9]{1,64}) /', $notice->content, $match)) { -+ $tname = $match[1]; -+ } -+ // extract all @messages -+ $cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $notice->content, $match); -hunk ./lib/util.php 1376 -- $names = array(); -+ $names = array(); -hunk ./lib/util.php 1378 -- if ($cnt || $tname) { -- # XXX: is there another way to make an array copy? -- $names = ($tname) ? array_unique(array_merge(array(strtolower($tname)), $match[1])) : array_unique($match[1]); -- } -+ if ($cnt || $tname) { -+ // XXX: is there another way to make an array copy? -+ $names = ($tname) ? array_unique(array_merge(array(strtolower($tname)), $match[1])) : array_unique($match[1]); -+ } -hunk ./lib/util.php 1383 -- $sender = Profile::staticGet($notice->profile_id); -+ $sender = Profile::staticGet($notice->profile_id); -hunk ./lib/util.php 1385 -- $replied = array(); -+ $replied = array(); -hunk ./lib/util.php 1387 -- # store replied only for first @ (what user/notice what the reply directed, -- # we assume first @ is it) -+ // store replied only for first @ (what user/notice what the reply directed, -+ // we assume first @ is it) -hunk ./lib/util.php 1390 -- for ($i=0; $icreated); -- if (!$recipient) { -- continue; -- } -- if ($i == 0 && ($recipient->id != $sender->id) && !$notice->reply_to) { # Don't save reply to self -- $reply_for = $recipient; -- $recipient_notice = $reply_for->getCurrentNotice(); -- if ($recipient_notice) { -- $orig = clone($notice); -- $notice->reply_to = $recipient_notice->id; -- $notice->update($orig); -- } -- } -- # Don't save replies from blocked profile to local user -+ for ($i=0; $icreated); -+ if (!$recipient) { -+ continue; -+ } -+ if ($i == 0 && ($recipient->id != $sender->id) && !$notice->reply_to) { // Don't save reply to self -+ $reply_for = $recipient; -+ $recipient_notice = $reply_for->getCurrentNotice(); -+ if ($recipient_notice) { -+ $orig = clone($notice); -+ $notice->reply_to = $recipient_notice->id; -+ $notice->update($orig); -+ } -+ } -+ // Don't save replies from blocked profile to local user -hunk ./lib/util.php 1410 -- $reply = new Reply(); -- $reply->notice_id = $notice->id; -- $reply->profile_id = $recipient->id; -- $id = $reply->insert(); -- if (!$id) { -- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -- common_log(LOG_ERR, 'DB error inserting reply: ' . $last_error->message); -- common_server_error(sprintf(_('DB error inserting reply: %s'), $last_error->message)); -- return; -- } else { -- $replied[$recipient->id] = 1; -- } +hunk ./lib/action.php 68 +- function trimmed($key, $def=NULL) { +- $arg = $this->arg($key, $def); +- return (is_string($arg)) ? trim($arg) : $arg; - } -+ $reply = new Reply(); -+ $reply->notice_id = $notice->id; -+ $reply->profile_id = $recipient->id; -+ $id = $reply->insert(); -+ if (!$id) { -+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -+ common_log(LOG_ERR, 'DB error inserting reply: ' . $last_error->message); -+ common_server_error(sprintf(_('DB error inserting reply: %s'), $last_error->message)); -+ return; -+ } else { -+ $replied[$recipient->id] = 1; -+ } -+ } -hunk ./lib/util.php 1424 -- # Hash format replies, too -- $cnt = preg_match_all('/(?:^|\s)@#([a-z0-9]{1,64})/', $notice->content, $match); -- if ($cnt) { -- foreach ($match[1] as $tag) { -- $tagged = Profile_tag::getTagged($sender->id, $tag); -- foreach ($tagged as $t) { -- if (!$replied[$t->id]) { -- # Don't save replies from blocked profile to local user -+ // Hash format replies, too -+ $cnt = preg_match_all('/(?:^|\s)@#([a-z0-9]{1,64})/', $notice->content, $match); -+ if ($cnt) { -+ foreach ($match[1] as $tag) { -+ $tagged = Profile_tag::getTagged($sender->id, $tag); -+ foreach ($tagged as $t) { -+ if (!$replied[$t->id]) { -+ // Don't save replies from blocked profile to local user -hunk ./lib/util.php 1436 -- $reply = new Reply(); -- $reply->notice_id = $notice->id; -- $reply->profile_id = $t->id; -- $id = $reply->insert(); -- if (!$id) { -- common_log_db_error($reply, 'INSERT', __FILE__); -- return; ++ function trimmed($key, $def=null) ++ { ++ $arg = $this->arg($key, $def); ++ return (is_string($arg)) ? trim($arg) : $arg; ++ } +hunk ./lib/action.php 74 +- # Note: argarray ignored, since it's now passed in in prepare() ++ // Note: argarray ignored, since it's now passed in in prepare() +hunk ./lib/action.php 76 +- function handle($argarray=NULL) { ++ function handle($argarray=null) ++ { +hunk ./lib/action.php 79 +- $lm = $this->last_modified(); +- $etag = $this->etag(); ++ $lm = $this->last_modified(); ++ $etag = $this->etag(); +hunk ./lib/action.php 82 +- if ($etag) { +- header('ETag: ' . $etag); +- } ++ if ($etag) { ++ header('ETag: ' . $etag); ++ } +hunk ./lib/action.php 86 +- if ($lm) { +- header('Last-Modified: ' . date(DATE_RFC1123, $lm)); +- $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; +- if ($if_modified_since) { +- $ims = strtotime($if_modified_since); +- if ($lm <= $ims) { +- if (!$etag || $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { +- header('HTTP/1.1 304 Not Modified'); +- # Better way to do this? +- exit(0); - } - } - } - } - } -+ $reply = new Reply(); -+ $reply->notice_id = $notice->id; -+ $reply->profile_id = $t->id; -+ $id = $reply->insert(); -+ if (!$id) { -+ common_log_db_error($reply, 'INSERT', __FILE__); -+ return; ++ if ($lm) { ++ header('Last-Modified: ' . date(DATE_RFC1123, $lm)); ++ $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; ++ if ($if_modified_since) { ++ $ims = strtotime($if_modified_since); ++ if ($lm <= $ims) { ++ if (!$etag || ++ $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { ++ header('HTTP/1.1 304 Not Modified'); ++ // Better way to do this? ++ exit(0); + } + } + } + } + } -hunk ./lib/util.php 1452 -- // Check to see if notice should go to Twitter -- $flink = Foreign_link::getByUserID($notice->profile_id, 1); // 1 == Twitter -- if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) { -+ // Check to see if notice should go to Twitter -+ $flink = Foreign_link::getByUserID($notice->profile_id, 1); // 1 == Twitter -+ if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) { -hunk ./lib/util.php 1456 -- // If it's not a Twitter-style reply, or if the user WANTS to send replies... -+ // If it's not a Twitter-style reply, or if the user WANTS to send replies... -hunk ./lib/util.php 1458 -- if (!preg_match('/^@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) || -- (($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) == FOREIGN_NOTICE_SEND_REPLY)) { -+ if (!preg_match('/^@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) || -+ (($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) == FOREIGN_NOTICE_SEND_REPLY)) { -hunk ./lib/util.php 1461 -- $result = common_twitter_broadcast($notice, $flink); -+ $result = common_twitter_broadcast($notice, $flink); -hunk ./lib/util.php 1463 -- if (!$result) { -- common_debug('Unable to send notice: ' . $notice->id . ' to Twitter.', __FILE__); -- } -- } -- } -+ if (!$result) { -+ common_debug('Unable to send notice: ' . $notice->id . ' to Twitter.', __FILE__); -+ } -+ } -+ } -hunk ./lib/util.php 1469 -- if (common_config('queue', 'enabled')) { -- # Do it later! -- return common_enqueue_notice($notice); -- } else { -- return common_real_broadcast($notice, $remote); -- } -+ if (common_config('queue', 'enabled')) { -+ // Do it later! -+ return common_enqueue_notice($notice); -+ } else { -+ return common_real_broadcast($notice, $remote); -+ } -hunk ./lib/util.php 1478 -- global $config; -- $success = true; -- $fuser = $flink->getForeignUser(); -- $twitter_user = $fuser->nickname; -- $twitter_password = $flink->credentials; -- $uri = 'http://www.twitter.com/statuses/update.json'; -+ global $config; -+ $success = true; -+ $fuser = $flink->getForeignUser(); -+ $twitter_user = $fuser->nickname; -+ $twitter_password = $flink->credentials; -+ $uri = 'http://www.twitter.com/statuses/update.json'; -hunk ./lib/util.php 1485 -- // XXX: Hack to get around PHP cURL's use of @ being a a meta character -- $statustxt = preg_replace('/^@/', ' @', $notice->content); -+ // XXX: Hack to get around PHP cURL's use of @ being a a meta character -+ $statustxt = preg_replace('/^@/', ' @', $notice->content); -hunk ./lib/util.php 1488 -- $options = array( -- CURLOPT_USERPWD => "$twitter_user:$twitter_password", -- CURLOPT_POST => true, -- CURLOPT_POSTFIELDS => array( -- 'status' => $statustxt, -- 'source' => $config['integration']['source'] -- ), -- CURLOPT_RETURNTRANSFER => true, -- CURLOPT_FAILONERROR => true, -- CURLOPT_HEADER => false, -- CURLOPT_FOLLOWLOCATION => true, -- CURLOPT_USERAGENT => "Laconica", -- CURLOPT_CONNECTTIMEOUT => 120, // XXX: Scary!!!! How long should this be? -- CURLOPT_TIMEOUT => 120 -- ); -+ $options = array( -+ CURLOPT_USERPWD => "$twitter_user:$twitter_password", -+ CURLOPT_POST => true, -+ CURLOPT_POSTFIELDS => array( -+ 'status' => $statustxt, -+ 'source' => $config['integration']['source'] -+ ), -+ CURLOPT_RETURNTRANSFER => true, -+ CURLOPT_FAILONERROR => true, -+ CURLOPT_HEADER => false, -+ CURLOPT_FOLLOWLOCATION => true, -+ CURLOPT_USERAGENT => "Laconica", -+ CURLOPT_CONNECTTIMEOUT => 120, // XXX: Scary!!!! How long should this be? -+ CURLOPT_TIMEOUT => 120 -+ ); -hunk ./lib/util.php 1504 -- $ch = curl_init($uri); -+ $ch = curl_init($uri); -hunk ./lib/util.php 1509 -- if ($errmsg) { -- common_debug("cURL error: $errmsg - trying to send notice for $twitter_user.", -- __FILE__); -- $success = false; +hunk ./lib/action.php 103 +- function _has_etag($etag, $if_none_match) { +- return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); - } -+ if ($errmsg) { -+ common_debug("cURL error: $errmsg - trying to send notice for $twitter_user.", -+ __FILE__); -+ $success = false; -+ } -hunk ./lib/util.php 1515 -- curl_close($ch); -+ curl_close($ch); -hunk ./lib/util.php 1517 -- if (!$data) { -- common_debug("No data returned by Twitter's API trying to send update for $twitter_user", -- __FILE__); -- $success = false; -- } -+ if (!$data) { -+ common_debug("No data returned by Twitter's API trying to send update for $twitter_user", -+ __FILE__); -+ $success = false; -+ } -hunk ./lib/util.php 1523 -- // Twitter should return a status -- $status = json_decode($data); -+ // Twitter should return a status -+ $status = json_decode($data); -hunk ./lib/util.php 1526 -- if (!$status->id) { -- common_debug("Unexpected data returned by Twitter API trying to send update for $twitter_user", -- __FILE__); -- $success = false; -- } -+ if (!$status->id) { -+ common_debug("Unexpected data returned by Twitter API trying to send update for $twitter_user", -+ __FILE__); -+ $success = false; ++ function _has_etag($etag, $if_none_match) ++ { ++ return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); + } -hunk ./lib/util.php 1532 -- return $success; -+ return $success; -hunk ./lib/util.php 1535 --# Stick the notice on the queue -+// Stick the notice on the queue -hunk ./lib/util.php 1538 -- foreach (array('jabber', 'omb', 'sms', 'public') as $transport) { -- $qi = new Queue_item(); -- $qi->notice_id = $notice->id; -- $qi->transport = $transport; -- $qi->created = $notice->created; -+ foreach (array('jabber', 'omb', 'sms', 'public') as $transport) { -+ $qi = new Queue_item(); -+ $qi->notice_id = $notice->id; -+ $qi->transport = $transport; -+ $qi->created = $notice->created; -hunk ./lib/util.php 1544 -- if (!$result) { -- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -- common_log(LOG_ERR, 'DB error inserting queue item: ' . $last_error->message); +hunk ./lib/action.php 108 +- function boolean($key, $def=false) { +- $arg = strtolower($this->trimmed($key)); ++ function boolean($key, $def=false) ++ { ++ $arg = strtolower($this->trimmed($key)); +hunk ./lib/action.php 112 +- if (is_null($arg)) { +- return $def; +- } else if (in_array($arg, array('true', 'yes', '1'))) { +- return true; +- } else if (in_array($arg, array('false', 'no', '0'))) { - return false; -- } -- common_log(LOG_DEBUG, 'complete queueing notice ID = ' . $notice->id . ' for ' . $transport); -- } -- return $result; -+ if (!$result) { -+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -+ common_log(LOG_ERR, 'DB error inserting queue item: ' . $last_error->message); -+ return false; -+ } -+ common_log(LOG_DEBUG, 'complete queueing notice ID = ' . $notice->id . ' for ' . $transport); -+ } -+ return $result; -hunk ./lib/util.php 1555 -- $qi = Queue_item::staticGet($notice->id); -- if ($qi) { -- $result = $qi->delete(); -- if (!$result) { -- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -- common_log(LOG_ERR, 'DB error deleting queue item: ' . $last_error->message); -- return false; -- } -- common_log(LOG_DEBUG, 'complete dequeueing notice ID = ' . $notice->id); -- return $result; -- } else { -+ $qi = Queue_item::staticGet($notice->id); -+ if ($qi) { -+ $result = $qi->delete(); -+ if (!$result) { -+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -+ common_log(LOG_ERR, 'DB error deleting queue item: ' . $last_error->message); -hunk ./lib/util.php 1563 -+ common_log(LOG_DEBUG, 'complete dequeueing notice ID = ' . $notice->id); -+ return $result; -+ } else { -+ return false; -+ } -hunk ./lib/util.php 1571 -- $success = true; -- if (!$remote) { -- # Make sure we have the OMB stuff -- require_once(INSTALLDIR.'/lib/omb.php'); -- $success = omb_broadcast_remote_subscribers($notice); -- if (!$success) { -- common_log(LOG_ERR, 'Error in OMB broadcast for notice ' . $notice->id); -- } -- } -- if ($success) { -- require_once(INSTALLDIR.'/lib/jabber.php'); -- $success = jabber_broadcast_notice($notice); -- if (!$success) { -- common_log(LOG_ERR, 'Error in jabber broadcast for notice ' . $notice->id); -- } -- } -- if ($success) { -- require_once(INSTALLDIR.'/lib/mail.php'); -- $success = mail_broadcast_notice_sms($notice); -- if (!$success) { -- common_log(LOG_ERR, 'Error in sms broadcast for notice ' . $notice->id); -- } -- } -- if ($success) { -- $success = jabber_public_notice($notice); -- if (!$success) { -- common_log(LOG_ERR, 'Error in public broadcast for notice ' . $notice->id); -- } -- } -- // XXX: broadcast notices to other IM -- return $success; -+ $success = true; -+ if (!$remote) { -+ // Make sure we have the OMB stuff -+ require_once(INSTALLDIR.'/lib/omb.php'); -+ $success = omb_broadcast_remote_subscribers($notice); -+ if (!$success) { -+ common_log(LOG_ERR, 'Error in OMB broadcast for notice ' . $notice->id); -+ } -+ } -+ if ($success) { -+ require_once(INSTALLDIR.'/lib/jabber.php'); -+ $success = jabber_broadcast_notice($notice); -+ if (!$success) { -+ common_log(LOG_ERR, 'Error in jabber broadcast for notice ' . $notice->id); -+ } -+ } -+ if ($success) { -+ require_once(INSTALLDIR.'/lib/mail.php'); -+ $success = mail_broadcast_notice_sms($notice); -+ if (!$success) { -+ common_log(LOG_ERR, 'Error in sms broadcast for notice ' . $notice->id); -+ } -+ } -+ if ($success) { -+ $success = jabber_public_notice($notice); -+ if (!$success) { -+ common_log(LOG_ERR, 'Error in public broadcast for notice ' . $notice->id); -+ } -+ } -+ // XXX: broadcast notices to other IM -+ return $success; -hunk ./lib/util.php 1605 -- // XXX: optionally use a queue system like http://code.google.com/p/microapps/wiki/NQDQ -- require_once(INSTALLDIR.'/lib/omb.php'); -- omb_broadcast_profile($profile); -- // XXX: Other broadcasts...? -- return true; -+ // XXX: optionally use a queue system like http://code.google.com/p/microapps/wiki/NQDQ -+ require_once(INSTALLDIR.'/lib/omb.php'); -+ omb_broadcast_profile($profile); -+ // XXX: Other broadcasts...? -+ return true; -hunk ./lib/util.php 1613 -- return common_local_url('showstream', array('nickname' => $nickname)); -+ return common_local_url('showstream', array('nickname' => $nickname)); -hunk ./lib/util.php 1616 --# Don't call if nobody's logged in -+// Don't call if nobody's logged in -hunk ./lib/util.php 1618 --function common_notice_form($action=NULL, $content=NULL) { -- $user = common_current_user(); -- assert(!is_null($user)); -- common_element_start('form', array('id' => 'status_form', -- 'method' => 'post', -- 'action' => common_local_url('newnotice'))); -- common_element_start('p'); -- common_element('label', array('for' => 'status_textarea', -- 'id' => 'status_label'), -- sprintf(_('What\'s up, %s?'), $user->nickname)); -+function common_notice_form($action=null, $content=null) { -+ $user = common_current_user(); -+ assert(!is_null($user)); -+ common_element_start('form', array('id' => 'status_form', -+ 'method' => 'post', -+ 'action' => common_local_url('newnotice'))); -+ common_element_start('p'); -+ common_element('label', array('for' => 'status_textarea', -+ 'id' => 'status_label'), -+ sprintf(_('What\'s up, %s?'), $user->nickname)); -hunk ./lib/util.php 1629 -- common_element('textarea', array('id' => 'status_textarea', -- 'cols' => 60, -- 'rows' => 3, -- 'name' => 'status_textarea'), -- ($content) ? $content : ''); -- common_hidden('token', common_session_token()); -- if ($action) { -- common_hidden('returnto', $action); -- } -- # set by JavaScript -- common_hidden('inreplyto', 'false'); -- common_element('input', array('id' => 'status_submit', -- 'name' => 'status_submit', -- 'type' => 'submit', -- 'value' => _('Send'))); -- common_element_end('p'); -- common_element_end('form'); -+ common_element('textarea', array('id' => 'status_textarea', -+ 'cols' => 60, -+ 'rows' => 3, -+ 'name' => 'status_textarea'), -+ ($content) ? $content : ''); -+ common_hidden('token', common_session_token()); -+ if ($action) { -+ common_hidden('returnto', $action); -+ } -+ // set by JavaScript -+ common_hidden('inreplyto', 'false'); -+ common_element('input', array('id' => 'status_submit', -+ 'name' => 'status_submit', -+ 'type' => 'submit', -+ 'value' => _('Send'))); -+ common_element_end('p'); -+ common_element_end('form'); -hunk ./lib/util.php 1648 --# Should make up a reasonable root URL -+// Should make up a reasonable root URL -hunk ./lib/util.php 1651 -- return common_path(''); -+ return common_path(''); -hunk ./lib/util.php 1654 --# returns $bytes bytes of random data as a hexadecimal string --# "good" here is a goal and not a guarantee -+// returns $bytes bytes of random data as a hexadecimal string -+// "good" here is a goal and not a guarantee -hunk ./lib/util.php 1658 -- # XXX: use random.org...? -- if (file_exists('/dev/urandom')) { -- return common_urandom($bytes); -- } else { # FIXME: this is probably not good enough -- return common_mtrand($bytes); -- } -+ // XXX: use random.org...? -+ if (file_exists('/dev/urandom')) { -+ return common_urandom($bytes); -+ } else { // FIXME: this is probably not good enough -+ return common_mtrand($bytes); -+ } -hunk ./lib/util.php 1667 -- $h = fopen('/dev/urandom', 'rb'); -- # should not block -- $src = fread($h, $bytes); -- fclose($h); -- $enc = ''; -- for ($i = 0; $i < $bytes; $i++) { -- $enc .= sprintf("%02x", (ord($src[$i]))); -- } -- return $enc; -+ $h = fopen('/dev/urandom', 'rb'); -+ // should not block -+ $src = fread($h, $bytes); -+ fclose($h); -+ $enc = ''; -+ for ($i = 0; $i < $bytes; $i++) { -+ $enc .= sprintf("%02x", (ord($src[$i]))); -+ } -+ return $enc; -hunk ./lib/util.php 1679 -- $enc = ''; -- for ($i = 0; $i < $bytes; $i++) { -- $enc .= sprintf("%02x", mt_rand(0, 255)); -- } -- return $enc; -+ $enc = ''; -+ for ($i = 0; $i < $bytes; $i++) { -+ $enc .= sprintf("%02x", mt_rand(0, 255)); -+ } -+ return $enc; -hunk ./lib/util.php 1687 -- common_ensure_session(); -- $_SESSION['returnto'] = $url; -+ common_ensure_session(); -+ $_SESSION['returnto'] = $url; -hunk ./lib/util.php 1692 -- common_ensure_session(); -- return $_SESSION['returnto']; -+ common_ensure_session(); -+ return $_SESSION['returnto']; -hunk ./lib/util.php 1697 -- return date('YmdHis'); -+ return date('YmdHis'); -hunk ./lib/util.php 1701 -- static $initialized = false; -- if (!$initialized) { -- global $config; -- openlog($config['syslog']['appname'], 0, LOG_USER); -- $initialized = true; -- } -+ static $initialized = false; -+ if (!$initialized) { -+ global $config; -+ openlog($config['syslog']['appname'], 0, LOG_USER); -+ $initialized = true; -+ } -hunk ./lib/util.php 1709 --function common_log($priority, $msg, $filename=NULL) { -- $logfile = common_config('site', 'logfile'); -- if ($logfile) { -- $log = fopen($logfile, "a"); -- if ($log) { -- static $syslog_priorities = array('LOG_EMERG', 'LOG_ALERT', 'LOG_CRIT', 'LOG_ERR', -- 'LOG_WARNING', 'LOG_NOTICE', 'LOG_INFO', 'LOG_DEBUG'); -- $output = date('Y-m-d H:i:s') . ' ' . $syslog_priorities[$priority] . ': ' . $msg . "\n"; -- fwrite($log, $output); -- fclose($log); -- } -- } else { -- common_ensure_syslog(); -- syslog($priority, $msg); -- } -+function common_log($priority, $msg, $filename=null) { -+ $logfile = common_config('site', 'logfile'); -+ if ($logfile) { -+ $log = fopen($logfile, "a"); -+ if ($log) { -+ static $syslog_priorities = array('LOG_EMERG', 'LOG_ALERT', 'LOG_CRIT', 'LOG_ERR', -+ 'LOG_WARNING', 'LOG_NOTICE', 'LOG_INFO', 'LOG_DEBUG'); -+ $output = date('Y-m-d H:i:s') . ' ' . $syslog_priorities[$priority] . ': ' . $msg . "\n"; -+ fwrite($log, $output); -+ fclose($log); -+ } -+ } else { -+ common_ensure_syslog(); -+ syslog($priority, $msg); -+ } -hunk ./lib/util.php 1726 --function common_debug($msg, $filename=NULL) { -- if ($filename) { -- common_log(LOG_DEBUG, basename($filename).' - '.$msg); -- } else { -- common_log(LOG_DEBUG, $msg); -- } -+function common_debug($msg, $filename=null) { -+ if ($filename) { -+ common_log(LOG_DEBUG, basename($filename).' - '.$msg); -+ } else { -+ common_log(LOG_DEBUG, $msg); -+ } -hunk ./lib/util.php 1734 --function common_log_db_error(&$object, $verb, $filename=NULL) { -- $objstr = common_log_objstring($object); -- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -- common_log(LOG_ERR, $last_error->message . '(' . $verb . ' on ' . $objstr . ')', $filename); -+function common_log_db_error(&$object, $verb, $filename=null) { -+ $objstr = common_log_objstring($object); -+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); -+ common_log(LOG_ERR, $last_error->message . '(' . $verb . ' on ' . $objstr . ')', $filename); -hunk ./lib/util.php 1741 -- if (is_null($object)) { -- return "NULL"; -- } -- $arr = $object->toArray(); -- $fields = array(); -- foreach ($arr as $k => $v) { -- $fields[] = "$k='$v'"; -- } -- $objstring = $object->tableName() . '[' . implode(',', $fields) . ']'; -- return $objstring; -+ if (is_null($object)) { -+ return "null"; -+ } -+ $arr = $object->toArray(); -+ $fields = array(); -+ foreach ($arr as $k => $v) { -+ $fields[] = "$k='$v'"; -+ } -+ $objstring = $object->tableName() . '[' . implode(',', $fields) . ']'; -+ return $objstring; -hunk ./lib/util.php 1754 -- return Validate::uri($url, array('allowed_schemes' => array('http', 'https'))); -+ return Validate::uri($url, array('allowed_schemes' => array('http', 'https'))); -hunk ./lib/util.php 1758 -- if (preg_match('/^tag:(.*?),(\d{4}(-\d{2}(-\d{2})?)?):(.*)$/', $tag, $matches)) { -- return (Validate::email($matches[1]) || -- preg_match('/^([\w-\.]+)$/', $matches[1])); -- } -- return false; -+ if (preg_match('/^tag:(.*?),(\d{4}(-\d{2}(-\d{2})?)?):(.*)$/', $tag, $matches)) { -+ return (Validate::email($matches[1]) || -+ preg_match('/^([\w-\.]+)$/', $matches[1])); -+ } -+ return false; -hunk ./lib/util.php 1765 --# Does a little before-after block for next/prev page -+// Does a little before-after block for next/prev page -hunk ./lib/util.php 1767 --function common_pagination($have_before, $have_after, $page, $action, $args=NULL) { -+function common_pagination($have_before, $have_after, $page, $action, $args=null) { -hunk ./lib/util.php 1769 -- if ($have_before || $have_after) { -- common_element_start('div', array('id' => 'pagination')); -- common_element_start('ul', array('id' => 'nav_pagination')); -- } -+ if ($have_before || $have_after) { -+ common_element_start('div', array('id' => 'pagination')); -+ common_element_start('ul', array('id' => 'nav_pagination')); -+ } -hunk ./lib/util.php 1774 -- if ($have_before) { -- $pargs = array('page' => $page-1); -- $newargs = ($args) ? array_merge($args,$pargs) : $pargs; -+ if ($have_before) { -+ $pargs = array('page' => $page-1); -+ $newargs = ($args) ? array_merge($args,$pargs) : $pargs; -hunk ./lib/util.php 1778 -- common_element_start('li', 'before'); -- common_element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'prev'), -- _('« After')); -- common_element_end('li'); -- } -+ common_element_start('li', 'before'); -+ common_element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'prev'), -+ _('« After')); -+ common_element_end('li'); -+ } -hunk ./lib/util.php 1784 -- if ($have_after) { -- $pargs = array('page' => $page+1); -- $newargs = ($args) ? array_merge($args,$pargs) : $pargs; -- common_element_start('li', 'after'); -- common_element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'next'), -- _('Before »')); -- common_element_end('li'); -- } -+ if ($have_after) { -+ $pargs = array('page' => $page+1); -+ $newargs = ($args) ? array_merge($args,$pargs) : $pargs; -+ common_element_start('li', 'after'); -+ common_element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'next'), -+ _('Before »')); -+ common_element_end('li'); -+ } -hunk ./lib/util.php 1793 -- if ($have_before || $have_after) { -- common_element_end('ul'); -- common_element_end('div'); -- } -+ if ($have_before || $have_after) { -+ common_element_end('ul'); -+ common_element_end('div'); -+ } -hunk ./lib/util.php 1803 -- # No arg means accept anything (per HTTP spec) -- if(!$accept) { -- return array($def => 1); -- } -+ // No arg means accept anything (per HTTP spec) -+ if(!$accept) { -+ return array($def => 1); -+ } -hunk ./lib/util.php 1808 -- $prefs = array(); -+ $prefs = array(); -hunk ./lib/util.php 1810 -- $parts = explode(',', $accept); -+ $parts = explode(',', $accept); -hunk ./lib/util.php 1812 -- foreach($parts as $part) { -- # FIXME: doesn't deal with params like 'text/html; level=1' -- @list($value, $qpart) = explode(';', $part); -- $match = array(); -- if(!isset($qpart)) { -- $prefs[$value] = 1; -- } elseif(preg_match('/q\s*=\s*(\d*\.\d+)/', $qpart, $match)) { -- $prefs[$value] = $match[1]; -- } -- } -+ foreach($parts as $part) { -+ // FIXME: doesn't deal with params like 'text/html; level=1' -+ @list($value, $qpart) = explode(';', $part); -+ $match = array(); -+ if(!isset($qpart)) { -+ $prefs[$value] = 1; -+ } elseif(preg_match('/q\s*=\s*(\d*\.\d+)/', $qpart, $match)) { -+ $prefs[$value] = $match[1]; -+ } -+ } -hunk ./lib/util.php 1823 -- return $prefs; -+ return $prefs; -hunk ./lib/util.php 1827 -- if(array_key_exists($type, $avail)) { -- return $type; -- } else { -- $parts = explode('/', $type); -- if(array_key_exists($parts[0] . '/*', $avail)) { -- return $parts[0] . '/*'; -- } elseif(array_key_exists('*/*', $avail)) { -- return '*/*'; - } else { -- return NULL; +- return $def; - } - } -+ if(array_key_exists($type, $avail)) { -+ return $type; -+ } else { -+ $parts = explode('/', $type); -+ if(array_key_exists($parts[0] . '/*', $avail)) { -+ return $parts[0] . '/*'; -+ } elseif(array_key_exists('*/*', $avail)) { -+ return '*/*'; ++ if (is_null($arg)) { ++ return $def; ++ } else if (in_array($arg, array('true', 'yes', '1'))) { ++ return true; ++ } else if (in_array($arg, array('false', 'no', '0'))) { ++ return false; + } else { -+ return null; ++ return $def; + } + } -hunk ./lib/util.php 1842 -- $combine = array(); -+ $combine = array(); -hunk ./lib/util.php 1844 -- foreach(array_keys($sprefs) as $type) { -- $parts = explode('/', $type); -- if($parts[1] != '*') { -- $ckey = common_mime_type_match($type, $cprefs); -- if($ckey) { -- $combine[$type] = $sprefs[$type] * $cprefs[$ckey]; -- } -- } -- } -+ foreach(array_keys($sprefs) as $type) { -+ $parts = explode('/', $type); -+ if($parts[1] != '*') { -+ $ckey = common_mime_type_match($type, $cprefs); -+ if($ckey) { -+ $combine[$type] = $sprefs[$type] * $cprefs[$ckey]; -+ } -+ } -+ } -hunk ./lib/util.php 1854 -- foreach(array_keys($cprefs) as $type) { -- $parts = explode('/', $type); -- if($parts[1] != '*' && !array_key_exists($type, $sprefs)) { -- $skey = common_mime_type_match($type, $sprefs); -- if($skey) { -- $combine[$type] = $sprefs[$skey] * $cprefs[$type]; -- } -- } -- } -+ foreach(array_keys($cprefs) as $type) { -+ $parts = explode('/', $type); -+ if($parts[1] != '*' && !array_key_exists($type, $sprefs)) { -+ $skey = common_mime_type_match($type, $sprefs); -+ if($skey) { -+ $combine[$type] = $sprefs[$skey] * $cprefs[$type]; -+ } -+ } -+ } -hunk ./lib/util.php 1864 -- $bestq = 0; -- $besttype = "text/html"; -+ $bestq = 0; -+ $besttype = "text/html"; -hunk ./lib/util.php 1867 -- foreach(array_keys($combine) as $type) { -- if($combine[$type] > $bestq) { -- $besttype = $type; -- $bestq = $combine[$type]; -- } -- } -+ foreach(array_keys($combine) as $type) { -+ if($combine[$type] > $bestq) { -+ $besttype = $type; -+ $bestq = $combine[$type]; -+ } -+ } -hunk ./lib/util.php 1874 -- return $besttype; -+ return $besttype; -hunk ./lib/util.php 1878 -- global $config; -- return isset($config[$main][$sub]) ? $config[$main][$sub] : false; -+ global $config; -+ return isset($config[$main][$sub]) ? $config[$main][$sub] : false; -hunk ./lib/util.php 1883 -- $to = array(); -- $strip = get_magic_quotes_gpc(); -- foreach ($from as $k => $v) { -- $to[$k] = ($strip) ? stripslashes($v) : $v; -- } -- return $to; -+ $to = array(); -+ $strip = get_magic_quotes_gpc(); -+ foreach ($from as $k => $v) { -+ $to[$k] = ($strip) ? stripslashes($v) : $v; -+ } -+ return $to; -hunk ./lib/util.php 1894 -- if(get_magic_quotes_gpc()) { -- $_POST=array_map('stripslashes',$_POST); -- $_GET=array_map('stripslashes',$_GET); -- } -+ if(get_magic_quotes_gpc()) { -+ $_POST=array_map('stripslashes',$_POST); -+ $_GET=array_map('stripslashes',$_GET); -+ } -hunk ./lib/util.php 1901 -- return common_local_url('userbyid', array('id' => $user->id)); -+ return common_local_url('userbyid', array('id' => $user->id)); -hunk ./lib/util.php 1905 -- return common_local_url('shownotice', -- array('notice' => $notice->id)); -+ return common_local_url('shownotice', -+ array('notice' => $notice->id)); -hunk ./lib/util.php 1909 --# 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits -+// 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits -hunk ./lib/util.php 1912 -- # 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits -- static $codechars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; -- $chars = ceil($bits/5); -- $code = ''; -- for ($i = 0; $i < $chars; $i++) { -- # XXX: convert to string and back -- $num = hexdec(common_good_rand(1)); -- # XXX: randomness is too precious to throw away almost -- # 40% of the bits we get! -- $code .= $codechars[$num%32]; -- } -- return $code; -+ // 36 alphanums - lookalikes (0, O, 1, I) = 32 chars = 5 bits -+ static $codechars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; -+ $chars = ceil($bits/5); -+ $code = ''; -+ for ($i = 0; $i < $chars; $i++) { -+ // XXX: convert to string and back -+ $num = hexdec(common_good_rand(1)); -+ // XXX: randomness is too precious to throw away almost -+ // 40% of the bits we get! -+ $code .= $codechars[$num%32]; -+ } -+ return $code; -hunk ./lib/util.php 1926 --# convert markup to HTML -+// convert markup to HTML -hunk ./lib/util.php 1929 -- $c = preg_replace('/%%action.(\w+)%%/e', "common_local_url('\\1')", $c); -- $c = preg_replace('/%%doc.(\w+)%%/e', "common_local_url('doc', array('title'=>'\\1'))", $c); -- $c = preg_replace('/%%(\w+).(\w+)%%/e', 'common_config(\'\\1\', \'\\2\')', $c); -- return Markdown($c); -+ $c = preg_replace('/%%action.(\w+)%%/e', "common_local_url('\\1')", $c); -+ $c = preg_replace('/%%doc.(\w+)%%/e', "common_local_url('doc', array('title'=>'\\1'))", $c); -+ $c = preg_replace('/%%(\w+).(\w+)%%/e', 'common_config(\'\\1\', \'\\2\')', $c); -+ return Markdown($c); -hunk ./lib/util.php 1936 -- $avatar = $profile->getAvatar($size); -- if ($avatar) { -- return common_avatar_display_url($avatar); -- } else { -- return common_default_avatar($size); +hunk ./lib/action.php 123 +- function server_error($msg, $code=500) { +- $action = $this->trimmed('action'); +- common_debug("Server error '$code' on '$action': $msg", __FILE__); +- common_server_error($msg, $code); - } -+ $avatar = $profile->getAvatar($size); -+ if ($avatar) { -+ return common_avatar_display_url($avatar); -+ } else { -+ return common_default_avatar($size); -+ } -hunk ./lib/util.php 1945 -- if (!$profile) { -- return NULL; -- } -- $user = User::staticGet($profile->id); -- if ($user) { -- return $user->uri; -- } -+ if (!$profile) { -+ return null; -+ } -+ $user = User::staticGet($profile->id); -+ if ($user) { -+ return $user->uri; -+ } -hunk ./lib/util.php 1953 -- $remote = Remote_profile::staticGet($profile->id); -- if ($remote) { -- return $remote->uri; -- } -- # XXX: this is a very bad profile! -- return NULL; -+ $remote = Remote_profile::staticGet($profile->id); -+ if ($remote) { -+ return $remote->uri; -+ } -+ // XXX: this is a very bad profile! -+ return null; -hunk ./lib/util.php 1962 -- # strip non-digits -- preg_replace('/\D/', '', $sms); -- return $sms; -+ // strip non-digits -+ preg_replace('/\D/', '', $sms); -+ return $sms; -hunk ./lib/util.php 1970 -- common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline)"); -- exit(1); -- break; -+ common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline)"); -+ exit(1); -+ break; -hunk ./lib/util.php 1974 -- case E_USER_WARNING: -- common_log(LOG_WARNING, "[$errno] $errstr ($errfile:$errline)"); -- break; -+ case E_USER_WARNING: -+ common_log(LOG_WARNING, "[$errno] $errstr ($errfile:$errline)"); -+ break; -hunk ./lib/util.php 1979 -- common_log(LOG_NOTICE, "[$errno] $errstr ($errfile:$errline)"); -- break; -+ common_log(LOG_NOTICE, "[$errno] $errstr ($errfile:$errline)"); -+ break; -hunk ./lib/util.php 1983 -- # FIXME: show error page if we're on the Web -+ // FIXME: show error page if we're on the Web -hunk ./lib/util.php 1989 -- common_ensure_session(); -- if (!array_key_exists('token', $_SESSION)) { -- $_SESSION['token'] = common_good_rand(64); -- } -- return $_SESSION['token']; -+ common_ensure_session(); -+ if (!array_key_exists('token', $_SESSION)) { -+ $_SESSION['token'] = common_good_rand(64); ++ function server_error($msg, $code=500) ++ { ++ $action = $this->trimmed('action'); ++ common_debug("Server error '$code' on '$action': $msg", __FILE__); ++ common_server_error($msg, $code); + } -+ return $_SESSION['token']; -hunk ./lib/util.php 1997 -- common_element_start('form', array('id' => 'disfavor-' . $notice->id, -- 'method' => 'post', -- 'class' => 'disfavor', -- 'action' => common_local_url('disfavor'))); -+ common_element_start('form', array('id' => 'disfavor-' . $notice->id, -+ 'method' => 'post', -+ 'class' => 'disfavor', -+ 'action' => common_local_url('disfavor'))); -hunk ./lib/util.php 2002 -- common_element('input', array('type' => 'hidden', -- 'name' => 'token-'. $notice->id, -- 'id' => 'token-'. $notice->id, -- 'class' => 'token', -- 'value' => common_session_token())); -+ common_element('input', array('type' => 'hidden', -+ 'name' => 'token-'. $notice->id, -+ 'id' => 'token-'. $notice->id, -+ 'class' => 'token', -+ 'value' => common_session_token())); -hunk ./lib/util.php 2008 -- common_element('input', array('type' => 'hidden', -- 'name' => 'notice', -- 'id' => 'notice-n'. $notice->id, -- 'class' => 'notice', -- 'value' => $notice->id)); -+ common_element('input', array('type' => 'hidden', -+ 'name' => 'notice', -+ 'id' => 'notice-n'. $notice->id, -+ 'class' => 'notice', -+ 'value' => $notice->id)); -hunk ./lib/util.php 2014 -- common_element('input', array('type' => 'submit', -- 'id' => 'disfavor-submit-' . $notice->id, -- 'name' => 'disfavor-submit-' . $notice->id, -- 'class' => 'disfavor', -- 'value' => 'Disfavor favorite', -- 'title' => 'Remove this message from favorites')); -- common_element_end('form'); -+ common_element('input', array('type' => 'submit', -+ 'id' => 'disfavor-submit-' . $notice->id, -+ 'name' => 'disfavor-submit-' . $notice->id, -+ 'class' => 'disfavor', -+ 'value' => 'Disfavor favorite', -+ 'title' => 'Remove this message from favorites')); -+ common_element_end('form'); -hunk ./lib/util.php 2024 -- common_element_start('form', array('id' => 'favor-' . $notice->id, -- 'method' => 'post', -- 'class' => 'favor', -- 'action' => common_local_url('favor'))); -+ common_element_start('form', array('id' => 'favor-' . $notice->id, -+ 'method' => 'post', -+ 'class' => 'favor', -+ 'action' => common_local_url('favor'))); -hunk ./lib/util.php 2029 -- common_element('input', array('type' => 'hidden', -- 'name' => 'token-'. $notice->id, -- 'id' => 'token-'. $notice->id, -- 'class' => 'token', -- 'value' => common_session_token())); -+ common_element('input', array('type' => 'hidden', -+ 'name' => 'token-'. $notice->id, -+ 'id' => 'token-'. $notice->id, -+ 'class' => 'token', -+ 'value' => common_session_token())); -hunk ./lib/util.php 2035 -- common_element('input', array('type' => 'hidden', -- 'name' => 'notice', -- 'id' => 'notice-n'. $notice->id, -- 'class' => 'notice', -- 'value' => $notice->id)); -+ common_element('input', array('type' => 'hidden', -+ 'name' => 'notice', -+ 'id' => 'notice-n'. $notice->id, -+ 'class' => 'notice', -+ 'value' => $notice->id)); -hunk ./lib/util.php 2041 -- common_element('input', array('type' => 'submit', -- 'id' => 'favor-submit-' . $notice->id, -- 'name' => 'favor-submit-' . $notice->id, -- 'class' => 'favor', -- 'value' => 'Add to favorites', -- 'title' => 'Add this message to favorites')); -- common_element_end('form'); -+ common_element('input', array('type' => 'submit', -+ 'id' => 'favor-submit-' . $notice->id, -+ 'name' => 'favor-submit-' . $notice->id, -+ 'class' => 'favor', -+ 'value' => 'Add to favorites', -+ 'title' => 'Add this message to favorites')); -+ common_element_end('form'); -hunk ./lib/util.php 2051 -- common_element_start('form', array('id' => 'nudge', 'method' => 'post', -- 'action' => common_local_url('nudge', array('nickname' => $profile->nickname)))); -- common_hidden('token', common_session_token()); -- common_element('input', array('type' => 'submit', -- 'class' => 'submit', -- 'value' => _('Send a nudge'))); -- common_element_end('form'); -+ common_element_start('form', array('id' => 'nudge', 'method' => 'post', -+ 'action' => common_local_url('nudge', array('nickname' => $profile->nickname)))); -+ common_hidden('token', common_session_token()); -+ common_element('input', array('type' => 'submit', -+ 'class' => 'submit', -+ 'value' => _('Send a nudge'))); -+ common_element_end('form'); -hunk ./lib/util.php 2060 -- common_element('p', array('id' => 'nudge_response'), _('Nudge sent!')); -+ common_element('p', array('id' => 'nudge_response'), _('Nudge sent!')); -hunk ./lib/util.php 2064 -- common_element_start('form', array('id' => 'subscribe-' . $profile->id, -- 'method' => 'post', -- 'class' => 'subscribe', -- 'action' => common_local_url('subscribe'))); -- common_hidden('token', common_session_token()); -- common_element('input', array('id' => 'subscribeto-' . $profile->id, -- 'name' => 'subscribeto', -- 'type' => 'hidden', -- 'value' => $profile->id)); -- common_element('input', array('type' => 'submit', -- 'class' => 'submit', -- 'value' => _('Subscribe'))); -- common_element_end('form'); -+ common_element_start('form', array('id' => 'subscribe-' . $profile->id, -+ 'method' => 'post', -+ 'class' => 'subscribe', -+ 'action' => common_local_url('subscribe'))); -+ common_hidden('token', common_session_token()); -+ common_element('input', array('id' => 'subscribeto-' . $profile->id, -+ 'name' => 'subscribeto', -+ 'type' => 'hidden', -+ 'value' => $profile->id)); -+ common_element('input', array('type' => 'submit', -+ 'class' => 'submit', -+ 'value' => _('Subscribe'))); -+ common_element_end('form'); -hunk ./lib/util.php 2080 -- common_element_start('form', array('id' => 'unsubscribe-' . $profile->id, -- 'method' => 'post', -- 'class' => 'unsubscribe', -- 'action' => common_local_url('unsubscribe'))); -- common_hidden('token', common_session_token()); -- common_element('input', array('id' => 'unsubscribeto-' . $profile->id, -- 'name' => 'unsubscribeto', -- 'type' => 'hidden', -- 'value' => $profile->id)); -- common_element('input', array('type' => 'submit', -- 'class' => 'submit', -- 'value' => _('Unsubscribe'))); -- common_element_end('form'); -+ common_element_start('form', array('id' => 'unsubscribe-' . $profile->id, -+ 'method' => 'post', -+ 'class' => 'unsubscribe', -+ 'action' => common_local_url('unsubscribe'))); -+ common_hidden('token', common_session_token()); -+ common_element('input', array('id' => 'unsubscribeto-' . $profile->id, -+ 'name' => 'unsubscribeto', -+ 'type' => 'hidden', -+ 'value' => $profile->id)); -+ common_element('input', array('type' => 'submit', -+ 'class' => 'submit', -+ 'value' => _('Unsubscribe'))); -+ common_element_end('form'); -hunk ./lib/util.php 2097 -- $user = User::staticGet('id', $profile->id); -+ $user = User::staticGet('id', $profile->id); -hunk ./lib/util.php 2099 -- if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) { -+ if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) { -hunk ./lib/util.php 2101 -- common_element('a', array('href' => common_local_url('newmessage', array('to' => $user->id))), -- _('Send a message')); -+ common_element('a', array('href' => common_local_url('newmessage', array('to' => $user->id))), -+ _('Send a message')); -hunk ./lib/util.php 2105 -- if ($user->email && $user->emailnotifynudge) { -+ if ($user->email && $user->emailnotifynudge) { -hunk ./lib/util.php 2110 +hunk ./lib/action.php 130 +- function client_error($msg, $code=400) { +- $action = $this->trimmed('action'); +- common_debug("User error '$code' on '$action': $msg", __FILE__); +- common_user_error($msg, $code); - } ++ function client_error($msg, $code=400) ++ { ++ $action = $this->trimmed('action'); ++ common_debug("User error '$code' on '$action': $msg", __FILE__); ++ common_user_error($msg, $code); + } -hunk ./lib/util.php 2114 -- return 'laconica:' . common_keyize(common_config('site', 'name')) . ':' . $extra; -+ return 'laconica:' . common_keyize(common_config('site', 'name')) . ':' . $extra; -hunk ./lib/util.php 2118 -- $str = strtolower($str); -- $str = preg_replace('/\s/', '_', $str); -- return $str; -+ $str = strtolower($str); -+ $str = preg_replace('/\s/', '_', $str); -+ return $str; -hunk ./lib/util.php 2125 -- common_element_start('form', array('id' => 'message_form', -- 'method' => 'post', -- 'action' => common_local_url('newmessage'))); -+ common_element_start('form', array('id' => 'message_form', -+ 'method' => 'post', -+ 'action' => common_local_url('newmessage'))); -hunk ./lib/util.php 2129 -- $mutual_users = $user->mutuallySubscribedUsers(); -+ $mutual_users = $user->mutuallySubscribedUsers(); -hunk ./lib/util.php 2131 -- $mutual = array(); -+ $mutual = array(); -hunk ./lib/util.php 2133 -- while ($mutual_users->fetch()) { -- if ($mutual_users->id != $user->id) { -- $mutual[$mutual_users->id] = $mutual_users->nickname; +hunk ./lib/action.php 137 +- function self_url() { +- $action = $this->trimmed('action'); +- $args = $this->args; +- unset($args['action']); +- foreach (array_keys($_COOKIE) as $cookie) { +- unset($args[$cookie]); - } +- return common_local_url($action, $args); - } -+ while ($mutual_users->fetch()) { -+ if ($mutual_users->id != $user->id) { -+ $mutual[$mutual_users->id] = $mutual_users->nickname; ++ function self_url() ++ { ++ $action = $this->trimmed('action'); ++ $args = $this->args; ++ unset($args['action']); ++ foreach (array_keys($_COOKIE) as $cookie) { ++ unset($args[$cookie]); + } ++ return common_local_url($action, $args); + } -hunk ./lib/util.php 2139 -- $mutual_users->free(); -- unset($mutual_users); -+ $mutual_users->free(); -+ unset($mutual_users); -hunk ./lib/util.php 2142 -- common_dropdown('to', _('To'), $mutual, NULL, FALSE, $to->id); -+ common_dropdown('to', _('To'), $mutual, null, FALSE, $to->id); -hunk ./lib/util.php 2144 -- common_element_start('p'); -+ common_element_start('p'); -hunk ./lib/util.php 2146 -- common_element('textarea', array('id' => 'message_content', -- 'cols' => 60, -- 'rows' => 3, -- 'name' => 'content'), -- ($content) ? $content : ''); -+ common_element('textarea', array('id' => 'message_content', -+ 'cols' => 60, -+ 'rows' => 3, -+ 'name' => 'content'), -+ ($content) ? $content : ''); -hunk ./lib/util.php 2152 -- common_element('input', array('id' => 'message_send', -- 'name' => 'message_send', -- 'type' => 'submit', -- 'value' => _('Send'))); -+ common_element('input', array('id' => 'message_send', -+ 'name' => 'message_send', -+ 'type' => 'submit', -+ 'value' => _('Send'))); -hunk ./lib/util.php 2157 -- common_hidden('token', common_session_token()); -+ common_hidden('token', common_session_token()); -hunk ./lib/util.php 2159 -- common_element_end('p'); -- common_element_end('form'); -+ common_element_end('p'); -+ common_element_end('form'); -hunk ./lib/util.php 2164 -- static $cache = NULL; -- if (!common_config('memcached', 'enabled')) { -- return NULL; -- } else { -- if (!$cache) { -- $cache = new Memcache(); -- $servers = common_config('memcached', 'server'); -- if (is_array($servers)) { -- foreach($servers as $server) { -- $cache->addServer($server); -- } -- } else { -- $cache->addServer($servers); -- } -- } -- return $cache; +hunk ./lib/action.php 148 +- function nav_menu($menu) { ++ function nav_menu($menu) ++ { +hunk ./lib/action.php 153 +- common_menu_item(common_local_url($menuaction, isset($menudesc[2]) ? $menudesc[2] : NULL), +- $menudesc[0], +- $menudesc[1], +- $action == $menuaction); ++ common_menu_item(common_local_url($menuaction, ++ isset($menudesc[2]) ? $menudesc[2] : null), ++ $menudesc[0], ++ $menudesc[1], ++ $action == $menuaction); +hunk ./lib/action.php 160 - } -+ static $cache = null; -+ if (!common_config('memcached', 'enabled')) { -+ return null; -+ } else { -+ if (!$cache) { -+ $cache = new Memcache(); -+ $servers = common_config('memcached', 'server'); -+ if (is_array($servers)) { -+ foreach($servers as $server) { -+ $cache->addServer($server); -+ } -+ } else { -+ $cache->addServer($servers); -+ } -+ } -+ return $cache; + } -hunk ./lib/util.php 2184 -- # XXX: better compatibility check needed here! -- return ($from == $to); -+ // XXX: better compatibility check needed here! -+ return ($from == $to); -hunk ./lib/util.php 2190 --function common_block_form($profile, $args=NULL) { -+function common_block_form($profile, $args=null) { -hunk ./lib/util.php 2194 --function common_unblock_form($profile, $args=NULL) { -+function common_unblock_form($profile, $args=null) { -hunk ./lib/util.php 2198 --function common_blocking_form($type, $label, $profile, $args=NULL) { -+function common_blocking_form($type, $label, $profile, $args=null) { -hunk ./lib/util.php 2220 -- diff --git a/lib/action.php b/lib/action.php index 7a2461bb5..486b40387 100644 --- a/lib/action.php +++ b/lib/action.php @@ -1,5 +1,5 @@ . */ -if (!defined('LACONICA')) { exit(1); } - -class Action { // lawsuit - - var $args; - - function Action() { - } - - # For initializing members of the class - - function prepare($argarray) { - $this->args =& common_copy_args($argarray); - return true; - } - - # For comparison with If-Last-Modified - # If not applicable, return NULL - - function last_modified() { - return NULL; - } - - function etag() { - return NULL; - } - - function is_readonly() { - return false; - } - - function arg($key, $def=NULL) { - if (array_key_exists($key, $this->args)) { - return $this->args[$key]; - } else { - return $def; - } - } - - function trimmed($key, $def=NULL) { - $arg = $this->arg($key, $def); - return (is_string($arg)) ? trim($arg) : $arg; - } - - # Note: argarray ignored, since it's now passed in in prepare() - - function handle($argarray=NULL) { - - $lm = $this->last_modified(); - $etag = $this->etag(); - - if ($etag) { - header('ETag: ' . $etag); - } - - if ($lm) { - header('Last-Modified: ' . date(DATE_RFC1123, $lm)); - $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; - if ($if_modified_since) { - $ims = strtotime($if_modified_since); - if ($lm <= $ims) { - if (!$etag || $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { - header('HTTP/1.1 304 Not Modified'); - # Better way to do this? - exit(0); - } - } - } - } - } - - function _has_etag($etag, $if_none_match) { - return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); - } - - function boolean($key, $def=false) { - $arg = strtolower($this->trimmed($key)); - - if (is_null($arg)) { - return $def; - } else if (in_array($arg, array('true', 'yes', '1'))) { - return true; - } else if (in_array($arg, array('false', 'no', '0'))) { - return false; - } else { - return $def; - } - } - - function server_error($msg, $code=500) { - $action = $this->trimmed('action'); - common_debug("Server error '$code' on '$action': $msg", __FILE__); - common_server_error($msg, $code); - } - - function client_error($msg, $code=400) { - $action = $this->trimmed('action'); - common_debug("User error '$code' on '$action': $msg", __FILE__); - common_user_error($msg, $code); - } - - function self_url() { - $action = $this->trimmed('action'); - $args = $this->args; - unset($args['action']); - foreach (array_keys($_COOKIE) as $cookie) { - unset($args[$cookie]); - } - return common_local_url($action, $args); - } - - function nav_menu($menu) { +if (!defined('LACONICA')) { + exit(1); +} + +class Action // lawsuit +{ + + var $args; + + function Action() + { + } + + // For initializing members of the class + + function prepare($argarray) + { + $this->args =& common_copy_args($argarray); + return true; + } + + // For comparison with If-Last-Modified + // If not applicable, return null + + function last_modified() + { + return null; + } + + function etag() + { + return null; + } + + function is_readonly() + { + return false; + } + + function arg($key, $def=null) + { + if (array_key_exists($key, $this->args)) { + return $this->args[$key]; + } else { + return $def; + } + } + + function trimmed($key, $def=null) + { + $arg = $this->arg($key, $def); + return (is_string($arg)) ? trim($arg) : $arg; + } + + // Note: argarray ignored, since it's now passed in in prepare() + + function handle($argarray=null) + { + + $lm = $this->last_modified(); + $etag = $this->etag(); + + if ($etag) { + header('ETag: ' . $etag); + } + + if ($lm) { + header('Last-Modified: ' . date(DATE_RFC1123, $lm)); + $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; + if ($if_modified_since) { + $ims = strtotime($if_modified_since); + if ($lm <= $ims) { + if (!$etag || + $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { + header('HTTP/1.1 304 Not Modified'); + // Better way to do this? + exit(0); + } + } + } + } + } + + function _has_etag($etag, $if_none_match) + { + return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); + } + + function boolean($key, $def=false) + { + $arg = strtolower($this->trimmed($key)); + + if (is_null($arg)) { + return $def; + } else if (in_array($arg, array('true', 'yes', '1'))) { + return true; + } else if (in_array($arg, array('false', 'no', '0'))) { + return false; + } else { + return $def; + } + } + + function server_error($msg, $code=500) + { + $action = $this->trimmed('action'); + common_debug("Server error '$code' on '$action': $msg", __FILE__); + common_server_error($msg, $code); + } + + function client_error($msg, $code=400) + { + $action = $this->trimmed('action'); + common_debug("User error '$code' on '$action': $msg", __FILE__); + common_user_error($msg, $code); + } + + function self_url() + { + $action = $this->trimmed('action'); + $args = $this->args; + unset($args['action']); + foreach (array_keys($_COOKIE) as $cookie) { + unset($args[$cookie]); + } + return common_local_url($action, $args); + } + + function nav_menu($menu) + { $action = $this->trimmed('action'); common_element_start('ul', array('id' => 'nav_views')); foreach ($menu as $menuaction => $menudesc) { - common_menu_item(common_local_url($menuaction, isset($menudesc[2]) ? $menudesc[2] : NULL), - $menudesc[0], - $menudesc[1], - $action == $menuaction); + common_menu_item(common_local_url($menuaction, + isset($menudesc[2]) ? $menudesc[2] : null), + $menudesc[0], + $menudesc[1], + $action == $menuaction); } common_element_end('ul'); - } + } } -- cgit v1.2.3-54-g00ecf