DEPRECATION WARNING
This documentation is not using the current rendering mechanism and is probably outdated. The extension maintainer should switch to the new system. Details on how to use the rendering mechanism can be found here.
interception¶
Interceptions are admin-defined actions that may take place at certain points during various processes. So if you need to do something extraordinary, you might find the solution here. You just need to know with what you want to intercept when/where.
In order to answer the first question (with what) you should know that at certain points in the code you may intercept using PHP, at other points using JavaScript and some allow both. So what follows is a list of possible points when to intercept indicating which intercepts are possible and when that takes place.
Name | Description | PHP | JavaScript |
---|---|---|---|
PreProcessing | before any process takes place | yes | yes |
PreAction | before any action takes place, after inits | yes | yes |
Callback | field/column-dependant interception | yes | no |
Action | before a certain single action (Pre-update) | yes | no |
Action | after a certain single action (e.g. update) | yes | no |
PostAction | after a set of actions in one call | yes | yes |
PreDisplay | before showing any data | yes | yes |
PostDisplay | after data is shown | yes | yes |
PostProcessing | after a complete process | yes | yes |
Reading from top to bottom you can also read how one process is structured. But what is a process? Well, this is difficult to explain as it depends largely on the used data handler. It could be one deletion of an entry. It could be one multiple deletion as well. It could be one validation check for the form and it could also be a combination of validation and submission/creation of an entry.
How to specify the interception handlers always follows the same pattern: The name of the interception is an array key holding key-based configuration arrays with all the interceptors. Every interceptor needs to have an eClass (the class in Classes/Interception/ or, for Javascript, in Resources/Interception/) defined. If both PHP and JS are allowed, then also eType (either php or js) is needed. Other settings vary from interceptor to interceptor.
Callback¶
Interceptors here need the field/column to be defined as sField and have two more boolean options to tell if the callback shall be applied when a values is going inwards (toward the data source), outwards (to the data handler) or both:
- bInwards set to true indicates to apply this callback after form validation
- bOutwards set to true tells to apply this callback right before displaying
Action¶
As this applies after a certain single action, the single action after which it should apply, has to be named. Therefore the parameter sAction is obligatory. If you want an action interceptor to be called before a certain action, prefix the sAction with Pre-. Hence, the following two examples are both called, one before, one after the updating process:
- Pre-update might change the form data before saving it to the database
- update may update another table as well
Examples¶
This is a complete interception configuration:
'interception' => array(
'PreProcessing' => array(),
'PreAction' => array(),
'Callback' => array(
10 => array(
'sField' => 'password',
'bInwards' => false,
'bOutwards' => true,
'eClass' => 'Passwordify'
)
),
'Action' => array(
10 => array( //sorting
'eClass' => 'Email',
'sAction' => 'update',
'sRecipient' => 'abc@foo.bar, def@foo.bar',
'sSubject' => 'Entry updated',
'sMail' => 'The entry named "###name###" has just been updated.',
'sFrom' => 'Admin <root@foo.bar>' //optional as otherwise the system's default is taken
),
20 => array(
'eClass' => 'ReconfigureIf',
'sAction' => 'Pre-getForm',
'aIf' => array(
'###fe_user:username###!=###name###'
),
'aSet' => array(
'data/bEdit' => FALSE
)
)
),
'PostAction' => array(),
'PreDisplay' => array(),
'PostDisplay' => array(
10 => array(
'eType' => 'js',
'eClass' => 'Code',
'sCode' => '$('a.myspeciallinks').tooltip();'
)
),
'PostProcessing' => array()
)
Interceptors (eClass)¶
The interceptors available at the moment are specific in their function. Thus you cannot (or, better speaking, it won't have any affect) use 'wrong' interceptors at the 'wrong' interception places.
The following table lists what is currently available and what it is for.
eClass | PreP | PreA | Callb | Action | PostA | PreD | PostD | PostP | Description |
---|---|---|---|---|---|---|---|---|---|
AggregateToBarChart | no | no | yes | no | no | no | no | no | use in detail view; finds all similar data and calculates a bar chart from them |
AggregateToList | no | no | yes | no | no | no | no | no | use in detail view; finds all similar data and lists them |
Calculate | no | no | yes | yes | no | no | no | no | calculate with values |
ClearCache | no | no | no | yes | no | no | no | no | clear cache for page(s) |
Code | yes | yes | no | no yes yes yes yes execute JavaScript code | |||||
CountSubEntries | no | no | yes | no | no | no | no | no | counts related entries |
CreateId | no | no | yes | no | no | no | no | no | create unique ID (auto-increment) |
CsvImport | (yes) | (yes) | no | no | (yes) (yes) yes (yes) enable CSV importer | ||||
DeletionBasedOnRowData | no | no | no | yes | no | no | no | no | prohibit certain rows from deletion |
no | no | no | yes | no | no | no | no | send email | |
ListSubEntries | no | no | yes | no | no | no | no | no | list related entries |
Lookup | no | no | no | yes | no | no | no | no | fill field during form input with value based on other field |
Passwordify | no | no | yes | no | no | no | no | no | mask output (with asterisks) |
ReconfigureIf | yes | yes | yes | yes | yes | yes | yes | yes | reconfig. setup based on certain conditions |
ReplaceMarkerWithImages | no | no | yes | no | no | no | no | no | use image uploads in text |
RewriteEditLinkBasedOnRowData | no | no | no | yes | no | no | no | no | different edit links per row |
String | no | no | yes | yes | no | no | no | no | prepare/change a certain string (a bit like calculate but for strings) |
Timestamp | no | no | yes | no | no | no | no | no | prepare a UNIX timestamp as a date |
UpdateField | no | no | no | yes | no | no | no | no | update another field within the same table |
UpdateTable | no | no | no | yes | no | no | no | no | update another field within a different database/table |
² indicates JavaScript interceptors. Moreover, a "yes" in brackets ("(yes)") indicates a technical yes but without much sense.
And here you find the handler-specific configuration:
- AggregateToBarChart
- AggregateToList
- Calculate
- Live calculation during form input
- ClearCache
- Code
- CountSubEntries
- CreateId
- CsvImport
- DeletionBasedOnRowData
- ListSubEntries
- Lookup
- Passwordify
- ReconfigureIf
- ReplaceMarkerWithImages
- RewriteEditLinkBasedOnRowData
- String
- Timestamp
- UpdateField
- UpdateTable