Revision [3142]
This is an old revision of WikkaCodeStructure made by JavaWoman on 2004-12-13 18:45:15.
Wikka Code Structure
A few days ago I had a little discussion with JsnX in TheLounge (the #wikka channel on irc.reenode.net) about "external" type programs (not part of Wikka but providing important functionality), actions, plugins... and how to organize it all better into a directory structure. I'd been thinking about the same things myself, but somehow didn't quite pick up on what JsnX was proposing (I was probably "multitasking and doing other things while talking to JsnX on #wikka, sorry).
So, I'll now try to take it from there and try to give a worked example of what I had in mind (and possibly JsnX as well).
Rationale
My rationale for this proposal is as follows:- Keep "third-party" (external) code together in a directory that indicates it's not part of Wikka's source code but "bundled software".
- Maybe make a distinction here between "core" (needed for basic functionality) and "optional" (may be turned off in configuration); while we have only a few packages of third-party code now, but this could increase, so I thnk this is a good moment to make the distinction to avoid another restructuring down the road.
- Separate actions into "core" (actual "wiki" type of functionality) and "plugins" (nice optional extras, but not necessary to run a wiki site).
Proposal
[wikka]/ [wikka]/3rdparty/ [wikka]/3rdparty/core/ [wikka]/3rdparty/core/geshi/ #I'd say this provides core functionality, could be debatable though [wikka]/3rdparty/plugins/ [wikka]/3rdparty/plugins/freemind/ #cannot be turned off yet but is not needed functionality [wikka]/3rdparty/plugins/safehtml/ #can be turned off globally [wikka]/3rdparty/plugins/wikiedit2/ #can be turned off globally [wikka]/actions/ [wikka]/actions/core/ # "overall management" actions (referring to other pages than the current one) [wikka]/actions/core/category.php [wikka]/actions/core/highscores.php [wikka]/actions/core/interwikilist.php [wikka]/actions/core/lastusers.php [wikka]/actions/core/mychanges.php [wikka]/actions/core/orphanedpages.php [wikka]/actions/core/ownedpages.php [wikka]/actions/core/pageindex.php [wikka]/actions/core/recentchanges.php [wikka]/actions/core/recentcomments.php [wikka]/actions/core/recentlycommented.php [wikka]/actions/core/textsearch.php [wikka]/actions/core/textsearchexpanded.php # page structure rather than content [wikka]/actions/core/footer.php #should this really be an "action"? [wikka]/actions/core/header.php #should this really be an "action"? # page content (or referring to/changing the current page only) [wikka]/actions/core/backlinks.php [wikka]/actions/core/color.php #remove colour.php or include colour.php that only does an include of color.php: don't have duplicated code! [wikka]/actions/core/include.php [wikka]/actions/core/image.php #and disallow dynamic image inclusion via url: not valid html [wikka]/actions/core/lastedit.php [wikka]/actions/core/nocomments.php [wikka]/actions/core/table.php [wikka]/actions/plugins/ # system management [wikka]/actions/plugins/emailpassword.php #access control may not be desired/implemented [wikka]/actions/plugins/usersettings.php #access control may not be desired/implemented [wikka]/actions/plugins/feedback.php # page content [wikka]/actions/plugins/calendar.php [wikka]/actions/plugins/files.php [wikka]/actions/plugins/flash.php [wikka]/actions/plugins/googleform.php [wikka]/actions/plugins/iframe.php #now in intranet dir: it's really an action! [wikka]/actions/plugins/mindmap.php [wikka]/actions/plugins/rss.php [wikka]/css/ [wikka]/docs/ [wikka]/formatters/ [wikka]/handlers/ [wikka]/images/ [wikka]/setup/ [wikka]/xml/
Notes
- Apart from separating actions into "core" and "plugin" I've grouped them by general functionality (embedded comments)
- Since "plugins" would be optional elements in a working Wikka implementation, WikiAdmins will need a way to activate or deactivate them. This suggests a kind of "plugin registry" (a new database table) with some admin-only functionality to register, activate, deactivate and unregister a plugin.
- To execute an action, existence of the action should be checked (in the defined path) as well as whether a plugin is registered and activated (no action if these criteria are not met)
- WikiEditor WikiEdit2 and SafeHtml "activation" are now done via the config file; this should be implemented via the proposed plugins registry instead. (In addition, if WikiEdit2 is activated, it would be nice if a user could choose to turn it off in their own profile).
- Freemind cannot now be (de)activated; this can be accomplished by a registry entry for the mindmap action which implements Freemind in Wikka.
- The directory intranet which now contains iframe.php should disappear: it really is an (optional) action.
- I think the (buggy) newpage action should disappear as well: apart from buggy it's redundant, there are already two other methods to create a new page.
- The configuration should define the paths where all types of actions can be found.
- Since the third-party applications we bundle may already exist on a WikiOwner's system, paths and implementation parameters for these should not be hard-coded in the Wikka source code but instead be defined via parameters in the configuration file. This will give the WikiAdmin the option of using the already-installed (and maybe modified!) program to maintain consistency on her system.