/**
* SWmenuFree v3.1 for mambo/joomla
* http://swonline.biz
* Copyright 2004 Sean White
* DHTML Menu Component for Mambo Open Source
* Mambo Open Source is Free Software
* Released under GNU/GPL License: http://www.gnu.org/copyleft/gpl.html
**/
//error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
global $database, $my;
global $mosConfig_absolute_path, $mosConfig_live_site,$mosConfig_lang, $mosConfig_mbf_content;
$parent_count=0;
$menu = @$params->get('menutype') ? strval( $params->get('menutype') ) : "mainmenu";
$parentid=@$params->get('parentid') ? strval( $params->get('parentid') ) : "0";
$levels=@$params->get('levels') ? strval( $params->get('levels') ) : "25";
$query = "SELECT * FROM #__swmenufree_config WHERE id = 1";
$database->setQuery( $query );
$new_data = $database->query();
$swmenufree= mysql_fetch_assoc($new_data);
$navigator_user_agent = ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) ? strtolower( $_SERVER['HTTP_USER_AGENT'] ) : '';
if (!stristr($navigator_user_agent, "msie")|| stristr($navigator_user_agent, "opera")){
$padding1 = explode("px", $swmenufree['main_padding']);
$padding2 = explode("px", $swmenufree['sub_padding']);
for($i=0;$i<4; $i++){
$padding1[$i]=trim($padding1[$i]);
$padding2[$i]=trim($padding2[$i]);
}
if($swmenufree['main_width']!=0){$swmenufree['main_width'] = ($swmenufree['main_width'] - ($padding1[1]+$padding1[3]));}
if($swmenufree['main_height']!=0){$swmenufree['main_height'] = ($swmenufree['main_height'] - ($padding1[0]+$padding1[2]));}
if($swmenufree['sub_width']!=0){$swmenufree['sub_width'] = ($swmenufree['sub_width'] - ($padding2[1]+$padding2[3]));}
if($swmenufree['sub_width']!=0){$swmenufree['sub_height'] = ($swmenufree['sub_height'] - ($padding2[0]+$padding2[2]));}
}
if($menu && $swmenufree){
$sql = "SELECT #__menu.*
FROM #__menu
WHERE #__menu.menutype = '".$menu."' AND published = '1'
AND access <= '$my->gid'
ORDER BY parent, ordering
";
$database->setQuery( $sql );
$result = $database->loadObjectList();
$swmenufree_array=array();
foreach ($result as $result2) {
if ($mosConfig_mbf_content) {
$result2 = MambelFish::translate( $result2, 'menu', $mosConfig_lang);
}
switch ($result2->type) {
case 'separator';
//$result2->link = "seperator";
break;
case 'url':
if (eregi( "index.php\?", $result2->link )) {
if (!eregi( "Itemid=", $result2->link )) {
$result2->link .= "&Itemid=$result2->id";
}
}
break;
default:
$result2->link .= "&Itemid=$result2->id";
break;
}
if($result2->parent==$parentid){
$parent_count++;
}
//$result2->link = str_replace( '&', '&', $result2->link );
if ( strcasecmp( substr( $result2->link,0,4 ), 'http' ) ) {
$result2->link = sefRelToAbs( $result2->link );
}
$swmenufree_array[] =array("TITLE" => $result2->name, "URL" => $result2->link , "ID" => $result2->id , "PARENT" => $result2->parent , "ORDER" => $result2->ordering, "TARGET" => $result2->browserNav );
}
if($parent_count){
$ordered = chainmenu('ID', 'PARENT', 'ORDER', $swmenufree_array, $parentid,$levels);
}else{
echo "No menu items to display. Please check your menu source and parent settings. In most case the parent value should be top";
exit(-1);
}
echo "";
?>
$topmenu = $ordered;
$topcounter=0;
$counter=0;
$number = count(chainmenu('ID', 'PARENT', 'ORDER', $ordered, $parentid, 1));
echo "
\n";
echo "
\n";
if ($swmenufree['orientation']=="horizontal"){echo "
\n";}
foreach($topmenu as $top){
if ($top['indent'] == 0){
$topcounter++;
$image_url = "";
$name = $top['TITLE'];
if ($swmenufree['orientation']=="vertical"){
echo "
\n";
}
if($topcounter==$number){
echo "
\n";
}else{
echo "
\n";
}
switch ($top['TARGET']) {
// cases are slightly different
case 1:
// open in a new window
echo ''. $name .'';
break;
case 2:
// open in a popup window
echo "". $name ."\n";
break;
case 3:
// don't link it
echo ''. $name .'';
break;
default: // formerly case 2
echo '';
echo $name .'';
break;
}
$counter++;
echo "
\n";
if ($swmenufree['orientation']=="vertical"){
echo "
\n";
}
if ($topcounter == ($number)){ $doMenu = 0;}
} }
if ($swmenufree['orientation']=="horizontal"){echo " \n";}
echo "
\n";
?>
}
function findPar($ordered,$sub){
$submenu = chainmenu('ID', 'PARENT', 'ORDER', $ordered, $sub['PARENT'], 1);
if ($sub['indent']==1){
return $submenu[0]['PARENT'];
}else{
return $submenu[0]['ID'];
}
}
function fixOrder($ordered,$parent_id){
foreach ($ordered as $key => $row) {
$parent[$key] = $row['PARENT'];
$order[$key] = $row['ORDER'];
}
array_multisort($parent, SORT_ASC, $order, SORT_ASC, $ordered);
$i=0;
$counter=0;
$par=$ordered[$i]['PARENT'];
while($par==@$ordered[$i]['PARENT']){
//echo $counter;
$counter++;
$ordered[$i]['ORDER']=$counter;
if(($ordered[$i]['PARENT'])!=(@$ordered[($i+1)]['PARENT'])&&($i<(count($ordered)-1))){
$par=$ordered[$i+1]['PARENT'];
$counter=0;
}
$i++;
}
$submenu = chainmenu('ID', 'PARENT', 'ORDER', $ordered, $parent_id, 25);
return $submenu;
}
function chainmenu($primary_field, $parent_field, $sort_field, $rows, $root_id=0, $maxlevel=25)
{
$c = new chainmenu($primary_field, $parent_field, $sort_field, $rows, $root_id, $maxlevel);
return $c->chainmenu_table;
}
class chainmenu
{
var $table;
var $rows;
var $chainmenu_table;
var $primary_field;
var $parent_field;
var $sort_field;
function chainmenu($primary_field, $parent_field, $sort_field, $rows, $root_id, $maxlevel)
{
$this->rows = $rows;
$this->primary_field = $primary_field;
$this->parent_field = $parent_field;
$this->sort_field = $sort_field;
$this->buildchainmenu($root_id,$maxlevel);
}
function buildchainmenu($rootcatid,$maxlevel)
{
foreach($this->rows as $row)
{
$this->table[$row[$this->parent_field]][ $row[$this->primary_field]] = $row;
}
$this->makeBranch($rootcatid,0,$maxlevel);
}
function makeBranch($parent_id,$level,$maxlevel)
{
$rows=$this->table[$parent_id];
foreach($rows as $key=>$value)
{
$rows[$key]['key'] = $this->sort_field;
}
usort($rows,'chainmenuCMP');
foreach($rows as $item)
{
$item['indent'] = $level;
$this->chainmenu_table[] = $item;
if((isset($this->table[$item[$this->primary_field]])) && (($maxlevel>$level+1) || ($maxlevel==0)))
{
$this->makeBranch($item[$this->primary_field], $level+1, $maxlevel);
}
}
}
}
function chainmenuCMP($a,$b)
{
if($a[$a['key']] == $b[$b['key']])
{
return 0;
}
return($a[$a['key']]<$b[$b['key']])?-1:1;
}
?>