Filter functions

Summary
Filter functions
The Filter-Function itselfThe Filter function must have an unique name, and should have a “opff_”-prefix
Functions
opf_register_filterRegister a new Filter.
opf_move_up_beforeUpon registration move a filter up to a position before another one.
opf_unregister_filterUn-Register a Filter.
opf_register_frontend_filesRegister JS- or CSS-files to be loaded into the page’s <head>-section.
opf_register_onload_eventRegister an Javascript onload-function inside page’s <head>-section, using window.attachEvent() or window.addEventListener().
opf_register_onloadRegister an Javascript script onload-function inside page’s <body>-section.
opf_register_document_readyRegister an Javascript onload-event inside page’s <head>-section, using jquery’s jQuery(document).ready() 
opf_find_classCheck whether a class (or any other attribute) is present in content.
opf_add_classAdd a class to a present HTML-tag, i.e.
opf_add_class_to_classAdd a class to an already present class.
opf_add_class_to_attrAdd a class to all HTML-tags that has a given attribute.
opf_cut_extractCuts pieces out of content using a regular expression and replace them by placeholders.
opf_glue_extractbool opf_glue_extract( string &$content, string $extracts )
opf_filter_get_dataFetch data from filter.
opf_filter_get_rel_posChecks if a given filter was or will be executed.
opf_filter_existsChecks whether a given filter exists
opf_is_childpageChecks whether a page is a subpage of a given page (or the same page)
opf_filter_is_activeCheckes whether a given filter is active for the actual module and page_id
opf_filter_get_additional_valuesReceive additional filter arguments
opf_filter_name_to_settingFor WBCE 1.2: This function converts the name of a filter to the settings string which is associated with the active/inactive state of the given filter name.

The Filter-Function itself

The Filter function must have an unique name, and should have a “opff_”-prefix

Prototype

bool opff_unique_name( string &$content, int $page_id, int $section_id, string $module, object $wb )

Parameters

&$content(string) The page’s or section’s Content, per reference!
$page_id(int) Actual Page ID.
$section_id(int) Actual Section ID.  For Filters of type OPF_TYPE_PAGE_FIRST, OPF_TYPE_PAGE or OPF_TYPE_PAGE_LAST or OPF_TYPE_PAGE_FINAL this is always FALSE.
$module(string) Name of actual module (== $module_directory  ).  For Filters of type OPF_TYPE_PAGE_FIRST, OPF_TYPE_PAGE or OPF_TYPE_PAGE_LAST  or OPF_TYPE_PAGE_FINAL this is always FALSE.
$wb(object) Instance of Class wb.

Returns

Should return always TRUE.  Only in case the content may be damaged or undefined the function must return FALSE.

Examples

// simple filter which will convert all U to X in $content
function opff_x_as_u(&$content, $page_id, $section_id, $module, $wb) {
    $content = str_replace('U', 'X', $content);
    return(TRUE);
}
function opff_prettify(&$content, $page_id, $section_id, $module, $wb) {
    $PATH = WB_URL.'/modules/opf_prettify/prettify';
    if(opf_find_class($content, 'prettyprint', '(pre|code)')) {
        opf_register_frontend_files($PATH.'/prettify.css','css');
        opf_register_frontend_files($PATH.'/prettify.js','js');
        if(opf_find_class($content, 'lang-sql', '(pre|code)'))
            opf_register_frontend_files($PATH.'/lang-sql.js','js');
        opf_register_onload_event('prettyPrint');
    }
    return(TRUE);
}

Functions

opf_register_filter

function opf_register_filter($filter,  
$serialized = FALSE)

Register a new Filter.

This function is used for plugin- and module-filters to install the filter.

You don’t need this function for inline-filters!

Prototype

bool opf_register_filter( array $filter, bool $serialized=FALSE )

Parameters

$filter(array) An array that contains all filter data.
$serialized(bool) Whether the filter-data is passed serialized.

Returns

TRUE on success, FALSE otherwise.  Additionaly it will emit an error-message (level: E_USER_WARNING) in case of failure.

Examples

$filter = array(
    'name'       => 'PrettyPrint: Google-Code-Prettify',
    'type'       => OPF_TYPE_SECTION,
    'file'       => WB_PATH.'/modules/opf_prettify/filter.php',
    'funcname'   => 'opff_prettify',
    'csspath'    => WB_PATH.'/modules/opf_prettify/prettify/prettify.css',
    'modules'     => 'download_gallery,manual,news,wysiwyg'
);
opf_register_filter($filter);

$filter-Array

