class.menu.php 4.01 KB
<?php
/**
* @author:  Bunzia Alexander <nifus@mail.ru> <http://www.weblancer.net/users/nifus/>
* @copyright: Copyright (c) 2010, Bunzia Alexander
* @version: 1.0
* @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @package: HiLO CMS
*/


include_once(MAIN_SOURCE_PATH.'/inc/class.nsTree.php');
include_once(MAIN_SOURCE_PATH.'/inc/class.query.php');
include_once(MAIN_SOURCE_PATH.'/inc/class.objects.php');
include_once(MAIN_SOURCE_PATH.'/modules/menu/inc/url.php');


class filedsSetMenu
{
  //static $id = false; //  адрес новости
  
  
  /*static function u_login($v,$obj){	
   
		$e = news::error_login($v);
		if ( !empty($e) ){
		  throw new Exception($e);
		}
		
		if (  news::exists_login($v,$obj -> id() ) ){
			throw new Exception(U_EXISTS_LOGIN);
		}
		return $v;
	}*/

	  //	родитель не может быть пустым
	static function c_parent($v,$obj){	
   
    $v = intval($v);
		if ( empty($v) ){
			throw new Exception(E_NSTREE_BAD_PARENT);
		}
		$obj -> parent_id = $v;
		return false;
	}
	
	static function c_name($v,$obj){	
    $v = trim($v);
		if ( empty($v) ){
			throw new Exception('Ошибка: нужно заполнить поле "Заголовок"');
		}
		return $v;
	}
	
}

class filedsGetMenu extends filedsGetnsTree
{

  static $__var = array();  //  для хранения временных переменных
  
  static function url_item($v){
    return sys_url(URL_MENU_CONTROL_ITEMS,$v);
  }
	
	//  строим дерево меню
	static function menu_select($v){

		$v = menu::getParent($v);
			
		
	  $p = menu::query('f');
	
		$p -> where_more('c_level',1);
		$p -> where_down($_GET['menu_id']);
		$p -> where_main_rows();
		$p -> order_left('ASC');
		$p -> get('c_id,c_name,c_level',false);
		
	  $s = new select_box();
		$s -> block_id($v);

		$s -> selected_id($v);
		$s -> empty_record(true,$_GET['menu_id'],'В основание');
		while( list($c_id,$c_name,$c_level) = $p -> row() ){
		  $c_name = str_repeat('---',($c_level-1)).' '.$c_name;
		  $s -> set($c_id,$c_name);
		}
		return  $s -> get();
	}
	
	static function lang_links($v){
    if ( false===MAIN_MULTILANG){
			return false;
		}
    
    $langs = explode(',',MAIN_LANGS);
    $result = array();
    foreach( $langs as $l ){
      $q = menu::query('q');
      //$q -> set_debug(1);
      $q -> where_link($v);
      $q -> where_lang($l);
      $q -> get('COUNT(*)');
      list($count) = $q -> row();
      $result[] = array('lang'=>$l,'exists'=> (( $count ) ? 1 : 0) );
    }
    return $result;
  }

  
	static function active($v){	
	  if ( preg_match('#^'. $v .'#iUs',$_SERVER['REQUEST_URI']) ){
	    return true;
	  }
    return false;
	}

	static function name($v,$row){	
	  return  str_repeat('---',($row['c_level']-2)).' '.$v;
	}

	
	

}



class menuQuery extends nsTreeQuery{

	var $fields_get = 'filedsGetMenu';

  /**
  * @var string $alias Алиас для исплользования в mysql запросе
  */
  public function __construct($alias){
 
  	parent::__construct( "menu" ,$alias,$fields=array('id'=>'c_id','left'=>'c_left','right'=>'c_right','level'=>'c_level') );
  }


}	//	end class



class menu extends nsTree{

  public $table = "menu";
  public $key = "c_id";
	public $fields = 'filedsSetMenu';
	static $s_table= "menu";


	static function load_id($id){
		$u = self::query('u');
		
		if ( !$u -> where_id($id) ){
			return FALSE;
		}
		if ( !$u -> get('u.*') ){
			return FALSE;
		}
		if (  $u -> get_count_rows()==0 ){
			return FALSE;
		}
		return new self( $id,$u -> row() );
	}

	static function create(){
		return new self( 0,array('c_id'=>0) );
	}
	static function query($alias){

		return new menuQuery( $alias,array('id'=>self::$id,'left'=>self::$left,'right'=>self::$right,'level'=>self::$level) );
	}

	static function getParent($id){

		return parent::getParent( self::$s_table,$id );
	}


		
	static function getServiceInfo($id){
		return parent::getServiceInfo( self::$s_table,$id );
	}		

	static function order($one,$two){
		return parent::order( self::$s_table,$one,$two );
	}		
	

		

	
	
} //  end class