diff --git a/contrib/ext_manager/main.php b/contrib/ext_manager/main.php index 57ce821a..225a0924 100644 --- a/contrib/ext_manager/main.php +++ b/contrib/ext_manager/main.php @@ -15,7 +15,14 @@ class ExtManager extends Extension { if(is_a($event, 'PageRequestEvent') && ($event->page_name == "ext_manager")) { if($event->user->is_admin()) { - $this->theme->display_table($event->page, $this->get_extensions()); + if($event->get_arg(0) == "set") { + $this->set_things($_POST); + $event->page->set_mode("redirect"); + $event->page->set_redirect("ext_manager"); + } + else { + $this->theme->display_table($event->page, $this->get_extensions()); + } } } @@ -34,15 +41,22 @@ class ExtManager extends Extension { $data = file_get_contents($main); preg_match("#contrib/(.*)/main.php#", $main, $matches); $extension["ext_name"] = $matches[1]; - preg_match("/Name: (.*)/", $data, $matches); - $extension["name"] = $matches[1]; - preg_match("/Link: (.*)/", $data, $matches); - $extension["link"] = $matches[1]; - preg_match("/Author: (.*) <(.*)>/", $data, $matches); - $extension["author"] = $matches[1]; - $extension["email"] = $matches[2]; - preg_match("/Description: (.*)/", $data, $matches); - $extension["description"] = $matches[1]; + if(preg_match("/Name: (.*)/", $data, $matches)) { + $extension["name"] = $matches[1]; + } + if(preg_match("/Link: (.*)/", $data, $matches)) { + $extension["link"] = $matches[1]; + } + if(preg_match("/Author: (.*) [<\(](.*@.*)[>\)]/", $data, $matches)) { + $extension["author"] = $matches[1]; + $extension["email"] = $matches[2]; + } + else if(preg_match("/Author: (.*)/", $data, $matches)) { + $extension["author"] = $matches[1]; + } + if(preg_match("/Description: (.*)/", $data, $matches)) { + $extension["description"] = $matches[1]; + } $extension["enabled"] = $this->is_enabled($extension["ext_name"]); $extensions[] = $extension; } @@ -52,6 +66,30 @@ class ExtManager extends Extension { private function is_enabled($fname) { return file_exists("ext/$fname"); } + + private function set_things($settings) { + foreach(glob("contrib/*/main.php") as $main) { + $matches = array(); + preg_match("#contrib/(.*)/main.php#", $main, $matches); + $fname = $matches[1]; + + $this->set_enabled($fname, $settings["ext_$fname"]); + } + } + private function set_enabled($fname, $enabled) { + if($enabled) { + // enable if currently disabled + if(!file_exists("ext/$fname")) { + shell_exec("ln -s ../contrib/$fname ext/$fname"); + } + } + else { + // disable if currently enabled + if(file_exists("ext/$fname")) { + shell_exec("rm ext/$fname"); + } + } + } } add_event_listener(new ExtManager()); ?> diff --git a/contrib/ext_manager/theme.php b/contrib/ext_manager/theme.php index d7fa094c..3736350c 100644 --- a/contrib/ext_manager/theme.php +++ b/contrib/ext_manager/theme.php @@ -3,7 +3,7 @@ class ExtManagerTheme extends Themelet { public function display_table($page, $extensions) { $html = " -
";