name(string) - Unique name of Filter, e.g.  Correct Date filter.
type(string) - Type of Filter (see below).
funcname(string) - Unique name of Filter-Function.  This function is called to apply the filter.  It has to be an unique name and should begin with “opff_”, e.g.  opff_correct_date().
func(string) - “Inline-Function” (see below).
file(string) - Name and absolute path of file containing the Filter-Function.  Use either func or file.
active(int) - Set Filter active (1), or inactive (0) after installation.  Defaults to 1.
allowedit(int) - Set Filter-Settings editable (1), or not editable (0)  (see below).  Defaults to 0.
allowedittarget(int) - Set additional Filter-Settings editable (see below).  Defaults to 0.
desc(string/array) - Description of Filter (see below).
configurl(string) - URL to Filter-Settings (e.g. to an Admin-Tool).  E.g.: ’configurl’ => ADMIN_URL.’/admintools/tool.php?tool=output_filter’.  Default: “”.
csspath(string) - Name and absolute path of CSS-file.  E.g.: ’csspath’ => ‘{SYSVAR:WB_PATH}/modules/opf_prettify/prettify/prettify.css’.  Default: “”.
helppath(array) - Array of name and absolute path to Help-files.  E.g.: ’helppath’ => array(‘DE’=>’{SYSVAR:WB_URL}/modules/opf_prettify/help_de.html’, ‘EN’=>’{SYSVAR:WB_URL}/modules/opf_prettify/help_en.html’).  Default: “”.
modules(string/array) - List of modules (see below).
pages(string/array) - List of pages (see below).
pages_parent(string/array) - List of pages (see below).
additional_fields(array) - List of additional Settings-Fields (see below).

type

Determines on which type of content the filter is applied to.

OPF_TYPE_SECTION_FIRSTApply filter on section-content, but before all filters of type OPF_TYPE_SECTION.
OPF_TYPE_SECTIONApply filter on section-content.
OPF_TYPE_SECTION_LASTLike OPF_TYPE_SECTION, but applied after all filters of type OPF_TYPE_SECTION.
OPF_TYPE_PAGE_FIRSTLike OPF_TYPE_PAGE, but applied before all filters of type OPF_TYPE_PAGE.
OPF_TYPE_PAGEApply filter on page-content, i.e. on all sections, snippets on that page, and the entire template, too.
OPF_TYPE_PAGE_LASTLike OPF_TYPE_PAGE, but applied after all filters of type OPF_TYPE_PAGE.
OPF_TYPE_PAGE_FINALLike OPF_TYPE_PAGE_LAST, but applied even after all filters of type OPF_TYPE_PAGE_LAST.

Filter of type OPF_TYPE_SECTION are applied on section-content before the content gets inserted into the template.

Filter of type OPF_TYPE_PAGE are applied on the finished page just before the page is sent to the browser.

func

A string containing the filter-function.  Convenient for very short functions.  Use file for larger filter-functions.

$function = '
    function opff_search_highlight(&$content, $page_id, $section_id, $module, $wb) {
        if(isset($_GET["searchresult"]) && is_numeric($_GET["searchresult"])
             && !isset($_GET["nohighlight"]) && isset($_GET["sstring"])
             && !empty($_GET["sstring"])) {
            $arr_string = explode(" ", $_GET["sstring"]);
            if($_GET["searchresult"]==2) // exact match
                $arr_string[0] = str_replace("_", " ", $arr_string[0]);
            $content = search_highlight($content, $arr_string);
        }
        return(TRUE);
    }
';
$filter = array(
    'name'       => 'Searchresult Highlighting',
    'type'       => OPF_TYPE_SECTION_LAST,
    'funcname'   => 'opff_search_highlight',
    'func'       => $function,
    'modules'     => 'all'
);
opf_register_filter($filter);

file

Name and absolute path of file containing the Filter-Function.

$filter = array(
    'name'       => 'Searchresult Highlighting',
    'type'       => OPF_TYPE_SECTION_LAST,
    'funcname'   => 'opff_search_highlight',
    'file'       => '{SYSVAR:WB_PATH}/modules/myfilter/filter.php',
    'modules'    => 'all'
);
opf_register_filter($filter);

With filter.php

<?php
// content of filter.php
function opff_search_highlight(&$content, $page_id, $section_id, $module, $wb) {
    if(isset($_GET["searchresult"]) && is_numeric($_GET["searchresult"])
         && !isset($_GET["nohighlight"]) && isset($_GET["sstring"])
         && !empty($_GET["sstring"])) {
        $arr_string = explode(" ", $_GET["sstring"]);
        if($_GET["searchresult"]==2) // exact match
            $arr_string[0] = str_replace("_", " ", $arr_string[0]);
        $content = search_highlight($content, $arr_string);
    }
    return(TRUE);
}
?>

