diff options
Diffstat (limited to 'inc')
45 files changed, 519 insertions, 302 deletions
diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php index 1e1d4c3a3..906a17b2d 100644 --- a/inc/DifferenceEngine.php +++ b/inc/DifferenceEngine.php @@ -943,7 +943,7 @@ class InlineWordLevelDiff extends MappedDiff { $orig = new _HWLDF_WordAccumulator; foreach ($this->edits as $edit) { if ($edit->type == 'copy') - $orig->addWords($edit->orig); + $orig->addWords($edit->closing); elseif ($edit->type == 'change'){ $orig->addWords($edit->orig, 'del'); $orig->addWords($edit->closing, 'add'); @@ -1087,6 +1087,7 @@ class TableDiffFormatter extends DiffFormatter { * */ class InlineDiffFormatter extends DiffFormatter { + var $colspan = 4; function InlineDiffFormatter() { $this->leading_context_lines = 2; @@ -1113,7 +1114,7 @@ class InlineDiffFormatter extends DiffFormatter { $xbeg .= "," . $xlen; if ($ylen != 1) $ybeg .= "," . $ylen; - $r = '<tr><td class="diff-blockheader">@@ '.$lang['line']." -$xbeg +$ybeg @@"; + $r = '<tr><td colspan="'.$this->colspan.'" 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"; @@ -1132,19 +1133,19 @@ class InlineDiffFormatter extends DiffFormatter { function _added($lines) { foreach ($lines as $line) { - print('<tr><td class="diff-addedline">'. $line . "</td></tr>\n"); + print('<tr><td colspan="'.$this->colspan.'" 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"); + print('<tr><td colspan="'.$this->colspan.'" 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"); + print('<tr><td colspan="'.$this->colspan.'" class="diff-context">'.$line."</td></tr>\n"); } } @@ -1153,7 +1154,7 @@ class InlineDiffFormatter extends DiffFormatter { $add = $diff->inline(); foreach ($add as $line) - print('<tr><td>'.$line."</td></tr>\n"); + print('<tr><td colspan="'.$this->colspan.'">'.$line."</td></tr>\n"); } } diff --git a/inc/EmailAddressValidator.php b/inc/EmailAddressValidator.php index 31b34cc58..bb4ef0ca9 100644 --- a/inc/EmailAddressValidator.php +++ b/inc/EmailAddressValidator.php @@ -5,7 +5,7 @@ * @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 + * @version SVN r10 + Issue 15 fix + Issue 12 fix */ class EmailAddressValidator { /** @@ -121,13 +121,30 @@ class EmailAddressValidator { if (!$this->check_text_length($strDomainPortion, 1, 255)) { return false; } + + // some IPv4/v6 regexps borrowed from Feyd + // see: http://forums.devnetwork.net/viewtopic.php?f=38&t=53479 + $dec_octet = '(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[0-9])'; + $hex_digit = '[A-Fa-f0-9]'; + $h16 = "{$hex_digit}{1,4}"; + $IPv4Address = "$dec_octet\\.$dec_octet\\.$dec_octet\\.$dec_octet"; + $ls32 = "(?:$h16:$h16|$IPv4Address)"; + $IPv6Address = + "(?:(?:{$IPv4Address})|(?:". + "(?:$h16:){6}$ls32" . + "|::(?:$h16:){5}$ls32" . + "|(?:$h16)?::(?:$h16:){4}$ls32" . + "|(?:(?:$h16:){0,1}$h16)?::(?:$h16:){3}$ls32" . + "|(?:(?:$h16:){0,2}$h16)?::(?:$h16:){2}$ls32" . + "|(?:(?:$h16:){0,3}$h16)?::(?:$h16:){1}$ls32" . + "|(?:(?:$h16:){0,4}$h16)?::$ls32" . + "|(?:(?:$h16:){0,5}$h16)?::$h16" . + "|(?:(?:$h16:){0,6}$h16)?::" . + ")(?:\\/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))?)"; + // Check if domain is IP, possibly enclosed in square brackets. - if (preg_match('/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])' - .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/' - ,$strDomainPortion) || - preg_match('/^\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])' - .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\]$/' - ,$strDomainPortion)) { + if (preg_match("/^($IPv4Address|\[$IPv4Address\]|\[$IPv6Address\])$/", + $strDomainPortion)){ return true; } else { $arrDomainPortion = explode('.', $strDomainPortion); diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php index 1cb16714d..372769b71 100644 --- a/inc/HTTPClient.php +++ b/inc/HTTPClient.php @@ -299,8 +299,6 @@ class HTTPClient { $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) { @@ -310,6 +308,9 @@ class HTTPClient { } } + //set blocking + stream_set_blocking($socket,1); + // build request $request = "$method $request_url HTTP/".$this->http.HTTP_NL; $request .= $this->_buildHeaders($headers); @@ -319,11 +320,28 @@ class HTTPClient { $this->_debug('request',$request); + // select parameters + $sel_r = null; + $sel_w = array($socket); + $sel_e = null; + // send request $towrite = strlen($request); $written = 0; while($written < $towrite){ - $ret = fwrite($socket, substr($request,$written)); + // check timeout + if(time()-$start > $this->timeout){ + $this->status = -100; + $this->error = sprintf('Timeout while sending request (%.3fs)',$this->_time() - $this->start); + unset($this->connections[$connectionId]); + return false; + } + + // wait for stream ready or timeout (1sec) + if(stream_select($sel_r,$sel_w,$sel_e,1) === false) continue; + + // write to stream + $ret = fwrite($socket, substr($request,$written,4096)); if($ret === false){ $this->status = -100; $this->error = 'Failed writing to socket'; @@ -333,6 +351,9 @@ class HTTPClient { $written += $ret; } + // continue non-blocking + stream_set_blocking($socket,0); + // read headers from socket $r_headers = ''; do{ diff --git a/inc/auth/ad.class.php b/inc/auth/ad.class.php index 5478d64b9..9ffd3e18b 100644 --- a/inc/auth/ad.class.php +++ b/inc/auth/ad.class.php @@ -24,6 +24,7 @@ * $conf['auth']['ad']['ad_password'] = 'pass'; * $conf['auth']['ad']['real_primarygroup'] = 1; * $conf['auth']['ad']['use_ssl'] = 1; + * $conf['auth']['ad']['use_tls'] = 1; * $conf['auth']['ad']['debug'] = 1; * * // get additional information to the userinfo array @@ -51,6 +52,7 @@ class auth_ad extends auth_basic { global $conf; $this->cnf = $conf['auth']['ad']; + // additional information fields if (isset($this->cnf['additional'])) { $this->cnf['additional'] = str_replace(' ', '', $this->cnf['additional']); @@ -60,7 +62,7 @@ class auth_ad extends auth_basic { // ldap extension is needed if (!function_exists('ldap_connect')) { if ($this->cnf['debug']) - msg("LDAP err: PHP LDAP extension not found.",-1); + msg("AD Auth: PHP LDAP extension not found.",-1); $this->success = false; return; } @@ -97,7 +99,12 @@ class auth_ad extends auth_basic { $this->opts['domain_controllers'] = array_map('trim',$this->opts['domain_controllers']); $this->opts['domain_controllers'] = array_filter($this->opts['domain_controllers']); - // we currently just handle authentication, so no capabilities are set + // we can change the password if SSL is set + if($this->opts['use_ssl'] || $this->opts['use_tls']){ + $this->cando['modPass'] = true; + } + $this->cando['modName'] = true; + $this->cando['modMail'] = true; } /** @@ -247,6 +254,49 @@ class auth_ad extends auth_basic { } /** + * Modify user data + * + * @param $user nick of the user to be changed + * @param $changes array of field/value pairs to be changed + * @return bool + */ + function modifyUser($user, $changes) { + $return = true; + + // password changing + if(isset($changes['pass'])){ + try { + $return = $this->adldap->user_password($user,$changes['pass']); + } catch (adLDAPException $e) { + if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1); + $return = false; + } + if(!$return) msg('AD Auth: failed to change the password. Maybe the password policy was not met?',-1); + } + + // changing user data + $adchanges = array(); + if(isset($changes['name'])){ + // get first and last name + $parts = explode(' ',$changes['name']); + $adchanges['surname'] = array_pop($parts); + $adchanges['firstname'] = join(' ',$parts); + $adchanges['display_name'] = $changes['name']; + } + if(isset($changes['mail'])){ + $adchanges['email'] = $changes['mail']; + } + try { + $return = $return & $this->adldap->user_modify($user,$adchanges); + } catch (adLDAPException $e) { + if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1); + $return = false; + } + + return $return; + } + + /** * Initialize the AdLDAP library and connect to the server */ function _init(){ @@ -261,7 +311,7 @@ class auth_ad extends auth_basic { return true; } catch (adLDAPException $e) { if ($this->cnf['debug']) { - msg($e->getMessage(), -1); + msg('AD Auth: '.$e->getMessage(), -1); } $this->success = false; $this->adldap = null; diff --git a/inc/common.php b/inc/common.php index b4866bccf..23d9c7155 100644 --- a/inc/common.php +++ b/inc/common.php @@ -639,7 +639,7 @@ function clientIP($single=false){ // decide which IP to use, trying to avoid local addresses $ip = array_reverse($ip); foreach($ip as $i){ - if(preg_match('/^(127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)/',$i)){ + if(preg_match('/^(::1|[fF][eE]80:|127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)/',$i)){ continue; }else{ return $i; @@ -804,7 +804,7 @@ function rawWiki($id,$rev=''){ /** * Returns the pagetemplate contents for the ID's namespace * - * @triggers COMMON_PAGE_FROMTEMPLATE + * @triggers COMMON_PAGETPL_LOAD * @author Andreas Gohr <andi@splitbrain.org> */ function pageTemplate($id){ @@ -812,29 +812,50 @@ function pageTemplate($id){ if (is_array($id)) $id = $id[0]; - $path = dirname(wikiFN($id)); - $tpl = ''; - if(@file_exists($path.'/_template.txt')){ - $tpl = io_readFile($path.'/_template.txt'); - }else{ - // search upper namespaces for templates - $len = strlen(rtrim($conf['datadir'],'/')); - while (strlen($path) >= $len){ - if(@file_exists($path.'/__template.txt')){ - $tpl = io_readFile($path.'/__template.txt'); - break; + // prepare initial event data + $data = array( + 'id' => $id, // the id of the page to be created + 'tpl' => '', // the text used as template + 'tplfile' => '', // the file above text was/should be loaded from + 'doreplace' => true // should wildcard replacements be done on the text? + ); + + $evt = new Doku_Event('COMMON_PAGETPL_LOAD',$data); + if($evt->advise_before(true)){ + // the before event might have loaded the content already + if(empty($data['tpl'])){ + // if the before event did not set a template file, try to find one + if(empty($data['tplfile'])){ + $path = dirname(wikiFN($id)); + $tpl = ''; + if(@file_exists($path.'/_template.txt')){ + $data['tplfile'] = $path.'/_template.txt'; + }else{ + // search upper namespaces for templates + $len = strlen(rtrim($conf['datadir'],'/')); + while (strlen($path) >= $len){ + if(@file_exists($path.'/__template.txt')){ + $data['tplfile'] = $path.'/__template.txt'; + break; + } + $path = substr($path, 0, strrpos($path, '/')); + } + } } - $path = substr($path, 0, strrpos($path, '/')); + // load the content + $data['tpl'] = io_readFile($data['tpl']); } + if($data['doreplace']) parsePageTemplate(&$data); } - $data = compact('tpl', 'id'); - trigger_event('COMMON_PAGE_FROMTEMPLATE', $data, 'parsePageTemplate', true); + $evt->advise_after(); + unset($evt); + return $data['tpl']; } /** * Performs common page template replacements - * This is the default action for COMMON_PAGE_FROMTEMPLATE + * This works on data from COMMON_PAGETPL_LOAD * * @author Andreas Gohr <andi@splitbrain.org> */ diff --git a/inc/fulltext.php b/inc/fulltext.php index be3938cac..0f2414213 100644 --- a/inc/fulltext.php +++ b/inc/fulltext.php @@ -304,6 +304,7 @@ function ft_pagesorter($a, $b){ */ function ft_snippet($id,$highlight){ $text = rawWiki($id); + $text = str_replace("\xC2\xAD",'',$text); // remove soft-hyphens $evdata = array( 'id' => $id, 'text' => &$text, diff --git a/inc/html.php b/inc/html.php index bd87ee7a1..c91888494 100644 --- a/inc/html.php +++ b/inc/html.php @@ -318,7 +318,13 @@ function html_search(){ global $ID; global $lang; - print p_locale_xhtml('searchpage'); + $intro = p_locale_xhtml('searchpage'); + // allow use of placeholder in search intro + $intro = str_replace( + array('@QUERY@','@SEARCH@'), + array(hsc(rawurlencode($QUERY)),hsc($QUERY)), + $intro); + echo $intro; flush(); //show progressbar @@ -864,13 +870,18 @@ function html_backlinks(){ * show diff * * @author Andreas Gohr <andi@splitbrain.org> + * @param string $text - compare with this text with most current version + * @param bool $intr - display the intro text */ -function html_diff($text='',$intro=true){ +function html_diff($text='',$intro=true,$type=null){ global $ID; global $REV; global $lang; global $conf; + if(!$type) $type = $_REQUEST['difftype']; + if($type != 'inline') $type = 'sidebyside'; + // we're trying to be clever here, revisions to compare can be either // given as rev and rev2 parameters, with rev2 being optional. Or in an // array in rev2. @@ -987,17 +998,48 @@ function html_diff($text='',$intro=true){ $df = new Diff(explode("\n",htmlspecialchars($l_text)), explode("\n",htmlspecialchars($r_text))); - $tdf = new TableDiffFormatter(); + if($type == 'inline'){ + $tdf = new InlineDiffFormatter(); + } else { + $tdf = new TableDiffFormatter(); + } + + + if($intro) print p_locale_xhtml('diff'); if (!$text) { - $diffurl = wl($ID, array('do'=>'diff', 'rev2[0]'=>$l_rev, 'rev2[1]'=>$r_rev)); ptln('<p class="difflink">'); - ptln(' <a class="wikilink1" href="'.$diffurl.'">'.$lang['difflink'].'</a>'); + + $form = new Doku_Form(array('action'=>wl())); + $form->addHidden('id',$ID); + $form->addHidden('rev2[0]',$l_rev); + $form->addHidden('rev2[1]',$r_rev); + $form->addHidden('do','diff'); + $form->addElement(form_makeListboxField( + 'difftype', + array( + 'sidebyside' => $lang['diff_side'], + 'inline' => $lang['diff_inline']), + $type, + $lang['diff_type'], + '','', + array('class'=>'quickselect'))); + $form->addElement(form_makeButton('submit', 'diff','Go')); + $form->printForm(); + + + $diffurl = wl($ID, array( + 'do' => 'diff', + 'rev2[0]' => $l_rev, + 'rev2[1]' => $r_rev, + 'difftype' => $type, + )); + ptln('<br /><a class="wikilink1" href="'.$diffurl.'">'.$lang['difflink'].'</a>'); ptln('</p>'); } ?> - <table class="diff"> + <table class="diff diff_<?php echo $type?>"> <tr> <th colspan="2" <?php echo $l_minor?>> <?php echo $l_head?> @@ -1398,10 +1440,11 @@ function html_admin(){ } // data security check - echo '<a style="background: transparent url(data/security.png) left top no-repeat; - display: block; width:380px; height:73px; border:none; float:right" - target="_blank" - href="http://www.dokuwiki.org/security#web_access_security"></a>'; + // @todo: could be checked and only displayed if $conf['savedir'] is under the web root + echo '<a style="border:none; float:right;" target="_blank" + href="http://www.dokuwiki.org/security#web_access_security"> + <img src="data/security.png" alt="Your data directory seems to be protected properly." + onerror="this.parentNode.style.display=\'none\'" /></a>'; print p_locale_xhtml('admin'); diff --git a/inc/indexer.php b/inc/indexer.php index 9cf079261..526c8db05 100644 --- a/inc/indexer.php +++ b/inc/indexer.php @@ -221,7 +221,14 @@ function idx_getPageWords($page){ list($page,$body) = $data; - $body = strtr($body, "\r\n\t", ' '); + $body = strtr($body, + array( + "\r" => ' ', + "\n" => ' ', + "\t" => ' ', + "\xC2\xAD" => '', //soft-hyphen + ) + ); $tokens = explode(' ', $body); $tokens = array_count_values($tokens); // count the frequency of each token diff --git a/inc/lang/bg/admin.txt b/inc/lang/bg/admin.txt index 8d16f68aa..8958997ae 100644 --- a/inc/lang/bg/admin.txt +++ b/inc/lang/bg/admin.txt @@ -1,3 +1,3 @@ -====== Администрация ====== +====== Администриране ====== -Долу може да намерите списък с администраторски задачи в DokuWiki.
\ No newline at end of file +Долу ще намерите списъка с администраторски задачи в DokuWiki.
\ No newline at end of file diff --git a/inc/lang/bg/adminplugins.txt b/inc/lang/bg/adminplugins.txt index 2b0268ed4..df24b0538 100644 --- a/inc/lang/bg/adminplugins.txt +++ b/inc/lang/bg/adminplugins.txt @@ -1 +1 @@ -===== Допълнителни Plugins =====
\ No newline at end of file +===== Допълнителни приставки =====
\ No newline at end of file diff --git a/inc/lang/bg/backlinks.txt b/inc/lang/bg/backlinks.txt index 28801a8ee..70cb81dc3 100644 --- a/inc/lang/bg/backlinks.txt +++ b/inc/lang/bg/backlinks.txt @@ -1,3 +1,3 @@ -====== Задни връзки ====== +====== Обратни препратки ====== -Това е списък на страници, които изглежда препращат обратно към текущата страница. +Това е списък на страници, които препращат обратно към текущата страница. diff --git a/inc/lang/bg/conflict.txt b/inc/lang/bg/conflict.txt index 51ec4b706..8c62a3787 100644 --- a/inc/lang/bg/conflict.txt +++ b/inc/lang/bg/conflict.txt @@ -1,6 +1,6 @@ -====== По-нова версия съшествува ====== +====== Съществува по-нова версия ====== -По-нова версия на документа който сте редактирали съществува. Това се случва когато друг потребител е променил документа докато сте го редактирали. +Съществува по-нова версия на документа, който сте редактирали. Това се случва когато друг потребител е променил документа докато сте го редактирали. -Разгледайте внимателно разгледайте разликите показани долу, след това решете коя версия да запазите. Ако изберете ''Запис'', версия Ви ще бъде запазена. Изберете ''Отказ'', за да запазите текущата версия. +Разгледайте внимателно разликите, след това решете коя версия да бъде запазена. Ако натиснете ''Запис'', ще бъде запазена вашата версия. Натиснете ли ''Отказ'', ще бъде запазена текущата версия. diff --git a/inc/lang/bg/denied.txt b/inc/lang/bg/denied.txt index 7b1d5788e..91a576077 100644 --- a/inc/lang/bg/denied.txt +++ b/inc/lang/bg/denied.txt @@ -1,4 +1,4 @@ ====== Отказан достъп ====== -Нямате достатъчно права да продължите. Може би сте забравили да влезете? +Нямате достатъчно права да продължите. Може би сте забравили да се впишете? diff --git a/inc/lang/bg/diff.txt b/inc/lang/bg/diff.txt index 2bd8262c6..b1d49de92 100644 --- a/inc/lang/bg/diff.txt +++ b/inc/lang/bg/diff.txt @@ -1,4 +1,4 @@ ====== Разлики ====== -Тук са показани разликите между избраната версия на страницата и текущата. +Тук са показани разликите между избраната и текущата версия на страницата. diff --git a/inc/lang/bg/draft.txt b/inc/lang/bg/draft.txt index 1938e7d9c..6d269a72f 100644 --- a/inc/lang/bg/draft.txt +++ b/inc/lang/bg/draft.txt @@ -1,6 +1,6 @@ ====== Намерена чернова ====== -Последната редакционна сесия на тази страница не е завършена правилно. Dokuwiki автоматично запазва чернова по време на работа, която може сега да използвате, за да продължите редактирането си. Долу може да видите данните, които бяха запазени от последната сесия. +Последната редакционна сесия на страницата не е завършена правилно. Dokuwiki автоматично запазва чернова по време на редактирането, която може сега да ползвате, за да продължите работата си. Долу може да видите данните, които бяха запазени от последната сесия. -Моля решете, дали искате да //recover// последната си редакционна сесия, да //delete// автоматично запазената чернова или да //cancel// редакцията. +Моля решете, дали искате да //възстановите// последната си редакционна сесия, //изтриете// автоматично запазената чернова или //откажете// редакцията. diff --git a/inc/lang/bg/edit.txt b/inc/lang/bg/edit.txt index 90d376dbc..086d9978e 100644 --- a/inc/lang/bg/edit.txt +++ b/inc/lang/bg/edit.txt @@ -1,2 +1,2 @@ -Редактирайте страницата и натиснете ''Запис''. Погледнете [[wiki:syntax]] за Wiki синтаксис. Моля редактирайте страницата, само ако може да я **подобрите**. Ако искате да пробвате разни неща, научете се да правите първите си стъпки в [[playground:playground|пясъчника]]. +Редактирайте и натиснете ''Запис''. За информация относно ползвания синтаксис прочетете [[wiki:syntax]]. Моля, редактирайте само когато може да **подобрите** съдържанието. Ако ще пробвате разни неща, може да експериментирате в [[playground:playground|пясъчника]]. diff --git a/inc/lang/bg/editrev.txt b/inc/lang/bg/editrev.txt index 87e7b26a8..ba97f253a 100644 --- a/inc/lang/bg/editrev.txt +++ b/inc/lang/bg/editrev.txt @@ -1,2 +1,2 @@ -**Заредили сте стара версия на документа!** Ако я запазите, ще създадете нова редакция с текущите данни. +**Заредена е стара версия на документа!** Ако я запазите, ще създадете нова версия с текущите данни. ---- diff --git a/inc/lang/bg/index.txt b/inc/lang/bg/index.txt index 2ebf5128a..7dabac6af 100644 --- a/inc/lang/bg/index.txt +++ b/inc/lang/bg/index.txt @@ -1,4 +1,4 @@ ====== Индекс ====== -Това е списък на всички достъпни страници подредени по [[doku>namespaces|именни пространства]]. +Това е списък на всички налични страници подредени по [[doku>namespaces|именни пространства]]. diff --git a/inc/lang/bg/install.html b/inc/lang/bg/install.html index 0d7fd5232..392235ecd 100644 --- a/inc/lang/bg/install.html +++ b/inc/lang/bg/install.html @@ -1,25 +1,19 @@ -<p>Тази страница помага при първоначална инсталация и настройка на +<p>Страницата помага при първа инсталация и настройване на <a href="http://dokuwiki.org">Dokuwiki</a>. Повече информация -за този инсталатор е достъпна в неговата собствена +за инсталатора е достъпна в неговата собствена <a href="http://dokuwiki.org/installer">документация</a>.</p> -<p>Dokuwiki използва обикновени файлове за хранилище на уики страниците и друга -информация свързана с тези страници(примерно картинки, търсене, стари версии, т.н.). +<p>Dokuwiki ползва обикновени файлове за хранилище на страниците и друга +информация свързана с тях (примерно картинки, търсене, стари версии, и др.). За да използвате успешно DokuWiki -<strong>трябва</strong> да имате достъп за писане в директориите които съдържат тези -файлове. Този инсталатор няма възможности да настройва правата на директориите. -Това обикновено трябва да бъде направено директно от командният ред или ако -използвате хостинг - през FTP или контрол панела на хоста(примерно cPanel).</p> +<strong>трябва</strong> да имате право за писане в директориите, които съдържат тези +файлове. Инсталаторът не може да настройва правата на директориите. +Обикновено трябва да направите това директно от командният ред или ако +ползвате хостинг - през FTP или контролния панела на хоста (примерно cPanel).</p> -<p>Този инсталатор ще настрои вашата DokuWiki конфигурация за -<acronym title="access control list">ACL</acronym>, което на -свой ред ще позволи на администратора да влезе и да има достъп -до администраторското меню в DokuWiki за инсталиране на плъгини, контрол -на потребители, управление да достъп до уики страници и промяна на настройките -Това не е необходимо на DokuWiki да работи, но ще направи DokuWiki по-лесно за -администриране.</p> +<p>Инсталаторът ще настрои вашата DokuWiki конфигурация на +<acronym title="списъка за достъп">ACL</acronym>, което ще позволи на администратора да се впише и ползва администраторското меню в DokuWiki за инсталиране на приставки, контролира +на потребители, управлява достъпа до страниците и променя останалите настройки. Това не е необходимо за функционирането на 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> diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php index 053a7f1ba..d3e86c41d 100644 --- a/inc/lang/bg/lang.php +++ b/inc/lang/bg/lang.php @@ -5,6 +5,7 @@ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Nikolay Vladimirov <nikolay@vladimiroff.com> * @author Viktor Usunov <usun0v@mail.bg> + * @author Kiril neohidra@gmail.com */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -14,8 +15,8 @@ $lang['singlequoteopening'] = '‘'; $lang['singlequoteclosing'] = '’'; $lang['apostrophe'] = '’'; $lang['btn_edit'] = 'Редактиране'; -$lang['btn_source'] = 'Показване на кода на страницата'; -$lang['btn_show'] = 'Показване на страница'; +$lang['btn_source'] = 'Преглед на кода'; +$lang['btn_show'] = 'Преглед на страницата'; $lang['btn_create'] = 'Създаване на страница'; $lang['btn_search'] = 'Търсене'; $lang['btn_save'] = 'Запис'; @@ -29,215 +30,217 @@ $lang['btn_upload'] = 'Качване'; $lang['btn_cancel'] = 'Отказ'; $lang['btn_index'] = 'Индекс'; $lang['btn_secedit'] = 'Редактиране'; -$lang['btn_login'] = 'Вход'; -$lang['btn_logout'] = 'Изход'; +$lang['btn_login'] = 'Вписване'; +$lang['btn_logout'] = 'Отписване'; $lang['btn_admin'] = 'Настройки'; $lang['btn_update'] = 'Обновяване'; $lang['btn_delete'] = 'Изтриване'; $lang['btn_back'] = 'Назад'; -$lang['btn_backlink'] = 'Обратни връзки'; +$lang['btn_backlink'] = 'Обратни препратки'; $lang['btn_backtomedia'] = 'Назад към избор на медиен файл'; $lang['btn_subscribe'] = 'Абониране за Промени'; -$lang['btn_unsubscribe'] = 'Отписване от Промени'; -$lang['btn_subscribens'] = 'Абониране за Промени на именно пространство'; -$lang['btn_unsubscribens'] = 'Отписване от Промени на именно пространство'; -$lang['btn_profile'] = 'Актуализирай Профила'; +$lang['btn_profile'] = 'Профил'; $lang['btn_reset'] = 'Изчистване'; $lang['btn_resendpwd'] = 'Пращане на нова парола'; $lang['btn_draft'] = 'Редактиране на чернова'; $lang['btn_recover'] = 'Възстановяване на чернова'; $lang['btn_draftdel'] = 'Изтриване на чернова'; $lang['btn_revert'] = 'Възстановяване'; -$lang['loggedinas'] = 'Влезли сте като'; +$lang['loggedinas'] = 'Вписани сте като'; $lang['user'] = 'Потребител'; $lang['pass'] = 'Парола'; $lang['newpass'] = 'Нова парола'; $lang['oldpass'] = 'Потвърждение на текуща парола'; -$lang['passchk'] = 'oтново'; +$lang['passchk'] = 'още веднъж'; $lang['remember'] = 'Запомни ме'; $lang['fullname'] = 'Пълно име'; $lang['email'] = 'Електронна поща'; -$lang['register'] = 'Регистрация'; +$lang['register'] = 'Регистриране'; $lang['profile'] = 'Потребителски профил'; -$lang['badlogin'] = 'Потребителското име или паролата са грешни'; +$lang['badlogin'] = 'Грешно потребителско име или парола'; $lang['minoredit'] = 'Незначителни промени'; $lang['draftdate'] = 'Черновата бе автоматично записана на'; $lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.'; $lang['regmissing'] = 'Моля, попълнете всички полета.'; -$lang['reguexists'] = 'Потребител с такова име вече съществува.'; -$lang['regsuccess'] = 'Потребителят бе създаден и паролата бе пратена на електронната поща.'; +$lang['reguexists'] = 'Вече съществува потребител с избраното име.'; +$lang['regsuccess'] = 'Потребителят бе създаден и паролата бе пратена по електронната поща.'; $lang['regsuccess2'] = 'Потребителят бе създаден.'; -$lang['regmailfail'] = 'Изглежда, че има проблем с пращането на писмото с паролата. Моля, свържете се с администратора.'; +$lang['regmailfail'] = 'Изглежда, че има проблем с пращането на писмото с паролата. Моля, свържете се с администратора!'; $lang['regbadmail'] = 'Въведеният адрес изглежда невалиден - ако мислите, че това е грешка, свържете се с администратора.'; -$lang['regbadpass'] = 'Двете въведени пароли не съвпадат, моля опитайте отново'; +$lang['regbadpass'] = 'Двете въведени пароли не съвпадат, моля опитайте отново.'; $lang['regpwmail'] = 'Парола за DokuWiki'; -$lang['reghere'] = 'Нямате профил все още? Направете си!'; +$lang['reghere'] = 'Все още нямате профил? Направете си'; $lang['profna'] = 'Това Wiki не поддържа промяна на профила'; $lang['profnochange'] = 'Няма промени.'; -$lang['profnoempty'] = 'Невъведено име или електронна поща не са позволени.'; +$lang['profnoempty'] = 'Въвеждането на име и ел. поща. е задължително'; $lang['profchanged'] = 'Потребителският профил бе успешно обновен.'; -$lang['pwdforget'] = 'Забравили сте си паролата? Въведете нова.'; -$lang['resendna'] = 'Това Wiki не поддържа повторно пращане на парола'; +$lang['pwdforget'] = 'Забравили сте паролата си? Получете нова'; +$lang['resendna'] = 'Това Wiki не поддържа повторно пращане на паролата.'; $lang['resendpwd'] = 'Изпращане на нова парола за'; $lang['resendpwdmissing'] = 'Моля, попълнете всички полета.'; -$lang['resendpwdnouser'] = 'Потребителят не бе намерен в базата данни.'; -$lang['resendpwdbadauth'] = 'Този код за потвърждение е невалиден. Проверете дали сте използвали целият линк за потвърждение.'; -$lang['resendpwdconfirm'] = 'Адресът за потвърждение бе пратен по електронната поща.'; -$lang['resendpwdsuccess'] = 'Паролата ви бе изпратена на електронната поща.'; +$lang['resendpwdnouser'] = 'Потребителят не бе намерен в базата от данни.'; +$lang['resendpwdbadauth'] = 'Кодът за потвърждение е невалиден. Проверете дали сте използвали целият линк за потвърждение.'; +$lang['resendpwdconfirm'] = 'Линк за потвърждение бе пратен по електронната поща.'; +$lang['resendpwdsuccess'] = 'Паролата ви бе изпратена по електронната поща.'; $lang['license'] = 'Освен ако не е посочено друго, съдържанието на това Wiki е лицензирано под следния лиценз:'; -$lang['licenseok'] = 'Имайте предвид, че чрез редактирането на тази страница, Вие се съгласявате съдържанието й да бъде лицензирано под следния лиценз:'; +$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['txt_upload'] = 'Изберете файл за качване'; +$lang['txt_filename'] = 'Качване като (незадължително)'; +$lang['txt_overwrt'] = 'Презапиши съществуващите файлове'; +$lang['lockedby'] = 'В момента е заключена от'; +$lang['lockexpire'] = 'Ще бъде отключена на'; +$lang['willexpire'] = 'Страницата ще бъде отключена за редактиране след минута.\nЗа да избегнете конфликт, ползвайте бутон "Преглед", за рестартиране на брояча за заключване.'; +$lang['js']['notsavedyet'] = 'Незаписаните промени ще бъдат загубени. Желаете ли да продължите?'; +$lang['js']['searchmedia'] = 'Търсене на файлове'; +$lang['js']['keepopen'] = 'Без затваряне на прозореца след избор'; +$lang['js']['hidedetails'] = 'Без подробности'; +$lang['js']['mediasize'] = 'Размер на изображението'; +$lang['js']['mediaclose'] = 'Затваряне'; +$lang['js']['mediainsert'] = 'Вмъкване'; +$lang['js']['mediasmall'] = 'Малка версия'; +$lang['js']['mediamedium'] = 'Средна версия'; +$lang['js']['medialarge'] = 'Голяма версия'; +$lang['js']['mediaoriginal'] = 'Оригинална версия'; +$lang['js']['nosmblinks'] = 'Връзките към Windows shares работят само под Internet Explorer. +Можете да копирате и поставите връзката.'; +$lang['js']['linkwiz'] = 'Съветник за препратки'; +$lang['js']['linkto'] = 'Препратка към: '; +$lang['js']['del_confirm'] = 'Да бъдат ли изтрити избраните елементи?'; +$lang['js']['mu_btn'] = 'Качване на няколко файла наведнъж'; $lang['rssfailed'] = 'Възникна грешка при вземането на този feed: '; -$lang['nothingfound'] = 'Нищо не бе намерено.'; +$lang['nothingfound'] = 'Не е открито нищо.'; $lang['mediaselect'] = 'Медийни файлове'; $lang['fileupload'] = 'Качване на медийни файлове'; $lang['uploadsucc'] = 'Качването бе успешно'; $lang['uploadfail'] = 'Качването бе неуспешно. Може би поради грешни права?'; $lang['uploadwrong'] = 'Качването бе отказано. Това файлово разширение е забранено!'; $lang['uploadexist'] = 'Файлът вече съществува. Нищо не бе направено.'; -$lang['uploadbadcontent'] = 'Каченото съдържание на съответства на файлово разширение %s .'; -$lang['uploadspam'] = 'Качването бе блокирано от спам списъка.'; -$lang['uploadxss'] = 'Качването бе блокирано, заради възможно обидно съдържание.'; +$lang['uploadbadcontent'] = 'Каченото съдържание не съответства на файлово разширение %s .'; +$lang['uploadspam'] = 'Качването бе блокирано от SPAM списъка.'; +$lang['uploadxss'] = 'Качването бе блокирано, заради възможно зловредно съдържание.'; $lang['uploadsize'] = 'Файльт за качване бе прекалено голям. (макс. %s)'; $lang['deletesucc'] = 'Файлът "%s" бе изтрит.'; -$lang['deletefail'] = '"%s" не бе изтрит, проверете правата'; +$lang['deletefail'] = '"%s" не може да бъде изтрит - проверете правата.'; $lang['mediainuse'] = 'Файлът "%s" не бе изтрит - все още се ползва.'; $lang['namespaces'] = 'Именни пространства'; -$lang['mediafiles'] = 'Достъпни файлове в'; -$lang['js']['searchmedia'] = 'Търси файлове'; -$lang['js']['keepopen'] = 'Задържане на прозореца отворен при избор'; -$lang['js']['hidedetails'] = 'Скрий детайлите'; -$lang['js']['nosmblinks'] = 'Връзките към Windows shares работят само под Internet Explorer. -Можете да копирате и поставите връзката.'; -$lang['js']['linkwiz'] = 'Линк съветник'; -$lang['js']['linkto'] = 'Линк към: '; -$lang['js']['del_confirm'] = 'Да бъдат ли изтрити избраните елементи?'; -$lang['js']['mu_btn'] = 'Качване на няколко файла наведнъж'; -$lang['mediausage'] = 'Използвайте следният синтакс, за да упоменете файла:'; +$lang['mediafiles'] = 'Налични файлове в'; +$lang['accessdenied'] = 'Нямате разрешение да преглеждате страницата.'; +$lang['mediausage'] = 'Ползвайте следния синтаксис, за да упоменете файла:'; $lang['mediaview'] = 'Преглед на оригиналния файл'; $lang['mediaroot'] = 'root'; -$lang['mediaupload'] = 'Качете файл в текущото именнопространство тук. За да създадете подименни пространства, добавете ги в началото на "Качи като" име на файл, разделени с двоеточие.'; +$lang['mediaupload'] = 'Качете файл в текущото именно пространство. За създаване на подимено пространство, добавите името му преди това на файла и да ги разделите с двоеточие в полето "Качване като"'; $lang['mediaextchange'] = 'Разширението на файла бе сменено от .%s на .%s!'; -$lang['reference'] = 'Референции за'; +$lang['reference'] = 'Връзки за'; $lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото все още се ползва от следните страници:'; -$lang['ref_hidden'] = 'Някои препратки са към страници, които нямате права да четете'; +$lang['ref_hidden'] = 'Някои връзки са към страници, които нямате права да четете'; $lang['hits'] = 'Съвпадения'; $lang['quickhits'] = 'Съвпадащи имена на страници'; $lang['toc'] = 'Съдържание'; -$lang['current'] = 'текущо'; +$lang['current'] = 'текуща'; $lang['yours'] = 'Вашата версия'; $lang['diff'] = 'Преглед на разликите с текущата версия'; -$lang['diff2'] = 'Показване на разликите между избрани преработки'; +$lang['diff2'] = 'Показване на разликите между избрани версии'; +$lang['difflink'] = 'Препратка към сравнението на версиите'; $lang['line'] = 'Ред'; $lang['breadcrumb'] = 'Следа'; $lang['youarehere'] = 'Намирате се в'; $lang['lastmod'] = 'Последна промяна'; $lang['by'] = 'от'; -$lang['deleted'] = 'изтриване'; -$lang['created'] = 'създаване'; +$lang['deleted'] = 'изтрита'; +$lang['created'] = 'създадена'; $lang['restored'] = 'възстановена предишна версия'; $lang['external_edit'] = 'външна редакция'; $lang['summary'] = 'Обобщение'; -$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> е необходим за показване на съдържанието.'; +$lang['noflash'] = 'Необходим е <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> за изобразяване на съдържанието.'; $lang['download'] = 'Изтегляне на фрагмент'; -$lang['mail_newpage'] = 'добавена страница:'; -$lang['mail_changed'] = 'променена страница:'; -$lang['mail_new_user'] = 'нов потребител:'; +$lang['mail_newpage'] = 'добавена страница: '; +$lang['mail_changed'] = 'променена страница: '; +$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'] = 'Заглавие ниво 1'; -$lang['qb_h2'] = 'Заглавие ниво 2'; -$lang['qb_h3'] = 'Заглавие ниво 3'; -$lang['qb_h4'] = 'Заглавие ниво 4'; -$lang['qb_h5'] = 'Заглавие ниво 5'; +$lang['qb_h1'] = 'Заглавие от 1 ниво'; +$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_hs'] = 'Изберете заглавие'; +$lang['qb_hplus'] = 'Надзаглавие'; $lang['qb_hminus'] = 'Подзаглавие'; -$lang['qb_hequal'] = 'Заглавие на същото ниво'; +$lang['qb_hequal'] = 'Заглавие от същото ниво'; $lang['qb_link'] = 'Вътрешна препратка'; $lang['qb_extlink'] = 'Външна препратка'; $lang['qb_hr'] = 'Хоризонтална линия'; -$lang['qb_ol'] = 'Подреден списък'; -$lang['qb_ul'] = 'Неподреден списък'; +$lang['qb_ol'] = 'Номериран списък'; +$lang['qb_ul'] = 'Неномериран списък'; $lang['qb_media'] = 'Добавяне на изображения и други файлове'; $lang['qb_sig'] = 'Вмъкване на подпис'; $lang['qb_smileys'] = 'Усмивчици'; $lang['qb_chars'] = 'Специални знаци'; -$lang['upperns'] = 'Към свьрзано именно пространство'; -$lang['admin_register'] = 'Добабяне на нов потребител'; +$lang['upperns'] = 'към майчиното именно пространство'; +$lang['admin_register'] = 'Добавяне на нов потребител'; $lang['metaedit'] = 'Редактиране на метаданни'; -$lang['metasaveerr'] = 'Запазването на метаданните бе неуспешно'; -$lang['metasaveok'] = 'Метаданните бяха запазени'; +$lang['metasaveerr'] = 'Метаданните не бяха запазени'; +$lang['metasaveok'] = 'Метаданните бяха запазени успешно'; $lang['img_backto'] = 'Назад към'; $lang['img_title'] = 'Заглавие'; $lang['img_caption'] = 'Надпис'; $lang['img_date'] = 'Дата'; -$lang['img_fname'] = 'Име на файл'; +$lang['img_fname'] = 'Име на файла'; $lang['img_fsize'] = 'Размер'; -$lang['img_artist'] = 'Заснет от'; +$lang['img_artist'] = 'Фотограф'; $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['i_chooselang'] = 'Избор на език'; +$lang['authmodfailed'] = 'Лоша настройки за удостоверяване. Моля, уведомете администратора на Wiki страницата.'; +$lang['authtempfail'] = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.'; +$lang['i_chooselang'] = 'Изберете вашия изик'; $lang['i_installer'] = 'Инсталатор на DokuWiki'; -$lang['i_wikiname'] = 'Име на Wiki'; -$lang['i_enableacl'] = 'Включване на списъци за достъп ACL (препоръчително)'; +$lang['i_wikiname'] = 'Име на Wiki-то'; +$lang['i_enableacl'] = 'Ползване на списък за достъп (ACL) [препоръчително]'; $lang['i_superuser'] = 'Супер потребител'; -$lang['i_problems'] = 'Инсталатора намери проблеми указани по-долу. Не може да продължите, докато не ги отстраните.'; -$lang['i_modified'] = 'Поради мерки за сигурност този скрипт ще работи само с нова и непроменена Dokuwiki инсталация. Трябва да разархивирате отново файловете от дръпнатия пакет или да се посъветвате с пълните <a href="http://dokuwiki.org/install">Инструкции за инсталация на Dokuwiki</a>.'; +$lang['i_problems'] = 'Открити са проблеми, които възпрепятстват инсталирането. Ще можете да продължите след като отстраните долуизброените проблеми.'; +$lang['i_modified'] = 'Поради мерки за сигурност скрипта ще работи само с нова и непроменена инсталация на Dokuwiki. Трябва да разархивирате отново файловете от сваления архив или да се посъветвате с <a href="http://dokuwiki.org/install">Инструкциите за инсталация на Dokuwiki</a>.'; $lang['i_funcna'] = 'PHP функцията <code>%s</code> не е достъпна. Може би е забранена от доставчика на хостинг.'; $lang['i_phpver'] = 'Вашата PHP версия <code>%s</code> е по-стара от необходимата <code>%s</code>. Обновете PHP инсталацията си.'; -$lang['i_permfail'] = '<code>%s</code> не е достъпна за писане от DokuWiki. Трябва да промените настройките за достъп до директорията!'; +$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_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'] = 'Отворено Wiki (четене, писане, качване от всички)'; -$lang['i_pol1'] = 'Публично Wiki (четене от всички, писане и качване от регистрирани потребители)'; -$lang['i_pol2'] = 'Затворено Wiki (четене, писане, качване само от регистрирани потребители)'; +$lang['i_success'] = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php">Вашето ново DokuWiki</a>.'; +$lang['i_failure'] = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно, за да можете да ползвате <a href="doku.php">Вашето ново DokuWiki</a>.'; +$lang['i_policy'] = 'Първоначална политика за достъп'; +$lang['i_pol0'] = 'Отворено Wiki (всеки може да чете, пише и качва)'; +$lang['i_pol1'] = 'Публично Wiki (всеки може да чете, само регистрирани могат да пишат и качват)'; +$lang['i_pol2'] = 'Затворено Wiki (само регистрирани могат четат, пишат и качват)'; $lang['i_retry'] = 'Повторен опит'; -$lang['mu_intro'] = 'Тук можете да качите няколко файла наведнъж. Добавете ги към съответните полета и натиснете бутона за качване. +$lang['i_license'] = 'Моля, изберете лиценз под който желаете да публикувате съдържанието'; +$lang['mu_intro'] = 'От тук можете да качите няколко файла наведнъж. Натиснете бутон "Избиране", изберете файлове и натиснете "Качи". '; $lang['mu_gridname'] = 'Име на файл'; $lang['mu_gridsize'] = 'Големина'; $lang['mu_gridstat'] = 'Състояние'; $lang['mu_namespace'] = 'Именно пространство'; -$lang['mu_browse'] = 'Избери'; +$lang['mu_browse'] = 'Избиране'; $lang['mu_toobig'] = 'прекалено голям'; $lang['mu_ready'] = 'готов за качване'; -$lang['mu_done'] = 'приключен'; -$lang['mu_fail'] = 'неуспешен'; -$lang['mu_authfail'] = 'сесията изтече'; +$lang['mu_done'] = 'качен'; +$lang['mu_fail'] = 'неуспешно качване'; +$lang['mu_authfail'] = 'приключила сесия'; $lang['mu_progress'] = '@PCT@% качен'; $lang['mu_filetypes'] = 'Позволени файлови разширения'; -$lang['mu_info'] = 'качени файлове'; +$lang['mu_info'] = 'качени файла.'; $lang['mu_lasterr'] = 'Последна грешка:'; -$lang['recent_global'] = 'В момента преглеждате промените в <b>%s</b> именно пространство. Може да прегледате и <a href="%s">промените на цялото Wiki</a>.'; +$lang['recent_global'] = 'В момента преглеждате промените в именно пространство <b>%s</b>. Може да прегледате и <a href="%s">промените в цялото Wiki</a>.'; $lang['years'] = 'преди %d години'; $lang['months'] = 'преди %d месеци'; $lang['weeks'] = 'преди %d седмици'; @@ -245,3 +248,4 @@ $lang['days'] = 'преди %d дни'; $lang['hours'] = 'преди %d часа'; $lang['minutes'] = 'преди %d минути'; $lang['seconds'] = 'преди %d секунди'; +$lang['wordblock'] = 'Направените от вас промени не бяха съхранени, защото съдържат забранен текст (SPAM).'; diff --git a/inc/lang/bg/locked.txt b/inc/lang/bg/locked.txt index 0eecc6729..7cdfba786 100644 --- a/inc/lang/bg/locked.txt +++ b/inc/lang/bg/locked.txt @@ -1,3 +1,3 @@ -====== Страницата е затворена ====== +====== Страницата е заключена ====== -В момента страницата е затворена за редакция от друг потребител. Трябва да изчаката докато този потребител приключи или затварянето изтече. +В момента страницата е заключена за редактиране от друг потребител. Трябва да изчакате потребителя да приключи с редактирането на страницата или автоматичното отключване на страницата. diff --git a/inc/lang/bg/login.txt b/inc/lang/bg/login.txt index b525f08cf..9cc85ce32 100644 --- a/inc/lang/bg/login.txt +++ b/inc/lang/bg/login.txt @@ -1,3 +1,3 @@ -====== Вход ====== +====== Вписване ====== -В момента не сте влезли! Въведете данните си долу, за да го направите. Бисквитките (cookies) трябва да са включени. +Не сте се вписали! Въведете данните си долу, за да го направите. Бисквитките (cookies) трябва да са включени. diff --git a/inc/lang/bg/newpage.txt b/inc/lang/bg/newpage.txt index fcc1c6257..bf67b2266 100644 --- a/inc/lang/bg/newpage.txt +++ b/inc/lang/bg/newpage.txt @@ -1,4 +1,4 @@ ====== Несъществуваща тема ====== -Последвали сте връзка към тема, която все още не съществува. Ако правата Ви позволяват, може да я създадете като използвате бутона ''Създаване на страницата'' +Последвали сте препратка към тема, която все още не съществува. Ако правата Ви позволяват, може да я създадете чрез бутона ''Създаване на страница''. diff --git a/inc/lang/bg/norev.txt b/inc/lang/bg/norev.txt index 0262aef60..fb7aeef89 100644 --- a/inc/lang/bg/norev.txt +++ b/inc/lang/bg/norev.txt @@ -1,4 +1,4 @@ ====== Няма такава версия ====== -Избраната версия не съществува. Използвайте бутона ''Редакции'' за списък на стари версии на документа. +Избраната версия не съществува. Натиснете бутона ''История'' за отваряне на списъка със стари версии на документа. diff --git a/inc/lang/bg/password.txt b/inc/lang/bg/password.txt index be2f10c61..a3ee557e9 100644 --- a/inc/lang/bg/password.txt +++ b/inc/lang/bg/password.txt @@ -1,9 +1,9 @@ Здравейте @FULLNAME@! -Ето Вашите потребителски данни за @TITLE@ на @DOKUWIKIURL@ +Това са Вашите потребителски данни за @TITLE@ от @DOKUWIKIURL@ Потребител: @LOGIN@ Парола : @PASSWORD@ -- -Това писмо е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file +Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@
\ No newline at end of file diff --git a/inc/lang/bg/preview.txt b/inc/lang/bg/preview.txt index 442f16de2..41fde7380 100644 --- a/inc/lang/bg/preview.txt +++ b/inc/lang/bg/preview.txt @@ -1,3 +1,3 @@ ====== Преглед ====== -Ето как ще изглежда текста. Той обаче все още **не е запазен** ! +Ето как ще изглежда страницата. Текста все още **не е запазен**!
\ No newline at end of file diff --git a/inc/lang/bg/pwconfirm.txt b/inc/lang/bg/pwconfirm.txt index 1cd64b151..beb56cca3 100644 --- a/inc/lang/bg/pwconfirm.txt +++ b/inc/lang/bg/pwconfirm.txt @@ -1,14 +1,13 @@ Здравейте @FULLNAME@! -Някой е поискал нова парола за потребителя @TITLE@ +Някой е поискал нова парола за потребител @TITLE@ на @DOKUWIKIURL@ Ако не сте поискали нова парола, товава просто игнорирайте това писмо. -За да потвърдите, че искането е наистина пратено от вас, моля използвайте -следния адрес. +За да потвърдите, че искането е наистина пратено от вас, моля ползвайте следния адрес. @CONFIRM@ -- -Това писмо е генерирано от DokuWiki на адрес @DOKUWIKIURL@ +Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@ diff --git a/inc/lang/bg/read.txt b/inc/lang/bg/read.txt index 89e9a9d70..a3a15a07f 100644 --- a/inc/lang/bg/read.txt +++ b/inc/lang/bg/read.txt @@ -1,2 +1,2 @@ -Тази страница е позволена само за четене. Може да разгледате кода, но не и да го променята. Обърнете се съм администратора си, ако мислите, че това е грешно. +Тази страница е само за четене. Може да разглеждате кода, но не и да го променяте. Обърнете се съм администратора, ако смятате, че това не е редно. diff --git a/inc/lang/bg/register.txt b/inc/lang/bg/register.txt index 74a07cd90..b4076e89b 100644 --- a/inc/lang/bg/register.txt +++ b/inc/lang/bg/register.txt @@ -1,4 +1,4 @@ ====== Регистрирайте се като нов потребител ====== -Моля, попълнете всичката информация долу, за да създадете нов профил в това уики. Бъдете сигурни, че подавате **валиден адрес на електронна поща** - ако не се пита за парола тук, нова ще бъде пратена на този адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на сраница]] +Моля, попълнете всичките полета, за да бъде създаден нов профил. Уверете се, че въведения **адрес на ел. поща е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]]. diff --git a/inc/lang/bg/resendpwd.txt b/inc/lang/bg/resendpwd.txt index 7b9b9a027..4823fbf00 100644 --- a/inc/lang/bg/resendpwd.txt +++ b/inc/lang/bg/resendpwd.txt @@ -1,3 +1,3 @@ ====== Пращане на нова парола ====== -Моля, въведете потребителското си име във формуляра долу, за да поискате нова парола за вашият профил в това Wiki. Връзка за потвърждение ще ви бъде пратена на регистрираният в това Wiki адрес на електронна поща. +Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. Линк за потвърждение ще ви бъде пратен на адреса на ел. поща, с която сте се регистрирани. diff --git a/inc/lang/bg/revisions.txt b/inc/lang/bg/revisions.txt index 295f5f6cc..0e14662b7 100644 --- a/inc/lang/bg/revisions.txt +++ b/inc/lang/bg/revisions.txt @@ -1,4 +1,4 @@ -====== Стари редакции ====== +====== Стари версии====== -Това са стари редакции на този документ. За да възстановите стара версия, изберете я долу, натиснете ''Редактиране'' и я запазете. +Това са старите версии на документа. За да възстановите стара версия, изберете я долу, натиснете ''Редактиране'' и я запазете. diff --git a/inc/lang/bg/searchpage.txt b/inc/lang/bg/searchpage.txt index 03e019985..48d47515a 100644 --- a/inc/lang/bg/searchpage.txt +++ b/inc/lang/bg/searchpage.txt @@ -1,5 +1,5 @@ ====== Търсене ====== -Може да намерите резултатите на търсенето долу. Ако не сте намерили каквото сте търсили, може да създадете или редактирате страница кръстена по вашета заявка за търсене със съответният бутон +Резултата от търсенето ще намерите по-долу. Ако не намирате каквото сте търсили, може да създадете или редактирате страница, кръстена на вашата заявка, чрез съответния бутон. ===== Резултати ===== diff --git a/inc/lang/bg/showrev.txt b/inc/lang/bg/showrev.txt index c0b1709fe..a3848f8bb 100644 --- a/inc/lang/bg/showrev.txt +++ b/inc/lang/bg/showrev.txt @@ -1,2 +1,2 @@ -**Това е стара редакция на документа** +**Това е стара версия на документа!** ---- diff --git a/inc/lang/bg/stopwords.txt b/inc/lang/bg/stopwords.txt index 369f4d789..b1627bb9a 100644 --- a/inc/lang/bg/stopwords.txt +++ b/inc/lang/bg/stopwords.txt @@ -1,7 +1,7 @@ # Това е списък на думи за игнориране, с една дума на ред # Когато редактирате този файл, не забравяйте да използвате UNIX символ за нов ред -# Не е нужно да включвате думи по-кратки от 3 символа - те са игнорирани така или иначе -# Този списък се основава на думи намерени на http://www.ranks.nl/stopwords/ +# Не е нужно да включвате думи по-кратки от 3 символа - те биват игнорирани така или иначе +# Този списък се основава на думи от http://www.ranks.nl/stopwords/ about are and diff --git a/inc/lang/bg/updateprofile.txt b/inc/lang/bg/updateprofile.txt index 0a6f15297..6113f0d07 100644 --- a/inc/lang/bg/updateprofile.txt +++ b/inc/lang/bg/updateprofile.txt @@ -1,3 +1,3 @@ ====== Обновете профила си ====== -Трябва само да допълните полетата, които искате да промените. Не може да сменяте потребителското си име. +Трябва само да допълните полетата, които искате да промените. Потребителското не може да бъде променяно. diff --git a/inc/lang/bg/uploadmail.txt b/inc/lang/bg/uploadmail.txt index 74f0cdc3e..7373adcea 100644 --- a/inc/lang/bg/uploadmail.txt +++ b/inc/lang/bg/uploadmail.txt @@ -1,4 +1,4 @@ -Бе качен файл на вашето DokuWiki. Ето детайлите +Качен е файл на вашето DokuWiki. Ето детайлите Файл : @MEDIA@ Дата : @DATE@ diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index 9ccbe14e0..8abd4314c 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -164,6 +164,9 @@ $lang['yours'] = 'Your Version'; $lang['diff'] = 'Show differences to current revisions'; $lang['diff2'] = 'Show differences between selected revisions'; $lang['difflink'] = 'Link to this comparison view'; +$lang['diff_type'] = 'View differences:'; +$lang['diff_inline']= 'Inline'; +$lang['diff_side'] = 'Side by Side'; $lang['line'] = 'Line'; $lang['breadcrumb'] = 'Trace'; $lang['youarehere'] = 'You are here'; diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php index 76e1271bd..17d35dfa9 100644 --- a/inc/lang/fr/lang.php +++ b/inc/lang/fr/lang.php @@ -21,6 +21,7 @@ * @author Philippe Bajoit <philippe.bajoit@gmail.com> * @author Florian Gaub <floriang@floriang.net> * @author Samuel Dorsaz samuel.dorsaz@novelion.net + * @author Johan Guilbaud <guilbaud.johan@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php index 4c0ec02d2..6b68c5fef 100644 --- a/inc/lang/pt/lang.php +++ b/inc/lang/pt/lang.php @@ -160,6 +160,8 @@ $lang['yours'] = 'A sua versão'; $lang['diff'] = 'mostrar diferenças com a versão actual'; $lang['diff2'] = 'mostrar diferenças entre versões escolhidas'; $lang['difflink'] = 'Ligação para esta vista de comparação'; +$lang['diff_type'] = 'Ver diferenças'; +$lang['diff_side'] = 'Lado a lado'; $lang['line'] = 'Linha'; $lang['breadcrumb'] = 'Está em'; $lang['youarehere'] = 'Está aqui'; diff --git a/inc/media.php b/inc/media.php index 69441352b..3c9340d51 100644 --- a/inc/media.php +++ b/inc/media.php @@ -141,7 +141,7 @@ function media_metaform($id,$auth){ } /** - * Conveinience function to check if a media file is still in use + * Convenience function to check if a media file is still in use * * @author Michael Klier <chi@chimeric.de> */ @@ -160,19 +160,26 @@ function media_inuse($id) { } } +define('DOKU_MEDIA_DELETED', 1); +define('DOKU_MEDIA_NOT_AUTH', 2); +define('DOKU_MEDIA_INUSE', 4); +define('DOKU_MEDIA_EMPTY_NS', 8); + /** * Handles media file deletions * * If configured, checks for media references before deletion * * @author Andreas Gohr <andi@splitbrain.org> - * @return mixed false on error, true on delete or array with refs + * @return int One of: 0, + DOKU_MEDIA_DELETED, + DOKU_MEDIA_DELETED | DOKU_MEDIA_EMPTY_NS, + DOKU_MEDIA_NOT_AUTH, + DOKU_MEDIA_INUSE */ function media_delete($id,$auth){ - if($auth < AUTH_DELETE) return false; - if(!checkSecurityToken()) return false; - global $conf; - global $lang; + if($auth < AUTH_DELETE) return DOKU_MEDIA_NOT_AUTH; + if(media_inuse($id)) return DOKU_MEDIA_INUSE; $file = mediaFN($id); @@ -196,38 +203,22 @@ function media_delete($id,$auth){ unset($evt); if($data['unl'] && $data['del']){ - // current namespace was removed. redirecting to root ns passing msg along - send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='. - rawurlencode(sprintf(noNS($id),$lang['deletesucc']))); + return DOKU_MEDIA_DELETED | DOKU_MEDIA_EMPTY_NS; } - return $data['unl']; + return $data['unl'] ? DOKU_MEDIA_DELETED : 0; } /** * Handles media file uploads * - * This generates an action event and delegates to _media_upload_action(). - * Action plugins are allowed to pre/postprocess the uploaded file. - * (The triggered event is preventable.) - * - * Event data: - * $data[0] fn_tmp: the temporary file name (read from $_FILES) - * $data[1] fn: the file name of the uploaded file - * $data[2] id: the future directory id of the uploaded file - * $data[3] imime: the mimetype of the uploaded file - * $data[4] overwrite: if an existing file is going to be overwritten - * - * @triggers MEDIA_UPLOAD_FINISH * @author Andreas Gohr <andi@splitbrain.org> * @author Michael Klier <chi@chimeric.de> * @return mixed false on error, id of the new file on success */ function media_upload($ns,$auth){ - if($auth < AUTH_UPLOAD) return false; if(!checkSecurityToken()) return false; global $lang; - global $conf; // get file and id $id = $_POST['id']; @@ -249,8 +240,50 @@ function media_upload($ns,$auth){ msg(sprintf($lang['mediaextchange'],$fext,$iext)); } + $res = media_save(array('name' => $file['tmp_name'], + 'mime' => $imime, + 'ext' => $iext), $ns.':'.$id, + $_REQUEST['ow'], $auth, 'move_uploaded_file'); + if (is_array($res)) { + msg($res[0], $res[1]); + return false; + } + return $res; +} + +/** + * This generates an action event and delegates to _media_upload_action(). + * Action plugins are allowed to pre/postprocess the uploaded file. + * (The triggered event is preventable.) + * + * Event data: + * $data[0] fn_tmp: the temporary file name (read from $_FILES) + * $data[1] fn: the file name of the uploaded file + * $data[2] id: the future directory id of the uploaded file + * $data[3] imime: the mimetype of the uploaded file + * $data[4] overwrite: if an existing file is going to be overwritten + * + * @triggers MEDIA_UPLOAD_FINISH + */ +function media_save($file, $id, $ow, $auth, $move) { + if($auth < AUTH_UPLOAD) { + return array("You don't have permissions to upload files.", -1); + } + + if (!isset($file['mime']) || !isset($file['ext'])) { + list($ext, $mime) = mimetype($id); + if (!isset($file['mime'])) { + $file['mime'] = $mime; + } + if (!isset($file['ext'])) { + $file['ext'] = $ext; + } + } + + global $lang; + // get filename - $id = cleanID($ns.':'.$id,false,true); + $id = cleanID($id,false,true); $fn = mediaFN($id); // get filetype regexp @@ -259,40 +292,35 @@ function media_upload($ns,$auth){ $regex = join('|',$types); // because a temp file was created already - if(preg_match('/\.('.$regex.')$/i',$fn)){ - //check for overwrite - $overwrite = @file_exists($fn); - if($overwrite && (!$_REQUEST['ow'] || $auth < AUTH_DELETE)){ - msg($lang['uploadexist'],0); - return false; - } - // check for valid content - $ok = media_contentcheck($file['tmp_name'],$imime); - if($ok == -1){ - msg(sprintf($lang['uploadbadcontent'],".$iext"),-1); - return false; - }elseif($ok == -2){ - msg($lang['uploadspam'],-1); - return false; - }elseif($ok == -3){ - msg($lang['uploadxss'],-1); - return false; - } + if(!preg_match('/\.('.$regex.')$/i',$fn)) { + return array($lang['uploadwrong'],-1); + } - // prepare event data - $data[0] = $file['tmp_name']; - $data[1] = $fn; - $data[2] = $id; - $data[3] = $imime; - $data[4] = $overwrite; + //check for overwrite + $overwrite = @file_exists($fn); + if($overwrite && (!$ow || $auth < AUTH_DELETE)) { + return array($lang['uploadexist'], 0); + } + // check for valid content + $ok = media_contentcheck($file['name'], $file['mime']); + if($ok == -1){ + return array(sprintf($lang['uploadbadcontent'],'.' . $file['ext']),-1); + }elseif($ok == -2){ + return array($lang['uploadspam'],-1); + }elseif($ok == -3){ + return array($lang['uploadxss'],-1); + } - // trigger event - return trigger_event('MEDIA_UPLOAD_FINISH', $data, '_media_upload_action', true); + // prepare event data + $data[0] = $file['name']; + $data[1] = $fn; + $data[2] = $id; + $data[3] = $file['mime']; + $data[4] = $overwrite; + $data[5] = $move; - }else{ - msg($lang['uploadwrong'],-1); - } - return false; + // trigger event + return trigger_event('MEDIA_UPLOAD_FINISH', $data, '_media_upload_action', true); } /** @@ -301,8 +329,8 @@ function media_upload($ns,$auth){ */ function _media_upload_action($data) { // fixme do further sanity tests of given data? - if(is_array($data) && count($data)===5) { - return media_upload_finish($data[0], $data[1], $data[2], $data[3], $data[4]); + if(is_array($data) && count($data)===6) { + return media_upload_finish($data[0], $data[1], $data[2], $data[3], $data[4], $data[5]); } else { return false; //callback error } @@ -314,14 +342,14 @@ function _media_upload_action($data) { * @author Andreas Gohr <andi@splitbrain.org> * @author Michael Klier <chi@chimeric.de> */ -function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite) { +function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'move_uploaded_file') { global $conf; global $lang; // prepare directory io_createNamespace($id, 'media'); - if(move_uploaded_file($fn_tmp, $fn)) { + if($move($fn_tmp, $fn)) { // Set the correct permission here. // Always chmod media because they may be saved with different permissions than expected from the php umask. // (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.) @@ -336,7 +364,7 @@ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite) { } return $id; }else{ - msg($lang['uploadfail'],-1); + return array($lang['uploadfail'],-1); } } diff --git a/inc/parser/handler.php b/inc/parser/handler.php index 4d0b56b44..85a353dca 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -720,6 +720,7 @@ class Doku_Handler_CallWriter { // function is required, but since this call writer is first/highest in // the chain it is not required to do anything function finalise() { + unset($this->Handler); } } @@ -764,6 +765,7 @@ class Doku_Handler_Nest { $this->process(); $this->CallWriter->finalise(); + unset($this->CallWriter); } function process() { @@ -817,6 +819,7 @@ class Doku_Handler_List { $this->process(); $this->CallWriter->finalise(); + unset($this->CallWriter); } //------------------------------------------------------------------------ @@ -1014,6 +1017,7 @@ class Doku_Handler_Preformatted { $this->process(); $this->CallWriter->finalise(); + unset($this->CallWriter); } function process() { @@ -1070,6 +1074,7 @@ class Doku_Handler_Quote { $this->process(); $this->CallWriter->finalise(); + unset($this->CallWriter); } function process() { @@ -1165,6 +1170,7 @@ class Doku_Handler_Table { $this->process(); $this->CallWriter->finalise(); + unset($this->CallWriter); } //------------------------------------------------------------------------ diff --git a/inc/parser/parser.php b/inc/parser/parser.php index b93760f3a..a7764ee9c 100644 --- a/inc/parser/parser.php +++ b/inc/parser/parser.php @@ -828,7 +828,7 @@ class Doku_Parser_Mode_internallink extends Doku_Parser_Mode { function connectTo($mode) { // Word boundaries? - $this->Lexer->addSpecialPattern("\[\[.+?\]\]",$mode,'internallink'); + $this->Lexer->addSpecialPattern("\[\[(?:(?:.*?\[.*?\])|.+?)\]\]",$mode,'internallink'); } function getSort() { @@ -870,7 +870,7 @@ class Doku_Parser_Mode_externallink extends Doku_Parser_Mode { if(count($this->patterns)) return; $ltrs = '\w'; - $gunk = '/\#~:.?+=&%@!\-'; + $gunk = '/\#~:.?+=&%@!\-\[\]'; $punc = '.:?\-;,'; $host = $ltrs.$punc; $any = $ltrs.$gunk.$punc; diff --git a/inc/parserutils.php b/inc/parserutils.php index 6e349e984..9b2d99328 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -258,7 +258,7 @@ function p_get_metadata($id, $key='', $render=true){ if ($meta == $old_meta || p_save_metadata($id, $meta)) { // store a timestamp in order to make sure that the cachefile is touched $cachefile->storeCache(time()); - } else { + } elseif ($meta != $old_meta) { msg('Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.',-1); } } @@ -291,18 +291,25 @@ function p_get_metadata($id, $key='', $render=true){ * @return boolean true on success * * @author Esther Brunner <esther@kaffeehaus.ch> + * @author Michael Hamann <michael@content-space.de> */ function p_set_metadata($id, $data, $render=false, $persistent=true){ if (!is_array($data)) return false; - global $ID; + global $ID, $METADATA_RENDERERS; - // cache the current page - $cache = ($ID == $id); - $orig = p_read_metadata($id, $cache); + // if there is currently a renderer change the data in the renderer instead + if (isset($METADATA_RENDERERS[$id])) { + $orig =& $METADATA_RENDERERS[$id]; + $meta = $orig; + } else { + // cache the current page + $cache = ($ID == $id); + $orig = p_read_metadata($id, $cache); - // render metadata first? - $meta = $render ? p_render_metadata($id, $orig) : $orig; + // render metadata first? + $meta = $render ? p_render_metadata($id, $orig) : $orig; + } // now add the passed metadata $protected = array('description', 'date', 'contributor'); @@ -339,7 +346,13 @@ function p_set_metadata($id, $data, $render=false, $persistent=true){ // save only if metadata changed if ($meta == $orig) return true; - return p_save_metadata($id, $meta); + if (isset($METADATA_RENDERERS[$id])) { + // set both keys individually as the renderer has references to the individual keys + $METADATA_RENDERERS[$id]['current'] = $meta['current']; + $METADATA_RENDERERS[$id]['persistent'] = $meta['persistent']; + } else { + return p_save_metadata($id, $meta); + } } /** @@ -413,7 +426,15 @@ function p_save_metadata($id, $meta) { */ function p_render_metadata($id, $orig){ // make sure the correct ID is in global ID - global $ID; + global $ID, $METADATA_RENDERERS; + + // avoid recursive rendering processes for the same id + if (isset($METADATA_RENDERERS[$id])) + return $orig; + + // store the original metadata in the global $METADATA_RENDERERS so p_set_metadata can use it + $METADATA_RENDERERS[$id] =& $orig; + $keep = $ID; $ID = $id; @@ -428,13 +449,14 @@ function p_render_metadata($id, $orig){ $instructions = p_cached_instructions(wikiFN($id),false,$id); if(is_null($instructions)){ $ID = $keep; + unset($METADATA_RENDERERS[$id]); return null; // something went wrong with the instructions } // set up the renderer $renderer = new Doku_Renderer_metadata(); - $renderer->meta = $orig['current']; - $renderer->persistent = $orig['persistent']; + $renderer->meta =& $orig['current']; + $renderer->persistent =& $orig['persistent']; // loop through the instructions foreach ($instructions as $instruction){ @@ -442,11 +464,13 @@ function p_render_metadata($id, $orig){ call_user_func_array(array(&$renderer, $instruction[0]), (array) $instruction[1]); } - $evt->result = array('current'=>$renderer->meta,'persistent'=>$renderer->persistent); + $evt->result = array('current'=>&$renderer->meta,'persistent'=>&$renderer->persistent); } $evt->advise_after(); + // clean up $ID = $keep; + unset($METADATA_RENDERERS[$id]); return $evt->result; } diff --git a/inc/subscription.php b/inc/subscription.php index 1b5476553..8e3a99a8f 100644 --- a/inc/subscription.php +++ b/inc/subscription.php @@ -50,18 +50,19 @@ function subscription_lock_filename ($id){ } function subscription_lock($id) { - // FIXME merge this with the indexer lock generation, abstract out global $conf; $lock = subscription_lock_filename($id); - while(!@mkdir($lock,$conf['dmode'])){ - usleep(50); - if(time()-@filemtime($lock) > 60*5){ - // looks like a stale lock - remove it - @rmdir($lock); - }else{ - return false; - } + + if (is_dir($lock) && time()-@filemtime($lock) > 60*5) { + // looks like a stale lock - remove it + @rmdir($lock); } + + // try creating the lock directory + if (!@mkdir($lock,$conf['dmode'])) { + return false; + } + if($conf['dperm']) chmod($lock, $conf['dperm']); return true; } diff --git a/inc/template.php b/inc/template.php index ad9a454b4..7ac3437fb 100644 --- a/inc/template.php +++ b/inc/template.php @@ -739,12 +739,6 @@ function tpl_youarehere($sep=' » '){ $parts = explode(':', $ID); $count = count($parts); - if($GLOBALS['ACT'] == 'search') - { - $parts = array($conf['start']); - $count = 1; - } - echo '<span class="bchead">'.$lang['youarehere'].': </span>'; // always print the startpage @@ -1164,7 +1158,7 @@ function tpl_actiondropdown($empty='',$button='>'){ if($REV) echo '<input type="hidden" name="rev" value="'.$REV.'" />'; echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'; - echo '<select name="do" id="action__selector" class="edit">'; + echo '<select name="do" class="edit quickselect">'; echo '<option value="">'.$empty.'</option>'; echo '<optgroup label=" — ">'; @@ -1204,7 +1198,7 @@ function tpl_actiondropdown($empty='',$button='>'){ echo '</optgroup>'; echo '</select>'; - echo '<input type="submit" value="'.$button.'" id="action__selectorbtn" />'; + echo '<input type="submit" value="'.$button.'" />'; echo '</form>'; } |