* Fixed bug #2087, introduced by #1078
* Marked t3lib_ajax as subject to change
* Fixed clickmenu bug with ajax
+ * updated CSS styled content: integrated accessible mailforms, accessible menus, accessible tables
+ * inserted update wizard and compatibility version
2005-12-25 Dmitry Dulepov <typo3@accio.lv>
$internalFields = t3lib_div::uniqueList($fields.',uid,pid'.($table == 'pages' ? ',t3ver_swapmode' : ''));
$row = t3lib_BEfunc::getRecord($table,$uid,$internalFields,$where);
t3lib_BEfunc::workspaceOL($table,$row);
-
+
if (is_array ($row)) {
foreach (array_keys($row) as $key) {
if (!t3lib_div::inList($fields, $key) && $key{0} !== '_') {
unset ($row[$key]);
}
- }
+ }
}
} else {
$row = t3lib_BEfunc::getRecord($table,$uid,$fields,$where);
t3lib_BEfunc::workspaceOL($table,$row);
- }
+ }
return $row;
}
$warnings[] = 'The encryption key is not set! Set it in <a href="'.$url.'">$TYPO3_CONF_VARS[SYS][encryptionKey]</a>';
}
+ // check if there are still updates to perform
+ if (!t3lib_div::compat_version(TYPO3_version)) {
+ $url = 'install/index.php?redirect_url=index.php'.urlencode('?TYPO3_INSTALL[type]=update');
+ $warnings[] = 'This installation is not configured for the TYPO3 version it is running. Please visit the <a href="'.$url.'" target="_blank">Update Wizard</a> in the Install Tool.';
+ }
+
if(count($warnings)) {
$content = '<table border="0" cellpadding="0" cellspacing="0" class="warningbox"><tr><td>'.
- $GLOBALS['TBE_TEMPLATE']->icons(3).'Security warning!<br />'.
+ $GLOBALS['TBE_TEMPLATE']->icons(3).'Important notice!<br />'.
'- '.implode('<br />- ', $warnings).'<br /><br />'.
'It is highly recommended that you change this immediately.'.
'</td></tr></table>';
return intval((int)$verParts[0].str_pad((int)$verParts[1],3,'0',STR_PAD_LEFT).str_pad((int)$verParts[2],3,'0',STR_PAD_LEFT));
}
+ /**
+ * Returns true if the current TYPO3 version (or compatibility version) is compatible to the input version
+ *
+ * @param string Minimum version number required (format x.y.z)
+ * @return boolean true or false
+ */
+ function compat_version($verNumberStr) {
+ global $TYPO3_CONF_VARS;
+ $currVersionStr = $TYPO3_CONF_VARS['SYS']['compat_version']?$TYPO3_CONF_VARS['SYS']['compat_version']:TYPO3_version;
+
+ if (t3lib_div::int_from_ver($currVersionStr) < t3lib_div::int_from_ver($verNumberStr)) {
+ return FALSE;
+ } else {
+ return TRUE;
+ }
+ }
+
/**
* Makes a positive integer hash out of the first 7 chars from the md5 hash of the input
* Usage: 5
}
}
break;
+ case 'compatVersion':
+ return t3lib_div::compat_version($pcs[1]);
+ break;
case 'userFunc':
$values = split('\(|\)',$pcs[1]);
$funcName=trim($values[0]);
),
'SYS' => Array( // System related concerning both frontend and backend.
'sitename' => 'TYPO3', // Name of the base-site. This title shows up in the root of the tree structure if you're an 'admin' backend user.
+ 'compat_version' => '3.8.1', // Compatibility version. TYPO3 behavior will try to be compatible with the output from the TYPO3 version set here. It is recommended to change this setting with the Upgrade Wizard.
'encryptionKey' => '', // This is a "salt" used for various kinds of encryption, CRC checksums and validations. You can enter any rubbish string here but try to keep it secret. You should notice that a change to this value might invalidate temporary information, URLs etc. At least, clear all cache if you change this so any such information can be rebuild with the new key.
'doNotCheckReferer' => 0, // Boolean. If set, it's NOT checked numerous places that the refering host is the same as the current. This is an option you should set if you have problems with proxies not passing the HTTP_REFERER variable.
'recursiveDomainSearch' => 0, // Boolean. If set, the search for domain records will be done recursively by stripping parts of the host name off until a matching domain record is found.
unset($typo_db_tables_script);
unset($typo_db_extTableDef_script);
-// Based on the configuration of the image processing some options may be forced:
+ // Based on the configuration of the image processing some options may be forced:
if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['image_processing']) {
$GLOBALS['TYPO3_CONF_VARS']['GFX']['im']=0;
$GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']=0;
'CGLcompliance_note' => '',
'private' => 0,
'download_password' => '',
- 'version' => '0.2.2', // Don't modify this! Managed automatically during upload to repository.
+ 'version' => '0.3.1', // Don't modify this! Managed automatically during upload to repository.
'_md5_values_when_last_written' => 'a:36:{s:21:"ext_conf_template.txt";s:4:"44ff";s:12:"ext_icon.gif";s:4:"1845";s:17:"ext_localconf.php";s:4:"b9d5";s:15:"ext_php_api.dat";s:4:"f62a";s:14:"ext_tables.php";s:4:"c1f8";s:16:"pageTSconfig.txt";s:4:"a3eb";s:11:"CVS/Entries";s:4:"4fb6";s:14:"CVS/Repository";s:4:"96d6";s:8:"CVS/Root";s:4:"0ea2";s:12:"doc/TODO.txt";s:4:"6534";s:14:"doc/manual.sxw";s:4:"85e4";s:15:"doc/CVS/Entries";s:4:"0a8a";s:18:"doc/CVS/Repository";s:4:"e39c";s:12:"doc/CVS/Root";s:4:"0ea2";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:4:"8ab0";s:17:"pi1/locallang.php";s:4:"79d0";s:15:"pi1/CVS/Entries";s:4:"43e7";s:18:"pi1/CVS/Repository";s:4:"07e9";s:12:"pi1/CVS/Root";s:4:"0ea2";s:20:"static/constants.txt";s:4:"ff7a";s:20:"static/editorcfg.txt";s:4:"8d1c";s:16:"static/setup.txt";s:4:"49b4";s:18:"static/CVS/Entries";s:4:"2f1f";s:21:"static/CVS/Repository";s:4:"64f2";s:15:"static/CVS/Root";s:4:"0ea2";s:15:"css/example.css";s:4:"9804";s:24:"css/example_outlines.css";s:4:"e656";s:14:"css/readme.txt";s:4:"af18";s:15:"css/CVS/Entries";s:4:"bc3d";s:18:"css/CVS/Repository";s:4:"1c6e";s:12:"css/CVS/Root";s:4:"0ea2";s:31:"css/img/background_gradient.gif";s:4:"45d7";s:28:"css/img/red_arrow_bullet.gif";s:4:"82d6";s:19:"css/img/CVS/Entries";s:4:"a4f6";s:22:"css/img/CVS/Repository";s:4:"3aff";s:16:"css/img/CVS/Root";s:4:"0ea2";}',
);
if ($_EXTCONF['setPageTSconfig']) {
t3lib_extMgm::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:css_styled_content/pageTSconfig.txt">');
}
+
+$TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['compat_version']['tx_cssstyledcontent_accessibility'] = array('version' => 3009000, 'description' => 'The rendering of the following elements has changed:<ul><li><b>tt_content.menu</b> (used f.e. for sitemaps): Instead of div-tags, lists are used now.</li><li><b>tt_content.mailform</b>: Mailforms do not use tables anymore, instead, they use the div-tag. Besides that, mailforms are accessible now.</li><li><b>The p-tag has been removed from all table cells.</b></li></ul>', 'description_acknowledge' => 'Yes, I know that I will need to update my stylesheets to comply with this change.');
+
+
?>
\ No newline at end of file
# TYPO3 CVS ID: $Id$
if (!defined ('TYPO3_MODE')) die ('Access denied.');
+ // add flexform
+t3lib_extMgm::addPiFlexFormValue('default', 'FILE:EXT:css_styled_content/flexform_ds.xml');
+t3lib_extMgm::addToAllTCAtypes('tt_content','pi_flexform;;;;1-1-1','table');
+
t3lib_extMgm::addStaticFile($_EXTKEY,'static/','CSS Styled Content');
?>
\ No newline at end of file
--- /dev/null
+<T3DataStructure>
+ <meta>
+ <langDisable>1</langDisable>
+ </meta>
+ <sheets>
+ <sDEF>
+ <ROOT>
+ <TCEforms>
+ <sheetTitle>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables</sheetTitle>
+ </TCEforms>
+ <type>array</type>
+ <el>
+ <acctables_caption>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_caption</label>
+ <config>
+ <type>input</type>
+ <size>33</size>
+ </config>
+ </TCEforms>
+ </acctables_caption>
+
+ <acctables_summary>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_summary</label>
+ <config>
+ <type>input</type>
+ <size>33</size>
+ </config>
+ </TCEforms>
+ </acctables_summary>
+
+ <acctables_tfoot>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_tfoot</label>
+ <config>
+ <type>check</type>
+ </config>
+ </TCEforms>
+ </acctables_tfoot>
+
+ <acctables_headerpos>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_headerpos</label>
+ <config>
+ <type>select</type>
+ <items type="array">
+ <numIndex index="0" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_headerpos.I.0</numIndex>
+ <numIndex index="1"></numIndex>
+ </numIndex>
+ <numIndex index="1" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_headerpos.I.1</numIndex>
+ <numIndex index="1">top</numIndex>
+ </numIndex>
+ <numIndex index="2" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_headerpos.I.2</numIndex>
+ <numIndex index="1">left</numIndex>
+ </numIndex>
+ </items>
+ <minitems>0</minitems>
+ <maxitems>1</maxitems>
+ <size>1</size>
+ </config>
+ </TCEforms>
+ </acctables_headerpos>
+ <acctables_nostyles>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_nostyles</label>
+ <config>
+ <type>check</type>
+ </config>
+ </TCEforms>
+ </acctables_nostyles>
+
+ <acctables_tableclass>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_acctables_tableclass</label>
+ <config>
+ <type>input</type>
+ <size>33</size>
+ <eval>nospace,trim,alphanum_x</eval>
+ </config>
+ </TCEforms>
+ </acctables_tableclass>
+ </el>
+ </ROOT>
+ </sDEF>
+ <s_parsing>
+ <ROOT>
+ <TCEforms>
+ <sheetTitle>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing</sheetTitle>
+ </TCEforms>
+ <type>array</type>
+ <el>
+ <tableparsing_quote>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_quote</label>
+ <config>
+ <type>select</type>
+ <items type="array">
+ <numIndex index="0" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_quote_none</numIndex>
+ <numIndex index="1"></numIndex>
+ </numIndex>
+ <numIndex index="1" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_quote_single</numIndex>
+ <numIndex index="1">39</numIndex>
+ </numIndex>
+ <numIndex index="2" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_quote_double</numIndex>
+ <numIndex index="1">34</numIndex>
+ </numIndex>
+ </items>
+ <minitems>0</minitems>
+ <maxitems>1</maxitems>
+ <size>1</size>
+ </config>
+ </TCEforms>
+ </tableparsing_quote>
+
+ <tableparsing_delimiter>
+ <TCEforms>
+ <label>LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_delimiter</label>
+ <config>
+ <type>select</type>
+ <items type="array">
+ <numIndex index="0" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_delimiter_pipe</numIndex>
+ <numIndex index="1">124</numIndex>
+ </numIndex>
+ <numIndex index="1" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_delimiter_semicolon</numIndex>
+ <numIndex index="1">59</numIndex>
+ </numIndex>
+ <numIndex index="2" type="array">
+ <numIndex index="0">LLL:EXT:css_styled_content/locallang_db.xml:tt_content.tx_cssstyledcontent_tableparsing_delimiter_colon</numIndex>
+ <numIndex index="1">44</numIndex>
+ </numIndex>
+ </items>
+ <minitems>0</minitems>
+ <maxitems>1</maxitems>
+ <size>1</size>
+ </config>
+ </TCEforms>
+ </tableparsing_delimiter>
+ </el>
+ </ROOT>
+ </s_parsing>
+ </sheets>
+</T3DataStructure>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<T3locallang>
+ <meta type="array">
+ <description>labels for tables in CSS styled content</description>
+ <type>database</type>
+ <csh_table></csh_table>
+ <fileId>EXT:css_styled_content/locallang_db.xml</fileId>
+ <labelContext type="array">
+ </labelContext>
+ </meta>
+ <data type="array">
+ <languageKey index="default" type="array">
+ <label index="tt_content.tx_cssstyledcontent_acctables">Accessibility</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_caption">Table caption (<caption>)</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_summary">Table summary ("summary" attribute in <table> tags)</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_tfoot">Use table-footer (<tfoot>) on last table row</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos.I.0">no header</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos.I.1">top</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos.I.2">left</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos">Table Header position</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_nostyles">No CSS styles for this table</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_tableclass">CSS class for the table.</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing">Table parsing</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_quote">Text delimiter</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_quote_none">none</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_quote_single">'</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_quote_double">"</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_delimiter">Field delimiter</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_delimiter_pipe">|</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_delimiter_semicolon">;</label>
+ <label index="tt_content.tx_cssstyledcontent_tableparsing_delimiter_colon">,</label>
+ </languageKey>
+ <languageKey index="dk">EXT:csh_dk/css_styled_content/dk.locallang_db.xml</languageKey>
+ <languageKey index="de">EXT:csh_de/css_styled_content/de.locallang_db.xml</languageKey>
+ <languageKey index="no">EXT:csh_no/css_styled_content/no.locallang_db.xml</languageKey>
+ <languageKey index="it">EXT:csh_it/css_styled_content/it.locallang_db.xml</languageKey>
+ <languageKey index="fr">EXT:csh_fr/css_styled_content/fr.locallang_db.xml</languageKey>
+ <languageKey index="es">EXT:csh_es/css_styled_content/es.locallang_db.xml</languageKey>
+ <languageKey index="nl">EXT:csh_nl/css_styled_content/nl.locallang_db.xml</languageKey>
+ <languageKey index="cz">EXT:csh_cz/css_styled_content/cz.locallang_db.xml</languageKey>
+ <languageKey index="pl">EXT:csh_pl/css_styled_content/pl.locallang_db.xml</languageKey>
+ <languageKey index="si">EXT:csh_si/css_styled_content/si.locallang_db.xml</languageKey>
+ <languageKey index="fi">EXT:csh_fi/css_styled_content/fi.locallang_db.xml</languageKey>
+ <languageKey index="tr">EXT:csh_tr/css_styled_content/tr.locallang_db.xml</languageKey>
+ <languageKey index="se">EXT:csh_se/css_styled_content/se.locallang_db.xml</languageKey>
+ <languageKey index="pt">EXT:csh_pt/css_styled_content/pt.locallang_db.xml</languageKey>
+ <languageKey index="ru">EXT:csh_ru/css_styled_content/ru.locallang_db.xml</languageKey>
+ <languageKey index="ro">EXT:csh_ro/css_styled_content/ro.locallang_db.xml</languageKey>
+ <languageKey index="ch">EXT:csh_ch/css_styled_content/ch.locallang_db.xml</languageKey>
+ <languageKey index="sk">EXT:csh_sk/css_styled_content/sk.locallang_db.xml</languageKey>
+ <languageKey index="lt">EXT:csh_lt/css_styled_content/lt.locallang_db.xml</languageKey>
+ <languageKey index="is">EXT:csh_is/css_styled_content/is.locallang_db.xml</languageKey>
+ <languageKey index="hr">EXT:csh_hr/css_styled_content/hr.locallang_db.xml</languageKey>
+ <languageKey index="hu">EXT:csh_hu/css_styled_content/hu.locallang_db.xml</languageKey>
+ <languageKey index="gl">EXT:csh_gl/css_styled_content/gl.locallang_db.xml</languageKey>
+ <languageKey index="th">EXT:csh_th/css_styled_content/th.locallang_db.xml</languageKey>
+ <languageKey index="gr">EXT:csh_gr/css_styled_content/gr.locallang_db.xml</languageKey>
+ <languageKey index="hk">EXT:csh_hk/css_styled_content/hk.locallang_db.xml</languageKey>
+ <languageKey index="eu">EXT:csh_eu/css_styled_content/eu.locallang_db.xml</languageKey>
+ <languageKey index="bg">EXT:csh_bg/css_styled_content/bg.locallang_db.xml</languageKey>
+ <languageKey index="br">EXT:csh_br/css_styled_content/br.locallang_db.xml</languageKey>
+ <languageKey index="et">EXT:csh_et/css_styled_content/et.locallang_db.xml</languageKey>
+ <languageKey index="ar">EXT:csh_ar/css_styled_content/ar.locallang_db.xml</languageKey>
+ <languageKey index="he">EXT:csh_he/css_styled_content/he.locallang_db.xml</languageKey>
+ <languageKey index="ua">EXT:csh_ua/css_styled_content/ua.locallang_db.xml</languageKey>
+ <languageKey index="lv">EXT:csh_lv/css_styled_content/lv.locallang_db.xml</languageKey>
+ <languageKey index="jp">EXT:csh_jp/css_styled_content/jp.locallang_db.xml</languageKey>
+ <languageKey index="vn">EXT:csh_vn/css_styled_content/vn.locallang_db.xml</languageKey>
+ <languageKey index="ca">EXT:csh_ca/css_styled_content/ca.locallang_db.xml</languageKey>
+ <languageKey index="ba">EXT:csh_ba/css_styled_content/ba.locallang_db.xml</languageKey>
+ <languageKey index="kr">EXT:csh_kr/css_styled_content/kr.locallang_db.xml</languageKey>
+ <languageKey index="eo">EXT:csh_eo/css_styled_content/eo.locallang_db.xml</languageKey>
+ <languageKey index="my">EXT:csh_my/css_styled_content/my.locallang_db.xml</languageKey>
+ <languageKey index="hi">EXT:csh_hi/css_styled_content/hi.locallang_db.xml</languageKey>
+ </data>
+ <orig_hash type="array">
+ <languageKey index="it" type="array">
+ <label index="tt_content.tx_cssstyledcontent_acctables_flex" type="integer">144602058</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_caption" type="integer">112890980</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_summary" type="integer">36680148</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_tfoot" type="integer">69483258</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos.I.0" type="integer">187184459</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos.I.1" type="integer">135366703</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_headerpos" type="integer">209579350</label>
+ <label index="tt_content.tx_cssstyledcontent_acctables_nostyles" type="integer">117336864</label>
+ </languageKey>
+ </orig_hash>
+</T3locallang>
\ No newline at end of file
if ($hookObj = &$this->hookRequest('render_table')) {
return $hookObj->render_table($content,$conf);
} else {
+ // Init FlexForm configuration
+ $this->pi_initPIflexForm();
// Get bodytext field content
$content = trim($this->cObj->data['bodytext']);
if (!strcmp($content,'')) return '';
+ // get flexform values
+ $caption = trim(htmlspecialchars($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_caption')));
+ $summary = trim(htmlspecialchars($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_summary')));
+ $useTfoot = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_tfoot'));
+ $headerPos = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_headerpos');
+ $noStyles = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_nostyles');
+ $tableClass = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_tableclass');
+
+ $delimiter = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'tableparsing_delimiter','s_parsing'));
+ if ($delimiter) {
+ $delimiter = chr(intval($delimiter));
+ } else {
+ $delimiter = '|';
+ }
+ $quotedInput = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'tableparsing_quote','s_parsing'));
+ if ($quotedInput) {
+ $quotedInput = chr(intval($quotedInput));
+ } else {
+ $quotedInput = '';
+ }
+
+ // add quotes to delimiter if needed, as a row is exploded by this char then
+ if ($quotedInput) {
+ $delimiter = $quotedInput.$delimiter.$quotedInput;
+ }
+
// Split into single lines (will become table-rows):
$rows = t3lib_div::trimExplode(chr(10),$content);
// Find number of columns to render:
- $cols = t3lib_div::intInRange($this->cObj->data['cols']?$this->cObj->data['cols']:count(explode('|',current($rows))),0,100);
+ $cols = t3lib_div::intInRange($this->cObj->data['cols']?$this->cObj->data['cols']:count(explode($delimiter,current($rows))),0,100);
// Traverse rows (rendering the table here)
$rCount = count($rows);
foreach($rows as $k => $v) {
- $cells = explode('|',$v);
+ // if input is quoted, remove first and last character of every row
+ if ($quotedInput) {
+ $v = substr($v,1,-1);
+ //$v = str_replace('\\'.$quotedInput,$quotedInput,$v); // change back escaped text delimiters - not sure if this is needed
+ }
+ $cells = explode($delimiter,$v);
$newCells=array();
for($a=0;$a<$cols;$a++) {
if (!strcmp(trim($cells[$a]),'')) $cells[$a]=' ';
- $cellAttribs = ($a>0 && ($cols-1)==$a) ? ' class="td-last"' : ' class="td-'.$a.'"';
- $newCells[$a] = '
- <td'.$cellAttribs.'><p>'.$this->cObj->stdWrap($cells[$a],$conf['innerStdWrap.']).'</p></td>';
+ $cellAttribs = ($noStyles?'':($a>0 && ($cols-1)==$a) ? ' class="td-last"' : ' class="td-'.$a.'"');
+ if (($headerPos == 'top' && !$k) || (!$a && $headerPos == 'left')) {
+ $scope = ' scope="'.($headerPos == 'top'?'col':'row').'"';
+ $newCells[$a] = '
+ <th'.$cellAttribs.$scope.'>'.$this->cObj->stdWrap($cells[$a],$conf['innerStdWrap.']).'</th>';
+ } else {
+ $newCells[$a] = '
+ <td'.$cellAttribs.'>'.$this->cObj->stdWrap($cells[$a],$conf['innerStdWrap.']).'</td>';
+ }
+ }
+ if (!$noStyles) {
+ $oddEven = $k%2 ? 'tr-odd' : 'tr-even';
+ $rowAttribs = ($k>0 && ($rCount-1)==$k) ? ' class="'.$oddEven.' tr-last"' : ' class="'.$oddEven.' tr-'.$k.'"';
}
-
- $oddEven = $k%2 ? 'tr-odd' : 'tr-even';
- $rowAttribs = ($k>0 && ($rCount-1)==$k) ? ' class="'.$oddEven.' tr-last"' : ' class="'.$oddEven.' tr-'.$k.'"';
$rows[$k]='
<tr'.$rowAttribs.'>'.implode('',$newCells).'
</tr>';
}
+ $addTbody = 0;
+ $tableContents = '';
+ if ($caption) {
+ $tableContents .= '
+ <caption>'.$caption.'</caption>';
+ }
+ if ($headerPos == 'top' && $rows[0]) {
+ $tableContents .= '<thead>'. $rows[0] .'
+ </thead>';
+ unset($rows[0]);
+ $addTbody = 1;
+ }
+ if ($useTfoot) {
+ $tableContents .= '
+ <tfoot>'.$rows[$rCount-1].'</tfoot>';
+ unset($rows[$rCount-1]);
+ $addTbody = 1;
+ }
+ $tmpTable = implode('',$rows);
+ if ($addTbody) {
+ $tmpTable = '<tbody>'.$tmpTable.'</tbody>';
+ }
+ $tableContents .= $tmpTable;
+
// Set header type:
$type = intval($this->cObj->data['layout']);
// Table tag params.
$tableTagParams = $this->getTableAttributes($conf,$type);
- $tableTagParams['class'] = 'contenttable contenttable-'.$type;
+ if (!$noStyles) {
+ $tableTagParams['class'] = 'contenttable contenttable-'.$type;
+ } elseif ($tableClass) {
+ $tableTagParams['class'] = $tableClass;
+ }
+
// Compile table output:
$out = '
- <table '.t3lib_div::implodeAttributes($tableTagParams).'>'. // Omitted xhtmlSafe argument TRUE - none of the values will be needed to be converted anyways, no need to spend processing time on that.
- implode('',$rows).'
+ <table '.t3lib_div::implodeAttributes($tableTagParams).($summary?' summary="'.$summary.'"':'').'>'. // Omitted xhtmlSafe argument TRUE - none of the values will be needed to be converted anyways, no need to spend processing time on that.
+ $tableContents.'
</table>';
// Calling stdWrap:
styles.content >
content {
- # cat=content/cHeader/h0; type=int[1-5]; label=Default Header type: Enter the number of the header layout to be used by default.
+ # cat=content/cHeader/h0; type=int[1-5]; label=Default Header type: Enter the number of the header layout to be used by default.
defaultHeaderType = 1
# cat=advanced/links; type=small; label=Pageframe object: The name of the "contentframe". Normally set to "page" if the site has a frameset. Otherwise it should be an empty value. This is important, as it determines the target of internal links!
pageFrameObj = page
-
+
shortcut.tables = tt_content,tt_address,tt_links,tt_guest,tt_board,tt_calender,tt_products,tt_news,tt_rating,tt_poll
# cat=content; type=wrap; label= Content Element margins: Space above / below each content element (pixels of a clear-gif).
space = 0|0
textMargin = 10
linkWrap.width = 800m
linkWrap.height = 600m
- linkWrap.effects =
+ linkWrap.effects =
# cat=content/cImage/x; type=boolean; label= Advanced, New window: If set, every click-enlarged image will open in it's own popup window and not the current popup window (which may have a wrong size for the image to fit in)
linkWrap.newWindow = 0
# cat=content/cImage/c; type=boolean; label= Images, caption split: If this is checked, then the image caption will be split by each line and they will appear underneath the corresponding image in the imagelist.
}
styles.content.uploads {
- jumpurl_secure =
+ jumpurl_secure =
jumpurl_secure_mimeTypes = pdf=application/pdf, doc=application/msword
- jumpurl =
+ jumpurl =
}
styles.content.mailform {
styles.content.loginform {
target = _top
# cat=content/cLogin; type=int+; label= PID of user archive: Enter the page-uid number (PID) of the sysFolder where you keep your fe_users that are supposed to login on this site. This setting is necessary, if login is going to work!
- pid =
+ pid =
# cat=content/cLogin; type=; label= Message, Login: This is the message (if any) that is popped-up when a user logs in as a front-end user
goodMess =
}
PAGE_TARGET = page
-
-
-
-
-
-
# TYPO3 CVS ID: $Id$
cellpadding =
cellspacing =
}
-
+ 20.innerStdWrap.wrap = <p>|</p>
20.innerStdWrap.parseFunc = < lib.parseFunc
20.stdWrap {
}
+# *********************************************************************
+# ACCESSIBILTY MODE
+# *********************************************************************
+
+[compatVersion = 3.9.0]
+# switch off <p>-Tags in table cells
+tt_content.table.20.innerStdWrap.wrap = |
+# change mailform to accesssible mode
+tt_content.mailform.20 {
+ accessibility = 1
+ noWrapAttr=1
+ formName = mailform
+ dontMd5FieldNames = 1
+ REQ = 1
+ layout = <div class="csc-mailform-field">###LABEL### ###FIELD###</div>
+ COMMENT.layout = <div class="csc-mailform-label">###LABEL###</div>
+ RADIO.layout = <div class="csc-mailform-field">###LABEL### <fieldset class="csc-mailform-radio" id="testform_radio">###FIELD###</fieldset></div>
+ LABEL.layout = <div class="csc-mailform-field">###LABEL### <span class="csc-mailform-label">###FIELD###</span></div>
+ labelWrap.wrap = |
+ commentWrap.wrap = |
+ radioWrap.wrap = |
+ REQ.labelWrap.wrap = |
+ stdWrap.wrap = <fieldset class="csc-mailform"> | </fieldset>
+ params.radio = class="csc-mailform-radio"
+ params.check = class="csc-mailform-check"
+ params.submit = class="csc-mailform-submit"
+}
+# accessible menu
+tt_content.menu.20 {
+ # "Menu of these pages"
+ default.wrap = <ul class="csc-menu csc-menu-def">|</ul>
+ default.1.NO.allWrap = <li>|</li>
+ default.1.NO.ATagTitle.field = description // title
+
+ # "Menu of subpages to these pages"
+ 1.wrap = <ul class="csc-menu csc-menu-1">|</ul>
+
+ # "Sitemap - liststyle"
+ 2 >
+ 2 = HMENU
+ 2 {
+ wrap = <div class="csc-sitemap">|</div>
+ 1 = TMENU
+ 1 {
+ noBlur=1
+ expAll=1
+ wrap = <ul>|</ul>
+ NO {
+ wrapItemAndSub = <li>|</li>
+ ATagTitle.field = description // title
+ }
+ }
+ 2<.1
+ 3<.1
+ 4<.1
+ 5<.1
+ 6<.1
+ 7<.1
+ }
+
+ # "Section index (pagecontent w/Index checked - liststyle)"
+ 3.wrap = <ul class="csc-menu csc-menu-3">|</ul>
+ 3.renderObj.noBlur = 1
+ 3.renderObj.wrap = <li class="csc-section">|</li>
+
+ # "Menu of subpages to these pages (with abstract)"
+ 4.wrap = <dl class="csc-menu csc-menu-4">|</dl>
+ 4.1.NO {
+ allWrap = <dt>|</dd>
+ after.wrap = </dt><dd>|
+ ATagTitle.field = description // title
+ }
+
+ # "Recently updated pages"
+ 5.wrap = <ul class="csc-menu csc-menu-5">|</ul>
+
+ # "Related pages (based on keywords)"
+ 6.wrap = <ul class="csc-menu csc-menu-6">|</ul>
+
+ # "Menu of subpages to these pages + sections - liststyle"
+ 7.wrap = <ul class="csc-menu csc-menu-7">|</ul>
+ 7.2.NO.allWrap = <li class="csc-section">|</li>
+ 7.2.NO.ATagTitle.field = description // title
+}
+[END]
# TYPO3 CVS ID: $Id$
\ No newline at end of file
--- /dev/null
+<?php
+if (!defined ('TYPO3_MODE')) die ('Access denied.');
+
+require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_compatversion.php');
+$TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['changeCompatibilityVersion'] = 'tx_coreupdates_compatversion';
+
+ // not used yet
+//require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_notinmenu.php');
+//$TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['notInMenu_doctype_conversion'] = 'tx_coreupdates_notinmenu';
+
+?>
\ No newline at end of file
var $menuitems = array(
"config" => "Basic Configuration",
"database" => "Database Analyser",
+ "update" => "Update Wizard",
"images" => "Image Processing",
"extConfig" => "All Configuration",
"typo3temp" => "typo3temp/",
$this->silent=0;
$this->checkTheDatabase();
break;
+ case 'update':
+ $this->checkDatabase();
+ $this->silent=0;
+ $this->updateWizard();
+ break;
case "config":
$this->silent=0;
$this->checkIM=1;
'.$this->fontTag1.'<BR>
<input type="hidden" name="step" value="2">
<input type="hidden" name="TYPO3_INSTALL[localconf.php][encryptionKey]" value="'.md5(uniqid(rand(),true)).'">
+ <input type="hidden" name="TYPO3_INSTALL[localconf.php][compat_version]" value="'.TYPO3_version.'">
<input type="submit" value="Continue"><BR><br /><strong>NOTICE: </strong>By clicking this button, typo3conf/localconf.php is updated with new values for the parameters listed above!</font><BR>
</td>
</tr>
}
}
}
+ $out.=$this->wrapInCells('[GFX][TTFdpi]=', '<input type="text" name="TYPO3_INSTALL[localconf.php][TTFdpi]" value="'.htmlspecialchars($GLOBALS["TYPO3_CONF_VARS"]["GFX"]["TTFdpi"]).'">');
}
break;
case "encryptionKey":
if (strcmp($GLOBALS["TYPO3_CONF_VARS"]["SYS"]["encryptionKey"],$value)) $this->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS["SYS"]["encryptionKey"]', $value);
+ case "compat_version":
+ if (strcmp($GLOBALS["TYPO3_CONF_VARS"]["SYS"]["compat_version"],$value)) $this->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS["SYS"]["compat_version"]', $value);
break;
case "im_combine_filename":
if (strcmp($GLOBALS["TYPO3_CONF_VARS"]["GFX"]["im_combine_filename"],$value)) $this->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS["GFX"]["im_combine_filename"]', $value);
if (strcmp($GLOBALS["TYPO3_CONF_VARS"]["GFX"][$key],$value)) $this->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS["GFX"]["'.$key.'"]', $value);
} else $this->messages[]= $errorMessages[] = "Path '".$value."' contains spaces or is longer than 100 chars (...not saved)";
break;
+ case 'TTFdpi':
+ if (strcmp($GLOBALS['TYPO3_CONF_VARS']['GFX']['TTFdpi'],$value)) $this->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS["GFX"]["TTFdpi"]', $value);
+ break;
}
* @param [type] $lines: ...
* @return [type] ...
*/
- function writeToLocalconf_control($lines="") {
+ function writeToLocalconf_control($lines="", $showOutput=1) {
$returnVal = parent::writeToLocalconf_control($lines);
- switch($returnVal) {
- case 'continue':
- $content = "<BR><BR>".implode($this->messages,"<HR>").'<BR><BR><a href="'.$this->action.'">Click to continue...</a>';
- $this->outputExitBasedOnStep($content);
- break;
- case 'nochange':
- $content = '<strong>Writing to \'localconf.php\':</strong><BR><BR>No values were changed, so nothing is updated!<BR><BR><a href="'.$this->action.'">Click to continue...</a>';
- $this->outputExitBasedOnStep("<BR>".$content);
- break;
+ if ($showOutput) {
+ switch($returnVal) {
+ case 'continue':
+ $content = "<BR><BR>".implode($this->messages,"<HR>").'<BR><BR><a href="'.$this->action.'">Click to continue...</a>';
+ $this->outputExitBasedOnStep($content);
+ break;
+ case 'nochange':
+ $content = '<strong>Writing to \'localconf.php\':</strong><BR><BR>No values were changed, so nothing is updated!<BR><BR><a href="'.$this->action.'">Click to continue...</a>';
+ $this->outputExitBasedOnStep("<BR>".$content);
+ break;
+ }
}
-
return $returnVal;
}
*
* @return [type] ...
*/
- function isBackendAdminUser() {
+ function updateWizard() {
+ global $TYPO3_CONF_VARS;
+
+ // clear cache files - adapted from t3lib_tcemain::removeCacheFiles
+ $cacheFiles=t3lib_extMgm::currentCacheFiles();
+ if (is_array($cacheFiles)) {
+ foreach ($cacheFiles as $cfile) {
+ @unlink($cfile);
+ clearstatcache();
+ }
+ }
+
+ // generate new cache files and include them
+ $GLOBALS['TYPO3_CONF_VARS']['EXT']['extCache'] = 1;
+ $TYPO3_LOADED_EXT = t3lib_extMgm::typo3_loadExtensions();
+ if ($TYPO3_LOADED_EXT['_CACHEFILE']) {
+ require(PATH_typo3conf.$TYPO3_LOADED_EXT['_CACHEFILE'].'_ext_localconf.php');
+ }
+
+ // call wizard
+ $action = ($this->INSTALL['database_type']?$this->INSTALL['database_type']:'checkForUpdate');
+ $this->updateWizard_parts($action);
+ echo $this->outputWrapper($this->printAll());
+ }
+ /**
+ * [Describe function...]
+ *
+ * @return [type] ...
+ */
+ function updateWizard_parts($action) {
+ $content = '';
+ switch ($action) {
+ case 'checkForUpdate': // first step - check for updates available
+ $title = '1 - select update-wizards to perform';
+ $tableContent = '';
+ if (!$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']) {
+ $content = '<strong>No updates registered!</strong>';
+ break;
+ }
+
+ // step through list of updates, and check if update is needed and if yes, output an explanation
+ foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
+ $tmpObj = $this->getUpgradeObjInstance($className, $identifier);
+ if (method_exists($tmpObj,'checkForUpdate')) {
+ $explanation = '';
+ if ($tmpObj->checkForUpdate(&$explanation)) {
+ $tableContent .= '<tr><td valign="top"><input type="checkbox" name="TYPO3_INSTALL[update]['.$identifier.']" id="TYPO3_INSTALL[update]['.$identifier.']" value="1" /></td><td><strong><label for="TYPO3_INSTALL[update]['.$identifier.']">'.$identifier.'</label></strong><br />'.str_replace(chr(10),'<br />',$explanation).'</td></tr><tr><td colspan="2"><hr /></td></tr>';
+ }
+ }
+ }
+ if ($tableContent) {
+ $tableContent = '<table>'.$tableContent.'</table>';
+ $content = $this->getUpdateDbFormWrap('getUserInput', $tableContent,'2 - Configure updates!');
+ } else {
+ $content = '<strong>No updates to perform!</strong>';
+ }
+ break;
+ case 'getUserInput': // second step - get user input and ask for final confirmation
+ $title = '2 - configuration of updates';
+ $formContent = '<strong>The following updates will be performed:</strong>';
+ if (!$this->INSTALL['update']) {
+ $content = '<strong>No updates selected!</strong>';
+ break;
+ }
+ // update methods might need to get custom data
+ foreach ($this->INSTALL['update'] as $identifier => $tmp) {
+ $className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$identifier];
+
+ $tmpObj = $this->getUpgradeObjInstance($className, $identifier);
+
+ $formContent .= '<p><strong>'.$identifier.'</strong><input type="hidden" name="TYPO3_INSTALL[update][extList][]" value="'.$identifier.'" /><br />';
+ if (method_exists($tmpObj,'getUserInput')) {
+ $formContent .= $tmpObj->getUserInput('TYPO3_INSTALL[update]['.$identifier.']');
+ }
+ $formContent .= '</p><hr />';
+ }
+ $formContent .= '<p><input type="checkbox" name="TYPO3_INSTALL[update][showDatabaseQueries]" id="TYPO3_INSTALL[update][showDatabaseQueries]" value="1" /> <label for="TYPO3_INSTALL[update][showDatabaseQueries]">Show database queries performed</label></p>';
+ $content = $this->getUpdateDbFormWrap('performUpdate', $formContent,'3 -Perform updates!');
+ break;
+ case 'performUpdate': // third step - perform update
+ $title = '3 - perform updates';
+ if (!$this->INSTALL['update']['extList']) { break; }
+
+ $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = TRUE;
+ foreach ($this->INSTALL['update']['extList'] as $identifier) {
+ $className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$identifier];
+
+ $tmpObj = &$this->getUpgradeObjInstance($className, $identifier);
+
+ $content = '<p><strong>'.$identifier.'</strong><br />';
+ // check user input if testing method is available
+ if (method_exists($tmpObj,'checkUserInput')) {
+ $customOutput = '';
+ if (!$tmpObj->checkUserInput(&$customOutput)) {
+ $content .= '<strong>'.($customOutput?$customOutput:'Something went wrong').'</strong>';
+ $content .= '<br /><a href="javascript:history.back()">Go back to update configuration</a>';
+ break;
+ }
+ }
+
+ if (method_exists($tmpObj,'performUpdate')) {
+ $customOutput = '';
+ $dbQueries = array();
+ if ($tmpObj->performUpdate(&$dbQueries, &$customOutput)) {
+ $content .= '<strong>Update successful!</strong>';
+ } else {
+ $content .= '<strong>FAILURE!</strong>';
+ }
+ if ($this->INSTALL['update']['showDatabaseQueries']) {
+ $content .= '<br />' . implode('<br />',$dbQueries);
+ }
+ $content .= '<br />' . $customOutput;
+
+ } else {
+ $content .= '<strong>No update method available!</strong>';
+ }
+ $content .= '</p><hr />';
+ }
+ $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = FALSE;
+ break;
+ }
+ $this->message('Update Wizard',$title,$content);
+ }
+
+ /**
+ * [Describe function...]
+ *
+ * @return [type] ...
+ */
+ function getUpgradeObjInstance($className, $identifier) {
+ $tmpObj = &t3lib_div::getUserObj($className);
+ $tmpObj->versionNumber = t3lib_div::int_from_ver(TYPO3_version);
+ $tmpObj->pObj = $this;
+ $tmpObj->userInput = $this->INSTALL['update'][$identifier];
+ return $tmpObj;
+ }
+
+ /**
+ * [Describe function...]
+ *
+ * @return [type] ...
+ */
+ function isBackendAdminUser() {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('count(*)', 'be_users', 'admin=1');
$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
return current($row);
function outputWrapper($content) {
$out='
<html>
-
+ <head>
<STYLE TYPE="text/css">
<!--
A:visited {text-decoration: none}
A:active {text-decoration: none}
A:hover {color: #000066}
+p,td {
+ font-family:verdana,sans-serif;
+ font-size:10px;
+}
-->
</STYLE>
'.$this->headerStyle.'
- <head>
+
<title>TYPO3 Install Tool</title>
'.($this->JSmessage?'
<script language="javascript" type="text/javascript">alert(unescape(\''.rawurlencode($this->JSmessage).'\'));</script>
--- /dev/null
+<?php
+/***************************************************************
+* Copyright notice
+*
+* (c) 1999-2005 Sebastian Kurfuerst (sebastian@garbage-group.de)
+* 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!
+***************************************************************/
+/**
+ * Contains the update class for the compatibility version. Used by the update wizard in the install tool.
+ *
+ * @author Sebastian Kurfuerst <sebastian@garbage-group.de
+ */
+
+class tx_coreupdates_compatversion {
+ var $versionNumber; // version number coming from t3lib_div::int_from_ver()
+ var $pObj; // parent object (tx_install)
+ var $userInput; // user input
+
+ function checkForUpdate($description) {
+ global $TYPO3_CONF_VARS;
+ if ($this->compatVersionIsCurrent()) {
+ $description = '<b>If you do not use the wizard, your current TYPO3 installation is configured to use all the features included in the current release '.TYPO3_version.'.</b>
+ There are two possibilities that you see this screen:<ol><li><b>You just updated from a previous version of TYPO3:</b>
+ Because of some new features, the frontend output of your site might have changed. To emulate the "old" frontend behavior, change the compatibility version by continuing to step 2.
+ This is <b>recommended</b> after every update to make sure the frontend output is not altered. When re-running the wizard, you will see the changes needed for using the new features.
+ <i>Please continue to step two.</i></li>
+ <li><b>You just made a fresh install of TYPO3:</b>
+ Perfect! All new features will be used.
+ <i>You can stop here and do not need this wizard now.</i></li></ol>';
+
+ if (!$TYPO3_CONF_VARS['SYS']['compat_version']) {
+ $description .= '
+ The compatibility version has been set to the current TYPO3 version. This is a stamp and has no impact for your installation.';
+ }
+ } else {
+ $description = 'Your current TYPO3 installation is configured to <b>behave like version '.$TYPO3_CONF_VARS['SYS']['compat_version'].'</b> of TYPO3. If you just upgraded from this version, you most likely want to <b>use new features</b> as well. In the next step, you will see the things that need to be adjusted to make your installation compatible with the new features.';
+ }
+
+ return 1;
+ }
+
+ function getUserInput($inputPrefix) {
+ global $TYPO3_CONF_VARS;
+ if ($this->compatVersionIsCurrent()) {
+ $content = '<b>You updated from an older version of TYPO3</b>:<br>
+ <label for="'.$inputPrefix.'[version]">Select the version where you have upgraded from:</label> <select name="'.$inputPrefix.'[version]" id="'.$inputPrefix.'[version]">';
+ $versions = array(
+ '3.8.1' => '<= 3.8.1'
+ );
+ foreach ($versions as $singleVersion => $caption) {
+ $content .= '<option value="'.$singleVersion.'">'.$caption.'</option>';
+ }
+ $content .= '</select>';
+ } else {
+ $content = 'TYPO3 output is currently compatible to version '.$TYPO3_CONF_VARS['SYS']['compat_version'].'. To use all the new features in the current TYPO3 version, make sure you follow the guidelines below to upgrade without problems.<br />
+ <b>Follow the steps below carefully and confirm every step!</b> You will see this list again after you performed the update.';
+
+ $content .= $this->showChangesNeeded($inputPrefix);
+
+ $content .= '<br /><input type="checkbox" name="'.$inputPrefix.'[compatVersion][all]" id="'.$inputPrefix.'[compatVersion][all]" value="1"> <b><label for="'.$inputPrefix.'[compatVersion][all]">ignore selection above - WARNING: this might break the output of your website.</label></b>';
+ }
+ return $content;
+ }
+ function checkUserInput($customMessages) {
+ global $TYPO3_CONF_VARS;
+ if ($this->compatVersionIsCurrent()) {
+ return 1;
+ } else {
+ if ($this->userInput['compatVersion']['all']) {
+ return 1;
+ } else {
+ $performUpdate = 1;
+ $oldVersion = t3lib_div::int_from_ver($TYPO3_CONF_VARS['SYS']['compat_version']);
+ $currentVersion = t3lib_div::int_from_ver(TYPO3_version);
+ foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['compat_version'] as $internalName => $details) {
+ if ($details['version'] > $oldVersion && $details['version'] <= $currentVersion) {
+ if (!$this->userInput['compatVersion'][$internalName]) {
+ $performUpdate = 0;
+ $customMessages = 'If you want to update the compatibility version, you need to confirm all checkboxes on the previous page.';
+ break;
+ }
+ }
+ }
+ return $performUpdate;
+ }
+ }
+ }
+ function performUpdate($dbQueries, $customMessages) {
+ $customMessages = '';
+
+ // if we just set it to an older version
+ if ($this->userInput['version']) {
+ $customMessages .= 'If you want to see what you need to do to use the new features, run the update wizard again!';
+ }
+
+ $linesArr = $this->pObj->writeToLocalconf_control();
+ $version = $this->userInput['version']?$this->userInput['version']:TYPO3_version;
+ $this->pObj->setValueInLocalconfFile($linesArr, '$TYPO3_CONF_VARS["SYS"]["compat_version"]', $version);
+ $this->pObj->writeToLocalconf_control($linesArr,0);
+ $customMessages .= '
+ The compatibility version has been set to '.$version.'.';
+ $customMessages .= $this->showChangesNeeded();
+
+ return 1;
+ }
+
+ // helper functiopns
+ function compatVersionIsCurrent() {
+ global $TYPO3_CONF_VARS;
+ if ($TYPO3_CONF_VARS['SYS']['compat_version'] && t3lib_div::int_from_ver(TYPO3_version) != t3lib_div::int_from_ver($TYPO3_CONF_VARS['SYS']['compat_version'])) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+ function showChangesNeeded($inputPrefix = '') {
+ global $TYPO3_CONF_VARS;
+ $oldVersion = t3lib_div::int_from_ver($TYPO3_CONF_VARS['SYS']['compat_version']);
+ $currentVersion = t3lib_div::int_from_ver(TYPO3_version);
+
+ $tableContents = '';
+ foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['compat_version'] as $internalName => $details) {
+ if ($details['version'] > $oldVersion && $details['version'] <= $currentVersion) {
+ $tableContents .= '<tr><td colspan="2"><hr /></td></tr>
+ <tr><td valign="bottom">'.($inputPrefix?'<input type="checkbox" name="'.$inputPrefix.'[compatVersion]['.$internalName.']" id="'.$inputPrefix.'[compatVersion]['.$internalName.']" value="1">':' ').'</td><td>'.str_replace(chr(10),'<br />',$details['description']).($inputPrefix?'<br /><b><label for="'.$inputPrefix.'[compatVersion]['.$internalName.']">'.$details['description_acknowledge'].'</label></b>':'').'</td></tr>';
+ }
+ }
+ if ($tableContents) {
+ return '<table>'.$tableContents.'</table>';
+ }
+ }
+}
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/***************************************************************
+* Copyright notice
+*
+* (c) 1999-2005 Sebastian Kurfuerst (sebastian@garbage-group.de)
+* 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!
+***************************************************************/
+/**
+ * Contains the update class for not in menu pages. Used by the update wizard in the install tool.
+ *
+ * @author Sebastian Kurfuerst <sebastian@garbage-group.de
+ */
+
+class tx_coreupdates_notinmenu {
+ var $versionNumber; // version number coming from t3lib_div::int_from_ver()
+ var $pObj; // parent object (tx_install)
+ var $userInput; // user input
+ function checkForUpdate($description) {
+ $description = 'Removes the doctype "not in menu" which is deprecated and sets instead the page flag "not in menu".';
+ if($this->versionNumber >= 3009000) {
+ $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid','pages','doktype=5');
+ if($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ function performUpdate($dbQueries, $customMessages) {
+ if($this->versionNumber >= 3009000) {
+ $updateArray = array(
+ 'doktype' => 1,
+ 'nav_hide' => 1
+ );
+
+ $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'doktype=5', $updateArray);
+ $dbQueries[] = $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;
+ if ($GLOBALS['TYPO3_DB']->sql_affected_rows($res)) {
+ return 1;
+ }
+ return 0; // zero rows affected, maybe error
+ }
+ }
+}
+?>
\ No newline at end of file
var $P; // Wizard parameters, coming from TCEforms linking to the wizard.
var $TABLECFG; // The array which is constantly submitted by the multidimensional form of this wizard.
+ // table parsing
+ var $tableParsing_quote; // quoting of table cells
+ var $tableParsing_delimiter; // delimiter between table cells
*/
function getConfigCode($row) {
+ // get delimiter settings
+ $flexForm = t3lib_div::xml2array($row['pi_flexform']);
+
+ $this->tableParsing_quote = $flexForm['data']['s_parsing']['lDEF']['tableparsing_quote']['vDEF']?chr(intval($flexForm['data']['s_parsing']['lDEF']['tableparsing_quote']['vDEF'])):'';
+ $this->tableParsing_delimiter = $flexForm['data']['s_parsing']['lDEF']['tableparsing_delimiter']['vDEF']?chr(intval($flexForm['data']['s_parsing']['lDEF']['tableparsing_delimiter']['vDEF'])):'|';
// If some data has been submitted, then construct
if (isset($this->TABLECFG['c'])) {
$thisLine=array();
reset($this->TABLECFG['c'][$a]);
while(list($b)=each($this->TABLECFG['c'][$a])) {
- $thisLine[]=str_replace('|','',$this->TABLECFG['c'][$a][$b]);
+ $thisLine[]=$this->tableParsing_quote.str_replace('|','',$this->TABLECFG['c'][$a][$b]).$this->tableParsing_quote;
}
- $inLines[]=implode('|',$thisLine);
+ $inLines[]=implode($this->tableParsing_delimiter,$thisLine);
}
// Finally, implode the lines into a string:
// Setting number of columns
if (!$cols && trim($tLines[0])) { // auto...
- $cols = count(explode('|',$tLines[0]));
+ $cols = count(explode($this->tableParsing_delimiter,$tLines[0]));
}
$cols=$cols?$cols:4;
foreach($tLines as $k => $v) {
// Initialize:
- $vParts = explode('|',$v);
+ $vParts = explode($this->tableParsing_delimiter,$v);
// Traverse columns:
for ($a=0;$a<$cols;$a++) {
+ if ($this->tableParsing_quote) {
+ $vParts[$a] = substr(trim($vParts[$a]),1,-1);
+ }
$cfgArr[$k][$a]=$vParts[$a];
}
}