Skip to content

Commit cf96f36

Browse files
committed
refactor: prima ottimizzazione caricamento moduli
1 parent 9ce5015 commit cf96f36

4 files changed

Lines changed: 50 additions & 24 deletions

File tree

modules/utenti/edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@
268268
</thead>
269269
<tbody>';
270270

271-
$moduli = Modules::getHierarchy();
271+
$moduli = Modules::getHierarchy(true);
272272

273273
$permessi_disponibili = [
274274
'-' => tr('Nessun permesso'),

src/Models/Module.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,20 @@ public function getViewsAttribute()
121121
{
122122
$user = \Auth::user();
123123

124-
$views = database()->fetchArray('SELECT * FROM `zz_views` LEFT JOIN `zz_views_lang` ON (`zz_views`.`id` = `zz_views_lang`.`id_record` AND `zz_views_lang`.`id_lang` = '.prepare(Locale::getDefault()->id).') WHERE `id_module` = :module_id AND
125-
`zz_views`.`id` IN (
126-
SELECT `id_vista` FROM `zz_group_view` WHERE `id_gruppo` = (
127-
SELECT `idgruppo` FROM `zz_users` WHERE `id` = :user_id
128-
))
129-
ORDER BY `order` ASC', [
130-
'module_id' => $this->id,
131-
'user_id' => $user->id,
132-
]);
133-
124+
$views = database()->fetchArray('SELECT
125+
`zz_views`.*,
126+
`zz_views_lang`.*
127+
FROM
128+
`zz_views`
129+
LEFT JOIN `zz_views_lang` ON (`zz_views`.`id` = `zz_views_lang`.`id_record` AND `zz_views_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).')
130+
LEFT JOIN `zz_group_view` ON `zz_views`.`id` = `zz_group_view`.`id_vista`
131+
LEFT JOIN `zz_users` ON `zz_users`.`idgruppo` = `zz_group_view`.`id_gruppo`
132+
WHERE
133+
`id_module`='.$this->id.' AND
134+
`zz_users`.`id` = '.$user->id.'
135+
ORDER BY
136+
`order` ASC');
137+
134138
return $views;
135139
}
136140

src/Modules.php

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
use Models\Module;
2222
use Util\Query;
23+
use Illuminate\Support\Collection;
2324

2425
/**
2526
* Classe per la gestione delle informazioni relative ai moduli installati.
@@ -36,21 +37,26 @@ class Modules
3637
/** @var array Elenco gerarchico dei moduli */
3738
protected static $hierarchy;
3839

40+
/** @var Collection Elenco dei moduli disponibili */
41+
protected static $all_modules;
42+
3943
/**
4044
* Restituisce tutte le informazioni di tutti i moduli installati.
4145
*
4246
* @return array
4347
*/
4448
public static function getModules()
4549
{
46-
$results = Module::getAll();
47-
50+
if (!isset(self::$all_modules)) {
51+
self::$all_modules = Module::getAll();
52+
}
53+
4854
// Caricamento dei plugin
49-
if (!$results->first()->relationLoaded('plugins')) {
50-
$results->load('plugins');
55+
if (!self::$all_modules->first()->relationLoaded('plugins')) {
56+
self::$all_modules->load('plugins');
5157
}
5258

53-
return $results;
59+
return self::$all_modules;
5460
}
5561

5662
/**
@@ -136,7 +142,18 @@ public static function getAdditionals($module, $include_segments = true)
136142
$additionals['WHR'] = [];
137143
$additionals['HVN'] = [];
138144

139-
$results = $database->fetchArray('SELECT * FROM `zz_group_module` LEFT JOIN `zz_group_module_lang` ON (`zz_group_module`.`id` = `zz_group_module_lang`.`id_record` AND `zz_group_module_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `idgruppo` = (SELECT `idgruppo` FROM `zz_users` WHERE `id` = '.prepare($user['id']).') AND `enabled` = 1 AND `idmodule` = '.prepare($module['id']));
145+
$results = $database->fetchArray('SELECT
146+
`zz_group_module`.`clause`,
147+
`zz_group_module`.`position`
148+
FROM
149+
`zz_group_module`
150+
LEFT JOIN `zz_group_module_lang` ON (`zz_group_module`.`id` = `zz_group_module_lang`.`id_record` AND `zz_group_module_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
151+
LEFT JOIN `zz_users` ON `zz_users`.`idgruppo` = `zz_group_module`.`idgruppo`
152+
WHERE
153+
`zz_users`.`id` = '.prepare($user['id']).'
154+
AND
155+
`zz_group_module`.`idmodule` = '.prepare($module['id']));
156+
140157
foreach ($results as $result) {
141158
if (!empty($result['clause'])) {
142159
$result['clause'] = Query::replacePlaceholder($result['clause']);

src/Util/Query.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ protected static function readNewQuery($element)
664664
$query = $element['option'];
665665

666666
// Aggiunta eventuali filtri dai segmenti per eseguire la query filtrata
667-
$query = str_replace('1=1', '1=1 '.\Modules::getAdditionalsQuery(\Models\Module::where('name', $element['attributes']['name'])->first()->id, null, self::$segments), $query);
667+
$query = str_replace('1=1', '1=1 '.\Modules::getAdditionalsQuery($element->id, null, self::$segments), $query);
668668
$views = self::getViews($element);
669669
$select = [];
670670

@@ -777,12 +777,17 @@ protected static function getViews($element)
777777

778778
$user = \Auth::user();
779779

780-
$views = $database->fetchArray('SELECT *, `zz_views`.`id` FROM `zz_views` LEFT JOIN `zz_views_lang` ON (`zz_views`.`id` = `zz_views_lang`.`id_record` AND `zz_views_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).') WHERE `id_module`='.prepare($element['id']).' AND
781-
`zz_views`.`id` IN (
782-
SELECT `id_vista` FROM `zz_group_view` WHERE `id_gruppo`=(
783-
SELECT `idgruppo` FROM `zz_users` WHERE `id`='.prepare($user['id']).'
784-
))
785-
ORDER BY `order` ASC');
780+
$views = $database->fetchArray('SELECT `zz_views`.*, `zz_views_lang`.*
781+
FROM
782+
`zz_views`
783+
LEFT JOIN `zz_views_lang` ON (`zz_views`.`id` = `zz_views_lang`.`id_record` AND `zz_views_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).')
784+
LEFT JOIN `zz_group_view` ON `zz_views`.`id` = `zz_group_view`.`id_vista`
785+
LEFT JOIN `zz_users` ON `zz_users`.`idgruppo` = `zz_group_view`.`id_gruppo`
786+
WHERE
787+
`id_module`='.prepare($element['id']).' AND
788+
`zz_users`.`id` = '.prepare($user['id']).'
789+
ORDER BY
790+
`order` ASC');
786791

787792
return $views;
788793
}

0 commit comments

Comments
 (0)