Widget.class.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. require_once(__DIR__.DIRECTORY_SEPARATOR.'WidgetElement.class.php');
  3. class Widget extends Entity{
  4. public $id,$report,$width,$height,$x,$y,$data,$label,$view,$background,$meta;
  5. public $TABLE_NAME = 'statistic_widget';
  6. public $fields = array(
  7. 'id'=>'key',
  8. 'report'=>'int',
  9. 'width' => 'int',
  10. 'height' => 'int',
  11. 'x' => 'int',
  12. 'y' => 'int',
  13. 'label'=>'string',
  14. 'view' => 'string',
  15. 'meta' => 'text',
  16. 'background' => 'string'
  17. );
  18. public function elements(){
  19. require_once(__DIR__.SLASH.'WidgetElement.class.php');
  20. return WidgetElement::getElementsByWidget($this->id);
  21. }
  22. //Vérification des acces sur le widget courant ou sur le rapport du widget courant
  23. public function check_access($crud,$user = null){
  24. global $myUser;
  25. if(!isset($user)) $user = $myUser;
  26. //pour avoir 'lacces, l'utilisateur doit être le créateur OU avoir access au rapport OU avoir acces au widget
  27. return $user->login == $this->creator ||
  28. $user->can('statistic_report',$crud,$this->report) ||
  29. $user->can('statistic_widget',$crud,$this->id);
  30. }
  31. public function remove(){
  32. require_once(__DIR__.SLASH.'element'.SLASH.'Query.class.php');
  33. require_once(__DIR__.SLASH.'element'.SLASH.'Treatment.class.php');
  34. self::deleteById($this->id);
  35. Query::delete(array('widget'=>$this->id));
  36. Treatment::delete(array('widget'=>$this->id));
  37. }
  38. //affiche un widget a partir de son id
  39. public static function show($id,$options = array(),$checkPermission = true){
  40. require_once(__DIR__.SLASH.'WidgetElement.class.php');
  41. global $myUser;
  42. $statsWidget = Widget::getById($id);
  43. if(!$statsWidget || $statsWidget->id == 0) throw new Exception("Widget #$id introuvable",404);
  44. if($myUser->login != $statsWidget->creator && !$myUser->can('statistic','read',$statsWidget->id) ) throw new Exception("Vous n'avez pas la permission pour afficher cette statistique");
  45. $item = array();
  46. $item = $statsWidget->toArray();
  47. $view = $statsWidget->view;
  48. if($view==null) throw new Exception("Vue introuvable",404);
  49. require_once(__DIR__.SLASH.'view'.SLASH.$view.'.class.php');
  50. $results = $statsWidget->cascadePreview( isset($options['filters']) ? $options['filters']: array() );
  51. return $view::toHtml(null,$results,$options);
  52. }
  53. public function cascadePreview($filters = array()){
  54. $elements = WidgetElement::getElementsByWidget($this->id);
  55. $lastElement = end($elements);
  56. if(!$lastElement) throw new Exception("Veuillez spécifier au moins une requête ou un traitement pour afficher le bloc");
  57. return WidgetElement::cascadePreview(get_class($lastElement),$lastElement->id,$filters,$this);
  58. }
  59. }
  60. ?>