From 83092ea4b79e0b43ea317451820b0a573100f388 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Tue, 14 Jan 2025 14:07:34 -0800 Subject: [PATCH 1/2] Hide Lua and R Script Executors --- .../Http/Controllers/Api/ScriptExecutorController.php | 3 +++ ProcessMaker/Models/Script.php | 2 ++ ProcessMaker/Models/ScriptExecutor.php | 9 ++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/Http/Controllers/Api/ScriptExecutorController.php b/ProcessMaker/Http/Controllers/Api/ScriptExecutorController.php index e625ac01d8..d4aec0fcc3 100644 --- a/ProcessMaker/Http/Controllers/Api/ScriptExecutorController.php +++ b/ProcessMaker/Http/Controllers/Api/ScriptExecutorController.php @@ -347,6 +347,9 @@ public function availableLanguages() { $languages = []; foreach (Script::scriptFormats() as $key => $config) { + if (in_array($key, Script::deprecatedLanguages)) { + continue; + } if (!array_key_exists('system', $config) || (array_key_exists('system', $config) && !$config['system'])) { $languages[] = [ 'value' => $key, diff --git a/ProcessMaker/Models/Script.php b/ProcessMaker/Models/Script.php index 8b900db30e..1ecac1ba8b 100644 --- a/ProcessMaker/Models/Script.php +++ b/ProcessMaker/Models/Script.php @@ -73,6 +73,8 @@ class Script extends ProcessMakerModel implements ScriptInterface const categoryClass = ScriptCategory::class; + const deprecatedLanguages = ['lua', 'r']; + protected $connection = 'processmaker'; protected $guarded = [ diff --git a/ProcessMaker/Models/ScriptExecutor.php b/ProcessMaker/Models/ScriptExecutor.php index f5d8b34346..ec0e92d7a0 100644 --- a/ProcessMaker/Models/ScriptExecutor.php +++ b/ProcessMaker/Models/ScriptExecutor.php @@ -59,6 +59,13 @@ class ScriptExecutor extends ProcessMakerModel 'title', 'description', 'language', 'config', 'is_system', ]; + // Lua and R are deprecated. This scope can be removed + // when they are removed permanently. + public function scopeActive($query) + { + return $query->whereNotIn('language', Script::deprecatedLanguages); + } + public static function install($params) { $language = $params['language']; @@ -153,7 +160,7 @@ public static function list($language = null, $forEditMode = false) { $list = []; $executors = - self::where('is_system', false)->orderBy('language', 'asc') + self::active()->where('is_system', false)->orderBy('language', 'asc') ->orderBy('created_at', 'asc'); if ($language) { From 1882fcb5d9dc533de7bd5fdcd3a5dbf917b8bdd9 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Tue, 14 Jan 2025 14:30:53 -0800 Subject: [PATCH 2/2] Disable saving new scripts and executors that use deprecated languages --- ProcessMaker/Models/Script.php | 17 +++++++++++++++-- ProcessMaker/Models/ScriptExecutor.php | 10 +++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ProcessMaker/Models/Script.php b/ProcessMaker/Models/Script.php index 1ecac1ba8b..4409cadd5f 100644 --- a/ProcessMaker/Models/Script.php +++ b/ProcessMaker/Models/Script.php @@ -130,14 +130,27 @@ public static function rules($existing = null) { $unique = Rule::unique('scripts')->ignore($existing); + if ($existing) { + $allowedLanguages = static::scriptFormatValues(); + $allowedExecutorIds = ScriptExecutor::all()->pluck('id')->toArray(); + } else { + $allowedLanguages = array_filter(static::scriptFormatValues(), function ($language) { + return !in_array($language, Script::deprecatedLanguages); + }); + $allowedExecutorIds = ScriptExecutor::active()->pluck('id')->toArray(); + } + return [ 'key' => 'unique:scripts,key', 'title' => ['required', 'string', $unique, 'alpha_spaces'], 'language' => [ 'required_without:script_executor_id', - Rule::in(static::scriptFormatValues()), + Rule::in($allowedLanguages), + ], + 'script_executor_id' => [ + 'required_without:language', + Rule::in($allowedExecutorIds), ], - 'script_executor_id' => 'required_without:language|exists:script_executors,id', 'description' => 'required', 'run_as_user_id' => 'required', 'timeout' => 'integer|min:0|max:65535', diff --git a/ProcessMaker/Models/ScriptExecutor.php b/ProcessMaker/Models/ScriptExecutor.php index ec0e92d7a0..1467bbbdeb 100644 --- a/ProcessMaker/Models/ScriptExecutor.php +++ b/ProcessMaker/Models/ScriptExecutor.php @@ -147,11 +147,19 @@ public static function config($language) public static function rules($existing = null) { + if ($existing) { + $allowedLanguages = Script::scriptFormatValues(); + } else { + $allowedLanguages = array_filter(Script::scriptFormatValues(), function ($language) { + return !in_array($language, Script::deprecatedLanguages); + }); + } + return [ 'title' => 'required', 'language' => [ 'required', - Rule::in(Script::scriptFormatValues()), + Rule::in($allowedLanguages), ], ]; }