diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Filter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Filter.php index b6db43019..ceca4ef0a 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Filter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Filter.php @@ -101,6 +101,29 @@ class Filter return $filter; } + /** + * Update a filter of the advanced search for the current user + * + * @param string $userUid + * @param string $filterUid + * @param string $name + * @param object $filters + */ + public static function update($userUid, $filterUid, $name, $filters) + { + // Build object to serialize and save + $filter = new stdClass(); + $filter->id = $filterUid; + $filter->name = $name; + $filter->filters = $filters; + + // Update filter + Configuration::query()->where('CFG_UID', '=', self::ADVANCED_SEARCH_FILTER_KEY) + ->where('OBJ_UID', '=', $filterUid) + ->where('USR_UID', '=', $userUid) + ->update(['CFG_VALUE' => json_encode($filter)]); + } + /** * Delete a specific filter by filter Uid * diff --git a/workflow/engine/src/ProcessMaker/Model/Configuration.php b/workflow/engine/src/ProcessMaker/Model/Configuration.php index 6ca5d7c02..cc2244235 100644 --- a/workflow/engine/src/ProcessMaker/Model/Configuration.php +++ b/workflow/engine/src/ProcessMaker/Model/Configuration.php @@ -14,4 +14,6 @@ class Configuration extends Model public $timestamps = false; public $incrementing = false; + + protected $fillable = ['CFG_UID', 'OBJ_UID', 'CFG_VALUE', 'PRO_UID', 'USR_UID', 'APP_UID']; } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php index c72910312..32f84b545 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php @@ -1537,6 +1537,39 @@ class Cases extends Api } } + /** + * Update a filter of the advanced search for the current user + * + * @url PUT /advanced-search/filter/:filterUid + * + * @param string $filterUid {@min 32}{@max 32} + * @param string $name + * @param string $filters + * + * @throws RestException + */ + public function doPutAdvancedSearchFilter($filterUid, $name, $filters) + { + try { + // Create JSON object if is a serialized string + $filters = is_string($filters) ? json_decode($filters) : $filters; + + // Get requested filter + $filter = Filter::getByUid($this->getUserId(), $filterUid); + + // Update the requested filter if exists + if (!is_null($filter)) { + Filter::update($this->getUserId(), $filterUid, $name, $filters); + } + } catch (Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + // If not exists the requested filter throw an 404 error + if (is_null($filter)) { + throw new RestException(404, "Filter with Uid '{$filterUid}'."); + } + } + /** * Delete a specific filter of the advanced search for the current user *