A.L.E.C wrote:
> I think it would be good start for plugins API to get rid of hardcoded
> actions from index.php. So, we have such code:
>
> // include task specific files
> if ($RCMAIL->task=='mail') {
> include_once('program/steps/mail/func.inc');
>
> if ($RCMAIL->action=='show' || $RCMAIL->action=='preview' ||
> $RCMAIL->action=='print')
> include('program/steps/mail/show.inc');
Well, the hard-coded includes are not very nice and could be replaced by a
controller class or just an array mapping tasks/actions to a certain file.
I don't like the approach to use request parameters like $RCMAIL->task and
$RCMAIL->action directly in include paths. This could open some security
vulnerabilities. Even file_exists() will succeed if you want to include
some password files.
I'd suggest to use an object oriented approach to define and register
plugins. How about this:
class my_rcube_plugin extends rcube_plugin
{
function __construct()
{
$this->add_hook('login', array($this, 'mlogin'));
$this->register_action('foo', array($this, 'myfoo'));
$this->add_toolbar_button('compose', ...);
$this->add_folder_item(...);
}
function mylogin($p)
{
$p['username'] = 'foo';
$p['password'] = 'bar';
return $p;
}
function myfoo()
{
}
}
The base class rcube_plugin will implement all the internal functions and
add the registered actions and hooks to the according controller.
Each plugin should have it's separate folder within the plugin directory
and we define a fixed name (eg. init.php) where the class name and more
details (like the task where it belongs to) are defined. If we require the
class file to be named as the class (in our case it would be
my_rcube_plugin.php) it will work with our auto-loader. For performance
reasons we can cache the contents of all init.php files to prevent from
traversing the whole plugin directory on each request.
I don't see a reason why the init-file shouldn't be written in PHP since
people who write a plugin have to do this in PHP as well and thus have
basic knowledge about this language.
~Thomas
_______________________________________________
List info: http://lists.roundcube.net/dev/