123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- class Filter extends Entity{
- public $id,$report,$label,$slug,$type,$default,$sort,$datasource;
- public $TABLE_NAME = 'statistic_filter';
- public $fields = array(
- 'id'=>'key',
- 'label'=>'string',
- 'slug'=>'string',
- 'report'=>'int',
- 'type' => 'string',
- 'default' => 'string',
- 'datasource' => 'longstring',
- 'sort' => 'int'
- );
- public static function getMetaTerms(){
- global $myUser;
- return array(
- 'date.year' => array('value' => date('Y') ,'description' => 'Année courante'),
- 'date.month' => array('value' => date('m'),'description' => 'Mois courant'),
- 'date.day' => array('value' => date('d'),'description' => 'Jour courant'),
- 'date.hour' => array('value' => date('H'),'description' => 'heure courante'),
- 'date.minut' => array('value' => date('i'),'description' => 'Minutes courantes'),
- 'date.second' => array('value' => date('s'),'description' => 'Secondes courantes'),
- 'user.login' => array('value' => $myUser->login,'description' => 'Identifiant utilisateur courant')
- );
- }
- //Vérification des acces sur le widget courant ou sur le rapport du widget courant
- public function check_access($crud,$user = null){
- global $myUser,$myFirm;
- if(!isset($user)) $user = $myUser;
- //pour avoir 'lacces, l'utilisateur doit être le créateur OU avoir access au rapport OU avoir acces au widget
- return $user->login == $this->creator ||
- $user->can('statistic_report',$crud,$this->report) ||
- $user->can('statistic_filter',$crud,$this->id);
- }
- public function toHtml(){
- $readony = $this->check_access('edit') ? '': ' readonly="readonly" ';
- $html = '<label title="'.$this->getSlug().'">'.$this->label.'</label>';
- $default = $this->default;
- $meta = self::getMetaTerms();
- $default = preg_replace_callback('|{{(.*)([\-\+]*)([0-9]*)}}|U', function($matches) use($meta) {
- $t = $matches[0];
- if(isset($meta[$matches[1]])) $t = $meta[$matches[1]]['value'];
- if(!empty($matches[2]) && !empty($matches[3])){
- if($matches[2]=='+') $t+=$matches[3];
- if($matches[2]=='-') $t-=$matches[3];
- }
- return $t;
- }, $default);
- switch($this->type){
- case 'list' :
- $html .= '<select class="form-control" '.$readony.' data-slug="'.$this->getSlug().'">';
- if(!empty($this->datasource)){
- list($type,$other) = explode(':', $this->datasource);
- switch($type){
- case 'plain':
- $items = explode("\n", $this->datasource);
- array_shift($items);
- foreach($items as $item){
- list($key,$value) = explode(':', $item);
- $html .= '<option value="'.$key.'" '.($default==$key ? 'selected="selected"': '').'>'.$value.'</option>';
- }
- break;
- case 'query':
- $results = self::staticQuery($other);
- foreach($results->fetchAll() as $line){
- $html .= '<option value="'.$line[0].'" '.($default==$line[0] ? 'selected="selected"': '').'>'.$line[1].'</option>';
- }
- break;
- case 'slug':
- foreach(Dictionary::childs(array("slug"=>$other)) as $line){
- $html .= '<option value="'.$line->id.'" '.($default==$line->slug ? 'selected="selected"': '').'>'.$line->label.'</option>';
- }
- break;
- }
- }
- $html .= '</select>';
- break;
- case 'date' :
- $default = explode('/',$default);
- //s'assure que les mois/jours sont sur deux nombres
- foreach ($default as $i=>$value) {
- if( ($i==0 || $i==1) && strlen($value)==1 ) $default[$i] = str_pad($value, 2,'0',STR_PAD_LEFT);
- }
- $default = implode('/',$default);
- $html .= '<input data-type="date" '.$readony.' value="'.$default.'" class="form-control" type="text" placeholder="jj/mm/aaaa" data-slug="'.$this->getSlug().'">';
- break;
- case 'hour' :
- $html .= '<input data-type="hour" '.$readony.' value="'.$default.'" class="form-control" type="text" placeholder="08:00" data-slug="'.$this->getSlug().'">';
- break;
- case 'user' :
- $html .= '<input class="form-control" '.$readony.' data-type="user" value="'.$default.'" type="text" data-slug="'.$this->getSlug().'">';
- break;
- case 'year' :
- $html .= '<input class="form-control" '.$readony.' value="'.$default.'" type="number" data-slug="'.$this->getSlug().'">';
- break;
- case 'month' :
- $months = array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
- $html .= '<select class="form-control" '.$readony.' data-slug="'.$this->getSlug().'">';
- foreach($months as $idx => $month){
- $key = $idx+1;
- $html .= '<option value="'.$key.'" '.($default==$key ? 'selected="selected"': '').'>'.$month.'</option>';
- }
- $html .= '</select>';
- break;
- case 'number' :
- $html .= '<input class="form-control" '.$readony.' value="'.$default.'" type="number" data-slug="'.$this->getSlug().'">';
- break;
- case 'boolean' :
- $html .= '<input class="form-control" '.$readony.' '.($default=='1'?'checked="checked"':'').' type="checkbox" data-slug="'.$this->getSlug().'">';
- break;
- default :
- $html .= '<input class="form-control" '.$readony.' value="'.$default.'" type="text" data-slug="'.$this->getSlug().'">';
- break;
- }
- return $html;
- }
- public function getSlug(){
- return slugify($this->label);
- }
- public static function types(){
- return array(
- 'text' => array('label'=>'Texte','datasource'=>false),
- 'list' => array('label'=>'Liste','datasource'=>true),
- 'date' => array('label'=>'Date','placeholder'=>'jj/mm/aaaaa','datasource'=>false),
- 'hour' => array('label'=>'Heure','placeholder'=>'08:00','datasource'=>false),
- 'user' => array('label'=>'Utilisateur','placeholder'=>'login.utilisateur','datasource'=>false),
- 'number' => array('label'=>'Nombre','placeholder'=>'ex: 12','datasource'=>false),
- 'year' => array('label'=>'Année','placeholder'=>'ex: 2009','datasource'=>false),
- 'month' => array('label'=>'Mois','placeholder'=>'ex: 01','datasource'=>false),
- 'boolean' => array('label'=>'Vrai/Faux','placeholder'=>'0 ou 1','datasource'=>false),
- );
- }
- }
- ?>
|