[ Index ]
 

Code source de Typo3 4.1.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/t3lib/ -> class.t3lib_extobjbase.php (source)

   1  <?php
   2  /***************************************************************
   3  *  Copyright notice
   4  *
   5  *  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
   6  *  All rights reserved
   7  *
   8  *  This script is part of the TYPO3 project. The TYPO3 project is
   9  *  free software; you can redistribute it and/or modify
  10  *  it under the terms of the GNU General Public License as published by
  11  *  the Free Software Foundation; either version 2 of the License, or
  12  *  (at your option) any later version.
  13  *
  14  *  The GNU General Public License can be found at
  15  *  http://www.gnu.org/copyleft/gpl.html.
  16  *  A copy is found in the textfile GPL.txt and important notices to the license
  17  *  from the author is found in LICENSE.txt distributed with these scripts.
  18  *
  19  *
  20  *  This script is distributed in the hope that it will be useful,
  21  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  22  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23  *  GNU General Public License for more details.
  24  *
  25  *  This copyright notice MUST APPEAR in all copies of the script!
  26  ***************************************************************/
  27  /**
  28   * Contains the base class for 'Extension Objects' in backend modules.
  29   *
  30   * $Id: class.t3lib_extobjbase.php 593 2005-04-01 14:37:15Z typo3 $
  31   * Revised for TYPO3 3.6 July/2003 by Kasper Skaarhoj
  32   *
  33   * @author    Kasper Skaarhoj <kasperYYYY@typo3.com>
  34   */
  35  /**
  36   * [CLASS/FUNCTION INDEX of SCRIPT]
  37   *
  38   *
  39   *
  40   *  145: class t3lib_extobjbase
  41   *  197:     function init(&$pObj,$conf)
  42   *  221:     function handleExternalFunctionValue()
  43   *  237:     function incLocalLang()
  44   *  253:     function checkExtObj()
  45   *  268:     function extObjContent()
  46   *  279:     function modMenu()
  47   *
  48   * TOTAL FUNCTIONS: 6
  49   * (This index is automatically created/updated by the extension "extdeveval")
  50   *
  51   */
  52  
  53  
  54  
  55  
  56  
  57  
  58  
  59  
  60  
  61  
  62  
  63  /**
  64   * EXAMPLE: One level.
  65   *
  66   * This can be seen in the extension 'cms' where the info module have a function added. In 'ext_tables.php' this is done by this function call:
  67   *
  68   *     t3lib_extMgm::insertModuleFunction(
  69   *         'web_info',
  70   *         'tx_cms_webinfo_page',
  71   *         t3lib_extMgm::extPath($_EXTKEY).'web_info/class.tx_cms_webinfo.php',
  72   *         'LLL:EXT:cms/locallang_tca.php:mod_tx_cms_webinfo_page'
  73   *     );
  74   *
  75   *
  76   *
  77   * EXAMPLE: Two levels.
  78   * This is the advanced example. You can see it with the extension 'func_wizards' which is the first layer but then providing another layer for extensions to connect by.
  79   * The key used in TBE_MODULES_EXT is normally 'function' (for the 'function menu') but the 'func_wizards' extension uses an alternative key for its configuration: 'wiz'.
  80   * In the 'ext_tables.php' file of an extension ('wizard_crpages') which uses the framework provided by 'func_wizards' this looks like this:
  81   *
  82   *     t3lib_extMgm::insertModuleFunction(
  83   *         'web_func',
  84   *         'tx_wizardcrpages_webfunc_2',
  85   *         t3lib_extMgm::extPath($_EXTKEY).'class.tx_wizardcrpages_webfunc_2.php',
  86   *         'LLL:EXT:wizard_crpages/locallang.php:wiz_crMany',
  87   *         'wiz'
  88   *     );
  89   *
  90   * But for this two-level thing to work it also requires that the parent module (the real backend module) supports it.
  91   * This is the case for the modules web_func and web_info since they have two times inclusion sections in their index.php scripts. For example (from web_func):
  92   *
  93   *     // Make instance:
  94   *     $SOBE = t3lib_div::makeInstance("SC_mod_web_func_index");
  95   *     $SOBE->init();
  96   *
  97   *     // Include files?
  98   *     foreach($SOBE->include_once as $INC_FILE)    include_once($INC_FILE);
  99   *     $SOBE->checkExtObj();    // Checking for first level external objects
 100   *
 101   *     // Repeat Include files! - if any files has been added by second-level extensions
 102   *     foreach($SOBE->include_once as $INC_FILE)    include_once($INC_FILE);
 103   *     $SOBE->checkSubExtObj();    // Checking second level external objects
 104   *
 105   *     $SOBE->main();
 106   *     $SOBE->printContent();
 107   *
 108   * Notice that the first part is as usual: Include classes and call $SOBE->checkExtObj() to initialize any level-1 sub-modules
 109   * But then again ->include_once is traversed IF the initialization of the level-1 modules might have added more files!!
 110   * And after that $SOBE->checkSubExtObj() is called to initialize the second level.
 111   * In this way even a third level could be supported - but most likely that is a too layered model to be practical.
 112   *
 113   * Anyways, the final interesting thing is to see what the framework "func_wizard" actually does:
 114   *
 115   *     require_once(PATH_t3lib."class.t3lib_extobjbase.php");
 116   *     class tx_funcwizards_webfunc extends t3lib_extobjbase {
 117   *         var $localLangFile = "locallang.php";
 118   *         var $function_key = "wiz";
 119   *         function init(&$pObj,$conf)    {
 120   *                 // OK, handles ordinary init. This includes setting up the menu array with ->modMenu
 121   *             parent::init($pObj,$conf);
 122   *                 // Making sure that any further external classes are added to the include_once array. Notice that inclusion happens twice in the main script because of this!!!
 123   *             $this->handleExternalFunctionValue();
 124   *         }
 125   *     ....
 126   *
 127   * Notice that the handleExternalFunctionValue of this class (t3lib_extobjbase) is called and that the ->function_key internal var is set!
 128   *
 129   * The two level-2 sub-module "wizard_crpages" and "wizard_sortpages" are totally normal "submodules".
 130   */
 131  
 132  /**
 133   * Parent class for 'Extension Objects' in backend modules.
 134   * Used for 'submodules' to other modules. Also called 'Function menu modules' in t3lib_extMgm. And now its even called 'Extension Objects'. Or 'Module functions'. Wish we had just one name. Or a name at all...(?) Thank God its not so advanced when it works...
 135   * In other words this class is used for backend modules which is not true backend modules appearing in the menu but rather adds themselves as a new entry in the function menu which typically exists for a backend module (like Web>Functions, Web>Info or Tools etc...)
 136   * The magic that binds this together is stored in the global variable $TBE_MODULES_EXT where extensions wanting to connect a module based on this class to an existing backend module store configuration which consists of the classname, script-path and a label (title/name)
 137   * For more information about this, please see the large example comment for the class t3lib_SCbase. This will show the principle of a 'level-1' connection.
 138   * The more advanced example - having two layers as it is done by the 'func_wizards' extension with the 'web_info' module - can be seen in the comment above.
 139   *
 140   * @author    Kasper Skaarhoj <kasperYYYY@typo3.com>
 141   * @package TYPO3
 142   * @subpackage t3lib
 143   * @see t3lib_SCbase,tx_funcwizards_webfunc::init(), tx_funcwizards_webfunc, tx_wizardsortpages_webfunc_2
 144   */
 145  class t3lib_extobjbase {
 146  
 147      /**
 148       * Contains a reference to the parent object.
 149       * @see init()
 150       */
 151      var $pObj;    // parent SC object
 152  
 153      /**
 154       * Set to the directory name of this class file.
 155       * @see init()
 156       */
 157      var $thisPath = '';
 158  
 159      /**
 160       * Can be hardcoded to the name of a locallang.php file (from the same directory as the class file) to use/load
 161       * @see incLocalLang()
 162       */
 163      var $localLangFile = 'locallang.php';
 164  
 165      /**
 166       * Contains module configuration parts from TBE_MODULES_EXT if found
 167       *
 168       * @see handleExternalFunctionValue()
 169       */
 170      var $extClassConf;
 171  
 172      /**
 173       * If this value is set it points to a key in the TBE_MODULES_EXT array (not on the top level..) where another classname/filepath/title can be defined for sub-subfunctions.
 174       * This is a little hard to explain, so see it in action; it used in the extension 'func_wizards' in order to provide yet a layer of interfacing with the backend module.
 175       * The extension 'func_wizards' has this description: 'Adds the 'Wizards' item to the function menu in Web>Func. This is just a framework for wizard extensions.' - so as you can see it is designed to allow further connectivity - 'level 2'
 176       *
 177       * @see handleExternalFunctionValue(), tx_funcwizards_webfunc
 178       */
 179      var $function_key = '';
 180  
 181  
 182  
 183  
 184  
 185  
 186  
 187  
 188  
 189      /**
 190       * Initialize the object
 191       *
 192       * @param    object        A reference to the parent (calling) object (which is probably an instance of an extension class to t3lib_SCbase)
 193       * @param    array        The configuration set for this module - from global array TBE_MODULES_EXT
 194       * @return    void
 195       * @see t3lib_SCbase::checkExtObj()
 196       */
 197  	function init(&$pObj,$conf)    {
 198          global $LANG;
 199  
 200          $this->pObj = &$pObj;
 201  
 202              // Path of this script:
 203          $this->thisPath = dirname($conf['path']);
 204          if (!@is_dir($this->thisPath))    {
 205              die('Error: '.$this->thisPath.' was not a directory as expected...');
 206          }
 207  
 208              // Local lang:
 209          $this->incLocalLang();
 210  
 211              // Setting MOD_MENU items as we need them for logging:
 212          $this->pObj->MOD_MENU = array_merge($this->pObj->MOD_MENU,$this->modMenu());        // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...
 213      }
 214  
 215      /**
 216       * If $this->function_key is set (which means there are two levels of object connectivity) then $this->extClassConf is loaded with the TBE_MODULES_EXT configuration for that sub-sub-module
 217       *
 218       * @return    void
 219       * @see $function_key, tx_funcwizards_webfunc::init()
 220       */
 221  	function handleExternalFunctionValue()    {
 222              // Must clean first to make sure the correct key is set...
 223          $this->pObj->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->pObj->MOD_MENU, t3lib_div::_GP('SET'), $this->pObj->MCONF['name']);
 224          if ($this->function_key)    {
 225              $this->extClassConf = $this->pObj->getExternalItemConfig($this->pObj->MCONF['name'],$this->function_key,$this->pObj->MOD_SETTINGS[$this->function_key]);
 226              if (is_array($this->extClassConf) && $this->extClassConf['path'])    {
 227                  $this->pObj->include_once[] = $this->extClassConf['path'];
 228              }
 229          }
 230      }
 231  
 232      /**
 233       * Including any locallang file configured and merging its content over the current global LOCAL_LANG array (which is EXPECTED to exist!!!)
 234       *
 235       * @return    void
 236       */
 237  	function incLocalLang()    {
 238          global $LANG;
 239          #if ($this->localLangFile && @is_file($this->thisPath.'/'.$this->localLangFile))    {
 240          #    include($this->thisPath.'/'.$this->localLangFile);
 241          if ($this->localLangFile && (@is_file($this->thisPath.'/'.$this->localLangFile) || @is_file($this->thisPath.'/'.substr($this->localLangFile,0,-4).'.xml')))    {
 242              $LOCAL_LANG = $LANG->includeLLFile($this->thisPath.'/'.$this->localLangFile, FALSE);
 243              if (is_array($LOCAL_LANG))    $GLOBALS['LOCAL_LANG'] = t3lib_div::array_merge_recursive_overrule($GLOBALS['LOCAL_LANG'],$LOCAL_LANG);
 244          }
 245      }
 246  
 247      /**
 248       * Same as t3lib_SCbase::checkExtObj()
 249       *
 250       * @return    void
 251       * @see t3lib_SCbase::checkExtObj()
 252       */
 253  	function checkExtObj()    {
 254          if (is_array($this->extClassConf) && $this->extClassConf['name'])    {
 255              $this->extObj = t3lib_div::makeInstance($this->extClassConf['name']);
 256              $this->extObj->init($this->pObj,$this->extClassConf);
 257  
 258                  // Re-write:
 259              $this->pObj->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->pObj->MOD_MENU, t3lib_div::_GP('SET'), $this->pObj->MCONF['name']);
 260          }
 261      }
 262  
 263      /**
 264       * Calls the main function inside ANOTHER sub-submodule which might exist.
 265       *
 266       * @return    void
 267       */
 268  	function extObjContent()    {
 269          if (is_object($this->extObj))    return $this->extObj->main();
 270      }
 271  
 272      /**
 273       * Dummy function - but is used to set up additional menu items for this submodule.
 274       * For an example see the extension 'cms' where the 'web_info' submodule is defined in cms/web_info/class.tx_cms_webinfo.php, tx_cms_webinfo_page::modMenu()
 275       *
 276       * @return    array        A MOD_MENU array which will be merged together with the one from the parent object
 277       * @see init(), tx_cms_webinfo_page::modMenu()
 278       */
 279  	function modMenu()    {
 280          return array();
 281      }
 282  }
 283  ?>


Généré le : Sun Nov 25 17:13:16 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics