<?php
namespace Fury\Modules\ThinBuilder;
/**
* trait ThinBuilderProcessing
* @author Eugene Sukhodolskiy <eugene.sukhodolskiy@gmail.com>
* @version 0.1
* Update at 18.08.2022
*/
trait ThinBuilderProcessing{
protected $pdo;
protected $db_config;
protected $history;
protected $history_enabled;
protected $driver;
protected $gen_sql_only = false;
public function __construct($db_config, $driver = null, $history_enabled = true){
$this -> db_config = $db_config;
$this -> pdo = $this -> create_connect($this -> db_config);
$this -> driver = $driver;
$this -> history_enabled = $history_enabled;
if($this -> history_enabled){
$this -> create_history_instance();
}
}
protected function create_history_instance(){
$this -> history = new History();
}
protected function create_connect($db_conf){
$dblib = "{$db_conf['dblib']}:host={$db_conf['host']};dbname={$db_conf['dbname']};charset={$db_conf['charset']}";
$pdo = new \PDO($dblib, $db_conf['user'], $db_conf['password']);
return $pdo;
}
protected function escape_string_in_arr($arr){
$result = [];
foreach ($arr as $key => $value) {
if(!is_array($value)){
$result[addslashes($key)] = addslashes($value);
}else{
$result[addslashes($key)] = $this -> escape_string_in_arr($value);
}
}
return $result;
}
protected function select_data_preprocessing($fields, $where, $order_fields, $limit){
// FIELDS PREPROCESSING
if(count($fields)){
$fields = $this -> escape_string_in_arr($fields);
$fields = '`' . implode('`,`', $fields) . '`';
}else{
$fields = '*';
}
// ORDER PREPROCESSING
if(count($order_fields)){
$order_fields = $this -> escape_string_in_arr($order_fields);
$order_fields = 'ORDER BY `' . implode("`,`", $order_fields) . '`';
}else{
$order_fields = '';
}
// WHERE PREPROCESSING
$where = $this -> where_processing($where);
// LIMIT PREPROCESSING
if(count($limit)){
$limit = $this -> escape_string_in_arr($limit);
$limit = 'LIMIT ' . implode(',', $limit);
}else{
$limit = '';
}
return [$fields, $where, $order_fields, $limit];
}
protected function where_processing($where){
if(!count($where)){
return '';
}
$where = $this -> escape_string_in_arr($where);
foreach ($where as $i => $w_item) {
if(is_array($w_item)){
if(count($w_item) === 2){
$w_item = [$w_item[0], '=', $w_item[1]];
}
$w_item[0] = "`{$w_item[0]}`";
if($w_item[1] != 'IN'){
$w_item[2] = "'{$w_item[2]}'";
}else{
$w_item[2] = '(\'' . implode("','", $w_item[2]) . '\')';
}
$where[$i] = implode(' ', $w_item);
}
}
$where = 'WHERE ' . implode(' ', $where);
return $where;
}
}