From c2e830f24685d1a3ac39ac13afe78b17940f19fc Mon Sep 17 00:00:00 2001
From: chris <chris@jalakai.co.uk>
Date: Fri, 14 Apr 2006 21:56:01 +0200
Subject: [PATCH] add ACTION_DISPATCH event

The 'ACTION_DISPATCH' event[1] is triggered prior to any processing of the $ACT
variable[2]. This gives custom content the opportunity to add new "do" commands
and to process any custom form data.

This event is advisory only (there are no '_before' or '_after' advise)

Preventing default action will skip Dokuwiki's own processing of the $ACT value, this
includes its cleansing of the $ACT variable.

[1] also refer ACTION_TEMPLATE event
[2] $ACT is the do variable from the query string

darcs-hash:20060414195601-9b6ab-8ae62d2c3a7c6f8c09c77436d9adbaba5404f51b.gz
---
 inc/actions.php | 160 ++++++++++++++++++++++++------------------------
 1 file changed, 80 insertions(+), 80 deletions(-)

diff --git a/inc/actions.php b/inc/actions.php
index 963be86a9..d585ccace 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -23,87 +23,87 @@ function act_dispatch(){
   global $lang;
   global $conf;
 
-  //sanitize $ACT
-  $ACT = act_clean($ACT);
-
-  //check if searchword was given - else just show
-  $s = cleanID($QUERY);
-  if($ACT == 'search' && empty($s)){
-    $ACT = 'show';
-  }
-
-  //login stuff
-  if(in_array($ACT,array('login','logout')))
-    $ACT = act_auth($ACT);
-
-  //check if user is asking to (un)subscribe a page
-  if($ACT == 'subscribe' || $ACT == 'unsubscribe')
-    $ACT = act_subscription($ACT);
-
-  //check permissions
-  $ACT = act_permcheck($ACT);
-
-  //register
-  if($ACT == 'register' && register()){
-    $ACT = 'login';
-  }
-
-  if ($ACT == 'resendpwd' && act_resendpwd()) {
-    $ACT = 'login';
-  }
-
-  //update user profile
-  if (($ACT == 'profile') && updateprofile()) {
-    msg($lang['profchanged'],1);
-    $ACT = 'show';
-  }
-
-  //save
-  if($ACT == 'save')
-    $ACT = act_save($ACT);
-
-  //draft deletion
-  if($ACT == 'draftdel')
-    $ACT = act_draftdel($ACT);
-
-  //draft saving on preview
-  if($ACT == 'preview')
-    $ACT = act_draftsave($ACT);
-
-  //edit
-  if(($ACT == 'edit' || $ACT == 'preview') && $INFO['editable']){
-    $ACT = act_edit($ACT);
-  }else{
-    unlock($ID); //try to unlock
-  }
-
-  //handle export
-  if(substr($ACT,0,7) == 'export_')
-    $ACT = act_export($ACT);
-
-  //display some infos
-  if($ACT == 'check'){
-    check();
-    $ACT = 'show';
-  }
-
-  //handle admin tasks
-  if($ACT == 'admin'){
-    // retrieve admin plugin name from $_REQUEST['page']
-    if ($_REQUEST['page']) {
-        $pluginlist = plugin_list('admin');
-        if (in_array($_REQUEST['page'], $pluginlist)) {
-          // attempt to load the plugin
-          if ($plugin =& plugin_load('admin',$_REQUEST['page']) !== NULL)
-              $plugin->handle();
-        }
+  // give plugins an opportunity to process the action
+  $evt = new event('ACTION_DISPATCH',$ACT);
+  $evt->trigger();
+  if ($evt->_default) {
+
+    //sanitize $ACT
+    $ACT = act_clean($ACT);
+    
+    //check if searchword was given - else just show
+    $s = cleanID($QUERY);
+    if($ACT == 'search' && empty($s)){
+      $ACT = 'show';
+    }
+  
+    //login stuff
+    if(in_array($ACT,array('login','logout')))
+      $ACT = act_auth($ACT);
+  
+    //check if user is asking to (un)subscribe a page
+    if($ACT == 'subscribe' || $ACT == 'unsubscribe')
+      $ACT = act_subscription($ACT);
+  
+    //check permissions
+    $ACT = act_permcheck($ACT);
+  
+    //register
+    if($ACT == 'register' && register()){
+      $ACT = 'login';
     }
-/*
-        if($_REQUEST['page'] == 'acl'){
-            require_once(DOKU_INC.'inc/admin_acl.php');
-            admin_acl_handler();
+  
+    if ($ACT == 'resendpwd' && act_resendpwd()) {
+      $ACT = 'login';
+    }
+  
+    //update user profile
+    if (($ACT == 'profile') && updateprofile()) {
+      msg($lang['profchanged'],1);
+      $ACT = 'show';
+    }
+  
+    //save
+    if($ACT == 'save')
+      $ACT = act_save($ACT);
+  
+    //draft deletion
+    if($ACT == 'draftdel')
+      $ACT = act_draftdel($ACT);
+  
+    //draft saving on preview
+    if($ACT == 'preview')
+      $ACT = act_draftsave($ACT);
+  
+    //edit
+    if(($ACT == 'edit' || $ACT == 'preview') && $INFO['editable']){
+      $ACT = act_edit($ACT);
+    }else{
+      unlock($ID); //try to unlock
+    }
+  
+    //handle export
+    if(substr($ACT,0,7) == 'export_')
+      $ACT = act_export($ACT);
+  
+    //display some infos
+    if($ACT == 'check'){
+      check();
+      $ACT = 'show';
+    }
+  
+    //handle admin tasks
+    if($ACT == 'admin'){
+      // retrieve admin plugin name from $_REQUEST['page']
+      if ($_REQUEST['page']) {
+          $pluginlist = plugin_list('admin');
+          if (in_array($_REQUEST['page'], $pluginlist)) {
+            // attempt to load the plugin
+            if ($plugin =& plugin_load('admin',$_REQUEST['page']) !== NULL)
+                $plugin->handle();
+          }
+      }
     }
-*/
   }
 
   //call template FIXME: all needed vars available?
@@ -418,4 +418,4 @@ function act_subscription($act){
   return 'show';
 }
 
-//Setup VIM: ex: et ts=2 enc=utf-8 :
+//Setup VIM: ex: et ts=2 enc=utf-8 :
\ No newline at end of file
-- 
GitLab