mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-11 05:48:51 +00:00
[ticket/10586] Extension front controller
Handle extension front pages PHPBB3-10586
This commit is contained in:
parent
cfd0afe4ea
commit
a0131b45f5
4 changed files with 96 additions and 0 deletions
31
phpBB/includes/extension/controller_interface.php
Normal file
31
phpBB/includes/extension/controller_interface.php
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package extension
|
||||||
|
* @copyright (c) 2011 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
if (!defined('IN_PHPBB'))
|
||||||
|
{
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface that extension classes have to implement to run front pages
|
||||||
|
*
|
||||||
|
* @package extension
|
||||||
|
*/
|
||||||
|
interface phpbb_extension_controller_interface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* handle the request to display a page from an extension
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function handle();
|
||||||
|
}
|
|
@ -428,6 +428,28 @@ class phpbb_extension_manager
|
||||||
}
|
}
|
||||||
return $disabled;
|
return $disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if a given extension is available on the filesystem
|
||||||
|
*
|
||||||
|
* @param string $name Extension name to check
|
||||||
|
* @return bool Depending on whether or not the extension is available
|
||||||
|
*/
|
||||||
|
public function available($name)
|
||||||
|
{
|
||||||
|
return file_exists($this->phpbb_root_path . "ext/$name/");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if a given extension is enabled
|
||||||
|
*
|
||||||
|
* @param string $name Extension name to check
|
||||||
|
* @return bool Depending on whether or not the extension is enabled
|
||||||
|
*/
|
||||||
|
public function enabled($name)
|
||||||
|
{
|
||||||
|
return isset($this->extensions[$name]) && $this->extensions[$name]['ext_active'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a phpbb_extension_finder.
|
* Instantiates a phpbb_extension_finder.
|
||||||
|
|
|
@ -24,6 +24,45 @@ $user->session_begin();
|
||||||
$auth->acl($user->data);
|
$auth->acl($user->data);
|
||||||
$user->setup('viewforum');
|
$user->setup('viewforum');
|
||||||
|
|
||||||
|
// If given an extension, look for a front controller
|
||||||
|
if ($ext = $request->variable('ext', ''))
|
||||||
|
{
|
||||||
|
// The class to load
|
||||||
|
$class = "phpbb_ext_{$ext}_controller";
|
||||||
|
|
||||||
|
// Make sure the specified extension is enabled
|
||||||
|
// and that it has a controller class
|
||||||
|
if (!$phpbb_extension_manager->available($ext))
|
||||||
|
{
|
||||||
|
send_status_line(404, 'Not Found');
|
||||||
|
trigger_error($user->lang('EXTENSION_DOES_NOT_EXIST', $ext));
|
||||||
|
}
|
||||||
|
else if (!$phpbb_extension_manager->enabled($ext))
|
||||||
|
{
|
||||||
|
send_status_line(404, 'Not Found');
|
||||||
|
trigger_error($user->lang('EXTENSION_DISABLED', $ext));
|
||||||
|
}
|
||||||
|
else if (!file_exists("{$phpbb_root_path}ext/$ext/controller.$phpEx") || !class_exists($class))
|
||||||
|
{
|
||||||
|
send_status_line(404, 'Not Found');
|
||||||
|
trigger_error($user->lang('EXTENSION_CONTROLLER_MISSING', $ext));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instantiate the extension controller
|
||||||
|
$controller = new $class;
|
||||||
|
|
||||||
|
// But let's make sure it's actually a proper controller
|
||||||
|
if (!($controller instanceof phpbb_extension_controller_interface))
|
||||||
|
{
|
||||||
|
send_status_line(500, 'Internal Server Error');
|
||||||
|
trigger_error($user->lang('EXTENSION_CLASS_WRONG_TYPE', $class));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let's get it started...
|
||||||
|
$controller->handle();
|
||||||
|
exit_handler();
|
||||||
|
}
|
||||||
|
|
||||||
display_forums('', $config['load_moderators']);
|
display_forums('', $config['load_moderators']);
|
||||||
|
|
||||||
$order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend';
|
$order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend';
|
||||||
|
|
|
@ -185,7 +185,11 @@ $lang = array_merge($lang, array(
|
||||||
'ERR_WRONG_PATH_TO_PHPBB' => 'The phpBB path specified appears to be invalid.',
|
'ERR_WRONG_PATH_TO_PHPBB' => 'The phpBB path specified appears to be invalid.',
|
||||||
'EXPAND_VIEW' => 'Expand view',
|
'EXPAND_VIEW' => 'Expand view',
|
||||||
'EXTENSION' => 'Extension',
|
'EXTENSION' => 'Extension',
|
||||||
|
'EXTENSION_CONTROLLER_MISSING' => 'The extension <strong>%s</strong> is missing a controller class and cannot be accessed through the front-end.',
|
||||||
|
'EXTENSION_CLASS_WRONG_TYPE' => 'The extension controller class <strong>%s</strong> is not an instance of the phpbb_extension_controller_interface.',
|
||||||
|
'EXTENSION_DISABLED' => 'The extension <strong>%s</strong> is not enabled.',
|
||||||
'EXTENSION_DISABLED_AFTER_POSTING' => 'The extension <strong>%s</strong> has been deactivated and can no longer be displayed.',
|
'EXTENSION_DISABLED_AFTER_POSTING' => 'The extension <strong>%s</strong> has been deactivated and can no longer be displayed.',
|
||||||
|
'EXTENSION_DOES_NOT_EXIST' => 'The extension <strong>%s</strong> does not exist.',
|
||||||
|
|
||||||
'FAQ' => 'FAQ',
|
'FAQ' => 'FAQ',
|
||||||
'FAQ_EXPLAIN' => 'Frequently Asked Questions',
|
'FAQ_EXPLAIN' => 'Frequently Asked Questions',
|
||||||
|
|
Loading…
Add table
Reference in a new issue