mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-02 08:56:48 +01:00
Bugfix generale
Risoluzione delle problematiche incontate con l'installazione del software su Aruba con versione di MySQL non aggiornata. Aggiunto sistema automatico di completamento dei campi per l'API, con disattivazione del severzio automatica per MySQL < 5.6.5.
This commit is contained in:
parent
212db2f487
commit
78484220fe
4
call.php
4
call.php
@ -10,8 +10,8 @@ if (isset($id_record)) {
|
||||
$posizione .= ', '.$id_record;
|
||||
}
|
||||
|
||||
$dbo->query('UPDATE zz_semaphores SET updated_at = NOW() WHERE id_utente = '.prepare($_SESSION['idutente']).' AND posizione = '.prepare($posizione));
|
||||
$dbo->query('DELETE FROM zz_semaphores WHERE DATE_ADD(updated_at, INTERVAL '.(get_var('Timeout notifica di presenza (minuti)') * 2).' SECOND) <= NOW()');
|
||||
$dbo->query('UPDATE zz_semaphores SET updated = NOW() WHERE id_utente = '.prepare($_SESSION['idutente']).' AND posizione = '.prepare($posizione));
|
||||
$dbo->query('DELETE FROM zz_semaphores WHERE DATE_ADD(updated, INTERVAL '.(get_var('Timeout notifica di presenza (minuti)') * 2).' SECOND) <= NOW()');
|
||||
$datas = $dbo->fetchArray('SELECT DISTINCT * FROM zz_semaphores INNER JOIN zz_users ON zz_semaphores.id_utente=zz_users.idutente WHERE id_utente != '.prepare($_SESSION['idutente']).' AND posizione = '.prepare($posizione));
|
||||
|
||||
$result = [];
|
||||
|
@ -29,7 +29,7 @@ include $docroot.'/actions.php';
|
||||
$advanced_sessions = get_var('Attiva notifica di presenza utenti sul record');
|
||||
if ($advanced_sessions) {
|
||||
$dbo->query('DELETE FROM zz_semaphores WHERE id_utente='.prepare($_SESSION['idutente']).' AND posizione='.prepare($id_module.', '.$id_record));
|
||||
$dbo->query('INSERT INTO zz_semaphores (id_utente, posizione) VALUES ('.prepare($_SESSION['idutente']).', '.prepare($id_module.', '.$id_record).')');
|
||||
$dbo->query('INSERT INTO zz_semaphores (id_utente, posizione, updated) VALUES ('.prepare($_SESSION['idutente']).', '.prepare($id_module.', '.$id_record).', NOW())');
|
||||
|
||||
echo '
|
||||
<div class="box box-warning box-solid text-center info-active hide">
|
||||
|
@ -3,7 +3,7 @@
|
||||
include_once __DIR__.'/../core.php';
|
||||
|
||||
$updateRate = 20;
|
||||
$scriptValue = $updateRate * 3;
|
||||
$scriptValue = $updateRate * 5;
|
||||
|
||||
/*
|
||||
* Aggiornamento tramite AJAX
|
||||
@ -205,19 +205,20 @@ if (filter('action') == 'do_update') {
|
||||
|
||||
$total = 0;
|
||||
$updates = Update::getTodos();
|
||||
|
||||
foreach ($updates as $update) {
|
||||
if ($update['sql'] && $update['done'] !== 0) {
|
||||
if ($update['sql'] && (!empty($update['done']) || is_null($update['done']))) {
|
||||
$queries = readSQLFile(DOCROOT.$update['directory'].$update['filename'].'.sql', ';');
|
||||
$total += count($queries);
|
||||
|
||||
if (intval($update['done']) > 1) {
|
||||
$total -= intval($update['done']) - 2;
|
||||
}
|
||||
}
|
||||
|
||||
if ($update['script']) {
|
||||
$total += $scriptValue;
|
||||
}
|
||||
|
||||
if ($update['done'] > 1) {
|
||||
$total -= $update['done'] - 2;
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -32,6 +32,10 @@ class API extends \Util\Singleton
|
||||
'code' => 500,
|
||||
'message' => 'Errore del server',
|
||||
],
|
||||
'incompatible' => [
|
||||
'code' => 503,
|
||||
'message' => 'Servizio non disponibile',
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
@ -217,13 +221,14 @@ class API extends \Util\Singleton
|
||||
public static function error($error)
|
||||
{
|
||||
$keys = array_keys(self::$status);
|
||||
$error = (in_array($error, $keys)) ? $error : end($keys);
|
||||
$error = (in_array($error, $keys)) ? $error : 'serverError';
|
||||
|
||||
http_response_code(self::$status[$error]['code']);
|
||||
$code = self::$status[$error]['code'];
|
||||
|
||||
http_response_code($code);
|
||||
|
||||
return self::response([
|
||||
'status' => self::$status[$error]['code'],
|
||||
'message' => self::$status[$error]['message'],
|
||||
'status' => $code,
|
||||
]);
|
||||
}
|
||||
|
||||
@ -278,9 +283,21 @@ class API extends \Util\Singleton
|
||||
*/
|
||||
public static function response($array)
|
||||
{
|
||||
if (!self::isCompatible()) {
|
||||
$array = [
|
||||
'status' => self::$status['incompatible']['code'],
|
||||
];
|
||||
}
|
||||
|
||||
if (empty($array['status'])) {
|
||||
$array['status'] = self::$status['ok']['code'];
|
||||
$array['message'] = self::$status['ok']['message'];
|
||||
}
|
||||
|
||||
if (empty($array['message'])) {
|
||||
$codes = array_column(self::$status, 'code');
|
||||
$messages = array_column(self::$status, 'message');
|
||||
|
||||
$array['message'] = $messages[array_search($array['status'], $codes)];
|
||||
}
|
||||
|
||||
$flags = JSON_FORCE_OBJECT;
|
||||
@ -318,4 +335,16 @@ class API extends \Util\Singleton
|
||||
{
|
||||
return (array) json_decode(file_get_contents('php://input'), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Controlla se il database è compatibile con l'API.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isCompatible()
|
||||
{
|
||||
$database = Database::getConnection();
|
||||
|
||||
return version_compare($database->getMySQLVersion(), '5.6.5') >= 0;
|
||||
}
|
||||
}
|
||||
|
@ -62,14 +62,20 @@ class Database extends Util\Singleton
|
||||
|
||||
if (!empty($this->host) && !empty($this->database_name)) {
|
||||
try {
|
||||
$this->pdo = new \DebugBar\DataCollector\PDO\TraceablePDO(new PDO(
|
||||
$this->pdo = new PDO(
|
||||
'mysql:host='.$this->host.(!empty($this->port) ? ';port='.$this->port : '').';dbname='.$this->database_name,
|
||||
$this->username,
|
||||
$this->password,
|
||||
$this->option
|
||||
));
|
||||
);
|
||||
|
||||
$this->query("SET NAMES '".$this->charset."'");
|
||||
// Fix per problemi di compatibilità delle password MySQL 4.1+ (da versione precedente)
|
||||
$this->query('SET SESSION old_passwords = 0');
|
||||
//$this->query('SET PASSWORD = PASSWORD('.$this->prepare($this->password).')');
|
||||
|
||||
$this->pdo = new \DebugBar\DataCollector\PDO\TraceablePDO($this->pdo);
|
||||
|
||||
//$this->query("SET NAMES '".$this->charset."'");
|
||||
$this->query("SET sql_mode = ''");
|
||||
} catch (PDOException $e) {
|
||||
if ($e->getCode() == 1049 || $e->getCode() == 1044) {
|
||||
|
@ -234,6 +234,9 @@ class Update
|
||||
|
||||
$database->query('UPDATE `updates` SET `done` = 0 WHERE id = '.prepare($update['id']));
|
||||
|
||||
// Normalizzazione dei campi per l'API
|
||||
self::executeScript(DOCROOT.'/update/api.php');
|
||||
|
||||
// Esecuzione script release
|
||||
if (!empty($update['script']) && file_exists($file.'.php')) {
|
||||
self::executeScript($file.'.php');
|
||||
|
@ -282,7 +282,7 @@ $qp = "SELECT id, idcontratto, richiesta, data_richiesta, 'intervento' AS ref, (
|
||||
UNION SELECT id, idcontratto, '', data_scadenza, 'ordine', (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento='ODS') AS tipointervento FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL ORDER BY data_richiesta ASC";
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
|
||||
if(!empty($rsp)){
|
||||
if (!empty($rsp)) {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-10">';
|
||||
@ -291,24 +291,23 @@ if(!empty($rsp)){
|
||||
echo '
|
||||
<div id="calendar"></div>';
|
||||
|
||||
if(!empty($rsp)){
|
||||
if (!empty($rsp)) {
|
||||
echo '
|
||||
</div>
|
||||
|
||||
<div id="external-events" class="hidden-xs hidden-sm col-md-2">
|
||||
<h4>'._('Interventi da pianificare').'</h4>';
|
||||
|
||||
foreach ($rsp as $r) {
|
||||
foreach ($rsp as $r) {
|
||||
echo '
|
||||
<div class="fc-event " data-id="'.$r['id'].'" data-idcontratto="'.$r['idcontratto'].'">'.Translator::dateToLocale($r['data_richiesta']).' ('.$r['tipointervento'].')'.(!empty($r['richiesta']) ? ' - '.$r['richiesta'] : '' ).'</div>';
|
||||
}
|
||||
<div class="fc-event " data-id="'.$r['id'].'" data-idcontratto="'.$r['idcontratto'].'">'.Translator::dateToLocale($r['data_richiesta']).' ('.$r['tipointervento'].')'.(!empty($r['richiesta']) ? ' - '.$r['richiesta'] : '').'</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
||||
$vista = get_var('Vista dashboard');
|
||||
if ($vista == 'mese') {
|
||||
$def = 'month';
|
||||
@ -459,6 +458,9 @@ if (get_var('Abilitare orario lavorativo') == '1') {
|
||||
setTimeout("$('#mini-loader').hide()", 1000);
|
||||
}
|
||||
},
|
||||
<?php
|
||||
if (Modules::getPermission($id_module) == 'rw') {
|
||||
?>
|
||||
drop: function(date, jsEvent, ui, resourceId) {
|
||||
data = moment(date).format("YYYY-MM-DD");
|
||||
ora_dal = moment(date).format("HH:mm");
|
||||
@ -466,17 +468,18 @@ if (get_var('Abilitare orario lavorativo') == '1') {
|
||||
|
||||
var name = ($(this).data('ref') == 'ordine') ? 'idordineservizio' : 'idcontratto_riga';
|
||||
|
||||
<?php
|
||||
if (Modules::getPermission($id_module) == 'rw') {
|
||||
?>
|
||||
launch_modal('<?php echo _('Pianifica intervento'); ?>', globals.rootdir + '/add.php?id_module=<?php echo Modules::getModule('Interventi')['id'] ?>&data='+data+'&orario_inizio='+ora_dal+'&orario_fine='+ora_al+'&ref=dashboard&idcontratto=' + $(this).data('idcontratto') + '&' + name + '=' + $(this).data('id'), 1);
|
||||
<?php
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
$(this).remove();
|
||||
},
|
||||
|
||||
$('#bs-popup').on('hidden.bs.modal', function () {
|
||||
$('#calendar').fullCalendar('refetchEvents');
|
||||
});
|
||||
},
|
||||
<?php
|
||||
|
||||
}
|
||||
?>
|
||||
select: function(start, end, allDay) {
|
||||
data = moment(start).format("YYYY-MM-DD");
|
||||
ora_dal = moment(start).format("HH:mm");
|
||||
|
173
update/2_3.php
173
update/2_3.php
@ -1,109 +1,5 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Creazione dei campi per l'API (created_at e updated_at)
|
||||
*/
|
||||
|
||||
// I record precedenti vengono impostati a NULL
|
||||
$tables = [
|
||||
'an_anagrafiche',
|
||||
'an_anagrafiche_agenti',
|
||||
'an_nazioni',
|
||||
'an_referenti',
|
||||
'an_relazioni',
|
||||
'an_sedi',
|
||||
'an_tipianagrafiche',
|
||||
'an_tipianagrafiche_anagrafiche',
|
||||
'an_zone',
|
||||
'co_contratti',
|
||||
'co_contratti_tipiintervento',
|
||||
'co_documenti',
|
||||
'co_iva',
|
||||
'co_movimenti',
|
||||
'co_ordiniservizio',
|
||||
'co_ordiniservizio_pianificazionefatture',
|
||||
'co_ordiniservizio_vociservizio',
|
||||
'co_pagamenti',
|
||||
'co_pianodeiconti1',
|
||||
'co_pianodeiconti2',
|
||||
'co_pianodeiconti3',
|
||||
'co_preventivi',
|
||||
'co_preventivi_interventi',
|
||||
'co_righe2_contratti',
|
||||
'co_righe_contratti',
|
||||
'co_righe_documenti',
|
||||
'co_righe_preventivi',
|
||||
'co_ritenutaacconto',
|
||||
'co_rivalsainps',
|
||||
'co_scadenziario',
|
||||
'co_staticontratti',
|
||||
'co_statidocumento',
|
||||
'co_statipreventivi',
|
||||
'co_tipidocumento',
|
||||
'dt_aspettobeni',
|
||||
'dt_automezzi',
|
||||
'dt_automezzi_tecnici',
|
||||
'dt_causalet',
|
||||
'dt_ddt',
|
||||
'dt_porto',
|
||||
'dt_righe_ddt',
|
||||
'dt_spedizione',
|
||||
'dt_statiddt',
|
||||
'dt_tipiddt',
|
||||
'in_interventi',
|
||||
'in_interventi_tecnici',
|
||||
'in_righe_interventi',
|
||||
'in_statiintervento',
|
||||
'in_tariffe',
|
||||
'in_tipiintervento',
|
||||
'in_vociservizio',
|
||||
'mg_articoli',
|
||||
'mg_articoli_automezzi',
|
||||
'mg_articoli_interventi',
|
||||
'mg_categorie',
|
||||
'mg_listini',
|
||||
'mg_movimenti',
|
||||
'mg_prodotti',
|
||||
'mg_unitamisura',
|
||||
'my_componenti_interventi',
|
||||
'my_impianti',
|
||||
'my_impianti_contratti',
|
||||
'my_impianti_interventi',
|
||||
'my_impianto_componenti',
|
||||
'or_ordini',
|
||||
'or_righe_ordini',
|
||||
'or_statiordine',
|
||||
'or_tipiordine',
|
||||
'zz_tokens',
|
||||
'zz_files',
|
||||
'zz_groups',
|
||||
'zz_group_module',
|
||||
'zz_settings',
|
||||
'zz_logs',
|
||||
'zz_modules',
|
||||
'zz_plugins',
|
||||
'zz_permissions',
|
||||
'zz_users',
|
||||
'zz_widgets',
|
||||
'zz_views',
|
||||
'zz_group_view',
|
||||
'zz_semaphores',
|
||||
];
|
||||
|
||||
// created_at e updated_at
|
||||
$latest_ver = version_compare($mysql_ver, '5.6.5') >= 0;
|
||||
foreach ($tables as $table) {
|
||||
if ($latest_ver) {
|
||||
$database->query('ALTER TABLE `'.$table.'` ADD (`created_at` timestamp DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)');
|
||||
} else {
|
||||
$database->query('ALTER TABLE `'.$table.'` ADD (`created_at` timestamp DEFAULT NULL, `updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)');
|
||||
$database->query('UPDATE '.$table.' SET created_at = updated_at');
|
||||
|
||||
// Trigger per l'inizializzazione automatica di created_at
|
||||
$database->query('CREATE TRIGGER '.$table.'_creation BEFORE INSERT ON '.$table.' FOR EACH ROW SET NEW.created_at = CURRENT_TIMESTAMP');
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Inserimento valori di default
|
||||
*/
|
||||
@ -149,28 +45,28 @@ $database->query("UPDATE my_impianto_componenti SET contenuto = REPLACE(REPLACE(
|
||||
|
||||
// Fix per la presenza della Foreign Key in in_interventi_tecnici
|
||||
$fk = $database->fetchArray('SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '.prepare($database->getDatabaseName())." AND REFERENCED_TABLE_NAME = 'in_interventi' AND CONSTRAINT_NAME = 'in_interventi_tecnici_ibfk_1'");
|
||||
if(!empty($fk)){
|
||||
$database->query("ALTER TABLE `in_interventi_tecnici` DROP FOREIGN KEY `in_interventi_tecnici_ibfk_1`");
|
||||
if (!empty($fk)) {
|
||||
$database->query('ALTER TABLE `in_interventi_tecnici` DROP FOREIGN KEY `in_interventi_tecnici_ibfk_1`');
|
||||
}
|
||||
|
||||
$database->query("ALTER TABLE `in_interventi` DROP PRIMARY KEY, CHANGE `idintervento` `codice` varchar(25) NOT NULL UNIQUE, ADD PRIMARY KEY (`id`)");
|
||||
$database->query("DROP INDEX primary_key ON `in_interventi`");
|
||||
$database->query("UPDATE `in_interventi_tecnici` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`codice` = `in_interventi_tecnici`.`idintervento`)");
|
||||
$database->query("ALTER TABLE `in_interventi_tecnici` CHANGE `idintervento` `idintervento` varchar(25)");
|
||||
$database->query('ALTER TABLE `in_interventi` DROP PRIMARY KEY, CHANGE `idintervento` `codice` varchar(25) NOT NULL UNIQUE, ADD PRIMARY KEY (`id`)');
|
||||
$database->query('DROP INDEX primary_key ON `in_interventi`');
|
||||
$database->query('UPDATE `in_interventi_tecnici` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`codice` = `in_interventi_tecnici`.`idintervento`)');
|
||||
$database->query('ALTER TABLE `in_interventi_tecnici` CHANGE `idintervento` `idintervento` varchar(25)');
|
||||
$database->query("UPDATE `in_interventi_tecnici` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = ''");
|
||||
$database->query("ALTER TABLE `in_interventi_tecnici` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE");
|
||||
$database->query('ALTER TABLE `in_interventi_tecnici` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE');
|
||||
|
||||
// Fix dei timestamp delle tabelle mg_prodotti, mg_movimenti, zz_logs e zz_files
|
||||
$database->query('UPDATE `mg_prodotti` SET `created_at` = `data`, `updated_at` = `data`');
|
||||
$database->query('UPDATE `mg_prodotti` SET `created_at` = `data`');
|
||||
$database->query('ALTER TABLE `mg_prodotti` DROP `data`');
|
||||
|
||||
$database->query('UPDATE `mg_movimenti` SET `created_at` = `data`, `updated_at` = `data`');
|
||||
$database->query('UPDATE `mg_movimenti` SET `created_at` = `data`');
|
||||
$database->query('ALTER TABLE `mg_movimenti` DROP `data`');
|
||||
|
||||
$database->query('UPDATE `zz_logs` SET `created_at` = `timestamp`, `updated_at` = `timestamp`');
|
||||
$database->query('UPDATE `zz_logs` SET `created_at` = `timestamp`');
|
||||
$database->query('ALTER TABLE `zz_logs` DROP `timestamp`');
|
||||
|
||||
$database->query('UPDATE `zz_files` SET `created_at` = `data`, `updated_at` = `data`');
|
||||
$database->query('UPDATE `zz_files` SET `created_at` = `data`');
|
||||
$database->query('ALTER TABLE `zz_files` DROP `data`');
|
||||
|
||||
/*
|
||||
@ -227,17 +123,46 @@ foreach ($files as $file) {
|
||||
// File .html dei moduli di default
|
||||
// Per un problema sulla lunghezza massima del path su glob è necessario dividere le cartelle dei moduli di default da pulire
|
||||
$dirs = [
|
||||
'aggiornamenti,anagrafiche,articoli,automezzi,backup',
|
||||
'beni,categorie,causali,contratti,dashboard',
|
||||
'ddt,fatture,gestione_componenti,interventi,iva',
|
||||
'listini,misure,my_impianti,opzioni,ordini,pagamenti',
|
||||
'partitario,porti,preventivi,primanota,scadenzario',
|
||||
'stati_intervento,tecnici_tariffe,tipi_anagrafiche,tipi_intervento',
|
||||
'utenti,viste,voci_servizio,zone',
|
||||
'aggiornamenti',
|
||||
'anagrafiche',
|
||||
'articoli',
|
||||
'automezzi',
|
||||
'backup',
|
||||
'beni',
|
||||
'categorie',
|
||||
'causali',
|
||||
'contratti',
|
||||
'dashboard',
|
||||
'ddt',
|
||||
'fatture',
|
||||
'gestione_componenti',
|
||||
'interventi',
|
||||
'iva',
|
||||
'listini',
|
||||
'misure',
|
||||
'my_impianti',
|
||||
'opzioni',
|
||||
'ordini',
|
||||
'pagamenti',
|
||||
'partitario',
|
||||
'porti',
|
||||
'preventivi',
|
||||
'primanota',
|
||||
'scadenzario',
|
||||
'stati_intervento',
|
||||
'tecnici_tariffe',
|
||||
'tipi_anagrafiche',
|
||||
'tipi_intervento',
|
||||
'utenti',
|
||||
'viste',
|
||||
'voci_servizio',
|
||||
'zone',
|
||||
];
|
||||
|
||||
foreach ($dirs as $dir) {
|
||||
$files = glob($docroot.'/modules/{'.$dir.'}/*.html', GLOB_BRACE);
|
||||
$pieces = array_chunk($tables, 5);
|
||||
|
||||
foreach ($pieces as $piece) {
|
||||
$files = glob($docroot.'/modules/{'.implode(',', $piece).'}/*.html', GLOB_BRACE);
|
||||
foreach ($files as $file) {
|
||||
unlink($file);
|
||||
}
|
||||
|
@ -375,7 +375,8 @@ INSERT INTO `zz_settings` (`nome`, `valore`, `tipo`, `editable`, `sezione`) VALU
|
||||
-- Aggiunta tabella per le sessioni avanazate
|
||||
CREATE TABLE IF NOT EXISTS `zz_semaphores` (
|
||||
`id_utente` int(11) NOT NULL,
|
||||
`posizione` varchar(255) NOT NULL
|
||||
`posizione` varchar(255) NOT NULL,
|
||||
`updated` datetime
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- Aggiornamento zz_modules
|
||||
@ -668,7 +669,7 @@ ALTER TABLE `zz_plugins` ADD FOREIGN KEY (`idmodule_from`) REFERENCES `zz_module
|
||||
ALTER TABLE `zz_users` CHANGE `idutente` `idutente` int(11) NOT NULL AUTO_INCREMENT, ADD FOREIGN KEY (`idgruppo`) REFERENCES `zz_groups`(`id`) ON DELETE CASCADE;
|
||||
|
||||
-- Aggiunta di chiavi esterne in zz_logs
|
||||
ALTER TABLE `zz_logs` DROP `password`, CHANGE `idutente` `idutente` int(11);
|
||||
ALTER TABLE `zz_logs` DROP `password`, CHANGE `idutente` `idutente` int(11), CHANGE `timestamp` `timestamp` datetime;
|
||||
UPDATE `zz_logs` SET `idutente` = NULL WHERE `idutente` = 0;
|
||||
ALTER TABLE `zz_logs` ADD FOREIGN KEY (`idutente`) REFERENCES `zz_users`(`idutente`) ON DELETE CASCADE;
|
||||
|
||||
@ -950,3 +951,6 @@ ALTER TABLE `or_righe_ordini` CHANGE `data_evasione` `data_evasione` date;
|
||||
|
||||
-- ALTER TABLE `my_componenti_interventi` ADD PRIMARY KEY (`id_intervento`, `id_componente`);
|
||||
-- ALTER TABLE `my_impianti_interventi` ADD PRIMARY KEY (`idintervento`, `idimpianto`);
|
||||
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT(SUM(qta),2), ",", "#"), ".", ","), "#", "."), "unità") AS dato FROM mg_articoli WHERE qta>0' WHERE `name` = 'Articoli in magazzino';
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT(SUM(prezzo_acquisto*qta),2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM mg_articoli WHERE qta>0' WHERE `name` = 'Valore magazzino';
|
||||
|
122
update/api.php
Normal file
122
update/api.php
Normal file
@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Creazione dei campi per l'API (created_at e updated_at)
|
||||
*/
|
||||
|
||||
// I record precedenti vengono impostati a NULL
|
||||
$tables = [
|
||||
'an_anagrafiche',
|
||||
'an_anagrafiche_agenti',
|
||||
'an_nazioni',
|
||||
'an_referenti',
|
||||
'an_relazioni',
|
||||
'an_sedi',
|
||||
'an_tipianagrafiche',
|
||||
'an_tipianagrafiche_anagrafiche',
|
||||
'an_zone',
|
||||
'co_contratti',
|
||||
'co_contratti_tipiintervento',
|
||||
'co_documenti',
|
||||
'co_iva',
|
||||
'co_movimenti',
|
||||
'co_ordiniservizio',
|
||||
'co_ordiniservizio_pianificazionefatture',
|
||||
'co_ordiniservizio_vociservizio',
|
||||
'co_pagamenti',
|
||||
'co_pianodeiconti1',
|
||||
'co_pianodeiconti2',
|
||||
'co_pianodeiconti3',
|
||||
'co_preventivi',
|
||||
'co_preventivi_interventi',
|
||||
'co_righe2_contratti',
|
||||
'co_righe_contratti',
|
||||
'co_righe_documenti',
|
||||
'co_righe_preventivi',
|
||||
'co_ritenutaacconto',
|
||||
'co_rivalsainps',
|
||||
'co_scadenziario',
|
||||
'co_staticontratti',
|
||||
'co_statidocumento',
|
||||
'co_statipreventivi',
|
||||
'co_tipidocumento',
|
||||
'dt_aspettobeni',
|
||||
'dt_automezzi',
|
||||
'dt_automezzi_tecnici',
|
||||
'dt_causalet',
|
||||
'dt_ddt',
|
||||
'dt_porto',
|
||||
'dt_righe_ddt',
|
||||
'dt_spedizione',
|
||||
'dt_statiddt',
|
||||
'dt_tipiddt',
|
||||
'in_interventi',
|
||||
'in_interventi_tecnici',
|
||||
'in_righe_interventi',
|
||||
'in_statiintervento',
|
||||
'in_tariffe',
|
||||
'in_tipiintervento',
|
||||
'in_vociservizio',
|
||||
'mg_articoli',
|
||||
'mg_articoli_automezzi',
|
||||
'mg_articoli_interventi',
|
||||
'mg_categorie',
|
||||
'mg_listini',
|
||||
'mg_movimenti',
|
||||
'mg_prodotti',
|
||||
'mg_unitamisura',
|
||||
'my_componenti_interventi',
|
||||
'my_impianti',
|
||||
'my_impianti_contratti',
|
||||
'my_impianti_interventi',
|
||||
'my_impianto_componenti',
|
||||
'or_ordini',
|
||||
'or_righe_ordini',
|
||||
'or_statiordine',
|
||||
'or_tipiordine',
|
||||
'zz_tokens',
|
||||
'zz_files',
|
||||
'zz_groups',
|
||||
'zz_group_module',
|
||||
'zz_settings',
|
||||
'zz_logs',
|
||||
'zz_modules',
|
||||
'zz_plugins',
|
||||
'zz_permissions',
|
||||
'zz_users',
|
||||
'zz_widgets',
|
||||
'zz_views',
|
||||
'zz_group_view',
|
||||
'zz_semaphores',
|
||||
];
|
||||
|
||||
$pieces = array_chunk($tables, 10);
|
||||
|
||||
foreach ($pieces as $piece) {
|
||||
$implode = [];
|
||||
foreach ($piece as $table) {
|
||||
$implode[] = prepare($table);
|
||||
}
|
||||
|
||||
$query = 'SELECT table_name FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_SCHEMA = '.prepare($database->getDatabaseName()).' AND
|
||||
T.TABLE_NAME IN('.implode(',', $implode).") AND
|
||||
NOT EXISTS (
|
||||
SELECT table_name
|
||||
FROM INFORMATION_SCHEMA.COLUMNS C
|
||||
WHERE
|
||||
C.TABLE_SCHEMA = T.TABLE_SCHEMA AND
|
||||
C.TABLE_NAME = T.TABLE_NAME AND
|
||||
C.COLUMN_NAME = '|field|')";
|
||||
|
||||
$created_at = $database->fetchArray(str_replace('|field|', 'created_at', $query));
|
||||
foreach ($created_at as $table) {
|
||||
$database->query('ALTER TABLE `'.$table['table_name'].'` ADD `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP');
|
||||
}
|
||||
|
||||
if (API::isCompatible()) {
|
||||
$updated_at = $database->fetchArray(str_replace('|field|', 'updated_at', $query));
|
||||
foreach ($updated_at as $table) {
|
||||
$database->query('ALTER TABLE `'.$table['table_name'].'` `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP');
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user