Skip to content

Commit a7d4949

Browse files
committed
feat: add cache buster for JS files
1 parent ac4dc2b commit a7d4949

File tree

7 files changed

+281
-7
lines changed

7 files changed

+281
-7
lines changed

_build/gpm.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ plugins:
1010
- OnManagerPageBeforeRender
1111

1212
systemSettings:
13+
- key: cache.lit
14+
area: cache
15+
value: 0
16+
1317
- key: api.execute_on_server
1418
area: api
1519
type: combo-boolean
@@ -151,3 +155,7 @@ systemSettings:
151155
- key: tvs
152156
area: tvs
153157
value: ''
158+
159+
build:
160+
scriptsAfter:
161+
- lit.gpm.php

_build/gpm_scripts/gpm.script.lit.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/**
3+
*
4+
* THIS SCRIPT IS AUTOMATICALLY GENERATED, NO CHANGES WILL APPLY
5+
*
6+
* @package modai
7+
* @subpackage build
8+
*
9+
* @var \xPDO\Transport\xPDOTransport $transport
10+
* @var array $object
11+
* @var array $options
12+
*/
13+
14+
use MODX\Revolution\modSystemSetting;
15+
16+
return (function () {
17+
18+
19+
return new class() {
20+
/**
21+
* @var \MODX\Revolution\modX
22+
*/
23+
private $modx;
24+
25+
/**
26+
* @var int
27+
*/
28+
private $action;
29+
30+
/**
31+
* @param \MODX\Revolution\modX $modx
32+
* @param int $action
33+
* @return bool
34+
*/
35+
public function __invoke(&$modx, $action)
36+
{
37+
$this->modx =& $modx;
38+
$this->action = $action;
39+
40+
if ($this->action === \xPDO\Transport\xPDOTransport::ACTION_UNINSTALL) return true;
41+
42+
$setting = $this->modx->getObject(modSystemSetting::class, ['key' => 'modai.cache.lit', 'namespace' => 'modai']);
43+
if (!$setting) {
44+
$setting = $this->modx->newObject(modSystemSetting::class);
45+
$setting->set('key', 'modai.cache.lit');
46+
$setting->set('namespace', 'modai');
47+
$setting->set('xtype', 'textfield');
48+
$setting->set('area', 'cache');
49+
$setting->set('editedon', time());
50+
$setting->set('editedby', 0);
51+
}
52+
53+
$setting->set('value', time());
54+
$setting->save();
55+
56+
return true;
57+
}
58+
};
59+
})()($transport->xpdo, $options[xPDOTransport::PACKAGE_ACTION]);
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
<?php
2+
/**
3+
*
4+
* THIS SCRIPT IS AUTOMATICALLY GENERATED, NO CHANGES WILL APPLY
5+
*
6+
* @package modai
7+
* @subpackage build
8+
*
9+
* @var \xPDO\Transport\xPDOTransport $transport
10+
* @var array $object
11+
* @var array $options
12+
*/
13+
14+
use MODX\Revolution\Transport\modTransportPackage;
15+
16+
class Migrator
17+
{
18+
private $modx;
19+
private $name = 'modai';
20+
private $latestVersion = '';
21+
public function __construct(&$modx)
22+
{
23+
$this->modx =& $modx;
24+
$this->getLatestVersion();
25+
}
26+
27+
private function getMigrationsMap()
28+
{
29+
$migrations = [
30+
(function () {
31+
return new class() {
32+
// migration runs if self::VERSION > currently installed version
33+
const VERSION = '0.10.0-beta';
34+
35+
/**
36+
* @var \MODX\Revolution\modX
37+
*/
38+
private $modx;
39+
40+
private $systemSettingsMap = [
41+
'modai.global.base.output' => 'modai.global.text.base_output',
42+
'modai.global.base.prompt' => 'modai.global.text.base_prompt',
43+
'modai.global.max_tokens' => 'modai.global.text.max_tokens',
44+
'modai.global.model' => 'modai.global.text.model',
45+
'modai.global.temperature' => 'modai.global.text.temperature',
46+
47+
'modai.res.pagetitle.prompt' => 'modai.res.pagetitle.text.prompt',
48+
'modai.res.longtitle.prompt' => 'modai.res.longtitle.text.prompt',
49+
'modai.res.introtext.prompt' => 'modai.res.introtext.text.prompt',
50+
'modai.res.description.prompt' => 'modai.res.description.text.prompt',
51+
52+
'modai.vision.model' => 'modai.global.vision.model',
53+
'modai.vision.prompt' => 'modai.global.vision.prompt',
54+
55+
'modai.image.model' => 'modai.global.image.model',
56+
'modai.image.size' => 'modai.global.image.size',
57+
'modai.image.quality' => 'modai.global.image.quality',
58+
'modai.image.path' => 'modai.global.image.path',
59+
'modai.image.download_domains' => 'modai.global.image.download_domains',
60+
];
61+
62+
/**
63+
* @param \MODX\Revolution\modX $modx
64+
* @return void
65+
*/
66+
public function __invoke(&$modx)
67+
{
68+
$this->modx =& $modx;
69+
70+
foreach ($this->systemSettingsMap as $oldKey => $newKey) {
71+
$oldSetting = $this->modx->getObject(\MODX\Revolution\modSystemSetting::class, ['key' => $oldKey, 'namespace' => 'modai']);
72+
if (!$oldSetting) {
73+
continue;
74+
}
75+
76+
$newSetting = $this->modx->getObject(\MODX\Revolution\modSystemSetting::class, ['key' => $newKey, 'namespace' => 'modai']);
77+
if (!$newSetting) {
78+
continue;
79+
}
80+
81+
$newSetting->set('value', $oldSetting->get('value'));
82+
$newSetting->save();
83+
$oldSetting->remove();
84+
}
85+
}
86+
};
87+
})(),
88+
];
89+
90+
$migrationsMap = [];
91+
92+
foreach ($migrations as $migration) {
93+
$migrationsMap[$migration::VERSION] = $migration;
94+
}
95+
96+
uksort($migrationsMap, 'version_compare');
97+
98+
return $migrationsMap;
99+
}
100+
101+
public function migrate()
102+
{
103+
if (empty($this->latestVersion)) return;
104+
105+
$migrationsMap = $this->getMigrationsMap();
106+
107+
foreach ($migrationsMap as $version => $migration) {
108+
if (version_compare($version, $this->latestVersion, '>')) {
109+
$this->modx->log(\MODX\Revolution\modX::LOG_LEVEL_INFO, 'Running migration: ' . $version);
110+
$migration($this->modx);
111+
}
112+
}
113+
114+
}
115+
116+
private function getLatestVersion()
117+
{
118+
$c = $this->modx->newQuery(modTransportPackage::class);
119+
$c->where([
120+
'workspace' => 1,
121+
"(SELECT
122+
`signature`
123+
FROM {$this->modx->getTableName(modTransportPackage::class)} AS `latestPackage`
124+
WHERE `latestPackage`.`package_name` = `modTransportPackage`.`package_name`
125+
ORDER BY
126+
`latestPackage`.`version_major` DESC,
127+
`latestPackage`.`version_minor` DESC,
128+
`latestPackage`.`version_patch` DESC,
129+
IF(`release` = '' OR `release` = 'ga' OR `release` = 'pl','z',`release`) DESC,
130+
`latestPackage`.`release_index` DESC
131+
LIMIT 1,1) = `modTransportPackage`.`signature`",
132+
]);
133+
$c->where([
134+
'modTransportPackage.package_name' => $this->name,
135+
'installed:IS NOT' => null
136+
]);
137+
138+
/** @var modTransportPackage $oldPackage */
139+
$oldPackage = $this->modx->getObject(modTransportPackage::class, $c);
140+
if ($oldPackage) {
141+
$this->latestVersion = $oldPackage->getComparableVersion();
142+
}
143+
}
144+
}
145+
146+
(new Migrator($transport->xpdo))->migrate();

