From 5e6b4c7192a80dc29382ad06976e9ce6d5c16efd Mon Sep 17 00:00:00 2001 From: Michael Cullum Date: Wed, 29 Feb 2012 21:23:50 +0000 Subject: [ticket/10631] Adding an extensions admin PHPBB3-10631 --- phpBB/includes/acp/acp_extensions.php | 265 ++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 phpBB/includes/acp/acp_extensions.php (limited to 'phpBB/includes/acp/acp_extensions.php') diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php new file mode 100644 index 0000000000..a0a7db4474 --- /dev/null +++ b/phpBB/includes/acp/acp_extensions.php @@ -0,0 +1,265 @@ +add_lang(array('install', 'acp/customisations')); + + $this->page_title = 'ACP_EXTENSIONS'; + + $action = $request->variable('action', ''); + $ext_name = $request->variable('ext_name', ''); + + // Set action to list if not set + if (empty($action)) + { + $action = "list"; + } + + // What are we doing? + switch ($action) + { + case 'list': + default: + $this->list_enabled_exts(); + $this->list_disabled_exts(); + $this->tpl_name = 'acp_ext_list'; + break; + + case 'enable_pre': + $this->tpl_name = 'acp_ext_enable'; + $template->assign_vars(array( + 'PRE' => true, + 'U_ENABLE' => $this->u_action . '&action=enable&ext_name=' . $ext_name, + ) + ); + break; + + case 'enable': + $name = $request->variable('ext_name', ''); + $this->enable_extension($name); + $this->tpl_name = 'acp_ext_enable'; + break; + + case 'disable_pre': + $this->tpl_name = 'acp_ext_disable'; + $template->assign_vars(array( + 'PRE' => true, + 'U_DISABLE' => $this->u_action . '&action=disable&ext_name=' . $ext_name, + ) + ); + break; + + case 'disable': + $name = $request->variable('ext_name', ''); + $this->disable_extension($name); + $this->tpl_name = 'acp_ext_disable'; + break; + + case 'purge_pre': + $this->tpl_name = 'acp_ext_purge'; + $template->assign_vars(array( + 'PRE' => true, + 'U_PURGE' => $this->u_action . '&action=purge&ext_name=' . $ext_name, + ) + ); + break; + + case 'purge': + $name = $request->variable('ext_name', ''); + $this->purge_extension($name); + $this->tpl_name = 'acp_ext_purge'; + break; + + case 'delete_pre': + $this->tpl_name = 'acp_ext_delete'; + $template->assign_vars(array( + 'PRE' => true, + 'U_DELETE' => $this->u_action . '&action=delete&ext_name=' . $ext_name, + ) + ); + break; + + case 'delete': + $name = $request->variable('ext_name', ''); + $this->tpl_name = 'acp_ext_delete'; + break; + + case 'details': + $name = $request->variable('ext_name', ''); + $filepath = $phpbb_root_path . 'ext/' . $name . '/extension.json'; + $this->tpl_name = 'acp_ext_details'; + $this->get_meta_info($filepath); + break; + } + } + + function enable_extension($name) + { + global $phpbb_extension_manager, $template, $cache; + + $phpbb_extension_manager->enable($name); + $template->assign_vars(array( + 'U_RETURN' => $this->u_action . '&action=list', + )); + $cache->purge(); + } + + function disable_extension($name) + { + global $phpbb_extension_manager, $template, $cache; + $phpbb_extension_manager->disable($name); + $template->assign_vars(array( + 'U_RETURN' => $this->u_action . '&action=list', + )); + $cache->purge(); + } + + function purge_extension($name) + { + global $phpbb_extension_manager, $template, $cache; + $phpbb_extension_manager->purge($name); + $template->assign_vars(array( + 'U_RETURN' => $this->u_action . '&action=list', + )); + $cache->purge(); + } + + function list_enabled_exts() + { + global $db, $template; + + $sql = 'SELECT ext_name + FROM ' . EXT_TABLE . ' + WHERE ext_active= 1 + ORDER BY ext_name ASC'; + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $template->assign_block_vars('enabled', array( + 'EXT_NAME' => $row['ext_name'], + + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $row['ext_name'], + 'U_PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $row['ext_name'], + 'U_DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . $row['ext_name'], + )); + } + $db->sql_freeresult($result); + + return; + } + + function list_disabled_exts() + { + global $db, $template; + + $sql = 'SELECT ext_name + FROM ' . EXT_TABLE . ' + WHERE ext_active= 0 + ORDER BY ext_name ASC'; + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $template->assign_block_vars('disabled', array( + 'EXT_NAME' => $row['ext_name'], + + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $row['ext_name'], + 'U_PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $row['ext_name'], + 'U_DELETE' => $this->u_action . '&action=delete_pre&ext_name=' . $row['ext_name'], + 'U_ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $row['ext_name'], + )); + } + $db->sql_freeresult($result); + + return; + } + + function list_avaliable_exts() + { + $phpbb_extension_manager->load_extensions(); + $allavailable = array_keys($phpbb_extension_manager->all_available()); + $allconfigured = array_keys($phpbb_extension_manager->all_configured()); + $uninstalled = array_diff($allavailable, $allconfigured); + + foreach ($uninstalled as $ext) + { + $template->assign_block_vars('disabled', array( + 'EXT_NAME' => $ext['ext_name'], + + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $ext['ext_name'], + 'U_DELETE' => $this->u_action . '&action=delete_pre&ext_name=' . $ext['ext_name'], + 'U_ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $ext['ext_name'], + )); + } + + return; + } + + function get_meta_info($filepath) + { + global $template; + + $metadatafile = file_get_contents($filepath); + $metadata = json_decode($metadatafile,true); + + $name = $metadata["name"]; + $type = $metadata["type"]; + $description = $metadata["description"]; + $homepage = $metadata["homepage"]; + $version = $metadata["version"]; + $time = $metadata["time"]; + $licence = $metadata["licence"]; + $require_php = $metadata["require"]["php"]; + $require_phpbb = $metadata["require"]["phpbb"]; + $display_name = $metadata["extra"]["display-name"]; + + $template->assign_vars(array( + 'NAME' => $name, + 'TYPE' => $type, + 'DESCRIPTION' => $description, + 'HOMEPAGE' => $homepage, + 'VERSION' => $version, + 'TIME' => $time, + 'LICENSE' => $licence, + 'REQUIRE_PHP' => $require_php, + 'REQUIRE_PHPBB' => $require_phpbb, + 'DISPLAY_NAME' => $display_name, + ) + ); + + foreach ($metadata["authors"] as $author) + { + $template->assign_block_vars('authors', array( + 'AUTHOR_NAME' => $author["name"], + 'AUTHOR_USERNAME' => $author["username"], + 'AUTHOR_EMAIL' => $author["email"], + 'AUTHOR_HOMEPAGE' => $author["homepage"], + 'AUTHOR_TYPE' => $author["type"], + )); + } + } +} -- cgit v1.2.1