1: <?php
  2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14: 
 15: 
 16: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
 17: 
 18: cInclude('includes', 'functions.api.string.php');
 19: cInclude('includes', 'functions.api.images.php');
 20: 
 21:  22:  23:  24:  25:  26: 
 27: class cGuiNavigation {
 28: 
 29:      30:  31:  32: 
 33:     public $data = array();
 34: 
 35:      36:  37:  38:  39: 
 40:     public function __construct() {
 41:         global $cfg;
 42: 
 43:         $this->xml = new cXmlReader();
 44:         $this->plugxml = new cXmlReader();
 45: 
 46:         
 47:         if ($this->xml->load($cfg['path']['xml'] . "navigation.xml") == false) {
 48:             throw new cException('Unable to load any XML language file');
 49:         }
 50:     }
 51: 
 52:      53:  54:  55:  56:  57:  58:  59:  60:  61:  62: 
 63:     public function getName($location) {
 64:         global $cfg, $belang;
 65: 
 66:         
 67:         
 68:         if (strstr($location, ';')) {
 69:             $locs = explode(';', $location);
 70:             $file = trim($locs[0]);
 71:             $xpath = trim($locs[1]);
 72: 
 73:             $filepath = explode('/', $file);
 74:             $counter = count($filepath) - 1;
 75: 
 76:             if ($filepath[$counter] == '') {
 77:                 unset($filepath[$counter]);
 78:                 $counter--;
 79:             }
 80: 
 81:             if (strstr($filepath[$counter], '.xml')) {
 82:                 $filename = $filepath[$counter];
 83:                 unset($filepath[$counter]);
 84:                 $counter--;
 85:             }
 86: 
 87:             $filepath[($counter + 1)] = '';
 88: 
 89:             $filepath = implode('/', $filepath);
 90: 
 91:             if ($this->plugxml->load($cfg['path']['plugins'] . $filepath . $cfg['lang'][$belang]) == false) {
 92:                 if (!isset($filename)) {
 93:                     $filename = 'lang_en_US.xml';
 94:                 }
 95:                 if ($this->plugxml->load($cfg['path']['plugins'] . $filepath . $filename) == false) {
 96:                     throw new cException("Unable to load $filepath XML language file");
 97:                 }
 98:             }
 99:             $caption = $this->plugxml->getXpathValue('/language/' . $xpath);
100:         } else {
101:             $caption = $this->xml->getXpathValue('/language/' . $location);
102:         }
103: 
104:         return i18n($caption);
105:     }
106: 
107:     108: 109: 
110:     public function () {
111:         global $cfg, $perm;
112: 
113:         $db = cRegistry::getDb();
114:         $db2 = cRegistry::getDb();
115: 
116:         
117:         $sql = "SELECT idnavm, location FROM " . $cfg['tab']['nav_main'] . " ORDER BY idnavm";
118: 
119:         $db->query($sql);
120: 
121:         
122:         while ($db->nextRecord()) {
123: 
124:             
125:             $main = $this->getName($db->f('location'));
126: 
127:             
128:             $this->data[$db->f('idnavm')] = array($main);
129: 
130:             $sql = "SELECT
131:                         a.location AS location, b.name AS area, b.relevant
132:                     FROM
133:                         " . $cfg['tab']['nav_sub'] . " AS a, " . $cfg['tab']['area'] . " AS b
134:                     WHERE
135:                         a.idnavm = " . $db->f('idnavm') . " AND
136:                         a.level  = 0 AND
137:                         b.idarea = a.idarea AND
138:                         a.online = 1 AND
139:                         b.online = 1
140:                     ORDER BY
141:                         a.idnavs";
142: 
143:             $db2->query($sql);
144: 
145:             while ($db2->nextRecord()) {
146:                 $area = $db2->f('area');
147:                 if ($perm->have_perm_area_action($area) || $db2->f('relevant') == 0) {
148:                     
149:                     if (strpos($db2->f('location'), ';') !== false && $cfg['debug']['disable_plugins']) {
150:                         continue;
151:                     }
152:                     
153:                     $name = $this->getName($db2->f('location'));
154:                     $this->data[$db->f('idnavm')][] = array($name, $area);
155:                 }
156:             }
157:         }
158: 
159:         
160:         cDebug::out(print_r($this->data, true));
161:     }
162: 
163:     164: 165: 166: 167: 
168:     public function ($lang) {
169:         global $cfg, $sess, $client, $auth, $cfgClient;
170: 
171:         $this->_buildHeaderData();
172: 
173:         $main = new cTemplate();
174:         $sub = new cTemplate();
175: 
176:         $cnt = 0;
177:         $t_sub = '';
178:         $numSubMenus = 0;
179: 
180:         $properties = new cApiPropertyCollection();
181:         $clientImage = $properties->getValue('idclient', $client, 'backend', 'clientimage', false);
182: 
183:         $sJsEvents = '';
184:         foreach ($this->data as $id => $item) {
185:             $sub->reset();
186:             $genSubMenu = false;
187: 
188:             foreach ($item as $key => $value) {
189:                 if (is_array($value)) {
190:                     $sub->set('s', 'SUBID', 'sub_' . $id);
191: 
192:                     
193:                     $link = new cHTMLLink();
194:                     $link->disableAutomaticParameterAppend();
195:                     $link->setClass('sub');
196:                     $link->setID('sub_' . $value[1]);
197:                     $link->setLink($sess->url('frameset.php?area=' . $value[1]));
198:                     $link->setTargetFrame('content');
199:                     $link->setContent(i18n($value[0]));
200: 
201:                     if ($cfg['help'] == true) {
202:                         $sJsEvents .= "\n\t" . '$("#sub_' . $value[1] . '").click(function(){ $("#help").attr("data", "' . $value[0] . '"); })';
203:                     }
204:                     $sub->set('d', 'CAPTION', $link->render());
205: 
206:                     $sub->next();
207:                     $genSubMenu = true;
208:                 }
209:             }
210: 
211:             if ($genSubMenu == true) {
212:                 $link = new cHTMLLink();
213:                 $link->setClass('main');
214:                 $link->setID('main_' . $id);
215:                 $link->setLink('javascript://');
216:                 $link->setAttribute('ident', 'sub_' . $id);
217:                 $link->setContent(i18n($item[0]));
218: 
219:                 $main->set('d', 'CAPTION', $link->render());
220:                 $main->next();
221: 
222:                 $numSubMenus++;
223:             } else {
224:                 
225:             }
226: 
227:             
228:             $t_sub .= $sub->generate($cfg['path']['templates'] . $cfg['templates']['submenu'], true);
229:             $cnt++;
230:         }
231: 
232:         if ($numSubMenus == 0) {
233:             $main->set('d', 'CAPTION', ' ');
234:             $main->next();
235:         }
236: 
237:         $main->set('s', 'SUBMENUS', $t_sub);
238: 
239:         $backendUrl = cRegistry::getBackendUrl();
240: 
241:         
242:         $link = new cHTMLLink();
243:         $link->setClass('main');
244:         $link->setTargetFrame('content');
245:         $link->setLink($sess->url("frameset.php?area=mycontenido&frame=4"));
246:         $link->setContent('<img class="vAlignMiddle" src="' . $backendUrl . $cfg['path']['images'] . 'my_contenido.gif" border="0" alt="My CONTENIDO" id="imgMyContenido" title="' . i18n("My CONTENIDO") . '">');
247:         $main->set('s', 'MYCONTENIDO', $link->render());
248: 
249:         
250:         $link = new cHTMLLink();
251:         $link->setClass('main');
252:         $link->setTargetFrame('content');
253:         $link->setLink($sess->url('frameset.php?area=info&frame=4'));
254:         $link->setContent('<img class="vAlignMiddle" src="' . $backendUrl . $cfg['path']['images'] . 'info.gif" border="0" alt="Info" title="Info" id="imgInfo">');
255:         $main->set('s', 'INFO', $link->render());
256: 
257:         $main->set('s', 'LOGOUT', $sess->url('logout.php'));
258: 
259:         if ($cfg['help'] == true) {
260:             
261:             $link = new cHTMLLink();
262:             $link->setID('help');
263:             $link->setClass('main');
264:             $link->setLink('javascript://');
265:             $link->setEvent('click', 'callHelp($(\'#help\').attr(\'data\'));');
266:             $link->setContent('<img class="vAlignMiddle" src="' . $backendUrl . $cfg['path']['images'] . 'but_help.gif" border="0" alt="Hilfe" title="Hilfe">');
267:             $main->set('s', 'HELP', $link->render());
268:         } else {
269:             $main->set('s', 'HELP', '');
270:         }
271: 
272:         $oUser = new cApiUser($auth->auth["uid"]);
273:         $clientCollection = new cApiClientCollection();
274: 
275:         if (getEffectiveSetting('system', 'clickmenu') == 'true') {
276:             
277:             $main->set('s', 'HEADER_MENU_OBJ', 'HeaderClickMenu');
278:             $main->set('s', 'HEADER_MENU_OPTIONS', '{menuId: "main_0", subMenuId: "sub_0"}');
279:         } else {
280:             
281:             $mouseOver = getEffectiveSetting('system', 'delaymenu_mouseover', 300);
282:             $mouseOot = getEffectiveSetting('system', 'delaymenu_mouseout', 1000);
283:             $main->set('s', 'HEADER_MENU_OBJ', 'HeaderDelayMenu');
284:             $main->set('s', 'HEADER_MENU_OPTIONS', '{menuId: "main_0", subMenuId: "sub_0", mouseOverDelay: ' . $mouseOver . ', mouseOutDelay: ' . $mouseOot . '}');
285:         }
286: 
287:         $main->set('s', 'ACTION', $sess->url('index.php'));
288:         $main->set('s', 'LANG', $this->_renderLanguageSelect());
289: 
290:         $sClientName = $clientCollection->getClientName($client);
291:         if (strlen($sClientName) > 25) {
292:             $sClientName = cApiStrTrimHard($sClientName, 25);
293:         }
294: 
295:         $client = cSecurity::toInteger($client);
296:         if ($client == 0) {
297:             $sClientNameTemplate = '<b>' . i18n("Client") . ':</b> %s';
298:             $main->set('s', 'CHOSENCLIENT', sprintf($sClientNameTemplate, $sClientName));
299:         } else {
300:             $sClientNameTemplate = '<b>' . i18n("Client") . ':</b> <a href="%s" target="_blank">%s</a>';
301: 
302:             $sClientName = '<span id="chosenclient">' . $clientCollection->getClientName($client) . ' (' . $client . ')</span>';
303:             $sClientUrl = cRegistry::getFrontendUrl();
304:             $frontendPath = cRegistry::getFrontendPath();
305: 
306:             if ($clientImage !== false && $clientImage != "" && cFileHandler::exists($frontendPath . $clientImage)) {
307:                 $sClientImageTemplate = '<img src="%s" alt="%s" title="%s" />';
308: 
309:                 $sThumbnailPath = cApiImgScale($frontendPath . $clientImage, 80, 25, 0, 1);
310:                 $sClientImageTag = sprintf($sClientImageTemplate, $sThumbnailPath, $sClientName, $sClientName);
311: 
312:                 $main->set('s', 'CHOSENCLIENT', sprintf($sClientNameTemplate, $sClientUrl, $sClientImageTag));
313:             } else {
314:                 $html = sprintf($sClientNameTemplate, $sClientUrl, $sClientName);
315:                 $html .= $this->_renderClientSelect();
316:                 $main->set('s', 'CHOSENCLIENT', $html);
317:             }
318:         }
319: 
320:         $main->set('s', 'CHOSENUSER', "<b>" . i18n("User") . ":</b> " . $oUser->getEffectiveName());
321:         $main->set('s', 'SID', $sess->id);
322:         $main->set('s', 'MAINLOGINLINK', $sess->url("frameset.php?area=mycontenido&frame=4"));
323: 
324:         
325:         $footerJs = '';
326:         if ($sJsEvents !== '') {
327:             $footerJs = '$(document).ready(function(){' . $sJsEvents . '});';
328:         }
329:         $main->set('s', 'FOOTER_JS', $footerJs);
330: 
331:         $main->generate($cfg['path']['templates'] . $cfg['templates']['header']);
332:     }
333: 
334:     335: 336: 337: 338: 
339:     public function _renderLanguageSelect() {
340:         global $cfg, $client, $lang;
341: 
342:         $tpl = new cTemplate();
343: 
344:         $tpl->set('s', 'NAME', 'changelang');
345:         $tpl->set('s', 'CLASS', 'vAlignMiddle text_medium');
346:         $tpl->set('s', 'ID', 'cLanguageSelect');
347:         $tpl->set('s', 'OPTIONS', 'onchange="changeContenidoLanguage(this.value)"');
348: 
349:         $availableLanguages = new cApiLanguageCollection();
350: 
351:         if (getEffectiveSetting('system', 'languageorder', 'name') == 'name') {
352:             $availableLanguages->select('', '', 'name ASC');
353:         } else {
354:             $availableLanguages->select('', '', 'idlang ASC');
355:         }
356: 
357:         if ($availableLanguages->count() > 0) {
358:             while (($myLang = $availableLanguages->nextAccessible()) !== false) {
359:                 $key = $myLang->get('idlang');
360:                 $value = $myLang->get('name');
361: 
362:                 $clientsLang = new cApiClientLanguage();
363:                 $clientsLang->loadBy('idlang', cSecurity::toInteger($key));
364:                 if ($clientsLang->isLoaded()) {
365:                     if ($clientsLang->get('idclient') == $client) {
366:                         if ($key == $lang) {
367:                             $tpl->set('d', 'SELECTED', 'selected');
368:                         } else {
369:                             $tpl->set('d', 'SELECTED', '');
370:                         }
371: 
372:                         if (strlen($value) > 20) {
373:                             $value = cApiStrTrimHard($value, 20);
374:                         }
375: 
376:                         $tpl->set('d', 'VALUE', $key);
377:                         $tpl->set('d', 'CAPTION', $value . ' (' . $key . ')');
378:                         $tpl->next();
379:                     }
380:                 }
381:             }
382:         } else {
383:             $tpl->set('d', 'VALUE', 0);
384:             $tpl->set('d', 'CAPTION', i18n('-- No Language available --'));
385:             $tpl->next();
386:         }
387: 
388:         return $tpl->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true);
389:     }
390: 
391:     392: 393: 394: 395: 
396:     protected function _renderClientSelect() {
397:         $cfg = cRegistry::getConfig();
398:         $client = cRegistry::getClientId();
399:         
400:         $clientCollection = new cApiClientCollection();
401:         $clients = $clientCollection->getAccessibleClients();
402:         if (count($clients) === 1) {
403:             return '';
404:         }
405: 
406:         $tpl = new cTemplate();
407:         $tpl->set('s', 'NAME', 'changeclient');
408:         $tpl->set('s', 'CLASS', 'vAlignMiddle text_medium nodisplay');
409:         $tpl->set('s', 'ID', 'cClientSelect');
410:         $tpl->set('s', 'OPTIONS', 'onchange="changeContenidoClient(this.value)"');
411: 
412:         
413:         foreach ($clients as $idclient => $clientInfo) {
414:             $name = $clientInfo['name'];
415:             if ($idclient == $client) {
416:                 $tpl->set('d', 'SELECTED', 'selected');
417:             } else {
418:                 $tpl->set('d', 'SELECTED', '');
419:             }
420: 
421:             if (strlen($name) > 20) {
422:                 $name = cApiStrTrimHard($name, 20);
423:             }
424: 
425:             $tpl->set('d', 'VALUE', $idclient);
426:             $tpl->set('d', 'CAPTION', $name . ' (' . $idclient . ')');
427:             $tpl->next();
428:         }
429: 
430:         $html = $tpl->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true);
431:         $editButton = new cHTMLImage(cRegistry::getBackendUrl() . $cfg['path']['images'] . 'but_edithead.gif');
432:         $editButton->setID('changeclient');
433:         $editButton->setClass("vAlignMiddle");
434:         $editButton->appendStyleDefinition('cursor', 'pointer');
435: 
436:         return $html . $editButton->render();
437:     }
438: 
439: }
440: