summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc')
-rw-r--r--inc/Mailer.class.php22
-rw-r--r--inc/SimplePie.php6
-rw-r--r--inc/lang/fa/lang.php16
-rw-r--r--inc/lang/hi/diff.txt3
-rw-r--r--inc/lang/hi/lang.php18
-rw-r--r--inc/lang/hu/lang.php12
-rw-r--r--inc/lang/ja/lang.php11
-rw-r--r--inc/lang/ko/lang.php4
-rw-r--r--inc/lang/pt-br/lang.php1
-rw-r--r--inc/lang/sk/lang.php10
-rw-r--r--inc/pageutils.php2
-rw-r--r--inc/parser/handler.php3
-rw-r--r--inc/parser/xhtml.php25
-rw-r--r--inc/plugin.php2
14 files changed, 90 insertions, 45 deletions
diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php
index 0f3321bb9..6a6468ab4 100644
--- a/inc/Mailer.class.php
+++ b/inc/Mailer.class.php
@@ -41,9 +41,10 @@ class Mailer {
global $conf;
$server = parse_url(DOKU_URL, PHP_URL_HOST);
+ if(strpos($server,'.') === false) $server = $server.'.localhost';
$this->partid = md5(uniqid(rand(), true)).'@'.$server;
- $this->boundary = '----------'.md5(uniqid(rand(), true));
+ $this->boundary = '__________'.md5(uniqid(rand(), true));
$listid = join('.', array_reverse(explode('/', DOKU_BASE))).$server;
$listid = strtolower(trim($listid, '.'));
@@ -57,6 +58,7 @@ class Mailer {
$this->setHeader('X-DokuWiki-Server', $server);
$this->setHeader('X-Auto-Response-Suppress', 'OOF');
$this->setHeader('List-Id', $conf['title'].' <'.$listid.'>');
+ $this->setHeader('Date', date('r'), false);
}
/**
@@ -417,6 +419,8 @@ class Mailer {
$part = 1;
// embedded attachments
foreach($this->attach as $media) {
+ $media['name'] = str_replace(':', '_', cleanID($media['name'], true));
+
// create content id
$cid = 'part'.$part.'.'.$this->partid;
@@ -426,13 +430,14 @@ class Mailer {
}
$mime .= '--'.$this->boundary.MAILHEADER_EOL;
- $mime .= 'Content-Type: '.$media['mime'].';'.MAILHEADER_EOL;
+ $mime .= 'Content-Type: '.$media['mime'].';'.MAILHEADER_EOL.
+ ' id="'.$cid.'"'.MAILHEADER_EOL;
$mime .= 'Content-Transfer-Encoding: base64'.MAILHEADER_EOL;
$mime .= "Content-ID: <$cid>".MAILHEADER_EOL;
if($media['embed']) {
- $mime .= 'Content-Disposition: inline; filename="'.$media['name'].'"'.MAILHEADER_EOL;
+ $mime .= 'Content-Disposition: inline; filename='.$media['name'].''.MAILHEADER_EOL;
} else {
- $mime .= 'Content-Disposition: attachment; filename="'.$media['name'].'"'.MAILHEADER_EOL;
+ $mime .= 'Content-Disposition: attachment; filename='.$media['name'].''.MAILHEADER_EOL;
}
$mime .= MAILHEADER_EOL; //end of headers
$mime .= chunk_split(base64_encode($media['data']), 74, MAILHEADER_EOL);
@@ -469,7 +474,7 @@ class Mailer {
if(!$this->html && !count($this->attach)) { // we can send a simple single part message
$this->headers['Content-Type'] = 'text/plain; charset=UTF-8';
$this->headers['Content-Transfer-Encoding'] = 'base64';
- $body .= chunk_split(base64_encode($this->text), 74, MAILHEADER_EOL);
+ $body .= chunk_split(base64_encode($this->text), 72, MAILHEADER_EOL);
} else { // multi part it is
$body .= "This is a multi-part message in MIME format.".MAILHEADER_EOL;
@@ -484,10 +489,11 @@ class Mailer {
$body .= 'Content-Type: text/plain; charset=UTF-8'.MAILHEADER_EOL;
$body .= 'Content-Transfer-Encoding: base64'.MAILHEADER_EOL;
$body .= MAILHEADER_EOL;
- $body .= chunk_split(base64_encode($this->text), 74, MAILHEADER_EOL);
+ $body .= chunk_split(base64_encode($this->text), 72, MAILHEADER_EOL);
$body .= '--'.$this->boundary.'XX'.MAILHEADER_EOL;
$body .= 'Content-Type: multipart/related;'.MAILHEADER_EOL.
- ' boundary="'.$this->boundary.'"'.MAILHEADER_EOL;
+ ' boundary="'.$this->boundary.'";'.MAILHEADER_EOL.
+ ' type="text/html"'.MAILHEADER_EOL;
$body .= MAILHEADER_EOL;
}
@@ -495,7 +501,7 @@ class Mailer {
$body .= 'Content-Type: text/html; charset=UTF-8'.MAILHEADER_EOL;
$body .= 'Content-Transfer-Encoding: base64'.MAILHEADER_EOL;
$body .= MAILHEADER_EOL;
- $body .= chunk_split(base64_encode($this->html), 74, MAILHEADER_EOL);
+ $body .= chunk_split(base64_encode($this->html), 72, MAILHEADER_EOL);
$body .= MAILHEADER_EOL;
$body .= $attachments;
$body .= '--'.$this->boundary.'--'.MAILHEADER_EOL;
diff --git a/inc/SimplePie.php b/inc/SimplePie.php
index fd69b4b09..8a9060509 100644
--- a/inc/SimplePie.php
+++ b/inc/SimplePie.php
@@ -16579,7 +16579,11 @@ class SimplePie_Sanitize
if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
{
-
+ if (!class_exists('DOMDocument'))
+ {
+ $this->registry->call('Misc', 'error', array('DOMDocument not found, unable to use sanitizer', E_USER_WARNING, __FILE__, __LINE__));
+ return '';
+ }
$document = new DOMDocument();
$document->encoding = 'UTF-8';
$data = $this->preprocess($data, $type);
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index febb07088..6cb5164d8 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -1,19 +1,15 @@
<?php
+
/**
- * fa language file
- *
- * This file was initially built by fetching translations from other
- * Wiki projects. See the @url lines below. Additional translations
- * and fixes where done for DokuWiki by the people mentioned in the
- * lines starting with @author
- *
- * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesFa.php?view=co
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author behrad eslamifar <behrad_es@yahoo.com)
* @author Mohsen Firoozmandan <info@mambolearn.com>
* @author Omid Mottaghi <omidmr@gmail.com>
* @author Mohammad Reza Shoaei <shoaei@gmail.com>
* @author Milad DZand <M.DastanZand@gmail.com>
* @author AmirH Hassaneini <mytechmix@gmail.com>
+ * @author mehrdad <mehrdad.jafari.bojd@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'rtl';
@@ -57,6 +53,7 @@ $lang['btn_revert'] = 'بازیابی';
$lang['btn_register'] = 'یک حساب جدید بسازید';
$lang['btn_apply'] = 'اعمال کن';
$lang['btn_media'] = 'مدیریت محتوای چند رسانه ای';
+$lang['btn_deleteuser'] = 'حذف حساب کاربری خود';
$lang['loggedinas'] = 'به عنوان کاربر روبرو وارد شده‌اید:';
$lang['user'] = 'نام کاربری:';
$lang['pass'] = 'گذرواژه‌ی شما';
@@ -68,6 +65,7 @@ $lang['fullname'] = '*نام واقعی شما';
$lang['email'] = 'ایمیل شما*';
$lang['profile'] = 'پروفایل کاربر';
$lang['badlogin'] = 'خطا در ورود به سیستم';
+$lang['badpassconfirm'] = 'متاسفم ، رمز عبور اشتباه است';
$lang['minoredit'] = 'این ویرایش خُرد است';
$lang['draftdate'] = 'ذخیره خودکار پیش‌نویس';
$lang['nosecedit'] = 'این صفحه در این میان تغییر کرده است، اطلاعات بخش قدیمی شده است، در عوض محتوای کل نمایش داده می‌شود.';
@@ -84,6 +82,8 @@ $lang['profna'] = 'این ویکی اجازه ویرایش پرو
$lang['profnochange'] = 'تغییری صورت نگرفت';
$lang['profnoempty'] = 'نام و آدرس ایمیل باید پر شود';
$lang['profchanged'] = 'پروفایل کاربر با موفقیت به روز شد';
+$lang['profnodelete'] = 'ویکی توانایی پشتیبانی از حذف کاربران را ندارد';
+$lang['profdeleteuser'] = 'حذف حساب کاربری';
$lang['pwdforget'] = 'گذرواژه‌ی خود را فراموش کرده‌اید؟ جدید دریافت کنید';
$lang['resendna'] = 'این ویکی ارسال مجدد گذرواژه را پشتیبانی نمی‌کند';
$lang['resendpwd'] = 'تعیین کلمه عبور جدید برای ';
diff --git a/inc/lang/hi/diff.txt b/inc/lang/hi/diff.txt
new file mode 100644
index 000000000..6f88c1985
--- /dev/null
+++ b/inc/lang/hi/diff.txt
@@ -0,0 +1,3 @@
+======असमानता======
+
+यह आपको पृष्ठ के दो संस्करणों के बीच असमानता को दर्शाता है. \ No newline at end of file
diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php
index d2021fcae..184eeedbc 100644
--- a/inc/lang/hi/lang.php
+++ b/inc/lang/hi/lang.php
@@ -1,15 +1,11 @@
<?php
+
/**
- * hi language file
- *
- * This file was initially built by fetching translations from other
- * Wiki projects. See the @url lines below. Additional translations
- * and fixes where done for DokuWiki by the people mentioned in the
- * lines starting with @author
- *
- * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesHi.php?view=co
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
* @author yndesai@gmail.com
+ * @author Santosh Joshi <sanjujoshhi@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -44,6 +40,12 @@ $lang['btn_backlink'] = 'पिछली कड़ियाँ';
$lang['btn_backtomedia'] = 'मीडिया फाइल चयन पर पीछे जायें';
$lang['btn_subscribe'] = 'सदस्यता प्रबंधन';
$lang['btn_profile'] = 'परिचय संपादित करें';
+$lang['btn_resendpwd'] = 'नया पासवर्ड सेट करें';
+$lang['btn_draft'] = 'प्रारूप सम्पादित करें';
+$lang['btn_draftdel'] = 'प्रारूप मिटायें';
+$lang['btn_revert'] = 'वापस लौटाएं';
+$lang['btn_apply'] = 'लागू करें';
+$lang['btn_deleteuser'] = 'खाता मिटायें';
$lang['user'] = 'उपयोगकर्ता का नाम';
$lang['pass'] = 'गुप्त शब्द';
$lang['newpass'] = 'नव गुप्त शब्द';
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index 6b950744e..2622934c2 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -1,8 +1,8 @@
<?php
+
/**
- * Hungarian language file
- *
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Ziegler Gábor <gziegler@freemail.hu>
* @author Sandor TIHANYI <stihanyi+dw@gmail.com>
* @author Siaynoq Mage <siaynoqmage@gmail.com>
@@ -11,6 +11,7 @@
* @author Sándor TIHANYI <stihanyi+dw@gmail.com>
* @author David Szabo <szabo.david@gyumolcstarhely.hu>
* @author Marton Sebok <sebokmarton@gmail.com>
+ * @author Serenity87HUN <anikototh87@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -54,6 +55,7 @@ $lang['btn_revert'] = 'Helyreállítás';
$lang['btn_register'] = 'Regisztráció';
$lang['btn_apply'] = 'Alkalmaz';
$lang['btn_media'] = 'Médiakezelő';
+$lang['btn_deleteuser'] = 'Felhasználói fiókom eltávolítása';
$lang['loggedinas'] = 'Belépett felhasználó: ';
$lang['user'] = 'Azonosító';
$lang['pass'] = 'Jelszó';
@@ -65,6 +67,7 @@ $lang['fullname'] = 'Teljes név';
$lang['email'] = 'E-Mail';
$lang['profile'] = 'Személyes beállítások';
$lang['badlogin'] = 'Sajnáljuk, az azonosító vagy a jelszó nem jó.';
+$lang['badpassconfirm'] = 'Hibás jelszó';
$lang['minoredit'] = 'Apróbb változások';
$lang['draftdate'] = 'Piszkozat elmentve:';
$lang['nosecedit'] = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltsd újra az egész oldalt!';
@@ -81,6 +84,11 @@ $lang['profna'] = 'Ez a wiki nem támogatja a személyes beállí
$lang['profnochange'] = 'Nem történt változás.';
$lang['profnoempty'] = 'A név és e-mail mező nem maradhat üresen!';
$lang['profchanged'] = 'A személyes beállítások változtatása megtörtént.';
+$lang['profnodelete'] = 'Ez a wiki nem támogatja a felhasználói fiókok törlését';
+$lang['profdeleteuser'] = 'Felhasználói fiók törlése';
+$lang['profdeleted'] = 'Felhasználói fiókodat eltávolítottuk erről a wiki-ről.';
+$lang['profconfdelete'] = 'Szeretném eltávolítani a felhasználói fiókomat erről a wikiről. <br/> Ez a cselekvés nem visszavonható.';
+$lang['profconfdeletemissing'] = 'A megerősítő négyzet nincs bepipálva';
$lang['pwdforget'] = 'Elfelejtetted a jelszavad? Itt kérhetsz újat';
$lang['resendna'] = 'Ez a wiki nem támogatja a jelszó újraküldést.';
$lang['resendpwd'] = 'Új jelszó beállítása a következőhöz:';
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 12a95b1ab..b032e1ce5 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -10,6 +10,7 @@
* @author Taisuke Shimamoto <dentostar@gmail.com>
* @author Satoshi Sahara <sahara.satoshi@gmail.com>
* @author Hideaki SAWADA <chuno@live.jp>
+ * @author Hideaki SAWADA <sawadakun@live.jp>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -53,6 +54,7 @@ $lang['btn_revert'] = '元に戻す';
$lang['btn_register'] = 'ユーザー登録';
$lang['btn_apply'] = '適用';
$lang['btn_media'] = 'メディアマネージャー';
+$lang['btn_deleteuser'] = '自分のアカウントの抹消';
$lang['loggedinas'] = 'ようこそ';
$lang['user'] = 'ユーザー名';
$lang['pass'] = 'パスワード';
@@ -64,6 +66,7 @@ $lang['fullname'] = 'フルネーム';
$lang['email'] = 'メールアドレス';
$lang['profile'] = 'ユーザー情報';
$lang['badlogin'] = 'ユーザー名かパスワードが違います。';
+$lang['badpassconfirm'] = 'パスワードが間違っています。';
$lang['minoredit'] = '小変更';
$lang['draftdate'] = 'ドラフト保存日時:';
$lang['nosecedit'] = 'ページ内容が変更されていますがセクション情報が古いため、代わりにページ全体をロードしました。';
@@ -80,6 +83,11 @@ $lang['profna'] = 'ユーザー情報の変更は出来ません'
$lang['profnochange'] = '変更点はありませんでした。';
$lang['profnoempty'] = 'ユーザー名とメールアドレスを入力して下さい。';
$lang['profchanged'] = 'ユーザー情報は更新されました。';
+$lang['profnodelete'] = 'この wiki はユーザーを削除できない。';
+$lang['profdeleteuser'] = 'アカウントの削除';
+$lang['profdeleted'] = 'このwikiからあなたのユーザーアカウントは削除済です。';
+$lang['profconfdelete'] = 'このwikiから自分のアカウント抹消を希望します。<br/> この操作は取消すことができません。';
+$lang['profconfdeletemissing'] = '確認のチェックボックスがチェックされていません。';
$lang['pwdforget'] = 'パスワードをお忘れですか?パスワード再発行';
$lang['resendna'] = 'パスワードの再発行は出来ません。';
$lang['resendpwd'] = '新しいパスワードをセット';
@@ -288,6 +296,9 @@ $lang['i_pol1'] = 'パブリック Wiki(閲覧は全ての人�
$lang['i_pol2'] = 'クローズド Wiki (登録ユーザーにのみ使用を許可)';
$lang['i_retry'] = '再試行';
$lang['i_license'] = 'あなたが作成したコンテンツが属するライセンスを選択してください:';
+$lang['i_license_none'] = 'ライセンス情報を表示しません。';
+$lang['i_pop_field'] = 'Dokuwiki の内容の向上に協力して下さい:';
+$lang['i_pop_label'] = '月に一回、DokuWikiの開発者に匿名の使用データを送信します。';
$lang['recent_global'] = '現在、<b>%s</b> 名前空間内の変更点を閲覧中です。<a href="%s">Wiki全体の最近の変更点の確認</a>もできます。';
$lang['years'] = '%d年前';
$lang['months'] = '%dカ月前';
diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php
index 1949a5fac..e6cae3db0 100644
--- a/inc/lang/ko/lang.php
+++ b/inc/lang/ko/lang.php
@@ -96,8 +96,8 @@ $lang['resendpwdnouser'] = '죄송하지만 데이터베이스에서 이 �
$lang['resendpwdbadauth'] = '죄송하지만 인증 코드가 올바르지 않습니다. 잘못된 확인 링크인지 확인하세요.';
$lang['resendpwdconfirm'] = '확인 링크를 이메일로 보냈습니다.';
$lang['resendpwdsuccess'] = '새 비밀번호를 이메일로 보냈습니다.';
-$lang['license'] = '별도로 라이선스를 알리지 않을 경우, 이 위키의 내용은 다음의 라이선스에 따라 사용할 수 있습니다:';
-$lang['licenseok'] = '참고: 이 문서를 편집할 경우 다음의 라이선스에 따라 배포하는 데에 동의합니다:';
+$lang['license'] = '별도로 명시하지 않을 경우, 이 위키의 내용은 다음의 라이선스에 따라 사용할 수 있습니다:';
+$lang['licenseok'] = '참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 사용 허가에 동의합니다:';
$lang['searchmedia'] = '파일 이름 찾기:';
$lang['searchmedia_in'] = '%s에서 찾기';
$lang['txt_upload'] = '올릴 파일 선택';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index 639dca768..812799f04 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -21,6 +21,7 @@
* @author Balaco Baco <balacobaco@imap.cc>
* @author Victor Westmann <victor.westmann@gmail.com>
* @author Leone Lisboa Magevski <leone1983@gmail.com>
+ * @author Dário Estevão <darioems@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index a494604f3..e8c1151d5 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -50,6 +50,7 @@ $lang['btn_revert'] = 'Obnoviť';
$lang['btn_register'] = 'Registrovať';
$lang['btn_apply'] = 'Použiť';
$lang['btn_media'] = 'Správa médií';
+$lang['btn_deleteuser'] = 'Zrušiť môj účet';
$lang['loggedinas'] = 'Prihlásený(á) ako';
$lang['user'] = 'Užívateľské meno';
$lang['pass'] = 'Heslo';
@@ -61,6 +62,7 @@ $lang['fullname'] = 'Celé meno';
$lang['email'] = 'E-Mail';
$lang['profile'] = 'Užívateľský profil';
$lang['badlogin'] = 'Zadané užívateľské meno a heslo nie je správne.';
+$lang['badpassconfirm'] = 'Ľutujem, heslo bolo nesprávne.';
$lang['minoredit'] = 'Menšie zmeny';
$lang['draftdate'] = 'Koncept automaticky uložený';
$lang['nosecedit'] = 'Stránka bola medzičasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.';
@@ -77,6 +79,11 @@ $lang['profna'] = 'Táto wiki nepodporuje zmenu profilu';
$lang['profnochange'] = 'Žiadne zmeny, nie je čo robiť.';
$lang['profnoempty'] = 'Prázdne meno alebo mailová adresa nie sú povolené.';
$lang['profchanged'] = 'Užívateľský účet úspešne zmenený.';
+$lang['profnodelete'] = 'Táto wiki neumožňuje zrušenie používateľov.';
+$lang['profdeleteuser'] = 'Zrušiť účet';
+$lang['profdeleted'] = 'Váš účet bol zrušený v tejto wiki.';
+$lang['profconfdelete'] = 'Chcem odstrániť môj účet z tejto wiki. <br/> Táto operácia je nevratná.';
+$lang['profconfdeletemissing'] = 'Nebolo zavolené potvrdzovacie políčko';
$lang['pwdforget'] = 'Zabudli ste heslo? Získajte nové!';
$lang['resendna'] = 'Táto wiki nepodporuje opätovné zasielanie hesla.';
$lang['resendpwd'] = 'Nastaviť nové heslo pre';
@@ -285,6 +292,9 @@ $lang['i_pol1'] = 'Verejná Wiki (čítanie pre každého, zápis
$lang['i_pol2'] = 'Uzatvorená Wiki (čítanie, zápis a nahrávanie len pre registrovaných užívateľov)';
$lang['i_retry'] = 'Skúsiť znovu';
$lang['i_license'] = 'Vyberte licenciu, pod ktorou chcete uložiť váš obsah:';
+$lang['i_license_none'] = 'Nezobrazovať žiadne licenčné informácie';
+$lang['i_pop_field'] = 'Prosím pomôžte nám zlepšiť prácu s DokuWiki:';
+$lang['i_pop_label'] = 'Raz mesačne zaslať anonymné údaje vývojárom DokuWiki';
$lang['recent_global'] = 'Práve prehliadate zmeny v mennom priestore <b>%s</b>. Môžete si tiež pozrieť <a href="%s">aktuálne zmeny celej wiki</a>.';
$lang['years'] = 'pred %d rokmi';
$lang['months'] = 'pred %d mesiacmi';
diff --git a/inc/pageutils.php b/inc/pageutils.php
index 5043d2263..bf79daa7d 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -366,7 +366,7 @@ function mediaFN($id, $rev=''){
*/
function localeFN($id,$ext='txt'){
global $conf;
- $file = DOKU_CONF.'/lang/'.$conf['lang'].'/'.$id.'.'.$ext;
+ $file = DOKU_CONF.'lang/'.$conf['lang'].'/'.$id.'.'.$ext;
if(!@file_exists($file)){
$file = DOKU_INC.'inc/lang/'.$conf['lang'].'/'.$id.'.'.$ext;
if(!@file_exists($file)){
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index b72f051ae..1de981b48 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -1371,7 +1371,8 @@ class Doku_Handler_Table {
if (is_null($spanning_cell)) {
// No spanning cell found, so convert this cell to
// an empty one to avoid broken tables
- $this->tableCells[$key][1][1] = '';
+ $this->tableCalls[$key][0] = 'cdata';
+ $this->tableCalls[$key][1][0] = '';
continue;
}
$this->tableCalls[$cellKey[$spanning_cell][$lastCell]][1][2]++;
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index 848afbd4f..fd02c0ce0 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -33,6 +33,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
private $lastsecid = 0; // last section edit id, used by startSectionEdit
var $headers = array();
+ /** @var array a list of footnotes, list starts at 1! */
var $footnotes = array();
var $lastlevel = 0;
var $node = array(0,0,0,0,0);
@@ -100,10 +101,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if ( count ($this->footnotes) > 0 ) {
$this->doc .= '<div class="footnotes">'.DOKU_LF;
- $id = 0;
- foreach ( $this->footnotes as $footnote ) {
- $id++; // the number of the current footnote
-
+ foreach ( $this->footnotes as $id => $footnote ) {
// check its not a placeholder that indicates actual footnote text is elsewhere
if (substr($footnote, 0, 5) != "@@FNT") {
@@ -118,8 +116,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if (count($alt)) {
foreach ($alt as $ref) {
// set anchor and backlink for the other footnotes
- $this->doc .= ', <sup><a href="#fnt__'.($ref+1).'" id="fn__'.($ref+1).'" class="fn_bot">';
- $this->doc .= ($ref+1).')</a></sup> '.DOKU_LF;
+ $this->doc .= ', <sup><a href="#fnt__'.($ref).'" id="fn__'.($ref).'" class="fn_bot">';
+ $this->doc .= ($ref).')</a></sup> '.DOKU_LF;
}
}
@@ -295,6 +293,10 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
* @author Andreas Gohr
*/
function footnote_close() {
+ /** @var $fnid int takes track of seen footnotes, assures they are unique even across multiple docs FS#2841 */
+ static $fnid = 0;
+ // assign new footnote id (we start at 1)
+ $fnid++;
// recover footnote into the stack and restore old content
$footnote = $this->doc;
@@ -306,17 +308,14 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if ($i === false) {
// its a new footnote, add it to the $footnotes array
- $id = count($this->footnotes)+1;
- $this->footnotes[count($this->footnotes)] = $footnote;
+ $this->footnotes[$fnid] = $footnote;
} else {
- // seen this one before, translate the index to an id and save a placeholder
- $i++;
- $id = count($this->footnotes)+1;
- $this->footnotes[count($this->footnotes)] = "@@FNT".($i);
+ // seen this one before, save a placeholder
+ $this->footnotes[$fnid] = "@@FNT".($i);
}
// output the footnote reference and link
- $this->doc .= '<sup><a href="#fn__'.$id.'" id="fnt__'.$id.'" class="fn_top">'.$id.')</a></sup>';
+ $this->doc .= '<sup><a href="#fn__'.$fnid.'" id="fnt__'.$fnid.'" class="fn_top">'.$fnid.')</a></sup>';
}
function listu_open() {
diff --git a/inc/plugin.php b/inc/plugin.php
index 422b82534..dccd37bd9 100644
--- a/inc/plugin.php
+++ b/inc/plugin.php
@@ -97,7 +97,7 @@ class DokuWiki_Plugin {
function localFN($id) {
global $conf;
$plugin = $this->getPluginName();
- $file = DOKU_CONF.'/plugin_lang/'.$plugin.'/'.$conf['lang'].'/'.$id.'.txt';
+ $file = DOKU_CONF.'plugin_lang/'.$plugin.'/'.$conf['lang'].'/'.$id.'.txt';
if (!@file_exists($file)){
$file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
if(!@file_exists($file)){