diff options
82 files changed, 829 insertions, 234 deletions
diff --git a/_test/bootstrap.php b/_test/bootstrap.php index 732fef9ed..4f0d5efaa 100644 --- a/_test/bootstrap.php +++ b/_test/bootstrap.php @@ -15,7 +15,8 @@ require_once DOKU_UNITTEST.'core/TestUtils.php'; define('SIMPLE_TEST', true); // basic behaviours -error_reporting(E_ALL); +define('DOKU_E_LEVEL',E_ALL ^ E_NOTICE); +error_reporting(DOKU_E_LEVEL); set_time_limit(0); ini_set('memory_limit','2048M'); @@ -68,6 +69,13 @@ $default_server_vars = array( 'REQUEST_TIME' => time(), ); +// fixup for $_SERVER when run from CLI, +// some values should be mocked for use by inc/init.php which is called here +// [ $_SERVER is also mocked in TestRequest::execute() ] +if (php_sapi_name() == 'cli') { + $_SERVER = array_merge($default_server_vars, $_SERVER); +} + // create temp directories mkdir(TMP_DIR); diff --git a/_test/tests/inc/auth_nameencode.test.php b/_test/tests/inc/auth_nameencode.test.php index da9f31f90..074155486 100644 --- a/_test/tests/inc/auth_nameencode.test.php +++ b/_test/tests/inc/auth_nameencode.test.php @@ -19,6 +19,18 @@ class auth_nameencode_test extends DokuWikiTest { $this->assertEquals(auth_nameencode($in),$out); } + function test_apostrophe(){ + $in = 'hey\'you'; + $out = 'hey%27you'; + $this->assertEquals(auth_nameencode($in),$out); + } + + function test_backslash(){ + $in = 'hey\\you'; + $out = 'hey%5cyou'; + $this->assertEquals(auth_nameencode($in),$out); + } + function test_complex(){ $in = 'hey $ you !$%! foo '; $out = 'hey%20%24%20you%20%21%24%25%21%20foo%20'; diff --git a/_test/tests/inc/httpclient_http_proxy.test.php b/_test/tests/inc/httpclient_http_proxy.test.php index faa7a4280..4aa039fcc 100644 --- a/_test/tests/inc/httpclient_http_proxy.test.php +++ b/_test/tests/inc/httpclient_http_proxy.test.php @@ -1,7 +1,7 @@ <?php class httpclient_http_proxy_test extends DokuWikiTest { - protected $url = 'http://www.dokuwiki.org/README'; + protected $url = 'http://test.dokuwiki.org/README'; /** * @group internet @@ -13,7 +13,7 @@ class httpclient_http_proxy_test extends DokuWikiTest { $http->proxy_port = 8080; $data = $http->get($this->url); - $this->assertFalse($data === false, 'HTTP response'); + $this->assertFalse($data === false, 'HTTP response '.$http->error); $this->assertTrue(strpos($data,'DokuWiki') !== false, 'response content'); } diff --git a/_test/tests/inc/indexer_indexing.test.php b/_test/tests/inc/indexer_indexing.test.php new file mode 100644 index 000000000..628e82e00 --- /dev/null +++ b/_test/tests/inc/indexer_indexing.test.php @@ -0,0 +1,45 @@ +<?php +/** + * Tests the indexing functionality of the indexer + * + * @author Michael Hamann <michael@content-space.de> + */ +class indexer_indexing_test extends DokuWikiTest { + public function setUp() { + parent::setUp(); + saveWikiText('testpage', 'Foo bar baz.', 'Test initialization'); + saveWikiText('notfound', 'Foon barn bazn.', 'Test initialization'); + idx_addPage('testpage'); + idx_addPage('notfound'); + } + + public function test_words() { + $indexer = idx_get_indexer(); + $query = array('baz', 'foo'); + $this->assertEquals(array('baz' => array('testpage' => 1), 'foo' => array('testpage' => 1)), $indexer->lookup($query)); + } + + public function test_numerically_identical_words() { + $indexer = idx_get_indexer(); + $indexer->addPageWords('testpage', '0x1 002'); + $indexer->addPageWords('notfound', '0x2'); + $query = array('001', '002'); + $this->assertEquals(array('001' => array(), '002' => array('testpage' => 1)), $indexer->lookup($query)); + } + + public function test_meta() { + $indexer = idx_get_indexer(); + $indexer->addMetaKeys('testpage', 'testkey', 'testvalue'); + $indexer->addMetaKeys('notfound', 'testkey', 'notvalue'); + $query = 'testvalue'; + $this->assertEquals(array('testpage'), $indexer->lookupKey('testkey', $query)); + } + + public function test_numerically_identical_meta_values() { + $indexer = idx_get_indexer(); + $indexer->addMetaKeys('testpage', 'numkey', array('0001', '01')); + $indexer->addMetaKeys('notfound', 'numkey', array('00001', '000001')); + $query = array('001', '01'); + $this->assertEquals(array('001' => array(), '01' => array('testpage')), $indexer->lookupKey('numkey', $query)); + } +}
\ No newline at end of file diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index ef78692b3..bac0c39ba 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -50,8 +50,8 @@ class mailer_test extends DokuWikiTest { // set a bunch of test headers $mail->setHeader('test-header','bla'); $mail->setHeader('to','A valid ASCII name <test@example.com>'); - $mail->setHeader('from',"Thös ne\needs\x00serious cleaning$§%."); - $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning$§%.",false); + $mail->setHeader('from',"Thös ne\needs\x00serious cleaning\$§%."); + $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning\$§%.",false); $mail->setHeader("weird\n*+\x00foo.-_@bar?",'now clean'); // are they set? @@ -63,7 +63,7 @@ class mailer_test extends DokuWikiTest { $this->assertArrayHasKey('From',$headers); $this->assertEquals('Ths neeedsserious cleaning.',$headers['From']); $this->assertArrayHasKey('Bad',$headers); - $this->assertEquals("Thös ne\needs\x00serious cleaning$§%.",$headers['Bad']); + $this->assertEquals("Thös ne\needs\x00serious cleaning\$§%.",$headers['Bad']); $this->assertArrayHasKey('Weird+foo.-_@bar',$headers); // unset a header again @@ -156,5 +156,68 @@ class mailer_test extends DokuWikiTest { $this->assertEquals(0, preg_match('/(^|\n)Bcc: (\n|$)/', $header), 'Bcc found in headers.'); $this->assertEquals(0, preg_match('/(^|\n)Cc: (\n|$)/', $header), 'Bcc found in headers.'); } + + /** + * @group internet + */ + function test_lint(){ + // prepare a simple multipart message + $mail = new TestMailer(); + $mail->to(array('Möp <moep@example.com> ',' foo <foo@example.com>')); + $mail->from('Me <test@example.com>'); + $mail->subject('This is a töst'); + $mail->setBody('Hello Wörld, + + please don\'t burn, okay? + '); + $mail->attachContent('some test data', 'text/plain', 'a text.txt'); + $msg = $mail->dump(); + $msglines = explode("\n", $msg); + + //echo $msg; + + // ask message lint if it is okay + $html = new HTTPClient(); + $results = $html->post('http://tools.ietf.org/tools/msglint/msglint', array('msg'=>$msg)); + $this->assertTrue($results !== false); + + // parse the result lines + $lines = explode("\n", $results); + $rows = count($lines); + $i=0; + while(trim($lines[$i]) != '-----------' && $i<$rows) $i++; //skip preamble + for($i=$i+1; $i<$rows; $i++){ + $line = trim($lines[$i]); + if($line == '-----------') break; //skip appendix + + // get possible continuation of the line + while($lines[$i+1][0] == ' '){ + $line .= ' '.trim($lines[$i+1]); + $i++; + } + + // check the line for errors + if(substr($line,0,5) == 'ERROR' || substr($line,0,7) == 'WARNING'){ + // ignore some errors + if(strpos($line, "missing mandatory header 'return-path'")) continue; #set by MDA + if(strpos($line, "bare newline in text body decoded")) continue; #seems to be false positive + + // get the context in which the error occured + $errorin = ''; + if(preg_match('/line (\d+)$/', $line, $m)){ + $errorin .= "\n".$msglines[$m[1] - 1]; + } + if(preg_match('/lines (\d+)-(\d+)$/', $line, $m)){ + for($x=$m[1]-1; $x<$m[2]; $x++){ + $errorin .= "\n".$msglines[$x]; + } + } + + // raise the error + throw new Exception($line.$errorin); + } + } + + } } //Setup VIM: ex: et ts=4 : diff --git a/_test/tests/inc/pageutils_clean_id.test.php b/_test/tests/inc/pageutils_clean_id.test.php index 478fd2bc4..f67109ba3 100644 --- a/_test/tests/inc/pageutils_clean_id.test.php +++ b/_test/tests/inc/pageutils_clean_id.test.php @@ -43,6 +43,9 @@ class init_clean_id_test extends DokuWikiTest { $tests[] = array('ns._#!ns:page','false','ns._ns:page'); $tests[] = array('ns_:page',false,'ns:page'); $tests[] = array('page...page','false','page...page'); + $tests[] = array('page---page','false','page---page'); + $tests[] = array('page___page','false','page_page'); + $tests[] = array('page_-.page','false','page_-.page'); $tests[] = array(':page',false,'page'); $tests[] = array(':ns:page',false,'ns:page'); $tests[] = array('page:',false,'page'); diff --git a/_test/tests/inc/parser/parser_table.test.php b/_test/tests/inc/parser/parser_table.test.php index 96789c38c..542a307b8 100644 --- a/_test/tests/inc/parser/parser_table.test.php +++ b/_test/tests/inc/parser/parser_table.test.php @@ -270,6 +270,64 @@ def'); ); $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); } + + function testCellRowSpanFirstRow() { + $this->P->addMode('table',new Doku_Parser_Mode_Table()); + $this->P->parse(' +abc +|::: ^ d:::^:::| ::: | +| b ^ e | | ::: | +|c ^ ::: | |:::| +def'); + + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n\nabc")), + array('p_close',array()), + array('table_open',array(4, 3, 6)), + array('tablerow_open',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array('')), + array('tablecell_close',array()), + array('tableheader_open',array(1,'right',1)), + array('cdata',array(' d:::')), + array('tableheader_close',array()), + array('tableheader_open',array(1,NULL,1)), + array('cdata',array('')), + array('tableheader_close',array()), + array('tablecell_open',array(1,NULL,3)), + array('cdata',array('')), + array('tablecell_close',array()), + array('tablerow_close',array()), + array('tablerow_open',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array(' b ')), + array('tablecell_close',array()), + array('tableheader_open',array(1,'left',2)), + array('cdata',array(' e ')), + array('tableheader_close',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array(' ')), + array('tablecell_close',array()), + array('tablerow_close',array()), + array('tablerow_open',array()), + array('tablecell_open',array(1,'left',1)), + array('cdata',array('c ')), + array('tablecell_close',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array(' ')), + array('tablecell_close',array()), + array('tablerow_close',array()), + + array('table_close',array(69)), + array('p_open',array()), + array('cdata',array('def')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } function testCellAlignmentFormatting() { $this->P->addMode('table',new Doku_Parser_Mode_Table()); diff --git a/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php b/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php index f08785ca2..18660553d 100644 --- a/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php +++ b/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php @@ -80,7 +80,7 @@ class parserutils_set_metadata_during_rendering_test extends DokuWikiTest { } // wrapper function for the fake plugin controller, return $this for the fake syntax of this test - function &load($type,$name,$new=false,$disabled=false){ + function load($type,$name,$new=false,$disabled=false){ if ($name == 'parserutils_test') { return $this; } else { diff --git a/_test/tests/inc/subscription.test.php b/_test/tests/inc/subscription.test.php index 333400576..34a7b9e4b 100644 --- a/_test/tests/inc/subscription.test.php +++ b/_test/tests/inc/subscription.test.php @@ -237,7 +237,7 @@ class MockupSubscription extends Subscription { return parent::buildregex($user, $style, $data); } - protected function send($subscriber_mail, $subject, $id, $template, $trep, $hrep = null) { + protected function send($subscriber_mail, $subject, $id, $template, $trep, $hrep = null, $headers = array()) { $this->mails[] = $subscriber_mail; return true; } diff --git a/_test/tests/lib/exe/css_css_compress.test.php b/_test/tests/lib/exe/css_css_compress.test.php index a7c87b6a7..a614ea2fd 100644 --- a/_test/tests/lib/exe/css_css_compress.test.php +++ b/_test/tests/lib/exe/css_css_compress.test.php @@ -62,6 +62,46 @@ class css_css_compress_test extends DokuWikiTest { $this->assertEquals(css_compress($text), 'a{left:20px;top:20px}'); } + function test_shortening() { + $input = array( + 'margin:0em 0em 0em 0em ul.test margin:0em :0em div#FFFFFF {', + 'margin: 1px 1px 1px 1px;', + 'padding: 1px 2px 1px 2px;', + 'margin: 1px 2px 3px 1px;', + 'padding: 1px 2px 3px 4px;', + 'margin: 00.00em 0em 01.00px 0em;', + 'padding: 0010em 0010.00em 00.00em 00.00100em;', + 'padding: 0010% 0010.00% 00.00% 00.00100xxx;', + 'padding: 0.0em .0em 0.em 00.00em;', + 'padding: 01.0em;', + 'color: #FFFFFF;', + 'color: #777777;', + 'color: #123456;', + 'border: 01.0em solid #ffffff;', + ); + + $expected = array( + 'margin:0em 0em 0em 0em ul.test margin:0em :0em div#FFFFFF{', + 'margin:1px;', + 'padding:1px 2px;', + 'margin:1px 2px 3px 1px;', + 'padding:1px 2px 3px 4px;', + 'margin:0 0 1px 0;', + 'padding:10em 10em 0 .001em;', + 'padding:10% 10% 0 00.00100xxx;', + 'padding:0;', + 'padding:1em;', + 'color:#FFF;', + 'color:#777;', + 'color:#123456;', + 'border:1em solid #fff;', + ); + + $input = array_map('css_compress', $input); + + $this->assertEquals($expected, $input); + } + } //Setup VIM: ex: et ts=4 : @@ -429,19 +429,22 @@ function rss_buildItems(&$rss, &$data, $opt) { $cat = getNS($id); if($cat) $item->category = $cat; } - - // finally add the item to the feed object, after handing it to registered plugins - $evdata = array( - 'item' => &$item, - 'opt' => &$opt, - 'ditem' => &$ditem, - 'rss' => &$rss - ); - $evt = new Doku_Event('FEED_ITEM_ADD', $evdata); - if($evt->advise_before()) { - $rss->addItem($item); + + // Add only visible items + if(isVisiblePage($id)) { + // finally add the item to the feed object, after handing it to registered plugins + $evdata = array( + 'item' => &$item, + 'opt' => &$opt, + 'ditem' => &$ditem, + 'rss' => &$rss + ); + $evt = new Doku_Event('FEED_ITEM_ADD', $evdata); + if($evt->advise_before()) { + $rss->addItem($item); + } + $evt->advise_after(); // for completeness } - $evt->advise_after(); // for completeness } } $event->advise_after(); diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php index b2621bdbb..96954fb47 100644 --- a/inc/HTTPClient.php +++ b/inc/HTTPClient.php @@ -553,7 +553,7 @@ class HTTPClient { }while($r_line != "\r\n" && $r_line != "\n"); $this->_debug('SSL Tunnel Response',$r_headers); - if(preg_match('/^HTTP\/1\.0 200/i',$r_headers)){ + if(preg_match('/^HTTP\/1\.[01] 200/i',$r_headers)){ if (stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT)) { $requesturl = $requestinfo['path']; return true; diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php index ba6a2b5bb..947407a48 100644 --- a/inc/JpegMeta.php +++ b/inc/JpegMeta.php @@ -975,7 +975,7 @@ class JpegMeta { if ($capture) { if ($length) - $this->_markers[$count]['data'] =& fread($this->_fp, $length); + $this->_markers[$count]['data'] = fread($this->_fp, $length); else $this->_markers[$count]['data'] = ""; } diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php index 0f3321bb9..6a6468ab4 100644 --- a/inc/Mailer.class.php +++ b/inc/Mailer.class.php @@ -41,9 +41,10 @@ class Mailer { global $conf; $server = parse_url(DOKU_URL, PHP_URL_HOST); + if(strpos($server,'.') === false) $server = $server.'.localhost'; $this->partid = md5(uniqid(rand(), true)).'@'.$server; - $this->boundary = '----------'.md5(uniqid(rand(), true)); + $this->boundary = '__________'.md5(uniqid(rand(), true)); $listid = join('.', array_reverse(explode('/', DOKU_BASE))).$server; $listid = strtolower(trim($listid, '.')); @@ -57,6 +58,7 @@ class Mailer { $this->setHeader('X-DokuWiki-Server', $server); $this->setHeader('X-Auto-Response-Suppress', 'OOF'); $this->setHeader('List-Id', $conf['title'].' <'.$listid.'>'); + $this->setHeader('Date', date('r'), false); } /** @@ -417,6 +419,8 @@ class Mailer { $part = 1; // embedded attachments foreach($this->attach as $media) { + $media['name'] = str_replace(':', '_', cleanID($media['name'], true)); + // create content id $cid = 'part'.$part.'.'.$this->partid; @@ -426,13 +430,14 @@ class Mailer { } $mime .= '--'.$this->boundary.MAILHEADER_EOL; - $mime .= 'Content-Type: '.$media['mime'].';'.MAILHEADER_EOL; + $mime .= 'Content-Type: '.$media['mime'].';'.MAILHEADER_EOL. + ' id="'.$cid.'"'.MAILHEADER_EOL; $mime .= 'Content-Transfer-Encoding: base64'.MAILHEADER_EOL; $mime .= "Content-ID: <$cid>".MAILHEADER_EOL; if($media['embed']) { - $mime .= 'Content-Disposition: inline; filename="'.$media['name'].'"'.MAILHEADER_EOL; + $mime .= 'Content-Disposition: inline; filename='.$media['name'].''.MAILHEADER_EOL; } else { - $mime .= 'Content-Disposition: attachment; filename="'.$media['name'].'"'.MAILHEADER_EOL; + $mime .= 'Content-Disposition: attachment; filename='.$media['name'].''.MAILHEADER_EOL; } $mime .= MAILHEADER_EOL; //end of headers $mime .= chunk_split(base64_encode($media['data']), 74, MAILHEADER_EOL); @@ -469,7 +474,7 @@ class Mailer { if(!$this->html && !count($this->attach)) { // we can send a simple single part message $this->headers['Content-Type'] = 'text/plain; charset=UTF-8'; $this->headers['Content-Transfer-Encoding'] = 'base64'; - $body .= chunk_split(base64_encode($this->text), 74, MAILHEADER_EOL); + $body .= chunk_split(base64_encode($this->text), 72, MAILHEADER_EOL); } else { // multi part it is $body .= "This is a multi-part message in MIME format.".MAILHEADER_EOL; @@ -484,10 +489,11 @@ class Mailer { $body .= 'Content-Type: text/plain; charset=UTF-8'.MAILHEADER_EOL; $body .= 'Content-Transfer-Encoding: base64'.MAILHEADER_EOL; $body .= MAILHEADER_EOL; - $body .= chunk_split(base64_encode($this->text), 74, MAILHEADER_EOL); + $body .= chunk_split(base64_encode($this->text), 72, MAILHEADER_EOL); $body .= '--'.$this->boundary.'XX'.MAILHEADER_EOL; $body .= 'Content-Type: multipart/related;'.MAILHEADER_EOL. - ' boundary="'.$this->boundary.'"'.MAILHEADER_EOL; + ' boundary="'.$this->boundary.'";'.MAILHEADER_EOL. + ' type="text/html"'.MAILHEADER_EOL; $body .= MAILHEADER_EOL; } @@ -495,7 +501,7 @@ class Mailer { $body .= 'Content-Type: text/html; charset=UTF-8'.MAILHEADER_EOL; $body .= 'Content-Transfer-Encoding: base64'.MAILHEADER_EOL; $body .= MAILHEADER_EOL; - $body .= chunk_split(base64_encode($this->html), 74, MAILHEADER_EOL); + $body .= chunk_split(base64_encode($this->html), 72, MAILHEADER_EOL); $body .= MAILHEADER_EOL; $body .= $attachments; $body .= '--'.$this->boundary.'--'.MAILHEADER_EOL; diff --git a/inc/SimplePie.php b/inc/SimplePie.php index fd69b4b09..8a9060509 100644 --- a/inc/SimplePie.php +++ b/inc/SimplePie.php @@ -16579,7 +16579,11 @@ class SimplePie_Sanitize if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) { - + if (!class_exists('DOMDocument')) + { + $this->registry->call('Misc', 'error', array('DOMDocument not found, unable to use sanitizer', E_USER_WARNING, __FILE__, __LINE__)); + return ''; + } $document = new DOMDocument(); $document->encoding = 'UTF-8'; $data = $this->preprocess($data, $type); diff --git a/inc/actions.php b/inc/actions.php index bf124c887..5a59d852d 100644 --- a/inc/actions.php +++ b/inc/actions.php @@ -164,7 +164,8 @@ function act_dispatch(){ $pluginlist = plugin_list('admin'); if (in_array($page, $pluginlist)) { // attempt to load the plugin - if ($plugin =& plugin_load('admin',$page) !== null){ + + if (($plugin = plugin_load('admin',$page)) !== null){ /** @var DokuWiki_Admin_Plugin $plugin */ if($plugin->forAdminOnly() && !$INFO['isadmin']){ // a manager tried to load a plugin that's for admins only diff --git a/inc/auth.php b/inc/auth.php index 36fc7d086..0d42c8673 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -139,10 +139,10 @@ function auth_loadACL() { $out = array(); foreach($acl as $line) { $line = trim($line); - if($line{0} == '#') continue; + if(empty($line) || ($line{0} == '#')) continue; // skip blank lines & comments list($id,$rest) = preg_split('/\s+/',$line,2); - // substitue user wildcard first (its 1:1) + // substitute user wildcard first (its 1:1) if(strstr($line, '%USER%')){ // if user is not logged in, this ACL line is meaningless - skip it if (!isset($_SERVER['REMOTE_USER'])) continue; @@ -808,14 +808,14 @@ function auth_nameencode($name, $skip_group = false) { if(!isset($cache[$name][$skip_group])) { if($skip_group && $name{0} == '@') { - $cache[$name][$skip_group] = '@'.preg_replace( - '/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e', - "'%'.dechex(ord(substr('\\1',-1)))", substr($name, 1) + $cache[$name][$skip_group] = '@'.preg_replace_callback( + '/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/', + 'auth_nameencode_callback', substr($name, 1) ); } else { - $cache[$name][$skip_group] = preg_replace( - '/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e', - "'%'.dechex(ord(substr('\\1',-1)))", $name + $cache[$name][$skip_group] = preg_replace_callback( + '/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/', + 'auth_nameencode_callback', $name ); } } @@ -823,6 +823,10 @@ function auth_nameencode($name, $skip_group = false) { return $cache[$name][$skip_group]; } +function auth_nameencode_callback($matches) { + return '%'.dechex(ord(substr($matches[1],-1))); +} + /** * Create a pronouncable password * diff --git a/inc/common.php b/inc/common.php index 3312141c8..32771285b 100644 --- a/inc/common.php +++ b/inc/common.php @@ -64,7 +64,7 @@ function getSecurityToken() { */ function checkSecurityToken($token = null) { global $INPUT; - if(!$_SERVER['REMOTE_USER']) return true; // no logged in user, no need for a check + if(empty($_SERVER['REMOTE_USER'])) return true; // no logged in user, no need for a check if(is_null($token)) $token = $INPUT->str('sectok'); if(getSecurityToken() != $token) { @@ -474,13 +474,13 @@ function ml($id = '', $more = '', $direct = true, $sep = '&', $abs = false) if(is_array($more)) { // add token for resized images - if($more['w'] || $more['h'] || $isexternalimage){ + if(!empty($more['w']) || !empty($more['h']) || $isexternalimage){ $more['tok'] = media_get_token($id,$more['w'],$more['h']); } // strip defaults for shorter URLs if(isset($more['cache']) && $more['cache'] == 'cache') unset($more['cache']); - if(!$more['w']) unset($more['w']); - if(!$more['h']) unset($more['h']); + if(empty($more['w'])) unset($more['w']); + if(empty($more['h'])) unset($more['h']); if(isset($more['id']) && $direct) unset($more['id']); $more = buildURLparams($more, $sep); } else { @@ -1625,7 +1625,8 @@ function set_doku_pref($pref, $val) { } if (!empty($cookieVal)) { - setcookie('DOKU_PREFS', $cookieVal, time()+365*24*3600, DOKU_BASE, '', ($conf['securecookie'] && is_ssl())); + $cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir']; + setcookie('DOKU_PREFS', $cookieVal, time()+365*24*3600, $cookieDir, '', ($conf['securecookie'] && is_ssl())); } } diff --git a/inc/html.php b/inc/html.php index 03e9dc751..bbe29e371 100644 --- a/inc/html.php +++ b/inc/html.php @@ -428,7 +428,7 @@ function html_revisions($first=0, $media_id = false){ global $conf; global $lang; $id = $ID; - /* we need to get one additionally log entry to be able to + /* we need to get one additional log entry to be able to * decide if this is the last page or is there another one. * see html_recent() */ @@ -1661,7 +1661,7 @@ function html_admin(){ global $ID; global $INFO; global $conf; - /** @var auth_basic $auth */ + /** @var DokuWiki_Auth_Plugin $auth */ global $auth; // build menu of admin functions from the plugins that handle them @@ -1669,7 +1669,7 @@ function html_admin(){ $menu = array(); foreach ($pluginlist as $p) { /** @var DokuWiki_Admin_Plugin $obj */ - if($obj =& plugin_load('admin',$p) === null) continue; + if(($obj = plugin_load('admin',$p)) === null) continue; // check permissions if($obj->forAdminOnly() && !$INFO['isadmin']) continue; diff --git a/inc/indexer.php b/inc/indexer.php index 8f0ba7ec6..658fb966b 100644 --- a/inc/indexer.php +++ b/inc/indexer.php @@ -10,7 +10,7 @@ if(!defined('DOKU_INC')) die('meh.'); // Version tag used to force rebuild on upgrade -define('INDEXER_VERSION', 6); +define('INDEXER_VERSION', 7); // set the minimum token length to use in the index (note, this doesn't apply to numeric tokens) if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2); @@ -215,7 +215,7 @@ class Doku_Indexer { foreach (array_keys($words) as $wlen) { $word_idx = $this->getIndex('w', $wlen); foreach ($words[$wlen] as $word => $freq) { - $wid = array_search($word, $word_idx); + $wid = array_search($word, $word_idx, true); if ($wid === false) { $wid = count($word_idx); $word_idx[] = $word; @@ -296,7 +296,7 @@ class Doku_Indexer { foreach ($values as $val) { $val = (string)$val; if ($val !== "") { - $id = array_search($val, $metawords); + $id = array_search($val, $metawords, true); if ($id === false) { $id = count($metawords); $metawords[$id] = $val; @@ -352,13 +352,13 @@ class Doku_Indexer { $pages = $this->getPages(); - $id = array_search($oldpage, $pages); + $id = array_search($oldpage, $pages, true); if ($id === false) { $this->unlock(); return 'page is not in index'; } - $new_id = array_search($newpage, $pages); + $new_id = array_search($newpage, $pages, true); if ($new_id !== false) { // make sure the page is not in the index anymore if ($this->deletePageNoLock($newpage) !== true) { @@ -397,9 +397,9 @@ class Doku_Indexer { // change the relation references index $metavalues = $this->getIndex($key, '_w'); - $oldid = array_search($oldvalue, $metavalues); + $oldid = array_search($oldvalue, $metavalues, true); if ($oldid !== false) { - $newid = array_search($newvalue, $metavalues); + $newid = array_search($newvalue, $metavalues, true); if ($newid !== false) { // free memory unset ($metavalues); @@ -600,7 +600,7 @@ class Doku_Indexer { foreach ($wordlist as $i => $word) { if ((!is_numeric($word) && strlen($word) < IDX_MINWORDLENGTH) - || array_search($word, $stopwords) !== false) + || array_search($word, $stopwords, true) !== false) unset($wordlist[$i]); } return array_values($wordlist); @@ -771,7 +771,7 @@ class Doku_Indexer { foreach(array_keys(preg_grep('/'.$re.'/', $words)) as $i) $value_ids[$i][] = $val; } else { - if (($i = array_search($val, $words)) !== false) + if (($i = array_search($val, $words, true)) !== false) $value_ids[$i][] = $val; } } @@ -874,7 +874,7 @@ class Doku_Indexer { // handle exact search if (isset($tokenlength[$ixlen])) { foreach ($tokenlength[$ixlen] as $xword) { - $wid = array_search($xword, $word_idx); + $wid = array_search($xword, $word_idx, true); if ($wid !== false) { $wids[$ixlen][] = $wid; foreach ($tokens[$xword] as $w) @@ -1017,8 +1017,9 @@ class Doku_Indexer { return false; } } - if ($conf['dperm']) + if (!empty($conf['dperm'])) { chmod($lock, $conf['dperm']); + } return $status; } @@ -1152,7 +1153,7 @@ class Doku_Indexer { */ protected function addIndexKey($idx, $suffix, $value) { $index = $this->getIndex($idx, $suffix); - $id = array_search($value, $index); + $id = array_search($value, $index, true); if ($id === false) { $id = count($index); $index[$id] = $value; diff --git a/inc/init.php b/inc/init.php index 30eb1b251..a937b934d 100644 --- a/inc/init.php +++ b/inc/init.php @@ -267,10 +267,10 @@ function init_lang($langCode) { $lang = array(); //load the language files - require_once(DOKU_INC.'inc/lang/en/lang.php'); + require(DOKU_INC.'inc/lang/en/lang.php'); if ($langCode && $langCode != 'en') { if (file_exists(DOKU_INC."inc/lang/$langCode/lang.php")) { - require_once(DOKU_INC."inc/lang/$langCode/lang.php"); + require(DOKU_INC."inc/lang/$langCode/lang.php"); } } } @@ -288,7 +288,7 @@ function init_files(){ $fh = @fopen($file,'a'); if($fh){ fclose($fh); - if($conf['fperm']) chmod($file, $conf['fperm']); + if(!empty($conf['fperm'])) chmod($file, $conf['fperm']); }else{ nice_die("$file is not writable. Check your permissions settings!"); } diff --git a/inc/io.php b/inc/io.php index 4bd7c3364..eff0279ac 100644 --- a/inc/io.php +++ b/inc/io.php @@ -393,7 +393,7 @@ function io_mkdir_p($target){ return io_mkdir_ftp($dir); }else{ $ret = @mkdir($target,$conf['dmode']); // crawl back up & create dir tree - if($ret && $conf['dperm']) chmod($target, $conf['dperm']); + if($ret && !empty($conf['dperm'])) chmod($target, $conf['dperm']); return $ret; } } diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php index f36c43fdb..6fe56929d 100644 --- a/inc/lang/da/lang.php +++ b/inc/lang/da/lang.php @@ -1,8 +1,8 @@ <?php + /** - * danish language file - * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author koeppe <koeppe@kazur.dk> * @author Jon Bendtsen <bendtsen@diku.dk> * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk> @@ -14,6 +14,7 @@ * @author rasmus@kinnerup.com * @author Michael Pedersen subben@gmail.com * @author Mikael Lyngvig <mikael@lyngvig.org> + * @author Soren Birk <soer9648@hotmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -57,6 +58,7 @@ $lang['btn_revert'] = 'Reetablér'; $lang['btn_register'] = 'Registrér'; $lang['btn_apply'] = 'Anvend'; $lang['btn_media'] = 'Media Manager'; +$lang['btn_deleteuser'] = 'Fjern Min Konto'; $lang['loggedinas'] = 'Logget ind som'; $lang['user'] = 'Brugernavn'; $lang['pass'] = 'Adgangskode'; @@ -68,6 +70,7 @@ $lang['fullname'] = 'Fulde navn'; $lang['email'] = 'E-mail'; $lang['profile'] = 'Brugerprofil'; $lang['badlogin'] = 'Brugernavn eller adgangskode var forkert.'; +$lang['badpassconfirm'] = 'Kodeordet var desværre forkert'; $lang['minoredit'] = 'Mindre ændringer'; $lang['draftdate'] = 'Kladde automatisk gemt d.'; $lang['nosecedit'] = 'Siden blev ændret i mellemtiden, sektions information var for gammel, hentede hele siden i stedet.'; @@ -84,6 +87,9 @@ $lang['profna'] = 'Denne wiki understøtter ikke ændring af prof $lang['profnochange'] = 'Ingen ændringer, intet modificeret.'; $lang['profnoempty'] = 'Tomt navn eller e-mail adresse er ikke tilladt.'; $lang['profchanged'] = 'Brugerprofil opdateret korrekt.'; +$lang['profnodelete'] = 'Denne wiki supporterer ikke sletning af brugere'; +$lang['profdeleteuser'] = 'Slet Konto'; +$lang['profdeleted'] = 'Din brugerkonto er blevet slettet fra denne wiki'; $lang['pwdforget'] = 'Har du glemt dit adgangskode? Få et nyt'; $lang['resendna'] = 'Denne wiki understøtter ikke udsendelse af nyt adgangskode.'; $lang['resendpwd'] = 'Vælg ny adgangskode for'; @@ -198,6 +204,7 @@ $lang['user_tools'] = 'Brugerværktøjer'; $lang['site_tools'] = 'Webstedsværktøjer'; $lang['page_tools'] = 'Sideværktøjer'; $lang['skip_to_content'] = 'hop til indhold'; +$lang['sidebar'] = 'Sidebjælke'; $lang['mail_newpage'] = 'dokument tilføjet:'; $lang['mail_changed'] = 'dokument ændret:'; $lang['mail_subscribe_list'] = 'sider ændret i navnerum'; @@ -292,6 +299,8 @@ $lang['i_pol1'] = 'Offentlig Wiki (alle kan læse, kun registrere $lang['i_pol2'] = 'Lukket Wiki (kun for registerede brugere kan læse, skrive og overføre)'; $lang['i_retry'] = 'Forsøg igen'; $lang['i_license'] = 'Vælg venligst licensen du vil tilføje dit indhold under:'; +$lang['i_license_none'] = 'Vis ikke licensinformationer'; +$lang['i_pop_field'] = 'Hjælp os venligst med at forbedre oplevelsen af DokuWiki:'; $lang['recent_global'] = 'Du ser lige nu ændringerne i <b>%s</b> navnerummet. Du kan også <a href="%s">se de sidste ændringer for hele wiki siden </a>'; $lang['years'] = '%d år siden'; $lang['months'] = '%d måned siden'; diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php index 6b950744e..2622934c2 100644 --- a/inc/lang/hu/lang.php +++ b/inc/lang/hu/lang.php @@ -1,8 +1,8 @@ <?php + /** - * Hungarian language file - * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Ziegler Gábor <gziegler@freemail.hu> * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> @@ -11,6 +11,7 @@ * @author Sándor TIHANYI <stihanyi+dw@gmail.com> * @author David Szabo <szabo.david@gyumolcstarhely.hu> * @author Marton Sebok <sebokmarton@gmail.com> + * @author Serenity87HUN <anikototh87@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -54,6 +55,7 @@ $lang['btn_revert'] = 'Helyreállítás'; $lang['btn_register'] = 'Regisztráció'; $lang['btn_apply'] = 'Alkalmaz'; $lang['btn_media'] = 'Médiakezelő'; +$lang['btn_deleteuser'] = 'Felhasználói fiókom eltávolítása'; $lang['loggedinas'] = 'Belépett felhasználó: '; $lang['user'] = 'Azonosító'; $lang['pass'] = 'Jelszó'; @@ -65,6 +67,7 @@ $lang['fullname'] = 'Teljes név'; $lang['email'] = 'E-Mail'; $lang['profile'] = 'Személyes beállítások'; $lang['badlogin'] = 'Sajnáljuk, az azonosító vagy a jelszó nem jó.'; +$lang['badpassconfirm'] = 'Hibás jelszó'; $lang['minoredit'] = 'Apróbb változások'; $lang['draftdate'] = 'Piszkozat elmentve:'; $lang['nosecedit'] = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltsd újra az egész oldalt!'; @@ -81,6 +84,11 @@ $lang['profna'] = 'Ez a wiki nem támogatja a személyes beállí $lang['profnochange'] = 'Nem történt változás.'; $lang['profnoempty'] = 'A név és e-mail mező nem maradhat üresen!'; $lang['profchanged'] = 'A személyes beállítások változtatása megtörtént.'; +$lang['profnodelete'] = 'Ez a wiki nem támogatja a felhasználói fiókok törlését'; +$lang['profdeleteuser'] = 'Felhasználói fiók törlése'; +$lang['profdeleted'] = 'Felhasználói fiókodat eltávolítottuk erről a wiki-ről.'; +$lang['profconfdelete'] = 'Szeretném eltávolítani a felhasználói fiókomat erről a wikiről. <br/> Ez a cselekvés nem visszavonható.'; +$lang['profconfdeletemissing'] = 'A megerősítő négyzet nincs bepipálva'; $lang['pwdforget'] = 'Elfelejtetted a jelszavad? Itt kérhetsz újat'; $lang['resendna'] = 'Ez a wiki nem támogatja a jelszó újraküldést.'; $lang['resendpwd'] = 'Új jelszó beállítása a következőhöz:'; diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php index 189269fab..b032e1ce5 100644 --- a/inc/lang/ja/lang.php +++ b/inc/lang/ja/lang.php @@ -54,6 +54,7 @@ $lang['btn_revert'] = '元に戻す'; $lang['btn_register'] = 'ユーザー登録'; $lang['btn_apply'] = '適用'; $lang['btn_media'] = 'メディアマネージャー'; +$lang['btn_deleteuser'] = '自分のアカウントの抹消'; $lang['loggedinas'] = 'ようこそ'; $lang['user'] = 'ユーザー名'; $lang['pass'] = 'パスワード'; @@ -65,6 +66,7 @@ $lang['fullname'] = 'フルネーム'; $lang['email'] = 'メールアドレス'; $lang['profile'] = 'ユーザー情報'; $lang['badlogin'] = 'ユーザー名かパスワードが違います。'; +$lang['badpassconfirm'] = 'パスワードが間違っています。'; $lang['minoredit'] = '小変更'; $lang['draftdate'] = 'ドラフト保存日時:'; $lang['nosecedit'] = 'ページ内容が変更されていますがセクション情報が古いため、代わりにページ全体をロードしました。'; @@ -81,6 +83,11 @@ $lang['profna'] = 'ユーザー情報の変更は出来ません' $lang['profnochange'] = '変更点はありませんでした。'; $lang['profnoempty'] = 'ユーザー名とメールアドレスを入力して下さい。'; $lang['profchanged'] = 'ユーザー情報は更新されました。'; +$lang['profnodelete'] = 'この wiki はユーザーを削除できない。'; +$lang['profdeleteuser'] = 'アカウントの削除'; +$lang['profdeleted'] = 'このwikiからあなたのユーザーアカウントは削除済です。'; +$lang['profconfdelete'] = 'このwikiから自分のアカウント抹消を希望します。<br/> この操作は取消すことができません。'; +$lang['profconfdeletemissing'] = '確認のチェックボックスがチェックされていません。'; $lang['pwdforget'] = 'パスワードをお忘れですか?パスワード再発行'; $lang['resendna'] = 'パスワードの再発行は出来ません。'; $lang['resendpwd'] = '新しいパスワードをセット'; @@ -289,6 +296,9 @@ $lang['i_pol1'] = 'パブリック Wiki(閲覧は全ての人 $lang['i_pol2'] = 'クローズド Wiki (登録ユーザーにのみ使用を許可)'; $lang['i_retry'] = '再試行'; $lang['i_license'] = 'あなたが作成したコンテンツが属するライセンスを選択してください:'; +$lang['i_license_none'] = 'ライセンス情報を表示しません。'; +$lang['i_pop_field'] = 'Dokuwiki の内容の向上に協力して下さい:'; +$lang['i_pop_label'] = '月に一回、DokuWikiの開発者に匿名の使用データを送信します。'; $lang['recent_global'] = '現在、<b>%s</b> 名前空間内の変更点を閲覧中です。<a href="%s">Wiki全体の最近の変更点の確認</a>もできます。'; $lang['years'] = '%d年前'; $lang['months'] = '%dカ月前'; diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php index a494604f3..e8c1151d5 100644 --- a/inc/lang/sk/lang.php +++ b/inc/lang/sk/lang.php @@ -50,6 +50,7 @@ $lang['btn_revert'] = 'Obnoviť'; $lang['btn_register'] = 'Registrovať'; $lang['btn_apply'] = 'Použiť'; $lang['btn_media'] = 'Správa médií'; +$lang['btn_deleteuser'] = 'Zrušiť môj účet'; $lang['loggedinas'] = 'Prihlásený(á) ako'; $lang['user'] = 'Užívateľské meno'; $lang['pass'] = 'Heslo'; @@ -61,6 +62,7 @@ $lang['fullname'] = 'Celé meno'; $lang['email'] = 'E-Mail'; $lang['profile'] = 'Užívateľský profil'; $lang['badlogin'] = 'Zadané užívateľské meno a heslo nie je správne.'; +$lang['badpassconfirm'] = 'Ľutujem, heslo bolo nesprávne.'; $lang['minoredit'] = 'Menšie zmeny'; $lang['draftdate'] = 'Koncept automaticky uložený'; $lang['nosecedit'] = 'Stránka bola medzičasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.'; @@ -77,6 +79,11 @@ $lang['profna'] = 'Táto wiki nepodporuje zmenu profilu'; $lang['profnochange'] = 'Žiadne zmeny, nie je čo robiť.'; $lang['profnoempty'] = 'Prázdne meno alebo mailová adresa nie sú povolené.'; $lang['profchanged'] = 'Užívateľský účet úspešne zmenený.'; +$lang['profnodelete'] = 'Táto wiki neumožňuje zrušenie používateľov.'; +$lang['profdeleteuser'] = 'Zrušiť účet'; +$lang['profdeleted'] = 'Váš účet bol zrušený v tejto wiki.'; +$lang['profconfdelete'] = 'Chcem odstrániť môj účet z tejto wiki. <br/> Táto operácia je nevratná.'; +$lang['profconfdeletemissing'] = 'Nebolo zavolené potvrdzovacie políčko'; $lang['pwdforget'] = 'Zabudli ste heslo? Získajte nové!'; $lang['resendna'] = 'Táto wiki nepodporuje opätovné zasielanie hesla.'; $lang['resendpwd'] = 'Nastaviť nové heslo pre'; @@ -285,6 +292,9 @@ $lang['i_pol1'] = 'Verejná Wiki (čítanie pre každého, zápis $lang['i_pol2'] = 'Uzatvorená Wiki (čítanie, zápis a nahrávanie len pre registrovaných užívateľov)'; $lang['i_retry'] = 'Skúsiť znovu'; $lang['i_license'] = 'Vyberte licenciu, pod ktorou chcete uložiť váš obsah:'; +$lang['i_license_none'] = 'Nezobrazovať žiadne licenčné informácie'; +$lang['i_pop_field'] = 'Prosím pomôžte nám zlepšiť prácu s DokuWiki:'; +$lang['i_pop_label'] = 'Raz mesačne zaslať anonymné údaje vývojárom DokuWiki'; $lang['recent_global'] = 'Práve prehliadate zmeny v mennom priestore <b>%s</b>. Môžete si tiež pozrieť <a href="%s">aktuálne zmeny celej wiki</a>.'; $lang['years'] = 'pred %d rokmi'; $lang['months'] = 'pred %d mesiacmi'; diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php index a6c95143f..a125e11e7 100644 --- a/inc/lang/zh/lang.php +++ b/inc/lang/zh/lang.php @@ -17,6 +17,7 @@ * @author Shuo-Ting Jian <shoting@gmail.com> * @author Rachel <rzhang0802@gmail.com> * @author Donald <donaldtcong@gmail.com> + * @author Yangyu Huang <yangyu.huang@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -60,6 +61,7 @@ $lang['btn_revert'] = '恢复'; $lang['btn_register'] = '注册'; $lang['btn_apply'] = '应用'; $lang['btn_media'] = '媒体管理器'; +$lang['btn_deleteuser'] = '移除我的账户'; $lang['loggedinas'] = '登录为'; $lang['user'] = '用户名'; $lang['pass'] = '密码'; @@ -88,7 +90,11 @@ $lang['profna'] = '本维基不支持修改个人信息'; $lang['profnochange'] = '没有改动,不进行操作。'; $lang['profnoempty'] = '不允许使用空的用户名或邮件地址。'; $lang['profchanged'] = '用户信息更新成功。'; +$lang['profnodelete'] = '这个 wiki 不支持删除用户'; $lang['profdeleteuser'] = '删除账号'; +$lang['profdeleted'] = '你的用户已经从这个 wiki 中删除'; +$lang['profconfdelete'] = '我希望删除我的账户。<br/>这项操作无法撤销。'; +$lang['profconfdeletemissing'] = '确认框未勾选'; $lang['pwdforget'] = '忘记密码?立即获取新密码'; $lang['resendna'] = '本维基不支持二次发送密码。'; $lang['resendpwd'] = '设置新密码用于'; diff --git a/inc/mail.php b/inc/mail.php index d0ea651bf..0b60c0a5b 100644 --- a/inc/mail.php +++ b/inc/mail.php @@ -284,10 +284,9 @@ function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true) // for EBCDIC safeness encode !"#$@[\]^`{|}~, // for complete safeness encode every character :) if ($bEmulate_imap_8bit) - $sRegExp = '/[^\x20\x21-\x3C\x3E-\x7E]/e'; + $sRegExp = '/[^\x20\x21-\x3C\x3E-\x7E]/'; - $sReplmt = 'sprintf( "=%02X", ord ( "$0" ) ) ;'; - $sLine = preg_replace( $sRegExp, $sReplmt, $sLine ); + $sLine = preg_replace_callback( $sRegExp, 'mail_quotedprintable_encode_callback', $sLine ); // encode x09,x20 at lineends { @@ -330,3 +329,6 @@ function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true) return implode(MAILHEADER_EOL,$aLines); } +function mail_quotedprintable_encode_callback($matches){ + return sprintf( "=%02X", ord ( $matches[0] ) ) ; +} diff --git a/inc/pageutils.php b/inc/pageutils.php index bf79daa7d..60f326e04 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -396,7 +396,7 @@ function resolve_id($ns,$id,$clean=true){ // if the id starts with a dot we need to handle the // relative stuff - if($id{0} == '.'){ + if($id && $id{0} == '.'){ // normalize initial dots without a colon $id = preg_replace('/^(\.+)(?=[^:\.])/','\1:',$id); // prepend the current namespace diff --git a/inc/parser/handler.php b/inc/parser/handler.php index b72f051ae..8ae991209 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -70,7 +70,7 @@ class Doku_Handler { */ function plugin($match, $state, $pos, $pluginname){ $data = array($match); - $plugin =& plugin_load('syntax',$pluginname); + $plugin = plugin_load('syntax',$pluginname); if($plugin != null){ $data = $plugin->handle($match, $state, $pos, $this); } @@ -653,8 +653,8 @@ function Doku_Handler_Parse_Media($match) { //parse width and height if(preg_match('#(\d+)(x(\d+))?#i',$param,$size)){ - ($size[1]) ? $w = $size[1] : $w = null; - ($size[3]) ? $h = $size[3] : $h = null; + !empty($size[1]) ? $w = $size[1] : $w = null; + !empty($size[3]) ? $h = $size[3] : $h = null; } else { $w = null; $h = null; @@ -1371,7 +1371,8 @@ class Doku_Handler_Table { if (is_null($spanning_cell)) { // No spanning cell found, so convert this cell to // an empty one to avoid broken tables - $this->tableCells[$key][1][1] = ''; + $this->tableCalls[$key][0] = 'cdata'; + $this->tableCalls[$key][1][0] = ''; continue; } $this->tableCalls[$cellKey[$spanning_cell][$lastCell]][1][2]++; @@ -1431,6 +1432,7 @@ class Doku_Handler_Table { class Doku_Handler_Block { var $calls = array(); var $skipEol = false; + var $inParagraph = false; // Blocks these should not be inside paragraphs var $blockOpen = array( diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 848afbd4f..fd02c0ce0 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -33,6 +33,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { private $lastsecid = 0; // last section edit id, used by startSectionEdit var $headers = array(); + /** @var array a list of footnotes, list starts at 1! */ var $footnotes = array(); var $lastlevel = 0; var $node = array(0,0,0,0,0); @@ -100,10 +101,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { if ( count ($this->footnotes) > 0 ) { $this->doc .= '<div class="footnotes">'.DOKU_LF; - $id = 0; - foreach ( $this->footnotes as $footnote ) { - $id++; // the number of the current footnote - + foreach ( $this->footnotes as $id => $footnote ) { // check its not a placeholder that indicates actual footnote text is elsewhere if (substr($footnote, 0, 5) != "@@FNT") { @@ -118,8 +116,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer { if (count($alt)) { foreach ($alt as $ref) { // set anchor and backlink for the other footnotes - $this->doc .= ', <sup><a href="#fnt__'.($ref+1).'" id="fn__'.($ref+1).'" class="fn_bot">'; - $this->doc .= ($ref+1).')</a></sup> '.DOKU_LF; + $this->doc .= ', <sup><a href="#fnt__'.($ref).'" id="fn__'.($ref).'" class="fn_bot">'; + $this->doc .= ($ref).')</a></sup> '.DOKU_LF; } } @@ -295,6 +293,10 @@ class Doku_Renderer_xhtml extends Doku_Renderer { * @author Andreas Gohr */ function footnote_close() { + /** @var $fnid int takes track of seen footnotes, assures they are unique even across multiple docs FS#2841 */ + static $fnid = 0; + // assign new footnote id (we start at 1) + $fnid++; // recover footnote into the stack and restore old content $footnote = $this->doc; @@ -306,17 +308,14 @@ class Doku_Renderer_xhtml extends Doku_Renderer { if ($i === false) { // its a new footnote, add it to the $footnotes array - $id = count($this->footnotes)+1; - $this->footnotes[count($this->footnotes)] = $footnote; + $this->footnotes[$fnid] = $footnote; } else { - // seen this one before, translate the index to an id and save a placeholder - $i++; - $id = count($this->footnotes)+1; - $this->footnotes[count($this->footnotes)] = "@@FNT".($i); + // seen this one before, save a placeholder + $this->footnotes[$fnid] = "@@FNT".($i); } // output the footnote reference and link - $this->doc .= '<sup><a href="#fn__'.$id.'" id="fnt__'.$id.'" class="fn_top">'.$id.')</a></sup>'; + $this->doc .= '<sup><a href="#fn__'.$fnid.'" id="fnt__'.$fnid.'" class="fn_top">'.$fnid.')</a></sup>'; } function listu_open() { diff --git a/inc/parserutils.php b/inc/parserutils.php index 56161af44..b67daaabb 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -625,7 +625,8 @@ function & p_get_renderer($mode) { $rclass = "Doku_Renderer_$rname"; if( class_exists($rclass) ) { - return new $rclass(); + $Renderer = new $rclass(); + return $Renderer; } // try default renderer first: @@ -641,10 +642,7 @@ function & p_get_renderer($mode) { $Renderer = new $rclass(); }else{ // Maybe a plugin/component is available? - list($plugin, $component) = $plugin_controller->_splitName($rname); - if (!$plugin_controller->isdisabled($plugin)){ - $Renderer =& $plugin_controller->load('renderer',$rname); - } + $Renderer = $plugin_controller->load('renderer',$rname); if(!isset($Renderer) || is_null($Renderer)){ msg("No renderer '$rname' found for mode '$mode'",-1); diff --git a/inc/plugincontroller.class.php b/inc/plugincontroller.class.php index c825870cd..d80cd4c9e 100644 --- a/inc/plugincontroller.class.php +++ b/inc/plugincontroller.class.php @@ -11,15 +11,15 @@ if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); class Doku_Plugin_Controller { - var $list_bytype = array(); - var $tmp_plugins = array(); - var $plugin_cascade = array('default'=>array(),'local'=>array(),'protected'=>array()); - var $last_local_config_file = ''; + protected $list_bytype = array(); + protected $tmp_plugins = array(); + protected $plugin_cascade = array('default'=>array(),'local'=>array(),'protected'=>array()); + protected $last_local_config_file = ''; /** * Populates the master list of plugins */ - function __construct() { + public function __construct() { $this->loadConfig(); $this->_populateMasterList(); } @@ -34,11 +34,13 @@ class Doku_Plugin_Controller { * false to only return enabled plugins, * true to return both enabled and disabled plugins * - * @return array of plugin names + * @return array of + * - plugin names when $type = '' + * - or plugin component names when a $type is given * * @author Andreas Gohr <andi@splitbrain.org> */ - function getList($type='',$all=false){ + public function getList($type='',$all=false){ // request the complete list if (!$type) { @@ -64,9 +66,9 @@ class Doku_Plugin_Controller { * @param $name string name of the plugin to load * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance * @param $disabled bool true to load even disabled plugins - * @return objectreference the plugin object or null on failure + * @return DokuWiki_Plugin|DokuWiki_Syntax_Plugin|null the plugin object or null on failure */ - function load($type,$name,$new=false,$disabled=false){ + public function load($type,$name,$new=false,$disabled=false){ //we keep all loaded plugins available in global scope for reuse global $DOKU_PLUGINS; @@ -108,26 +110,59 @@ class Doku_Plugin_Controller { return $DOKU_PLUGINS[$type][$name]; } - function isdisabled($plugin) { + /** + * Whether plugin is disabled + * + * @param string $plugin name of plugin + * @return bool; true disabled, false enabled + */ + public function isdisabled($plugin) { return empty($this->tmp_plugins[$plugin]); } - function disable($plugin) { + /** + * Disable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ + public function disable($plugin) { if(array_key_exists($plugin,$this->plugin_cascade['protected'])) return false; $this->tmp_plugins[$plugin] = 0; return $this->saveList(); } - function enable($plugin) { + /** + * Enable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ + public function enable($plugin) { if(array_key_exists($plugin,$this->plugin_cascade['protected'])) return false; $this->tmp_plugins[$plugin] = 1; return $this->saveList(); } - function get_directory($plugin) { + /** + * Returns directory name of plugin + * + * @param string $plugin name of plugin + * @return string name of directory + */ + public function get_directory($plugin) { return $plugin; } + /** + * Returns cascade of the config files + * + * @return array with arrays of plugin configs + */ + public function getCascade() { + return $this->plugin_cascade; + } + protected function _populateMasterList() { global $conf; @@ -169,6 +204,13 @@ class Doku_Plugin_Controller { } } + /** + * Includes the plugin config $files + * and returns the entries of the $plugins array set in these files + * + * @param array $files list of files to include, latter overrides previous + * @return array with entries of the $plugins arrays of the included files + */ protected function checkRequire($files) { $plugins = array(); foreach($files as $file) { @@ -179,14 +221,15 @@ class Doku_Plugin_Controller { return $plugins; } - function getCascade() { - return $this->plugin_cascade; - } - /** * Save the current list of plugins + * + * @param bool $forceSave; + * false to save only when config changed + * true to always save + * @return bool; true saving succeed, false saving failed */ - function saveList($forceSave = false) { + protected function saveList($forceSave = false) { global $conf; if (empty($this->tmp_plugins)) return false; @@ -206,7 +249,7 @@ class Doku_Plugin_Controller { $backup = $file.'.bak'; if (@file_exists($backup)) @unlink($backup); if (!@copy($file,$backup)) return false; - if ($conf['fperm']) chmod($backup, $conf['fperm']); + if (!empty($conf['fperm'])) chmod($backup, $conf['fperm']); } //check if can open for writing, else restore return io_saveFile($file,$out); @@ -216,9 +259,10 @@ class Doku_Plugin_Controller { /** * Rebuild the set of local plugins + * * @return array array of plugins to be saved in end($config_cascade['plugins']['local']) */ - function rebuildLocal() { + protected function rebuildLocal() { //assign to local variable to avoid overwriting $backup = $this->tmp_plugins; //Can't do anything about protected one so rule them out completely @@ -238,7 +282,7 @@ class Doku_Plugin_Controller { * Build the list of plugins and cascade * */ - function loadConfig() { + protected function loadConfig() { global $config_cascade; foreach(array('default','protected') as $type) { if(array_key_exists($type,$config_cascade['plugins'])) @@ -253,7 +297,18 @@ class Doku_Plugin_Controller { $this->tmp_plugins = array_merge($this->plugin_cascade['default'],$this->plugin_cascade['local'],$this->plugin_cascade['protected']); } - function _getListByType($type, $enabled) { + /** + * Returns a list of available plugin components of given type + * + * @param string $type, plugin_type name; + * the type of plugin to return, + * @param bool $enabled; + * true to return enabled plugins, + * false to return disabled plugins + * + * @return array of plugin components of requested type + */ + protected function _getListByType($type, $enabled) { $master_list = $enabled ? array_keys(array_filter($this->tmp_plugins)) : array_keys(array_filter($this->tmp_plugins,array($this,'negate'))); $plugins = array(); @@ -278,14 +333,29 @@ class Doku_Plugin_Controller { return $plugins; } - function _splitName($name) { + /** + * Split name in a plugin name and a component name + * + * @param string $name + * @return array with + * - plugin name + * - and component name when available, otherwise empty string + */ + protected function _splitName($name) { if (array_search($name, array_keys($this->tmp_plugins)) === false) { return explode('_',$name,2); } return array($name,''); } - function negate($input) { + + /** + * Returns inverse boolean value of the input + * + * @param mixed $input + * @return bool inversed boolean value of input + */ + protected function negate($input) { return !(bool) $input; } } diff --git a/inc/pluginutils.php b/inc/pluginutils.php index 7c37d4f7f..894bbefb6 100644 --- a/inc/pluginutils.php +++ b/inc/pluginutils.php @@ -14,31 +14,92 @@ if(!defined('DOKU_PLUGIN_NAME_REGEX')) define('DOKU_PLUGIN_NAME_REGEX', '[a-zA-Z /** * Original plugin functions, remain for backwards compatibility */ + +/** + * Return list of available plugins + * + * @param string $type type of plugins; empty string for all + * @param bool $all; true to retrieve all, false to retrieve only enabled plugins + * @return array with plugin names or plugin component names + */ function plugin_list($type='',$all=false) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->getList($type,$all); } + +/** + * Returns plugin object + * Returns only new instances of a plugin when $new is true or if plugin is not Singleton, + * otherwise an already loaded instance. + * + * @param $type string type of plugin to load + * @param $name string name of the plugin to load + * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance + * @param $disabled bool true to load even disabled plugins + * @return DokuWiki_Plugin|DokuWiki_Syntax_Plugin|null the plugin object or null on failure + */ function plugin_load($type,$name,$new=false,$disabled=false) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->load($type,$name,$new,$disabled); } + +/** + * Whether plugin is disabled + * + * @param string $plugin name of plugin + * @return bool; true disabled, false enabled + */ function plugin_isdisabled($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->isdisabled($plugin); } + +/** + * Enable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ function plugin_enable($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->enable($plugin); } + +/** + * Disable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ function plugin_disable($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->disable($plugin); } + +/** + * Returns directory name of plugin + * + * @param string $plugin name of plugin + * @return string name of directory + */ function plugin_directory($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->get_directory($plugin); } + +/** + * Returns cascade of the config files + * + * @return array with arrays of plugin configs + */ function plugin_getcascade() { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->getCascade(); } diff --git a/inc/search.php b/inc/search.php index 884aa7b23..c2d31b959 100644 --- a/inc/search.php +++ b/inc/search.php @@ -9,14 +9,15 @@ if(!defined('DOKU_INC')) die('meh.'); /** - * recurse direcory + * Recurse directory * * This function recurses into a given base directory * and calls the supplied function for each file and directory * - * @param array ref $data The results of the search are stored here + * @param array &$data The results of the search are stored here * @param string $base Where to start the search * @param callback $func Callback (function name or array with object,method) + * @param array $opts option array will be given to the Callback * @param string $dir Current directory beyond $base * @param int $lvl Recursion Level * @param mixed $sort 'natural' to use natural order sorting (default); 'date' to sort by filemtime; leave empty to skip sorting. @@ -68,12 +69,12 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){ * decide if this directory should be traversed (true) or not (false) * The function has to accept the following parameters: * - * &$data - Reference to the result data structure - * $base - Base usually $conf['datadir'] - * $file - current file or directory relative to $base - * $type - Type either 'd' for directory or 'f' for file - * $lvl - Current recursion depht - * $opts - option array as given to search() + * array &$data - Reference to the result data structure + * string $base - Base usually $conf['datadir'] + * string $file - current file or directory relative to $base + * string $type - Type either 'd' for directory or 'f' for file + * int $lvl - Current recursion depht + * array $opts - option array as given to search() * * return values for files are ignored * @@ -110,7 +111,7 @@ function search_index(&$data,$base,$file,$type,$lvl,$opts){ $opts = array( 'pagesonly' => true, 'listdirs' => true, - 'listfiles' => !$opts['nofiles'], + 'listfiles' => empty($opts['nofiles']), 'sneakyacl' => $conf['sneaky_index'], // Hacky, should rather use recmatch 'depth' => preg_match('#^'.preg_quote($file, '#').'(/|$)#','/'.$opts['ns']) ? 0 : -1 @@ -334,6 +335,15 @@ function pathID($path,$keeptxt=false){ * showhidden bool show hidden files too * firsthead bool return first heading for pages * + * @param array &$data - Reference to the result data structure + * @param string $base - Base usually $conf['datadir'] + * @param string $file - current file or directory relative to $base + * @param string $type - Type either 'd' for directory or 'f' for file + * @param int $lvl - Current recursion depht + * @param array $opts - option array as given to search() + * @return bool if this directory should be traversed (true) or not (false) + * return value is ignored for files + * * @author Andreas Gohr <gohr@cosmocode.de> */ function search_universal(&$data,$base,$file,$type,$lvl,$opts){ @@ -367,7 +377,7 @@ function search_universal(&$data,$base,$file,$type,$lvl,$opts){ } // check ACL - if(!$opts['skipacl']){ + if(empty($opts['skipacl'])){ if($type == 'd'){ $item['perm'] = auth_quickaclcheck($item['id'].':*'); }else{ @@ -379,17 +389,17 @@ function search_universal(&$data,$base,$file,$type,$lvl,$opts){ // are we done here maybe? if($type == 'd'){ - if(!$opts['listdirs']) return $return; - if(!$opts['skipacl'] && $opts['sneakyacl'] && $item['perm'] < AUTH_READ) return false; //neither list nor recurse - if($opts['dirmatch'] && !preg_match('/'.$opts['dirmatch'].'/',$file)) return $return; - if($opts['nsmatch'] && !preg_match('/'.$opts['nsmatch'].'/',$item['ns'])) return $return; + if(empty($opts['listdirs'])) return $return; + if(empty($opts['skipacl']) && !empty($opts['sneakyacl']) && $item['perm'] < AUTH_READ) return false; //neither list nor recurse + if(!empty($opts['dirmatch']) && !preg_match('/'.$opts['dirmatch'].'/',$file)) return $return; + if(!empty($opts['nsmatch']) && !preg_match('/'.$opts['nsmatch'].'/',$item['ns'])) return $return; }else{ - if(!$opts['listfiles']) return $return; - if(!$opts['skipacl'] && $item['perm'] < AUTH_READ) return $return; - if($opts['pagesonly'] && (substr($file,-4) != '.txt')) return $return; - if(!$opts['showhidden'] && isHiddenPage($item['id'])) return $return; - if($opts['filematch'] && !preg_match('/'.$opts['filematch'].'/',$file)) return $return; - if($opts['idmatch'] && !preg_match('/'.$opts['idmatch'].'/',$item['id'])) return $return; + if(empty($opts['listfiles'])) return $return; + if(empty($opts['skipacl']) && $item['perm'] < AUTH_READ) return $return; + if(!empty($opts['pagesonly']) && (substr($file,-4) != '.txt')) return $return; + if(empty($opts['showhidden']) && isHiddenPage($item['id'])) return $return; + if(!empty($opts['filematch']) && !preg_match('/'.$opts['filematch'].'/',$file)) return $return; + if(!empty($opts['idmatch']) && !preg_match('/'.$opts['idmatch'].'/',$item['id'])) return $return; } // still here? prepare the item diff --git a/inc/subscription.php b/inc/subscription.php index ecbc9ef19..ddf2f39e6 100644 --- a/inc/subscription.php +++ b/inc/subscription.php @@ -62,7 +62,7 @@ class Subscription { return false; } - if($conf['dperm']) chmod($lock, $conf['dperm']); + if(!empty($conf['dperm'])) chmod($lock, $conf['dperm']); return true; } diff --git a/inc/template.php b/inc/template.php index c08767e52..b42c9d934 100644 --- a/inc/template.php +++ b/inc/template.php @@ -223,7 +223,7 @@ function tpl_toc($return = false) { if(in_array($class, $pluginlist)) { // attempt to load the plugin /** @var $plugin DokuWiki_Admin_Plugin */ - $plugin =& plugin_load('admin', $class); + $plugin = plugin_load('admin', $class); } } if( ($plugin !== null) && (!$plugin->forAdminOnly() || $INFO['isadmin']) ) { @@ -257,7 +257,7 @@ function tpl_admin() { if(in_array($class, $pluginlist)) { // attempt to load the plugin /** @var $plugin DokuWiki_Admin_Plugin */ - $plugin =& plugin_load('admin', $class); + $plugin = plugin_load('admin', $class); } } @@ -401,7 +401,7 @@ function tpl_metaheaders($alt = true) { // make $INFO and other vars available to JavaScripts $json = new JSON(); $script = "var NS='".$INFO['namespace']."';"; - if($conf['useacl'] && $_SERVER['REMOTE_USER']) { + if($conf['useacl'] && !empty($_SERVER['REMOTE_USER'])) { $script .= "var SIG='".toolbar_signature()."';"; } $script .= 'var JSINFO = '.$json->encode($JSINFO).';'; @@ -680,12 +680,12 @@ function tpl_get_action($type) { } break; case 'register': - if($_SERVER['REMOTE_USER']) { + if(!empty($_SERVER['REMOTE_USER'])) { return false; } break; case 'resendpwd': - if($_SERVER['REMOTE_USER']) { + if(!empty($_SERVER['REMOTE_USER'])) { return false; } break; @@ -1412,7 +1412,7 @@ function tpl_actiondropdown($empty = '', $button = '>') { echo '<div class="no">'; echo '<input type="hidden" name="id" value="'.$ID.'" />'; if($REV) echo '<input type="hidden" name="rev" value="'.$REV.'" />'; - if ($_SERVER['REMOTE_USER']) { + if (!empty($_SERVER['REMOTE_USER'])) { echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'; } @@ -1794,7 +1794,7 @@ function tpl_classes() { 'dokuwiki', 'mode_'.$ACT, 'tpl_'.$conf['template'], - $_SERVER['REMOTE_USER'] ? 'loggedIn' : '', + !empty($_SERVER['REMOTE_USER']) ? 'loggedIn' : '', $INFO['exists'] ? '' : 'notFound', ($ID == $conf['start']) ? 'home' : '', ); diff --git a/lib/exe/css.php b/lib/exe/css.php index 60e17ae82..6dfdf06e8 100644 --- a/lib/exe/css.php +++ b/lib/exe/css.php @@ -148,9 +148,6 @@ function css_out(){ // parse less $css = css_parseless($css); - // place all remaining @import statements at the top of the file - $css = css_moveimports($css); - // compress whitespace and comments if($conf['compress']){ $css = css_compress($css); @@ -460,28 +457,6 @@ function css_pluginstyles($mediatype='screen'){ } /** - * Move all @import statements in a combined stylesheet to the top so they - * aren't ignored by the browser. - * - * @author Gabriel Birke <birke@d-scribe.de> - */ -function css_moveimports($css) { - if(!preg_match_all('/@import\s+(?:url\([^)]+\)|"[^"]+")\s*[^;]*;\s*/', $css, $matches, PREG_OFFSET_CAPTURE)) { - return $css; - } - $newCss = ""; - $imports = ""; - $offset = 0; - foreach($matches[0] as $match) { - $newCss .= substr($css, $offset, $match[1] - $offset); - $imports .= $match[0]; - $offset = $match[1] + strlen($match[0]); - } - $newCss .= substr($css, $offset); - return $imports.$newCss; -} - -/** * Very simple CSS optimizer * * @author Andreas Gohr <andi@splitbrain.org> @@ -498,8 +473,19 @@ function css_compress($css){ $css = preg_replace('/ ?([;,{}\/]) ?/','\\1',$css); $css = preg_replace('/ ?: /',':',$css); + // number compression + $css = preg_replace('/([: ])0+(\.\d+?)0*((?:pt|pc|in|mm|cm|em|ex|px)\b|%)(?=[^\{]*[;\}])/', '$1$2$3', $css); // "0.1em" to ".1em", "1.10em" to "1.1em" + $css = preg_replace('/([: ])\.(0)+((?:pt|pc|in|mm|cm|em|ex|px)\b|%)(?=[^\{]*[;\}])/', '$1$2', $css); // ".0em" to "0" + $css = preg_replace('/([: ]0)0*(\.0*)?((?:pt|pc|in|mm|cm|em|ex|px)(?=[^\{]*[;\}])\b|%)/', '$1', $css); // "0.0em" to "0" + $css = preg_replace('/([: ]\d+)(\.0*)((?:pt|pc|in|mm|cm|em|ex|px)(?=[^\{]*[;\}])\b|%)/', '$1$3', $css); // "1.0em" to "1em" + $css = preg_replace('/([: ])0+(\d+|\d*\.\d+)((?:pt|pc|in|mm|cm|em|ex|px)(?=[^\{]*[;\}])\b|%)/', '$1$2$3', $css); // "001em" to "1em" + + // shorten attributes (1em 1em 1em 1em -> 1em) + $css = preg_replace('/(?<![\w\-])((?:margin|padding|border|border-(?:width|radius)):)([\w\.]+)( \2)+(?=[;\}]| !)/', '$1$2', $css); // "1em 1em 1em 1em" to "1em" + $css = preg_replace('/(?<![\w\-])((?:margin|padding|border|border-(?:width)):)([\w\.]+) ([\w\.]+) \2 \3(?=[;\}]| !)/', '$1$2 $3', $css); // "1em 2em 1em 2em" to "1em 2em" + // shorten colors - $css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3/", "#\\1\\2\\3",$css); + $css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3(?=[^\{]*[;\}])/", "#\\1\\2\\3", $css); return $css; } diff --git a/lib/exe/detail.php b/lib/exe/detail.php index 7aae08f76..e3c81d877 100644 --- a/lib/exe/detail.php +++ b/lib/exe/detail.php @@ -9,7 +9,9 @@ $ID = cleanID($INPUT->str('id')); // this makes some general infos available as well as the info about the // "parent" page $INFO = array_merge(pageinfo(),mediainfo()); -trigger_event('DETAIL_STARTED', $tmp=array()); + +$tmp = array(); +trigger_event('DETAIL_STARTED', $tmp); //close session session_write_close(); diff --git a/lib/exe/js.php b/lib/exe/js.php index 76238a81b..040b8874d 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -86,15 +86,20 @@ function js_out(){ // start output buffering and build the script ob_start(); + $json = new JSON(); // add some global variables print "var DOKU_BASE = '".DOKU_BASE."';"; print "var DOKU_TPL = '".tpl_basedir()."';"; + print "var DOKU_COOKIE_PARAM = " . $json->encode( + array( + 'path' => empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'], + 'secure' => $conf['securecookie'] && is_ssl() + )).";"; // FIXME: Move those to JSINFO print "var DOKU_UHN = ".((int) useHeading('navigation')).";"; print "var DOKU_UHC = ".((int) useHeading('content')).";"; // load JS specific translations - $json = new JSON(); $lang['js']['plugins'] = js_pluginstrings(); $templatestrings = js_templatestrings(); if(!empty($templatestrings)) { diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index d9e4a6b04..d94a24c74 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -34,7 +34,8 @@ $JSINFO = array('id' => '', 'namespace' => ''); $AUTH = $INFO['perm']; // shortcut for historical reasons - trigger_event('MEDIAMANAGER_STARTED',$tmp=array()); + $tmp = array(); + trigger_event('MEDIAMANAGER_STARTED', $tmp); session_write_close(); //close session // do not display the manager if user does not have read access diff --git a/lib/plugins/acl/lang/da/lang.php b/lib/plugins/acl/lang/da/lang.php index 4a9d11448..2558795fd 100644 --- a/lib/plugins/acl/lang/da/lang.php +++ b/lib/plugins/acl/lang/da/lang.php @@ -1,8 +1,8 @@ <?php + /** - * Danish language file - * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author koeppe <koeppe@kazur.dk> * @author Jon Bendtsen <bendtsen@diku.dk> * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk> diff --git a/lib/plugins/acl/lang/hu/lang.php b/lib/plugins/acl/lang/hu/lang.php index 9565eddc3..cc35243e1 100644 --- a/lib/plugins/acl/lang/hu/lang.php +++ b/lib/plugins/acl/lang/hu/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> * @author schilling.janos@gmail.com diff --git a/lib/plugins/action.php b/lib/plugins/action.php index 04b4f07a6..4b5eef60a 100644 --- a/lib/plugins/action.php +++ b/lib/plugins/action.php @@ -17,7 +17,7 @@ class DokuWiki_Action_Plugin extends DokuWiki_Plugin { /** * Registers a callback function for a given event */ - function register(Doku_Event_Handler $controller) { + public function register(Doku_Event_Handler $controller) { trigger_error('register() not implemented in '.get_class($this), E_USER_WARNING); } } diff --git a/lib/plugins/authad/lang/da/settings.php b/lib/plugins/authad/lang/da/settings.php new file mode 100644 index 000000000..958c41cf5 --- /dev/null +++ b/lib/plugins/authad/lang/da/settings.php @@ -0,0 +1,10 @@ +<?php + +/** + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * + * @author Soren Birk <soer9648@hotmail.com> + */ +$lang['admin_password'] = 'Kodeordet til den ovenstående bruger.'; +$lang['use_ssl'] = 'Benyt SSL forbindelse? hvis ja, vælg ikke TLS herunder.'; +$lang['use_tls'] = 'Benyt TLS forbindelse? hvis ja, vælg ikke SSL herover.'; diff --git a/lib/plugins/authad/lang/hu/settings.php b/lib/plugins/authad/lang/hu/settings.php index c2cab410f..1510e1756 100644 --- a/lib/plugins/authad/lang/hu/settings.php +++ b/lib/plugins/authad/lang/hu/settings.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Marton Sebok <sebokmarton@gmail.com> */ $lang['account_suffix'] = 'Felhasználói azonosító végződése, pl. <code>@my.domain.org</code>.'; diff --git a/lib/plugins/authad/lang/ja/settings.php b/lib/plugins/authad/lang/ja/settings.php index 72e5cc76e..f308249ef 100644 --- a/lib/plugins/authad/lang/ja/settings.php +++ b/lib/plugins/authad/lang/ja/settings.php @@ -11,6 +11,10 @@ $lang['base_dn'] = 'ベースDN。例:<code>DC=my,DC=domain,DC=o $lang['domain_controllers'] = 'ドメインコントローラのカンマ区切り一覧。例:<code>srv1.domain.org,srv2.domain.org</code>'; $lang['admin_username'] = '全ユーザーデータへのアクセス権のある特権Active Directoryユーザー。任意ですが、メール通知の登録等の特定の動作に必要。'; $lang['admin_password'] = '上記ユーザーのパスワード'; +$lang['sso'] = 'Kerberos か NTLM を使ったシングルサインオン(SSO)をしますか?'; +$lang['real_primarygroup'] = '"Domain Users" を仮定する代わりに本当のプライマリグループを解決する(低速)'; +$lang['use_ssl'] = 'SSL接続を使用しますか?使用した場合、下のSSLを有効にしないでください。'; +$lang['use_tls'] = 'TLS接続を使用しますか?使用した場合、上のSSLを有効にしないでください。'; $lang['debug'] = 'エラー時に追加のデバッグ出力を表示する?'; $lang['expirywarn'] = '何日前からパスワードの有効期限をユーザーに警告する。0 の場合は無効'; $lang['additional'] = 'ユーザデータから取得する追加AD属性のカンマ区切り一覧。いくつかのプラグインが使用する。'; diff --git a/lib/plugins/authad/lang/sk/settings.php b/lib/plugins/authad/lang/sk/settings.php index 0cc9b9b10..55f266dd6 100644 --- a/lib/plugins/authad/lang/sk/settings.php +++ b/lib/plugins/authad/lang/sk/settings.php @@ -5,7 +5,11 @@ * * @author Martin Michalek <michalek.dev@gmail.com> */ +$lang['account_suffix'] = 'Prípona používateľského účtu. Napr. <code>@my.domain.org</code>'; +$lang['admin_username'] = 'Privilegovaný používateľ Active Directory s prístupom ku všetkým dátam ostatných používateľov. Nepovinné nastavenie, ale potrebné pre určité akcie ako napríklad zasielanie mailov o zmenách.'; $lang['admin_password'] = 'Heslo vyššie uvedeného používateľa.'; +$lang['sso'] = 'Použiť Single-Sign-On cez Kerberos alebo NTLM?'; $lang['use_ssl'] = 'Použiť SSL pripojenie? Ak áno, nepovoľte TLS nižšie.'; $lang['use_tls'] = 'Použiť TLS pripojenie? Ak áno, nepovoľte SSL vyššie.'; $lang['debug'] = 'Zobraziť doplňujúce ladiace informácie pri chybe?'; +$lang['additional'] = 'Zoznam dodatočných AD atribútov oddelených čiarkou získaných z údajov používateľa. Používané niektorými pluginmi.'; diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php index 6a967a6d4..de1332282 100644 --- a/lib/plugins/authldap/auth.php +++ b/lib/plugins/authldap/auth.php @@ -208,8 +208,8 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin { if(is_array($key)) { // use regexp to clean up user_result list($key, $regexp) = each($key); - if($user_result[$key]) foreach($user_result[$key] as $grp) { - if(preg_match($regexp, $grp, $match)) { + if($user_result[$key]) foreach($user_result[$key] as $grpkey => $grp) { + if($grpkey !== 'count' && preg_match($regexp, $grp, $match)) { if($localkey == 'grps') { $info[$localkey][] = $match[1]; } else { diff --git a/lib/plugins/authldap/lang/hu/settings.php b/lib/plugins/authldap/lang/hu/settings.php index b4b28d0a0..041f82755 100644 --- a/lib/plugins/authldap/lang/hu/settings.php +++ b/lib/plugins/authldap/lang/hu/settings.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Marton Sebok <sebokmarton@gmail.com> */ $lang['server'] = 'LDAP-szerver. Hosztnév (<code>localhost</code>) vagy abszolút URL portszámmal (<code>ldap://server.tld:389</code>)'; diff --git a/lib/plugins/authldap/lang/ja/settings.php b/lib/plugins/authldap/lang/ja/settings.php index cee7b059c..6dec9a576 100644 --- a/lib/plugins/authldap/lang/ja/settings.php +++ b/lib/plugins/authldap/lang/ja/settings.php @@ -5,6 +5,7 @@ * * @author Satoshi Sahara <sahara.satoshi@gmail.com> * @author Hideaki SAWADA <sawadakun@live.jp> + * @author Hideaki SAWADA <chuno@live.jp> */ $lang['server'] = 'LDAPサーバー。ホスト名(<code>localhost</code)又は完全修飾URL(<code>ldap://server.tld:389</code>)'; $lang['port'] = '上記が完全修飾URLでない場合、LDAPサーバーポート'; @@ -13,6 +14,11 @@ $lang['grouptree'] = 'ユーザーグループを探す場所。例 $lang['userfilter'] = 'ユーザーアカウントを探すためのLDAP抽出条件。例:<code>(&(uid=%{user})(objectClass=posixAccount))</code>'; $lang['groupfilter'] = 'グループを探すLDAP抽出条件。例:<code>(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>'; $lang['version'] = '使用するプロトコルのバージョン。<code>3</code>を設定する必要がある場合があります。'; +$lang['starttls'] = 'TLS接続を使用しますか?'; $lang['binddn'] = '匿名バインドでは不十分な場合、オプションバインドユーザーのDN。例:<code>cn=admin, dc=my, dc=home</code>'; $lang['bindpw'] = '上記ユーザーのパスワード'; $lang['debug'] = 'エラーに関して追加のデバッグ情報を表示する。'; +$lang['deref_o_0'] = 'LDAP_DEREF_NEVER'; +$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING'; +$lang['deref_o_2'] = 'LDAP_DEREF_FINDING'; +$lang['deref_o_3'] = 'LDAP_DEREF_ALWAYS'; diff --git a/lib/plugins/authldap/lang/sk/settings.php b/lib/plugins/authldap/lang/sk/settings.php index 759c92304..48bd37395 100644 --- a/lib/plugins/authldap/lang/sk/settings.php +++ b/lib/plugins/authldap/lang/sk/settings.php @@ -5,6 +5,17 @@ * * @author Martin Michalek <michalek.dev@gmail.com> */ +$lang['server'] = 'LDAP server. Adresa (<code>localhost</code>) alebo úplné URL (<code>ldap://server.tld:389</code>)'; +$lang['port'] = 'Port LDAP servera, ak nebolo vyššie zadané úplné URL'; +$lang['usertree'] = 'Umiestnenie účtov používateľov. Napr. <code>ou=People, dc=server, dc=tld</code>'; +$lang['grouptree'] = 'Umiestnenie skupín používateľov. Napr. <code>ou=Group, dc=server, dc=tld</code>'; +$lang['userfilter'] = 'LDAP filter pre vyhľadávanie používateľských účtov. Napr. <code>(&(uid=%{user})(objectClass=posixAccount))</code>'; +$lang['groupfilter'] = 'LDAP filter pre vyhľadávanie skupín. Napr. <code>(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>'; +$lang['version'] = 'Použitá verzia protokolu. Možno bude potrebné nastaviť na hodnotu <code>3</code>'; $lang['starttls'] = 'Použiť TLS pripojenie?'; $lang['bindpw'] = 'Heslo vyššie uvedeného používateľa'; $lang['debug'] = 'Zobraziť doplňujúce ladiace informácie pri chybe'; +$lang['deref_o_0'] = 'LDAP_DEREF_NEVER'; +$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING'; +$lang['deref_o_2'] = 'LDAP_DEREF_FINDING'; +$lang['deref_o_3'] = 'LDAP_DEREF_ALWAYS'; diff --git a/lib/plugins/authmysql/lang/en/settings.php b/lib/plugins/authmysql/lang/en/settings.php index 77e4806b9..b95f39701 100644 --- a/lib/plugins/authmysql/lang/en/settings.php +++ b/lib/plugins/authmysql/lang/en/settings.php @@ -19,7 +19,7 @@ $lang['FilterGroup'] = 'SQL clause for filtering users by group membership' $lang['SortOrder'] = 'SQL clause to sort users'; $lang['addUser'] = 'SQL statement to add a new user'; $lang['addGroup'] = 'SQL statement to add a new group'; -$lang['addUserGroup'] = 'SQL statment to add a user to an existing group'; +$lang['addUserGroup'] = 'SQL statement to add a user to an existing group'; $lang['delGroup'] = 'SQL statement to remove a group'; $lang['getUserID'] = 'SQL statement to get the primary key of a user'; $lang['delUser'] = 'SQL statement to delete a user'; @@ -36,4 +36,4 @@ $lang['getGroupID'] = 'SQL statement to get the primary key of a given gro $lang['debug_o_0'] = 'none'; $lang['debug_o_1'] = 'on errors only'; -$lang['debug_o_2'] = 'all SQL queries';
\ No newline at end of file +$lang['debug_o_2'] = 'all SQL queries'; diff --git a/lib/plugins/authmysql/lang/hu/settings.php b/lib/plugins/authmysql/lang/hu/settings.php index 9489c73f9..4edceae1e 100644 --- a/lib/plugins/authmysql/lang/hu/settings.php +++ b/lib/plugins/authmysql/lang/hu/settings.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Marton Sebok <sebokmarton@gmail.com> */ $lang['server'] = 'MySQL-szerver'; diff --git a/lib/plugins/authmysql/lang/sk/settings.php b/lib/plugins/authmysql/lang/sk/settings.php index 17fc7977c..8c52f905e 100644 --- a/lib/plugins/authmysql/lang/sk/settings.php +++ b/lib/plugins/authmysql/lang/sk/settings.php @@ -6,11 +6,13 @@ * @author Martin Michalek <michalek.dev@gmail.com> */ $lang['server'] = 'MySQL server'; -$lang['user'] = 'MySQL meno používateľa'; +$lang['user'] = 'Meno používateľa MySQL'; $lang['password'] = 'Heslo pre vyššie uvedeného používateľa'; $lang['database'] = 'Použiť databázu'; $lang['charset'] = 'Znaková sada databázy'; $lang['debug'] = 'Zobraziť doplňujúce ladiace informácie'; +$lang['forwardClearPass'] = 'Posielať heslo ako nezakódovaný text nižšie uvedenému SQL príkazu namiesto použitia kódovania'; +$lang['TablesToLock'] = 'Zoznam tabuliek oddelených čiarkou, ktoré by mali byť uzamknuté pri operáciách zápisu'; $lang['checkPass'] = 'SQL príkaz pre kontrolu hesla'; $lang['getUserInfo'] = 'SQL príkaz pre získanie informácií o používateľovi'; $lang['getGroups'] = 'SQL príkaz pre získanie informácií o skupinách používateľa'; diff --git a/lib/plugins/authpgsql/lang/en/settings.php b/lib/plugins/authpgsql/lang/en/settings.php index e67235cfa..cfb2686cb 100644 --- a/lib/plugins/authpgsql/lang/en/settings.php +++ b/lib/plugins/authpgsql/lang/en/settings.php @@ -18,7 +18,7 @@ $lang['FilterGroup'] = 'SQL clause for filtering users by group membership' $lang['SortOrder'] = 'SQL clause to sort users'; $lang['addUser'] = 'SQL statement to add a new user'; $lang['addGroup'] = 'SQL statement to add a new group'; -$lang['addUserGroup'] = 'SQL statment to add a user to an existing group'; +$lang['addUserGroup'] = 'SQL statement to add a user to an existing group'; $lang['delGroup'] = 'SQL statement to remove a group'; $lang['getUserID'] = 'SQL statement to get the primary key of a user'; $lang['delUser'] = 'SQL statement to delete a user'; diff --git a/lib/plugins/authpgsql/lang/hu/settings.php b/lib/plugins/authpgsql/lang/hu/settings.php index 7b9393256..ff62a7016 100644 --- a/lib/plugins/authpgsql/lang/hu/settings.php +++ b/lib/plugins/authpgsql/lang/hu/settings.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Marton Sebok <sebokmarton@gmail.com> */ $lang['server'] = 'PostgreSQL-szerver'; diff --git a/lib/plugins/authpgsql/lang/sk/settings.php b/lib/plugins/authpgsql/lang/sk/settings.php index dafe5e83d..9d656415d 100644 --- a/lib/plugins/authpgsql/lang/sk/settings.php +++ b/lib/plugins/authpgsql/lang/sk/settings.php @@ -11,6 +11,7 @@ $lang['user'] = 'Meno používateľa PostgreSQL'; $lang['password'] = 'Heslo pre vyššie uvedeného používateľa'; $lang['database'] = 'Použiť databázu'; $lang['debug'] = 'Zobraziť doplňujúce ladiace informácie'; +$lang['forwardClearPass'] = 'Posielať heslo ako nezakódovaný text nižšie uvedenému SQL príkazu namiesto použitia kódovania'; $lang['checkPass'] = 'SQL príkaz pre kontrolu hesla'; $lang['getUserInfo'] = 'SQL príkaz pre získanie informácií o používateľovi'; $lang['getGroups'] = 'SQL príkaz pre získanie informácií o skupinách používateľa'; diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index 1d2173706..a5a11cda1 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -794,7 +794,7 @@ if (!class_exists('setting_numericopt')) { if (!class_exists('setting_onoff')) { class setting_onoff extends setting_numeric { - function html(&$plugin) { + function html(&$plugin, $echo = false) { $value = ''; $disable = ''; @@ -830,7 +830,7 @@ if (!class_exists('setting_multichoice')) { class setting_multichoice extends setting_string { var $_choices = array(); - function html(&$plugin) { + function html(&$plugin, $echo = false) { $value = ''; $disable = ''; $nochoice = ''; diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php index f4c2ed265..f9dabfeb0 100644 --- a/lib/plugins/config/settings/config.metadata.php +++ b/lib/plugins/config/settings/config.metadata.php @@ -48,6 +48,7 @@ * 'compression' - no additional parameters. checks php installation supports possible compression alternatives * 'licence' - as multichoice, selection constructed from licence strings in language files * 'renderer' - as multichoice, selection constructed from enabled renderer plugins which canRender() + * 'authtype' - as multichoice, selection constructed from the enabled auth plugins * * Any setting commented or missing will use 'setting' class - text input, minimal validation, quoted output * diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php index d0f99fa8f..83de802a3 100644 --- a/lib/plugins/config/settings/extra.class.php +++ b/lib/plugins/config/settings/extra.class.php @@ -176,7 +176,7 @@ if (!class_exists('setting_renderer')) { $format = $this->_format; foreach (plugin_list('renderer') as $plugin) { - $renderer =& plugin_load('renderer',$plugin); + $renderer = plugin_load('renderer',$plugin); if (method_exists($renderer,'canRender') && $renderer->canRender($format)) { $this->_choices[] = $plugin; diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php index 5e7543603..f8c6eb484 100644 --- a/lib/plugins/info/syntax.php +++ b/lib/plugins/info/syntax.php @@ -48,7 +48,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { /** * Handle the match */ - function handle($match, $state, $pos, &$handler){ + function handle($match, $state, $pos, Doku_Handler &$handler){ $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end return array(strtolower($match)); } @@ -56,8 +56,9 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { /** * Create output */ - function render($format, &$renderer, $data) { + function render($format, Doku_Renderer &$renderer, $data) { if($format == 'xhtml'){ + /** @var Doku_Renderer_xhtml $renderer */ //handle various info stuff switch ($data[0]){ case 'syntaxmodes': @@ -112,7 +113,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { // remove subparts foreach($plugins as $p){ - if (!$po =& plugin_load($type,$p)) continue; + if (!$po = plugin_load($type,$p)) continue; list($name,$part) = explode('_',$p,2); $plginfo[$name] = $po->getInfo(); } @@ -142,11 +143,9 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { * uses some of the original renderer methods */ function _helpermethods_xhtml(Doku_Renderer &$renderer){ - global $lang; - $plugins = plugin_list('helper'); foreach($plugins as $p){ - if (!$po =& plugin_load('helper',$p)) continue; + if (!$po = plugin_load('helper',$p)) continue; if (!method_exists($po, 'getMethods')) continue; $methods = $po->getMethods(); @@ -156,7 +155,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>'; $doc .= '<div class="level2">'; $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>'; - $doc .= '<pre class="code">$'.$p." =& plugin_load('helper', '".$p."');</pre>"; + $doc .= '<pre class="code">$'.$p." = plugin_load('helper', '".$p."');</pre>"; $doc .= '</div>'; foreach ($methods as $method){ $title = '$'.$p.'->'.$method['name'].'()'; @@ -215,21 +214,47 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { */ function _syntaxmodes_xhtml(){ $modes = p_get_parsermodes(); + + $compactmodes = array(); + foreach($modes as $mode){ + $compactmodes[$mode['sort']][] = $mode['mode']; + } $doc = ''; + $doc .= '<div class="table"><table class="inline"><tbody>'; + + foreach($compactmodes as $sort => $modes){ + $rowspan = ''; + if(count($modes) > 1) { + $rowspan = ' rowspan="'.count($modes).'"'; + } + + foreach($modes as $index => $mode) { + $doc .= '<tr>'; + $doc .= '<td class="leftalign">'; + $doc .= $mode; + $doc .= '</td>'; - foreach ($modes as $mode){ - $doc .= $mode['mode'].' ('.$mode['sort'].'), '; + if($index === 0) { + $doc .= '<td class="rightalign" '.$rowspan.'>'; + $doc .= $sort; + $doc .= '</td>'; + } + $doc .= '</tr>'; + } } + + $doc .= '</tbody></table></div>'; return $doc; } /** * Adds a TOC item */ - function _addToTOC($text, $level, Doku_Renderer_xhtml &$renderer){ + function _addToTOC($text, $level, Doku_Renderer &$renderer){ global $conf; if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){ + /** @var $renderer Doku_Renderer_xhtml */ $hid = $renderer->_headerToLink($text, 'true'); $renderer->toc[] = array( 'hid' => $hid, diff --git a/lib/plugins/plugin/classes/ap_info.class.php b/lib/plugins/plugin/classes/ap_info.class.php index b3826b944..89b78fa2d 100644 --- a/lib/plugins/plugin/classes/ap_info.class.php +++ b/lib/plugins/plugin/classes/ap_info.class.php @@ -14,7 +14,7 @@ class ap_info extends ap_manage { usort($component_list, array($this,'component_sort')); foreach ($component_list as $component) { - if (($obj = &plugin_load($component['type'],$component['name'],false,true)) === null) continue; + if (($obj = plugin_load($component['type'],$component['name'],false,true)) === null) continue; $compname = explode('_',$component['name']); if($compname[1]){ diff --git a/lib/plugins/plugin/lang/da/lang.php b/lib/plugins/plugin/lang/da/lang.php index d1deb6310..d2751fa1b 100644 --- a/lib/plugins/plugin/lang/da/lang.php +++ b/lib/plugins/plugin/lang/da/lang.php @@ -1,8 +1,8 @@ <?php + /** - * Danish language file - * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk> * @author Kalle Sommer Nielsen <kalle@php.net> * @author Esben Laursen <hyber@hyber.dk> diff --git a/lib/plugins/plugin/lang/hu/lang.php b/lib/plugins/plugin/lang/hu/lang.php index 235d33a0e..b8fa2cdbe 100644 --- a/lib/plugins/plugin/lang/hu/lang.php +++ b/lib/plugins/plugin/lang/hu/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> * @author schilling.janos@gmail.com diff --git a/lib/plugins/popularity/admin.php b/lib/plugins/popularity/admin.php index deb8048f4..bd2d090e1 100644 --- a/lib/plugins/popularity/admin.php +++ b/lib/plugins/popularity/admin.php @@ -13,7 +13,6 @@ if(!defined('DOKU_INC')) die(); * need to inherit from this class */ class admin_plugin_popularity extends DokuWiki_Admin_Plugin { - var $version; /** * @var helper_plugin_popularity @@ -23,9 +22,6 @@ class admin_plugin_popularity extends DokuWiki_Admin_Plugin { function admin_plugin_popularity(){ $this->helper = $this->loadHelper('popularity', false); - - $pluginInfo = $this->getInfo(); - $this->version = $pluginInfo['date']; } /** diff --git a/lib/plugins/popularity/helper.php b/lib/plugins/popularity/helper.php index 0e38bcb88..eacde06d0 100644 --- a/lib/plugins/popularity/helper.php +++ b/lib/plugins/popularity/helper.php @@ -29,8 +29,6 @@ class helper_plugin_popularity extends Dokuwiki_Plugin { */ var $popularityLastSubmitFile; - var $version; - function helper_plugin_popularity(){ global $conf; @@ -39,6 +37,11 @@ class helper_plugin_popularity extends Dokuwiki_Plugin { $this->popularityLastSubmitFile = $conf['cachedir'].'/lastSubmitTime.txt'; } + /** + * Return methods of this helper + * + * @return array with methods description + */ function getMethods(){ $result = array(); $result[] = array( @@ -125,15 +128,17 @@ class helper_plugin_popularity extends Dokuwiki_Plugin { */ function _gather(){ global $conf; + /** @var $auth DokuWiki_Auth_Plugin */ global $auth; $data = array(); $phptime = ini_get('max_execution_time'); @set_time_limit(0); + $pluginInfo = $this->getInfo(); // version $data['anon_id'] = md5(auth_cookiesalt()); $data['version'] = getVersion(); - $data['popversion'] = $this->version; + $data['popversion'] = $pluginInfo['date']; $data['language'] = $conf['lang']; $data['now'] = time(); $data['popauto'] = (int) $this->isAutoSubmitEnabled(); @@ -245,6 +250,17 @@ class helper_plugin_popularity extends Dokuwiki_Plugin { return $data; } + /** + * Callback to search and count the content of directories in DokuWiki + * + * @param array &$data Reference to the result data structure + * @param string $base Base usually $conf['datadir'] + * @param string $file current file or directory relative to $base + * @param string $type Type either 'd' for directory or 'f' for file + * @param int $lvl Current recursion depht + * @param array $opts option array as given to search() + * @return bool + */ function _search_count(&$data,$base,$file,$type,$lvl,$opts){ // traverse if($type == 'd'){ diff --git a/lib/plugins/popularity/lang/da/lang.php b/lib/plugins/popularity/lang/da/lang.php index bbf2a1ab4..78c447197 100644 --- a/lib/plugins/popularity/lang/da/lang.php +++ b/lib/plugins/popularity/lang/da/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Danish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Kalle Sommer Nielsen <kalle@php.net> * @author Esben Laursen <hyber@hyber.dk> * @author Harith <haj@berlingske.dk> diff --git a/lib/plugins/popularity/lang/hu/lang.php b/lib/plugins/popularity/lang/hu/lang.php index 5ee40eacc..213d22655 100644 --- a/lib/plugins/popularity/lang/hu/lang.php +++ b/lib/plugins/popularity/lang/hu/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> * @author schilling.janos@gmail.com diff --git a/lib/plugins/revert/lang/da/lang.php b/lib/plugins/revert/lang/da/lang.php index a76541a78..bb311f18f 100644 --- a/lib/plugins/revert/lang/da/lang.php +++ b/lib/plugins/revert/lang/da/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Danish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Kalle Sommer Nielsen <kalle@php.net> * @author Esben Laursen <hyber@hyber.dk> * @author Harith <haj@berlingske.dk> diff --git a/lib/plugins/revert/lang/hu/lang.php b/lib/plugins/revert/lang/hu/lang.php index 051e7b7d7..d16764a35 100644 --- a/lib/plugins/revert/lang/hu/lang.php +++ b/lib/plugins/revert/lang/hu/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> * @author schilling.janos@gmail.com diff --git a/lib/plugins/revert/lang/sk/intro.txt b/lib/plugins/revert/lang/sk/intro.txt index e69de29bb..aa75a2c10 100644 --- a/lib/plugins/revert/lang/sk/intro.txt +++ b/lib/plugins/revert/lang/sk/intro.txt @@ -0,0 +1,3 @@ +====== Obnova dát ====== + +Táto stránka slúži na automatické obnovenie obsahu stránok po útoku spamom. Pre identifikáciu napadnutých stránok zadajte vyhľadávací reťazec (napr. spam URL), potom potvrďte, že nájdené stránky sú skutočne napadnuté, a zrušte posledné zmeny.
\ No newline at end of file diff --git a/lib/plugins/revert/lang/sk/lang.php b/lib/plugins/revert/lang/sk/lang.php index 6a2cb119d..7ab21f287 100644 --- a/lib/plugins/revert/lang/sk/lang.php +++ b/lib/plugins/revert/lang/sk/lang.php @@ -7,7 +7,7 @@ * @author exusik@gmail.com * @author Martin Michalek <michalek.dev@gmail.com> */ -$lang['menu'] = 'Reverzný manažér'; +$lang['menu'] = 'Obnova dát'; $lang['filter'] = 'Hľadať spamerské stránky'; $lang['revert'] = 'Vrátiť vybrané stránky'; $lang['reverted'] = '%s vrátená na revíziu %s'; diff --git a/lib/plugins/usermanager/lang/da/lang.php b/lib/plugins/usermanager/lang/da/lang.php index 845457f7e..6b615b51d 100644 --- a/lib/plugins/usermanager/lang/da/lang.php +++ b/lib/plugins/usermanager/lang/da/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Danish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk> * @author Kalle Sommer Nielsen <kalle@php.net> * @author Esben Laursen <hyber@hyber.dk> diff --git a/lib/plugins/usermanager/lang/hu/import.txt b/lib/plugins/usermanager/lang/hu/import.txt new file mode 100644 index 000000000..5a4bc8b1c --- /dev/null +++ b/lib/plugins/usermanager/lang/hu/import.txt @@ -0,0 +1,9 @@ +==== Felhasználók tömeges importálása ==== + +Egy, legalább 4 oszlopot tartalmazó, felhasználóikat tartalmazó fájl szükséges hozzá. +Az oszlopok kötelező tartalma, megfelelő sorrendben: felhasználói azonosító, teljes név, e-mailcím és csoportjai. +A CSV mezőit vesszővel (,) kell elválasztani, a szövegeket idézőjelek ("") közé kell foglalni. +Mintafájl megtekintéséhez próbáld ki a fenti, "Felhasználók exportálása" funkciót. A fordított törtvonallal (\) lehet kilépni. +Megegyező felhasználói azonosítók esetén, nem kerülnek feldolgozásra. + +Minden sikeresen importált felhasználó kap egy e-mailt, amiben megtalálja a generált jelszavát.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/hu/lang.php b/lib/plugins/usermanager/lang/hu/lang.php index 71a5b4bc9..dd76bfd50 100644 --- a/lib/plugins/usermanager/lang/hu/lang.php +++ b/lib/plugins/usermanager/lang/hu/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> * @author schilling.janos@gmail.com @@ -9,6 +10,7 @@ * @author Sándor TIHANYI <stihanyi+dw@gmail.com> * @author David Szabo <szabo.david@gyumolcstarhely.hu> * @author Marton Sebok <sebokmarton@gmail.com> + * @author Serenity87HUN <anikototh87@gmail.com> */ $lang['menu'] = 'Felhasználók kezelése'; $lang['noauth'] = '(A felhasználói azonosítás nem működik.)'; @@ -31,6 +33,11 @@ $lang['search'] = 'Keresés'; $lang['search_prompt'] = 'Keresés'; $lang['clear'] = 'Keresési szűrés törlése'; $lang['filter'] = 'Szűrés'; +$lang['export_all'] = 'Összes felhasználó exportálása (CSV)'; +$lang['export_filtered'] = 'Kiválasztott felhasználók exportálása (CSV)'; +$lang['import'] = 'Új felhasználók importálása'; +$lang['line'] = 'Sor száma'; +$lang['error'] = 'Hibaüzenet'; $lang['summary'] = '%1$d-%2$d. felhasználók megjelenítése a(z) %3$d megtalált felhasználóból. %4$d felhasználó van összesen.'; $lang['nonefound'] = 'Nincs ilyen felhasználó. %d felhasználó van összesen.'; $lang['delete_ok'] = '%d felhasználó törölve.'; @@ -51,3 +58,16 @@ $lang['add_ok'] = 'A felhasználó sikeresen hozzáadva.'; $lang['add_fail'] = 'A felhasználó hozzáadása nem sikerült.'; $lang['notify_ok'] = 'Értesítő levél elküldve.'; $lang['notify_fail'] = 'Nem sikerült az értesítő levelet elküldeni.'; +$lang['import_userlistcsv'] = 'Felhasználók listája fájl (CSV)'; +$lang['import_header'] = 'Legutóbbi importálás - Hibák'; +$lang['import_success_count'] = 'Felhasználók importálása: %d felhasználót találtunk, ebből %d sikeresen importálva.'; +$lang['import_failure_count'] = 'Felhasználók importálása: %d sikertelen. A sikertelenség okait lejjebb találod.'; +$lang['import_error_fields'] = 'Túl kevés mezőt adtál meg, %d darabot találtunk, legalább 4-re van szükség.'; +$lang['import_error_baduserid'] = 'Felhasználói azonosító hiányzik'; +$lang['import_error_badname'] = 'Nem megfelelő név'; +$lang['import_error_badmail'] = 'Nem megfelelő e-mailcím'; +$lang['import_error_upload'] = 'Sikertelen importálás. A csv fájl nem feltölthető vagy üres.'; +$lang['import_error_readfail'] = 'Sikertelen importálás. A feltöltött fájl nem olvasható.'; +$lang['import_error_create'] = 'Ez a felhasználó nem hozható létre'; +$lang['import_notify_fail'] = 'Az értesítő e-mail nem küldhető el az alábbi importált felhasználónak: %s e-mailcíme: %s.'; +$lang['import_downloadfailures'] = 'Töltsd le a hibákat tartalmazó fájlt CSV formátumban, hogy ki tudd javítani a hibákat'; diff --git a/lib/plugins/usermanager/lang/ja/lang.php b/lib/plugins/usermanager/lang/ja/lang.php index 75c2f13ed..0830416f3 100644 --- a/lib/plugins/usermanager/lang/ja/lang.php +++ b/lib/plugins/usermanager/lang/ja/lang.php @@ -11,6 +11,7 @@ * @author Taisuke Shimamoto <dentostar@gmail.com> * @author Satoshi Sahara <sahara.satoshi@gmail.com> * @author Hideaki SAWADA <sawadakun@live.jp> + * @author Hideaki SAWADA <chuno@live.jp> */ $lang['menu'] = 'ユーザー管理'; $lang['noauth'] = '(ユーザー認証が無効です)'; @@ -58,3 +59,16 @@ $lang['add_ok'] = 'ユーザーを登録しました'; $lang['add_fail'] = 'ユーザーの登録に失敗しました'; $lang['notify_ok'] = '通知メールを送信しました'; $lang['notify_fail'] = '通知メールを送信できませんでした'; +$lang['import_userlistcsv'] = 'ユーザー一覧ファイル(CSV):'; +$lang['import_header'] = '最新インポート - 失敗'; +$lang['import_success_count'] = 'ユーザーインポート:ユーザーが%d件あり、%d件正常にインポートされました。'; +$lang['import_failure_count'] = 'ユーザーインポート:%d件が失敗しました。失敗は次のとおりです。'; +$lang['import_error_fields'] = '列の不足(4列必要)が%d件ありました。'; +$lang['import_error_baduserid'] = '欠落したユーザーID'; +$lang['import_error_badname'] = '不正な氏名'; +$lang['import_error_badmail'] = '不正な電子メールアドレス'; +$lang['import_error_upload'] = 'インポートが失敗しました。CSVファイルをアップロードできなかったか、ファイルが空です。'; +$lang['import_error_readfail'] = 'インポートが失敗しました。アップロードされたファイルが読込できません。'; +$lang['import_error_create'] = 'ユーザーが作成できません。'; +$lang['import_notify_fail'] = '通知メッセージがインポートされたユーザー(%s)・電子メールアドレス(%s)に送信できませんでした。'; +$lang['import_downloadfailures'] = '修正用に失敗を CSVファイルとしてダウンロードする。'; diff --git a/lib/plugins/usermanager/lang/sk/import.txt b/lib/plugins/usermanager/lang/sk/import.txt new file mode 100644 index 000000000..91fa3e370 --- /dev/null +++ b/lib/plugins/usermanager/lang/sk/import.txt @@ -0,0 +1,9 @@ +===== Hromadný import používateľov ===== + +Vyžaduje CSV súbor používateľov s minimálne 4 stĺpcami. +Stĺpce musia obsahovať postupne: ID používateľa, meno a priezvisko, emailová adresa a skupiny. +CVS záznamy by mali byť oddelené čiarkou (,) a reťazce uzavreté úvodzovkami (""). Znak (\) sa používa v spojení so špeciálnymi znakmi. +Príklad vhodného súboru je možné získať funkciou "Export používateľov". +Duplicitné ID používateľov budú ignorované. + +Každému úspešne importovanému používateľovi bude vygenerované heslo a zaslaný email.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/sk/lang.php b/lib/plugins/usermanager/lang/sk/lang.php index aea2712ef..9aadbb53a 100644 --- a/lib/plugins/usermanager/lang/sk/lang.php +++ b/lib/plugins/usermanager/lang/sk/lang.php @@ -29,6 +29,11 @@ $lang['search'] = 'Hľadať'; $lang['search_prompt'] = 'Vykonať vyhľadávanie'; $lang['clear'] = 'Vynulovať vyhľadávací filter'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Export všetkých používateľov (CSV)'; +$lang['export_filtered'] = 'Export zoznamu používateľov na základe filtra (CSV)'; +$lang['import'] = 'Import nových používateľov'; +$lang['line'] = 'Riadok č.'; +$lang['error'] = 'Chybová správa'; $lang['summary'] = 'Zobrazenie užívateľov %1$d-%2$d z %3$d nájdených. %4$d užívateľov celkom.'; $lang['nonefound'] = 'Žiadni užívatelia nenájdení. %d užívateľov celkom.'; $lang['delete_ok'] = '%d užívateľov zmazaných'; @@ -49,3 +54,16 @@ $lang['add_ok'] = 'Používateľ úspešne pridaný'; $lang['add_fail'] = 'Pridávanie užívateľa nebolo úspešné'; $lang['notify_ok'] = 'Notifikačný e-mail bol poslaný'; $lang['notify_fail'] = 'Notifikačný e-mail nemohol byť poslaný'; +$lang['import_userlistcsv'] = 'Súbor so zoznamov používateľov (CSV):'; +$lang['import_header'] = 'Chyby pri poslednom importe'; +$lang['import_success_count'] = 'Import používateľov: %d nájdených, %d úspešne importovaných.'; +$lang['import_failure_count'] = 'Import používateľov: %d neúspešných. Problámy vypísané nižšie.'; +$lang['import_error_fields'] = 'Neúplné záznamy, %d nájdené, 4 požadované.'; +$lang['import_error_baduserid'] = 'Chýba ID používateľa'; +$lang['import_error_badname'] = 'Nesprávne meno'; +$lang['import_error_badmail'] = 'Nesprávna emailová adresa'; +$lang['import_error_upload'] = 'Import neúspešný. CSV súbor nemohol byť nahraný alebo je prázdny.'; +$lang['import_error_readfail'] = 'Import neúspešný. Nie je možné prečítať nahraný súbor.'; +$lang['import_error_create'] = 'Nie je možné vytvoriť pouzívateľa'; +$lang['import_notify_fail'] = 'Správa nemohla byť zaslaná importovanému používatelovi, %s s emailom %s.'; +$lang['import_downloadfailures'] = 'Stiahnuť chyby vo formáte CSV za účelom opravy'; diff --git a/lib/plugins/usermanager/lang/zh/lang.php b/lib/plugins/usermanager/lang/zh/lang.php index 2674983b2..06656110f 100644 --- a/lib/plugins/usermanager/lang/zh/lang.php +++ b/lib/plugins/usermanager/lang/zh/lang.php @@ -16,6 +16,7 @@ * @author lainme993@gmail.com * @author Shuo-Ting Jian <shoting@gmail.com> * @author Rachel <rzhang0802@gmail.com> + * @author Yangyu Huang <yangyu.huang@gmail.com> */ $lang['menu'] = '用户管理器'; $lang['noauth'] = '(用户认证不可用)'; @@ -38,6 +39,8 @@ $lang['search'] = '搜索'; $lang['search_prompt'] = '进行搜索'; $lang['clear'] = '重置搜索过滤器'; $lang['filter'] = '过滤器'; +$lang['export_all'] = '导出所有用户(CSV)'; +$lang['export_filtered'] = '导出已筛选的用户列表(CSV)'; $lang['import'] = '请输入新用户名'; $lang['line'] = '行号'; $lang['error'] = '信息错误'; @@ -61,6 +64,10 @@ $lang['add_ok'] = '用户添加成功'; $lang['add_fail'] = '用户添加失败'; $lang['notify_ok'] = '通知邮件已发送'; $lang['notify_fail'] = '通知邮件无法发送'; +$lang['import_userlistcsv'] = '用户列表文件(CSV)'; +$lang['import_header'] = '最近一次导入 - 失败'; +$lang['import_success_count'] = '用户导入:找到了 %d 个用户,%d 个用户被成功导入。'; +$lang['import_failure_count'] = '用户导入:%d 个用户导入失败。下面列出了失败的用户。'; $lang['import_error_baduserid'] = '用户ID丢失'; $lang['import_error_badname'] = '名称错误'; $lang['import_error_badmail'] = '邮件地址错误'; diff --git a/lib/scripts/cookie.js b/lib/scripts/cookie.js index 3ad67bfa4..8417d2064 100644 --- a/lib/scripts/cookie.js +++ b/lib/scripts/cookie.js @@ -30,7 +30,7 @@ var DokuCookie = { text.push(encodeURIComponent(key)+'#'+encodeURIComponent(val)); } }); - jQuery.cookie(this.name, text.join('#'), {expires: 365, path: DOKU_BASE}); + jQuery.cookie(this.name, text.join('#'), {expires: 365, path: DOKU_COOKIE_PARAM.path, secure: DOKU_COOKIE_PARAM.secure}); }, /** diff --git a/lib/tpl/dokuwiki/tpl_header.php b/lib/tpl/dokuwiki/tpl_header.php index 19d165059..a2bfd4346 100644 --- a/lib/tpl/dokuwiki/tpl_header.php +++ b/lib/tpl/dokuwiki/tpl_header.php @@ -41,7 +41,7 @@ if (!defined('DOKU_INC')) die(); <h3 class="a11y"><?php echo $lang['user_tools']; ?></h3> <ul> <?php - if ($_SERVER['REMOTE_USER']) { + if (!empty($_SERVER['REMOTE_USER'])) { echo '<li class="user">'; tpl_userinfo(); /* 'Logged in as ...' */ echo '</li>'; |