Project

General

Profile

Bug #25040 » 17592.patch

Administrator Admin, 2011-02-15 10:53

View differences:

t3lib/class.t3lib_pagerenderer.php (revision )
/**
* Adds the ExtDirect code
*
* @param array $javascriptNamespaces
* @return void
*/
public function addExtDirectCode() {
public function addExtDirectCode($filterNamespaces = array()) {
if ($this->extDirectCodeAdded) {
return;
}
$this->extDirectCodeAdded = TRUE;
$token = '';
if (count($filterNamespaces) === 0) {
$filterNamespaces = array('TYPO3');
}
// for ExtDirect we need flash message support
$this->addJsFile(t3lib_div::resolveBackPath($this->backPath . '../t3lib/js/extjs/ux/flashmessages.js'));
$token = $api = '';
if (TYPO3_MODE === 'BE') {
$formprotection = t3lib_formprotection_Factory::get();
$token = $formprotection->generateToken('extDirect');
}
/** @var $extDirect t3lib_extjs_ExtDirectApi */
$extDirect = t3lib_div::makeInstance('t3lib_extjs_ExtDirectApi');
$api = $extDirect->getApiPhp($filterNamespaces);
if ($api) {
$this->addJsInlineCode('TYPO3ExtDirectAPI', $api);
}
// Note: we need to iterate thru the object, because the addProvider method
// does this only with multiple arguments
$this->addExtOnReadyCode('
$this->addExtOnReadyCode( '
(function() {
TYPO3.ExtDirectToken = "' . $token . '";
for (var api in Ext.app.ExtDirectAPI) {
typo3/sysext/workspaces/Classes/Controller/PreviewController.php (revision )
$this->pageRenderer->enableExtJsDebug();
// Load JavaScript:
$this->pageRenderer->addExtDirectCode();
$this->pageRenderer->addJsFile(
$this->backPath . 'ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.Workspaces&' . TYPO3_version,
NULL,
FALSE
);
$this->pageRenderer->addExtDirectCode(array(
'TYPO3.Workspaces'
));
$this->pageRenderer->addJsFile($this->backPath . '../t3lib/js/extjs/ux/flashmessages.js');
$this->pageRenderer->addJsFile($this->backPath . 'js/extjs/iframepanel.js');
......
if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php'])) {
include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php']);
}
?>
?>
t3lib/stddb/tables.php (revision )
);
// register the pagetree core navigation component
t3lib_extMgm::addCoreNavigationComponent('web', 'typo3-pagetree', array(
'TYPO3.Components.PageTree'
));
t3lib_extMgm::addCoreNavigationComponent('web', 'typo3-pagetree');
/**
* $TBE_STYLES configures backend styles and colors; Basically this contains all the values that can be used to create new skins for TYPO3.
typo3/classes/class.livesearch.php (revision )
*/
protected function addJavascriptToBackend() {
$pageRenderer = $GLOBALS['TBE_TEMPLATE']->getPageRenderer();
$pageRenderer->addJsFile('ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.LiveSearchActions&' . TYPO3_version, 'text/javascript', $compress = FALSE);
$this->backendReference->addJavascriptFile('js/livesearch.js');
}
typo3/sysext/em/classes/class.tx_em_extensionmanager.php (revision )
$this->pageRenderer->enableExtJSQuickTips();
// Load JavaScript:
$this->pageRenderer->addJsFile($this->parentObject->doc->backPath .
'ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.EM',
NULL,
FALSE
);
$this->pageRenderer->addJsFile($this->parentObject->doc->backPath .
'ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.EMSOAP',
NULL,
FALSE
);
$this->pageRenderer->addExtDirectCode(array(
'TYPO3.EM',
'TYPO3.EMSOAP',
'TYPO3.ExtDirectStateProvider'
));
$this->pageRenderer->addExtDirectCode();
// Localization
$labels = tx_em_Tools::getArrayFromLocallang(t3lib_extMgm::extPath('em', 'language/locallang.xml'));
$labels['yes'] = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xml:yes');
......
include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/sysext/em/classes/class.tx_em_extensionsmanager.php']);
}
?>
?>
typo3/template.php (revision )
$this->docStyle();
if ($this->extDirectStateProvider) {
$this->pageRenderer->addJsFile(
$this->backPath . 'ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.ExtDirectStateProvider&' . TYPO3_version,
NULL,
FALSE
);
$this->pageRenderer->addJsFile($this->backPath . '../t3lib/js/extjs/ExtDirect.StateProvider.js');
}
......
protected function loadCshJavascript() {
$this->pageRenderer->loadExtJS();
$this->pageRenderer->addJsFile($this->backPath .'../t3lib/js/extjs/contexthelp.js');
$this->pageRenderer->addJsFile($this->backPath . 'ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.CSH&' . TYPO3_version, NULL, FALSE);
$this->pageRenderer->addExtDirectCode();
}
t3lib/core_autoload.php (revision )
't3lib_spritemanager_spritebuildinghandler' => PATH_t3lib . 'spritemanager/class.t3lib_spritemanager_spritebuildinghandler.php',
't3lib_spritemanager_abstracthandler' => PATH_t3lib . 'spritemanager/class.t3lib_spritemanager_abstracthandler.php',
't3lib_extjs_extdirectdebug' => PATH_t3lib . 'extjs/class.t3lib_extjs_extdirectdebug.php',
't3lib_extjs_extdirectapi' => PATH_t3lib . 'extjs/class.t3lib_extjs_extdirectapi.php',
't3lib_tree_abstracttree' => PATH_t3lib . 'tree/class.t3lib_tree_abstracttree.php',
't3lib_tree_abstractdataprovider' => PATH_t3lib . 'tree/class.t3lib_tree_abstractdataprovider.php',
't3lib_tree_abstractstateprovider' => PATH_t3lib . 'tree/class.t3lib_tree_abstractstateprovider.php',
typo3/backend.php (revision )
$this->pageRenderer->addJsFile($jsFile);
}
// TYPO3.Ajax.ExtDirec is used for BE toolbar items and may be later for general services
if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect']) && is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect'])) {
foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect'] as $key => $value) {
if (strpos($key, 'TYPO3.Ajax.ExtDirect') !== FALSE) {
$this->pageRenderer->addJsFile('ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.Ajax.ExtDirect&' . TYPO3_version, NULL, FALSE);
break;
}
}
}
$this->pageRenderer->addJsFile('ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.BackendUserSettings&' . TYPO3_version, NULL, FALSE);
$this->generateJavascript();
$this->pageRenderer->addJsInlineCode('BackendInlineJavascript', $this->js);
......
foreach ($jsFiles as $jsFile) {
$this->pageRenderer->addJsFile($relativeComponentPath . 'javascript/' . $jsFile);
}
if (is_array($info['extDirectNamespaces']) && count($info['extDirectNamespaces'])) {
foreach ($info['extDirectNamespaces'] as $namespace) {
$this->pageRenderer->addJsFile(
'ajax.php?ajaxID=ExtDirect::getAPI&namespace=' . $namespace . '&' . TYPO3_version,
NULL,
FALSE
);
}
}
}
}
}
}
/**
* renders the items in the top toolbar
typo3/sysext/workspaces/Classes/Controller/ReviewController.php (revision )
$this->pageRenderer->enableExtJsDebug();
// Load JavaScript:
$this->pageRenderer->addExtDirectCode();
$this->pageRenderer->addJsFile($this->backPath . 'ajax.php?ajaxID=ExtDirect::getAPI&namespace=TYPO3.Workspaces&' . TYPO3_version, NULL, FALSE);
$this->pageRenderer->addExtDirectCode(array(
'TYPO3.Workspaces'
));
$this->pageRenderer->addJsFile($this->backPath . '../t3lib/js/extjs/ux/flashmessages.js');
$this->pageRenderer->addJsFile($this->backPath . '../t3lib/js/extjs/ux/Ext.grid.RowExpander.js');
......
include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/ReviewController.php']);
}
?>
?>
t3lib/class.t3lib_extmgm.php (revision )
*
* @param string $module
* @param string $componentId
* @param array $extDirectNamespaces
* @return void
*/
public static function addNavigationComponent($module, $componentId, $extDirectNamespaces = array()) {
public static function addNavigationComponent($module, $componentId) {
$GLOBALS['TBE_MODULES']['_navigationComponents'][$module] = array(
'componentId' => $componentId,
'extKey' => $GLOBALS['_EXTKEY'],
'isCoreComponent' => FALSE,
'extDirectNamespaces' => $extDirectNamespaces
);
}
......
* @param array $extDirectNamespaces
* @return void
*/
public static function addCoreNavigationComponent($module, $componentId, $extDirectNamespaces = array()) {
self::addNavigationComponent($module, $componentId, $extDirectNamespaces);
public static function addCoreNavigationComponent($module, $componentId) {
self::addNavigationComponent($module, $componentId);
$GLOBALS['TBE_MODULES']['_navigationComponents'][$module]['isCoreComponent'] = TRUE;
}
t3lib/extjs/class.t3lib_extjs_extdirectapi.php (revision )
* @return void
*/
public function getAPI($ajaxParams, TYPO3AJAX $ajaxObj) {
$filterNamespace = t3lib_div::_GET('namespace');
// Check GET-parameter no_cache and extCache setting
$extCache = isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['extCache']) && (
$GLOBALS['TYPO3_CONF_VARS']['SYS']['extCache'] === 0 ||
$GLOBALS['TYPO3_CONF_VARS']['SYS']['extCache'] === '0'
);
$noCache = t3lib_div::_GET('no_cache') ? TRUE : $extCache;
// look up into the cache
$cacheIdentifier = 'ExtDirectApi';
$cacheHash = md5($cacheIdentifier . $filterNamespace . t3lib_div::getIndpEnv('TYPO3_SSL') .
serialize($this->settings) . TYPO3_MODE . t3lib_div::getIndpEnv('HTTP_HOST'));
// with no_cache always generate the javascript content
$cacheContent = $noCache ? '' : t3lib_pageSelect::getHash($cacheHash);
// generate the javascript content if it wasn't found inside the cache and cache it!
if (!$cacheContent) {
$javascriptNamespaces = $this->generateAPI($filterNamespace);
if (!empty($javascriptNamespaces)) {
t3lib_pageSelect::storeHash(
$cacheHash,
serialize($javascriptNamespaces),
$cacheIdentifier
);
$ajaxObj->setContent(array());
}
}
} else {
$javascriptNamespaces = unserialize($cacheContent);
}
// enable caching
$expireDate = date('r', $GLOBALS['EXEC_TIME'] + 3600 * 24 * 30);
header('Expires: ' . $expireDate);
header('Cache-control: public');
header('Pragma:');
/**
* Get the API for a given nameapace
*
* @throws t3lib_exception
* @param array $filterNamespaces
* @return string
*/
public function getApiPhp(array $filterNamespaces) {
$javascriptNamespaces = $this->getExtDirectApi($filterNamespaces);
// return the generated javascript API configuration
if (count($javascriptNamespaces)) {
$setup = '
if (typeof Ext.app.ExtDirectAPI !== "object") {
return '
if (!Ext.isObject(Ext.app.ExtDirectAPI)) {
Ext.app.ExtDirectAPI = {};
}
if (typeof Object.extend !== "function") {
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
};
}
Ext.apply(Ext.app.ExtDirectAPI, ' .
json_encode($javascriptNamespaces) . ');
';
$ajaxObj->setContent($javascriptNamespaces);
$ajaxObj->setContentFormat('javascript');
$ajaxObj->setJavascriptCallbackWrap(
$setup . 'Ext.app.ExtDirectAPI = Object.extend(Ext.app.ExtDirectAPI, |);'
);
} else {
if ($filterNamespace) {
// namespace error
$errorMessage = sprintf($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:ExtDirect.namespaceError'),
__CLASS__, $filterNamespace
$errorMessage = $this->getNamespaceError($filterNamespaces);
throw new InvalidArgumentException(
$errorMessage,
1297645190
);
}
);
}
else {
// no namespace given
$errorMessage = sprintf($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:ExtDirect.noNamespace'),
__CLASS__
);
}
}
// make js multiline message
$msg = t3lib_div::trimExplode(LF, str_replace('"', '\"', $errorMessage), TRUE);
$errorMessage = '';
foreach ($msg as $line) {
$errorMessage .= '"' . $line . '" + ' . LF;
}
$errorMessage = substr(trim($errorMessage), 0, -1);
//generate the javascript
$ajaxObj->setContentFormat('javascript');
$ajaxObj->setJavascriptCallbackWrap('
errorMessage = ' . $errorMessage . ';
if (typeof console === "object") {
console.log(errorMessage);
} else {
alert(errorMessage);
}
');
}
}
/**
* Generates the API that is configured inside the ExtDirect configuration
* array "$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect']".
*
* @param string $filerNamespace namespace that should be loaded like TYPO3.Backend
* @param array $filerNamespace namespace that should be loaded like array('TYPO3.Backend')
* @return array javascript API configuration
*/
protected function generateAPI($filterNamespace) {
protected function generateAPI(array $filterNamespaces) {
$javascriptNamespaces = array();
if (is_array($this->settings)) {
foreach ($this->settings as $javascriptName => $className) {
......
$javascriptNamespace = implode('.', $splittedJavascriptName);
// only items inside the wanted namespace
if (strpos($javascriptNamespace, $filterNamespace) !== 0) {
if (!$this->findNamespace($javascriptNamespace, $filterNamespaces)) {
continue;
}
......
return $url;
}
/**
* Generates the API or reads it from cache
*
* @param array $filterNamespaces
* @param bool $checkGetParam
* @return string $javascriptNamespaces
*/
protected function getExtDirectApi(array $filterNamespaces) {
// Check GET-parameter no_cache and extCache setting
$noCache = isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['extCache']) && (
$GLOBALS['TYPO3_CONF_VARS']['SYS']['extCache'] === 0 ||
$GLOBALS['TYPO3_CONF_VARS']['SYS']['extCache'] === '0'
);
$noCache = t3lib_div::_GET('no_cache') ? TRUE : $noCache;
// look up into the cache
$cacheIdentifier = 'ExtDirectApi';
$cacheHash = md5($cacheIdentifier . implode(',', $filterNamespaces) . t3lib_div::getIndpEnv('TYPO3_SSL') .
serialize($this->settings) . TYPO3_MODE . t3lib_div::getIndpEnv('HTTP_HOST'));
// with no_cache always generate the javascript content
$cacheContent = $noCache ? '' : t3lib_pageSelect::getHash($cacheHash);
// generate the javascript content if it wasn't found inside the cache and cache it!
if (!$cacheContent) {
$javascriptNamespaces = $this->generateAPI($filterNamespaces);
if (count($javascriptNamespaces)) {
t3lib_pageSelect::storeHash(
$cacheHash,
serialize($javascriptNamespaces),
$cacheIdentifier
);
}
}
} else {
$javascriptNamespaces = unserialize($cacheContent);
}
return $javascriptNamespaces;
}
/**
* Generates the error message
*
* @param array $filterNamespaces
* @return string $errorMessage
*/
protected function getNamespaceError(array $filterNamespaces) {
if (count($filterNamespaces)) {
// namespace error
$errorMessage = sprintf($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:ExtDirect.namespaceError'),
__CLASS__, implode(',', $filterNamespaces)
);
}
else {
// no namespace given
$errorMessage = sprintf($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:ExtDirect.noNamespace'),
__CLASS__
);
}
return $errorMessage;
}
/**
* Looks if the given namespace is present in $filterNamespaces
*
* @param string $namespace
* @param array $filterNamespaces
* @return bool
*/
protected function findNamespace($namespace, array $filterNamespaces) {
if ($filterNamespaces === array('TYPO3')) {
return TRUE;
}
$found = FALSE;
foreach ($filterNamespaces as $filter) {
if (t3lib_div::isFirstPartOfStr($filter, $namespace)) {
$found = TRUE;
break;
}
}
return $found;
}
}
if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['t3lib/extjs/class.t3lib_extjs_extdirectapi.php'])) {
include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['t3lib/extjs/class.t3lib_extjs_extdirectapi.php']);
}
?>
?>
(1-1/2)