From bb47682f03cc66897dc50cceec90e19e0aacaad5 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Tue, 3 Jul 2018 15:05:27 +0200 Subject: [PATCH] Ottimizzazzione Database --- ajax_dataload.php | 6 +----- modules/anagrafiche/actions.php | 20 ++++++++++---------- modules/anagrafiche/init.php | 5 ----- src/API.php | 2 +- src/Auth.php | 2 +- src/Database.php | 24 ++++++++++++++++++------ src/Update.php | 2 +- update/api.php | 2 +- 8 files changed, 33 insertions(+), 30 deletions(-) diff --git a/ajax_dataload.php b/ajax_dataload.php index 13e5570eb..8c4bd9bc1 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -31,11 +31,7 @@ $results['summable'] = []; if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom') { // Conteggio totale - $count_query = 'SELECT COUNT(*) as `tot` FROM ('.$result_query.') AS `count`'; - $count = $dbo->fetchArray($count_query); - if (!empty($count)) { - $results['recordsTotal'] = $count[0]['tot']; - } + $results['recordsTotal'] = $dbo->fetchNum($result_query); // Filtri di ricerica $search_filters = []; diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php index cd7158832..0f74dafef 100644 --- a/modules/anagrafiche/actions.php +++ b/modules/anagrafiche/actions.php @@ -2,6 +2,11 @@ include_once __DIR__.'/../../core.php'; +$id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica']; +$id_cliente = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Cliente'")[0]['idtipoanagrafica']; +$id_fornitore = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Fornitore'")[0]['idtipoanagrafica']; +$id_tecnico = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Tecnico'")[0]['idtipoanagrafica']; + switch (post('op')) { case 'update': $post['piva'] = trim(strtoupper($post['piva'])); @@ -183,8 +188,9 @@ switch (post('op')) { // Inserisco il rapporto dell'anagrafica (cliente, tecnico, ecc) $dbo->sync('an_tipianagrafiche_anagrafiche', ['idanagrafica' => $new_id], ['idtipoanagrafica' => (array) $idtipoanagrafica]); - if (in_array($id_azienda, $post['idtipoanagrafica'])) { - $dbo->query('UPDATE zz_settings SET valore='.prepare($new_id)." WHERE nome='Azienda predefinita'"); + if (in_array($id_azienda, $idtipoanagrafica)) { + Settings::set('Azienda predefinita', $new_id); + $_SESSION['infos'][] = tr('Anagrafica Azienda impostata come predefinita. Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali".'); } @@ -266,19 +272,13 @@ switch (post('op')) { // Operazioni aggiuntive per il logo if (filter('op') == 'link_file') { - $nome = 'Logo stampe'; - - if (Settings::get('Azienda predefinita') == $id_record && filter('nome_allegato') == $nome) { + if (Settings::get('Azienda predefinita') == $id_record && filter('nome_allegato') == 'Logo stampe') { $file = $dbo->selectOne('zz_files', ['filename'], [ 'nome' => $nome, 'id_module' => $id_module, 'id_record' => $id_record, ]); - $dbo->update('zz_settings', [ - 'valore' => $file['filename'], - ], [ - 'nome' => $nome, - ]); + Settings::set('Logo stampe', $nome); } } diff --git a/modules/anagrafiche/init.php b/modules/anagrafiche/init.php index 6a748672c..56d5ecfbe 100644 --- a/modules/anagrafiche/init.php +++ b/modules/anagrafiche/init.php @@ -2,11 +2,6 @@ include_once __DIR__.'/../../core.php'; -$id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica']; -$id_cliente = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Cliente'")[0]['idtipoanagrafica']; -$id_fornitore = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Fornitore'")[0]['idtipoanagrafica']; -$id_tecnico = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Tecnico'")[0]['idtipoanagrafica']; - if (isset($id_record)) { $records = $dbo->fetchArray('SELECT *, (SELECT GROUP_CONCAT(an_tipianagrafiche.idtipoanagrafica) FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica=an_anagrafiche.idanagrafica) AS idtipianagrafica, (SELECT GROUP_CONCAT(idagente) FROM an_anagrafiche_agenti WHERE idanagrafica=an_anagrafiche.idanagrafica) AS idagenti, (SELECT GROUP_CONCAT(descrizione) FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica=an_anagrafiche.idanagrafica) AS tipianagrafica FROM an_anagrafiche GROUP BY idanagrafica HAVING idanagrafica='.prepare($id_record).' '.Modules::getAdditionalsQuery($id_module)); diff --git a/src/API.php b/src/API.php index c2cb86f44..ae824826d 100644 --- a/src/API.php +++ b/src/API.php @@ -111,7 +111,7 @@ class API extends \Util\Singleton include $filename; } elseif ( !in_array($resource, explode(',', Settings::get('Tabelle escluse per la sincronizzazione API automatica'))) - && $database->fetchNum('SHOW TABLES WHERE `Tables_in_'.$database->getDatabaseName().'` = '.prepare($resource)) + && $database->tableExists($resource) ) { $table = $resource; diff --git a/src/Auth.php b/src/Auth.php index 4ba2af761..f0ecda878 100644 --- a/src/Auth.php +++ b/src/Auth.php @@ -411,7 +411,7 @@ class Auth extends \Util\Singleton { $database = Database::getConnection(); - if (!$database->isInstalled() || !$database->fetchNum("SHOW TABLES LIKE 'zz_logs'") || Update::isUpdateAvailable()) { + if (!$database->isInstalled() || !$database->tableExists('zz_logs') || Update::isUpdateAvailable()) { return false; } diff --git a/src/Database.php b/src/Database.php index b627b6cc0..82c669c24 100644 --- a/src/Database.php +++ b/src/Database.php @@ -174,7 +174,7 @@ class Database extends Util\Singleton public function isInstalled() { if (empty($this->is_installed)) { - $this->is_installed = $this->isConnected() && $this->fetchNum("SHOW TABLES LIKE 'zz_modules'"); + $this->is_installed = $this->tableExists('zz_modules'); } return $this->is_installed; @@ -321,16 +321,28 @@ class Database extends Util\Singleton * * @param string $query Query da eseguire * - * @return array + * @return int */ public function fetchNum($query) { - $result = $this->fetchArray($query); - if (is_array($result)) { - return count($result); + $result = $this->fetchArray('SELECT COUNT(*) as `tot` FROM ('.$query.') AS `count`'); + + if (!empty($result)) { + return $result[0]['tot']; } - return $result; + return 0; + } + + public function tableExists($table) + { + $results = null; + + if ($this->isConnected()) { + $results = $this->fetchArray("SHOW TABLES LIKE '".$table."'"); + } + + return !empty($results); } /** diff --git a/src/Update.php b/src/Update.php index 5ab923fbb..1539497f6 100644 --- a/src/Update.php +++ b/src/Update.php @@ -17,7 +17,7 @@ class Update { $database = Database::getConnection(); - $database_ready = $database->isConnected() && $database->fetchNum("SHOW TABLES LIKE 'updates'"); + $database_ready = $database->isConnected() && $database->tableExists('updates'); // Individuazione di tutti gli aggiornamenti fisicamente presenti // Aggiornamenti del gestionale diff --git a/update/api.php b/update/api.php index b00cc614d..637747a0b 100644 --- a/update/api.php +++ b/update/api.php @@ -91,7 +91,7 @@ $tables = [ ]; foreach ($tables as $table) { - if ($database->fetchNum('SHOW TABLES WHERE `Tables_in_'.$database->getDatabaseName().'` = '.prepare($table))) { + if ($database->tableExists($table)) { $query = 'SHOW COLUMNS FROM `'.$table.'` IN `'.$database->getDatabaseName()."` WHERE Field='|field|'"; $created_at = $database->fetchArray(str_replace('|field|', 'created_at', $query));