* updated CSS styled content: integrated accessible mailforms,
authorSebastian Kurfürst <sebastian.kurfuerst@typo3.org>
Mon, 26 Dec 2005 23:59:37 +0000 (23:59 +0000)
committerSebastian Kurfürst <sebastian.kurfuerst@typo3.org>
Mon, 26 Dec 2005 23:59:37 +0000 (23:59 +0000)
accessible menus, accessible tables
* inserted update wizard and compatibility version

git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@937 709f56b5-9817-0410-a4d7-c38de5d9e867

18 files changed:
ChangeLog
t3lib/class.t3lib_befunc.php
t3lib/class.t3lib_div.php
t3lib/class.t3lib_matchcondition.php
t3lib/config_default.php
typo3/sysext/css_styled_content/ext_emconf.php
typo3/sysext/css_styled_content/ext_localconf.php
typo3/sysext/css_styled_content/ext_tables.php
typo3/sysext/css_styled_content/flexform_ds.xml [new file with mode: 0644]
typo3/sysext/css_styled_content/locallang_db.xml [new file with mode: 0644]
typo3/sysext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php
typo3/sysext/css_styled_content/static/constants.txt
typo3/sysext/css_styled_content/static/setup.txt
typo3/sysext/install/ext_localconf.php [new file with mode: 0644]
typo3/sysext/install/mod/class.tx_install.php
typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php [new file with mode: 0644]
typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php [new file with mode: 0644]
typo3/wizard_table.php

index ff5576a..c8501f1 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,8 @@
        * 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>
 
index 5bc42b4..c890eaa 100755 (executable)
@@ -244,18 +244,18 @@ class t3lib_BEfunc        {
                        $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;
        }
 