allowedit

If set to 1 following settings are changeable through Admin-Tool

  • Name of filter
  • Type of Filter
  • Name of filter-function
  • Filter-function itself (in case it’s a “inline-filter”)
  • List of modules, and
  • List of pages the filter is applied to.

Suggestion: use ’allowedit’ => 0 always (default).

allowedittarget

Extension for allowedit: If allowedit is set to 0 and allowedittarget set to 1 the user is allowed to change only

  • List of modules, and
  • List of pages the filter is applied to.

Suggestion: use ’allowedittarget’ => 1 always (default).

In case allowedit is set to 1  allowedittarget is meaningless.

desc

Description of filter.  Use either

'desc' => "Description follows here.\nText..."

or

'desc' => array(
  'EN' => "Description\n...",
  'DE' => "Beschreibung\n..."
)

Using the latter form, there has to be at least an English ( ’EN’  ) entry.

modules

List of modules the filter (of type OPF_TYPE_SECTION_FIRST, OPF_TYPE_SECTION or OPF_TYPE_SECTION_LAST ) is applied to.  In the following two examples, the filter will be applied to all WYSIWYG- and News-sections.

'modules' => 'wysiwyg,news'

or

'modules' => array('wysiwyg', 'news')

There are some aliases defined

’all’all installed modules
’all_page_types’all page-type modules: wysiwyg, news, guestbook, download_gallery, manual, mapbaker, newsarc
’all_form_types’form, formx, mpform, miniform
’all_gallery_types’Auto_Gallery, fancy_box, flickrgallery, foldergallery, gallery, gdpics, imageflow, imagegallery, lightbox2, lightbox, minigallery, minigal2, panoramic_image, pickle, picturebox, tiltviewer, smoothgallery, swift, slideshow
’all_wrapper_types’curl, inlinewrapper, wrapper
’all_calendar_types’calendar, concert, event, event_calendar, extcal, procalendar
’all_shop_types’bakery, gocart, anyitems, lastitems
’all_code_types’code, code2, show_code, show_code_geshi, color4code
’all_poll_types’doodler, polls
’all_listing_types’accordion, addressbok, aggregator, bookings_v2, bookmarks, cabin, dirlist, enhanced_aggregator, faqbaker, faqmaker, glossary, jqCollapse, members, mfz, sitemap
’all_various_types’audioplayer, feedback, forum, newsreader, shoutbox, simpleviewer, small_ads, wb-forum, zitate

See <opf_modules_categories> for the actual module -> category relation.

pages

List of pages (PAGE_IDs) the filter is applied to.  Alias ‘all’ for all present pages.

// apply filter on page 12, 121 and 16 only
'pages' => '21,121,16' // written as list
'pages' => array('21', '121', '16') // written as array
// apply filter to all pages
'pages' => 'all'

pages_parent

List of pages (PAGE_IDs) the filter is applied to.  Additionaly the filter is applied to all sub-pages, too.  Alias ‘all’ for all present pages.

// apply filter on page 12 and 21, and all sub-pages of page 12 and 21
'pages_parent' => '12,21' // written as list
'pages_parent' => array('12', '21') // written as array

additional_fields

Arrays of additional configuration elements.

In case the filter needs some additional config-elements but it doesn’t have its own Settings-Page / Admin-Tool, you can add some fields using additional_fields.  Possible field-types are

textnormal HTML text-field
textareanormal HTML textarea
editareatextarea with activated editarea (Editor)
radionormal HTML radio-fields
checkboxnormal HTML checkbox-fields
selectnormal HTML select-field
arraysimple array broken up into several text-fields

allowedit has no affect on these fields.

See opf_filter_get_additional_values on how to retrieve values from these fields.

Example: Adding various fields

'additional_fields' => array(
    array( // add text-field "Name"
        'type' => 'text',    // type of field
        'label' => 'Name',       // Label for the text-field
        'variable' => 'name',    // name of variable
        'name' => 'af_name',     // name for HTML name-attribute
        'value' => '',       // default-value
        'style' => 'width: 98%;' // style (only for text, textarea and editarea for width and height)
    ),
    array( // add textarea "Long-text"
        'type' => 'textarea',
        'label' => 'Long-Text',
        'variable' => 'text',
        'name' => 'af_long_text',
        'value' => 'Default text',
        'style' => 'width: 98%;'
    ),
    array( // add select-field "Colour"
        'type' => 'select',
        'label' => 'Colour',
        'variable' => 'colour',
        'name' => 'af_colour',
        'value' => array(    // options
            'red'   => 'Red',
            'blue'  => 'Blue',
            'green' => 'Green'
        ),
        'checked'=> 'blue'       // selected option
        )
    ),
    array( // add checkbox
        'type' => 'checkbox',
        'label' => 'Use ECMA-variant',
        'variable' => 'use_ecma',
        'name' => 'af_use_ecma',
        'value' => 'use_ecma',
        'checked' => 1
    )
)

