New report included in core, Costed Inventory Movement Report (rep308.php).
[fa-stable.git] / includes / hooks.inc
index 41bfde10e698d71dd511fedceec8b9d17c7b4137..b27fc35501788654afcd15ab69df50d23d5ad73c 100644 (file)
@@ -93,6 +93,19 @@ class hooks {
 //             return array($security_areas, $security_sections);
        }
 
+       //
+       //      Invoked for all modules before page header is displayed
+       //
+       function pre_header($fun_args)
+       {
+       }
+       //
+       //      Invoked for all modules before page footer is displayed
+       //
+       function pre_footer($fun_args)
+       {
+       }
+
        //
        // Price in words. $doc_type is set to document type and can be used to suppress 
        // price in words printing for selected document types.
@@ -103,7 +116,6 @@ class hooks {
        function price_in_words($amount, $doc_type)
        {
        }
-
        //
        // Exchange rate currency $curr as on date $date.
        // Keep in mind FA has internally implemented 3 exrate providers
@@ -118,6 +130,12 @@ class hooks {
                return null;
        }
 
+       // External authentication
+       // If used should return true after successfull athentication, false otherwise.
+       function authenticate($login, $password)
+       {
+               return null;
+       }
        // Generic function called at the end of Tax Report (report 709)
        // Can be used e.g. for special database updates on every report printing
        // or to print special tax report footer 
@@ -246,19 +264,22 @@ function hook_invoke_all($method, &$data, $opts=null)
 
        global $Hooks;
        
-       $result = array();
-       foreach($Hooks as $ext => $hook)
-               if (method_exists($hook, $method)) {
-                       set_ext_domain('modules/'.$ext);
-                       $result = $hook->$method($data, $opts);
-                       if (isset($result) && is_array($result)) {
-                               $return = array_merge_recursive($return, $result);
-                       } else if (isset($result)) {
-                               $return[] = $result;
-                               }
-               }
-       set_ext_domain();
-       return $result;
+       $return = array();
+       if (isset($Hooks))
+       {
+               foreach($Hooks as $ext => $hook)
+                       if (method_exists($hook, $method)) {
+                               set_ext_domain('modules/'.$ext);
+                               $result = $hook->$method($data, $opts);
+                               if (isset($result) && is_array($result)) {
+                                       $return = array_merge_recursive($return, $result);
+                               } else if (isset($result)) {
+                                       $return[] = $result;
+                                       }
+                               set_ext_domain();
+                       }
+       }
+       return $return;
 }
 /*
        Returns first non-null result returned from hook.
@@ -273,36 +294,34 @@ function hook_invoke_first($method, &$data, $opts=null)
                if (method_exists($hook, $method)) {
                        set_ext_domain('modules/'.$ext);
                        $result = $hook->$method($data, $opts);
+                       set_ext_domain();
                        if (isset($result))
                                break;
                }
        }
-       set_ext_domain();
        return $result;
 }
 /*
-       Returns result of last hook installed. Helps implement hooks overriding by 
+       Returns last non-null result returned from modules method. Helps implement hooks overriding by 
        extensions installed later.
-       
 */
 function hook_invoke_last($method, &$data, $opts=null)
 {
 
        global $Hooks;
 
-       $found = false;
-       foreach($Hooks as $ext => $hook) {
+       $result = null;
+       $Reverse = array_reverse($Hooks);
+       foreach($Reverse as $ext => $hook) {
                if (method_exists($hook, $method)) {
-                       $found = $ext;
+                       set_ext_domain('modules/'.$ext);
+                       $result = $hook->$method($data, $opts);
+                       set_ext_domain();
+                       if (isset($result))
+                               break;
                }
        }
-       $ret = null;
-       if ($found) {
-               set_ext_domain('modules/'.$found);
-               $ret = $Hooks[$found]->$method($data, $opts);
-               set_ext_domain();
-       }
-       return $ret;
+       return $result;
 }
 //------------------------------------------------------------------------------------------
 //     Database transaction hooks.
@@ -388,3 +407,11 @@ function hook_session_start($company)
        }
        return false;
 }
+//
+//     Third party authentication modules.
+//     Returns true after successfull authentication, false otherwise, null if no login hook is defined.
+//
+function hook_authenticate($login, $password)
+{
+       return hook_invoke_last('authenticate', $login, $password);
+}