Added feature #15524: Create multiple pages wizard: add doktype, dynamic add more...
authorSteffen Kamper <info@sk-typo3.de>
Tue, 24 Aug 2010 13:37:54 +0000 (13:37 +0000)
committerSteffen Kamper <info@sk-typo3.de>
Tue, 24 Aug 2010 13:37:54 +0000 (13:37 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@8678 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/wizard_crpages/class.tx_wizardcrpages_webfunc_2.php
typo3/sysext/wizard_crpages/ext_emconf.php
typo3/sysext/wizard_crpages/locallang.xml

index 7f7f32c..a633679 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
 
 2010-08-24  Steffen Kamper  <steffen@typo3.org>
 
+       * Added feature #15524: Create multiple pages wizard: add doktype, dynamic add more fields
        * Fixed bug #15502: localization links in list mode are broken (Thanks to Bjoern Pedersen)
 
 2010-08-24  Sebastian Kurfuerst  <sebastian@typo3.org>
index ff41366..2537175 100755 (executable)
 class tx_wizardcrpages_webfunc_2 extends t3lib_extobjbase {
 
        /**
+        * Holds reference of lorem ipsum class
+        *
+        * @var tx_loremipsum_wiz
+        */
+       protected $loremIpsumObject = NULL;
+
+       /**
+       * Complete tsConfig
+       *
+       * @var array
+       */
+       protected $tsConfig = array();
+
+       /**
+       * Part of tsConfig with TCEFORM.pages. settings
+       *
+       * @var array
+       */
+       protected $pagesTsConfig = array();
+
+
+       /**
         * Adds menu items... but I think this is not used at all. Looks very much like some testing code. If anyone cares to check it we can remove it some day...
         *
         * @return      array
@@ -84,6 +106,15 @@ class tx_wizardcrpages_webfunc_2 extends t3lib_extobjbase {
 
                $theCode='';
 
+               $this->tsConfig = t3lib_BEfunc::getPagesTSconfig($this->pObj->id);
+               $this->pagesTsConfig = isset($this->tsConfig['TCEFORM.']['pages.']) ? $this->tsConfig['TCEFORM.']['pages.'] : array();
+
+
+                       // Create loremIpsum code:
+               if (t3lib_extMgm::isLoaded('lorem_ipsum')) {
+                       $this->loremIpsumObject = t3lib_div::getUserObj('EXT:lorem_ipsum/class.tx_loremipsum_wiz.php:tx_loremipsum_wiz');
+               }
+
                $m_perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(8);   // create new pages here?
                $pRec = t3lib_BEfunc::getRecord('pages',$this->pObj->id,'uid',' AND '.$m_perms_clause);
                $sys_pages = t3lib_div::makeInstance('t3lib_pageSelect');
@@ -100,6 +131,8 @@ class tx_wizardcrpages_webfunc_2 extends t3lib_extobjbase {
                                }
 
                                $firstRecord = true;
+                               $previousIdentifier = '';
+
                                foreach ($data['pages'] as $identifier => $dat) {
                                        if (!trim($dat['title'])) {
                                                unset($data['pages'][$identifier]);
@@ -158,23 +191,55 @@ class tx_wizardcrpages_webfunc_2 extends t3lib_extobjbase {
                                }
                                $theCode.= '<h4>' . $LANG->getLL('wiz_newPages_currentMenu') . '</h4>' . implode('<br />', $lines);
                        } else {
-                                       // Create loremIpsum code:
-                               if (t3lib_extMgm::isLoaded('lorem_ipsum'))      {
-                                       $loremIpsumObj = t3lib_div::getUserObj('EXT:lorem_ipsum/class.tx_loremipsum_wiz.php:tx_loremipsum_wiz');
-                               }
+
                                        // Display create form
                                $lines = array();
                                for ($a = 0; $a < 9; $a++) {
-                                       $lines[] = '<label for="page_new_' . $a . '"> ' . $LANG->getLL('wiz_newPages_page') .' '. ($a+1) .
-                                               ':&nbsp;</label><input type="text" id="page_new_' . $a . '" name="data[pages][NEW' . $a . '][title]"' . $this->pObj->doc->formWidth(35) . ' />'.
-                                               (is_object($loremIpsumObj) ? '<a href="#" onclick="' . htmlspecialchars($loremIpsumObj->getHeaderTitleJS('document.forms[0][\'data[pages][NEW' . $a . '][title]\'].value', 'title')) . '">' . $loremIpsumObj->getIcon('', $this->pObj->doc->backPath) . '</a>' : '');
+                                       $lines[] = $this->getFormLine($a);
                                }
 
-                               $theCode.= '<h4>'.$LANG->getLL('wiz_newPages').':</h4>'.implode('<br />',$lines).
+                               $theCode .= '<h4>' . $LANG->getLL('wiz_newPages') . ':</h4>' .
+                               '<div id="formFieldContainer">' . implode('', $lines) . '</div>' .
+                               '<br class="clearLeft" />' .
+                               '<input type="button" id="createNewFormFields" value="' . $LANG->getLL('wiz_newPages_addMoreLines') . '" />' .
+
                                '<br /><br />
                                <input type="checkbox" name="createInListEnd" id="createInListEnd" value="1" /> <label for="createInListEnd">'.$LANG->getLL('wiz_newPages_listEnd').'</label><br />
                                <input type="checkbox" name="hidePages" id="hidePages" value="1" /> <label for="hidePages">'.$LANG->getLL('wiz_newPages_hidePages').'</label><br /><br />
                                <input type="submit" name="create" value="' . $LANG->getLL('wiz_newPages_lCreate') . '" onclick="return confirm(' . $GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->getLL('wiz_newPages_lCreate_msg1')) . ')" />&nbsp;<input type="reset" value="' . $LANG->getLL('wiz_newPages_lReset') . '" /><br />';
+
+                               // Add ExtJS inline code
+                               $extCode = '
+                                       var tpl = "' . addslashes(str_replace(
+                                               array(LF, TAB),
+                                               array('', ''),
+                                               $this->getFormLine('#')
+                                       )) . '", i, line, div, bg, label;
+                                       var lineCounter = 9;
+                                       Ext.get("createNewFormFields").on("click", function() {
+                                               div = Ext.get("formFieldContainer");
+                                               for (i = 0; i < 5; i++) {
+                                                       label = lineCounter + i + 1;
+                                                       bg = label % 2 === 0 ? 6 : 4;
+                                                       line = String.format(tpl, (lineCounter + i), label, bg);
+                                                       div.insertHtml("beforeEnd", line);
+                                               }
+                                               lineCounter += 5;
+                                       });
+                               ';
+
+                               /** @var t3lib_pageRenderer **/
+                               $pageRenderer = $GLOBALS['TBE_TEMPLATE']->getPageRenderer();
+
+                               $pageRenderer->loadExtJS();
+                               $pageRenderer->addExtOnReadyCode($extCode);
+                               $pageRenderer->addCssInlineBlock('tx_wizardcrpages_webfunc_2', '
+                               #formFieldContainer {float: left; margin: 0 0 10px 0;}
+                               .clearLeft {clear: left;}
+                               #formFieldContainer label {width: 70px; display: inline-block;}
+                               #formFieldContainer input {margin:4px 2px; padding:1px; vertical-align:middle}
+                               #formFieldContainer span {padding: 0 3px;}
+                               ');
                        }
                } else {
                        $theCode.=$GLOBALS['TBE_TEMPLATE']->rfw($LANG->getLL('wiz_newPages_errorMsg1'));
@@ -195,6 +260,90 @@ class tx_wizardcrpages_webfunc_2 extends t3lib_extobjbase {
        function helpBubble()   {
                return '<img src="'.$GLOBALS['BACK_PATH'].'gfx/helpbubble.gif" width="14" height="14" hspace="2" align="top"'.$this->pObj->doc->helpStyle().' alt="" />';
        }
+
+       /**
+        * Return one line in the form
+        *
+        * @param       mixed   $index An integer: the line counter for which to create the line. Use "#" to create an template for javascript (used by ExtJS)
+        * @return      string  HTML code for one input line for one new page
+        */
+       protected function getFormLine($index) {
+               $backPath = $GLOBALS['BACK_PATH'];
+
+               if (is_numeric(($index))) {
+                       $backgroundClass = ($index % 2 === 0 ? 'bgColor4' : 'bgColor6');
+                       $label = $index + 1;
+               } else {
+                               // used as template for ExtJS
+                       $index = '{0}';
+                       $backgroundClass = 'bgColor{2}';
+                       $label = '{1}';
+               }
+
+               $content = '<label for="page_new_' . $index . '"> ' . $GLOBALS['LANG']->getLL('wiz_newPages_page') .' '. $label;
+               $content .= ':&nbsp;</label>';
+
+                       // title
+               $content .= '<input type="text" id="page_new_' . $index . '" name="data[pages][NEW' . $index . '][title]"' . $this->pObj->doc->formWidth(35) . ' />&nbsp';
+
+                       // lorem ipsum link, if available
+               $content .= (is_object($this->loremIpsumObject) ?
+                       '<a href="#" onclick="' . htmlspecialchars($this->loremIpsumObject->getHeaderTitleJS('document.forms[0][\'data[pages][NEW' .
+                       $index . '][title]\'].value', 'title')) . '">' . $this->loremIpsumObject->getIcon('', $this->pObj->doc->backPath) . '</a>'
+                       : '');
+
+                       // type selector
+               $content .= '<span>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_general.php:LGL.type') . '</span>';
+               $content .= '<select onchange="this.style.backgroundImage=this.options[this.selectedIndex].style.backgroundImage;if (this.options[this.selectedIndex].value==\'--div--\') {this.selectedIndex=1;}" ';
+               $content .= 'class="select icon-select" name="data[pages][NEW' . $index . '][doktype]" style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/pages.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); padding: 1px 1px 1px 24px;">';
+
+                       // dokType
+               $types = $GLOBALS['PAGES_TYPES'];
+               unset($types['default']);
+               $types = array_keys($types);
+               $types[] = 1;
+               if (!$GLOBALS['BE_USER']->isAdmin() && isset($GLOBALS['BE_USER']->groupData['pagetypes_select'])) {
+                       $types = t3lib_div::trimExplode(',', $GLOBALS['BE_USER']->groupData['pagetypes_select'], TRUE);
+               }
+
+               $removeItems = isset($this->pagesTsConfig['doktype.']['removeItems']) ? t3lib_div::trimExplode(',', $this->pagesTsConfig['doktype.']['removeItems'], TRUE) : array();
+
+               $group = '';
+               if (in_array(1, $types) && !in_array(1, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/pages.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" selected="selected" value="1">Standard</option>';
+               }
+               if (in_array(6, $types) && !in_array(6, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'gfx/i/be_users_section.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="6">Backend User Section</option>';
+               }
+               $content .= $group ? '<optgroup class="c-divider" label="Page">' . $group . '</optgroup>' : '';
+
+               $group = '';
+               if (in_array(4, $types) && !in_array(4, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/pages_shortcut.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="4">Shortcut</option>';
+               }
+               if (in_array(7, $types) && !in_array(7, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'gfx/i/pages_mountpoint.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="7">Mount Point</option>';
+               }
+               if (in_array(3, $types) && !in_array(3, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/pages_link.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="3">Link to external URL</option>';
+               }
+               $content .= $group ? '<optgroup class="c-divider" label="Link">' . $group . '</optgroup>' : '';
+
+               $group = '';
+               if (in_array(254, $types) && !in_array(254, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/sysf.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="254">SysFolder</option>';
+               }
+               if (in_array(255, $types) && !in_array(255, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/recycler.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="255">Recycler</option>';
+               }
+               if (in_array(199, $types) && !in_array(199, $removeItems)) {
+                       $group .= '<option style="background: url(&quot;' . $backPath . 'sysext/t3skin/icons/gfx/i/spacer_icon.gif&quot;) no-repeat scroll 0% 50% rgb(255, 255, 255); height: 16px; padding-top: 2px; padding-left: 22px;" value="199">Visual menu separator</option>';
+               }
+               $content .= $group ? '<optgroup class="c-divider" label="Special">' . $group . '</optgroup>' : '';
+               $content .= '</select>';
+
+               return '<div id="form-line-' . $index . '" class="' . $backgroundClass . '">' . $content . '</div>';
+       }
 }
 
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/wizard_crpages/class.tx_wizardcrpages_webfunc_2.php'])        {
index edbdc37..7256a6c 100755 (executable)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "wizard_crpages".
 #
-# Auto generated 24-08-2010 14:48
+# Auto generated 24-08-2010 15:37
 #
 # Manual updates:
 # Only the data in the array - everything else is removed by next
@@ -30,8 +30,8 @@ $EM_CONF[$_EXTKEY] = array(
        'author' => 'Kasper Skaarhoj',
        'author_email' => 'kasperYYYY@typo3.com',
        'author_company' => 'Curby Soft Multimedia',
-       'version' => '1.0.0',
-       '_md5_values_when_last_written' => 'a:7:{s:36:"class.tx_wizardcrpages_webfunc_2.php";s:4:"5d31";s:12:"ext_icon.gif";s:4:"dd33";s:14:"ext_tables.php";s:4:"7e2d";s:13:"locallang.xml";s:4:"c897";s:17:"locallang_csh.xml";s:4:"c7d9";s:23:"cshimages/wizards_1.png";s:4:"4d49";s:23:"cshimages/wizards_2.png";s:4:"4d0f";}',
+       'version' => '1.1.0',
+       '_md5_values_when_last_written' => 'a:8:{s:34:"class.tx_wizardcrpages_webfunc.php";s:4:"7e94";s:36:"class.tx_wizardcrpages_webfunc_2.php";s:4:"2a6b";s:12:"ext_icon.gif";s:4:"dd33";s:14:"ext_tables.php";s:4:"7e2d";s:13:"locallang.xml";s:4:"aef1";s:17:"locallang_csh.xml";s:4:"c7d9";s:23:"cshimages/wizards_1.png";s:4:"4d49";s:23:"cshimages/wizards_2.png";s:4:"4d0f";}',
        'constraints' => array(
                'depends' => array(
                        'func_wizards' => '',
index e9c4f44..61ff723 100755 (executable)
@@ -19,6 +19,7 @@
                        <label index="wiz_newPages_lReset">Clear fields</label>
                        <label index="wiz_newPages_noCreate">No pages were created!</label>
                        <label index="wiz_newPages_create">The pages were created!</label>
+                       <label index="wiz_newPages_addMoreLines">Add more lines</label>
                </languageKey>
        </data>
 </T3locallang>