source: tags/7.0/templates/base/scripts/BxBaseMenu.php @ 15581

Last change on this file since 15581 was 15581, checked in by Anton Lesnikov, 4 years ago

Ticket #2623

File size: 30.7 KB
Line 
1<?php
2
3/***************************************************************************
4*                            Dolphin Smart Community Builder
5*                              -------------------
6*     begin                : Mon Mar 23 2006
7*     copyright            : (C) 2007 BoonEx Group
8*     website              : http://www.boonex.com
9* This file is part of Dolphin - Smart Community Builder
10*
11* Dolphin is free software; you can redistribute it and/or modify it under
12* the terms of the GNU General Public License as published by the
13* Free Software Foundation; either version 2 of the
14* License, or  any later version.
15*
16* Dolphin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
17* without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18* See the GNU General Public License for more details.
19* You should have received a copy of the GNU General Public License along with Dolphin,
20* see license.txt file; if not, write to marketing@boonex.com
21***************************************************************************/
22
23bx_import('BxDolMenu');
24
25class BxBaseMenu extends BxDolMenu {
26    var $iElementsCntInLine;
27
28    var $sSiteUrl;
29
30    var $iJumpedMenuID;
31
32    var $sCustomSubIconUrl;
33    var $sCustomSubHeader;
34    var $sCustomActions;
35
36    var $sBreadCrumb;
37
38    var $bDebugMode;
39   
40    var $sWidth;
41
42    function BxBaseMenu() {
43        BxDolMenu::BxDolMenu();
44        $this->iElementsCntInLine = (int)getParam('nav_menu_elements_on_line_' . (isLogged() ? 'usr' : 'gst'));
45       
46        $this->sSiteUrl = BX_DOL_URL_ROOT;
47        $this->iJumpedMenuID = 0;
48        $this->sCustomSubIconUrl = '';
49        $this->sCustomSubHeader = '';
50        $this->sCustomActions = '';
51
52        $this->sBreadCrumb = '';
53
54        $this->bDebugMode = false;
55       
56        $this->sWidth = $GLOBALS['oSysTemplate']->getPageWidth();
57    }
58
59    function setCustomSubIconUrl($sCustomSubIconUrl) {
60        $this->sCustomSubIconUrl = $sCustomSubIconUrl;
61    }
62
63    function setCustomSubHeader($sCustomSubHeader) {
64        $this->sCustomSubHeader = $sCustomSubHeader;
65    }
66
67    function setCustomSubActions2($aCustomActions) {
68        if (is_array($aCustomActions) && count($aCustomActions) > 0) {
69            $sActions = '';
70            foreach ($aCustomActions as $iID => $aCustomAction) {
71                $sTitle = $sLink = $sIcon = '';
72                $sTitle = $aCustomAction['title'];
73                $sLink = $aCustomAction['url'];
74                $sIcon = $aCustomAction['icon'];
75
76                $sActions .= <<<EOF
77<div class="button_wrapper" style="width:48%;margin-right:1%;margin-left:1%;" onclick="window.open ('{$sLink}','_self');">
78    <img alt="{$sTitle}" src="{$sIcon}" style="float:left;" />
79    <input class="form_input_submit" type="submit" value="{$sTitle}" class="menuLink" />
80    <div class="button_wrapper_close"></div>
81</div>
82EOF;
83            }
84
85            $sCustomActions = <<<EOF
86<div class="menu_user_actions">
87    <div class="actionsBlock">
88        {$sActions}
89    </div>
90</div>
91EOF;
92
93            $this->sCustomActions = $sCustomActions;
94        }
95    }
96
97    /*
98    * Generate actions in submenu place at right.
99    */
100    function setCustomSubActions(&$aKeys, $sActionsType, $bSubMenuMode = true) {
101       
102        if (!$sActionsType) {
103            $this->sCustomActions = '';
104            return;
105        }
106
107        // prepare all needed keys
108        $aKeys['url']           = $this->sSiteUrl;
109        $aKeys['window_width']  = $this->oTemplConfig->popUpWindowWidth;
110        $aKeys['window_height'] = $this->oTemplConfig->popUpWindowHeight;
111        $aKeys['anonym_mode']   = $this->oTemplConfig->bAnonymousMode;
112
113        // $aKeys['member_id']      = $iMemberID;
114        // $aKeys['member_pass']    = getPassword($iMemberID);
115
116        //$GLOBALS['oFunctions']->iDhtmlPopupMenu = 1;
117        $sActions = $GLOBALS['oFunctions']->genObjectsActions($aKeys, $sActionsType, $bSubMenuMode);
118        $this->sCustomActions = '<div class="menu_user_actions">' . $sActions . '</div>';
119    }
120
121    /*
122    * Generate navigation menu source
123    */
124    function getCode() {
125
126        if (isset($GLOBALS['bx_profiler'])) $GLOBALS['bx_profiler']->beginMenu('Main Menu');
127
128        $this->getMenuInfo();
129
130        $this->genTopHeader();
131        $this->genTopItems();
132        $this->genTopFooter();
133
134        if (!defined('BX_INDEX_PAGE')) {
135            $this->genSubContHeader();
136
137            $this->genSubMenus();
138            $this->genSubContFooter();
139        }
140
141        if (isset($GLOBALS['bx_profiler'])) $GLOBALS['bx_profiler']->endMenu('Main Menu');
142
143        return $this->sCode;
144    }
145
146    /*
147    * Generate top header part
148    */
149    function genTopHeader() {
150        $iCurrent = $this->checkShowCurSub() ? 0 : $this->aMenuInfo['currentTop'];
151        $this->sCode .= '<table class="topMenu" cellpadding="0" cellspacing="0" style="width:' . $this->sWidth . '"><tr>';
152    }
153
154    /*
155    * Generate top menu elements
156    */
157    function genTopItems() {
158        $iCounter = 0;
159        foreach( $this->aTopMenu as $iItemID => $aItem ) {
160            if( $aItem['Type'] != 'top' )
161                continue;
162            if( !$this->checkToShow( $aItem ) )
163                continue;
164            if ($aItem['Caption'] == "{profileNick}" && $this->aMenuInfo['profileNick']=='') continue;
165
166            $bActive = ( $iItemID == $this->aMenuInfo['currentTop'] );
167
168            if ($bActive && $iCounter >= $this->iElementsCntInLine) {
169                $this->iJumpedMenuID = $iItemID;
170                break;
171            }
172            $iCounter++;
173        }
174
175        $iCounter = 0;
176        foreach( $this->aTopMenu as $iItemID => $aItem ) {
177            if( $aItem['Type'] != 'top' )
178                continue;
179           
180            if( !$this->checkToShow( $aItem ) )
181                continue;
182           
183            //generate
184            list( $aItem['Link'] ) = explode( '|', $aItem['Link'] );
185
186            $aItem['Link']    = $this->replaceMetas( $aItem['Link'] );
187            $aItem['Onclick'] = $this->replaceMetas( $aItem['Onclick'] );
188
189            $bActive = ( $iItemID == $this->aMenuInfo['currentTop'] );
190            $bActive = ($aItem['Link']=='index.php' && $this->aMenuInfo['currentTop']==0) ? true : $bActive;
191
192            if ($this->bDebugMode) print $iItemID . $aItem['Caption'] . '__' . $aItem['Link'] . '__' . $bActive . '<br />';
193
194            $isBold = ($aItem['Icon'] != '') ? true : false;
195            $sImage = ($aItem['Icon'] != '') ? $aItem['Icon'] : $aItem['Picture'];
196
197            //Draw jumped element
198            if ($this->iJumpedMenuID>0 && $this->iElementsCntInLine == $iCounter) {               
199                $aItemJmp = $this->aTopMenu[$this->iJumpedMenuID];
200                list( $aItemJmp['Link'] ) = explode( '|', $aItemJmp['Link'] );
201                $aItemJmp['Link']    = $this->replaceMetas( $aItemJmp['Link'] );
202                $aItemJmp['Onclick'] = $this->replaceMetas( $aItemJmp['Onclick'] );
203
204                $bJumpActive = ( $this->iJumpedMenuID == $this->aMenuInfo['currentTop'] );
205                $bJumpActive = ($aItemJmp['Link']=='index.php' && $this->aMenuInfo['currentTop']==0) ? true : $bJumpActive;
206
207                $this->genTopItem(_t($aItemJmp['Caption']), $aItemJmp['Link'], $aItemJmp['Target'], $aItemJmp['Onclick'], $bJumpActive, $this->iJumpedMenuID, $isBold);
208
209                if ($this->bDebugMode) print '<br />pre_pop: ' . $this->iJumpedMenuID . $aItemJmp['Caption'] . '__' . $aItemJmp['Link'] . '__' . $bJumpActive . '<br /><br />';
210            }
211
212            if ($this->iElementsCntInLine == $iCounter) {
213                $this->GenMoreElementBegin();
214
215                if ($this->bDebugMode) print '<br />more begin here ' . '<br /><br />';
216            }
217
218            if ($this->iJumpedMenuID>0 && $iItemID == $this->iJumpedMenuID) {
219                //continue;
220                if ($this->bDebugMode) print '<br />was jump out here ' . '<br /><br />';
221            } else {
222                if ($this->iElementsCntInLine > $iCounter) {
223                    $this->genTopItem(_t($aItem['Caption']), $aItem['Link'], $aItem['Target'], $aItem['Onclick'], $bActive, $iItemID, $isBold, $sImage);
224                } else {
225                    $this->genTopItemMore(_t($aItem['Caption']), $aItem['Link'], $aItem['Target'], $aItem['Onclick'], $bActive, $iItemID);
226                }
227            }
228           
229            $iCounter++;
230        }
231
232        if ($this->iElementsCntInLine < $iCounter) {
233            $this->GenMoreElementEnd();
234        }
235    }
236
237    /*
238    * Generate top footer part
239    */
240    function genTopFooter() {
241        global $oSysTemplate;
242
243        $sResult = '';
244        $aFunctions = array('genMoreLanguagesElement', 'genMoreTemplatesElement', 'genSearchElement');
245        foreach($aFunctions as $sFunction) {
246            $aVariables = $this->$sFunction();
247            if(!empty($aVariables)) {
248                $aVariables['right'] = empty($sResult) ? 'right' : '';
249                $sResult = $oSysTemplate->parseHtmlByName('navigation_menu_item.html', $aVariables) . $sResult;
250            }
251        }       
252
253        $this->sCode .= $sResult . "</tr></table>";
254    }
255
256    /*
257    * Generate search element
258    */
259    function genSearchElement() {
260        $sSearchC = process_line_output(_t('_Search'));
261        ob_start();
262?>
263<script language="javascript">
264$(document).ready( function() {
265    $('#keyword').blur(function() {
266            $('#keyword').removeClass();
267            $('#keyword').addClass('input_main');
268            if ('' == $('#keyword').val())
269                $('#keyword').val('<?= $sSearchC ?>');
270        }
271    );
272    $('#keyword').focus(function() {
273            $('#keyword').removeClass();
274            $('#keyword').addClass('input_focus');
275            if ('<?= $sSearchC ?>' == $('#keyword').val())
276                $('#keyword').val('');
277        }
278    );
279});
280</script>
281<li>
282    <div id="gse_search">
283        <form action="searchKeyword.php" method="get" name="SearchForm">
284            <input type="text" name="keyword" id="keyword" value="<?= $sSearchC ?>" class="input_main"/>
285        </form>
286    </div>
287    <div class="clear_both"></div>
288</li>
289<?
290        $sSearchElement = ob_get_clean();
291
292        return array (
293            'icon_url' => getTemplateIcon('tm_item_search.png'),
294            'element_content' => $sSearchElement
295        );
296    }   
297
298    /*
299    * Generate templates element
300    */
301    function genMoreTemplatesElement(){
302        if(!getParam("enable_template")) 
303            return;
304
305        $aExistedTemplates = get_templates_array();
306        if(count($aExistedTemplates) <= 1) 
307            return;
308
309        $sCurTemplate = strlen($_GET['skin']) ? $_GET['skin'] : $_COOKIE['skin'];
310
311        $sTemplateElement = '';
312        foreach ($aExistedTemplates as $sTemplateID => $sTemplateVal) {
313            $sIActiveClass = ($sCurTemplate == $sTemplateID) ? ' active' : '';
314
315            $sTemplateUrl = '';
316            if ($sCurTemplate == $sTemplateID) {
317                $sTemplateUrl = 'javascript: void(0)';
318            } else {
319                if (defined('BX_PROFILE_PAGE')) {
320                    global $profileID;
321                    $sTemplateUrl = getProfileLink($profileID) . '&skin='. $sTemplateID;
322                } else {
323                    $sGetTransfer = bx_encode_url_params($_GET, array('skin'));
324                    $sTemplateUrl = bx_html_attribute($_SERVER['PHP_SELF']) . '?' . $sGetTransfer . 'skin='. $sTemplateID;
325                }
326            }
327
328            //$sIOnclick = "window.open('{$sTemplateUrl}','_self');"; // old version
329            $sTemplateElement .= '<li><a href="' . $sTemplateUrl . '" class="button more_ntop_element' . $sIActiveClass . '">'.$sTemplateVal.'</a>';
330        }
331
332        if($sTemplateElement == '')
333            return;
334
335        return array(
336            'icon_url' => getTemplateIcon('tm_item_templates.png'),
337            'element_content' => $sTemplateElement
338        );
339    }
340
341    /*
342    * Generate languages element
343    */
344    function genMoreLanguagesElement(){
345        $aExistedLanguages = getLangsArr();
346        if(count($aExistedLanguages) <= 1) return;
347
348        $sCurLanguage = strlen($_GET['lang']) ? $_GET['lang'] : $_COOKIE['lang'];
349
350        $sLanguageElement = '';
351        foreach ($aExistedLanguages as $sLanguageID => $sLanguageVal) {
352            $sIActiveClass = ($sCurLanguage == $sLanguageID) ? ' active' : '';
353            $sLanguageUrl = '';
354            if ($sCurLanguage == $sLanguageID) {
355                $sLanguageUrl = 'javascript: void(0)';
356            } else {
357               
358                $sGetTransfer = bx_encode_url_params($_GET, array('lang'));
359                $sLanguageUrl = bx_html_attribute($_SERVER['PHP_SELF']) . '?' . $sGetTransfer . 'lang='. $sLanguageID;
360            }
361
362            $sLanguageElement .= '<li><a href="' . $sLanguageUrl . '" value="' . $sLanguageVal . '" class="button more_ntop_element' . $sIActiveClass . '">'.$sLanguageVal.'</a>';
363        }
364
365        if ($sLanguageElement == '') return;
366
367        return array(
368            'icon_url' => getTemplateIcon('tm_item_languages.png'),
369            'element_content' => $sLanguageElement
370        );
371    }
372
373    /*
374    * Generate sub container header
375    */
376    function genSubContHeader() {
377            $this->sCode .= '
378                <div class="clear_both"></div>
379                <div class="subMenusContainer" style="width:' . $this->sWidth . ';">';
380    }
381
382    /*
383    * Generate sub container footer
384    */
385    function genSubContFooter() {
386            $this->sCode .= '
387                </div>';
388    }
389
390    /*
391    * Generate sub menu elements
392    */
393    function genSubMenus() {
394        foreach( $this->aTopMenu as $iTItemID => $aTItem ) {
395            if( $aTItem['Type'] != 'top' && $aTItem['Type'] !='system')
396                continue;
397
398            if( !$this->checkToShow( $aTItem ) )
399                continue;
400
401            if( $this->aMenuInfo['currentTop'] == $iTItemID && $this->checkShowCurSub() )
402                $sDisplay = 'block';
403            else {
404                $sDisplay = 'none';
405                if ($aTItem['Caption']=='_Home' && $this->aMenuInfo['currentTop']==0)
406                    $sDisplay = 'block';
407            }
408
409            $sCaption = _t( $aTItem['Caption'] );
410            $sCaption = $this->replaceMetas($sCaption);
411
412            //generate
413            if ($sDisplay == 'block') {
414                $sPicture = $aTItem['Picture'];
415
416                $iFirstID = $this->genSubFirstItem( $iTItemID );
417
418                $this->genSubHeader( $iTItemID, $iFirstID, $sCaption, $sDisplay, $sPicture );
419                $this->genSubItems( $iTItemID );
420                $this->genSubFooter();
421            }
422        }
423    }
424
425    /*
426    * Generate sub items of sub menu elements
427    */
428    function genSubItems( $iTItemID = 0 ) {
429        if( !$iTItemID )
430            $iTItemID = $this->aMenuInfo['currentTop'];
431
432        $sSubItems = '';
433        foreach( $this->aTopMenu as $iItemID => $aItem ) {
434            if( $aItem['Type'] != 'custom' )
435                continue;
436            if( $aItem['Parent'] != $iTItemID )
437                continue;
438            if( !$this->checkToShow( $aItem ) )
439                continue;
440
441            //generate
442            list( $aItem['Link'] ) = explode( '|', $aItem['Link'] );
443
444            $aItem['Link']    = $this->replaceMetas( $aItem['Link'] );
445            $aItem['Onclick'] = $this->replaceMetas( $aItem['Onclick'] );
446
447            $bActive = ( $iItemID == $this->aMenuInfo['currentCustom'] );
448
449            $sSubItems .= $this->genSubItem( _t( $aItem['Caption'] ), $aItem['Link'], $aItem['Target'], $aItem['Onclick'], $bActive );
450        }
451
452        $this->sCode .= ($sSubItems=='') ? '<div class="subMenuContainerEmpty"></div>' : <<<EOF
453            <div class="subMenuContainer">
454                <table cellspacing="0" cellpadding="0"><tr>
455                    {$sSubItems}
456                </tr></table>
457            </div>
458EOF;
459    }
460
461    /*
462    * Generate top menu elements
463    */
464    function genTopItem($sText, $sLink, $sTarget, $sOnclick, $bActive, $iItemID, $isBold = false, $sPicture = '') {
465       
466        $sActiveStyle = ($bActive) ? ' id="tm_active"' : '';
467
468        if (!$bActive) {
469            $sOnclick = $sOnclick ? ( ' onclick="' . $sOnclick . '"' ) : '';
470            $sTarget  = $sTarget  ? ( ' target="'  . $sTarget  . '"' ) : '';
471        }
472
473        $sLink = (strpos($sLink, 'http://') === false && !strlen($sOnclick)) ? $this->sSiteUrl . $sLink : $sLink;
474
475        $sMoreIcon = getTemplateIcon('tm_sitem_down.gif');
476
477        $sSubMenu = $this->getAllSubMenus($iItemID);
478
479        $sBoldStyle = ($isBold) ? 'style="font-weight:bold;"' : '';
480
481        $sImgTabStyle = $sPictureRep = '';
482        if ($isBold && $sPicture != '') {
483            $sPicturePath = getTemplateIcon($sPicture);
484            $sPictureRep = '<img src="' . $sPicturePath . '" />';
485
486            $sText = '';
487            $sImgTabStyle = 'style="width:38px;"';
488        }
489
490        $sMainSubs = ($sSubMenu=='') ? '' : <<<EOF
491    <!--[if lte IE 6]><table id="mmm"><tr><td><![endif]-->
492    <ul class="sub main_elements">
493        {$sSubMenu}
494        <li class="li_last_round">&nbsp;</li>
495    </ul>
496    <!--[if lte IE 6]></td></tr></table></a><![endif]-->
497EOF;
498
499        $this->sCode .= <<<EOF
500<td class="top" {$sActiveStyle} {$sImgTabStyle}>
501    <a href="{$sLink}" {$sOnclick} {$sTarget} class="top_link"><span class="down" {$sBoldStyle}>{$sPictureRep}{$sText}</span>
502    <!--[if gte IE 7]><!--></a><!--<![endif]-->
503    <div style="position:relative;display:block;">{$sMainSubs}</div>
504</td>
505EOF;
506    }
507
508    /*
509    * Get parent of submenu element
510    */
511    function genSubFirstItem( $iTItemID = 0 ) {
512        if( !$iTItemID )
513            $iTItemID = $this->aMenuInfo['currentTop'];
514
515        foreach( $this->aTopMenu as $iItemID => $aItem ) {
516            if( $aItem['Type'] != 'custom' )
517                continue;
518           
519            if( $aItem['Parent'] != $iTItemID )
520                continue;
521           
522            if( !$this->checkToShow( $aItem ) )
523                continue;
524           
525            return $iItemID;
526        }
527    }
528
529    /*
530    * Generate header for sub items of sub menu elements
531    */
532    function genSubHeader( $iTItemID, $iFirstID, $sCaption, $sDisplay, $sPicture = '' ) {
533        $sLoginSection = $sSubElementCaption = $sProfStatusMessage = $sProfStatusMessageWhen = $sProfileActions = '';
534        $sCaptionWL = $sProfStatusMessageEl = $sMiddleImg = '';
535
536        if ($this->aMenuInfo['currentCustom'] == 0 && $iFirstID > 0) $this->aMenuInfo['currentCustom'] = $iFirstID;
537        //comment need when take header for profile page
538        if ($this->sCustomSubHeader == '' && $this->aMenuInfo['currentCustom'] > 0) {
539            $sSubCapIcon = getTemplateIcon('_submenu_capt_right.gif');
540            $sSubElementCaption = _t($this->aTopMenu[$this->aMenuInfo['currentCustom']]['Caption']);
541
542            $sCustomPic = $this->aTopMenu[$this->aMenuInfo['currentCustom']]['Picture'];
543            $sPicture = ($sCustomPic != '') ? $sCustomPic : $sPicture;
544
545            $sMiddleImg = '<img src="'.$sSubCapIcon.'" />';
546            $sSubElementCaption = <<<EOF
547<font style="font-weight:normal;">{$sSubElementCaption}</font>
548EOF;
549        }
550
551        if(!isMember())
552            $sLoginSection = $GLOBALS['oSysTemplate']->ParseHtmlByName('login_join.html', array());
553
554        /////Picture////////
555        if ($this->sCustomSubHeader == '' && !empty($this->aMenuInfo['profileID'])) {
556            $sPictureEl = get_member_icon($this->aMenuInfo['profileID'], 'left');
557
558            $sSubCapIcon = getTemplateIcon('_submenu_capt_right.gif');
559            $aProfInfo = getProfileInfo($this->aMenuInfo['profileID']);
560            $sProfStatusMessage = process_line_output($aProfInfo['UserStatusMessage']);
561            $sRealWhen = ($aProfInfo['UserStatusMessageWhen'] != 0) ? $aProfInfo['UserStatusMessageWhen'] : time();
562            $sProfStatusMessageWhen = defineTimeInterval($sRealWhen);
563
564            $isButtonNotify = false;
565            if (defined('BX_PROFILE_PAGE') && $this->aMenuInfo['memberID'] == $this->aMenuInfo['profileID']) {
566                $isButtonNotify = true;
567
568                $sProfStatusMessage = ($sProfStatusMessage=='') ? _t('_Click_here_to_update_your_status') : $sProfStatusMessage . '<font style="color:#999;font-size:9px;margin-left:5px;">'.$sProfStatusMessageWhen.'</font>';
569                $sProfStatusMessage = <<<EOF
570<script language="JavaScript" type="text/javascript">
571    function InloadStatusMessageEl() {
572        $('#inloadedStatusMess').load("change_status.php?action=get_prof_status_mess");
573        $('#StatusMessage').hide();
574    }
575</script>
576
577<div id="StatusMessage" onclick="InloadStatusMessageEl(); return false;">{$sProfStatusMessage}</div>
578<div id="inloadedStatusMess" style="float:left;"></div>
579EOF;
580            } elseif ($sProfStatusMessage != '') {
581
582                $sProfStatusMessage = <<<EOF
583<div id="StatusMessage">{$sProfStatusMessage}</div>
584<div id="inloadedStatusMess" style="float:left;"></div>
585EOF;
586
587                $sProfileActions = $this->getProfileActions($aProfInfo, $this->aMenuInfo['memberID']);
588            }
589
590            if ($sProfStatusMessageWhen != '' && $sProfStatusMessage != '') {
591                $sProfStatusMessageEl = $GLOBALS['oFunctions']->genNotifyMessage($sProfStatusMessage, 'left', $isButtonNotify);
592            }
593        } else {
594            $sPicturePath = (isset($sPicture) && $sPicture!='') ? getTemplateIcon($sPicture) : '';
595            $sPictureEl = ($sPicturePath == '') ? '' : <<<EOF
596<img class="img_submenu" src="{$sPicturePath}" alt="" />
597EOF;
598        }
599
600        $sPictureEl = ($this->sCustomSubIconUrl == '') ? $sPictureEl : <<<EOF
601<img class="img_submenu" src="{$this->sCustomSubIconUrl}" alt="" />
602EOF;
603        /////Picture end////////
604
605        if (true) { // $sSubElementCaption != '') {
606            $aAllSubMainLinks = array();
607            $sSubMainLinks = '';
608            if (!empty($this->aTopMenu[$iFirstID]['Link'])) {
609                list($aAllSubMainLinks) = explode('|', $this->aTopMenu[$iFirstID]['Link']);
610                $sSubMainLinks = $this->replaceMetas($aAllSubMainLinks);
611
612                if (empty($sSubMainLinks)) {
613                    //try define the parent menu's item url
614                    $sSubMainLinks = $this -> sSiteUrl . $this -> aTopMenu[ $this -> aMenuInfo['currentTop'] ]['Link'];
615                }
616
617                $sSubMainOnclick = $this->replaceMetas($this->aTopMenu[$iFirstID]['Onclick']);
618            }
619
620            $sSubMainOnclick = !empty($sSubMainOnclick) ? ' onclick="' . $sSubMainOnclick . '"' : '';
621
622            $sCaption = <<<EOF
623<a href="{$sSubMainLinks}" {$sSubMainOnclick}>{$sCaption}</a>
624EOF;
625            $sCaptionWL = $sCaption;
626        }
627
628        if ($this->sCustomSubHeader != '') {
629            $sCaptionWL = $this->sCustomSubHeader;
630        }
631
632        if ($this->sCustomActions != '') {
633            $sProfileActions = $this->sCustomActions;
634        }
635
636        // array of keys
637        $aTemplateKeys = array (
638            'submenu_id'      => $iTItemID,
639            'display_value'   => $sDisplay,
640            'picture'         => $sPictureEl,
641            'sub_caption'     => $sCaptionWL,
642            'profile_status'  => $sProfStatusMessageEl,
643            'login_section'   => $sLoginSection,
644            'profile_actions' => $sProfileActions,
645            'injection_title_zone' => $sProfileActions,
646        );
647        $this->sCode .= $GLOBALS['oSysTemplate']->parseHtmlByName('navigation_menu_sub_header.html', $aTemplateKeys);
648
649        $aBreadcrumb = array();
650
651        if($iFirstID > 0 && $sCaption != '')
652            $aBreadcrumb[] = $sCaption;     
653        if($sSubElementCaption != '')
654            $aBreadcrumb[] = $sSubElementCaption;
655
656        $this->sBreadCrumb = $this->genBreadcrumb($aBreadcrumb);
657    }
658
659    function getProfileActions($p_arr, $iMemberID) {
660        $iViewedMemberID = (int)$p_arr['ID'];
661
662        if( (!$iMemberID  or !$iViewedMemberID) or ($iMemberID == $iViewedMemberID) )
663            return null;
664
665        // prepare all needed keys
666        $p_arr['url']           = $this->sSiteUrl;
667        $p_arr['window_width']  = $this->oTemplConfig->popUpWindowWidth;
668        $p_arr['window_height'] = $this->oTemplConfig->popUpWindowHeight;
669        $p_arr['anonym_mode']   = $this->oTemplConfig->bAnonymousMode;
670
671        $p_arr['member_id']     = $iMemberID;
672        $p_arr['member_pass']   = getPassword( $iMemberID );
673
674        $GLOBALS['oFunctions']->iDhtmlPopupMenu = 1;
675        $sActions = $GLOBALS['oFunctions']->genObjectsActions($p_arr, 'Profile', true);
676        return '<div class="menu_user_actions">' . $sActions . '</div>';
677    }
678
679    function genSubItem( $sCaption, $sLink, $sTarget, $sOnclick, $bActive ) {
680        $sIcon1_a_l = getTemplateImage("tm_cm_item_left_act.png");     
681        $sIcon1_a_c = getTemplateImage("tm_cm_item_center_act.png");
682        $sIcon1_a_r = getTemplateImage("tm_cm_item_right_act.png");
683
684        $sSubItems = '';
685        if( !$bActive ) {
686            $sOnclick = $sOnclick ? ( ' onclick="' . $sOnclick . '"' ) : '';
687            $sTarget  = $sTarget  ? ( ' target="'  . $sTarget  . '"' ) : '';
688
689            if ( strpos( $sLink, 'http://' ) === false && !strlen($sOnclick) )
690                $sLink = $this->sSiteUrl . $sLink;
691
692                $sSubItems .= <<<EOF
693<td class="usual">
694    <div><a class="sublinks" href="{$sLink}" {$sTarget} {$sOnclick}>{$sCaption}</a></div>
695</td>
696EOF;
697            } else {
698                $sSubItems .= <<<EOF
699<td class="tabbed">
700    <table cellspacing="0" cellpadding="0"><tr>
701    <td><div style="background:url({$sIcon1_a_l}) no-repeat top left;width:9px;"></div></td>
702    <td><div style="background:url({$sIcon1_a_c}) repeat-x top center;">{$sCaption}</div></td>
703    <td><div style="background:url({$sIcon1_a_r}) no-repeat top right;width:9px;"></div></td>
704    </tr></table>
705</td>
706EOF;
707        }
708        return $sSubItems;
709    }
710
711    /*
712    * Generate footer for sub items of sub menu elements
713    */
714    function genSubFooter() {
715            $this->sCode .= <<<EOF
716    </div>
717</div>
718EOF;
719    }
720
721    function getAllSubMenus($iItemID, $bActive = false) {
722        $aMenuInfo = $this->aMenuInfo;
723
724        $ret = '';
725       
726        $aTTopMenu = $this->aTopMenu;
727
728        foreach( $aTTopMenu as $iTItemID => $aTItem ) {
729
730            if( !$this->checkToShow( $aTItem ) )
731                continue;
732
733            if ($iItemID == $aTItem['Parent']) {
734                //generate
735                list( $aTItem['Link'] ) = explode( '|', $aTItem['Link'] );
736
737                $aTItem['Link'] = str_replace( "{memberID}",    isset($aMenuInfo['memberID']) ? $aMenuInfo['memberID'] : '',    $aTItem['Link'] );
738                $aTItem['Link'] = str_replace( "{memberNick}",  isset($aMenuInfo['memberNick']) ? $aMenuInfo['memberNick'] : '',  $aTItem['Link'] );
739                $aTItem['Link'] = str_replace( "{memberLink}",  isset($aMenuInfo['memberLink']) ? $aMenuInfo['memberLink'] : '',  $aTItem['Link'] );
740
741                $aTItem['Link'] = str_replace( "{profileID}",   isset($aMenuInfo['profileID']) ? $aMenuInfo['profileID'] : '',   $aTItem['Link'] );
742                $aTItem['Onclick'] = str_replace( "{profileID}", isset($aMenuInfo['profileID']) ? $aMenuInfo['profileID'] : '',   $aTItem['Onclick'] );
743
744                $aTItem['Link'] = str_replace( "{profileNick}", isset($aMenuInfo['profileNick']) ? $aMenuInfo['profileNick'] : '', $aTItem['Link'] );
745                $aTItem['Onclick'] = str_replace( "{profileNick}", isset($aMenuInfo['profileNick']) ? $aMenuInfo['profileNick'] : '', $aTItem['Onclick'] );
746                                   
747                $aTItem['Link'] = str_replace( "{profileLink}", isset($aMenuInfo['profileLink']) ? $aMenuInfo['profileLink'] : '', $aTItem['Link'] );
748
749                $aTItem['Onclick'] = str_replace( "{memberID}", isset($aMenuInfo['memberID']) ? $aMenuInfo['memberID'] : '',    $aTItem['Onclick'] );
750                $aTItem['Onclick'] = str_replace( "{memberNick}",  isset($aMenuInfo['memberNick']) ? $aMenuInfo['memberNick'] : '',  $aTItem['Onclick'] );
751                $aTItem['Onclick'] = str_replace( "{memberPass}",  getPassword( isset($aMenuInfo['memberID']) ? $aMenuInfo['memberID'] : ''),  $aTItem['Onclick'] );
752
753                $sElement = $this->getCustomMenuItem( _t( $aTItem['Caption'] ), $aTItem['Link'], $aTItem['Target'], $aTItem['Onclick'], ( $iTItemID == $aMenuInfo['currentCustom'] ) );
754
755                $ret .= $sElement;
756            }
757        }
758
759        return $ret;
760    }
761
762    function getCustomMenuItem($sText, $sLink, $sTarget, $sOnclick, $bActive, $bSub = false) {
763        //$sIActiveStyles = ($bActive) ? 'color:#333;font-weight:bold;' : '';
764        $sIActiveClass = ($bActive) ? ' active' : '';
765        $sITarget = (strlen($sTarget)) ? $sTarget : '_self';
766        $sILink = (strpos($sLink, 'http://') === false && !strlen($sOnclick)) ? $this->sSiteUrl . $sLink : $sLink;
767        //$sIOnclick = (strlen($sOnclick)) ? $sOnclick : "window.open('{$sILink}','{$sITarget}');"; //old version
768        $sIOnclick = (strlen($sOnclick)) ? 'onclick="'.$sOnclick.'"' : '';
769
770        return <<<EOF
771<li>
772    <a href="{$sILink}" target="{$sITarget}" {$sIOnclick} class="button more_ntop_element{$sIActiveClass}">{$sText}</a>
773</li>
774EOF;
775    }
776
777    function GenMoreElementBegin() {
778        $sMoreIcon = getTemplateIcon("tm_sitem_down.gif");
779
780        $sMoreMainIcon = getTemplateIcon('tm_item_more.png');
781
782        $this->sCode .= <<<EOF
783<td class="top" style="width:38px;">
784    <a href="javascript: void(0);" onclick="void(0);" class="top_link">
785        <span class="down"><img src="{$sMoreMainIcon}"/></span>
786        <!--[if gte IE 7]><!--></a><!--<![endif]-->
787        <!--[if lte IE 6]><table id="mmm"><tr><td><![endif]-->
788        <div style="position:relative;display:block;">
789        <ul class="sub">
790EOF;
791    }
792
793    function genTopItemMore($sText, $sLink, $sTarget, $sOnclick, $bActive, $iItemID) {
794        //$sIActiveStyles = ($bActive) ? 'color:#333;font-weight:bold;' : '';
795        $sIActiveClass = ($bActive) ? ' active' : '';
796        $sITarget = (strlen($sTarget)) ? $sTarget : '_self';
797        $sILink = (strpos($sLink, 'http://') === false && !strlen($sOnclick)) ? $this->sSiteUrl . $sLink : $sLink;
798        //$sIOnclick = (strlen($sOnclick)) ? $sOnclick : "window.open('{$sILink}','{$sITarget}');"; //old version
799        $sIOnclick = (strlen($sOnclick)) ? 'onclick="'.$sOnclick.'"' : '';
800
801        $sSubMenu = $this->getAllSubMenus($iItemID);
802
803        $sActiveStyle = ($bActive) ? 'active' : '';
804        $sActiveVisibleStyle = ($bActive) ? 'display:block;' : 'display:none;';
805        $sSpacerIcon = getTemplateIcon( 'spacer.gif' );
806
807        $this->iJSTempCnt++;
808
809        if ($sSubMenu == '') {
810            $this->sCode .= <<<EOF
811<li class="{$sActiveStyle}">
812    <a href="{$sILink}" {$sIOnclick} value="{$sText}" class="button more_ntop_element{$sIActiveClass}">{$sText}</a>
813</li>
814EOF;
815        } else {
816            $this->sCode .= <<<EOF
817<li class="{$sActiveStyle}">
818    <span class="more_down_tab_noimg" onclick="ChangeMoreMenu({$this->iJSTempCnt});return false;">
819        <img class="more_right" src="{$sSpacerIcon}" id="more_img_{$this->iJSTempCnt}" />
820    </span>
821    <a href="{$sILink}" {$sIOnclick} value="{$sText}" class="button more_top_element{$sIActiveClass}" style="margin-left:0px;">{$sText}</a>
822    <div class="clear_both"></div>
823       
824    <ul style="{$sActiveVisibleStyle}" id="ul{$this->iJSTempCnt}" class="more_sub">
825        {$sSubMenu}
826    </ul>   
827</li>
828EOF;
829        }
830        $this->iJSTempCnt++;
831    }
832
833    function GenMoreElementEnd() {
834        $this->sCode .= <<<EOF
835            <li class="li_last_round">&nbsp;</li>
836        </ul>
837    </div>
838    <div class="clear_both"></div>
839    <!--[if lte IE 6]></td></tr></table></a><![endif]-->
840</td>
841EOF;
842    }
843   
844    /*
845     * param is array of Path like
846     * $aPath[0] = '<a href="">XXX</a>'
847     * $aPath[1] = '<a href="">XXX1</a>'
848     * $aPath[2] = 'XXX2'
849     */
850    function genBreadcrumb($aPath = array()) {
851        $sRootItem = '<a href="' . $this->sSiteUrl . '">' . _t('_Home') . '</a>';
852
853        if (!empty($this->aCustomBreadcrumbs)) {
854            $a = array();
855            foreach ($this->aCustomBreadcrumbs as $sTitle => $sLink)
856                if ($sTitle)
857                    $a[] = $sLink ? '<a href="' . $sLink . '">' . $sTitle . '</a>' : $sTitle;
858            $aPath = array_merge(array($sRootItem), $a);
859        } elseif(!is_array($aPath) || empty($aPath)) {
860            $aPath = array($sRootItem);
861        } else {
862            $aPath = array_merge(array($sRootItem), $aPath);
863        }
864
865        //define current url for single page (not contain any child pages)
866        if( $this -> aMenuInfo['currentTop'] != -1 && count($aPath) == 1) {
867            $aPath[] =  _t($this -> aTopMenu[ $this -> aMenuInfo['currentTop'] ]['Caption']);
868        }
869
870        //--- Get breadcrumb path(left side) ---//
871        $sDivider = '<img class="bc_divider" src="' . getTemplateImage('bc_divider.png') . '" />';
872        $aPathLinks = array();
873        foreach($aPath as $sLink)
874            $aPathLinks[] = '<div class="bc_unit">' . $sLink . '</div>';
875        $sPathLinks = implode($sDivider, $aPathLinks);
876       
877        //--- Get additional links(right side) ---//
878        $sAddons = "";
879        if(isMember()) {
880            $aProfile = getProfileInfo();           
881
882            $sAddons = _t('_Hello member', $aProfile['NickName']);
883            $sAddons .= ' <a href="' . $this->sSiteUrl . 'member.php">' . _t('_sys_breadcrumb_account') . '</a>';
884            $sAddons .= ' <a href="' . $this->sSiteUrl . 'logout.php">' . _t('_sys_breadcrumb_logout') . '</a>';
885        }
886        else {
887            $sAddons = _t('_Hello member', _t('_sys_breadcrumb_guest'));
888            $sAddons .= ' <a href="' . $this->sSiteUrl . 'join.php">' . _t('_sys_breadcrumb_join') . '</a>';
889            $sAddons .= ' <a href="javascript:void(0)" onclick="showPopupLoginForm(); return false;">' . _t('_sys_breadcrumb_login') . '</a>';
890        }
891
892        return '<div class="breadcrumb"><div class="bc_open">&nbsp;</div>' . $sPathLinks . '<div class="bc_addons">' . $sAddons . '</div><div class="bc_close">&nbsp;</div></div>';
893    }
894}
895?>
Note: See TracBrowser for help on using the repository browser.