@@ -3379,9 +3379,15 @@ class t3lib_BEfunc       {
                                $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>';
index 5716f75..882671b 100755 (executable)
@@ -751,6 +751,23 @@ class t3lib_div {
        }
 
        /**
+        * 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
         *
index bfc32fe..942c966 100644 (file)
@@ -287,6 +287,9 @@ class t3lib_matchCondition {
                                                }
                                        }
                                break;
+                               case 'compatVersion':
+                                       return t3lib_div::compat_version($pcs[1]);
+                               break;
                                case 'userFunc':
                                        $values = split('\(|\)',$pcs[1]);
                                        $funcName=trim($values[0]);
index 428f396..8e275bf 100755 (executable)
@@ -50,6 +50,7 @@ $TYPO3_CONF_VARS = Array(
        ),
        '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.
@@ -278,7 +279,7 @@ unset($typo_db_host);
 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;
index a3d7c1d..f8a318e 100755 (executable)
@@ -35,7 +35,7 @@ $EM_CONF[$_EXTKEY] = Array (
        '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";}',
 );
 
index 0974674..0e84a5c 100755 (executable)
@@ -7,4 +7,8 @@ $_EXTCONF = unserialize($_EXTCONF);     // unserializing the configuration so we can
 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
index c1e32ff..92a5203 100755 (executable)
@@ -2,5 +2,9 @@
 # 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
diff --git a/typo3/sysext/css_styled_content/flexform_ds.xml b/typo3/sysext/css_styled_content/flexform_ds.xml
new file mode 100644 (file)
index 0000000..1eb22c6
--- /dev/null
@@ -0,0 +1,151 @@
+<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
diff --git a/typo3/sysext/css_styled_content/locallang_db.xml b/typo3/sysext/css_styled_content/locallang_db.xml
new file mode 100644 (file)
index 0000000..f325b58
--- /dev/null
@@ -0,0 +1,88 @@
+<?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 (&lt;caption&gt;)</label>
+                       <label index="tt_content.tx_cssstyledcontent_acctables_summary">Table summary (&quot;summary&quot; attribute in &lt;table&gt; tags)</label>
+                       <label index="tt_content.tx_cssstyledcontent_acctables_tfoot">Use table-footer (&lt;tfoot&gt;) 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
index e33bfbe..9ff2396 100755 (executable)
@@ -143,47 +143,116 @@ class tx_cssstyledcontent_pi1 extends tslib_pibase {
                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]='&nbsp;';
-                                       $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:
index ae8fa80..b8d85fc 100755 (executable)
@@ -2,11 +2,11 @@
 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
@@ -44,7 +44,7 @@ styles.content.imgtext {
   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.
@@ -52,9 +52,9 @@ styles.content.imgtext {
 }
 
 styles.content.uploads {
-  jumpurl_secure = 
+  jumpurl_secure =
   jumpurl_secure_mimeTypes = pdf=application/pdf, doc=application/msword
-  jumpurl = 
+  jumpurl =
 }
 
 styles.content.mailform {
@@ -68,7 +68,7 @@ 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 =
 }
@@ -87,11 +87,5 @@ styles.content.searchresult {
 PAGE_TARGET = page
 
 
-
-
-
-
-
-
 # TYPO3 CVS ID: $Id$
 
index b5b3b4c..c605e8a 100755 (executable)
@@ -507,7 +507,7 @@ tt_content.table {
                cellpadding =
                cellspacing =
        }
-
+       20.innerStdWrap.wrap = <p>|</p>
        20.innerStdWrap.parseFunc = < lib.parseFunc
 
        20.stdWrap {
@@ -1109,10 +1109,95 @@ tt_content.default {
 }
 
 
+# *********************************************************************
+# 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
diff --git a/typo3/sysext/install/ext_localconf.php b/typo3/sysext/install/ext_localconf.php
new file mode 100644 (file)
index 0000000..9ccae30
--- /dev/null
@@ -0,0 +1,11 @@
+<?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
index 8d179a3..89a780b 100755 (executable)
@@ -203,6 +203,7 @@ class tx_install extends t3lib_install {
        var $menuitems = array(
                "config" => "Basic Configuration",
                "database" => "Database Analyser",
+               "update" => "Update Wizard",
                "images" => "Image Processing",
                "extConfig" => "All Configuration",
                "typo3temp" => "typo3temp/",
@@ -413,6 +414,11 @@ REMOTE_ADDR was '".t3lib_div::getIndpEnv("REMOTE_ADDR")."' (".t3lib_div::getIndp
                                        $this->silent=0;
                                        $this->checkTheDatabase();
                                break;
+                               case 'update':
+                                       $this->checkDatabase();
+                                       $this->silent=0;
+                                       $this->updateWizard();
+                               break;
                                case "config":
                                        $this->silent=0;
                                        $this->checkIM=1;
@@ -662,6 +668,7 @@ REMOTE_ADDR was '".t3lib_div::getIndpEnv("REMOTE_ADDR")."' (".t3lib_div::getIndp
                                                           '.$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>
@@ -2056,6 +2063,7 @@ From sub-directory:
                                                        }
                                                }
                                        }
+                                       $out.=$this->wrapInCells('[GFX][TTFdpi]=', '<input type="text" name="TYPO3_INSTALL[localconf.php][TTFdpi]" value="'.htmlspecialchars($GLOBALS["TYPO3_CONF_VARS"]["GFX"]["TTFdpi"]).'">');
                                }
 
 
@@ -2116,6 +2124,8 @@ From sub-directory:
                                                        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);
@@ -2150,6 +2160,9 @@ From sub-directory:
                                                                        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;
                                                }
 
 
@@ -2174,20 +2187,21 @@ From sub-directory:
         * @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;
        }
 
@@ -3810,7 +3824,149 @@ From sub-directory:
         *
         * @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);
@@ -4537,7 +4693,7 @@ $out='
        function outputWrapper($content)        {
                $out='
 <html>
-
+       <head>
 
 <STYLE TYPE="text/css">
 <!--
@@ -4545,10 +4701,14 @@ A:link {text-decoration: none}
 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>
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php b/typo3/sysext/install/updates/class.tx_coreupdates_compatversion.php
new file mode 100644 (file)
index 0000000..0596d12
--- /dev/null
@@ -0,0 +1,152 @@
+<?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">':'&nbsp;').'</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
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php b/typo3/sysext/install/updates/class.tx_coreupdates_notinmenu.php
new file mode 100644 (file)
index 0000000..ef00449
--- /dev/null
@@ -0,0 +1,64 @@
+<?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
index 4b9bfb9..5d95990 100755 (executable)
@@ -100,6 +100,9 @@ class SC_wizard_table {
        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
 
 
 
@@ -218,6 +221,11 @@ class SC_wizard_table {
         */
        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']))        {
 
@@ -570,9 +578,9 @@ class SC_wizard_table {
                        $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:
@@ -597,7 +605,7 @@ class SC_wizard_table {
 
                        // 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;
 
@@ -606,10 +614,13 @@ class SC_wizard_table {
                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];
                        }
                }