*/ require('init.php'); require('template.php'); $LANG->includeLLFile('EXT:lang/locallang_misc.xml'); /** * Script Class for the shortcut frame, bottom frame of the backend frameset * * @author Kasper Skårhøj * @package TYPO3 * @subpackage core */ class SC_alt_shortcut { // Internal, static: GPvar var $modName; var $M_modName; var $URL; var $editSC; var $deleteCategory; var $editName; var $editGroup; var $whichItem; // Internal, static: /** * Object for backend modules, load modules-object * * @var t3lib_loadModules */ var $loadModules; protected $isAjaxCall; /** * Document template object * * @var template */ var $doc; // Internal, dynamic: var $content; // Accumulation of output HTML (string) var $lines; // Accumulation of table cells (array) var $editLoaded; // Flag for defining whether we are editing var $editError; // Can contain edit error message var $editPath; // Set to the record path of the record being edited. var $editSC_rec; // Holds the shortcut record when editing var $theEditRec; // Page record to be edited var $editPage; // Page alias or id to be edited var $selOpt; // Select options. var $searchFor; // Text to search for... var $groupLabels=array(); // Labels of all groups. If value is 1, the system will try to find a label in the locallang array. var $alternativeTableUid = array(); // Array with key 0/1 being table/uid of record to edit. Internally set. /** * Pre-initialization - setting input variables for storing shortcuts etc. * * @return void */ function preinit() { // Setting GPvars: $this->isAjaxCall = (boolean) t3lib_div::_GP('ajax'); $this->modName = t3lib_div::_GP('modName'); $this->M_modName = t3lib_div::_GP('motherModName'); $this->URL = t3lib_div::_GP('URL'); $this->editSC = t3lib_div::_GP('editShortcut'); $this->deleteCategory = t3lib_div::_GP('deleteCategory'); $this->editPage = t3lib_div::_GP('editPage'); $this->changeWorkspace = t3lib_div::_GP('changeWorkspace'); $this->changeWorkspacePreview = t3lib_div::_GP('changeWorkspacePreview'); $this->editName = t3lib_div::_GP('editName'); $this->editGroup = t3lib_div::_GP('editGroup'); $this->whichItem = t3lib_div::_GP('whichItem'); // Creating modules object $this->loadModules = t3lib_div::makeInstance('t3lib_loadModules'); $this->loadModules->load($GLOBALS['TBE_MODULES']); } /** * Adding shortcuts, editing shortcuts etc. * * @return void */ function preprocess() { $description = ''; // Default description $url = urldecode($this->URL); $queryParts = parse_url($url); // Lookup the title of this page and use it as default description $page_id = $this->getLinkedPageId($url); if (t3lib_utility_Math::canBeInterpretedAsInteger($page_id)) { if (preg_match('/\&edit\[(.*)\]\[(.*)\]=edit/',$url,$matches)) { // Edit record $description = ''; // TODO: Set something useful } else { // Page listing $pageRow = t3lib_BEfunc::getRecord('pages',$page_id); if (count($pageRow)) { // If $page_id is an integer, set the description to the title of that page $description = $pageRow['title']; } } } else { if (preg_match('/\/$/', $page_id)) { // If $page_id is a string and ends with a slash, assume it is a fileadmin reference and set the description to the basename of that path $description = basename($page_id); } } // Adding a shortcut being set from another frame, // but only if it's a relative URL (i.e. scheme part is not defined) if ($this->modName && $this->URL && empty($queryParts['scheme'])) { $fields_values = array( 'userid' => $GLOBALS['BE_USER']->user['uid'], 'module_name' => $this->modName.'|'.$this->M_modName, 'url' => $this->URL, 'description' => $description, 'sorting' => $GLOBALS['EXEC_TIME'], ); $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_be_shortcuts', $fields_values); } // Selection-clause for users - so users can deleted only their own shortcuts (except admins) $addUSERWhere = (!$GLOBALS['BE_USER']->isAdmin() ? ' AND userid=' . intval($GLOBALS['BE_USER']->user['uid']) : ''); // Deleting shortcuts: if (strcmp($this->deleteCategory,'')) { if (t3lib_utility_Math::canBeInterpretedAsInteger($this->deleteCategory)) { $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_be_shortcuts', 'sc_group='.intval($this->deleteCategory).$addUSERWhere); } } // If other changes in post-vars: if (is_array($_POST)) { // Saving: if (isset($_POST['_savedok_x']) || isset($_POST['_saveclosedok_x'])) { $fields_values = array( 'description' => $this->editName, 'sc_group' => intval($this->editGroup) ); if ($fields_values['sc_group'] < 0 && !$GLOBALS['BE_USER']->isAdmin()) { $fields_values['sc_group']=0; } $GLOBALS['TYPO3_DB']->exec_UPDATEquery('sys_be_shortcuts', 'uid='.intval($this->whichItem).$addUSERWhere, $fields_values); } // If save without close, keep the session going... if (isset($_POST['_savedok_x'])) { $this->editSC=$this->whichItem; } // Deleting a single shortcut ? if (isset($_POST['_deletedok_x'])) { $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_be_shortcuts', 'uid='.intval($this->whichItem).$addUSERWhere); if (!$this->editSC) $this->editSC=-1; // Just to have the checkbox set... } } } /** * Initialize (page output) * * @return void */ function init() { $this->doc = t3lib_div::makeInstance('template'); $this->doc->backPath = $GLOBALS['BACK_PATH']; $this->doc->form='
'; $this->doc->divClass='typo3-shortcut'; $this->doc->JScode.=$this->doc->wrapScriptTags(' function jump(url,modName,mainModName) { // // Clear information about which entry in nav. tree that might have been highlighted. top.fsMod.navFrameHighlightedID = new Array(); if (top.content && top.content.nav_frame && top.content.nav_frame.refresh_nav) { top.content.nav_frame.refresh_nav(); } top.nextLoadModuleUrl = url; top.goToModule(modName); } function editSh(uid) { // window.location.href="alt_shortcut.php?editShortcut="+uid; } function submitEditPage(id) { // window.location.href="alt_shortcut.php?editPage="+top.rawurlencodeAndRemoveSiteUrl(id); } function changeWorkspace(workspaceId) { // window.location.href="alt_shortcut.php?changeWorkspace="+top.rawurlencodeAndRemoveSiteUrl(workspaceId); } function changeWorkspacePreview(newstate) { // window.location.href="alt_shortcut.php?changeWorkspacePreview="+newstate; } function refreshShortcuts() { window.location.href = document.URL; } '); $this->content.=$this->doc->startPage('Shortcut frame'); } /** * Main function, creating content in the frame * * @return void */ function main() { // By default, 5 groups are set $this->groupLabels=array( 1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1, ); $bookmarkGroups = $GLOBALS['BE_USER']->getTSConfigProp('options.bookmarkGroups'); if (is_array($bookmarkGroups) && count($bookmarkGroups)) { foreach ($bookmarkGroups as $k=>$v) { if (strcmp('',$v) && strcmp('0',$v)) { $this->groupLabels[$k] = (string)$v; } elseif ($GLOBALS['BE_USER']->isAdmin()) { unset($this->groupLabels[$k]); } } } // List of global groups that will be loaded. All global groups have negative IDs. $globalGroups = -100; // Group -100 is kind of superglobal and can't be changed. if (count($this->groupLabels)) { $globalGroups .= ','.implode(',',array_keys($this->groupLabels)); $globalGroups = str_replace(',',',-',$globalGroups); // Ugly hack to make the UIDs negative - is there any better solution? } // Fetching shortcuts to display for this user: $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_be_shortcuts', '((userid='.$GLOBALS['BE_USER']->user['uid'].' AND sc_group>=0) OR sc_group IN ('.$globalGroups.'))', '', 'sc_group,sorting'); // Init vars: $this->lines=array(); $this->linesPre=array(); $this->editSC_rec=''; $this->selOpt=array(); $formerGr=''; // Traverse shortcuts while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $mParts = explode('|',$row['module_name']); $row['module_name']=$mParts[0]; $row['M_module_name']=$mParts[1]; $mParts = explode('_',$row['M_module_name']?$row['M_module_name']:$row['module_name']); $qParts = parse_url($row['url']); if (!$GLOBALS['BE_USER']->isAdmin()) { // Check for module access if (!isset($GLOBALS['LANG']->moduleLabels['tabs_images'][implode('_',$mParts).'_tab'])) { // Nice hack to check if the user has access to this module - otherwise the translation label would not have been loaded :-) continue; } $page_id = $this->getLinkedPageId($row['url']); if (t3lib_utility_Math::canBeInterpretedAsInteger($page_id)) { // Check for webmount access if (!$GLOBALS['BE_USER']->isInWebMount($page_id)) continue; // Check for record access $pageRow = t3lib_BEfunc::getRecord('pages',$page_id); if (!$GLOBALS['BE_USER']->doesUserHaveAccess($pageRow,$perms=1)) continue; } } if ($this->editSC && $row['uid']==$this->editSC) { $this->editSC_rec=$row; } $sc_group = $row['sc_group']; if ($sc_group && strcmp($formerGr,$sc_group)) { if ($sc_group!=-100) { if ($this->groupLabels[abs($sc_group)] && strcmp('1',$this->groupLabels[abs($sc_group)])) { $label = $this->groupLabels[abs($sc_group)]; } else { $label = $GLOBALS['LANG']->getLL('shortcut_group_'.abs($sc_group),1); if (!$label) $label = $GLOBALS['LANG']->getLL('shortcut_group',1).' '.abs($sc_group); // Fallback label } if ($sc_group>=0) { $onC = 'if (confirm('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->getLL('bookmark_delAllInCat')).')){window.location.href=\'alt_shortcut.php?deleteCategory='.$sc_group.'\';}return false;'; $this->linesPre[]=' '.$label.''; } else { $label = $GLOBALS['LANG']->getLL('bookmark_global',1).': '.($label ? $label : abs($sc_group)); // Fallback label $this->lines[]=' '.$label.''; } unset($label); } } $bgColorClass = $row['uid']==$this->editSC ? 'bgColor5' : ($row['sc_group']<0 ? 'bgColor6' : 'bgColor4'); if ($row['description']&&($row['uid']!=$this->editSC)) { $label = $row['description']; } else { $label = t3lib_div::fixed_lgd_cs(rawurldecode($qParts['query']),150); } $titleA = $this->itemLabel($label,$row['module_name'],$row['M_module_name']); $editSH = ($row['sc_group']>=0 || $GLOBALS['BE_USER']->isAdmin()) ? 'editSh('.intval($row['uid']).');' : "alert('".$GLOBALS['LANG']->getLL('bookmark_onlyAdmin')."')"; $jumpSC = 'jump(unescape(\''.rawurlencode($row['url']).'\'),\''.implode('_',$mParts).'\',\''.$mParts[0].'\');'; $onC = 'if (document.shForm.editShortcut_check && document.shForm.editShortcut_check.checked){'.$editSH.'}else{'.$jumpSC.'}return false;'; if ($sc_group>=0) { // user defined groups show up first $this->linesPre[]=''; } else { $this->lines[]=''; } if (trim($row['description'])) { $kkey = strtolower(substr($row['description'],0,20)).'_'.$row['uid']; $this->selOpt[$kkey]=''; } $formerGr=$row['sc_group']; } ksort($this->selOpt); array_unshift($this->selOpt,''); $this->editLoadedFunc(); $this->editPageIdFunc(); if (!$this->editLoaded && t3lib_extMgm::isLoaded('cms')) { $editIdCode = ''.$GLOBALS['LANG']->getLL('bookmark_editID',1).': doc->formWidth(15).' onchange="submitEditPage(this.value);" />'. ($this->editError?' '.htmlspecialchars($this->editError).'':''). (is_array($this->theEditRec)?' '.$GLOBALS['LANG']->getLL('bookmark_loadEdit',1).' \''.t3lib_BEfunc::getRecordTitle('pages',$this->theEditRec,TRUE).'\' ('.htmlspecialchars($this->editPath).')':''). ($this->searchFor?' '.$GLOBALS['LANG']->getLL('bookmark_searchFor',1).' \''.htmlspecialchars($this->searchFor).'\'':''). ''; } else $editIdCode = ''; // Adding CSH: $editIdCode.= ' '.t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'bookmarks', $GLOBALS['BACK_PATH'],'',TRUE).''; // Compile it all: $this->content.='
'; if ($GLOBALS['BE_USER']->getTSConfigVal('options.enableBookmarks')) { $this->content .= implode(' ', $this->lines); } $this->content .= $editIdCode . '
'; if ($this->hasWorkspaceAccess()) { $this->content .= $this->workspaceSelector() . t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'workspaceSelector', $GLOBALS['BACK_PATH'],'',TRUE); } $this->content .= '
'; // Launch Edit page: if ($this->theEditRec['uid']) { $this->content.=$this->doc->wrapScriptTags('top.loadEditId('.$this->theEditRec['uid'].');'); } // Load alternative table/uid into editing form. if (count($this->alternativeTableUid)==2 && isset($GLOBALS['TCA'][$this->alternativeTableUid[0]]) && t3lib_utility_Math::canBeInterpretedAsInteger($this->alternativeTableUid[1])) { $JSaction = t3lib_BEfunc::editOnClick('&edit['.$this->alternativeTableUid[0].']['.$this->alternativeTableUid[1].']=edit','','dummy.php'); $this->content.=$this->doc->wrapScriptTags('function editArbitraryElement() { top.content.'.$JSaction.'; } editArbitraryElement();'); } // Load search for something. if ($this->searchFor) { $urlParameters = array(); $urlParameters['id'] = intval($GLOBALS['WEBMOUNTS'][0]); $urlParameters['search_field'] = $this->searchFor; $urlParameters['search_levels'] = 4; $this->content .= $this->doc->wrapScriptTags('jump(unescape("' . rawurlencode(t3lib_BEfunc::getModuleUrl('web_list', $urlParameters, '')) . '"), "web_list", "web");'); } } /** * Creates lines for the editing form. * * @return void */ function editLoadedFunc() { $this->editLoaded=0; if (is_array($this->editSC_rec) && ($this->editSC_rec['sc_group']>=0 || $GLOBALS['BE_USER']->isAdmin())) { // sc_group numbers below 0 requires admin to edit those. sc_group numbers above zero must always be owned by the user himself. $this->editLoaded=1; $opt=array(); $opt[]=''; foreach($this->groupLabels as $k=>$v) { if ($v && strcmp('1',$v)) { $label = $v; } else { $label = $GLOBALS['LANG']->getLL('bookmark_group_'.$k,1); if (!$label) $label = $GLOBALS['LANG']->getLL('bookmark_group',1).' '.$k; // Fallback label } $opt[]=''; } if ($GLOBALS['BE_USER']->isAdmin()) { foreach($this->groupLabels as $k=>$v) { if ($v && strcmp('1',$v)) { $label = $v; } else { $label = $GLOBALS['LANG']->getLL('bookmark_group_'.$k,1); if (!$label) $label = $GLOBALS['LANG']->getLL('bookmark_group',1).' '.$k; // Fallback label } $label = $GLOBALS['LANG']->getLL('bookmark_global',1).': '.$label; // Add a prefix for global groups $opt[]=''; } $opt[]=''; } // border="0" hspace="2" width="21" height="16" - not XHTML compliant in $manageForm='
   doc->backPath,'gfx/savedok.gif','').' title="'.$GLOBALS['LANG']->getLL('shortcut_save',1).'" /> doc->backPath,'gfx/saveandclosedok.gif','').' title="'.$GLOBALS['LANG']->getLL('bookmark_saveClose',1).'" /> doc->backPath,'gfx/closedok.gif','').' title="'.$GLOBALS['LANG']->getLL('bookmark_close',1).'" /> doc->backPath,'gfx/deletedok.gif','').' title="'.$GLOBALS['LANG']->getLL('bookmark_delete',1).'" /> doc->formWidth(15).' />