_build/scripts/lit.gpm.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
use MODX\Revolution\modSystemSetting;
4+
5+
return new class() {
6+
/**
7+
* @var \MODX\Revolution\modX
8+
*/
9+
private $modx;
10+
11+
/**
12+
* @var int
13+
*/
14+
private $action;
15+
16+
/**
17+
* @param \MODX\Revolution\modX $modx
18+
* @param int $action
19+
* @return bool
20+
*/
21+
public function __invoke(&$modx, $action)
22+
{
23+
$this->modx =& $modx;
24+
$this->action = $action;
25+
26+
if ($this->action === \xPDO\Transport\xPDOTransport::ACTION_UNINSTALL) return true;
27+
28+
$setting = $this->modx->getObject(modSystemSetting::class, ['key' => 'modai.cache.lit', 'namespace' => 'modai']);
29+
if (!$setting) {
30+
$setting = $this->modx->newObject(modSystemSetting::class);
31+
$setting->set('key', 'modai.cache.lit');
32+
$setting->set('namespace', 'modai');
33+
$setting->set('xtype', 'textfield');
34+
$setting->set('area', 'cache');
35+
$setting->set('editedon', time());
36+
$setting->set('editedby', 0);
37+
}
38+
39+
$setting->set('value', time());
40+
$setting->save();
41+
42+
return true;
43+
}
44+
};

