summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnika Henke <anika@selfthinker.org>2014-02-02 14:43:06 +0000
committerAnika Henke <anika@selfthinker.org>2014-02-02 14:43:06 +0000
commita051c2744a397f5ccbb688e0edab307451dc522d (patch)
treed9744944e50f2c23df22bd6856779bd228e129c4
parent3641199a253e8f92f378f03926af80724ef04146 (diff)
parenta8895ef5de970d5e6b1e273c3fe111b606611244 (diff)
downloadrpg-a051c2744a397f5ccbb688e0edab307451dc522d.tar.gz
rpg-a051c2744a397f5ccbb688e0edab307451dc522d.tar.bz2
Merge remote-tracking branch 'origin/master' into video-audio
-rw-r--r--.gitignore1
-rw-r--r--_test/tests/general/general_languagelint.php47
-rw-r--r--_test/tests/inc/io_rmdir.test.php219
-rw-r--r--conf/plugins.required.php11
-rw-r--r--inc/auth.php28
-rw-r--r--inc/html.php8
-rw-r--r--inc/io.php50
-rw-r--r--inc/lang/cs/lang.php6
-rw-r--r--inc/lang/el/lang.php1
-rw-r--r--inc/lang/id/adminplugins.txt1
-rw-r--r--inc/lang/id/lang.php28
-rw-r--r--inc/lang/pl/lang.php6
-rw-r--r--inc/lang/sk/lang.php1
-rw-r--r--inc/lang/tr/lang.php13
-rw-r--r--inc/load.php1
-rw-r--r--inc/media.php1
-rw-r--r--inc/parser/parser.php80
-rw-r--r--inc/plugin.php27
-rw-r--r--lib/exe/fetch.php4
-rw-r--r--lib/plugins/acl/lang/hi/lang.php7
-rw-r--r--lib/plugins/acl/lang/id-ni/lang.php7
-rw-r--r--lib/plugins/acl/lang/lb/lang.php6
-rw-r--r--lib/plugins/acl/lang/ms/lang.php6
-rw-r--r--lib/plugins/authad/lang/fr/settings.php2
-rw-r--r--lib/plugins/authad/lang/lv/settings.php6
-rw-r--r--lib/plugins/authad/lang/pl/settings.php7
-rw-r--r--lib/plugins/authad/lang/sk/settings.php2
-rw-r--r--lib/plugins/authldap/lang/lv/settings.php6
-rw-r--r--lib/plugins/authldap/lang/pl/settings.php8
-rw-r--r--lib/plugins/authldap/lang/sk/settings.php2
-rw-r--r--lib/plugins/authmysql/lang/fi/settings.php6
-rw-r--r--lib/plugins/authmysql/lang/lv/settings.php6
-rw-r--r--lib/plugins/authmysql/lang/pl/settings.php3
-rw-r--r--lib/plugins/authmysql/lang/sk/settings.php2
-rw-r--r--lib/plugins/authpgsql/lang/fi/settings.php6
-rw-r--r--lib/plugins/authpgsql/lang/it/settings.php5
-rw-r--r--lib/plugins/authpgsql/lang/lv/settings.php6
-rw-r--r--lib/plugins/authpgsql/lang/pl/settings.php5
-rw-r--r--lib/plugins/authpgsql/lang/sk/settings.php2
-rw-r--r--lib/plugins/config/lang/hr/lang.php8
-rw-r--r--lib/plugins/config/lang/id/lang.php7
-rw-r--r--lib/plugins/config/lang/kk/lang.php6
-rw-r--r--lib/plugins/config/lang/lb/lang.php6
-rw-r--r--lib/plugins/config/lang/mk/lang.php6
-rw-r--r--lib/plugins/config/lang/ms/lang.php6
-rw-r--r--lib/plugins/config/lang/vi/lang.php5
-rw-r--r--lib/plugins/extension/_test/extension.test.php293
-rw-r--r--lib/plugins/extension/_test/testdata/either1/script.js0
-rw-r--r--lib/plugins/extension/_test/testdata/eithersub2/either2/script.js0
-rw-r--r--lib/plugins/extension/_test/testdata/plgfoo5/plugin.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/plgsub3/plugin3/syntax.php0
-rw-r--r--lib/plugins/extension/_test/testdata/plgsub4/plugin4/plugin.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/plgsub6/plgfoo6/plugin.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/plugin1/syntax.php0
-rw-r--r--lib/plugins/extension/_test/testdata/plugin2/plugin.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/template1/main.php0
-rw-r--r--lib/plugins/extension/_test/testdata/template1/style.ini0
-rw-r--r--lib/plugins/extension/_test/testdata/template2/template.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/tplfoo5/template.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/tplsub3/template3/main.php0
-rw-r--r--lib/plugins/extension/_test/testdata/tplsub3/template3/style.ini0
-rw-r--r--lib/plugins/extension/_test/testdata/tplsub4/template4/template.info.txt7
-rw-r--r--lib/plugins/extension/_test/testdata/tplsub6/tplfoo6/template.info.txt7
-rw-r--r--lib/plugins/extension/action.php66
-rw-r--r--lib/plugins/extension/admin.php155
-rw-r--r--lib/plugins/extension/all.less37
-rw-r--r--lib/plugins/extension/helper/extension.php1093
-rw-r--r--lib/plugins/extension/helper/gui.php193
-rw-r--r--lib/plugins/extension/helper/list.php561
-rw-r--r--lib/plugins/extension/helper/repository.php191
-rw-r--r--lib/plugins/extension/images/disabled.pngbin0 -> 1486 bytes
-rw-r--r--lib/plugins/extension/images/donate.pngbin0 -> 724 bytes
-rw-r--r--lib/plugins/extension/images/down.pngbin0 -> 280 bytes
-rw-r--r--lib/plugins/extension/images/enabled.pngbin0 -> 1231 bytes
-rw-r--r--lib/plugins/extension/images/icons.xcfbin0 -> 67195 bytes
-rw-r--r--lib/plugins/extension/images/license.txt4
-rw-r--r--lib/plugins/extension/images/overlay.pngbin0 -> 109 bytes
-rw-r--r--lib/plugins/extension/images/plugin.pngbin0 -> 6824 bytes
-rw-r--r--lib/plugins/extension/images/tag.pngbin0 -> 753 bytes
-rw-r--r--lib/plugins/extension/images/template.pngbin0 -> 7547 bytes
-rw-r--r--lib/plugins/extension/images/up.pngbin0 -> 281 bytes
-rw-r--r--lib/plugins/extension/images/warning.pngbin0 -> 613 bytes
-rw-r--r--lib/plugins/extension/lang/en/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/en/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/en/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/en/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/en/lang.php99
-rw-r--r--lib/plugins/extension/plugin.info.txt7
-rw-r--r--lib/plugins/extension/script.js71
-rw-r--r--lib/plugins/extension/style.less363
-rw-r--r--lib/plugins/plugin/admin.php137
-rw-r--r--lib/plugins/plugin/classes/ap_delete.class.php28
-rw-r--r--lib/plugins/plugin/classes/ap_download.class.php288
-rw-r--r--lib/plugins/plugin/classes/ap_enable.class.php51
-rw-r--r--lib/plugins/plugin/classes/ap_info.class.php143
-rw-r--r--lib/plugins/plugin/classes/ap_manage.class.php202
-rw-r--r--lib/plugins/plugin/classes/ap_update.class.php36
-rw-r--r--lib/plugins/plugin/lang/af/lang.php13
-rw-r--r--lib/plugins/plugin/lang/ar/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/ar/lang.php54
-rw-r--r--lib/plugins/plugin/lang/bg/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/bg/lang.php54
-rw-r--r--lib/plugins/plugin/lang/ca-valencia/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/ca-valencia/lang.php53
-rw-r--r--lib/plugins/plugin/lang/ca/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/ca/lang.php55
-rw-r--r--lib/plugins/plugin/lang/cs/lang.php1
-rw-r--r--lib/plugins/plugin/lang/da/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/da/lang.php61
-rw-r--r--lib/plugins/plugin/lang/de-informal/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/de-informal/lang.php59
-rw-r--r--lib/plugins/plugin/lang/de/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/de/lang.php66
-rw-r--r--lib/plugins/plugin/lang/en/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/en/lang.php78
-rw-r--r--lib/plugins/plugin/lang/eo/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/eo/lang.php60
-rw-r--r--lib/plugins/plugin/lang/es/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/es/lang.php72
-rw-r--r--lib/plugins/plugin/lang/et/lang.php32
-rw-r--r--lib/plugins/plugin/lang/eu/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/eu/lang.php52
-rw-r--r--lib/plugins/plugin/lang/fa/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/fa/lang.php58
-rw-r--r--lib/plugins/plugin/lang/fi/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/fi/lang.php55
-rw-r--r--lib/plugins/plugin/lang/gl/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/gl/lang.php53
-rw-r--r--lib/plugins/plugin/lang/he/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/he/lang.php55
-rw-r--r--lib/plugins/plugin/lang/hi/lang.php12
-rw-r--r--lib/plugins/plugin/lang/hr/lang.php8
-rw-r--r--lib/plugins/plugin/lang/hu/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/hu/lang.php59
-rw-r--r--lib/plugins/plugin/lang/ia/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/ia/lang.php51
-rw-r--r--lib/plugins/plugin/lang/id-ni/lang.php7
-rw-r--r--lib/plugins/plugin/lang/is/lang.php47
-rw-r--r--lib/plugins/plugin/lang/it/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/it/lang.php63
-rw-r--r--lib/plugins/plugin/lang/ja/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/ja/lang.php58
-rw-r--r--lib/plugins/plugin/lang/kk/lang.php6
-rw-r--r--lib/plugins/plugin/lang/ko/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/ko/lang.php58
-rw-r--r--lib/plugins/plugin/lang/la/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/la/lang.php50
-rw-r--r--lib/plugins/plugin/lang/lb/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/lb/lang.php6
-rw-r--r--lib/plugins/plugin/lang/lt/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/lt/lang.php13
-rw-r--r--lib/plugins/plugin/lang/lv/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/lv/lang.php51
-rw-r--r--lib/plugins/plugin/lang/mk/lang.php43
-rw-r--r--lib/plugins/plugin/lang/mr/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/mr/lang.php53
-rw-r--r--lib/plugins/plugin/lang/ms/lang.php6
-rw-r--r--lib/plugins/plugin/lang/ne/lang.php46
-rw-r--r--lib/plugins/plugin/lang/nl/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/nl/lang.php64
-rw-r--r--lib/plugins/plugin/lang/no/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/no/lang.php64
-rw-r--r--lib/plugins/plugin/lang/pt-br/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/pt-br/lang.php66
-rw-r--r--lib/plugins/plugin/lang/pt/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/pt/lang.php56
-rw-r--r--lib/plugins/plugin/lang/ro/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/ro/lang.php59
-rw-r--r--lib/plugins/plugin/lang/ru/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/ru/lang.php66
-rw-r--r--lib/plugins/plugin/lang/sl/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/sl/lang.php55
-rw-r--r--lib/plugins/plugin/lang/sq/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/sq/lang.php50
-rw-r--r--lib/plugins/plugin/lang/sr/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/sr/lang.php52
-rw-r--r--lib/plugins/plugin/lang/sv/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/sv/lang.php64
-rw-r--r--lib/plugins/plugin/lang/th/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/th/lang.php50
-rw-r--r--lib/plugins/plugin/lang/uk/admin_plugin.txt7
-rw-r--r--lib/plugins/plugin/lang/uk/lang.php58
-rw-r--r--lib/plugins/plugin/lang/vi/lang.php5
-rw-r--r--lib/plugins/plugin/lang/zh-tw/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/zh-tw/lang.php60
-rw-r--r--lib/plugins/plugin/lang/zh/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/zh/lang.php64
-rw-r--r--lib/plugins/plugin/plugin.info.txt7
-rw-r--r--lib/plugins/plugin/style.css195
-rw-r--r--lib/plugins/popularity/lang/et/lang.php7
-rw-r--r--lib/plugins/popularity/lang/hr/lang.php8
-rw-r--r--lib/plugins/popularity/lang/id/lang.php6
-rw-r--r--lib/plugins/popularity/lang/kk/lang.php6
-rw-r--r--lib/plugins/popularity/lang/lb/lang.php6
-rw-r--r--lib/plugins/popularity/lang/mk/lang.php6
-rw-r--r--lib/plugins/popularity/lang/ms/lang.php6
-rw-r--r--lib/plugins/popularity/lang/vi/lang.php5
-rw-r--r--lib/plugins/revert/lang/af/lang.php5
-rw-r--r--lib/plugins/revert/lang/cs/lang.php1
-rw-r--r--lib/plugins/revert/lang/et/lang.php7
-rw-r--r--lib/plugins/revert/lang/hi/lang.php7
-rw-r--r--lib/plugins/revert/lang/hr/lang.php8
-rw-r--r--lib/plugins/revert/lang/id-ni/lang.php7
-rw-r--r--lib/plugins/revert/lang/id/lang.php7
-rw-r--r--lib/plugins/revert/lang/kk/lang.php6
-rw-r--r--lib/plugins/revert/lang/lb/lang.php6
-rw-r--r--lib/plugins/revert/lang/lt/lang.php7
-rw-r--r--lib/plugins/revert/lang/mk/lang.php6
-rw-r--r--lib/plugins/revert/lang/ms/lang.php6
-rw-r--r--lib/plugins/revert/lang/vi/lang.php5
-rw-r--r--lib/plugins/syntax.php188
-rw-r--r--lib/plugins/usermanager/lang/hi/lang.php7
-rw-r--r--lib/plugins/usermanager/lang/hr/lang.php8
-rw-r--r--lib/plugins/usermanager/lang/id-ni/lang.php7
-rw-r--r--lib/plugins/usermanager/lang/lb/lang.php6
-rw-r--r--lib/plugins/usermanager/lang/ms/lang.php6
-rw-r--r--lib/plugins/usermanager/lang/sk/lang.php2
-rw-r--r--lib/plugins/usermanager/lang/vi/lang.php5
-rw-r--r--lib/tpl/dokuwiki/css/mobile.less9
219 files changed, 3730 insertions, 4136 deletions
diff --git a/.gitignore b/.gitignore
index e83fed24f..64816ba38 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,6 +42,7 @@
!/lib/plugins/authplain
!/lib/plugins/acl
!/lib/plugins/config
+!/lib/plugins/extension
!/lib/plugins/info
!/lib/plugins/plugin
!/lib/plugins/popularity
diff --git a/_test/tests/general/general_languagelint.php b/_test/tests/general/general_languagelint.php
new file mode 100644
index 000000000..c11462640
--- /dev/null
+++ b/_test/tests/general/general_languagelint.php
@@ -0,0 +1,47 @@
+<?php
+
+class general_languagelint_test extends DokuWikiTest {
+
+
+ function test_core() {
+ $this->checkFiles(glob(DOKU_INC.'inc/lang/*/*.php'));
+ }
+
+ function test_plugins() {
+ $this->checkFiles(glob(DOKU_INC.'lib/plugins/*/lang/*/*.php'));
+ }
+
+ /**
+ * Run checks over the given PHP language files
+ *
+ * @param $files
+ */
+ private function checkFiles($files){
+ foreach($files as $file){
+ // try to load the file
+ include $file;
+ // check it defines an array
+ $this->assertTrue(is_array($lang), $file);
+ unset($lang);
+
+ $this->checkUgly($file);
+ }
+ }
+
+ /**
+ * Checks if the file contains any ugly things like leading whitespace, BOM or trailing
+ * PHP closing mark
+ *
+ * @param $file
+ * @throws Exception
+ */
+ private function checkUgly($file){
+ $content = rtrim(file_get_contents($file));
+ if(substr($content,0,5) != '<?php')
+ throw new Exception("$file does not start with '<?php' - check for BOM");
+
+ if(substr($content,-2) == '?>')
+ throw new Exception("$file ends with '?>' - remove it!");
+ }
+
+}
diff --git a/_test/tests/inc/io_rmdir.test.php b/_test/tests/inc/io_rmdir.test.php
new file mode 100644
index 000000000..3de57fa86
--- /dev/null
+++ b/_test/tests/inc/io_rmdir.test.php
@@ -0,0 +1,219 @@
+<?php
+
+class io_rmdir_test extends DokuWikiTest {
+
+ function test_nopes(){
+ // set up test dir
+ $dir = io_mktmpdir();
+ $top = dirname($dir);
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+
+ // switch into it
+ $this->assertTrue(chdir($dir));
+ $this->assertEquals($dir, getcwd());
+
+
+ $this->assertFalse(io_rmdir('', false));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir('', true));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir(null, false));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir(null, true));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir(false, false));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir(false, true));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir(array(), false));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFalse(io_rmdir(array(), true));
+ clearstatcache();
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ $this->assertFileNotExists("$dir/this/does/not/exist");
+ $this->assertTrue(io_rmdir("$dir/this/does/not/exist"));
+ clearstatcache();
+ $this->assertFileNotExists("$dir/this/does/not/exist");
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+ }
+
+
+ function test_empty_single(){
+ // set up test dir
+ $dir = io_mktmpdir();
+ $top = dirname($dir);
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+
+ // delete successfully
+ $this->assertTrue(io_rmdir($dir, false));
+
+ // check result
+ clearstatcache();
+ $this->assertFalse(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ // same again with deletefiles
+
+ // set up test dir
+ $dir = io_mktmpdir();
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+
+ // delete successfully
+ $this->assertTrue(io_rmdir($dir, true));
+
+ // check result
+ clearstatcache();
+ $this->assertFalse(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+ }
+
+
+ function test_empty_hierarchy(){
+ // setup hierachy and test it exists
+ $dir = io_mktmpdir();
+ $top = dirname($dir);
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(io_mkdir_p("$dir/foo/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foo/bar/baz"));
+ $this->assertTrue(io_mkdir_p("$dir/foobar/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foobar/bar/baz"));
+
+ // delete successfully
+ $this->assertTrue(io_rmdir($dir, false));
+
+ // check result
+ clearstatcache();
+ $this->assertFalse(is_dir("$dir/foo/bar/baz"));
+ $this->assertFalse(is_dir("$dir/foobar/bar/baz"));
+ $this->assertFalse(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ // same again with deletefiles
+
+ // setup hierachy and test it exists
+ $dir = io_mktmpdir();
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(io_mkdir_p("$dir/foo/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foo/bar/baz"));
+ $this->assertTrue(io_mkdir_p("$dir/foobar/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foobar/bar/baz"));
+
+ // delete successfully
+ $this->assertTrue(io_rmdir($dir, true));
+
+ // check result
+ clearstatcache();
+ $this->assertFalse(is_dir("$dir/foo/bar/baz"));
+ $this->assertFalse(is_dir("$dir/foobar/bar/baz"));
+ $this->assertFalse(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+ }
+
+ function test_full_single(){
+ // set up test dir
+ $dir = io_mktmpdir();
+ $top = dirname($dir);
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+
+ // put file
+ $this->assertTrue(io_saveFile("$dir/testfile.txt", 'foobar'));
+ $this->assertFileExists("$dir/testfile.txt");
+
+ // delete unsuccessfully
+ $this->assertFalse(io_rmdir($dir, false));
+
+ // check result
+ clearstatcache();
+ $this->assertFileExists("$dir/testfile.txt");
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ // same again with deletefiles
+
+ // delete successfully
+ $this->assertTrue(io_rmdir($dir, true));
+
+ // check result
+ clearstatcache();
+ $this->assertFileNotExists("$dir/testfile.txt");
+ $this->assertFalse(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+ }
+
+ function test_full_hierarchy(){
+ // setup hierachy and test it exists
+ $dir = io_mktmpdir();
+ $top = dirname($dir);
+ $this->assertTrue($dir !== false);
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(io_mkdir_p("$dir/foo/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foo/bar/baz"));
+ $this->assertTrue(io_mkdir_p("$dir/foobar/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foobar/bar/baz"));
+
+ // put files
+ $this->assertTrue(io_saveFile("$dir/testfile.txt", 'foobar'));
+ $this->assertFileExists("$dir/testfile.txt");
+ $this->assertTrue(io_saveFile("$dir/foo/testfile.txt", 'foobar'));
+ $this->assertFileExists("$dir/foo/testfile.txt");
+ $this->assertTrue(io_saveFile("$dir/foo/bar/baz/testfile.txt", 'foobar'));
+ $this->assertFileExists("$dir/foo/bar/baz/testfile.txt");
+
+ // delete unsuccessfully
+ $this->assertFalse(io_rmdir($dir, false));
+
+ // check result
+ clearstatcache();
+ $this->assertFileExists("$dir/testfile.txt");
+ $this->assertFileExists("$dir/foo/testfile.txt");
+ $this->assertFileExists("$dir/foo/bar/baz/testfile.txt");
+ $this->assertTrue(is_dir("$dir/foo/bar/baz"));
+ $this->assertTrue(is_dir("$dir/foobar/bar/baz"));
+ $this->assertTrue(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+
+ // delete successfully
+ $this->assertTrue(io_rmdir($dir, true));
+
+ // check result
+ clearstatcache();
+ $this->assertFileNotExists("$dir/testfile.txt");
+ $this->assertFileNotExists("$dir/foo/testfile.txt");
+ $this->assertFileNotExists("$dir/foo/bar/baz/testfile.txt");
+ $this->assertFalse(is_dir("$dir/foo/bar/baz"));
+ $this->assertFalse(is_dir("$dir/foobar/bar/baz"));
+ $this->assertFalse(is_dir($dir));
+ $this->assertTrue(is_dir($top));
+ }
+
+} \ No newline at end of file
diff --git a/conf/plugins.required.php b/conf/plugins.required.php
index 26eb8888b..75336da2e 100644
--- a/conf/plugins.required.php
+++ b/conf/plugins.required.php
@@ -4,8 +4,9 @@
* from changes by the extention manager. These settings will override any local settings.
* It is not recommended to change this file, as it is overwritten on DokuWiki upgrades.
*/
-$plugins['acl'] = 1;
-$plugins['plugin'] = 1;
-$plugins['config'] = 1;
-$plugins['usermanager'] = 1;
-$plugins['revert'] = 1;
+$plugins['acl'] = 1;
+$plugins['authplain'] = 1;
+$plugins['extension'] = 1;
+$plugins['config'] = 1;
+$plugins['usermanager'] = 1;
+$plugins['template:dokuwiki'] = 1; // not a plugin, but this should not be uninstalled either
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/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/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/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/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/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 2943e8274..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;
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/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/lib/exe/fetch.php b/lib/exe/fetch.php
index 5967494bf..f33b3f2f8 100644
--- a/lib/exe/fetch.php
+++ b/lib/exe/fetch.php
@@ -78,8 +78,8 @@ if (defined('SIMPLE_TEST')) {
unset($evt);
//handle image resizing/cropping
- if((substr($MIME, 0, 5) == 'image') && $WIDTH) {
- if($HEIGHT) {
+ if((substr($MIME, 0, 5) == 'image') && ($WIDTH || $HEIGHT)) {
+ if($HEIGHT && $WDITH) {
$data['file'] = $FILE = media_crop_image($data['file'], $EXT, $WIDTH, $HEIGHT);
} else {
$data['file'] = $FILE = media_resize_image($data['file'], $EXT, $WIDTH, $HEIGHT);
diff --git a/lib/plugins/acl/lang/hi/lang.php b/lib/plugins/acl/lang/hi/lang.php
deleted file mode 100644
index d6f78ffd6..000000000
--- a/lib/plugins/acl/lang/hi/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Hindi language file
- *
- * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
- * @author yndesai@gmail.com
- */
diff --git a/lib/plugins/acl/lang/id-ni/lang.php b/lib/plugins/acl/lang/id-ni/lang.php
deleted file mode 100644
index d367340b7..000000000
--- a/lib/plugins/acl/lang/id-ni/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * idni language file
- *
- * @author Harefa <fidelis@harefa.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/acl/lang/lb/lang.php b/lib/plugins/acl/lang/lb/lang.php
deleted file mode 100644
index 59acdf7a8..000000000
--- a/lib/plugins/acl/lang/lb/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * lb language file
- *
- * @author joel@schintgen.net
- */
diff --git a/lib/plugins/acl/lang/ms/lang.php b/lib/plugins/acl/lang/ms/lang.php
deleted file mode 100644
index 77ad2a1c1..000000000
--- a/lib/plugins/acl/lang/ms/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Malay language file
- *
- * @author Markos
- */
diff --git a/lib/plugins/authad/lang/fr/settings.php b/lib/plugins/authad/lang/fr/settings.php
index d05390efc..84e0d00d9 100644
--- a/lib/plugins/authad/lang/fr/settings.php
+++ b/lib/plugins/authad/lang/fr/settings.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Bruno Veilleux <bruno.vey@gmail.com>
+ * @author Momo50 <c.brothelande@gmail.com>
*/
$lang['account_suffix'] = 'Le suffixe de votre compte. Ex.: <code>@mon.domaine.org</code>';
$lang['base_dn'] = 'Votre nom de domaine de base. <code>DC=mon,DC=domaine,DC=org</code>';
@@ -11,6 +12,7 @@ $lang['domain_controllers'] = 'Une liste de contrôleurs de domaine séparés
$lang['admin_username'] = 'Un utilisateur Active Directory avec accès aux données de tous les autres utilisateurs. Facultatif, mais nécessaire pour certaines actions telles que l\'envoi de courriels d\'abonnement.';
$lang['admin_password'] = 'Le mot de passe de l\'utilisateur ci-dessus.';
$lang['sso'] = 'Est-ce que la connexion unique (Single-Sign-On) par Kerberos ou NTLM doit être utilisée?';
+$lang['sso_charset'] = 'Le jeu de caractères de votre serveur web va passer le nom d\'utilisateur Kerberos ou NTLM. Vide pour UTF-8 ou latin-1. Nécessite l\'extension iconv.';
$lang['real_primarygroup'] = 'Est-ce que le véritable groupe principal doit être résolu au lieu de présumer "Domain Users" (plus lent)?';
$lang['use_ssl'] = 'Utiliser une connexion SSL? Si utilisée, n\'activez pas TLS ci-dessous.';
$lang['use_tls'] = 'Utiliser une connexion TLS? Si utilisée, n\'activez pas SSL ci-dessus.';
diff --git a/lib/plugins/authad/lang/lv/settings.php b/lib/plugins/authad/lang/lv/settings.php
deleted file mode 100644
index ced5dabf8..000000000
--- a/lib/plugins/authad/lang/lv/settings.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Latvian, Lettish language file
- *
- * @author Aivars Miška <allefm@gmail.com>
- */
diff --git a/lib/plugins/authad/lang/pl/settings.php b/lib/plugins/authad/lang/pl/settings.php
index ad051b0ac..4e397fc98 100644
--- a/lib/plugins/authad/lang/pl/settings.php
+++ b/lib/plugins/authad/lang/pl/settings.php
@@ -4,10 +4,17 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Tomasz Bosak <bosak.tomasz@gmail.com>
+ * @author Paweł Jan Czochański <czochanski@gmail.com>
*/
$lang['account_suffix'] = 'Przyrostek twojej nazwy konta np. <code>@my.domain.org</code>';
$lang['base_dn'] = 'Twoje bazowe DN. Na przykład: <code>DC=my,DC=domain,DC=org</code>';
+$lang['domain_controllers'] = 'Podzielona przecinkami lista kontrolerów domen np. <code>srv1.domena.pl,srv2.domena.pl</code>';
+$lang['admin_username'] = 'Uprawniony użytkownik katalogu Active Directory z dostępem do danych wszystkich użytkowników.
+Opcjonalne, ale wymagane dla niektórych akcji np. wysyłania emailowych subskrypcji.';
$lang['admin_password'] = 'Hasło dla powyższego użytkownika.';
+$lang['sso'] = 'Czy pojedyncze logowanie powinno korzystać z Kerberos czy NTML?';
+$lang['sso_charset'] = 'Kodowanie znaków wykorzystywane do przesyłania nazwy użytkownika dla Kerberos lub NTLM. Pozostaw puste dla UTF-8 lub latin-1. Wymaga rozszerzenia iconv.';
$lang['use_ssl'] = 'Użyć połączenie SSL? Jeśli tak to nie aktywuj TLS poniżej.';
$lang['use_tls'] = 'Użyć połączenie TLS? Jeśli tak to nie aktywuj SSL powyżej.';
+$lang['debug'] = 'Wyświetlać dodatkowe informacje do debugowania w przypadku błędów?';
$lang['expirywarn'] = 'Dni poprzedzających powiadomienie użytkownika o wygasającym haśle. 0 aby wyłączyć.';
diff --git a/lib/plugins/authad/lang/sk/settings.php b/lib/plugins/authad/lang/sk/settings.php
index b7d822f7e..266b372bb 100644
--- a/lib/plugins/authad/lang/sk/settings.php
+++ b/lib/plugins/authad/lang/sk/settings.php
@@ -15,6 +15,6 @@ $lang['sso_charset'] = 'Znaková sada, v ktorej bude webserver prená
$lang['real_primarygroup'] = 'Použiť skutočnú primárnu skupinu používateľa namiesto "Doménoví používatelia" (pomalšie).';
$lang['use_ssl'] = 'Použiť SSL pripojenie? Ak áno, nepovoľte TLS nižšie.';
$lang['use_tls'] = 'Použiť TLS pripojenie? Ak áno, nepovoľte SSL vyššie.';
-$lang['debug'] = 'Zobraziť doplňujúce ladiace informácie pri chybe?';
+$lang['debug'] = 'Zobraziť dodatočné ladiace informácie pri chybe?';
$lang['expirywarn'] = 'Počet dní pred uplynutím platnosti hesla, počas ktorých používateľ dostáva upozornenie. 0 deaktivuje túto voľbu.';
$lang['additional'] = 'Zoznam dodatočných AD atribútov oddelených čiarkou získaných z údajov používateľa. Používané niektorými pluginmi.';
diff --git a/lib/plugins/authldap/lang/lv/settings.php b/lib/plugins/authldap/lang/lv/settings.php
deleted file mode 100644
index ced5dabf8..000000000
--- a/lib/plugins/authldap/lang/lv/settings.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Latvian, Lettish language file
- *
- * @author Aivars Miška <allefm@gmail.com>
- */
diff --git a/lib/plugins/authldap/lang/pl/settings.php b/lib/plugins/authldap/lang/pl/settings.php
index 084521e0d..7010988e6 100644
--- a/lib/plugins/authldap/lang/pl/settings.php
+++ b/lib/plugins/authldap/lang/pl/settings.php
@@ -3,6 +3,14 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Paweł Jan Czochański <czochanski@gmail.com>
*/
+$lang['server'] = 'Twój serwer LDAP. Podaj nazwę hosta (<code>localhost</code>) albo pełen adres URL (<code>ldap://server.tld:389</code>).';
+$lang['port'] = 'Port serwera LDAP jeżeli nie podano pełnego adresu URL wyżej.';
+$lang['usertree'] = 'Gdzie szukać kont użytkownika? np. <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree'] = 'Gdzie szukać grup użytkowników? np. <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter'] = 'Filtr LDAP wykorzystany przy szukaniu kont użytkowników np. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = 'Filtr LDAP wykorzystany przy szukaniu grup użytkowników np. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version'] = 'Wykorzystywana wersja protokołu. Być może konieczne jest ustawienie tego na <code>3</code>.';
$lang['starttls'] = 'Użyć połączeń TLS?';
$lang['bindpw'] = 'Hasło powyższego użytkownika';
diff --git a/lib/plugins/authldap/lang/sk/settings.php b/lib/plugins/authldap/lang/sk/settings.php
index c44f07e97..26c8d9edd 100644
--- a/lib/plugins/authldap/lang/sk/settings.php
+++ b/lib/plugins/authldap/lang/sk/settings.php
@@ -20,7 +20,7 @@ $lang['bindpw'] = 'Heslo vyššie uvedeného používateľa';
$lang['userscope'] = 'Obmedzenie oblasti pri vyhľadávaní používateľa';
$lang['groupscope'] = 'Obmedzenie oblasti pri vyhľadávaní skupiny';
$lang['groupkey'] = 'Príslušnost k skupine určená z daného atribútu používateľa (namiesto štandardnej AD skupiny) napr. skupiny podľa oddelenia alebo telefónneho čísla';
-$lang['debug'] = 'Zobraziť doplňujúce ladiace informácie pri chybe';
+$lang['debug'] = 'Zobraziť dodatočné ladiace informácie pri chybe';
$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
diff --git a/lib/plugins/authmysql/lang/fi/settings.php b/lib/plugins/authmysql/lang/fi/settings.php
deleted file mode 100644
index d3aa13e07..000000000
--- a/lib/plugins/authmysql/lang/fi/settings.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Finnish language file
- *
- * @author Otto Vainio <otto@valjakko.net>
- */
diff --git a/lib/plugins/authmysql/lang/lv/settings.php b/lib/plugins/authmysql/lang/lv/settings.php
deleted file mode 100644
index ced5dabf8..000000000
--- a/lib/plugins/authmysql/lang/lv/settings.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Latvian, Lettish language file
- *
- * @author Aivars Miška <allefm@gmail.com>
- */
diff --git a/lib/plugins/authmysql/lang/pl/settings.php b/lib/plugins/authmysql/lang/pl/settings.php
index 5ae6bf168..88cbd5d6f 100644
--- a/lib/plugins/authmysql/lang/pl/settings.php
+++ b/lib/plugins/authmysql/lang/pl/settings.php
@@ -3,9 +3,12 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Paweł Jan Czochański <czochanski@gmail.com>
*/
$lang['server'] = 'Twój server MySQL';
$lang['user'] = 'Nazwa użytkownika MySQL';
$lang['password'] = 'Hasło dla powyższego użytkownika';
$lang['database'] = 'Używana baza danych';
$lang['charset'] = 'Zestaw znaków uzyty w bazie danych';
+$lang['debug'] = 'Wyświetlaj dodatkowe informacje do debugowania.';
+$lang['checkPass'] = 'Zapytanie SQL wykorzystywane do sprawdzania haseł.';
diff --git a/lib/plugins/authmysql/lang/sk/settings.php b/lib/plugins/authmysql/lang/sk/settings.php
index d7e8cb286..8042c6902 100644
--- a/lib/plugins/authmysql/lang/sk/settings.php
+++ b/lib/plugins/authmysql/lang/sk/settings.php
@@ -10,7 +10,7 @@ $lang['user'] = 'Meno používateľa MySQL';
$lang['password'] = 'Heslo pre vyššie uvedeného používateľa';
$lang['database'] = 'Použiť databázu';
$lang['charset'] = 'Znaková sada databázy';
-$lang['debug'] = 'Zobraziť doplňujúce ladiace informácie';
+$lang['debug'] = 'Zobraziť dodatočné ladiace informácie';
$lang['forwardClearPass'] = 'Posielať heslo ako nezakódovaný text nižšie uvedenému SQL príkazu namiesto použitia kódovania';
$lang['TablesToLock'] = 'Zoznam tabuliek oddelených čiarkou, ktoré by mali byť uzamknuté pri operáciách zápisu';
$lang['checkPass'] = 'SQL príkaz pre kontrolu hesla';
diff --git a/lib/plugins/authpgsql/lang/fi/settings.php b/lib/plugins/authpgsql/lang/fi/settings.php
deleted file mode 100644
index d3aa13e07..000000000
--- a/lib/plugins/authpgsql/lang/fi/settings.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Finnish language file
- *
- * @author Otto Vainio <otto@valjakko.net>
- */
diff --git a/lib/plugins/authpgsql/lang/it/settings.php b/lib/plugins/authpgsql/lang/it/settings.php
deleted file mode 100644
index 10ae72f87..000000000
--- a/lib/plugins/authpgsql/lang/it/settings.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Italian language file
- *
- */
diff --git a/lib/plugins/authpgsql/lang/lv/settings.php b/lib/plugins/authpgsql/lang/lv/settings.php
deleted file mode 100644
index ced5dabf8..000000000
--- a/lib/plugins/authpgsql/lang/lv/settings.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Latvian, Lettish language file
- *
- * @author Aivars Miška <allefm@gmail.com>
- */
diff --git a/lib/plugins/authpgsql/lang/pl/settings.php b/lib/plugins/authpgsql/lang/pl/settings.php
deleted file mode 100644
index 37afb252d..000000000
--- a/lib/plugins/authpgsql/lang/pl/settings.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Polish language file
- *
- */
diff --git a/lib/plugins/authpgsql/lang/sk/settings.php b/lib/plugins/authpgsql/lang/sk/settings.php
index 861d1237d..9013a752b 100644
--- a/lib/plugins/authpgsql/lang/sk/settings.php
+++ b/lib/plugins/authpgsql/lang/sk/settings.php
@@ -10,7 +10,7 @@ $lang['port'] = 'Port PostgreSQL servera';
$lang['user'] = 'Meno používateľa PostgreSQL';
$lang['password'] = 'Heslo pre vyššie uvedeného používateľa';
$lang['database'] = 'Použiť databázu';
-$lang['debug'] = 'Zobraziť doplňujúce ladiace informácie';
+$lang['debug'] = 'Zobraziť dodatočné ladiace informácie';
$lang['forwardClearPass'] = 'Posielať heslo ako nezakódovaný text nižšie uvedenému SQL príkazu namiesto použitia kódovania';
$lang['checkPass'] = 'SQL príkaz pre kontrolu hesla';
$lang['getUserInfo'] = 'SQL príkaz pre získanie informácií o používateľovi';
diff --git a/lib/plugins/config/lang/hr/lang.php b/lib/plugins/config/lang/hr/lang.php
deleted file mode 100644
index 96f1d6afe..000000000
--- a/lib/plugins/config/lang/hr/lang.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * Croatian language file
- *
- * @author Branko Rihtman <theney@gmail.com>
- * @author Dražen Odobašić <dodobasic@gmail.com>
- * @author Dejan Igrec dejan.igrec@gmail.com
- */
diff --git a/lib/plugins/config/lang/id/lang.php b/lib/plugins/config/lang/id/lang.php
deleted file mode 100644
index c3d485930..000000000
--- a/lib/plugins/config/lang/id/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Indonesian language file
- *
- * @author Irwan Butar Butar <irwansah.putra@gmail.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/config/lang/kk/lang.php b/lib/plugins/config/lang/kk/lang.php
deleted file mode 100644
index dde5b9577..000000000
--- a/lib/plugins/config/lang/kk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * kazakh language file
- *
- * @author Nurgozha Kaliaskarov astana08@gmail.com
- */
diff --git a/lib/plugins/config/lang/lb/lang.php b/lib/plugins/config/lang/lb/lang.php
deleted file mode 100644
index 59acdf7a8..000000000
--- a/lib/plugins/config/lang/lb/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * lb language file
- *
- * @author joel@schintgen.net
- */
diff --git a/lib/plugins/config/lang/mk/lang.php b/lib/plugins/config/lang/mk/lang.php
deleted file mode 100644
index 6d4530f79..000000000
--- a/lib/plugins/config/lang/mk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Macedonian language file
- *
- * @author Dimitar Talevski <dimi3.14@gmail.com>
- */
diff --git a/lib/plugins/config/lang/ms/lang.php b/lib/plugins/config/lang/ms/lang.php
deleted file mode 100644
index 77ad2a1c1..000000000
--- a/lib/plugins/config/lang/ms/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Malay language file
- *
- * @author Markos
- */
diff --git a/lib/plugins/config/lang/vi/lang.php b/lib/plugins/config/lang/vi/lang.php
deleted file mode 100644
index 2933d8875..000000000
--- a/lib/plugins/config/lang/vi/lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Vietnamese language file
- *
- */
diff --git a/lib/plugins/extension/_test/extension.test.php b/lib/plugins/extension/_test/extension.test.php
new file mode 100644
index 000000000..453b95e79
--- /dev/null
+++ b/lib/plugins/extension/_test/extension.test.php
@@ -0,0 +1,293 @@
+<?php
+
+/**
+ * Class mock_helper_plugin_extension_extension
+ *
+ * makes protected methods accessible
+ */
+class mock_helper_plugin_extension_extension extends helper_plugin_extension_extension {
+ public function find_folders(&$result, $base, $default_type = 'plugin', $dir = '') {
+ return parent::find_folders($result, $base, $default_type, $dir);
+ }
+
+}
+
+/**
+ * @group plugin_extension
+ * @group plugins
+ */
+class helper_plugin_extension_extension_test extends DokuWikiTest {
+
+ protected $pluginsEnabled = array('extension');
+
+ /**
+ * FIXME should we test this without internet first?
+ *
+ * @group internet
+ */
+ public function testExtensionParameters() {
+ $extension = new helper_plugin_extension_extension();
+
+ $extension->setExtension('extension');
+ $this->assertEquals('extension', $extension->getID());
+ $this->assertEquals('extension', $extension->getBase());
+ $this->assertEquals('Extension Manager', $extension->getDisplayName());
+ $this->assertEquals('Michael Hamann', $extension->getAuthor());
+ $this->assertEquals('michael@content-space.de', $extension->getEmail());
+ $this->assertEquals(md5('michael@content-space.de'), $extension->getEmailID());
+ $this->assertEquals('https://www.dokuwiki.org/plugin:extension', $extension->getURL());
+ $this->assertEquals('Allows managing and installing plugins and templates', $extension->getDescription());
+ $this->assertFalse($extension->isTemplate());
+ $this->assertTrue($extension->isEnabled());
+ $this->assertTrue($extension->isInstalled());
+ $this->assertTrue($extension->isBundled());
+
+ $extension->setExtension('testing');
+ $this->assertEquals('testing', $extension->getID());
+ $this->assertEquals('testing', $extension->getBase());
+ $this->assertEquals('Testing Plugin', $extension->getDisplayName());
+ $this->assertEquals('Tobias Sarnowski', $extension->getAuthor());
+ $this->assertEquals('tobias@trustedco.de', $extension->getEmail());
+ $this->assertEquals(md5('tobias@trustedco.de'), $extension->getEmailID());
+ $this->assertEquals('http://www.dokuwiki.org/plugin:testing', $extension->getURL());
+ $this->assertEquals('Used to test the test framework. Should always be disabled.', $extension->getDescription());
+ $this->assertFalse($extension->isTemplate());
+ $this->assertFalse($extension->isEnabled());
+ $this->assertTrue($extension->isInstalled());
+ $this->assertTrue($extension->isBundled());
+
+ $extension->setExtension('template:dokuwiki');
+ $this->assertEquals('template:dokuwiki', $extension->getID());
+ $this->assertEquals('dokuwiki', $extension->getBase());
+ $this->assertEquals('DokuWiki Template', $extension->getDisplayName());
+ $this->assertEquals('Anika Henke', $extension->getAuthor());
+ $this->assertEquals('anika@selfthinker.org', $extension->getEmail());
+ $this->assertEquals(md5('anika@selfthinker.org'), $extension->getEmailID());
+ $this->assertEquals('http://www.dokuwiki.org/template:dokuwiki', $extension->getURL());
+ $this->assertEquals('DokuWiki\'s default template since 2012', $extension->getDescription());
+ $this->assertTrue($extension->isTemplate());
+ $this->assertTrue($extension->isEnabled());
+ $this->assertTrue($extension->isInstalled());
+ $this->assertTrue($extension->isBundled());
+ }
+
+ public function testFindFoldersPlugins() {
+ $extension = new mock_helper_plugin_extension_extension();
+ $tdir = dirname(__FILE__).'/testdata';
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/plugin1", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('plugin', $result['old'][0]['type']);
+ $this->assertEquals('plugin1', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/plugin2", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('plugin', $result['new'][0]['type']);
+ $this->assertEquals('plugin2', $result['new'][0]['base']);
+ $this->assertEquals('plugin2', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/plgsub3", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('plugin', $result['old'][0]['type']);
+ $this->assertEquals('plgsub3/plugin3', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/plgsub4", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('plugin', $result['new'][0]['type']);
+ $this->assertEquals('plugin4', $result['new'][0]['base']);
+ $this->assertEquals('plgsub4/plugin4', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/plgfoo5", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('plugin', $result['new'][0]['type']);
+ $this->assertEquals('plugin5', $result['new'][0]['base']);
+ $this->assertEquals('plgfoo5', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/plgsub6/plgfoo6", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('plugin', $result['new'][0]['type']);
+ $this->assertEquals('plugin6', $result['new'][0]['base']);
+ $this->assertEquals('plgsub6/plgfoo6', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/either1", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('plugin', $result['old'][0]['type']);
+ $this->assertEquals('either1', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/eithersub2/either2", 'plugin');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('plugin', $result['old'][0]['type']);
+ $this->assertEquals('eithersub2/either2', $this->extdir($result['old'][0]['tmp']));
+ }
+
+ public function testFindFoldersTemplates() {
+ $extension = new mock_helper_plugin_extension_extension();
+ $tdir = dirname(__FILE__).'/testdata';
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/template1", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('template', $result['old'][0]['type']);
+ $this->assertEquals('template1', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/template2", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template2', $result['new'][0]['base']);
+ $this->assertEquals('template2', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplsub3", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('template', $result['old'][0]['type']);
+ $this->assertEquals('tplsub3/template3', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplsub4", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template4', $result['new'][0]['base']);
+ $this->assertEquals('tplsub4/template4', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplfoo5", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template5', $result['new'][0]['base']);
+ $this->assertEquals('tplfoo5', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplsub6/tplfoo6", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template6', $result['new'][0]['base']);
+ $this->assertEquals('tplsub6/tplfoo6', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/either1", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('template', $result['old'][0]['type']);
+ $this->assertEquals('either1', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/eithersub2/either2", 'template');
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('template', $result['old'][0]['type']);
+ $this->assertEquals('eithersub2/either2', $this->extdir($result['old'][0]['tmp']));
+ }
+
+ public function testFindFoldersTemplatesAutodetect() {
+ $extension = new mock_helper_plugin_extension_extension();
+ $tdir = dirname(__FILE__).'/testdata';
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/template1");
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('template', $result['old'][0]['type']);
+ $this->assertEquals('template1', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/template2");
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template2', $result['new'][0]['base']);
+ $this->assertEquals('template2', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplsub3");
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('template', $result['old'][0]['type']);
+ $this->assertEquals('tplsub3/template3', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplsub4");
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template4', $result['new'][0]['base']);
+ $this->assertEquals('tplsub4/template4', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplfoo5");
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template5', $result['new'][0]['base']);
+ $this->assertEquals('tplfoo5', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/tplsub6/tplfoo6");
+ $this->assertTrue($ok);
+ $this->assertEquals(1, count($result['new']));
+ $this->assertEquals('template', $result['new'][0]['type']);
+ $this->assertEquals('template6', $result['new'][0]['base']);
+ $this->assertEquals('tplsub6/tplfoo6', $this->extdir($result['new'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/either1");
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('plugin', $result['old'][0]['type']);
+ $this->assertEquals('either1', $this->extdir($result['old'][0]['tmp']));
+
+ $result = array('old' => array(), 'new' => array());
+ $ok = $extension->find_folders($result, "$tdir/eithersub2/either2");
+ $this->assertTrue($ok);
+ $this->assertEquals(0, count($result['new']));
+ $this->assertEquals(1, count($result['old']));
+ $this->assertEquals('plugin', $result['old'][0]['type']);
+ $this->assertEquals('eithersub2/either2', $this->extdir($result['old'][0]['tmp']));
+ }
+
+ /**
+ * remove the test data directory from a dir name for cross install comparison
+ *
+ * @param string $dir
+ * @return string
+ */
+ protected function extdir($dir) {
+ $tdir = dirname(__FILE__).'/testdata';
+ $len = strlen($tdir);
+ $dir = trim(substr($dir, $len), '/');
+ return $dir;
+ }
+} \ No newline at end of file
diff --git a/lib/plugins/extension/_test/testdata/either1/script.js b/lib/plugins/extension/_test/testdata/either1/script.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/either1/script.js
diff --git a/lib/plugins/extension/_test/testdata/eithersub2/either2/script.js b/lib/plugins/extension/_test/testdata/eithersub2/either2/script.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/eithersub2/either2/script.js
diff --git a/lib/plugins/extension/_test/testdata/plgfoo5/plugin.info.txt b/lib/plugins/extension/_test/testdata/plgfoo5/plugin.info.txt
new file mode 100644
index 000000000..cc4532d29
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/plgfoo5/plugin.info.txt
@@ -0,0 +1,7 @@
+base plugin5
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Plugin
+desc Dummy plugin data
+url http://example.com/plugin:plugin5
diff --git a/lib/plugins/extension/_test/testdata/plgsub3/plugin3/syntax.php b/lib/plugins/extension/_test/testdata/plgsub3/plugin3/syntax.php
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/plgsub3/plugin3/syntax.php
diff --git a/lib/plugins/extension/_test/testdata/plgsub4/plugin4/plugin.info.txt b/lib/plugins/extension/_test/testdata/plgsub4/plugin4/plugin.info.txt
new file mode 100644
index 000000000..374b6bf24
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/plgsub4/plugin4/plugin.info.txt
@@ -0,0 +1,7 @@
+base plugin4
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Plugin
+desc Dummy plugin data
+url http://example.com/plugin:plugin4
diff --git a/lib/plugins/extension/_test/testdata/plgsub6/plgfoo6/plugin.info.txt b/lib/plugins/extension/_test/testdata/plgsub6/plgfoo6/plugin.info.txt
new file mode 100644
index 000000000..461ff8735
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/plgsub6/plgfoo6/plugin.info.txt
@@ -0,0 +1,7 @@
+base plugin6
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Plugin
+desc Dummy plugin data
+url http://example.com/plugin:plugin6
diff --git a/lib/plugins/extension/_test/testdata/plugin1/syntax.php b/lib/plugins/extension/_test/testdata/plugin1/syntax.php
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/plugin1/syntax.php
diff --git a/lib/plugins/extension/_test/testdata/plugin2/plugin.info.txt b/lib/plugins/extension/_test/testdata/plugin2/plugin.info.txt
new file mode 100644
index 000000000..d56758fe9
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/plugin2/plugin.info.txt
@@ -0,0 +1,7 @@
+base plugin2
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Plugin
+desc Dummy Plugin data
+url http://example.com/plugin:plugin2
diff --git a/lib/plugins/extension/_test/testdata/template1/main.php b/lib/plugins/extension/_test/testdata/template1/main.php
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/template1/main.php
diff --git a/lib/plugins/extension/_test/testdata/template1/style.ini b/lib/plugins/extension/_test/testdata/template1/style.ini
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/template1/style.ini
diff --git a/lib/plugins/extension/_test/testdata/template2/template.info.txt b/lib/plugins/extension/_test/testdata/template2/template.info.txt
new file mode 100644
index 000000000..882a7b914
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/template2/template.info.txt
@@ -0,0 +1,7 @@
+base template2
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Template
+desc Dummy template data
+url http://example.com/template:template2
diff --git a/lib/plugins/extension/_test/testdata/tplfoo5/template.info.txt b/lib/plugins/extension/_test/testdata/tplfoo5/template.info.txt
new file mode 100644
index 000000000..4d7ecb8ef
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/tplfoo5/template.info.txt
@@ -0,0 +1,7 @@
+base template5
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Template
+desc Dummy template data
+url http://example.com/template:template5
diff --git a/lib/plugins/extension/_test/testdata/tplsub3/template3/main.php b/lib/plugins/extension/_test/testdata/tplsub3/template3/main.php
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/tplsub3/template3/main.php
diff --git a/lib/plugins/extension/_test/testdata/tplsub3/template3/style.ini b/lib/plugins/extension/_test/testdata/tplsub3/template3/style.ini
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/tplsub3/template3/style.ini
diff --git a/lib/plugins/extension/_test/testdata/tplsub4/template4/template.info.txt b/lib/plugins/extension/_test/testdata/tplsub4/template4/template.info.txt
new file mode 100644
index 000000000..f050555e5
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/tplsub4/template4/template.info.txt
@@ -0,0 +1,7 @@
+base template4
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Template
+desc Dummy template data
+url http://example.com/template:template4
diff --git a/lib/plugins/extension/_test/testdata/tplsub6/tplfoo6/template.info.txt b/lib/plugins/extension/_test/testdata/tplsub6/tplfoo6/template.info.txt
new file mode 100644
index 000000000..ea4dc230d
--- /dev/null
+++ b/lib/plugins/extension/_test/testdata/tplsub6/tplfoo6/template.info.txt
@@ -0,0 +1,7 @@
+base template6
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-05-02
+name Dummy Template
+desc Dummy template data
+url http://example.com/template:template6
diff --git a/lib/plugins/extension/action.php b/lib/plugins/extension/action.php
new file mode 100644
index 000000000..3f2ccaace
--- /dev/null
+++ b/lib/plugins/extension/action.php
@@ -0,0 +1,66 @@
+<?php
+/** DokuWiki Plugin extension (Action Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+class action_plugin_extension extends DokuWiki_Action_Plugin {
+
+ /**
+ * Registers a callback function for a given event
+ *
+ * @param Doku_Event_Handler $controller DokuWiki's event controller object
+ * @return void
+ */
+ public function register(Doku_Event_Handler $controller) {
+
+ $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info');
+
+ }
+
+ /**
+ * Create the detail info for a single plugin
+ *
+ * @param Doku_Event $event
+ * @param $param
+ */
+ public function info(Doku_Event &$event, $param){
+ global $USERINFO;
+ global $INPUT;
+
+
+ if($event->data != 'plugin_extension') return;
+ $event->preventDefault();
+ $event->stopPropagation();
+
+ if(empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])){
+ http_status(403);
+ echo 'Forbidden';
+ exit;
+ }
+
+ header('Content-Type: text/html; charset=utf-8');
+
+ $ext = $INPUT->str('ext');
+ if(!$ext) {
+ echo 'no extension given';
+ return;
+ }
+
+ /** @var helper_plugin_extension_extension $extension */
+ $extension = plugin_load('helper', 'extension_extension');
+ $extension->setExtension($ext);
+
+ /** @var helper_plugin_extension_list $list */
+ $list = plugin_load('helper', 'extension_list');
+
+
+ echo $list->make_info($extension);
+ }
+
+}
+
diff --git a/lib/plugins/extension/admin.php b/lib/plugins/extension/admin.php
new file mode 100644
index 000000000..99c74848b
--- /dev/null
+++ b/lib/plugins/extension/admin.php
@@ -0,0 +1,155 @@
+<?php
+/**
+ * DokuWiki Plugin extension (Admin Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Michael Hamann <michael@content-space.de>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * Admin part of the extension manager
+ */
+class admin_plugin_extension extends DokuWiki_Admin_Plugin {
+ protected $infoFor = null;
+ /** @var helper_plugin_extension_gui */
+ protected $gui;
+
+ /**
+ * Constructor
+ *
+ * loads additional helpers
+ */
+ public function __construct() {
+ $this->gui = plugin_load('helper', 'extension_gui');
+ }
+
+ /**
+ * @return int sort number in admin menu
+ */
+ public function getMenuSort() {
+ return 0;
+ }
+
+ /**
+ * @return bool true if only access for superuser, false is for superusers and moderators
+ */
+ public function forAdminOnly() {
+ return true;
+ }
+
+ /**
+ * Execute the requested action(s) and initialize the plugin repository
+ */
+ public function handle() {
+ global $INPUT;
+ // initialize the remote repository
+ /* @var helper_plugin_extension_repository $repository */
+ $repository = $this->loadHelper('extension_repository');
+
+ if(!$repository->hasAccess()) {
+ $url = $this->gui->tabURL('', array('purge' => 1));
+ msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1);
+ }
+
+ /* @var helper_plugin_extension_extension $extension */
+ $extension = $this->loadHelper('extension_extension');
+
+ try {
+ if($INPUT->post->has('fn') && checkSecurityToken()) {
+ $actions = $INPUT->post->arr('fn');
+ foreach($actions as $action => $extensions) {
+ foreach($extensions as $extname => $label) {
+ switch($action) {
+ case 'install':
+ case 'reinstall':
+ case 'update':
+ $extension->setExtension($extname);
+ $installed = $extension->installOrUpdate();
+ foreach($installed as $ext => $info) {
+ msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
+ }
+ break;
+ case 'uninstall':
+ $extension->setExtension($extname);
+ $status = $extension->uninstall();
+ if($status !== true) {
+ msg($status, -1);
+ } else {
+ msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getDisplayName())), 1);
+ }
+ break;
+ case 'enable';
+ $extension->setExtension($extname);
+ $status = $extension->enable();
+ if($status !== true) {
+ msg($status, -1);
+ } else {
+ msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1);
+ }
+ break;
+ case 'disable';
+ $extension->setExtension($extname);
+ $status = $extension->disable();
+ if($status !== true) {
+ msg($status, -1);
+ } else {
+ msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1);
+ }
+ break;
+ }
+ }
+ }
+ send_redirect($this->gui->tabURL('', array(), '&', true));
+ } elseif($INPUT->post->str('installurl') && checkSecurityToken()) {
+ $installed = $extension->installFromURL($INPUT->post->str('installurl'));
+ foreach($installed as $ext => $info) {
+ msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
+ }
+ send_redirect($this->gui->tabURL('', array(), '&', true));
+ } elseif(isset($_FILES['installfile']) && checkSecurityToken()) {
+ $installed = $extension->installFromUpload('installfile');
+ foreach($installed as $ext => $info) {
+ msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
+ }
+ send_redirect($this->gui->tabURL('', array(), '&', true));
+ }
+
+ } catch(Exception $e) {
+ msg($e->getMessage(), -1);
+ send_redirect($this->gui->tabURL('', array(), '&', true));
+ }
+
+ }
+
+ /**
+ * Render HTML output
+ */
+ public function html() {
+ ptln('<h1>'.$this->getLang('menu').'</h1>');
+ ptln('<div id="extension__manager">');
+
+ $this->gui->tabNavigation();
+
+ switch($this->gui->currentTab()) {
+ case 'search':
+ $this->gui->tabSearch();
+ break;
+ case 'templates':
+ $this->gui->tabTemplates();
+ break;
+ case 'install':
+ $this->gui->tabInstall();
+ break;
+ case 'plugins':
+ default:
+ $this->gui->tabPlugins();
+ }
+
+ ptln('</div>');
+ }
+}
+
+// vim:ts=4:sw=4:et: \ No newline at end of file
diff --git a/lib/plugins/extension/all.less b/lib/plugins/extension/all.less
new file mode 100644
index 000000000..3d9688e14
--- /dev/null
+++ b/lib/plugins/extension/all.less
@@ -0,0 +1,37 @@
+
+@media only screen and (max-width: 600px) {
+
+#extension__list .legend {
+ > div {
+ padding-left: 0;
+ }
+
+ div.screenshot {
+ margin: 0 .5em .5em 0;
+ }
+
+ h2 {
+ width: auto;
+ float: none;
+ }
+
+ div.linkbar {
+ clear: left;
+ }
+}
+
+[dir=rtl] #extension__list .legend {
+ > div {
+ padding-right: 0;
+ }
+
+ div.screenshot {
+ margin: 0 0 .5em .5em;
+ }
+
+ div.linkbar {
+ clear: right;
+ }
+}
+
+} /* /@media */
diff --git a/lib/plugins/extension/helper/extension.php b/lib/plugins/extension/helper/extension.php
new file mode 100644
index 000000000..7958cd2da
--- /dev/null
+++ b/lib/plugins/extension/helper/extension.php
@@ -0,0 +1,1093 @@
+<?php
+/**
+ * DokuWiki Plugin extension (Helper Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Michael Hamann <michael@content-space.de>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+if(!defined('DOKU_TPLLIB')) define('DOKU_TPLLIB', DOKU_INC.'lib/tpl/');
+
+/**
+ * Class helper_plugin_extension_extension represents a single extension (plugin or template)
+ */
+class helper_plugin_extension_extension extends DokuWiki_Plugin {
+ private $id;
+ private $base;
+ private $is_template = false;
+ private $localInfo;
+ private $remoteInfo;
+ private $managerData;
+ /** @var helper_plugin_extension_repository $repository */
+ private $repository = null;
+
+ /** @var array list of temporary directories */
+ private $temporary = array();
+
+ /**
+ * Destructor
+ *
+ * deletes any dangling temporary directories
+ */
+ public function __destruct() {
+ foreach($this->temporary as $dir){
+ io_rmdir($dir, true);
+ }
+ }
+
+ /**
+ * @return bool false, this component is not a singleton
+ */
+ public function isSingleton() {
+ return false;
+ }
+
+ /**
+ * Set the name of the extension this instance shall represents, triggers loading the local and remote data
+ *
+ * @param string $id The id of the extension (prefixed with template: for templates)
+ * @return bool If some (local or remote) data was found
+ */
+ public function setExtension($id) {
+ $this->id = $id;
+ $this->base = $id;
+
+ if(substr($id, 0 , 9) == 'template:'){
+ $this->base = substr($id, 9);
+ $this->is_template = true;
+ }
+
+ $this->localInfo = array();
+ $this->managerData = array();
+ $this->remoteInfo = array();
+
+ if ($this->isInstalled()) {
+ $this->readLocalData();
+ $this->readManagerData();
+ }
+
+ if ($this->repository == null) {
+ $this->repository = $this->loadHelper('extension_repository');
+ }
+
+ $this->remoteInfo = $this->repository->getData($this->getID());
+
+ return ($this->localInfo || $this->remoteInfo);
+ }
+
+ /**
+ * If the extension is installed locally
+ *
+ * @return bool If the extension is installed locally
+ */
+ public function isInstalled() {
+ return is_dir($this->getInstallDir());
+ }
+
+ /**
+ * If the extension is under git control
+ *
+ * @return bool
+ */
+ public function isGitControlled() {
+ if(!$this->isInstalled()) return false;
+ return is_dir($this->getInstallDir().'/.git');
+ }
+
+ /**
+ * If the extension is bundled
+ *
+ * @return bool If the extension is bundled
+ */
+ public function isBundled() {
+ if (!empty($this->remoteInfo['bundled'])) return $this->remoteInfo['bundled'];
+ return in_array($this->base,
+ array(
+ 'authad', 'authldap', 'authmysql', 'authpgsql', 'authplain', 'acl', 'info', 'extension',
+ 'revert', 'popularity', 'config', 'safefnrecode', 'testing', 'template:dokuwiki'
+ )
+ );
+ }
+
+ /**
+ * If the extension is protected against any modification (disable/uninstall)
+ *
+ * @return bool if the extension is protected
+ */
+ public function isProtected() {
+ // never allow deinstalling the current auth plugin:
+ global $conf;
+ if ($this->id == $conf['authtype']) return true;
+
+ /** @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+ $cascade = $plugin_controller->getCascade();
+ return (isset($cascade['protected'][$this->id]) && $cascade['protected'][$this->id]);
+ }
+
+ /**
+ * If the extension is installed in the correct directory
+ *
+ * @return bool If the extension is installed in the correct directory
+ */
+ public function isInWrongFolder() {
+ return $this->base != $this->getBase();
+ }
+
+ /**
+ * If the extension is enabled
+ *
+ * @return bool If the extension is enabled
+ */
+ public function isEnabled() {
+ global $conf;
+ if($this->isTemplate()){
+ return ($conf['template'] == $this->getBase());
+ }
+
+ /* @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+ return !$plugin_controller->isdisabled($this->base);
+ }
+
+ /**
+ * If the extension should be updated, i.e. if an updated version is available
+ *
+ * @return bool If an update is available
+ */
+ public function updateAvailable() {
+ if(!$this->isInstalled()) return false;
+ if($this->isBundled()) return false;
+ $lastupdate = $this->getLastUpdate();
+ if ($lastupdate === false) return false;
+ $installed = $this->getInstalledVersion();
+ if ($installed === false || $installed === $this->getLang('unknownversion')) return true;
+ return $this->getInstalledVersion() < $this->getLastUpdate();
+ }
+
+ /**
+ * If the extension is a template
+ *
+ * @return bool If this extension is a template
+ */
+ public function isTemplate() {
+ return $this->is_template;
+ }
+
+ /**
+ * Get the ID of the extension
+ *
+ * This is the same as getName() for plugins, for templates it's getName() prefixed with 'template:'
+ *
+ * @return string
+ */
+ public function getID() {
+ return $this->id;
+ }
+
+ /**
+ * Get the name of the installation directory
+ *
+ * @return string The name of the installation directory
+ */
+ public function getInstallName() {
+ return $this->base;
+ }
+
+ // Data from plugin.info.txt/template.info.txt or the repo when not available locally
+ /**
+ * Get the basename of the extension
+ *
+ * @return string The basename
+ */
+ public function getBase() {
+ if (!empty($this->localInfo['base'])) return $this->localInfo['base'];
+ return $this->base;
+ }
+
+ /**
+ * Get the display name of the extension
+ *
+ * @return string The display name
+ */
+ public function getDisplayName() {
+ if (!empty($this->localInfo['name'])) return $this->localInfo['name'];
+ if (!empty($this->remoteInfo['name'])) return $this->remoteInfo['name'];
+ return $this->base;
+ }
+
+ /**
+ * Get the author name of the extension
+ *
+ * @return string|bool The name of the author or false if there is none
+ */
+ public function getAuthor() {
+ if (!empty($this->localInfo['author'])) return $this->localInfo['author'];
+ if (!empty($this->remoteInfo['author'])) return $this->remoteInfo['author'];
+ return false;
+ }
+
+ /**
+ * Get the email of the author of the extension if there is any
+ *
+ * @return string|bool The email address or false if there is none
+ */
+ public function getEmail() {
+ // email is only in the local data
+ if (!empty($this->localInfo['email'])) return $this->localInfo['email'];
+ return false;
+ }
+
+ /**
+ * Get the email id, i.e. the md5sum of the email
+ *
+ * @return string|bool The md5sum of the email if there is any, false otherwise
+ */
+ public function getEmailID() {
+ if (!empty($this->remoteInfo['emailid'])) return $this->remoteInfo['emailid'];
+ if (!empty($this->localInfo['email'])) return md5($this->localInfo['email']);
+ return false;
+ }
+
+ /**
+ * Get the description of the extension
+ *
+ * @return string The description
+ */
+ public function getDescription() {
+ if (!empty($this->localInfo['desc'])) return $this->localInfo['desc'];
+ if (!empty($this->remoteInfo['description'])) return $this->remoteInfo['description'];
+ return '';
+ }
+
+ /**
+ * Get the URL of the extension, usually a page on dokuwiki.org
+ *
+ * @return string The URL
+ */
+ public function getURL() {
+ if (!empty($this->localInfo['url'])) return $this->localInfo['url'];
+ return 'https://www.dokuwiki.org/'.($this->isTemplate() ? 'template' : 'plugin').':'.$this->getBase();
+ }
+
+ /**
+ * Get the installed version of the extension
+ *
+ * @return string|bool The version, usually in the form yyyy-mm-dd if there is any
+ */
+ public function getInstalledVersion() {
+ if (!empty($this->localInfo['date'])) return $this->localInfo['date'];
+ if ($this->isInstalled()) return $this->getLang('unknownversion');
+ return false;
+ }
+
+ /**
+ * Get the install date of the current version
+ *
+ * @return string|bool The date of the last update or false if not available
+ */
+ public function getUpdateDate() {
+ if (!empty($this->managerData['updated'])) return $this->managerData['updated'];
+ return false;
+ }
+
+ /**
+ * Get the date of the installation of the plugin
+ *
+ * @return string|bool The date of the installation or false if not available
+ */
+ public function getInstallDate() {
+ if (!empty($this->managerData['installed'])) return $this->managerData['installed'];
+ return false;
+ }
+
+ /**
+ * Get the names of the dependencies of this extension
+ *
+ * @return array The base names of the dependencies
+ */
+ public function getDependencies() {
+ if (!empty($this->remoteInfo['dependencies'])) return $this->remoteInfo['dependencies'];
+ return array();
+ }
+
+ /**
+ * Get the names of the missing dependencies
+ *
+ * @return array The base names of the missing dependencies
+ */
+ public function getMissingDependencies() {
+ /* @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+ $dependencies = $this->getDependencies();
+ $missing_dependencies = array();
+ foreach ($dependencies as $dependency) {
+ if ($plugin_controller->isdisabled($dependency)) {
+ $missing_dependencies[] = $dependency;
+ }
+ }
+ return $missing_dependencies;
+ }
+
+ /**
+ * Get the names of all conflicting extensions
+ *
+ * @return array The names of the conflicting extensions
+ */
+ public function getConflicts() {
+ if (!empty($this->remoteInfo['conflicts'])) return $this->remoteInfo['dependencies'];
+ return array();
+ }
+
+ /**
+ * Get the names of similar extensions
+ *
+ * @return array The names of similar extensions
+ */
+ public function getSimilarExtensions() {
+ if (!empty($this->remoteInfo['similar'])) return $this->remoteInfo['similar'];
+ return array();
+ }
+
+ /**
+ * Get the names of the tags of the extension
+ *
+ * @return array The names of the tags of the extension
+ */
+ public function getTags() {
+ if (!empty($this->remoteInfo['tags'])) return $this->remoteInfo['tags'];
+ return array();
+ }
+
+ /**
+ * Get the popularity information as floating point number [0,1]
+ *
+ * @return float|bool The popularity information or false if it isn't available
+ */
+ public function getPopularity() {
+ if (!empty($this->remoteInfo['popularity'])) return $this->remoteInfo['popularity'];
+ return false;
+ }
+
+
+ /**
+ * Get the text of the security warning if there is any
+ *
+ * @return string|bool The security warning if there is any, false otherwise
+ */
+ public function getSecurityWarning() {
+ if (!empty($this->remoteInfo['securitywarning'])) return $this->remoteInfo['securitywarning'];
+ return false;
+ }
+
+ /**
+ * Get the text of the security issue if there is any
+ *
+ * @return string|bool The security issue if there is any, false otherwise
+ */
+ public function getSecurityIssue() {
+ if (!empty($this->remoteInfo['securityissue'])) return $this->remoteInfo['securityissue'];
+ return false;
+ }
+
+ /**
+ * Get the URL of the screenshot of the extension if there is any
+ *
+ * @return string|bool The screenshot URL if there is any, false otherwise
+ */
+ public function getScreenshotURL() {
+ if (!empty($this->remoteInfo['screenshoturl'])) return $this->remoteInfo['screenshoturl'];
+ return false;
+ }
+
+ /**
+ * Get the URL of the thumbnail of the extension if there is any
+ *
+ * @return string|bool The thumbnail URL if there is any, false otherwise
+ */
+ public function getThumbnailURL() {
+ if (!empty($this->remoteInfo['thumbnailurl'])) return $this->remoteInfo['thumbnailurl'];
+ return false;
+ }
+ /**
+ * Get the last used download URL of the extension if there is any
+ *
+ * @return string|bool The previously used download URL, false if the extension has been installed manually
+ */
+ public function getLastDownloadURL() {
+ if (!empty($this->managerData['downloadurl'])) return $this->managerData['downloadurl'];
+ return false;
+ }
+
+ /**
+ * Get the download URL of the extension if there is any
+ *
+ * @return string|bool The download URL if there is any, false otherwise
+ */
+ public function getDownloadURL() {
+ if (!empty($this->remoteInfo['downloadurl'])) return $this->remoteInfo['downloadurl'];
+ return false;
+ }
+
+ /**
+ * If the download URL has changed since the last download
+ *
+ * @return bool If the download URL has changed
+ */
+ public function hasDownloadURLChanged() {
+ $lasturl = $this->getLastDownloadURL();
+ $currenturl = $this->getDownloadURL();
+ return ($lasturl && $currenturl && $lasturl != $currenturl);
+ }
+
+ /**
+ * Get the bug tracker URL of the extension if there is any
+ *
+ * @return string|bool The bug tracker URL if there is any, false otherwise
+ */
+ public function getBugtrackerURL() {
+ if (!empty($this->remoteInfo['bugtracker'])) return $this->remoteInfo['bugtracker'];
+ return false;
+ }
+
+ /**
+ * Get the URL of the source repository if there is any
+ *
+ * @return string|bool The URL of the source repository if there is any, false otherwise
+ */
+ public function getSourcerepoURL() {
+ if (!empty($this->remoteInfo['sourcerepo'])) return $this->remoteInfo['sourcerepo'];
+ return false;
+ }
+
+ /**
+ * Get the donation URL of the extension if there is any
+ *
+ * @return string|bool The donation URL if there is any, false otherwise
+ */
+ public function getDonationURL() {
+ if (!empty($this->remoteInfo['donationurl'])) return $this->remoteInfo['donationurl'];
+ return false;
+ }
+
+ /**
+ * Get the extension type(s)
+ *
+ * @return array The type(s) as array of strings
+ */
+ public function getTypes() {
+ if (!empty($this->remoteInfo['types'])) return $this->remoteInfo['types'];
+ if ($this->isTemplate()) return array(32 => 'template');
+ return array();
+ }
+
+ /**
+ * Get a list of all DokuWiki versions this extension is compatible with
+ *
+ * @return array The versions in the form yyyy-mm-dd => ('label' => label, 'implicit' => implicit)
+ */
+ public function getCompatibleVersions() {
+ if (!empty($this->remoteInfo['compatible'])) return $this->remoteInfo['compatible'];
+ return array();
+ }
+
+ /**
+ * Get the date of the last available update
+ *
+ * @return string|bool The last available update in the form yyyy-mm-dd if there is any, false otherwise
+ */
+ public function getLastUpdate() {
+ if (!empty($this->remoteInfo['lastupdate'])) return $this->remoteInfo['lastupdate'];
+ return false;
+ }
+
+ /**
+ * Get the base path of the extension
+ *
+ * @return string The base path of the extension
+ */
+ public function getInstallDir() {
+ if ($this->isTemplate()) {
+ return DOKU_TPLLIB.$this->base;
+ } else {
+ return DOKU_PLUGIN.$this->base;
+ }
+ }
+
+ /**
+ * The type of extension installation
+ *
+ * @return string One of "none", "manual", "git" or "automatic"
+ */
+ public function getInstallType() {
+ if (!$this->isInstalled()) return 'none';
+ if (!empty($this->managerData)) return 'automatic';
+ if (is_dir($this->getInstallDir().'/.git')) return 'git';
+ return 'manual';
+ }
+
+ /**
+ * If the extension can probably be installed/updated or uninstalled
+ *
+ * @return bool|string True or error string
+ */
+ public function canModify() {
+ if($this->isInstalled()) {
+ if(!is_writable($this->getInstallDir())) {
+ return 'noperms';
+ }
+ }
+
+ if($this->isTemplate() && !is_writable(DOKU_TPLLIB)) {
+ return 'notplperms';
+
+ } elseif(!is_writable(DOKU_PLUGIN)) {
+ return 'nopluginperms';
+ }
+ return true;
+ }
+
+ /**
+ * Install an extension from a user upload
+ *
+ * @param string $field name of the upload file
+ * @throws Exception when something goes wrong
+ * @return array The list of installed extensions
+ */
+ public function installFromUpload($field){
+ if($_FILES[$field]['error']){
+ throw new Exception($this->getLang('msg_upload_failed').' ('.$_FILES[$field]['error'].')');
+ }
+
+ $tmp = $this->mkTmpDir();
+ if(!$tmp) throw new Exception($this->getLang('error_dircreate'));
+
+ // filename may contain the plugin name for old style plugins...
+ $basename = basename($_FILES[$field]['name']);
+ $basename = preg_replace('/\.(tar\.gz|tar\.bz|tar\.bz2|tar|tgz|tbz|zip)$/', '', $basename);
+ $basename = preg_replace('/[\W]+/', '', $basename);
+
+ if(!move_uploaded_file($_FILES[$field]['tmp_name'], "$tmp/upload.archive")){
+ throw new Exception($this->getLang('msg_upload_failed'));
+ }
+
+ try {
+ $installed = $this->installArchive("$tmp/upload.archive", true, $basename);
+ // purge cache
+ $this->purgeCache();
+ }catch (Exception $e){
+ throw $e;
+ }
+ return $installed;
+ }
+
+ /**
+ * Install an extension from a remote URL
+ *
+ * @param string $url
+ * @throws Exception when something goes wrong
+ * @return array The list of installed extensions
+ */
+ public function installFromURL($url){
+ try {
+ $path = $this->download($url);
+ $installed = $this->installArchive($path, true);
+
+ // purge caches
+ foreach($installed as $ext => $info){
+ $this->setExtension($ext);
+ $this->purgeCache();
+ }
+ }catch (Exception $e){
+ throw $e;
+ }
+ return $installed;
+ }
+
+ /**
+ * Install or update the extension
+ *
+ * @throws \Exception when something goes wrong
+ * @return array The list of installed extensions
+ */
+ public function installOrUpdate() {
+ $path = $this->download($this->getDownloadURL());
+ $installed = $this->installArchive($path, $this->isInstalled(), $this->getBase());
+
+ // refresh extension information
+ if (!isset($installed[$this->getID()])) {
+ throw new Exception('Error, the requested extension hasn\'t been installed or updated');
+ }
+ $this->setExtension($this->getID());
+ $this->purgeCache();
+ return $installed;
+ }
+
+ /**
+ * Uninstall the extension
+ *
+ * @return bool If the plugin was sucessfully uninstalled
+ */
+ public function uninstall() {
+ $this->purgeCache();
+ return io_rmdir($this->getInstallDir(), true);
+ }
+
+ /**
+ * Enable the extension
+ *
+ * @return bool|string True or an error message
+ */
+ public function enable() {
+ if ($this->isTemplate()) return $this->getLang('notimplemented');
+ if (!$this->isInstalled()) return $this->getLang('notinstalled');
+ if ($this->isEnabled()) return $this->getLang('alreadyenabled');
+
+ /* @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+ if ($plugin_controller->enable($this->base)) {
+ $this->purgeCache();
+ return true;
+ } else {
+ return $this->getLang('pluginlistsaveerror');
+ }
+ }
+
+ /**
+ * Disable the extension
+ *
+ * @return bool|string True or an error message
+ */
+ public function disable() {
+ if ($this->isTemplate()) return $this->getLang('notimplemented');
+
+ /* @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+ if (!$this->isInstalled()) return $this->getLang('notinstalled');
+ if (!$this->isEnabled()) return $this->getLang('alreadydisabled');
+ if ($plugin_controller->disable($this->base)) {
+ $this->purgeCache();
+ return true;
+ } else {
+ return $this->getLang('pluginlistsaveerror');
+ }
+ }
+
+ /**
+ * Purge the cache by touching the main configuration file
+ */
+ protected function purgeCache() {
+ global $config_cascade;
+
+ // expire dokuwiki caches
+ // touching local.php expires wiki page, JS and CSS caches
+ @touch(reset($config_cascade['main']['local']));
+ }
+
+ /**
+ * Read local extension data either from info.txt or getInfo()
+ */
+ protected function readLocalData() {
+ if ($this->isTemplate()) {
+ $infopath = $this->getInstallDir().'/template.info.txt';
+ } else {
+ $infopath = $this->getInstallDir().'/plugin.info.txt';
+ }
+
+ if (is_readable($infopath)) {
+ $this->localInfo = confToHash($infopath);
+ } elseif (!$this->isTemplate() && $this->isEnabled()) {
+ global $plugin_types;
+ $path = $this->getInstallDir().'/';
+ $plugin = null;
+
+ foreach($plugin_types as $type) {
+ if(@file_exists($path.$type.'.php')) {
+ $plugin = plugin_load($type, $this->base);
+ if ($plugin) break;
+ }
+
+ if($dh = @opendir($path.$type.'/')) {
+ while(false !== ($cp = readdir($dh))) {
+ if($cp == '.' || $cp == '..' || strtolower(substr($cp, -4)) != '.php') continue;
+
+ $plugin = plugin_load($type, $this->base.'_'.substr($cp, 0, -4));
+ if ($plugin) break;
+ }
+ if ($plugin) break;
+ closedir($dh);
+ }
+ }
+
+ if ($plugin) {
+ /* @var DokuWiki_Plugin $plugin */
+ $this->localInfo = $plugin->getInfo();
+ }
+ }
+ }
+
+ /**
+ * Read the manager.dat file
+ */
+ protected function readManagerData() {
+ $managerpath = $this->getInstallDir().'/manager.dat';
+ if (is_readable($managerpath)) {
+ $file = @file($managerpath);
+ if(!empty($file)) {
+ foreach($file as $line) {
+ list($key, $value) = explode('=', trim($line, DOKU_LF), 2);
+ $key = trim($key);
+ $value = trim($value);
+ // backwards compatible with old plugin manager
+ if($key == 'url') $key = 'downloadurl';
+ $this->managerData[$key] = $value;
+ }
+ }
+ }
+ }
+
+ /**
+ * Write the manager.data file
+ */
+ protected function writeManagerData() {
+ $managerpath = $this->getInstallDir().'/manager.dat';
+ $data = '';
+ foreach ($this->managerData as $k => $v) {
+ $data .= $k.'='.$v.DOKU_LF;
+ }
+ io_saveFile($managerpath, $data);
+ }
+
+ /**
+ * Returns a temporary directory
+ *
+ * The directory is registered for cleanup when the class is destroyed
+ *
+ * @return bool|string
+ */
+ protected function mkTmpDir(){
+ $dir = io_mktmpdir();
+ if(!$dir) return false;
+ $this->temporary[] = $dir;
+ return $dir;
+ }
+
+ /**
+ * Download an archive to a protected path
+ *
+ * @param string $url The url to get the archive from
+ * @throws Exception when something goes wrong
+ * @return string The path where the archive was saved
+ */
+ public function download($url) {
+ // check the url
+ if(!preg_match('/https?:\/\//i', $url)){
+ throw new Exception($this->getLang('error_badurl'));
+ }
+
+ // try to get the file from the path (used as plugin name fallback)
+ $file = parse_url($url, PHP_URL_PATH);
+ if(is_null($file)){
+ $file = md5($url);
+ }else{
+ $file = utf8_basename($file);
+ }
+
+ // create tmp directory for download
+ if(!($tmp = $this->mkTmpDir())) {
+ throw new Exception($this->getLang('error_dircreate'));
+ }
+
+ // download
+ if(!$file = io_download($url, $tmp.'/', true, $file, 0)) {
+ io_rmdir($tmp, true);
+ throw new Exception(sprintf($this->getLang('error_download'), '<bdi>'.hsc($url).'</bdi>'));
+ }
+
+ return $tmp.'/'.$file;
+ }
+
+ /**
+ * @param string $file The path to the archive that shall be installed
+ * @param bool $overwrite If an already installed plugin should be overwritten
+ * @param string $base The basename of the plugin if it's known
+ * @throws Exception when something went wrong
+ * @return array list of installed extensions
+ */
+ public function installArchive($file, $overwrite=false, $base = '') {
+ $installed_extensions = array();
+
+ // create tmp directory for decompression
+ if(!($tmp = $this->mkTmpDir())) {
+ throw new Exception($this->getLang('error_dircreate'));
+ }
+
+ // add default base folder if specified to handle case where zip doesn't contain this
+ if($base && !@mkdir($tmp.'/'.$base)) {
+ throw new Exception($this->getLang('error_dircreate'));
+ }
+
+ // decompress
+ $this->decompress($file, "$tmp/".$base);
+
+ // search $tmp/$base for the folder(s) that has been created
+ // move the folder(s) to lib/..
+ $result = array('old'=>array(), 'new'=>array());
+ $default = ($this->isTemplate() ? 'template' : 'plugin');
+ if(!$this->find_folders($result, $tmp.'/'.$base, $default)) {
+ throw new Exception($this->getLang('error_findfolder'));
+ }
+
+ // choose correct result array
+ if(count($result['new'])) {
+ $install = $result['new'];
+ }else{
+ $install = $result['old'];
+ }
+
+ if(!count($install)){
+ throw new Exception($this->getLang('error_findfolder'));
+ }
+
+ // now install all found items
+ foreach($install as $item) {
+ // where to install?
+ if($item['type'] == 'template') {
+ $target_base_dir = DOKU_TPLLIB;
+ }else{
+ $target_base_dir = DOKU_PLUGIN;
+ }
+
+ if(!empty($item['base'])) {
+ // use base set in info.txt
+ } elseif($base && count($install) == 1) {
+ $item['base'] = $base;
+ } else {
+ // default - use directory as found in zip
+ // plugins from github/master without *.info.txt will install in wrong folder
+ // but using $info->id will make 'code3' fail (which should install in lib/code/..)
+ $item['base'] = basename($item['tmp']);
+ }
+
+ // check to make sure we aren't overwriting anything
+ $target = $target_base_dir.$item['base'];
+ if(!$overwrite && @file_exists($target)) {
+ // TODO remember our settings, ask the user to confirm overwrite
+ continue;
+ }
+
+ $action = @file_exists($target) ? 'update' : 'install';
+
+ // copy action
+ if($this->dircopy($item['tmp'], $target)) {
+ // return info
+ $id = $item['base'];
+ if($item['type'] == 'template') $id = 'template:'.$id;
+ $installed_extensions[$id] = array(
+ 'base' => $item['base'],
+ 'type' => $item['type'],
+ 'action' => $action
+ );
+ } else {
+ throw new Exception(sprintf($this->getLang('error_copy').DOKU_LF, '<bdi>'.$item['base'].'</bdi>'));
+ }
+ }
+
+ // cleanup
+ if($tmp) io_rmdir($tmp, true);
+
+ return $installed_extensions;
+ }
+
+ /**
+ * Find out what was in the extracted directory
+ *
+ * Correct folders are searched recursively using the "*.info.txt" configs
+ * as indicator for a root folder. When such a file is found, it's base
+ * setting is used (when set). All folders found by this method are stored
+ * in the 'new' key of the $result array.
+ *
+ * For backwards compatibility all found top level folders are stored as
+ * in the 'old' key of the $result array.
+ *
+ * When no items are found in 'new' the copy mechanism should fall back
+ * the 'old' list.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param array $result - results are stored here
+ * @param string $directory - the temp directory where the package was unpacked to
+ * @param string $default_type - type used if no info.txt available
+ * @param string $subdir - a subdirectory. do not set. used by recursion
+ * @return bool - false on error
+ */
+ protected function find_folders(&$result, $directory, $default_type='plugin', $subdir='') {
+ $this_dir = "$directory$subdir";
+ $dh = @opendir($this_dir);
+ if(!$dh) return false;
+
+ $found_dirs = array();
+ $found_files = 0;
+ $found_template_parts = 0;
+ while (false !== ($f = readdir($dh))) {
+ if($f == '.' || $f == '..') continue;
+
+ if(is_dir("$this_dir/$f")) {
+ $found_dirs[] = "$subdir/$f";
+
+ } else {
+ // it's a file -> check for config
+ $found_files++;
+ switch ($f) {
+ case 'plugin.info.txt':
+ case 'template.info.txt':
+ // we have found a clear marker, save and return
+ $info = array();
+ $type = explode('.', $f, 2);
+ $info['type'] = $type[0];
+ $info['tmp'] = $this_dir;
+ $conf = confToHash("$this_dir/$f");
+ $info['base'] = basename($conf['base']);
+ $result['new'][] = $info;
+ return true;
+
+ case 'main.php':
+ case 'details.php':
+ case 'mediamanager.php':
+ case 'style.ini':
+ $found_template_parts++;
+ break;
+ }
+ }
+ }
+ closedir($dh);
+
+ // files where found but no info.txt - use old method
+ if($found_files){
+ $info = array();
+ $info['tmp'] = $this_dir;
+ // does this look like a template or should we use the default type?
+ if($found_template_parts >= 2) {
+ $info['type'] = 'template';
+ } else {
+ $info['type'] = $default_type;
+ }
+
+ $result['old'][] = $info;
+ return true;
+ }
+
+ // we have no files yet -> recurse
+ foreach ($found_dirs as $found_dir) {
+ $this->find_folders($result, $directory, $default_type, "$found_dir");
+ }
+ return true;
+ }
+
+ /**
+ * Decompress a given file to the given target directory
+ *
+ * Determines the compression type from the file extension
+ *
+ * @param string $file archive to extract
+ * @param string $target directory to extract to
+ * @throws Exception
+ * @return bool
+ */
+ private function decompress($file, $target) {
+ // decompression library doesn't like target folders ending in "/"
+ if(substr($target, -1) == "/") $target = substr($target, 0, -1);
+
+ $ext = $this->guess_archive($file);
+ if(in_array($ext, array('tar', 'bz', 'gz'))) {
+ switch($ext) {
+ case 'bz':
+ $compress_type = Tar::COMPRESS_BZIP;
+ break;
+ case 'gz':
+ $compress_type = Tar::COMPRESS_GZIP;
+ break;
+ default:
+ $compress_type = Tar::COMPRESS_NONE;
+ }
+
+ $tar = new Tar();
+ try {
+ $tar->open($file, $compress_type);
+ $tar->extract($target);
+ } catch (Exception $e) {
+ throw new Exception($this->getLang('error_decompress').' '.$e->getMessage());
+ }
+
+ return true;
+ } elseif($ext == 'zip') {
+
+ $zip = new ZipLib();
+ $ok = $zip->Extract($file, $target);
+
+ if($ok == -1){
+ throw new Exception($this->getLang('error_decompress').' Error extracting the zip archive');
+ }
+
+ return true;
+ }
+
+ // the only case when we don't get one of the recognized archive types is when the archive file can't be read
+ throw new Exception($this->getLang('error_decompress').' Couldn\'t read archive file');
+ }
+
+ /**
+ * Determine the archive type of the given file
+ *
+ * Reads the first magic bytes of the given file for content type guessing,
+ * if neither bz, gz or zip are recognized, tar is assumed.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $file The file to analyze
+ * @return string|bool false if the file can't be read, otherwise an "extension"
+ */
+ private function guess_archive($file) {
+ $fh = fopen($file, 'rb');
+ if(!$fh) return false;
+ $magic = fread($fh, 5);
+ fclose($fh);
+
+ if(strpos($magic, "\x42\x5a") === 0) return 'bz';
+ if(strpos($magic, "\x1f\x8b") === 0) return 'gz';
+ if(strpos($magic, "\x50\x4b\x03\x04") === 0) return 'zip';
+ return 'tar';
+ }
+
+ /**
+ * Copy with recursive sub-directory support
+ */
+ private function dircopy($src, $dst) {
+ global $conf;
+
+ if(is_dir($src)) {
+ if(!$dh = @opendir($src)) return false;
+
+ if($ok = io_mkdir_p($dst)) {
+ while ($ok && (false !== ($f = readdir($dh)))) {
+ if($f == '..' || $f == '.') continue;
+ $ok = $this->dircopy("$src/$f", "$dst/$f");
+ }
+ }
+
+ closedir($dh);
+ return $ok;
+
+ } else {
+ $exists = @file_exists($dst);
+
+ if(!@copy($src, $dst)) return false;
+ if(!$exists && !empty($conf['fperm'])) chmod($dst, $conf['fperm']);
+ @touch($dst, filemtime($src));
+ }
+
+ return true;
+ }
+}
+
+// vim:ts=4:sw=4:et:
diff --git a/lib/plugins/extension/helper/gui.php b/lib/plugins/extension/helper/gui.php
new file mode 100644
index 000000000..3a0f0c589
--- /dev/null
+++ b/lib/plugins/extension/helper/gui.php
@@ -0,0 +1,193 @@
+<?php
+/**
+ * DokuWiki Plugin extension (Helper Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * Class helper_plugin_extension_list takes care of the overall GUI
+ */
+class helper_plugin_extension_gui extends DokuWiki_Plugin {
+
+ protected $tabs = array('plugins', 'templates', 'search', 'install');
+
+ /** @var string the extension that should have an open info window FIXME currently broken */
+ protected $infoFor = '';
+
+ /**
+ * Constructor
+ *
+ * initializes requested info window
+ */
+ public function __construct() {
+ global $INPUT;
+ $this->infoFor = $INPUT->str('info');
+ }
+
+ /**
+ * display the plugin tab
+ */
+ public function tabPlugins() {
+ /* @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+
+ echo '<div class="panelHeader">';
+ echo $this->locale_xhtml('intro_plugins');
+ echo '</div>';
+
+ $pluginlist = $plugin_controller->getList('', true);
+ sort($pluginlist);
+ /* @var helper_plugin_extension_extension $extension */
+ $extension = $this->loadHelper('extension_extension');
+ /* @var helper_plugin_extension_list $list */
+ $list = $this->loadHelper('extension_list');
+ $list->start_form();
+ foreach($pluginlist as $name) {
+ $extension->setExtension($name);
+ $list->add_row($extension, $extension->getID() == $this->infoFor);
+ }
+ $list->end_form();
+ $list->render();
+ }
+
+ /**
+ * Display the template tab
+ */
+ public function tabTemplates() {
+ echo '<div class="panelHeader">';
+ echo $this->locale_xhtml('intro_templates');
+ echo '</div>';
+
+ // FIXME do we have a real way?
+ $tpllist = glob(DOKU_INC.'lib/tpl/*', GLOB_ONLYDIR);
+ $tpllist = array_map('basename', $tpllist);
+ sort($tpllist);
+
+ /* @var helper_plugin_extension_extension $extension */
+ $extension = $this->loadHelper('extension_extension');
+ /* @var helper_plugin_extension_list $list */
+ $list = $this->loadHelper('extension_list');
+ $list->start_form();
+ foreach($tpllist as $name) {
+ $extension->setExtension("template:$name");
+ $list->add_row($extension, $extension->getID() == $this->infoFor);
+ }
+ $list->end_form();
+ $list->render();
+ }
+
+ /**
+ * Display the search tab
+ */
+ public function tabSearch() {
+ global $INPUT;
+ echo '<div class="panelHeader">';
+ echo $this->locale_xhtml('intro_search');
+ echo '</div>';
+
+ $form = new Doku_Form(array('action' => $this->tabURL('', array(), '&'), 'class' => 'search'));
+ $form->addElement(form_makeTextField('q', $INPUT->str('q'), $this->getLang('search_for')));
+ $form->addElement(form_makeButton('submit', '', $this->getLang('search')));
+ $form->printForm();
+
+ if(!$INPUT->bool('q')) return;
+
+ /* @var helper_plugin_extension_repository $repository FIXME should we use some gloabl instance? */
+ $repository = $this->loadHelper('extension_repository');
+ $result = $repository->search($INPUT->str('q'));
+
+ /* @var helper_plugin_extension_extension $extension */
+ $extension = $this->loadHelper('extension_extension');
+ /* @var helper_plugin_extension_list $list */
+ $list = $this->loadHelper('extension_list');
+ $list->start_form();
+ if($result){
+ foreach($result as $name) {
+ $extension->setExtension($name);
+ $list->add_row($extension, $extension->getID() == $this->infoFor);
+ }
+ } else {
+ $list->nothing_found();
+ }
+ $list->end_form();
+ $list->render();
+
+ }
+
+ /**
+ * Display the template tab
+ */
+ public function tabInstall() {
+ echo '<div class="panelHeader">';
+ echo $this->locale_xhtml('intro_install');
+ echo '</div>';
+
+ $form = new Doku_Form(array('action' => $this->tabURL('', array(), '&'), 'enctype' => 'multipart/form-data', 'class' => 'install'));
+ $form->addElement(form_makeTextField('installurl', '', $this->getLang('install_url'), '', 'block'));
+ $form->addElement(form_makeFileField('installfile', $this->getLang('install_upload'), '', 'block'));
+ $form->addElement(form_makeButton('submit', '', $this->getLang('btn_install')));
+ $form->printForm();
+ }
+
+ /**
+ * Print the tab navigation
+ *
+ * @fixme style active one
+ */
+ public function tabNavigation() {
+ echo '<ul class="tabs">';
+ foreach($this->tabs as $tab) {
+ $url = $this->tabURL($tab);
+ if($this->currentTab() == $tab) {
+ $class = 'class="active"';
+ } else {
+ $class = '';
+ }
+ echo '<li '.$class.'><a href="'.$url.'">'.$this->getLang('tab_'.$tab).'</a></li>';
+ }
+ echo '</ul>';
+ }
+
+ /**
+ * Return the currently selected tab
+ *
+ * @return string
+ */
+ public function currentTab() {
+ global $INPUT;
+
+ $tab = $INPUT->str('tab', 'plugins', true);
+ if(!in_array($tab, $this->tabs)) $tab = 'plugins';
+ return $tab;
+ }
+
+ /**
+ * Create an URL inside the extension manager
+ *
+ * @param string $tab tab to load, empty for current tab
+ * @param array $params associative array of parameter to set
+ * @param string $sep seperator to build the URL
+ * @param bool $absolute create absolute URLs?
+ * @return string
+ */
+ public function tabURL($tab = '', $params = array(), $sep = '&amp;', $absolute = false) {
+ global $ID;
+ global $INPUT;
+
+ if(!$tab) $tab = $this->currentTab();
+ $defaults = array(
+ 'do' => 'admin',
+ 'page' => 'extension',
+ 'tab' => $tab,
+ );
+ if($tab == 'search') $defaults['q'] = $INPUT->str('q');
+
+ return wl($ID, array_merge($defaults, $params), $absolute, $sep);
+ }
+
+}
diff --git a/lib/plugins/extension/helper/list.php b/lib/plugins/extension/helper/list.php
new file mode 100644
index 000000000..01a5c516a
--- /dev/null
+++ b/lib/plugins/extension/helper/list.php
@@ -0,0 +1,561 @@
+<?php
+/**
+ * DokuWiki Plugin extension (Helper Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Michael Hamann <michael@content-space.de>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * Class helper_plugin_extension_list takes care of creating a HTML list of extensions
+ */
+class helper_plugin_extension_list extends DokuWiki_Plugin {
+ protected $form = '';
+ /** @var helper_plugin_extension_gui */
+ protected $gui;
+
+ /**
+ * Constructor
+ *
+ * loads additional helpers
+ */
+ public function __construct(){
+ $this->gui = plugin_load('helper', 'extension_gui');
+ }
+
+ function start_form() {
+ $this->form .= '<form id="extension__list" accept-charset="utf-8" method="post" action="">';
+ $hidden = array(
+ 'do'=>'admin',
+ 'page'=>'extension',
+ 'sectok'=>getSecurityToken()
+ );
+ $this->add_hidden($hidden);
+ $this->form .= '<ul class="extensionList">';
+ }
+ /**
+ * Build single row of extension table
+ * @param helper_plugin_extension_extension $extension The extension that shall be added
+ * @param bool $showinfo Show the info area
+ */
+ function add_row(helper_plugin_extension_extension $extension, $showinfo = false) {
+ $this->start_row($extension);
+ $this->populate_column('legend', $this->make_legend($extension, $showinfo));
+ $this->populate_column('actions', $this->make_actions($extension));
+ $this->end_row();
+ }
+
+ /**
+ * Adds a header to the form
+ *
+ * @param string $id The id of the header
+ * @param string $header The content of the header
+ * @param int $level The level of the header
+ */
+ function add_header($id, $header, $level = 2) {
+ $this->form .='<h'.$level.' id="'.$id.'">'.hsc($header).'</h'.$level.'>'.DOKU_LF;
+ }
+
+ /**
+ * Adds a paragraph to the form
+ *
+ * @param string $data The content
+ */
+ function add_p($data) {
+ $this->form .= '<p>'.hsc($data).'</p>'.DOKU_LF;
+ }
+
+ /**
+ * Add hidden fields to the form with the given data
+ * @param array $array
+ */
+ function add_hidden(array $array) {
+ $this->form .= '<div class="no">';
+ foreach ($array as $key => $value) {
+ $this->form .= '<input type="hidden" name="'.hsc($key).'" value="'.hsc($value).'" />';
+ }
+ $this->form .= '</div>'.DOKU_LF;
+ }
+
+ /**
+ * Add closing tags
+ */
+ function end_form() {
+ $this->form .= '</ul>';
+ $this->form .= '</form>'.DOKU_LF;
+ }
+
+ /**
+ * Show message when no results are found
+ */
+ function nothing_found() {
+ global $lang;
+ $this->form .= '<li class="notfound">'.$lang['nothingfound'].'</li>';
+ }
+
+ /**
+ * Print the form
+ */
+ function render() {
+ echo $this->form;
+ }
+
+ /**
+ * Start the HTML for the row for the extension
+ *
+ * @param helper_plugin_extension_extension $extension The extension
+ */
+ private function start_row(helper_plugin_extension_extension $extension) {
+ $this->form .= '<li id="extensionplugin__'.hsc($extension->getID()).'" class="'.$this->make_class($extension).'">';
+ }
+
+ /**
+ * Add a column with the given class and content
+ * @param string $class The class name
+ * @param string $html The content
+ */
+ private function populate_column($class, $html) {
+ $this->form .= '<div class="'.$class.' col">'.$html.'</div>'.DOKU_LF;
+ }
+
+ /**
+ * End the row
+ */
+ private function end_row() {
+ $this->form .= '</li>'.DOKU_LF;
+ }
+
+ /**
+ * Generate the link to the plugin homepage
+ *
+ * @param helper_plugin_extension_extension $extension The extension
+ * @return string The HTML code
+ */
+ function make_homepagelink(helper_plugin_extension_extension $extension) {
+ $text = $this->getLang('homepage_link');
+ $url = hsc($extension->getURL());
+ return '<a href="'.$url.'" title="'.$url.'" class ="urlextern">'.$text.'</a> ';
+ }
+
+ /**
+ * Generate the class name for the row of the extensio
+ *
+ * @param helper_plugin_extension_extension $extension The extension object
+ * @return string The class name
+ */
+ function make_class(helper_plugin_extension_extension $extension) {
+ $class = ($extension->isTemplate()) ? 'template' : 'plugin';
+ if($extension->isInstalled()) {
+ $class.=' installed';
+ $class.= ($extension->isEnabled()) ? ' enabled':' disabled';
+ }
+ if(!$extension->canModify()) $class.= ' notselect';
+ if($extension->isProtected()) $class.= ' protected';
+ //if($this->showinfo) $class.= ' showinfo';
+ return $class;
+ }
+
+ /**
+ * Generate a link to the author of the extension
+ *
+ * @param helper_plugin_extension_extension $extension The extension object
+ * @return string The HTML code of the link
+ */
+ function make_author(helper_plugin_extension_extension $extension) {
+ global $ID;
+
+ if($extension->getAuthor()) {
+
+ $mailid = $extension->getEmailID();
+ if($mailid){
+ $url = $this->gui->tabURL('search', array('q' => 'authorid:'.$mailid));
+ return '<bdi><a href="'.$url.'" class="author" title="'.$this->getLang('author_hint').'" ><img src="//www.gravatar.com/avatar/'.$mailid.'?s=20&amp;d=mm" width="20" height="20" alt="" /> '.hsc($extension->getAuthor()).'</a></bdi>';
+
+ }else{
+ return '<bdi><span class="author">'.hsc($extension->getAuthor()).'</span></bdi>';
+ }
+ }
+ return "<em class=\"author\">".$this->getLang('unknown_author')."</em>".DOKU_LF;
+ }
+
+ /**
+ * Get the link and image tag for the screenshot/thumbnail
+ *
+ * @param helper_plugin_extension_extension $extension The extension object
+ * @return string The HTML code
+ */
+ function make_screenshot(helper_plugin_extension_extension $extension) {
+ if($extension->getScreenshotURL()) {
+ $title = sprintf($this->getLang('screenshot'), hsc($extension->getDisplayName()));
+ $img = '<a href="'.hsc($extension->getScreenshotURL()).'" target="_blank" class="extension_screenshot">'.
+ '<img alt="'.$title.'" width="120" height="70" src="'.hsc($extension->getThumbnailURL()).'" />'.
+ '</a>';
+ } elseif($extension->isTemplate()) {
+ $img = '<img alt="" width="120" height="70" src="'.DOKU_BASE.'lib/plugins/extension/images/template.png" />';
+
+ } else {
+ $img = '<img alt="" width="120" height="70" src="'.DOKU_BASE.'lib/plugins/extension/images/plugin.png" />';
+ }
+ return '<div class="screenshot" >'.$img.'<span></span></div>'.DOKU_LF;
+ }
+
+ /**
+ * Extension main description
+ *
+ * @param helper_plugin_extension_extension $extension The extension object
+ * @param bool $showinfo Show the info section
+ * @return string The HTML code
+ */
+ function make_legend(helper_plugin_extension_extension $extension, $showinfo = false) {
+ $return = '<div>';
+ $return .= '<h2>';
+ $return .= sprintf($this->getLang('extensionby'), '<bdi>'.hsc($extension->getDisplayName()).'</bdi>', $this->make_author($extension));
+ $return .= '</h2>'.DOKU_LF;
+
+ $return .= $this->make_screenshot($extension);
+
+ $popularity = $extension->getPopularity();
+ if ($popularity !== false && !$extension->isBundled()) {
+ $popularityText = sprintf($this->getLang('popularity'), round($popularity*100, 2));
+ $return .= '<div class="popularity" title="'.$popularityText.'"><div style="width: '.($popularity * 100).'%;"><span class="a11y">'.$popularityText.'</span></div></div>'.DOKU_LF;
+ }
+
+ if($extension->getDescription()) {
+ $return .= '<p><bdi>';
+ $return .= hsc($extension->getDescription()).' ';
+ $return .= '</bdi></p>'.DOKU_LF;
+ }
+
+ $return .= $this->make_linkbar($extension);
+
+ if($showinfo){
+ $url = $this->gui->tabURL('');
+ $class = 'close';
+ }else{
+ $url = $this->gui->tabURL('', array('info' => $extension->getID()));
+ $class = '';
+ }
+ $return .= ' <a href="'.$url.'#extensionplugin__'.$extension->getID().'" class="info '.$class.'" title="'.$this->getLang('btn_info').'" data-extid="'.$extension->getID().'">'.$this->getLang('btn_info').'</a>';
+
+ if ($showinfo) {
+ $return .= $this->make_info($extension);
+ }
+ $return .= $this->make_noticearea($extension);
+ $return .= '</div>'.DOKU_LF;
+ return $return;
+ }
+
+ /**
+ * Generate the link bar HTML code
+ *
+ * @param helper_plugin_extension_extension $extension The extension instance
+ * @return string The HTML code
+ */
+ function make_linkbar(helper_plugin_extension_extension $extension) {
+ $return = '<div class="linkbar">';
+ $return .= $this->make_homepagelink($extension);
+ if ($extension->getBugtrackerURL()) {
+ $return .= ' <a href="'.hsc($extension->getBugtrackerURL()).'" title="'.hsc($extension->getBugtrackerURL()).'" class ="interwiki iw_dokubug">'.$this->getLang('bugs_features').'</a> ';
+ }
+ if ($extension->getTags()){
+ $first = true;
+ $return .= '<span class="tags">'.$this->getLang('tags').' ';
+ foreach ($extension->getTags() as $tag) {
+ if (!$first){
+ $return .= ', ';
+ } else {
+ $first = false;
+ }
+ $url = $this->gui->tabURL('search', array('q' => 'tag:'.$tag));
+ $return .= '<bdi><a href="'.$url.'">'.hsc($tag).'</a></bdi>';
+ }
+ $return .= '</span>';
+ }
+ $return .= '</div>'.DOKU_LF;
+ return $return;
+ }
+
+ /**
+ * Notice area
+ *
+ * @param helper_plugin_extension_extension $extension The extension
+ * @return string The HTML code
+ */
+ function make_noticearea(helper_plugin_extension_extension $extension) {
+ $return = '';
+ $missing_dependencies = $extension->getMissingDependencies();
+ if(!empty($missing_dependencies)) {
+ $return .= '<div class="msg error">'.
+ sprintf($this->getLang('missing_dependency'), '<bdi>'.implode(', ', /*array_map(array($this->helper, 'make_extensionsearchlink'),*/ $missing_dependencies).'</bdi>').
+ '</div>';
+ }
+ if($extension->isInWrongFolder()) {
+ $return .= '<div class="msg error">'.
+ sprintf($this->getLang('wrong_folder'), '<bdi>'.hsc($extension->getInstallName()).'</bdi>', '<bdi>'.hsc($extension->getBase()).'</bdi>').
+ '</div>';
+ }
+ if(($securityissue = $extension->getSecurityIssue()) !== false) {
+ $return .= '<div class="msg error">'.
+ sprintf($this->getLang('security_issue'), '<bdi>'.hsc($securityissue).'</bdi>').
+ '</div>';
+ }
+ if(($securitywarning = $extension->getSecurityWarning()) !== false) {
+ $return .= '<div class="msg notify">'.
+ sprintf($this->getLang('security_warning'), '<bdi>'.hsc($securitywarning).'</bdi>').
+ '</div>';
+ }
+ if($extension->updateAvailable()) {
+ $return .= '<div class="msg notify">'.
+ sprintf($this->getLang('update_available'), hsc($extension->getLastUpdate())).
+ '</div>';
+ }
+ if($extension->hasDownloadURLChanged()) {
+ $return .= '<div class="msg notify">'.
+ sprintf($this->getLang('url_change'), '<bdi>'.hsc($extension->getDownloadURL()).'</bdi>', '<bdi>'.hsc($extension->getLastDownloadURL()).'</bdi>').
+ '</div>';
+ }
+ return $return.DOKU_LF;
+ }
+
+ /**
+ * Create a link from the given URL
+ *
+ * Shortens the URL for display
+ *
+ * @param string $url
+ *
+ * @return string HTML link
+ */
+ function shortlink($url){
+ $link = parse_url($url);
+
+ $base = $link['host'];
+ if($link['port']) $base .= $base.':'.$link['port'];
+ $long = $link['path'];
+ if($link['query']) $long .= $link['query'];
+
+ $name = shorten($base, $long, 55);
+
+ return '<a href="'.hsc($url).'" class="urlextern">'.hsc($name).'</a>';
+ }
+
+ /**
+ * Plugin/template details
+ *
+ * @param helper_plugin_extension_extension $extension The extension
+ * @return string The HTML code
+ */
+ function make_info(helper_plugin_extension_extension $extension) {
+ $default = $this->getLang('unknown');
+ $return = '<dl class="details">';
+
+ $return .= '<dt>'.$this->getLang('status').'</dt>';
+ $return .= '<dd>'.$this->make_status($extension).'</dd>';
+
+ if ($extension->getDonationURL()) {
+ $return .= '<dt>'.$this->getLang('donate').'</dt>';
+ $return .= '<dd>';
+ $return .= '<a href="'.$extension->getDonationURL().'" class="donate">'.$this->getLang('donate_action').'</a>';
+ $return .= '</dd>';
+ }
+
+ if (!$extension->isBundled()) {
+ $return .= '<dt>'.$this->getLang('downloadurl').'</dt>';
+ $return .= '<dd><bdi>';
+ $return .= ($extension->getDownloadURL() ? $this->shortlink($extension->getDownloadURL()) : $default);
+ $return .= '</bdi></dd>';
+
+ $return .= '<dt>'.$this->getLang('repository').'</dt>';
+ $return .= '<dd><bdi>';
+ $return .= ($extension->getSourcerepoURL() ? $this->shortlink($extension->getSourcerepoURL()) : $default);
+ $return .= '</bdi></dd>';
+ }
+
+ if ($extension->isInstalled()) {
+ if ($extension->getInstalledVersion()) {
+ $return .= '<dt>'.$this->getLang('installed_version').'</dt>';
+ $return .= '<dd>';
+ $return .= hsc($extension->getInstalledVersion());
+ $return .= '</dd>';
+ } else {
+ $return .= '<dt>'.$this->getLang('install_date').'</dt>';
+ $return .= '<dd>';
+ $return .= ($extension->getUpdateDate() ? hsc($extension->getUpdateDate()) : $this->getLang('unknown'));
+ $return .= '</dd>';
+ }
+ }
+ if (!$extension->isInstalled() || $extension->updateAvailable()) {
+ $return .= '<dt>'.$this->getLang('available_version').'</dt>';
+ $return .= '<dd>';
+ $return .= ($extension->getLastUpdate() ? hsc($extension->getLastUpdate()) : $this->getLang('unknown'));
+ $return .= '</dd>';
+ }
+
+ if($extension->getInstallDate()) {
+ $return .= '<dt>'.$this->getLang('installed').'</dt>';
+ $return .= '<dd>';
+ $return .= hsc($extension->getInstallDate());
+ $return .= '</dd>';
+ }
+
+ $return .= '<dt>'.$this->getLang('provides').'</dt>';
+ $return .= '<dd><bdi>';
+ $return .= ($extension->getTypes() ? hsc(implode(', ', $extension->getTypes())) : $default);
+ $return .= '</bdi></dd>';
+
+ if(!$extension->isBundled() && $extension->getCompatibleVersions()) {
+ $return .= '<dt>'.$this->getLang('compatible').'</dt>';
+ $return .= '<dd>';
+ foreach ($extension->getCompatibleVersions() as $date => $version) {
+ $return .= '<bdi>'.$version['label'].' ('.$date.')</bdi>, ';
+ }
+ $return = rtrim($return, ', ');
+ $return .= '</dd>';
+ }
+ if($extension->getDependencies()) {
+ $return .= '<dt>'.$this->getLang('depends').'</dt>';
+ $return .= '<dd>';
+ $return .= $this->make_linklist($extension->getDependencies());
+ $return .= '</dd>';
+ }
+
+ if($extension->getSimilarExtensions()) {
+ $return .= '<dt>'.$this->getLang('similar').'</dt>';
+ $return .= '<dd>';
+ $return .= $this->make_linklist($extension->getSimilarExtensions());
+ $return .= '</dd>';
+ }
+
+ if($extension->getConflicts()) {
+ $return .= '<dt>'.$this->getLang('conflicts').'</dt>';
+ $return .= '<dd>';
+ $return .= $this->make_linklist($extension->getConflicts());
+ $return .= '</dd>';
+ }
+ $return .= '</dl>'.DOKU_LF;
+ return $return;
+ }
+
+ /**
+ * Generate a list of links for extensions
+ *
+ * @param array $ext The extensions
+ * @return string The HTML code
+ */
+ function make_linklist($ext) {
+ $return = '';
+ foreach ($ext as $link) {
+ $return .= '<bdi><a href="'.$this->gui->tabURL('search', array('q'=>'ext:'.$link)).'">'.hsc($link).'</a></bdi>, ';
+ }
+ return rtrim($return, ', ');
+ }
+
+ /**
+ * Display the action buttons if they are possible
+ *
+ * @param helper_plugin_extension_extension $extension The extension
+ * @return string The HTML code
+ */
+ function make_actions(helper_plugin_extension_extension $extension) {
+ $return = '';
+ $errors = '';
+
+ if ($extension->isInstalled()) {
+ if (($canmod = $extension->canModify()) === true) {
+ if (!$extension->isProtected()) {
+ $return .= $this->make_action('uninstall', $extension);
+ }
+ if ($extension->getDownloadURL()) {
+ if ($extension->updateAvailable()) {
+ $return .= $this->make_action('update', $extension);
+ } else {
+ $return .= $this->make_action('reinstall', $extension);
+ }
+ }
+ }else{
+ $errors .= '<p class="permerror">'.$this->getLang($canmod).'</p>';
+ }
+
+ if (!$extension->isProtected() && !$extension->isTemplate()) { // no enable/disable for templates
+ if ($extension->isEnabled()) {
+ $return .= $this->make_action('disable', $extension);
+ } else {
+ $return .= $this->make_action('enable', $extension);
+ }
+ }
+
+ if ($extension->isGitControlled()){
+ $errors .= '<p class="permerror">'.$this->getLang('git').'</p>';
+ }
+
+ }else{
+ if (($canmod = $extension->canModify()) === true) {
+ if ($extension->getDownloadURL()) {
+ $return .= $this->make_action('install', $extension);
+ }
+ }else{
+ $errors .= '<div class="permerror">'.$this->getLang($canmod).'</div>';
+ }
+ }
+
+ if (!$extension->isInstalled() && $extension->getDownloadURL()) {
+ $return .= ' <span class="version">'.$this->getLang('available_version').' ';
+ $return .= ($extension->getLastUpdate() ? hsc($extension->getLastUpdate()) : $this->getLang('unknown')).'</span>';
+ }
+
+ return $return.' '.$errors.DOKU_LF;
+ }
+
+ /**
+ * Display an action button for an extension
+ *
+ * @param string $action The action
+ * @param helper_plugin_extension_extension $extension The extension
+ * @return string The HTML code
+ */
+ function make_action($action, $extension) {
+ $title = '';
+
+ switch ($action) {
+ case 'install':
+ case 'reinstall':
+ $title = 'title="'.hsc($extension->getDownloadURL()).'"';
+ break;
+ }
+
+ $classes = 'button '.$action;
+ $name = 'fn['.$action.']['.hsc($extension->getID()).']';
+
+ return '<input class="'.$classes.'" name="'.$name.'" type="submit" value="'.$this->getLang('btn_'.$action).'" '.$title.' />';
+ }
+
+ /**
+ * Plugin/template status
+ *
+ * @param helper_plugin_extension_extension $extension The extension
+ * @return string The description of all relevant statusses
+ */
+ function make_status(helper_plugin_extension_extension $extension) {
+ $status = array();
+
+
+ if ($extension->isInstalled()) {
+ $status[] = $this->getLang('status_installed');
+ if ($extension->isProtected()) {
+ $status[] = $this->getLang('status_protected');
+ } else {
+ $status[] = $extension->isEnabled() ? $this->getLang('status_enabled') : $this->getLang('status_disabled');
+ }
+ } else {
+ $status[] = $this->getLang('status_not_installed');
+ }
+ if(!$extension->canModify()) $status[] = $this->getLang('status_unmodifiable');
+ if($extension->isBundled()) $status[] = $this->getLang('status_bundled');
+ $status[] = $extension->isTemplate() ? $this->getLang('status_template') : $this->getLang('status_plugin');
+ return join(', ', $status);
+ }
+
+}
diff --git a/lib/plugins/extension/helper/repository.php b/lib/plugins/extension/helper/repository.php
new file mode 100644
index 000000000..1f603a866
--- /dev/null
+++ b/lib/plugins/extension/helper/repository.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * DokuWiki Plugin extension (Helper Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Michael Hamann <michael@content-space.de>
+ */
+
+#define('EXTENSION_REPOSITORY_API', 'http://localhost/dokuwiki/lib/plugins/pluginrepo/api.php');
+
+if (!defined('EXTENSION_REPOSITORY_API_ENDPOINT'))
+ define('EXTENSION_REPOSITORY_API', 'http://www.dokuwiki.org/lib/plugins/pluginrepo/api.php');
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * Class helper_plugin_extension_repository provides access to the extension repository on dokuwiki.org
+ */
+class helper_plugin_extension_repository extends DokuWiki_Plugin {
+ private $loaded_extensions = array();
+ private $has_access = null;
+ /**
+ * Initialize the repository (cache), fetches data for all installed plugins
+ */
+ public function init() {
+ /* @var Doku_Plugin_Controller $plugin_controller */
+ global $plugin_controller;
+ if ($this->hasAccess()) {
+ $list = $plugin_controller->getList('', true);
+ $request_data = array('fmt' => 'php');
+ $request_needed = false;
+ foreach ($list as $name) {
+ $cache = new cache('##extension_manager##'.$name, 'repo');
+ $result = null;
+ if (!isset($this->loaded_extensions[$name]) && $this->hasAccess() && !$cache->useCache(array('age' => 3600 * 24))) {
+ $this->loaded_extensions[$name] = true;
+ $request_data['ext'][] = $name;
+ $request_needed = true;
+ }
+ }
+
+ if ($request_needed) {
+ $httpclient = new DokuHTTPClient();
+ $data = $httpclient->post(EXTENSION_REPOSITORY_API, $request_data);
+ if ($data !== false) {
+ $extensions = unserialize($data);
+ foreach ($extensions as $extension) {
+ $cache = new cache('##extension_manager##'.$extension['plugin'], 'repo');
+ $cache->storeCache(serialize($extension));
+ }
+ } else {
+ $this->has_access = false;
+ }
+ }
+ }
+ }
+
+ /**
+ * If repository access is available
+ *
+ * @return bool If repository access is available
+ */
+ public function hasAccess() {
+ if ($this->has_access === null) {
+ $cache = new cache('##extension_manager###hasAccess', 'repo');
+ $result = null;
+ if (!$cache->useCache(array('age' => 3600 * 24, 'purge'=>1))) {
+ $httpclient = new DokuHTTPClient();
+ $httpclient->timeout = 5;
+ $data = $httpclient->get(EXTENSION_REPOSITORY_API.'?cmd=ping');
+ if ($data !== false) {
+ $this->has_access = true;
+ $cache->storeCache(1);
+ } else {
+ $this->has_access = false;
+ $cache->storeCache(0);
+ }
+ } else {
+ $this->has_access = ($cache->retrieveCache(false) == 1);
+ }
+ }
+ return $this->has_access;
+ }
+
+ /**
+ * Get the remote data of an individual plugin or template
+ *
+ * @param string $name The plugin name to get the data for, template names need to be prefix by 'template:'
+ * @return array The data or null if nothing was found (possibly no repository access)
+ */
+ public function getData($name) {
+ $cache = new cache('##extension_manager##'.$name, 'repo');
+ $result = null;
+ if (!isset($this->loaded_extensions[$name]) && $this->hasAccess() && !$cache->useCache(array('age' => 3600 * 24))) {
+ $this->loaded_extensions[$name] = true;
+ $httpclient = new DokuHTTPClient();
+ $data = $httpclient->get(EXTENSION_REPOSITORY_API.'?fmt=php&ext[]='.urlencode($name));
+ if ($data !== false) {
+ $result = unserialize($data);
+ $cache->storeCache(serialize($result[0]));
+ return $result[0];
+ } else {
+ $this->has_access = false;
+ }
+ }
+ if (file_exists($cache->cache)) {
+ return unserialize($cache->retrieveCache(false));
+ }
+ return array();
+ }
+
+ /**
+ * Search for plugins or templates using the given query string
+ *
+ * @param string $q the query string
+ * @return array a list of matching extensions
+ */
+ public function search($q){
+ $query = $this->parse_query($q);
+ $query['fmt'] = 'php';
+
+ $httpclient = new DokuHTTPClient();
+ $data = $httpclient->post(EXTENSION_REPOSITORY_API, $query);
+ if ($data === false) return array();
+ $result = unserialize($data);
+
+ $ids = array();
+
+ // store cache info for each extension
+ foreach($result as $ext){
+ $name = $ext['plugin'];
+ $cache = new cache('##extension_manager##'.$name, 'repo');
+ $cache->storeCache(serialize($ext));
+ $ids[] = $name;
+ }
+
+ return $ids;
+ }
+
+ /**
+ * Parses special queries from the query string
+ *
+ * @param string $q
+ * @return array
+ */
+ protected function parse_query($q){
+ $parameters = array(
+ 'tag' => array(),
+ 'mail' => array(),
+ 'type' => array(),
+ 'ext' => array()
+ );
+
+ // extract tags
+ if(preg_match_all('/(^|\s)(tag:([\S]+))/', $q, $matches, PREG_SET_ORDER)){
+ foreach($matches as $m){
+ $q = str_replace($m[2], '', $q);
+ $parameters['tag'][] = $m[3];
+ }
+ }
+ // extract author ids
+ if(preg_match_all('/(^|\s)(authorid:([\S]+))/', $q, $matches, PREG_SET_ORDER)){
+ foreach($matches as $m){
+ $q = str_replace($m[2], '', $q);
+ $parameters['mail'][] = $m[3];
+ }
+ }
+ // extract extensions
+ if(preg_match_all('/(^|\s)(ext:([\S]+))/', $q, $matches, PREG_SET_ORDER)){
+ foreach($matches as $m){
+ $q = str_replace($m[2], '', $q);
+ $parameters['ext'][] = $m[3];
+ }
+ }
+ // extract types
+ if(preg_match_all('/(^|\s)(type:([\S]+))/', $q, $matches, PREG_SET_ORDER)){
+ foreach($matches as $m){
+ $q = str_replace($m[2], '', $q);
+ $parameters['type'][] = $m[3];
+ }
+ }
+
+ // FIXME make integer from type value
+
+ $parameters['q'] = trim($q);
+ return $parameters;
+ }
+}
+
+// vim:ts=4:sw=4:et:
diff --git a/lib/plugins/extension/images/disabled.png b/lib/plugins/extension/images/disabled.png
new file mode 100644
index 000000000..7a0dbb3b5
--- /dev/null
+++ b/lib/plugins/extension/images/disabled.png
Binary files differ
diff --git a/lib/plugins/extension/images/donate.png b/lib/plugins/extension/images/donate.png
new file mode 100644
index 000000000..9e234da1c
--- /dev/null
+++ b/lib/plugins/extension/images/donate.png
Binary files differ
diff --git a/lib/plugins/extension/images/down.png b/lib/plugins/extension/images/down.png
new file mode 100644
index 000000000..df7beda4e
--- /dev/null
+++ b/lib/plugins/extension/images/down.png
Binary files differ
diff --git a/lib/plugins/extension/images/enabled.png b/lib/plugins/extension/images/enabled.png
new file mode 100644
index 000000000..7c051cda1
--- /dev/null
+++ b/lib/plugins/extension/images/enabled.png
Binary files differ
diff --git a/lib/plugins/extension/images/icons.xcf b/lib/plugins/extension/images/icons.xcf
new file mode 100644
index 000000000..ab69b3099
--- /dev/null
+++ b/lib/plugins/extension/images/icons.xcf
Binary files differ
diff --git a/lib/plugins/extension/images/license.txt b/lib/plugins/extension/images/license.txt
new file mode 100644
index 000000000..254b9cdf6
--- /dev/null
+++ b/lib/plugins/extension/images/license.txt
@@ -0,0 +1,4 @@
+enabled.png - CC-BY-ND, (c) Emey87 http://www.iconfinder.com/icondetails/65590/48/lightbulb_icon
+disabled.png - CC-BY-ND, (c) Emey87 http://www.iconfinder.com/icondetails/65589/48/idea_lightbulb_off_icon
+plugin.png - public domain, (c) nicubunu, http://openclipart.org/detail/15093/blue-jigsaw-piece-07-by-nicubunu
+template.png - public domain, (c) mathec, http://openclipart.org/detail/166596/palette-by-mathec
diff --git a/lib/plugins/extension/images/overlay.png b/lib/plugins/extension/images/overlay.png
new file mode 100644
index 000000000..8f92c2fe7
--- /dev/null
+++ b/lib/plugins/extension/images/overlay.png
Binary files differ
diff --git a/lib/plugins/extension/images/plugin.png b/lib/plugins/extension/images/plugin.png
new file mode 100644
index 000000000..e4a2d3be6
--- /dev/null
+++ b/lib/plugins/extension/images/plugin.png
Binary files differ
diff --git a/lib/plugins/extension/images/tag.png b/lib/plugins/extension/images/tag.png
new file mode 100644
index 000000000..155dbb3dd
--- /dev/null
+++ b/lib/plugins/extension/images/tag.png
Binary files differ
diff --git a/lib/plugins/extension/images/template.png b/lib/plugins/extension/images/template.png
new file mode 100644
index 000000000..ee74bc1d5
--- /dev/null
+++ b/lib/plugins/extension/images/template.png
Binary files differ
diff --git a/lib/plugins/extension/images/up.png b/lib/plugins/extension/images/up.png
new file mode 100644
index 000000000..ec9337715
--- /dev/null
+++ b/lib/plugins/extension/images/up.png
Binary files differ
diff --git a/lib/plugins/extension/images/warning.png b/lib/plugins/extension/images/warning.png
new file mode 100644
index 000000000..c5e482f84
--- /dev/null
+++ b/lib/plugins/extension/images/warning.png
Binary files differ
diff --git a/lib/plugins/extension/lang/en/intro_install.txt b/lib/plugins/extension/lang/en/intro_install.txt
new file mode 100644
index 000000000..a5d5ab008
--- /dev/null
+++ b/lib/plugins/extension/lang/en/intro_install.txt
@@ -0,0 +1 @@
+Here you can manually install plugins and templates by either uploading them or providing a direct download URL.
diff --git a/lib/plugins/extension/lang/en/intro_plugins.txt b/lib/plugins/extension/lang/en/intro_plugins.txt
new file mode 100644
index 000000000..4e42efee1
--- /dev/null
+++ b/lib/plugins/extension/lang/en/intro_plugins.txt
@@ -0,0 +1 @@
+These are the plugins currently installed in your DokuWiki. You can enable or disable or even completely uninstall them here. Plugin updates are shown here as well, be sure to read the plugin's documentation before updating. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/en/intro_search.txt b/lib/plugins/extension/lang/en/intro_search.txt
new file mode 100644
index 000000000..244cd6812
--- /dev/null
+++ b/lib/plugins/extension/lang/en/intro_search.txt
@@ -0,0 +1 @@
+This tab gives you access to all available 3rd party plugins and templates for DokuWiki. Please be aware that installing 3rd party code may pose a **security risk**, you may want to read about [[doku>security#plugin_security|plugin security]] first. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/en/intro_templates.txt b/lib/plugins/extension/lang/en/intro_templates.txt
new file mode 100644
index 000000000..012a74995
--- /dev/null
+++ b/lib/plugins/extension/lang/en/intro_templates.txt
@@ -0,0 +1 @@
+These are the templates currently installed in your DokuWiki. You can select the template to be used in the [[?do=admin&page=config|Configuration Manager]].
diff --git a/lib/plugins/extension/lang/en/lang.php b/lib/plugins/extension/lang/en/lang.php
new file mode 100644
index 000000000..5224f694a
--- /dev/null
+++ b/lib/plugins/extension/lang/en/lang.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * English language file for extension plugin
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+$lang['menu'] = 'Extension Manager';
+
+$lang['tab_plugins'] = 'Installed Plugins';
+$lang['tab_templates'] = 'Installed Templates';
+$lang['tab_search'] = 'Search and Install';
+$lang['tab_install'] = 'Manual Install';
+
+$lang['notimplemented'] = 'This feature hasn\'t been implemented yet';
+$lang['notinstalled'] = 'This extension is not installed';
+$lang['alreadyenabled'] = 'This extension has already been enabled';
+$lang['alreadydisabled'] = 'This extension has already been disabled';
+$lang['pluginlistsaveerror'] = 'There was an error saving the plugin list';
+$lang['unknownauthor'] = 'Unknown author';
+$lang['unknownversion'] = 'Unknown version';
+
+$lang['btn_info'] = 'Show more info';
+$lang['btn_update'] = 'Update';
+$lang['btn_uninstall'] = 'Uninstall';
+$lang['btn_enable'] = 'Enable';
+$lang['btn_disable'] = 'Disable';
+$lang['btn_install'] = 'Install';
+$lang['btn_reinstall'] = 'Re-install';
+
+$lang['js']['reallydel'] = 'Really uninstall this extension?';
+
+$lang['search_for'] = 'Search Extension:';
+$lang['search'] = 'Search';
+
+$lang['extensionby'] = '<strong>%s</strong> by %s';
+$lang['screenshot'] = 'Screenshot of %s';
+$lang['popularity'] = 'Popularity: %s%%';
+$lang['homepage_link'] = 'Docs';
+$lang['bugs_features'] = 'Bugs';
+$lang['tags'] = 'Tags:';
+$lang['author_hint'] = 'Search extensions by this author';
+$lang['installed'] = 'Installed:';
+$lang['downloadurl'] = 'Download URL:';
+$lang['repository'] = 'Repository:';
+$lang['unknown'] = '<em>unknown</em>';
+$lang['installed_version'] = 'Installed version:';
+$lang['install_date'] = 'Your last update:';
+$lang['available_version'] = 'Available version:';
+$lang['compatible'] = 'Compatible with:';
+$lang['depends'] = 'Depends on:';
+$lang['similar'] = 'Similar to:';
+$lang['conflicts'] = 'Conflicts with:';
+$lang['donate'] = 'Like this?';
+$lang['donate_action'] = 'Buy the author a coffee!';
+$lang['repo_retry'] = 'Retry';
+$lang['provides'] = 'Provides:';
+$lang['status'] = 'Status:';
+$lang['status_installed'] = 'installed';
+$lang['status_not_installed'] = 'not installed';
+$lang['status_protected'] = 'protected';
+$lang['status_enabled'] = 'enabled';
+$lang['status_disabled'] = 'disabled';
+$lang['status_unmodifiable'] = 'unmodifiable';
+$lang['status_plugin'] = 'plugin';
+$lang['status_template'] = 'template';
+$lang['status_bundled'] = 'bundled';
+
+$lang['msg_enabled'] = 'Plugin %s enabled';
+$lang['msg_disabled'] = 'Plugin %s disabled';
+$lang['msg_delete_success'] = 'Extension uninstalled';
+$lang['msg_template_install_success'] = 'Template %s installed successfully';
+$lang['msg_template_update_success'] = 'Template %s updated successfully';
+$lang['msg_plugin_install_success'] = 'Plugin %s installed successfully';
+$lang['msg_plugin_update_success'] = 'Plugin %s updated successfully';
+$lang['msg_upload_failed'] = 'Uploading the file failed';
+
+$lang['missing_dependency'] = '<strong>Missing or disabled dependency:</strong> %s';
+$lang['security_issue'] = '<strong>Security Issue:</strong> %s';
+$lang['security_warning'] = '<strong>Security Warning:</strong> %s';
+$lang['update_available'] = '<strong>Update:</strong> New version %s is available.';
+$lang['wrong_folder'] = '<strong>Plugin installed incorrectly:</strong> Rename plugin directory "%s" to "%s".';
+$lang['url_change'] = '<strong>URL changed:</strong> Download URL has changed since last download. Check if the new URL is valid before updating the extension.<br />New: %s<br />Old: %s';
+
+$lang['error_badurl'] = 'URLs should start with http or https';
+$lang['error_dircreate'] = 'Unable to create temporary folder to receive download';
+$lang['error_download'] = 'Unable to download the file: %s';
+$lang['error_decompress'] = 'Unable to decompress the downloaded file. This maybe as a result of a bad download, in which case you should try again; or the compression format may be unknown, in which case you will need to download and install manually.';
+$lang['error_findfolder'] = 'Unable to identify extension directory, you need to download and install manually';
+$lang['error_copy'] = 'There was a file copy error while attempting to install files for directory <em>%s</em>: the disk could be full or file access permissions may be incorrect. This may have resulted in a partially installed plugin and leave your wiki installation unstable';
+
+$lang['noperms'] = 'Extension directory is not writable';
+$lang['notplperms'] = 'Template directory is not writable';
+$lang['nopluginperms'] = 'Plugin directory is not writable';
+$lang['git'] = 'This extension was installed via git, you may not want to update it here.';
+
+$lang['install_url'] = 'Install from URL:';
+$lang['install_upload'] = 'Upload Extension:'; \ No newline at end of file
diff --git a/lib/plugins/extension/plugin.info.txt b/lib/plugins/extension/plugin.info.txt
new file mode 100644
index 000000000..ef16d78a1
--- /dev/null
+++ b/lib/plugins/extension/plugin.info.txt
@@ -0,0 +1,7 @@
+base extension
+author Michael Hamann
+email michael@content-space.de
+date 2013-08-01
+name Extension Manager
+desc Allows managing and installing plugins and templates
+url https://www.dokuwiki.org/plugin:extension
diff --git a/lib/plugins/extension/script.js b/lib/plugins/extension/script.js
new file mode 100644
index 000000000..bd3c97758
--- /dev/null
+++ b/lib/plugins/extension/script.js
@@ -0,0 +1,71 @@
+jQuery(function(){
+
+ /**
+ * Confirm uninstalling
+ */
+ jQuery('#extension__manager input.uninstall').click(function(e){
+ if(!window.confirm(LANG.plugins.extension.reallydel)){
+ e.preventDefault();
+ return false;
+ }
+ return true;
+ });
+
+ /**
+ * very simple lightbox
+ * @link http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/super-simple-lightbox-with-css-and-jquery/
+ */
+ jQuery('#extension__manager a.extension_screenshot').click(function(e) {
+ e.preventDefault();
+
+ //Get clicked link href
+ var image_href = jQuery(this).attr("href");
+
+ // create lightbox if needed
+ var $lightbox = jQuery('#plugin__extensionlightbox');
+ if(!$lightbox.length){
+ $lightbox = jQuery('<div id="plugin__extensionlightbox"><p>Click to close</p><div></div></div>')
+ .appendTo(jQuery('body'))
+ .hide()
+ .click(function(){
+ $lightbox.hide();
+ });
+ }
+
+ // fill and show it
+ $lightbox
+ .show()
+ .find('div').html('<img src="' + image_href + '" />');
+
+
+ return false;
+ });
+
+ /**
+ * AJAX detail infos
+ */
+ jQuery('#extension__manager a.info').click(function(e){
+ e.preventDefault();
+
+ var $link = jQuery(this);
+ var $details = $link.parent().find('dl.details');
+ if($details.length){
+ $link.toggleClass('close');
+ $details.toggle();
+ return;
+ }
+
+ $link.addClass('close');
+ jQuery.get(
+ DOKU_BASE + 'lib/exe/ajax.php',
+ {
+ call: 'plugin_extension',
+ ext: $link.data('extid')
+ },
+ function(data){
+ $link.parent().append(data);
+ }
+ );
+ });
+
+}); \ No newline at end of file
diff --git a/lib/plugins/extension/style.less b/lib/plugins/extension/style.less
new file mode 100644
index 000000000..d20689099
--- /dev/null
+++ b/lib/plugins/extension/style.less
@@ -0,0 +1,363 @@
+/*
+ * Extension plugin styles
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Piyush Mishra <me@piyushmishra.com>
+ * @author Håkan Sandell <sandell.hakan@gmail.com>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/**
+ * very simple lightbox
+ * @link http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/super-simple-lightbox-with-css-and-jquery/
+ */
+#plugin__extensionlightbox {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: url(images/overlay.png) repeat;
+ text-align: center;
+ cursor: pointer;
+ z-index: 9999;
+
+ p {
+ text-align: right;
+ color: #fff;
+ margin-right: 20px;
+ font-size: 12px;
+ }
+
+ img {
+ box-shadow: 0 0 25px #111;
+ -webkit-box-shadow: 0 0 25px #111;
+ -moz-box-shadow: 0 0 25px #111;
+ max-width: 90%;
+ max-height: 90%;
+ }
+}
+
+/**
+ * general styles
+ */
+#extension__manager {
+ // tab layout - most of it is in the main template
+ ul.tabs li.active a {
+ background-color: @ini_background_alt;
+ border-bottom: solid 1px @ini_background_alt;
+ z-index: 2;
+ }
+ .panelHeader {
+ background-color: @ini_background_alt;
+ margin: 0 0 10px 0;
+ padding: 10px 10px 8px;
+ overflow: hidden;
+ }
+
+ // message spacing
+ div.msg {
+ margin: 0.4em 0 0 0;
+ }
+}
+
+/*
+ * extensions table
+ */
+#extension__list {
+ ul.extensionList {
+ margin-left: 0;
+ margin-right: 0;
+ padding: 0;
+ list-style: none;
+ }
+
+ ul.extensionList li {
+ margin: 0 0 .5em;
+ padding: 0 0 .5em;
+ color: @ini_text;
+ border-bottom: 1px solid @ini_border;
+ overflow: hidden;
+ }
+
+ input.button {
+ margin: 0 .3em .3em 0;
+ }
+}
+
+/**
+ * extension table left column
+ */
+#extension__list .legend {
+ position: relative;
+ width: 75%;
+ float: left;
+
+ // padding
+ > div {
+ padding: 0 .5em 0 132px;
+ border-right: 1px solid @ini_background_alt;
+ overflow: hidden;
+ }
+
+ // screenshot
+ div.screenshot {
+ margin-top: 4px;
+ margin-left: -132px;
+ max-width: 120px;
+ float: left;
+ position: relative;
+
+ img {
+ width: 120px;
+ height: 70px;
+ border-radius: 5px;
+ box-shadow: 2px 2px 2px #666;
+ }
+
+ span {
+ min-height: 24px;
+ min-width: 24px;
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+ }
+
+ // plugin headline
+ h2 {
+ width: 100%;
+ float: right;
+ margin: 0.2em 0 0.5em;
+ font-size: 100%;
+ font-weight: normal;
+ border: none;
+
+ strong {
+ font-size: 120%;
+ font-weight: bold;
+ vertical-align: baseline;
+ }
+ }
+
+ // description
+ p {
+ margin: 0 0 0.6em 0;
+ }
+
+ // popularity bar
+ div.popularity {
+ background-color: @ini_background;
+ border: 1px solid silver;
+ height: .4em;
+ margin: 0 auto;
+ padding: 1px;
+ width: 5.5em;
+ position: absolute;
+ right: .5em;
+ top: 0.2em;
+
+ div {
+ background-color: @ini_border;
+ height: 100%;
+ }
+ }
+
+ // Docs, Bugs, Tags
+ div.linkbar {
+ font-size: 85%;
+
+ span.tags {
+ padding-left: 18px;
+ background: transparent url(images/tag.png) no-repeat 0 0;
+ }
+ }
+
+ // more info button
+ a.info {
+ background: transparent url(images/down.png) no-repeat 0 0;
+ border-width: 0;
+ height: 13px;
+ width: 13px;
+ text-indent: -9999px;
+ float: right;
+ margin: .5em 0 0;
+ overflow: hidden;
+
+ &.close {
+ background: transparent url(images/up.png) no-repeat 0 0;
+ }
+ }
+
+ // detailed info box
+ dl.details {
+ margin: 0.4em 0 0 0;
+ font-size: 85%;
+ border-top: 1px solid @ini_background_alt;
+ clear: both;
+
+ dt {
+ clear: left;
+ float: left;
+ width: 25%;
+ margin: 0;
+ text-align: right;
+ font-weight: normal;
+ padding: 0.2em 5px 0 0;
+ font-weight: bold;
+ }
+
+ dd {
+ margin-left: 25%;
+ padding: 0.2em 0 0 5px;
+
+ a.donate {
+ padding-left: 18px;
+ background: transparent url(images/donate.png) left center no-repeat;
+ }
+ }
+ }
+}
+
+[dir=rtl] #extension__list .legend {
+ float: right;
+
+ > div {
+ padding: 0 132px 0 .5em;
+ border-left: 1px solid @ini_background_alt;
+ border-right-width: 0;
+ }
+
+ div.screenshot {
+ margin-left: 0;
+ margin-right: -132px;
+ float: right;
+
+ span {
+ left: auto;
+ right: 0;
+ }
+ }
+
+ h2 {
+ float: left;
+ }
+
+ div.popularity {
+ right: auto;
+ left: .5em;
+ }
+
+ div.linkbar span.tags,
+ dl.details dd a.donate {
+ padding-left: 0;
+ padding-right: 18px;
+ background-position: top right;
+ }
+
+ a.info {
+ float: left;
+ }
+
+ dl.details {
+ dt {
+ clear: right;
+ float: right;
+ text-align: left;
+ padding-left: 5px;
+ padding-right: 0;
+ }
+
+ dd {
+ margin-left: 0;
+ margin-right: 25%;
+ padding-left: 0;
+ padding-right: 5px;
+ }
+ }
+}
+
+/*
+ * Enabled/Disabled overrides
+ */
+#extension__list {
+ .enabled div.screenshot span {
+ background: transparent url(images/enabled.png) no-repeat 2px 2px;
+ }
+
+ .disabled div.screenshot span {
+ background: transparent url(images/disabled.png) no-repeat 2px 2px;
+ }
+
+ .disabled .legend {
+ opacity: 0.7;
+ }
+}
+
+/**
+ * extension table right column
+ */
+#extension__manager .actions {
+ padding: 0;
+ font-size: 95%;
+ width: 25%;
+ float: right;
+ text-align: right;
+
+ .version {
+ display: block;
+ }
+
+ p {
+ margin: 0.2em 0;
+ text-align: center;
+ }
+
+ p.permerror {
+ margin-left: 0.4em;
+ text-align: left;
+ padding-left: 19px;
+ background: transparent url(images/warning.png) center left no-repeat;
+ line-height: 18px;
+ font-size: 12px;
+ }
+}
+
+[dir=rtl] #extension__manager .actions {
+ float: left;
+ text-align: left;
+
+ p.permerror {
+ margin-left: 0;
+ margin-right: 0.4em;
+ text-align: right;
+ padding-left: 0;
+ padding-right: 19px;
+ background-position: center right;
+ }
+}
+
+/**
+ * Search form
+ */
+#extension__manager form.search {
+ display: block;
+ margin-bottom: 2em;
+
+ span {
+ font-weight: bold;
+ }
+
+ input.edit {
+ width: 25em;
+ }
+}
+
+/**
+ * Install form
+ */
+#extension__manager form.install {
+ text-align: center;
+ display: block;
+ width: 60%;
+}
diff --git a/lib/plugins/plugin/admin.php b/lib/plugins/plugin/admin.php
deleted file mode 100644
index 3f019d5e2..000000000
--- a/lib/plugins/plugin/admin.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/**
- * Plugin management functions
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Christopher Smith <chris@jalakai.co.uk>
- */
-// must be run within Dokuwiki
-if(!defined('DOKU_INC')) die();
-
-// todo
-// - maintain a history of file modified
-// - allow a plugin to contain extras to be copied to the current template (extra/tpl/)
-// - to images (lib/images/) [ not needed, should go in lib/plugin/images/ ]
-
-require_once(DOKU_PLUGIN."/plugin/classes/ap_manage.class.php");
-
-//--------------------------[ GLOBALS ]------------------------------------------------
-// note: probably should be dokuwiki wide globals, where they can be accessed by pluginutils.php
-// global $plugin_types;
-// $plugin_types = array('syntax', 'admin');
-
-// plugins that are an integral part of dokuwiki, they shouldn't be disabled or deleted
-global $plugin_protected;
-$plugin_protected = array('acl','plugin','config','info','usermanager','revert');
-
-/**
- * All DokuWiki plugins to extend the admin function
- * need to inherit from this class
- */
-class admin_plugin_plugin extends DokuWiki_Admin_Plugin {
-
- var $disabled = 0;
- var $plugin = '';
- var $cmd = '';
-
- /**
- * @var ap_manage
- */
- var $handler = null;
-
- var $functions = array('delete','update',/*'settings',*/'info'); // require a plugin name
- var $commands = array('manage','download','enable'); // don't require a plugin name
- var $plugin_list = array();
-
- var $msg = '';
- var $error = '';
-
- function admin_plugin_plugin() {
- $this->disabled = plugin_isdisabled('plugin');
- }
-
- /**
- * return sort order for position in admin menu
- */
- function getMenuSort() {
- return 20;
- }
-
- /**
- * handle user request
- */
- function handle() {
- global $INPUT;
- // enable direct access to language strings
- $this->setupLocale();
-
- $fn = $INPUT->param('fn');
- if (is_array($fn)) {
- $this->cmd = key($fn);
- $this->plugin = is_array($fn[$this->cmd]) ? key($fn[$this->cmd]) : null;
- } else {
- $this->cmd = $fn;
- $this->plugin = null;
- }
- $this->_get_plugin_list();
-
- // verify $_REQUEST vars
- if (in_array($this->cmd, $this->commands)) {
- $this->plugin = '';
- } else if (!in_array($this->cmd, $this->functions) || !in_array($this->plugin, $this->plugin_list)) {
- $this->cmd = 'manage';
- $this->plugin = '';
- }
-
- if(($this->cmd != 'manage' || $this->plugin != '') && !checkSecurityToken()){
- $this->cmd = 'manage';
- $this->plugin = '';
- }
-
- // create object to handle the command
- $class = "ap_".$this->cmd;
- @require_once(DOKU_PLUGIN."/plugin/classes/$class.class.php");
- if (!class_exists($class)){
- $class = 'ap_manage';
- }
-
- $this->handler = new $class($this, $this->plugin);
- $this->msg = $this->handler->process();
-
- }
-
- /**
- * output appropriate html
- */
- function html() {
- // enable direct access to language strings
- $this->setupLocale();
- $this->_get_plugin_list();
-
- if ($this->handler === null) $this->handler = new ap_manage($this, $this->plugin);
-
- ptln('<div id="plugin__manager">');
- $this->handler->html();
- ptln('</div><!-- #plugin_manager -->');
- }
-
- /**
- * Returns a list of all plugins, including the disabled ones
- */
- function _get_plugin_list() {
- if (empty($this->plugin_list)) {
- $list = plugin_list('',true); // all plugins, including disabled ones
- sort($list);
- trigger_event('PLUGIN_PLUGINMANAGER_PLUGINLIST',$list);
- $this->plugin_list = $list;
- }
- return $this->plugin_list;
- }
-
-}
-
-
-
-
-
-
diff --git a/lib/plugins/plugin/classes/ap_delete.class.php b/lib/plugins/plugin/classes/ap_delete.class.php
deleted file mode 100644
index 581a6295f..000000000
--- a/lib/plugins/plugin/classes/ap_delete.class.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-class ap_delete extends ap_manage {
-
- function process() {
-
- if (!$this->dir_delete(DOKU_PLUGIN.plugin_directory($this->manager->plugin))) {
- $this->manager->error = sprintf($this->lang['error_delete'],$this->manager->plugin);
- } else {
- msg(sprintf($this->lang['deleted'],$this->plugin));
- $this->refresh();
- }
- }
-
- function html() {
- parent::html();
-
- ptln('<div class="pm_info">');
- ptln('<h2>'.$this->lang['deleting'].'</h2>');
-
- if ($this->manager->error) {
- ptln('<div class="error">'.str_replace("\n","<br />",$this->manager->error).'</div>');
- } else {
- ptln('<p>'.sprintf($this->lang['deleted'],$this->plugin).'</p>');
- }
- ptln('</div>');
- }
-}
-
diff --git a/lib/plugins/plugin/classes/ap_download.class.php b/lib/plugins/plugin/classes/ap_download.class.php
deleted file mode 100644
index b1be11506..000000000
--- a/lib/plugins/plugin/classes/ap_download.class.php
+++ /dev/null
@@ -1,288 +0,0 @@
-<?php
-class ap_download extends ap_manage {
-
- var $overwrite = true;
-
- /**
- * Initiate the plugin download
- */
- function process() {
- global $INPUT;
-
- $plugin_url = $INPUT->str('url');
- $this->download($plugin_url, $this->overwrite);
- return '';
- }
-
- /**
- * Print results of the download
- */
- function html() {
- parent::html();
-
- ptln('<div class="pm_info">');
- ptln('<h2>'.$this->lang['downloading'].'</h2>');
-
- if ($this->manager->error) {
- ptln('<div class="error">'.str_replace("\n","<br />",hsc($this->manager->error)).'</div>');
- } else if (count($this->downloaded) == 1) {
- ptln('<p>'.sprintf($this->lang['downloaded'],$this->downloaded[0]).'</p>');
- } else if (count($this->downloaded)) { // more than one plugin in the download
- ptln('<p>'.$this->lang['downloads'].'</p>');
- ptln('<ul>');
- foreach ($this->downloaded as $plugin) {
- ptln('<li><div class="li">'.$plugin.'</div></li>',2);
- }
- ptln('</ul>');
- } else { // none found in download
- ptln('<p>'.$this->lang['download_none'].'</p>');
- }
- ptln('</div>');
- }
-
- /**
- * Process the downloaded file
- */
- function download($url, $overwrite=false) {
- // check the url
- $matches = array();
- if (!preg_match("/[^\/]*$/", $url, $matches) || !$matches[0]) {
- $this->manager->error = $this->lang['error_badurl']."\n";
- return false;
- }
-
- $file = $matches[0];
-
- if (!($tmp = io_mktmpdir())) {
- $this->manager->error = $this->lang['error_dircreate']."\n";
- return false;
- }
-
- if (!$file = io_download($url, "$tmp/", true, $file, 0)) {
- $this->manager->error = sprintf($this->lang['error_download'],$url)."\n";
- }
-
- if (!$this->manager->error && !$this->decompress("$tmp/$file", $tmp)) {
- $this->manager->error = sprintf($this->lang['error_decompress'],$file)."\n";
- }
-
- // search $tmp for the folder(s) that has been created
- // move the folder(s) to lib/plugins/
- if (!$this->manager->error) {
- $result = array('old'=>array(), 'new'=>array());
- if($this->find_folders($result,$tmp)){
- // choose correct result array
- if(count($result['new'])){
- $install = $result['new'];
- }else{
- $install = $result['old'];
- }
-
- // now install all found items
- foreach($install as $item){
- // where to install?
- if($item['type'] == 'template'){
- $target = DOKU_INC.'lib/tpl/'.$item['base'];
- }else{
- $target = DOKU_INC.'lib/plugins/'.$item['base'];
- }
-
- // check to make sure we aren't overwriting anything
- if (!$overwrite && @file_exists($target)) {
- // remember our settings, ask the user to confirm overwrite, FIXME
- continue;
- }
-
- $instruction = @file_exists($target) ? 'update' : 'install';
-
- // copy action
- if ($this->dircopy($item['tmp'], $target)) {
- $this->downloaded[] = $item['base'];
- $this->plugin_writelog($target, $instruction, array($url));
- } else {
- $this->manager->error .= sprintf($this->lang['error_copy']."\n", $item['base']);
- }
- }
-
- } else {
- $this->manager->error = $this->lang['error']."\n";
- }
- }
-
- // cleanup
- if ($tmp) $this->dir_delete($tmp);
-
- if (!$this->manager->error) {
- msg(sprintf($this->lang['packageinstalled'], count($this->downloaded), join(',',$this->downloaded)),1);
- $this->refresh();
- return true;
- }
-
- return false;
- }
-
- /**
- * Find out what was in the extracted directory
- *
- * Correct folders are searched recursively using the "*.info.txt" configs
- * as indicator for a root folder. When such a file is found, it's base
- * setting is used (when set). All folders found by this method are stored
- * in the 'new' key of the $result array.
- *
- * For backwards compatibility all found top level folders are stored as
- * in the 'old' key of the $result array.
- *
- * When no items are found in 'new' the copy mechanism should fall back
- * the 'old' list.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param arrayref $result - results are stored here
- * @param string $base - the temp directory where the package was unpacked to
- * @param string $dir - a subdirectory. do not set. used by recursion
- * @return bool - false on error
- */
- function find_folders(&$result,$base,$dir=''){
- $dh = @opendir("$base/$dir");
- if(!$dh) return false;
- while (false !== ($f = readdir($dh))) {
- if ($f == '.' || $f == '..' || $f == 'tmp') continue;
-
- if(!is_dir("$base/$dir/$f")){
- // it's a file -> check for config
- if($f == 'plugin.info.txt'){
- $info = array();
- $info['type'] = 'plugin';
- $info['tmp'] = "$base/$dir";
- $conf = confToHash("$base/$dir/$f");
- $info['base'] = utf8_basename($conf['base']);
- if(!$info['base']) $info['base'] = utf8_basename("$base/$dir");
- $result['new'][] = $info;
- }elseif($f == 'template.info.txt'){
- $info = array();
- $info['type'] = 'template';
- $info['tmp'] = "$base/$dir";
- $conf = confToHash("$base/$dir/$f");
- $info['base'] = utf8_basename($conf['base']);
- if(!$info['base']) $info['base'] = utf8_basename("$base/$dir");
- $result['new'][] = $info;
- }
- }else{
- // it's a directory -> add to dir list for old method, then recurse
- if(!$dir){
- $info = array();
- $info['type'] = 'plugin';
- $info['tmp'] = "$base/$dir/$f";
- $info['base'] = $f;
- $result['old'][] = $info;
- }
- $this->find_folders($result,$base,"$dir/$f");
- }
- }
- closedir($dh);
- return true;
- }
-
-
- /**
- * Decompress a given file to the given target directory
- *
- * Determines the compression type from the file extension
- */
- function decompress($file, $target) {
- global $conf;
-
- // decompression library doesn't like target folders ending in "/"
- if (substr($target, -1) == "/") $target = substr($target, 0, -1);
-
- $ext = $this->guess_archive($file);
- if (in_array($ext, array('tar','bz','gz'))) {
- switch($ext){
- case 'bz':
- $compress_type = Tar::COMPRESS_BZIP;
- break;
- case 'gz':
- $compress_type = Tar::COMPRESS_GZIP;
- break;
- default:
- $compress_type = Tar::COMPRESS_NONE;
- }
-
- $tar = new Tar();
- try {
- $tar->open($file, $compress_type);
- $tar->extract($target);
- return true;
- }catch(Exception $e){
- if($conf['allowdebug']){
- msg('Tar Error: '.$e->getMessage().' ['.$e->getFile().':'.$e->getLine().']',-1);
- }
- return false;
- }
- } else if ($ext == 'zip') {
-
- $zip = new ZipLib();
- $ok = $zip->Extract($file, $target);
-
- // FIXME sort something out for handling zip error messages meaningfully
- return ($ok==-1?false:true);
-
- }
-
- // unsupported file type
- return false;
- }
-
- /**
- * Determine the archive type of the given file
- *
- * Reads the first magic bytes of the given file for content type guessing,
- * if neither bz, gz or zip are recognized, tar is assumed.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @returns boolean|string false if the file can't be read, otherwise an "extension"
- */
- function guess_archive($file){
- $fh = fopen($file,'rb');
- if(!$fh) return false;
- $magic = fread($fh,5);
- fclose($fh);
-
- if(strpos($magic,"\x42\x5a") === 0) return 'bz';
- if(strpos($magic,"\x1f\x8b") === 0) return 'gz';
- if(strpos($magic,"\x50\x4b\x03\x04") === 0) return 'zip';
- return 'tar';
- }
-
- /**
- * Copy with recursive sub-directory support
- */
- function dircopy($src, $dst) {
- global $conf;
-
- if (is_dir($src)) {
- if (!$dh = @opendir($src)) return false;
-
- if ($ok = io_mkdir_p($dst)) {
- while ($ok && (false !== ($f = readdir($dh)))) {
- if ($f == '..' || $f == '.') continue;
- $ok = $this->dircopy("$src/$f", "$dst/$f");
- }
- }
-
- closedir($dh);
- return $ok;
-
- } else {
- $exists = @file_exists($dst);
-
- if (!@copy($src,$dst)) return false;
- if (!$exists && !empty($conf['fperm'])) chmod($dst, $conf['fperm']);
- @touch($dst,filemtime($src));
- }
-
- return true;
- }
-
-
-}
-
diff --git a/lib/plugins/plugin/classes/ap_enable.class.php b/lib/plugins/plugin/classes/ap_enable.class.php
deleted file mode 100644
index a25c7ede8..000000000
--- a/lib/plugins/plugin/classes/ap_enable.class.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-class ap_enable extends ap_manage {
-
- var $enabled = array();
-
- function process() {
- global $plugin_protected;
- global $INPUT;
-
- $count_enabled = $count_disabled = 0;
-
- $this->enabled = $INPUT->arr('enabled');
-
- foreach ($this->manager->plugin_list as $plugin) {
- if (in_array($plugin, $plugin_protected)) continue;
-
- $new = in_array($plugin, $this->enabled);
- $old = !plugin_isdisabled($plugin);
-
- if ($new != $old) {
- switch ($new) {
- // enable plugin
- case true :
- if(plugin_enable($plugin)){
- msg(sprintf($this->lang['enabled'],$plugin),1);
- $count_enabled++;
- }else{
- msg(sprintf($this->lang['notenabled'],$plugin),-1);
- }
- break;
- case false:
- if(plugin_disable($plugin)){
- msg(sprintf($this->lang['disabled'],$plugin),1);
- $count_disabled++;
- }else{
- msg(sprintf($this->lang['notdisabled'],$plugin),-1);
- }
- break;
- }
- }
- }
-
- // refresh plugins, including expiring any dokuwiki cache(s)
- if ($count_enabled || $count_disabled) {
- $this->refresh();
- }
- }
-
-}
-
diff --git a/lib/plugins/plugin/classes/ap_info.class.php b/lib/plugins/plugin/classes/ap_info.class.php
deleted file mode 100644
index 89b78fa2d..000000000
--- a/lib/plugins/plugin/classes/ap_info.class.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-class ap_info extends ap_manage {
-
- var $plugin_info = array(); // the plugin itself
- var $details = array(); // any component plugins
-
- function process() {
-
- // sanity check
- if (!$this->manager->plugin) { return; }
-
- $component_list = $this->get_plugin_components($this->manager->plugin);
- usort($component_list, array($this,'component_sort'));
-
- foreach ($component_list as $component) {
- if (($obj = plugin_load($component['type'],$component['name'],false,true)) === null) continue;
-
- $compname = explode('_',$component['name']);
- if($compname[1]){
- $compname = '['.$compname[1].']';
- }else{
- $compname = '';
- }
-
- $this->details[] = array_merge(
- $obj->getInfo(),
- array(
- 'type' => $component['type'],
- 'compname' => $compname
- ));
- unset($obj);
- }
-
- // review details to simplify things
- foreach($this->details as $info) {
- foreach($info as $item => $value) {
- if (!isset($this->plugin_info[$item])) { $this->plugin_info[$item] = $value; continue; }
- if ($this->plugin_info[$item] != $value) $this->plugin_info[$item] = '';
- }
- }
- }
-
- function html() {
-
- // output the standard menu stuff
- parent::html();
-
- // sanity check
- if (!$this->manager->plugin) { return; }
-
- ptln('<div class="pm_info">');
- ptln("<h2>".$this->manager->getLang('plugin')." {$this->manager->plugin}</h2>");
-
- // collect pertinent information from the log
- $installed = $this->plugin_readlog($this->manager->plugin, 'installed');
- $source = $this->plugin_readlog($this->manager->plugin, 'url');
- $updated = $this->plugin_readlog($this->manager->plugin, 'updated');
- if (strrpos($updated, "\n") !== false) $updated = substr($updated, strrpos($updated, "\n")+1);
-
- ptln("<dl>",2);
- ptln("<dt>".$this->manager->getLang('source').'</dt><dd>'.($source ? $source : $this->manager->getLang('unknown'))."</dd>",4);
- ptln("<dt>".$this->manager->getLang('installed').'</dt><dd>'.($installed ? $installed : $this->manager->getLang('unknown'))."</dd>",4);
- if ($updated) ptln("<dt>".$this->manager->getLang('lastupdate').'</dt><dd>'.$updated."</dd>",4);
- ptln("</dl>",2);
-
- if (count($this->details) == 0) {
- ptln("<p>".$this->manager->getLang('noinfo')."</p>",2);
- } else {
-
- ptln("<dl>",2);
- if ($this->plugin_info['name']) ptln("<dt>".$this->manager->getLang('name')."</dt><dd>".$this->out($this->plugin_info['name'])."</dd>",4);
- if ($this->plugin_info['date']) ptln("<dt>".$this->manager->getLang('date')."</dt><dd>".$this->out($this->plugin_info['date'])."</dd>",4);
- if ($this->plugin_info['type']) ptln("<dt>".$this->manager->getLang('type')."</dt><dd>".$this->out($this->plugin_info['type'])."</dd>",4);
- if ($this->plugin_info['desc']) ptln("<dt>".$this->manager->getLang('desc')."</dt><dd>".$this->out($this->plugin_info['desc'])."</dd>",4);
- if ($this->plugin_info['author']) ptln("<dt>".$this->manager->getLang('author')."</dt><dd>".$this->manager->email($this->plugin_info['email'], $this->plugin_info['author'])."</dd>",4);
- if ($this->plugin_info['url']) ptln("<dt>".$this->manager->getLang('www')."</dt><dd>".$this->manager->external_link($this->plugin_info['url'], '', 'urlextern')."</dd>",4);
- ptln("</dl>",2);
-
- if (count($this->details) > 1) {
- ptln("<h3>".$this->manager->getLang('components')."</h3>",2);
- ptln("<div>",2);
-
- foreach ($this->details as $info) {
-
- ptln("<dl>",4);
- ptln("<dt>".$this->manager->getLang('name')."</dt><dd>".$this->out($info['name'].' '.$info['compname'])."</dd>",6);
- if (!$this->plugin_info['date']) ptln("<dt>".$this->manager->getLang('date')."</dt><dd>".$this->out($info['date'])."</dd>",6);
- if (!$this->plugin_info['type']) ptln("<dt>".$this->manager->getLang('type')."</dt><dd>".$this->out($info['type'])."</dd>",6);
- if (!$this->plugin_info['desc']) ptln("<dt>".$this->manager->getLang('desc')."</dt><dd>".$this->out($info['desc'])."</dd>",6);
- if (!$this->plugin_info['author']) ptln("<dt>".$this->manager->getLang('author')."</dt><dd>".$this->manager->email($info['email'], $info['author'])."</dd>",6);
- if (!$this->plugin_info['url']) ptln("<dt>".$this->manager->getLang('www')."</dt><dd>".$this->manager->external_link($info['url'], '', 'urlextern')."</dd>",6);
- ptln("</dl>",4);
-
- }
- ptln("</div>",2);
- }
- }
- ptln("</div>");
- }
-
- // simple output filter, make html entities safe and convert new lines to <br />
- function out($text) {
- return str_replace("\n",'<br />',htmlspecialchars($text));
- }
-
-
- /**
- * return a list (name & type) of all the component plugins that make up this plugin
- *
- * @todo can this move to pluginutils?
- */
- function get_plugin_components($plugin) {
-
- global $plugin_types;
-
- $components = array();
- $path = DOKU_PLUGIN.plugin_directory($plugin).'/';
-
- foreach ($plugin_types as $type) {
- if (@file_exists($path.$type.'.php')) { $components[] = array('name'=>$plugin, 'type'=>$type); continue; }
-
- if ($dh = @opendir($path.$type.'/')) {
- while (false !== ($cp = readdir($dh))) {
- if ($cp == '.' || $cp == '..' || strtolower(substr($cp,-4)) != '.php') continue;
-
- $components[] = array('name'=>$plugin.'_'.substr($cp, 0, -4), 'type'=>$type);
- }
- closedir($dh);
- }
- }
-
- return $components;
- }
-
- /**
- * usort callback to sort plugin components
- */
- function component_sort($a, $b) {
- if ($a['name'] == $b['name']) return 0;
- return ($a['name'] < $b['name']) ? -1 : 1;
- }
-}
diff --git a/lib/plugins/plugin/classes/ap_manage.class.php b/lib/plugins/plugin/classes/ap_manage.class.php
deleted file mode 100644
index 48be63050..000000000
--- a/lib/plugins/plugin/classes/ap_manage.class.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-
-class ap_manage {
-
- var $manager = null;
- var $lang = array();
- var $plugin = '';
- var $downloaded = array();
-
- function ap_manage(&$manager, $plugin) {
- $this->manager = & $manager;
- $this->plugin = $plugin;
- $this->lang = & $manager->lang;
- }
-
- function process() {
- return '';
- }
-
- function html() {
- print $this->manager->locale_xhtml('admin_plugin');
- $this->html_menu();
- }
-
- // build our standard menu
- function html_menu($listPlugins = true) {
- global $ID;
-
- ptln('<div class="pm_menu">');
-
- ptln('<div class="common">');
- ptln(' <h2>'.$this->lang['download'].'</h2>');
- ptln(' <form action="'.wl($ID).'" method="post">');
- ptln(' <fieldset class="hidden">',4);
- ptln(' <input type="hidden" name="do" value="admin" />');
- ptln(' <input type="hidden" name="page" value="plugin" />');
- formSecurityToken();
- ptln(' </fieldset>');
- ptln(' <fieldset>');
- ptln(' <legend>'.$this->lang['download'].'</legend>');
- ptln(' <label for="dw__url">'.$this->lang['url'].'<input name="url" id="dw__url" class="edit" type="text" maxlength="200" /></label>');
- ptln(' <input type="submit" class="button" name="fn[download]" value="'.$this->lang['btn_download'].'" />');
- ptln(' </fieldset>');
- ptln(' </form>');
- ptln('</div>');
-
- if ($listPlugins) {
- ptln('<h2>'.$this->lang['manage'].'</h2>');
-
- ptln('<form action="'.wl($ID).'" method="post" class="plugins">');
-
- ptln(' <fieldset class="hidden">');
- ptln(' <input type="hidden" name="do" value="admin" />');
- ptln(' <input type="hidden" name="page" value="plugin" />');
- formSecurityToken();
- ptln(' </fieldset>');
-
- $this->html_pluginlist();
-
- ptln(' <fieldset class="buttons">');
- ptln(' <input type="submit" class="button" name="fn[enable]" value="'.$this->lang['btn_enable'].'" />');
- ptln(' </fieldset>');
-
- // ptln(' </div>');
- ptln('</form>');
- }
-
- ptln('</div>');
- }
-
- function html_pluginlist() {
- global $plugin_protected;
-
- foreach ($this->manager->plugin_list as $plugin) {
-
- $disabled = plugin_isdisabled($plugin);
- $protected = in_array($plugin,$plugin_protected);
-
- $checked = ($disabled) ? '' : ' checked="checked"';
- $check_disabled = ($protected) ? ' disabled="disabled"' : '';
-
- // determine display class(es)
- $class = array();
- if (in_array($plugin, $this->downloaded)) $class[] = 'new';
- if ($disabled) $class[] = 'disabled';
- if ($protected) $class[] = 'protected';
-
- $class = count($class) ? ' class="'.join(' ', $class).'"' : '';
-
- ptln(' <fieldset'.$class.'>');
- ptln(' <legend>'.$plugin.'</legend>');
- ptln(' <input type="checkbox" class="enable" name="enabled[]" id="dw__p_'.$plugin.'" value="'.$plugin.'"'.$checked.$check_disabled.' />');
- ptln(' <h3 class="legend"><label for="dw__p_'.$plugin.'">'.$plugin.'</label></h3>');
-
- $this->html_button($plugin, 'info', false, 6);
- if (in_array('settings', $this->manager->functions)) {
- $this->html_button($plugin, 'settings', !@file_exists(DOKU_PLUGIN.$plugin.'/settings.php'), 6);
- }
- $this->html_button($plugin, 'update', !$this->plugin_readlog($plugin, 'url'), 6);
- $this->html_button($plugin, 'delete', $protected, 6);
-
- ptln(' </fieldset>');
- }
- }
-
- function html_button($plugin, $btn, $disabled=false, $indent=0) {
- $disabled = ($disabled) ? 'disabled="disabled"' : '';
- ptln('<input type="submit" class="button" '.$disabled.' name="fn['.$btn.']['.$plugin.']" value="'.$this->lang['btn_'.$btn].'" />',$indent);
- }
-
- /**
- * Refresh plugin list
- */
- function refresh() {
- global $config_cascade;
-
- // expire dokuwiki caches
- // touching local.php expires wiki page, JS and CSS caches
- @touch(reset($config_cascade['main']['local']));
-
- // update latest plugin date - FIXME
- global $ID;
- send_redirect(wl($ID,array('do'=>'admin','page'=>'plugin'),true, '&'));
- }
-
- /**
- * Write a log entry to the given target directory
- */
- function plugin_writelog($target, $cmd, $data) {
-
- $file = $target.'/manager.dat';
-
- switch ($cmd) {
- case 'install' :
- $url = $data[0];
- $date = date('r');
- if (!$fp = @fopen($file, 'w')) return;
- fwrite($fp, "installed=$date\nurl=$url\n");
- fclose($fp);
- break;
-
- case 'update' :
- $url = $data[0];
- $date = date('r');
- if (!$fp = @fopen($file, 'r+')) return;
- $buffer = "";
- while (($line = fgets($fp)) !== false) {
- $urlFound = strpos($line,"url");
- if($urlFound !== false) $line="url=$url\n";
- $buffer .= $line;
- }
- $buffer .= "updated=$date\n";
- fseek($fp, 0);
- fwrite($fp, $buffer);
- fclose($fp);
- break;
- }
- }
-
- function plugin_readlog($plugin, $field) {
- static $log = array();
- $file = DOKU_PLUGIN.plugin_directory($plugin).'/manager.dat';
-
- if (!isset($log[$plugin])) {
- $tmp = @file_get_contents($file);
- if (!$tmp) return '';
- $log[$plugin] = & $tmp;
- }
-
- if ($field == 'ALL') {
- return $log[$plugin];
- }
-
- $match = array();
- if (preg_match_all('/'.$field.'=(.*)$/m',$log[$plugin], $match))
- return implode("\n", $match[1]);
-
- return '';
- }
-
- /**
- * delete, with recursive sub-directory support
- */
- function dir_delete($path) {
- if (!is_string($path) || $path == "") return false;
-
- if (is_dir($path) && !is_link($path)) {
- if (!$dh = @opendir($path)) return false;
-
- while ($f = readdir($dh)) {
- if ($f == '..' || $f == '.') continue;
- $this->dir_delete("$path/$f");
- }
-
- closedir($dh);
- return @rmdir($path);
- }
- return @unlink($path);
- }
-
-
-}
diff --git a/lib/plugins/plugin/classes/ap_update.class.php b/lib/plugins/plugin/classes/ap_update.class.php
deleted file mode 100644
index 5d7f6cb08..000000000
--- a/lib/plugins/plugin/classes/ap_update.class.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-require_once(DOKU_PLUGIN."/plugin/classes/ap_download.class.php");
-class ap_update extends ap_download {
-
- var $overwrite = true;
-
- function process() {
- $plugin_url = $this->plugin_readlog($this->plugin, 'url');
- $this->download($plugin_url, $this->overwrite);
- return '';
- }
-
- function html() {
- parent::html();
-
- ptln('<div class="pm_info">');
- ptln('<h2>'.$this->lang['updating'].'</h2>');
-
- if ($this->manager->error) {
- ptln('<div class="error">'.str_replace("\n","<br />", $this->manager->error).'</div>');
- } else if (count($this->downloaded) == 1) {
- ptln('<p>'.sprintf($this->lang['updated'],$this->downloaded[0]).'</p>');
- } else if (count($this->downloaded)) { // more than one plugin in the download
- ptln('<p>'.$this->lang['updates'].'</p>');
- ptln('<ul>');
- foreach ($this->downloaded as $plugin) {
- ptln('<li><div class="li">'.$plugin.'</div></li>',2);
- }
- ptln('</ul>');
- } else { // none found in download
- ptln('<p>'.$this->lang['update_none'].'</p>');
- }
- ptln('</div>');
- }
-}
-
diff --git a/lib/plugins/plugin/lang/af/lang.php b/lib/plugins/plugin/lang/af/lang.php
deleted file mode 100644
index 669fdd5ce..000000000
--- a/lib/plugins/plugin/lang/af/lang.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * Afrikaans language file
- *
- */
-$lang['btn_download'] = 'Af laai';
-$lang['btn_enable'] = 'Store';
-$lang['url'] = 'URL';
-$lang['unknown'] = 'unbekende';
-$lang['name'] = 'Naam:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Tipe:';
-$lang['www'] = 'Web-werf:';
diff --git a/lib/plugins/plugin/lang/ar/admin_plugin.txt b/lib/plugins/plugin/lang/ar/admin_plugin.txt
deleted file mode 100644
index 2ef9fd595..000000000
--- a/lib/plugins/plugin/lang/ar/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== إدارة الإضافات ======
-
-على هذه الصفحة يمكنك إدارة كل ما يتعلق ب[[doku>plugins|إضافات]] دوكو ويكي. لتتمكن من تنزيل و تثبيت الإضافات يجب أن يكون دليل الاضافات قابلا للكتابة من خادوم الوب.
-
diff --git a/lib/plugins/plugin/lang/ar/lang.php b/lib/plugins/plugin/lang/ar/lang.php
deleted file mode 100644
index aae58fdb9..000000000
--- a/lib/plugins/plugin/lang/ar/lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Yaman Hokan <always.smile.yh@hotmail.com>
- * @author Usama Akkad <uahello@gmail.com>
- * @author uahello@gmail.com
- */
-$lang['menu'] = 'إدارة الملحقات';
-$lang['download'] = 'نزّل و ثبت اضافة جديدة';
-$lang['manage'] = 'الإضافات المثبتة';
-$lang['btn_info'] = 'معلومات';
-$lang['btn_update'] = 'حدّث';
-$lang['btn_delete'] = 'احذف';
-$lang['btn_settings'] = 'إعدادات';
-$lang['btn_download'] = 'نزل';
-$lang['btn_enable'] = 'احفظ';
-$lang['url'] = 'رابط';
-$lang['installed'] = 'ثُبتت:';
-$lang['lastupdate'] = 'آخر تحديث:';
-$lang['source'] = 'المصدر:';
-$lang['unknown'] = 'مجهول';
-$lang['updating'] = 'تُحدث ...';
-$lang['updated'] = 'الاضافة %s حُدثت بنجاح';
-$lang['updates'] = 'الاضافة التالية حُدثت بنجاح';
-$lang['update_none'] = 'لا يوجد تحديثات.';
-$lang['deleting'] = 'تُحذف ... ';
-$lang['deleted'] = 'حُذفت الإضافة %s.';
-$lang['downloading'] = 'يُنزل ...';
-$lang['downloaded'] = 'الاضافة %s ثبتت بنجاح';
-$lang['downloads'] = 'الاضافة التالية ثبتت بنجاح:';
-$lang['download_none'] = 'لم يجد إضافة، أو ان هناك مشكلة غير معروفة أثناء التنزيل و التثبيت.';
-$lang['plugin'] = 'الإضافة:';
-$lang['components'] = 'المكون:';
-$lang['noinfo'] = 'لم تعطي الإضافة أية معلومة، قد تكون معطوبة.';
-$lang['name'] = 'الاسم :';
-$lang['date'] = 'التاريخ :';
-$lang['type'] = 'النوع :';
-$lang['desc'] = 'الوصف :';
-$lang['author'] = 'الكاتب :';
-$lang['www'] = 'الشابكة :';
-$lang['error'] = 'حث خطأ مجهول.';
-$lang['error_download'] = 'تعذر تنزيل ملف الاضافة: %s';
-$lang['error_badurl'] = 'اشتبه بعنوان خاطئ - تعذر الحصول على الاسم من العنوان';
-$lang['error_dircreate'] = 'تعذر إنشاء مجلد مؤقت للتنزيل';
-$lang['error_decompress'] = 'تعذر على مدير الاضافات فك ضغط الملف المُنزّل. قد يكون ذلك نتيجة لتنزيل خاطئ، في هذه الحالة أعد المحاولة; أو ان هيئة الضغط غير معروفة، في هذه الحالة عليك تنزيل و تثبيت الاضافة يدويا.';
-$lang['error_copy'] = 'كان هناك خطأ في نسخ ملف عند محاولة تثبيت ملفات للإضافة <em>%s</em>: قد يكون القرص ممتلئا أو أن صلاحيات الوصول للملف خاطئة. لربما نتج عن ذلك اضافة مثبته جزئيا تجعل نظام الويكي غير ثابت.';
-$lang['error_delete'] = 'كان هناك خطأ عند محاولة حذف الاضافة <em>%s</em>. السبب الاكثر احتمالا هو صلاحيات غير كافية على الملف أو المجلد';
-$lang['enabled'] = 'الاضافة %s فُعلت. ';
-$lang['notenabled'] = 'تعذر تفعيل الاضافة %s، تحقق من اذونات الملف.';
-$lang['disabled'] = 'عُطلت الإضافة %s.';
-$lang['notdisabled'] = 'تعذر تعطيل الإضافة %s، تحقق من اذونات الملف.';
-$lang['packageinstalled'] = 'حزمة الإضافة (%d plugin(s): %s) ثبتت بنجاج.';
diff --git a/lib/plugins/plugin/lang/bg/admin_plugin.txt b/lib/plugins/plugin/lang/bg/admin_plugin.txt
deleted file mode 100644
index bad73e136..000000000
--- a/lib/plugins/plugin/lang/bg/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Управление на приставките ======
-
-От тази страница можете на управлявате [[doku>plugins|приставките]] на Dokuwiki. За да свалите и инсталирате приставка, е необходимо писането в директорията .../lib/plugins/ да е позволено на сървъра.
diff --git a/lib/plugins/plugin/lang/bg/lang.php b/lib/plugins/plugin/lang/bg/lang.php
deleted file mode 100644
index 0e6a4cd28..000000000
--- a/lib/plugins/plugin/lang/bg/lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * @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['menu'] = 'Управление на приставките';
-$lang['download'] = 'Сваляне и инсталиране на нова приставка';
-$lang['manage'] = 'Инсталирани приставки';
-$lang['btn_info'] = 'информация';
-$lang['btn_update'] = 'обновяване';
-$lang['btn_delete'] = 'изтриване';
-$lang['btn_settings'] = 'настройки';
-$lang['btn_download'] = 'Сваляне';
-$lang['btn_enable'] = 'Запис';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Инсталирана:';
-$lang['lastupdate'] = 'Актуализирана:';
-$lang['source'] = 'Източник:';
-$lang['unknown'] = 'непознат';
-$lang['updating'] = 'Актуализиране ...';
-$lang['updated'] = 'Приставката %s е качена успешно';
-$lang['updates'] = 'Следните приставки са актуализирани успешно';
-$lang['update_none'] = 'Не са намерени нови версии.';
-$lang['deleting'] = 'Изтриване ...';
-$lang['deleted'] = 'Приставката %s е изтрита успешно.';
-$lang['downloading'] = 'Сваляне ...';
-$lang['downloaded'] = 'Приставката %s е инсталирана успешно ';
-$lang['downloads'] = 'Следните приставки са инсталирани успешно:';
-$lang['download_none'] = 'Не са намерени приставки или е възникнала непозната грешка при свалянето и инсталирането.';
-$lang['plugin'] = 'Приставка:';
-$lang['components'] = 'Компоненти';
-$lang['noinfo'] = 'Приставка не върна информация, може да е повредена.';
-$lang['name'] = 'Име:';
-$lang['date'] = 'Дата:';
-$lang['type'] = 'Тип:';
-$lang['desc'] = 'Описание:';
-$lang['author'] = 'Автор:';
-$lang['www'] = 'Уебстраница:';
-$lang['error'] = 'Възникна непозната грешка.';
-$lang['error_download'] = 'Свалянето на приставката %s е невъзможно.';
-$lang['error_badurl'] = 'Предполагаем грешен адрес - не може да се определи име на файла от URL адреса';
-$lang['error_dircreate'] = 'Създаването на временна директория за сваляне не е възможно.';
-$lang['error_decompress'] = 'Разархивирането на сваленият файл е невъзможно. Вероятно е резултат от грешка при свалянето, в този случай трябва да опитате отново; или формата на компресия е непознат - тогава трябва да свалите и инсталирате приставката ръчно.';
-$lang['error_copy'] = 'Възникна грешка при копиране на файл по време на инсталиране на приставката <em>%s</em>: вероятно дискът е пълен или правата за достъп до файловете са грешни. Може да доведе до частично инсталирана приставка и да причини нестабилно функциониране на wiki-то ви.';
-$lang['error_delete'] = 'Възникна грешка при изтриването на приставката <em>%s</em>. Най-вероятната причина е в правата за достъп до файл или директория';
-$lang['enabled'] = 'Приставката %s е включена.';
-$lang['notenabled'] = 'Приставката %s не може да бъде включена, моля проверете правата за файловете.';
-$lang['disabled'] = 'Приставката %s е изключена.';
-$lang['notdisabled'] = 'Приставката %s не е изключена, моля проверете правата за файловете.';
-$lang['packageinstalled'] = 'Пакетът е инсталиран успешно (%d приставка: %s).';
diff --git a/lib/plugins/plugin/lang/ca-valencia/admin_plugin.txt b/lib/plugins/plugin/lang/ca-valencia/admin_plugin.txt
deleted file mode 100644
index 6b5a95838..000000000
--- a/lib/plugins/plugin/lang/ca-valencia/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Gestor de plúgins ======
-
-Des d'esta pàgina pot gestionar tot lo relacionat en els [[doku>plugins|plúgins]] de DokuWiki. Per a poder descarregar i instalar un plúgin, el servidor web deu poder escriure en la carpeta de plúgins.
-
diff --git a/lib/plugins/plugin/lang/ca-valencia/lang.php b/lib/plugins/plugin/lang/ca-valencia/lang.php
deleted file mode 100644
index 3fbdb134d..000000000
--- a/lib/plugins/plugin/lang/ca-valencia/lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * valencian language file
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Bernat Arlandis i Mañó <berarma@ya.com>
- * @author Bernat Arlandis <berarma@ya.com>
- * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
- */
-$lang['menu'] = 'Gestor de plúgins';
-$lang['download'] = 'Descarregar i instalar un nou plúgin';
-$lang['manage'] = 'Plúgins instalats';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'actualisar';
-$lang['btn_delete'] = 'borrar';
-$lang['btn_settings'] = 'ajusts';
-$lang['btn_download'] = 'Descarregar';
-$lang['btn_enable'] = 'Guardar';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalat:';
-$lang['lastupdate'] = 'Última actualisació:';
-$lang['source'] = 'Font:';
-$lang['unknown'] = 'desconegut';
-$lang['updating'] = 'Actualisant ...';
-$lang['updated'] = 'Plúgin %s actualisat correctament';
-$lang['updates'] = 'Els següents plúgins s\'han actualisat correctament:';
-$lang['update_none'] = 'No s\'han trobat actualisacions.';
-$lang['deleting'] = 'Borrant ...';
-$lang['deleted'] = 'Plúgin %s borrat.';
-$lang['downloading'] = 'Descarregant ...';
-$lang['downloaded'] = 'Plúgin %s instalat correctament';
-$lang['downloads'] = 'Els següents plúgins s\'han instalat correctament:';
-$lang['download_none'] = 'No s\'han trobat plúgins o ha hagut algun problema descarregant i instalant.';
-$lang['plugin'] = 'Plúgin:';
-$lang['components'] = 'Components';
-$lang['noinfo'] = 'Este plúgin no ha tornat informació, pot ser invàlit.';
-$lang['name'] = 'Nom:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Classe:';
-$lang['desc'] = 'Descripció:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Ha ocorregut un erro desconegut.';
-$lang['error_download'] = 'No es pot descarregar l\'archiu del plúgin: %s';
-$lang['error_badurl'] = 'Possible URL roïn - no es pot determinar el nom de l\'archiu a partir de la URL';
-$lang['error_dircreate'] = 'No es pot crear la carpeta temporal per a rebre descàrregues';
-$lang['error_decompress'] = 'El gestor de plúgins no ha pogut descomprimir l\'archiu descarregat. Açò pot ser degut a una descàrrega fallida, en eixe cas deuria intentar-ho de nou; o el format de compressió pot ser desconegut, en eixe cas necessitarà descarregar i instalar el plúgin manualment.';
-$lang['error_copy'] = 'Ha ocorregut un erro copiant archius a l\'instalar archius del plúgin <em>%s</em>: el disc podria estar ple o els permissos d\'accés a l\'archiu estar mal. El plúgin podria haver quedat parcialment instalat i deixar el wiki inestable.';
-$lang['error_delete'] = 'Ha ocorregut un erro intentant borrar el plúgin <em>%s</em>. La causa més provable és que els permissos d\'accés a l\'archiu o el directori no siguen suficients';
-$lang['enabled'] = 'Plúgin %s activat.';
-$lang['notenabled'] = 'No s\'ha pogut activar el plúgin %s, comprove els permissos dels archius.';
-$lang['disabled'] = 'Plúgin %s desactivat.';
-$lang['notdisabled'] = 'No s\'ha pogut desactivar el plúgin %s, comprove els permissos dels archius.';
diff --git a/lib/plugins/plugin/lang/ca/admin_plugin.txt b/lib/plugins/plugin/lang/ca/admin_plugin.txt
deleted file mode 100644
index c21e3f502..000000000
--- a/lib/plugins/plugin/lang/ca/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Gestió de connectors ======
-
-En aquesta pàgina podeu gestionar tot allò referent als [[doku>plugins|connectors]] de Dokuwiki. Per a baixar i instal·lar connectors, cal que el servidor web tingui permís d'escriptura en la carpeta de connectors. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/ca/lang.php b/lib/plugins/plugin/lang/ca/lang.php
deleted file mode 100644
index 5c7933666..000000000
--- a/lib/plugins/plugin/lang/ca/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Catalan language file
- *
- * @author Carles Bellver <carles.bellver@gmail.com>
- * @author carles.bellver@gmail.com
- * @author carles.bellver@cent.uji.es
- * @author Carles Bellver <carles.bellver@cent.uji.es>
- * @author daniel@6temes.cat
- */
-$lang['menu'] = 'Gestió de connectors';
-$lang['download'] = 'Baixa i instal·la un nou connector';
-$lang['manage'] = 'Connectors instal·lats';
-$lang['btn_info'] = 'informació';
-$lang['btn_update'] = 'actualitza';
-$lang['btn_delete'] = 'suprimeix';
-$lang['btn_settings'] = 'paràmetres';
-$lang['btn_download'] = 'Baixa';
-$lang['btn_enable'] = 'Desa';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instal·lació:';
-$lang['lastupdate'] = 'Darrera actualitació:';
-$lang['source'] = 'Font:';
-$lang['unknown'] = 'desconegut';
-$lang['updating'] = 'S\'està actualitzant...';
-$lang['updated'] = 'El connector %s s\'ha actualitzat amb èxit.';
-$lang['updates'] = 'Els connectors següents s\'han actualitzat amb èxit';
-$lang['update_none'] = 'No s\'han trobat actualitzacions.';
-$lang['deleting'] = 'S\'està suprimint...';
-$lang['deleted'] = 'S\'ha suprimit el connector %s.';
-$lang['downloading'] = 'S\'està baixant...';
-$lang['downloaded'] = 'El connector %s s\'ha instal·lat amb èxit';
-$lang['downloads'] = 'Els connectors següents s\'han instal·lat amb èxit:';
-$lang['download_none'] = 'No s\'han trobat connectors, o hi ha hagut un problema desconegut durant el procés de baixada i instal·lació.';
-$lang['plugin'] = 'Connector:';
-$lang['components'] = 'Components';
-$lang['noinfo'] = 'Aquest connector no ha retornat informació. Potser no és vàlid.';
-$lang['name'] = 'Nom:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipus:';
-$lang['desc'] = 'Descripció:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'S\'ha produït un error desconegut.';
-$lang['error_download'] = 'No s\'ha pogut baixar el fitxer del connector: %s';
-$lang['error_badurl'] = 'L\'URL no sembla vàlid: no permet determinar el nom del fitxer';
-$lang['error_dircreate'] = 'No s\'ha pogut crear una carpeta temporal per rebre la baixada';
-$lang['error_decompress'] = 'El gestor de connectors no ha pogut descomprimir el fitxer baixat. Potser no s\'ha baixat correctament, en el qual cas podríeu tornar a intentar-ho. O el format de compressió podria ser desconegut, en el qual cas hauríeu de baixar i instal·lar el connector manualment.';
-$lang['error_copy'] = 'S\'ha produït un error de còpia de fitxers quan s\'estaven instal·lant els fitxers del connector <em>%s</em>: potser el disc està ple o els permisos d\'accés són incorrectes. Això pot haver causat una instal·lació incompleta del connector i per tant el vostre wiki pot haver quedat en un estat inestable.';
-$lang['error_delete'] = 'S\'ha produït un error quan s\'intentava suprimir el connector <em>%s</em>. La causa més probable d\'això són uns permisos d\'accés insuficients al fitxer o al directori. ';
-$lang['enabled'] = 'S\'ha habilitat el connector %s.';
-$lang['notenabled'] = 'No s\'ha pogut habilitar el connector %s. Comproveu els permisos dels fitxers.';
-$lang['disabled'] = 'S\'ha inhabilitat el connector %s.';
-$lang['notdisabled'] = 'No s\'ha pogut inhabilitar el connector %s. Comproveu els permisos dels fitxers.';
-$lang['packageinstalled'] = 'El paquet del connector (%d plugins(s): %s) s\'ha instal·lat correctament.';
diff --git a/lib/plugins/plugin/lang/cs/lang.php b/lib/plugins/plugin/lang/cs/lang.php
index fb8b6cc4e..8917f8ef6 100644
--- a/lib/plugins/plugin/lang/cs/lang.php
+++ b/lib/plugins/plugin/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['menu'] = 'Správa pluginů';
$lang['download'] = 'Stáhnout a instalovat plugin';
diff --git a/lib/plugins/plugin/lang/da/admin_plugin.txt b/lib/plugins/plugin/lang/da/admin_plugin.txt
deleted file mode 100644
index 300b6618b..000000000
--- a/lib/plugins/plugin/lang/da/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Udvidelsesstyring ======
-
-På denne side kan du kontrollere alle Dokuwikis [[doku>plugins|udvidelser]]. For at hente og opsætte en udvidelse, må din udvidelsesmappe kunne skrives til af serveren.
-
-
diff --git a/lib/plugins/plugin/lang/da/lang.php b/lib/plugins/plugin/lang/da/lang.php
deleted file mode 100644
index 07077eaa1..000000000
--- a/lib/plugins/plugin/lang/da/lang.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
- * @author Kalle Sommer Nielsen <kalle@php.net>
- * @author Esben Laursen <hyber@hyber.dk>
- * @author Harith <haj@berlingske.dk>
- * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
- * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
- * @author rasmus@kinnerup.com
- * @author Michael Pedersen subben@gmail.com
- * @author Mikael Lyngvig <mikael@lyngvig.org>
- * @author Jens Hyllegaard <jens.hyllegaard@gmail.com>
- */
-$lang['menu'] = 'Håndter udvidelser';
-$lang['download'] = 'Hent og tilføj ny udvidelse';
-$lang['manage'] = 'Tilføjede udvidelser';
-$lang['btn_info'] = 'oplysninger';
-$lang['btn_update'] = 'opdater';
-$lang['btn_delete'] = 'slet';
-$lang['btn_settings'] = 'indstillinger';
-$lang['btn_download'] = 'Hent';
-$lang['btn_enable'] = 'Gem';
-$lang['url'] = 'URL-adresse';
-$lang['installed'] = 'Tilføjet:';
-$lang['lastupdate'] = 'Sidst opdateret:';
-$lang['source'] = 'Kilde:';
-$lang['unknown'] = 'ukendt';
-$lang['updating'] = 'Opdaterer ...';
-$lang['updated'] = 'Udvidelse %s blev korrekt opdateret';
-$lang['updates'] = 'De følgende udvidelser blev opdateret korrekt:';
-$lang['update_none'] = 'Ingen opdateringer fundet.';
-$lang['deleting'] = 'Sletter ...';
-$lang['deleted'] = 'Udvidelsen %s slettet.';
-$lang['downloading'] = 'Henter ...';
-$lang['downloaded'] = 'Udvidelse %s blev korrekt installeret';
-$lang['downloads'] = 'De følgende udvidelser blev installeret korrekt:';
-$lang['download_none'] = 'Ingen udvidelser blev fundet, eller en ukendt fejl opstod under hentning og opsætning';
-$lang['plugin'] = 'Udvidelse:';
-$lang['components'] = 'Komponenter';
-$lang['noinfo'] = 'Denne udvidelse videregav ingen oplysninger. Den kan være fejlagtig.';
-$lang['name'] = 'Navn:';
-$lang['date'] = 'Dato:';
-$lang['type'] = 'Type:';
-$lang['desc'] = 'Beskrivelse:';
-$lang['author'] = 'Programmør:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'En ukendt fejl opstod.';
-$lang['error_download'] = 'Kunne ikke hente udvidelsesfilen: %s';
-$lang['error_badurl'] = 'Muligvis dårlig netadresse; kunne ikke hente filnavn fra adressen.';
-$lang['error_dircreate'] = 'Kunne ikke oprette midlertidig mappe til hentning';
-$lang['error_decompress'] = 'Udvidelseshåndtering kunne ikke udpakke den hentede fil. Det kan skyldes et fejlagtigt download, i hvilket fald du må prøve igen. Komprimeringsformatet kan også være ukendt, hvorved du du vil være nødt til at hente og opsætte udvidelsen manuelt.';
-$lang['error_copy'] = 'Der opstod en filkopieringsfejl under forsøget på at installere filerne til udvidelsen <em>%s</em>: Disken kan være fuld eller filadgangsrettighederne kan være forkert sat. Dette kan have ført til en delvist installeret udvidelse og efterladt din wiki-opsætning ustabil.';
-$lang['error_delete'] = 'Der opstod en fejl ved forsøget på at slette udvidelsen <em>%s</em>. Dette skyldes sandsynligvis utilstrækkelig adgang til filer eller mapper.';
-$lang['enabled'] = 'Udvidelsen %s blev aktiveret.';
-$lang['notenabled'] = 'Udvidelsen %s kunne ikke aktiveres. Kontroller filtilladelser.';
-$lang['disabled'] = 'Udvidelsen %s blev ikke aktiveret.';
-$lang['notdisabled'] = 'Udvidelsen %s kunne ikke aktiveres. Kontroller filtilladelser.';
-$lang['packageinstalled'] = 'Plugin pakke (%d plugin(s): %s) installeret korrekt.';
diff --git a/lib/plugins/plugin/lang/de-informal/admin_plugin.txt b/lib/plugins/plugin/lang/de-informal/admin_plugin.txt
deleted file mode 100644
index 576797d57..000000000
--- a/lib/plugins/plugin/lang/de-informal/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-===== Erweiterungsmanagement =====
-
-Auf dieser Seite kannst du alles anpassen was mit den DokuWiki [[doku>plugins|Erweiterungen]] zu tun hat. Der Ordner der Erweiterungen muss für den Webserver beschreibbar sein, um Erweiterungen herunterladen und installieren zu können. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/de-informal/lang.php b/lib/plugins/plugin/lang/de-informal/lang.php
deleted file mode 100644
index 8f1cea5e5..000000000
--- a/lib/plugins/plugin/lang/de-informal/lang.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Alexander Fischer <tbanus@os-forge.net>
- * @author Juergen Schwarzer <jschwarzer@freenet.de>
- * @author Marcel Metz <marcel_metz@gmx.de>
- * @author Matthias Schulte <post@lupo49.de>
- * @author Christian Wichmann <nospam@zone0.de>
- * @author Pierre Corell <info@joomla-praxis.de>
- * @author Frank Loizzi <contact@software.bacal.de>
- * @author Volker Bödker <volker@boedker.de>
- */
-$lang['menu'] = 'Plugins verwalten';
-$lang['download'] = 'Herunterladen und installieren einer neuen Erweiterung';
-$lang['manage'] = 'Installierte Erweiterungen';
-$lang['btn_info'] = 'Information';
-$lang['btn_update'] = 'aktualisieren';
-$lang['btn_delete'] = 'löschen';
-$lang['btn_settings'] = 'Einstellungen';
-$lang['btn_download'] = 'Herunterladen';
-$lang['btn_enable'] = 'Speichern';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Installiert:';
-$lang['lastupdate'] = 'Letzte Aktualisierung:';
-$lang['source'] = 'Quellen:';
-$lang['unknown'] = 'unbekannt';
-$lang['updating'] = 'Aktualisiere...';
-$lang['updated'] = 'Erweiterung %s wurde erfolgreich aktualisiert.';
-$lang['updates'] = 'Die folgenden Erweiterungen wurden erfolgreich aktualisiert.';
-$lang['update_none'] = 'Keine Aktualisierungen gefunden.';
-$lang['deleting'] = 'Lösche...';
-$lang['deleted'] = 'Erweiterung %s wurde gelöscht.';
-$lang['downloading'] = 'Herunterladen...';
-$lang['downloaded'] = 'Erweiterung %s wurde erfolgreich installiert';
-$lang['downloads'] = 'Die folgenden Erweiterungen wurden erfolgreich installiert:';
-$lang['download_none'] = 'Keine Erweiterungen gefunden oder es trat ein unbekanntest Problem beim Herunterladen und Installieren auf.';
-$lang['plugin'] = 'Erweiterung:';
-$lang['components'] = 'Komponenten';
-$lang['noinfo'] = 'Diese Erweiterung gab keine Information zurück - sie könnte ungültig sein.';
-$lang['name'] = 'Name:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Typ:';
-$lang['desc'] = 'Beschreibung:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Internet:';
-$lang['error'] = 'Es ist ein unbekannter Fehler aufgetreten.';
-$lang['error_download'] = 'Nicht möglich die Erweiterung herunterzuladen: %s';
-$lang['error_badurl'] = 'Vermute schlechte URL - nicht möglich den Dateinamen aus der URL zu ermitteln';
-$lang['error_dircreate'] = 'Nicht möglich einen temporären Ordner zu erstellen um den Download zu empfangen.';
-$lang['error_decompress'] = 'Dem Erweiterungsmanager war es nicht möglich die heruntergeladene Datei zu dekomprimieren. Dies kann an einem defekten Download liegen, in diesem Fall sollten Sie es erneut versuchen; oder das Format mit dem die Datei komprimiert ist, ist unbekannt, da müssen Sie die Erweiterung manuell herunterladen und installieren. ';
-$lang['error_copy'] = 'Es trat ein Dateifehler beim Kopieren der Installationsdateien für die Erweiterung <em>%s</em> auf: Die Festplatte könnte voll oder die Zugriffsrechte verweigert worden sein. Dies führt zu einer teilweise installierten Erweiterung und belässt dein Wiki in einem instabilen Zustand.';
-$lang['error_delete'] = 'Es trat ein Fehler beim Löschen der Erweiterung <em>%s</em> auf. Die wahrscheinlichste Ursache ist eine unzureichende Datei- oder Ordnerzugriffserlaubnis.';
-$lang['enabled'] = 'Erweiterung %s aktiviert.';
-$lang['notenabled'] = 'Erweiterung %s konnte nicht aktiviert werden. Überprüfen sie die Zugriffsberechtigung der Datei.';
-$lang['disabled'] = 'Erweiterung %s deaktiviert.';
-$lang['notdisabled'] = 'Erweiterung %s konnte nicht deaktiviert werden - überprüfe Dateiberechtigungen';
-$lang['packageinstalled'] = 'Plugin-Paket (%d Plugin(s): %s) erfolgreich installiert.';
diff --git a/lib/plugins/plugin/lang/de/admin_plugin.txt b/lib/plugins/plugin/lang/de/admin_plugin.txt
deleted file mode 100644
index f3b2caa0c..000000000
--- a/lib/plugins/plugin/lang/de/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Verwaltung der Plugins ======
-
-Auf dieser Seite kannst du alles machen, was mit DokuWiki [[doku>plugins|Plugins]] zu tun hat. Um Plugins automatisch herunterladen und installieren zu können, muss der Webserver im Plugin-Ordner schreiben dürfen.
-
-
diff --git a/lib/plugins/plugin/lang/de/lang.php b/lib/plugins/plugin/lang/de/lang.php
deleted file mode 100644
index f41486007..000000000
--- a/lib/plugins/plugin/lang/de/lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Esther Brunner <esther@kaffeehaus.ch>
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Michael Klier <chi@chimeric.de>
- * @author Leo Moll <leo@yeasoft.com>
- * @author Florian Anderiasch <fa@art-core.org>
- * @author Robin Kluth <commi1993@gmail.com>
- * @author Arne Pelka <mail@arnepelka.de>
- * @author Dirk Einecke <dirk@dirkeinecke.de>
- * @author Blitzi94@gmx.de
- * @author Robert Bogenschneider <robog@GMX.de>
- * @author Robert Bogenschneider <robog@gmx.de>
- * @author Niels Lange <niels@boldencursief.nl>
- * @author Christian Wichmann <nospam@zone0.de>
- * @author Paul Lachewsky <kaeptn.haddock@gmail.com>
- * @author Pierre Corell <info@joomla-praxis.de>
- */
-$lang['menu'] = 'Plugins verwalten';
-$lang['download'] = 'Neues Plugin herunterladen und installieren';
-$lang['manage'] = 'Installierte Plugins';
-$lang['btn_info'] = 'Info';
-$lang['btn_update'] = 'Update';
-$lang['btn_delete'] = 'Löschen';
-$lang['btn_settings'] = 'Einstellungen';
-$lang['btn_download'] = 'Herunterladen';
-$lang['btn_enable'] = 'Speichern';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Installiert:';
-$lang['lastupdate'] = 'Letzte Version:';
-$lang['source'] = 'Quelle:';
-$lang['unknown'] = 'unbekannt';
-$lang['updating'] = 'Lade Update ...';
-$lang['updated'] = 'Update von Plugin %s erfolgreich installiert';
-$lang['updates'] = 'Die folgenden Plugins wurden erfolgreich aktualisiert';
-$lang['update_none'] = 'Keine Updates gefunden.';
-$lang['deleting'] = 'Löschen ...';
-$lang['deleted'] = 'Plugin %s gelöscht.';
-$lang['downloading'] = 'Lade herunter ...';
-$lang['downloaded'] = 'Plugin %s erfolgreich installiert';
-$lang['downloads'] = 'Die folgenden Plugins wurden erfolgreich installiert:';
-$lang['download_none'] = 'Keine Plugins gefunden oder es trat ein Fehler beim Herunterladen auf.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Komponenten';
-$lang['noinfo'] = 'Dieses Plugin liefert keine Informationen, möglicherweise ist es fehlerhaft.';
-$lang['name'] = 'Name:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Typ:';
-$lang['desc'] = 'Beschreibung:';
-$lang['author'] = 'Entwickler:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Ein unbekannter Fehler ist aufgetreten.';
-$lang['error_download'] = 'Konnte das Plugin %s nicht herunterladen';
-$lang['error_badurl'] = 'Wahrscheinlich ungültige URL, konnte keinen Dateinamen ausfindig machen';
-$lang['error_dircreate'] = 'Konnte keinen temporären Ordner für die Downloads erstellen';
-$lang['error_decompress'] = 'Der Plugin Manager konnte das Plugin-Archiv nicht entpacken. Entweder ist der Download fehlerhaft oder das Komprimierungsverfahren wird nicht unterstützt. Bitte versuchen Sie es erneut oder downloaden und installieren Sie das Plugin manuell.';
-$lang['error_copy'] = 'Beim Kopieren der Dateien des Plugins trat ein Fehler auf <em>%s</em>: möglicherweise ist die Festplatte voll oder die Dateiberechtigungen falsch. Möglicherweise wurde das Plugin nur teilweise installiert. Sie sollten das Plugin manuell entfernen um Instabilitäten zu vermeiden.';
-$lang['error_delete'] = 'Es gab einem Fehler beim Versuch das Plugin zu löschen <em>%s</em>. Dies liegt wahrscheinlich an fehlenden Dateiberechtigungen.';
-$lang['enabled'] = 'Plugin %s wurde aktiviert.';
-$lang['notenabled'] = 'Plugin %s konnte nicht aktiviert werden, überprüfen Sie die Dateirechte.';
-$lang['disabled'] = 'Plugin %s wurde deaktiviert.';
-$lang['notdisabled'] = 'Plugin %s konnte nicht deaktiviert werden, überprüfen Sie die Dateirechte.';
-$lang['packageinstalled'] = 'Plugin-Paket (%d Plugin(s): %s) erfolgreich installiert.';
diff --git a/lib/plugins/plugin/lang/en/admin_plugin.txt b/lib/plugins/plugin/lang/en/admin_plugin.txt
deleted file mode 100644
index cb23b1e02..000000000
--- a/lib/plugins/plugin/lang/en/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Plugin Management ======
-
-On this page you can manage everything to do with Dokuwiki [[doku>plugins|plugins]]. To be able to download and install a plugin your plugin folder must be writeable by the webserver.
-
-
diff --git a/lib/plugins/plugin/lang/en/lang.php b/lib/plugins/plugin/lang/en/lang.php
deleted file mode 100644
index 87570a708..000000000
--- a/lib/plugins/plugin/lang/en/lang.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * english language file
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Christopher Smith <chris@jalakai.co.uk>
- */
-
-$lang['menu'] = 'Manage Plugins';
-
-// custom language strings for the plugin
-$lang['download'] = "Download and install a new plugin";
-$lang['manage'] = "Installed Plugins";
-
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'update';
-$lang['btn_delete'] = 'delete';
-$lang['btn_settings'] = 'settings';
-$lang['btn_download'] = 'Download';
-$lang['btn_enable'] = 'Save';
-
-$lang['url'] = 'URL';
-
-$lang['installed'] = 'Installed:';
-$lang['lastupdate'] = 'Last updated:';
-$lang['source'] = 'Source:';
-$lang['unknown'] = 'unknown';
-
-// ..ing = header message
-// ..ed = success message
-
-$lang['updating'] = 'Updating ...';
-$lang['updated'] = 'Plugin %s updated successfully';
-$lang['updates'] = 'The following plugins have been updated successfully';
-$lang['update_none'] = 'No updates found.';
-
-$lang['deleting'] = 'Deleting ...';
-$lang['deleted'] = 'Plugin %s deleted.';
-
-$lang['downloading'] = 'Downloading ...';
-$lang['downloaded'] = 'Plugin %s installed successfully';
-$lang['downloads'] = 'The following plugins have been installed successfully:';
-$lang['download_none'] = 'No plugins found, or there has been an unknown problem during downloading and installing.';
-
-// info titles
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Components';
-$lang['noinfo'] = 'This plugin returned no information, it may be invalid.';
-$lang['name'] = 'Name:';
-$lang['date'] = 'Date:';
-$lang['type'] = 'Type:';
-$lang['desc'] = 'Description:';
-$lang['author'] = 'Author:';
-$lang['www'] = 'Web:';
-
-// error messages
-$lang['error'] = 'An unknown error occurred.';
-$lang['error_download'] = 'Unable to download the plugin file: %s';
-$lang['error_badurl'] = 'Suspect bad url - unable to determine file name from the url';
-$lang['error_dircreate'] = 'Unable to create temporary folder to receive download';
-$lang['error_decompress'] = 'The plugin manager was unable to decompress the downloaded file. '.
- 'This maybe as a result of a bad download, in which case you should try again; '.
- 'or the compression format may be unknown, in which case you will need to '.
- 'download and install the plugin manually.';
-$lang['error_copy'] = 'There was a file copy error while attempting to install files for plugin '.
- '<em>%s</em>: the disk could be full or file access permissions may be incorrect. '.
- 'This may have resulted in a partially installed plugin and leave your wiki '.
- 'installation unstable.';
-$lang['error_delete'] = 'There was an error while attempting to delete plugin <em>%s</em>. '.
- 'The most probably cause is insufficient file or directory access permissions';
-
-$lang['enabled'] = 'Plugin %s enabled.';
-$lang['notenabled'] = 'Plugin %s could not be enabled, check file permissions.';
-$lang['disabled'] = 'Plugin %s disabled.';
-$lang['notdisabled'] = 'Plugin %s could not be disabled, check file permissions.';
-$lang['packageinstalled'] = 'Plugin package (%d plugin(s): %s) successfully installed.';
-
-//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/plugin/lang/eo/admin_plugin.txt b/lib/plugins/plugin/lang/eo/admin_plugin.txt
deleted file mode 100644
index c97dddf56..000000000
--- a/lib/plugins/plugin/lang/eo/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Administrado de Kromaĵoj ======
-
-En tiu ĉi paĝo vi povas administri ĉion pri DokuWiki-aj [[doku>plugins|kromaĵoj]]. Por sukcesi elŝuti kaj instali kromaĵon, via dosierujo de kromaĵoj devas esti konservebla por la retservilo.
diff --git a/lib/plugins/plugin/lang/eo/lang.php b/lib/plugins/plugin/lang/eo/lang.php
deleted file mode 100644
index 624246a21..000000000
--- a/lib/plugins/plugin/lang/eo/lang.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Felipe Castro <fefcas@uol.com.br>
- * @author Felipe Castro <fefcas@gmail.com>
- * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
- * @author Felipo Kastro <fefcas@gmail.com>
- * @author Erik Pedersen <erik pedersen@shaw.ca>
- * @author Erik Pedersen <erik.pedersen@shaw.ca>
- * @author Robert BOGENSCHNEIDER <robog@gmx.de>
- * @author Robert Bogenschneider <bogi@uea.org>
- * @author Robert Bogenschneider <robog@gmx.de>
- */
-$lang['menu'] = 'Administri Kromaĵojn';
-$lang['download'] = 'Elŝuti kaj instali novan kromaĵon';
-$lang['manage'] = 'Instalitaj kromaĵoj';
-$lang['btn_info'] = 'Info';
-$lang['btn_update'] = 'Ĝisdatigo';
-$lang['btn_delete'] = 'Forigi';
-$lang['btn_settings'] = 'agordoj';
-$lang['btn_download'] = 'Elŝuti';
-$lang['btn_enable'] = 'Konservi';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalite:';
-$lang['lastupdate'] = 'Laste ĝisdatigite:';
-$lang['source'] = 'Fonto:';
-$lang['unknown'] = 'nekonate';
-$lang['updating'] = 'Ĝisdatiganta ...';
-$lang['updated'] = 'Kromaĵo %s estas sukcese ĝisdatigita';
-$lang['updates'] = 'Jenaj kromaĵoj estas sukcese ĝisdatigitaj';
-$lang['update_none'] = 'Neniu ĝisdatigo troviĝas.';
-$lang['deleting'] = 'Foriganta ...';
-$lang['deleted'] = 'Kromaĵo %s estas forigita.';
-$lang['downloading'] = 'Elŝutanta ...';
-$lang['downloaded'] = 'La kromaĵo %s estas sukcese instalita';
-$lang['downloads'] = 'Jenaj kromaĵoj estas sukcese instalitaj:';
-$lang['download_none'] = 'Neniu kromaĵo troveblas, aŭ eble okazis nekonata problemo dum elŝuto kaj instalo.';
-$lang['plugin'] = 'Kromaĵo:';
-$lang['components'] = 'Komponantoj';
-$lang['noinfo'] = 'Tiu ĉi kromaĵo liveris neniun informon: eble ĝi ne validas.';
-$lang['name'] = 'Nomo:';
-$lang['date'] = 'Dato:';
-$lang['type'] = 'Tipo:';
-$lang['desc'] = 'Priskribo:';
-$lang['author'] = 'Aŭtoro:';
-$lang['www'] = 'Retpaĝo:';
-$lang['error'] = 'Nekonata eraro okazis.';
-$lang['error_download'] = 'Maleblas elŝuti la kromaĵan dosieron: %s';
-$lang['error_badurl'] = 'Suspektinda malbona URL - maleblas difini la dosieran nomon el la URL';
-$lang['error_dircreate'] = 'Maleblas krei provizoran dosierujon por ricevi elŝutaĵon';
-$lang['error_decompress'] = 'La administrilo de kromaĵoj ne kapablis malkompakti la elŝutitan dosieron. Tio povas esti pro malkompleta elŝuto, tiaokaze provu refoje; aŭ eble la kompakta formato ne estas konata, tiaokaze elŝutu kaj instalu la kromaĵon permane.';
-$lang['error_copy'] = 'Okazis eraro de dosierkopio dum provo instali dosierojn por la kromaĵo <em>%s&</em>: la disko povus esti plenplena aŭ aliro-rajtoj povus esti misdifinitaj. Tio povus rezulti en malkomplete instalita kromaĵo kaj igi vian vikion malstabila.';
-$lang['error_delete'] = 'Okazis eraro dum provo forigi la kromaĵon <em>%s</em>. Verŝajne tio sekvas de nesufiĉa rajto por aliri la dosieron aŭ ties ujon.';
-$lang['enabled'] = 'La kromaĵo %s estas ebligita.';
-$lang['notenabled'] = 'La kromaĵo %s ne povis esti ebligita, kontrolu dosier-permesojn.';
-$lang['disabled'] = 'La kromaĵo %s estas malebligita.';
-$lang['notdisabled'] = 'La kromaĵo %s ne povis esti malebligita, kontrolu dosier-permesojn.';
-$lang['packageinstalled'] = 'Kromaĵa pakaĵo (%d kromaĵo(j): %s) sukcese instalita.';
diff --git a/lib/plugins/plugin/lang/es/admin_plugin.txt b/lib/plugins/plugin/lang/es/admin_plugin.txt
deleted file mode 100644
index 973789f03..000000000
--- a/lib/plugins/plugin/lang/es/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Administración de Plugin (agregados) ======
-
-En esta página tu puedes administrar todo lo que tenga que ver con los [[doku>plugins|plugins]] de Dokuwiki. Para poder descargar e instalar un plugin el usuario correspondiente al servidor de web debe poder escribir en el directorio de plugins.
diff --git a/lib/plugins/plugin/lang/es/lang.php b/lib/plugins/plugin/lang/es/lang.php
deleted file mode 100644
index 0ec39285b..000000000
--- a/lib/plugins/plugin/lang/es/lang.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Miguel Pagano <miguel.pagano@gmail.com>
- * @author Oscar M. Lage <r0sk10@gmail.com>
- * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
- * @author oliver@samera.com.py
- * @author Enrico Nicoletto <liverig@gmail.com>
- * @author Manuel Meco <manuel.meco@gmail.com>
- * @author VictorCastelan <victorcastelan@gmail.com>
- * @author Jordan Mero hack.jord@gmail.com
- * @author Felipe Martinez <metalmartinez@gmail.com>
- * @author Javier Aranda <internet@javierav.com>
- * @author Zerial <fernando@zerial.org>
- * @author Marvin Ortega <maty1206@maryanlinux.com>
- * @author Daniel Castro Alvarado <dancas2@gmail.com>
- * @author Fernando J. Gómez <fjgomez@gmail.com>
- * @author Victor Castelan <victorcastelan@gmail.com>
- * @author Mauro Javier Giamberardino <mgiamberardino@gmail.com>
- * @author emezeta <emezeta@infoprimo.com>
- * @author Oscar Ciudad <oscar@jacho.net>
- * @author Ruben Figols <ruben.figols@gmail.com>
- * @author Gerardo Zamudio <gerardo@gerardozamudio.net>
- * @author Mercè López mercelz@gmail.com
- */
-$lang['menu'] = 'Administración de Plugins';
-$lang['download'] = 'Descargar e instalar un nuevo plugin';
-$lang['manage'] = 'Plugins instalados';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'actualizar';
-$lang['btn_delete'] = 'borrar';
-$lang['btn_settings'] = 'configuraciones';
-$lang['btn_download'] = 'Descargar';
-$lang['btn_enable'] = 'Guardar';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalado:';
-$lang['lastupdate'] = 'Última actualización:';
-$lang['source'] = 'Origen:';
-$lang['unknown'] = 'desconocido';
-$lang['updating'] = 'Actualizando ...';
-$lang['updated'] = 'El plugin %s ha sido actualizado con éxito';
-$lang['updates'] = 'Los siguientes plugins han sido actualizados con éxito';
-$lang['update_none'] = 'No se encontraron actualizaciones.';
-$lang['deleting'] = 'Eliminando ...';
-$lang['deleted'] = 'El plugin %s ha sido eliminado.';
-$lang['downloading'] = 'Descargando ...';
-$lang['downloaded'] = 'El plugin %s ha sido instalado con éxito';
-$lang['downloads'] = 'Los siguientes plugins han sido instalados con éxito:';
-$lang['download_none'] = 'No se han encontrado plugins, o hubo algún problema durante la descarga o la instalación.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Componentes';
-$lang['noinfo'] = 'Este plugin no devolvió información, puede ser inválido.';
-$lang['name'] = 'Nombre:';
-$lang['date'] = 'Fecha:';
-$lang['type'] = 'Tipo:';
-$lang['desc'] = 'Descripción:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Ha ocurrido un error desconocido.';
-$lang['error_download'] = 'Incapaz de descargar el archivo del plugin: %s';
-$lang['error_badurl'] = 'Se sospecha que la URL es incorrecta - incapaz de determinar el nombre del archivo a partir de la URL.';
-$lang['error_dircreate'] = 'Incapaz de crear el directorio temporal para la descarga';
-$lang['error_decompress'] = 'El administrador de plugins fue incapaz de descomprimir el fichero descargado. Esto puede ser por una descarga errónea, en cuyo caso debieras intentar nuevamente; o el formato de compresión es desconocido, en este caso deberás descargar e instalar el plugin manualmente.';
-$lang['error_copy'] = 'Hubo un error al copiar el fichero mientras se intentaban instalar ficheros para el plugin <em>%s</em>: el disco puede estar lleno o los permisos del fichero pueden ser incorrectos. Esto puede haber terminado con una instalación parcial del plugin y haber dejado la instalación del wiki en una situación inestable';
-$lang['error_delete'] = 'Hubo un error al intentar eliminar el plugin <em>%s</em>. La causa más probable es que no se cuente con los permisos necesarios en el fichero o en el directorio';
-$lang['enabled'] = 'Plugin %s habilitado.';
-$lang['notenabled'] = 'Plugin %s no puede ser habilitado, verifica los permisos del archivo.';
-$lang['disabled'] = 'Plugin %s deshabilitado.';
-$lang['notdisabled'] = 'Plugin %s no puede ser deshabilitado, verifica los permisos de archivo.';
-$lang['packageinstalled'] = 'Plugin (%d plugin(s): %s) instalado exitosamente.';
diff --git a/lib/plugins/plugin/lang/et/lang.php b/lib/plugins/plugin/lang/et/lang.php
deleted file mode 100644
index 088acf39b..000000000
--- a/lib/plugins/plugin/lang/et/lang.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-/**
- * Estonian language file
- *
- * @author kristian.kankainen@kuu.la
- * @author Rivo Zängov <eraser@eraser.ee>
- */
-$lang['manage'] = 'Paigaldatud pluginad';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'uuenda';
-$lang['btn_delete'] = 'kustuta';
-$lang['btn_settings'] = 'seaded';
-$lang['btn_download'] = 'Lae alla';
-$lang['btn_enable'] = 'Salvesta';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Paigaldatud:';
-$lang['lastupdate'] = 'Viimati uuendatud:';
-$lang['source'] = 'Allikas:';
-$lang['unknown'] = 'tundmatu';
-$lang['updating'] = 'Uuendamine ...';
-$lang['update_none'] = 'Uuendusi ei leitud.';
-$lang['deleting'] = 'Kustutamine ...';
-$lang['deleted'] = 'Plugin %s on kustutatud.';
-$lang['downloading'] = 'Allalaadimine ...';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Komponendid';
-$lang['name'] = 'Nimi:';
-$lang['date'] = 'Kuupäev';
-$lang['type'] = 'Tüüp:';
-$lang['desc'] = 'Kirjeldus:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Veeb:';
diff --git a/lib/plugins/plugin/lang/eu/admin_plugin.txt b/lib/plugins/plugin/lang/eu/admin_plugin.txt
deleted file mode 100644
index 367cf37ee..000000000
--- a/lib/plugins/plugin/lang/eu/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Plugin Kudeaketa ======
-
-Orri honetan Dokuwiki [[doku>plugins|plugin-ekin]] erlazionatutako edozer kudeatu dezakezu. Plugin-en bat deskargatu eta instalatu ahal izateko, plugin-en direktorioak web zerbitzariarengatik idazgarria izan behar du.
diff --git a/lib/plugins/plugin/lang/eu/lang.php b/lib/plugins/plugin/lang/eu/lang.php
deleted file mode 100644
index 2fc07fef9..000000000
--- a/lib/plugins/plugin/lang/eu/lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Basque language file
- *
- * @author Inko Illarramendi <inko.i.a@gmail.com>
- * @author Zigor Astarbe <astarbe@gmail.com>
- */
-$lang['menu'] = 'Plugin-ak Kudeatu';
-$lang['download'] = 'Plugin berri bat deskargatu eta instalatu';
-$lang['manage'] = 'Instalatutako Plugin-ak';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'eguneratu';
-$lang['btn_delete'] = 'ezabatu';
-$lang['btn_settings'] = 'ezarpenak';
-$lang['btn_download'] = 'Deskargatu';
-$lang['btn_enable'] = 'Gorde';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalatua:';
-$lang['lastupdate'] = 'Azken aldiz eguneratua:';
-$lang['source'] = 'Iturria:';
-$lang['unknown'] = 'ezezaguna';
-$lang['updating'] = 'Eguneratzen ...';
-$lang['updated'] = 'Arrakastaz eguneratu da %s plugin-a';
-$lang['updates'] = 'Ondorengo plugin-ak ondo eguneratu dira';
-$lang['update_none'] = 'Ez da eguneraketarik aurkitu.';
-$lang['deleting'] = 'Ezabatzen ...';
-$lang['deleted'] = '%s plugin-a ezabatua.';
-$lang['downloading'] = 'Deskargatzen ...';
-$lang['downloaded'] = '%s Plugin-a arrakastaz instalatua';
-$lang['downloads'] = 'Ondorengo plugin-ak arrakastaz instalatu dira:';
-$lang['download_none'] = 'Ez da plugin-ik aurkitu, edo arazo ezezagunen bat egon da deskargatu eta instalatzerako garaian.';
-$lang['plugin'] = 'Plugin-a:';
-$lang['components'] = 'Osagaiak';
-$lang['noinfo'] = 'Plugin honek ez du informaziorik itzuli, agian ez da erabilgarria.';
-$lang['name'] = 'izena:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Mota:';
-$lang['desc'] = 'Deskribapena:';
-$lang['author'] = 'Egilea:';
-$lang['www'] = 'Web-gunea:';
-$lang['error'] = 'Akats ezezagun bat gertatu da.';
-$lang['error_download'] = 'Ezin izan da plugin-aren honako fitxategia deskargatu: %s';
-$lang['error_badurl'] = 'Ustezko url okerra - ezin izan da fitxategi izena url-tik zehaztu';
-$lang['error_dircreate'] = 'Ezin izan da aldiroko karpeta sortu deskarga jasotzeko';
-$lang['error_decompress'] = 'Plugin kudeatzaileak ezin izan du deskargatutako fitxategia erauzi. Deskarga oker baten ondorioa izan daiteke, eta hala bada berriz saiatu beharko zenuke; edo agian trinkotze formatua ezezaguna da, hala izanik plugin-a eskuz deskargatu eta instalatu beharko zenuelarik.';
-$lang['error_copy'] = 'Fitxategi kopia akats bat egon da <em>%s</em> plugin-arentzat fitxategiak instalatzen saiatzean: diska betea egon liteke edo fitxategi atzipen baimena okerra izan daiteke. Honek partzialki instalatutako plugin bat eta wiki instalazioa ezegonkor utzi dezake.';
-$lang['error_delete'] = 'Akats bat gertatu da <em>%s</em> plugin-a ezabatzeko saiakera egitean. Arrazoia ziurrenik fitxategi edo direktorio atzipen baimen nahikoak ez izatea da.';
-$lang['enabled'] = '%s Plugin-a gaitua.';
-$lang['notenabled'] = '%s Plugin-a ezin izan da gaitu, egiaztatu fitxategi baimenak.';
-$lang['disabled'] = '%s Plugin-a ezgaitua.';
-$lang['notdisabled'] = '%s Plugin-a ezin izan da ezgaitu, egiaztatu fitxategi baimenak. ';
-$lang['packageinstalled'] = 'Plugin paketea (%d plugin(s): %s) arrakastaz instalatua izan da.';
diff --git a/lib/plugins/plugin/lang/fa/admin_plugin.txt b/lib/plugins/plugin/lang/fa/admin_plugin.txt
deleted file mode 100644
index cd11fb460..000000000
--- a/lib/plugins/plugin/lang/fa/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== مدیریت افزونه‌ها ======
-
-در این صفحه شما می‌توانید [[doku>plugins|افزونه‌های]] Dokuwiki را مدیریت کنید. برای امکان دریافت و نصب افزونه‌ها، باید به شاخه‌ی افزونه‌ها (lib/plugin) دسترسی نوشتن برای وب‌سرور را محیا کنید. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/fa/lang.php b/lib/plugins/plugin/lang/fa/lang.php
deleted file mode 100644
index 0a8fadb3c..000000000
--- a/lib/plugins/plugin/lang/fa/lang.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author behrad eslamifar <behrad_es@yahoo.com)
- * @author Mohsen Firoozmandan <info@mambolearn.com>
- * @author omidmr@gmail.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>
- */
-$lang['menu'] = 'مدیریت افزونه‌ها';
-$lang['download'] = 'دریافت و نصب افزونه';
-$lang['manage'] = 'افزونه‌های نصب شده';
-$lang['btn_info'] = 'مشخصات';
-$lang['btn_update'] = 'بروزرسانی';
-$lang['btn_delete'] = 'حذف';
-$lang['btn_settings'] = 'تنظیمات';
-$lang['btn_download'] = 'دانلود';
-$lang['btn_enable'] = 'ذخیره';
-$lang['url'] = 'آدرس';
-$lang['installed'] = 'نصب شده:';
-$lang['lastupdate'] = 'آخرین بروزرسانی:';
-$lang['source'] = 'منبع:';
-$lang['unknown'] = 'ناشناس';
-$lang['updating'] = 'در حال به روز رسانی...';
-$lang['updated'] = 'افزونه‌ی %s با موفقیت به روز رسانی شد';
-$lang['updates'] = 'افزونه‌های زیر با موفقیت به روز رسانی شده است.';
-$lang['update_none'] = 'به روز رسانی‌ای یافت نشد .';
-$lang['deleting'] = 'در حال حذف...';
-$lang['deleted'] = 'افزونه‌ی %s پاک شد.';
-$lang['downloading'] = 'در حال دریافت...';
-$lang['downloaded'] = 'افزونه‌ی %s با موفقیت نصب شد';
-$lang['downloads'] = 'افزونه‌های زیر با موفقیت نصب شدند:';
-$lang['download_none'] = 'هیچ افزونه‌ای یافت نشد، یا یک مشکل ناشناخته در زمان دریافت و نصب پیش آمده است.';
-$lang['plugin'] = 'افزونه:';
-$lang['components'] = 'کامپوننت';
-$lang['noinfo'] = 'این افزونه هیچ اطلاعاتی را برنگردانده است، ممکن است بی‌اعتبار باشد.';
-$lang['name'] = 'اسم:';
-$lang['date'] = 'تاریخ:';
-$lang['type'] = 'نوع:';
-$lang['desc'] = 'توضیحات:';
-$lang['author'] = 'نویسنده:';
-$lang['www'] = 'وب‌سایت:';
-$lang['error'] = 'یک مشکل ناشناخته پیش آمده.';
-$lang['error_download'] = 'توانایی دریافت افزونه‌ی %s نمی‌باشد.';
-$lang['error_badurl'] = 'آدرس مشکل دارد - توانایی تشخیص نام فایل از آدرس وجود ندارد';
-$lang['error_dircreate'] = 'امکان ایجاد شاخه‌ی موقتی برای دریافت فایل نیست.';
-$lang['error_decompress'] = 'باز کردن فایل با مشکل مواجه شد. این اشکال ممکن است به خاطر دریافت ناقصِ فایل باشد که باید دوباره تلاش کنید، یا فرمت فشرده‌سازی شناخته شده نیست، که باید این افزونه رو دستی نصب کنید.';
-$lang['error_copy'] = 'توانایی کپی کردن فایل‌های افزونه‌ی <em>%s</em> در زمان نصب وجود ندارد. ممکن است دسترسی شاخه‌ی افزونه‌ها مشکل داشته باشد. این مشکل ممکن است باعث نصب ناقص افزونه شود و ویکی را با مشکل مواجه کند.';
-$lang['error_delete'] = 'توانایی حذف افزونه‌ی <em>%s</em> وجود ندارد. این مشکل به خاطر دسترسی فایل یا شاخه‌ی افزونه پیش می‌آید.';
-$lang['enabled'] = 'افزونه‌ی %s فعال شد.';
-$lang['notenabled'] = 'افزونه‌ی %s قابلیت فعال کردن ندارد، دسترسی‌ها را چک کنید.';
-$lang['disabled'] = 'افزونه‌ی %s غیرفعال شد.';
-$lang['notdisabled'] = 'افزونه‌ی %s قابلیت غیرفعال کردن ندارد، دسترسی‌ها را چک کنید.';
-$lang['packageinstalled'] = 'بسته افزونه (%d افزونه: %s) به درستی نصب شد.';
diff --git a/lib/plugins/plugin/lang/fi/admin_plugin.txt b/lib/plugins/plugin/lang/fi/admin_plugin.txt
deleted file mode 100644
index 9cdfa1c11..000000000
--- a/lib/plugins/plugin/lang/fi/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Liitännäisten hallinta ======
-
-Tällä sivulla voit hallita DokuWikin [[doku>plugins|liitännäisiä]]. Voidaksesi ladata ja asentaa liitännäisiä pitää web-palvelimella olla kirjoitusoikeudet plugin hakemistoon.
diff --git a/lib/plugins/plugin/lang/fi/lang.php b/lib/plugins/plugin/lang/fi/lang.php
deleted file mode 100644
index f51746faa..000000000
--- a/lib/plugins/plugin/lang/fi/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author otto@valjakko.net
- * @author Otto Vainio <otto@valjakko.net>
- * @author Teemu Mattila <ghcsystems@gmail.com>
- * @author Sami Olmari <sami@olmari.fi>
- */
-$lang['menu'] = 'Ylläpidä liitännäisiä';
-$lang['download'] = 'Lataa ja asenna uusi liitännäinen';
-$lang['manage'] = 'Asennetut liitännäiset';
-$lang['btn_info'] = 'tietoa';
-$lang['btn_update'] = 'päivitä';
-$lang['btn_delete'] = 'poista';
-$lang['btn_settings'] = 'asetukset';
-$lang['btn_download'] = 'Lataa';
-$lang['btn_enable'] = 'Tallenna';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Asennettu:';
-$lang['lastupdate'] = 'Päivitetty viimeksi:';
-$lang['source'] = 'Lähde:';
-$lang['unknown'] = 'tuntematon';
-$lang['updating'] = 'Päivitetään ...';
-$lang['updated'] = 'Liitännäinen %s päivitetty onnistuneesti';
-$lang['updates'] = 'Seuraavat liitännäiset on päivitetty onnistuneesti';
-$lang['update_none'] = 'Päivityksiä ei löytynyt';
-$lang['deleting'] = 'Poistetaan ...';
-$lang['deleted'] = 'Liitännäinen %s poistettu.';
-$lang['downloading'] = 'Ladataan ...';
-$lang['downloaded'] = 'Liitännäinen %s asennettu onnistuneesti';
-$lang['downloads'] = 'Seuraavat liitännäiset on asennettu onnistuneesti';
-$lang['download_none'] = 'Liitännäisiä ei löytynyt tai on tapahtunut joku tuntematon virhe latauksen ja asennuksen aikana.';
-$lang['plugin'] = 'Liitännäinen:';
-$lang['components'] = 'Osa';
-$lang['noinfo'] = 'Liitännäinen ei palauttanut mitään tietoa ja se voi olla epäkelpo.';
-$lang['name'] = 'Nimi:';
-$lang['date'] = 'Päiväys:';
-$lang['type'] = 'Tyyppi:';
-$lang['desc'] = 'Kuvaus:';
-$lang['author'] = 'Tekijä:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Tapahtui tuntematon virhe.';
-$lang['error_download'] = 'Liitännäistiedoston %s latauksessa tapahtui tuntematon virhe.';
-$lang['error_badurl'] = 'URL vaikuttaa olleen virheellinen. Siitä ei pystytty päättelemään tiedoston nimeä';
-$lang['error_dircreate'] = 'Ei pystytty luomaan väliaikaista hakemistoa latausta varten';
-$lang['error_decompress'] = 'Liitännäishallinta ei pystynyt purkamaan ladattua tiedostoa. Lataus voi olla epäonnistunut. Siinä tapauksessa voit yrittää uudestaan. Pakkaustapa voi myös olla tuntematon. Siinä tapauksessa sinun pitää ladata ja asentaa liitännäinen käsin.';
-$lang['error_copy'] = 'Tiedoston kopioinnissa tapahtui liitännäisen <em>%s</em> asennuksen aikana virhe. Levy voi olla täynnä tai kansioiden oikeudet voivat olla väärin. Liitännäinen voi olla osittain asennettu ja tämä voi jättää wikiasennukseesi epävakaaseen tilaan.';
-$lang['error_delete'] = 'Liitännäisen <em>%s</em> poistossa tapahtui virhe. Todennäköisin syy on puutteelliset tiedoston tai hakemiston oikeudet';
-$lang['enabled'] = 'Liitännäinen %s käytössä';
-$lang['notenabled'] = 'Liitännäistä %s ei voitu ottaa käyttöön. Tarkista tiedostojen oikeudet.';
-$lang['disabled'] = 'Liitännäinen %s pois käytössä';
-$lang['notdisabled'] = 'Liitännäistä %s ei voitu ottaa pois käytöstä. Tarkista tiedostojen oikeudet.';
-$lang['packageinstalled'] = 'Pluginpaketti (%d plugin: %s:) asennettu onnistuneesti.';
diff --git a/lib/plugins/plugin/lang/gl/admin_plugin.txt b/lib/plugins/plugin/lang/gl/admin_plugin.txt
deleted file mode 100644
index 216285a8d..000000000
--- a/lib/plugins/plugin/lang/gl/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Xestión de Extensións ======
-
-Nesta páxina podes xestionar todas as accións posíbeis cos [[doku>plugins|extensións]] do DokuWiki. Para poder descargar e instalar unha extensión, o teu cartafol de extensións debe ser escribíbel polo servidor web.
diff --git a/lib/plugins/plugin/lang/gl/lang.php b/lib/plugins/plugin/lang/gl/lang.php
deleted file mode 100644
index b3da44096..000000000
--- a/lib/plugins/plugin/lang/gl/lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * Galicianlanguage file
- *
- * @author Medúlio <medulio@ciberirmandade.org>
- * @author Oscar M. Lage <r0sk10@gmail.com>
- * @author Rodrigo Rega <rodrigorega@gmail.com>
- */
-$lang['menu'] = 'Xestionar Extensións';
-$lang['download'] = 'Descargar e instalar unha nova extensión';
-$lang['manage'] = 'Extensións Instalados';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'actualización';
-$lang['btn_delete'] = 'eliminar';
-$lang['btn_settings'] = 'configuración';
-$lang['btn_download'] = 'Descargar';
-$lang['btn_enable'] = 'Gardar';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalado:';
-$lang['lastupdate'] = 'Última actualización:';
-$lang['source'] = 'Fonte:';
-$lang['unknown'] = 'descoñecido';
-$lang['updating'] = 'Actualizando...';
-$lang['updated'] = 'Actualizouse correctamente a extensión %s';
-$lang['updates'] = 'Actualizáronse correctamente as seguintes extensións';
-$lang['update_none'] = 'Non se atoparon actualizacións.';
-$lang['deleting'] = 'Eliminando...';
-$lang['deleted'] = 'Eliminado a extensión %s.';
-$lang['downloading'] = 'Descargando...';
-$lang['downloaded'] = 'Instalouse correctamente a extensión %s';
-$lang['downloads'] = 'Instaláronse correctamente as seguintes extensións:';
-$lang['download_none'] = 'Non se atoparon extensións, ou aconteceu un problema descoñecido durante a descarga e instalación.';
-$lang['plugin'] = 'Extensión:';
-$lang['components'] = 'Compoñentes';
-$lang['noinfo'] = 'Esta extensión non devolveu información ningunha. Pode que non sexa válida.';
-$lang['name'] = 'Nome:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipo:';
-$lang['desc'] = 'Descrición:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Houbo un erro descoñecido.';
-$lang['error_download'] = 'Non se puido descargar o arquivo de extensión: %s';
-$lang['error_badurl'] = 'URL posiblemente incorrecto - non se puido determinar o nome do arquivo mediante o URL';
-$lang['error_dircreate'] = 'Non se puido crear un cartafol temporal para recibir a descarga';
-$lang['error_decompress'] = 'O xestor de extensións non foi quen de descomprimir o arquivo descargado. Isto podería ser causado por unha descarga corrupta, polo que, en tal caso, podes tentalo de novo; ou pode que o formato de compresión sexa descoñecido, co que precisarás descargar e instalar a extensión de xeito manual.';
-$lang['error_copy'] = 'Houbo un erro de copia de arquivo ao tentar instalar a extensión <em>%s</em>: pode que o disco estea cheo ou que os permisos de acceso sexan incorrectos. Isto podería dar lugar a unha instalación parcial da extensión e facer que a túa instalación do wiki se volva inestable.';
-$lang['error_delete'] = 'Houbo un erro ao tentar eliminar a extensión <em>%s</em>. O máis probable é que sexa causado por permisos de acceso ao arquivo ou directorio insuficientes.';
-$lang['enabled'] = 'Extensión %s activado.';
-$lang['notenabled'] = 'A extensión %s non puido ser activada, comproba os permisos de arquivo.';
-$lang['disabled'] = 'Extensión %s desactivada.';
-$lang['notdisabled'] = 'A extensión %s non puido ser desactivada, comproba os permisos de arquivo.';
-$lang['packageinstalled'] = 'Paquete de extensión (%d plugin(s): %s) instalado axeitadamente.';
diff --git a/lib/plugins/plugin/lang/he/admin_plugin.txt b/lib/plugins/plugin/lang/he/admin_plugin.txt
deleted file mode 100644
index 206d368db..000000000
--- a/lib/plugins/plugin/lang/he/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== ניהול הרחבות ======
-
-בדף זה ניתן לנהל כל דבר הקשור ל[[doku>plugins|הרחבות]] של DokuWiki. כדי שניתן יהיה להוריד ולהתקין הרחבה על תיקית ה-plugins שלך להיות ברת כתיבה על ידי שרת הרשת.
-
-
diff --git a/lib/plugins/plugin/lang/he/lang.php b/lib/plugins/plugin/lang/he/lang.php
deleted file mode 100644
index 7753c23cf..000000000
--- a/lib/plugins/plugin/lang/he/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author DoK <kamberd@yahoo.com>
- * @author Dotan Kamber <kamberd@yahoo.com>
- * @author Moshe Kaplan <mokplan@gmail.com>
- * @author Yaron Yogev <yaronyogev@gmail.com>
- * @author Yaron Shahrabani <sh.yaron@gmail.com>
- */
-$lang['menu'] = 'ניהול הרחבות';
-$lang['download'] = 'הורדת והתקנת הרחבה חדשה';
-$lang['manage'] = 'הרחבות מותקנות';
-$lang['btn_info'] = 'מידע';
-$lang['btn_update'] = 'עידכון';
-$lang['btn_delete'] = 'מחיקה';
-$lang['btn_settings'] = 'הגדרות';
-$lang['btn_download'] = 'הורדה';
-$lang['btn_enable'] = 'שמירה';
-$lang['url'] = 'URL';
-$lang['installed'] = 'מותקנות:';
-$lang['lastupdate'] = 'עודכנו לאחרונה:';
-$lang['source'] = 'מקור:';
-$lang['unknown'] = 'לא ידוע';
-$lang['updating'] = 'מעדכן ...';
-$lang['updated'] = 'ההרחבה %s עודכנה בהצלחה';
-$lang['updates'] = 'ההרחבות הבאות עודכנו בהצלחה';
-$lang['update_none'] = 'לא נמצאו עידכונים.';
-$lang['deleting'] = 'מוחק ...';
-$lang['deleted'] = 'ההרחבה %s נמחקה.';
-$lang['downloading'] = 'מוריד ...';
-$lang['downloaded'] = 'ההרחבה %s הותקנה בהצלחה';
-$lang['downloads'] = 'ההרחבות הבאות הותקנו בהצלחה:';
-$lang['download_none'] = 'לא נמצאו הרחבות או שחלה בעיה בלתי ידועה במהלך ההורדה וההתקנה.';
-$lang['plugin'] = 'הרחבה:';
-$lang['components'] = 'רכיבים';
-$lang['noinfo'] = 'הרחבה זו לא השיבה מידע, יתכן כי היא אינה בתוקף.';
-$lang['name'] = 'שם:';
-$lang['date'] = 'תאריך:';
-$lang['type'] = 'סוג:';
-$lang['desc'] = 'תיאור:';
-$lang['author'] = 'מחבר:';
-$lang['www'] = 'רשת:';
-$lang['error'] = 'שגיאה לא ידועה ארעה.';
-$lang['error_download'] = 'כשל בהורדת קובץ ההרחבה: %s';
-$lang['error_badurl'] = 'כנראה כתובת שגויה - כשל בקביעת שם הקובץ מהכתובת';
-$lang['error_dircreate'] = 'כשל ביצירת תיקיה זמנית לקבלת ההורדה';
-$lang['error_decompress'] = 'מנהל ההרחבות כשל בפרישת הקובץ שהורד. יתכן כי זו תוצאה של הורדה תקולה ובמקרה זה עליך לנסות שנית; או שיתכן כי תסדיר הכיווץ אינו ידוע, במקרה זה יהיה עליך להוריד ולהתקין את ההרחבה ידנית.';
-$lang['error_copy'] = 'חלה שגיאה בהעתקת הקובץ בניסיון להתקין קבצים להרחבה <em>%s</em>: ייתכן כי הדיסק מלא או שהרשאות הגישה לקבצים שגויות. יתכן כי בשל כך נוצרה התקנה חלקית של ההרחבה שתשאיר את התקנת הויקי שלך לא יציבה.';
-$lang['error_delete'] = 'חלה שגיאה בעת ניסיון למחיקת ההרחבה <em>%s</em>. הסיבה הסבירה ביותר היא הרשאות גישה לקבצים ולספריות שאינן מספקות';
-$lang['enabled'] = 'תוסף %s מופעל.';
-$lang['notenabled'] = 'לא ניתן להפעיל את התוסף %s, בדוק הרשאות קבצים.';
-$lang['disabled'] = 'תוסף %s מושבת.';
-$lang['notdisabled'] = 'לא ניתן להשבית את התוסף %s, בדוק הרשאות קבצים.';
diff --git a/lib/plugins/plugin/lang/hi/lang.php b/lib/plugins/plugin/lang/hi/lang.php
deleted file mode 100644
index 89d27cee1..000000000
--- a/lib/plugins/plugin/lang/hi/lang.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
- * @author yndesai@gmail.com
- */
-$lang['unknown'] = 'अज्ञात';
-$lang['date'] = 'दिनांक:';
-$lang['author'] = 'लेखक:';
-$lang['error'] = 'अज्ञात त्रुटि हुइ';
diff --git a/lib/plugins/plugin/lang/hr/lang.php b/lib/plugins/plugin/lang/hr/lang.php
deleted file mode 100644
index 96f1d6afe..000000000
--- a/lib/plugins/plugin/lang/hr/lang.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * Croatian language file
- *
- * @author Branko Rihtman <theney@gmail.com>
- * @author Dražen Odobašić <dodobasic@gmail.com>
- * @author Dejan Igrec dejan.igrec@gmail.com
- */
diff --git a/lib/plugins/plugin/lang/hu/admin_plugin.txt b/lib/plugins/plugin/lang/hu/admin_plugin.txt
deleted file mode 100644
index cf4a3b316..000000000
--- a/lib/plugins/plugin/lang/hu/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Bővítménykezelő ======
-
-Ezen az oldalon a Dokuwiki [[doku>plugins|bővítményeivel]] kapcsolatos teendőket láthatod el. A webkiszolgálónak tudnia kell írni a //plugin// könyvtárba az új bővítmények letöltéséhez és telepítéséhez.
-
diff --git a/lib/plugins/plugin/lang/hu/lang.php b/lib/plugins/plugin/lang/hu/lang.php
deleted file mode 100644
index 7fb237a32..000000000
--- a/lib/plugins/plugin/lang/hu/lang.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
- * @author Siaynoq Mage <siaynoqmage@gmail.com>
- * @author schilling.janos@gmail.com
- * @author Szabó Dávid <szabo.david@gyumolcstarhely.hu>
- * @author Sándor TIHANYI <stihanyi+dw@gmail.com>
- * @author David Szabo <szabo.david@gyumolcstarhely.hu>
- * @author Marton Sebok <sebokmarton@gmail.com>
- * @author Marina Vladi <deldadam@gmail.com>
- */
-$lang['menu'] = 'Bővítménykezelő';
-$lang['download'] = 'Új bővítmény letöltése és telepítése';
-$lang['manage'] = 'Telepített bővítmények';
-$lang['btn_info'] = 'infó';
-$lang['btn_update'] = 'frissítés';
-$lang['btn_delete'] = 'törlés';
-$lang['btn_settings'] = 'beállítások';
-$lang['btn_download'] = 'Letöltés';
-$lang['btn_enable'] = 'Mentés';
-$lang['url'] = 'URL-cím';
-$lang['installed'] = 'Telepítve:';
-$lang['lastupdate'] = 'Utolsó frissítés:';
-$lang['source'] = 'Forrás:';
-$lang['unknown'] = 'ismeretlen';
-$lang['updating'] = 'Frissítés...';
-$lang['updated'] = 'A(z) %s bővítmény frissítése sikeres.';
-$lang['updates'] = 'A következő bővítmények frissítése sikeres:';
-$lang['update_none'] = 'Nem találtam újabb verziót.';
-$lang['deleting'] = 'Törlés...';
-$lang['deleted'] = 'A(z) %s bővítményt eltávolítva.';
-$lang['downloading'] = 'Letöltés...';
-$lang['downloaded'] = 'A(z) %s bővítmény telepítése sikeres.';
-$lang['downloads'] = 'A következő bővítmények telepítése sikeres.';
-$lang['download_none'] = 'Nem találtam bővítményt vagy ismeretlen hiba történt a letöltés/telepítés közben.';
-$lang['plugin'] = 'Bővítmény:';
-$lang['components'] = 'Részek';
-$lang['noinfo'] = 'Ez a bővítmény nem tartalmaz információt, lehet, hogy hibás.';
-$lang['name'] = 'Név:';
-$lang['date'] = 'Dátum:';
-$lang['type'] = 'Típus:';
-$lang['desc'] = 'Leírás:';
-$lang['author'] = 'Szerző:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Ismeretlen hiba lépett fel.';
-$lang['error_download'] = 'Nem tudom letölteni a fájlt a bővítményhez: %s';
-$lang['error_badurl'] = 'Feltehetően rossz URL - nem tudom meghatározni a fájlnevet az URL-ből.';
-$lang['error_dircreate'] = 'Nem tudom létrehozni az átmeneti könyvtárat a letöltéshez.';
-$lang['error_decompress'] = 'A Bővítménykezelő nem tudta a letöltött állományt kicsomagolni. Ennek oka lehet hibás letöltés, ebben az esetben újra letöltéssel próbálkozhatsz, esetleg a tömörítés módja ismeretlen, ebben az esetben kézzel kell letölteni és telepíteni a bővítményt.';
-$lang['error_copy'] = 'Fájl másolási hiba történt a(z) <em>%s</em> bővítmény telepítése közben: vagy a lemezterület fogyott el, vagy az állomány hozzáférési jogosultságai nem megfelelőek. Emiatt előfordulhat, hogy a bővítményt csak részben sikerült telepíteni és a wiki összeomolhat.';
-$lang['error_delete'] = 'Hiba történt a(z) <em>%s</em> bővítmény eltávolítása közben. A legvalószínűbb ok, hogy a könyvtár vagy állomány hozzáférési jogosultságai nem megfelelőek.';
-$lang['enabled'] = 'A(z) %s bővítmény bekapcsolva.';
-$lang['notenabled'] = 'A(z) %s bővítmény engedélyezése nem sikerült. Ellenőrizze a fájlhozzáférési jogosultságokat.';
-$lang['disabled'] = 'A(z) %s bővítmény kikapcsolva.';
-$lang['notdisabled'] = 'A(z) %s bővítmény kikapcsolása nem sikerült. Ellenőrizze a fájlhozzáférési jogosultságokat.';
-$lang['packageinstalled'] = 'A bővítménycsomag(ok) feltelepült(ek): %d plugin(s): %s';
diff --git a/lib/plugins/plugin/lang/ia/admin_plugin.txt b/lib/plugins/plugin/lang/ia/admin_plugin.txt
deleted file mode 100644
index c7f758c16..000000000
--- a/lib/plugins/plugin/lang/ia/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Gestion de plug-ins ======
-
-In iste pagina tu pote gerer omne cosas con relation al [[doku>plugins|plug-ins]] de DokuWiki. Pro poter discargar e installar un plug-in, le directorio de plug-ins debe permitter le accesso de scriptura al servitor web. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/ia/lang.php b/lib/plugins/plugin/lang/ia/lang.php
deleted file mode 100644
index 523f8581d..000000000
--- a/lib/plugins/plugin/lang/ia/lang.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Interlingua language file
- *
- * @author robocap <robocap1@gmail.com>
- * @author Martijn Dekker <martijn@inlv.org>
- */
-$lang['menu'] = 'Gestion de plug-ins';
-$lang['download'] = 'Discargar e installar un nove plug-in';
-$lang['manage'] = 'Plug-ins installate';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'actualisar';
-$lang['btn_delete'] = 'deler';
-$lang['btn_settings'] = 'configurationes';
-$lang['btn_download'] = 'Discargar';
-$lang['btn_enable'] = 'Salveguardar';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Installate:';
-$lang['lastupdate'] = 'Ultime actualisation:';
-$lang['source'] = 'Origine:';
-$lang['unknown'] = 'incognite';
-$lang['updating'] = 'Actualisation…';
-$lang['updated'] = 'Actualisation del plug-in %s succedite';
-$lang['updates'] = 'Le sequente plug-ins ha essite actualisate con successo';
-$lang['update_none'] = 'Nulle actualisation trovate.';
-$lang['deleting'] = 'Deletion…';
-$lang['deleted'] = 'Le plug-in %s ha essite delite.';
-$lang['downloading'] = 'Discargamento…';
-$lang['downloaded'] = 'Installation del plug-in %s succedite.';
-$lang['downloads'] = 'Le sequente plug-ins ha essite installate con successo:';
-$lang['download_none'] = 'Nulle plug-in trovate, o il ha occurrite un problema incognite durante le discargamento e installation.';
-$lang['plugin'] = 'Plug-in:';
-$lang['components'] = 'Componentes';
-$lang['noinfo'] = 'Iste plug-in retornava nulle information; illo pote esser invalide.';
-$lang['name'] = 'Nomine:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Typo:';
-$lang['desc'] = 'Description:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Un error incognite ha occurrite.';
-$lang['error_download'] = 'Impossibile discargar le file del plug-in: %s';
-$lang['error_badurl'] = 'URL probabilemente invalide; impossibile determinar le nomine del file ex le URL';
-$lang['error_dircreate'] = 'Impossibile crear le dossier temporari pro reciper le discargamento';
-$lang['error_decompress'] = 'Le gestor de plug-ins non poteva decomprimer le file discargate. Isto pote esser le resultato de un discargamento defectuose, in le qual caso tu deberea probar lo de novo; o le formato de compression pote esser incognite, in le qual caso tu debe discargar e installar le plug-in manualmente.';
-$lang['error_copy'] = 'Il occurreva un error durante le tentativa de installar files pro le plugin <em>%s</em>: le disco pote esser plen o le permissiones de accesso a files pote esser incorrecte. Isto pote haber resultate in un plug-in partialmente installate e lassar tu installation del wiki instabile.';
-$lang['error_delete'] = 'Il occurreva un error durante le tentativa de deler le plug-in <em>%s</em>. Le causa le plus probabile es insufficiente permissiones de files o directorios.';
-$lang['enabled'] = 'Plug-in %s activate.';
-$lang['notenabled'] = 'Le plug-in %s non poteva esser activate; verifica le permissiones de accesso a files.';
-$lang['disabled'] = 'Plug-in %s disactivate.';
-$lang['notdisabled'] = 'Le plug-in %s non poteva esser disactivate; verifica le permissiones de accesso a files.';
diff --git a/lib/plugins/plugin/lang/id-ni/lang.php b/lib/plugins/plugin/lang/id-ni/lang.php
deleted file mode 100644
index d367340b7..000000000
--- a/lib/plugins/plugin/lang/id-ni/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * idni language file
- *
- * @author Harefa <fidelis@harefa.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/plugin/lang/is/lang.php b/lib/plugins/plugin/lang/is/lang.php
deleted file mode 100644
index 0ef1243ef..000000000
--- a/lib/plugins/plugin/lang/is/lang.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Icelandic language file
- *
- * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
- * @author Ólafur Gunnlaugsson <oli@audiotools.com>
- * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
- */
-$lang['menu'] = 'Umsýsla viðbóta';
-$lang['download'] = 'Hlaða niður og innsetja viðbót';
-$lang['manage'] = 'Uppsettar viðbætur';
-$lang['btn_info'] = 'upplýsingar';
-$lang['btn_update'] = 'uppfæra';
-$lang['btn_delete'] = 'eyða';
-$lang['btn_settings'] = 'stillingar';
-$lang['btn_download'] = 'Niðurhal';
-$lang['btn_enable'] = 'Vista';
-$lang['url'] = 'Veffang';
-$lang['installed'] = 'Innsett:';
-$lang['lastupdate'] = 'Síðast uppfærð:';
-$lang['source'] = 'Gjafi:';
-$lang['unknown'] = 'óþekkt';
-$lang['updating'] = 'Uppfæri viðbót';
-$lang['updated'] = '%s viðbótin hefur verið uppfærð';
-$lang['updates'] = 'Eftirfarandi viðbætur hafa verið uppfærðar';
-$lang['update_none'] = 'Engar uppfærslur fundust.';
-$lang['deleting'] = 'Eyði viðbót';
-$lang['deleted'] = 'Viðbót %s eytt';
-$lang['downloading'] = 'Hleð viðbót niður ...';
-$lang['downloaded'] = 'Viðbót %s hlóðst inn';
-$lang['downloads'] = 'Eftirfarandi viðbótum hefur verið hlaðið inn:';
-$lang['download_none'] = 'Engin viðbót finnst, hugsanlega hefur komið upp villa við niðurhal eða uppsetningu.';
-$lang['plugin'] = 'Viðbót:';
-$lang['components'] = 'Einingar';
-$lang['noinfo'] = 'Þessi viðbót skilaði ekki upplýsingum og er hugsanlega ónýt.';
-$lang['name'] = 'Nafn:';
-$lang['date'] = 'Dagsetning:';
-$lang['type'] = 'Tegund:';
-$lang['desc'] = 'Lýsing:';
-$lang['author'] = 'Höfundur:';
-$lang['www'] = 'Vefur:';
-$lang['error'] = 'Óskilgreind villa';
-$lang['error_download'] = 'Niðurhal viðbótar %s mistókst';
-$lang['error_decompress'] = 'Viðbótastjórinn gat ekki afþjappað skránna. Þetta gæti verið vegna misheppnaðs niðurhals, ef svo er reyndu niðurhal aftur. Það er einnig mögulegt að skráin sé þjöppuð með aðferð sem að er Dokuwiki óþekkt, í því tilfelli er best að vista viðhengið á tölvunni þinni, afþjappa hana þar og svo hlaða skránum upp handvirkt.';
-$lang['enabled'] = 'Viðbót %s hefur verið ræst.';
-$lang['notenabled'] = 'Ekki var hægt að ræsa %s viðbótina. Athugaðu stillingar á skráaleyfum.';
-$lang['disabled'] = 'Viðbót %s var gerð óvirk';
diff --git a/lib/plugins/plugin/lang/it/admin_plugin.txt b/lib/plugins/plugin/lang/it/admin_plugin.txt
deleted file mode 100644
index 5591f08fe..000000000
--- a/lib/plugins/plugin/lang/it/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Gestione Plugin ======
-
-In questa pagina puoi gestire tutto ciò che riguarda i [[doku>plugins|plugin]] di DokuWiki. Per poter scaricare e installare un plugin, il webserver deve avere accesso in scrittura alla directory dei plugin. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/it/lang.php b/lib/plugins/plugin/lang/it/lang.php
deleted file mode 100644
index 186bf976e..000000000
--- a/lib/plugins/plugin/lang/it/lang.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Christopher Smith <chris@jalakai.co.uk>
- * @author Silvia Sargentoni <polinnia@tin.it>
- * @author Pietro Battiston toobaz@email.it
- * @author Diego Pierotto ita.translations@tiscali.it
- * @author ita.translations@tiscali.it
- * @author Lorenzo Breda <lbreda@gmail.com>
- * @author snarchio@alice.it
- * @author robocap <robocap1@gmail.com>
- * @author Osman Tekin osman.tekin93@hotmail.it
- * @author Jacopo Corbetta <jacopo.corbetta@gmail.com>
- * @author Matteo Pasotti <matteo@xquiet.eu>
- * @author snarchio@gmail.com
- */
-$lang['menu'] = 'Gestione Plugin';
-$lang['download'] = 'Scarica e installa un nuovo plugin';
-$lang['manage'] = 'Plugin installati';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'aggiorna';
-$lang['btn_delete'] = 'elimina';
-$lang['btn_settings'] = 'configurazione';
-$lang['btn_download'] = 'Scarica';
-$lang['btn_enable'] = 'Salva';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Installato:';
-$lang['lastupdate'] = 'Ultimo aggiornamento:';
-$lang['source'] = 'Origine:';
-$lang['unknown'] = 'sconosciuto';
-$lang['updating'] = 'Aggiornamento in corso ...';
-$lang['updated'] = 'Aggiornamento plugin %s riuscito';
-$lang['updates'] = 'Aggiornamento dei seguenti plugin riuscito:';
-$lang['update_none'] = 'Nessun aggiornamento trovato.';
-$lang['deleting'] = 'Eliminazione in corso ...';
-$lang['deleted'] = 'Plugin %s eliminato.';
-$lang['downloading'] = 'Scaricamento in corso ...';
-$lang['downloaded'] = 'Installazione plugin %s riuscita';
-$lang['downloads'] = 'Installazione dei seguenti plugin riuscita:';
-$lang['download_none'] = 'Nessun plugin trovato, oppure si è verificato un problema sconosciuto durante il download e l\'installazione.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Componenti';
-$lang['noinfo'] = 'Questo plugin non ha fornito alcuna informazione, potrebbe non essere valido.';
-$lang['name'] = 'Nome:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipo:';
-$lang['desc'] = 'Descrizione:';
-$lang['author'] = 'Autore:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Si è verificato un errore sconosciuto.';
-$lang['error_download'] = 'Impossibile scaricare il plugin: %s';
-$lang['error_badurl'] = 'Possibile URL non corretta - impossibile determinare il nome del file dalla URL fornita';
-$lang['error_dircreate'] = 'Impossibile creare la directory temporanea dove scaricare il file';
-$lang['error_decompress'] = 'Impossibile decomprimere il file scaricato. Questo potrebbe essere il risultato di un download incompleto, in tal caso dovresti provare di nuovo; oppure il formato di compressione potrebbe essere sconosciuto, in questo caso è necessario scaricare e installare il plugin manualmente.';
-$lang['error_copy'] = 'Si è verificato un errore nella copia di un file durante l\'installazione del plugin <em>%s</em>: il disco potrebbe essere pieno oppure i permessi di accesso al file potrebbero non essere corretti. Il plugin potrebbe essere stato installato solo parzialmente, questo potrebbe causare instabilità al sistema.';
-$lang['error_delete'] = 'Si è verificato un errore durante l\'eliminazione del plugin <em>%s</em>. Molto probabilmente i permessi di acesso ai file o alla directory non sono sufficienti';
-$lang['enabled'] = 'Plugin %s abilitato.';
-$lang['notenabled'] = 'Impossibile abilitare il plugin %s, verifica i permessi dei file.';
-$lang['disabled'] = 'Plugin %s disabilitato.';
-$lang['notdisabled'] = 'Impossibile disabilitare il plugin %s, verifica i permessi dei file.';
-$lang['packageinstalled'] = 'Pacchetto plugin (%d plugin(s): %s) installato con successo.';
diff --git a/lib/plugins/plugin/lang/ja/admin_plugin.txt b/lib/plugins/plugin/lang/ja/admin_plugin.txt
deleted file mode 100644
index c3b85351a..000000000
--- a/lib/plugins/plugin/lang/ja/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== プラグイン管理 ======
-
-この画面で、DokuWikiで使用するプラグイン [[doku>plugins|plugins]] の管理を行うことが出来ます。 プラグインをダウンロード・インストールするためには、サーバー内のプラグイン用フォルダーを 書き込み可にしておく必要があります。
-
-
diff --git a/lib/plugins/plugin/lang/ja/lang.php b/lib/plugins/plugin/lang/ja/lang.php
deleted file mode 100644
index d66e109ce..000000000
--- a/lib/plugins/plugin/lang/ja/lang.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Yuji Takenaka <webmaster@davilin.com>
- * @author Christopher Smith <chris@jalakai.co.uk>
- * @author Ikuo Obataya <i.obataya@gmail.com>
- * @author Daniel Dupriest <kououken@gmail.com>
- * @author Kazutaka Miyasaka <kazmiya@gmail.com>
- * @author Taisuke Shimamoto <dentostar@gmail.com>
- * @author Satoshi Sahara <sahara.satoshi@gmail.com>
- */
-$lang['menu'] = 'プラグイン管理';
-$lang['download'] = 'プラグインのダウンロードとインストール';
-$lang['manage'] = 'インストール済みプラグイン';
-$lang['btn_info'] = '情報';
-$lang['btn_update'] = '更新';
-$lang['btn_delete'] = '削除';
-$lang['btn_settings'] = '設定';
-$lang['btn_download'] = 'ダウンロード';
-$lang['btn_enable'] = '保存';
-$lang['url'] = 'URL';
-$lang['installed'] = 'インストール:';
-$lang['lastupdate'] = '最終更新日:';
-$lang['source'] = 'ソース:';
-$lang['unknown'] = '不明';
-$lang['updating'] = '更新中...';
-$lang['updated'] = 'プラグイン %s は更新されました';
-$lang['updates'] = '次のプラグインが更新されました:';
-$lang['update_none'] = 'プラグインの更新データはありません。';
-$lang['deleting'] = '削除中...';
-$lang['deleted'] = 'プラグイン %s は削除されました。';
-$lang['downloading'] = 'ダウンロード中...';
-$lang['downloaded'] = 'プラグイン %s がインストールされました';
-$lang['downloads'] = '次のプラグインがインストールされました:';
-$lang['download_none'] = 'プラグインが見つかりませんでした。もしくはダウンロードかインストールの最中に予期せぬエラーが発生しました。';
-$lang['plugin'] = 'プラグイン:';
-$lang['components'] = 'コンポーネント';
-$lang['noinfo'] = 'このプラグインに関する情報がありません。有効なプラグインではないかも知れません。';
-$lang['name'] = '名前:';
-$lang['date'] = '日付:';
-$lang['type'] = 'タイプ:';
-$lang['desc'] = '説明:';
-$lang['author'] = '作者:';
-$lang['www'] = 'ウェブサイト:';
-$lang['error'] = '予期せぬエラーが発生しました。';
-$lang['error_download'] = 'プラグインファイルをダウンロードできません:%s';
-$lang['error_badurl'] = 'URLが正しくないようです - ファイル名が特定できません';
-$lang['error_dircreate'] = 'ダウンロードしたファイルを一時的に保管しておくフォルダが作成できません';
-$lang['error_decompress'] = 'ダウンロードしたファイルを解凍できませんでした。ダウンロードに失敗した可能性があります(もう一度、実行してください);もしくは、不明な圧縮形式であるかもしれません(手動でインストールする必要があります)';
-$lang['error_copy'] = 'プラグインをインストール中にファイルのコピーに失敗しました。<em>%s</em>:ディスク容量や書き込みの権限を確認してください。このエラーによりプラグインのインストールが完全に行われず、Wikiが不安定な状態です。';
-$lang['error_delete'] = 'プラグインの削除中にエラーが発生しました <em>%s</em>。プラグインが不完全なファイルであったか、ディレクトリの権限が正しくないことが原因であると考えられます。';
-$lang['enabled'] = 'プラグイン %s が有効です。';
-$lang['notenabled'] = 'プラグイン %s を有効にすることができません。権限を確認してください。';
-$lang['disabled'] = 'プラグイン %s が無効です。';
-$lang['notdisabled'] = 'プラグイン %s を無効にすることができません。権限を確認してください。';
-$lang['packageinstalled'] = 'プラグインパッケージ(%d plugin(s): %s)は正しくインストールされました。';
diff --git a/lib/plugins/plugin/lang/kk/lang.php b/lib/plugins/plugin/lang/kk/lang.php
deleted file mode 100644
index dde5b9577..000000000
--- a/lib/plugins/plugin/lang/kk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * kazakh language file
- *
- * @author Nurgozha Kaliaskarov astana08@gmail.com
- */
diff --git a/lib/plugins/plugin/lang/ko/admin_plugin.txt b/lib/plugins/plugin/lang/ko/admin_plugin.txt
deleted file mode 100644
index 9390712dd..000000000
--- a/lib/plugins/plugin/lang/ko/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== 플러그인 관리 ======
-
-이 페이지에서 도쿠위키 [[doku>ko:plugins|플러그인]]에 관련된 모든 관리를 할 수 있습니다. 플러그인을 다운로드하고 설치하기 위해서는 웹 서버가 플러그인 폴더에 대해 쓰기 권한이 있어야 합니다. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/ko/lang.php b/lib/plugins/plugin/lang/ko/lang.php
deleted file mode 100644
index 4cd1ae3c7..000000000
--- a/lib/plugins/plugin/lang/ko/lang.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author jk Lee
- * @author dongnak@gmail.com
- * @author Song Younghwan <purluno@gmail.com>
- * @author Seung-Chul Yoo <dryoo@live.com>
- * @author erial2@gmail.com
- * @author Myeongjin <aranet100@gmail.com>
- * @author Garam <rowain8@gmail.com>
- */
-$lang['menu'] = '플러그인 관리';
-$lang['download'] = '새 플러그인을 다운로드하고 설치';
-$lang['manage'] = '설치된 플러그인';
-$lang['btn_info'] = '정보';
-$lang['btn_update'] = '업데이트';
-$lang['btn_delete'] = '삭제';
-$lang['btn_settings'] = '설정';
-$lang['btn_download'] = '다운로드';
-$lang['btn_enable'] = '저장';
-$lang['url'] = 'URL';
-$lang['installed'] = '설치됨:';
-$lang['lastupdate'] = '마지막으로 업데이트됨:';
-$lang['source'] = '원본:';
-$lang['unknown'] = '알 수 없음';
-$lang['updating'] = '업데이트 중 ...';
-$lang['updated'] = '%s 플러그인을 성공적으로 업데이트했습니다';
-$lang['updates'] = '다음 플러그인을 성공적으로 업데이트했습니다';
-$lang['update_none'] = '업데이트를 찾을 수 없습니다.';
-$lang['deleting'] = '삭제 중 ...';
-$lang['deleted'] = '%s 플러그인이 삭제되었습니다.';
-$lang['downloading'] = '다운로드 중 ...';
-$lang['downloaded'] = '%s 플러그인이 성공적으로 설치되었습니다';
-$lang['downloads'] = '다음 플러그인이 성공적으로 설치되었습니다:';
-$lang['download_none'] = '플러그인이 없거나 다운로드 또는 설치 중에 알 수 없는 문제가 발생했습니다.';
-$lang['plugin'] = '플러그인:';
-$lang['components'] = '구성 요소';
-$lang['noinfo'] = '이 플러그인은 어떤 정보도 없습니다. 잘못된 플러그인일 수 있습니다.';
-$lang['name'] = '이름:';
-$lang['date'] = '날짜:';
-$lang['type'] = '종류:';
-$lang['desc'] = '설명:';
-$lang['author'] = '저자:';
-$lang['www'] = '웹:';
-$lang['error'] = '알 수 없는 문제가 발생했습니다.';
-$lang['error_download'] = '플러그인 파일을 다운로드 할 수 없습니다: %s';
-$lang['error_badurl'] = '잘못된 URL 같습니다 - URL에서 파일 이름을 알 수 없습니다';
-$lang['error_dircreate'] = '다운로드를 받기 위한 임시 디렉터리를 만들 수 없습니다';
-$lang['error_decompress'] = '플러그인 관리자가 다운로드 받은 파일을 압축을 풀 수 없습니다. 잘못 다운로드 받았을 수도 있으니 다시 한 번 시도하거나 압축 포맷을 알 수 없는 경우에는 다운로드한 후 수동으로 직접 설치하세요.';
-$lang['error_copy'] = '플러그인을 설치하는 동안 파일 복사하는 데 오류가 발생했습니다. <em>%s</em>: 디스크가 꽉 찼거나 파일 접근 권한이 잘못된 경우입니다. 플러그인 설치가 부분적으로만 이루어졌을 것입니다. 설치가 불완전합니다.';
-$lang['error_delete'] = '<em>%s</em> 플러그인을 삭제하는 동안 오류가 발생했습니다. 대부분의 경우 불완전한 파일이거나 디렉터리 접근 권한이 잘못된 경우입니다';
-$lang['enabled'] = '%s 플러그인을 활성화했습니다.';
-$lang['notenabled'] = '%s 플러그인을 활성화할 수 없습니다. 파일 권한을 확인하세요.';
-$lang['disabled'] = '%s 플러그인을 비활성화했습니다.';
-$lang['notdisabled'] = '%s 플러그인을 비활성화할 수 없습니다. 파일 권한을 확인하하세요.';
-$lang['packageinstalled'] = '플러그인 패키지(플러그인 %d개: %s)가 성공적으로 설치되었습니다.';
diff --git a/lib/plugins/plugin/lang/la/admin_plugin.txt b/lib/plugins/plugin/lang/la/admin_plugin.txt
deleted file mode 100644
index 2a41977fc..000000000
--- a/lib/plugins/plugin/lang/la/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Addendorum Administratio ======
-
-In hac pagina omnia uicis [[doku>plugins|plugins]] mutare et administrare potes. Vt addenda capere et his uti, in scrinio addendorum scribere et legere potest. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/la/lang.php b/lib/plugins/plugin/lang/la/lang.php
deleted file mode 100644
index cd2d81cbd..000000000
--- a/lib/plugins/plugin/lang/la/lang.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Latin language file
- *
- * @author Massimiliano Vassalli <vassalli.max@gmail.com>
- */
-$lang['menu'] = 'Addendorum administratio';
-$lang['download'] = 'Noua addenda cape';
-$lang['manage'] = 'Addenta in usu';
-$lang['btn_info'] = 'Notae';
-$lang['btn_update'] = 'Nouare';
-$lang['btn_delete'] = 'Delere';
-$lang['btn_settings'] = 'Optiones';
-$lang['btn_download'] = 'Capere';
-$lang['btn_enable'] = 'Seruare';
-$lang['url'] = 'VRL';
-$lang['installed'] = 'In usu:';
-$lang['lastupdate'] = 'Extrema renouatio:';
-$lang['source'] = 'Fons:';
-$lang['unknown'] = 'Ignotum';
-$lang['updating'] = 'Nouans...';
-$lang['updated'] = 'Addenda %s nouata feliciter';
-$lang['updates'] = 'Hae addenda nouata feliciter sunt';
-$lang['update_none'] = 'Nulla renouatio inuenta';
-$lang['deleting'] = 'Delens...';
-$lang['deleted'] = 'Addenda %s deleta.';
-$lang['downloading'] = 'Capens ...';
-$lang['downloaded'] = 'Addenda %s recte in usu';
-$lang['downloads'] = 'Hae addenda feliciter in usu:';
-$lang['download_none'] = 'Nulla addenda reperta aut errores in capiendo sunt.';
-$lang['plugin'] = 'Addenda:';
-$lang['components'] = 'Partes';
-$lang['noinfo'] = 'Addenda alias notas non habent.';
-$lang['name'] = 'Nomen:';
-$lang['date'] = 'Dies:';
-$lang['type'] = 'Genus:';
-$lang['desc'] = 'Descriptio:';
-$lang['author'] = 'Auctor:';
-$lang['www'] = 'Situs interretialis:';
-$lang['error'] = 'Error ignotus.';
-$lang['error_download'] = 'Addenda quae non renouantur: %s';
-$lang['error_badurl'] = 'VRL malum';
-$lang['error_dircreate'] = 'Scrinium temporaneum non creatur, sic nihil capi potest';
-$lang['error_decompress'] = 'Addendorum administrator nouare non potest. Rursum capere nouationes temptat aut manu addenda noua.';
-$lang['error_copy'] = 'Exemplar malum in scrinio addendorum <em>%s</em> est: facultates documenti scrinique fortasse illegitimae sunt. Hic accidit cum addenda partim nouata sunt.';
-$lang['error_delete'] = 'Addenda <em>%s</em> non delentur.';
-$lang['enabled'] = 'Addenda %s apta facta.';
-$lang['notenabled'] = 'Addenda %s quae apta fieri non possunt.';
-$lang['disabled'] = 'Addenda %s non in usu.';
-$lang['notdisabled'] = 'Addenda %s quae inepta fieri non possunt.';
diff --git a/lib/plugins/plugin/lang/lb/admin_plugin.txt b/lib/plugins/plugin/lang/lb/admin_plugin.txt
deleted file mode 100644
index 223de10e8..000000000
--- a/lib/plugins/plugin/lang/lb/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Plugin Management ======
-
-Op dëser Säit kanns de alles verwalte wat mat Dokuwiki [[doku>plugins|Pluginen]] ze dinn huet. Fir e Plugin kënnen z'installéieren, muss däi Pluginverzeechnës vum Webserver schreiwbar sinn.
-
diff --git a/lib/plugins/plugin/lang/lb/lang.php b/lib/plugins/plugin/lang/lb/lang.php
deleted file mode 100644
index 59acdf7a8..000000000
--- a/lib/plugins/plugin/lang/lb/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * lb language file
- *
- * @author joel@schintgen.net
- */
diff --git a/lib/plugins/plugin/lang/lt/admin_plugin.txt b/lib/plugins/plugin/lang/lt/admin_plugin.txt
deleted file mode 100644
index 1254b776c..000000000
--- a/lib/plugins/plugin/lang/lt/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Priedų Administravimas ======
-
-Šiame puslapyje galite administruoti, darbui su Dokuwiki, reikalingu įrankius [[doku>plugins|plugins]]. Tam kad parsiųsti ir įdiegti kokį nors priedą jūsų web serveris privalo turėti įrašymo teises priedų kataloge.
diff --git a/lib/plugins/plugin/lang/lt/lang.php b/lib/plugins/plugin/lang/lt/lang.php
deleted file mode 100644
index c5b2fa11e..000000000
--- a/lib/plugins/plugin/lang/lt/lang.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * Lithuanian language file
- *
- * @author audrius.klevas@gmail.com
- * @author Arunas Vaitekunas <aras@fan.lt>
- */
-$lang['name'] = 'Vardas:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipas:';
-$lang['desc'] = 'Aprašas:';
-$lang['author'] = 'Autorius:';
-$lang['www'] = 'Tinklapis:';
diff --git a/lib/plugins/plugin/lang/lv/admin_plugin.txt b/lib/plugins/plugin/lang/lv/admin_plugin.txt
deleted file mode 100644
index 80335062f..000000000
--- a/lib/plugins/plugin/lang/lv/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Moduļu pārvaldīšana ======
-
-Šajā lapā varat pārvaldīt visu, kas saistīts ar Dokuwiki [[doku>plugins|moduļiem]]. Lai varētu lejupielādēt un uzstādīt moduļus, to direktorijai serverī vajag rakstīšanas tiesības.
diff --git a/lib/plugins/plugin/lang/lv/lang.php b/lib/plugins/plugin/lang/lv/lang.php
deleted file mode 100644
index 9a8727875..000000000
--- a/lib/plugins/plugin/lang/lv/lang.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Latvian, Lettish language file
- *
- * @author Aivars Miška <allefm@gmail.com>
- */
-$lang['menu'] = 'Moduļu pārvaldība';
-$lang['download'] = 'Lejupielādēt un instalēt jaunu moduli.';
-$lang['manage'] = 'Instalētie moduļi';
-$lang['btn_info'] = 'uzziņa';
-$lang['btn_update'] = 'atjaunināt';
-$lang['btn_delete'] = 'dzēst';
-$lang['btn_settings'] = 'parametri';
-$lang['btn_download'] = 'Lejupielādēt';
-$lang['btn_enable'] = 'Saglabāt';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalēts:';
-$lang['lastupdate'] = 'Atjaunināts:';
-$lang['source'] = 'Avots:';
-$lang['unknown'] = 'nav zināms';
-$lang['updating'] = 'Atjauninu...';
-$lang['updated'] = 'Modulis %s veiksmīgi atjaunināts';
-$lang['updates'] = 'Veiksmīgi atjaunināti moduļi:';
-$lang['update_none'] = 'Jauninājums nav atrasts';
-$lang['deleting'] = 'Dzēšu...';
-$lang['deleted'] = 'Modulis %s dzēsts';
-$lang['downloading'] = 'Lejupielādēju...';
-$lang['downloaded'] = 'Modulis %s veiksmīgi instalēts';
-$lang['downloads'] = 'Veiksmīgi instalēti moduļi: ';
-$lang['download_none'] = 'Neviens modulis nav atrasts vai arī gadījusies nezinām kļūme lejupielādes un instalācijas gaitā.';
-$lang['plugin'] = 'Modulis:';
-$lang['components'] = 'Sastāvdaļas';
-$lang['noinfo'] = 'Modulis nesniedz informāciju, tas varbūt ir bojāts.';
-$lang['name'] = 'Nosaukums:';
-$lang['date'] = 'Datums:';
-$lang['type'] = 'Tips:';
-$lang['desc'] = 'Apraksts:';
-$lang['author'] = 'Autors:';
-$lang['www'] = 'Mājaslapa:';
-$lang['error'] = 'Gadījās nezināma kļūme.';
-$lang['error_download'] = 'Nevar lejupielādēt moduļa failu %s';
-$lang['error_badurl'] = 'Aizdomas par aplamu URL - jo no tā nevar noteikt faila vārdu.';
-$lang['error_dircreate'] = 'Nevar izveidot pagaidu direktoriju, kur saglabāt lejupielādēto. ';
-$lang['error_decompress'] = 'Moduļu pārvaldnieks nevar atspiest lejupielādēto failu. Vai nu neizdevusi es lejupielāde, mēģiniet atkārtot, vai arī nezinām arhīva formāts un tad modulis jāielādē un jāinstalē tev pašam.';
-$lang['error_copy'] = 'Faila kopēšanas kļūda instalējot moduli<em>%s</em>: disks pārpildīts vai aplamas piekļuves tiesības. Rezultātā var iegūt daļēji instalētu moduli un nestabilu Wiki sistēmu.';
-$lang['error_delete'] = 'Kļūme dzēšot moduli <em>%s</em>. Ticamākais iemesls ir direktorijas pieejas tiesību trūkums. ';
-$lang['enabled'] = 'Modulis %s pieslēgts.';
-$lang['notenabled'] = 'Moduli %s nevar pieslēgt, pārbaudi failu tiesības.';
-$lang['disabled'] = 'Modulis %s atslēgts.';
-$lang['notdisabled'] = 'Moduli %s nevar atslēgt, pārbaudi failu tiesības.';
-$lang['packageinstalled'] = 'Moduļu paka (pavisam kopā %d: %s) veiksmīgi uzstādīti.';
diff --git a/lib/plugins/plugin/lang/mk/lang.php b/lib/plugins/plugin/lang/mk/lang.php
deleted file mode 100644
index 747d61638..000000000
--- a/lib/plugins/plugin/lang/mk/lang.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Macedonian language file
- *
- * @author Dimitar Talevski <dimi3.14@gmail.com>
- */
-$lang['menu'] = 'Уреди ги приклучоците';
-$lang['download'] = 'Симни и инсталирај нов приклучок';
-$lang['manage'] = 'Инсталирани приклучоци';
-$lang['btn_info'] = 'информации';
-$lang['btn_update'] = 'ажурирај';
-$lang['btn_delete'] = 'избриши';
-$lang['btn_settings'] = 'поставувања';
-$lang['btn_download'] = 'Симни';
-$lang['btn_enable'] = 'Зачувај';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Инсталирани:';
-$lang['lastupdate'] = 'Последно ажурирани:';
-$lang['source'] = 'Извор:';
-$lang['unknown'] = 'непознат';
-$lang['updating'] = 'Ажурирам...';
-$lang['updated'] = 'Приклучокот %s е успешно ажуриран';
-$lang['updates'] = 'Следниве приклучоци се успешно ажурирани';
-$lang['update_none'] = 'Нема потребни ажурирања.';
-$lang['deleting'] = 'Бришам...';
-$lang['deleted'] = 'Приклучокот %s е избришан.';
-$lang['downloading'] = 'Симнувам...';
-$lang['downloaded'] = 'Приклучокот %s е успешно инсталиран';
-$lang['downloads'] = 'Следниве приклучоци се успешно инсталирани';
-$lang['download_none'] = 'Нема пронајдени приклучоци, или имаше непознат проблем при симнување и инсталирање.';
-$lang['plugin'] = 'Приклучок:';
-$lang['components'] = 'Компоненти';
-$lang['noinfo'] = 'Овој приклучок не врати информации, може да не е валиден.';
-$lang['name'] = 'Име:';
-$lang['date'] = 'Датум:';
-$lang['type'] = 'Тип:';
-$lang['desc'] = 'Опис:';
-$lang['author'] = 'Автор:';
-$lang['www'] = 'Веб:';
-$lang['error'] = 'Се појави непозната грешка.';
-$lang['error_download'] = 'Не сум во можност да ја симнам датотеката за приклучокот: %s';
-$lang['enabled'] = 'Приклучокот %s е овозможен.';
-$lang['disabled'] = 'Приклучокот %s е оневозможен.';
diff --git a/lib/plugins/plugin/lang/mr/admin_plugin.txt b/lib/plugins/plugin/lang/mr/admin_plugin.txt
deleted file mode 100644
index a925a560f..000000000
--- a/lib/plugins/plugin/lang/mr/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== प्लगिन व्यवस्थापन ======
-
-या पानावर तुम्ही डॉक्युविकि [[doku>plugins|प्लगिन]] च्या सर्व बाबींची व्यवस्था लावू शकता.
-प्लगिन डाउनलोड व इन्स्टॉल करण्यासाठी तुमच्या प्लगिन फोल्डरवर तुमच्या वेबसर्वरला लेखनाची परवानगी असली पाहिजे. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/mr/lang.php b/lib/plugins/plugin/lang/mr/lang.php
deleted file mode 100644
index 3f81739fa..000000000
--- a/lib/plugins/plugin/lang/mr/lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * Marathi language file
- *
- * @author ghatothkach@hotmail.com
- * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
- * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
- * @author shantanoo@gmail.com
- */
-$lang['menu'] = 'प्लगिनची व्यवस्था लावा';
-$lang['download'] = 'नवीन प्लगिन डाउनलोड करून इन्स्टॉल करा';
-$lang['manage'] = 'इन्स्टॉल केलेले प्लगिन';
-$lang['btn_info'] = 'माहिती';
-$lang['btn_update'] = 'अद्ययावत';
-$lang['btn_delete'] = 'डिलीट';
-$lang['btn_settings'] = 'सेटिंग';
-$lang['btn_download'] = 'डाउनलोड';
-$lang['btn_enable'] = 'सुरक्षित';
-$lang['url'] = 'URL';
-$lang['installed'] = 'इन्स्टॉलची वेळ :';
-$lang['lastupdate'] = 'शेवटच्या बदलाची वेळ :';
-$lang['source'] = 'स्त्रोत :';
-$lang['unknown'] = 'अगम्य';
-$lang['updating'] = 'अद्ययावत करतोय ...';
-$lang['updated'] = 'प्लगिन %s यशास्विरित्य अद्ययावत केला.';
-$lang['updates'] = 'खालील प्लगिन यशस्वीरीत्या अद्ययावत झाले';
-$lang['update_none'] = 'काही बदल मिळाले नाहीत.';
-$lang['deleting'] = 'डिलीट करतोय ...';
-$lang['deleted'] = '%s प्लगिन डिलीट केला.';
-$lang['downloading'] = 'डाउनलोड करतोय ...';
-$lang['downloaded'] = '%s प्लगिन यशस्वीरीत्या इन्स्टॉल झाला.';
-$lang['downloads'] = 'खालील प्लगिन यशस्वीरीत्या इन्स्टॉल झाले : ';
-$lang['download_none'] = 'एकही प्लगिन मिळाला नाही, किंवा डाउनलोड आणि इन्स्टॉल मधे काही अज्ञात अडचण आली असावी.';
-$lang['plugin'] = 'प्लगिन : ';
-$lang['components'] = 'भाग : ';
-$lang['noinfo'] = 'या प्लगिनने काही माहिती दिली नाही. बहुधा हा अवैध असावा.';
-$lang['name'] = 'नाव :';
-$lang['date'] = 'दिनांक :';
-$lang['type'] = 'टाइप : ';
-$lang['desc'] = 'वर्णन : ';
-$lang['author'] = 'लेखक : ';
-$lang['www'] = 'वेब : ';
-$lang['error'] = 'अज्ञात अडचण आली.';
-$lang['error_download'] = 'डाउनलोड न झालेली प्लगिन फाइल : %s';
-$lang['error_badurl'] = 'बहुधा चुकीचे URL - URL वरून फाइलचे नाव ठरवता आले नाही.';
-$lang['error_dircreate'] = 'डाउनलोड साठवण्यासाठी तात्पुरता फोल्डर तयार करू शकलो नाही';
-$lang['error_decompress'] = 'प्लगिन व्यवस्थापक डाउनलोड केलेली फाइल विस्तारित करू शकला नाही. हे कदाचित डाउनलोड नीट न झाल्यामुळे असावं; असे असल्यास तुमची परत डाउनलोड करण्याचा प्रयत्न करू शकता; किंवा प्लगिन संक्षिप्त करण्यास वापरलेली पद्धत अनाकलनीय आहे; तसे असल्यास तुम्हाला स्वतः प्लगिन डाउनलोड व इन्स्टॉल करावा लागेल.';
-$lang['error_copy'] = '<em>%s</em> प्लगिनसाठी फाइल इन्स्टॉल करताना फाइल कॉपी करू शकलो नाही : डिस्क भरली असेल किंवा फाइल वरील परवानग्या बरोबर नसतील. यामुळे प्लगिन अर्धवट इन्स्टॉल जाला असण्याची व त्यामुळे तुमची विकी ख़राब होण्याची शक्यता आहे.';
-$lang['error_delete'] = '<em>%s</em> प्लगिन डिलीट करताना काही चूक झाली आहे. फाइल किंवा डिरेक्टरी वरील परवानग्या बरोबर नसणे हे याचं मुख्य कारण असू शकतं.';
-$lang['enabled'] = '%s प्लगइन चालू केला.';
-$lang['notenabled'] = '%s प्लगइन चालू करू शकलो नाही, फाइलच्या परवानग्या तपासा.';
-$lang['disabled'] = '%s प्लगइन बंद केला.';
-$lang['notdisabled'] = '%s प्लगइन बंद करू शकलो नाही, फाइलच्या परवानग्या तपासा.';
diff --git a/lib/plugins/plugin/lang/ms/lang.php b/lib/plugins/plugin/lang/ms/lang.php
deleted file mode 100644
index 77ad2a1c1..000000000
--- a/lib/plugins/plugin/lang/ms/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Malay language file
- *
- * @author Markos
- */
diff --git a/lib/plugins/plugin/lang/ne/lang.php b/lib/plugins/plugin/lang/ne/lang.php
deleted file mode 100644
index 94e7b8089..000000000
--- a/lib/plugins/plugin/lang/ne/lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
- * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
- * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
- */
-$lang['menu'] = 'प्लगिन व्यवस्थापन गर्नुहोस।';
-$lang['download'] = 'नयाँ प्लगिन डाउनलोड गरी स्थापना गर्नुहोस्';
-$lang['manage'] = 'स्थापित प्लगिनहरु';
-$lang['btn_info'] = 'जानकारी';
-$lang['btn_update'] = 'अध्यावधिक गर्नुहोस';
-$lang['btn_delete'] = 'मेटाउनुहोस्';
-$lang['btn_settings'] = 'व्यवस्थापन';
-$lang['btn_download'] = 'डाउनलोड गर्नुहोस्';
-$lang['btn_enable'] = 'वचत गर्नुहोस्';
-$lang['url'] = 'URL';
-$lang['installed'] = 'स्थापित';
-$lang['lastupdate'] = 'अन्तिम अध्यावधिक :';
-$lang['source'] = 'स्रोत:';
-$lang['unknown'] = 'थाह नभएको';
-$lang['updating'] = 'अध्यावधिक गर्दै......';
-$lang['updated'] = 'प्लगिन %s सफलतापूर्वक अध्यावधिक भयो ';
-$lang['updates'] = 'निम्न प्लगिनहरु सफलतापूर्वक अध्यावधिक भए।';
-$lang['update_none'] = 'कुनै पनि अध्यावधिकम भेटिएन ।';
-$lang['deleting'] = 'हटाउदै ......';
-$lang['deleted'] = 'प्लगिन %s हटाइयो ।';
-$lang['downloading'] = 'डाउनलोड गर्दै ........';
-$lang['downloaded'] = 'प्लगिन %s सफलतापूर्वक स्थापित भयो ';
-$lang['downloads'] = 'निम्न प्लगिनहरु सफलतापूर्वक स्थापित भए';
-$lang['download_none'] = 'कुनै पनि प्लगइन भेटिएन, या डाउनलोड गर्दा र स्थापना गर्दा त्रुटि भयो ।';
-$lang['plugin'] = 'प्लगिन:';
-$lang['components'] = 'पुर्जाहरु ';
-$lang['noinfo'] = 'यो प्लगइनले कुनै पनि जनाकारी दिएन , यो अमान्य हुनसक्छ ।';
-$lang['name'] = 'नाम:';
-$lang['date'] = 'मिति:';
-$lang['type'] = 'प्रकार :';
-$lang['desc'] = 'जानकारी:';
-$lang['author'] = 'जारीकर्ता:';
-$lang['www'] = 'वेब:';
-$lang['error'] = 'अज्ञात त्रुटि फेला पर्‌यो ।';
-$lang['error_download'] = 'प्लहइन फाइल: %s डाउनलोड गर्न असमर्थ ।';
-$lang['error_badurl'] = 'शंकास्पद खराब url - Url बाट फाइल नाम निश्चित गर्न असमर्थ ।';
-$lang['error_dircreate'] = 'डाउनलोड प्राप्त गर्नको निमि्त्त अस्थाइ फोल्डर निर्माण गर्न असमर्थ ।';
diff --git a/lib/plugins/plugin/lang/nl/admin_plugin.txt b/lib/plugins/plugin/lang/nl/admin_plugin.txt
deleted file mode 100644
index 36731b0b0..000000000
--- a/lib/plugins/plugin/lang/nl/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-===== Pluginmanager =====
-
-Op deze pagina kunt u alle DokuWiki [[doku>plugins|plugins]] beheren. Om plugins te kunnen downloaden en installeren, moet de plugin-directory schrijfbaar zijn voor de webserver. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/nl/lang.php b/lib/plugins/plugin/lang/nl/lang.php
deleted file mode 100644
index 2836c7030..000000000
--- a/lib/plugins/plugin/lang/nl/lang.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Wouter Schoot <wouter@schoot.org>
- * @author John de Graaff <john@de-graaff.net>
- * @author Niels Schoot <niels.schoot@quintiq.com>
- * @author Dion Nicolaas <dion@nicolaas.net>
- * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
- * @author Marijn Hofstra hofstra.m@gmail.com
- * @author Matthias Carchon webmaster@c-mattic.be
- * @author Marijn Hofstra <hofstra.m@gmail.com>
- * @author Timon Van Overveldt <timonvo@gmail.com>
- * @author Jeroen
- * @author Ricardo Guijt <ricardoguijt@gmail.com>
- * @author Gerrit <klapinklapin@gmail.com>
- * @author Remon <no@email.local>
- */
-$lang['menu'] = 'Plugins beheren';
-$lang['download'] = 'Download en installeer een nieuwe plugin';
-$lang['manage'] = 'Geïnstalleerde plugins';
-$lang['btn_info'] = 'informatie';
-$lang['btn_update'] = 'bijwerken';
-$lang['btn_delete'] = 'verwijderen';
-$lang['btn_settings'] = 'instellingen';
-$lang['btn_download'] = 'Download';
-$lang['btn_enable'] = 'Opslaan';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Geïnstalleerd:';
-$lang['lastupdate'] = 'Laatst bijgewerkt:';
-$lang['source'] = 'Bron:';
-$lang['unknown'] = 'onbekend';
-$lang['updating'] = 'Bijwerken ...';
-$lang['updated'] = 'Plugin %s succesvol bijgewerkt';
-$lang['updates'] = 'De volgende plugins zijn succesvol bijgewerkt';
-$lang['update_none'] = 'Geen updates gevonden.';
-$lang['deleting'] = 'Verwijderen ...';
-$lang['deleted'] = 'Plugin %s verwijderd.';
-$lang['downloading'] = 'Bezig met downloaden ...';
-$lang['downloaded'] = 'Plugin %s succesvol geïnstalleerd';
-$lang['downloads'] = 'De volgende plugins zijn succesvol geïnstalleerd:';
-$lang['download_none'] = 'Geen plugins gevonden, of er is een onbekende fout opgetreden tijdens het downloaden en installeren.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Onderdelen';
-$lang['noinfo'] = 'Deze plugin gaf geen informatie terug, misschien is hij defect.';
-$lang['name'] = 'Naam:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Type:';
-$lang['desc'] = 'Omschrijving:';
-$lang['author'] = 'Auteur:';
-$lang['www'] = 'Weblocatie:';
-$lang['error'] = 'Er is een onbekende fout opgetreden.';
-$lang['error_download'] = 'Kan het volgende plugin bestand niet downloaden: %s';
-$lang['error_badurl'] = 'Vermoedelijk onjuiste url - kan de bestandsnaam niet uit de url afleiden';
-$lang['error_dircreate'] = 'Kan geen tijdelijke directory aanmaken voor de download';
-$lang['error_decompress'] = 'De pluginmanager kan het gedownloade bestand niet uitpakken. Dit kan het resultaat zijn van een mislukte download: probeer het opnieuw; of het compressieformaat is onbekend: in dat geval moet je de plugin handmatig downloaden en installeren.';
-$lang['error_copy'] = 'Er was een probleem met het kopiëren van een bestand tijdens de installatie van plugin <em>%s</em>: de schijf kan vol zijn of onjuiste toegangsrechten hebben. Dit kan tot gevolg hebben dat de plugin slechts gedeeltelijk geïnstalleerd is en kan de wiki onstabiel maken.';
-$lang['error_delete'] = 'Er is een probleem opgetreden tijdens het verwijderen van plugin <em>%s</em>. De meest voorkomende oorzaak is onjuiste toegangsrechten op bestanden of directory\'s.';
-$lang['enabled'] = 'Plugin %s ingeschakeld.';
-$lang['notenabled'] = 'Plugin %s kon niet worden ingeschakeld, controleer bestandsrechten.';
-$lang['disabled'] = 'Plugin %s uitgeschakeld.';
-$lang['notdisabled'] = 'Plugin %s kon niet worden uitgeschakeld, controleer bestandsrechten.';
-$lang['packageinstalled'] = 'Plugin package (%d plugin(s): %s) succesvol geïnstalleerd.';
diff --git a/lib/plugins/plugin/lang/no/admin_plugin.txt b/lib/plugins/plugin/lang/no/admin_plugin.txt
deleted file mode 100644
index 1765b671d..000000000
--- a/lib/plugins/plugin/lang/no/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Behandle programtillegg ======
-
-På denne siden kan du behandle alt som har å gjøre med DokuWikis [[doku>plugins|tillegg]]. For å kunne laste ned og installere et tillegg må webserveren ha skrivetilgang til mappen for tillegg.
diff --git a/lib/plugins/plugin/lang/no/lang.php b/lib/plugins/plugin/lang/no/lang.php
deleted file mode 100644
index 2b890f972..000000000
--- a/lib/plugins/plugin/lang/no/lang.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Thomas Nygreen <nygreen@gmail.com>
- * @author Arild Burud <arildb@met.no>
- * @author Torkill Bruland <torkar-b@online.no>
- * @author Rune M. Andersen <rune.andersen@gmail.com>
- * @author Jakob Vad Nielsen (me@jakobnielsen.net)
- * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
- * @author Knut Staring <knutst@gmail.com>
- * @author Lisa Ditlefsen <lisa@vervesearch.com>
- * @author Erik Pedersen <erik.pedersen@shaw.ca>
- * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
- * @author Rune Rasmussen syntaxerror.no@gmail.com
- * @author Jon Bøe <jonmagneboe@hotmail.com>
- * @author Egil Hansen <egil@rosetta.no>
- */
-$lang['menu'] = 'Behandle programtillegg';
-$lang['download'] = 'Last ned og installer et programtillegg';
-$lang['manage'] = 'Installerte programtillegg';
-$lang['btn_info'] = 'informasjon';
-$lang['btn_update'] = 'oppdater';
-$lang['btn_delete'] = 'slett';
-$lang['btn_settings'] = 'innstillinger';
-$lang['btn_download'] = 'Last ned';
-$lang['btn_enable'] = 'Lagre';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Installert:';
-$lang['lastupdate'] = 'Sist oppdatert:';
-$lang['source'] = 'Kilde:';
-$lang['unknown'] = 'ukjent';
-$lang['updating'] = 'Oppdaterer ...';
-$lang['updated'] = 'Tillegget %s er oppdatert';
-$lang['updates'] = 'Følgende programtillegg har blitt oppdatert';
-$lang['update_none'] = 'Ingen oppdateringer funnet.';
-$lang['deleting'] = 'Sletter ...';
-$lang['deleted'] = 'Tillegget %s ble slettet.';
-$lang['downloading'] = 'Laster ned ...';
-$lang['downloaded'] = 'Tillegget %s ble installert';
-$lang['downloads'] = 'De følgende tilleggene ble installert';
-$lang['download_none'] = 'Ingen tillegg funnet, eller det har vært et ukjent problem under nedlasting og installering.';
-$lang['plugin'] = 'Tillegg:';
-$lang['components'] = 'Komponenter';
-$lang['noinfo'] = 'Tillegget ga ikke noe informasjon. Det kan være ugyldig.';
-$lang['name'] = 'Navn:';
-$lang['date'] = 'Dato:';
-$lang['type'] = 'Type:';
-$lang['desc'] = 'Beskrivelse:';
-$lang['author'] = 'Forfatter:';
-$lang['www'] = 'Nett:';
-$lang['error'] = 'En ukjent feil oppstod.';
-$lang['error_download'] = 'Klarte ikke å laste ned tillegget i filen: %s';
-$lang['error_badurl'] = 'Mistenker feil URL - klarte ikke å finne filnavnet i URLen';
-$lang['error_dircreate'] = 'Klarte ikke å lage en midlertidig mappe for å laste ned';
-$lang['error_decompress'] = 'Tilleggsbehandleren klarte ikke å dekomprimere den nedlastede filen. Dette kan være på grunn av en feilet nedlasting, i så fall bør du prøve igjen, eller kompresjonsformatet kan være ukjent, i så fall må du laste ned og installere tillegget manuelt.';
-$lang['error_copy'] = 'Det skjedde en feil ved kopiering av en fil under installasjonen av <em>%s</em>: disken kan være full eller rettighetene satt feil. Dette kan ha ført til et delvist installert tillegg og gjort wikien ubrukelig.';
-$lang['error_delete'] = 'Det skjedde en feil under forsøket på å slette tillegget <em>%s</em>. Den mest sannsynlige grunnen er utilstrekkelige rettigheter for filene eller mappene.';
-$lang['enabled'] = 'Tillegget %s aktivert';
-$lang['notenabled'] = 'Plugin %s kunne ikke aktiveres, sjekk filrettighetene.';
-$lang['disabled'] = 'Plugin %s deaktivert';
-$lang['notdisabled'] = 'Plugin %s kunne ikke deaktiveres, sjekk filrettighetene.';
-$lang['packageinstalled'] = 'Installasjonen av tilleggspakka (%d tillegg: %s) var vellykka';
diff --git a/lib/plugins/plugin/lang/pt-br/admin_plugin.txt b/lib/plugins/plugin/lang/pt-br/admin_plugin.txt
deleted file mode 100644
index 9e49f5136..000000000
--- a/lib/plugins/plugin/lang/pt-br/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Gerenciamento de Plug-ins ======
-
-Nesta página você pode gerenciar tudo relacionado aos [[doku>plugins|plug-ins]] do DokuWiki. Para você baixar e instalar um plug-in o servidor web deve ter permissão de escrita na pasta onde ficam os plug-ins.
diff --git a/lib/plugins/plugin/lang/pt-br/lang.php b/lib/plugins/plugin/lang/pt-br/lang.php
deleted file mode 100644
index c025188f3..000000000
--- a/lib/plugins/plugin/lang/pt-br/lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
- * @author Felipe Castro <fefcas@gmail.com>
- * @author Lucien Raven <lucienraven@yahoo.com.br>
- * @author Enrico Nicoletto <liverig@gmail.com>
- * @author Flávio Veras <flaviove@gmail.com>
- * @author Jeferson Propheta <jeferson.propheta@gmail.com>
- * @author jair.henrique@gmail.com
- * @author Luis Dantas <luis@dantas.com>
- * @author Frederico Guimarães <frederico@teia.bio.br>
- * @author Jair Henrique <jair.henrique@gmail.com>
- * @author Luis Dantas <luisdantas@gmail.com>
- * @author Sergio Motta sergio@cisne.com.br
- * @author Isaias Masiero Filho <masiero@masiero.org>
- * @author Balaco Baco <balacobaco@imap.cc>
- * @author Victor Westmann <victor.westmann@gmail.com>
- */
-$lang['menu'] = 'Gerenciar Plug-ins';
-$lang['download'] = 'Baixar e instalar um novo plug-in';
-$lang['manage'] = 'Plug-ins instalados';
-$lang['btn_info'] = 'informações';
-$lang['btn_update'] = 'atualizar';
-$lang['btn_delete'] = 'excluir';
-$lang['btn_settings'] = 'configurações';
-$lang['btn_download'] = 'Baixar';
-$lang['btn_enable'] = 'Salvar';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalação:';
-$lang['lastupdate'] = 'Última atualização:';
-$lang['source'] = 'Fonte:';
-$lang['unknown'] = 'desconhecida';
-$lang['updating'] = 'Atualizando...';
-$lang['updated'] = 'O plug-in %s foi atualizado com sucesso';
-$lang['updates'] = 'Os seguintes plug-ins foram atualizados com sucesso';
-$lang['update_none'] = 'Não foi encontrada nenhuma atualização.';
-$lang['deleting'] = 'Excluindo...';
-$lang['deleted'] = 'O plug-in %s foi excluído.';
-$lang['downloading'] = 'Baixando...';
-$lang['downloaded'] = 'O plug-in %s foi instalado com sucesso';
-$lang['downloads'] = 'Os seguintes plug-ins foram instalados com sucesso:';
-$lang['download_none'] = 'O plug-in não foi encontrado ou então ocorreu um problema desconhecido durante a transferência e instalação.';
-$lang['plugin'] = 'Plug-in:';
-$lang['components'] = 'Componentes';
-$lang['noinfo'] = 'Esse plug-in não retornou nenhuma informação. Ele pode ser inválido.';
-$lang['name'] = 'Nome:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipo:';
-$lang['desc'] = 'Descrição:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Ocorreu um erro desconhecido.';
-$lang['error_download'] = 'Não foi possível baixar o arquivo de plug-in: %s';
-$lang['error_badurl'] = 'Suspeita de URL mal formatada - não foi possível determinar o nome do arquivo a partir da URL';
-$lang['error_dircreate'] = 'Não foi possível criar a pasta temporária para receber a transferência';
-$lang['error_decompress'] = 'O gerenciador de plug-ins não conseguiu descompactar o arquivo transferido. Isso pode ser resultado de: uma corrupção do arquivo durante a transferência, nesse caso, você deve tentar novamente; ou o formato da compactação pode ser desconhecido, nesse caso você deve transferir e instalar o plug-in manualmente.';
-$lang['error_copy'] = 'Ocorreu um erro de cópia de arquivo na tentativa de instalar o plug-in <em>%s</em>: o disco pode estar cheio ou as permissões de acesso ao arquivo podem estar erradas. Isso pode resultar em um plug-in parcialmente instalado e tornar o seu wiki instável.';
-$lang['error_delete'] = 'Ocorreu um erro na tentativa de excluir o plug-in <em>%s</em>. A causa mais provável é a permissão de acesso insuficiente ao diretório ou ao arquivo.';
-$lang['enabled'] = 'O plug-in %s foi habilitado.';
-$lang['notenabled'] = 'Não foi possível habilitar o plug-in %s. Verifique as permissões de acesso.';
-$lang['disabled'] = 'O plug-in %s foi desabilitado.';
-$lang['notdisabled'] = 'Não foi possível desabilitar o plug-in %s. Verifique as permissões de acesso.';
-$lang['packageinstalled'] = 'O pacote do plugin (%d plugin(s): %s) foi instalado com sucesso.';
diff --git a/lib/plugins/plugin/lang/pt/admin_plugin.txt b/lib/plugins/plugin/lang/pt/admin_plugin.txt
deleted file mode 100644
index 2cc470193..000000000
--- a/lib/plugins/plugin/lang/pt/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Gestor de Plugins ======
-
-Nesta página pode gerir tudo o que tenha a haver com [[doku>plugins|plugins]] DokuWiki. Atenção que a pasta que contém os plugins precisa de ter permissões de escrita para se poder efectuar o download. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/pt/lang.php b/lib/plugins/plugin/lang/pt/lang.php
deleted file mode 100644
index aa6b2e2ec..000000000
--- a/lib/plugins/plugin/lang/pt/lang.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
- * @author Enrico Nicoletto <liverig@gmail.com>
- * @author Fil <fil@meteopt.com>
- * @author André Neves <drakferion@gmail.com>
- * @author José Campos zecarlosdecampos@gmail.com
- */
-$lang['menu'] = 'Gerir Plugins';
-$lang['download'] = 'Descarregar e instalar um novo plugin';
-$lang['manage'] = 'Plugins Instalados';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'actualizar';
-$lang['btn_delete'] = 'remover';
-$lang['btn_settings'] = 'configurações';
-$lang['btn_download'] = 'Descarregar';
-$lang['btn_enable'] = 'Guardar';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalado em:';
-$lang['lastupdate'] = 'Actualizado em:';
-$lang['source'] = 'Fonte:';
-$lang['unknown'] = 'desconhecida';
-$lang['updating'] = 'Actualizando ...';
-$lang['updated'] = 'Plugin %s actualizado com sucesso.';
-$lang['updates'] = 'Os seguintes plguins foram actualizados com sucesso:';
-$lang['update_none'] = 'Não foram encontradas actualizações.';
-$lang['deleting'] = 'Removendo ...';
-$lang['deleted'] = 'Plugin %s removido.';
-$lang['downloading'] = 'Descarregando ...';
-$lang['downloaded'] = 'Plugin %s instalado com sucesso.';
-$lang['downloads'] = 'Os seguintes plguins foram instalados com sucesso:';
-$lang['download_none'] = 'Nenhum plugin encontrado ou ocorreu um problema ao descarregar ou instalar.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Componentes';
-$lang['noinfo'] = 'Este plugin não retornou qualquer informação, pode estar inválido.';
-$lang['name'] = 'Nome:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipo:';
-$lang['desc'] = 'Descrição:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Sítio:';
-$lang['error'] = 'Ocorreu um erro desconhecido.';
-$lang['error_download'] = 'Impossível descarregar o ficheiro do plugin: %s';
-$lang['error_badurl'] = 'URL suspeito ou errado - impossível determinar o ficheiro a partir do URL';
-$lang['error_dircreate'] = 'Impossível criar pasta temporária para receber os ficheiros a descarregar';
-$lang['error_decompress'] = 'O gestor de plugins foi incapaz de descomprimir o ficheiro transferido. Isto pode ter sido causado por uma má transferência, caso no qual você deverá tentar de novo, ou por um formato de compressão desconhecido, caso no qual você deve instalar o plugin manualmente.';
-$lang['error_copy'] = 'Ocorreu um erro na cópia do ficheiro na tentativa de instalar o plugin <em>%s</em>: o disco pode estar cheio ou as permissões de acesso do ficheiro podem estar erradas. Isto pode resultar em um plugin parcialmente instalado e deixar a instalação do seu wiki instável.';
-$lang['error_delete'] = 'Ocorreu um erro na tentativa de remover o plug-in <em>%s</em>. A causa mais provável é a permissão de acesso à directoria ou ao ficheiro insuficiente.';
-$lang['enabled'] = 'Plugin %s habilitado.';
-$lang['notenabled'] = 'Plugin %s não pôde ser habilitado, verifique as permissões.';
-$lang['disabled'] = 'Plugin %s desabilitado.';
-$lang['notdisabled'] = 'Plugin %s não pôde ser desabilitado, verifique as permissões.';
-$lang['packageinstalled'] = 'Pacote de Plugins (%d plugin(s): %s) instalado com sucesso.';
diff --git a/lib/plugins/plugin/lang/ro/admin_plugin.txt b/lib/plugins/plugin/lang/ro/admin_plugin.txt
deleted file mode 100644
index a2956e45d..000000000
--- a/lib/plugins/plugin/lang/ro/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Managementul Plugin-urilor ======
-
-In această pagină puteţi administra orice [[doku>plugins|plugin]] Dokuwiki. Pentru a descărca şi instala un plugin, directorul acestora trebuie să ofere webserver-ului acces la scriere.
diff --git a/lib/plugins/plugin/lang/ro/lang.php b/lib/plugins/plugin/lang/ro/lang.php
deleted file mode 100644
index c57647e0b..000000000
--- a/lib/plugins/plugin/lang/ro/lang.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * Romanian language file
- *
- * @author Sergiu Baltariu <s_baltariu@yahoo.com>
- * @author s_baltariu@yahoo.com
- * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
- * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
- * @author Emanuel-Emeric Andraşi <em.andrasi@mandrivausers.ro>
- * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
- * @author Marius OLAR <olarmariusalex@gmail.com>
- * @author Marius Olar <olarmariusalex@yahoo.com>
- * @author Emanuel-Emeric Andrași <em.andrasi@mandrivausers.ro>
- */
-$lang['menu'] = 'Administrează plugin-uri';
-$lang['download'] = 'Descarcă şi instalează un nou plugin';
-$lang['manage'] = 'Plugin-uri instalate';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'actualizare';
-$lang['btn_delete'] = 'ştergere';
-$lang['btn_settings'] = 'setări';
-$lang['btn_download'] = 'Descarcă';
-$lang['btn_enable'] = 'Salvează';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalat:';
-$lang['lastupdate'] = 'Ultima actualizare:';
-$lang['source'] = 'Sursa:';
-$lang['unknown'] = 'necunoscut';
-$lang['updating'] = 'Se actualizează ...';
-$lang['updated'] = 'Plugin-ul %s a fost actualizat cu succes';
-$lang['updates'] = 'Următoarele plugin-uri au fost actualizate cu succes';
-$lang['update_none'] = 'Nu a fost găsită nici o actualizare.';
-$lang['deleting'] = 'Se şterge ...';
-$lang['deleted'] = 'Plugin-ul %s a fost şters.';
-$lang['downloading'] = 'Se descarcă ...';
-$lang['downloaded'] = 'Plugin-ul %s a fost instalat cu succes';
-$lang['downloads'] = 'Următoarele plugin-uri au fost instalate cu succes';
-$lang['download_none'] = 'Nici un plugin nu a fost găsit, sau o problemă necunoscută a apărut în timpul descărcării şi instalării.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Componente';
-$lang['noinfo'] = 'Acest plugin nu a furnizat nici o informaţie; ar putea fi invalid.';
-$lang['name'] = 'Nume:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tip:';
-$lang['desc'] = 'Descriere:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'A intervenit o eroare necunoscută.';
-$lang['error_download'] = 'Nu a fost posibilă descărcarea plugin-ului: %s';
-$lang['error_badurl'] = 'url suspectat ca fiind eronat - nu a putut fi determinat numele fişierului din url';
-$lang['error_dircreate'] = 'Nu a putut fi creat directorul temporar pentru descărcarea fişierului';
-$lang['error_decompress'] = 'Administratorul de plugin-uri nu a putut dezarhiva fişierul descărcat. Aceasta se poate datora unei erori la descărcare, caz în care trebuie să încercaţi din nou; sau formatul de arhivare este necunoscut, caz în care va trebui să descărcaţi şi să instalaţi plugin-ul manual.';
-$lang['error_copy'] = 'O eroare la copiere a apărut la instalarea fişierelor plugin-ului <em>%s</em>: discul poate fi plin sau drepturile de acces ale fişierelor sunt incorecte. Aceasta poate avea ca rezultat o instalare parţială a plugin-ului şi o instabilitate a instalării wiki.';
-$lang['error_delete'] = 'O eroare a apărut la ştergerea plugin-ului <em>%s</em>. Cea mai probabilă cauză sunt drepturile de acces insuficiente ale fişierului sau directorului.';
-$lang['enabled'] = 'Plugin %s activat.';
-$lang['notenabled'] = 'Plugin-ul %s nu poate fi activat, verificaţi permisiunile fişierului.';
-$lang['disabled'] = 'Plugin %s dezactivat.';
-$lang['notdisabled'] = 'Plugin-ul %s nu poate fi dezactivat, verificaţi permisiunile fişierului.';
-$lang['packageinstalled'] = 'Pachet modul (%d modul(e): %s) instalat cu succes.';
diff --git a/lib/plugins/plugin/lang/ru/admin_plugin.txt b/lib/plugins/plugin/lang/ru/admin_plugin.txt
deleted file mode 100644
index 3e00e4150..000000000
--- a/lib/plugins/plugin/lang/ru/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Управление плагинами ======
-
-Здесь вы можете делать всё, что связано с [[doku>plugins|плагинами]] «ДокуВики». Для того, чтобы скачивать и устанавливать плагины, директория плагинов должна быть доступна для записи веб-сервером.
-
-
diff --git a/lib/plugins/plugin/lang/ru/lang.php b/lib/plugins/plugin/lang/ru/lang.php
deleted file mode 100644
index b933f7754..000000000
--- a/lib/plugins/plugin/lang/ru/lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Denis Simakov <akinoame1@gmail.com>
- * @author Andrew Pleshakov <beotiger@mail.ru>
- * @author Змей Этерийский evil_snake@eternion.ru
- * @author Hikaru Nakajima <jisatsu@mail.ru>
- * @author Alexei Tereschenko <alexeitlex@yahoo.com>
- * @author Irina Ponomareva irinaponomareva@webperfectionist.com
- * @author Alexander Sorkin <kibizoid@gmail.com>
- * @author Kirill Krasnov <krasnovforum@gmail.com>
- * @author Vlad Tsybenko <vlad.development@gmail.com>
- * @author Aleksey Osadchiy <rfc@nm.ru>
- * @author Aleksandr Selivanov <alexgearbox@gmail.com>
- * @author Ladyko Andrey <fylh@succexy.spb.ru>
- * @author Eugene <windy.wanderer@gmail.com>
- * @author Johnny Utah <pcpa@cyberpunk.su>
- * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
- */
-$lang['menu'] = 'Управление плагинами';
-$lang['download'] = 'Скачать и установить новый плагин';
-$lang['manage'] = 'Установленные плагины';
-$lang['btn_info'] = 'данные';
-$lang['btn_update'] = 'обновить';
-$lang['btn_delete'] = 'удалить';
-$lang['btn_settings'] = 'настройки';
-$lang['btn_download'] = 'Скачать';
-$lang['btn_enable'] = 'Сохранить';
-$lang['url'] = 'Адрес';
-$lang['installed'] = 'Установлен:';
-$lang['lastupdate'] = 'Последнее обновление:';
-$lang['source'] = 'Источник:';
-$lang['unknown'] = 'неизвестно';
-$lang['updating'] = 'Обновление...';
-$lang['updated'] = 'Плагин %s успешно обновлён';
-$lang['updates'] = 'Следующие плагины были успешно обновлены';
-$lang['update_none'] = 'Обновления не найдены.';
-$lang['deleting'] = 'Удаление...';
-$lang['deleted'] = 'Плагин %s удалён.';
-$lang['downloading'] = 'Скачивание...';
-$lang['downloaded'] = 'Плагин %s успешно установлен';
-$lang['downloads'] = 'Следующие плагины были успешно установлены:';
-$lang['download_none'] = 'Плагины не найдены или возникла неизвестная проблема в процессе скачивания и установки.';
-$lang['plugin'] = 'Плагин:';
-$lang['components'] = 'Компоненты';
-$lang['noinfo'] = 'Этот плагин не сообщил никаких данных, он может быть нерабочим.';
-$lang['name'] = 'Название:';
-$lang['date'] = 'Дата:';
-$lang['type'] = 'Тип:';
-$lang['desc'] = 'Описание:';
-$lang['author'] = 'Автор:';
-$lang['www'] = 'Страница:';
-$lang['error'] = 'Произошла неизвестная ошибка.';
-$lang['error_download'] = 'Не могу скачать файл плагина: %s';
-$lang['error_badurl'] = 'Возможно неправильный адрес — не могу определить имя файла из адреса';
-$lang['error_dircreate'] = 'Не могу создать временную директорию для скачивания';
-$lang['error_decompress'] = 'Менеджеру плагинов не удалось распаковать скачанный файл. Это может быть результатом ошибки при скачивании, в этом случае вы можете попробовать снова, или же плагин упакован неизвестным архиватором, тогда вам необходимо скачать и установить плагин вручную.';
-$lang['error_copy'] = 'Произошла ошибка копирования при попытке установки файлов для плагина <em>%s</em>: переполнение диска или неправильные права доступа. Это могло привести к частичной установке плагина и неустойчивости работы вашей вики.';
-$lang['error_delete'] = 'Произошла ошибка при попытке удалить плагин <em>%s</em>. Наиболее вероятно, что нет необходимых прав доступа к файлам или директориям';
-$lang['enabled'] = 'Плагин %s включен.';
-$lang['notenabled'] = 'Не удалось включить плагин %s. Проверьте системные права доступа к файлам.';
-$lang['disabled'] = 'Плагин %s отключен.';
-$lang['notdisabled'] = 'Не удалось отключить плагин %s. Проверьте системные права доступа к файлам.';
-$lang['packageinstalled'] = 'Пакет (%d плагин(а): %s) успешно установлен.';
diff --git a/lib/plugins/plugin/lang/sl/admin_plugin.txt b/lib/plugins/plugin/lang/sl/admin_plugin.txt
deleted file mode 100644
index 5fd02e1ba..000000000
--- a/lib/plugins/plugin/lang/sl/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Upravljanje vstavkov ======
-
-Na tej strani je mogoče spreminjati in prilagajati nastavitve DokuWiki [[doku>plugins|vstavkov]]. Za prejemanje in nameščanje vstavkov v ustrezne mape, morajo imeti te določena ustrezna dovoljenja za pisanje spletnega strežnika.
diff --git a/lib/plugins/plugin/lang/sl/lang.php b/lib/plugins/plugin/lang/sl/lang.php
deleted file mode 100644
index e205c57f5..000000000
--- a/lib/plugins/plugin/lang/sl/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Dejan Levec <webphp@gmail.com>
- * @author Boštjan Seničar <senicar@gmail.com>
- * @author Gregor Skumavc (grega.skumavc@gmail.com)
- * @author Matej Urbančič (mateju@svn.gnome.org)
- */
-$lang['menu'] = 'Upravljanje vstavkov';
-$lang['download'] = 'Prejmi in namesti nov vstavek';
-$lang['manage'] = 'Nameščeni vstavki';
-$lang['btn_info'] = 'Podrobnosti';
-$lang['btn_update'] = 'Posodobi';
-$lang['btn_delete'] = 'Izbriši';
-$lang['btn_settings'] = 'Nastavitve';
-$lang['btn_download'] = 'Prejmi';
-$lang['btn_enable'] = 'Shrani';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Nameščeno:';
-$lang['lastupdate'] = 'Nazadnje posodobljeno:';
-$lang['source'] = 'Vir:';
-$lang['unknown'] = 'neznano';
-$lang['updating'] = 'Posodabljanje ...';
-$lang['updated'] = 'Vstavek %s je uspešno posodobljen';
-$lang['updates'] = 'Navedeni vstavki so uspešno posodobljeni';
-$lang['update_none'] = 'Posodobitev ni mogoče najti.';
-$lang['deleting'] = 'Brisanje ...';
-$lang['deleted'] = 'Vstavek %s je izbrisan.';
-$lang['downloading'] = 'Prejemanje ...';
-$lang['downloaded'] = 'Vstavek %s je uspešno nameščen';
-$lang['downloads'] = 'Navedeni vstavki so uspešno nameščeni:';
-$lang['download_none'] = 'Vstavkov ni mogoče najti ali pa je prišlo do napake med prejemanjem in nameščanjem.';
-$lang['plugin'] = 'Vstavek:';
-$lang['components'] = 'Sestavni deli';
-$lang['noinfo'] = 'Vstavek nima vpisanih podrobnih podatkov, kar pomeni, da je morda neveljaven.';
-$lang['name'] = 'Ime:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Vrsta:';
-$lang['desc'] = 'Opis:';
-$lang['author'] = 'Avtor:';
-$lang['www'] = 'Spletna stran:';
-$lang['error'] = 'Prišlo je do neznane napake.';
-$lang['error_download'] = 'Ni mogoče prejeti datoteke vstavka: %s';
-$lang['error_badurl'] = 'Napaka naslova URL - ni mogoče določiti imena datoteke iz naslova URL';
-$lang['error_dircreate'] = 'Ni mogoče ustvariti začasne mape za prejemanje';
-$lang['error_decompress'] = 'Z upravljalnikom vstavkov ni mogoče razširiti prejetega arhiva vstavka. Najverjetneje je prišlo do napake med prejemanjem datoteke ali pa zapis arhiva ni znan. Poskusite znova ali pa napako odpravite z ročnim nameščanjem vstavka.';
-$lang['error_copy'] = 'Prišlo je do napake med nameščanjem datotek vstavka <em>%s</em>: najverjetneje so težave s prostorom za namestitev ali pa ni ustreznih dovoljenj za nameščanje. Zaradi nepopolne namestitve lahko nastopijo težave v delovanju sistema Wiki.';
-$lang['error_delete'] = 'Prišlo je do napake med brisanjem vstavka <em>%s</em>: najverjetneje ni ustreznih dovoljenj za dostop do datoteke ali mape';
-$lang['enabled'] = 'Vstavek %s je omogočen.';
-$lang['notenabled'] = 'Vstavka %s ni mogoče omogočiti zaradi neustreznih dovoljen.';
-$lang['disabled'] = 'Vstavek %s je onemogočen.';
-$lang['notdisabled'] = 'Vstavka %s ni mogoče onemogočiti zaradi neustreznih dovoljen.';
-$lang['packageinstalled'] = 'Paket vstavka (%d vstavkov: %s) je uspešno nameščen.';
diff --git a/lib/plugins/plugin/lang/sq/admin_plugin.txt b/lib/plugins/plugin/lang/sq/admin_plugin.txt
deleted file mode 100644
index 2e1f19234..000000000
--- a/lib/plugins/plugin/lang/sq/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Menaxhimi i Plugin-eve ======
-
-Në këtë faqe mund të menaxhoni çdo gjë që ka të bëjë me [[doku>plugins|plugin-et]] Dokuwiki. Që të jetë në gjendje për të shkarkuar dhe instaluar një plugin, dosja e plugin-it duhet të jetë e shkrueshme nga webserver-i. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/sq/lang.php b/lib/plugins/plugin/lang/sq/lang.php
deleted file mode 100644
index 9ddcf527f..000000000
--- a/lib/plugins/plugin/lang/sq/lang.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Albanian language file
- *
- * @author Leonard Elezi leonard.elezi@depinfo.info
- */
-$lang['menu'] = 'Menaxho Plugin-et';
-$lang['download'] = 'Shkarko dhe instalo një plugin të ri';
-$lang['manage'] = 'Plugin-et e Instaluar';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'përditëso';
-$lang['btn_delete'] = 'fshi';
-$lang['btn_settings'] = 'settings';
-$lang['btn_download'] = 'Shkarko';
-$lang['btn_enable'] = 'Ruaj';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Të instaluar:';
-$lang['lastupdate'] = 'Përditësuar së fundmi:';
-$lang['source'] = 'Kodi Burim:';
-$lang['unknown'] = 'e panjohur';
-$lang['updating'] = 'Duke u përditësuar...';
-$lang['updated'] = 'Plugini %s u përditësua me sukses';
-$lang['updates'] = 'Plugin-et e mëposhtme u përditësuan me sukses';
-$lang['update_none'] = 'Nuk u gjetën përditësime.';
-$lang['deleting'] = 'Duke fshirë...';
-$lang['deleted'] = 'Plugini %s u fshi.';
-$lang['downloading'] = 'Duke shkarkuar...';
-$lang['downloaded'] = 'Plugini %s u instalua me sukses';
-$lang['downloads'] = 'Plugin-et e mëposhtëm u instaluan me sukses:';
-$lang['download_none'] = 'Asnjë plugin nuk u gjend, ose ka ndodhur një gabim i panjohur gjatë shkarkimit dhe instalimit.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Përbërësit:';
-$lang['noinfo'] = 'Ky plugin nuk ktheu asnjë informacion, mund të jetë i pavlefshëm.';
-$lang['name'] = 'Emri:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Tipi:';
-$lang['desc'] = 'Përshkrimi:';
-$lang['author'] = 'Autori:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Ndodhi një gabim i panjohur.';
-$lang['error_download'] = 'Nuk mundi të shkarkohej skedari i plugin-it: %s';
-$lang['error_badurl'] = 'Dyshohet url e prishur - nuk mund të gjendet emri i skedarit nga url-ja';
-$lang['error_dircreate'] = 'Nuk mundi të krijohej dosja e përkohshme për të marë shkarkimin.';
-$lang['error_decompress'] = 'Menaxhuesi i plugin-eve nuk ishte në gjendje të dekompresonte skedarin e shkarkuar. Kjo mund të jetë si rezultat i një shkarkimi të keq, në këtë rast duhet të provoni përsëri; ose formati i kompresimit mund të jetë i panjohur, në këtë rast do t\'ju duhet ta shkarkoni dhe instaloni plugin-in manualisht.';
-$lang['error_copy'] = 'Ndodhi gabim kopjim-skedari gjatë përpjekjes për të instaluar skedarët për plugin-in <em>%s</em>: disku mund të jetë plotë ose të drejtat për aksesim skedari mund të jenë të gabuara. Kjo mund të ketë shkaktuar një instalim të pjesshëm të plugin-it dhe ta lërë instalimin e wiki-t tënd të paqëndrueshëm.';
-$lang['error_delete'] = 'Ndodhi një gabim gjatë përpjekjes për të fshirë plugin-in <em>%s</em>. Shkaku më i mundshëm është të drejta të pamjaftueshme për aksesim skedari ose dosjeje.';
-$lang['enabled'] = 'Plugini %s u aktivizua.';
-$lang['notenabled'] = 'Plugini %s nuk mundi të aktivizohej, kontrollo të drejtat e aksesit për skedarin.';
-$lang['disabled'] = 'Plugin %s është i paaktivizuar.';
-$lang['notdisabled'] = 'Plugini %s nuk mundi të çaktivizohej, kontrollo të drejtat e aksesit për skedarin.';
diff --git a/lib/plugins/plugin/lang/sr/admin_plugin.txt b/lib/plugins/plugin/lang/sr/admin_plugin.txt
deleted file mode 100644
index 6262ece40..000000000
--- a/lib/plugins/plugin/lang/sr/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Управљач додацима ======
-
-На овој страни можете управљати са свим у вези DokuWiki [[doku>plugins|додацима]]. Да бисте имали могућност преузимања и инсталирања додатака, фасцикла за додатке мора имати дозволу за писање. \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/sr/lang.php b/lib/plugins/plugin/lang/sr/lang.php
deleted file mode 100644
index bc22770a1..000000000
--- a/lib/plugins/plugin/lang/sr/lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Serbian language file
- *
- * @author Иван Петровић petrovicivan@ubuntusrbija.org
- * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
- * @author Miroslav Šolti <solti.miroslav@gmail.com>
- */
-$lang['menu'] = 'Управљач додацима';
-$lang['download'] = 'Преузми и инсталирај нови додатак';
-$lang['manage'] = 'Инсталирани додаци';
-$lang['btn_info'] = 'инфо';
-$lang['btn_update'] = 'ажурирај';
-$lang['btn_delete'] = 'обриши';
-$lang['btn_settings'] = 'поставке';
-$lang['btn_download'] = 'Преузми';
-$lang['btn_enable'] = 'Сачувај';
-$lang['url'] = 'УРЛ';
-$lang['installed'] = 'Инсталирани:';
-$lang['lastupdate'] = 'Последњи пут ажурирани:';
-$lang['source'] = 'Извор:';
-$lang['unknown'] = 'непознат';
-$lang['updating'] = 'Ажурирање:';
-$lang['updated'] = 'Додатак %s је успешно ажуриран';
-$lang['updates'] = 'Следећи додаци су успешно ажурирани';
-$lang['update_none'] = 'Нема доступних ажурирања.';
-$lang['deleting'] = 'Брисање...';
-$lang['deleted'] = 'Додатак %s је обрисан.';
-$lang['downloading'] = 'Преузимање...';
-$lang['downloaded'] = 'Додатак %s је успешно инсталиран';
-$lang['downloads'] = 'Следећи додаци су успешно инсталирани:';
-$lang['download_none'] = 'Нема додатака, или се јавио непознат проблем током преузимања или инсталирања.';
-$lang['plugin'] = 'Додатак:';
-$lang['components'] = 'Компоненте';
-$lang['noinfo'] = 'Овај додатак не враћа никакве информације, можда је неисправан.';
-$lang['name'] = 'Име:';
-$lang['date'] = 'Датум:';
-$lang['type'] = 'Врста:';
-$lang['desc'] = 'Опис:';
-$lang['author'] = 'Аутор:';
-$lang['www'] = 'Веб:';
-$lang['error'] = 'Десила се непозната грешка.';
-$lang['error_download'] = 'Немогуће је преузети додатак: %s';
-$lang['error_badurl'] = 'Сумњам на лош УРЛ - немогу да одредим назив датотеке ';
-$lang['error_dircreate'] = 'Немогућност прављења привремене фасцикле за преузимање';
-$lang['error_decompress'] = 'Управљач додацима није у могућности да распакује преузету датотеку. Разлог може да буде лошег преузимања, у том случају пробајте још једном; или је непознат облик компресије, у том случају ручно преузмите и инсталирајте додатак.';
-$lang['error_copy'] = 'Појавила се грешка у копирању у току иснталације додатка <em>%s</em>: складиште је можда пуно или дозволе за уписивање нису постављене како треба. Резултат може бити делимично инсталиран додатак и вики у нестабилном стању.';
-$lang['error_delete'] = 'Појавила се грешка у покушају брисања додатка <em>%s</em>. Нејчешћи узрок је недостатак потребних дозвола за операције са датотекама или фасциклама';
-$lang['enabled'] = 'Додатај %s је укључен.';
-$lang['notenabled'] = 'Додатак %s није могуће укључити, проверите дозволе приступа.';
-$lang['disabled'] = 'Додатај %s је исукључен.';
-$lang['notdisabled'] = 'Додатак %s није могуће исукључити, проверите дозволе приступа.';
diff --git a/lib/plugins/plugin/lang/sv/admin_plugin.txt b/lib/plugins/plugin/lang/sv/admin_plugin.txt
deleted file mode 100644
index e490e5e60..000000000
--- a/lib/plugins/plugin/lang/sv/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Hantera insticksmoduler ======
-
-På den här sidan kan man hantera allting som har att göra med Dokuwikis [[doku>plugins|insticksmoduler]]. För att man ska kunna ladda ned och installera en modul måste katalogen för insticksmoduler vara skrivbar av webbservern.
-
-
diff --git a/lib/plugins/plugin/lang/sv/lang.php b/lib/plugins/plugin/lang/sv/lang.php
deleted file mode 100644
index b7c23743b..000000000
--- a/lib/plugins/plugin/lang/sv/lang.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Per Foreby <per@foreby.se>
- * @author Nicklas Henriksson <nicklas[at]nihe.se>
- * @author Håkan Sandell <hakan.sandell@home.se>
- * @author Dennis Karlsson
- * @author Tormod Otter Johansson <tormod@latast.se>
- * @author emil@sys.nu
- * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
- * @author Tormod Johansson tormod.otter.johansson@gmail.com
- * @author Emil Lind <emil@sys.nu>
- * @author Bogge Bogge <bogge@bogge.com>
- * @author Peter Åström <eaustreum@gmail.com>
- * @author mikael@mallander.net
- * @author Smorkster Andersson smorkster@gmail.com
- */
-$lang['menu'] = 'Hantera insticksmoduler';
-$lang['download'] = 'Ladda ned och installera en ny insticksmodul';
-$lang['manage'] = 'Installerade insticksmoduler';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'uppdatera';
-$lang['btn_delete'] = 'radera';
-$lang['btn_settings'] = 'inställningar';
-$lang['btn_download'] = 'Ladda ned';
-$lang['btn_enable'] = 'Spara';
-$lang['url'] = 'Webbadress';
-$lang['installed'] = 'Installerad:';
-$lang['lastupdate'] = 'Senast uppdaterad:';
-$lang['source'] = 'Källa:';
-$lang['unknown'] = 'okänd';
-$lang['updating'] = 'Uppdaterar ...';
-$lang['updated'] = 'Insticksmodulen %s uppdaterades';
-$lang['updates'] = 'Följande Insticksmoduler har uppdaterats';
-$lang['update_none'] = 'Inga uppdateringar hittades.';
-$lang['deleting'] = 'Raderar ...';
-$lang['deleted'] = 'Insticksmodulen %s raderad.';
-$lang['downloading'] = 'Laddar ned ...';
-$lang['downloaded'] = 'Insticksmodulen %s installerades';
-$lang['downloads'] = 'Följande insticksmoduler har installerats:';
-$lang['download_none'] = 'Inga insticksmoduler hittades, eller så har det uppstått ett okänt fel under nedladdning och installation.';
-$lang['plugin'] = 'Insticksmodul:';
-$lang['components'] = 'Komponenter';
-$lang['noinfo'] = 'Den här insticksmodulen returnerade ingen information, den kan vara ogiltig.';
-$lang['name'] = 'Namn:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Typ:';
-$lang['desc'] = 'Beskrivning:';
-$lang['author'] = 'Författare:';
-$lang['www'] = 'Webb:';
-$lang['error'] = 'Ett okänt fel har inträffat.';
-$lang['error_download'] = 'Kan inte ladda ned fil till insticksmodul: %s';
-$lang['error_badurl'] = 'Misstänkt felaktig webbadress - kan inte bestämma filnamnet från webbadressen';
-$lang['error_dircreate'] = 'Kan inte skapa tillfällig katalog för nedladdade filer';
-$lang['error_decompress'] = 'Hanteraren för insticksmoduler kunde inte dekomprimera den nedladdade filen. Detta kan vara resultatet av en misslyckad nedladdning, och i så fall bör du försöka igen; eller så kan det komprimerade formatet vara okänt, och då måste du ladda ned och installera insticksmodulen manuellt.';
-$lang['error_copy'] = 'Ett filkopieringsfel uppstod under försöket att installera filerna till insticksmodulen <em>%s</em>: disken kan vara full eller så kan filskyddet vara felaktigt. Detta kan ha lett till en delvis installerad insticksmodul, och gjort din wiki-installation instabil.';
-$lang['error_delete'] = 'Ett fel uppstod vid försöket att radera insticksmodulen <em>%s</em>. Den troligaste orsaken är otillräcklig behörighet till filer eller kataloger';
-$lang['enabled'] = 'Tilläggsmodulen %s är aktiverad.';
-$lang['notenabled'] = 'Tilläggsmodulen %s kunde inte aktiveras, kontrollera filrättigheterna.';
-$lang['disabled'] = 'Tiläggsmodulen %s är avaktiverad.';
-$lang['notdisabled'] = 'Tilläggsmodulen %s kunde inte avaktiveras, kontrollera filrättigheterna.';
-$lang['packageinstalled'] = 'Tilläggs paket (%d tillägg: %s) har installerats.';
diff --git a/lib/plugins/plugin/lang/th/admin_plugin.txt b/lib/plugins/plugin/lang/th/admin_plugin.txt
deleted file mode 100644
index 8611654be..000000000
--- a/lib/plugins/plugin/lang/th/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== ตัวจัดการโปรแกรมเสริม ======
-
-ในหน้านี้คุณสามารถจัดการทุกๆอย่างที่จะต้องทำงานกับ [[doku>plugins|plugins]]โดกุวิกิ เพื่อที่จะสามารถดาวน์โหลดและติดตั้งโปรแกรมเสริม ตัวโฟลเดอร์โปรแกรมเสริม(plugin) จะต้องสามารถเขียนได้โดยเว็บเซิร์ฟเวอร์ \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/th/lang.php b/lib/plugins/plugin/lang/th/lang.php
deleted file mode 100644
index dab094bcd..000000000
--- a/lib/plugins/plugin/lang/th/lang.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Thai language file
- *
- * @author Komgrit Niyomrath <n.komgrit@gmail.com>
- * @author Kittithat Arnontavilas mrtomyum@gmail.com
- * @author Arthit Suriyawongkul <arthit@gmail.com>
- * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
- * @author Thanasak Sompaisansin <jombthep@gmail.com>
- */
-$lang['menu'] = 'จัดการปลั๊กอิน';
-$lang['download'] = 'ดาวน์โหลดและติดตั้งปลั๊กอินใหม่';
-$lang['manage'] = 'ปลั๊กอินที่ติดตั้งไว้แล้ว';
-$lang['btn_info'] = 'ข้อมูล';
-$lang['btn_update'] = 'ปรับปรุง';
-$lang['btn_delete'] = 'ลบ';
-$lang['btn_settings'] = 'ตั้งค่า';
-$lang['btn_download'] = 'ดาวน์โหลด';
-$lang['btn_enable'] = 'บันทึก';
-$lang['url'] = 'ที่อยู่เว็บ';
-$lang['installed'] = 'ติดตั้งแล้ว:';
-$lang['lastupdate'] = 'ปรับปรุงล่าสุด:';
-$lang['source'] = 'ต้นกำเนิด';
-$lang['unknown'] = 'ไม่มีข้อมูล';
-$lang['updating'] = 'กำลังปรับปรุง ...';
-$lang['updated'] = 'โปรแกรมเสริม %s ได้รับการปรับปรุงสำเร็จแล้ว';
-$lang['updates'] = 'โปรแกรมเสริมต่อไปนี้ได้รับการปรับปรุงสำเร็จแล้ว';
-$lang['update_none'] = 'ไม่พบการปรับปรุงใดๆ';
-$lang['deleting'] = 'กำลังลบ ...';
-$lang['deleted'] = 'โปรแกรมเสริม %s ถูกลบแล้ว';
-$lang['downloading'] = 'กำลังดาวโหลด ...';
-$lang['downloaded'] = 'โปรแกรมเสริม %s ถูกติดตั้งสำเร็จแล้ว';
-$lang['downloads'] = 'โปรแกรมเสริมต่อไปนี้ได้รับการปรับปรุงสำเร็จแล้ว:';
-$lang['download_none'] = 'ไม่พบโปรแกรมเสริม, หรือมีปัญหาบางประการเกิดขึ้นระหว่างการดาวน์โหลด และติดตั้ง';
-$lang['plugin'] = 'โปรแกรมเสริม:';
-$lang['components'] = '่สวนประกอบ';
-$lang['noinfo'] = 'โปรแกรมเสริมนี้ไม่บอกข้อมูล, มันอาจไม่ใช่โปรแกรมเสริมจริง';
-$lang['name'] = 'ชื่อ:';
-$lang['date'] = 'วันที่:';
-$lang['type'] = 'ชนิด:';
-$lang['desc'] = 'รายละเอียด:';
-$lang['author'] = 'ผู้แต่ง:';
-$lang['www'] = 'เว็บ:';
-$lang['error'] = 'เกิดความผิดพลาดที่ระบุไม่ได้';
-$lang['error_download'] = 'ไม่สามารถดาวน์โหลดไฟล์โปรแกรมเสริม: %s';
-$lang['error_dircreate'] = 'ไม่สามารถสร้างโฟลเดอร์ชั่วคราวเพื่อที่จะรองรับการดาวน์โหลด';
-$lang['enabled'] = 'เปิดใช้งานโปรแกรมเสริม %s แล้ว';
-$lang['notenabled'] = 'โปรแกรมเสริม %s ไม่สามารถเปิดใช้งาน, กรุณาตรวจสอบสิทธิ์ของไฟล์';
-$lang['disabled'] = 'ปิดการใช้งานโปรแกรมเสริม %s แล้ว';
-$lang['notdisabled'] = 'โปรแกรมเสริม %s ไม่สามารถปิดการใช้งานได้, กรุณาตรวจสอบสิทธิ์ของไฟล์';
diff --git a/lib/plugins/plugin/lang/uk/admin_plugin.txt b/lib/plugins/plugin/lang/uk/admin_plugin.txt
deleted file mode 100644
index 7bdf8e5e5..000000000
--- a/lib/plugins/plugin/lang/uk/admin_plugin.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-====== Керування доданками ======
-
-Тут ви можете керувати [[doku>plugins|доданками]] ДокуВікі. Для того, щоб завантажувати та встановлювати доданки, папка доданків повинна бути доступна для запису веб-сервером.
-
-
-
-
diff --git a/lib/plugins/plugin/lang/uk/lang.php b/lib/plugins/plugin/lang/uk/lang.php
deleted file mode 100644
index c6d5990fc..000000000
--- a/lib/plugins/plugin/lang/uk/lang.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Oleksiy Voronin (ovoronin@gmail.com)
- * @author serg_stetsuk@ukr.net
- * @author okunia@gmail.com
- * @author Oleksandr Kunytsia <okunia@gmail.com>
- * @author Uko uko@uar.net
- * @author Ulrikhe Lukoie <lukoie@gmail>.com
- * @author Kate Arzamastseva pshns@ukr.net
- */
-$lang['menu'] = 'Керування доданками';
-$lang['download'] = 'Завантажити та встановити новий доданок';
-$lang['manage'] = 'Встановлені доданки';
-$lang['btn_info'] = 'дані';
-$lang['btn_update'] = 'оновити';
-$lang['btn_delete'] = 'видалити';
-$lang['btn_settings'] = 'параметри';
-$lang['btn_download'] = 'Завантажити';
-$lang['btn_enable'] = 'Зберегти';
-$lang['url'] = 'Адреса';
-$lang['installed'] = 'Встановлено:';
-$lang['lastupdate'] = 'Останнє оновлення:';
-$lang['source'] = 'Джерело:';
-$lang['unknown'] = 'невідомо';
-$lang['updating'] = 'Оновлення ...';
-$lang['updated'] = 'Доданок %s успішно оновлено';
-$lang['updates'] = 'Наступні доданки були успішно оновлені';
-$lang['update_none'] = 'Оновлення не знайдено.';
-$lang['deleting'] = 'Видалення ...';
-$lang['deleted'] = 'Доданок %s видалено.';
-$lang['downloading'] = 'Завантаження ...';
-$lang['downloaded'] = 'Доданок %s успішно встановлено';
-$lang['downloads'] = 'Наступні доданки були успішно встановлені:';
-$lang['download_none'] = 'Доданки не знайдено або виникла невідома проблема в процессі завантаження та установки.';
-$lang['plugin'] = 'Доданок:';
-$lang['components'] = 'Компоненти';
-$lang['noinfo'] = 'Цей доданок не повідомив ніяких даних, він може бути не працюючим.';
-$lang['name'] = 'Назва:';
-$lang['date'] = 'Дата:';
-$lang['type'] = 'Тип:';
-$lang['desc'] = 'Опис:';
-$lang['author'] = 'Автор:';
-$lang['www'] = 'Сторінка:';
-$lang['error'] = 'Виникла невідома помилка.';
-$lang['error_download'] = 'Не можу завантажити файл доданка: %s';
-$lang['error_badurl'] = 'Можливо, невірна адреса - не можливо визначити ім\'я файлу з адреси';
-$lang['error_dircreate'] = 'Не можливо створити тимчасову папку для завантаження';
-$lang['error_decompress'] = 'Менеджеру доданків не вдалося розпакувати завантажений файл. Це може бути результатом помилки при завантаженні, в цьому разі ви можете спробувати знову; або ж доданок упакований невідомим архіватором, тоді вам необхідно завантажити та встановити доданок вручну.';
-$lang['error_copy'] = 'Виникла помилка копіювання при спробі установки файлів для доданка <em>%s</em>: переповнення диску або невірні права доступу. Це могло привести до часткової установки доданка и нестійкості вашої Вікі.';
-$lang['error_delete'] = 'При спробі вилучення доданка <em>%s</em> виникла помилка. Найбільш вірогідно, що немає необхідних прав доступу до файлів або директорії';
-$lang['enabled'] = 'Доданок %s увімкнено.';
-$lang['notenabled'] = 'Не вдається увімкнути доданок %s. Перевірте права доступу до файлу.';
-$lang['disabled'] = 'Доданок %s вимкнено.';
-$lang['notdisabled'] = 'Не вдається вимкнути доданок %s. Перевірте права доступу до файлу.';
-$lang['packageinstalled'] = 'Пакет плагінів (%d plugin(s): %s) успішно встановлений.';
diff --git a/lib/plugins/plugin/lang/vi/lang.php b/lib/plugins/plugin/lang/vi/lang.php
deleted file mode 100644
index 2933d8875..000000000
--- a/lib/plugins/plugin/lang/vi/lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Vietnamese language file
- *
- */
diff --git a/lib/plugins/plugin/lang/zh-tw/admin_plugin.txt b/lib/plugins/plugin/lang/zh-tw/admin_plugin.txt
deleted file mode 100644
index 54fe7a59e..000000000
--- a/lib/plugins/plugin/lang/zh-tw/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== 附加元件管理器 ======
-
-您可以用本頁管理與 Dokuwiki [[doku>plugins|附加元件]] 相關的選項。若要正常下載及安裝附加元件,附加元件所在的資料夾必須允許網頁伺服器寫入。 \ No newline at end of file
diff --git a/lib/plugins/plugin/lang/zh-tw/lang.php b/lib/plugins/plugin/lang/zh-tw/lang.php
deleted file mode 100644
index bc84059fd..000000000
--- a/lib/plugins/plugin/lang/zh-tw/lang.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
- * @author http://www.chinese-tools.com/tools/converter-simptrad.html
- * @author Wayne San <waynesan@zerozone.tw>
- * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
- * @author Cheng-Wei Chien <e.cwchien@gmail.com>
- * @author Danny Lin
- * @author Shuo-Ting Jian <shoting@gmail.com>
- * @author syaoranhinata@gmail.com
- * @author Ichirou Uchiki <syaoranhinata@gmail.com>
- */
-$lang['menu'] = '管理附加元件';
-$lang['download'] = '下載與安裝附加元件';
-$lang['manage'] = '已安裝的附加元件';
-$lang['btn_info'] = '資訊';
-$lang['btn_update'] = '更新';
-$lang['btn_delete'] = '刪除';
-$lang['btn_settings'] = '設定';
-$lang['btn_download'] = '下載';
-$lang['btn_enable'] = '儲存';
-$lang['url'] = 'URL';
-$lang['installed'] = '安裝:';
-$lang['lastupdate'] = '上次更新:';
-$lang['source'] = '來源:';
-$lang['unknown'] = '未知';
-$lang['updating'] = '更新中……';
-$lang['updated'] = '已更新附加元件 %s ';
-$lang['updates'] = '已更新下列附加元件';
-$lang['update_none'] = '找不到更新。';
-$lang['deleting'] = '刪除中……';
-$lang['deleted'] = '已刪除附加元件 %s 。';
-$lang['downloading'] = '下載中……';
-$lang['downloaded'] = '已安裝附加元件 %s ';
-$lang['downloads'] = '已安裝下列附加元件:';
-$lang['download_none'] = '找不到附加元件,或者在下載與安裝時發生了未知的問題。';
-$lang['plugin'] = '附加元件:';
-$lang['components'] = '元件';
-$lang['noinfo'] = '此附加元件沒有回傳任何資訊,它可能已失效。';
-$lang['name'] = '名稱:';
-$lang['date'] = '日期:';
-$lang['type'] = '類型:';
-$lang['desc'] = '描述:';
-$lang['author'] = '作者:';
-$lang['www'] = '網頁:';
-$lang['error'] = '發生了未知的錯誤。';
-$lang['error_download'] = '無法下載附加元件檔案: %s';
-$lang['error_badurl'] = 'URL 可能有問題 —— 從 URL 中無法得知文件名';
-$lang['error_dircreate'] = '無法建立暫存目錄來接收下載的內容';
-$lang['error_decompress'] = '附加元件管理器無法把下載的文件解壓,這可能是由於下載出現錯誤。遇到這種情況,請您再次嘗試。此外,無法識別壓縮格式也可能導致無法解壓。若是如此,您需要手動下載並安裝該附加元件。';
-$lang['error_copy'] = '嘗試安裝附加元件 <em>%s</em> 的相關文件時,發生複製錯誤。這可能是磁碟空間不足,或檔案存取權限錯誤。未安裝好的附加元件,也許會令wiki系統不穩定。';
-$lang['error_delete'] = '嘗試刪除附加元件 <em>%s</em> 時發生錯誤。最有可能原因是檔案或目錄存取權限不足';
-$lang['enabled'] = '附加元件 %s 已啟用。';
-$lang['notenabled'] = '附加元件 %s 無法啟用,請檢查檔案權限。';
-$lang['disabled'] = '附加元件 %s 已停用。';
-$lang['notdisabled'] = '附加元件 %s 無法停用,請檢查檔案權限。';
-$lang['packageinstalled'] = '附加元件 (%d 附加元件: %s) 已安裝好。';
diff --git a/lib/plugins/plugin/lang/zh/admin_plugin.txt b/lib/plugins/plugin/lang/zh/admin_plugin.txt
deleted file mode 100644
index 1618071a4..000000000
--- a/lib/plugins/plugin/lang/zh/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== 插件管理器 ======
-
-本页中您可以管理与 Dokuwiki [[doku>plugins|插件]] 相关的选项。 要通过插件管理器正常下载并安装插件,插件所在的文件夹必须可写。
-
-
diff --git a/lib/plugins/plugin/lang/zh/lang.php b/lib/plugins/plugin/lang/zh/lang.php
deleted file mode 100644
index b39c6b063..000000000
--- a/lib/plugins/plugin/lang/zh/lang.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author ZDYX <zhangduyixiong@gmail.com>
- * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
- * @author George Sheraton guxd@163.com
- * @author Simon zhan <simonzhan@21cn.com>
- * @author mr.jinyi@gmail.com
- * @author ben <ben@livetom.com>
- * @author lainme <lainme993@gmail.com>
- * @author caii <zhoucaiqi@gmail.com>
- * @author Hiphen Lee <jacob.b.leung@gmail.com>
- * @author caii, patent agent in China <zhoucaiqi@gmail.com>
- * @author lainme993@gmail.com
- * @author Shuo-Ting Jian <shoting@gmail.com>
- * @author anjianshi <anjianshi@gmail.com>
- */
-$lang['menu'] = '插件管理器';
-$lang['download'] = '下载并安装新的插件';
-$lang['manage'] = '已安装的插件';
-$lang['btn_info'] = '信息';
-$lang['btn_update'] = '升级';
-$lang['btn_delete'] = '删除';
-$lang['btn_settings'] = '设置';
-$lang['btn_download'] = '下载';
-$lang['btn_enable'] = '保存';
-$lang['url'] = 'URL';
-$lang['installed'] = '安装时间:';
-$lang['lastupdate'] = '最后更新于:';
-$lang['source'] = '来源:';
-$lang['unknown'] = '未知';
-$lang['updating'] = '正在升级...';
-$lang['updated'] = '插件 %s 升级成功';
-$lang['updates'] = '下列插件升级成功:';
-$lang['update_none'] = '未找到更新。';
-$lang['deleting'] = '正在删除...';
-$lang['deleted'] = '插件 %s 已删除';
-$lang['downloading'] = '正在下载...';
-$lang['downloaded'] = '插件 %s 安装成功';
-$lang['downloads'] = '下列插件安装成功:';
-$lang['download_none'] = '未找到插件,或下载和安装过程中出现了未知错误。';
-$lang['plugin'] = '插件:';
-$lang['components'] = '组件';
-$lang['noinfo'] = '该插件没有任何信息,有可能是无效插件。';
-$lang['name'] = '名称:';
-$lang['date'] = '日期:';
-$lang['type'] = '类别:';
-$lang['desc'] = '描述:';
-$lang['author'] = '作者:';
-$lang['www'] = '网址:';
-$lang['error'] = '产生了未知错误。';
-$lang['error_download'] = '无法下载插件:%s';
-$lang['error_badurl'] = 'URL 可能有问题 - 从 URL 中无法得知文件名';
-$lang['error_dircreate'] = '无法创建用于接收下载文件的';
-$lang['error_decompress'] = '插件管理器无法解压下载的文件。这可能是由于下载出现错误,遇到这种情况,请您再次尝试;或者是压缩格式无法识别,遇到这种情况,您需要手动下载并安装该插件。';
-$lang['error_copy'] = '尝试安装插件 <em>%s</em> 的相关文件时产生一个复制错误:磁盘空间已满或文件访问权限错误。这可能是由于一个安装了一部分的插件,并使得您的维基系统不稳定。';
-$lang['error_delete'] = '尝试删除插件 <em>%s</em> 时产生一个错误。最有可能的情况是文件或路径的访问权限不够';
-$lang['enabled'] = '%s 插件启用';
-$lang['notenabled'] = '%s插件启用失败,请检查文件权限。';
-$lang['disabled'] = '%s 插件禁用';
-$lang['notdisabled'] = '%s插件禁用失败,请检查文件权限。';
-$lang['packageinstalled'] = '插件 (%d 插件: %s) 已成功安装。';
diff --git a/lib/plugins/plugin/plugin.info.txt b/lib/plugins/plugin/plugin.info.txt
deleted file mode 100644
index cdf866842..000000000
--- a/lib/plugins/plugin/plugin.info.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-base plugin
-author Christopher Smith
-email chris@jalakai.co.uk
-date 2013-02-20
-name Plugin Manager plugin
-desc Manage and install plugins
-url http://www.dokuwiki.org/plugin:plugin
diff --git a/lib/plugins/plugin/style.css b/lib/plugins/plugin/style.css
deleted file mode 100644
index 9433e6001..000000000
--- a/lib/plugins/plugin/style.css
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * admin plugin extension - style additions
- *
- * @author Christopher Smith chris@jalakai.co.uk
- * @link http://wiki.jalakai.co.uk/dokuwiki/doku.php/tutorials/adminplugin
- */
-
-#plugin__manager h2 {
- margin-left: 0;
-}
-
-#plugin__manager form {
- display: block;
- margin: 0;
- padding: 0;
-}
-
-#plugin__manager legend {
- display: none;
-}
-
-#plugin__manager fieldset {
- width: auto;
-}
-
-#plugin__manager .button {
- margin: 0;
-}
-
-#plugin__manager p,
-#plugin__manager label {
- text-align: left;
-}
-
-#plugin__manager .hidden {
- display: none;
-}
-
-#plugin__manager .new {
- background: #dee7ec;
-}
-
-/* IE won't understand but doesn't require it */
-#plugin__manager input[disabled] {
- color: #ccc;
- border-color: #ccc;
-}
-
-#plugin__manager .pm_menu,
-#plugin__manager .pm_info {
- margin-left: 0;
- text-align: left;
-}
-
-[dir=rtl] #plugin__manager .pm_menu,
-[dir=rtl] #plugin__manager .pm_info,
-[dir=rtl] #plugin__manager p,
-[dir=rtl] #plugin__manager label {
- text-align: right;
-}
-
-#plugin__manager .pm_menu {
- float: left;
- width: 48%;
-}
-[dir=rtl] #plugin__manager .pm_menu {
- float: right;
-}
-
-#plugin__manager .pm_info {
- float: right;
- width: 50%;
-}
-[dir=rtl] #plugin__manager .pm_info {
- float: left;
-}
-
-#plugin__manager .common fieldset {
- margin: 0;
- padding: 0 0 1.0em 0;
- text-align: left;
- border: none;
-}
-[dir=rtl] #plugin__manager .common fieldset {
- text-align: right;
-}
-
-#plugin__manager .common label {
- padding: 0 0 0.5em 0;
-}
-
-#plugin__manager .common input.edit {
- width: 24em;
- margin: 0.5em;
-}
-
-#plugin__manager .plugins fieldset {
- color: #000;
- background: #fff;
- text-align: right;
- border-top: none;
- border-right: none;
- border-left: none;
-}
-
-#plugin__manager .plugins fieldset.protected {
- background: #fdd;
- color: #000;
-}
-
-#plugin__manager .plugins fieldset.disabled {
- background: #e0e0e0;
- color: #a8a8a8;
-}
-
-#plugin__manager .plugins .legend {
- color: #000;
- background: inherit;
- display: block;
- margin: 0;
- padding: 0;
- font-size: 1em;
- line-height: 1.4em;
- font-weight: normal;
- text-align: left;
- float: left;
- padding: 0;
- clear: none;
-}
-[dir=rtl] #plugin__manager .plugins .legend {
- text-align: right;
- float: right;
-}
-
-#plugin__manager .plugins .button {
- font-size: 95%;
-}
-
-#plugin__manager .plugins fieldset.buttons {
- border: none;
-}
-
-#plugin__manager .plugins fieldset.buttons .button {
- float: left;
-}
-[dir=rtl] #plugin__manager .plugins .button {
- float: left;
- margin-right: 0.5em;
-}
-[dir=rtl] #plugin__manager .plugins fieldset.buttons .button {
- float: right;
-}
-
-#plugin__manager .pm_info h3 {
- margin-left: 0;
-}
-
-#plugin__manager .pm_info dl {
- margin: 1em 0;
- padding: 0;
-}
-
-#plugin__manager .pm_info dt {
- width: 6em;
- float: left;
- clear: left;
- margin: 0;
- padding: 0;
-}
-[dir=rtl] #plugin__manager .pm_info dt {
- float: right;
- clear: right;
-}
-
-#plugin__manager .pm_info dd {
- margin: 0 0 0 7em;
- padding: 0;
- background: none;
-}
-[dir=rtl] #plugin__manager .pm_info dd {
- margin: 0 7em 0 0;
-}
-
-#plugin__manager .plugins .enable {
- float: left;
- width: auto;
- margin-right: 0.5em;
-}
-[dir=rtl] #plugin__manager .plugins .enable {
- float: right;
- margin-right: 0;
- margin-left: 0.5em;
-}
-
-/* end admin plugin styles */
diff --git a/lib/plugins/popularity/lang/et/lang.php b/lib/plugins/popularity/lang/et/lang.php
deleted file mode 100644
index ca1410ab0..000000000
--- a/lib/plugins/popularity/lang/et/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Estonian language file
- *
- * @author kristian.kankainen@kuu.la
- * @author Rivo Zängov <eraser@eraser.ee>
- */
diff --git a/lib/plugins/popularity/lang/hr/lang.php b/lib/plugins/popularity/lang/hr/lang.php
deleted file mode 100644
index 96f1d6afe..000000000
--- a/lib/plugins/popularity/lang/hr/lang.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * Croatian language file
- *
- * @author Branko Rihtman <theney@gmail.com>
- * @author Dražen Odobašić <dodobasic@gmail.com>
- * @author Dejan Igrec dejan.igrec@gmail.com
- */
diff --git a/lib/plugins/popularity/lang/id/lang.php b/lib/plugins/popularity/lang/id/lang.php
deleted file mode 100644
index 1867f0f69..000000000
--- a/lib/plugins/popularity/lang/id/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Indonesian language file
- *
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/popularity/lang/kk/lang.php b/lib/plugins/popularity/lang/kk/lang.php
deleted file mode 100644
index dde5b9577..000000000
--- a/lib/plugins/popularity/lang/kk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * kazakh language file
- *
- * @author Nurgozha Kaliaskarov astana08@gmail.com
- */
diff --git a/lib/plugins/popularity/lang/lb/lang.php b/lib/plugins/popularity/lang/lb/lang.php
deleted file mode 100644
index 59acdf7a8..000000000
--- a/lib/plugins/popularity/lang/lb/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * lb language file
- *
- * @author joel@schintgen.net
- */
diff --git a/lib/plugins/popularity/lang/mk/lang.php b/lib/plugins/popularity/lang/mk/lang.php
deleted file mode 100644
index 6d4530f79..000000000
--- a/lib/plugins/popularity/lang/mk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Macedonian language file
- *
- * @author Dimitar Talevski <dimi3.14@gmail.com>
- */
diff --git a/lib/plugins/popularity/lang/ms/lang.php b/lib/plugins/popularity/lang/ms/lang.php
deleted file mode 100644
index 77ad2a1c1..000000000
--- a/lib/plugins/popularity/lang/ms/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Malay language file
- *
- * @author Markos
- */
diff --git a/lib/plugins/popularity/lang/vi/lang.php b/lib/plugins/popularity/lang/vi/lang.php
deleted file mode 100644
index 2933d8875..000000000
--- a/lib/plugins/popularity/lang/vi/lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Vietnamese language file
- *
- */
diff --git a/lib/plugins/revert/lang/af/lang.php b/lib/plugins/revert/lang/af/lang.php
deleted file mode 100644
index 1fff08db3..000000000
--- a/lib/plugins/revert/lang/af/lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Afrikaans language file
- *
- */
diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php
index b9e7284d4..69abaaade 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -15,6 +15,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['menu'] = 'Obnova zaspamovaných stránek';
$lang['filter'] = 'Hledat zaspamované stránky';
diff --git a/lib/plugins/revert/lang/et/lang.php b/lib/plugins/revert/lang/et/lang.php
deleted file mode 100644
index ca1410ab0..000000000
--- a/lib/plugins/revert/lang/et/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Estonian language file
- *
- * @author kristian.kankainen@kuu.la
- * @author Rivo Zängov <eraser@eraser.ee>
- */
diff --git a/lib/plugins/revert/lang/hi/lang.php b/lib/plugins/revert/lang/hi/lang.php
deleted file mode 100644
index d6f78ffd6..000000000
--- a/lib/plugins/revert/lang/hi/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Hindi language file
- *
- * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
- * @author yndesai@gmail.com
- */
diff --git a/lib/plugins/revert/lang/hr/lang.php b/lib/plugins/revert/lang/hr/lang.php
deleted file mode 100644
index 96f1d6afe..000000000
--- a/lib/plugins/revert/lang/hr/lang.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * Croatian language file
- *
- * @author Branko Rihtman <theney@gmail.com>
- * @author Dražen Odobašić <dodobasic@gmail.com>
- * @author Dejan Igrec dejan.igrec@gmail.com
- */
diff --git a/lib/plugins/revert/lang/id-ni/lang.php b/lib/plugins/revert/lang/id-ni/lang.php
deleted file mode 100644
index d367340b7..000000000
--- a/lib/plugins/revert/lang/id-ni/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * idni language file
- *
- * @author Harefa <fidelis@harefa.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/revert/lang/id/lang.php b/lib/plugins/revert/lang/id/lang.php
deleted file mode 100644
index c3d485930..000000000
--- a/lib/plugins/revert/lang/id/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Indonesian language file
- *
- * @author Irwan Butar Butar <irwansah.putra@gmail.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/revert/lang/kk/lang.php b/lib/plugins/revert/lang/kk/lang.php
deleted file mode 100644
index dde5b9577..000000000
--- a/lib/plugins/revert/lang/kk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * kazakh language file
- *
- * @author Nurgozha Kaliaskarov astana08@gmail.com
- */
diff --git a/lib/plugins/revert/lang/lb/lang.php b/lib/plugins/revert/lang/lb/lang.php
deleted file mode 100644
index 59acdf7a8..000000000
--- a/lib/plugins/revert/lang/lb/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * lb language file
- *
- * @author joel@schintgen.net
- */
diff --git a/lib/plugins/revert/lang/lt/lang.php b/lib/plugins/revert/lang/lt/lang.php
deleted file mode 100644
index 103485864..000000000
--- a/lib/plugins/revert/lang/lt/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Lithuanian language file
- *
- * @author audrius.klevas@gmail.com
- * @author Arunas Vaitekunas <aras@fan.lt>
- */
diff --git a/lib/plugins/revert/lang/mk/lang.php b/lib/plugins/revert/lang/mk/lang.php
deleted file mode 100644
index 6d4530f79..000000000
--- a/lib/plugins/revert/lang/mk/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Macedonian language file
- *
- * @author Dimitar Talevski <dimi3.14@gmail.com>
- */
diff --git a/lib/plugins/revert/lang/ms/lang.php b/lib/plugins/revert/lang/ms/lang.php
deleted file mode 100644
index 77ad2a1c1..000000000
--- a/lib/plugins/revert/lang/ms/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Malay language file
- *
- * @author Markos
- */
diff --git a/lib/plugins/revert/lang/vi/lang.php b/lib/plugins/revert/lang/vi/lang.php
deleted file mode 100644
index 2933d8875..000000000
--- a/lib/plugins/revert/lang/vi/lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Vietnamese language file
- *
- */
diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index 8df5abb08..7ab9c30e1 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -12,33 +12,9 @@ if(!defined('DOKU_INC')) die();
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
-class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
+class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
var $allowedModesSetup = false;
- var $localised = false; // set to true by setupLocale() after loading language dependent strings
- var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
- var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
- var $conf = array(); // array to hold plugin settings, best accessed via ->getConf()
-
- /**
- * General Info
- *
- * Needs to return a associative array with the following values:
- *
- * author - Author of the plugin
- * email - Email address to contact the author
- * date - Last modified date of the plugin in YYYY-MM-DD format
- * name - Name of the plugin
- * desc - Short description of the plugin (Text only)
- * url - Website with more information on the plugin (eg. syntax description)
- */
- function getInfo(){
- $parts = explode('_',get_class($this));
- $info = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
- if(@file_exists($info)) return confToHash($info);
- trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
- return array();
- }
/**
* Syntax Type
@@ -144,167 +120,5 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
return parent::accepts($mode);
}
-
- // plugin introspection methods
- // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
- function getPluginType() { list($t) = explode('_', get_class($this), 2); return $t; }
- function getPluginName() { list($t, $p, $n) = explode('_', get_class($this), 4); return $n; }
-
- /**
- * Get the name of the component of the current class
- *
- * @return string component name
- */
- function getPluginComponent() { list($t, $p, $n, $c) = explode('_', get_class($this), 4); return (isset($c)?$c:''); }
-
- // localisation methods
- /**
- * getLang($id)
- *
- * use this function to access plugin language strings
- * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
- * e.g. when info plugin is querying plugins for information about themselves.
- *
- * @param string $id id of the string to be retrieved
- * @return string string in appropriate language or english if not available
- */
- function getLang($id) {
- if (!$this->localised) $this->setupLocale();
-
- return (isset($this->lang[$id]) ? $this->lang[$id] : '');
- }
-
- /**
- * locale_xhtml($id)
- *
- * retrieve a language dependent wiki page and pass to xhtml renderer for display
- * plugin equivalent of p_locale_xhtml()
- *
- * @param string $id id of language dependent wiki page
- * @return string parsed contents of the wiki page in xhtml format
- */
- function locale_xhtml($id) {
- return p_cached_output($this->localFN($id));
- }
-
- /**
- * localFN($id)
- * prepends appropriate path for a language dependent filename
- * plugin equivalent of localFN()
- */
- function localFN($id) {
- global $conf;
- $plugin = $this->getPluginName();
- $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)){
- //fall back to english
- $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
- }
- }
- return $file;
- }
-
- /**
- * setupLocale()
- * reads all the plugins language dependent strings into $this->lang
- * this function is automatically called by getLang()
- */
- function setupLocale() {
- if ($this->localised) return;
-
- global $conf; // definitely don't invoke "global $lang"
- $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
-
- $lang = array();
- // don't include once, in case several plugin components require the same language file
- @include($path.'en/lang.php');
- if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
-
- $this->lang = $lang;
- $this->localised = true;
- }
-
- // configuration methods
- /**
- * getConf($setting)
- *
- * use this function to access plugin configuration variables
- */
- function getConf($setting) {
-
- if(!$this->configloaded) { $this->loadConfig(); }
-
- return $this->conf[$setting];
- }
-
- /**
- * loadConfig()
- * merges the plugin's default settings with any local settings
- * this function is automatically called through getConf()
- */
- function loadConfig() {
- global $conf;
-
- $defaults = $this->readDefaultSettings();
- $plugin = $this->getPluginName();
-
- foreach($defaults as $key => $value) {
- if(isset($conf['plugin'][$plugin][$key])) continue;
- $conf['plugin'][$plugin][$key] = $value;
- }
-
- $this->configloaded = true;
- $this->conf =& $conf['plugin'][$plugin];
- }
-
- /**
- * read the plugin's default configuration settings from conf/default.php
- * this function is automatically called through getConf()
- *
- * @return array setting => value
- */
- function readDefaultSettings() {
-
- $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
- $conf = array();
-
- if(@file_exists($path.'default.php')) {
- include($path.'default.php');
- }
-
- return $conf;
- }
-
- /**
- * Loads a given helper plugin (if enabled)
- *
- * @author Esther Brunner <wikidesign@gmail.com>
- *
- * @param string $name name of plugin to load
- * @param bool $msg if a message should be displayed in case the plugin is not available
- *
- * @return object helper plugin object
- */
- function loadHelper($name, $msg = true) {
- if(!plugin_isdisabled($name)) {
- $obj = plugin_load('helper', $name);
- } else {
- $obj = null;
- }
- if(is_null($obj) && $msg) msg("Helper plugin $name is not available or invalid.", -1);
- return $obj;
- }
-
- /**
- * Allow the plugin to prevent DokuWiki from reusing an instance
- *
- * @return bool false if the plugin has to be instantiated
- */
- function isSingleton() {
- return true;
- }
-
}
//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/usermanager/lang/hi/lang.php b/lib/plugins/usermanager/lang/hi/lang.php
deleted file mode 100644
index d6f78ffd6..000000000
--- a/lib/plugins/usermanager/lang/hi/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Hindi language file
- *
- * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
- * @author yndesai@gmail.com
- */
diff --git a/lib/plugins/usermanager/lang/hr/lang.php b/lib/plugins/usermanager/lang/hr/lang.php
deleted file mode 100644
index 96f1d6afe..000000000
--- a/lib/plugins/usermanager/lang/hr/lang.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * Croatian language file
- *
- * @author Branko Rihtman <theney@gmail.com>
- * @author Dražen Odobašić <dodobasic@gmail.com>
- * @author Dejan Igrec dejan.igrec@gmail.com
- */
diff --git a/lib/plugins/usermanager/lang/id-ni/lang.php b/lib/plugins/usermanager/lang/id-ni/lang.php
deleted file mode 100644
index d367340b7..000000000
--- a/lib/plugins/usermanager/lang/id-ni/lang.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * idni language file
- *
- * @author Harefa <fidelis@harefa.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
diff --git a/lib/plugins/usermanager/lang/lb/lang.php b/lib/plugins/usermanager/lang/lb/lang.php
deleted file mode 100644
index 59acdf7a8..000000000
--- a/lib/plugins/usermanager/lang/lb/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * lb language file
- *
- * @author joel@schintgen.net
- */
diff --git a/lib/plugins/usermanager/lang/ms/lang.php b/lib/plugins/usermanager/lang/ms/lang.php
deleted file mode 100644
index 77ad2a1c1..000000000
--- a/lib/plugins/usermanager/lang/ms/lang.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Malay language file
- *
- * @author Markos
- */
diff --git a/lib/plugins/usermanager/lang/sk/lang.php b/lib/plugins/usermanager/lang/sk/lang.php
index 9aadbb53a..535f77972 100644
--- a/lib/plugins/usermanager/lang/sk/lang.php
+++ b/lib/plugins/usermanager/lang/sk/lang.php
@@ -51,7 +51,7 @@ $lang['note_notify'] = 'Notifikačné e-maily iba vtedy, ak dostane u
$lang['note_group'] = 'Noví užívatelia budú pridaní do východzej skupiny (%s), ak nie je pre nich špecifikovaná iná skupina.';
$lang['note_pass'] = 'Heslo bude vygenerované automaticky, ak bude pole prázdne a je zapnutá notifikácia používateľa.';
$lang['add_ok'] = 'Používateľ úspešne pridaný';
-$lang['add_fail'] = 'Pridávanie užívateľa nebolo úspešné';
+$lang['add_fail'] = 'Pridanie používateľa bolo neúspešné';
$lang['notify_ok'] = 'Notifikačný e-mail bol poslaný';
$lang['notify_fail'] = 'Notifikačný e-mail nemohol byť poslaný';
$lang['import_userlistcsv'] = 'Súbor so zoznamov používateľov (CSV):';
diff --git a/lib/plugins/usermanager/lang/vi/lang.php b/lib/plugins/usermanager/lang/vi/lang.php
deleted file mode 100644
index 2933d8875..000000000
--- a/lib/plugins/usermanager/lang/vi/lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Vietnamese language file
- *
- */
diff --git a/lib/tpl/dokuwiki/css/mobile.less b/lib/tpl/dokuwiki/css/mobile.less
index 289f5afa3..0fbd0e8fe 100644
--- a/lib/tpl/dokuwiki/css/mobile.less
+++ b/lib/tpl/dokuwiki/css/mobile.less
@@ -65,6 +65,15 @@
margin-right: 0;
}
+/* preview */
+.dokuwiki.hasSidebar div.preview {
+ border-right: none;
+}
+
+[dir=rtl] .dokuwiki.hasSidebar div.preview {
+ border-left: none;
+}
+
/* toc */
#dw__toc {
float: none;