mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-01-09 14:14:10 +01:00
Miglioramento API e AJAX
Miglioramento API e AJAX, ora capaci di individuare personalizzazione più complesse e ampie.
This commit is contained in:
parent
e97e65c3cf
commit
303a9e3417
94
src/AJAX.php
94
src/AJAX.php
@ -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;
|
||||
|
22
src/API.php
22
src/API.php
@ -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) : [];
|
||||
|
Loading…
Reference in New Issue
Block a user