core/components/modai/elements/plugins/modai.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
if (!$modx->services->has('modai')) return;
1111

12+
/** @var \modAI\modAI $modAI */
1213
$modAI = $modx->services->get('modai');
1314

1415
$action = '';
@@ -33,11 +34,13 @@
3334
</script>
3435
');
3536

36-
$modx->regClientCSS($assetsUrl . 'css/mgr.css');
37-
$modx->regClientStartupScript($assetsUrl . 'js/mgr/modai.js');
38-
$modx->regClientStartupScript($assetsUrl . 'js/mgr/history.js');
39-
$modx->regClientStartupScript($assetsUrl . 'js/mgr/executor.js');
40-
$modx->regClientStartupScript($assetsUrl . 'js/mgr/autosummary.js');
41-
$modx->regClientStartupScript($assetsUrl . 'js/mgr/widgets/image_prompt.window.js');
42-
$modx->regClientStartupScript($assetsUrl . 'js/mgr/widgets/text_prompt.window.js');
37+
$lit = $modAI->getLit();
38+
39+
$modx->regClientCSS("{$assetsUrl}css/mgr.css?lit=$lit");
40+
$modx->regClientStartupScript("{$assetsUrl}js/mgr/modai.js?lit=$lit");
41+
$modx->regClientStartupScript("{$assetsUrl}js/mgr/history.js?lit=$lit");
42+
$modx->regClientStartupScript("{$assetsUrl}js/mgr/executor.js?lit=$lit");
43+
$modx->regClientStartupScript("{$assetsUrl}js/mgr/autosummary.js?lit=$lit");
44+
$modx->regClientStartupScript("{$assetsUrl}js/mgr/widgets/image_prompt.window.js?lit=$lit");
45+
$modx->regClientStartupScript("{$assetsUrl}js/mgr/widgets/text_prompt.window.js?lit=$lit");
4346
}

core/components/modai/lexicon/en/default.inc.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@
8484
$_lang['setting_modai.api.execute_on_server'] = 'Execute AI\'s request on server';
8585
$_lang['setting_modai.api.execute_on_server_desc'] = 'If enabled, allAI requests will be executed on server side. Be aware of increased load for your server.';
8686

87+
$_lang['setting_modai.cache.lit'] = 'Last Install Time';
88+
$_lang['setting_modai.cache.lit_desc'] = '';
89+
8790
$_lang['modai.error.compatability_mode'] = "Unsupported API compatibility mode (modai.api.custom.compatibility).";
8891
$_lang['modai.error.invalid_api_key'] = "Missing modai.api.[[+service]].key";
8992
$_lang['modai.error.invalid_url'] = "Missing modai.api.custom.url";

core/components/modai/src/modAI.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class modAI
1414
/** @var array $config */
1515
public $config = [];
1616

17+
private $lit = null;
18+
1719
function __construct(modX &$modx, array $config = [])
1820
{
1921
$this->modx =& $modx;
@@ -110,4 +112,13 @@ public function getListOfTVsWithIDs()
110112

111113
}
112114

115+
public function getLit()
116+
{
117+
if ($this->lit !== null) {
118+
return $this->lit;
119+
}
120+
121+
$this->lit = (int)$this->modx->getOption('modai.cache.lit', null, '0');
122+
return $this->lit;
123+
}
113124
}

0 commit comments

Comments
 (0)