[wp-hackers] Plugin dependency checking
Mike Schinkel
mikeschinkel at newclarity.net
Wed Jun 17 23:02:01 GMT 2009
On Jun 17, 2009, at 3:49 PM, scribu wrote:
> On 6/17/09, Mike Schinkel <mikeschinkel at newclarity.net> wrote:
>> -- Ability to validate during development that a plugin that
>> implements an interface has done so correctly
>> -- Ability to extract documentation for a plugin author
>
> How do you propose we achieve these two points? You said yourself that
> lines like do_action("foo_$bar") would cause problems.
Great questions!
To answer let me overview the process I'm envisioning using details
that are fully open for collaborative improvement.
When a plugin is *activated* WP core would inspect its header to
determine its interfaces and then retrieve its interfaces either via
web service or as defined locally if the web service is unavailable
and it would add the interfaces to a new global $wp_interfaces. WP
core would then crawl the interfaces and would order the plugins in
dependency order for the 'active_plugins' option in the wp_options
table. WP core would also serialize $wp_interfaces to the wp_options
table.
When a URL is requested in "normal mode" the code at line 538 of wp-
settings.php in v2.8 would use the 'active_plugins' option to load
plugins as it currently does, but now in dependency order.
However, when a URL is requested in "development mode" the same code
at line 538 of wp-settings.php in v2.8 would use the unserialized
$wp_interfaces to validate the 'active_plugins' against their
interfaces. I'm thinking this should only require one test of a global
variable, maybe $wp_development_mode==true
In addition apply_filters() and do_action() would validate the
dynamically defined hooks, but only when in development mode.
Validation could also be cached so that the core wouldn't repeatedly
validate the same thing to speed page load during development mode.
apply_filters() and do_action() could even be made to be pluggable so
that the test for development mode could be made only once, not each
time thru the loops.
Development mode would be disabled by default but enabled in a new
admin menu in the Settings area called (something like) "Developer
Options" or "Deployment Options" or maybe just "Development" or
"Deployment." (This menu could also enable a move to support
something I'd love to see: optionally different databases for
development/test/staging/deployment ala Rails.)
For normal page loads this new system of interfaces would have also
practically zero footprint and no unmeasurable performance impact. It
would only affect performance during plugin activation and when in
"development mode."
As for documentation, that would be easy. There could be a text link
to a plugin/interfaces documentation page on the Developer Options
menu page. That documentation page would simply format the information
in $wp_interfaces for visual display to the end user.
Once again let me stress everything proposed is *optional*, and would
only need be used by those who want add the additional support to
their plugins. What's more it could also be architected in such a way
that someone could add interface definitions for plugins that have not
opted to include interface information in their theme allowing the
WordPress developer full control over his site implementation.
Does this answer your concerns?
-Mike Schinkel
WordPress Custom Plugins
http://mikeschinkel.com/custom-wordpress-plugins/
More information about the wp-hackers
mailing list