aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/acp/acp_extensions.php
diff options
context:
space:
mode:
authorMichael Cullum <unknownbliss@phpbbdevelopers.net>2012-02-29 21:23:50 +0000
committerUnknown Bliss <m@michaelcullum.com>2012-09-01 15:04:33 +0100
commit5e6b4c7192a80dc29382ad06976e9ce6d5c16efd (patch)
tree4fcabfb0a1446f87a591de9f5234e2710ceb8582 /phpBB/includes/acp/acp_extensions.php
parent1128ff1e580361db7f7ecc72d496fdd347cbe0f2 (diff)
downloadforums-5e6b4c7192a80dc29382ad06976e9ce6d5c16efd.tar
forums-5e6b4c7192a80dc29382ad06976e9ce6d5c16efd.tar.gz
forums-5e6b4c7192a80dc29382ad06976e9ce6d5c16efd.tar.bz2
forums-5e6b4c7192a80dc29382ad06976e9ce6d5c16efd.tar.xz
forums-5e6b4c7192a80dc29382ad06976e9ce6d5c16efd.zip
[ticket/10631] Adding an extensions admin
PHPBB3-10631
Diffstat (limited to 'phpBB/includes/acp/acp_extensions.php')
-rw-r--r--phpBB/includes/acp/acp_extensions.php265
1 files changed, 265 insertions, 0 deletions
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 @@
+<?php
+/**
+*
+* @package acp
+* @copyright (c) 2012 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+/**
+* @ignore
+*/
+if (!defined('IN_PHPBB'))
+{
+ exit;
+}
+
+/**
+* @package acp
+*/
+class acp_extensions
+{
+ var $u_action;
+
+ function main()
+ {
+ // Start the page
+ global $user, $template, $request;
+
+ $user->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 . '&amp;action=enable&amp;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 . '&amp;action=disable&amp;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 . '&amp;action=purge&amp;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 . '&amp;action=delete&amp;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 . '&amp;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 . '&amp;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 . '&amp;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 . '&amp;action=details&amp;ext_name=' . $row['ext_name'],
+ 'U_PURGE' => $this->u_action . '&amp;action=purge_pre&amp;ext_name=' . $row['ext_name'],
+ 'U_DISABLE' => $this->u_action . '&amp;action=disable_pre&amp;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 . '&amp;action=details&amp;ext_name=' . $row['ext_name'],
+ 'U_PURGE' => $this->u_action . '&amp;action=purge_pre&amp;ext_name=' . $row['ext_name'],
+ 'U_DELETE' => $this->u_action . '&amp;action=delete_pre&amp;ext_name=' . $row['ext_name'],
+ 'U_ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;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 . '&amp;action=details&amp;ext_name=' . $ext['ext_name'],
+ 'U_DELETE' => $this->u_action . '&amp;action=delete_pre&amp;ext_name=' . $ext['ext_name'],
+ 'U_ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;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"],
+ ));
+ }
+ }
+}