fields['connection'] = 'int';
$this->fields['sql'] = 'longstring';
$this->fieldMapping = $this->field_mapping($this->fields);
}
function editor(){
$html = '
Ajouter une base
- utilisez [[attribut]] pour acceder à une donnée ou {{attribut}} pour acceder à un filtre
Exécuter
';
return $html;
}
function preview($data = array(),$filters = array()){
$response = array('data'=>array());
require_once (__DIR__.SLASH.'..'.SLASH.'Connection.class.php');
if(isset($this->connection) && $this->connection!=false) {
$connection = Connection::getById($this->connection);
if($connection!=false && !empty($connection->handler) ){
try{
$pdo = $connection->getPdo();
if(!isset($pdo)) throw new Exception("Connexion à la base impossible");
$query = self::template($this->sql,$filters,true);
$query = preg_replace('/\[\[([^\]]*)\]\]/iU','{{$1}}', $query);
$query = self::template($query,$data,true);
$query = html_entity_decode($query,ENT_QUOTES);
$response['meta'] = array('Requete finale' => $query);
$results = $pdo->prepare($query);
$results->execute(array());
foreach ($results->fetchAll(PDO::FETCH_ASSOC) as $element){
foreach($element as $index => $row){
if($connection->handler == 'Oracle'){
$element[$index] =iconv("Windows-1254", "UTF-8", html_entity_decode($row, ENT_QUOTES, 'UTF-8'));
}else{
$element[$index] =html_entity_decode($row, ENT_QUOTES, 'UTF-8');
}
}
$response['data'][] = $element;
}
} catch(Exception $e) {
$error = utf8_encode($e->getMessage());
if(isset($pdo)) $error .= json_encode($pdo->errorInfo());
if(isset($query)) $error .= '
'.$query;
$error = str_replace(
array('Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ','SQLSTATE[42000]'),
array(' ...','Mauvaise Syntaxe'),$error);
throw new Exception("SQL ".PHP_EOL.$error);
}
}
}
return $response;
}
}
?>