Project

General

Profile

Feature #22302 » 0013868_v5.patch

Administrator Admin, 2010-05-22 18:02

View differences:

NEWS.txt (Arbeitskopie)
* The t3editor code completion DB was updated to reflect the latest additions. Also the syntax highlighting engine was now extracted from the system extension so it can be used in other places of the TYPO3 Core as well.
* A donate notice will be shown to admins in the TYPO3 backend after using it for more than three months.
This behaviour can be disabled completely - see $TYPO3_CONF_VARS[BE][allowDonateWindow].
Frontend
========
t3lib/config_default.php (Arbeitskopie)
'elementVersioningOnly' => FALSE, // If true, only element versioning is allowed in the backend. This is recommended for new installations of TYPO3 4.2+ since "page" and "branch" versioning types are known for the drawbacks of loosing ids and "element" type versions supports moving now.
'versionNumberInFilename' => FALSE, // Boolean. If true, included CSS and JS files will have the timestamp embedded in the filename, ie. filename.1269312081.js. This will make browsers and proxies reload the files if they change (thus avoiding caching issues). IMPORTANT: this feature requires this .htaccess rule to work: RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]. If false the filemtime will be appended as a query-string.
'spriteIconGenerator_handler' => '', // String: Used to register own/other spriteGenerating Handler, they have to implement the interface t3lib_spriteManager_spriteIconGenerator
'allowDonateWindow' => TRUE, // Boolean. Defines whether to display a TYPO3 donate window to admin users that have been working with the system for more than three months.
'AJAX' => array( // array of key-value pairs for a unified use of AJAX calls in the TYPO3 backend. Keys are the unique ajaxIDs where the value will be resolved to call a method in an object. See ajax.php and the classes/class.typo3ajax.php for more information.
'SC_alt_db_navframe::expandCollapse' => 'typo3/alt_db_navframe.php:SC_alt_db_navframe->ajaxExpandCollapse',
'SC_alt_file_navframe::expandCollapse' => 'typo3/alt_file_navframe.php:SC_alt_file_navframe->ajaxExpandCollapse',
......
'BackendLogin::refreshLogin' => 'typo3/classes/class.ajaxlogin.php:AjaxLogin->refreshLogin',
'BackendLogin::isTimedOut' => 'typo3/classes/class.ajaxlogin.php:AjaxLogin->isTimedOut',
'BackendLogin::getChallenge' => 'typo3/classes/class.ajaxlogin.php:AjaxLogin->getChallenge',
'DonateWindow::disable' => 'typo3/classes/class.donatewindow.php:DonateWindow->disable',
'DonateWindow::postpone' => 'typo3/classes/class.donatewindow.php:DonateWindow->postpone',
'WorkspaceMenu::toggleWorkspacePreview' => 'typo3/classes/class.workspaceselector.php:WorkspaceSelector->toggleWorkspacePreview',
'WorkspaceMenu::setWorkspace' => 'typo3/classes/class.workspaceselector.php:WorkspaceSelector->setWorkspace',
'ExtDirect::getAPI' => 't3lib/extjs/class.t3lib_extjs_extdirectapi.php:t3lib_extjs_ExtDirectApi->getAPI',
t3lib/class.t3lib_beuserauth.php (Arbeitskopie)
$this->uc['lang']=$this->user['lang'];
$U=1;
}
// Setting the time of the first login:
if (!isset($this->uc['firstLoginTimeStamp'])) {
$this->uc['firstLoginTimeStamp'] = $GLOBALS['EXEC_TIME'];
$U = TRUE;
}
// Saving if updated.
if ($U) {
typo3/js/donate.js (Revision 0)
/***************************************************************
* Copyright notice
*
* (c) 2010 Oliver Hader <oliver@typo3.org>
* All rights reserved
*
* 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
* 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
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Donate window appearing in the backend
*/
Ext.namespace('Ext.ux.TYPO3');
Ext.ux.TYPO3.donate = Ext.extend(Ext.util.Observable, {
isUnloading: false,
logoutButton: null,
ajaxRequestDefault: null,
donateUrl: 'http://typo3.org/donate/',
constructor: function(config) {
this.ajaxRequestDefault = {
url: TYPO3.configuration.PATH_typo3 + 'ajax.php',
success: function() {},
failure: function() {}
};
config = config || {};
Ext.apply(this, config);
this.initComponents();
this.execute.defer(3000, this);
this.logoutButton = Ext.DomQuery.selectNode('#logout-button input');
Ext.ux.TYPO3.donate.superclass.constructor.call(this, config);
},
execute: function() {
this.donateWindow.show();
},
initComponents: function() {
this.donateWindow = new Ext.Window({
width: 450,
autoHeight: true,
closable: false,
resizable: false,
plain: true,
border: false,
modal: true,
draggable: false,
closeAction: 'hide',
id: 'donateWindow',
cls: 't3-window',
title: TYPO3.LLL.core.donateWindow_title,
html: TYPO3.LLL.core.donateWindow_message,
buttons: [{
scope: this,
icon: this.getDonateIcon(),
text: TYPO3.LLL.core.donateWindow_button_donate,
handler: this.donateAction
}, {
scope: this,
text: TYPO3.LLL.core.donateWindow_button_disable,
handler: this.disableAction
}, {
scope: this,
text: TYPO3.LLL.core.donateWindow_button_postpone,
handler: this.postponeAction
}]
});
},
unloadEventHandler: function(event) {
event.stopEvent();
this.isUnloading = true;
this.donateWindow.show();
this.removeUnloadEventListener();
},
donateAction: function() {
this.submitDisableAction();
this.donateWindow.hide();
window.open(this.donateUrl).focus();
this.continueUnloading();
},
disableAction: function() {
this.submitDisableAction();
this.donateWindow.hide();
this.continueUnloading();
},
postponeAction: function() {
this.submitPostponeAction();
this.donateWindow.hide();
this.addUnloadEventListener();
this.continueUnloading();
},
submitDisableAction: function() {
Ext.Ajax.request(Ext.apply(
this.ajaxRequestDefault, {
params: { 'ajaxID': 'DonateWindow::disable' }
}
));
},
submitPostponeAction: function() {
Ext.Ajax.request(Ext.apply(
this.ajaxRequestDefault, {
params: { 'ajaxID': 'DonateWindow::postpone' }
}
));
},
getDonateIcon: function() {
return TYPO3.configuration.PATH_typo3 + 'sysext/t3skin/images/icons/status/dialog-ok.png';
},
addUnloadEventListener: function() {
if (!this.isUnloading) {
Ext.EventManager.addListener(this.logoutButton, 'click', this.unloadEventHandler, this);
}
},
removeUnloadEventListener: function() {
Ext.EventManager.removeListener(this.logoutButton, 'click', this.unloadEventHandler, this);
},
continueUnloading: function() {
if (this.isUnloading && this.logoutButton) {
this.logoutButton.click();
}
}
});
/**
* Initialize the donate widget
*/
Ext.onReady(function() {
TYPO3.donate = new Ext.ux.TYPO3.donate();
});
typo3/classes/class.donatewindow.php (Revision 0)
<?php
/***************************************************************
* Copyright notice
*
* (c) 2010 Oliver Hader <oliver@typo3.org>
* All rights reserved
*
* 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
* 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
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* AJAX handler for the donate window shown in the TYPO3 backend.
*
* @author Oliver Hader <oliver@typo3.org>
*/
class DonateWindow implements t3lib_Singleton {
const FLAG_DonateWindowDisabled = 'DonateWindowDisabled';
const FLAG_DonateWindowPostponed = 'DonateWindowPostponed';
const VALUE_DonateWindowAppearsAfterDays = 90;
const VALUE_DonateWindowPostponeDays = 14;
/**
* @var t3lib_beUserAuth
*/
protected $backendUser;
/**
* Constructs this object.
*/
public function __construct() {
$this->setBackendUser($GLOBALS['BE_USER']);
}
/**
* Sets the backend user.
*
* @param t3lib_beUserAuth $backendUser
* @return void
*/
public function setBackendUser(t3lib_beUserAuth $backendUser) {
$this->backendUser = $backendUser;
}
/**
* Disables the donate window - thus it won't be shown again for this user.
*
* @param array $parameters: Parameters (not used)
* @param TYPO3AJAX $ajaxObj: The calling parent AJAX object
* @return void
*/
public function disable(array $parameters, TYPO3AJAX $ajaxObj) {
$this->backendUser->uc[self::FLAG_DonateWindowDisabled] = TYPO3_version;
$this->backendUser->writeUC();
}
/**
* Postpones the donate window - thus it will be shown again at a later time.
*
* @param array $parameters: Parameters (not used)
* @param TYPO3AJAX $ajaxObj: The calling parent AJAX object
* @return void
*/
public function postpone(array $parameters, TYPO3AJAX $ajaxObj) {
$this->backendUser->uc[self::FLAG_DonateWindowPostponed] = $GLOBALS['EXEC_TIME'];
$this->backendUser->writeUC();
}
/**
* Determines whether the donate window is allowed to be displayed.
*
* @return boolean Whether the donate window is allowed to be displayed.
*/
public function isDonateWindowAllowed() {
$uc = $this->backendUser->uc;
$isAdmin = $this->backendUser->isAdmin();
$firstLogin = $this->getFirstLoginTimeStamp();
$isTriggered = ($firstLogin && $GLOBALS['EXEC_TIME'] - $firstLogin > self::VALUE_DonateWindowAppearsAfterDays * 86400);
$isAllowed = (bool) $GLOBALS['TYPO3_CONF_VARS']['BE']['allowDonateWindow'];
$isCancelled = (isset($uc[self::FLAG_DonateWindowDisabled]) && !empty($uc[self::FLAG_DonateWindowDisabled]));
$isPostponed = (isset($uc[self::FLAG_DonateWindowPostponed]) && $uc[self::FLAG_DonateWindowPostponed] > $GLOBALS['EXEC_TIME'] - self::VALUE_DonateWindowPostponeDays * 86400);
return ($isAdmin && $isAllowed && !$isCancelled && !$isPostponed);
}
/**
* Gets the timestamp of the first login of the current backend user.
*
* @return integer Timestamp of the first login
*/
public function getFirstLoginTimeStamp() {
$firstLogin = NULL;
if (isset($this->backendUser->uc['firstLoginTimeStamp'])) {
$firstLogin = $this->backendUser->uc['firstLoginTimeStamp'];
}
return $firstLogin;
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/classes/class.donatewindow.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/classes/class.donatewindow.php']);
}
?>
typo3/backend.php (Arbeitskopie)
require('classes/class.typo3logo.php');
require('classes/class.modulemenu.php');
require_once('classes/class.donatewindow.php');
// core toolbar items
require('classes/class.workspaceselector.php');
......
/**
* Pagerenderer
*
* @var $pageRenderer t3lib_PageRenderer
* @var t3lib_PageRenderer
*/
protected $pageRenderer;
......
*/
public function render() {
if (t3lib_div::makeInstance('DonateWindow')->isDonateWindowAllowed()) {
$this->pageRenderer->addJsFile('js/donate.js');
}
// prepare the scaffolding, at this point extension may still add javascript and css
$logo = t3lib_div::makeInstance('TYPO3Logo');
$logo->setLogo('gfx/typo3logo_mini.png');
......
'tabs_closeAll' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.closeAll'),
'tabs_closeOther' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.closeOther'),
'tabs_close' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.close'),
'donateWindow_title' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.title'),
'donateWindow_message' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.message'),
'donateWindow_button_donate' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.button_donate'),
'donateWindow_button_disable' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.button_disable'),
'donateWindow_button_postpone' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.button_postpone'),
);
$t3LLLfileUpload = array(
'windowTitle' => $GLOBALS['LANG']->getLL('fileUpload_windowTitle'),
typo3/sysext/t3skin/extjs/xtheme-t3skin.css (Arbeitskopie)
#loginRefreshWindow .x-panel-body.x-panel-body-noheader.x-panel-body-noborder,
#loginRefreshWindow .x-panel-header.x-unselectable,
#loginformWindow .x-panel-header.x-unselectable {
#loginformWindow .x-panel-header.x-unselectable,
.t3-window .x-panel-body.x-panel-body-noheader.x-panel-body-noborder {
background-image: none;
background-color: transparent;
color: #000;
......
#loginformWindow .x-window-ml {
background-color: #E4E4E4;
}
.t3-window .x-window-body.x-window-body-noborder {
padding: 10px;
}
.t3-window .x-btn button {
padding-left: 3px;
padding-right: 3px;
}
#donateWindow.t3-window .x-window-body.x-window-body-noborder {
padding-left: 100px;
background: url(../images/general/donate_teaser.png) no-repeat 25px 10px !important;
}
typo3/sysext/lang/locallang_core.xml (Arbeitskopie)
<label index="tabs.closeAll">Close All Tabs</label>
<label index="tabs.closeOther">Close Other Tabs</label>
<label index="tabs.close">Close Tab</label>
<label index="donateWindow.title">TYPO3 donation notice</label>
<label index="donateWindow.message">&lt;b&gt;You have now used TYPO3 for more than three months.&lt;/b&gt; It would be great if you could donate. TYPO3 is Open Source and relies heavily on donations from its users and supporters.&lt;br/&gt; &lt;b&gt;Thank you&lt;/b&gt; for making this great Content Management System even better with your help!</label>
<label index="donateWindow.button_donate">Donate now</label>
<label index="donateWindow.button_disable">Never show again</label>
<label index="donateWindow.button_postpone">Remind me later</label>
</languageKey>
</data>
</T3locallang>
(3-3/3)