/** * Main method. * * @return void */ public function main() { $listUrl = GeneralUtility::getIndpEnv('REQUEST_URI'); // Access check! // The page will show only if there is a valid page and if user may access it if ($this->id && (is_array($this->pageRow) ? 1 : 0)) { // JavaScript $this->doc->JScode = $this->doc->wrapScriptTags(' script_ended = 0; function jumpToUrl(URL) { document.location = URL; } function deleteRecord(table, id, url, warning) { if ( confirm(eval(warning)) ) { window.location.href = "' . $this->getBackPath() . 'tce_db.php?cmd["+table+"]["+id+"][delete]=1&redirect="+escape(url); } return false; } ' . $this->doc->redirectUrls($listUrl) . ' '); $this->doc->postCode = $this->doc->wrapScriptTags(' script_ended = 1; if (top.fsMod) { top.fsMod.recentIds["web"] = ' . (int) $this->id . '; } '); $this->doc->inDocStylesArray['mod_systemdata'] = ''; // Render content: $this->moduleContent(); } else { $this->content = 'Access denied or commerce pages not created yet!'; } $docHeaderButtons = $this->getHeaderButtons(); $markers = array('CSH' => $docHeaderButtons['csh'], 'CONTENT' => $this->content); $markers['FUNC_MENU'] = $this->doc->funcMenu('', BackendUtility::getFuncMenu($this->id, 'SET[function]', $this->MOD_SETTINGS['function'], $this->MOD_MENU['function'])); // put it all together $this->content = $this->doc->startPage($this->getLanguageService()->getLL('title')); $this->content .= $this->doc->moduleBody($this->pageRow, $docHeaderButtons, $markers); $this->content .= $this->doc->endPage(); $this->content = $this->doc->insertStylesAndJS($this->content); }
/** * Main function, starting the rendering of the list. * * @return void * @todo Define visibility */ public function main() { // Start document template object: $this->doc = GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Template\\DocumentTemplate'); $this->doc->backPath = $GLOBALS['BACK_PATH']; $this->doc->setModuleTemplate('EXT:recordlist/Resources/Private/Templates/db_list.html'); // Loading current page record and checking access: $this->pageinfo = BackendUtility::readPageAccess($this->id, $this->perms_clause); $access = is_array($this->pageinfo) ? 1 : 0; // Apply predefined values for hidden checkboxes // Set predefined value for DisplayBigControlPanel: if ($this->modTSconfig['properties']['enableDisplayBigControlPanel'] === 'activated') { $this->MOD_SETTINGS['bigControlPanel'] = TRUE; } elseif ($this->modTSconfig['properties']['enableDisplayBigControlPanel'] === 'deactivated') { $this->MOD_SETTINGS['bigControlPanel'] = FALSE; } // Set predefined value for Clipboard: if ($this->modTSconfig['properties']['enableClipBoard'] === 'activated') { $this->MOD_SETTINGS['clipBoard'] = TRUE; } elseif ($this->modTSconfig['properties']['enableClipBoard'] === 'deactivated') { $this->MOD_SETTINGS['clipBoard'] = FALSE; } // Set predefined value for LocalizationView: if ($this->modTSconfig['properties']['enableLocalizationView'] === 'activated') { $this->MOD_SETTINGS['localization'] = TRUE; } elseif ($this->modTSconfig['properties']['enableLocalizationView'] === 'deactivated') { $this->MOD_SETTINGS['localization'] = FALSE; } // Initialize the dblist object: /** @var $dblist \TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList */ $dblist = GeneralUtility::makeInstance('TYPO3\\CMS\\Recordlist\\RecordList\\DatabaseRecordList'); $dblist->backPath = $GLOBALS['BACK_PATH']; $dblist->script = BackendUtility::getModuleUrl('web_list', array(), ''); $dblist->calcPerms = $GLOBALS['BE_USER']->calcPerms($this->pageinfo); $dblist->thumbs = $GLOBALS['BE_USER']->uc['thumbnailsByDefault']; $dblist->returnUrl = $this->returnUrl; $dblist->allFields = $this->MOD_SETTINGS['bigControlPanel'] || $this->table ? 1 : 0; $dblist->localizationView = $this->MOD_SETTINGS['localization']; $dblist->showClipboard = 1; $dblist->disableSingleTableView = $this->modTSconfig['properties']['disableSingleTableView']; $dblist->listOnlyInSingleTableMode = $this->modTSconfig['properties']['listOnlyInSingleTableView']; $dblist->hideTables = $this->modTSconfig['properties']['hideTables']; $dblist->hideTranslations = $this->modTSconfig['properties']['hideTranslations']; $dblist->tableTSconfigOverTCA = $this->modTSconfig['properties']['table.']; $dblist->alternateBgColors = $this->modTSconfig['properties']['alternateBgColors'] ? 1 : 0; $dblist->allowedNewTables = GeneralUtility::trimExplode(',', $this->modTSconfig['properties']['allowedNewTables'], TRUE); $dblist->deniedNewTables = GeneralUtility::trimExplode(',', $this->modTSconfig['properties']['deniedNewTables'], TRUE); $dblist->newWizards = $this->modTSconfig['properties']['newWizards'] ? 1 : 0; $dblist->pageRow = $this->pageinfo; $dblist->counter++; $dblist->MOD_MENU = array('bigControlPanel' => '', 'clipBoard' => '', 'localization' => ''); $dblist->modTSconfig = $this->modTSconfig; $clickTitleMode = trim($this->modTSconfig['properties']['clickTitleMode']); $dblist->clickTitleMode = $clickTitleMode === '' ? 'edit' : $clickTitleMode; // Clipboard is initialized: // Start clipboard $dblist->clipObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Clipboard\\Clipboard'); // Initialize - reads the clipboard content from the user session $dblist->clipObj->initializeClipboard(); // Clipboard actions are handled: // CB is the clipboard command array $CB = GeneralUtility::_GET('CB'); if ($this->cmd == 'setCB') { // CBH is all the fields selected for the clipboard, CBC is the checkbox fields which were checked. // By merging we get a full array of checked/unchecked elements // This is set to the 'el' array of the CB after being parsed so only the table in question is registered. $CB['el'] = $dblist->clipObj->cleanUpCBC(array_merge(GeneralUtility::_POST('CBH'), (array) GeneralUtility::_POST('CBC')), $this->cmd_table); } if (!$this->MOD_SETTINGS['clipBoard']) { // If the clipboard is NOT shown, set the pad to 'normal'. $CB['setP'] = 'normal'; } // Execute commands. $dblist->clipObj->setCmd($CB); // Clean up pad $dblist->clipObj->cleanCurrent(); // Save the clipboard content $dblist->clipObj->endClipboard(); // This flag will prevent the clipboard panel in being shown. // It is set, if the clickmenu-layer is active AND the extended view is not enabled. $dblist->dontShowClipControlPanels = !$this->MOD_SETTINGS['bigControlPanel'] && $dblist->clipObj->current == 'normal' && !$this->modTSconfig['properties']['showClipControlPanelsDespiteOfCMlayers']; // If there is access to the page or root page is used for searching, then render the list contents and set up the document template object: if ($access || $this->id === 0 && $this->search_levels > 0 && strlen($this->search_field) > 0) { // Deleting records...: // Has not to do with the clipboard but is simply the delete action. The clipboard object is used to clean up the submitted entries to only the selected table. if ($this->cmd == 'delete') { $items = $dblist->clipObj->cleanUpCBC(GeneralUtility::_POST('CBC'), $this->cmd_table, 1); if (count($items)) { $cmd = array(); foreach ($items as $iK => $value) { $iKParts = explode('|', $iK); $cmd[$iKParts[0]][$iKParts[1]]['delete'] = 1; } $tce = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\DataHandling\\DataHandler'); $tce->stripslashes_values = 0; $tce->start(array(), $cmd); $tce->process_cmdmap(); if (isset($cmd['pages'])) { BackendUtility::setUpdateSignal('updatePageTree'); } $tce->printLogErrorMessages(GeneralUtility::getIndpEnv('REQUEST_URI')); } } // Initialize the listing object, dblist, for rendering the list: $this->pointer = \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange($this->pointer, 0, 100000); $dblist->start($this->id, $this->table, $this->pointer, $this->search_field, $this->search_levels, $this->showLimit); $dblist->setDispFields(); // Render versioning selector: if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('version')) { $dblist->HTMLcode .= $this->doc->getVersionSelector($this->id); } // Render the list of tables: $dblist->generateList(); $listUrl = substr($dblist->listURL(), strlen($GLOBALS['BACK_PATH'])); // Add JavaScript functions to the page: $this->doc->JScode = $this->doc->wrapScriptTags(' function jumpExt(URL,anchor) { // var anc = anchor?anchor:""; window.location.href = URL+(T3_THIS_LOCATION?"&returnUrl="+T3_THIS_LOCATION:"")+anc; return false; } function jumpSelf(URL) { // window.location.href = URL+(T3_RETURN_URL?"&returnUrl="+T3_RETURN_URL:""); return false; } function setHighlight(id) { // top.fsMod.recentIds["web"]=id; top.fsMod.navFrameHighlightedID["web"]="pages"+id+"_"+top.fsMod.currentBank; // For highlighting if (top.content && top.content.nav_frame && top.content.nav_frame.refresh_nav) { top.content.nav_frame.refresh_nav(); } } ' . $this->doc->redirectUrls($listUrl) . ' ' . $dblist->CBfunctions() . ' function editRecords(table,idList,addParams,CBflag) { // window.location.href="' . $GLOBALS['BACK_PATH'] . 'alt_doc.php?returnUrl=' . rawurlencode(GeneralUtility::getIndpEnv('REQUEST_URI')) . '&edit["+table+"]["+idList+"]=edit"+addParams; } function editList(table,idList) { // var list=""; // Checking how many is checked, how many is not var pointer=0; var pos = idList.indexOf(","); while (pos!=-1) { if (cbValue(table+"|"+idList.substr(pointer,pos-pointer))) { list+=idList.substr(pointer,pos-pointer)+","; } pointer=pos+1; pos = idList.indexOf(",",pointer); } if (cbValue(table+"|"+idList.substr(pointer))) { list+=idList.substr(pointer)+","; } return list ? list : idList; } if (top.fsMod) top.fsMod.recentIds["web"] = ' . (int) $this->id . '; '); // Setting up the context sensitive menu: $this->doc->getContextMenuCode(); } // access // Begin to compile the whole page, starting out with page header: $this->body = $this->doc->header($this->pageinfo['title']); $this->body .= '<form action="' . htmlspecialchars($dblist->listURL()) . '" method="post" name="dblistForm">'; $this->body .= $dblist->HTMLcode; $this->body .= '<input type="hidden" name="cmd_table" /><input type="hidden" name="cmd" /></form>'; // If a listing was produced, create the page footer with search form etc: if ($dblist->HTMLcode) { // Making field select box (when extended view for a single table is enabled): if ($dblist->table) { $this->body .= $dblist->fieldSelectBox($dblist->table); } // Adding checkbox options for extended listing and clipboard display: $this->body .= ' <!-- Listing options for extended view, clipboard and localization view --> <div id="typo3-listOptions"> <form action="" method="post">'; // Add "display bigControlPanel" checkbox: if ($this->modTSconfig['properties']['enableDisplayBigControlPanel'] === 'selectable') { $this->body .= BackendUtility::getFuncCheck($this->id, 'SET[bigControlPanel]', $this->MOD_SETTINGS['bigControlPanel'], '', $this->table ? '&table=' . $this->table : '', 'id="checkLargeControl"'); $this->body .= '<label for="checkLargeControl">' . BackendUtility::wrapInHelp('xMOD_csh_corebe', 'list_options', $GLOBALS['LANG']->getLL('largeControl', TRUE)) . '</label><br />'; } // Add "clipboard" checkbox: if ($this->modTSconfig['properties']['enableClipBoard'] === 'selectable') { if ($dblist->showClipboard) { $this->body .= BackendUtility::getFuncCheck($this->id, 'SET[clipBoard]', $this->MOD_SETTINGS['clipBoard'], '', $this->table ? '&table=' . $this->table : '', 'id="checkShowClipBoard"'); $this->body .= '<label for="checkShowClipBoard">' . BackendUtility::wrapInHelp('xMOD_csh_corebe', 'list_options', $GLOBALS['LANG']->getLL('showClipBoard', TRUE)) . '</label><br />'; } } // Add "localization view" checkbox: if ($this->modTSconfig['properties']['enableLocalizationView'] === 'selectable') { $this->body .= BackendUtility::getFuncCheck($this->id, 'SET[localization]', $this->MOD_SETTINGS['localization'], '', $this->table ? '&table=' . $this->table : '', 'id="checkLocalization"'); $this->body .= '<label for="checkLocalization">' . BackendUtility::wrapInHelp('xMOD_csh_corebe', 'list_options', $GLOBALS['LANG']->getLL('localization', TRUE)) . '</label><br />'; } $this->body .= ' </form> </div>'; } // Printing clipboard if enabled if ($this->MOD_SETTINGS['clipBoard'] && $dblist->showClipboard && ($dblist->HTMLcode || $dblist->clipObj->hasElements())) { $this->body .= '<div class="db_list-dashboard">' . $dblist->clipObj->printClipboard() . '</div>'; } // Search box: if (!$this->modTSconfig['properties']['disableSearchBox'] && ($dblist->HTMLcode || $dblist->searchString !== '')) { $sectionTitle = BackendUtility::wrapInHelp('xMOD_csh_corebe', 'list_searchbox', $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.search', TRUE)); $this->body .= '<div class="db_list-searchbox">' . $this->doc->section($sectionTitle, $dblist->getSearchBox(), FALSE, TRUE, FALSE, TRUE) . '</div>'; } // Additional footer content $footerContentHook = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['recordlist/mod1/index.php']['drawFooterHook']; if (is_array($footerContentHook)) { foreach ($footerContentHook as $hook) { $params = array(); $this->body .= GeneralUtility::callUserFunction($hook, $params, $this); } } // Setting up the buttons and markers for docheader $docHeaderButtons = $dblist->getButtons(); $markers = array('CSH' => $docHeaderButtons['csh'], 'CONTENT' => $this->body, 'EXTRACONTAINERCLASS' => $this->table ? 'singletable' : ''); // Build the <body> for the module $this->content = $this->doc->moduleBody($this->pageinfo, $docHeaderButtons, $markers); // Renders the module page $this->content = $this->doc->render('DB list', $this->content); }
/** * Generate JS code to be used on the link insert/modify dialogue * * @return string the generated JS code */ public function getJsCode() { // Rich Text Editor specific configuration: $addPassOnParams = ''; if ((string) $this->mode == 'rte') { $addPassOnParams .= '&RTEtsConfigParams=' . rawurlencode($this->RTEtsConfigParams); } // BEGIN accumulation of header JavaScript: $JScode = ' // This JavaScript is primarily for RTE/Link. jumpToUrl is used in the other cases as well... var add_href=' . GeneralUtility::quoteJSvalue($this->curUrlArray['href'] ? '&curUrl[href]=' . rawurlencode($this->curUrlArray['href']) : '') . '; var add_target=' . GeneralUtility::quoteJSvalue($this->setTarget ? '&curUrl[target]=' . rawurlencode($this->setTarget) : '') . '; var add_class=' . GeneralUtility::quoteJSvalue($this->setClass ? '&curUrl[class]=' . rawurlencode($this->setClass) : '') . '; var add_title=' . GeneralUtility::quoteJSvalue($this->setTitle ? '&curUrl[title]=' . rawurlencode($this->setTitle) : '') . '; var add_params=' . GeneralUtility::quoteJSvalue($this->bparams ? '&bparams=' . rawurlencode($this->bparams) : '') . '; var cur_href=' . GeneralUtility::quoteJSvalue($this->curUrlArray['href'] ?: '') . '; var cur_target=' . GeneralUtility::quoteJSvalue($this->setTarget ?: '') . '; var cur_class=' . GeneralUtility::quoteJSvalue($this->setClass ?: '') . '; var cur_title=' . GeneralUtility::quoteJSvalue($this->setTitle ?: '') . '; var cur_params=' . GeneralUtility::quoteJSvalue($this->setParams ?: '') . '; function browse_links_setTarget(target) { // cur_target=target; add_target="&curUrl[target]="+escape(target); } function browse_links_setClass(cssClass) { // cur_class = cssClass; add_class = "&curUrl[class]=" + escape(cssClass); } function browse_links_setTitle(title) { // cur_title=title; add_title="&curUrl[title]="+escape(title); } function browse_links_setValue(value) { // cur_href=value; add_href="&curUrl[href]="+value; } function browse_links_setParams(params) { // cur_params=params; add_params="&curUrl[params]="+escape(params); } ' . $this->doc->redirectUrls(); // Functions used, if the link selector is in wizard mode (= TCEforms fields) if ($this->mode == 'wizard') { if (!$this->areFieldChangeFunctionsValid() && !$this->areFieldChangeFunctionsValid(TRUE)) { $this->P['fieldChangeFunc'] = array(); } unset($this->P['fieldChangeFunc']['alert']); $update = ''; foreach ($this->P['fieldChangeFunc'] as $v) { $update .= ' window.opener.' . $v; } $P2 = array(); $P2['uid'] = $this->P['uid']; $P2['pid'] = $this->P['pid']; $P2['itemName'] = $this->P['itemName']; $P2['formName'] = $this->P['formName']; $P2['fieldChangeFunc'] = $this->P['fieldChangeFunc']; $P2['fieldChangeFuncHash'] = GeneralUtility::hmac(serialize($this->P['fieldChangeFunc'])); $P2['params']['allowedExtensions'] = isset($this->P['params']['allowedExtensions']) ? $this->P['params']['allowedExtensions'] : ''; $P2['params']['blindLinkOptions'] = isset($this->P['params']['blindLinkOptions']) ? $this->P['params']['blindLinkOptions'] : ''; $P2['params']['blindLinkFields'] = isset($this->P['params']['blindLinkFields']) ? $this->P['params']['blindLinkFields'] : ''; $addPassOnParams .= GeneralUtility::implodeArrayForUrl('P', $P2); $JScode .= ' function link_typo3Page(id,anchor) { // updateValueInMainForm(id + (anchor ? anchor : "")); close(); return false; } function link_folder(folder) { // updateValueInMainForm(folder); close(); return false; } function link_current() { // if (cur_href!="http://" && cur_href!="mailto:") { returnBeforeCleaned = cur_href; if (returnBeforeCleaned.substr(0, 7) == "http://") { returnToMainFormValue = returnBeforeCleaned.substr(7); } else if (returnBeforeCleaned.substr(0, 7) == "mailto:") { if (returnBeforeCleaned.substr(0, 14) == "mailto:mailto:") { returnToMainFormValue = returnBeforeCleaned.substr(14); } else { returnToMainFormValue = returnBeforeCleaned.substr(7); } } else { returnToMainFormValue = returnBeforeCleaned; } updateValueInMainForm(returnToMainFormValue); close(); } return false; } function checkReference() { // if (window.opener && window.opener.document && window.opener.document.' . $this->P['formName'] . ' && window.opener.document.' . $this->P['formName'] . '["' . $this->P['itemName'] . '"] ) { return window.opener.document.' . $this->P['formName'] . '["' . $this->P['itemName'] . '"]; } else { close(); } } function updateValueInMainForm(input) { // var field = checkReference(); if (field) { if (cur_target == "" && (cur_class != "" || cur_title != "" || cur_params != "")) { cur_target = "-"; } if (cur_class == "" && (cur_title != "" || cur_params != "")) { cur_class = "-"; } cur_class = cur_class.replace(/[\'\\"]/g, ""); if (cur_class.indexOf(" ") != -1) { cur_class = "\\"" + cur_class + "\\""; } if (cur_title == "" && cur_params != "") { cur_title = "-"; } // replace each \\ with \\ cur_title = cur_title.replace(/\\\\/g, "\\\\\\\\"); // replace each " with \\" cur_title = cur_title.replace(/\\"/g, "\\\\\\""); if (cur_title.indexOf(" ") != -1) { cur_title = "\\"" + cur_title + "\\""; } if (cur_params) { cur_params = cur_params.replace(/\\bid\\=.*?(\\&|$)/, ""); } input = input + " " + cur_target + " " + cur_class + " " + cur_title + " " + cur_params; input = input.replace(/^\\s+|\\s+$/g, ""); if(field.value && field.className.search(/textarea/) != -1) { field.value += "\\n" + input; } else { field.value = input; } field.onchange(); ' . $update . ' } } '; } else { // Functions used, if the link selector is in RTE mode: $JScode .= ' function link_typo3Page(id,anchor) { // var theLink = \'' . $this->siteURL . '?id=\'+id+(anchor?anchor:""); self.parent.parent.renderPopup_addLink(theLink, cur_target, cur_class, cur_title); return false; } function link_folder(folder) { // var theLink = \'' . $this->siteURL . '\'+folder; self.parent.parent.renderPopup_addLink(theLink, cur_target, cur_class, cur_title); return false; } function link_spec(theLink) { // self.parent.parent.renderPopup_addLink(theLink, cur_target, cur_class, cur_title); return false; } function link_current() { // if (cur_href!="http://" && cur_href!="mailto:") { self.parent.parent.renderPopup_addLink(cur_href, cur_target, cur_class, cur_title); } return false; } '; } // General "jumpToUrl" function: $JScode .= ' function jumpToUrl(URL,anchor) { // if (URL.charAt(0) === \'?\') { URL = ' . GeneralUtility::quoteJSvalue($this->getThisScript()) . ' + URL.substring(1); } var add_act = URL.indexOf("act=")==-1 ? "&act=' . $this->act . '" : ""; var add_mode = URL.indexOf("mode=")==-1 ? "&mode=' . $this->mode . '" : ""; var theLocation = URL + add_act + add_mode + add_href + add_target + add_class + add_title + add_params' . ($addPassOnParams ? '+' . GeneralUtility::quoteJSvalue($addPassOnParams) : '') . '+(typeof(anchor)=="string"?anchor:""); window.location.href = theLocation; return false; } '; /** * Splits parts of $this->bparams * * @see $bparams */ $pArr = explode('|', $this->bparams); // This is JavaScript especially for the TBE Element Browser! $formFieldName = 'data[' . $pArr[0] . '][' . $pArr[1] . '][' . $pArr[2] . ']'; // insertElement - Call check function (e.g. for uniqueness handling): $JScodeCheck = ''; if ($pArr[4] && $pArr[5]) { $JScodeCheck = ' // Call a check function in the opener window (e.g. for uniqueness handling): if (parent.window.opener) { var res = parent.window.opener.' . $pArr[5] . '("' . addslashes($pArr[4]) . '",table,uid,type); if (!res.passed) { if (res.message) alert(res.message); performAction = false; } } else { alert("Error - reference to main window is not set properly!"); parent.close(); } '; } // insertElement - Call helper function: $JScodeHelper = ''; if ($pArr[4] && $pArr[6]) { $JScodeHelper = ' // Call helper function to manage data in the opener window: if (parent.window.opener) { parent.window.opener.' . $pArr[6] . '("' . addslashes($pArr[4]) . '",table,uid,type,"' . addslashes($pArr[0]) . '"); } else { alert("Error - reference to main window is not set properly!"); parent.close(); } '; } // insertElement - perform action commands: $JScodeActionMultiple = ''; if ($pArr[4] && $pArr[7]) { // Call user defined action function: $JScodeAction = ' if (parent.window.opener) { parent.window.opener.' . $pArr[7] . '("' . addslashes($pArr[4]) . '",table,uid,type); if (close) { focusOpenerAndClose(close); } } else { alert("Error - reference to main window is not set properly!"); if (close) { parent.close(); } } '; $JScodeActionMultiple = ' // Call helper function to manage data in the opener window: if (parent.window.opener) { parent.window.opener.' . $pArr[7] . 'Multiple("' . addslashes($pArr[4]) . '",table,uid,type,"' . addslashes($pArr[0]) . '"); } else { alert("Error - reference to main window is not set properly!"); parent.close(); } '; } elseif ($pArr[0] && !$pArr[1] && !$pArr[2]) { $JScodeAction = ' addElement(filename,table+"_"+uid,fp,close); '; } else { $JScodeAction = ' if (setReferences()) { parent.window.opener.group_change("add","' . $pArr[0] . '","' . $pArr[1] . '","' . $pArr[2] . '",elRef,targetDoc); } else { alert("Error - reference to main window is not set properly!"); } focusOpenerAndClose(close); '; } $JScode .= ' var elRef=""; var targetDoc=""; function launchView(url) { // var thePreviewWindow=""; thePreviewWindow = window.open(' . GeneralUtility::quoteJSvalue(BackendUtility::getModuleUrl('show_item') . '&table=') . '+url,"ShowItem",' . '"height=300,width=410,status=0,menubar=0,resizable=0,location=0,directories=0,scrollbars=1,toolbar=0"); if (thePreviewWindow && thePreviewWindow.focus) { thePreviewWindow.focus(); } } function setReferences() { // if (parent.window.opener && parent.window.opener.content && parent.window.opener.content.document.editform' . '&& parent.window.opener.content.document.editform["' . $formFieldName . '"]) { targetDoc = parent.window.opener.content.document; elRef = targetDoc.editform["' . $formFieldName . '"]; return true; } else { return false; } } function insertElement(table, uid, type, filename, fp, filetype, imagefile, action, close) { // var performAction = true; ' . $JScodeCheck . ' // Call performing function and finish this action: if (performAction) { ' . $JScodeHelper . $JScodeAction . ' } return false; } var _hasActionMultipleCode = ' . (!empty($JScodeActionMultiple) ? 'true' : 'false') . '; function insertMultiple(table, uid) { var type = ""; ' . $JScodeActionMultiple . ' return false; } function addElement(elName, elValue, altElValue, close) { // if (parent.window.opener && parent.window.opener.setFormValueFromBrowseWin) { parent.window.opener.setFormValueFromBrowseWin("' . $pArr[0] . '",altElValue?altElValue:elValue,elName); focusOpenerAndClose(close); } else { alert("Error - reference to main window is not set properly!"); parent.close(); } } function focusOpenerAndClose(close) { // BrowseLinks.focusOpenerAndClose(close); } '; // extends JavaScript code if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.browse_links.php']['extendJScode']) && is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.browse_links.php']['extendJScode'])) { $conf = array(); $update = ''; $_params = array('conf' => &$conf, 'wizardUpdate' => $update, 'addPassOnParams' => $addPassOnParams); foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.browse_links.php']['extendJScode'] as $objRef) { $processor =& GeneralUtility::getUserObj($objRef); $JScode .= $processor->extendJScode($_params, $this); } } return $JScode; }
/** * Generate JS code to be used on the link insert/modify dialogue * * @return string the generated JS code */ public function getJsCode() { // BEGIN accumulation of header JavaScript: $JScode = ' // This JavaScript is primarily for RTE/Link. jumpToUrl is used in the other cases as well... var add_href=' . GeneralUtility::quoteJSvalue($this->curUrlArray['href'] ? '&curUrl[href]=' . rawurlencode($this->curUrlArray['href']) : '') . '; var add_target=' . GeneralUtility::quoteJSvalue($this->setTarget ? '&curUrl[target]=' . rawurlencode($this->setTarget) : '') . '; var add_class=' . GeneralUtility::quoteJSvalue($this->setClass ? '&curUrl[class]=' . rawurlencode($this->setClass) : '') . '; var add_title=' . GeneralUtility::quoteJSvalue($this->setTitle ? '&curUrl[title]=' . rawurlencode($this->setTitle) : '') . '; var add_params=' . GeneralUtility::quoteJSvalue($this->bparams ? '&bparams=' . rawurlencode($this->bparams) : '') . '; var cur_href=' . GeneralUtility::quoteJSvalue($this->curUrlArray['href'] ?: '') . '; var cur_target=' . GeneralUtility::quoteJSvalue($this->setTarget ?: '') . '; var cur_class=' . GeneralUtility::quoteJSvalue($this->setClass ?: '') . '; var cur_title=' . GeneralUtility::quoteJSvalue($this->setTitle ?: '') . '; var cur_params=' . GeneralUtility::quoteJSvalue($this->setParams ?: '') . '; function browse_links_setTarget(target) { cur_target=target; add_target="&curUrl[target]="+encodeURIComponent(target); } function browse_links_setClass(cssClass) { cur_class = cssClass; add_class = "&curUrl[class]="+encodeURIComponent(cssClass); } function browse_links_setTitle(title) { cur_title=title; add_title="&curUrl[title]="+encodeURIComponent(title); } function browse_links_setValue(value) { cur_href=value; add_href="&curUrl[href]="+value; } function browse_links_setParams(params) { cur_params=params; add_params="&curUrl[params]="+encodeURIComponent(params); } ' . $this->doc->redirectUrls(); // Functions used, if the link selector is in wizard mode (= TCEforms fields) $addPassOnParams = ''; if ($this->mode === 'rte') { // Rich Text Editor specific configuration $addPassOnParams .= '&RTEtsConfigParams=' . rawurlencode($this->RTEtsConfigParams); } $update = ''; if ($this->mode === 'wizard') { if (!$this->areFieldChangeFunctionsValid() && !$this->areFieldChangeFunctionsValid(true)) { $this->P['fieldChangeFunc'] = array(); } unset($this->P['fieldChangeFunc']['alert']); foreach ($this->P['fieldChangeFunc'] as $v) { $update .= ' window.opener.' . $v; } $P2 = array(); $P2['uid'] = $this->P['uid']; $P2['pid'] = $this->P['pid']; $P2['itemName'] = $this->P['itemName']; $P2['formName'] = $this->P['formName']; $P2['fieldChangeFunc'] = $this->P['fieldChangeFunc']; $P2['fieldChangeFuncHash'] = GeneralUtility::hmac(serialize($this->P['fieldChangeFunc'])); $P2['params']['allowedExtensions'] = isset($this->P['params']['allowedExtensions']) ? $this->P['params']['allowedExtensions'] : ''; $P2['params']['blindLinkOptions'] = isset($this->P['params']['blindLinkOptions']) ? $this->P['params']['blindLinkOptions'] : ''; $P2['params']['blindLinkFields'] = isset($this->P['params']['blindLinkFields']) ? $this->P['params']['blindLinkFields'] : ''; $addPassOnParams .= GeneralUtility::implodeArrayForUrl('P', $P2); $JScode .= ' function link_typo3Page(id,anchor) { // updateValueInMainForm(id + (anchor ? anchor : "")); close(); return false; } function link_folder(folder) { // updateValueInMainForm(folder); close(); return false; } function link_current() { // if (cur_href!="http://" && cur_href!="mailto:") { returnBeforeCleaned = cur_href; if (returnBeforeCleaned.substr(0, 7) == "http://") { returnToMainFormValue = returnBeforeCleaned.substr(7); } else if (returnBeforeCleaned.substr(0, 7) == "mailto:") { if (returnBeforeCleaned.substr(0, 14) == "mailto:mailto:") { returnToMainFormValue = returnBeforeCleaned.substr(14); } else { returnToMainFormValue = returnBeforeCleaned.substr(7); } } else { returnToMainFormValue = returnBeforeCleaned; } updateValueInMainForm(returnToMainFormValue); close(); } return false; } function checkReference() { // if (window.opener && window.opener.document && window.opener.document.querySelector(\'form[name="' . $this->P['formName'] . '"] [data-formengine-input-name="' . $this->P['itemName'] . '"]\')) { return window.opener.document.querySelector(\'form[name="' . $this->P['formName'] . '"] [data-formengine-input-name="' . $this->P['itemName'] . '"]\'); } else { close(); } } function updateValueInMainForm(input) { // var field = checkReference(); if (field) { if (cur_target == "" && (cur_class != "" || cur_title != "" || cur_params != "")) { cur_target = "-"; } if (cur_class == "" && (cur_title != "" || cur_params != "")) { cur_class = "-"; } cur_class = cur_class.replace(/[\'\\"]/g, ""); if (cur_class.indexOf(" ") != -1) { cur_class = "\\"" + cur_class + "\\""; } if (cur_title == "" && cur_params != "") { cur_title = "-"; } // replace each \\ with \\ cur_title = cur_title.replace(/\\\\/g, "\\\\\\\\"); // replace each " with \\" cur_title = cur_title.replace(/\\"/g, "\\\\\\""); if (cur_title.indexOf(" ") != -1) { cur_title = "\\"" + cur_title + "\\""; } if (cur_params) { cur_params = cur_params.replace(/\\bid\\=.*?(\\&|$)/, ""); } input = input + " " + cur_target + " " + cur_class + " " + cur_title + " " + cur_params; input = input.replace(/^\\s+|\\s+$/g, ""); if(field.value && field.className.search(/textarea/) != -1) { field.value += "\\n" + input; } else { field.value = input; } if (typeof field.onchange === \'function\') { field.onchange(); } ' . $update . ' } } '; } // General "jumpToUrl" function: $JScode .= ' function jumpToUrl(URL,anchor) { // if (URL.charAt(0) === \'?\') { URL = ' . GeneralUtility::quoteJSvalue($this->getThisScript()) . ' + URL.substring(1); } var add_act = URL.indexOf("act=")==-1 ? "&act=' . $this->act . '" : ""; var add_mode = URL.indexOf("mode=")==-1 ? "&mode=' . $this->mode . '" : ""; window.location.href = URL + add_act + add_mode + add_href + add_target + add_class + add_title + add_params' . ($addPassOnParams ? '+' . GeneralUtility::quoteJSvalue($addPassOnParams) : '') . '+(typeof(anchor) === "string" ? anchor : ""); return false; } '; $JScode .= $this->getBParamJSCode(); // extends JavaScript code if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][$this->hookName]['extendJScode']) && is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][$this->hookName]['extendJScode'])) { $_params = array('conf' => [], 'wizardUpdate' => $update, 'addPassOnParams' => $addPassOnParams); foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][$this->hookName]['extendJScode'] as $objRef) { $processor =& GeneralUtility::getUserObj($objRef); $JScode .= $processor->extendJScode($_params, $this); } } return $JScode; }