00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00064 require('init.php');
00065 require('template.php');
00066 $LANG->includeLLFile('EXT:lang/locallang_misc.xml');
00067 require_once(PATH_t3lib.'class.t3lib_loadmodules.php');
00068 require_once(PATH_t3lib.'class.t3lib_basicfilefunc.php');
00069
00070
00071
00072
00073
00074
00082 class SC_alt_shortcut {
00083
00084
00085 var $modName;
00086 var $M_modName;
00087 var $URL;
00088 var $editSC;
00089 var $deleteCategory;
00090 var $editName;
00091 var $editGroup;
00092 var $whichItem;
00093
00094
00095 var $loadModules;
00096 var $doc;
00097 var $nGroups;
00098 var $nGlobals;
00099
00100
00101 var $content;
00102 var $lines;
00103
00104 var $editLoaded;
00105 var $editError;
00106 var $editPath;
00107 var $editSC_rec;
00108 var $theEditRec;
00109 var $editPage;
00110 var $selOpt;
00111
00112 var $alternativeTableUid = array();
00113
00114
00115
00121 function preinit() {
00122 global $TBE_MODULES;
00123
00124
00125 $this->modName = t3lib_div::_GP('modName');
00126 $this->M_modName = t3lib_div::_GP('motherModName');
00127 $this->URL = t3lib_div::_GP('URL');
00128 $this->editSC = t3lib_div::_GP('editShortcut');
00129
00130 $this->deleteCategory = t3lib_div::_GP('deleteCategory');
00131 $this->editPage = t3lib_div::_GP('editPage');
00132 $this->editName = t3lib_div::_GP('editName');
00133 $this->editGroup = t3lib_div::_GP('editGroup');
00134 $this->whichItem = t3lib_div::_GP('whichItem');
00135
00136
00137 $this->loadModules = t3lib_div::makeInstance('t3lib_loadModules');
00138 $this->loadModules->load($TBE_MODULES);
00139 }
00140
00146 function preprocess() {
00147 global $BE_USER;
00148
00149
00150 if ($this->modName && $this->URL) {
00151 $fields_values = array(
00152 'userid' => $BE_USER->user['uid'],
00153 'module_name' => $this->modName.'|'.$this->M_modName,
00154 'url' => $this->URL,
00155 'sorting' => time()
00156 );
00157 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_be_shortcuts', $fields_values);
00158 }
00159
00160
00161 $addUSERWhere = (!$BE_USER->isAdmin()?' AND userid='.intval($BE_USER->user['uid']):'');
00162
00163
00164 if (strcmp($this->deleteCategory,'')) {
00165 if (t3lib_div::testInt($this->deleteCategory)) {
00166 $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_be_shortcuts', 'sc_group='.intval($this->deleteCategory).$addUSERWhere);
00167 }
00168 }
00169
00170
00171 if (is_array($_POST)) {
00172
00173 if (isset($_POST['_savedok_x']) || isset($_POST['_saveclosedok_x'])) {
00174 $fields_values = array(
00175 'description' => $this->editName,
00176 'sc_group' => intval($this->editGroup)
00177 );
00178 if ($fields_values['sc_group']<0 && !$BE_USER->isAdmin()) {
00179 $fields_values['sc_group']=0;
00180 }
00181
00182 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('sys_be_shortcuts', 'uid='.intval($this->whichItem).$addUSERWhere, $fields_values);
00183 }
00184
00185 if (isset($_POST['_savedok_x'])) {
00186 $this->editSC=$this->whichItem;
00187 }
00188
00189 if (isset($_POST['_deletedok_x'])) {
00190 $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_be_shortcuts', 'uid='.intval($this->whichItem).$addUSERWhere);
00191
00192 if (!$this->editSC) $this->editSC=-1;
00193 }
00194 }
00195
00196 }
00197
00203 function init() {
00204 global $BACK_PATH;
00205
00206 $this->doc = t3lib_div::makeInstance('template');
00207 $this->doc->backPath = $BACK_PATH;
00208 $this->doc->form='<form action="alt_shortcut.php" name="shForm" method="post">';
00209 $this->doc->docType='xhtml_trans';
00210 $this->doc->divClass='typo3-shortcut';
00211 $this->doc->JScode.=$this->doc->wrapScriptTags('
00212 function jump(url,modName,mainModName) {
00213
00214 top.fsMod.navFrameHighlightedID = new Array();
00215 if (top.content && top.content.nav_frame && top.content.nav_frame.refresh_nav) {
00216 top.content.nav_frame.refresh_nav();
00217 }
00218
00219 top.nextLoadModuleUrl = url;
00220 top.goToModule(modName);
00221 }
00222 function editSh(uid) {
00223 document.location="alt_shortcut.php?editShortcut="+uid;
00224 }
00225 function submitEditPage(id) {
00226 document.location="alt_shortcut.php?editPage="+top.rawurlencode(id);
00227 }
00228 ');
00229 $this->content.=$this->doc->startPage('Shortcut frame');
00230 }
00231
00237 function main() {
00238 global $BE_USER,$LANG,$TCA;
00239
00240
00241 $this->nGroups=4;
00242 $this->nGlobals=5;
00243
00244 $globalGroups=array(-100);
00245 $shortCutGroups = $BE_USER->getTSConfig('options.shortcutGroups');
00246 for($a=1;$a<=$this->nGlobals;$a++) {
00247 if ($BE_USER->isAdmin() || strcmp($shortCutGroups['properties'][$a],'')) {
00248 $globalGroups[]=-$a;
00249 }
00250 }
00251
00252
00253 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_be_shortcuts', '((userid='.$BE_USER->user['uid'].' AND sc_group>=0) OR sc_group IN ('.implode(',',$globalGroups).'))', '', 'sc_group,sorting');
00254
00255
00256 $this->lines=array();
00257 $this->editSC_rec='';
00258 $this->selOpt=array();
00259 $formerGr='';
00260
00261
00262 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00263 if ($this->editSC && $row['uid']==$this->editSC) {
00264 $this->editSC_rec=$row;
00265 }
00266
00267 if (strcmp($formerGr,$row['sc_group'])) {
00268 if ($row['sc_group']!=-100) {
00269 if ($row['sc_group']>=0) {
00270 $onC = 'if (confirm('.$GLOBALS['LANG']->JScharCode($LANG->getLL('shortcut_delAllInCat')).')){document.location=\'alt_shortcut.php?deleteCategory='.$row['sc_group'].'\';}return false;';
00271 $this->lines[]='<td> </td><td class="bgColor5"><a href="#" onclick="'.htmlspecialchars($onC).'" title="'.$LANG->getLL('shortcut_delAllInCat',1).'">'.abs($row['sc_group']).'</a></td>';
00272 } else {
00273 $this->lines[]='<td> </td><td class="bgColor5">'.abs($row['sc_group']).'</td>';
00274 }
00275 }
00276 }
00277
00278 $mParts = explode('|',$row['module_name']);
00279 $row['module_name']=$mParts[0];
00280 $row['M_module_name']=$mParts[1];
00281 $mParts = explode('_',$row['M_module_name']?$row['M_module_name']:$row['module_name']);
00282 $qParts = parse_url($row['url']);
00283
00284 $bgColorClass = $row['uid']==$this->editSC ? 'bgColor5' : ($row['sc_group']<0 ? 'bgColor6' : 'bgColor4');
00285 $titleA = $this->itemLabel($row['description']&&($row['uid']!=$this->editSC) ? $row['description'] : t3lib_div::fixed_lgd(rawurldecode($qParts['query']),150),$row['module_name'],$row['M_module_name']);
00286
00287 $editSH = ($row['sc_group']>=0 || $BE_USER->isAdmin()) ? 'editSh('.intval($row['uid']).');' : "alert('".$LANG->getLL('shortcut_onlyAdmin')."')";
00288 $jumpSC = 'jump(unescape(\''.rawurlencode($row['url']).'\'),\''.implode('_',$mParts).'\',\''.$mParts[0].'\');';
00289 $onC = 'if (document.shForm.editShortcut_check && document.shForm.editShortcut_check.checked){'.$editSH.'}else{'.$jumpSC.'}return false;';
00290 $this->lines[]='<td class="'.$bgColorClass.'"><a href="#" onclick="'.htmlspecialchars($onC).'"><img src="'.$this->getIcon($row['module_name']).'" title="'.htmlspecialchars($titleA).'" alt="" /></a></td>';
00291 if (trim($row['description'])) {
00292 $kkey = strtolower(substr($row['description'],0,20)).'_'.$row['uid'];
00293 $this->selOpt[$kkey]='<option value="'.htmlspecialchars($jumpSC).'">'.htmlspecialchars(t3lib_div::fixed_lgd_cs($row['description'],50)).'</option>';
00294 }
00295 $formerGr=$row['sc_group'];
00296 }
00297 ksort($this->selOpt);
00298 array_unshift($this->selOpt,'<option>['.$LANG->getLL('shortcut_selSC',1).']</option>');
00299
00300 $this->editLoadedFunc();
00301 $this->editPageIdFunc();
00302
00303 if (!$this->editLoaded && t3lib_extMgm::isLoaded('cms')) {
00304 $editIdCode = '<td nowrap="nowrap">'.$LANG->getLL('shortcut_editID',1).': <input type="text" value="'.($this->editError?htmlspecialchars($this->editPage):'').'" name="editPage"'.$this->doc->formWidth(5).' onchange="submitEditPage(this.value);" />'.
00305 ($this->editError?' <strong><span class="typo3-red">'.htmlspecialchars($this->editError).'</span></strong>':'').
00306 (is_array($this->theEditRec)?' <strong>'.$LANG->getLL('shortcut_loadEdit',1).' \''.t3lib_BEfunc::getRecordTitle('pages',$this->theEditRec,1).'\'</strong> ('.htmlspecialchars($this->editPath).')':'').
00307 '</td>';
00308 } else $editIdCode = '';
00309
00310
00311 $editIdCode.= '<td> '.t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'shortcuts', $GLOBALS['BACK_PATH'],'',TRUE).'</td>';
00312
00313 $this->content.='
00314
00315
00316 <!--
00317 Shortcut Display Table:
00318 -->
00319 <table border="0" cellpadding="0" cellspacing="2" id="typo3-shortcuts">
00320 <tr>
00321 '.implode('
00322 ',$this->lines).$editIdCode.'
00323 </tr>
00324 </table>
00325
00326 ';
00327
00328
00329 if ($this->theEditRec['uid']) {
00330 $this->content.=$this->doc->wrapScriptTags('top.loadEditId('.$this->theEditRec['uid'].');');
00331 }
00332
00333
00334 if (count($this->alternativeTableUid)==2 && isset($TCA[$this->alternativeTableUid[0]]) && t3lib_div::testInt($this->alternativeTableUid[1])) {
00335 $JSaction = t3lib_BEfunc::editOnClick('&edit['.$this->alternativeTableUid[0].']['.$this->alternativeTableUid[1].']=edit','','dummy.php');
00336 $this->content.=$this->doc->wrapScriptTags('function editArbitraryElement() { top.content.'.$JSaction.'; } editArbitraryElement();');
00337 }
00338 }
00339
00345 function editLoadedFunc() {
00346 global $BE_USER,$LANG;
00347
00348 $this->editLoaded=0;
00349 if (is_array($this->editSC_rec) && ($this->editSC_rec['sc_group']>=0 || $BE_USER->isAdmin())) {
00350 $this->editLoaded=1;
00351
00352 $opt=array();
00353 $opt[]='<option value="0"></option>';
00354 for($a=1;$a<=$this->nGroups;$a++) {
00355 $opt[]='<option value="'.$a.'"'.(!strcmp($this->editSC_rec['sc_group'],$a)?' selected="selected"':'').'>'.$LANG->getLL('shortcut_group',1).' '.$a.'</option>';
00356 }
00357 if ($BE_USER->isAdmin()) {
00358 for($a=1;$a<=$this->nGlobals;$a++) {
00359 $opt[]='<option value="-'.$a.'"'.(!strcmp($this->editSC_rec['sc_group'],'-'.$a)?' selected="selected"':'').'>'.$LANG->getLL('shortcut_GLOBAL',1).': '.$a.'</option>';
00360 }
00361 $opt[]='<option value="-100"'.(!strcmp($this->editSC_rec['sc_group'],'-100')?' selected="selected"':'').'>'.$LANG->getLL('shortcut_GLOBAL',1).': '.$LANG->getLL('shortcut_ALL',1).'</option>';
00362 }
00363
00364
00365 $manageForm='
00366
00367
00368 <!--
00369 Shortcut Editing Form:
00370 -->
00371 <table border="0" cellpadding="0" cellspacing="0" id="typo3-shortcuts-editing">
00372 <tr>
00373 <td> </td>
00374 <td><input type="image" class="c-inputButton" name="_savedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/savedok.gif','').' title="'.$LANG->getLL('shortcut_save',1).'" /></td>
00375 <td><input type="image" class="c-inputButton" name="_saveclosedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/saveandclosedok.gif','').' title="'.$LANG->getLL('shortcut_saveClose',1).'" /></td>
00376 <td><input type="image" class="c-inputButton" name="_closedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/closedok.gif','').' title="'.$LANG->getLL('shortcut_close',1).'" /></td>
00377 <td><input type="image" class="c-inputButton" name="_deletedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/deletedok.gif','').' title="'.$LANG->getLL('shortcut_delete',1).'" /></td>
00378 <td><input name="editName" type="text" value="'.htmlspecialchars($this->editSC_rec['description']).'"'.$this->doc->formWidth(15).' /></td>
00379 <td><select name="editGroup">'.implode('',$opt).'</select></td>
00380 </tr>
00381 </table>
00382 <input type="hidden" name="whichItem" value="'.$this->editSC_rec['uid'].'" />
00383
00384 ';
00385 } else $manageForm='';
00386
00387 if (!$this->editLoaded && count($this->selOpt)>1) {
00388 $this->lines[]='<td> </td>';
00389 $this->lines[]='<td><select name="_selSC" onchange="eval(this.options[this.selectedIndex].value);this.selectedIndex=0;">'.implode('',$this->selOpt).'</select></td>';
00390 }
00391 if (count($this->lines)) {
00392 if (!$BE_USER->getTSConfigVal('options.mayNotCreateEditShortcuts')) {
00393 $this->lines=array_merge(array('<td><input type="checkbox" name="editShortcut_check" value="1"'.($this->editSC?' checked="checked"':'').' />'.$LANG->getLL('shortcut_edit',1).' </td>'),$this->lines);
00394 $this->lines[]='<td>'.$manageForm.'</td>';
00395 }
00396 $this->lines[]='<td><img src="clear.gif" width="10" height="1" alt="" /></td>';
00397 }
00398 }
00399
00406 function editPageIdFunc() {
00407 global $BE_USER,$LANG;
00408
00409 if (!t3lib_extMgm::isLoaded('cms')) return;
00410
00411
00412 $this->editPage = trim(strtolower($this->editPage));
00413 $this->editError = '';
00414 $this->theEditRec = '';
00415 if ($this->editPage) {
00416
00417
00418 $this->alternativeTableUid = explode(':',$this->editPage);
00419 if (!(count($this->alternativeTableUid)==2 && $BE_USER->isAdmin())) {
00420
00421 $where = ' AND ('.$BE_USER->getPagePermsClause(2).' OR '.$BE_USER->getPagePermsClause(16).')';
00422 if (t3lib_div::testInt($this->editPage)) {
00423 $this->theEditRec = t3lib_BEfunc::getRecord ('pages',$this->editPage,'*',$where);
00424 } else {
00425 $records = t3lib_BEfunc::getRecordsByField('pages','alias',$this->editPage,$where);
00426 if (is_array($records)) {
00427 reset($records);
00428 $this->theEditRec = current($records);
00429 }
00430 }
00431 if (!is_array($this->theEditRec) || !$BE_USER->isInWebMount($this->theEditRec['uid'])) {
00432 unset($this->theEditRec);
00433 $this->editError=$LANG->getLL('shortcut_notEditable');
00434 } else {
00435
00436 $perms_clause = $BE_USER->getPagePermsClause(1);
00437 $this->editPath = t3lib_BEfunc::getRecordPath($this->theEditRec['pid'], $perms_clause, 30);
00438
00439 if(!$BE_USER->getTSConfigVal('options.shortcut_onEditId_dontSetPageTree')) {
00440
00441
00442 t3lib_BEfunc::openPageTree($this->theEditRec['pid'],!$BE_USER->getTSConfigVal('options.shortcut_onEditId_keepExistingExpanded'));
00443 }
00444 }
00445 }
00446 }
00447 }
00448
00454 function printContent() {
00455 $this->content.= $this->doc->endPage();
00456 echo $this->content;
00457 }
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00482 function mIconFilename($Ifilename,$backPath) {
00483 if (t3lib_div::isAbsPath($Ifilename)) {
00484 $Ifilename = '../'.substr($Ifilename,strlen(PATH_site));
00485 }
00486 return $backPath.$Ifilename;
00487 }
00488
00495 function getIcon($modName) {
00496 global $LANG;
00497 if ($LANG->moduleLabels['tabs_images'][$modName.'_tab']) {
00498 $icon = $this->mIconFilename($LANG->moduleLabels['tabs_images'][$modName.'_tab'],'');
00499 } elseif ($modName=='xMOD_alt_doc.php') {
00500 $icon = 'gfx/edit2.gif';
00501 } elseif ($modName=='xMOD_file_edit.php') {
00502 $icon = 'gfx/edit_file.gif';
00503 } elseif ($modName=='xMOD_wizard_rte.php') {
00504 $icon = 'gfx/edit_rtewiz.gif';
00505 } else {
00506 $icon = 'gfx/dummy_module.gif';
00507 }
00508 return $icon;
00509 }
00510
00519 function itemLabel($inlabel,$modName,$M_modName='') {
00520 global $LANG;
00521 if (substr($modName,0,5)=='xMOD_') {
00522 $label=substr($modName,5);
00523 } else {
00524 $split = explode('_',$modName);
00525 $label = $LANG->moduleLabels['tabs'][$split[0].'_tab'];
00526 if (count($split)>1) {
00527 $label.='>'.$LANG->moduleLabels['tabs'][$modName.'_tab'];
00528 }
00529 }
00530 if ($M_modName) $label.=' ('.$M_modName.')';
00531 $label.=': '.$inlabel;
00532 return $label;
00533 }
00534 }
00535
00536
00537 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/alt_shortcut.php']) {
00538 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/alt_shortcut.php']);
00539 }
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552 $SOBE = t3lib_div::makeInstance('SC_alt_shortcut');
00553 $SOBE->preinit();
00554 $SOBE->preprocess();
00555 $SOBE->init();
00556 $SOBE->main();
00557 $SOBE->printContent();
00558 ?>