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
00145 class tslib_menu {
00146 var $menuNumber = 1;
00147 var $entryLevel = 0;
00148 var $spacerIDList = '199';
00149 var $doktypeExcludeList = '5,6';
00150 var $alwaysActivePIDlist=array();
00151 var $imgNamePrefix = 'img';
00152 var $imgNameNotRandom=0;
00153 var $debug = 0;
00154 var $parent_cObj;
00155 var $GMENU_fixKey='gmenu';
00156 var $MP_array=array();
00157
00158
00159 var $conf = Array();
00160 var $mconf = Array();
00161 var $tmpl;
00162 var $sys_page;
00163 var $id;
00164 var $nextActive;
00165 var $menuArr;
00166 var $hash;
00167 var $result = Array();
00168 var $rL_uidRegister = '';
00169 var $INPfixMD5;
00170 var $I;
00171 var $WMresult;
00172 var $WMfreezePrefix;
00173 var $WMmenuItems;
00174 var $WMsubmenuObjSuffixes;
00175 var $WMextraScript;
00176 var $alternativeMenuTempArray='';
00177 var $nameAttribute = 'name';
00178
00191 function start(&$tmpl,&$sys_page,$id,$conf,$menuNumber,$objSuffix='') {
00192
00193
00194 $this->conf = $conf;
00195 $this->menuNumber = $menuNumber;
00196 $this->mconf = $conf[$this->menuNumber.$objSuffix.'.'];
00197 $this->debug=$GLOBALS['TSFE']->debug;
00198
00199
00200 switch ($GLOBALS['TSFE']->xhtmlDoctype) {
00201 case 'xhtml_strict':
00202 case 'xhtml_11':
00203 case 'xhtml_2':
00204 $this->nameAttribute = 'id';
00205 break;
00206 default:
00207 $this->nameAttribute = 'name';
00208 break;
00209 }
00210
00211
00212 if ($this->conf[$this->menuNumber.$objSuffix] && is_object($tmpl) && is_object($sys_page)) {
00213 $this->tmpl = &$tmpl;
00214 $this->sys_page = &$sys_page;
00215
00216
00217 if (trim($this->conf['alwaysActivePIDlist'])) {
00218 $this->alwaysActivePIDlist = t3lib_div::intExplode(',', $this->conf['alwaysActivePIDlist']);
00219 }
00220
00221
00222 if($this->conf['excludeDoktypes']) {
00223 $this->doktypeExcludeList = $GLOBALS['TYPO3_DB']->cleanIntList($this->conf['excludeDoktypes']);
00224 }
00225 if($this->conf['includeNotInMenu']) {
00226 $exclDoktypeArr = t3lib_div::trimExplode(',',$this->doktypeExcludeList,1);
00227 $exclDoktypeArr = t3lib_div::removeArrayEntryByValue($exclDoktypeArr,'5');
00228 $this->doktypeExcludeList = implode(',',$exclDoktypeArr);
00229 }
00230
00231
00232 $this->entryLevel = tslib_cObj::getKey ($conf['entryLevel'],$this->tmpl->rootLine);
00233
00234
00235 if ($id) {
00236 $this->id = intval($id);
00237 } else {
00238 $this->id = intval($this->tmpl->rootLine[$this->entryLevel]['uid']);
00239
00240
00241
00242 foreach($this->tmpl->rootLine as $entryLevel => $levelRec) {
00243
00244 if ($levelRec['_MP_PARAM'] && $levelRec['_MOUNT_OL']) {
00245 $this->MP_array[] = $levelRec['_MP_PARAM'];
00246 }
00247
00248 if ($entryLevel>=$this->entryLevel) break;
00249
00250
00251 if ($levelRec['_MP_PARAM'] && !$levelRec['_MOUNT_OL']) {
00252 $this->MP_array[] = $levelRec['_MP_PARAM'];
00253 }
00254 }
00255 }
00256
00257
00258 if ($this->id<=0) {
00259 return FALSE;
00260 }
00261
00262
00263
00264 $mount_info = $this->sys_page->getMountPointInfo($this->id);
00265 if (is_array($mount_info)) {
00266 $this->MP_array[] = $mount_info['MPvar'];
00267 $this->id = $mount_info['mount_pid'];
00268 }
00269
00270
00271
00272 if (!is_array($this->rL_uidRegister)) {
00273 $rl_MParray = array();
00274 foreach($this->tmpl->rootLine as $v_rl) {
00275
00276 if ($v_rl['_MP_PARAM'] && $v_rl['_MOUNT_OL']) {
00277 $rl_MParray[] = $v_rl['_MP_PARAM'];
00278 }
00279
00280
00281 $this->rL_uidRegister[] = 'ITEM:'.$v_rl['uid'].(count($rl_MParray) ? ':'.implode(',',$rl_MParray) : '');
00282
00283
00284 if ($v_rl['_MP_PARAM'] && !$v_rl['_MOUNT_OL']) {
00285 $rl_MParray[] = $v_rl['_MP_PARAM'];
00286 }
00287 }
00288 }
00289
00290
00291
00292 if (is_array($this->tmpl->rootLine[$this->entryLevel+$this->menuNumber])) {
00293 $nextMParray = $this->MP_array;
00294 if ($this->tmpl->rootLine[$this->entryLevel+$this->menuNumber]['_MOUNT_OL']) {
00295 $nextMParray[] = $this->tmpl->rootLine[$this->entryLevel+$this->menuNumber]['_MP_PARAM'];
00296 }
00297 $this->nextActive = $this->tmpl->rootLine[$this->entryLevel+$this->menuNumber]['uid'].
00298 (count($nextMParray)?':'.implode(',',$nextMParray):'');
00299 } else {
00300 $this->nextActive = '';
00301 }
00302
00303
00304 if ($this->mconf['imgNamePrefix']) {
00305 $this->imgNamePrefix=$this->mconf['imgNamePrefix'];
00306 }
00307 $this->imgNameNotRandom = $this->mconf['imgNameNotRandom'];
00308
00309 $retVal = TRUE;
00310 } else {
00311 $GLOBALS['TT']->setTSlogMessage('ERROR in menu',3);
00312 $retVal = FALSE;
00313 }
00314 return $retVal;
00315 }
00316
00324 function makeMenu() {
00325 if ($this->id) {
00326
00327
00328 if ($this->mconf['showAccessRestrictedPages']) {
00329
00330 $SAVED_where_groupAccess = $this->sys_page->where_groupAccess;
00331 $this->sys_page->where_groupAccess = '';
00332 }
00333
00334
00335 $temp = array();
00336 $altSortFieldValue = trim($this->mconf['alternativeSortingField']);
00337 $altSortField = $altSortFieldValue ? $altSortFieldValue : 'sorting';
00338 if ($this->menuNumber==1 && $this->conf['special']) {
00339 $value = $this->conf['special.']['value'];
00340
00341 switch($this->conf['special']) {
00342 case 'userdefined':
00343 $temp = $this->includeMakeMenu($this->conf['special.'],$altSortField);
00344 break;
00345 case 'userfunction':
00346 $temp = $this->parent_cObj->callUserFunction(
00347 $this->conf['special.']['userFunc'],
00348 array_merge($this->conf['special.'],array('_altSortField'=>$altSortField)),
00349 ''
00350 );
00351 if (!is_array($temp)) $temp=array();
00352 break;
00353 case 'language':
00354 $temp = array();
00355
00356
00357 $currentPageWithNoOverlay = $this->sys_page->getRawRecord('pages',$GLOBALS['TSFE']->page['uid']);
00358
00359
00360 $languageItems = t3lib_div::intExplode(',',$value);
00361 foreach($languageItems as $sUid) {
00362
00363 if ($sUid) {
00364 $lRecs = $this->sys_page->getPageOverlay($GLOBALS['TSFE']->page['uid'],$sUid);
00365 } else $lRecs=array();
00366
00367 if (
00368 (t3lib_div::hideIfNotTranslated($GLOBALS['TSFE']->page['l18n_cfg']) && $sUid && !count($lRecs))
00369 || ($GLOBALS['TSFE']->page['l18n_cfg']&1 && (!$sUid || !count($lRecs)))
00370 || (!$this->conf['special.']['normalWhenNoLanguage'] && $sUid && !count($lRecs))
00371 ) {
00372 $iState = $GLOBALS['TSFE']->sys_language_uid==$sUid ? 'USERDEF2' : 'USERDEF1';
00373 } else {
00374 $iState = $GLOBALS['TSFE']->sys_language_uid==$sUid ? 'ACT' : 'NO';
00375 }
00376
00377 if ($this->conf['addQueryString']) {
00378 $getVars = $this->parent_cObj->getQueryArguments($this->conf['addQueryString.'],array('L'=>$sUid),true);
00379 } else {
00380 $getVars = '&L='.$sUid;
00381 }
00382
00383
00384 $temp[] = array_merge(
00385 array_merge($currentPageWithNoOverlay, $lRecs),
00386 array(
00387 'ITEM_STATE' => $iState,
00388 '_ADD_GETVARS' => $getVars,
00389 '_SAFE' => TRUE
00390 )
00391 );
00392 }
00393 break;
00394 case 'directory':
00395 if ($value=='') {
00396 $value=$GLOBALS['TSFE']->page['uid'];
00397 }
00398 $items=t3lib_div::intExplode(',',$value);
00399
00400 foreach($items as $id) {
00401 $MP = $this->tmpl->getFromMPmap($id);
00402
00403
00404 $mount_info = $this->sys_page->getMountPointInfo($id);
00405 if (is_array($mount_info)) {
00406 if ($mount_info['overlay']) {
00407 $MP = $this->tmpl->getFromMPmap($mount_info['mount_pid']);
00408 $MP = $MP ? $MP : $mount_info['MPvar'];
00409 } else {
00410 $MP = ($MP ? $MP.',' : '').$mount_info['MPvar'];
00411 }
00412 $id = $mount_info['mount_pid'];
00413 }
00414
00415
00416 $res = $GLOBALS['TSFE']->cObj->exec_getQuery('pages',Array('pidInList'=>$id,'orderBy'=>$altSortField));
00417 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00418 $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
00419
00420 if (is_array($row)) {
00421
00422 $mount_info = $this->sys_page->getMountPointInfo($row['uid'], $row);
00423 if (is_array($mount_info) && $mount_info['overlay']) {
00424 $mp_row = $this->sys_page->getPage($mount_info['mount_pid']);
00425 if (count($mp_row)) {
00426 $row = $mp_row;
00427 $row['_MP_PARAM'] = $mount_info['MPvar'];
00428 } else unset($row);
00429 }
00430
00431
00432 if (is_array($row)) {
00433 if ($MP) $row['_MP_PARAM'] = $MP.($row['_MP_PARAM'] ? ','.$row['_MP_PARAM'] : '');
00434 $temp[$row['uid']] = $this->sys_page->getPageOverlay($row);
00435 }
00436 }
00437 }
00438 }
00439 break;
00440 case 'list':
00441 if ($value=='') {
00442 $value=$this->id;
00443 }
00444 $loadDB = t3lib_div::makeInstance('FE_loadDBGroup');
00445 $loadDB->start($value, 'pages');
00446 $loadDB->additionalWhere['pages']=tslib_cObj::enableFields('pages');
00447 $loadDB->getFromDB();
00448
00449 foreach($loadDB->itemArray as $val) {
00450 $MP = $this->tmpl->getFromMPmap($val['id']);
00451
00452
00453 $mount_info = $this->sys_page->getMountPointInfo($val['id']);
00454 if (is_array($mount_info) && $mount_info['overlay']) {
00455 $mp_row = $this->sys_page->getPage($mount_info['mount_pid']);
00456 if (count($mp_row)) {
00457 $row = $mp_row;
00458 $row['_MP_PARAM'] = $mount_info['MPvar'];
00459
00460 if ($mount_info['overlay']) {
00461 $MP = $this->tmpl->getFromMPmap($mount_info['mount_pid']);
00462 if ($MP) unset($row['_MP_PARAM']);
00463 }
00464 } else unset($row);
00465 } else {
00466 $row = $loadDB->results['pages'][$val['id']];
00467 }
00468
00469
00470 if (is_array($row)) {
00471 if ($MP) $row['_MP_PARAM'] = $MP.($row['_MP_PARAM'] ? ','.$row['_MP_PARAM'] : '');
00472 $temp[] = $this->sys_page->getPageOverlay($row);
00473 }
00474 }
00475 break;
00476 case 'updated':
00477 if ($value=='') {
00478 $value=$GLOBALS['TSFE']->page['uid'];
00479 }
00480 $items=t3lib_div::intExplode(',',$value);
00481 if (t3lib_div::testInt($this->conf['special.']['depth'])) {
00482 $depth = t3lib_div::intInRange($this->conf['special.']['depth'],1,20);
00483 } else {
00484 $depth=20;
00485 }
00486 $limit = t3lib_div::intInRange($this->conf['special.']['limit'],0,100);
00487 $maxAge = intval(tslib_cObj::calc($this->conf['special.']['maxAge']));
00488 if (!$limit) $limit=10;
00489 $mode = $this->conf['special.']['mode'];
00490
00491 $id_list_arr = Array();
00492
00493 foreach($items as $id) {
00494 $bA = t3lib_div::intInRange($this->conf['special.']['beginAtLevel'],0,100);
00495 $id_list_arr[] = tslib_cObj::getTreeList(-1*$id,$depth-1+$bA,$bA-1);
00496 }
00497 $id_list = implode(',',$id_list_arr);
00498
00499 switch($mode) {
00500 case 'starttime':
00501 $sortField = 'starttime';
00502 break;
00503 case 'lastUpdated':
00504 case 'manual':
00505 $sortField = 'lastUpdated';
00506 break;
00507 case 'tstamp':
00508 $sortField = 'tstamp';
00509 break;
00510 case 'crdate':
00511 $sortField = 'crdate';
00512 break;
00513 default:
00514 $sortField = 'SYS_LASTCHANGED';
00515 break;
00516 }
00517
00518 $extraWhere = ($this->conf['includeNotInMenu'] ? '' : ' AND pages.nav_hide=0').$this->getDoktypeExcludeWhere();
00519
00520 if ($this->conf['special.']['excludeNoSearchPages']) {
00521 $extraWhere.= ' AND pages.no_search=0';
00522 }
00523 if ($maxAge>0) {
00524 $extraWhere.=' AND '.$sortField.'>'.($GLOBALS['SIM_EXEC_TIME']-$maxAge);
00525 }
00526
00527 $res = $GLOBALS['TSFE']->cObj->exec_getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>$sortField.'>=0'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));
00528 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00529 $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
00530 if (is_array($row)) {
00531 $temp[$row['uid']]=$this->sys_page->getPageOverlay($row);
00532 }
00533 }
00534 break;
00535 case 'keywords':
00536 list($value)=t3lib_div::intExplode(',',$value);
00537 if (!$value) {
00538 $value=$GLOBALS['TSFE']->page['uid'];
00539 }
00540 if ($this->conf['special.']['setKeywords'] || $this->conf['special.']['setKeywords.']) {
00541 $kw = $this->parent_cObj->stdWrap($this->conf['special.']['setKeywords'], $this->conf['special.']['setKeywords.']);
00542 } else {
00543 $value_rec=$this->sys_page->getPage($value);
00544
00545 $kfieldSrc = $this->conf['special.']['keywordsField.']['sourceField'] ? $this->conf['special.']['keywordsField.']['sourceField'] : 'keywords';
00546 $kw = trim(tslib_cObj::keywords($value_rec[$kfieldSrc]));
00547 }
00548
00549 $mode = $this->conf['special.']['mode'];
00550 switch($mode) {
00551 case 'starttime':
00552 $sortField = 'starttime';
00553 break;
00554 case 'lastUpdated':
00555 case 'manual':
00556 $sortField = 'lastUpdated';
00557 break;
00558 case 'tstamp':
00559 $sortField = 'tstamp';
00560 break;
00561 case 'crdate':
00562 $sortField = 'crdate';
00563 break;
00564 default:
00565 $sortField = 'SYS_LASTCHANGED';
00566 break;
00567 }
00568
00569
00570 if (t3lib_div::testInt($this->conf['special.']['depth'])) {
00571 $depth = t3lib_div::intInRange($this->conf['special.']['depth'],0,20);
00572 } else {
00573 $depth=20;
00574 }
00575 $limit = t3lib_div::intInRange($this->conf['special.']['limit'],0,100);
00576 $extraWhere = ' AND pages.uid!='.$value.($this->conf['includeNotInMenu'] ? '' : ' AND pages.nav_hide=0').$this->getDoktypeExcludeWhere();
00577 if ($this->conf['special.']['excludeNoSearchPages']) {
00578 $extraWhere.= ' AND pages.no_search=0';
00579 }
00580
00581 $eLevel = tslib_cObj::getKey (intval($this->conf['special.']['entryLevel']),$this->tmpl->rootLine);
00582 $startUid = intval($this->tmpl->rootLine[$eLevel]['uid']);
00583
00584
00585 $kfield = 'keywords';
00586 if ( $this->conf['special.']['keywordsField'] ) {
00587 list($kfield) = explode(' ',trim ($this->conf['special.']['keywordsField']));
00588 }
00589
00590
00591 if ($kw && $startUid) {
00592 $bA = t3lib_div::intInRange($this->conf['special.']['beginAtLevel'],0,100);
00593 $id_list=tslib_cObj::getTreeList(-1*$startUid,$depth-1+$bA,$bA-1);
00594
00595 $kwArr = explode(',',$kw);
00596 foreach($kwArr as $word) {
00597 $word = trim($word);
00598 if ($word) {
00599 $keyWordsWhereArr[] = $kfield.' LIKE \'%'.$GLOBALS['TYPO3_DB']->quoteStr($word, 'pages').'%\'';
00600 }
00601 }
00602 $res = $GLOBALS['TSFE']->cObj->exec_getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>'('.implode(' OR ',$keyWordsWhereArr).')'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));
00603 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00604 $GLOBALS['TSFE']->sys_page->versionOL('pages',$row);
00605 if (is_array($row)) {
00606 $temp[$row['uid']]=$this->sys_page->getPageOverlay($row);
00607 }
00608 }
00609 }
00610 break;
00611 case 'rootline':
00612 $begin_end = explode('|',$this->conf['special.']['range']);
00613 if (!t3lib_div::testInt($begin_end[0])) {intval($begin_end[0]);}
00614 if (!t3lib_div::testInt($begin_end[1])) {$begin_end[1]=-1;}
00615
00616 $beginKey = tslib_cObj::getKey ($begin_end[0],$this->tmpl->rootLine);
00617 $endKey = tslib_cObj::getKey ($begin_end[1],$this->tmpl->rootLine);
00618 if ($endKey<$beginKey) {$endKey=$beginKey;}
00619
00620 $rl_MParray = array();
00621 foreach($this->tmpl->rootLine as $k_rl => $v_rl) {
00622
00623 if ($v_rl['_MP_PARAM'] && $v_rl['_MOUNT_OL']) {
00624 $rl_MParray[] = $v_rl['_MP_PARAM'];
00625 }
00626
00627 if ($k_rl>=$beginKey && $k_rl<=$endKey) {
00628 $temp_key=$k_rl;
00629 $temp[$temp_key]=$this->sys_page->getPage($v_rl['uid']);
00630 if (count($temp[$temp_key])) {
00631 if (!$temp[$temp_key]['target']) {
00632 $temp[$temp_key]['target'] = $this->conf['special.']['targets.'][$k_rl];
00633 $temp[$temp_key]['_MP_PARAM'] = implode(',',$rl_MParray);
00634 }
00635 } else unset($temp[$temp_key]);
00636 }
00637
00638 if ($v_rl['_MP_PARAM'] && !$v_rl['_MOUNT_OL']) {
00639 $rl_MParray[] = $v_rl['_MP_PARAM'];
00640 }
00641 }
00642 break;
00643 case 'browse':
00644 list($value)=t3lib_div::intExplode(',',$value);
00645 if (!$value) {
00646 $value=$GLOBALS['TSFE']->page['uid'];
00647 }
00648 if ($value!=$this->tmpl->rootLine[0]['uid']) {
00649 $recArr=array();
00650 $value_rec=$this->sys_page->getPage($value);
00651 if ($value_rec['pid']) {
00652 $recArr['up']=$this->sys_page->getPage($value_rec['pid']);
00653 }
00654 if ($recArr['up']['pid'] && $value_rec['pid']!=$this->tmpl->rootLine[0]['uid']) {
00655 $recArr['index']=$this->sys_page->getPage($recArr['up']['pid']);
00656 }
00657
00658
00659 $prevnext_menu = $this->sys_page->getMenu($value_rec['pid'],'*',$altSortField);
00660 $lastKey=0;
00661 $nextActive=0;
00662 reset($prevnext_menu);
00663 while(list($k_b,$v_b)=each($prevnext_menu)) {
00664 if ($nextActive) {
00665 $recArr['next']=$v_b;
00666 $nextActive=0;
00667 }
00668 if ($v_b['uid']==$value) {
00669 if ($lastKey) {
00670 $recArr['prev']=$prevnext_menu[$lastKey];
00671 }
00672 $nextActive=1;
00673 }
00674 $lastKey=$k_b;
00675 }
00676 reset($prevnext_menu);
00677 $recArr['first']=pos($prevnext_menu);
00678 end($prevnext_menu);
00679 $recArr['last']=pos($prevnext_menu);
00680
00681
00682 if (is_array($recArr['index'])) {
00683 $prevnextsection_menu = $this->sys_page->getMenu($recArr['index']['uid'],'*',$altSortField);
00684 $lastKey=0;
00685 $nextActive=0;
00686 reset($prevnextsection_menu);
00687 while(list($k_b,$v_b)=each($prevnextsection_menu)) {
00688 if ($nextActive) {
00689 $sectionRec_temp = $this->sys_page->getMenu($v_b['uid'],'*',$altSortField);
00690 if (count($sectionRec_temp)) {
00691 reset($sectionRec_temp);
00692 $recArr['nextsection']=pos($sectionRec_temp);
00693 end ($sectionRec_temp);
00694 $recArr['nextsection_last']=pos($sectionRec_temp);
00695 $nextActive=0;
00696 }
00697 }
00698 if ($v_b['uid']==$value_rec['pid']) {
00699 if ($lastKey) {
00700 $sectionRec_temp = $this->sys_page->getMenu($prevnextsection_menu[$lastKey]['uid'],'*',$altSortField);
00701 if (count($sectionRec_temp)) {
00702 reset($sectionRec_temp);
00703 $recArr['prevsection']=pos($sectionRec_temp);
00704 end ($sectionRec_temp);
00705 $recArr['prevsection_last']=pos($sectionRec_temp);
00706 }
00707 }
00708 $nextActive=1;
00709 }
00710 $lastKey=$k_b;
00711 }
00712 }
00713 if ($this->conf['special.']['items.']['prevnextToSection']) {
00714 if (!is_array($recArr['prev']) && is_array($recArr['prevsection_last'])) {
00715 $recArr['prev']=$recArr['prevsection_last'];
00716 }
00717 if (!is_array($recArr['next']) && is_array($recArr['nextsection'])) {
00718 $recArr['next']=$recArr['nextsection'];
00719 }
00720 }
00721
00722 $items = explode('|',$this->conf['special.']['items']);
00723 $c=0;
00724 while(list($k_b,$v_b)=each($items)) {
00725 $v_b=strtolower(trim($v_b));
00726 if (intval($this->conf['special.'][$v_b.'.']['uid'])) {
00727 $recArr[$v_b] = $this->sys_page->getPage(intval($this->conf['special.'][$v_b.'.']['uid']));
00728 }
00729 if (is_array($recArr[$v_b])) {
00730 $temp[$c]=$recArr[$v_b];
00731 if ($this->conf['special.'][$v_b.'.']['target']) {
00732 $temp[$c]['target']=$this->conf['special.'][$v_b.'.']['target'];
00733 }
00734 if (is_array($this->conf['special.'][$v_b.'.']['fields.'])) {
00735 reset($this->conf['special.'][$v_b.'.']['fields.']);
00736 while(list($fk,$val)=each($this->conf['special.'][$v_b.'.']['fields.'])) {
00737 $temp[$c][$fk]=$val;
00738 }
00739 }
00740 $c++;
00741 }
00742 }
00743 }
00744 break;
00745 }
00746 } elseif (is_array($this->alternativeMenuTempArray)) {
00747 $temp = $this->alternativeMenuTempArray;
00748 } elseif ($this->mconf['sectionIndex']) {
00749 if ($GLOBALS['TSFE']->sys_language_uid && count($this->sys_page->getPageOverlay($this->id))) {
00750 $sys_language_uid = intval($GLOBALS['TSFE']->sys_language_uid);
00751 } else $sys_language_uid=0;
00752
00753 $selectSetup = Array(
00754 'pidInList'=>$this->id,
00755 'orderBy'=>$altSortField,
00756 'where' => 'colPos=0 AND sys_language_uid='.$sys_language_uid,
00757 'andWhere' => 'sectionIndex!=0'
00758 );
00759 switch($this->mconf['sectionIndex.']['type']) {
00760 case 'all':
00761 unset($selectSetup['andWhere']);
00762 break;
00763 case 'header':
00764 $selectSetup['andWhere']='header_layout!=100 AND header!=""';
00765 break;
00766 }
00767 $basePageRow=$this->sys_page->getPage($this->id);
00768 if (is_array($basePageRow)) {
00769 $res = $GLOBALS['TSFE']->cObj->exec_getQuery('tt_content', $selectSetup);
00770 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00771 $GLOBALS['TSFE']->sys_page->versionOL('tt_content',$row);
00772
00773 if (is_array($row)) {
00774 $temp[$row['uid']] = $basePageRow;
00775 $temp[$row['uid']]['title'] = $row['header'];
00776 $temp[$row['uid']]['nav_title'] = $row['header'];
00777 $temp[$row['uid']]['subtitle'] = $row['subheader'];
00778 $temp[$row['uid']]['starttime'] = $row['starttime'];
00779 $temp[$row['uid']]['endtime'] = $row['endtime'];
00780 $temp[$row['uid']]['fe_group'] = $row['fe_group'];
00781 $temp[$row['uid']]['media'] = $row['media'];
00782
00783 $temp[$row['uid']]['header_layout'] = $row['header_layout'];
00784 $temp[$row['uid']]['bodytext'] = $row['bodytext'];
00785 $temp[$row['uid']]['image'] = $row['image'];
00786
00787 $temp[$row['uid']]['sectionIndex_uid'] = $row['uid'];
00788 }
00789 }
00790 }
00791 } else {
00792 $temp = $this->sys_page->getMenu($this->id,'*',$altSortField);
00793 }
00794
00795 $c=0;
00796 $c_b=0;
00797 $minItems = intval($this->mconf['minItems'] ? $this->mconf['minItems'] : $this->conf['minItems']);
00798 $maxItems = intval($this->mconf['maxItems'] ? $this->mconf['maxItems'] : $this->conf['maxItems']);
00799 $begin = tslib_cObj::calc($this->mconf['begin'] ? $this->mconf['begin'] : $this->conf['begin']);
00800
00801 $banUidArray = $this->getBannedUids();
00802
00803
00804 $this->menuArr = Array();
00805 foreach($temp as $data) {
00806 $spacer = (t3lib_div::inList($this->spacerIDList,$data['doktype']) || !strcmp($data['ITEM_STATE'],'SPC')) ? 1 : 0;
00807 if ($this->filterMenuPages($data, $banUidArray, $spacer)) {
00808 $c_b++;
00809 if ($begin<=$c_b) {
00810 $this->menuArr[$c] = $data;
00811 $this->menuArr[$c]['isSpacer'] = $spacer;
00812 $c++;
00813 if ($maxItems && $c>=$maxItems) {
00814 break;
00815 }
00816 }
00817 }
00818 }
00819
00820
00821 if ($minItems) {
00822 while($c<$minItems) {
00823 $this->menuArr[$c] = Array(
00824 'title' => '...',
00825 'uid' => $GLOBALS['TSFE']->id
00826 );
00827 $c++;
00828 }
00829 }
00830
00831 $GLOBALS['TSFE']->register['count_menuItems'] = count($this->menuArr);
00832
00833 if ($this->mconf['itemArrayProcFunc']) {
00834 if (!is_array($this->parentMenuArr)) {$this->parentMenuArr=array();}
00835 $this->menuArr = $this->userProcess('itemArrayProcFunc',$this->menuArr);
00836 }
00837 $this->hash = md5(serialize($this->menuArr).serialize($this->mconf).serialize($this->tmpl->rootLine).serialize($this->MP_array));
00838
00839 $serData = $this->sys_page->getHash($this->hash, 60*60*24);
00840 if (!$serData) {
00841 $this->generate();
00842 $this->sys_page->storeHash($this->hash, serialize($this->result),'MENUDATA');
00843 } else {
00844 $this->result = unserialize($serData);
00845 }
00846
00847
00848 if ($this->mconf['showAccessRestrictedPages']) {
00849
00850 $this->sys_page->where_groupAccess = $SAVED_where_groupAccess;
00851 }
00852 }
00853 }
00854
00865 function includeMakeMenu($conf,$altSortField) {
00866 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($conf['file']);
00867 if ($incFile && $GLOBALS['TSFE']->checkFileInclude($incFile)) {
00868 include($incFile);
00869 }
00870 return is_array($menuItemsArray) ? $menuItemsArray : array();
00871 }
00872
00881 function filterMenuPages(&$data,$banUidArray,$spacer) {
00882
00883 if ($data['_SAFE']) return TRUE;
00884
00885 $uid = $data['uid'];
00886 if ($this->mconf['SPC'] || !$spacer) {
00887 if (!t3lib_div::inList($this->doktypeExcludeList,$data['doktype'])) {
00888 if (!$data['nav_hide'] || $this->conf['includeNotInMenu']) {
00889 if (!t3lib_div::inArray($banUidArray,$uid)) {
00890
00891
00892
00893 $blockPage = $data['l18n_cfg']&1 && (!$GLOBALS['TSFE']->sys_language_uid || ($GLOBALS['TSFE']->sys_language_uid && !$data['_PAGES_OVERLAY']));
00894 if (!$blockPage) {
00895
00896
00897 $tok = TRUE;
00898 if ($GLOBALS['TSFE']->sys_language_uid && t3lib_div::hideIfNotTranslated($data['l18n_cfg'])) {
00899 if (!$data['_PAGES_OVERLAY']) {
00900 $tok = FALSE;
00901 }
00902 }
00903
00904
00905 if ($tok) {
00906
00907
00908 if ($this->conf['protectLvar']) {
00909 $languageUid = intval($GLOBALS['TSFE']->config['config']['sys_language_uid']);
00910 if ($languageUid && ($this->conf['protectLvar']=='all' || t3lib_div::hideIfNotTranslated($data['l18n_cfg']))) {
00911 $olRec = $GLOBALS['TSFE']->sys_page->getPageOverlay($data['uid'], $languageUid);
00912 if (!count($olRec)) {
00913
00914 $data['_ADD_GETVARS'].= '&L=0';
00915 }
00916 }
00917 }
00918
00919 return TRUE;
00920 }
00921 }
00922 }
00923 }
00924 }
00925 }
00926 }
00927
00937 function procesItemStates($splitCount) {
00938
00939
00940 if (!is_array($this->mconf['NO.']) && $this->mconf['NO']) $this->mconf['NO.']=array();
00941 $NOconf = $this->tmpl->splitConfArray($this->mconf['NO.'],$splitCount);
00942
00943
00944 $ROconf=array();
00945 if ($this->mconf['RO']) {
00946 $ROconf = $this->tmpl->splitConfArray($this->mconf['RO.'],$splitCount);
00947 }
00948
00949
00950
00951 if ($this->mconf['IFSUB']) {
00952 $IFSUBinit = 0;
00953 reset($NOconf);
00954 while (list($key,$val)=each($NOconf)) {
00955 if ($this->isItemState('IFSUB',$key)) {
00956 if (!$IFSUBinit) {
00957 $IFSUBconf = $this->tmpl->splitConfArray($this->mconf['IFSUB.'],$splitCount);
00958 if ($this->mconf['IFSUBRO']) {
00959 $IFSUBROconf = $this->tmpl->splitConfArray($this->mconf['IFSUBRO.'],$splitCount);
00960 }
00961 $IFSUBinit = 1;
00962 }
00963 $NOconf[$key] = $IFSUBconf[$key];
00964 if ($ROconf) {
00965 $ROconf[$key] = $IFSUBROconf[$key] ? $IFSUBROconf[$key] : $IFSUBconf[$key];
00966 }
00967 }
00968 }
00969 }
00970
00971 if ($this->mconf['ACT']) {
00972 $ACTinit = 0;
00973 reset($NOconf);
00974 while (list($key,$val)=each($NOconf)) {
00975 if ($this->isItemState('ACT',$key)) {
00976 if (!$ACTinit) {
00977 $ACTconf = $this->tmpl->splitConfArray($this->mconf['ACT.'],$splitCount);
00978
00979 if ($this->mconf['ACTRO']) {
00980 $ACTROconf = $this->tmpl->splitConfArray($this->mconf['ACTRO.'],$splitCount);
00981 }
00982 $ACTinit = 1;
00983 }
00984 $NOconf[$key] = $ACTconf[$key];
00985 if ($ROconf) {
00986 $ROconf[$key] = $ACTROconf[$key] ? $ACTROconf[$key] : $ACTconf[$key];
00987 }
00988 }
00989 }
00990 }
00991
00992
00993 if ($this->mconf['ACTIFSUB']) {
00994 $ACTIFSUBinit = 0;
00995 reset($NOconf);
00996 while (list($key,$val)=each($NOconf)) {
00997 if ($this->isItemState('ACTIFSUB',$key)) {
00998 if (!$ACTIFSUBinit) {
00999 $ACTIFSUBconf = $this->tmpl->splitConfArray($this->mconf['ACTIFSUB.'],$splitCount);
01000
01001 if ($this->mconf['ACTIFSUBRO']) {
01002 $ACTIFSUBROconf = $this->tmpl->splitConfArray($this->mconf['ACTIFSUBRO.'],$splitCount);
01003 }
01004 $ACTIFSUBinit = 1;
01005 }
01006 $NOconf[$key] = $ACTIFSUBconf[$key];
01007 if ($ROconf) {
01008 $ROconf[$key] = $ACTIFSUBROconf[$key] ? $ACTIFSUBROconf[$key] : $ACTIFSUBconf[$key];
01009 }
01010 }
01011 }
01012 }
01013
01014
01015 if ($this->mconf['CUR']) {
01016 $CURinit = 0;
01017 reset($NOconf);
01018 while (list($key,$val)=each($NOconf)) {
01019 if ($this->isItemState('CUR',$key)) {
01020 if (!$CURinit) {
01021 $CURconf = $this->tmpl->splitConfArray($this->mconf['CUR.'],$splitCount);
01022 if ($this->mconf['CURRO']) {
01023 $CURROconf = $this->tmpl->splitConfArray($this->mconf['CURRO.'],$splitCount);
01024 }
01025 $CURinit = 1;
01026 }
01027 $NOconf[$key] = $CURconf[$key];
01028 if ($ROconf) {
01029 $ROconf[$key] = $CURROconf[$key] ? $CURROconf[$key] : $CURconf[$key];
01030 }
01031 }
01032 }
01033 }
01034
01035
01036 if ($this->mconf['CURIFSUB']) {
01037 $CURIFSUBinit = 0;
01038 reset($NOconf);
01039 while (list($key,$val)=each($NOconf)) {
01040 if ($this->isItemState('CURIFSUB',$key)) {
01041 if (!$CURIFSUBinit) {
01042 $CURIFSUBconf = $this->tmpl->splitConfArray($this->mconf['CURIFSUB.'],$splitCount);
01043
01044 if ($this->mconf['CURIFSUBRO']) {
01045 $CURIFSUBROconf = $this->tmpl->splitConfArray($this->mconf['CURIFSUBRO.'],$splitCount);
01046 }
01047 $CURIFSUBinit = 1;
01048 }
01049 $NOconf[$key] = $CURIFSUBconf[$key];
01050 if ($ROconf) {
01051 $ROconf[$key] = $CURIFSUBROconf[$key] ? $CURIFSUBROconf[$key] : $CURIFSUBconf[$key];
01052 }
01053 }
01054 }
01055 }
01056
01057 if ($this->mconf['USR']) {
01058 $USRinit = 0;
01059 reset($NOconf);
01060 while (list($key,$val)=each($NOconf)) {
01061 if ($this->isItemState('USR',$key)) {
01062 if (!$USRinit) {
01063 $USRconf = $this->tmpl->splitConfArray($this->mconf['USR.'],$splitCount);
01064
01065 if ($this->mconf['USRRO']) {
01066 $USRROconf = $this->tmpl->splitConfArray($this->mconf['USRRO.'],$splitCount);
01067 }
01068 $USRinit = 1;
01069 }
01070 $NOconf[$key] = $USRconf[$key];
01071 if ($ROconf) {
01072 $ROconf[$key] = $USRROconf[$key] ? $USRROconf[$key] : $USRconf[$key];
01073 }
01074 }
01075 }
01076 }
01077
01078 if ($this->mconf['SPC']) {
01079 $SPCinit = 0;
01080 reset($NOconf);
01081 while (list($key,$val)=each($NOconf)) {
01082 if ($this->isItemState('SPC',$key)) {
01083 if (!$SPCinit) {
01084 $SPCconf = $this->tmpl->splitConfArray($this->mconf['SPC.'],$splitCount);
01085 $SPCinit = 1;
01086 }
01087 $NOconf[$key] = $SPCconf[$key];
01088 }
01089 }
01090 }
01091
01092 if ($this->mconf['USERDEF1']) {
01093 $USERDEF1init = 0;
01094 reset($NOconf);
01095 while (list($key,$val)=each($NOconf)) {
01096 if ($this->isItemState('USERDEF1',$key)) {
01097 if (!$USERDEF1init) {
01098 $USERDEF1conf = $this->tmpl->splitConfArray($this->mconf['USERDEF1.'],$splitCount);
01099
01100 if ($this->mconf['USERDEF1RO']) {
01101 $USERDEF1ROconf = $this->tmpl->splitConfArray($this->mconf['USERDEF1RO.'],$splitCount);
01102 }
01103 $USERDEF1init = 1;
01104 }
01105 $NOconf[$key] = $USERDEF1conf[$key];
01106 if ($ROconf) {
01107 $ROconf[$key] = $USERDEF1ROconf[$key] ? $USERDEF1ROconf[$key] : $USERDEF1conf[$key];
01108 }
01109 }
01110 }
01111 }
01112
01113 if ($this->mconf['USERDEF2']) {
01114 $USERDEF2init = 0;
01115 reset($NOconf);
01116 while (list($key,$val)=each($NOconf)) {
01117 if ($this->isItemState('USERDEF2',$key)) {
01118 if (!$USERDEF2init) {
01119 $USERDEF2conf = $this->tmpl->splitConfArray($this->mconf['USERDEF2.'],$splitCount);
01120
01121 if ($this->mconf['USERDEF2RO']) {
01122 $USERDEF2ROconf = $this->tmpl->splitConfArray($this->mconf['USERDEF2RO.'],$splitCount);
01123 }
01124 $USERDEF2init = 1;
01125 }
01126 $NOconf[$key] = $USERDEF2conf[$key];
01127 if ($ROconf) {
01128 $ROconf[$key] = $USERDEF2ROconf[$key] ? $USERDEF2ROconf[$key] : $USERDEF2conf[$key];
01129 }
01130 }
01131 }
01132 }
01133
01134 return array($NOconf,$ROconf);
01135 }
01136
01147 function link($key,$altTarget='',$typeOverride='') {
01148
01149
01150 $MP_var = $this->getMPvar($key);
01151 $MP_params = $MP_var ? '&MP='.rawurlencode($MP_var) : '';
01152
01153
01154 if ($this->mconf['overrideId'] || $this->menuArr[$key]['overrideId']) {
01155 $overrideArray = array();
01156
01157 $overrideArray['uid'] = $this->mconf['overrideId']?$this->mconf['overrideId']:$this->menuArr[$key]['overrideId'];
01158 $overrideArray['alias'] = '';
01159 $MP_params = '';
01160 } else {
01161 $overrideArray='';
01162 }
01163
01164
01165 $mainTarget = $altTarget ? $altTarget : $this->mconf['target'];
01166
01167
01168 if ($this->mconf['collapse'] && $this->isActive($this->menuArr[$key]['uid'], $this->getMPvar($key))) {
01169 $thePage = $this->sys_page->getPage($this->menuArr[$key]['pid']);
01170 $LD = $this->tmpl->linkData($thePage,$mainTarget,'','',$overrideArray, $this->mconf['addParams'].$MP_params.$this->menuArr[$key]['_ADD_GETVARS'], $typeOverride);
01171 } else {
01172 $LD = $this->tmpl->linkData($this->menuArr[$key],$mainTarget,'','',$overrideArray, $this->mconf['addParams'].$MP_params.$this->I['val']['additionalParams'].$this->menuArr[$key]['_ADD_GETVARS'], $typeOverride);
01173 }
01174
01175
01176 if ($this->menuArr[$key]['doktype'] == 3 && $this->menuArr[$key]['urltype'] == 3 && t3lib_div::validEmail($this->menuArr[$key]['url'])) {
01177
01178 $LD['totalURL'] = $this->parent_cObj->typoLink_URL(array('parameter' => $this->menuArr[$key]['url']));
01179 $LD['target'] = '';
01180 }
01181
01182
01183 $this->changeLinksForAccessRestrictedPages($LD,$this->menuArr[$key],$mainTarget,$typeOverride);
01184
01185
01186 if ($this->menuArr[$key]['_OVERRIDE_HREF']) {
01187 $LD['totalURL'] = $this->menuArr[$key]['_OVERRIDE_HREF'];
01188 if ($this->menuArr[$key]['_OVERRIDE_TARGET']) $LD['target'] = $this->menuArr[$key]['_OVERRIDE_TARGET'];
01189 }
01190
01191
01192 $onClick='';
01193 if ($this->mconf['JSWindow']) {
01194 $conf=$this->mconf['JSWindow.'];
01195 $url=$LD['totalURL'];
01196 $LD['totalURL'] = '#';
01197 $onClick= 'openPic(\''.$GLOBALS['TSFE']->baseUrlWrap($url).'\',\''.($conf['newWindow']?md5($url):'theNewPage').'\',\''.$conf['params'].'\'); return false;';
01198 $GLOBALS['TSFE']->setJS('openPic');
01199 }
01200
01201
01202 $list = array();
01203 $list['HREF'] = strlen($LD['totalURL']) ? $LD['totalURL'] : $GLOBALS['TSFE']->baseUrl;
01204 $list['TARGET'] = $LD['target'];
01205 $list['onClick'] = $onClick;
01206
01207 return $list;
01208 }
01209
01219 function changeLinksForAccessRestrictedPages(&$LD, $page, $mainTarget, $typeOverride) {
01220
01221
01222 if ($this->mconf['showAccessRestrictedPages'] && $this->mconf['showAccessRestrictedPages']!=='NONE' && !$GLOBALS['TSFE']->checkPageGroupAccess($page)) {
01223 $thePage = $this->sys_page->getPage($this->mconf['showAccessRestrictedPages']);
01224
01225 $addParams = $this->mconf['showAccessRestrictedPages.']['addParams'];
01226 $addParams = str_replace('###RETURN_URL###',rawurlencode($LD['totalURL']),$addParams);
01227 $addParams = str_replace('###PAGE_ID###',$page['uid'],$addParams);
01228 $LD = $this->tmpl->linkData($thePage,$mainTarget,'','','', $addParams, $typeOverride);
01229 }
01230 }
01231
01240 function subMenu($uid, $objSuffix='') {
01241
01242
01243 $altArray = '';
01244 if (is_array($this->menuArr[$this->I['key']]['_SUB_MENU']) && count($this->menuArr[$this->I['key']]['_SUB_MENU'])) {
01245 $altArray = $this->menuArr[$this->I['key']]['_SUB_MENU'];
01246 }
01247
01248
01249 $cls = strtolower($this->conf[($this->menuNumber+1).$objSuffix]);
01250 $subLevelClass = ($cls && t3lib_div::inList($this->tmpl->menuclasses,$cls)) ? $cls : '';
01251
01252 if ($subLevelClass && ($this->mconf['expAll'] || $this->isNext($uid, $this->getMPvar($this->I['key'])) || is_array($altArray)) && !$this->mconf['sectionIndex']) {
01253 $submenu = t3lib_div::makeInstance('tslib_'.$subLevelClass);
01254 $submenu->entryLevel = $this->entryLevel+1;
01255 $submenu->rL_uidRegister = $this->rL_uidRegister;
01256 $submenu->MP_array = $this->MP_array;
01257 if ($this->menuArr[$this->I['key']]['_MP_PARAM']) {
01258 $submenu->MP_array[] = $this->menuArr[$this->I['key']]['_MP_PARAM'];
01259 }
01260
01261
01262 $submenu->parent_cObj = &$this->parent_cObj;
01263 $submenu->parentMenuArr = $this->menuArr;
01264
01265
01266 if (is_array($altArray)) {
01267 $submenu->alternativeMenuTempArray = $altArray;
01268 }
01269
01270 if ($submenu->start($this->tmpl, $this->sys_page, $uid, $this->conf, $this->menuNumber+1, $objSuffix)) {
01271 $submenu->makeMenu();
01272 return $submenu->writeMenu();
01273 }
01274 }
01275 }
01276
01286 function isNext($uid, $MPvar='') {
01287
01288
01289 if (count($this->alwaysActivePIDlist) && in_array($uid,$this->alwaysActivePIDlist)) {
01290 return TRUE;
01291 }
01292
01293 $testUid = $uid.($MPvar?':'.$MPvar:'');
01294 if ($uid && $testUid==$this->nextActive) {
01295 return TRUE;
01296 }
01297 }
01298
01307 function isActive($uid, $MPvar='') {
01308
01309
01310 if (count($this->alwaysActivePIDlist) && in_array($uid,$this->alwaysActivePIDlist)) {
01311 return TRUE;
01312 }
01313
01314 $testUid = $uid.($MPvar?':'.$MPvar:'');
01315 if ($uid && in_array('ITEM:'.$testUid, $this->rL_uidRegister)) {
01316 return TRUE;
01317 }
01318 }
01319
01328 function isCurrent($uid, $MPvar='') {
01329 $testUid = $uid.($MPvar?':'.$MPvar:'');
01330 if ($uid && !strcmp(end($this->rL_uidRegister),'ITEM:'.$testUid)) {
01331 return TRUE;
01332 }
01333 }
01334
01343 function isSubMenu($uid) {
01344
01345
01346 $mount_info = $this->sys_page->getMountPointInfo($uid);
01347 if (is_array($mount_info)) {
01348 $uid = $mount_info['mount_pid'];
01349 }
01350
01351 $recs = $this->sys_page->getMenu($uid,'uid,pid,doktype,mount_pid,mount_pid_ol,nav_hide,shortcut,shortcut_mode');
01352 foreach($recs as $theRec) {
01353 if (!t3lib_div::inList($this->doktypeExcludeList,$theRec['doktype']) && (!$theRec['nav_hide'] || $this->conf['includeNotInMenu'])) {
01354 return TRUE;
01355 }
01356 }
01357 }
01358
01368 function isItemState($kind,$key) {
01369 $natVal=0;
01370 if ($this->menuArr[$key]['ITEM_STATE']) {
01371 if (!strcmp($this->menuArr[$key]['ITEM_STATE'],$kind)) {$natVal=1;}
01372 } else {
01373 switch($kind) {
01374 case 'SPC':
01375 $natVal = $this->menuArr[$key]['isSpacer'];
01376 break;
01377 case 'IFSUB':
01378 $natVal = $this->isSubMenu($this->menuArr[$key]['uid']);
01379 break;
01380 case 'ACT':
01381 $natVal = $this->isActive($this->menuArr[$key]['uid'], $this->getMPvar($key));
01382 break;
01383 case 'ACTIFSUB':
01384 $natVal = $this->isActive($this->menuArr[$key]['uid'], $this->getMPvar($key)) && $this->isSubMenu($this->menuArr[$key]['uid']);
01385 break;
01386 case 'CUR':
01387 $natVal = $this->isCurrent($this->menuArr[$key]['uid'], $this->getMPvar($key));
01388 break;
01389 case 'CURIFSUB':
01390 $natVal = $this->isCurrent($this->menuArr[$key]['uid'], $this->getMPvar($key)) && $this->isSubMenu($this->menuArr[$key]['uid']);
01391 break;
01392 case 'USR':
01393 $natVal = $this->menuArr[$key]['fe_group'];
01394 break;
01395 }
01396 }
01397
01398 return $natVal;
01399 }
01400
01408 function accessKey($title) {
01409
01410 $result = Array();
01411
01412 $titleLen = strlen($title);
01413 for ($a=0;$a<$titleLen;$a++) {
01414 $key = strtoupper(trim(substr($title,$a,1)));
01415 if (preg_match('/[a-zA-Z]/', $key) && !isset($GLOBALS['TSFE']->accessKey[$key])) {
01416 $GLOBALS['TSFE']->accessKey[$key]=1;
01417 $result['code'] = ' accesskey="'.$key.'"';
01418 $result['alt'] = ' (ALT+'.$key.')';
01419 break;
01420 }
01421 }
01422 return $result;
01423 }
01424
01434 function userProcess($mConfKey,$passVar) {
01435 if ($this->mconf[$mConfKey]) {
01436 $funcConf = $this->mconf[$mConfKey.'.'];
01437 $funcConf['parentObj']=&$this;
01438 $passVar = $GLOBALS['TSFE']->cObj->callUserFunction($this->mconf[$mConfKey], $funcConf, $passVar);
01439 }
01440 return $passVar;
01441 }
01442
01449 function setATagParts() {
01450 $this->I['A1'] = '<a '.t3lib_div::implodeAttributes($this->I['linkHREF'],1).' '.$this->I['val']['ATagParams'].$this->I['accessKey']['code'].'>';
01451 $this->I['A2'] = '</a>';
01452 }
01453
01462 function getPageTitle($title,$nav_title) {
01463 return strcmp(trim($nav_title),'') ? $nav_title : $title;
01464 }
01465
01474 function getMPvar($key) {
01475 if ($GLOBALS['TYPO3_CONF_VARS']['FE']['enable_mount_pids']) {
01476 $localMP_array = $this->MP_array;
01477 if ($this->menuArr[$key]['_MP_PARAM']) $localMP_array[] = $this->menuArr[$key]['_MP_PARAM'];
01478 $MP_params = count($localMP_array) ? implode(',',$localMP_array) : '';
01479 return $MP_params;
01480 }
01481 }
01482
01489 function getDoktypeExcludeWhere() {
01490 return $this->doktypeExcludeList ? ' AND pages.doktype NOT IN ('.$this->doktypeExcludeList.')' : '';
01491 }
01492
01499 function getBannedUids() {
01500 $banUidArray = array();
01501
01502 if (trim($this->conf['excludeUidList'])) {
01503 $banUidList = str_replace('current', $GLOBALS['TSFE']->page['uid'], $this->conf['excludeUidList']);
01504 $banUidArray = t3lib_div::intExplode(',', $banUidList);
01505 }
01506
01507 return $banUidArray;
01508 }
01509
01510 }
01511
01512
01513
01514
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527
01528
01529
01538 class tslib_tmenu extends tslib_menu {
01539
01547 function generate() {
01548 $splitCount = count($this->menuArr);
01549 if ($splitCount) {
01550 list($NOconf) = $this->procesItemStates($splitCount);
01551 }
01552 if ($this->mconf['debugItemConf']) {echo '<h3>$NOconf:</h3>'; debug($NOconf); }
01553 $this->result = $NOconf;
01554 }
01555
01563 function writeMenu() {
01564 if (is_array($this->result) && count($this->result)) {
01565 $this->WMcObj = t3lib_div::makeInstance('tslib_cObj');
01566 $this->WMresult = '';
01567 $this->INPfixMD5 = substr(md5(microtime().'tmenu'),0,4);
01568 $this->WMmenuItems = count($this->result);
01569
01570 $this->WMsubmenuObjSuffixes = $this->tmpl->splitConfArray(array('sOSuffix'=>$this->mconf['submenuObjSuffixes']),$this->WMmenuItems);
01571
01572 $this->extProc_init();
01573 reset($this->result);
01574 while (list($key,$val)=each($this->result)) {
01575 $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ']++;
01576 $GLOBALS['TSFE']->register['count_MENUOBJ']++;
01577
01578 $this->WMcObj->start($this->menuArr[$key],'pages');
01579
01580 $this->I = array();
01581 $this->I['key'] = $key;
01582 $this->I['INPfix'] = $this->imgNameNotRandom?'':'_'.$this->INPfixMD5.'_'.$key;
01583 $this->I['val'] = $val;
01584 $this->I['title'] = $this->WMcObj->stdWrap($this->getPageTitle($this->menuArr[$key]['title'],$this->menuArr[$key]['nav_title']),$this->I['val']['stdWrap.']);
01585 $this->I['uid'] = $this->menuArr[$key]['uid'];
01586 $this->I['mount_pid'] = $this->menuArr[$key]['mount_pid'];
01587 $this->I['pid'] = $this->menuArr[$key]['pid'];
01588 $this->I['spacer'] = $this->menuArr[$key]['isSpacer'];
01589
01590
01591 if ($this->mconf['accessKey']) {
01592 $this->I['accessKey'] = $this->accessKey($this->I['title']);
01593 } else {
01594 $this->I['accessKey'] = Array();
01595 }
01596
01597
01598 $this->I['val']['ATagParams'] = $this->WMcObj->getATagParams($this->I['val']);
01599 $this->I['val']['additionalParams'] = $this->WMcObj->stdWrap($this->I['val']['additionalParams'],$this->I['val']['additionalParams.']);
01600 $this->I['linkHREF'] = $this->link($key,$this->I['val']['altTarget'],$this->mconf['forceTypeValue']);
01601
01602
01603 $titleAttrValue = $this->WMcObj->stdWrap($this->I['val']['ATagTitle'],$this->I['val']['ATagTitle.']).$this->I['accessKey']['alt'];
01604 if (strlen($titleAttrValue)) {
01605 $this->I['linkHREF']['title'] = $titleAttrValue;
01606 }
01607
01608
01609 if (!$this->mconf['noBlur']) {
01610 $this->I['linkHREF']['onFocus']='blurLink(this);';
01611 }
01612
01613
01614 if ($this->I['val']['RO']) {
01615 $this->I['theName'] = $this->imgNamePrefix.$this->I['uid'].$this->I['INPfix'];
01616 $over='';
01617 $out ='';
01618 if ($this->I['val']['beforeROImg']) {
01619 $over.= $this->WMfreezePrefix."over('".$this->I['theName']."before');";
01620 $out.= $this->WMfreezePrefix."out('".$this->I['theName']."before');";
01621 }
01622 if ($this->I['val']['afterROImg']) {
01623 $over.= $this->WMfreezePrefix."over('".$this->I['theName']."after');";
01624 $out.= $this->WMfreezePrefix."out('".$this->I['theName']."after');";
01625 }
01626 $this->I['linkHREF']['onMouseover']=$over;
01627 $this->I['linkHREF']['onMouseout']=$out;
01628 if ($over || $out) $GLOBALS['TSFE']->setJS('mouseOver');
01629
01630
01631 if ($this->I['val']['RO_chBgColor']) {
01632 $this->addJScolorShiftFunction();
01633 $chBgP = t3lib_div::trimExplode('|',$this->I['val']['RO_chBgColor']);
01634 $this->I['linkHREF']['onMouseover'].="changeBGcolor('".$chBgP[2].$this->I['uid']."','".$chBgP[0]."');";
01635 $this->I['linkHREF']['onMouseout'].="changeBGcolor('".$chBgP[2].$this->I['uid']."','".$chBgP[1]."');";
01636 }
01637
01638 $this->extProc_RO($key);
01639 }
01640
01641
01642
01643 $this->extProc_beforeLinking($key);
01644
01645
01646 if (!$this->I['val']['doNotLinkIt']) {$this->I['val']['doNotLinkIt']=0;}
01647 if (!$this->I['spacer'] && $this->I['val']['doNotLinkIt']!=1) {
01648 $this->setATagParts();
01649 } else {
01650 $this->I['A1'] = '';
01651 $this->I['A2'] = '';
01652 }
01653
01654
01655 if ($this->I['val']['ATagBeforeWrap']) {
01656 $wrapPartsBefore = explode('|',$this->I['val']['linkWrap']);
01657 $wrapPartsAfter = array('','');
01658 } else {
01659 $wrapPartsBefore = array('','');
01660 $wrapPartsAfter = explode('|',$this->I['val']['linkWrap']);
01661 }
01662 if ($this->I['val']['stdWrap2'] || isset($this->I['val']['stdWrap2.'])) {
01663 $wrapPartsStdWrap = explode($this->I['val']['stdWrap2']?$this->I['val']['stdWrap2']:'|',$this->WMcObj->stdWrap('|',$this->I['val']['stdWrap2.']));
01664 } else {$wrapPartsStdWrap = array('','');}
01665
01666
01667 $this->I['parts'] = array();
01668 $this->I['parts']['before']=$this->getBeforeAfter('before');
01669 $this->I['parts']['stdWrap2_begin']=$wrapPartsStdWrap[0];
01670 if (!$this->I['val']['doNotShowLink']) {
01671 $this->I['parts']['notATagBeforeWrap_begin'] = $wrapPartsAfter[0];
01672 $this->I['parts']['ATag_begin'] = $this->I['A1'];
01673 $this->I['parts']['ATagBeforeWrap_begin'] = $wrapPartsBefore[0];
01674 $this->I['parts']['title'] = $this->I['title'];
01675 $this->I['parts']['ATagBeforeWrap_end'] = $wrapPartsBefore[1];
01676 $this->I['parts']['ATag_end'] = $this->I['A2'];
01677 $this->I['parts']['notATagBeforeWrap_end'] = $wrapPartsAfter[1];
01678 }
01679 $this->I['parts']['stdWrap2_end']=$wrapPartsStdWrap[1];
01680 $this->I['parts']['after']=$this->getBeforeAfter('after');
01681
01682
01683 if ($this->mconf['IProcFunc']) {
01684 $this->I = $this->userProcess('IProcFunc',$this->I);
01685 }
01686
01687
01688 $this->I['theItem']= implode('',$this->I['parts']);
01689 $this->I['theItem']= $this->extProc_beforeAllWrap($this->I['theItem'],$key);
01690
01691
01692 $allWrap = $this->WMcObj->stdWrap($this->I['val']['allWrap'],$this->I['val']['allWrap.']);
01693 $this->I['theItem'] = $this->tmpl->wrap($this->I['theItem'],$allWrap);
01694
01695 if ($this->I['val']['subst_elementUid']) $this->I['theItem'] = str_replace('{elementUid}',$this->I['uid'],$this->I['theItem']);
01696
01697
01698 if (is_array($this->I['val']['allStdWrap.'])) {
01699 $this->I['theItem'] = $this->WMcObj->stdWrap($this->I['theItem'],$this->I['val']['allStdWrap.']);
01700 }
01701
01702
01703 $this->extProc_afterLinking($key);
01704 }
01705 return $this->extProc_finish();
01706 }
01707 }
01708
01716 function getBeforeAfter($pref) {
01717 $res = '';
01718 if ($imgInfo = $this->WMcObj->getImgResource($this->I['val'][$pref.'Img'],$this->I['val'][$pref.'Img.'])) {
01719 $imgInfo[3] = t3lib_div::png_to_gif_by_imagemagick($imgInfo[3]);
01720 if ($this->I['val']['RO'] && $this->I['val'][$pref.'ROImg'] && !$this->I['spacer']) {
01721 $imgROInfo = $this->WMcObj->getImgResource($this->I['val'][$pref.'ROImg'],$this->I['val'][$pref.'ROImg.']);
01722 $imgROInfo[3] = t3lib_div::png_to_gif_by_imagemagick($imgROInfo[3]);
01723 if ($imgROInfo) {
01724 $theName = $this->imgNamePrefix.$this->I['uid'].$this->I['INPfix'].$pref;
01725 $name = ' '.$this->nameAttribute.'="'.$theName.'"';
01726 $GLOBALS['TSFE']->JSImgCode.= chr(10).$theName.'_n=new Image(); '.$theName.'_n.src = "'.$GLOBALS['TSFE']->absRefPrefix.$imgInfo[3].'"; ';
01727 $GLOBALS['TSFE']->JSImgCode.= chr(10).$theName.'_h=new Image(); '.$theName.'_h.src = "'.$GLOBALS['TSFE']->absRefPrefix.$imgROInfo[3].'"; ';
01728 }
01729 }
01730 $GLOBALS['TSFE']->imagesOnPage[]=$imgInfo[3];
01731 $res='<img src="'.$GLOBALS['TSFE']->absRefPrefix.$imgInfo[3].'" width="'.$imgInfo[0].'" height="'.$imgInfo[1].'"'.$name.($this->I['val'][$pref.'ImgTagParams']?" ".$this->I['val'][$pref.'ImgTagParams']:'').tslib_cObj::getBorderAttr('border="0"');
01732 if (!strstr($res,'alt="')) $res.=' alt=""'; // Adding alt attribute if not set.
01733 $res.=' />';
01734 if ($this->I['val'][$pref.'ImgLink']) {$res=$this->I['A1'].$res.$this->I['A2'];}
01735 }
01736 return $this->tmpl->wrap($res.$this->WMcObj->stdWrap($this->I['val'][$pref],$this->I['val'][$pref.'.']), $this->I['val'][$pref.'Wrap']);
01737 }
01738
01746 function addJScolorShiftFunction() {
01747 $GLOBALS['TSFE']->additionalJavaScript['TMENU:changeBGcolor()']='
01748 function changeBGcolor(id,color) { //
01749 if (document.getElementById && document.getElementById(id)) {
01750 document.getElementById(id).style.background = color;
01751 return true;
01752 } else if (document.layers && document.layers[id]) {
01753 document.layers[id].bgColor = color;
01754 return true;
01755 }
01756 }
01757 ';
01758 }
01759
01768 function extProc_init() {
01769 }
01770
01779 function extProc_RO($key) {
01780 }
01781
01790 function extProc_beforeLinking($key) {
01791 }
01792
01802 function extProc_afterLinking($key) {
01803 // Add part to the accumulated result + fetch submenus
01804 if (!$this->I['spacer']) {
01805 $this->I['theItem'].= $this->subMenu($this->I['uid'], $this->WMsubmenuObjSuffixes[$key]['sOSuffix']);
01806 }
01807 $this->WMresult.= $this->I['val']['wrapItemAndSub'] ? $this->tmpl->wrap($this->I['theItem'],$this->I['val']['wrapItemAndSub']) : $this->I['theItem'];
01808 }
01809
01819 function extProc_beforeAllWrap($item,$key) {
01820 return $item;
01821 }
01822
01830 function extProc_finish() {
01831 // stdWrap:
01832 if (is_array($this->mconf['stdWrap.'])) {
01833 $this->WMresult = $this->WMcObj->stdWrap($this->WMresult,$this->mconf['stdWrap.']);
01834 }
01835 return $this->tmpl->wrap($this->WMresult,$this->mconf['wrap']).$this->WMextraScript;
01836 }
01837 }
01838
01839
01840
01841
01842
01843
01844
01845
01846
01847
01848
01849
01850
01851
01852
01853
01854
01855
01856
01857
01858
01859
01860
01861
01870 class tslib_gmenu extends tslib_menu {
01871
01879 function generate() {
01880 $splitCount = count($this->menuArr);
01881 if ($splitCount) {
01882 list($NOconf,$ROconf) = $this->procesItemStates($splitCount);
01883
01884 //store initial count value
01885 $temp_HMENU_MENUOBJ = $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ'];
01886 $temp_MENUOBJ = $GLOBALS['TSFE']->register['count_MENUOBJ'];
01887 // Now we generate the giffiles:
01888 $this->makeGifs($NOconf,'NO');
01889 // store count from NO obj
01890 $tempcnt_HMENU_MENUOBJ = $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ'];
01891 $tempcnt_MENUOBJ = $GLOBALS['TSFE']->register['count_MENUOBJ'];
01892
01893 if ($this->mconf['debugItemConf']) {echo '<h3>$NOconf:</h3>'; debug($NOconf); }
01894 if ($ROconf) { // RollOver
01895 //start recount for rollover with initial values
01896 $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ']= $temp_HMENU_MENUOBJ;
01897 $GLOBALS['TSFE']->register['count_MENUOBJ']= $temp_MENUOBJ;
01898 $this->makeGifs($ROconf,'RO');
01899 if ($this->mconf['debugItemConf']) {echo '<h3>$ROconf:</h3>'; debug($ROconf); }
01900 }
01901 // use count from NO obj
01902 $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ'] = $tempcnt_HMENU_MENUOBJ;
01903 $GLOBALS['TSFE']->register['count_MENUOBJ'] = $tempcnt_MENUOBJ;
01904 }
01905 }
01906
01917 function makeGifs($conf, $resKey) {
01918 $isGD = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'];
01919
01920 if (!is_array($conf)) {
01921 $conf = Array();
01922 }
01923
01924 $totalWH=array();
01925 $items = count($conf);
01926 if ($isGD) {
01927 // generate the gif-files. the $menuArr is filled with some values like output_w, output_h, output_file
01928 $Hcounter = 0;
01929 $Wcounter = 0;
01930 $Hobjs = $this->mconf['applyTotalH'];
01931 if ($Hobjs) {$Hobjs = t3lib_div::intExplode(',',$Hobjs);}
01932 $Wobjs = $this->mconf['applyTotalW'];
01933 if ($Wobjs) {$Wobjs = t3lib_div::intExplode(',',$Wobjs);}
01934 $minDim = $this->mconf['min'];
01935 if ($minDim) {$minDim = tslib_cObj::calcIntExplode(',',$minDim.',');}
01936 $maxDim = $this->mconf['max'];
01937 if ($maxDim) {$maxDim = tslib_cObj::calcIntExplode(',',$maxDim.',');}
01938
01939 if ($minDim) {
01940 $conf[$items]=$conf[$items-1];
01941 $this->menuArr[$items]=Array();
01942 $items = count($conf);
01943 }
01944
01945 // TOTAL width
01946 if ($this->mconf['useLargestItemX'] || $this->mconf['useLargestItemY'] || $this->mconf['distributeX'] || $this->mconf['distributeY']) {
01947 $totalWH = $this->findLargestDims($conf,$items,$Hobjs,$Wobjs,$minDim,$maxDim);
01948 }
01949 }
01950
01951 $c=0;
01952 $maxFlag=0;
01953 $distributeAccu=array('H'=>0,'W'=>0);
01954 reset($conf);
01955 while (list($key,$val)=each($conf)) {
01956 $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ']++;
01957 $GLOBALS['TSFE']->register['count_MENUOBJ']++;
01958
01959 if ($items==($c+1) && $minDim) {
01960 $Lobjs = $this->mconf['removeObjectsOfDummy'];
01961 if ($Lobjs) {
01962 $Lobjs = t3lib_div::intExplode(',',$Lobjs);
01963 reset($Lobjs);
01964 while(list(,$remItem)=each($Lobjs)) {
01965 unset($val[$remItem]);
01966 unset($val[$remItem.'.']);
01967 }
01968 }
01969
01970 $flag =0;
01971 $tempXY = explode(',',$val['XY']);
01972 if ($Wcounter<$minDim[0]) {$tempXY[0]=$minDim[0]-$Wcounter; $flag=1;}
01973 if ($Hcounter<$minDim[1]) {$tempXY[1]=$minDim[1]-$Hcounter; $flag=1;}
01974 $val['XY'] = implode(',',$tempXY);
01975 if (!$flag){break;}
01976 }
01977 $c++;
01978
01979
01980 if ($isGD) {
01981 // Pre-working the item
01982 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
01983 $gifCreator->init();
01984 $gifCreator->start($val,$this->menuArr[$key]);
01985
01986 // If useLargestItemH/W is specified
01987 if (count($totalWH) && ($this->mconf['useLargestItemX'] || $this->mconf['useLargestItemY'])) {
01988 $tempXY = explode(',',$gifCreator->setup['XY']);
01989 if ($this->mconf['useLargestItemX']) {$tempXY[0] = max($totalWH['W']);}
01990 if ($this->mconf['useLargestItemY']) {$tempXY[1] = max($totalWH['H']);}
01991 // regenerate the new values...
01992 $val['XY'] = implode(',',$tempXY);
01993 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
01994 $gifCreator->init();
01995 $gifCreator->start($val,$this->menuArr[$key]);
01996 }
01997
01998 // If distributeH/W is specified
01999 if (count($totalWH) && ($this->mconf['distributeX'] || $this->mconf['distributeY'])) {
02000 $tempXY = explode(',',$gifCreator->setup['XY']);
02001
02002 if ($this->mconf['distributeX']) {
02003 $diff = $this->mconf['distributeX']-$totalWH['W_total']-$distributeAccu['W'];
02004 $compensate = round($diff /($items-$c+1));
02005 $distributeAccu['W']+=$compensate;
02006 $tempXY[0] = $totalWH['W'][$key]+$compensate;
02007 }
02008 if ($this->mconf['distributeY']) {
02009 $diff = $this->mconf['distributeY']-$totalWH['H_total']-$distributeAccu['H'];
02010 $compensate = round($diff /($items-$c+1));
02011 $distributeAccu['H']+=$compensate;
02012 $tempXY[1] = $totalWH['H'][$key]+$compensate;
02013 }
02014 // regenerate the new values...
02015 $val['XY'] = implode(',',$tempXY);
02016 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
02017 $gifCreator->init();
02018 $gifCreator->start($val,$this->menuArr[$key]);
02019 }
02020
02021 // If max dimensions are specified
02022 if ($maxDim) {
02023 $tempXY = explode(',',$val['XY']);
02024 if ($maxDim[0] && $Wcounter+$gifCreator->XY[0]>=$maxDim[0]) {$tempXY[0]==$maxDim[0]-$Wcounter; $maxFlag=1;}
02025 if ($maxDim[1] && $Hcounter+$gifCreator->XY[1]>=$maxDim[1]) {$tempXY[1]=$maxDim[1]-$Hcounter; $maxFlag=1;}
02026 if ($maxFlag) {
02027 $val['XY'] = implode(',',$tempXY);
02028 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
02029 $gifCreator->init();
02030 $gifCreator->start($val,$this->menuArr[$key]);
02031 }
02032 }
02033
02034
02035
02036
02037 // displace
02038 if ($Hobjs) {
02039 reset($Hobjs);
02040 while(list(,$index)=each($Hobjs)) {
02041 if ($gifCreator->setup[$index] && $gifCreator->setup[$index.'.']) {
02042 $oldOffset = explode(',',$gifCreator->setup[$index.'.']['offset']);
02043 $gifCreator->setup[$index.'.']['offset'] = implode(',',$gifCreator->applyOffset($oldOffset,Array(0,-$Hcounter)));
02044 }
02045 }
02046 }
02047
02048 if ($Wobjs) {
02049 reset($Wobjs);
02050 while(list(,$index)=each($Wobjs)) {
02051 if ($gifCreator->setup[$index] && $gifCreator->setup[$index.'.']) {
02052 $oldOffset = explode(',',$gifCreator->setup[$index.'.']['offset']);
02053 $gifCreator->setup[$index.'.']['offset'] = implode(',',$gifCreator->applyOffset($oldOffset,Array(-$Wcounter,0)));
02054 }
02055 }
02056 }
02057 }
02058
02059 // Finding alternative GIF names if any (by altImgResource)
02060 $gifFileName='';
02061 if ($conf[$key]['altImgResource'] || is_array($conf[$key]['altImgResource.'])) {
02062 if (!is_object($cObj)) {$cObj=t3lib_div::makeInstance('tslib_cObj');}
02063 $cObj->start($this->menuArr[$key],'pages');
02064 $altImgInfo = $cObj->getImgResource($conf[$key]['altImgResource'],$conf[$key]['altImgResource.']);
02065 $gifFileName=$altImgInfo[3];
02066 }
02067
02068 // If an alternative name was NOT given, find the GIFBUILDER name.
02069 if (!$gifFileName && $isGD) {
02070 $gifCreator->createTempSubDir('menu/');
02071 $gifFileName = $gifCreator->fileName('menu/');
02072 }
02073
02074 $this->result[$resKey][$key] = $conf[$key];
02075
02076 // Generation of image file:
02077 if (@file_exists($gifFileName)) { // File exists
02078 $info = @getimagesize($gifFileName);
02079 $this->result[$resKey][$key]['output_w']=intval($info[0]);
02080 $this->result[$resKey][$key]['output_h']=intval($info[1]);
02081 $this->result[$resKey][$key]['output_file'] = $gifFileName;
02082 } elseif ($isGD) { // file is generated
02083 $gifCreator->make();
02084 $this->result[$resKey][$key]['output_w']=$gifCreator->w;
02085 $this->result[$resKey][$key]['output_h']=$gifCreator->h;
02086 $this->result[$resKey][$key]['output_file'] = $gifFileName;
02087 $gifCreator->output($this->result[$resKey][$key]['output_file']);
02088 $gifCreator->destroy();
02089 }
02090
02091 $this->result[$resKey][$key]['output_file'] = t3lib_div::png_to_gif_by_imagemagick($this->result[$resKey][$key]['output_file']);
02092
02093 $Hcounter+=$this->result[$resKey][$key]['output_h']; // counter is increased
02094 $Wcounter+=$this->result[$resKey][$key]['output_w']; // counter is increased
02095
02096 if ($maxFlag) break;
02097 }
02098 }
02099
02115 function findLargestDims($conf,$items,$Hobjs,$Wobjs,$minDim,$maxDim) {
02116 $totalWH = array(
02117 'W' => array(),
02118 'H' => array(),
02119 'W_total' => 0,
02120 'H_total' => 0
02121 );
02122
02123 $Hcounter = 0;
02124 $Wcounter = 0;
02125 $c=0;
02126 $maxFlag=0;
02127 reset($conf);
02128 while (list($key,$val)=each($conf)) {
02129 // SAME CODE AS makeGifs()! BEGIN
02130 if ($items==($c+1) && $minDim) {
02131 $Lobjs = $this->mconf['removeObjectsOfDummy'];
02132 if ($Lobjs) {
02133 $Lobjs = t3lib_div::intExplode(',',$Lobjs);
02134 reset($Lobjs);
02135 while(list(,$remItem)=each($Lobjs)) {
02136 unset($val[$remItem]);
02137 unset($val[$remItem.'.']);
02138 }
02139 }
02140
02141 $flag =0;
02142 $tempXY = explode(',',$val['XY']);
02143 if ($Wcounter<$minDim[0]) {$tempXY[0]=$minDim[0]-$Wcounter; $flag=1;}
02144 if ($Hcounter<$minDim[1]) {$tempXY[1]=$minDim[1]-$Hcounter; $flag=1;}
02145 $val['XY'] = implode(',',$tempXY);
02146 if (!$flag){break;}
02147 }
02148 $c++;
02149
02150 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
02151 $gifCreator->init();
02152 $gifCreator->start($val,$this->menuArr[$key]);
02153 if ($maxDim) {
02154 $tempXY = explode(',',$val['XY']);
02155 if ($maxDim[0] && $Wcounter+$gifCreator->XY[0]>=$maxDim[0]) {$tempXY[0]==$maxDim[0]-$Wcounter; $maxFlag=1;}
02156 if ($maxDim[1] && $Hcounter+$gifCreator->XY[1]>=$maxDim[1]) {$tempXY[1]=$maxDim[1]-$Hcounter; $maxFlag=1;}
02157 if ($maxFlag) {
02158 $val['XY'] = implode(',',$tempXY);
02159 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
02160 $gifCreator->init();
02161 $gifCreator->start($val,$this->menuArr[$key]);
02162 }
02163 }
02164 // SAME CODE AS makeGifs()! END
02165
02166 // Setting the width/height
02167 $totalWH['W'][$key]=$gifCreator->XY[0];
02168 $totalWH['H'][$key]=$gifCreator->XY[1];
02169 $totalWH['W_total']+=$gifCreator->XY[0];
02170 $totalWH['H_total']+=$gifCreator->XY[1];
02171 // ---- //
02172
02173 $Hcounter+=$gifCreator->XY[1]; // counter is increased
02174 $Wcounter+=$gifCreator->XY[0]; // counter is increased
02175
02176 if ($maxFlag){break;}
02177 }
02178 return $totalWH;
02179 }
02180
02187 function writeMenu() {
02188 if (is_array($this->menuArr) && is_array($this->result) && count($this->result) && is_array($this->result['NO'])) {
02189 $this->WMcObj = t3lib_div::makeInstance('tslib_cObj'); // Create new tslib_cObj for our use
02190 $this->WMresult = '';
02191 $this->INPfixMD5 = substr(md5(microtime().$this->GMENU_fixKey),0,4);
02192 $this->WMmenuItems = count($this->result['NO']);
02193
02194 $this->WMsubmenuObjSuffixes = $this->tmpl->splitConfArray(array('sOSuffix'=>$this->mconf['submenuObjSuffixes']),$this->WMmenuItems);
02195
02196 $this->extProc_init();
02197 for ($key=0;$key<$this->WMmenuItems;$key++) {
02198 if ($this->result['NO'][$key]['output_file']) {
02199 $this->WMcObj->start($this->menuArr[$key],'pages'); // Initialize the cObj with the page record of the menu item
02200
02201 $this->I = array();
02202 $this->I['key'] = $key;
02203 $this->I['INPfix']= $this->imgNameNotRandom?'':'_'.$this->INPfixMD5.'_'.$key;
02204 $this->I['val'] = $this->result['NO'][$key];
02205 $this->I['title'] = $this->getPageTitle($this->menuArr[$key]['title'],$this->menuArr[$key]['nav_title']);
02206 $this->I['uid'] = $this->menuArr[$key]['uid'];
02207 $this->I['mount_pid'] = $this->menuArr[$key]['mount_pid'];
02208 $this->I['pid'] = $this->menuArr[$key]['pid'];
02209 $this->I['spacer'] = $this->menuArr[$key]['isSpacer'];
02210 if (!$this->I['uid'] && !$this->menuArr[$key]['_OVERRIDE_HREF']) {$this->I['spacer']=1;}
02211 $this->I['noLink'] = ($this->I['spacer'] || $this->I['val']['noLink'] || !count($this->menuArr[$key])); // !count($this->menuArr[$key]) means that this item is a dummyItem
02212 $this->I['name'] = '';
02213
02214 // Set access key
02215 if ($this->mconf['accessKey']) {
02216 $this->I['accessKey'] = $this->accessKey($this->I['title']);
02217 } else {
02218 $this->I['accessKey'] = array();
02219 }
02220
02221 // Make link tag
02222 $this->I['val']['ATagParams'] = $this->WMcObj->getATagParams($this->I['val']);
02223 $this->I['val']['additionalParams'] = $this->WMcObj->stdWrap($this->I['val']['additionalParams'],$this->I['val']['additionalParams.']);
02224 $this->I['linkHREF'] = $this->link($key,$this->I['val']['altTarget'],$this->mconf['forceTypeValue']);
02225
02226 // Title attribute of links:
02227 $titleAttrValue = $this->WMcObj->stdWrap($this->I['val']['ATagTitle'],$this->I['val']['ATagTitle.']).$this->I['accessKey']['alt'];
02228 if (strlen($titleAttrValue)) {
02229 $this->I['linkHREF']['title'] = $titleAttrValue;
02230 }
02231 // Setting "blurlink()" function:
02232 if (!$this->mconf['noBlur']) {
02233 $this->I['linkHREF']['onFocus']='blurLink(this);';
02234 }
02235
02236 // Set rollover
02237 if ($this->result['RO'][$key] && !$this->I['noLink']) {
02238 $this->I['theName'] = $this->imgNamePrefix.$this->I['uid'].$this->I['INPfix'];
02239 $this->I['name'] = ' '.$this->nameAttribute.'="'.$this->I["theName"].'"';
02240 $this->I['linkHREF']['onMouseover']=$this->WMfreezePrefix.'over(\''.$this->I['theName'].'\');';
02241 $this->I['linkHREF']['onMouseout']=$this->WMfreezePrefix.'out(\''.$this->I['theName'].'\');';
02242 $GLOBALS['TSFE']->JSImgCode.= chr(10).$this->I['theName'].'_n=new Image(); '.$this->I['theName'].'_n.src = "'.$GLOBALS['TSFE']->absRefPrefix.$this->I['val']['output_file'].'"; ';
02243 $GLOBALS['TSFE']->JSImgCode.= chr(10).$this->I['theName'].'_h=new Image(); '.$this->I['theName'].'_h.src = "'.$GLOBALS['TSFE']->absRefPrefix.$this->result['RO'][$key]['output_file'].'"; ';
02244 $GLOBALS['TSFE']->imagesOnPage[]=$this->result['RO'][$key]['output_file'];
02245 $GLOBALS['TSFE']->setJS('mouseOver');
02246 $this->extProc_RO($key);
02247 }
02248
02249
02250 $this->I['altText'] = $this->mconf['disableAltText'] ? '' : $this->I['title'].$this->I['accessKey']['alt'];
02251
02252
02253 $this->extProc_beforeLinking($key);
02254
02255
02256 if (!$this->I['noLink']) {
02257 $this->setATagParts();
02258 } else {
02259 $this->I['A1'] = '';
02260 $this->I['A2'] = '';
02261 }
02262 $this->I['IMG'] = '<img src="'.$GLOBALS['TSFE']->absRefPrefix.$this->I['val']['output_file'].'" width="'.$this->I['val']['output_w'].'" height="'.$this->I['val']['output_h'].'" '.tslib_cObj::getBorderAttr('border="0"').' alt="'.htmlspecialchars($this->I['altText']).'"'.$this->I['name'].($this->I['val']['imgParams']?' '.$this->I['val']['imgParams']:'').' />';
02263
02264
02265 $this->I['parts'] = array();
02266 $this->I['parts']['ATag_begin'] = $this->I['A1'];
02267 $this->I['parts']['image'] = $this->I['IMG'];
02268 $this->I['parts']['ATag_end'] = $this->I['A2'];
02269
02270
02271 if ($this->mconf['IProcFunc']) {
02272 $this->I = $this->userProcess('IProcFunc',$this->I);
02273 }
02274
02275
02276
02277 $this->I['theItem']= implode('',$this->I['parts']);
02278 $this->I['theItem']= $this->extProc_beforeAllWrap($this->I['theItem'],$key);
02279
02280
02281 $this->I['theItem']= $this->tmpl->wrap($this->I['theItem'],$this->I['val']['wrap']);
02282
02283
02284 $allWrap = $this->WMcObj->stdWrap($this->I['val']['allWrap'],$this->I['val']['allWrap.']);
02285 $this->I['theItem'] = $this->tmpl->wrap($this->I['theItem'],$allWrap);
02286
02287 if ($this->I['val']['subst_elementUid']) $this->I['theItem'] = str_replace('{elementUid}',$this->I['uid'],$this->I['theItem']);
02288
02289
02290 if (is_array($this->I['val']['allStdWrap.'])) {
02291 $this->I['theItem'] = $this->WMcObj->stdWrap($this->I['theItem'],$this->I['val']['allStdWrap.']);
02292 }
02293
02294 $GLOBALS['TSFE']->imagesOnPage[]=$this->I['val']['output_file'];
02295
02296 $this->extProc_afterLinking($key);
02297 }
02298 }
02299 return $this->extProc_finish();
02300 }
02301 }
02302
02311 function extProc_init() {
02312 }
02313
02322 function extProc_RO($key) {
02323 }
02324
02333 function extProc_beforeLinking($key) {
02334 }
02335
02346 function extProc_afterLinking($key) {
02347 $this->WMresult.=$this->I['theItem'];
02348 if (!$this->I['spacer']) {
02349 $this->WMresult.= $this->subMenu($this->I['uid'], $this->WMsubmenuObjSuffixes[$key]['sOSuffix']);
02350 }
02351 }
02352
02353
02363 function extProc_beforeAllWrap($item,$key) {
02364 return $item;
02365 }
02366
02374 function extProc_finish() {
02375
02376 if (is_array($this->mconf['stdWrap.'])) {
02377 $this->WMresult = $this->WMcObj->stdWrap($this->WMresult,$this->mconf['stdWrap.']);
02378 }
02379 return $this->tmpl->wrap($this->WMresult,$this->mconf['wrap']).$this->WMextraScript;
02380 }
02381 }
02382
02383
02384
02385
02386
02387
02388
02389
02390
02391
02392
02393
02394
02395
02396
02397
02398
02399
02400
02401
02402
02403
02412 class tslib_imgmenu extends tslib_menu {
02413
02421 function generate() {
02422 $splitCount = count($this->menuArr);
02423 if ($splitCount) {
02424 list($NOconf) = $this->procesItemStates($splitCount);
02425 }
02426 if ($this->mconf['debugItemConf']) {echo '<h3>$NOconf:</h3>'; debug($NOconf); }
02427 $this->makeImageMap($NOconf);
02428 }
02429
02439 function makeImageMap($conf) {
02440 if (!is_array($conf)) {
02441 $conf = Array();
02442 }
02443 if (is_array($this->mconf['main.'])) {
02444 $gifCreator = t3lib_div::makeInstance('tslib_gifBuilder');
02445 $gifCreator->init();
02446
02447 $itemsConf = $conf;
02448 $conf = $this->mconf['main.'];
02449 if (is_array($conf)) {
02450 $gifObjCount = 0;
02451
02452 $sKeyArray=t3lib_TStemplate::sortedKeyList($conf);
02453 $gifObjCount=intval(end($sKeyArray));
02454
02455 $lastOriginal = $gifObjCount;
02456
02457
02458 reset($itemsConf);
02459 $waArr = Array();
02460 while (list($key,$val)=each($itemsConf)) {
02461 if (is_array($val)) {
02462 $gifObjCount++;
02463 $waArr[$key]['free']=$gifObjCount;
02464
02465 $sKeyArray=t3lib_TStemplate::sortedKeyList($val);
02466
02467 foreach($sKeyArray as $theKey) {
02468 $theValue=$val[$theKey];
02469
02470
02471 if (intval($theKey) && $theValArr=$val[$theKey.'.']) {
02472 $cObjData = $this->menuArr[$key] ? $this->menuArr[$key] : Array();
02473
02474 $gifObjCount++;
02475 if ($theValue=='TEXT') {
02476 $waArr[$key]['textNum']=$gifObjCount;
02477
02478 $gifCreator->data = $cObjData;
02479 $theValArr = $gifCreator->checkTextObj($theValArr);
02480 unset($theValArr['text.']);
02481
02482
02483 $LD = $this->tmpl->linkData($this->menuArr[$key],$this->mconf['target'],'','',array(),'',$this->mconf['forceTypeValue']);
02484
02485
02486 $this->changeLinksForAccessRestrictedPages($LD, $this->menuArr[$key], $this->mconf['target'], $this->mconf['forceTypeValue']);
02487
02488
02489 if ($this->menuArr[$key]['_OVERRIDE_HREF']) {
02490 $LD['totalURL'] = $this->menuArr[$key]['_OVERRIDE_HREF'];
02491 if ($this->menuArr[$key]['_OVERRIDE_TARGET']) $LD['target'] = $this->menuArr[$key]['_OVERRIDE_TARGET'];
02492 }
02493
02494
02495 if ($theValArr['imgMap.']['url']=='') {
02496 $theValArr['imgMap.']['url'] = $LD['totalURL'];
02497 }
02498 if ($theValArr['imgMap.']['target']=='') {
02499 $theValArr['imgMap.']['target'] = $LD['target'];
02500 }
02501 if ($theValArr['imgMap.']['noBlur']=='') {
02502 $theValArr['imgMap.']['noBlur'] = $this->mconf['noBlur'];
02503 }
02504 if (is_array($theValArr['imgMap.']['altText.'])) {
02505 $cObj =t3lib_div::makeInstance('tslib_cObj');
02506 $cObj->start($cObjData,'pages');
02507 $theValArr['imgMap.']['altText'] = $cObj->stdWrap($theValArr['imgMap.']['altText'], $theValArr['imgMap.']['altText.']);
02508 unset($theValArr['imgMap.']['altText.']);
02509 }
02510 if (is_array($theValArr['imgMap.']['titleText.'])) {
02511 $cObj =t3lib_div::makeInstance('tslib_cObj');
02512 $cObj->start($cObjData,'pages');
02513 $theValArr['imgMap.']['titleText'] = $cObj->stdWrap($theValArr['imgMap.']['titleText'], $theValArr['imgMap.']['titleText.']);
02514 unset($theValArr['imgMap.']['titleText.']);
02515 }
02516 }
02517
02518 if ($theValue=='IMAGE') {
02519 if ($theValArr['file']=='GIFBUILDER') {
02520 $temp_sKeyArray=t3lib_TStemplate::sortedKeyList($theValArr['file.']);
02521 reset($temp_sKeyArray);
02522 while(list(,$temp_theKey)=each($temp_sKeyArray)) {
02523 if ($theValArr['mask.'][$temp_theKey]=='TEXT') {
02524 $gifCreator->data = $this->menuArr[$key] ? $this->menuArr[$key] : Array();
02525 $theValArr['mask.'][$temp_theKey.'.'] = $gifCreator->checkTextObj($theValArr['mask.'][$temp_theKey.'.']);
02526 unset($theValArr['mask.'][$temp_theKey.'.']['text.']);
02527 }
02528 }
02529 }
02530 if ($theValArr['mask']=='GIFBUILDER') {
02531 $temp_sKeyArray=t3lib_TStemplate::sortedKeyList($theValArr['mask.']);
02532 reset($temp_sKeyArray);
02533 while(list(,$temp_theKey)=each($temp_sKeyArray)) {
02534 if ($theValArr['mask.'][$temp_theKey]=='TEXT') {
02535 $gifCreator->data = $this->menuArr[$key] ? $this->menuArr[$key] : Array();
02536 $theValArr['mask.'][$temp_theKey.'.'] = $gifCreator->checkTextObj($theValArr['mask.'][$temp_theKey.'.']);
02537 unset($theValArr['mask.'][$temp_theKey.'.']['text.']);
02538 }
02539 }
02540 }
02541 }
02542
02543
02544 $setObjFlag=1;
02545 if ($theValArr['if.']) {
02546 $cObj =t3lib_div::makeInstance('tslib_cObj');
02547 $cObj->start($cObjData,'pages');
02548 if (!$cObj->checkIf($theValArr['if.'])) {
02549 $setObjFlag=0;
02550 }
02551 unset($theValArr['if.']);
02552 }
02553
02554 if ($setObjFlag) {
02555 $conf[$gifObjCount] = $theValue;
02556 $conf[$gifObjCount.'.'] = $theValArr;
02557 }
02558 }
02559 }
02560 }
02561 }
02562
02563 $gifCreator->start($conf,$GLOBALS['TSFE']->page);
02564
02565
02566 $sum=Array(0,0,0,0);
02567 reset($waArr);
02568 while (list($key,$val)=each($waArr)) {
02569 if ($dConf[$key] =$itemsConf[$key]['distrib']) {
02570 $textBB = $gifCreator->objBB[$val['textNum']];
02571 $dConf[$key] = str_replace('textX',$textBB[0],$dConf[$key]);
02572 $dConf[$key] = str_replace('textY',$textBB[1],$dConf[$key]);
02573 $dConf[$key] = t3lib_div::intExplode(',',$gifCreator->calcOffset($dConf[$key]));
02574 }
02575 }
02576 $workArea = t3lib_div::intExplode(',',$gifCreator->calcOffset($this->mconf['dWorkArea']));
02577 reset($waArr);
02578 while (list($key,$val)=each($waArr)) {
02579 $index = $val['free'];
02580 $gifCreator->setup[$index] = 'WORKAREA';
02581 $workArea[2] = $dConf[$key][2] ? $dConf[$key][2] : $dConf[$key][0];
02582 $workArea[3] = $dConf[$key][3] ? $dConf[$key][3] : $dConf[$key][1];
02583
02584 $gifCreator->setup[$index.'.']['set'] = implode(',',$workArea);
02585 $workArea[0]+=$dConf[$key][0];
02586 $workArea[1]+=$dConf[$key][1];
02587 }
02588
02589 if ($this->mconf['debugRenumberedObject']) {echo '<h3>Renumbered GIFBUILDER object:</h3>'; debug($gifCreator->setup);}
02590
02591 $gifCreator->createTempSubDir('menu/');
02592 $gifFileName = $gifCreator->fileName('menu/');
02593
02594
02595 $imgHash = md5($gifFileName);
02596 $imgMap = $this->sys_page->getHash($imgHash, 0);
02597
02598 if ($imgMap && @file_exists($gifFileName)) {
02599 $info = @getimagesize($gifFileName);
02600 $w=$info[0];
02601 $h=$info[1];
02602 } else {
02603 $gifCreator->make();
02604 $w=$gifCreator->w;
02605 $h=$gifCreator->h;
02606 $gifCreator->output($gifFileName);
02607 $gifCreator->destroy();
02608 $imgMap=$gifCreator->map;
02609 $this->sys_page->storeHash($imgHash, $imgMap, 'MENU IMAGEMAP');
02610 }
02611 $imgMap.=$this->mconf['imgMapExtras'];
02612
02613 $gifFileName = t3lib_div::png_to_gif_by_imagemagick($gifFileName);
02614 $this->result = Array('output_file'=>$gifFileName, 'output_w'=>$w, 'output_h'=>$h, 'imgMap'=>$imgMap);
02615 }
02616 }
02617 }
02618
02625 function writeMenu() {
02626 if ($this->result) {
02627 $res = &$this->result;
02628 $menuName = 'menu_'.t3lib_div::shortMD5($res['imgMap']);
02629 $result = '<img src="'.$GLOBALS['TSFE']->absRefPrefix.$res['output_file'].'" width="'.$res['output_w'].'" height="'.$res['output_h'].'" usemap="#'.$menuName.'" border="0" '.$this->mconf['params'];
02630 if (!strstr($result,'alt="')) $result.=' alt="Menu Image Map"'; // Adding alt attribute if not set.
02631 $result.= ' /><map name="'.$menuName.'" id="'.$menuName.'">'.$res['imgMap'].'</map>';
02632
02633 $GLOBALS['TSFE']->imagesOnPage[]=$res['output_file'];
02634
02635 return $this->tmpl->wrap($result,$this->mconf['wrap']);
02636 }
02637 }
02638 }
02639
02640
02641
02642
02643
02644
02645
02646
02647
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657
02658
02659
02668 class tslib_jsmenu extends tslib_menu {
02669
02675 function generate() {
02676 }
02677
02683 function writeMenu() {
02684 if ($this->id) {
02685 // Making levels:
02686 $levels = t3lib_div::intInRange($this->mconf['levels'],1,5);
02687 $this->levels = $levels;
02688 $this->JSVarName='eid';
02689 $this->JSMenuName= $this->mconf['menuName'] ? $this->mconf['menuName'] : 'JSmenu';
02690
02691 $JScode="\n var ".$this->JSMenuName." = new JSmenu(".$levels.",'".$this->JSMenuName."Form');";
02692
02693 for ($a=1;$a<=$levels;$a++) {
02694 $JScode.="\n var ".$this->JSVarName.$a."=0;";
02695 }
02696 $JScode.= $this->generate_level($levels,1,$this->id,$this->menuArr,$this->MP_array)."\n";
02697
02698 $GLOBALS['TSFE']->additionalHeaderData['JSMenuCode']='<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix.'t3lib/jsfunc.menu.js"></script>';
02699 $GLOBALS['TSFE']->JSCode.=$JScode;
02700
02701 // Printing:
02702 $allFormCode="";
02703 for ($a=1;$a<=$this->levels;$a++) {
02704 $formCode='';
02705 $levelConf = $this->mconf[$a.'.'];
02706 $length = $levelConf['width'] ? $levelConf['width'] : 14;
02707 $lenghtStr='';
02708 for ($b=0;$b<$length;$b++) {
02709 $lenghtStr.='_';
02710 }
02711 $height = $levelConf['elements'] ? $levelConf['elements'] : 5;
02712
02713 $formCode.= '<select name="selector'.$a.'" onchange="'.$this->JSMenuName.'.act('.$a.');"'.($levelConf['additionalParams']?' '.$levelConf['additionalParams']:'').'>';
02714 for ($b=0;$b<$height;$b++) {
02715 $formCode.= '<option value="0">';
02716 if ($b==0) {
02717 $formCode.= $lenghtStr;
02718 }
02719 $formCode.='</option>';
02720 }
02721 $formCode.= '</select>';
02722 $allFormCode.=$this->tmpl->wrap($formCode,$levelConf['wrap']);
02723 }
02724 $formCode = $this->tmpl->wrap($allFormCode,$this->mconf['wrap']);
02725
02726 $formCode= '<form action="" method="post" style="margin: 0 0 0 0;" name="'.$this->JSMenuName.'Form">'.$formCode.'</form>';
02727 $formCode.='<script type="text/javascript"> /*<![CDATA[*/ '.$this->JSMenuName.'.writeOut(1,'.$this->JSMenuName.'.openID,1); /*]]>*/ </script>';
02728 return $this->tmpl->wrap($formCode,$this->mconf['wrapAfterTags']);
02729 }
02730 }
02731
02744 function generate_level($levels,$count,$pid,$menuItemArray='',$MP_array=array()) {
02745 $levelConf = $this->mconf[$count.'.'];
02746
02747 // Translate PID to a mount page, if any:
02748 $mount_info = $this->sys_page->getMountPointInfo($pid);
02749 if (is_array($mount_info)) {
02750 $MP_array[] = $mount_info['MPvar'];
02751 $pid = $mount_info['mount_pid'];
02752 }
02753
02754 // Set "&MP=" var:
02755 $MP_var = implode(',',$MP_array);
02756 $MP_params = $MP_var ? '&MP='.rawurlencode($MP_var) : '';
02757
02758 // UIDs to ban:
02759 $banUidArray = $this->getBannedUids();
02760
02761 // Initializing variables:
02762 $var = $this->JSVarName;
02763 $menuName = $this->JSMenuName;
02764 $parent = $count==1 ? 0 : $var.($count-1);
02765 $prev=0;
02766 $c=0;
02767
02768 $menuItems = is_array($menuItemArray) ? $menuItemArray : $this->sys_page->getMenu($pid);
02769 foreach($menuItems as $uid => $data) {
02770 $spacer = (t3lib_div::inList($this->spacerIDList,$data['doktype'])?1:0); // if item is a spacer, $spacer is set
02771 if ($this->mconf['SPC'] || !$spacer) { // If the spacer-function is not enabled, spacers will not enter the $menuArr
02772 if (!t3lib_div::inList($this->doktypeExcludeList,$data['doktype']) && (!$data['nav_hide'] || $this->conf['includeNotInMenu']) && !t3lib_div::inArray($banUidArray,$uid)) { // Page may not be 'not_in_menu' or 'Backend User Section' + not in banned uid's
02773 if ($count<$levels) {
02774 $addLines = $this->generate_level($levels,$count+1,$data['uid'],'',$MP_array);
02775 } else {
02776 $addLines = '';
02777 }
02778 $title=$data['title'];
02779 $url='';
02780 $target='';
02781 if ((!$addLines && !$levelConf['noLink']) || $levelConf['alwaysLink']) {
02782 $LD = $this->tmpl->linkData($data,$this->mconf['target'],'','',array(),$MP_params,$this->mconf['forceTypeValue']);
02783
02784 // If access restricted pages should be shown in menus, change the link of such pages to link to a redirection page:
02785 $this->changeLinksForAccessRestrictedPages($LD, $data, $this->mconf['target'], $this->mconf['forceTypeValue']);
02786
02787 $url = $LD['totalURL'];
02788 $target = $LD['target'];
02789 }
02790 $codeLines.="\n".$var.$count."=".$menuName.".add(".$parent.",".$prev.",0,".t3lib_div::quoteJSvalue($title, true).",".t3lib_div::quoteJSvalue($GLOBALS['TSFE']->baseUrlWrap($url), true).",".t3lib_div::quoteJSvalue($target, true).");";
02791 // If the active one should be chosen...
02792 $active = ($levelConf['showActive'] && $data['uid'] == $this->tmpl->rootLine[$count]['uid']);
02793 // If the first item should be shown
02794 $first = (!$c && $levelConf['showFirst']);
02795 // do it...
02796 if ($active || $first) {
02797 if ($count==1) {
02798 $codeLines.="\n".$menuName.".openID = ".$var.$count.";";
02799 } else {
02800 $codeLines.="\n".$menuName.".entry[".$parent."].openID = ".$var.$count.";";
02801 }
02802 }
02803 // Add submenu...
02804 $codeLines.=$addLines;
02805
02806 $prev=$var.$count;
02807 $c++;
02808 }
02809 }
02810 }
02811 if ($this->mconf['firstLabelGeneral'] && !$levelConf['firstLabel']) {
02812 $levelConf['firstLabel'] = $this->mconf['firstLabelGeneral'];
02813 }
02814 if ($levelConf['firstLabel'] && $codeLines) {
02815 $codeLines.= chr(10).$menuName.'.defTopTitle['.$count.'] = '.t3lib_div::quoteJSvalue($levelConf['firstLabel'], true).';';
02816 }
02817 return $codeLines;
02818 }
02819 }
02820
02821
02822 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_menu.php']) {
02823 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_menu.php']);
02824 }
02825
02826 ?>