diff --git a/api/index.php b/api/index.php index da22121e5..83f3c6b68 100644 --- a/api/index.php +++ b/api/index.php @@ -5,6 +5,14 @@ include_once __DIR__.'/../core.php'; // Disabilta la sessione per l'API session_write_close(); +function serverError() +{ + die(API::error('serverError')); +} + +// Gestione degli errori +set_error_handler('serverError'); + // Permesso di accesso all'API da ogni dispositivo header('Access-Control-Allow-Origin: *'); @@ -15,10 +23,25 @@ try { $api = new API(filter('token')); $resource = filter('resource'); - if (!empty($resource)) { - $result = $api->retrieve($resource); - } else { - $result = API::response(API::getResources()['retrieve']); + + $method = $_SERVER['REQUEST_METHOD']; + switch ($method) { + case 'PUT': + $result = $api->update($resource); + break; + case 'POST': + $result = $api->create($resource); + break; + case 'GET': + if (!empty($resource)) { + $result = $api->retrieve($resource); + } else { + $result = API::response(API::getResources()['retrieve']); + } + break; + case 'DELETE': + $result = $api->delete($resource); + break; } } catch (InvalidArgumentException $e) { $result = API::error('unauthorized'); diff --git a/core.php b/core.php index 3d760daa7..fd57efb81 100644 --- a/core.php +++ b/core.php @@ -61,7 +61,7 @@ $handlers[] = new StreamHandler(__DIR__.'/logs/error.log', Monolog\Logger::ERROR $handlers[] = new StreamHandler(__DIR__.'/logs/setup.log', Monolog\Logger::EMERGENCY); // Impostazioni di debug -if (!empty($debug)) { +if (!empty($debug) && !API::isAPIRequest()) { // Ignoramento degli avvertimenti e delle informazioni relative alla deprecazione di componenti if (empty($strict)) { error_reporting(E_ALL & ~E_NOTICE & ~E_USER_DEPRECATED); @@ -79,7 +79,7 @@ if (!empty($debug)) { $whoops->pushHandler($prettyPageHandler); // Abilita la gestione degli errori nel caso la richiesta sia di tipo AJAX - if (\Whoops\Util\Misc::isAjaxRequest()) { + if (Whoops\Util\Misc::isAjaxRequest()) { $whoops->pushHandler(new Whoops\Handler\JsonResponseHandler()); } diff --git a/lib/classes/API.php b/lib/classes/API.php index 8a539da33..a297d6cb9 100644 --- a/lib/classes/API.php +++ b/lib/classes/API.php @@ -136,7 +136,7 @@ class API extends \Util\Singleton public function update($resource) { - return $this->fileRequest($resource, 'generate'); + return $this->fileRequest($resource, 'update'); } public function delete($resource) @@ -148,15 +148,24 @@ class API extends \Util\Singleton { $resources = self::getResources()[$kind]; - if (!in_array($resource, $resources)) { + if (!in_array($resource, array_keys($resources))) { return self::error('notFound'); } + // Database $dbo = Database::getConnection(); + $dbo->query('START TRANSACTION'); + + // Variabili GET e POST + $post = Filter::getPOST(); + $get = Filter::getGET(); + $filename = DOCROOT.'/modules/'.$resources[$resource].'/api/'.$kind.'.php'; include $filename; + $dbo->query('COMMIT'); + return self::response($results); } @@ -182,11 +191,13 @@ class API extends \Util\Singleton $module = basename(dirname(dirname($operation))); $kind = basename($operation, '.php'); + $resources[$kind] = (array) $resources[$kind]; + $temp = str_replace('/api/', '/custom/api/', $operation); $operation = file_exists($temp) ? $temp : $operation; $api = include $operation; - $api = array_unique($api); + $api = is_array($api) ? array_unique($api) : []; $keys = array_keys($resources[$kind]); @@ -196,7 +207,7 @@ class API extends \Util\Singleton $results[$value] = $module; } - $resources[$kind] = array_merge((array) $resources[$kind], $results); + $resources[$kind] = array_merge($resources[$kind], $results); } } diff --git a/modules/anagrafiche/api/create.php b/modules/anagrafiche/api/create.php new file mode 100644 index 000000000..2d5feb1c9 --- /dev/null +++ b/modules/anagrafiche/api/create.php @@ -0,0 +1,22 @@ +fetchArray('SELECT codice FROM an_anagrafiche ORDER BY CAST(codice AS SIGNED) DESC LIMIT 0, 1'); + $codice = get_next_code($rs[0]['codice'], 1, get_var('Formato codice anagrafica')); + + // Inserisco l'anagrafica + $dbo->insert('an_anagrafiche', [ + 'ragione_sociale' => $post['data']['ragione_sociale'], + 'codice' => $codice, + ]); + + // Inserisco il rapporto dell'anagrafica (cliente, tecnico, ecc) + $dbo->sync('an_tipianagrafiche_anagrafiche', ['idanagrafica' => $dbo->lastInsertedID()], ['idtipoanagrafica' => (array) $post['data']['tipi']]); + + break; +} + +return [ + 'add_anagrafica', +];