Extension:Workflow.php

From Organic Design wiki
Revision as of 08:24, 6 October 2007 by Nad (talk | contribs)

<?php

  1. Extension:Workflow
Info.svg These are the MediaWiki extensions we're using and/or developing. Please refer to the information on the mediawiki.org wiki for installation and usage details. Extensions here which have no corresponding mediawiki article are either not ready for use or have been superseded. You can also browse our extension code in our local Subversion repository or our GitHub mirror.

Template:Php

  1. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
  2. - Author: User:NadCategory:Extensions created with Template:Extension
  3. - Started: 2007-10-06

if (!defined('MEDIAWIKI')) die('Not an entry point.');

define('WORKFLOW_VERSION','0.0.0, 2007-10-06');

$wgWorkflowMagic = "tag"; $wgExtensionFunctions[] = 'wfSetupWorkflow'; $wgHooks['LanguageGetMagic'][] = 'wfWorkflowLanguageGetMagic'; $wgAjaxExportList[] = 'wfWorkflowUpdateTag';

$wgExtensionCredits['parserhook'][] = array( 'name' => 'Workflow', 'author' => 'User:Nad', 'description' => 'Allows dynamic content areas called tags which can be switched between pre-selected states by clicking. The states can contain normal content such as images and categorisation links.', 'url' => 'http://www.mediawiki.org/wiki/Extension:Workflow', 'version' => WORKFLOW_VERSION );

  1. If it's a workflow-related ajax call, don't use dispatcher (because we need the catlinks generated by normal page render)

if ($wgUseAjax && $_REQUEST['action'] == 'ajax' && $_REQUEST['rs'] == 'wfWorkflowUpdateTag') { $_REQUEST['action'] = 'render'; $wgHooks['OutputPageBeforeHTML'][] = 'wfWorkflowUpdateTag'; if (is_array($_REQUEST['rsargs'])) foreach ($_REQUEST['rsargs'] as $arg) if (preg_match('/^(.+?)=(.+)$/',$arg,$m)) $_REQUEST[$m[1]] = $m[2]; }

  1. Expand the #tags to reveal the current state and hide the others and add javascript

function wfWorkflowExpandTag(&$parser) {

# Populate $argv with both named and numeric parameters $argv = array(); $items = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $items[] = $arg; }

# Build the container and all the states $text = ;

foreach ($items as $k => $v) $text .= "

$v

\n"; $text = "

\n$text

";

return $text; }

  1. Initiated by ajax update-tag request

function wfWorkflowUpdateTag() { global $wgUser,$wgOut; $skin = $wgUser->getSkin(); $catlinks = is_object($skin) ? $skin->getCategoryLinks() : 'Error: no skin!'; $wgOut->disable(); while(@ob_end_clean()); if (in_array('Content-Encoding: gzip',headers_list())) $catlinks = gzencode($catlinks); echo($catlinks); return true; }

  1. Called from $wgExtensionFunctions array when initialising extensions

function wfSetupWorkflow() { global $wgParser,$wgWorkflowMagic; $wgParser->setFunctionHook($wgWorkflowMagic,'wfWorkflowExpandTag'); }

  1. Needed in MediaWiki >1.8.0 for magic word hooks to work properly

function wfWorkflowLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgWorkflowMagic; $magicWords[$wgWorkflowMagic] = array(0,$wgWorkflowMagic); return true; } ?>