Merge branch 'master' into indexer_improvements

Conflicts:
	inc/fulltext.php
	inc/indexer.php
	lib/exe/indexer.php
This commit is contained in:
Michael Hamann 2011-01-23 20:33:32 +01:00
commit fc756e0d4d
261 changed files with 10383 additions and 4596 deletions

2
.gitignore vendored
View file

@ -6,6 +6,8 @@
/conf/user*.css
/conf/user*.js
/conf/words.aspell
/conf/lang/*
/conf/plugin_lang/*
.htaccess
*.swp
*.bak

View file

@ -136,4 +136,4 @@ class ixr_library_ixr_message_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -31,4 +31,4 @@ class ixr_library_date_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -228,4 +228,4 @@ class auth_acl_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -3,20 +3,47 @@
require_once DOKU_INC.'inc/init.php';
require_once DOKU_INC.'inc/auth.php';
class auth_admin_test_AuthInSensitive extends auth_basic {
function isCaseSensitive(){
return false;
}
}
class auth_admin_test extends UnitTestCase {
private $oldauth;
function setup() {
global $auth;
$this->oldauth = $auth;
parent::setup();
}
function setSensitive() {
global $auth;
$auth = new auth_basic;
}
function setInSensitive() {
global $auth;
$auth = new auth_admin_test_AuthInSensitive;
}
function teardown() {
global $auth;
global $conf;
global $AUTH_ACL;
unset($conf);
unset($AUTH_ACL);
$auth = $this->oldauth;
parent::teardown();
}
function test_ismanager(){
function test_ismanager_insensitive(){
$this->setInSensitive();
global $conf;
$conf['superuser'] = 'john,@admin';
$conf['manager'] = 'john,@managers,doe';
$conf['superuser'] = 'john,@admin,@Mötly Görls, Dörte';
$conf['manager'] = 'john,@managers,doe, @Mötly Böys, Dänny';
// anonymous user
$this->assertEqual(auth_ismanager('jill', null,false), false);
@ -25,12 +52,19 @@ class auth_admin_test extends UnitTestCase {
$this->assertEqual(auth_ismanager('john', null,false), true);
$this->assertEqual(auth_ismanager('doe', null,false), true);
$this->assertEqual(auth_ismanager('dörte', null,false), true);
$this->assertEqual(auth_ismanager('dänny', null,false), true);
// admin or manager groups
$this->assertEqual(auth_ismanager('jill', array('admin'),false), true);
$this->assertEqual(auth_ismanager('jill', array('managers'),false), true);
$this->assertEqual(auth_ismanager('jill', array('mötly görls'),false), true);
$this->assertEqual(auth_ismanager('jill', array('mötly böys'),false), true);
}
function test_isadmin(){
function test_isadmin_insensitive(){
$this->setInSensitive();
global $conf;
$conf['superuser'] = 'john,@admin,doe,@roots';
@ -48,6 +82,50 @@ class auth_admin_test extends UnitTestCase {
$this->assertEqual(auth_ismanager('doe', array('admin'),true), true);
}
function test_ismanager_sensitive(){
$this->setSensitive();
global $conf;
$conf['superuser'] = 'john,@admin,@Mötly Görls, Dörte';
$conf['manager'] = 'john,@managers,doe, @Mötly Böys, Dänny';
// anonymous user
$this->assertEqual(auth_ismanager('jill', null,false), false);
// admin or manager users
$this->assertEqual(auth_ismanager('john', null,false), true);
$this->assertEqual(auth_ismanager('doe', null,false), true);
$this->assertEqual(auth_ismanager('dörte', null,false), false);
$this->assertEqual(auth_ismanager('dänny', null,false), false);
// admin or manager groups
$this->assertEqual(auth_ismanager('jill', array('admin'),false), true);
$this->assertEqual(auth_ismanager('jill', array('managers'),false), true);
$this->assertEqual(auth_ismanager('jill', array('mötly görls'),false), false);
$this->assertEqual(auth_ismanager('jill', array('mötly böys'),false), false);
}
function test_isadmin_sensitive(){
$this->setSensitive();
global $conf;
$conf['superuser'] = 'john,@admin,doe,@roots';
// anonymous user
$this->assertEqual(auth_ismanager('jill', null,true), false);
// admin user
$this->assertEqual(auth_ismanager('john', null,true), true);
$this->assertEqual(auth_ismanager('Doe', null,true), false);
// admin groups
$this->assertEqual(auth_ismanager('jill', array('admin'),true), true);
$this->assertEqual(auth_ismanager('jill', array('roots'),true), true);
$this->assertEqual(auth_ismanager('john', array('admin'),true), true);
$this->assertEqual(auth_ismanager('doe', array('admin'),true), true);
$this->assertEqual(auth_ismanager('Doe', array('admin'),true), true);
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -47,4 +47,4 @@ class auth_nameencode_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -15,6 +15,9 @@ class auth_password_test extends UnitTestCase {
'crypt' => 'ablvoGr1hvZ5k',
'mysql' => '4a1fa3780bd6fd55',
'my411' => '*e5929347e25f82e19e4ebe92f1dc6b6e7c2dbd29',
'kmd5' => 'a579299436d7969791189acadd86fcb716',
'pmd5' => '$P$abcdefgh1RC6Fd32heUzl7EYCG9uGw.',
'hmd5' => '$H$abcdefgh1ZbJodHxmeXVAhEzTG7IAp.',
);
@ -22,7 +25,7 @@ class auth_password_test extends UnitTestCase {
foreach($this->passes as $method => $hash){
$info = "testing method $method";
$this->signal('failinfo',$info);
$this->assertEqual(auth_cryptPassword('foo'.$method,$method,'abcdefgh'),$hash);
$this->assertEqual(auth_cryptPassword('foo'.$method,$method,'abcdefgh12345678912345678912345678'),$hash);
}
}
@ -38,6 +41,11 @@ class auth_password_test extends UnitTestCase {
$this->assertTrue(auth_verifyPassword('foo','$1$$n1rTiFE0nRifwV/43bVon/'));
}
function test_verifyPassword_fixedpmd5(){
$this->assertTrue(auth_verifyPassword('test12345','$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0'));
$this->assertTrue(auth_verifyPassword('test12345','$H$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0'));
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -152,4 +152,4 @@ class common_clientIP_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -25,4 +25,4 @@ class common_obfuscate_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -16,4 +16,4 @@ class common_pagetemplate_test extends UnitTestCase {
error_reporting($old);
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -57,4 +57,4 @@ class indexer_idx_indexlengths_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -86,4 +86,4 @@ class init_fullpath_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -275,6 +275,31 @@ class init_getBaseURL_test extends UnitTestCase {
$this->assertEqual(getBaseURL(true),$correct_result);
}
}
/**
* Absolute URL with IPv6 domain name.
* lighttpd, fastcgi
*
* data provided by Michael Hamann <michael@content-space.de>
*/
function test12() {
global $conf;
$conf['basedir'] = '';
$conf['baseurl'] = '';
$conf['canonical'] = 0;
$_SERVER['DOCUMENT_ROOT'] = '/srv/http/';
$_SERVER['HTTP_HOST'] = '[fd00::6592:39ed:a2ed:2c78]';
$_SERVER['SCRIPT_FILENAME'] = '/srv/http/~michitux/dokuwiki/doku.php';
$_SERVER['REQUEST_URI'] = '/~michitux/dokuwiki/doku.php?do=debug';
$_SERVER['SCRIPT_NAME'] = '/~michitux/dokuwiki/doku.php';
$_SERVER['PATH_INFO'] = null;
$_SERVER['PATH_TRANSLATED'] = null;
$_SERVER['PHP_SELF'] = '/~michitux/dokuwiki/doku.php';
$_SERVER['SERVER_PORT'] = '80';
$_SERVER['SERVER_NAME'] = '[fd00';
$this->assertEqual(getBaseURL(true), 'http://[fd00::6592:39ed:a2ed:2c78]/~michitux/dokuwiki/');
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -80,4 +80,4 @@ class mail_isvalid extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -41,4 +41,4 @@ class mail_quotedprintable_encode extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -46,4 +46,4 @@ class mail_send extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -144,4 +144,4 @@ class init_clean_id_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -103,4 +103,4 @@ class init_getID_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -42,4 +42,4 @@ class init_resolve_id_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -60,4 +60,4 @@ class init_resolve_pageid_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -12,7 +12,7 @@ class xhtml_links_test extends UnitTestCase {
$p = new Doku_Renderer_xhtml();
$p->emaillink('foo@example.com','<script>alert(\'"alert"\');</script>');
$expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="mail JSnocheck" title="foo [at] example [dot] com">&lt;script&gt;alert(&#039;&quot;alert&quot;&#039;);&lt;/script&gt;</a>';
$expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="mail" title="foo [at] example [dot] com">&lt;script&gt;alert(&#039;&quot;alert&quot;&#039;);&lt;/script&gt;</a>';
$this->assertEqual($p->doc,$expect);
}
@ -36,7 +36,7 @@ class xhtml_links_test extends UnitTestCase {
$p = new Doku_Renderer_xhtml();
$p->emaillink('foo@example.com',$image);
$expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="media JSnocheck" title="foo [at] example [dot] com"><img src="'.DOKU_BASE.'lib/exe/fetch.php/img.gif?w=10&amp;h=20&amp;cache=nocache" class="media" title="Some Image" alt="Some Image" width="10" height="20" /></a>';
$expect = '<a href="mailto:foo%20%5Bat%5D%20example%20%5Bdot%5D%20com" class="media" title="foo [at] example [dot] com"><img src="'.DOKU_BASE.'lib/exe/fetch.php/img.gif?w=10&amp;h=20&amp;cache=nocache" class="media" title="Some Image" alt="Some Image" width="10" height="20" /></a>';
$this->assertEqual($p->doc,$expect);
}

View file

@ -32,4 +32,4 @@ class safeFN_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -75,4 +75,4 @@ class utf8_correctidx_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -69,4 +69,4 @@ class utf8_html_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -33,4 +33,4 @@ class utf8_romanize_test extends UnitTestCase {
$this->assertEqual("a A a A a o O",utf8_romanize("å Å ä Ä ä ö Ö"));
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -24,4 +24,4 @@ class utf8_stripspecials extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -40,4 +40,4 @@ class utf8_substr_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -57,4 +57,4 @@ class utf8_unicode_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -25,4 +25,4 @@ class utf8_utf16be_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -65,4 +65,4 @@ class css_css_compress_test extends UnitTestCase {
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -0,0 +1,57 @@
<?php
require_once DOKU_INC.'lib/exe/css.php';
class css_css_loadfile_test extends UnitTestCase {
public function setUp() {
$this->file = tempnam('/tmp', 'css');
parent::setUp();
}
private function csstest($input, $output = null, $location = 'http://www.example.com/') {
io_saveFile($this->file, $input);
$this->assertEqual(css_loadfile($this->file, $location), (is_null($output) ? $input : $output));
}
public function test_url_relative() {
$this->csstest('#test { background: url("test/test.png"); }', '#test { background: url("http://www.example.com/test/test.png"); }');
$this->csstest('#test { background: url(\'test/test.png\'); }', '#test { background: url(\'http://www.example.com/test/test.png\'); }');
}
public function test_url_absolute() {
$this->csstest('#test { background: url("/test/test.png"); }');
$this->csstest('#test { background: url(\'/test/test.png\'); }');
}
public function test_url_with_protocol() {
$this->csstest('#test { background: url("http://www.test.com/test/test.png"); }');
$this->csstest('#test { background: url("https://www.test.com/test/test.png"); }');
$this->csstest('#test { background: url(\'http://www.test.com/test/test.png\'); }');
$this->csstest('#test { background: url(\'https://www.test.com/test/test.png\'); }');
}
public function test_import_relative() {
$this->csstest('@import "test/test.png";', '@import "http://www.example.com/test/test.png";');
$this->csstest('@import \'test/test.png\';', '@import \'http://www.example.com/test/test.png\';');
}
public function test_import_absolute() {
$this->csstest('@import "/test/test.png";');
$this->csstest('@import \'/test/test.png\';');
}
public function test_import_with_protocol() {
$this->csstest('@import "http://www.test.com/test/test.png";');
$this->csstest('@import "https://www.test.com/test/test.png";');
$this->csstest('@import \'http://www.test.com/test/test.png\';');
$this->csstest('@import \'https://www.test.com/test/test.png\';');
}
public function tearDown() {
unlink($this->file);
unset($this->file);
parent::tearDown();
}
}
//Setup VIM: ex: et ts=4 sw=4 :

View file

@ -120,4 +120,4 @@ class js_js_compress_test extends UnitTestCase {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -186,4 +186,4 @@ function _quietecho($msg) {
if(!$QUIET) echo $msg;
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

148
bin/striplangs.php Normal file
View file

@ -0,0 +1,148 @@
#!/usr/bin/php
<?php
/**
* Strip unwanted languages from the DokuWiki install
*
* @author Martin 'E.T.' Misuth <et.github@ethome.sk>
*/
if ('cli' != php_sapi_name()) die();
#------------------------------------------------------------------------------
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
require_once DOKU_INC.'inc/cliopts.php';
#------------------------------------------------------------------------------
function usage($show_examples = false) {
print "Usage: striplangs.php [-h [-x]] [-e] [-k lang1[,lang2]..[,langN]]
Removes all languages from the instalation, besides the ones
after the -k option. English language is never removed!
OPTIONS
-h, --help get this help
-x, --examples get also usage examples
-k, --keep comma separated list of languages, -e is always implied
-e, --english keeps english, dummy to use without -k";
if ( $show_examples ) {
print "\n
EXAMPLES
Strips all languages, but keeps 'en' and 'de':
striplangs -k de
Strips all but 'en','ca-valencia','cs','de','is','sk':
striplangs --keep ca-valencia,cs,de,is,sk
Strips all but 'en':
striplangs -e
No option specified, prints usage and throws error:
striplangs\n";
}
}
function getSuppliedArgument($OPTS, $short, $long) {
$arg = $OPTS->get($short);
if ( is_null($arg) ) {
$arg = $OPTS->get($long);
}
return $arg;
}
function processPlugins($path, $keep_langs) {
if (is_dir($path)) {
$entries = scandir($path);
foreach ($entries as $entry) {
if ($entry != "." && $entry != "..") {
if ( is_dir($path.'/'.$entry) ) {
$plugin_langs = $path.'/'.$entry.'/lang';
if ( is_dir( $plugin_langs ) ) {
stripDirLangs($plugin_langs, $keep_langs);
}
}
}
}
}
}
function stripDirLangs($path, $keep_langs) {
$dir = dir($path);
while(($cur_dir = $dir->read()) !== false) {
if( $cur_dir != '.' and $cur_dir != '..' and is_dir($path.'/'.$cur_dir)) {
if ( !in_array($cur_dir, $keep_langs, true ) ) {
killDir($path.'/'.$cur_dir);
}
}
}
$dir->close();
}
function killDir($dir) {
if (is_dir($dir)) {
$entries = scandir($dir);
foreach ($entries as $entry) {
if ($entry != "." && $entry != "..") {
if ( is_dir($dir.'/'.$entry) ) {
killDir($dir.'/'.$entry);
} else {
unlink($dir.'/'.$entry);
}
}
}
reset($entries);
rmdir($dir);
}
}
#------------------------------------------------------------------------------
// handle options
$short_opts = 'hxk:e';
$long_opts = array('help', 'examples', 'keep=','english');
$OPTS = Doku_Cli_Opts::getOptions(__FILE__, $short_opts, $long_opts);
if ( $OPTS->isError() ) {
fwrite( STDERR, $OPTS->getMessage() . "\n");
exit(1);
}
// handle '--examples' option
$show_examples = ( $OPTS->has('x') or $OPTS->has('examples') ) ? true : false;
// handle '--help' option
if ( $OPTS->has('h') or $OPTS->has('help') ) {
usage($show_examples);
exit(0);
}
// handle both '--keep' and '--english' options
if ( $OPTS->has('k') or $OPTS->has('keep') ) {
$preserved_langs = getSuppliedArgument($OPTS,'k','keep');
$langs = explode(',', $preserved_langs);
// ! always enforce 'en' lang when using '--keep' (DW relies on it)
if ( !isset($langs['en']) ) {
$langs[]='en';
}
} elseif ( $OPTS->has('e') or $OPTS->has('english') ) {
// '--english' was specified strip everything besides 'en'
$langs = array ('en');
} else {
// no option was specified, print usage but don't do anything as
// this run might not be intented
usage();
print "\n
ERROR
No option specified, use either -h -x to get more info,
or -e to strip every language besides english.\n";
exit(1);
}
// Kill all language directories in /inc/lang and /lib/plugins besides those in $langs array
stripDirLangs(realpath(dirname(__FILE__).'/../inc/lang'), $langs);
processPlugins(realpath(dirname(__FILE__).'/../lib/plugins'), $langs);

View file

@ -71,8 +71,8 @@ MHz Megahertz
MIME Multipurpose Internet Mail Extension
MIT Massachusetts Institute of Technology
MML Mathematical Markup Language
MP3 Motion Picture Experts Group Layer 3
MPEG Motion Picture Experts Group
MP3 Moving Picture Experts Group Layer 3
MPEG Moving Picture Experts Group
MSDN Microsoft Developer Network
MS Microsoft
MSIE Microsoft Internet Explorer
@ -101,6 +101,7 @@ POP Post Office Protocol
QoS Quality of Service
RAID Redundant Array of Inexpensive Disks
RDF Resource Description Framework
RFC Request for Comments
ROTFL Rolling on the floor laughing
RPC Remote Procedure Call
RSS Rich Site Summary

View file

@ -99,6 +99,7 @@ $conf['fetchsize'] = 0; //maximum size (bytes) fetch.php may do
$conf['notify'] = ''; //send change info to this email (leave blank for nobody)
$conf['registernotify'] = ''; //send info about newly registered users to this email (leave blank for nobody)
$conf['mailfrom'] = ''; //use this email when sending mails
$conf['mailprefix'] = ''; //use this as prefix of outgoing mails
$conf['gzip_output'] = 0; //use gzip content encodeing for the output xhtml (if allowed by browser)
$conf['gdlib'] = 2; //the GDlib version (0, 1 or 2) 2 tries to autodetect
$conf['im_convert'] = ''; //path to ImageMagicks convert (will be used instead of GD)
@ -121,7 +122,7 @@ $conf['rss_linkto'] = 'diff'; //what page RSS entries link to:
// 'page' - the revised page itself
// 'rev' - page showing all revisions
// 'current' - most recent revision of page
$conf['rss_content'] = 'abstract'; // what to put in the items by deafult?
$conf['rss_content'] = 'abstract'; // what to put in the items by default?
// 'abstract' - plain text, first paragraph or so
// 'diff' - plain text unified diff wrapped in <pre> tags
// 'htmldiff' - diff as HTML table

View file

@ -21,6 +21,7 @@ man http://man.cx/
amazon http://www.amazon.com/exec/obidos/ASIN/{URL}/splitbrain-20/
amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
paypal https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&amp;business=
phpfn http://www.php.net/{NAME}
coral http://{HOST}.{PORT}.nyud.net:8090/{PATH}?{QUERY}
freecache http://freecache.org/{NAME}

View file

@ -7,7 +7,7 @@
*/
// update message version
$updateVersion = 29;
$updateVersion = 30;
// xdebug_start_profiling();
@ -29,7 +29,10 @@ require_once(DOKU_INC.'inc/init.php');
//import variables
$QUERY = trim($_REQUEST['id']);
$ID = getID();
// deprecated 2011-01-14
$NS = getNS($ID);
$REV = $_REQUEST['rev'];
$IDX = $_REQUEST['idx'];
$DATE = $_REQUEST['date'];

View file

@ -24,7 +24,7 @@ $cache = new cache($key, '.feed');
// prepare cache depends
$depends['files'] = getConfigFiles('main');
$depends['age'] = $conf['rss_update'];
$depends['purge'] = ($_REQUEST['purge']) ? true : false;
$depends['purge'] = isset($_REQUEST['purge']);
// check cacheage and deliver if nothing has changed since last
// time or the update interval has not passed, also handles conditional requests
@ -55,18 +55,20 @@ $image->link = DOKU_URL;
$rss->image = $image;
$data = null;
if($opt['feed_mode'] == 'list'){
$data = rssListNamespace($opt);
}elseif($opt['feed_mode'] == 'search'){
$data = rssSearch($opt);
}else{
$modes = array('list' => 'rssListNamespace',
'search' => 'rssSearch',
'recent' => 'rssRecentChanges');
if (isset($modes[$opt['feed_mode']])) {
$data = $modes[$opt['feed_mode']]($opt);
} else {
$eventData = array(
'opt' => &$opt,
'data' => &$data,
);
$event = new Doku_Event('FEED_MODE_UNKNOWN', $eventData);
if ($event->advise_before(true)) {
$data = rssRecentChanges($opt);
echo sprintf('<error>Unknown feed mode %s</error>', hsc($opt['feed_mode']));
exit;
}
$event->advise_after();
}
@ -83,29 +85,53 @@ print $feed;
// ---------------------------------------------------------------- //
/**
* Get URL parameters and config options and return a initialized option array
* Get URL parameters and config options and return an initialized option array
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function rss_parseOptions(){
global $conf;
$opt['items'] = (int) $_REQUEST['num'];
$opt['feed_type'] = $_REQUEST['type'];
$opt['feed_mode'] = $_REQUEST['mode'];
$opt['show_minor'] = $_REQUEST['minor'];
$opt['namespace'] = $_REQUEST['ns'];
$opt['link_to'] = $_REQUEST['linkto'];
$opt['item_content'] = $_REQUEST['content'];
$opt['search_query'] = $_REQUEST['q'];
$opt = array();
foreach(array(
// Basic feed properties
// Plugins may probably want to add new values to these
// properties for implementing own feeds
// One of: list, search, recent
'feed_mode' => array('mode', 'recent'),
// One of: diff, page, rev, current
'link_to' => array('linkto', $conf['rss_linkto']),
// One of: abstract, diff, htmldiff, html
'item_content' => array('content', $conf['rss_content']),
// Special feed properties
// These are only used by certain feed_modes
// String, used for feed title, in list and rc mode
'namespace' => array('ns', null),
// Positive integer, only used in rc mode
'items' => array('num', $conf['recent']),
// Boolean, only used in rc mode
'show_minor' => array('minor', false),
// String, only used in search mode
'search_query' => array('q', null),
) as $name => $val) {
$opt[$name] = (isset($_REQUEST[$val[0]]) && !empty($_REQUEST[$val[0]]))
? $_REQUEST[$val[0]] : $val[1];
}
$opt['items'] = max(0, (int) $opt['items']);
$opt['show_minor'] = (bool) $opt['show_minor'];
if(!$opt['feed_type']) $opt['feed_type'] = $conf['rss_type'];
if(!$opt['item_content']) $opt['item_content'] = $conf['rss_content'];
if(!$opt['link_to']) $opt['link_to'] = $conf['rss_linkto'];
if(!$opt['items']) $opt['items'] = $conf['recent'];
$opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
switch ($opt['feed_type']){
$type = valid_input_set('type', array('rss','rss2','atom','atom1','rss1',
'default' => $conf['rss_type']),
$_REQUEST);
switch ($type){
case 'rss':
$opt['feed_type'] = 'RSS0.91';
$opt['mime_type'] = 'text/xml';
@ -279,7 +305,7 @@ function rss_buildItems(&$rss,&$data,$opt){
}
// add category
if($meta['subject']){
if(isset($meta['subject'])) {
$item->category = $meta['subject'];
}else{
$cat = getNS($id);
@ -349,4 +375,4 @@ function rssSearch($opt){
return $data;
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -30,7 +30,7 @@ class _DiffOp {
class _DiffOp_Copy extends _DiffOp {
var $type = 'copy';
function _DiffOp_Copy ($orig, $closing = false) {
function _DiffOp_Copy($orig, $closing = false) {
if (!is_array($closing))
$closing = $orig;
$this->orig = $orig;
@ -45,7 +45,7 @@ class _DiffOp_Copy extends _DiffOp {
class _DiffOp_Delete extends _DiffOp {
var $type = 'delete';
function _DiffOp_Delete ($lines) {
function _DiffOp_Delete($lines) {
$this->orig = $lines;
$this->closing = false;
}
@ -58,7 +58,7 @@ class _DiffOp_Delete extends _DiffOp {
class _DiffOp_Add extends _DiffOp {
var $type = 'add';
function _DiffOp_Add ($lines) {
function _DiffOp_Add($lines) {
$this->closing = $lines;
$this->orig = false;
}
@ -71,7 +71,7 @@ class _DiffOp_Add extends _DiffOp {
class _DiffOp_Change extends _DiffOp {
var $type = 'change';
function _DiffOp_Change ($orig, $closing) {
function _DiffOp_Change($orig, $closing) {
$this->orig = $orig;
$this->closing = $closing;
}
@ -104,7 +104,7 @@ class _DiffOp_Change extends _DiffOp {
*/
class _DiffEngine {
function diff ($from_lines, $to_lines) {
function diff($from_lines, $to_lines) {
$n_from = count($from_lines);
$n_to = count($to_lines);
@ -135,7 +135,7 @@ class _DiffEngine {
$xhash[$from_lines[$xi]] = 1;
for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
$line = $to_lines[$yi];
if ( ($this->ychanged[$yi] = empty($xhash[$line])) )
if (($this->ychanged[$yi] = empty($xhash[$line])))
continue;
$yhash[$line] = 1;
$this->yv[] = $line;
@ -143,7 +143,7 @@ class _DiffEngine {
}
for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
$line = $from_lines[$xi];
if ( ($this->xchanged[$xi] = empty($yhash[$line])) )
if (($this->xchanged[$xi] = empty($yhash[$line])))
continue;
$this->xv[] = $line;
$this->xind[] = $xi;
@ -165,8 +165,7 @@ class _DiffEngine {
// Skip matching "snake".
$copy = array();
while ( $xi < $n_from && $yi < $n_to
&& !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
while ($xi < $n_from && $yi < $n_to && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
$copy[] = $from_lines[$xi++];
++$yi;
}
@ -210,15 +209,14 @@ class _DiffEngine {
* match. The caller must trim matching lines from the beginning and end
* of the portions it is going to specify.
*/
function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) {
function _diag($xoff, $xlim, $yoff, $ylim, $nchunks) {
$flip = false;
if ($xlim - $xoff > $ylim - $yoff) {
// Things seems faster (I'm not sure I understand why)
// when the shortest sequence in X.
$flip = true;
list ($xoff, $xlim, $yoff, $ylim)
= array( $yoff, $ylim, $xoff, $xlim);
list ($xoff, $xlim, $yoff, $ylim) = array($yoff, $ylim, $xoff, $xlim);
}
if ($flip)
@ -284,7 +282,7 @@ class _DiffEngine {
return array($this->lcs, $seps);
}
function _lcs_pos ($ypos) {
function _lcs_pos($ypos) {
$end = $this->lcs;
if ($end == 0 || $ypos > $this->seq[$end]) {
$this->seq[++$this->lcs] = $ypos;
@ -295,7 +293,7 @@ class _DiffEngine {
$beg = 1;
while ($beg < $end) {
$mid = (int)(($beg + $end) / 2);
if ( $ypos > $this->seq[$mid] )
if ($ypos > $this->seq[$mid])
$beg = $mid + 1;
else
$end = $mid;
@ -321,17 +319,15 @@ class _DiffEngine {
* Note that XLIM, YLIM are exclusive bounds.
* All line numbers are origin-0 and discarded lines are not counted.
*/
function _compareseq ($xoff, $xlim, $yoff, $ylim) {
function _compareseq($xoff, $xlim, $yoff, $ylim) {
// Slide down the bottom initial diagonal.
while ($xoff < $xlim && $yoff < $ylim
&& $this->xv[$xoff] == $this->yv[$yoff]) {
while ($xoff < $xlim && $yoff < $ylim && $this->xv[$xoff] == $this->yv[$yoff]) {
++$xoff;
++$yoff;
}
// Slide up the top initial diagonal.
while ($xlim > $xoff && $ylim > $yoff
&& $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
while ($xlim > $xoff && $ylim > $yoff && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
--$xlim;
--$ylim;
}
@ -379,7 +375,7 @@ class _DiffEngine {
*
* This is extracted verbatim from analyze.c (GNU diffutils-2.7).
*/
function _shift_boundaries ($lines, &$changed, $other_changed) {
function _shift_boundaries($lines, &$changed, $other_changed) {
$i = 0;
$j = 0;
@ -519,7 +515,7 @@ class Diff {
* @return object A Diff object representing the inverse of the
* original diff.
*/
function reverse () {
function reverse() {
$rev = $this;
$rev->edits = array();
foreach ($this->edits as $edit) {
@ -533,7 +529,7 @@ class Diff {
*
* @return bool True iff two sequences were identical.
*/
function isEmpty () {
function isEmpty() {
foreach ($this->edits as $edit) {
if ($edit->type != 'copy')
return false;
@ -548,7 +544,7 @@ class Diff {
*
* @return int The length of the LCS.
*/
function lcs () {
function lcs() {
$lcs = 0;
foreach ($this->edits as $edit) {
if ($edit->type == 'copy')
@ -598,7 +594,7 @@ class Diff {
*
* This is here only for debugging purposes.
*/
function _check ($from_lines, $to_lines) {
function _check($from_lines, $to_lines) {
if (serialize($from_lines) != serialize($this->orig()))
trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
if (serialize($to_lines) != serialize($this->closing()))
@ -612,7 +608,7 @@ class Diff {
$prevtype = 'none';
foreach ($this->edits as $edit) {
if ( $prevtype == $edit->type )
if ($prevtype == $edit->type)
trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
$prevtype = $edit->type;
}
@ -649,8 +645,7 @@ class MappedDiff extends Diff {
* @param $mapped_to_lines array This array should
* have the same number of elements as $to_lines.
*/
function MappedDiff($from_lines, $to_lines,
$mapped_from_lines, $mapped_to_lines) {
function MappedDiff($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) {
assert(count($from_lines) == count($mapped_from_lines));
assert(count($to_lines) == count($mapped_to_lines));
@ -727,9 +722,7 @@ class DiffFormatter {
$context = array_slice($edit->orig, 0, $ntrail);
$block[] = new _DiffOp_Copy($context);
}
$this->_block($x0, $ntrail + $xi - $x0,
$y0, $ntrail + $yi - $y0,
$block);
$this->_block($x0, $ntrail + $xi - $x0, $y0, $ntrail + $yi - $y0, $block);
$block = false;
}
}
@ -754,9 +747,7 @@ class DiffFormatter {
}
if (is_array($block))
$this->_block($x0, $xi - $x0,
$y0, $yi - $y0,
$block);
$this->_block($x0, $xi - $x0, $y0, $yi - $y0, $block);
return $this->_end_diff();
}
@ -836,17 +827,21 @@ class DiffFormatter {
define('NBSP', "\xC2\xA0"); // utf-8 non-breaking space.
class _HWLDF_WordAccumulator {
function _HWLDF_WordAccumulator () {
function _HWLDF_WordAccumulator() {
$this->_lines = array();
$this->_line = '';
$this->_group = '';
$this->_tag = '';
}
function _flushGroup ($new_tag) {
function _flushGroup($new_tag) {
if ($this->_group !== '') {
if ($this->_tag == 'mark')
$this->_line .= '<strong>'.$this->_group.'</strong>';
elseif ($this->_tag == 'add')
$this->_line .= '<span class="diff-addedline">'.$this->_group.'</span>';
elseif ($this->_tag == 'del')
$this->_line .= '<span class="diff-deletedline"><del>'.$this->_group.'</del></span>';
else
$this->_line .= $this->_group;
}
@ -854,14 +849,14 @@ class _HWLDF_WordAccumulator {
$this->_tag = $new_tag;
}
function _flushLine ($new_tag) {
function _flushLine($new_tag) {
$this->_flushGroup($new_tag);
if ($this->_line != '')
$this->_lines[] = $this->_line;
$this->_line = '';
}
function addWords ($words, $tag = '') {
function addWords($words, $tag = '') {
if ($tag != $this->_tag)
$this->_flushGroup($tag);
@ -887,46 +882,80 @@ class _HWLDF_WordAccumulator {
class WordLevelDiff extends MappedDiff {
function WordLevelDiff ($orig_lines, $closing_lines) {
function WordLevelDiff($orig_lines, $closing_lines) {
list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
$this->MappedDiff($orig_words, $closing_words,
$orig_stripped, $closing_stripped);
$this->MappedDiff($orig_words, $closing_words, $orig_stripped, $closing_stripped);
}
function _split($lines) {
if (!preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
implode("\n", $lines),
$m)) {
if (!preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xsu',
implode("\n", $lines), $m)) {
return array(array(''), array(''));
}
return array($m[0], $m[1]);
}
}
return array($m[0], $m[1]);
}
function orig () {
$orig = new _HWLDF_WordAccumulator;
function orig() {
$orig = new _HWLDF_WordAccumulator;
foreach ($this->edits as $edit) {
foreach ($this->edits as $edit) {
if ($edit->type == 'copy')
$orig->addWords($edit->orig);
$orig->addWords($edit->orig);
elseif ($edit->orig)
$orig->addWords($edit->orig, 'mark');
}
return $orig->getLines();
}
$orig->addWords($edit->orig, 'mark');
}
return $orig->getLines();
}
function closing () {
$closing = new _HWLDF_WordAccumulator;
function closing() {
$closing = new _HWLDF_WordAccumulator;
foreach ($this->edits as $edit) {
if ($edit->type == 'copy')
$closing->addWords($edit->closing);
elseif ($edit->closing)
$closing->addWords($edit->closing, 'mark');
}
return $closing->getLines();
}
foreach ($this->edits as $edit) {
if ($edit->type == 'copy')
$closing->addWords($edit->closing);
elseif ($edit->closing)
$closing->addWords($edit->closing, 'mark');
}
return $closing->getLines();
}
}
class InlineWordLevelDiff extends MappedDiff {
function InlineWordLevelDiff($orig_lines, $closing_lines) {
list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
$this->MappedDiff($orig_words, $closing_words, $orig_stripped, $closing_stripped);
}
function _split($lines) {
if (!preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
implode("\n", $lines), $m)) {
return array(array(''), array(''));
}
return array($m[0], $m[1]);
}
function inline() {
$orig = new _HWLDF_WordAccumulator;
foreach ($this->edits as $edit) {
if ($edit->type == 'copy')
$orig->addWords($edit->orig);
elseif ($edit->type == 'change'){
$orig->addWords($edit->orig, 'del');
$orig->addWords($edit->closing, 'add');
} elseif ($edit->type == 'delete')
$orig->addWords($edit->orig, 'del');
elseif ($edit->type == 'add')
$orig->addWords($edit->closing, 'add');
elseif ($edit->orig)
$orig->addWords($edit->orig, 'del');
}
return $orig->getLines();
}
}
/**
@ -986,78 +1015,147 @@ class TableDiffFormatter extends DiffFormatter {
return $text;
}
function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
function _block_header($xbeg, $xlen, $ybeg, $ylen) {
global $lang;
$l1 = $lang['line'].' '.$xbeg;
$l2 = $lang['line'].' '.$ybeg;
$r = '<tr><td class="diff-blockheader" colspan="2">'.$l1.":</td>\n" .
'<td class="diff-blockheader" colspan="2">'.$l2.":</td></tr>\n";
$r = '<tr><td class="diff-blockheader" colspan="2">'.$l1.":</td>\n".
' <td class="diff-blockheader" colspan="2">'.$l2.":</td>\n".
"</tr>\n";
return $r;
}
function _start_block( $header ) {
print( $header );
function _start_block($header) {
print($header);
}
function _end_block() {
}
function _lines( $lines, $prefix=' ', $color="white" ) {
function _lines($lines, $prefix=' ', $color="white") {
}
function addedLine( $line ) {
return '<td>+</td><td class="diff-addedline">' .
$line.'</td>';
function addedLine($line) {
return '<td>+</td><td class="diff-addedline">' . $line.'</td>';
}
function deletedLine( $line ) {
return '<td>-</td><td class="diff-deletedline">' .
$line.'</td>';
function deletedLine($line) {
return '<td>-</td><td class="diff-deletedline">' . $line.'</td>';
}
function emptyLine() {
return '<td colspan="2">&nbsp;</td>';
}
function contextLine( $line ) {
function contextLine($line) {
return '<td> </td><td class="diff-context">'.$line.'</td>';
}
function _added($lines) {
foreach ($lines as $line) {
print( '<tr>' . $this->emptyLine() .
$this->addedLine( $line ) . "</tr>\n" );
print('<tr>' . $this->emptyLine() . $this->addedLine($line) . "</tr>\n");
}
}
function _deleted($lines) {
foreach ($lines as $line) {
print( '<tr>' . $this->deletedLine( $line ) .
$this->emptyLine() . "</tr>\n" );
print('<tr>' . $this->deletedLine($line) . $this->emptyLine() . "</tr>\n");
}
}
function _context( $lines ) {
function _context($lines) {
foreach ($lines as $line) {
print( '<tr>' . $this->contextLine( $line ) .
$this->contextLine( $line ) . "</tr>\n" );
print('<tr>' . $this->contextLine($line) . $this->contextLine($line) . "</tr>\n");
}
}
function _changed( $orig, $closing ) {
$diff = new WordLevelDiff( $orig, $closing );
function _changed($orig, $closing) {
$diff = new WordLevelDiff($orig, $closing);
$del = $diff->orig();
$add = $diff->closing();
while ( $line = array_shift( $del ) ) {
$aline = array_shift( $add );
print( '<tr>' . $this->deletedLine( $line ) .
$this->addedLine( $aline ) . "</tr>\n" );
while ($line = array_shift($del)) {
$aline = array_shift($add);
print('<tr>' . $this->deletedLine($line) . $this->addedLine($aline) . "</tr>\n");
}
$this->_added( $add ); # If any leftovers
$this->_added($add); # If any leftovers
}
}
/**
* Inline style diff formatter.
*
*/
class InlineDiffFormatter extends DiffFormatter {
function InlineDiffFormatter() {
$this->leading_context_lines = 2;
$this->trailing_context_lines = 2;
}
function format($diff) {
// Preserve whitespaces by converting some to non-breaking spaces.
// Do not convert all of them to allow word-wrap.
$val = parent::format($diff);
$val = str_replace(' ','&nbsp; ', $val);
$val = preg_replace('/ (?=<)|(?<=[ >]) /', '&nbsp;', $val);
return $val;
}
function _pre($text){
$text = htmlspecialchars($text);
return $text;
}
function _block_header($xbeg, $xlen, $ybeg, $ylen) {
global $lang;
if ($xlen != 1)
$xbeg .= "," . $xlen;
if ($ylen != 1)
$ybeg .= "," . $ylen;
$r = '<tr><td class="diff-blockheader">@@ '.$lang['line']." -$xbeg +$ybeg @@";
$r .= ' <span class="diff-deletedline"><del>'.$lang['deleted'].'</del></span>';
$r .= ' <span class="diff-addedline">'.$lang['created'].'</span>';
$r .= "</td></tr>\n";
return $r;
}
function _start_block($header) {
print($header."\n");
}
function _end_block() {
}
function _lines($lines, $prefix=' ', $color="white") {
}
function _added($lines) {
foreach ($lines as $line) {
print('<tr><td class="diff-addedline">'. $line . "</td></tr>\n");
}
}
function _deleted($lines) {
foreach ($lines as $line) {
print('<tr><td class="diff-deletedline"><del>' . $line . "</del></td></tr>\n");
}
}
function _context($lines) {
foreach ($lines as $line) {
print('<tr><td class="diff-context">'.$line."</td></tr>\n");
}
}
function _changed($orig, $closing) {
$diff = new InlineWordLevelDiff($orig, $closing);
$add = $diff->inline();
foreach ($add as $line)
print('<tr><td>'.$line."</td></tr>\n");
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -5,21 +5,38 @@
* @author Dave Child <dave@addedbytes.com>
* @link http://code.google.com/p/php-email-address-validation/
* @license http://www.opensource.org/licenses/bsd-license.php
* @version SVN r10 + Issue 15 fix
*/
class EmailAddressValidator {
/**
* Set true to allow addresses like me@localhost
*/
public $allowLocalAddresses = false;
/**
* Check email address validity
* @param strEmailAddress Email address to be checked
* @return True if email is valid, false if not
*/
function check_email_address($strEmailAddress) {
public function check_email_address($strEmailAddress) {
// If magic quotes is "on", email addresses with quote marks will
// fail validation because of added escape characters. Uncommenting
// the next three lines will allow for this issue.
//if (get_magic_quotes_gpc()) {
// $strEmailAddress = stripslashes($strEmailAddress);
//}
// Control characters are not allowed
if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $strEmailAddress)) {
return false;
}
// Check email length - min 3 (a@a), max 256
if (!$this->check_text_length($strEmailAddress, 3, 256)) {
return false;
}
// Split it into sections using last instance of "@"
$intAtSymbol = strrpos($strEmailAddress, '@');
if ($intAtSymbol === false) {
@ -31,10 +48,15 @@ class EmailAddressValidator {
// Count the "@" symbols. Only one is allowed, except where
// contained in quote marks in the local part. Quickest way to
// check this is to remove anything in quotes.
$arrTempAddress[0] = preg_replace('/"[^"]+"/'
// check this is to remove anything in quotes. We also remove
// characters escaped with backslash, and the backslash
// character.
$arrTempAddress[0] = preg_replace('/\./'
,''
,$arrEmailAddress[0]);
$arrTempAddress[0] = preg_replace('/"[^"]+"/'
,''
,$arrTempAddress[0]);
$arrTempAddress[1] = $arrEmailAddress[1];
$strTempAddress = $arrTempAddress[0] . $arrTempAddress[1];
// Then check - should be no "@" symbols.
@ -63,7 +85,7 @@ class EmailAddressValidator {
* @param strLocalPortion Text to be checked
* @return True if local portion is valid, false if not
*/
function check_local_portion($strLocalPortion) {
protected function check_local_portion($strLocalPortion) {
// Local portion can only be from 1 to 64 characters, inclusive.
// Please note that servers are encouraged to accept longer local
// parts than 64 characters.
@ -94,7 +116,7 @@ class EmailAddressValidator {
* @param strDomainPortion Text to be checked
* @return True if domain portion is valid, false if not
*/
function check_domain_portion($strDomainPortion) {
protected function check_domain_portion($strDomainPortion) {
// Total domain can only be from 1 to 255 characters, inclusive
if (!$this->check_text_length($strDomainPortion, 1, 255)) {
return false;
@ -109,7 +131,7 @@ class EmailAddressValidator {
return true;
} else {
$arrDomainPortion = explode('.', $strDomainPortion);
if (sizeof($arrDomainPortion) < 2) {
if (!$this->allowLocalAddresses && sizeof($arrDomainPortion) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0, $max = sizeof($arrDomainPortion); $i < $max; $i++) {
@ -121,6 +143,11 @@ class EmailAddressValidator {
.'([A-Za-z0-9]+))$/', $arrDomainPortion[$i])) {
return false;
}
if ($i == $max - 1) { // TLD cannot be only numbers
if (strlen(preg_replace('/[0-9]/', '', $arrDomainPortion[$i])) <= 0) {
return false;
}
}
}
}
return true;
@ -133,7 +160,7 @@ class EmailAddressValidator {
* @param intMaximum Maximum acceptable length
* @return True if string is within bounds (inclusive), false if not
*/
function check_text_length($strText, $intMinimum, $intMaximum) {
protected function check_text_length($strText, $intMinimum, $intMaximum) {
// Minimum and maximum are both inclusive
$intTextLength = strlen($strText);
if (($intTextLength < $intMinimum) || ($intTextLength > $intMaximum)) {
@ -142,5 +169,6 @@ class EmailAddressValidator {
return true;
}
}
}

View file

@ -49,6 +49,7 @@ class FeedParser_File extends SimplePie_File {
*/
function FeedParser_File($url, $timeout=10, $redirects=5,
$headers=null, $useragent=null, $force_fsockopen=false) {
parent::__construct();
$this->http = new DokuHTTPClient();
$this->success = $this->http->sendRequest($url);

View file

@ -71,6 +71,7 @@ class DokuHTTPClient extends HTTPClient {
* @link http://www.splitbrain.org/go/videodb
* @author Andreas Goetz <cpuidle@gmx.de>
* @author Andreas Gohr <andi@splitbrain.org>
* @author Tobias Sarnowski <sarnowski@new-thoughts.org>
*/
class HTTPClient {
//set these if you like
@ -86,13 +87,14 @@ class HTTPClient {
var $headers;
var $debug;
var $start = 0; // for timings
var $keep_alive = true; // keep alive rocks
// don't set these, read on error
var $error;
var $redirect_count;
// read these after a successful request
var $resp_status;
var $status;
var $resp_body;
var $resp_headers;
@ -108,6 +110,9 @@ class HTTPClient {
var $proxy_ssl; //boolean set to true if your proxy needs SSL
var $proxy_except; // regexp of URLs to exclude from proxy
// list of kept alive connections
static $connections = array();
// what we use as boundary on multipart/form-data posts
var $boundary = '---DokuWikiHTTPClient--4523452351';
@ -222,7 +227,7 @@ class HTTPClient {
$path = $uri['path'];
if(empty($path)) $path = '/';
if(!empty($uri['query'])) $path .= '?'.$uri['query'];
$port = $uri['port'];
if(isset($uri['port']) && !empty($uri['port'])) $port = $uri['port'];
if(isset($uri['user'])) $this->user = $uri['user'];
if(isset($uri['pass'])) $this->pass = $uri['pass'];
@ -235,7 +240,7 @@ class HTTPClient {
}else{
$request_url = $path;
$server = $server;
if (empty($port)) $port = ($uri['scheme'] == 'https') ? 443 : 80;
if (!isset($port)) $port = ($uri['scheme'] == 'https') ? 443 : 80;
}
// add SSL stream prefix if needed - needs SSL support in PHP
@ -247,7 +252,11 @@ class HTTPClient {
if($uri['port']) $headers['Host'].= ':'.$uri['port'];
$headers['User-Agent'] = $this->agent;
$headers['Referer'] = $this->referer;
$headers['Connection'] = 'Close';
if ($this->keep_alive) {
$headers['Connection'] = 'Keep-Alive';
} else {
$headers['Connection'] = 'Close';
}
if($method == 'POST'){
if(is_array($data)){
if($headers['Content-Type'] == 'multipart/form-data'){
@ -273,15 +282,33 @@ class HTTPClient {
// stop time
$start = time();
// open socket
$socket = @fsockopen($server,$port,$errno, $errstr, $this->timeout);
if (!$socket){
$this->status = -100;
$this->error = "Could not connect to $server:$port\n$errstr ($errno)";
return false;
// already connected?
$connectionId = $this->_uniqueConnectionId($server,$port);
$this->_debug('connection pool', $this->connections);
$socket = null;
if (isset($this->connections[$connectionId])) {
$this->_debug('reusing connection', $connectionId);
$socket = $this->connections[$connectionId];
}
if (is_null($socket) || feof($socket)) {
$this->_debug('opening connection', $connectionId);
// open socket
$socket = @fsockopen($server,$port,$errno, $errstr, $this->timeout);
if (!$socket){
$this->status = -100;
$this->error = "Could not connect to $server:$port\n$errstr ($errno)";
return false;
}
//set non blocking
stream_set_blocking($socket,0);
// keep alive?
if ($this->keep_alive) {
$this->connections[$connectionId] = $socket;
} else {
unset($this->connections[$connectionId]);
}
}
//set non blocking
stream_set_blocking($socket,0);
// build request
$request = "$method $request_url HTTP/".$this->http.HTTP_NL;
@ -300,6 +327,7 @@ class HTTPClient {
if($ret === false){
$this->status = -100;
$this->error = 'Failed writing to socket';
unset($this->connections[$connectionId]);
return false;
}
$written += $ret;
@ -311,10 +339,12 @@ class HTTPClient {
if(time()-$start > $this->timeout){
$this->status = -100;
$this->error = sprintf('Timeout while reading headers (%.3fs)',$this->_time() - $this->start);
unset($this->connections[$connectionId]);
return false;
}
if(feof($socket)){
$this->error = 'Premature End of File (socket)';
unset($this->connections[$connectionId]);
return false;
}
$r_headers .= fgets($socket,1024);
@ -327,6 +357,7 @@ class HTTPClient {
if($match[1] > $this->max_bodysize){
$this->error = 'Reported content length exceeds allowed response size';
if ($this->max_bodysize_abort)
unset($this->connections[$connectionId]);
return false;
}
}
@ -334,6 +365,7 @@ class HTTPClient {
// get Status
if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m)) {
$this->error = 'Server returned bad answer';
unset($this->connections[$connectionId]);
return false;
}
$this->status = $m[2];
@ -359,6 +391,11 @@ class HTTPClient {
// check server status code to follow redirect
if($this->status == 301 || $this->status == 302 ){
// close the connection because we don't handle content retrieval here
// that's the easiest way to clean up the connection
fclose($socket);
unset($this->connections[$connectionId]);
if (empty($this->resp_headers['location'])){
$this->error = 'Redirect but no Location Header found';
return false;
@ -386,6 +423,7 @@ class HTTPClient {
// check if headers are as expected
if($this->header_regexp && !preg_match($this->header_regexp,$r_headers)){
$this->error = 'The received headers did not match the given regexp';
unset($this->connections[$connectionId]);
return false;
}
@ -397,11 +435,13 @@ class HTTPClient {
do {
if(feof($socket)){
$this->error = 'Premature End of File (socket)';
unset($this->connections[$connectionId]);
return false;
}
if(time()-$start > $this->timeout){
$this->status = -100;
$this->error = sprintf('Timeout while reading chunk (%.3fs)',$this->_time() - $this->start);
unset($this->connections[$connectionId]);
return false;
}
$byte = fread($socket,1);
@ -418,10 +458,12 @@ class HTTPClient {
if($this->max_bodysize && strlen($r_body) > $this->max_bodysize){
$this->error = 'Allowed response size exceeded';
if ($this->max_bodysize_abort)
if ($this->max_bodysize_abort){
unset($this->connections[$connectionId]);
return false;
else
} else {
break;
}
}
} while ($chunk_size);
}else{
@ -430,16 +472,19 @@ class HTTPClient {
if(time()-$start > $this->timeout){
$this->status = -100;
$this->error = sprintf('Timeout while reading response (%.3fs)',$this->_time() - $this->start);
unset($this->connections[$connectionId]);
return false;
}
$r_body .= fread($socket,4096);
$r_size = strlen($r_body);
if($this->max_bodysize && $r_size > $this->max_bodysize){
$this->error = 'Allowed response size exceeded';
if ($this->max_bodysize_abort)
if ($this->max_bodysize_abort) {
unset($this->connections[$connectionId]);
return false;
else
} else {
break;
}
}
if(isset($this->resp_headers['content-length']) &&
!isset($this->resp_headers['transfer-encoding']) &&
@ -450,9 +495,13 @@ class HTTPClient {
}
}
// close socket
$status = socket_get_status($socket);
fclose($socket);
if (!$this->keep_alive ||
(isset($this->resp_headers['connection']) && $this->resp_headers['connection'] == 'Close')) {
// close socket
$status = socket_get_status($socket);
fclose($socket);
unset($this->connections[$connectionId]);
}
// decode gzip if needed
if(isset($this->resp_headers['content-encoding']) &&
@ -506,12 +555,13 @@ class HTTPClient {
*/
function _parseHeaders($string){
$headers = array();
$lines = explode("\n",$string);
foreach($lines as $line){
list($key,$val) = explode(':',$line,2);
$key = strtolower(trim($key));
$val = trim($val);
if(empty($val)) continue;
if (!preg_match_all('/^\s*([\w-]+)\s*:\s*([\S \t]+)\s*$/m', $string,
$matches, PREG_SET_ORDER)) {
return $headers;
}
foreach($matches as $match){
list(, $key, $val) = $match;
$key = strtolower($key);
if(isset($headers[$key])){
if(is_array($headers[$key])){
$headers[$key][] = $val;
@ -598,6 +648,14 @@ class HTTPClient {
return $out;
}
/**
* Generates a unique identifier for a connection.
*
* @return string unique identifier
*/
function _uniqueConnectionId($server, $port) {
return "$server:$port";
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -395,13 +395,8 @@ EOD;
$this->output($error->getXml());
}
function output($xml) {
$xml = '<?xml version="1.0"?>'."\n".$xml;
$length = strlen($xml);
header('Connection: close');
header('Content-Length: '.$length);
header('Content-Type: text/xml');
header('Date: '.date('r'));
echo $xml;
header('Content-Type: text/xml; charset=utf-8');
echo '<?xml version="1.0"?>', "\n", $xml;
exit;
}
function hasMethod($method) {

View file

@ -112,6 +112,16 @@ define('JSON_STRICT_TYPE', 11);
* @deprecated
*/
class JSON {
/**
* Disables the use of PHP5's native json_decode()
*
* You shouldn't change this usually because the native function is much
* faster. However, this non-native will also parse slightly broken JSON
* which might be handy when talking to a non-conform endpoint
*/
public $skipnative = false;
/**
* constructs a new JSON instance
*
@ -366,7 +376,10 @@ class JSON {
* @access public
*/
function decode($str) {
if (function_exists('json_decode')) return json_decode($str);
if (!$this->skipnative && function_exists('json_decode')){
return json_decode($str,($this->use == JSON_LOOSE_TYPE));
}
$str = $this->reduce_string($str);
switch (strtolower($str)) {

File diff suppressed because one or more lines are too long

View file

@ -7,7 +7,7 @@
*
* Modified for Dokuwiki
*
* @license GPL
* @license LGPL-2.1
* @link http://docs.maxg.info
* @author Bouchon <tarlib@bouchon.org> (Maxg)
* @author Christopher Smith <chris@jalakai.co.uk>

View file

@ -20,6 +20,7 @@ function act_dispatch(){
global $ID;
global $QUERY;
global $lang;
global $conf;
$preact = $ACT;
@ -50,6 +51,12 @@ function act_dispatch(){
}
}
//display some infos
if($ACT == 'check'){
check();
$ACT = 'show';
}
//check permissions
$ACT = act_permcheck($ACT);
@ -120,12 +127,6 @@ function act_dispatch(){
if(substr($ACT,0,7) == 'export_')
$ACT = act_export($ACT);
//display some infos
if($ACT == 'check'){
check();
$ACT = 'show';
}
//handle admin tasks
if($ACT == 'admin'){
// retrieve admin plugin name from $_REQUEST['page']
@ -143,6 +144,10 @@ function act_dispatch(){
$ACT = act_permcheck($ACT);
} // end event ACTION_ACT_PREPROCESS default action
$evt->advise_after();
// Make sure plugs can handle 'denied'
if($conf['send404'] && $ACT == 'denied') {
header('HTTP/1.0 403 Forbidden');
}
unset($evt);
// when action 'show', the intial not 'show' and POST, do a redirect
@ -287,10 +292,10 @@ function act_draftsave($act){
global $conf;
if($conf['usedraft'] && $_POST['wikitext']){
$draft = array('id' => $ID,
'prefix' => $_POST['prefix'],
'prefix' => substr($_POST['prefix'], 0, -1),
'text' => $_POST['wikitext'],
'suffix' => $_POST['suffix'],
'date' => $_POST['date'],
'date' => (int) $_POST['date'],
'client' => $INFO['client'],
);
$cname = getCacheName($draft['client'].$ID,'.draft');
@ -621,6 +626,7 @@ function act_sitemap($act) {
if (is_readable($sitemap)) {
// Send headers
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename='.basename($sitemap));
http_conditionalRequest(filemtime($sitemap));
@ -738,4 +744,4 @@ function subscription_handle_post(&$params) {
$params = compact('target', 'style', 'data', 'action');
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -1,7 +1,7 @@
<?php
/**
* PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
* Version 3.3.1
* Version 3.3.2
*
* PHP Version 5 with SSL and LDAP support
*
@ -9,7 +9,7 @@
* email: scott@wiggumworld.com, adldap@richardhyland.com
* http://adldap.sourceforge.net/
*
* Copyright (c) 2006-2009 Scott Barnett, Richard Hyland
* Copyright (c) 2006-2010 Scott Barnett, Richard Hyland
*
* We'd appreciate any improvements or additions to be submitted back
* to benefit the entire community :)
@ -27,10 +27,10 @@
* @category ToolsAndUtilities
* @package adLDAP
* @author Scott Barnett, Richard Hyland
* @copyright (c) 2006-2009 Scott Barnett, Richard Hyland
* @copyright (c) 2006-2010 Scott Barnett, Richard Hyland
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
* @revision $Revision: 67 $
* @version 3.3.1
* @revision $Revision: 91 $
* @version 3.3.2
* @link http://adldap.sourceforge.net/
*/
@ -409,25 +409,26 @@ class adLDAP {
* @param bool optional $prevent_rebind
* @return bool
*/
public function authenticate($username,$password,$prevent_rebind=false){
public function authenticate($username, $password, $prevent_rebind = false) {
// Prevent null binding
if ($username===NULL || $password===NULL){ return (false); }
if (empty($username) || empty($password)){ return (false); }
if ($username === NULL || $password === NULL) { return false; }
if (empty($username) || empty($password)) { return false; }
// Bind as the user
$this->_bind = @ldap_bind($this->_conn,$username.$this->_account_suffix,$password);
if (!$this->_bind){ return (false); }
$ret = true;
$this->_bind = @ldap_bind($this->_conn, $username . $this->_account_suffix, $password);
if (!$this->_bind){ $ret = false; }
// Cnce we've checked their details, kick back into admin mode if we have it
if ($this->_ad_username!=NULL && !$prevent_rebind){
$this->_bind = @ldap_bind($this->_conn,$this->_ad_username.$this->_account_suffix,$this->_ad_password);
if ($this->_ad_username !== NULL && !$prevent_rebind) {
$this->_bind = @ldap_bind($this->_conn, $this->_ad_username . $this->_account_suffix , $this->_ad_password);
if (!$this->_bind){
// This should never happen in theory
throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->get_last_error());
}
}
return (true);
return $ret;
}
//*****************************************************************************************************************
@ -758,7 +759,7 @@ class adLDAP {
$ret_groups=array();
$groups=$this->group_info($group,array("memberof"));
if (is_array($groups[0]["memberof"])) {
if (isset($groups[0]["memberof"]) && is_array($groups[0]["memberof"])) {
$groups=$groups[0]["memberof"];
if ($groups){
@ -861,7 +862,7 @@ class adLDAP {
* @param array $attributes The attributes to set to the user account
* @return bool
*/
public function user_create($attributes){
public function user_create($attributes){
// Check for compulsory fields
if (!array_key_exists("username",$attributes)){ return ("Missing compulsory field [username]"); }
if (!array_key_exists("firstname",$attributes)){ return ("Missing compulsory field [firstname]"); }
@ -963,25 +964,36 @@ class adLDAP {
$username = $this->strguid2hex($username);
$filter="objectguid=".$username;
}
else {
$filter="samaccountname=".$username;
else if (strstr($username, "@")) {
$filter="userPrincipalName=".$username;
}
else {
$filter="samaccountname=".$username;
}
$filter = "(&(objectCategory=person)({$filter}))";
if ($fields===NULL){ $fields=array("samaccountname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); }
if (!in_array("objectsid",$fields)){
$fields[] = "objectsid";
}
$sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
$entries = ldap_get_entries($this->_conn, $sr);
if ($entries[0]['count'] >= 1) {
// AD does not return the primary group in the ldap query, we may need to fudge it
if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
//$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
$entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
} else {
$entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
if (isset($entries[0])) {
if ($entries[0]['count'] >= 1) {
if (in_array("memberof", $fields)) {
// AD does not return the primary group in the ldap query, we may need to fudge it
if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
//$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
$entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
} else {
$entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
}
$entries[0]["memberof"]["count"]++;
}
}
return $entries;
}
$entries[0]["memberof"]["count"]++;
return ($entries);
return false;
}
/**
@ -1232,6 +1244,33 @@ class adLDAP {
}
}
/**
* Move a user account to a different OU
*
* @param string $username The username to move (please be careful here!)
* @param array $container The container or containers to move the user to (please be careful here!).
* accepts containers in 1. parent 2. child order
* @return array
*/
public function user_move($username, $container) {
if (!$this->_bind){ return (false); }
if ($username === null){ return ("Missing compulsory field [username]"); }
if ($container === null){ return ("Missing compulsory field [container]"); }
if (!is_array($container)){ return ("Container must be an array"); }
$userinfo = $this->user_info($username, array("*"));
$dn = $userinfo[0]['distinguishedname'][0];
$newrdn = "cn=" . $username;
$container = array_reverse($container);
$newcontainer = "ou=" . implode(",ou=",$container);
$newbasedn = strtolower($newcontainer) . "," . $this->_base_dn;
$result=@ldap_rename($this->_conn,$dn,$newrdn,$newbasedn,true);
if ($result !== true) {
return (false);
}
return (true);
}
//*****************************************************************************************************************
// CONTACT FUNCTIONS
// * Still work to do in this area, and new functions to write
@ -1567,6 +1606,32 @@ class adLDAP {
return ($groups);
}
//************************************************************************************************************
// ORGANIZATIONAL UNIT FUNCTIONS
/**
* Create an organizational unit
*
* @param array $attributes Default attributes of the ou
* @return bool
*/
public function ou_create($attributes){
if (!is_array($attributes)){ return ("Attributes must be an array"); }
if (!array_key_exists("ou_name",$attributes)){ return ("Missing compulsory field [ou_name]"); }
if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
$attributes["container"]=array_reverse($attributes["container"]);
$add=array();
$add["objectClass"] = "organizationalUnit";
$container="OU=".implode(",OU=",$attributes["container"]);
$result=ldap_add($this->_conn,"CN=".$add["cn"].", ".$container.",".$this->_base_dn,$add);
if ($result!=true){ return (false); }
return (true);
}
//************************************************************************************************************
// EXCHANGE FUNCTIONS
@ -1998,6 +2063,7 @@ class adLDAP {
if ($attributes["exchange_usedefaults"]){ $mod["mDBUseDefaults"][0]=$attributes["exchange_usedefaults"]; }
if ($attributes["exchange_policyexclude"]){ $mod["msExchPoliciesExcluded"][0]=$attributes["exchange_policyexclude"]; }
if ($attributes["exchange_policyinclude"]){ $mod["msExchPoliciesIncluded"][0]=$attributes["exchange_policyinclude"]; }
if ($attributes["exchange_addressbook"]){ $mod["showInAddressBook"][0]=$attributes["exchange_addressbook"]; }
// This schema is designed for contacts
if ($attributes["exchange_hidefromlists"]){ $mod["msExchHideFromAddressLists"][0]=$attributes["exchange_hidefromlists"]; }

View file

@ -70,6 +70,12 @@ function auth_setup(){
$_REQUEST['http_credentials'] = false;
if (!$conf['rememberme']) $_REQUEST['r'] = false;
// handle renamed HTTP_AUTHORIZATION variable (can happen when a fix like
// the one presented at
// http://www.besthostratings.com/articles/http-auth-php-cgi.html is used
// for enabling HTTP authentication with CGI/SuExec)
if(isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']))
$_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
// streamline HTTP auth credentials (IIS/rewrite -> mod_php)
if(isset($_SERVER['HTTP_AUTHORIZATION'])){
list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) =
@ -194,10 +200,11 @@ function auth_login($user,$pass,$sticky=false,$silent=false){
}else{
// read cookie information
list($user,$sticky,$pass) = auth_getCookie();
// get session info
$session = $_SESSION[DOKU_COOKIE]['auth'];
if($user && $pass){
// we got a cookie - see if we can trust it
// get session info
$session = $_SESSION[DOKU_COOKIE]['auth'];
if(isset($session) &&
$auth->useSessionCache($user) &&
($session['time'] >= time()-$conf['auth_security_timeout']) &&
@ -371,63 +378,15 @@ function auth_ismanager($user=null,$groups=null,$adminonly=false){
$user = $_SERVER['REMOTE_USER'];
}
}
$user = trim($auth->cleanUser($user));
if($user === '') return false;
if(is_null($groups)) $groups = (array) $USERINFO['grps'];
$groups = array_map(array($auth,'cleanGroup'),$groups);
$user = auth_nameencode($user);
// check username against superuser and manager
$superusers = explode(',', $conf['superuser']);
$superusers = array_unique($superusers);
$superusers = array_map('trim', $superusers);
$superusers = array_filter($superusers);
// prepare an array containing only true values for array_map call
$alltrue = array_fill(0, count($superusers), true);
$superusers = array_map('auth_nameencode', $superusers, $alltrue);
// case insensitive?
if(!$auth->isCaseSensitive()){
$superusers = array_map('utf8_strtolower',$superusers);
$user = utf8_strtolower($user);
if(is_null($groups)){
$groups = (array) $USERINFO['grps'];
}
// check user match
if(in_array($user, $superusers)) return true;
// check superuser match
if(auth_isMember($conf['superuser'],$user, $groups)) return true;
if($adminonly) return false;
// check managers
if(!$adminonly){
$managers = explode(',', $conf['manager']);
$managers = array_unique($managers);
$managers = array_map('trim', $managers);
$managers = array_filter($managers);
// prepare an array containing only true values for array_map call
$alltrue = array_fill(0, count($managers), true);
$managers = array_map('auth_nameencode', $managers, $alltrue);
if(!$auth->isCaseSensitive()) $managers = array_map('utf8_strtolower',$managers);
if(in_array($user, $managers)) return true;
}
// check user's groups against superuser and manager
if (!empty($groups)) {
//prepend groups with @ and nameencode
$cnt = count($groups);
for($i=0; $i<$cnt; $i++){
$groups[$i] = '@'.auth_nameencode($groups[$i]);
if(!$auth->isCaseSensitive()){
$groups[$i] = utf8_strtolower($groups[$i]);
}
}
// check groups against superuser and manager
foreach($superusers as $supu)
if(in_array($supu, $groups)) return true;
if(!$adminonly){
foreach($managers as $mana)
if(in_array($mana, $groups)) return true;
}
}
if(auth_isMember($conf['manager'],$user, $groups)) return true;
return false;
}
@ -446,6 +405,52 @@ function auth_isadmin($user=null,$groups=null){
return auth_ismanager($user,$groups,true);
}
/**
* Match a user and his groups against a comma separated list of
* users and groups to determine membership status
*
* Note: all input should NOT be nameencoded.
*
* @param $memberlist string commaseparated list of allowed users and groups
* @param $user string user to match against
* @param $groups array groups the user is member of
* @returns bool true for membership acknowledged
*/
function auth_isMember($memberlist,$user,array $groups){
global $auth;
if (!$auth) return false;
// clean user and groups
if(!$auth->isCaseSensitive()){
$user = utf8_strtolower($user);
$groups = array_map('utf8_strtolower',$groups);
}
$user = $auth->cleanUser($user);
$groups = array_map(array($auth,'cleanGroup'),$groups);
// extract the memberlist
$members = explode(',',$memberlist);
$members = array_map('trim',$members);
$members = array_unique($members);
$members = array_filter($members);
// compare cleaned values
foreach($members as $member){
if(!$auth->isCaseSensitive()) $member = utf8_strtolower($member);
if($member[0] == '@'){
$member = $auth->cleanGroup(substr($member,1));
if(in_array($member, $groups)) return true;
}else{
$member = $auth->cleanUser($member);
if($member == $user) return true;
}
}
// still here? not a member!
return false;
}
/**
* Convinience function for auth_aclcheck()
*
@ -536,13 +541,13 @@ function auth_aclcheck($id,$user,$groups){
//still here? do the namespace checks
if($ns){
$path = $ns.':\*';
$path = $ns.':*';
}else{
$path = '\*'; //root document
$path = '*'; //root document
}
do{
$matches = preg_grep('/^'.$path.'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
$matches = preg_grep('/^'.preg_quote($path,'/').'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
if(count($matches)){
foreach($matches as $match){
$match = preg_replace('/#.*$/','',$match); //ignore comments
@ -559,9 +564,9 @@ function auth_aclcheck($id,$user,$groups){
//get next higher namespace
$ns = getNS($ns);
if($path != '\*'){
$path = $ns.':\*';
if($path == ':\*') $path = '\*';
if($path != '*'){
$path = $ns.':*';
if($path == ':*') $path = '*';
}else{
//we did this already
//looks like there is something wrong with the ACL
@ -938,6 +943,8 @@ function act_resendpwd(){
* mysql - MySQL password (old method)
* my411 - MySQL 4.1.1 password
* kmd5 - Salted MD5 hashing as used by UNB
* pmd5 - Salted multi iteration MD5 as used by Wordpress
* hmd5 - Same as pmd5 but PhpBB3 flavour
*
* @author Andreas Gohr <andi@splitbrain.org>
* @return string The crypted password
@ -1017,6 +1024,45 @@ function auth_cryptPassword($clear,$method='',$salt=null){
$hash1 = strtolower(md5($key . md5($clear)));
$hash2 = substr($hash1, 0, 16) . $key . substr($hash1, 16);
return $hash2;
case 'hmd5':
$key = 'H';
// hmd5 is exactly the same as pmd5, but uses an H as identifier
// PhpBB3 uses it that way, so we just fall through here
case 'pmd5':
if(!$key) $key = 'P';
$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$iterc = $salt[0]; // pos 0 of salt is iteration count
$iter = strpos($itoa64,$iterc);
$iter = 1 << $iter;
$salt = substr($salt,1,8);
// iterate
$hash = md5($salt . $clear, true);
do {
$hash = md5($hash . $clear, true);
} while (--$iter);
// encode
$output = '';
$count = 16;
$i = 0;
do {
$value = ord($hash[$i++]);
$output .= $itoa64[$value & 0x3f];
if ($i < $count)
$value |= ord($hash[$i]) << 8;
$output .= $itoa64[($value >> 6) & 0x3f];
if ($i++ >= $count)
break;
if ($i < $count)
$value |= ord($hash[$i]) << 16;
$output .= $itoa64[($value >> 12) & 0x3f];
if ($i++ >= $count)
break;
$output .= $itoa64[($value >> 18) & 0x3f];
} while ($i < $count);
return '$'.$key.'$'.$iterc.$salt.$output;
default:
msg("Unsupported crypt method $method",-1);
}
@ -1044,6 +1090,12 @@ function auth_verifyPassword($clear,$crypt){
}elseif(preg_match('/^\$apr1\$([^\$]{0,8})\$/',$crypt,$m)){
$method = 'apr1';
$salt = $m[1];
}elseif(preg_match('/^\$P\$(.{31})$/',$crypt,$m)){
$method = 'pmd5';
$salt = $m[1];
}elseif(preg_match('/^\$H\$(.{31})$/',$crypt,$m)){
$method = 'hmd5';
$salt = $m[1];
}elseif(substr($crypt,0,6) == '{SSHA}'){
$method = 'ssha';
$salt = substr(base64_decode(substr($crypt, 6)),20);
@ -1117,4 +1169,4 @@ function auth_getCookie(){
return array($user,$sticky,$pass);
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -126,7 +126,7 @@ class auth_ad extends auth_basic {
* at least these fields:
*
* name string full name of the user
* mail string email addres of the user
* mail string email address of the user
* grps array list of groups the user is in
*
* This LDAP specific function returns the following
@ -296,4 +296,4 @@ class auth_ad extends auth_basic {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -400,4 +400,4 @@ class auth_basic {
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -457,4 +457,4 @@ class auth_ldap extends auth_basic {
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -936,4 +936,4 @@ class auth_mysql extends auth_basic {
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -407,4 +407,4 @@ class auth_pgsql extends auth_mysql {
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -325,4 +325,4 @@ class auth_plain extends auth_basic {
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -197,18 +197,6 @@ class cache_parser extends cache {
}
class cache_renderer extends cache_parser {
function useCache($depends=array()) {
$use = parent::useCache($depends);
// meta data needs to be kept in step with the cache
if (!$use && isset($this->page)) {
p_set_metadata($this->page,array(),true);
}
return $use;
}
function _useCache() {
global $conf;
@ -251,19 +239,12 @@ class cache_renderer extends cache_parser {
if (isset($this->page)) {
$metafile = metaFN($this->page,'.meta');
if (@file_exists($metafile)) {
$files[] = $metafile; // ... the page's own metadata
$files[] = DOKU_INC.'inc/parser/metadata.php'; // ... the metadata renderer
$files[] = $metafile; // ... the page's own metadata
$valid = p_get_metadata($this->page, 'date valid');
if (!empty($valid['age'])) {
$this->depends['age'] = isset($this->depends['age']) ?
min($this->depends['age'],$valid['age']) : $valid['age'];
}
} else {
$this->depends['purge'] = true; // ... purging cache will generate metadata
return;
$valid = p_get_metadata($this->page, 'date valid'); // for xhtml this will render the metadata if needed
if (!empty($valid['age'])) {
$this->depends['age'] = isset($this->depends['age']) ?
min($this->depends['age'],$valid['age']) : $valid['age'];
}
}

View file

@ -84,7 +84,10 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
$meta = array();
if (!$INFO['exists'] && empty($oldmeta['persistent']['date']['created'])){ // newly created
$meta['date']['created'] = $created;
if ($user) $meta['creator'] = $INFO['userinfo']['name'];
if ($user){
$meta['creator'] = $INFO['userinfo']['name'];
$meta['user'] = $user;
}
} elseif (!$INFO['exists'] && !empty($oldmeta['persistent']['date']['created'])) { // re-created / restored
$meta['date']['created'] = $oldmeta['persistent']['date']['created'];
$meta['date']['modified'] = $created; // use the files ctime here

View file

@ -242,13 +242,16 @@ function buildURLparams($params, $sep='&amp;'){
*/
function buildAttributes($params,$skipempty=false){
$url = '';
$white = false;
foreach($params as $key => $val){
if($key{0} == '_') continue;
if($val === '' && $skipempty) continue;
if($white) $url .= ' ';
$url .= $key.'="';
$url .= htmlspecialchars ($val);
$url .= '" ';
$url .= '"';
$white = true;
}
return $url;
}
@ -1128,12 +1131,15 @@ function notify($id,$who,$rev='',$summary='',$minor=false,$replace=array()){
$diff = rawWiki($id);
}
$text = str_replace('@DIFF@',$diff,$text);
if(utf8_strlen($conf['title']) < 20) {
$subject = '['.$conf['title'].'] '.$subject;
if(empty($conf['mailprefix'])) {
if(utf8_strlen($conf['title']) < 20) {
$subject = '['.$conf['title'].'] '.$subject;
}else{
$subject = '['.utf8_substr($conf['title'], 0, 20).'...] '.$subject;
}
}else{
$subject = '['.utf8_substr($conf['title'], 0, 20).'...] '.$subject;
$subject = '['.$conf['mailprefix'].'] '.$subject;
}
mail_send($to,$subject,$text,$conf['mailfrom'],'',$bcc);
}
@ -1538,4 +1544,4 @@ function valid_input_set($param, $valid_values, $array, $exc = '') {
}
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -324,4 +324,4 @@ function conf_decodeString($str) {
return $str;
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -1577,4 +1577,4 @@ class DokuWikiFeedCreator extends UniversalFeedCreator{
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -252,7 +252,7 @@ class Doku_Form {
global $lang;
$form = '';
$this->params['accept-charset'] = $lang['encoding'];
$form .= '<form ' . html_attbuild($this->params) . '><div class="no">' . DOKU_LF;
$form .= '<form ' . buildAttributes($this->params,true) . '><div class="no">' . DOKU_LF;
if (!empty($this->_hidden)) {
foreach ($this->_hidden as $name=>$value)
$form .= form_hidden(array('name'=>$name, 'value'=>$value));
@ -597,7 +597,7 @@ function form_makeListboxField($name, $values, $selected='', $label=null, $id=''
* @author Tom N Harris <tnharris@whoopdedo.org>
*/
function form_tag($attrs) {
return '<'.$attrs['_tag'].' '.buildAttributes($attrs).'/>';
return '<'.$attrs['_tag'].' '.buildAttributes($attrs,true).'/>';
}
/**
@ -696,7 +696,7 @@ function form_wikitext($attrs) {
*/
function form_button($attrs) {
$p = (!empty($attrs['_action'])) ? 'name="do['.$attrs['_action'].']" ' : '';
return '<input '.$p.buildAttributes($attrs,true).'/>';
return '<input '.$p.buildAttributes($attrs,true).' />';
}
/**
@ -714,7 +714,7 @@ function form_field($attrs) {
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><span>'.$attrs['_text'].'</span>';
$s .= ' <input '.buildAttributes($attrs,true).'/></label>';
$s .= ' <input '.buildAttributes($attrs,true).' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@ -734,7 +734,7 @@ function form_fieldright($attrs) {
$s = '<label';
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><input '.buildAttributes($attrs,true).'/>';
$s .= '><input '.buildAttributes($attrs,true).' />';
$s .= ' <span>'.$attrs['_text'].'</span></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
@ -758,7 +758,7 @@ function form_textfield($attrs) {
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><span>'.$attrs['_text'].'</span> ';
$s .= '<input type="text" '.buildAttributes($attrs,true).'/></label>';
$s .= '<input type="text" '.buildAttributes($attrs,true).' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@ -781,7 +781,7 @@ function form_passwordfield($attrs) {
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><span>'.$attrs['_text'].'</span> ';
$s .= '<input type="password" '.buildAttributes($attrs,true).'/></label>';
$s .= '<input type="password" '.buildAttributes($attrs,true).' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@ -807,7 +807,7 @@ function form_filefield($attrs) {
$s .= '<input type="file" '.buildAttributes($attrs,true);
if (!empty($attrs['_maxlength'])) $s .= ' maxlength="'.$attrs['_maxlength'].'"';
if (!empty($attrs['_accept'])) $s .= ' accept="'.$attrs['_accept'].'"';
$s .= '/></label>';
$s .= ' /></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
return $s;
@ -837,7 +837,7 @@ function form_checkboxfield($attrs) {
. ' value="' . hsc($attrs['value'][1]) . '" />';
$attrs['value'] = $attrs['value'][0];
}
$s .= '<input type="checkbox" '.buildAttributes($attrs,true).'/>';
$s .= '<input type="checkbox" '.buildAttributes($attrs,true).' />';
$s .= ' <span>'.$attrs['_text'].'</span></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';
@ -860,7 +860,7 @@ function form_radiofield($attrs) {
$s = '<label';
if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
$s .= '><input type="radio" '.buildAttributes($attrs,true).'/>';
$s .= '><input type="radio" '.buildAttributes($attrs,true).' />';
$s .= ' <span>'.$attrs['_text'].'</span></label>';
if (preg_match('/(^| )block($| )/', $attrs['_class']))
$s .= '<br />';

View file

@ -376,6 +376,11 @@ function ft_snippet($id,$highlight){
* Wraps a search term in regex boundary checks.
*/
function ft_snippet_re_preprocess($term) {
// do not process asian terms where word boundaries are not explicit
if(preg_match('/'.IDX_ASIAN.'/u',$term)){
return $term;
}
if(substr($term,0,2) == '\\*'){
$term = substr($term,2);
}else{
@ -710,7 +715,7 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
// successive asian characters need to be searched as a phrase
$words = preg_split('/('.IDX_ASIAN.'+)/u', $term, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach ($words as $word) {
if (preg_match('/'.IDX_ASIAN.'/u', $word)) $phrase_mode = true;
$phrase_mode = $phrase_mode ? true : preg_match('/'.IDX_ASIAN.'/u', $word);
$parsed .= ft_termParser($Indexer, $word, false, $phrase_mode);
}
} else {
@ -732,4 +737,4 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
return $parsed;
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
//Setup VIM: ex: et ts=4 :

View file

@ -26,6 +26,7 @@ function html_wikilink($id,$name=null,$search=''){
/**
* Helps building long attribute lists
*
* @deprecated Use buildAttributes instead
* @author Andreas Gohr <andi@splitbrain.org>
*/
function html_attbuild($attributes){
@ -887,6 +888,9 @@ function html_diff($text='',$intro=true){
$rev2 = (int) $_REQUEST['rev2'];
}
$r_minor = '';
$l_minor = '';
if($text){ // compare text to the most current revision
$l_rev = '';
$l_text = rawWiki($ID,'');
@ -1033,7 +1037,10 @@ function html_conflict($text,$summary){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function html_msgarea(){
global $MSG;
global $MSG, $MSG_shown;
// store if the global $MSG has already been shown and thus HTML output has been started
$MSG_shown = true;
if(!isset($MSG)) return;
$shown = array();
@ -1045,6 +1052,8 @@ function html_msgarea(){
print '</div>';
$shown[$hash] = 1;
}
unset($GLOBALS['MSG']);
}
/**
@ -1213,9 +1222,9 @@ function html_edit(){
if($wr && $conf['license']){
$form->addElement(form_makeOpenTag('div', array('class'=>'license')));
$out = $lang['licenseok'];
$out .= '<a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
$out .= ' <a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
if(isset($conf['target']['extern'])) $out .= ' target="'.$conf['target']['extern'].'"';
$out .= '> '.$license[$conf['license']]['name'].'</a>';
$out .= '>'.$license[$conf['license']]['name'].'</a>';
$form->addElement($out);
$form->addElement(form_makeCloseTag('div'));
}

View file

@ -258,7 +258,7 @@ function check(){
* @see html_msgarea
*/
function msg($message,$lvl=0,$line='',$file=''){
global $MSG;
global $MSG, $MSG_shown;
$errors[-1] = 'error';
$errors[0] = 'info';
$errors[1] = 'success';
@ -268,7 +268,7 @@ function msg($message,$lvl=0,$line='',$file=''){
if(!isset($MSG)) $MSG = array();
$MSG[]=array('lvl' => $errors[$lvl], 'msg' => $message);
if(headers_sent()){
if(isset($MSG_shown) || headers_sent()){
if(function_exists('html_msgarea')){
html_msgarea();
}else{

View file

@ -421,14 +421,27 @@ function getBaseURL($abs=null){
if($conf['baseurl']) return rtrim($conf['baseurl'],'/').$dir;
//split hostheader into host and port
$addr = explode(':',$_SERVER['HTTP_HOST']);
$host = $addr[0];
$port = '';
if (isset($addr[1])) {
$port = $addr[1];
} elseif (isset($_SERVER['SERVER_PORT'])) {
if(isset($_SERVER['HTTP_HOST'])){
$parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']);
$host = $parsed_host['host'];
$port = $parsed_host['port'];
}elseif(isset($_SERVER['SERVER_NAME'])){
$parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']);
$host = $parsed_host['host'];
$port = $parsed_host['port'];
}else{
$host = php_uname('n');
$port = '';
}
if(!$port && isset($_SERVER['SERVER_PORT'])) {
$port = $_SERVER['SERVER_PORT'];
}
if(is_null($port)){
$port = '';
}
if(!is_ssl()){
$proto = 'http://';
if ($port == '80') {

View file

@ -486,7 +486,7 @@ function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=20
preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)) {
$name = basename($match[1]);
}
}
}

View file

@ -28,7 +28,7 @@ $lang['btn_revs'] = 'نسخ قديمة';
$lang['btn_recent'] = 'أحدث التغييرات';
$lang['btn_upload'] = 'ارفع';
$lang['btn_cancel'] = 'ألغ';
$lang['btn_index'] = 'فهرس';
$lang['btn_index'] = 'خريطة موقع';
$lang['btn_secedit'] = 'حرر';
$lang['btn_login'] = 'لج';
$lang['btn_logout'] = 'اخرج';
@ -54,21 +54,21 @@ $lang['newpass'] = 'كلمة سر جديدة';
$lang['oldpass'] = 'أكد كلمة السر الحالية';
$lang['passchk'] = 'مرة أخرى';
$lang['remember'] = 'تذكرني';
$lang['fullname'] = 'الاسم الكامل';
$lang['fullname'] = 'الاسم الحقيقي';
$lang['email'] = 'البريد الإلكتروني';
$lang['register'] = 'سجّل';
$lang['profile'] = 'الملف الشخصي';
$lang['badlogin'] = 'عذرا، اسم المشترك أو كلمة السر غير صحيحة';
$lang['minoredit'] = 'تعديلات طفيفة';
$lang['draftdate'] = 'حفظ المسودات تلقائيا مشغل';
$lang['nosecedit'] = 'غُيرت الصفحة في هذه الأثناء، معلومات الفقرة اصبحت قديمة. حُمُلت كل الصفحة بدلا.';
$lang['regmissing'] = 'عذرا، يجب ملء جميع الحقول';
$lang['draftdate'] = 'حفظ المسودات آليا مفعّل';
$lang['nosecedit'] = 'غُيرت الصفحة في هذه الأثناء، معلومات الجزء اصبحت قديمة. حُمُلت كل الصفحة بدلا.';
$lang['regmissing'] = 'عذرا، عليك ملء جميع الحقول.';
$lang['reguexists'] = 'عذرا، يوجد مشترك بنفس الاسم.';
$lang['regsuccess'] = 'أنشئ المستخدم و ارسلت كلمة السر بالبريد.';
$lang['regsuccess2'] = 'أنشئ المستخدم.';
$lang['regmailfail'] = 'حدث خطأ فى إرسال رسالة كلمة اسرر. يرجى مراسلة المدير';
$lang['regbadmail'] = 'يبدو البريد الإلكتروني المعطى غير صحيح، إن كنت تظن أن هذا خطأ، راسل المدير';
$lang['regbadpass'] = 'كلمتى المرور غير متطابقتين، حاول مرة أخرى.';
$lang['regmailfail'] = 'حدث خطأ فى إرسال رسالة كلمة السر. يرجى مراسلة المدير!';
$lang['regbadmail'] = 'يبدو البريد الإلكتروني المعطى غيرَ صحيح، إن كنت تظن أن هذا خطأ، راسل المدير';
$lang['regbadpass'] = 'كلمتا المرور غير متطابقتين، حاول مرة أخرى.';
$lang['regpwmail'] = 'كلمة مرورك إلى دوكو ويكي';
$lang['reghere'] = 'ليس لديك حساب بعد؟ احصل على واحد';
$lang['profna'] = 'هذه الويكي لا تدعم تعديل الملف الشخصي';
@ -81,35 +81,35 @@ $lang['resendpwd'] = 'إرسال كلمة مرور';
$lang['resendpwdmissing'] = 'عذراّ، يجب أن تملأ كل الحقول.';
$lang['resendpwdnouser'] = 'عذراً، لم نجد المستخدم هذا في قاعدة بياناتنا.';
$lang['resendpwdbadauth'] = 'عذراً، رمز التفعيل هذا غير صحيح. نأكد من استخدامك كامل وصلة التأكيد.';
$lang['resendpwdconfirm'] = 'أرسل رابط التأكيد بواسطة البريد.';
$lang['resendpwdsuccess'] = 'كلمة السرالجديدة إرسلت عبر البريد.';
$lang['license'] = 'مالم يشر لخلاف ذلك، فإن المحتوى على هذه الويكي مرخص وفق الرخصة التالية:';
$lang['resendpwdconfirm'] = 'اُرسل رابط التأكيد بواسطة البريد.';
$lang['resendpwdsuccess'] = 'كلمة السرالجديدة اُرسلت عبر البريد.';
$lang['license'] = 'مالم يشر لخلاف ذلك، فإن المحتوى في هذه الويكي مرخص وفق الرخصة التالية:';
$lang['licenseok'] = 'لاحظ: بتحرير هذه الصفحة أنت توافق على ترخيص محتواها تحت الرخصة التالية:';
$lang['searchmedia'] = 'ابحث في اسماء الملفات:';
$lang['searchmedia'] = 'ابحث في أسماء الملفات:';
$lang['searchmedia_in'] = 'ابحث في %s';
$lang['txt_upload'] = 'اختر ملفاً للرفع';
$lang['txt_filename'] = 'رفع كـ (اختياري)';
$lang['txt_overwrt'] = 'اكتب على ملف موجود';
$lang['lockedby'] = 'حالياً مقفل بواسطة';
$lang['lockedby'] = 'مقفلة حاليا لـ';
$lang['lockexpire'] = 'ينتهي القفل في';
$lang['willexpire'] = 'سينتهي قفل تحرير هذه الصفحه خلال دقيقة.\nلتجنب التعارض استخدم زر المعاينة لتصفير مؤقت القفل.';
$lang['js']['notsavedyet'] = 'التعديلات غير المحفوظة ستفقد. اكمل فعلا؟';
$lang['js']['notsavedyet'] = 'التعديلات غير المحفوظة ستفقد.';
$lang['js']['searchmedia'] = 'ابحث عن ملفات';
$lang['js']['keepopen'] = 'أبقي النافذة مفتوحة أثناء الاختيار';
$lang['js']['hidedetails'] = 'أخف التفاصيل';
$lang['js']['mediatitle'] = 'اعدادات الرابط';
$lang['js']['mediatitle'] = 'إعدادات الرابط';
$lang['js']['mediadisplay'] = 'نوع الرابط';
$lang['js']['mediaalign'] = 'المحاذاة';
$lang['js']['mediasize'] = 'حجم الصورة';
$lang['js']['mediatarget'] = 'هدف الرابط';
$lang['js']['mediaclose'] = 'اغلق';
$lang['js']['mediaclose'] = 'أغلق';
$lang['js']['mediainsert'] = 'أدرج';
$lang['js']['mediadisplayimg'] = 'اظهر الصورة.';
$lang['js']['mediadisplayimg'] = 'أظهر الصورة.';
$lang['js']['mediadisplaylnk'] = 'اظهر الرابط فقط.';
$lang['js']['mediasmall'] = 'نسخة مصغرة';
$lang['js']['mediamedium'] = 'نسخة متوسطة';
$lang['js']['medialarge'] = 'نسخة كبيرة';
$lang['js']['mediaoriginal'] = 'نسخة أصلية';
$lang['js']['mediaoriginal'] = 'النسخة الأصلية';
$lang['js']['medialnk'] = 'الرابط لصفحة التفاصيل';
$lang['js']['mediadirect'] = 'رابط مباشر للأصل';
$lang['js']['medianolnk'] = 'لا رابط';
@ -118,70 +118,73 @@ $lang['js']['medialeft'] = 'حاذي الصورة إلى اليسار.';
$lang['js']['mediaright'] = 'حاذي الصورة إلى اليمين.';
$lang['js']['mediacenter'] = 'حاذي الصورة إلى الوسط.';
$lang['js']['medianoalign'] = 'لا تستعمل المحاذاة.';
$lang['js']['nosmblinks'] = 'الروابط لمجلدات ويندوز المشاركة تعمل فقط مع متصفح مايكروسفت Internet Explorer. ما زال بإمكانك قص و لصق الرابط.';
$lang['js']['nosmblinks'] = 'الروابط لمجلدات مشاركة وندز تعمل فقط مع متصفح مايكروسفت Internet Explorer.
ما زال بإمكانك قص و لصق الرابط.';
$lang['js']['linkwiz'] = 'مرشد الروابط';
$lang['js']['linkto'] = 'الرابط إلى :';
$lang['js']['del_confirm'] = 'هل حقاً تريد حذف البنود المختارة؟';
$lang['js']['mu_btn'] = 'رفع عدة ملفات في وقت واحد';
$lang['rssfailed'] = 'خطأ ما حدث أثناء جلب ملف التغذية:';
$lang['nothingfound'] = 'لا يوجد شيء';
$lang['mediaselect'] = 'ملفات الوسائط المتعددة';
$lang['fileupload'] = 'تحميل ملف وسائط متعددة';
$lang['uploadsucc'] = 'تم التحميل بنجاح';
$lang['uploadfail'] = 'فشل التحميل، قد يكون الخطأ فى التراخيص؟';
$lang['uploadwrong'] = 'التحميل ممنوع، نوع الملف مرفوض!';
$lang['uploadexist'] = 'الملف موجود أصلاً. لم يحدث شيء';
$lang['uploadbadcontent'] = 'المحتوى المحمّل لم يتطابق مع نوع الملف %s';
$lang['uploadspam'] = 'التحميل محجوب بواسطة القائمة السوداء لبرنامج تقفي التطفل';
$lang['uploadxss'] = 'التحميل محجوب لمنع المحتويات الخبيثة';
$lang['uploadsize'] = 'الملف الذي تم رفعه كبير جدا . ( الحد الأقصى %s )';
$lang['deletesucc'] = 'تم حذف الملف "%s"';
$lang['deletefail'] = 'لا يمكن حذف "%s"، تأكد من تراخيصك';
$lang['mediainuse'] = 'لم يحذف الملف "%s"، مازال موجوداً';
$lang['mediaselect'] = 'ملفات الوسائط';
$lang['fileupload'] = 'تحميل ملف وسائط';
$lang['uploadsucc'] = 'تم الرفع بنجاح';
$lang['uploadfail'] = 'فشل الرفع، ربما خطأ تراخيص؟';
$lang['uploadwrong'] = 'الرفع ممنوع، نوع الملف مرفوض!';
$lang['uploadexist'] = 'الملف موجود أصلاً. لم يُعمل شيئ.';
$lang['uploadbadcontent'] = 'المحتوى المرفوع لم يطابق لاحقة ملفات %s.';
$lang['uploadspam'] = 'الرفع محجوب بواسطة القائمة السوداء لبرنامج تقفي التطفل.';
$lang['uploadxss'] = 'رُفض الرفع للإشتباه بمحتوى ضار.';
$lang['uploadsize'] = 'الملف المرفوع كان كبيرا جدا . ( الحد %s )';
$lang['deletesucc'] = 'حُذف الملف "%s".';
$lang['deletefail'] = 'تعذر حذف "%s" - تأكد من الصلاحيات.';
$lang['mediainuse'] = 'لم يحذف الملف "%s" - مازال مستخدما.';
$lang['namespaces'] = 'فضاء التسمية';
$lang['mediafiles'] = 'ملفات موجودة في';
$lang['accessdenied'] = 'لا يسمح لك برؤية هذه الصفحة.';
$lang['mediausage'] = 'استخدم هذه الصياغة للدلالة على هذا الملف:';
$lang['mediaview'] = 'عرض الملف الأصلي';
$lang['mediaview'] = 'اعرض الملف الأصلي';
$lang['mediaroot'] = 'الجذر';
$lang['mediaupload'] = 'تحميل ملف إلى فضاء التسمية هنا. لإنشاء فضاءات تسمية فرعية، أضفها إلى بداية خانة تحميل باسم وافصل بينها باستخدام الفواصل';
$lang['mediaextchange'] = 'تم تغيير نوع الملف من .%s إلى .%s!';
$lang['mediaupload'] = 'تحميل ملف إلى فضاء التسمية هنا. لإنشاء فضاءات تسمية فرعية، أضفها إلى بداية خانة تحميل باسم وافصل بينها باستخدام الفاصلتان الرأسيتان.';
$lang['mediaextchange'] = 'غُيرت لاحقة الملف من .%s إلى .%s!';
$lang['reference'] = 'مراجع لـ';
$lang['ref_inuse'] = 'لا يمكن حذف الملف، لأنه مستخدم من قبل الصفحات التالية:';
$lang['ref_hidden'] = 'بعض المراجع لصفاحات لا تملك ترخيص برؤيتها';
$lang['hits'] = 'زوار';
$lang['quickhits'] = 'صفحات بهذا الاسم';
$lang['ref_hidden'] = 'بعض المراجع على صفحات لا تملك صلاحيات قراءتها';
$lang['hits'] = 'مرة';
$lang['quickhits'] = 'صفحات مطابقة';
$lang['toc'] = 'جدول المحتويات';
$lang['current'] = 'حالي';
$lang['yours'] = 'نسختك';
$lang['diff'] = 'مقارنة بالنسخة الحالية';
$lang['diff2'] = 'مقارنة بين النسخ المختارة';
$lang['diff'] = 'أظهر الاختلافات مع النسخة الحالية';
$lang['diff2'] = 'أظهر الاختلافات بين النسخ المحددة';
$lang['difflink'] = 'رابط إلى هذه المقارنة';
$lang['line'] = 'سطر';
$lang['breadcrumb'] = 'أثر';
$lang['youarehere'] = 'أنت هنا';
$lang['lastmod'] = 'آخر تعديل';
$lang['by'] = 'بواسطة';
$lang['deleted'] = 'تم حذف';
$lang['created'] = 'تم إنشاء';
$lang['restored'] = 'عودة لنسخة قديمة';
$lang['deleted'] = 'حذفت';
$lang['created'] = 'اُنشئت';
$lang['restored'] = 'استعيدت نسخة قديمة';
$lang['external_edit'] = 'تحرير خارجي';
$lang['summary'] = 'ملخص التحرير';
$lang['noflash'] = 'تحتاج إلى<a href="http://www.adobe.com/products/flashplayer/">ملحق فلاش أدوبي</a> لعرض هذا المحتوى.';
$lang['download'] = 'نزل Snippet';
$lang['mail_newpage'] = 'إضافة صفحة:';
$lang['mail_changed'] = 'تعديل صفحة:';
$lang['mail_subscribe_list'] = 'صفحات غيرت في النظاق:';
$lang['mail_new_user'] = 'مشترك جديد';
$lang['mail_upload'] = 'تحميل ملف:';
$lang['mail_subscribe_list'] = 'صفحات غيرت في النطاق:';
$lang['mail_new_user'] = 'مشترك جديد:';
$lang['mail_upload'] = 'رفع ملف:';
$lang['qb_bold'] = 'نص عريض';
$lang['qb_italic'] = 'نص مائل';
$lang['qb_underl'] = 'نص مسطر';
$lang['qb_code'] = 'نص برمجي';
$lang['qb_strike'] = 'نص مشطوب';
$lang['qb_h1'] = 'عنوان مستوى أول';
$lang['qb_h2'] = 'عنوان مستوى ثاني';
$lang['qb_h3'] = 'عنوان مستوى ثالث';
$lang['qb_h4'] = 'عنوان مستوى رابع';
$lang['qb_h5'] = 'عنوان مستوى خامس';
$lang['qb_h1'] = 'عنوان مستوى ١';
$lang['qb_h2'] = 'عنوان مستوى ٢';
$lang['qb_h3'] = 'عنوان مستوى ٣';
$lang['qb_h4'] = 'عنوان مستوى ٤';
$lang['qb_h5'] = 'عنوان مستوى ٥';
$lang['qb_h'] = 'الترويسة';
$lang['qb_hs'] = 'حدد الترويسة';
$lang['qb_hplus'] = 'ترويسة أعلى';
@ -192,29 +195,29 @@ $lang['qb_extlink'] = 'رابط خارجي';
$lang['qb_hr'] = 'سطر أفقي';
$lang['qb_ol'] = 'بند فى قائمة مرتبة';
$lang['qb_ul'] = 'بند فى قائمة غير مرتبة';
$lang['qb_media'] = 'إضافة صور و ملفات أخرى';
$lang['qb_sig'] = ضف توقيعك';
$lang['qb_smileys'] = 'الابتسامات';
$lang['qb_media'] = 'أضف صورا و ملفات أخرى';
$lang['qb_sig'] = درج التوقيع';
$lang['qb_smileys'] = 'الإبتسامات';
$lang['qb_chars'] = 'محارف خاصة';
$lang['upperns'] = 'انتقل للنطاق الأب';
$lang['admin_register'] = 'إضافة مشترك جديد';
$lang['admin_register'] = 'أضف مستخدما جديدا';
$lang['metaedit'] = 'تحرير البيانات الشمولية ';
$lang['metasaveerr'] = 'فشلت عملية كتابة البيانات الشمولية';
$lang['metasaveok'] = 'تم حفظ البيانت الشمولية';
$lang['img_backto'] = 'العودة إلى';
$lang['metasaveerr'] = 'فشلت كتابة البيانات الشمولية';
$lang['metasaveok'] = 'حُفظت البيانات الشمولية';
$lang['img_backto'] = 'عودة إلى';
$lang['img_title'] = 'العنوان';
$lang['img_caption'] = 'تنويه الصورة';
$lang['img_caption'] = 'وصف';
$lang['img_date'] = 'التاريخ';
$lang['img_fname'] = 'اسم الملف';
$lang['img_fsize'] = 'الحجم';
$lang['img_artist'] = 'المصور';
$lang['img_copyr'] = 'حقوق النسخ';
$lang['img_format'] = 'صيغ رسومية';
$lang['img_camera'] = 'آلة التصوير';
$lang['img_format'] = 'الهيئة';
$lang['img_camera'] = 'الكمرا';
$lang['img_keywords'] = 'كلمات مفتاحية';
$lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s';
$lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s';
$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بدخولك، لا يمكن اضافتك لقائمة الاشتراك';
$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك';
$lang['subscr_unsubscribe_success'] = 'أزيل %s من قائمة اشتراك %s';
$lang['subscr_unsubscribe_error'] = 'خطأ في إزالة %s من قائمة اشتراك %s';
$lang['subscr_already_subscribed'] = '%s مشترك مسبقا في %s';
@ -224,7 +227,7 @@ $lang['subscr_m_new_header'] = 'أضف اشتراكا';
$lang['subscr_m_current_header'] = 'الاشتراكات الحالية';
$lang['subscr_m_unsubscribe'] = 'ألغ الاشتراك';
$lang['subscr_m_subscribe'] = 'اشترك';
$lang['subscr_m_receive'] = 'استقبل';
$lang['subscr_m_receive'] = 'استقبال';
$lang['subscr_style_every'] = 'بريدا على كل تغيير';
$lang['subscr_style_digest'] = 'بريد ملخص عن تغييرات كل صفحة';
$lang['subscr_style_list'] = 'قائمة بالصفحات المتغيرة منذ آخر بريد';

View file

@ -242,7 +242,7 @@ $lang['i_wikiname'] = 'Název wiki';
$lang['i_enableacl'] = 'Zapnout ACL (doporučeno)';
$lang['i_superuser'] = 'Správce';
$lang['i_problems'] = 'Instalátor narazil na níže popsané problémy. Nelze pokračovat v instalaci, dokud je neopravíte.';
$lang['i_modified'] = 'Instalátor bude z bezpečnostních důvodů pracovat pouze s čistou a ještě neupravenou instalací DokuWiki. Buď znovu rozbalte souboru z instalačního balíčku nebo se zkuste poradit s <a href="http://dokuwiki.org/install">instrukcemi pro instalci DokuWiki</a>.';
$lang['i_modified'] = 'Instalátor bude z bezpečnostních důvodů pracovat pouze s čistou a ještě neupravenou instalací DokuWiki. Buď znovu rozbalte souboru z instalačního balíčku nebo se zkuste poradit s <a href="http://dokuwiki.org/install">instrukcemi pro instalaci DokuWiki</a>.';
$lang['i_funcna'] = 'PHP funkce <code>%s</code> není dostupná. Váš webhosting ji možná z nějakého důvodu vypnul.';
$lang['i_phpver'] = 'Verze vaší instalace PHP <code>%s</code> je nižší než požadovaná <code>%s</code>. Budete muset aktualizovat svou instalaci PHP.';
$lang['i_permfail'] = 'DokuWiki nemůže zapisovat do <code>%s</code>. Budete muset opravit práva k tomuto adresáři.';
@ -268,7 +268,7 @@ $lang['mu_toobig'] = 'příliš velké';
$lang['mu_ready'] = 'připraveno k načtení';
$lang['mu_done'] = 'hotovo';
$lang['mu_fail'] = 'selhalo';
$lang['mu_authfail'] = 'vypršla session';
$lang['mu_authfail'] = 'vypršela session';
$lang['mu_progress'] = '@PCT@% načten';
$lang['mu_filetypes'] = 'Povolené typy souborů';
$lang['mu_info'] = 'soubory načteny.';

View file

@ -1,3 +1,3 @@
====== Správa odběratelů změn ======
Tato stránka Vám umožnuje spravovat uživatele přihlášené k odběru změn aktuální stránky nebo jmenného prostoru.
Tato stránka Vám umožňuje spravovat uživatele přihlášené k odběru změn aktuální stránky nebo jmenného prostoru.

View file

@ -17,6 +17,7 @@
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
* @author Matthias Schulte <post@lupo49.de>
* @author Christian Wichmann <nospam@zone0.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@ -49,7 +50,7 @@ $lang['btn_delete'] = 'Löschen';
$lang['btn_back'] = 'Zurück';
$lang['btn_backlink'] = 'Links hierher';
$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
$lang['btn_subscribe'] = 'Änderungen abonnieren';
$lang['btn_subscribe'] = 'Aboverwaltung';
$lang['btn_profile'] = 'Benutzerprofil';
$lang['btn_reset'] = 'Zurücksetzen';
$lang['btn_resendpwd'] = 'Sende neues Passwort';
@ -107,27 +108,27 @@ $lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!
$lang['js']['searchmedia'] = 'Suche nach Dateien';
$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
$lang['js']['hidedetails'] = 'Details ausblenden';
$lang['js']['mediatitle'] = 'Link-Eigenschaften';
$lang['js']['mediadisplay'] = 'Linktyp';
$lang['js']['mediaalign'] = 'Ausrichtung';
$lang['js']['mediasize'] = 'Bildgröße';
$lang['js']['mediatarget'] = 'Linkziel';
$lang['js']['mediaclose'] = 'Schließen';
$lang['js']['mediainsert'] = 'Einfügen';
$lang['js']['mediadisplayimg'] = 'Bild anzeigen.';
$lang['js']['mediadisplaylnk'] = 'Nur den Link anzeigen.';
$lang['js']['mediasmall'] = 'Kleine Version';
$lang['js']['mediamedium'] = 'Mittelgroße Version';
$lang['js']['medialarge'] = 'Große Version';
$lang['js']['mediaoriginal'] = 'Original Version';
$lang['js']['medialnk'] = 'Link zu der Detailseite';
$lang['js']['mediadirect'] = 'Direkter Link zum Original';
$lang['js']['medianolnk'] = 'Kein link';
$lang['js']['medianolink'] = 'Keine Verlinkung des Bildes';
$lang['js']['medialeft'] = 'Bild nach links ausrichten.';
$lang['js']['mediaright'] = 'Bild nach rechts ausrichten.';
$lang['js']['mediacenter'] = 'Bild in der Mitte ausrichten';
$lang['js']['medianoalign'] = 'Keine Ausrichtung des Bildes.';
$lang['js']['mediatitle'] = 'Link-Eigenschaften';
$lang['js']['mediadisplay'] = 'Linktyp';
$lang['js']['mediaalign'] = 'Ausrichtung';
$lang['js']['mediasize'] = 'Bildgröße';
$lang['js']['mediatarget'] = 'Linkziel';
$lang['js']['mediaclose'] = 'Schließen';
$lang['js']['mediainsert'] = 'Einfügen';
$lang['js']['mediadisplayimg'] = 'Bild anzeigen.';
$lang['js']['mediadisplaylnk'] = 'Nur den Link anzeigen.';
$lang['js']['mediasmall'] = 'Kleine Version';
$lang['js']['mediamedium'] = 'Mittelgroße Version';
$lang['js']['medialarge'] = 'Große Version';
$lang['js']['mediaoriginal'] = 'Original Version';
$lang['js']['medialnk'] = 'Link zu der Detailseite';
$lang['js']['mediadirect'] = 'Direkter Link zum Original';
$lang['js']['medianolnk'] = 'Kein link';
$lang['js']['medianolink'] = 'Keine Verlinkung des Bildes';
$lang['js']['medialeft'] = 'Bild nach links ausrichten.';
$lang['js']['mediaright'] = 'Bild nach rechts ausrichten.';
$lang['js']['mediacenter'] = 'Bild in der Mitte ausrichten';
$lang['js']['medianoalign'] = 'Keine Ausrichtung des Bildes.';
$lang['js']['nosmblinks'] = 'Das Verlinken von Windows-Freigaben funktioniert nur im Microsoft Internet-Explorer.\nDer Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
$lang['js']['linkwiz'] = 'Link-Assistent';
$lang['js']['linkto'] = 'Link zu:';
@ -148,7 +149,6 @@ $lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)
$lang['deletesucc'] = 'Die Datei "%s" wurde gelöscht.';
$lang['deletefail'] = '"%s" konnte nicht gelöscht werden. Keine Berechtigung?.';
$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht. Sie wird noch verwendet.';
$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht. Sie wird noch verwendet.';
$lang['namespaces'] = 'Namensräume';
$lang['mediafiles'] = 'Vorhandene Dateien in';
$lang['accessdenied'] = 'Du hast keinen Zugriff auf diese Seite';
@ -225,22 +225,22 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Format';
$lang['img_camera'] = 'Kamera';
$lang['img_keywords'] = 'Schlagwörter';
$lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementenliste von %s hinzugefügt';
$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementenliste von %s';
$lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementenliste von %s hinzugefügt';
$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementenliste von %s';
$lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden';
$lang['subscr_unsubscribe_success'] = 'Die Seite %s wurde von der Abonnementenliste von %s entfernt';
$lang['subscr_unsubscribe_error'] = 'Fehler beim Entfernen von %s von der Abonnementenliste von %s';
$lang['subscr_already_subscribed'] = '%s ist bereits auf der Abonnementenliste von %s';
$lang['subscr_not_subscribed'] = '%s ist nicht auf der Abonnementenliste von %s';
$lang['subscr_m_not_subscribed'] = 'Du hast kein Abonnement von dieser Seite oder dem Namensraum.';
$lang['subscr_m_new_header'] = 'Abonnementen hinzufügen';
$lang['subscr_m_current_header'] = 'Aktive Abonnements';
$lang['subscr_m_unsubscribe'] = 'Abbestellen';
$lang['subscr_m_subscribe'] = 'Abonnieren';
$lang['subscr_m_receive'] = 'Erhalten';
$lang['subscr_style_every'] = 'E-Mail bei jeder Änderung';
$lang['subscr_style_digest'] = 'E-Mail mit zusammengefasster Übersicht der Seitenänderungen (alle %.2f Tage)';
$lang['subscr_style_list'] = 'Auflistung aller geänderten Seiten seit der letzten E-Mail (alle %.2f Tage)';
$lang['subscr_unsubscribe_error'] = 'Fehler beim Entfernen von %s von der Abonnementenliste von %s';
$lang['subscr_already_subscribed'] = '%s ist bereits auf der Abonnementenliste von %s';
$lang['subscr_not_subscribed'] = '%s ist nicht auf der Abonnementenliste von %s';
$lang['subscr_m_not_subscribed'] = 'Du hast kein Abonnement von dieser Seite oder dem Namensraum.';
$lang['subscr_m_new_header'] = 'Abonnementen hinzufügen';
$lang['subscr_m_current_header'] = 'Aktive Abonnements';
$lang['subscr_m_unsubscribe'] = 'Abbestellen';
$lang['subscr_m_subscribe'] = 'Abonnieren';
$lang['subscr_m_receive'] = 'Erhalten';
$lang['subscr_style_every'] = 'E-Mail bei jeder Änderung';
$lang['subscr_style_digest'] = 'E-Mail mit zusammengefasster Übersicht der Seitenänderungen (alle %.2f Tage)';
$lang['subscr_style_list'] = 'Auflistung aller geänderten Seiten seit der letzten E-Mail (alle %.2f Tage)';
$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wende dich an den Admin.';
$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wende dich an den Admin.';
$lang['i_chooselang'] = 'Wähle deine Sprache';

View file

@ -1,7 +1,7 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
Das sind die Änderungen:
Üersicht der Änderungen:
--------------------------------------------------------
@DIFF@
@ -10,10 +10,10 @@ Das sind die
Alte Revision: @OLDPAGE@
Neue Revision: @NEWPAGE@
Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
@DOKUWIKIURL@, besuchen dann
@SUBSCRIBE@
und klicke auf den Link 'Änderungen abbestellen'.
und klicke auf den Link 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf

View file

@ -1,22 +1,22 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
Das sind die Änderungen:
Übersicht der Änderungen:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
Datum : @DATE@
Benutzer : @USER@
Übersicht: @SUMMARY@
Datum: @DATE@
Benutzer: @USER@
Zusammenfassung: @SUMMARY@
Alte Revision: @OLDPAGE@
Neue Revision: @NEWPAGE@
Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
@DOKUWIKIURL@, besuchen dann
@DOKUWIKIURL@, besuche dann
@NEWPAGE@
und klicke auf den Link 'Änderungen abbestellen'.
und klicke auf den Link 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf

View file

@ -17,6 +17,8 @@
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
* @author Niels Lange <niels@boldencursief.nl>
* @author Christian Wichmann <nospam@zone0.de>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@ -49,12 +51,12 @@ $lang['btn_delete'] = 'Löschen';
$lang['btn_back'] = 'Zurück';
$lang['btn_backlink'] = 'Links hierher';
$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
$lang['btn_subscribe'] = 'Änderungen abonnieren';
$lang['btn_subscribe'] = 'Aboverwaltung';
$lang['btn_profile'] = 'Benutzerprofil';
$lang['btn_reset'] = 'Zurücksetzen';
$lang['btn_resendpwd'] = 'Sende neues Passwort';
$lang['btn_draft'] = 'Entwurf bearbeiten';
$lang['btn_recover'] = 'Entwurf wieder herstellen';
$lang['btn_recover'] = 'Entwurf wiederherstellen';
$lang['btn_draftdel'] = 'Entwurf löschen';
$lang['btn_revert'] = 'Wiederherstellen';
$lang['loggedinas'] = 'Angemeldet als';

View file

@ -1,7 +1,7 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
Das sind die Änderungen:
Übersicht der Änderungen:
--------------------------------------------------------
@DIFF@
@ -13,7 +13,7 @@ Neue Revision: @NEWPAGE@
Um das Abonnement für diese Seite aufzulösen, melden Sie sich im Wiki an
@DOKUWIKIURL@, besuchen dann
@SUBSCRIBE@
und klicken auf den Link 'Änderungen abbestellen'.
und klicken auf den Link 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf

View file

@ -1,22 +1,22 @@
Hallo!
Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
Das sind die Änderungen:
Übersicht der Änderungen:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
Datum : @DATE@
Benutzer : @USER@
Übersicht: @SUMMARY@
Datum: @DATE@
Benutzer: @USER@
Zusammenfassung: @SUMMARY@
Alte Revision: @OLDPAGE@
Neue Revision: @NEWPAGE@
Um das Abonnement für diese Seite aufzulösen, melde Sie sich im Wiki an
Um das Abonnement für diese Seite aufzulösen, melden Sie sich im Wiki an
@DOKUWIKIURL@, besuchen dann
@NEWPAGE@
und klicken auf die Taste 'Änderungen abbestellen'.
und klicken auf die Taste 'Aboverwaltung'.
--
Diese Mail kommt vom DokuWiki auf

View file

@ -316,4 +316,4 @@ $lang['seconds'] = '%d seconds ago';
$lang['wordblock'] = 'Your change was not saved because it contains blocked text (spam).';
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -211,4 +211,4 @@ $lang['js']['del_confirm']= 'Kas kustutame selle kirje?';
#$lang['unsubscribe_success'] = '';
#$lang['unsubscribe_error'] = '';
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -1,6 +1,6 @@
====== גירסה עדכנית יותר של הקובץ קיימת ======
====== קיימת גרסה עדכנית יותר של הקובץ ======
גירסה עדכנית יותר של המסמך קיימת. דבר זה קורה כאשר משתמש אחר שינה את המסמך בזמן שערכת אותו.
ישנה גרסה עדכנית יותר של המסמך. מצב כזה קורה כאשר משתמש אחר שינה את המסמך בזמן שערכת אותו.
מומלץ לעיין בהבדלים תחת הודעה ולאחר מכן להחליט איזו גירסה כדאי לשמור. לחיצה על הכפתור "שמור" תשמור את הגרסה שערכת. לחיצה על הכפתור "בטל" תשמור את הגרסה הקיימת.
מומלץ לעיין בהבדלים המופיעים להלן ולאחר מכן להחליט איזו גרסה כדאי לשמור. לחיצה על הכפתור "שמירה" תשמור את הגרסה שערכת. לחיצה על הכפתור "ביטול" תשמור את הגרסה הקיימת.

View file

@ -1,3 +1,3 @@
====== הרשאה נדחתה ======
אנו מצטערים אך אין לך הרשאות מתאימות כדי להמשיך. אולי שכחת להכנס למערכת?
אנו מצטערים אך אין לך הרשאות מתאימות כדי להמשיך. אולי שכחת להיכנס למערכת?

View file

@ -1,5 +1,5 @@
====== נמצא קובץ טיוטא ======
====== נמצא קובץ טיוטה ======
העריכה האחרונה שבוצעה לדף זה לא הסתימה כהלכה. DokuWiki שמר באופן אוטומטי טיוטה של העבודה ובאפשרותך להשתמש בה כדי להמשיך את העריכה. ניתן לראות מטה את המידע שנשמר מהפעם הקודמת.
העריכה האחרונה שבוצעה לדף זה לא הושלמה כראוי. DokuWiki שמר באופן אוטומטי טיוטה של העבודה ובאפשרותך להשתמש בה כדי להמשיך את העריכה. ניתן לראות להלן את הנתונים שנשמרו מהפעם הקודמת.
באפשרותך לבחור ב//שחזור הטיוטה// של אותה עריכה //מחיקת הטיוטה// או //ביטול// העריכה כליל.

View file

@ -1 +1 @@
עריכת הדף ולחיצה על הכפתור "שמור" תעדכן את תוכנו. מומלץ לעיין בדף ה[[wiki:syntax|תחביר]] כדי להכיר את כללי תחביר הויקי. נא לערוך את הדף רק אם הדבר נעשה כדי **לשפר** אותו. אם העריכה היא לצורך התנסות מומלץ לבקר ב[[playground:playground|ארגז החול]].
עריכת הדף ולחיצה על הלחצן "שמירה" תעדכן את תוכנו. מומלץ לעיין בדף ה[[wiki:syntax|תחביר]] כדי להכיר את כללי תחביר הוויקי. נא לערוך את הדף רק אם הדבר נעשה כדי **לשפר** אותו. אם העריכה היא לצורך התנסות מומלץ לבקר ב[[playground:playground|ארגז החול]].

View file

@ -1,2 +1,2 @@
**הדף שנפתח הוא גרסה ישנה של המסמך!** לחיצה על הכפתור "שמור" תשחזר את המסמך לגרסה המוצגת כעת.
**הדף שנפתח הוא גרסה ישנה של המסמך!** לחיצה על הלחצן "שמירה" תשחזר את המסמך לגרסה המוצגת כעת.
----

View file

@ -1,4 +1,4 @@
====== אינדקס ======
====== מפת אתר ======
זהו קובץ אינדקס הנמצא מעל לכל הדפים המאורגנים ב[[ויקי:דוקיוויקי]].
זהו קובץ מפת אתר הנמצא מעל לכל הדפים המאורגנים ב[[ויקי:דוקיוויקי]].

View file

@ -1,13 +1,13 @@
<p>דף זה מסייע להתקנה וההגדרה הראשוניות של
<a href="http://dokuwiki.org">Dokuwiki</a>. מידע נוסף על מתקין זה זמין בדף
<p>דף זה מסייע בהליכי ההתקנה וההגדרה הראשוניים של
<a href="http://dokuwiki.org">Dokuwiki</a>. מידע נוסף על תכנית התקנה זו זמין בדף
<a href="http://dokuwiki.org/installer">התיעוד שלו</a>.</p>
<p>DokuWiki עושה שימוש בקבצים רגילים לשמירת דפי ויקי ומידע נוסף הקשור לדפים אלו (לדוגמה תמונות, רשימות חיפוש, גרסאות קודמות וכו').
לתפקוד תקין DokuWiki <strong>חייב</strong> גישה לכתיבה לתיקיות המכילות קבצים אלו. מתקין זה אינו יכול לקבוע הרשאות לתיקיות.
פעולה זו צריכה בד"כ להתבצע ישירות משורת הפקודה או במקרה שנעשה שימוש בשרת מארח דרך FTP או מנשק הניהול של המארח (cPanell לדוגמה).</p>
<p>DokuWiki עושה שימוש בקבצים רגילים לשמירת דפי ויקי ומידע נוסף הקשור לדפים אלו (לדוגמה: תמונות, רשימות חיפוש, גרסאות קודמות וכו׳).
לצורך תפקוד תקין DokuWiki <strong>חייב</strong> גישה לכתיבה לתיקיות המכילות קבצים אלו. תכנית התקנה זו אינה יכולה להגדיר הרשאות לתיקיות.
פעולה זו צריכה בד״כ להתבצע ישירות משורת הפקודה או במקרה שנעשה שימוש בשרת מארח דרך FTP או מנשק הניהול של המארח (cPanell לדוגמה).</p>
<p>מתקין זה יגדיר את תצורת ה-<acronym title="access control list">ACL</acronym> ב-DokuWiki שלך
<p>מתקין זה יגדיר את תצורת ה־<acronym title="access control list">ACL</acronym> ב-DokuWiki שלך
, זה בתורו מאפשר גישת מנהל לתפריט הניהול של DokuWiki כדי להתקין הרחבות, לנהל משתמשים, לנהל גישות לדפי ויקי ושינויים בהגדרות התצורה.
אין הוא הכרחי לתפקוד DokuWiki אך הוא יהפוך את Dokuwiki קל יותר לניהול.</p>
אין הוא הכרחי לתפקוד DokuWiki אך הוא יהפוך את Dokuwiki לפשוט יותר לניהול.</p>
<p>על משתמשים מנוסים או כאלו עם דרישות מיוחדות להתקנה להשתמש בקישורים אלו לפרטים בנוגע ל<a href="http://dokuwiki.org/install">הוראות התקנה</a> ו<a href="http://dokuwiki.org/config">הגדרות תצורה</a>.</p>
<p>על משתמשים מנוסים או כאלו עם דרישות מיוחדות להתקנה להשתמש בקישורים אלו לפרטים בנוגע ל<a href="http://dokuwiki.org/install">הוראות התקנה</a> ול<a href="http://dokuwiki.org/config">הגדרות תצורה</a>.</p>

View file

@ -10,6 +10,7 @@
* @author Dotan Kamber <kamberd@yahoo.com>
* @author Moshe Kaplan <mokplan@gmail.com>
* @author Yaron Yogev <yaronyogev@gmail.com>
* @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'rtl';
@ -18,132 +19,153 @@ $lang['doublequoteclosing'] = '”';
$lang['singlequoteopening'] = '';
$lang['singlequoteclosing'] = '';
$lang['apostrophe'] = '\'';
$lang['btn_edit'] = 'עריכה';
$lang['btn_source'] = 'הצג את מקור הדף';
$lang['btn_show'] = 'הצג דף';
$lang['btn_edit'] = 'עריכת דף זה';
$lang['btn_source'] = 'הצגת מקור הדף';
$lang['btn_show'] = 'הצגת דף';
$lang['btn_create'] = 'יצירת דף';
$lang['btn_search'] = פש';
$lang['btn_save'] = 'שמור';
$lang['btn_search'] = יפוש';
$lang['btn_save'] = 'שמירה';
$lang['btn_preview'] = 'תצוגה מקדימה';
$lang['btn_top'] = 'חזור למעלה';
$lang['btn_newer'] = '<< יותר חדש';
$lang['btn_older'] = 'פחות חדש >>';
$lang['btn_top'] = 'חזרה למעלה';
$lang['btn_newer'] = '<< חדש יותר';
$lang['btn_older'] = 'פחות חדש >>';
$lang['btn_revs'] = 'גרסאות קודמות';
$lang['btn_recent'] = 'שינויים אחרונים';
$lang['btn_upload'] = 'העלה';
$lang['btn_cancel'] = טל';
$lang['btn_index'] = 'אינדקס';
$lang['btn_upload'] = 'העלאה';
$lang['btn_cancel'] = יטול';
$lang['btn_index'] = 'מפת האתר';
$lang['btn_secedit'] = 'עריכה';
$lang['btn_login'] = 'כניסה';
$lang['btn_logout'] = 'יציאה';
$lang['btn_admin'] = 'מנהל';
$lang['btn_update'] = 'עדכן';
$lang['btn_delete'] = 'מחק';
$lang['btn_back'] = 'חזור';
$lang['btn_admin'] = 'ניהול';
$lang['btn_update'] = 'עדכון';
$lang['btn_delete'] = 'מחיקה';
$lang['btn_back'] = 'חזרה';
$lang['btn_backlink'] = 'קישורים לכאן';
$lang['btn_backtomedia'] = 'לחזור לבחירת קובץ מדיה';
$lang['btn_subscribe'] = 'עקוב אחרי שינוים';
$lang['btn_unsubscribe'] = 'הפסק לעקוב';
$lang['btn_subscribens'] = 'הרשמה לשינויים במרחב השם';
$lang['btn_unsubscribens'] = 'הסרת הרשמה לשינויים במחב השם';
$lang['btn_profile'] = 'עדכן פרופיל';
$lang['btn_backtomedia'] = 'חזרה לבחירת קובץ מדיה';
$lang['btn_subscribe'] = 'מעקב אחרי שינוים';
$lang['btn_profile'] = 'עדכון הפרופיל';
$lang['btn_reset'] = 'איפוס';
$lang['btn_resendpwd'] = 'שלח סיסמה חדשה';
$lang['btn_resendpwd'] = 'שליחת ססמה חדשה';
$lang['btn_draft'] = 'עריכת טיוטה';
$lang['btn_recover'] = 'שחזור טיוטה';
$lang['btn_draftdel'] = 'מחיקת טיוטה';
$lang['btn_revert'] = 'שחזר';
$lang['loggedinas'] = 'רשום כ-';
$lang['btn_revert'] = 'שחזור';
$lang['loggedinas'] = 'נכנסת בשם';
$lang['user'] = 'שם משתמש';
$lang['pass'] = 'סיסמה';
$lang['newpass'] = 'סיסמה חדשה';
$lang['oldpass'] = שר את הסיסמה הנוכחית';
$lang['passchk'] = 'שוב';
$lang['remember'] = 'זכור אותי';
$lang['pass'] = 'ססמה';
$lang['newpass'] = 'ססמה חדשה';
$lang['oldpass'] = ישור הססמה הנוכחית';
$lang['passchk'] = 'פעם נוספת';
$lang['remember'] = 'שמירת הפרטים שלי';
$lang['fullname'] = 'שם מלא';
$lang['email'] = 'דוא"ל';
$lang['email'] = 'דוא״ל';
$lang['register'] = 'הרשמה';
$lang['profile'] = 'פרופיל';
$lang['badlogin'] = 'סליחה, שם המשתמש או הסיסמה שגויים';
$lang['minoredit'] = 'שינוים מינוריים';
$lang['draftdate'] = 'טיוטה נשמרה ב-';
$lang['profile'] = 'פרופיל המשתמש';
$lang['badlogin'] = 'שם המשתמש או הססמה שגויים, עמך הסליחה';
$lang['minoredit'] = 'שינוים מזעריים';
$lang['draftdate'] = 'הטיוטה נשמרה אוטומטית ב־';
$lang['nosecedit'] = 'הדף השתנה בינתיים, הקטע שערכת אינו מעודכן - העמוד כולו נטען במקום זאת.';
$lang['regmissing'] = 'סליחה, עליך למלא את כל השדות';
$lang['reguexists'] = 'סליחה, משתמש בשם זה כבר נרשם';
$lang['regsuccess'] = רשמה הצליחה, המשתמש נרשם והודעה נשלחה בדואר';
$lang['regsuccess2'] = רשמה הצליחה, המשתמש נרשם.';
$lang['regmailfail'] = 'שליחת הודעת הדואר כשלה, נא ליצור קשר עם מנהל האתר';
$lang['regbadmail'] = 'כתובת דואר כנראה לא תקפה, אם לא כך היא יש ליצור קשר עם מנהל האתר';
$lang['regbadpass'] = 'שתי הסיסמות הן לא זהות, נא לנסות שוב';
$lang['regpwmail'] = 'סיסמת הדוקוויקי שלך';
$lang['reghere'] = 'עדיין ללא שם-משתמש? ההרשמה כאן';
$lang['regmissing'] = 'עליך למלא את כל השדות, עמך הסליחה.';
$lang['reguexists'] = 'משתמש בשם זה כבר נרשם, עמך הסליחה.';
$lang['regsuccess'] = הרשמה הצליחה, המשתמש נרשם והודעה נשלחה בדוא״ל.';
$lang['regsuccess2'] = הרשמה הצליחה, המשתמש נוצר.';
$lang['regmailfail'] = 'שליחת הודעת הדוא״ל כשלה, נא ליצור קשר עם מנהל האתר!';
$lang['regbadmail'] = 'יתכן כי כתובת הדוא״ל אינה תקפה, אם לא כך הדבר ליצור קשר עם מנהל האתר';
$lang['regbadpass'] = 'שתי הססמאות אינן זהות זו לזו, נא לנסות שוב.';
$lang['regpwmail'] = 'ססמת הדוקוויקי שלך';
$lang['reghere'] = 'עדיין אין לך חשבון? ההרשמה כאן';
$lang['profna'] = 'בוויקי הזה לא ניתן לשנות פרופיל';
$lang['profnochange'] = 'אין שינוים, פרופיל לא עודכן';
$lang['profnoempty'] = 'שם וכתובת דוא"ל לא יכולים להיות ריקים';
$lang['profchanged'] = 'פרופיל עודכן בהצלחה';
$lang['pwdforget'] = 'שכחת סיסמה? קבל חדשה';
$lang['resendna'] = 'הוויקי הזה לא תומך בחידוש סיסמה';
$lang['resendpwd'] = 'שלח סיסמה חדשה עבור';
$lang['resendpwdmissing'] = 'סליחה, עליך למלא את כל השדות';
$lang['resendpwdnouser'] = 'סליחה, משתמש בשם זה לא נמצא';
$lang['resendpwdbadauth'] = 'סליחה, קוד אימות זה אינו תקף. יש לודא כי נעשה שימוש במלוא קישור האימות.';
$lang['resendpwdconfirm'] = 'קישור אימות נשלח בדוא"ל.';
$lang['resendpwdsuccess'] = 'סיסמה חדשה נשלחה בדואר';
$lang['license'] = 'למעט מקרים בהם צוין אחרת, התוכן בוויקי זה זמין לפי הרשיון הבא:';
$lang['licenseok'] = 'שים לב: עריכת דף זה מהווה הסכמה מצידך להצגת התוכן שהוספת לפי הרשיון הבא:';
$lang['searchmedia'] = 'חפש שם קובץ:';
$lang['txt_upload'] = 'בחר קובץ להעלות';
$lang['txt_filename'] = 'הכנס שם לוויקי (בחירה)';
$lang['txt_overwrt'] = 'לכתוב במקום קובץ קיים';
$lang['profnochange'] = 'אין שינויים, הפרופיל לא עודכן';
$lang['profnoempty'] = 'השם וכתובת הדוא״ל לא יכולים להיות ריקים';
$lang['profchanged'] = 'הפרופיל עודכן בהצלחה';
$lang['pwdforget'] = 'שכחת את הססמה שלך? ניתן לקבל חדשה';
$lang['resendna'] = 'הוויקי הזה אינו תומך בחידוש ססמה';
$lang['resendpwd'] = 'שליחת ססמה חדשה עבור';
$lang['resendpwdmissing'] = 'עליך למלא את כל השדות, עמך הסליחה.';
$lang['resendpwdnouser'] = 'משתמש בשם זה לא נמצא במסד הנתונים, עמך הסליחה.';
$lang['resendpwdbadauth'] = 'קוד אימות זה אינו תקף. יש לוודא כי נעשה שימוש בקישור האימות המלא, עמך הסליחה.';
$lang['resendpwdconfirm'] = 'נשלח קישור לאימות נשלח בדוא״ל.';
$lang['resendpwdsuccess'] = 'נשלחה ססמה חדשה בדוא״ל';
$lang['license'] = 'למעט מקרים בהם צוין אחרת, התוכן בוויקי זה זמין לפי הרישיון הבא:';
$lang['licenseok'] = 'נא לשים לב: עריכת דף זה מהווה הסכמה מצדך להצגת התוכן שהוספת בהתאם הרישיון הבא:';
$lang['searchmedia'] = 'חיפוש שם קובץ:';
$lang['searchmedia_in'] = 'חיפוש תחת %s';
$lang['txt_upload'] = 'בחירת קובץ להעלות';
$lang['txt_filename'] = 'העלאה בשם (נתון לבחירה)';
$lang['txt_overwrt'] = 'שכתוב על קובץ קיים';
$lang['lockedby'] = 'נעול על ידי';
$lang['lockexpire'] = 'נעילה פגה';
$lang['willexpire'] = 'נעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאתחל את הנעילה שנית';
$lang['js']['notsavedyet'] = "קיימים שינויים שטרם נשמרו ואשר יאבדו \n האם להמשיך?";
$lang['rssfailed'] = 'כשל ב-RSS';
$lang['nothingfound'] = 'לא נמצאו תוצאות';
$lang['mediaselect'] = 'בחירת קובץ מדיה';
$lang['fileupload'] = 'העלאת קובץ מדיה';
$lang['uploadsucc'] = 'העלאת הקובץ בוצעה בהצלחה';
$lang['uploadfail'] = 'קרתה שגיאה בעת העלאת הקובץ. תיתכן ובעייה זו נוצרה עקב הרשאות שגיות.';
$lang['uploadwrong'] = 'העלאה לא אושרה. קבצים בסיומת זו אסורים';
$lang['uploadexist'] = 'הקובץ כבר קיים. פעולה בוטלה';
$lang['uploadbadcontent'] = 'התוכן שהועלה לא תאם את הסיומת %s של הקובץ.';
$lang['uploadspam'] = 'ההעלאה נחסמה על ידי הרשימה השחורה של הספאם.';
$lang['uploadxss'] = 'ההעלאה נחסמה בשל חשד לתוכן זדוני.';
$lang['uploadsize'] = 'הקובץ שהועלה היה גדול מדי. (מקסימום %s)';
$lang['deletesucc'] = 'קובץ %s נמחק';
$lang['deletefail'] = 'לא יכולתי למחוק "%s" -- בדקו הרשאות';
$lang['mediainuse'] = 'קובץ "%s" לא נמחק - הוא עדיין בשימוש';
$lang['namespaces'] = 'שמות מתחם';
$lang['mediafiles'] = 'קבצים זמינים ב-';
$lang['js']['searchmedia'] = 'חיפוש קבצים';
$lang['js']['keepopen'] = 'השאר חלון פתוח בבחירה';
$lang['js']['hidedetails'] = 'הסתר פרטים';
$lang['js']['nosmblinks'] = ':( קישור למערכת קבצים של חלונות פועל רק בדפדפן אינטרנט אקספלורר.
זה בסדר, אין צורך לעבור. אפשר להעתיק ולהדביק את הקישור';
$lang['lockexpire'] = 'הנעילה פגה';
$lang['willexpire'] = 'הנעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאפס את מד משך הנעילה.';
$lang['js']['notsavedyet'] = 'שינויים שלא נשמרו ילכו לאיבוד.';
$lang['js']['searchmedia'] = 'חיפוש אחר קבצים';
$lang['js']['keepopen'] = 'השארת חלון פתוח על הבחירה';
$lang['js']['hidedetails'] = 'הסתרת פרטים';
$lang['js']['mediatitle'] = 'הגדרות הקישור';
$lang['js']['mediadisplay'] = 'סוג הקישור';
$lang['js']['mediaalign'] = 'יישור';
$lang['js']['mediasize'] = 'גודל התמונה';
$lang['js']['mediatarget'] = 'יעד הקישור';
$lang['js']['mediaclose'] = 'סגירה';
$lang['js']['mediainsert'] = 'הוספה';
$lang['js']['mediadisplayimg'] = 'הצגת התמונה.';
$lang['js']['mediadisplaylnk'] = 'הצגת הקישור בלבד.';
$lang['js']['mediasmall'] = 'גרסה קטנה';
$lang['js']['mediamedium'] = 'גרסה בינונית';
$lang['js']['medialarge'] = 'גרסה גדולה';
$lang['js']['mediaoriginal'] = 'הגרסה המקורית';
$lang['js']['medialnk'] = 'קישור לעמוד הפרטים';
$lang['js']['mediadirect'] = 'הקישור הישיר למקור';
$lang['js']['medianolnk'] = 'אין קישור';
$lang['js']['medianolink'] = 'אין לקשר לתמונה';
$lang['js']['medialeft'] = 'יישור התמונה לשמאל.';
$lang['js']['mediaright'] = 'יישור התמונה לימין.';
$lang['js']['mediacenter'] = 'מרכוז התמונה.';
$lang['js']['medianoalign'] = 'לא להשתמש ביישור.';
$lang['js']['nosmblinks'] = 'קישור לכונני שיתוף של Windows עובד רק באמצעות Microsoft Internet Explorer.
עדיין ניתן להעתיק ולהדביק את הקישור.';
$lang['js']['linkwiz'] = 'אשף הקישורים';
$lang['js']['linkto'] = 'קשר אל:';
$lang['js']['linkto'] = ישור אל:';
$lang['js']['del_confirm'] = 'באמת למחוק?';
$lang['js']['mu_btn'] = 'העלאת קבצים מרובים';
$lang['mediausage'] = 'השתמש בתחביר הבא להתיחסות אל קובץ זה:';
$lang['mediaview'] = 'הצג את הקובץ המקורי';
$lang['js']['mu_btn'] = 'העלאת מספר קבצים יחד';
$lang['rssfailed'] = 'אירע כשל בעת קבלת הזנה זו:';
$lang['nothingfound'] = 'לא נמצאו תוצאות.';
$lang['mediaselect'] = 'קובצי מדיה';
$lang['fileupload'] = 'העלאת קובצי מדיה';
$lang['uploadsucc'] = 'ההעלאה הושלמה בהצלחה';
$lang['uploadfail'] = 'אירעה שגיאה בעת העלאת הקובץ. היתכן שתקלה זו נוצרה עקב הרשאות שגיות?';
$lang['uploadwrong'] = 'ההעלאה לא אושרה. קבצים בסיומת זו אסורים!';
$lang['uploadexist'] = 'הקובץ כבר קיים. הפעולה בוטלה.';
$lang['uploadbadcontent'] = 'התוכן שהועלה לא תאם את הסיומת %s של הקובץ.';
$lang['uploadspam'] = 'ההעלאה נחסמה על ידי רשימת חסימת הספאם.';
$lang['uploadxss'] = 'ההעלאה נחסמה בשל חשד לתוכן זדוני.';
$lang['uploadsize'] = 'הקובץ שהועלה היה גדול מדי. (%s לכל היותר)';
$lang['deletesucc'] = 'הקובץ %s נמחק.';
$lang['deletefail'] = 'לא ניתן למחוק את "%s" -- נא לבדוק את ההרשאות.';
$lang['mediainuse'] = 'הקובץ "%s" לא נמחק - הוא עדיין בשימוש.';
$lang['namespaces'] = 'שמות מתחם';
$lang['mediafiles'] = 'קבצים זמינים תחת';
$lang['accessdenied'] = 'אין לך הרשאה לצפות בדף זה.';
$lang['mediausage'] = 'יש להשתמש בתחביר הבא כדי להפנות לקובץ זה:';
$lang['mediaview'] = 'הצגת הקובץ המקורי';
$lang['mediaroot'] = 'root';
$lang['mediaupload'] = 'כאן ניתן להעלות קובץ למרחב השמות הנוכחי. ליצירת תתי-מרחבי שמות צרפם ב-"העלה" לתחילת שם הקובץ מופרדים בפסיקים';
$lang['mediaextchange'] = 'סיומת הקובץ השתנתה מ-.%s ל-.%s!';
$lang['reference'] = 'קישורים ל';
$lang['mediaupload'] = 'כאן ניתן להעלות קובץ למרחב השם הנוכחי. ליצירת תת־מרחבי שם יש לצרף אותם לתחילת שם הקובץ, מופרדים בפסיקים, בשם הקובץ תחת "העלאה בתור".';
$lang['mediaextchange'] = 'סיומת הקובץ השתנתה מ־‎.%s ל־‎.%s!';
$lang['reference'] = 'הפניות אל';
$lang['ref_inuse'] = 'לא ניתן למחוק קובץ זה, כיוון שהדפים הבאים עדיין משתמשים בו:';
$lang['ref_hidden'] = 'יש קישורים לדפים ללא הרשאת קריאה';
$lang['hits'] = 'פגיעות';
$lang['quickhits'] = 'דפים שנמצאו';
$lang['ref_hidden'] = 'חלק מההפניות נמצאות בדפים שאין לך הרשאות לקרוא אותם';
$lang['hits'] = 'ביקורים';
$lang['quickhits'] = 'שמות דפים שנמצאו';
$lang['toc'] = 'תוכן עניינים';
$lang['current'] = 'גירסה נוכחית';
$lang['current'] = 'הגרסה הנוכחית';
$lang['yours'] = 'הגרסה שלך';
$lang['diff'] = 'הצג שינוים מגרסה זו ועד הנוכחית';
$lang['diff'] = 'הצגת שינוים מגרסה זו ועד הנוכחית';
$lang['diff2'] = 'הצגת הבדלים בין הגרסאות שנבחרו';
$lang['difflink'] = 'קישור לתצוגה השוואה זו';
$lang['line'] = 'שורה';
$lang['breadcrumb'] = 'ביקורים אחרונים';
$lang['youarehere'] = 'אתה נמצא כאן';
$lang['lastmod'] = 'שונה לאחרונה ב';
$lang['youarehere'] = 'זהו מיקומך';
$lang['lastmod'] = 'מועד השינוי האחרון';
$lang['by'] = 'על ידי';
$lang['deleted'] = 'נמחק';
$lang['created'] = 'נוצר';
@ -151,9 +173,10 @@ $lang['restored'] = 'שוחזר';
$lang['external_edit'] = 'עריכה חיצונית';
$lang['summary'] = 'תקציר העריכה';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">תוסף פלאש לדפדפן</a> נדרש כדי להציג תוכן זה.';
$lang['download'] = 'הורד מקטע';
$lang['download'] = 'הורדת מקטע';
$lang['mail_newpage'] = 'דף נוסף:';
$lang['mail_changed'] = 'דף שונה:';
$lang['mail_subscribe_list'] = 'דפים שהשתנו במרחב השם:';
$lang['mail_new_user'] = 'משתמש חדש:';
$lang['mail_upload'] = 'קובץ הועלה:';
$lang['qb_bold'] = 'טקסט מודגש';
@ -167,7 +190,7 @@ $lang['qb_h3'] = 'כותרת רמה 3';
$lang['qb_h4'] = 'כותרת רמה 4';
$lang['qb_h5'] = 'כותרת רמה 5';
$lang['qb_h'] = 'כותרת';
$lang['qb_hs'] = 'בחירת כותרת';
$lang['qb_hs'] = 'כותרת נבחרת';
$lang['qb_hplus'] = 'כותרת ברמה גבוהה יותר';
$lang['qb_hminus'] = 'כותרת ברמה נמוכה יותר';
$lang['qb_hequal'] = 'כותרת באותה רמה';
@ -175,73 +198,85 @@ $lang['qb_link'] = 'קישור פנימי';
$lang['qb_extlink'] = 'קישור חיצוני';
$lang['qb_hr'] = 'קו אופקי';
$lang['qb_ol'] = 'איבר ברשימה ממוספרת';
$lang['qb_ul'] = בר ברשימה לא ממוספרת';
$lang['qb_media'] = 'תמונות או קובץ אחר';
$lang['qb_sig'] = זנת חתימה';
$lang['qb_smileys'] = 'פרצופונים';
$lang['qb_chars'] = 'סימנים מיוחדים';
$lang['upperns'] = 'עבור למרחב השם שברמה שמעל הנוכחית';
$lang['admin_register'] = 'להוסיף משתמש חדש';
$lang['metaedit'] = 'ערוך נתונים';
$lang['metasaveerr'] = 'כשל בשמירת נתונים';
$lang['metasaveok'] = 'נתונים נשמרו';
$lang['img_backto'] = 'הזור ל';
$lang['img_title'] = 'כותרת';
$lang['img_caption'] = 'תיאור';
$lang['qb_ul'] = יבר ברשימה לא ממוספרת';
$lang['qb_media'] = 'תמונות וקבצים אחרים';
$lang['qb_sig'] = וספת חתימה';
$lang['qb_smileys'] = 'חייכנים';
$lang['qb_chars'] = 'תווים מיוחדים';
$lang['upperns'] = 'מעבר למרחב השם שברמה שמעל הנוכחית';
$lang['admin_register'] = 'הוספת משתמש חדש';
$lang['metaedit'] = 'עריכת נתוני העל';
$lang['metasaveerr'] = 'אירע כשל בשמירת נתוני העל';
$lang['metasaveok'] = 'נתוני העל נשמרו';
$lang['img_backto'] = 'חזרה אל';
$lang['img_title'] = 'שם';
$lang['img_caption'] = 'כותרת';
$lang['img_date'] = 'תאריך';
$lang['img_fname'] = 'שם הקובץ';
$lang['img_fsize'] = 'גודל';
$lang['img_artist'] = 'צלם';
$lang['img_copyr'] = 'זכויות';
$lang['img_format'] = 'פורמט';
$lang['img_copyr'] = 'זכויות יוצרים';
$lang['img_format'] = 'מבנה';
$lang['img_camera'] = 'מצלמה';
$lang['img_keywords'] = 'מילות מפתח';
$lang['subscribe_success'] = '%s נוסף לרשימת המכותבים עבור %s';
$lang['subscribe_error'] = 'שגיאה בהוספת %s לרשימת המכותבים עבור %s';
$lang['subscribe_noaddress'] = 'אין כתובת המשויכת לרישום שלך ולכן אין באפשרותך להצטרף לרשימת המכותבים';
$lang['unsubscribe_success'] = '%s הוסר מרשימת המכותבים עבור %s';
$lang['unsubscribe_error'] = 'שגיאה בהסרת %s מרשימת המכותבים עבור %s';
$lang['authmodfailed'] = 'תצורת אימות משתמשים גרועה. נא לדווח למנהל הויקי.';
$lang['authtempfail'] = 'אימות משתמשים אינו זמין כרגע. אם מצב זה נמשך נא להודיע למנהל הויקי.';
$lang['subscr_subscribe_success'] = '%s נוסף לרשימת המינויים לדף %s';
$lang['subscr_subscribe_error'] = 'אירעה שגיאה בהוספת %s לרשימת המינויים לדף %s';
$lang['subscr_subscribe_noaddress'] = 'אין כתובת המשויכת עם הכניסה שלך, נא ניתן להוסיף אותך לרשימת המינויים';
$lang['subscr_unsubscribe_success'] = 'המשתמש %s הוסר מרשימת המינויים לדף %s';
$lang['subscr_unsubscribe_error'] = 'אירעה שגיאה בהסרת %s מרשימת המינויים לדף %s';
$lang['subscr_already_subscribed'] = 'המשתמש %s כבר מנוי לדף %s';
$lang['subscr_not_subscribed'] = 'המשתמש %s איננו רשום לדף %s';
$lang['subscr_m_not_subscribed'] = 'המשתמש שלך אינו רשום, נכון לעכשיו, לדף הנוכחי או למרחב השם.';
$lang['subscr_m_new_header'] = 'הוספת מינוי';
$lang['subscr_m_current_header'] = 'המינויים הנוכחיים';
$lang['subscr_m_unsubscribe'] = 'ביטול המינוי';
$lang['subscr_m_subscribe'] = 'מינוי';
$lang['subscr_m_receive'] = 'קבלת';
$lang['subscr_style_every'] = 'דוא״ל עם כל שינוי';
$lang['subscr_style_digest'] = 'הודעת דוא״ל המציגה את כל השינויים בכל עמוד (בכל %.2f ימים)';
$lang['subscr_style_list'] = 'רשימת השינויים בדפים מאז הודעת הדוא״ל האחרונה (בכל %.2f ימים)';
$lang['authmodfailed'] = 'תצורת אימות המשתמשים אינה תקינה. נא ליידע את מנהל הוויקי.';
$lang['authtempfail'] = 'אימות משתמשים אינו זמין כרגע. אם מצב זה נמשך נא ליידע את מנהל הוויקי.';
$lang['i_chooselang'] = 'נא לבחור שפה';
$lang['i_installer'] = 'DokuWiki Installer';
$lang['i_wikiname'] = 'שם הויקי';
$lang['i_enableacl'] = 'אפשר ACL (מומלץ)';
$lang['i_superuser'] = 'משתמש-על';
$lang['i_problems'] = 'המתקין זיהה מספר בעיות המצוינות מטה. אין באפשרותך להמשיך לפני תיקונן.';
$lang['i_modified'] = 'משיקולי אבטחה תסריט זה יעבוד אך ורק עם התקנת DokuWiki חדשה שלא עברה כל שינוי.
עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להעזר בדף
$lang['i_installer'] = 'תכנית ההתקנה של DokuWiki';
$lang['i_wikiname'] = 'שם הוויקי';
$lang['i_enableacl'] = 'הפעלת ACL (מומלץ)';
$lang['i_superuser'] = 'משתמש־על';
$lang['i_problems'] = 'תכנית ההתקנה זיהתה מספר בעיות המפורטות להלן. אין באפשרותך להמשיך לפני תיקונן.';
$lang['i_modified'] = 'משיקולי אבטחה סקריפט זה יעבוד אך ורק עם התקנת DokuWiki חדשה שלא עברה כל שינוי.
עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להיעזר בדף
<a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
$lang['i_funcna'] = 'פונקצית ה-PHP <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
$lang['i_phpver'] = 'גרסת ה-PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג את התקנת ה-PHP';
$lang['i_permfail'] = '<code>%s</code> אינה ברת כתיבה על ידי DokuWiki. עליך לשנות הרשאות ספריה זו!';
$lang['i_funcna'] = 'פונקציית ה-PHP&rlm; <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
$lang['i_phpver'] = 'גרסת ה־PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג את התקנת ה־PHP שלך.';
$lang['i_permfail'] = '<code>%s</code> אינה ניתנת לכתיבה על ידי DokuWiki. עליך לשנות הרשאות תיקייה זו!';
$lang['i_confexists'] = '<code>%s</code> כבר קיים';
$lang['i_writeerr'] = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/ספריה וליצור את הקובץ ידנית.';
$lang['i_badhash'] = 'קובץ Dokuwiki.php לא מזוהה או שעבר שינויים (hash=<code>%s</code>)';
$lang['i_badval'] = '<code>%s</code> - ערך לא חוקי או ריק';
$lang['i_success'] = 'ההגדרה הסתימה בהצלחה. באפשרותך למחוק עתה את הקובץ install.php ולהמשיך אל <a href="doku.php">DokuWiki החדש שלך</a>.';
$lang['i_failure'] = 'מספר שגיאות ארעו בעת כתיבת קבצי התצורה. ייתכן כי יהיה צורך לתקנם ידנית לפני שניתן יהיה להשתמש ב<a href="doku.php">DokuWiki החדש שלך</a>.';
$lang['i_policy'] = 'מדיניות ACL תחילית';
$lang['i_writeerr'] = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/תיקייה וליצור את הקובץ ידנית.';
$lang['i_badhash'] = 'הקובץ Dokuwiki.php אינו מזוהה או שעבר שינויים (hash=<code>%s</code>)';
$lang['i_badval'] = '<code>%s</code> - הערך אינו חוקי או ריק';
$lang['i_success'] = 'תהליך ההגדרה הסתיים בהצלחה. כעת ניתן למחוק את הקובץ install.php ולהמשיך אל ה־<a href="doku.php">DokuWiki החדש שלך</a>.';
$lang['i_failure'] = 'מספר שגיאות אירעו בעת כתיבת קובצי התצורה. יתכן כי יהיה צורך לתקנם ידנית לפני שניתן יהיה להשתמש ב־<a href="doku.php">DokuWiki החדש שלך</a>.';
$lang['i_policy'] = 'מדיניות ACL התחלתית';
$lang['i_pol0'] = 'ויקי פתוח (קריאה, כתיבה והעלאה לכולם)';
$lang['i_pol1'] = ' ויקי ציבורי (קריאה לכולם, כתיבה והעלאה למשתמשים רשומים)';
$lang['i_pol2'] = 'ויקי סגור (קריאה, כתיבה והעלאה למשתמשים רשומים בלבד)';
$lang['i_retry'] = 'נסיון נוסף';
$lang['mu_intro'] = 'כאן תוכל להעלות קבצים מרובים. לחץ על כפתור החיפוש להוסיף אותם למחסנית. לחץ על העלאה לסיום.';
$lang['mu_gridname'] = 'שם קובץ';
$lang['i_retry'] = 'ניסיון נוסף';
$lang['i_license'] = 'נא לבחור את הרישיון שיחול על התוכן שבוויקי שלך:';
$lang['mu_intro'] = 'דרך כאן ניתן להעלות מספר קבצים בבת אחת. יש ללחוץ על לחצן החיפוש להוסיף אותם למחסנית. ניתן ללחוץ על העלאה לסיום.';
$lang['mu_gridname'] = 'שם הקובץ';
$lang['mu_gridsize'] = 'גודל';
$lang['mu_gridstat'] = 'סטאטןס';
$lang['mu_gridstat'] = 'מצב';
$lang['mu_namespace'] = 'מרחב שם';
$lang['mu_browse'] = 'חיפוש';
$lang['mu_toobig'] = 'גדול מדי';
$lang['mu_ready'] = 'מוכן להעלאה';
$lang['mu_done'] = 'סיים';
$lang['mu_ready'] = 'בהמתנה להעלאה';
$lang['mu_done'] = 'הסתיים';
$lang['mu_fail'] = 'נכשל';
$lang['mu_authfail'] = קוף נעילת עריכה פג';
$lang['mu_authfail'] = וקף ההפעלה פג';
$lang['mu_progress'] = '@PCT@% הועלה';
$lang['mu_filetypes'] = 'סוגי קבצים מורשים';
$lang['mu_info'] = 'הקבצים הועלו';
$lang['mu_lasterr'] = 'שגיאה אחרונה:';
$lang['recent_global'] = 'אתה צופה כעת בשינויים בתוך מרחב השם <b>%s</b>. אתה יכול גם <a href="%s">לצפות בשינויים האחרונים של כל הוויקי </a>.';
$lang['recent_global'] = 'נכון לעכשיו מתנהל על ידיך מעקב אחר מרחב השם <b>%s</b>. כמו כן, באפשרותך <a href="%s">לצפות בשינויים האחרונים בוויקי כולו</a>.';
$lang['years'] = 'לפני %d שנים';
$lang['months'] = 'לפני %d חודשים';
$lang['weeks'] = 'לפני %d שבועות';
@ -249,3 +284,4 @@ $lang['days'] = 'לפני %d ימים';
$lang['hours'] = 'לפני %d שעות';
$lang['minutes'] = 'לפני %d דקות';
$lang['seconds'] = 'לפני %d שניות';
$lang['wordblock'] = 'השינויים שלך לא נשמרו כיוון שהם מכילים טקסט חסום (ספאם).';

View file

@ -1,17 +1,17 @@
דף בDokuWiki נוסף או שונה. הנה הפרטים:
דף בDokuWiki נוסף או שונה. להלן הפרטים:
Date : @DATE@
Browser : @BROWSER@
IP-Address : @IPADDRESS@
Hostname : @HOSTNAME@
Old Revision: @OLDPAGE@
New Revision: @NEWPAGE@
Edit Summary: @SUMMARY@
User : @USER@
תאריך : @DATE@
דפדפן : @BROWSER@
כתובת ה־IP&rlm; : @IPADDRESS@
שם המארח : @HOSTNAME@
המהדורה הישנה: @OLDPAGE@
המהדורה החדשה: @NEWPAGE@
תקציר העריכה: @SUMMARY@
משתמש : @USER@
@DIFF@
--
דף זה נוצר ע"י DokuWiki ב-
דף זה נוצר ע״י ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@

View file

@ -1,10 +1,10 @@
שלום @FULLNAME@!
הנה נתוני המשתמש שלך עבור @TITLE@ ב- @DOKUWIKIURL@
הנה נתוני המשתמש שלך עבור @TITLE@ ב־@DOKUWIKIURL@
כניסה : @LOGIN@
סיסמה : @PASSWORD@
שם כניסה : @LOGIN@
ססמה : @PASSWORD@
--
מכתב זה נוצר על ידי דוקוויקי ב-
מכתב זה נוצר על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@

View file

@ -1,13 +1,13 @@
שלום @FULLNAME@!
מישהו ביקש סיסמה חדשה עבור הכניסה שלך ל-@TITLE@ ב-@DOKUWIKIURL@
מישהו ביקש ססמה חדשה עבור שם הכניסה שלך לוויקי @TITLE@ בכתובת @DOKUWIKIURL@
אם לא ביקשת סיסמה חדשה פשוט התעלם מדוא"ל זה.
אם לא ביקשת ססמה חדשה באפשרותך פשוט להתעלם מהודעת דוא״ל זו.
כדי לאשר שהבקשה באמת נשלחה על ידך נא השתמש בקישור הבא.
כדי לאשר שהבקשה באמת נשלחה על ידך עליך השתמש בקישור הבא.
@CONFIRM@
--
דואר זה נוצר על ידי DokuWiki ב-
הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@

View file

@ -1,2 +1,2 @@
דף זה הוא דף לקריאה בלבד. ניתן לצפות בקוד המקור שלו, אבל לא ניתן לערוך אותו. ניתן לפנות אל מנהל הויקי אם לדעתך נפלה טעות.
דף זה הוא דף לקריאה בלבד. ניתן לצפות בקוד המקור שלו, אך לא ניתן לערוך אותו. ניתן לפנות למנהל הוויקי אם לדעתך נפלה טעות.

View file

@ -1,3 +1,3 @@
====== הרשמה כמשתמש חדש ======
יש למלא את כל המידע מטה כדי ליצור חשבון חדש בויקי זה. יש לודא כי מוזנת **כתובת דוא"ל תקפה**- סיסמתך החדשה תשלח לכתובת זו\\ על שם המשתמש להיות [[hdoku>ויקי:שם דף|שם דף]] תקף.
יש למלא את כל המידע להלן כדי ליצור חשבון חדש בוויקי זה. עליך לוודא כי הזנת **כתובת דוא״ל תקפה**- ססמתך החדשה תשלח לכתובת זו. על שם המשתמש להיות [[hdoku>ויקי:שם דף|שם דף]] תקף.

View file

@ -1,14 +1,14 @@
משתמש חדש נרשם. הנה הפרטים:
משתמש חדש נרשם. להלן הפרטים:
שם משתמש : @NEWUSER@
שם מלא : @NEWNAME@
דוא"ל : @NEWEMAIL@
דוא״ל : @NEWEMAIL@
תאריך : @DATE@
דפדפן : @BROWSER@
כתובת רשת : @IPADDRESS@
שם המחשב : @HOSTNAME@
כתובת IP&rlm; : @IPADDRESS@
שם המארח : @HOSTNAME@
--
דוא"ל זה נוצר על ידי DokuWiki ב-
הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@

View file

@ -1,4 +1,4 @@
====== שליחת סיסמה חדשה ======
====== שליחת ססמה חדשה ======
יש להזין את שם המשתמש בטופס מטה ולבקש סיסמה חדשה לחשבון שלך בויקי זה. קישור לאימות ישלח לכתובת הדו"ל איתה נרשמת.
יש להזין את שם המשתמש בטופס מטה ולבקש ססמה חדשה לחשבון שלך בוויקי זה. הקישור לאימות יישלח לכתובת הדוא״ל באמצעותה נרשמת.

View file

@ -0,0 +1,20 @@
שלום!
הדף @PAGE@ שבאתר הוויקי @TITLE@ השתנה.
להלן השינויים:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
המהדורה הישנה: @OLDPAGE@
המהדורה החדשה: @NEWPAGE@
כדי לבטל את ההתרעות לשינויי העמוד, יש להיכנס לאתר הוויקי בכתובת
@DOKUWIKIURL@ ואז לבקר באגף
@SUBSCRIBE@
ולבטל את המינוי לשינויים בדף ו/או במרחב השם.
--
הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki שבכתובת
@DOKUWIKIURL@

View file

@ -0,0 +1,22 @@
שלום!
הדף @PAGE@ באתר הוויקי @TITLE@ השתנה.
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
תאריך : @DATE@
משתמש : @USER@
תקציר העריכה: @SUMMARY@
המהדורה הישנה: @OLDPAGE@
המהדורה החדשה: @NEWPAGE@
לביטול התרעות בנוגע לעמוד, יש להיכנס לאתר הוויקי בכתובת
@DOKUWIKIURL@ ואז לבקר בדף
@NEWPAGE@
ולבטל את המינוי לקבלת שינויים בדף ו/או במרחב השם.
--
הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
@DOKUWIKIURL@

View file

@ -227,4 +227,4 @@ $lang['i_pol2'] = 'វីគីបិទជិត';
$lang['i_retry'] = 'ម្តងទៀត';
//Setup VIM: ex: et ts=2 enc=utf-8 :
//Setup VIM: ex: et ts=2 :

View file

@ -0,0 +1 @@
===== 부가적인 플러그인 =====

View file

@ -1,2 +1,2 @@
페이지를 편집하고 **저장**을 누르십시오. 위키 구문은 [[wiki:syntax]] 혹은 [[syntax|(한글) 구문]]을 참고하십시오. 이 페이지를 **더 낫게 만들 자신이 있을** 때에만 편집하십시오. 실험을 하고 싶을 때에는, 먼저 [[playground:playground|연습장]] 에 가서 연습해 보십시오.
페이지를 편집하고 **저장**을 누르십시오. 위키 구문은 [[wiki:syntax]] 혹은 [[wiki:ko_syntax|(한글) 구문]]을 참고하십시오. 이 페이지를 **더 낫게 만들 자신이 있을** 때에만 편집하십시오. 실험을 하고 싶을 때에는, 먼저 [[playground:playground|연습장]] 에 가서 연습해 보십시오.

View file

@ -8,6 +8,7 @@
* @author dongnak@gmail.com
* @author Song Younghwan <purluno@gmail.com>
* @author SONG Younghwan <purluno@gmail.com>
* @author Seung-Chul Yoo <dryoo@live.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@ -41,15 +42,13 @@ $lang['btn_back'] = '뒤로';
$lang['btn_backlink'] = '이전 링크';
$lang['btn_backtomedia'] = '미디어 파일 선택으로 돌아가기';
$lang['btn_subscribe'] = '구독 신청';
$lang['btn_unsubscribe'] = '구독 신청 해지';
$lang['btn_subscribens'] = '네임스페이스 구독 신청';
$lang['btn_unsubscribens'] = '네임스페이스 구독 신청 해지';
$lang['btn_profile'] = '개인정보 변경';
$lang['btn_reset'] = '초기화';
$lang['btn_resendpwd'] = '새 패스워드 보내기';
$lang['btn_draft'] = '문서초안 편집';
$lang['btn_recover'] = '문서초안 복구';
$lang['btn_draftdel'] = '문서초안 삭제';
$lang['btn_revert'] = '복원';
$lang['loggedinas'] = '다음 사용자로 로그인';
$lang['user'] = '사용자';
$lang['pass'] = '패스워드';
@ -88,13 +87,45 @@ $lang['resendpwdconfirm'] = '확인 링크를 이메일로 보냈습니다.
$lang['resendpwdsuccess'] = '새로운 패스워드는 이메일로 보내드립니다.';
$lang['license'] = '이 위키의 내용은 다음의 라이센스에 따릅니다 :';
$lang['licenseok'] = '주의 : 이 페이지를 수정한다는 다음의 라이센스에 동의함을 의미합니다 :';
$lang['searchmedia'] = '파일이름 찾기:';
$lang['searchmedia_in'] = ' %에서 검색';
$lang['txt_upload'] = '업로드 파일을 선택합니다.';
$lang['txt_filename'] = '업로드 파일 이름을 입력합니다.(선택 사항)';
$lang['txt_overwrt'] = '새로운 파일로 이전 파일을 교체합니다.';
$lang['lockedby'] = '현재 잠금 사용자';
$lang['lockexpire'] = '잠금 해제 시간';
$lang['willexpire'] = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리보기를 눌러 잠금 시간을 다시 설정하기 바랍니다.';
$lang['js']['notsavedyet'] = "저장하지 않은 변경은 지워집니다.\n계속하시겠습니까?";
$lang['js']['notsavedyet'] = '저장하지 않은 변경은 지워집니다.
계속하시겠습니까?';
$lang['js']['searchmedia'] = '파일 찾기';
$lang['js']['keepopen'] = '선택할 때 윈도우를 열어놓으시기 바랍니다.';
$lang['js']['hidedetails'] = '자세한 정보 감추기';
$lang['js']['mediatitle'] = '링크 설정';
$lang['js']['mediadisplay'] = '링크 형태';
$lang['js']['mediaalign'] = '배치';
$lang['js']['mediasize'] = '그림 크기';
$lang['js']['mediatarget'] = '링크 목표';
$lang['js']['mediaclose'] = '닫기';
$lang['js']['mediainsert'] = '삽입';
$lang['js']['mediadisplayimg'] = '그림보기';
$lang['js']['mediasmall'] = '작게';
$lang['js']['mediamedium'] = '중간';
$lang['js']['medialarge'] = '크게';
$lang['js']['mediaoriginal'] = '원본';
$lang['js']['medialnk'] = '세부정보페이지로 링크';
$lang['js']['mediadirect'] = '원본으로 직접 링크';
$lang['js']['medianolnk'] = '링크 없슴';
$lang['js']['medianolink'] = '그림을 링크하지 않음';
$lang['js']['medialeft'] = '왼쪽 배치';
$lang['js']['mediaright'] = '오른쪽 배치';
$lang['js']['mediacenter'] = '중앙 배치';
$lang['js']['medianoalign'] = '배치 없슴';
$lang['js']['nosmblinks'] = '윈도우 공유 파일과의 연결은 MS 인터넷 익스플로러에서만 동작합니다.
그러나 링크를 복사하거나 붙여넣기를 있습니다.';
$lang['js']['linkwiz'] = '링크 마법사';
$lang['js']['linkto'] = '다음으로 연결:';
$lang['js']['del_confirm'] = '정말로 선택된 항목(들)을 삭제하시겠습니까?';
$lang['js']['mu_btn'] = '여러 파일들을 한번에 업로드합니다.';
$lang['rssfailed'] = 'feed 가져오기 실패: ';
$lang['nothingfound'] = '아무 것도 없습니다.';
$lang['mediaselect'] = '미디어 파일 선택';
@ -112,11 +143,7 @@ $lang['deletefail'] = '"%s" 파일을 삭제할 수 없습니다. -
$lang['mediainuse'] = '"%s" 파일을 삭제할 수 없습니다. - 아직 사용 중입니다.';
$lang['namespaces'] = '네임스페이스';
$lang['mediafiles'] = '사용 가능한 파일 목록';
$lang['js']['keepopen'] = '선택할 때 윈도우를 열어놓으시기 바랍니다.';
$lang['js']['hidedetails'] = '자세한 정보 감추기';
$lang['js']['nosmblinks'] = '윈도우 공유 파일과의 연결은 MS 인터넷 익스플로러에서만 동작합니다.
그러나 링크를 복사하거나 붙여넣기를 있습니다.';
$lang['js']['mu_btn'] = '여러 파일들을 한번에 업로드합니다.';
$lang['accessdenied'] = '이 페이지를 볼 권한이 없습니다.';
$lang['mediausage'] = '이 파일을 참조하려면 다음 문법을 사용하기 바랍니다:';
$lang['mediaview'] = '원본 파일 보기';
$lang['mediaroot'] = '루트(root)';
@ -143,8 +170,10 @@ $lang['restored'] = '옛 버전 복구';
$lang['external_edit'] = '외부 편집기';
$lang['summary'] = '편집 요약';
$lang['noflash'] = '이 컨텐츠를 표시하기 위해서 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>이 필요합니다.';
$lang['download'] = '조각 다운로드';
$lang['mail_newpage'] = '페이지 추가:';
$lang['mail_changed'] = '페이지 변경:';
$lang['mail_subscribe_list'] = '네임스페이스에서 변경된 페이지:';
$lang['mail_new_user'] = '새로운 사용자:';
$lang['mail_upload'] = '파일 첨부:';
$lang['qb_bold'] = '굵은 글';
@ -157,6 +186,11 @@ $lang['qb_h2'] = '2단계 헤드라인';
$lang['qb_h3'] = '3단계 헤드라인';
$lang['qb_h4'] = '4단계 헤드라인';
$lang['qb_h5'] = '5단계 헤드라인';
$lang['qb_h'] = '표제';
$lang['qb_hs'] = '표제 선택';
$lang['qb_hplus'] = '상위 표제';
$lang['qb_hminus'] = '하위 표제';
$lang['qb_hequal'] = '동급 표제';
$lang['qb_link'] = '내부 링크';
$lang['qb_extlink'] = '외부 링크';
$lang['qb_hr'] = '수평선';
@ -166,7 +200,7 @@ $lang['qb_media'] = '이미지와 기타 파일 추가';
$lang['qb_sig'] = '서명 추가';
$lang['qb_smileys'] = '이모티콘';
$lang['qb_chars'] = '특수문자';
$lang['js']['del_confirm'] = '정말로 선택된 항목(들)을 삭제하시겠습니까?';
$lang['upperns'] = '상위 네임스페이스로 이동';
$lang['admin_register'] = '새로운 사용자 추가';
$lang['metaedit'] = '메타 데이타를 편집합니다.';
$lang['metasaveerr'] = '메타 데이타 쓰기가 실패했습니다.';
@ -182,11 +216,16 @@ $lang['img_copyr'] = '저작권';
$lang['img_format'] = '포맷';
$lang['img_camera'] = '카메라';
$lang['img_keywords'] = '키워드';
$lang['subscribe_success'] = '%s를 추가했습니다. (%s의 구독 목록)';
$lang['subscribe_error'] = '%s를 추가하는데 실패했습니다.(%s의 구독 목록)';
$lang['subscribe_noaddress'] = '로그인 정보에 이메일 주소가 없습니다, 구독 목록에 추가할 수 없습니다.';
$lang['unsubscribe_success'] = '%s를 제외시켰습니다. (%s의 구독 목록)';
$lang['unsubscribe_error'] = '%s를 제외시키는데 실패했습니다.(%s의 구독 목록)';
$lang['subscr_subscribe_noaddress'] = '등록된 주소가 없기 때문에 구독목록에 등록되지 않았습니다.';
$lang['subscr_m_not_subscribed'] = '현재의 페이지나 네임스페이스에 구독등록이 되어있지 않습니다.';
$lang['subscr_m_new_header'] = '구독 추가';
$lang['subscr_m_current_header'] = '현재 구독중인 것들';
$lang['subscr_m_unsubscribe'] = '구독 취소';
$lang['subscr_m_subscribe'] = '구독';
$lang['subscr_m_receive'] = '받기';
$lang['subscr_style_every'] = '모든 변화를 이메일로 받기';
$lang['subscr_style_digest'] = '각 페이지의 변화를 요약 (매 %.2f 일 마다)';
$lang['subscr_style_list'] = '마지막 이메일 이후 변화된 페이지의 목록 (매 %.2f 일 마다)';
$lang['authmodfailed'] = '잘못된 사용자 인증 설정입니다. 관리자에게 문의하기 바랍니다.';
$lang['authtempfail'] = '사용자 인증이 일시적으로 불가능합니다. 만일 계속해서 문제가 발생하면 관리자에게 문의하기 바랍니다.';
$lang['i_chooselang'] = '사용하는 언어를 선택합니다.';
@ -213,6 +252,7 @@ $lang['i_pol0'] = '개방형 위키 (누구나 읽기/쓰기/업
$lang['i_pol1'] = '공개형 위키 (누구나 읽을 수 있지만, 등록된 사용자만 쓰기/업로드가 가능합니다.)';
$lang['i_pol2'] = '폐쇄형 위키 (등록된 사용자만 읽기/쓰기/업로드가 가능합니다.)';
$lang['i_retry'] = '다시 시도';
$lang['i_license'] = '내용의 배포를 위한 라이센스를 선택하세요.';
$lang['mu_intro'] = '여러 파일을 한번에 업로드할 수 있습니다. 파일 목록에 추가하려면 "찾기" 버튼을 클릭합니다. 파일 목록 추가 작업이 끝나면 "업로드" 버튼을 클릭하기 바랍니다. ';
$lang['mu_gridname'] = '파일명';
$lang['mu_gridsize'] = '크기';
@ -226,4 +266,14 @@ $lang['mu_fail'] = '업로드가 실패했습니다.';
$lang['mu_authfail'] = '세션 기간이 종료되었습니다.';
$lang['mu_progress'] = '@PCT@% 업로드되었습니다.';
$lang['mu_filetypes'] = '허용된 파일타입';
$lang['mu_info'] = '업로드 되었습니다.';
$lang['mu_lasterr'] = '마지막 에러:';
$lang['recent_global'] = '<b>%s</b> 네임스페이스를 구독중입니다. <a href="%s">전체위키 변경사항 </a>도 보실수 있습니다.';
$lang['years'] = '%d 년 전';
$lang['months'] = '%d 개월 전';
$lang['weeks'] = '%d 주 전';
$lang['days'] = '%d 일 전';
$lang['hours'] = '%d 시간 전';
$lang['minutes'] = '%d 분 전';
$lang['seconds'] = '%d 초 전';
$lang['wordblock'] = '스팸 문구를 포함하고 있어서 저장되지 않았습니다.';

View file

@ -1,4 +1,4 @@
====== 새 사용자 등록 ======
이 위키에 새 계정을 만들려면 아래의 모든 내용을 입력하십시오. **제대로 된 이메일 주소**를 사용하십시오. 그러나, 아래 내용을 입력했다고 해서 계정을 만들 수 있으리라고는 믿지 마십시오. 이곳은 내가 개인적으로 사용하는 곳이며, 계정을 만들어 주고 안주고는 내 마음입니다. 차라리, 내게 이메일을 보내서 신청하는 편이 더 나을 것입니다. 패스워드는 이 이메일로 보내집니다. 사용자명은 올바른 [[doku>pagename|pagename]] 이어야 합니다.
이 위키에 새 계정을 만들려면 아래의 모든 내용을 입력하세요. **제대로 된 이메일 주소**를 사용하세요. 암호를 입력하는 곳이 없다면 암호는 이 이메일로 보내집니다. 사용자명은 올바른 [[doku>pagename|pagename]] 이어야 합니다.

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