This commit was manufactured by cvs2svn to create tag
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_scbase.php
index f77f528..553d087 100644 (file)
@@ -1,22 +1,22 @@
 <?php
 /***************************************************************
 *  Copyright notice
-*  
-*  (c) 1999-2003 Kasper Skårhøj (kasper@typo3.com)
+*
+*  (c) 1999-2004 Kasper Skaarhoj (kasper@typo3.com)
 *  All rights reserved
 *
-*  This script is part of the TYPO3 project. The TYPO3 project is 
+*  This script is part of the TYPO3 project. The TYPO3 project is
 *  free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
-* 
+*
 *  The GNU General Public License can be found at
 *  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license 
+*  A copy is found in the textfile GPL.txt and important notices to the license
 *  from the author is found in LICENSE.txt distributed with these scripts.
 *
-* 
+*
 *  This script is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
-/** 
+/**
  * Contains the parent class for 'ScriptClasses' in backend modules.
  *
- * Revised for TYPO3 3.6 July/2003 by Kasper Skårhøj
+ * $Id$
+ * Revised for TYPO3 3.6 July/2003 by Kasper Skaarhoj
  *
- * @author     Kasper Skårhøj <kasper@typo3.com>
- * @package TYPO3
- * @subpackage t3lib
+ * @author     Kasper Skaarhoj <kasper@typo3.com>
  */
 /**
  * [CLASS/FUNCTION INDEX of SCRIPT]
  *
  *
  *
- *  136: class t3lib_SCbase 
- *  252:     function init()   
- *  269:     function menuConfig()     
- *  289:     function mergeExternalItems($modName,$menuKey,$menuArr)   
- *  308:     function handleExternalFunctionValue($MM_key='function')  
- *  325:     function getExternalItemConfig($modName,$menuKey,$value='')       
- *  339:     function checkExtObj()    
- *  353:     function checkSubExtObj() 
- *  362:     function extObjContent()  
+ *  133: class t3lib_SCbase
+ *  249:     function init()
+ *  266:     function menuConfig()
+ *  286:     function mergeExternalItems($modName,$menuKey,$menuArr)
+ *  305:     function handleExternalFunctionValue($MM_key='function')
+ *  322:     function getExternalItemConfig($modName,$menuKey,$value='')
+ *  336:     function checkExtObj()
+ *  350:     function checkSubExtObj()
+ *  362:     function extObjHeader()
+ *  371:     function extObjContent()
  *
- * TOTAL FUNCTIONS: 8
+ * TOTAL FUNCTIONS: 9
  * (This index is automatically created/updated by the extension "extdeveval")
  *
  */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 /**
  * EXAMPLE PROTOTYPE
- * 
- * As for examples there are lots of them if you search for classes which extends 't3lib_SCbase'. 
+ *
+ * As for examples there are lots of them if you search for classes which extends 't3lib_SCbase'.
  * However you can see a prototype example of how a module might use this class in an index.php file typically hosting a backend module.
  * NOTICE: This example only outlines the basic structure of how this class is used. You should consult the documentation and other real-world examples for some actual things to do when building modules.
- *  
+ *
  *               // TYPICAL 'HEADER' OF A BACKEND MODULE:
  *             unset($MCONF);
  *             require ('conf.php');
@@ -67,7 +82,7 @@
  *             $LANG->includeLLFile('EXT:prototype/locallang.php');
  *             require_once(PATH_t3lib.'class.t3lib_scbase.php');              // NOTICE THE INCLUSION OF t3lib_SCbase
  *             $BE_USER->modAccess($MCONF,1);
- *             
+ *
  *                     // SC_mod_prototype EXTENDS THE CLASS t3lib_SCbase with a main() and printContent() function:
  *             class SC_mod_prototype extends t3lib_SCbase {
  *                             // MAIN FUNCTION - HERE YOU CREATE THE MODULE CONTENT IN $this->content
  *                             echo $this->content;
  *                     }
  *             }
- *             
+ *
  *                     // CHECKING IF THERE ARE AN EXTENSION CLASS CONFIGURED FOR THIS CLASS:
  *             if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/prototype/index.php']) {
  *                     include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/prototype/index.php']);
  *             }
- *             
+ *
  *               // MAKE INSTANCE OF THE SCRIPT CLASS AND CALL init()
  *             $SOBE = t3lib_div::makeInstance('SC_mod_prototype');
  *             $SOBE->init();
- *             
+ *
  *               // AFTER INIT THE INTERNAL ARRAY ->include_once MAY HOLD FILENAMES TO INCLUDE
- *             reset($SOBE->include_once);     
- *             while(list(,$INC_FILE)=each($SOBE->include_once))       {include_once($INC_FILE);}
- *             
+ *             foreach($SOBE->include_once as $INC_FILE)       include_once($INC_FILE);
+ *
  *               // THEN WE WILL CHECK IF THERE IS A 'SUBMODULE' REGISTERED TO BE INITIALIZED AS WELL:
  *             $SOBE->checkExtObj();
- *             
+ *
  *               // THEN WE CALL THE main() METHOD AND THIS SHOULD SPARK THE CREATION OF THE MODULE OUTPUT.
  *             $SOBE->main();
  *               // FINALLY THE printContent() FUNCTION WILL OUTPUT THE ACCUMULATED CONTENT
  *             $SOBE->printContent();
  */
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 /**
  * Parent class for 'ScriptClasses' in backend modules.
  * See example comment above.
- * 
- * @author     Kasper Skårhøj <kasper@typo3.com>
+ *
+ * @author     Kasper Skaarhoj <kasper@typo3.com>
+ * @package TYPO3
+ * @subpackage t3lib
  * @see t3lib_extobjbase
  */
 class t3lib_SCbase {
@@ -162,7 +159,7 @@ class t3lib_SCbase {
 
 
        /**
-        * The module menu items array. Each key represents a key for which values can range between the items in the array of that key. 
+        * The module menu items array. Each key represents a key for which values can range between the items in the array of that key.
         * @see init()
         */
        var $MOD_MENU= Array (
@@ -174,13 +171,13 @@ class t3lib_SCbase {
         * @see $MOD_MENU
         */
        var $MOD_SETTINGS=array();
-       
+
        /**
         * Module TSconfig based on PAGE TSconfig / USER TSconfig
         * @see menuConfig()
         */
        var $modTSconfig;
-       
+
        /**
         * If type is 'ses' then the data is stored as session-lasting data. This means that it'll be wiped out the next time the user logs in.
         * Can be set from extension classes of this class before the init() function is called.
@@ -188,15 +185,15 @@ class t3lib_SCbase {
         * @see menuConfig(), t3lib_BEfunc::getModuleData()
         */
        var $modMenu_type = '';
-       
+
        /**
         * dontValidateList can be used to list variables that should not be checked if their value is found in the MOD_MENU array. Used for dynamically generated menus.
         * Can be set from extension classes of this class before the init() function is called.
-        * 
+        *
         * @see menuConfig(), t3lib_BEfunc::getModuleData()
         */
        var $modMenu_dontValidateList = '';
-       
+
        /**
         * List of default values from $MOD_MENU to set in the output array (only if the values from MOD_MENU are not arrays)
         * Can be set from extension classes of this class before the init() function is called.
@@ -209,31 +206,31 @@ class t3lib_SCbase {
         * Contains module configuration parts from TBE_MODULES_EXT if found
         *
         * @see handleExternalFunctionValue()
-        */ 
+        */
        var $extClassConf;
 
        /**
         * Contains absolute paths to class files to include from the global scope. This is done in the module index.php files after calling the init() function
         *
         * @see handleExternalFunctionValue()
-        */ 
+        */
        var $include_once=array();
 
        /**
         * Generally used for accumulating the output content of backend modules
-        */ 
+        */
        var $content='';
 
        /**
         * Generally used to hold an instance of the 'template' class from typo3/template.php
-        */ 
-       var $doc;       
+        */
+       var $doc;
 
        /**
         * May contain an instance of a 'Function menu module' which connects to this backend module.
         *
         * @see checkExtObj()
-        */ 
+        */
        var $extObj;
 
 
@@ -245,14 +242,14 @@ class t3lib_SCbase {
 
        /**
         * Initializes the backend module by setting internal variables, initializing the menu.
-        * 
-        * @return      void            
+        *
+        * @return      void
         * @see menuConfig()
         */
        function init() {
                $this->MCONF = $GLOBALS['MCONF'];
-               $this->id = intval(t3lib_div::GPvar('id'));
-               $this->CMD = t3lib_div::GPvar('CMD');
+               $this->id = intval(t3lib_div::_GP('id'));
+               $this->CMD = t3lib_div::_GP('CMD');
                $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
                $this->menuConfig();
                $this->handleExternalFunctionValue();
@@ -262,8 +259,8 @@ class t3lib_SCbase {
         * Initializes the internal MOD_MENU array setting and unsetting items based on various conditions. It also merges in external menu items from the global array TBE_MODULES_EXT (see mergeExternalItems())
         * Then MOD_SETTINGS array is cleaned up (see t3lib_BEfunc::getModuleData()) so it contains only valid values. It's also updated with any SET[] values submitted.
         * Also loads the modTSconfig internal variable.
-        * 
-        * @return      void            
+        *
+        * @return      void
         * @see init(), $MOD_MENU, $MOD_SETTINGS, t3lib_BEfunc::getModuleData(), mergeExternalItems()
         */
        function menuConfig()   {
@@ -273,12 +270,12 @@ class t3lib_SCbase {
                $this->MOD_MENU['function'] = t3lib_BEfunc::unsetMenuItems($this->modTSconfig['properties'],$this->MOD_MENU['function'],'menu.function');
 
                        // CLEANSE 'function' SETTINGS
-               $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::GPvar('SET'), $this->MCONF['name'], $this->modMenu_type, $this->modMenu_dontValidateList, $this->modMenu_setDefaultList);
+               $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name'], $this->modMenu_type, $this->modMenu_dontValidateList, $this->modMenu_setDefaultList);
        }
 
        /**
         * Merges menu items from global array $TBE_MODULES_EXT
-        * 
+        *
         * @param       string          Module name for which to find value
         * @param       string          Menu key, eg. 'function' for the function menu.
         * @param       array           The part of a MOD_MENU array to work on.
@@ -300,9 +297,9 @@ class t3lib_SCbase {
        /**
         * Loads $this->extClassConf with the configuration for the CURRENT function of the menu.
         * If for this array the key 'path' is set then that is expected to be an absolute path to a file which should be included - so it is set in the internal array $this->include_once
-        * 
+        *
         * @param       string          The key to MOD_MENU for which to fetch configuration. 'function' is default since it is first and foremost used to get information per "extension object" (I think that is what its called)
-        * @return      void            
+        * @return      void
         * @see $include_once, init()
         */
        function handleExternalFunctionValue($MM_key='function')        {
@@ -315,7 +312,7 @@ class t3lib_SCbase {
        /**
         * Returns configuration values from the global variable $TBE_MODULES_EXT for the module given.
         * For example if the module is named "web_info" and the "function" key ($menuKey) of MOD_SETTINGS is "stat" ($value) then you will have the values of $TBE_MODULES_EXT['webinfo']['MOD_MENU']['function']['stat'] returned.
-        * 
+        *
         * @param       string          Module name
         * @param       string          Menu key, eg. "function" for the function menu. See $this->MOD_MENU
         * @param       string          Optionally the value-key to fetch from the array that would otherwise have been returned if this value was not set. Look source...
@@ -332,8 +329,8 @@ class t3lib_SCbase {
         * The array $this->extClassConf is set in handleExternalFunctionValue() based on the value of MOD_SETTINGS[function]
         * (Should be) called from global scope right after inclusion of files from the ->include_once array.
         * If an instance is created it is initiated with $this passed as value and $this->extClassConf as second argument. Further the $this->MOD_SETTING is cleaned up again after calling the init function.
-        * 
-        * @return      void            
+        *
+        * @return      void
         * @see handleExternalFunctionValue(), t3lib_extMgm::insertModuleFunction(), $extObj
         */
        function checkExtObj()  {
@@ -341,26 +338,39 @@ class t3lib_SCbase {
                        $this->extObj = t3lib_div::makeInstance($this->extClassConf['name']);
                        $this->extObj->init($this,$this->extClassConf);
                                // Re-write:
-                       $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::GPvar('SET'), $this->MCONF['name']);
+                       $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name']);
                }
        }
 
        /**
         * Calls the checkExtObj function in sub module if present.
-        * 
-        * @return      void            
+        *
+        * @return      void
         */
        function checkSubExtObj()       {
                if (is_object($this->extObj))   $this->extObj->checkExtObj();
        }
 
        /**
-        * Calls the main function inside the "Function menu module" if present
-        * 
-        * @return      void            
+        * Calls the 'header' function inside the "Function menu module" if present.
+        * A header function might be needed to add JavaScript or other stuff in the head. This can't be done in the main function because the head is already written.
+        * example call in the header function:
+        * $this->pObj->doc->JScode = $this->pObj->doc->wrapScriptTags(' ...
+        *
+        * @return      void
+        */
+       function extObjHeader() {
+               if (is_callable(array($this->extObj,'head')))   $this->extObj->head();
+       }
+
+       /**
+        * Calls the 'main' function inside the "Function menu module" if present
+        *
+        * @return      void
         */
        function extObjContent()        {
-               if (is_object($this->extObj))   $this->content.=$this->extObj->main();
+               $this->extObj->pObj = &$this;
+               if (is_callable(array($this->extObj, 'main')))  $this->content.=$this->extObj->main();
        }
 }
-?>
\ No newline at end of file
+?>