Example: Adding fields with language-support

'additional_fields' => array(
    array(
        'type' => 'text',         // type of field
        'label' => array(          // Language-dependent string
            'EN'=>'Locale',
            'DE'=>'Spracheinstellung'
        ),
        'variable' => 'locale',       // name of variable
        'name' => 'af_locale',    // name for name-attribute
        'value' => 'de_DE.utf-8',     // default-value
        'style' => 'width: 98%;'      // style (only for text, textarea and editarea for width and height)
    ),
    array(
        'type' => 'array',
        'label' => array(
            'EN'=>'Date format',
            'DE'=>'Datumsformat'
        ),
        'variable' => 'date_formats',
        'name' => 'af_date_formats',
        'value' => array(
            'D M d, Y'  => 'a b d Y',
            'M d Y'     => 'b d. %Y',
            'd M Y'     => 'd. b %Y',
            'jS F, Y'   => 'e. B %Y',
            'l, jS F, Y'=> 'A, e. B Y')
    ),
    array(
        'type' => 'select',
        'label' => array('EN'=>'Colour','DE'=>'Farbe'),
        'variable' => 'colour',
        'name' => 'af_colour',
        'value' => array(    // options
            'red'   => array('EN'=>'Red','DE'=>'Rot'),
            'blue'  => array('EN'=>'Blue','DE'=>'Blau'),
            'green' => array('EN'=>'Green','DE'=>'Grün')
        ),
        'checked'=> 'blue'       // selected option
        )
    )
)
labelLabel of field.  label can be an ordinary string “Enter Date”, or a language-specific array.
variableName of variable to be used for this field.  Radio-buttons uses the same name.
typeType of field: ‘text’, ‘textarea’, ‘editarea’, ‘radio’, ‘checkbox’, ‘select’ or ‘array’.
nameValue for the HTML name-attribute.  Radio-buttons uses the same name.
valueDefault-value.  ‘select’ and ‘array’ requires an array.
checkedFor ‘radio’ or ‘checkbox’: use ’checked’ => 1 to mark this field checked.  For ‘select’: use ’checked’ => ‘value’ i.e. repeat the selected value.
style(optional) For ‘text’, ‘textarea’, ‘editarea’: add width: and/or height: attributes.

opf_move_up_before

function opf_move_up_before($name,  
$ref_name = "")

Upon registration move a filter up to a position before another one.  This function can be used after opf_register_filter() to adjust its position in the filter list.  By default, freshly installed filters are appended to the end of the list of filters of the same type.  Use this function inside the <install.php> to move the filter up to a target position denoted by the name of another filter.  You can repeat this with different names of filters from which you know that they have to be applied after the one you are installing.  Alternatively, if $ref_name is an array, the filter denoted by $name is moved upwards to the position of the upper-most entry of the whole list.  If $ref_name is ommited, the filter $name is moved up to the top of the whole list.  In this case the return value is the new position of the filter $name

Prototype

bool opf_move_up_before( string $name, string $ref_name )

array opf_move_up_before( string $name, array $ref_name )

int opf_move_up_before( string $name )

Parameters

$name(string) the name of the filter to move up in the list
$ref_name(string) name of the filter at the target position or
$ref_name(array) names of the filters at the target positions

Returns

TRUE on success, FALSE if the types don’t match or the filters were not found or an array of bools, corresponding to the return values for each filter or the position of $name if $ref_name is ommitted

Example

opf_move_up_before('opf CSS to head', 'Searchengine Highlighter');

opf_unregister_filter

function opf_unregister_filter($name)

Un-Register a Filter.

This function is used to remove a filter.  Use this for Module-Filters in the module’s uninstall.php-file.

Prototype

bool opf_unregister_filter( string $name )

Parameters

$name(string) Name of filter to un-register.

Returns

TRUE on success, FALSE otherwise.

Example

opf_unregister_filter('PrettyPrint: Google-Code-Prettify');

opf_register_frontend_files

function opf_register_frontend_files($file,  
$type,  
$target = 'head',
$media = 'screen',
$iehack = '')

Register JS- or CSS-files to be loaded into the page’s <head>-section.

Prototype

bool opf_register_frontend_files( string $file, string $type, string $target=’head’, string $media=’screen’, string $iehack )

Parameters

