'key', 'widget'=>'int', 'sort'=>'int', 'slug'=>'string', 'label'=>'string' ); function editor(){ return 'No editor yet'; } function preview(){ return 'No preview yet'; } public static function getType($type){ $file = __DIR__.SLASH.'element'.SLASH.ucfirst($type).'.class.php'; if(!file_exists($file)) throw new Exception ('Invalid widget element'); require_once($file); return $type; } public static function cascadePreview($type,$id,$filters = array(),$widget){ $type = self::getType($type); $currentElement = $type::getById($id); $elements = self::getElementsByWidget($currentElement->widget); $data = array(); if($currentElement != null){ foreach($elements as $element){ if($currentElement->sort<$element->sort) continue; $response = $element->preview($data,$filters,$widget); $data[$element->slug] = $response['data']; } } return $response; } public static function getElementsByWidget($id){ $elements = array(); foreach(glob(__DIR__.SLASH.'element'.SLASH.'*.class.php') as $file){ require_once($file); $type = str_replace('.class.php','',basename($file)); foreach($type::loadAll(array('widget'=>$id)) as $element) $elements[] = $element; } usort($elements, function($a,$b){ if($a->sort < $b->sort) return -1; if($a->sort > $b->sort) return 1; if($a->sort == $b->sort) return 0; }); return $elements; } public function toFile($sort){ return array( 'filename' => '', 'stream' => '' ); } public static function template($tpl,$data=array(),$emptyIsNull = false){ if($emptyIsNull){ foreach($data as $key=>$value){ if($data[$key]=='') unset($data[$key]); } } return template($tpl,$data,true); } } ?>