diff --git a/api/index.php b/api/index.php index 815e7d4b3..5bf3dc75a 100644 --- a/api/index.php +++ b/api/index.php @@ -5,7 +5,7 @@ function serverError() $error = error_get_last(); if ($error['type'] == E_ERROR) { ob_end_clean(); - echo API::error('serverError'); + echo Response::error('serverError'); } } @@ -22,61 +22,21 @@ session_write_close(); header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS'); -// Attenzione: al momento l'API permette la lettura di tutte le tabelle presenti nel database (non limitate a quelle del progetto) +use API\Response; try { - // Controlli sulla chiave di accesso - $api = new API(); - - // Lettura delle informazioni - $request = API::getRequest(); - - // Gestione della richiesta - $method = $_SERVER['REQUEST_METHOD']; - switch ($method) { - // Richiesta PUT (modifica elementi) - case 'PUT': - $response = $api->update($request); - break; - - // Richiesta POST (creazione elementi) - case 'POST': - $response = $api->create($request); - break; - - // Richiesta GET (ottenimento elementi) - case 'GET': - // Risorsa specificata - if (count($request) > 1) { - $response = $api->retrieve($request); - } - - // Risorsa non specificata (lista delle risorse disponibili) - else { - $response = API::response([ - 'resources' => array_keys(API::getResources()['retrieve']), - ]); - } - break; - - // Richiesta DELETE (eliminazione elementi) - case 'DELETE': - $response = $api->delete($request); - break; - } -} catch (InvalidArgumentException $e) { - $response = API::error('unauthorized'); + $response = Response::manage(); } catch (Exception $e) { // Log dell'errore $logger = logger(); $logger->addRecord(\Monolog\Logger::ERROR, $e); - $response = API::error('serverError'); + $response = Response::error('serverError'); } // Richiesta OPTIONS (controllo da parte del dispositivo) if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { - $response = API::error('ok'); + $response = Response::error('ok'); } json_decode($response); diff --git a/config/namespaces.php b/config/namespaces.php index 974ca80a2..e00ca261e 100644 --- a/config/namespaces.php +++ b/config/namespaces.php @@ -17,6 +17,12 @@ return [ 'modules/interventi' => 'Modules\Interventi', 'modules/pagamenti' => 'Modules\Pagamenti', 'modules/statistiche' => 'Modules\Statistiche', + 'modules/utenti' => 'Modules\Utenti', + 'modules/stato_servizi' => 'Modules\StatoServizi', + 'modules/stati_intervento' => 'Modules\StatiIntervento', + 'modules/stati_preventivo' => 'Modules\StatiPreventivo', + 'modules/stati_contratto' => 'Modules\StatiContratto', + 'modules/stato_servizi' => 'Modules\StatoServizi', 'modules/tipi_intervento' => 'Modules\TipiIntervento', 'plugins/exportFE' => 'Plugins\ExportFE', 'plugins/importFE' => 'Plugins\ImportFE', diff --git a/core.php b/core.php index cab7c3788..19d36896b 100644 --- a/core.php +++ b/core.php @@ -28,6 +28,9 @@ $namespaces = require_once __DIR__.'/config/namespaces.php'; foreach ($namespaces as $path => $namespace) { $loader->addPsr4($namespace.'\\', __DIR__.'/'.$path.'/custom/src'); $loader->addPsr4($namespace.'\\', __DIR__.'/'.$path.'/src'); + + $loader->addPsr4($namespace.'\\API\\', __DIR__.'/'.$path.'/custom/api'); + $loader->addPsr4($namespace.'\\API\\', __DIR__.'/'.$path.'/api'); } // Individuazione dei percorsi di base @@ -60,7 +63,7 @@ use Monolog\Handler\RotatingFileHandler; use Monolog\Handler\StreamHandler; $handlers = []; -if (!API::isAPIRequest()) { +if (!API\Response::isAPIRequest()) { // File di log di base (logs/error.log, logs/setup.log) $handlers[] = new StreamHandler($docroot.'/logs/error.log', Monolog\Logger::ERROR); $handlers[] = new StreamHandler($docroot.'/logs/setup.log', Monolog\Logger::EMERGENCY); @@ -124,7 +127,7 @@ Monolog\ErrorHandler::register($logger, [], Monolog\Logger::ERROR, Monolog\Logge $dbo = $database = database(); /* SESSIONE */ -if (!API::isAPIRequest()) { +if (!API\Response::isAPIRequest()) { // Sicurezza della sessioni ini_set('session.use_trans_sid', '0'); ini_set('session.use_only_cookies', '1'); @@ -162,7 +165,7 @@ $revision = Update::getRevision(); /* ACCESSO E INSTALLAZIONE */ // Controllo sulla presenza dei permessi di accesso basilari -$continue = $dbo->isInstalled() && !Update::isUpdateAvailable() && (Auth::check() || API::isAPIRequest()); +$continue = $dbo->isInstalled() && !Update::isUpdateAvailable() && (Auth::check() || API\Response::isAPIRequest()); if (!empty($skip_permissions)) { Permissions::skip(); @@ -179,7 +182,7 @@ if (!$continue && getURLPath() != slashes(ROOTDIR.'/index.php') && !Permissions: /* INIZIALIZZAZIONE GENERALE */ // Operazione aggiuntive (richieste non API) -if (!API::isAPIRequest()) { +if (!API\Response::isAPIRequest()) { // Impostazioni di Content-Type e Charset Header header('Content-Type: text/html; charset=UTF-8'); @@ -278,3 +281,18 @@ $list = array_merge($files, $custom_files); foreach ($list as $file) { include_once $file; } + +// Inclusione dei file vendor/autoload.php di Composer +$files = glob(__DIR__.'/{modules,plugins}/*/vendor/autoload.php', GLOB_BRACE); +$custom_files = glob(__DIR__.'/{modules,plugins}/*/custom/vendor/autoload.php', GLOB_BRACE); +foreach ($custom_files as $key => $value) { + $index = array_search(str_replace('custom/', '', $value), $files); + if ($index !== false) { + unset($files[$index]); + } +} + +$list = array_merge($files, $custom_files); +foreach ($list as $file) { + include_once $file; +} diff --git a/editor.php b/editor.php index 728d19f01..e9ab6eeba 100755 --- a/editor.php +++ b/editor.php @@ -13,7 +13,7 @@ if (empty($id_record) && !empty($id_module)) { include_once App::filepath('include|custom|', 'top.php'); Util\Query::setSegments(false); -$query = Util\Query::getQuery($module, [ +$query = Util\Query::getQuery($structure, [ 'id' => $id_record, ]); Util\Query::setSegments(true); diff --git a/gulpfile.js b/gulpfile.js index 93d343d8b..9e0b33b72 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -198,6 +198,15 @@ gulp.task('colorpicker', function () { .pipe(gulp.dest(config.production + '/' + config.paths.images + '/bootstrap-colorpicker')); }); +gulp.task('password-strength', function () { + gulp.src([ + config.main.bowerDirectory + '/pwstrength-bootstrap/dist/*.js', + ]) + .pipe(concat('password.min.js')) + .pipe(minifyJS()) + .pipe(gulp.dest(config.production + '/password-strength')); +}); + gulp.task('chartjs', function () { gulp.src([ config.main.bowerDirectory + '/chart.js/dist/Chart.min.js', @@ -368,6 +377,7 @@ gulp.task('bower', ['clean'], function () { gulp.task('other', ['clean'], function () { gulp.start('ckeditor'); gulp.start('colorpicker'); + gulp.start('password-strength'); gulp.start('i18n'); gulp.start('pdfjs'); diff --git a/include/common/form.php b/include/common/form.php index 51c9f27b3..5e54e1458 100644 --- a/include/common/form.php +++ b/include/common/form.php @@ -30,4 +30,4 @@ echo ' '; echo ' - '; +'; diff --git a/include/common/importa.php b/include/common/importa.php index 00dbc3f30..042e02a7c 100644 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -1,197 +1,270 @@ fetchOne('SELECT * FROM '.$table.' WHERE id = '.prepare($id_record)); -$numero = !empty($documento['numero_esterno']) ? $documento['numero_esterno'] : $documento['numero']; -$id_anagrafica = $documento['idanagrafica']; -$id_pagamento = $documento['idpagamento']; -$id_conto = $documento['idconto']; - -if (empty($documento)) { +// Inizializzazione +$documento = $options['documento']; +$documento_finale = $options['documento_finale']; +if (empty($documento) || (!empty($documento_finale) && $documento_finale->direzione != $documento->direzione)) { return; } +// Informazioi utili +$dir = $documento->direzione; +$original_module = Modules::get($documento->module); + +$name = !empty($documento_finale) ? $documento_finale->module : $options['module']; +$final_module = Modules::get($name); + +// IVA predefinta $id_iva = $id_iva ?: setting('Iva predefinita'); -if (empty($id_conto)) { - $id_conto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto'); + +$righe = $documento->getRighe()->where('qta_rimanente', '>', 0); +if (empty($righe)) { + echo ' +
'.tr('Non ci sono elementi da evadere').'...
'; + + return; } -// Selezione articoli dell'ordine da portare nel ddt -$righe = $dbo->fetchArray('SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),"") AS codice, (qta - qta_evasa) AS qta_rimanente FROM '.$table.' INNER JOIN '.$rows.' ON '.$table.'.id='.$rows.'.'.$id_rows.' WHERE '.$table.'.id='.prepare($id_record).' HAVING qta_rimanente > 0 OR is_descrizione = 1 ORDER BY `order`'); +$link = !empty($documento_finale) ? ROOTDIR.'/editor.php?id_module='.$final_module['id'].'&id_record='.$documento_finale->id : ROOTDIR.'/controller.php?id_module='.$final_module['id']; -if (!empty($righe)) { - echo ' +echo ' -