[BUGFIX] Unset stdWrap of select.pidInList
[Packages/TYPO3.CMS.git] / typo3 / sysext / cms / tslib / class.tslib_eidtools.php
index 32d77d9..814b7f6 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 2006 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 2006-2011 Kasper Skårhøj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
  * initialize parts of the FE environment as needed,
  * eg. Frontend User session, Database connection etc.
  *
- * $Id$
- *
- * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @author     Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-/**
- * [CLASS/FUNCTION INDEX of SCRIPT]
- *
- *
- *
- *   74: class tslib_eidtools
- *   81:     function initFeUser()
- *  108:     function connectDB()
- *
- * TOTAL FUNCTIONS: 2
- * (This index is automatically created/updated by the extension "extdeveval")
- *
- */
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 /**
  * Tools for scripts using the eID feature of index.php
  *
- * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @author     Kasper Skårhøj <kasperYYYY@typo3.com>
+ * @author     Dmitry Dulepov <dmitry@typo3.org>
  * @package TYPO3
  * @subpackage tslib
  */
-class tslib_eidtools {
+final class tslib_eidtools {
 
        /**
-        * Load and initialize Frontend User
+        * Load and initialize Frontend User. Note, this process is slow because
+        * it creates a calls many objects. Call this method only if necessary!
         *
         * @return      object          Frontend User object (usually known as TSFE->fe_user)
         */
-       function initFeUser()   {
-               global $TYPO3_CONF_VARS;
+       public static function initFeUser()     {
+               // Initialize the database. Do not use TSFE method as it may redirect to
+               // Install tool and call hooks, which do not expect to be called from eID
+               self::connectDB();
+
+               // Get TSFE instance. It knows how to initialize the user. We also
+               // need TCA because services may need extra tables!
+               self::initTCA();
+               $tsfe = self::getTSFE();
+               /* @var $tsfe tslib_fe */
 
-                       // Include classes necessary for initializing frontend user:
-                       // We will use tslib_fe to do that:
-               require_once(PATH_tslib.'class.tslib_fe.php');
-               require_once(PATH_t3lib.'class.t3lib_cs.php');
-               require_once(PATH_t3lib.'class.t3lib_userauth.php');
-               require_once(PATH_tslib.'class.tslib_feuserauth.php');
+               $tsfe->initFEuser();
 
-                       // Make new instance of TSFE object for initializing user:
-               $temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
-               $TSFE = new $temp_TSFEclassName($TYPO3_CONF_VARS,0,0);
-               $TSFE->connectToDB();
+               // Return FE user object:
+               return $tsfe->fe_user;
+       }
+
+       /**
+        * Connecting to database. If the function fails, last error message
+        * can be retrieved using $GLOBALS['TYPO3_DB']->sql_error().
+        *
+        * @return      boolean         TRUE if connection was successful
+        */
+       public static function connectDB()      {
+               if (!$GLOBALS['TYPO3_DB']->isConnected()) {
+                               // Attempt to connect to the database
+                       $GLOBALS['TYPO3_DB']->connectDB();
+               }
+                       // connectDB() throws exceptions if something went wrong,
+                       // so we are sure that connect was successful here.
+               return TRUE;
+       }
 
-                       // Initialize FE user:
-               $TSFE->initFEuser();
+       /**
+        * Initializes $GLOBALS['LANG'] for use in eID scripts.
+        *
+        * @param       string          $language       TYPO3 language code
+        * @return      void
+        */
+       public static function initLanguage($language = 'default') {
+               if (!is_object($GLOBALS['LANG'])) {
+                       $GLOBALS['LANG'] = t3lib_div::makeInstance('language');
+                       $GLOBALS['LANG']->init($language);
+               }
+       }
 
-                       // Return FE user object:
-               return $TSFE->fe_user;
+       /**
+        * Makes TCA available inside eID
+        *
+        * @return      void
+        */
+       public static function initTCA() {
+               // Some badly made extensions attempt to manipulate TCA in a wrong way
+               // (inside ext_localconf.php). Therefore $GLOBALS['TCA'] may become an array
+               // but in fact it is not loaded. The check below ensure that
+               // TCA is still loaded if such bad extensions are installed
+               if (!is_array($GLOBALS['TCA']) || !isset($GLOBALS['TCA']['pages'])) {
+                       // Load TCA using TSFE
+                       self::getTSFE()->includeTCA(FALSE);
+               }
        }
 
        /**
-        * Connecting to database
+        * Makes TCA for the extension available inside eID. Use this function if
+        * you need not to include the whole $GLOBALS['TCA']. However, you still need to call
+        * t3lib_div::loadTCA() if you want to access column array!
         *
+        * @param       string          $extensionKey   Extension key
         * @return      void
         */
-       function connectDB()    {
-               global $TYPO3_DB;
+       public static function initExtensionTCA($extensionKey) {
+               $extTablesPath = t3lib_extMgm::extPath($extensionKey, 'ext_tables.php');
+               if (file_exists($extTablesPath)) {
+                       $GLOBALS['_EXTKEY'] = $extensionKey;
+                       require_once($extTablesPath);
+                       unset($GLOBALS['_EXTKEY']);
+                       // We do not need to save restore the value of $GLOBALS['_EXTKEY']
+                       // because it is not defined to anything real outside of
+                       // ext_tables.php or ext_localconf.php scope.
+               }
+       }
 
-               $TYPO3_DB->connectDB();
+       /**
+        * Creating a single static cached instance of TSFE to use with this class.
+        *
+        * @return      tslib_fe                New instance of tslib_fe
+        */
+       private static function getTSFE() {
+               // Cached instance
+               static $tsfe = NULL;
+
+               if (is_null($tsfe)) {
+                       $tsfe = t3lib_div::makeInstance('tslib_fe', $GLOBALS['TYPO3_CONF_VARS'], 0, 0);
+               }
+
+               return $tsfe;
        }
 }
-?>
+
+?>
\ No newline at end of file