コード例 #1
0
ファイル: index.php プロジェクト: rod86/t3sandbox
    /**
     * Renders the sub elements of the given elementContentTree array. This function basically
     * renders the "new" and "paste" buttons for the parent element and then traverses through
     * the sub elements (if any exist). The sub element's (preview-) content will be rendered
     * by render_framework_singleSheet().
     *
     * Calls render_framework_allSheets() and therefore generates a recursion.
     *
     * @param	array		$elementContentTreeArr: Content tree starting with the element which possibly has sub elements
     * @param	string		$languageKey: Language key for current display
     * @param	string		$sheet: Key of the sheet we want to render
     * @param	integer		$calcPerms: Defined the access rights for the enclosing parent
     * @return	string		HTML output (a table) of the sub elements and some "insert new" and "paste" buttons
     * @access protected
     * @see render_framework_allSheets(), render_framework_singleSheet()
     */
    function render_framework_subElements($elementContentTreeArr, $languageKey, $sheet, $calcPerms = 0)
    {
        global $LANG;
        $beTemplate = '';
        $flagRenderBeLayout = false;
        $canEditContent = $GLOBALS['BE_USER']->isPSet($calcPerms, 'pages', 'editcontent');
        // Define l/v keys for current language:
        $langChildren = intval($elementContentTreeArr['ds_meta']['langChildren']);
        $langDisable = intval($elementContentTreeArr['ds_meta']['langDisable']);
        //if page DS and the checkbox is not set use always langDisable in inheritance mode
        if ($elementContentTreeArr['el']['table'] == 'pages' && $GLOBALS['BE_USER']->isAdmin()) {
            if ($langDisable != 1 && $this->MOD_SETTINGS['disablePageStructureInheritance'] != '1' && $langChildren == 1) {
                $langDisable = 1;
            }
        }
        $lKey = $langDisable ? 'lDEF' : ($langChildren ? 'lDEF' : 'l' . $languageKey);
        $vKey = $langDisable ? 'vDEF' : ($langChildren ? 'v' . $languageKey : 'vDEF');
        if (!is_array($elementContentTreeArr['sub'][$sheet]) || !is_array($elementContentTreeArr['sub'][$sheet][$lKey])) {
            return '';
        }
        $output = '';
        $cells = array();
        // get used TO
        if (isset($elementContentTreeArr['el']['TO']) && intval($elementContentTreeArr['el']['TO'])) {
            $toRecord = t3lib_BEfunc::getRecordWSOL('tx_templavoila_tmplobj', intval($elementContentTreeArr['el']['TO']));
        } else {
            $toRecord = $this->apiObj->getContentTree_fetchPageTemplateObject($this->rootElementRecord);
        }
        try {
            $toRepo = t3lib_div::makeInstance('tx_templavoila_templateRepository');
            /** @var $toRepo tx_templavoila_templateRepository */
            $to = $toRepo->getTemplateByUid($toRecord['uid']);
            /** @var $to tx_templavoila_template */
            $beTemplate = $to->getBeLayout();
        } catch (InvalidArgumentException $e) {
            // might happen if uid was not what the Repo expected - that's ok here
        }
        if ($beTemplate === FALSE && isset($elementContentTreeArr['ds_meta']['beLayout'])) {
            $beTemplate = $elementContentTreeArr['ds_meta']['beLayout'];
        }
        // no layout, no special rendering
        $flagRenderBeLayout = $beTemplate ? TRUE : FALSE;
        // Traverse container fields:
        foreach ($elementContentTreeArr['sub'][$sheet][$lKey] as $fieldID => $fieldValuesContent) {
            try {
                $newValue = $to->getLocalDataprotValueByXpath('//' . $fieldID . '/tx_templavoila/preview');
                $elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['tx_templavoila']['preview'] = $newValue;
            } catch (UnexpectedValueException $e) {
            }
            if (is_array($fieldValuesContent[$vKey]) && ($elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['isMapped'] || $elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['type'] == 'no_map') && $elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['tx_templavoila']['preview'] != 'disable') {
                $fieldContent = $fieldValuesContent[$vKey];
                $cellContent = '';
                // Create flexform pointer pointing to "before the first sub element":
                $subElementPointer = array('table' => $elementContentTreeArr['el']['table'], 'uid' => $elementContentTreeArr['el']['uid'], 'sheet' => $sheet, 'sLang' => $lKey, 'field' => $fieldID, 'vLang' => $vKey, 'position' => 0);
                if (isset($elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['TCEforms']['config']['maxitems'])) {
                    $maxCnt = $elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['TCEforms']['config']['maxitems'];
                    $maxItemsReached = is_array($fieldContent['el_list']) && count($fieldContent['el_list']) >= $maxCnt;
                } else {
                    $maxItemsReached = FALSE;
                }
                if ($maxItemsReached) {
                    $flashMessage = t3lib_div::makeInstance('t3lib_FlashMessage', '', sprintf($GLOBALS['LANG']->getLL('maximal_content_elements'), $maxCnt, $elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['tx_templavoila']['title']), t3lib_FlashMessage::INFO);
                    t3lib_FlashMessageQueue::addMessage($flashMessage);
                }
                $canCreateNew = $canEditContent && !$maxItemsReached;
                $canDragDrop = !$maxItemsReached && $canEditContent && $elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['tx_templavoila']['enableDragDrop'] !== '0' && $this->modTSconfig['properties']['enableDragDrop'] !== '0';
                if (!$this->translatorMode && $canCreateNew) {
                    $cellContent .= $this->link_bottomControls($subElementPointer, $canCreateNew);
                }
                // Render the list of elements (and possibly call itself recursively if needed):
                if (is_array($fieldContent['el_list'])) {
                    foreach ($fieldContent['el_list'] as $position => $subElementKey) {
                        $subElementArr = $fieldContent['el'][$subElementKey];
                        if ((!$subElementArr['el']['isHidden'] || $this->MOD_SETTINGS['tt_content_showHidden'] !== '0') && $this->displayElement($subElementArr)) {
                            // When "onlyLocalized" display mode is set and an alternative language gets displayed
                            if ($this->MOD_SETTINGS['langDisplayMode'] == 'onlyLocalized' && $this->currentLanguageUid > 0) {
                                // Default language element. Subsitute displayed element with localized element
                                if ($subElementArr['el']['sys_language_uid'] == 0 && is_array($subElementArr['localizationInfo'][$this->currentLanguageUid]) && ($localizedUid = $subElementArr['localizationInfo'][$this->currentLanguageUid]['localization_uid'])) {
                                    $localizedRecord = t3lib_BEfunc::getRecordWSOL('tt_content', $localizedUid, '*');
                                    $tree = $this->apiObj->getContentTree('tt_content', $localizedRecord);
                                    $subElementArr = $tree['tree'];
                                }
                            }
                            $this->containedElements[$this->containedElementsPointer]++;
                            // Modify the flexform pointer so it points to the position of the curren sub element:
                            $subElementPointer['position'] = $position;
                            if (!$this->translatorMode) {
                                $cellContent .= '<div' . ($canDragDrop ? ' class="sortableItem tpm-element t3-page-ce inactive"' : ' class="tpm-element t3-page-ce inactive"') . ' id="' . $this->addSortableItem($this->apiObj->flexform_getStringFromPointer($subElementPointer), $canDragDrop) . '">';
                            }
                            $cellContent .= $this->render_framework_allSheets($subElementArr, $languageKey, $subElementPointer, $elementContentTreeArr['ds_meta']);
                            if (!$this->translatorMode && $canCreateNew) {
                                $cellContent .= $this->link_bottomControls($subElementPointer, $canCreateNew);
                            }
                            if (!$this->translatorMode) {
                                $cellContent .= '</div>';
                            }
                        } else {
                            // Modify the flexform pointer so it points to the position of the curren sub element:
                            $subElementPointer['position'] = $position;
                            $cellId = $this->addSortableItem($this->apiObj->flexform_getStringFromPointer($subElementPointer), $canDragDrop);
                            $cellFragment = '<div' . ($canDragDrop ? ' class="sortableItem tpm-element"' : ' class="tpm-element"') . ' id="' . $cellId . '"></div>';
                            $cellContent .= $cellFragment;
                        }
                    }
                }
                $cellIdStr = '';
                $tmpArr = $subElementPointer;
                unset($tmpArr['position']);
                $cellId = $this->addSortableItem($this->apiObj->flexform_getStringFromPointer($tmpArr), $canDragDrop);
                $cellIdStr = ' id="' . $cellId . '"';
                if ($canDragDrop) {
                    $this->sortableContainers[] = $cellId;
                }
                // Add cell content to registers:
                if ($flagRenderBeLayout == TRUE) {
                    $beTemplateCell = '<table width="100%" class="beTemplateCell">
					<tr>
						<td class="bgColor6 tpm-title-cell">' . $LANG->sL($fieldContent['meta']['title'], 1) . '</td>
					</tr>
					<tr>
						<td ' . $cellIdStr . ' class="tpm-content-cell">' . $cellContent . '</td>
					</tr>
					</table>';
                    $beTemplate = str_replace('###' . $fieldID . '###', $beTemplateCell, $beTemplate);
                } else {
                    $width = round(100 / count($elementContentTreeArr['sub'][$sheet][$lKey]));
                    $cells[] = array('id' => $cellId, 'idStr' => $cellIdStr, 'title' => $LANG->sL($fieldContent['meta']['title'], 1), 'width' => $width, 'content' => $cellContent);
                }
            }
        }
        if ($flagRenderBeLayout) {
            //replace lang markers
            $beTemplate = preg_replace_callback("/###(LLL:[\\w-\\/:]+?\\.xml\\:[\\w-\\.]+?)###/", create_function('$matches', 'return $GLOBALS["LANG"]->sL($matches[1], 1);'), $beTemplate);
            // removes not used markers
            $beTemplate = preg_replace("/###field_.*?###/", '', $beTemplate);
            return $beTemplate;
        }
        // Compile the content area for the current element
        if (count($cells)) {
            $hookObjectsArr = $this->hooks_prepareObjectsArray('renderFrameworkClass');
            $alreadyRendered = FALSE;
            $output = '';
            foreach ($hookObjectsArr as $hookObj) {
                if (method_exists($hookObj, 'composeSubelements')) {
                    $hookObj->composeSubelements($cells, $elementContentTreeArr, $output, $alreadyRendered, $this);
                }
            }
            if (!$alreadyRendered) {
                $headerCells = $contentCells = array();
                foreach ($cells as $cell) {
                    $headerCells[] = vsprintf('<td width="%4$d%%" class="bgColor6 tpm-title-cell">%3$s</td>', $cell);
                    $contentCells[] = vsprintf('<td %2$s width="%4$d%%" class="tpm-content-cell">%5$s</td>', $cell);
                }
                $output = '
					<table border="0" cellpadding="2" cellspacing="2" width="100%" class="tpm-subelement-table">
						<tr>' . (count($headerCells) ? implode('', $headerCells) : '<td>&nbsp;</td>') . '</tr>
						<tr>' . (count($contentCells) ? implode('', $contentCells) : '<td>&nbsp;</td>') . '</tr>
					</table>
				';
            }
        }
        return $output;
    }
