diff options
Diffstat (limited to 'inc')
-rw-r--r-- | inc/auth.php | 28 | ||||
-rw-r--r-- | inc/fetch.functions.php | 13 | ||||
-rw-r--r-- | inc/html.php | 8 | ||||
-rw-r--r-- | inc/io.php | 50 | ||||
-rw-r--r-- | inc/lang/cs/lang.php | 6 | ||||
-rw-r--r-- | inc/lang/el/lang.php | 1 | ||||
-rw-r--r-- | inc/lang/hu/lang.php | 6 | ||||
-rw-r--r-- | inc/lang/id/adminplugins.txt | 1 | ||||
-rw-r--r-- | inc/lang/id/lang.php | 28 | ||||
-rw-r--r-- | inc/lang/ko/install.html | 26 | ||||
-rw-r--r-- | inc/lang/pl/lang.php | 6 | ||||
-rw-r--r-- | inc/lang/ru/lang.php | 5 | ||||
-rw-r--r-- | inc/lang/sk/lang.php | 1 | ||||
-rw-r--r-- | inc/lang/tr/lang.php | 13 | ||||
-rw-r--r-- | inc/lessc.inc.php | 2 | ||||
-rw-r--r-- | inc/load.php | 1 | ||||
-rw-r--r-- | inc/media.php | 58 | ||||
-rw-r--r-- | inc/parser/parser.php | 80 | ||||
-rw-r--r-- | inc/parser/xhtml.php | 149 | ||||
-rw-r--r-- | inc/plugin.php | 27 | ||||
-rw-r--r-- | inc/template.php | 13 |
21 files changed, 474 insertions, 48 deletions
diff --git a/inc/auth.php b/inc/auth.php index b793f5d12..6000ea6d7 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -661,17 +661,39 @@ function auth_quickaclcheck($id) { } /** - * Returns the maximum rights a user has for - * the given ID or its namespace + * Returns the maximum rights a user has for the given ID or its namespace * * @author Andreas Gohr <andi@splitbrain.org> - * + * @triggers AUTH_ACL_CHECK * @param string $id page ID (needs to be resolved and cleaned) * @param string $user Username * @param array|null $groups Array of groups the user is in * @return int permission level */ function auth_aclcheck($id, $user, $groups) { + $data = array( + 'id' => $id, + 'user' => $user, + 'groups' => $groups + ); + + return trigger_event('AUTH_ACL_CHECK', $data, 'auth_aclcheck_cb'); +} + +/** + * default ACL check method + * + * DO NOT CALL DIRECTLY, use auth_aclcheck() instead + * + * @author Andreas Gohr <andi@splitbrain.org> + * @param array $data event data + * @return int permission level + */ +function auth_aclcheck_cb($data) { + $id =& $data['id']; + $user =& $data['user']; + $groups =& $data['groups']; + global $conf; global $AUTH_ACL; /* @var DokuWiki_Auth_Plugin $auth */ diff --git a/inc/fetch.functions.php b/inc/fetch.functions.php index 207ad9e5f..3eacaa2fe 100644 --- a/inc/fetch.functions.php +++ b/inc/fetch.functions.php @@ -15,13 +15,15 @@ * * @author Andreas Gohr <andi@splitbrain.org> * @author Ben Coburn <btcoburn@silicodon.net> + * @author Gerry Weissbach <dokuwiki@gammaproduction.de> * @param string $file local file to send * @param string $mime mime type of the file * @param bool $dl set to true to force a browser download * @param int $cache remaining cache time in seconds (-1 for $conf['cache'], 0 for no-cache) * @param bool $public is this a public ressource or a private one? + * @param string $orig original file to send - the file name will be used for the Content-Disposition */ -function sendFile($file, $mime, $dl, $cache, $public = false) { +function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null) { global $conf; // send mime headers header("Content-Type: $mime"); @@ -62,11 +64,16 @@ function sendFile($file, $mime, $dl, $cache, $public = false) { $fmtime = @filemtime($file); http_conditionalRequest($fmtime); + // Use the current $file if is $orig is not set. + if ( $orig == null ) { + $orig = $file; + } + //download or display? if($dl) { - header('Content-Disposition: attachment; filename="'.utf8_basename($file).'";'); + header('Content-Disposition: attachment; filename="'.utf8_basename($orig).'";'); } else { - header('Content-Disposition: inline; filename="'.utf8_basename($file).'";'); + header('Content-Disposition: inline; filename="'.utf8_basename($orig).'";'); } //use x-sendfile header to pass the delivery to compatible webservers diff --git a/inc/html.php b/inc/html.php index 7f473cdb6..5941a9af2 100644 --- a/inc/html.php +++ b/inc/html.php @@ -1698,12 +1698,12 @@ function html_admin(){ } unset($menu['acl']); - if($menu['plugin']){ + if($menu['extension']){ ptln(' <li class="admin_plugin"><div class="li">'. - '<a href="'.wl($ID, array('do' => 'admin','page' => 'plugin')).'">'. - $menu['plugin']['prompt'].'</a></div></li>'); + '<a href="'.wl($ID, array('do' => 'admin','page' => 'extension')).'">'. + $menu['extension']['prompt'].'</a></div></li>'); } - unset($menu['plugin']); + unset($menu['extension']); if($menu['config']){ ptln(' <li class="admin_config"><div class="li">'. diff --git a/inc/io.php b/inc/io.php index eff0279ac..c5225a2e0 100644 --- a/inc/io.php +++ b/inc/io.php @@ -401,6 +401,56 @@ function io_mkdir_p($target){ } /** + * Recursively delete a directory + * + * @author Andreas Gohr <andi@splitbrain.org> + * @param string $path + * @param bool $removefiles defaults to false which will delete empty directories only + * @return bool + */ +function io_rmdir($path, $removefiles = false) { + if(!is_string($path) || $path == "") return false; + if(!file_exists($path)) return true; // it's already gone or was never there, count as success + + if(is_dir($path) && !is_link($path)) { + $dirs = array(); + $files = array(); + + if(!$dh = @opendir($path)) return false; + while(false !== ($f = readdir($dh))) { + if($f == '..' || $f == '.') continue; + + // collect dirs and files first + if(is_dir("$path/$f") && !is_link("$path/$f")) { + $dirs[] = "$path/$f"; + } else if($removefiles) { + $files[] = "$path/$f"; + } else { + return false; // abort when non empty + } + + } + closedir($dh); + + // now traverse into directories first + foreach($dirs as $dir) { + if(!io_rmdir($dir, $removefiles)) return false; // abort on any error + } + + // now delete files + foreach($files as $file) { + if(!@unlink($file)) return false; //abort on any error + } + + // remove self + return @rmdir($path); + } else if($removefiles) { + return @unlink($path); + } + return false; +} + +/** * Creates a directory using FTP * * This is used when the safemode workaround is enabled diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php index 56ffd91de..a0f69b3dc 100644 --- a/inc/lang/cs/lang.php +++ b/inc/lang/cs/lang.php @@ -16,6 +16,7 @@ * @author mkucera66@seznam.cz * @author Zbyněk Křivka <krivka@fit.vutbr.cz> * @author Gerrit Uitslag <klapinklapin@gmail.com> + * @author Petr Klíma <qaxi@seznam.cz> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -299,6 +300,7 @@ $lang['i_policy'] = 'Úvodní politika ACL'; $lang['i_pol0'] = 'Otevřená wiki (čtení, zápis a upload pro všechny)'; $lang['i_pol1'] = 'Veřejná wiki (čtení pro všechny, zápis a upload pro registrované uživatele)'; $lang['i_pol2'] = 'Uzavřená wiki (čtení, zápis a upload pouze pro registrované uživatele)'; +$lang['i_allowreg'] = 'Povol uživatelům registraci'; $lang['i_retry'] = 'Zkusit znovu'; $lang['i_license'] = 'Vyberte prosím licenci obsahu:'; $lang['i_license_none'] = 'Nezobrazovat žádné licenční informace'; @@ -336,3 +338,7 @@ $lang['media_perm_read'] = 'Bohužel, nemáte práva číst soubory.'; $lang['media_perm_upload'] = 'Bohužel, nemáte práva nahrávat soubory.'; $lang['media_update'] = 'Nahrát novou verzi'; $lang['media_restore'] = 'Obnovit tuto verzi'; +$lang['currentns'] = 'Aktuální jmenný prostor'; +$lang['searchresult'] = 'Výsledek hledání'; +$lang['plainhtml'] = 'Čisté HTML'; +$lang['wikimarkup'] = 'Wiki jazyk'; diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php index 8007f2b23..170e101a5 100644 --- a/inc/lang/el/lang.php +++ b/inc/lang/el/lang.php @@ -11,6 +11,7 @@ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com * @author Constantinos Xanthopoulos <conx@xanthopoulos.info> * @author chris taklis <ctaklis@gmail.com> + * @author cross <cross1962@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php index 2622934c2..5113e1cc8 100644 --- a/inc/lang/hu/lang.php +++ b/inc/lang/hu/lang.php @@ -12,6 +12,7 @@ * @author David Szabo <szabo.david@gyumolcstarhely.hu> * @author Marton Sebok <sebokmarton@gmail.com> * @author Serenity87HUN <anikototh87@gmail.com> + * @author Marina Vladi <deldadam@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -295,6 +296,7 @@ $lang['i_policy'] = 'Kezdeti hozzáférési lista házirend'; $lang['i_pol0'] = 'Nyitott wiki (mindenki olvashatja, írhatja és fájlokat tölthet fel)'; $lang['i_pol1'] = 'Publikus wiki (mindenki olvashatja, de csak regisztrált felhasználók írhatják és tölthetnek fel fájlokat)'; $lang['i_pol2'] = 'Zárt wiki (csak regisztrált felhasználók olvashatják, írhatják és tölthetnek fel fájlokat)'; +$lang['i_allowreg'] = 'A felhasználók saját maguk is regisztrálhatnak'; $lang['i_retry'] = 'Újra'; $lang['i_license'] = 'Kérlek, válassz licencet a feltöltött tartalomhoz:'; $lang['i_license_none'] = 'Ne jelenítsen meg licenc információt'; @@ -332,3 +334,7 @@ $lang['media_perm_read'] = 'Sajnáljuk, nincs jogod a fájlok olvasásáho $lang['media_perm_upload'] = 'Sajnáljuk, nincs jogod a feltöltéshez.'; $lang['media_update'] = 'Új verzió feltöltése'; $lang['media_restore'] = 'Ezen verzió visszaállítása'; +$lang['currentns'] = 'Aktuális névtér'; +$lang['searchresult'] = 'Keresés eredménye'; +$lang['plainhtml'] = 'Sima HTML'; +$lang['wikimarkup'] = 'Wiki-jelölő nyelv'; diff --git a/inc/lang/id/adminplugins.txt b/inc/lang/id/adminplugins.txt new file mode 100644 index 000000000..2a91b3d1a --- /dev/null +++ b/inc/lang/id/adminplugins.txt @@ -0,0 +1 @@ +=====Plugin Tambahan=====
\ No newline at end of file diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php index 3d99c9a22..5cb5cb6ea 100644 --- a/inc/lang/id/lang.php +++ b/inc/lang/id/lang.php @@ -7,6 +7,7 @@ * @author Irwan Butar Butar <irwansah.putra@gmail.com> * @author Yustinus Waruwu <juswaruwu@gmail.com> * @author zamroni <therons@ymail.com> + * @author umriya afini <bigdream.power@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -42,9 +43,14 @@ $lang['btn_backtomedia'] = 'Kembali ke Pilihan Mediafile'; $lang['btn_subscribe'] = 'Ikuti Perubahan'; $lang['btn_profile'] = 'Ubah Profil'; $lang['btn_reset'] = 'Reset'; +$lang['btn_resendpwd'] = 'Atur password baru'; $lang['btn_draft'] = 'Edit draft'; +$lang['btn_recover'] = 'Cadangkan draf'; $lang['btn_draftdel'] = 'Hapus draft'; +$lang['btn_revert'] = 'Kembalikan'; $lang['btn_register'] = 'Daftar'; +$lang['btn_apply'] = 'Terapkan'; +$lang['btn_deleteuser'] = 'Hapus Akun Saya'; $lang['loggedinas'] = 'Login sebagai '; $lang['user'] = 'Username'; $lang['pass'] = 'Password'; @@ -56,6 +62,7 @@ $lang['fullname'] = 'Nama lengkap'; $lang['email'] = 'E-Mail'; $lang['profile'] = 'Profil User'; $lang['badlogin'] = 'Maaf, username atau password salah.'; +$lang['badpassconfirm'] = 'Maaf, password salah'; $lang['minoredit'] = 'Perubahan Minor'; $lang['draftdate'] = 'Simpan draft secara otomatis'; $lang['regmissing'] = 'Maaf, Anda harus mengisi semua field.'; @@ -71,13 +78,20 @@ $lang['profna'] = 'Wiki ini tidak mengijinkan perubahan profil.'; $lang['profnochange'] = 'Tidak ada perubahan.'; $lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.'; $lang['profchanged'] = 'Profil User berhasil diubah.'; +$lang['profdeleteuser'] = 'Hapus Akun'; +$lang['profdeleted'] = 'Akun anda telah dihapus dari wiki ini'; +$lang['profconfdelete'] = 'Saya berharap menghapus akun saya dari wiki ini. +Aksi ini tidak bisa diselesaikan.'; +$lang['profconfdeletemissing'] = 'Knfirmasi check box tidak tercentang'; $lang['pwdforget'] = 'Lupa Password? Dapatkan yang baru'; $lang['resendna'] = 'Wiki ini tidak mendukung pengiriman ulang password.'; +$lang['resendpwd'] = 'Atur password baru'; $lang['resendpwdmissing'] = 'Maaf, Anda harus mengisikan semua field.'; $lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.'; $lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.'; $lang['resendpwdconfirm'] = 'Link konfirmasi telah dikirim melalui email.'; $lang['resendpwdsuccess'] = 'Password baru Anda telah dikirim melalui email.'; +$lang['searchmedia'] = 'Cari nama file:'; $lang['txt_upload'] = 'File yang akan diupload'; $lang['txt_filename'] = 'Masukkan nama wiki (opsional)'; $lang['txt_overwrt'] = 'File yang telah ada akan ditindih'; @@ -85,11 +99,22 @@ $lang['lockedby'] = 'Sedang dikunci oleh'; $lang['lockexpire'] = 'Penguncian artikel sampai dengan'; $lang['js']['willexpire'] = 'Halaman yang sedang Anda kunci akan berakhir dalam waktu kurang lebih satu menit.\nUntuk menghindari konflik, gunakan tombol Preview untuk me-reset timer pengunci.'; $lang['js']['notsavedyet'] = 'Perubahan yang belum disimpan akan hilang.\nYakin akan dilanjutkan?'; +$lang['js']['searchmedia'] = 'Cari file'; $lang['js']['keepopen'] = 'Biarkan window terbuka dalam pemilihan'; $lang['js']['hidedetails'] = 'Sembunyikan detil'; +$lang['js']['mediatitle'] = 'Pengaturan Link'; +$lang['js']['mediasize'] = 'Ukuran gambar'; +$lang['js']['mediaclose'] = 'Tutup'; +$lang['js']['mediadisplayimg'] = 'Lihat gambar'; +$lang['js']['mediadisplaylnk'] = 'Lihat hanya link'; $lang['js']['nosmblinks'] = 'Link ke share Windows hanya bekerja di Microsoft Internet Explorer. Anda masih dapat mengcopy and paste linknya.'; $lang['js']['del_confirm'] = 'Hapus tulisan ini?'; +$lang['js']['media_select'] = 'Pilih file...'; +$lang['js']['media_upload_btn'] = 'Unggah'; +$lang['js']['media_done_btn'] = 'Selesai'; +$lang['js']['media_drop'] = 'Tarik file disini untuk mengunggah'; +$lang['js']['media_cancel'] = 'Buang'; $lang['rssfailed'] = 'Error terjadi saat mengambil feed: '; $lang['nothingfound'] = 'Tidak menemukan samasekali.'; $lang['mediaselect'] = 'Pilihan Mediafile'; @@ -101,11 +126,13 @@ $lang['uploadexist'] = 'File telah ada. Tidak mengerjakan apa-apa.'; $lang['uploadbadcontent'] = 'Isi file yang diupload tidak cocok dengan ekstensi file %s.'; $lang['uploadspam'] = 'File yang diupload diblok oleh spam blacklist.'; $lang['uploadxss'] = 'File yang diupload diblok karena kemungkinan isi yang berbahaya.'; +$lang['uploadsize'] = 'File yang diupload terlalu besar. (max.%)'; $lang['deletesucc'] = 'File "%s" telah dihapus.'; $lang['deletefail'] = '"%s" tidak dapat dihapus - cek hak aksesnya.'; $lang['mediainuse'] = 'File "%s" belum dihapus - file ini sedang digunakan.'; $lang['namespaces'] = 'Namespaces'; $lang['mediafiles'] = 'File tersedia didalam'; +$lang['accessdenied'] = 'Anda tidak diperbolehkan melihat halaman ini'; $lang['mediausage'] = 'Gunakan sintaks berikut untuk me-refer ke file ini'; $lang['mediaview'] = 'Tampilkan file asli'; $lang['mediaroot'] = 'root'; @@ -135,6 +162,7 @@ $lang['mail_newpage'] = 'Halaman ditambahkan:'; $lang['mail_changed'] = 'Halaman diubah:'; $lang['mail_new_user'] = 'User baru:'; $lang['mail_upload'] = 'Berkas di-upload:'; +$lang['pages_changes'] = 'Halaman'; $lang['qb_bold'] = 'Tebal'; $lang['qb_italic'] = 'Miring'; $lang['qb_underl'] = 'Garis Bawah'; diff --git a/inc/lang/ko/install.html b/inc/lang/ko/install.html index 886ed2d30..ecc0d3caa 100644 --- a/inc/lang/ko/install.html +++ b/inc/lang/ko/install.html @@ -1,10 +1,22 @@ -<p>이 페이지는 <a href="http://dokuwiki.org">Dokuwiki</a> 설치와 환경 설정을 도와줍니다. -설치 과정에 대한 더 자세한 정보는 <a href="http://dokuwiki.org/ko:installer">관련 문서</a>를 참고하시기 바랍니다.</p> +<p>이 페이지는 <a href="http://dokuwiki.org">도쿠위키</a>의 첫 +설치와 환경 설정을 도와줍니다. 이 설치 프로그램에 대한 자세한 정보는 +<a href="http://dokuwiki.org/ko:installer">설명문 페이지</a>에서 +볼 수 있습니다.</p> -<p>DokuWiki는 위키 문서와 문서와 관련된 정보(예를 들어 그림, 검색 색인, 이전 판 문서)를 저장하기 위해 일반적인 텍스트 파일을 사용합니다. 정상적으로 DokuWiki를 사용하려면 이 파일을 담고 있는 디렉토리에 대한 쓰기 권한을 가지고 있어야 합니다. -현재 설치 과정 중에는 디렉토리 권한 설정이 불가능합니다. 보통 직접 셸 명령어를 사용하거나, 호스팅을 사용한다면 FTP나 호스팅 제어판(예를 들어 CPanel)을 사용해서 설정해야 합니다.</p> +<p>도쿠위키는 위키 문서와 해당 문서와 관련된 정보(예를 들어 그림, +검색 색인, 이전 판 문서 등)를 저장하기 위해 일반적인 텍스트 파일을 +사용합니다. 성공적으로 작동하려면 도쿠위키는 이 파일을 담고 +있는 디렉토리에 대한 쓰기 권한이 <strong>있어야</strong> 합니다. +이 설치 프로그램은 디렉토리 권한을 설정할 수 없습니다. 보통 +직접 명령 셸에 수행하거나 호스팅을 사용한다면, FTP나 호스팅 +제어판(예를 들어 CPanel)을 통해 수행해야 합니다.</p> -<p>현재 설치 과정중에 관리자로 로그인 후 DokuWiki의 관리 메뉴(플러그인 설치, 사용자 관리, 위키 문서 접근 권한 관리, 옵션 설정)를 가능하게 <acronym title="접근 제어 목록">ACL</acronym>에 대한 환경 설정을 수행합니다. -DokuWiki가 동작하는데 필요한 사항은 아니지만, 어쨌든 더 쉽게 관리자가 관리할 수 있도록 해줍니다.</p> +<p>이 설치 프로그램은 관리자로 로그인하고 나서 플러그인 설치, 사용자 관리, +위키 문서로의 접근 관리와 환경 설정을 바꾸기 위한 도쿠위키의 관리 메뉴에 +접근할 수 있는, <acronym title="access control list; 접근 제어 목록">ACL</acronym>에 +대한 도쿠위키 환경을 설정합니다. 도쿠위키가 작동하는데 필요하지 않지만, +도쿠위키를 쉽게 관리할 수 있도록 해줍니다.</p> -<p>숙련된 사용자나 특별한 설치 과정이 필요한 경우에는 <a href="http://dokuwiki.org/ko:install">설치 과정</a>과 <a href="http://dokuwiki.org/ko:config">환경 설정</a> 링크를 참고하시기 바랍니다.</p>
\ No newline at end of file +<p>숙련된 사용자나 특수한 설치가 필요한 사용자에게 자세한 내용은 +<a href="http://dokuwiki.org/ko:install">설치 지침</a>과 +<a href="http://dokuwiki.org/ko:config">환경 설정</a> 링크를 사용해야 합니다.</p> diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php index 142dd3baa..e5f2d8d40 100644 --- a/inc/lang/pl/lang.php +++ b/inc/lang/pl/lang.php @@ -15,6 +15,7 @@ * @author Begina Felicysym <begina.felicysym@wp.eu> * @author Aoi Karasu <aoikarasu@gmail.com> * @author Tomasz Bosak <bosak.tomasz@gmail.com> + * @author Paweł Jan Czochański <czochanski@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -324,7 +325,7 @@ $lang['media_list_thumbs'] = 'Miniatury'; $lang['media_list_rows'] = 'Wiersze'; $lang['media_sort_name'] = 'Nazwa'; $lang['media_sort_date'] = 'Data'; -$lang['media_namespaces'] = 'Wybierz przestrzeń nazw'; +$lang['media_namespaces'] = 'Wybierz katalog'; $lang['media_files'] = 'Pliki w %s'; $lang['media_upload'] = 'Przesyłanie plików na %s'; $lang['media_search'] = 'Znajdź w %s'; @@ -337,6 +338,7 @@ $lang['media_perm_read'] = 'Przepraszamy, nie masz wystarczających uprawn $lang['media_perm_upload'] = 'Przepraszamy, nie masz wystarczających uprawnień do przesyłania plików.'; $lang['media_update'] = 'Prześlij nową wersję'; $lang['media_restore'] = 'Odtwórz tą wersję'; -$lang['currentns'] = 'Obecna przestrzeń nazw.'; +$lang['currentns'] = 'Obecny katalog'; $lang['searchresult'] = 'Wyniki wyszukiwania'; $lang['plainhtml'] = 'Czysty HTML'; +$lang['wikimarkup'] = 'Znaczniki'; diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php index 237b819db..208d647a8 100644 --- a/inc/lang/ru/lang.php +++ b/inc/lang/ru/lang.php @@ -23,6 +23,7 @@ * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) * @author Pavel <ivanovtsk@mail.ru> * @author Artur <ncuxxx@gmail.com> + * @author Erli Moen <evseev.jr@gmail.com> */ $lang['encoding'] = ' utf-8'; $lang['direction'] = 'ltr'; @@ -307,6 +308,7 @@ $lang['i_policy'] = 'Исходная политика прав д $lang['i_pol0'] = 'Открытая вики (чтение, запись, закачка файлов для всех)'; $lang['i_pol1'] = 'Общедоступная вики (чтение для всех, запись и загрузка файлов для зарегистрированных пользователей)'; $lang['i_pol2'] = 'Закрытая вики (чтение, запись и загрузка файлов только для зарегистрированных пользователей)'; +$lang['i_allowreg'] = 'Позволить пользователям самостоятельно регестрироваться'; $lang['i_retry'] = 'Повторить попытку'; $lang['i_license'] = 'Пожалуйста, выберите тип лицензии для своей вики:'; $lang['i_license_none'] = 'Не отображать информацию о лицензионных операциях'; @@ -345,3 +347,6 @@ $lang['media_perm_read'] = 'Извините, у вас недостато $lang['media_perm_upload'] = 'Извините, у вас недостаточно прав для загрузки файлов.'; $lang['media_update'] = 'Загрузить новую версию'; $lang['media_restore'] = 'Восстановить эту версию'; +$lang['currentns'] = 'Текущее пространство имен'; +$lang['searchresult'] = 'Результаты поиска'; +$lang['plainhtml'] = 'Чистый HTML'; diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php index a5fc47f5f..aa823b074 100644 --- a/inc/lang/sk/lang.php +++ b/inc/lang/sk/lang.php @@ -290,6 +290,7 @@ $lang['i_policy'] = 'Počiatočná ACL politika'; $lang['i_pol0'] = 'Otvorená Wiki (čítanie, zápis a nahrávanie pre každého)'; $lang['i_pol1'] = 'Verejná Wiki (čítanie pre každého, zápis a nahrávanie pre registrovaných užívateľov)'; $lang['i_pol2'] = 'Uzatvorená Wiki (čítanie, zápis a nahrávanie len pre registrovaných užívateľov)'; +$lang['i_allowreg'] = 'Povolenie samostanej registrácie použí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'; diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php index 6b9e0dd44..210a82530 100644 --- a/inc/lang/tr/lang.php +++ b/inc/lang/tr/lang.php @@ -10,6 +10,7 @@ * @author Caleb Maclennan <caleb@alerque.com> * @author farukerdemoncel@gmail.com * @author Mustafa Aslan <maslan@hotmail.com> + * @author huseyin can <huseyincan73@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -179,6 +180,7 @@ $lang['yours'] = 'Senin Sürümün'; $lang['diff'] = 'Kullanılan sürüm ile farkları göster'; $lang['diff2'] = 'Seçili sürümler arasındaki farkı göster'; $lang['difflink'] = 'Karşılaştırma görünümüne bağlantı'; +$lang['diff_type'] = 'farklı görünüş'; $lang['line'] = 'Satır'; $lang['breadcrumb'] = 'İz'; $lang['youarehere'] = 'Buradasınız'; @@ -191,10 +193,17 @@ $lang['external_edit'] = 'Dışarıdan düzenle'; $lang['summary'] = 'Özeti düzenle'; $lang['noflash'] = 'Bu içeriği göstermek için <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Eklentisi</a> gerekmektedir.'; $lang['download'] = 'Parçacığı indir'; +$lang['tools'] = 'Alet'; +$lang['user_tools'] = 'Kullanıcı Aletleri'; +$lang['site_tools'] = 'Site Aletleri'; +$lang['page_tools'] = 'Sayfa Aletleri'; +$lang['skip_to_content'] = 'Bağlanmak için kaydır'; +$lang['sidebar'] = 'kaydırma çubuğu'; $lang['mail_newpage'] = 'sayfa eklenme:'; $lang['mail_changed'] = 'sayfa değiştirilme:'; $lang['mail_new_user'] = 'yeni kullanıcı'; $lang['mail_upload'] = 'dosya yüklendi:'; +$lang['changes_type'] = 'görünüşü değiştir'; $lang['pages_changes'] = 'Sayfalar'; $lang['media_changes'] = 'Çokluortam dosyaları'; $lang['both_changes'] = 'Sayfalar ve çoklu ortam dosyaları'; @@ -238,6 +247,9 @@ $lang['img_keywords'] = 'Anahtar Sözcükler'; $lang['img_width'] = 'Genişlik'; $lang['img_height'] = 'Yükseklik'; $lang['img_manager'] = 'Ortam oynatıcısında göster'; +$lang['subscr_m_new_header'] = 'Üyelik ekle'; +$lang['subscr_m_current_header'] = 'Üyeliğini onayla'; +$lang['subscr_m_unsubscribe'] = 'Üyelik iptali'; $lang['subscr_m_subscribe'] = 'Kayıt ol'; $lang['subscr_m_receive'] = 'Al'; $lang['authtempfail'] = 'Kullanıcı doğrulama geçici olarak yapılamıyor. Eğer bu durum devam ederse lütfen Wiki yöneticine haber veriniz.'; @@ -290,4 +302,5 @@ $lang['media_view'] = '%s'; $lang['media_edit'] = 'Düzenle %s'; $lang['media_history'] = 'Geçmiş %s'; $lang['media_perm_upload'] = 'Üzgünüm, karşıya dosya yükleme yetkiniz yok.'; +$lang['media_update'] = 'Yeni versiyonu yükleyin'; $lang['media_restore'] = 'Bu sürümü eski haline getir'; diff --git a/inc/lessc.inc.php b/inc/lessc.inc.php index 0699de52f..3d0ed768a 100644 --- a/inc/lessc.inc.php +++ b/inc/lessc.inc.php @@ -708,7 +708,7 @@ class lessc { } $oldParent = $mixin->parent; - if ($mixin != $block) $mixin->parent = $block; + if ($mixin !== $block) $mixin->parent = $block; foreach ($this->sortProps($mixin->props) as $subProp) { if ($suffix !== null && diff --git a/inc/load.php b/inc/load.php index c5b40ffd8..497dd6921 100644 --- a/inc/load.php +++ b/inc/load.php @@ -76,6 +76,7 @@ function load_autoload($name){ 'ZipLib' => DOKU_INC.'inc/ZipLib.class.php', 'DokuWikiFeedCreator' => DOKU_INC.'inc/feedcreator.class.php', 'Doku_Parser_Mode' => DOKU_INC.'inc/parser/parser.php', + 'Doku_Parser_Mode_Plugin' => DOKU_INC.'inc/parser/parser.php', 'SafeFN' => DOKU_INC.'inc/SafeFN.class.php', 'Sitemapper' => DOKU_INC.'inc/Sitemapper.php', 'PassHash' => DOKU_INC.'inc/PassHash.class.php', diff --git a/inc/media.php b/inc/media.php index 916be2796..960b96e65 100644 --- a/inc/media.php +++ b/inc/media.php @@ -1804,6 +1804,7 @@ function media_resize_image($file, $ext, $w, $h=0){ if($info == false) return $file; // that's no image - it's a spaceship! if(!$h) $h = round(($w * $info[1]) / $info[0]); + if(!$w) $w = round(($h * $info[0]) / $info[1]); // we wont scale up to infinity if($w > 2000 || $h > 2000) return $file; @@ -2133,4 +2134,61 @@ function media_resize_imageGD($ext,$from,$from_w,$from_h,$to,$to_w,$to_h,$ofs_x= return $okay; } +/** + * Return other media files with the same base name + * but different extensions. + * + * @param string $src - ID of media file + * @param array $exts - alternative extensions to find other files for + * @return array - mime type => file ID + * + * @author Anika Henke <anika@selfthinker.org> + */ +function media_alternativefiles($src, $exts){ + + $files = array(); + list($srcExt, $srcMime) = mimetype($src); + $filebase = substr($src, 0, -1 * (strlen($srcExt)+1)); + + foreach($exts as $ext) { + $fileid = $filebase.'.'.$ext; + $file = mediaFN($fileid); + if(file_exists($file)) { + list($fileExt, $fileMime) = mimetype($file); + $files[$fileMime] = $fileid; + } + } + return $files; +} + +/** + * Check if video/audio is supported to be embedded. + * + * @param string $src - mimetype of media file + * @param string $type - type of media files to check ('video', 'audio', or none) + * @return boolean + * + * @author Anika Henke <anika@selfthinker.org> + */ +function media_supportedav($mime, $type=NULL){ + $supportedAudio = array( + 'ogg' => 'audio/ogg', + 'mp3' => 'audio/mpeg', + 'wav' => 'audio/wav', + ); + $supportedVideo = array( + 'webm' => 'video/webm', + 'ogv' => 'video/ogg', + 'mp4' => 'video/mp4', + ); + if ($type == 'audio') { + $supportedAv = $supportedAudio; + } elseif ($type == 'video') { + $supportedAv = $supportedVideo; + } else { + $supportedAv = array_merge($supportedAudio, $supportedVideo); + } + return in_array($mime, $supportedAv); +} + /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ diff --git a/inc/parser/parser.php b/inc/parser/parser.php index 1f14b98a3..252bd9170 100644 --- a/inc/parser/parser.php +++ b/inc/parser/parser.php @@ -125,43 +125,91 @@ class Doku_Parser { } //------------------------------------------------------------------- + /** - * This class and all the subclasses below are - * used to reduce the effort required to register - * modes with the Lexer. For performance these - * could all be eliminated later perhaps, or - * the Parser could be serialized to a file once - * all modes are registered + * Class Doku_Parser_Mode_Interface * - * @author Harry Fuecks <hfuecks@gmail.com> + * Defines a mode (syntax component) in the Parser */ -class Doku_Parser_Mode { +interface Doku_Parser_Mode_Interface { + /** + * returns a number used to determine in which order modes are added + */ + public function getSort(); + + /** + * Called before any calls to connectTo + */ + function preConnect(); + + /** + * Connects the mode + * + * @param string $mode + */ + function connectTo($mode); /** + * Called after all calls to connectTo + */ + function postConnect(); + + /** + * Check if given mode is accepted inside this mode + * + * @param string $mode + * @return bool + */ + function accepts($mode); +} + +/** + * This class and all the subclasses below are used to reduce the effort required to register + * modes with the Lexer. + * + * @author Harry Fuecks <hfuecks@gmail.com> + */ +class Doku_Parser_Mode implements Doku_Parser_Mode_Interface { + /** * @var Doku_Lexer $Lexer */ var $Lexer; - var $allowedModes = array(); - // returns a number used to determine in which order modes are added function getSort() { trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING); } - // Called before any calls to connectTo function preConnect() {} - - // Connects the mode function connectTo($mode) {} - - // Called after all calls to connectTo function postConnect() {} - function accepts($mode) { return in_array($mode, (array) $this->allowedModes ); } +} + +/** + * Basically the same as Doku_Parser_Mode but extends from DokuWiki_Plugin + * + * Adds additional functions to syntax plugins + */ +class Doku_Parser_Mode_Plugin extends DokuWiki_Plugin implements Doku_Parser_Mode_Interface { + /** + * @var Doku_Lexer $Lexer + */ + var $Lexer; + var $allowedModes = array(); + + function getSort() { + trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING); + } + function preConnect() {} + function connectTo($mode) {} + function postConnect() {} + function accepts($mode) { + return in_array($mode, (array) $this->allowedModes ); + } } //------------------------------------------------------------------- diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index fd02c0ce0..80701cd2e 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -781,7 +781,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } function internalmedia ($src, $title=null, $align=null, $width=null, - $height=null, $cache=null, $linking=null) { + $height=null, $cache=null, $linking=null, $return=NULL) { global $ID; list($src,$hash) = explode('#',$src,2); resolve_mediaid(getNS($ID),$src, $exists); @@ -793,8 +793,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer { list($ext,$mime,$dl) = mimetype($src,false); if(substr($mime,0,5) == 'image' && $render){ $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct')); - }elseif($mime == 'application/x-shockwave-flash' && $render){ - // don't link flash movies + }elseif(($mime == 'application/x-shockwave-flash' || media_supportedav($mime)) && $render){ + // don't link movies $noLink = true; }else{ // add file icons @@ -812,8 +812,13 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } //output formatted - if ($linking == 'nolink' || $noLink) $this->doc .= $link['name']; - else $this->doc .= $this->_formatLink($link); + if ($return) { + if ($linking == 'nolink' || $noLink) return $link['name']; + else return $this->_formatLink($link); + } else { + if ($linking == 'nolink' || $noLink) $this->doc .= $link['name']; + else $this->doc .= $this->_formatLink($link); + } } function externalmedia ($src, $title=null, $align=null, $width=null, @@ -829,8 +834,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer { if(substr($mime,0,5) == 'image' && $render){ // link only jpeg images // if ($ext != 'jpg' && $ext != 'jpeg') $noLink = true; - }elseif($mime == 'application/x-shockwave-flash' && $render){ - // don't link flash movies + }elseif(($mime == 'application/x-shockwave-flash' || media_supportedav($mime)) && $render){ + // don't link movies $noLink = true; }else{ // add file icons @@ -1091,6 +1096,48 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $ret .= ' />'; + }elseif(media_supportedav($mime, 'video')){ + // first get the $title + if (!is_null($title)) { + $title = $this->_xmlEntities($title); + } + if (!$title) { + // just show the sourcename + $title = $this->_xmlEntities(utf8_basename(noNS($src))); + } + if (!$render) { + // if the video is not supposed to be rendered + // return the title of the video + return $title; + } + + $att = array(); + $att['class'] = "media$align"; + + //add video(s) + $ret .= $this->_video($src, $width, $height, $att); + + }elseif(media_supportedav($mime, 'audio')){ + // first get the $title + if (!is_null($title)) { + $title = $this->_xmlEntities($title); + } + if (!$title) { + // just show the sourcename + $title = $this->_xmlEntities(utf8_basename(noNS($src))); + } + if (!$render) { + // if the video is not supposed to be rendered + // return the title of the video + return $title; + } + + $att = array(); + $att['class'] = "media$align"; + + //add audio + $ret .= $this->_audio($src, $att); + }elseif($mime == 'application/x-shockwave-flash'){ if (!$render) { // if the flash is not supposed to be rendered @@ -1223,6 +1270,94 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } + /** + * Embed video(s) in HTML + * + * @author Anika Henke <anika@selfthinker.org> + * + * @param string $src - ID of video to embed + * @param int $width - width of the video in pixels + * @param int $height - height of the video in pixels + * @param array $atts - additional attributes for the <video> tag + * @return string + */ + function _video($src,$width,$height,$atts=null){ + + // prepare width and height + if(is_null($atts)) $atts = array(); + $atts['width'] = (int) $width; + $atts['height'] = (int) $height; + if(!$atts['width']) $atts['width'] = 320; + if(!$atts['height']) $atts['height'] = 240; + + // prepare alternative formats + $extensions = array('webm', 'ogv', 'mp4'); + $alternatives = media_alternativefiles($src, $extensions); + $poster = media_alternativefiles($src, array('jpg', 'png'), true); + $posterUrl = ''; + if (!empty($poster)) { + $posterUrl = ml(reset($poster),array('cache'=>$cache),true,'&'); + } + + $out = ''; + // open video tag + $out .= '<video '.buildAttributes($atts).' controls="controls"'; + if ($posterUrl) $out .= ' poster="'.hsc($posterUrl).'"'; + $out .= '>'.NL; + $fallback = ''; + + // output source for each alternative video format + foreach($alternatives as $mime => $file) { + $url = ml($file,array('cache'=>$cache),true,'&'); + $title = $this->_xmlEntities(utf8_basename(noNS($file))); + + $out .= '<source src="'.hsc($url).'" type="'.$mime.'" />'.NL; + // alternative content (just a link to the file) + $fallback .= $this->internalmedia($file, $title, NULL, NULL, NULL, $cache=NULL, $linking='linkonly', $return=true); + } + + // finish + $out .= $fallback; + $out .= '</video>'.NL; + return $out; + } + + /** + * Embed audio in HTML + * + * @author Anika Henke <anika@selfthinker.org> + * + * @param string $src - ID of audio to embed + * @param array $atts - additional attributes for the <audio> tag + * @return string + */ + function _audio($src,$atts=null){ + + // prepare alternative formats + $extensions = array('ogg', 'mp3', 'wav'); + $alternatives = media_alternativefiles($src, $extensions); + + $out = ''; + // open audio tag + $out .= '<audio '.buildAttributes($atts).' controls="controls">'.NL; + $fallback = ''; + + // output source for each alternative audio format + foreach($alternatives as $mime => $file) { + $url = ml($file,array('cache'=>$cache),true,'&'); + $title = $this->_xmlEntities(utf8_basename(noNS($file))); + + $out .= '<source src="'.hsc($url).'" type="'.$mime.'" />'.NL; + // alternative content (just a link to the file) + $fallback .= $this->internalmedia($file, $title, NULL, NULL, NULL, $cache=NULL, $linking='linkonly', $return=true); + } + + // finish + $out .= $fallback; + $out .= '</audio>'.NL; + return $out; + } + } //Setup VIM: ex: et ts=4 : diff --git a/inc/plugin.php b/inc/plugin.php index dccd37bd9..95bdaee2b 100644 --- a/inc/plugin.php +++ b/inc/plugin.php @@ -239,10 +239,35 @@ class DokuWiki_Plugin { } /** + * A fallback to provide access to the old render() method + * + * Since syntax plugins provide their own render method with a different signature and they now + * inherit from Doku_Plugin we can no longer have a render() method here (Strict Standards Violation). + * Instead use render_text() + * + * @deprecated 2014-01-22 + * @param $name + * @param $arguments + * @return null|string + */ + function __call($name, $arguments) { + if($name == 'render'){ + if(!isset($arguments[1])) $arguments[1] = 'xhtml'; + return $this->render_text($arguments[0], $arguments[1]); + } + trigger_error("no such method $name", E_ERROR); + return null; + } + + /** * output text string through the parser, allows dokuwiki markup to be used * very ineffecient for small pieces of data - try not to use + * + * @param string $text wiki markup to parse + * @param string $format output format + * @return null|string */ - function render($text, $format='xhtml') { + function render_text($text, $format='xhtml') { return p_render($format, p_get_instructions($text),$info); } diff --git a/inc/template.php b/inc/template.php index 60e178d1a..0a6a9e4aa 100644 --- a/inc/template.php +++ b/inc/template.php @@ -1123,10 +1123,11 @@ function tpl_indexerWebBug() { * * use this function to access template configuration variables * - * @param string $id - * @return string + * @param string $id name of the value to access + * @param mixed $notset what to return if the setting is not available + * @return mixed */ -function tpl_getConf($id) { +function tpl_getConf($id, $notset=false) { global $conf; static $tpl_configloaded = false; @@ -1143,7 +1144,11 @@ function tpl_getConf($id) { } } - return $conf['tpl'][$tpl][$id]; + if(isset($conf['tpl'][$tpl][$id])){ + return $conf['tpl'][$tpl][$id]; + } + + return $notset; } /** |