$file(string) URL of file to register, or “inline” JS-script or CSS-style.
$type(string) Type: ‘js’ or ‘css’.
$target(string) Where to insert the file: ‘head’ or ‘body’.
$media(string) media, for stylesheets only, e.g.: ‘screen’ or ‘screen,print’.  Use ‘’ (empty string) otherwise.
$iehack(string) Special IE-Hack (for type js only).

Returns

Always TRUE.

Examples

// register JS-script
opf_register_frontend_files(WB_URL.'modules/opf_prettify/prettify.js', 'js');
// register JS-script in <body>
opf_register_frontend_files(WB_URL.'modules/opf_prettify/prettify.js', 'js', 'body');
// register CSS-Stylesheet
opf_register_frontend_files(WB_URL.'/modules/opf_pcdtr/pcdtr/styles.css', 'css');
// IE-Hack
opf_register_frontend_files(WB_URL.'/modules/opf_fix_png_ie6/sl.js', 'js', 'head', '', '[if lte IE 6]');
// output: <!--[if lte IE 6]><script ...></script><![endif]-->
// usage of "inline"-script
opf_register_frontend_files('
  <script type="text/javascript">function do_highlight() { highlighter.highlight(); }</script>
  ','js');

opf_register_onload_event

function opf_register_onload_event($function_name)

Register an Javascript onload-function inside page’s <head>-section, using window.attachEvent() or window.addEventListener().

Prototype

bool opf_register_onload_event( string $function_name )

Parameters

$function_name(string) Name of JS-function to register.

Returns

Always TRUE.

Example

opf_register_onload_event('prettyPrint');

Notes

There is no way to supply arguments to the function, yet.  Use opf_register_onload in case the function call needs arguments.

opf_register_onload

function opf_register_onload($script)

Register an Javascript script onload-function inside page’s <body>-section.

Prototype

bool opf_register_onload( string $script )

Parameters

$script(string) JS-script to register.

Returns

Always TRUE.

Example

opf_register_onload('prettyPrint();');
opf_register_onload("supersleight.run('".WB_URL."/modules/opf_fix_png_ie6/x.gif');");
opf_register_onload('$(\'#tagSphere\').tagSphere();');

opf_register_document_ready

function opf_register_document_ready($js)

Register an Javascript onload-event inside page’s <head>-section, using jquery’s jQuery(document).ready() method.

Prototype

bool opf_register_document_ready( string $js )

Parameters

$js(string) The Javascript-Code to use inside $(document).ready().

Returns

Always TRUE.

Requires

This function requires that jQuery is loaded in the page’s <head>-section.

Example

opf_register_document_ready('alert("OK!");');
opf_register_document_ready('$(\'#tagSphere\').tagSphere();');

opf_find_class

function opf_find_class($content,  
$match,  
$tag = '',
$attr = 'class')

Check whether a class (or any other attribute) is present in content.

Prototype

bool opf_find_class( string $content, string $match, string $tag=’’, string $attr=’class’ )

Parameters

$content(string) Content.
$match(string/regex) String to search for.
$tag(string/regex) HTML-tag.  Defaults to ‘’ (nothing).
$attr(string/regex) Attribute to check.  Defaults to ‘class’.

Returns

1 if $match is present, 0 otherwise.  In case of error, this function returns FALSE.

Example

// apply filter only if class 'special_class' is present somewhere in $content
if(opf_find_class($content, 'special_class')) {
    // ... apply filter
    return(TRUE);
} else {
    return(TRUE); // quit
}
// apply filter only if class 'php_highlighter' is present inside a <pre>-tag
// <pre class="class1 php_highlighter">...</pre>
if(opf_find_class($content, 'php_highlighter', 'pre')) {
    // ... apply filter
// apply filter only if id 'tagSphere' is present inside a <div>-tag
// <div class="class2" id="tagSphere">...</div>
if(opf_find_class($content, 'tagSphere', 'div', 'id')) {
    // ... apply filter

Regular expressions are allowed, too.  Those regexs are performed ungreedy (PCRE_UNGREEDY).

// search for class "cpp", "c" or "c++" in HTML-tag <pre> or <textarea>
if(opf_find_class($content, '(cpp|c|c\+\+)', '(pre|textarea)')) {
    // ... apply filter

opf_add_class

function opf_add_class(&$content,
$class,
$tag)

Add a class to a present HTML-tag, i.e.  <pre>.  The class will be added to all appearance of the given HTML-tag.

Prototype

bool opf_add_class( string $content, string $class, string $tag )

Parameters

$content(string) Content (by reference).
$class(string) Name of class to add.
$tag(string/regex) HTML-tag, e.g.  ‘pre’.

Returns

TRUE if $class was added, FALSE otherwise.

Example

// adds class "prettyPrint" to all <pre> tags
opf_add_class($content, 'prettyPrint', 'pre');
// adds class "prettyPrint" to all <pre> and <code> tags
opf_add_class($content, 'prettyPrint', '(?:pre|code)');

Note

$tag can be a regular expression (PCRE), too.  But keep in mind that no “capturing groups” are allowed, i.e. use always ?: e.g.: ‘(?:pre|code)’.  Per default those regexs are performed ungreedy (PCRE_UNGREEDY).

opf_add_class_to_class

function opf_add_class_to_class(&$content,  
$class,  
$present_class,  
$tag = '')

Add a class to an already present class.  The new class will be added to all appearance of the given class.

Prototype

bool opf_add_class_to_class( string $content, string $class, string $present_class, string $tag=’’ )

Parameters

$content(string) Content (by reference).
$class(string) Name of class to add.
$present_class(string/regex) Name of class to add $class to.
$tag(string/regex) HTML-tag.  Defaults to ‘’.

Returns

TRUE if $class was added, FALSE otherwise.

Example

// add class "php" to present class "prettify"
opf_add_class_to_class($content, 'php', 'prettify')
// <pre class="prettify"> ... </pre>
// will become
// <pre class="prettify php"> ... </pre>
// add class "php" to present class "prettify" but only for <code>-tags
opf_add_class_to_class($content, 'php', 'prettify', 'code')
// <pre class="prettify"> ... </pre>
// <code class="prettify">...</code>
// will become
// <pre class="prettify"> ... </pre>
// <code class="prettify php">...</code>

Note

$present_class and $tag can be a regular expression (PCRE), too.  But keep in mind that no “capturing groups” are allowed, i.e. use always ?: e.g.: ‘(?:pre|code)’.  Per default those regexs are performed ungreedy (PCRE_UNGREEDY).

opf_add_class_to_attr

function opf_add_class_to_attr(&$content,  
$class,  
$attr,  
$value,  
$tag = '')

Add a class to all HTML-tags that has a given attribute.

Prototype

bool opf_add_class_to_attr( string $content, string $class, string $attr, string $value, string $tag=’’ )

Parameters

$content(string) Content (by reference).
$class(string) Name of class to add.
$attr(string/regex) Name of attribute that has to be present.
$value(string/regex) Content of that attribute.
$tag(string/regex) HTML-tag.  Defaults to ‘’.

Returns

TRUE if $class was added, FALSE otherwise.

Examples

Note

$attr, $value and $tag can be a regular expression (PCRE), too.  But keep in mind that no “capturing groups” are allowed, i.e. use always ?: e.g.: ‘(?:pre|code)’.  Per default those regexs are performed ungreedy (PCRE_UNGREEDY).

opf_cut_extract

function opf_cut_extract(&$content,  
$regex,  
$subpattern = 0,
$modifers = 'iU',
$delimiter = '~',
$extracts = '')

Cuts pieces out of content using a regular expression and replace them by placeholders.

Prototype

array opf_cut_extract( string &$content, string $regex, string $subpattern=0, string $modifers=’iU’, string $delimiter=’~’, string $extracts=’’ )

Parameters

$content(string) Content (by reference).
$regex(string) Regular expression (PCRE), without delimiters and modifers, e.g.: ‘<input[^>]+/>’.  The regex is applied UNGREEDY per default.
$subpattern(string) Use the #.subpattern.  Defaults to 0.
$modifers(string) PCRE-modifiers to use, Defaults to ‘iU’.
$delimiter(string) Delimiter to use.  Defaults to ‘~’.
$extracts(array) An array returned by a former call to this function (optional).

Returns

Array containing the extracts.  The array will be empty if $regex didn’t match.

In case of error, this function returns FALSE and emits a error-message (level: E_USER_WARNING)

Example

Assume this filter-function:

function opff_work_on_links(&$content, $page_id, $section_id, $module, $wb) {
    $extracts = opf_cut_extract($content, '<a href=[^>]+>.*</a>'); // cut $extracts out of content
    var_dump($extracts);
    var_dump($content);
    opf_glue_extract($content, $extracts); // put $extracts back into $content
    return(TRUE);
}

Running this filter-function, $extracts may contain:

array
    '@@@OPF_EXTRACT_494e430fc8cf1@@@' => string '<a href="http://localhost/wbtest" target="_top"  class="menu_current"> start#22 </a>' (length=84)
    '@@@OPF_EXTRACT_494e430fc8d06@@@' => string '<a href="http://localhost/wbtest/pages/test-mit-umbruch.php" target="_top"  class="menu_default"> Test! mit! Umbruch </a>' (length=121)
    '@@@OPF_EXTRACT_494e430fc8d15@@@' => string '<a href="http://localhost/wbtest/pages/news.php" target="_top"  class="menu_default"> News </a>' (length=95)
    ...

and $content:

...
<tr>
    <td width="170">
        <ul>
        <li><span class="menu_current">@@@OPF_EXTRACT_494e430fc8cf1@@@</span></li>
        <li><span class="menu_default">@@@OPF_EXTRACT_494e430fc8d06@@@</span></li>
        <li><span class="menu_default">@@@OPF_EXTRACT_494e430fc8d15@@@</span></li>
...

Example

// PAGE_LAST-Filter: all '#' in menu-title will be converted to '<br />',
// to achieve an explicitly line-break in menu.
// Use menu-title e.g.: "entry# with linebreak", which will be converted to entry<br /> with linebreak
// Notice the use of $subpattern to fetch the (.*)-subpattern only.
// This example assumes that all menu-links will have a class="menu..." set.
function opff_menu_linebreak(&$content, $page_id, $section_id, $module, $wb) {
    // cut pieces out of $content
    $extracts = opf_cut_extract($content, '<a href=[^>]*class="menu[^>]*>(.*)</a>', 1, 'iUs');
    // check if opf_cut_extract() returned without error
    if($extracts) {
        foreach($extracts as $key => $str) {
            // modify
            $extracts[$key] = str_replace('#','<br />', $str);
        }
        // write $extracts back to $content
        opf_glue_extract($content, $extracts);
        return(TRUE);
    } else {  // opf_cut_extract() failed. $content may be damaged, so return FALSE
        return(FALSE);
    }
}

opf_glue_extract

function opf_glue_extract(&$content,
$extracts)

Prototype

bool opf_glue_extract( string &$content, string $extracts )

Parameters

$content(string) Content (by reference).
$extracts(array) An array returned by opf_cut_extract().

Notes

See opf_cut_extract().

Returns

TRUE.

opf_filter_get_data

function opf_filter_get_data($name = '')

Fetch data from filter.

Prototype

array opf_filter_get_data( string $name=’’ )

Parameters

$namestring Name of Filter.  Use ‘’ (empty string) for current filter.

Returns

Data of current filter, or FALSE in case of error.

Example

$data = opf_filter_get_data();
var_dump($data);

will output:

array
    'id' => string '12' (length=2)
    'userfunc' => string '0' (length=1)
    'position' => string '1' (length=1)
    'active' => string '1' (length=1)
    'allowedit' => string '0' (length=1)
    'allowedittarget' => string '1' (length=1)
    'name' => string 'PrettyPrint: Google-Code-Prettify' (length=33)
    'func' => string '' (length=0)
    'type' => string '3section' (length=8)
    'file' => string '/var/www/wbtest/modules/opf_prettify/filter.php' (length=47)
    'csspath' => string '/var/www/wbtest/modules/opf_prettify/prettify/prettify.css' (length=58)
    'funcname' => string 'opff_prettify' (length=13)
    'configurl' => string '' (length=0)
    'modules' =>
        array
            0 => string 'download_gallery' (length=16)
            1 => string 'manual' (length=6)
            2 => string 'news' (length=4)
            3 => string 'wysiwyg' (length=7)
    'desc' => string 'Prettifies all &lt;pre class=&quot;prettyprint&quot;&gt; and ...' (length=455)
    'pages' =>
        array
            0 => string 'all' (length=3)
            1 => string '99' (length=2)
            2 => string '104' (length=3)
            3 ...
    'pages_parent' =>
        array
            0 => string 'all' (length=3)
            1 => string '99' (length=2)
            2 => string '104' (length=3)
            3 ...
    'current' => boolean true
    'activated' => boolean false
    'failed' => boolean false

opf_filter_get_rel_pos

function opf_filter_get_rel_pos($name)

Checks if a given filter was or will be executed.

Prototype

int opf_filter_get_rel_pos( string $name )

Parameters

$namestring Name of Filter to test.

Returns

-1Filter $name was executed before the current one
0Filter $name is the current one
1Filter $name will be executed later
FALSEFilter $name is not active, or not installed.  Or an error occurred.

Examples

if(opf_filter_get_rel_pos('Menu Linebreak')) {
    // filter "Menu Linebreak" is installed and active (but not the currend one)
}
$pos = opf_filter_get_rel_pos('Menu Linebreak');
if($pos==1) {
    // filter Menu Linebreak will be called after this one
} elseif($pos==-1) {
    // filter Menu Linebreak was already called before this one
}

opf_filter_exists

function opf_filter_exists($name,  
$verbose = FALSE)

Checks whether a given filter exists

Prototype

bool opf_filter_exists( string $name, bool $verbose )

Parameters

$namestring Name of Filter to test.
$verbosebool Outout a Error message (E_USER_WARNING) if $filter doesn’t exists.

Returns

TRUE if $filter exists (i.e. is installed), FALSE otherwise.

Examples

if(opf_filter_exists('Menu Linebreak')) {
    // filter "Menu Linebreak" is installed
}

opf_is_childpage

function opf_is_childpage($child,
$parent)

Checks whether a page is a subpage of a given page (or the same page)

Prototype

bool opf_is_childpage( int $child, int $parent )

Parameters

$childint Page-ID of the possible childpage
$parentint Page-ID of page to test against

Returns

TRUE if $child is a childpage of $parent or if $child and $parent are the same pages.  FALSE otherwise.

Examples

if(opf_is_childpage(101, 9)) {
    // page-id 101 is a childpage of page-id 9
}

opf_filter_is_active

function opf_filter_is_active($name)

Checkes whether a given filter is active for the actual module and page_id

Prototype

bool opf_filter_is_active( string $name )

Parameters

$namestring Name of Filter

Returns

TRUE if filter $name is active for actual module and page_id.  FALSE otherwise.

Examples

if(opf_filter_is_active('Menu Linebreak')) {
    // Filter 'Menu Linebreak' is active for actual module and page_id.
}

opf_filter_get_additional_values

function opf_filter_get_additional_values()

Receive additional filter arguments

Prototype

array opf_filter_get_additional_values( void )

This function fetches additional filter arguments from filter-settings.  See opf_register_filter().

Returns

Array containing the additional arguments, or FALSE in case of error.

Examples

$values = opf_filter_get_additional_values();
$locale = $values['locale'];
$date_formats = $values['date_formats'];

opf_filter_name_to_setting

function opf_filter_name_to_setting($name)

For WBCE 1.2: This function converts the name of a filter to the settings string which is associated with the active/inactive state of the given filter name.

Prototype

string opf_filter_name_to_setting( string )

Parameters

$namestring the name of the filter

Returns

the name of the corresponding setting (in lowercase letters)

Examples

if(Settings::Get(opf_filter_name_to_setting($name))){
  // do something;
}
function opf_register_filter($filter,  
$serialized = FALSE)
Register a new Filter.
function opf_move_up_before($name,  
$ref_name = "")
Upon registration move a filter up to a position before another one.
function opf_unregister_filter($name)
Un-Register a Filter.
function opf_register_frontend_files($file,  
$type,  
$target = 'head',
$media = 'screen',
$iehack = '')
Register JS- or CSS-files to be loaded into the page’s head-section.
function opf_register_onload_event($function_name)
Register an Javascript onload-function inside page’s head-section, using window.attachEvent() or window.addEventListener().
function opf_register_onload($script)
Register an Javascript script onload-function inside page’s body-section.
function opf_register_document_ready($js)
Register an Javascript onload-event inside page’s head-section, using jquery’s jQuery(document).ready() 
function opf_find_class($content,  
$match,  
$tag = '',
$attr = 'class')
Check whether a class (or any other attribute) is present in content.
function opf_add_class(&$content,
$class,
$tag)
Add a class to a present HTML-tag, i.e.
function opf_add_class_to_class(&$content,  
$class,  
$present_class,  
$tag = '')
Add a class to an already present class.
function opf_add_class_to_attr(&$content,  
$class,  
$attr,  
$value,  
$tag = '')
Add a class to all HTML-tags that has a given attribute.
function opf_cut_extract(&$content,  
$regex,  
$subpattern = 0,
$modifers = 'iU',
$delimiter = '~',
$extracts = '')
Cuts pieces out of content using a regular expression and replace them by placeholders.
function opf_glue_extract(&$content,
$extracts)
bool opf_glue_extract( string &$content, string $extracts )
function opf_filter_get_data($name = '')
Fetch data from filter.
function opf_filter_get_rel_pos($name)
Checks if a given filter was or will be executed.
function opf_filter_exists($name,  
$verbose = FALSE)
Checks whether a given filter exists
function opf_is_childpage($child,
$parent)
Checks whether a page is a subpage of a given page (or the same page)
function opf_filter_is_active($name)
Checkes whether a given filter is active for the actual module and page_id
function opf_filter_get_additional_values()
Receive additional filter arguments
function opf_filter_name_to_setting($name)
For WBCE 1.2: This function converts the name of a filter to the settings string which is associated with the active/inactive state of the given filter name.
Close