123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- class Connection extends Entity{
- public $id,$label,$meta,$handler;
- public $TABLE_NAME = 'statistic_connection';
- public $fields = array(
- 'id'=>'key',
- 'label'=>'longstring',
- 'meta'=>'longstring',
- 'handler'=>'string'
- );
- public function realString(){
- $meta = json_decode($this->meta,true);
- require_once(__ROOT__.SLASH.'connector'.SLASH.$this->handler.'.class.php');
- $connection = $this->handler::connection;
- foreach ($meta as $key => $value) {
- $connection = str_replace('{{'.$key.'}}',$value,$connection);
- }
- $connection = str_replace('{{ROOT}}',__ROOT__,$connection);
- return $connection;
- }
- public function test(){
- require_once(__ROOT__.SLASH.'connector'.SLASH.$this->handler.'.class.php');
- $pdo = $this->getPdo();
- if(!isset($pdo)) throw new Exception("Impossible de se connecter à la base");
- $statment = $pdo->prepare($this->handler::show_tables());
- $statment->execute(array());
- $rows = $statment->fetchAll();
- if(!is_array($rows)) throw new Exception("Impossible de requeter la base");
- return count($rows);
- }
- public function getPdo(){
- $fileHandler = __ROOT__.SLASH.'connector'.SLASH.$this->handler.'.class.php';
- if(!file_exists($fileHandler)) return null;
- require_once($fileHandler);
- $string = $this->realString();
- $meta = json_decode($this->meta,true);
- $login = isset($meta['login']) ? $meta['login'] : null;
- $password = isset($meta['password']) ? $meta['password'] : null;
- try{
- $connection = new PDO($string, $login,$password,$this->handler::pdo_attributes());
- if(method_exists ( $this->handler , 'beforeTransaction' ))
- $this->handler::beforeTransaction($connection);
- return $connection;
- }catch(Exception $e){
- return null;
- }
- }
- public function readOnly(){
- $pdo = $this->getPdo();
- if(strrpos($this->realString(), 'mysql:')!==false){
- $query = $pdo->query('SHOW GRANTS');
- $response = $query->fetchAll();
- if(isset($response[0])){
- if(!preg_match("/GRANT SELECT ON .* TO /i",$response[0][0])) return false;
- }
- }
- return true;
- }
- public function tables(){
- $fileHandler = __ROOT__.SLASH.'connector'.SLASH.$this->handler.'.class.php';
- if(!file_exists($fileHandler)) return array();
- require_once($fileHandler);
- $pdo = $this->getPDO();
- $tables = array();
- if(is_null($pdo)) return $tables;
- $lines = array();
- $query = $pdo->query($this->handler::show_tables());
- $lines = $query->fetchAll();
- foreach($lines as $line)
- $tables[] = $line[0];
- return $tables;
- }
- public function columns($table){
- $fileHandler = __ROOT__.SLASH.'connector'.SLASH.$this->handler.'.class.php';
- if(!file_exists($fileHandler)) return array();
- require_once($fileHandler);
- $pdo = $this->getPDO();
- $columns = array();
- if(is_null($pdo)) return array();
- $lines = array();
- $query = str_replace('{{table}}',$table,$this->handler::show_columns());
- $query = $pdo->query($query);
- $lines = $query->fetchAll();
- foreach($lines as $line){
- if(!isset($line['column'])){
- if(isset($line['name'])) $line['column'] = $line['name'];
- }
- $columns[] = $line;
- }
- return $columns;
- }
- }
- ?>
|