コード例 #2
0
ファイル: index.php プロジェクト: NaveedWebdeveloper/Test
    /**
     * Renders the sub elements of the given elementContentTree array. This function basically
     * renders the "new" and "paste" buttons for the parent element and then traverses through
     * the sub elements (if any exist). The sub element's (preview-) content will be rendered
     * by render_framework_singleSheet().
     *
     * Calls render_framework_allSheets() and therefore generates a recursion.
     *
     * @param	array		$elementContentTreeArr: Content tree starting with the element which possibly has sub elements
     * @param	string		$languageKey: Language key for current display
     * @param	string		$sheet: Key of the sheet we want to render
     * @return	string		HTML output (a table) of the sub elements and some "insert new" and "paste" buttons
     * @access protected
     * @see render_framework_allSheets(), render_framework_singleSheet()
     */
    function render_framework_subElements($elementContentTreeArr, $languageKey, $sheet)
    {
        global $LANG;
        $beTemplate = '';
        $flagRenderBeLayout = false;
        // Define l/v keys for current language:
        $langChildren = intval($elementContentTreeArr['ds_meta']['langChildren']);
        $langDisable = intval($elementContentTreeArr['ds_meta']['langDisable']);
        $lKey = $langDisable ? 'lDEF' : ($langChildren ? 'lDEF' : 'l' . $languageKey);
        $vKey = $langDisable ? 'vDEF' : ($langChildren ? 'v' . $languageKey : 'vDEF');
        if (!is_array($elementContentTreeArr['sub'][$sheet]) || !is_array($elementContentTreeArr['sub'][$sheet][$lKey])) {
            return '';
        }
        $output = '';
        $cells = array();
        $headerCells = array();
        // gets the layout
        $beTemplate = $elementContentTreeArr['ds_meta']['beLayout'];
        // no layout, no special rendering
        $flagRenderBeLayout = $beTemplate ? TRUE : FALSE;
        // Traverse container fields:
        foreach ($elementContentTreeArr['sub'][$sheet][$lKey] as $fieldID => $fieldValuesContent) {
            if ($elementContentTreeArr['previewData']['sheets'][$sheet][$fieldID]['isMapped'] && is_array($fieldValuesContent[$vKey])) {
                $fieldContent = $fieldValuesContent[$vKey];
                $cellContent = '';
                // Create flexform pointer pointing to "before the first sub element":
                $subElementPointer = array('table' => $elementContentTreeArr['el']['table'], 'uid' => $elementContentTreeArr['el']['uid'], 'sheet' => $sheet, 'sLang' => $lKey, 'field' => $fieldID, 'vLang' => $vKey, 'position' => 0);
                $canCreateNew = $GLOBALS['BE_USER']->isPSet($this->calcPerms, 'pages', 'new');
                if (!$this->translatorMode && $canCreateNew) {
                    // "New" and "Paste" icon:
                    $newIcon = '<img' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/new_el.gif', '') . ' style="text-align: center; vertical-align: middle;" vspace="5" hspace="1" border="0" title="' . $LANG->getLL('createnewrecord') . '" alt="" />';
                    $cellContent .= $this->link_new($newIcon, $subElementPointer);
                    $cellContent .= $this->clipboardObj->element_getPasteButtons($subElementPointer);
                }
                // Render the list of elements (and possibly call itself recursively if needed):
                if (is_array($fieldContent['el_list'])) {
                    foreach ($fieldContent['el_list'] as $position => $subElementKey) {
                        $subElementArr = $fieldContent['el'][$subElementKey];
                        if ((!$subElementArr['el']['isHidden'] || $this->MOD_SETTINGS['tt_content_showHidden']) && $this->displayElement($subElementArr)) {
                            // When "onlyLocalized" display mode is set and an alternative language gets displayed
                            if ($this->MOD_SETTINGS['langDisplayMode'] == 'onlyLocalized' && $this->currentLanguageUid > 0) {
                                // Default language element. Subsitute displayed element with localized element
                                if ($subElementArr['el']['sys_language_uid'] == 0 && is_array($subElementArr['localizationInfo'][$this->currentLanguageUid]) && ($localizedUid = $subElementArr['localizationInfo'][$this->currentLanguageUid]['localization_uid'])) {
                                    $localizedRecord = t3lib_BEfunc::getRecordWSOL('tt_content', $localizedUid, '*');
                                    $tree = $this->apiObj->getContentTree('tt_content', $localizedRecord);
                                    $subElementArr = $tree['tree'];
                                }
                            }
                            $this->containedElements[$this->containedElementsPointer]++;
                            // Modify the flexform pointer so it points to the position of the curren sub element:
                            $subElementPointer['position'] = $position;
                            $cellContent .= $this->render_framework_allSheets($subElementArr, $languageKey, $subElementPointer, $elementContentTreeArr['ds_meta']);
                            if (!$this->translatorMode && $canCreateNew) {
                                // "New" and "Paste" icon:
                                $newIcon = '<img' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/new_el.gif', '') . ' style="text-align: center; vertical-align: middle;" vspace="5" hspace="1" border="0" title="' . $LANG->getLL('createnewrecord') . '" alt="" />';
                                $cellContent .= $this->link_new($newIcon, $subElementPointer);
                                $cellContent .= $this->clipboardObj->element_getPasteButtons($subElementPointer);
                            }
                        }
                    }
                }
                // Add cell content to registers:
                if ($flagRenderBeLayout == TRUE) {
                    $beTemplateCell = '<table width="100%" class="beTemplateCell"><tr><td valign="top" style="background-color: ' . $this->doc->bgColor4 . '; padding-top:0; padding-bottom:0;">' . $LANG->sL($fieldContent['meta']['title'], 1) . '</td></tr><tr><td valign="top" style="padding: 5px;">' . $cellContent . '</td></tr></table>';
                    $beTemplate = str_replace('###' . $fieldID . '###', $beTemplateCell, $beTemplate);
                } else {
                    // Add cell content to registers:
                    $headerCells[] = '<td valign="top" width="' . round(100 / count($elementContentTreeArr['sub'][$sheet][$lKey])) . '%" style="background-color: ' . $this->doc->bgColor4 . '; padding-top:0; padding-bottom:0;">' . $LANG->sL($fieldContent['meta']['title'], 1) . '</td>';
                    $cells[] = '<td valign="top" width="' . round(100 / count($elementContentTreeArr['sub'][$sheet][$lKey])) . '%" style="border: 1px dashed #000; padding: 5px 5px 5px 5px;">' . $cellContent . '</td>';
                }
            }
        }
        if ($flagRenderBeLayout) {
            // removes not used markers
            $beTemplate = preg_replace("/###field_.*?###/", '', $beTemplate);
            return $beTemplate;
        }
        // Compile the content area for the current element (basically what was put together above):
        if (count($headerCells) || count($cells)) {
            $output = '
				<table border="0" cellpadding="2" cellspacing="2" width="100%">
					<tr>' . (count($headerCells) ? implode('', $headerCells) : '<td>&nbsp;</td>') . '</tr>
					<tr>' . (count($cells) ? implode('', $cells) : '<td>&nbsp;</td>') . '</tr>
				</table>
			';
        }
        return $output;
    }