Administration of Actions


This is the development page for the action administration module.

Main goals of this module


Needed metadata


Where metadata are stored

For each action in "/action" directory, the header of the action file is read (eg : "/action/image/image.php")
Action file header contains all the required metadata, prefixed by a specific tag.

Each action directory contains an additional file "actionname.inc.php".

Data formats :
1) PHP array (best method?)
<?php
$action_infos = array(
    'category' => 'hidden',
    'tag' => 'image',
    'title' => 'Image',
    'summary' => 'Display an image.',
    'usage' => '',
    'params' => array(
        'url' => array(
            'default_value' => 'url',
            'description' => 'Image URL. Can be relative (images/img.png) or external (http://example.com/example.jpg)',
            'importance' => 2
        ),
        'title' => array(
            'default_value' => 'text',
            'description' => 'Image title',
            'importance' => 1
        ),
        'alt' => array(
            'default_value' => 'text',
            'description' => 'Alternate text when image can\'t be displayed',
            'importance' => 1
        ),
        'class' => array(
            'default_value' => 'className',
            'description' => 'Class name (defined in the CSS file)'
        ),
        'link' => array(
            'default_value' => 'url',
            'description' => 'Add a link to the image'
        )
    )
);
?>

+ fastest
- may introduce some errors (especially with comma or parentheses)

2) INI-file
[action]
category=hidden
tag=image
title=Image
summary=Display an image.
usage=

[url]
default_value=url
description=Image URL. Can be relative (images/img.png) or external (http://example.com/example.jpg)
importance=2

[title]
default_value=text
description=Image title
importance=1

[alt]
default_value=text
description=Alternate text when image can't be displayed
importance=1

[class]
default_value=className
description=Class name (defined in the CSS file)

[link]
default_value=url
description=Image title

+ easiest to read and write
- no hierarchical structure (action and parameters data are mixed together)

3) XML
<action>
    <category>hidden</category>
    <tag>image</tag>
    <title>Image</title>
    <summary>Display an image.</summary>
    <usage></usage>
    <params>
        <url>
            <default_value>url</default_value>
            <description>Image URL. Can be relative (images/img.png) or external (http://example.com/example.jpg)</description>
            <importance>2</importance>
        </url>
        <title>
            <default_value>text</default_value>
            <description>Image title</description>
            <importance>1</importance>
        </title>
        <alt>
            <default_value>text</default_value>
            <description>Alternate text when image can't be displayed</description>
            <importance>1</importance>
        </alt>
        <class>
            <default_value>className</default_value>
            <description>Class name (defined in the CSS file)</description>
        </class>
        <link>
            <default_value>url</default_value>
            <description>Image title</description>
        </link>
    </params>
</action>

- give headaches to read or write
- slow to parse

Caching metadata

Parsing the "/action" directory on each request is too slow. Moreover, additional data like action ACLs can't be stored in the file itself.

Solution : add to the database two tables : "wikka_actions" and "wikka_action_params"
CREATE TABLE `wikka_actions` (
  `tag` VARCHAR(75) NOT NULL,
  `title` VARCHAR(75) NOT NULL,
  `summary` VARCHAR(200) NOT NULL,
  `usage_infos` VARCHAR(400) NOT NULL,
  `category` VARCHAR(75) NOT NULL,
  `acl` text NOT NULL,
  PRIMARY KEY  (`tag`)
) ENGINE=MyISAM;

CREATE TABLE `wikka_action_params` (
  `action_tag` VARCHAR(75) NOT NULL,
  `name` VARCHAR(75) NOT NULL,
  `description` VARCHAR(400) NOT NULL,
  `default_value` VARCHAR(75) NOT NULL,
  `importance` tinyint(1) NOT NULL,
  PRIMARY KEY  (`action_tag`,`name`)
) ENGINE=MyISAM;


Field "importance" :
- it is only used by WikkaEdit
- values : 0=none, 1=default, 2=mandatory
- when adding an action, the "mandatory" and "default" parameters are added automatically. If a "mandatory" parameter is removed, the editor will display a warning.

When metadata cache is updated ?

These databases are currently updated each time AdminAction is called (an "update action list" link may be a better solution)

User interface

The UI is based on UserAdmin and PageAdmin style.
The ACLs are currently not used (see following chapiter "Actions ACLs")

Actions Administration

Filter view:

Records (28): 1-15 | 16-28
Sorted by: tag, asc
Action Tag Action Title ACLS
adminpagesPages administrationJohnDoeedit
adminusersUsers administration*edit
backlinksBacklinks*edit
calendarCalendar*edit
categoryCategory*edit
checkversionVersion checker*edit
colorText color*edit
contactAdministrator email address*edit
countcommentsCount comments*edit
countownedCount owned*edit
countpagesCount pages*edit
countusersCount users*edit
emailpasswordLost password form*edit
imageImage*edit
usersettingsMy user settings*edit


Actions ACLs

The main idea of ACLs is to allow the admin to disable non-safe actions like "files" or "iframe", or allow only some users to use them.
For basic actions, these ACLs are really useless (eg: "color", "image", "table"...)

Ideas :
- ACLs could be used to replace the hardcoded "if ($this->IsAdmin($this->GetUser()))" in some actions

Problems :
- "wikka_actions" and "wikka_action_params" tables are not always up-to-date (only updated when the AdminActions action is called)
- the ACLs are currently ignored by the core (and can't be added due to the 1st problem)


CategoryDevelopment
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki