Miglioramento API e AJAX

Miglioramento API e AJAX, ora capaci di individuare personalizzazione più complesse e ampie.
This commit is contained in:
Thomas Zilio 2018-02-09 15:10:06 +01:00
parent e97e65c3cf
commit 303a9e3417
2 changed files with 61 additions and 55 deletions

View File

@ -10,8 +10,6 @@ class AJAX
/**
* Controlla se è in corso una richiesta AJAX generata dal progetto.
*
* @since 2.4
*
* @return bool
*/
public static function isAjaxRequest()
@ -19,6 +17,41 @@ class AJAX
return \Whoops\Util\Misc::isAjaxRequest() && filter('ajax') !== null;
}
protected static function find($file)
{
$dirname = substr($file, 0, strrpos($file, '/') + 1);
// Individuazione delle cartelle accessibili
$modules = Modules::getAvailableModules();
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
// Individuazione dei file esistenti
$list = [];
foreach ($pieces as $piece) {
// File nativi
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/'.$file, GLOB_BRACE);
// File personalizzati
$custom_files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/custom/'.$file, GLOB_BRACE);
// Pulizia dei file nativi che sono stati personalizzati
foreach ($custom_files as $key => $value) {
$index = array_search(str_replace('custom/'.$dirname, $dirname, $value), $files);
if ($index !== false) {
unset($files[$index]);
}
}
$list = array_merge($list, $files, $custom_files);
}
asort($list);
return $list;
}
public static function select($resource, $elements = [], $search = null)
{
if (!isset($elements)) {
@ -26,25 +59,12 @@ class AJAX
}
$elements = (!is_array($elements)) ? explode(',', $elements) : $elements;
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
$customs = [];
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/ajax/select.php', GLOB_BRACE);
$customs = array_merge($customs, $files);
}
$files = self::find('ajax/select.php');
// File di gestione predefinita
array_unshift($customs, DOCROOT.'/ajax_select.php');
foreach ($customs as $custom) {
$temp = str_replace('/ajax/', '/custom/ajax/', $custom);
$file = file_exists($temp) ? $temp : $custom;
array_unshift($files, DOCROOT.'/ajax_select.php');
foreach ($files as $file) {
$results = self::getSelectResults($file, $resource, $elements, $search);
if (isset($results)) {
break;
@ -121,26 +141,13 @@ class AJAX
return;
}
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
$customs = [];
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/ajax/search.php', GLOB_BRACE);
$customs = array_merge($customs, $files);
}
$files = self::find('ajax/search.php');
// File di gestione predefinita
array_unshift($customs, DOCROOT.'/ajax_search.php');
array_unshift($files, DOCROOT.'/ajax_search.php');
$results = [];
foreach ($customs as $custom) {
$temp = str_replace('/ajax/', '/custom/ajax/', $custom);
$file = file_exists($temp) ? $temp : $custom;
foreach ($files as $file) {
$module_results = self::getSearchResults($file, $term);
$results = array_merge($results, $module_results);
@ -180,25 +187,12 @@ class AJAX
public static function complete($resource)
{
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
$customs = [];
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/ajax/complete.php', GLOB_BRACE);
$customs = array_merge($customs, $files);
}
$files = self::find('ajax/complete.php');
// File di gestione predefinita
array_unshift($customs, DOCROOT.'/ajax_complete.php');
foreach ($customs as $custom) {
$temp = str_replace('/ajax/', '/custom/ajax/', $custom);
$file = file_exists($temp) ? $temp : $custom;
array_unshift($files, DOCROOT.'/ajax_complete.php');
foreach ($files as $file) {
$result = self::getCompleteResults($file, $resource);
if (!empty($result)) {
break;

View File

@ -250,7 +250,23 @@ class API extends \Util\Singleton
if (!is_array(self::$resources)) {
$resources = [];
$operations = glob(DOCROOT.'/modules/*/api/{retrieve,create,update,delete}.php', GLOB_BRACE);
// File nativi
$files = glob(DOCROOT.'/modules/*/api/{retrieve,create,update,delete}.php', GLOB_BRACE);
// File personalizzati
$custom_files = glob(DOCROOT.'/modules/*/custom/api/{retrieve,create,update,delete}.php', GLOB_BRACE);
// Pulizia dei file nativi che sono stati personalizzati
foreach ($custom_files as $key => $value) {
$index = array_search(str_replace('custom/api/', 'api/', $value), $files);
if ($index !== false) {
unset($files[$index]);
}
}
$operations = array_merge($files, $custom_files);
asort($operations);
foreach ($operations as $operation) {
// Individua la tipologia e il modulo delle operazioni
$module = basename(dirname(dirname($operation)));
@ -258,10 +274,6 @@ class API extends \Util\Singleton
$resources[$kind] = (array) $resources[$kind];
// Controllo sulla presenza di eventuali personalizzazioni
$temp = str_replace('/api/', '/custom/api/', $operation);
$operation = file_exists($temp) ? $temp : $operation;
// Individuazione delle operazioni
$api = include $operation;
$api = is_array($api) ? array_unique($api) : [];