'; } else $manageForm=''; if (!$this->editLoaded && count($this->selOpt)>1) { $this->lines[]=' '; $this->lines[]=''; } // $this->linesPre contains elements with sc_group>=0 $this->lines = array_merge($this->linesPre,$this->lines); if (count($this->lines)) { if (!$GLOBALS['BE_USER']->getTSConfigVal('options.mayNotCreateEditBookmarks')) { $this->lines = array_merge(array( 'editSC ? ' checked="checked"' : '') . ' />' . '  ' ), $this->lines); $this->lines[] = '' . $manageForm . ''; } $this->lines[] = ''; } } /** * If "editPage" value is sent to script and it points to an accessible page, the internal var $this->theEditRec is set to the page record which should be loaded. * Returns void * * @return void */ function editPageIdFunc() { if (!t3lib_extMgm::isLoaded('cms')) return; // EDIT page: $this->editPage = trim($GLOBALS['LANG']->csConvObj->conv_case($GLOBALS['LANG']->charSet,$this->editPage,'toLower')); $this->editError = ''; $this->theEditRec = ''; $this->searchFor = ''; if ($this->editPage) { // First, test alternative value consisting of [table]:[uid] and if not found, proceed with traditional page ID resolve: $this->alternativeTableUid = explode(':',$this->editPage); if (!(count($this->alternativeTableUid)==2 && $GLOBALS['BE_USER']->isAdmin())) { // We restrict it to admins only just because I'm not really sure if alt_doc.php properly checks permissions of passed records for editing. If alt_doc.php does that, then we can remove this. $where = ' AND ('.$GLOBALS['BE_USER']->getPagePermsClause(2).' OR '.$GLOBALS['BE_USER']->getPagePermsClause(16).')'; if (t3lib_utility_Math::canBeInterpretedAsInteger($this->editPage)) { $this->theEditRec = t3lib_BEfunc::getRecordWSOL('pages',$this->editPage,'*',$where); } else { $records = t3lib_BEfunc::getRecordsByField('pages','alias',$this->editPage,$where); if (is_array($records)) { $this->theEditRec = reset($records); t3lib_BEfunc::workspaceOL('pages',$this->theEditRec); } } if (!is_array($this->theEditRec)) { unset($this->theEditRec); $this->searchFor = $this->editPage; } elseif (!$GLOBALS['BE_USER']->isInWebMount($this->theEditRec['uid'])) { unset($this->theEditRec); $this->editError=$GLOBALS['LANG']->getLL('bookmark_notEditable'); } else { // Visual path set: $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1); $this->editPath = t3lib_BEfunc::getRecordPath($this->theEditRec['pid'], $perms_clause, 30); if (!$GLOBALS['BE_USER']->getTSConfigVal('options.bookmark_onEditId_dontSetPageTree')) { $bookmarkKeepExpanded = $GLOBALS['BE_USER']->getTSConfigVal('options.bookmark_onEditId_keepExistingExpanded'); // Expanding page tree: t3lib_BEfunc::openPageTree($this->theEditRec['pid'], !$bookmarkKeepExpanded); } } } } } /** * Outputting the accumulated content to screen * * @return void */ function printContent() { $content = ''; $this->content.= $this->doc->endPage(); $this->content = $this->doc->insertStylesAndJS($this->content); if($this->editPage && $this->isAjaxCall) { $data = array(); // edit page if($this->theEditRec['uid']) { $data['type'] = 'page'; $data['editRecord'] = $this->theEditRec['uid']; } // edit alternative table/uid if(count($this->alternativeTableUid) == 2 && isset($GLOBALS['TCA'][$this->alternativeTableUid[0]]) && t3lib_utility_Math::canBeInterpretedAsInteger($this->alternativeTableUid[1])) { $data['type'] = 'alternative'; $data['alternativeTable'] = $this->alternativeTableUid[0]; $data['alternativeUid'] = $this->alternativeTableUid[1]; } // search for something else if($this->searchFor) { $data['type'] = 'search'; $data['firstMountPoint'] = intval($GLOBALS['WEBMOUNTS'][0]); $data['searchFor'] = $this->searchFor; } $content = json_encode($data); header('Content-type: application/json; charset=utf-8'); header('X-JSON: '.$content); } else { $content = $this->content; } echo $content; } /*************************** * * WORKSPACE FUNCTIONS: * ***************************/ /** * Create selector for workspaces and change workspace if command is given to do that. * * @return string HTML */ function workspaceSelector() { // Changing workspace and if so, reloading entire backend: if (strlen($this->changeWorkspace)) { $GLOBALS['BE_USER']->setWorkspace($this->changeWorkspace); return $this->doc->wrapScriptTags('top.location.href="'. t3lib_BEfunc::getBackendScript() . '";'); } // Changing workspace and if so, reloading entire backend: if (strlen($this->changeWorkspacePreview)) { $GLOBALS['BE_USER']->setWorkspacePreview($this->changeWorkspacePreview); } // Create options array: $options = array(); if ($GLOBALS['BE_USER']->checkWorkspace(array('uid' => 0))) { $options[0] = '['.$GLOBALS['LANG']->getLL('bookmark_onlineWS').']'; } if ($GLOBALS['BE_USER']->checkWorkspace(array('uid' => -1))) { $options[-1] = '['.$GLOBALS['LANG']->getLL('bookmark_offlineWS').']'; } // Add custom workspaces (selecting all, filtering by BE_USER check): if (t3lib_extMgm::isLoaded('workspaces')) { $workspaces = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid,title,adminusers,members,reviewers','sys_workspace','pid=0'.t3lib_BEfunc::deleteClause('sys_workspace'),'','title'); if (count($workspaces)) { foreach ($workspaces as $rec) { if ($GLOBALS['BE_USER']->checkWorkspace($rec)) { $options[$rec['uid']] = $rec['uid'].': '.$rec['title']; } } } } // Build selector box: if (count($options)) { foreach($options as $value => $label) { $selected = ((int)$GLOBALS['BE_USER']->workspace===$value ? ' selected="selected"' : ''); $options[$value] = ''; } } else { $options[] = ''; } $selector = ''; // Preview: if ($GLOBALS['BE_USER']->workspace!==0) { $selector.= ' user['workspace_preview'] ? 'checked="checked"' : '').'/> '; } $selector.= ''. t3lib_iconWorks::getSpriteIconForRecord('sys_workspace', array()). ''; if (count($options) > 1) { $selector .= ''; } return $selector; } /*************************** * * OTHER FUNCTIONS: * ***************************/ /** * Returns relative filename for icon. * * @param string Absolute filename of the icon * @param string Backpath string to prepend the icon after made relative * @return void */ function mIconFilename($Ifilename,$backPath) { // Change icon of fileadmin references - otherwise it doesn't differ with Web->List $Ifilename = str_replace ('mod/file/list/list.gif', 'mod/file/file.gif', $Ifilename); if (t3lib_div::isAbsPath($Ifilename)) { $Ifilename = '../'.substr($Ifilename,strlen(PATH_site)); } return $backPath.$Ifilename; } /** * Returns icon for shortcut display * * @param string Backend module name * @return string Icon file name */ function getIcon($modName) { if ($GLOBALS['LANG']->moduleLabels['tabs_images'][$modName.'_tab']) { $icon = $this->mIconFilename($GLOBALS['LANG']->moduleLabels['tabs_images'][$modName.'_tab'],''); } elseif ($modName=='xMOD_alt_doc.php') { $icon = 'gfx/edit2.gif'; } elseif ($modName=='xMOD_file_edit.php') { $icon = 'gfx/edit_file.gif'; } elseif ($modName=='xMOD_wizard_rte.php') { $icon = 'gfx/edit_rtewiz.gif'; } else { $icon = 'gfx/dummy_module.gif'; } return $icon; } /** * Returns title-label for icon * * @param string In-label * @param string Backend module name (key) * @param string Backend module label (user defined?) * @return string Label for the shortcut item */ function itemLabel($inlabel,$modName,$M_modName='') { if (substr($modName,0,5)=='xMOD_') { $label=substr($modName,5); } else { $split = explode('_',$modName); $label = $GLOBALS['LANG']->moduleLabels['tabs'][$split[0].'_tab']; if (count($split)>1) { $label.='>'.$GLOBALS['LANG']->moduleLabels['tabs'][$modName.'_tab']; } } if ($M_modName) $label.=' ('.$M_modName.')'; $label.=': '.$inlabel; return $label; } /** * Return the ID of the page in the URL if found. * * @param string The URL of the current shortcut link * @return string If a page ID was found, it is returned. Otherwise: 0 */ function getLinkedPageId($url) { return preg_replace('/.*[\?&]id=([^&]+).*/', '$1', $url); } /** * Checks if user has access to Workspace module. * * @return boolean Returns TRUE if user has access to workspace module. */ function hasWorkspaceAccess() { $MCONF = array(); include('mod/user/ws/conf.php'); return $GLOBALS['BE_USER']->modAccess(array('name' => 'user', 'access' => 'user,group'), FALSE) && $GLOBALS['BE_USER']->modAccess($MCONF, FALSE); } } if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/alt_shortcut.php'])) { include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/alt_shortcut.php']); } // Make instance: $SOBE = t3lib_div::makeInstance('SC_alt_shortcut'); $SOBE->preinit(); $SOBE->preprocess(); $SOBE->init(); $SOBE->main(); $SOBE->printContent(); ?>