<?php
/**
* Manage application and plugins lists with key/value pair.
* 
* @author valentin carruesco
*
* @category Core
*
* @license copyright
*/
class Dictionnary extends Entity
{
	public $id,$slug,$label,$parent,$state,$sublistlabel;
	protected $fields =
	array(
		'id' => 'key',
		'slug' => 'string',
		'label' => 'string',
		'parent' => 'int',
		'state' => 'string',
		'sublistlabel' => 'longstring'
		);

	public function __construct()
	{
		parent::__construct();
	}

	//Retourne une liste formatée en fonction de son slug
	//(retourne ses enfants si le parametre childs est à true)
	public static function slugToArray($slug, $childs = false){
		$listArray = array();
		$lists = self::bySlug($slug, $childs);
		if(!$childs) return $lists;

		foreach($lists as $list)
			$listArray[$list->id] = $list;
		return $listArray;
	}

	//Retourne une liste en fonction de son slug (retourne ses enfants si le parametre childs est à true)
	public static function bySlug($slug, $childs = false){
		if($childs) return self::childs(array('slug'=>$slug));
		return self::load(array("slug"=>$slug));
	}

	public static function childs($param = array()) {
		$childs = array();
		$parent = self::load($param);
		if(!$parent) return $childs;

		foreach (self::loadAll(array('parent'=>$parent->id, 'state'=>self::ACTIVE), array( ' label ASC ')) as $child) {
			$childs[] = $child;
		}
		return $childs;
	}

	public static function hierarchy($id, &$elements=array()) {

	    $current = self::getById($id);
	    if(!$current) return array();
	    if($current->parent != 0) {
	    	$parent = self::load(array('id' => $current->parent));
	    	$children = self::childs(array('id'=>$parent->id));
	    	$parent->childs = array();
	    	foreach ($children as $i => $child) {
	    		if ($child->id == $current->id) {
	    			$child = !empty($elements) ? $elements : $child;
	    			$child->selected = true;
	    		} else {
	    			$child->childs = array();
	    			$child->childs = self::childs(array('id'=>$child->id));
	    		}
    			$parent->childs[] = $child;
	    	}
	    	$elements = $parent;
	    	return self::hierarchy($parent->id, $elements);
	    } else {
	    	$elements->selected = true;
	    	return $elements;
	    }
	}

	
}
