diff --git a/ProcessMaker/Http/Controllers/Api/DevLinkController.php b/ProcessMaker/Http/Controllers/Api/DevLinkController.php index 634ddac124..e77f926d3e 100644 --- a/ProcessMaker/Http/Controllers/Api/DevLinkController.php +++ b/ProcessMaker/Http/Controllers/Api/DevLinkController.php @@ -4,12 +4,13 @@ use Illuminate\Http\Request; use Illuminate\Validation\Rule; +use ProcessMaker\Exception\ValidationException; use ProcessMaker\Http\Controllers\Controller; use ProcessMaker\Http\Resources\ApiCollection; use ProcessMaker\Jobs\DevLinkInstall; -use ProcessMaker\Exception\ValidationException; use ProcessMaker\Models\Bundle; use ProcessMaker\Models\BundleAsset; +use ProcessMaker\Models\BundleSetting; use ProcessMaker\Models\DevLink; use ProcessMaker\Models\Setting; @@ -119,7 +120,7 @@ public function localBundles(Request $request) public function showBundle(Bundle $bundle) { - return $bundle->load('assets'); + return $bundle->load('assets')->load('settings'); } public function remoteBundles(Request $request, DevLink $devLink) @@ -131,6 +132,7 @@ public function createBundle(Request $request) { $bundle = new Bundle(); $bundle->name = $request->input('name'); + $bundle->description = $request->input('description'); $bundle->published = (bool) $request->input('published', false); $bundle->version = 1; $bundle->saveOrFail(); @@ -143,6 +145,7 @@ public function updateBundle(Request $request, Bundle $bundle) $bundle->validateEditable(); $bundle->name = $request->input('name'); + $bundle->description = $request->input('description'); $bundle->published = (bool) $request->input('published', false); $bundle->saveOrFail(); @@ -200,6 +203,11 @@ public function exportLocalBundle(Bundle $bundle) return ['payloads' => $bundle->export()]; } + public function exportLocalBundleSettings(Bundle $bundle) + { + return ['settings' => $bundle->exportSettings()]; + } + public function exportLocalAsset(Request $request) { $asset = $request->input('class')::findOrFail($request->input('id')); @@ -212,7 +220,12 @@ public function addAsset(Request $request, Bundle $bundle) $asset = $request->input('type')::findOrFail($request->input('id')); $bundle->addAsset($asset); } - + + public function addSettings(Request $request, Bundle $bundle) + { + $bundle->addSettings($request->input('setting'), $request->input('config')); + } + public function addAssetToBundles(Request $request) { $bundles = $request->input('bundles'); @@ -290,4 +303,11 @@ public function deleteBundleAsset(BundleAsset $bundleAsset) return response()->json(['message' => 'Bundle asset association deleted.'], 200); } + + public function deleteBundleSetting(BundleSetting $bundleSetting) + { + $bundleSetting->delete(); + + return response()->json(['message' => 'Bundle setting deleted.'], 200); + } } diff --git a/ProcessMaker/Models/Bundle.php b/ProcessMaker/Models/Bundle.php index a53fa3ceef..31112a4a8b 100644 --- a/ProcessMaker/Models/Bundle.php +++ b/ProcessMaker/Models/Bundle.php @@ -45,6 +45,11 @@ public function assets() return $this->hasMany(BundleAsset::class); } + public function settings() + { + return $this->hasMany(BundleSetting::class); + } + public function devLink() { return $this->belongsTo(DevLink::class, 'dev_link_id'); @@ -72,6 +77,13 @@ public function export() return $exports; } + public function exportSettings() + { + return $this->settings()->get()->map(function ($setting) { + return $setting->export(); + }); + } + public function syncAssets($assets) { $assetKeys = []; @@ -125,7 +137,23 @@ public function addAsset(ProcessMakerModel $asset) 'asset_id' => $asset->id, ]); } - + + public function addSettings($setting, $config) + { + $exists = $this->settings()->where('setting', $setting)->exists(); + if ($exists) { + $this->settings()->where('setting', $setting)->update([ + 'config' => $config, + ]); + } else { + BundleSetting::create([ + 'bundle_id' => $this->id, + 'setting' => $setting, + 'config' => $config, + ]); + } + } + public function addAssetToBundles(ProcessMakerModel $asset) { $message = null; @@ -134,6 +162,7 @@ public function addAssetToBundles(ProcessMakerModel $asset) } catch (ValidationException $ve) { $message = $ve->getMessage(); } + return $message; } @@ -184,6 +213,19 @@ public function savePayloadsToFile(array $payloads) } } + public function installSettings($settings) + { + $newSettingsKeys = collect($settings)->pluck('setting')->toArray(); + + $this->settings() + ->whereNotIn('setting', $newSettingsKeys) + ->delete(); + + foreach ($settings as $setting) { + $this->addSettings($setting['setting'], $setting['config']); + } + } + public function install(array $payloads, $mode, $logger = null) { if ($logger === null) { diff --git a/ProcessMaker/Models/BundleAsset.php b/ProcessMaker/Models/BundleAsset.php index 3cb95de6b5..a8948c7f45 100644 --- a/ProcessMaker/Models/BundleAsset.php +++ b/ProcessMaker/Models/BundleAsset.php @@ -11,7 +11,15 @@ class BundleAsset extends ProcessMakerModel protected $guarded = ['id']; - protected $appends = ['name', 'url', 'type']; + protected $appends = ['name', 'url', 'type', 'owner_name', 'categories']; + + const DATA_SOURCE_CLASS = 'ProcessMaker\Packages\Connectors\DataSources\Models\DataSource'; + + const COLLECTION_CLASS = 'ProcessMaker\Plugins\Collections\Models\Collection'; + + const DECISION_TABLE_CLASS = 'ProcessMaker\Package\PackageDecisionEngine\Models\DecisionTable'; + + const FLOW_GENIE_CLASS = 'ProcessMaker\Package\PackageAi\Models\FlowGenie'; protected static function boot() { @@ -53,7 +61,7 @@ public function getNameAttribute() $this->asset_type === Screen::class || $this->asset_type === Script::class ) { - return $this->title; + return $this->asset->title; } return $this->asset->name; @@ -68,6 +76,14 @@ public function getUrlAttribute() return "/designer/scripts/{$this->asset_id}/builder"; case Process::class: return "/modeler/{$this->asset_id}"; + case self::DATA_SOURCE_CLASS: + return "/designer/data-sources/{$this->asset_id}/edit"; + case self::COLLECTION_CLASS: + return "/collections/{$this->asset_id}/edit"; + case self::DECISION_TABLE_CLASS: + return "/designer/decision-tables/table-builder/{$this->asset_id}/edit"; + case self::FLOW_GENIE_CLASS: + return "/designer/flow-genies/{$this->asset_id}/edit"; default: return null; } @@ -82,8 +98,38 @@ public function getTypeAttribute() return 'Script'; case Process::class: return 'Process'; + case self::DATA_SOURCE_CLASS: + return 'data_source'; + case self::COLLECTION_CLASS: + return 'collection'; + case self::DECISION_TABLE_CLASS: + return 'decision_table'; + case self::FLOW_GENIE_CLASS: + return 'flow_genie'; default: return null; } } + + public function getOwnerNameAttribute() + { + if ($this->asset && method_exists($this->asset, 'user')) { + return $this->asset->user->firstname . ' ' . $this->asset->user->lastname; + } + + return null; + } + + public function getCategoriesAttribute() + { + if ($this->asset_type === self::COLLECTION_CLASS) { + return []; + } + + if ($this->asset && method_exists($this->asset, 'categories')) { + return $this->asset->categories->pluck('name')->toArray(); + } + + return []; + } } diff --git a/ProcessMaker/Models/BundleSetting.php b/ProcessMaker/Models/BundleSetting.php new file mode 100644 index 0000000000..35de7bf8dc --- /dev/null +++ b/ProcessMaker/Models/BundleSetting.php @@ -0,0 +1,34 @@ + 'array', + ]; + + public function bundle() + { + return $this->belongsTo(Bundle::class); + } + + public function export() + { + return [ + 'setting' => $this->setting, + 'config' => $this->config, + ]; + } +} diff --git a/ProcessMaker/Models/DevLink.php b/ProcessMaker/Models/DevLink.php index 12c0864357..cf831d0210 100644 --- a/ProcessMaker/Models/DevLink.php +++ b/ProcessMaker/Models/DevLink.php @@ -143,6 +143,10 @@ public function installRemoteBundle($remoteBundleId, $updateType) route('api.devlink.export-local-bundle', ['bundle' => $remoteBundleId], false) )->json(); + $bundleSettingsExport = $this->client()->get( + route('api.devlink.export-local-bundle-settings', ['bundle' => $remoteBundleId], false) + )->json(); + $bundle = Bundle::updateOrCreate( [ 'remote_id' => $remoteBundleId, @@ -156,7 +160,7 @@ public function installRemoteBundle($remoteBundleId, $updateType) ); $bundle->install($bundleExport['payloads'], $updateType, $this->logger); - + $bundle->installSettings($bundleSettingsExport['settings']); $this->logger->setStatus('done'); } diff --git a/database/migrations/2024_11_26_145144_add_description_to_bundles_table.php b/database/migrations/2024_11_26_145144_add_description_to_bundles_table.php new file mode 100644 index 0000000000..26f93cef62 --- /dev/null +++ b/database/migrations/2024_11_26_145144_add_description_to_bundles_table.php @@ -0,0 +1,27 @@ +text('description')->after('name')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('bundles', function (Blueprint $table) { + $table->dropColumn('description'); + }); + } +}; diff --git a/database/migrations/2024_12_03_140610_create_bundle_settings_table.php b/database/migrations/2024_12_03_140610_create_bundle_settings_table.php new file mode 100644 index 0000000000..7da3fae505 --- /dev/null +++ b/database/migrations/2024_12_03_140610_create_bundle_settings_table.php @@ -0,0 +1,31 @@ +id(); + $table->unsignedBigInteger('bundle_id'); + $table->string('setting'); + $table->json('config')->nullable(); + $table->timestamps(); + + $table->index(['bundle_id', 'setting']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('bundle_settings'); + } +}; diff --git a/devhub/pm-font/svg/edit-outline.svg b/devhub/pm-font/svg/edit-outline.svg new file mode 100644 index 0000000000..5f6721106e --- /dev/null +++ b/devhub/pm-font/svg/edit-outline.svg @@ -0,0 +1,3 @@ + diff --git a/devhub/pm-font/svg/link-icon.svg b/devhub/pm-font/svg/link-icon.svg new file mode 100644 index 0000000000..1608f95ec0 --- /dev/null +++ b/devhub/pm-font/svg/link-icon.svg @@ -0,0 +1,3 @@ + diff --git a/devhub/pm-font/svg/plus-thin.svg b/devhub/pm-font/svg/plus-thin.svg new file mode 100644 index 0000000000..ef88e8a85a --- /dev/null +++ b/devhub/pm-font/svg/plus-thin.svg @@ -0,0 +1,3 @@ + diff --git a/devhub/pm-font/svg/remove-outlined.svg b/devhub/pm-font/svg/remove-outlined.svg new file mode 100644 index 0000000000..dcb2c5838d --- /dev/null +++ b/devhub/pm-font/svg/remove-outlined.svg @@ -0,0 +1,3 @@ + diff --git a/resources/fonts/pm-font/index.html b/resources/fonts/pm-font/index.html index 281a2aa4c4..b5f9bc7fa0 100644 --- a/resources/fonts/pm-font/index.html +++ b/resources/fonts/pm-font/index.html @@ -103,7 +103,7 @@
diff --git a/resources/fonts/pm-font/processmaker-font.css b/resources/fonts/pm-font/processmaker-font.css
index d7fdea0a5e..a46ccdf3d1 100644
--- a/resources/fonts/pm-font/processmaker-font.css
+++ b/resources/fonts/pm-font/processmaker-font.css
@@ -1,11 +1,11 @@
@font-face {
font-family: "processmaker-font";
- src: url('processmaker-font.eot?t=1730322668195'); /* IE9*/
- src: url('processmaker-font.eot?t=1730322668195#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url("processmaker-font.woff2?t=1730322668195") format("woff2"),
- url("processmaker-font.woff?t=1730322668195") format("woff"),
- url('processmaker-font.ttf?t=1730322668195') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
- url('processmaker-font.svg?t=1730322668195#processmaker-font') format('svg'); /* iOS 4.1- */
+ src: url('processmaker-font.eot?t=1733168374693'); /* IE9*/
+ src: url('processmaker-font.eot?t=1733168374693#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url("processmaker-font.woff2?t=1733168374693") format("woff2"),
+ url("processmaker-font.woff?t=1733168374693") format("woff"),
+ url('processmaker-font.ttf?t=1733168374693') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('processmaker-font.svg?t=1733168374693#processmaker-font') format('svg'); /* iOS 4.1- */
}
[class^="fp-"], [class*=" fp-"] {
@@ -37,24 +37,28 @@
.fp-cloud-download-outline:before { content: "\ea13"; }
.fp-copy:before { content: "\ea14"; }
.fp-desktop:before { content: "\ea15"; }
-.fp-eye:before { content: "\ea16"; }
-.fp-fields-icon:before { content: "\ea17"; }
-.fp-flowgenie-outline:before { content: "\ea18"; }
-.fp-folder-outline:before { content: "\ea19"; }
-.fp-fullscreen:before { content: "\ea1a"; }
-.fp-github:before { content: "\ea1b"; }
-.fp-layout-icon:before { content: "\ea1c"; }
-.fp-map:before { content: "\ea1d"; }
-.fp-mobile:before { content: "\ea1e"; }
-.fp-pdf:before { content: "\ea1f"; }
-.fp-play-outline:before { content: "\ea20"; }
-.fp-plus:before { content: "\ea21"; }
-.fp-screen-outline:before { content: "\ea22"; }
-.fp-script-outline:before { content: "\ea23"; }
-.fp-slack-notification:before { content: "\ea24"; }
-.fp-slack:before { content: "\ea25"; }
-.fp-slideshow:before { content: "\ea26"; }
-.fp-table:before { content: "\ea27"; }
-.fp-trash:before { content: "\ea28"; }
-.fp-unlink:before { content: "\ea29"; }
+.fp-edit-outline:before { content: "\ea16"; }
+.fp-eye:before { content: "\ea17"; }
+.fp-fields-icon:before { content: "\ea18"; }
+.fp-flowgenie-outline:before { content: "\ea19"; }
+.fp-folder-outline:before { content: "\ea1a"; }
+.fp-fullscreen:before { content: "\ea1b"; }
+.fp-github:before { content: "\ea1c"; }
+.fp-layout-icon:before { content: "\ea1d"; }
+.fp-link-icon:before { content: "\ea1e"; }
+.fp-map:before { content: "\ea1f"; }
+.fp-mobile:before { content: "\ea20"; }
+.fp-pdf:before { content: "\ea21"; }
+.fp-play-outline:before { content: "\ea22"; }
+.fp-plus-thin:before { content: "\ea23"; }
+.fp-plus:before { content: "\ea24"; }
+.fp-remove-outlined:before { content: "\ea25"; }
+.fp-screen-outline:before { content: "\ea26"; }
+.fp-script-outline:before { content: "\ea27"; }
+.fp-slack-notification:before { content: "\ea28"; }
+.fp-slack:before { content: "\ea29"; }
+.fp-slideshow:before { content: "\ea2a"; }
+.fp-table:before { content: "\ea2b"; }
+.fp-trash:before { content: "\ea2c"; }
+.fp-unlink:before { content: "\ea2d"; }
diff --git a/resources/fonts/pm-font/processmaker-font.eot b/resources/fonts/pm-font/processmaker-font.eot
index 58983ffe0e..312adfcd8c 100644
Binary files a/resources/fonts/pm-font/processmaker-font.eot and b/resources/fonts/pm-font/processmaker-font.eot differ
diff --git a/resources/fonts/pm-font/processmaker-font.less b/resources/fonts/pm-font/processmaker-font.less
index 004b55fd66..aebacf2c8d 100644
--- a/resources/fonts/pm-font/processmaker-font.less
+++ b/resources/fonts/pm-font/processmaker-font.less
@@ -1,10 +1,10 @@
@font-face {font-family: "processmaker-font";
- src: url('processmaker-font.eot?t=1730322668195'); /* IE9*/
- src: url('processmaker-font.eot?t=1730322668195#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url("processmaker-font.woff2?t=1730322668195") format("woff2"),
- url("processmaker-font.woff?t=1730322668195") format("woff"),
- url('processmaker-font.ttf?t=1730322668195') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
- url('processmaker-font.svg?t=1730322668195#processmaker-font') format('svg'); /* iOS 4.1- */
+ src: url('processmaker-font.eot?t=1733168374693'); /* IE9*/
+ src: url('processmaker-font.eot?t=1733168374693#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url("processmaker-font.woff2?t=1733168374693") format("woff2"),
+ url("processmaker-font.woff?t=1733168374693") format("woff"),
+ url('processmaker-font.ttf?t=1733168374693') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('processmaker-font.svg?t=1733168374693#processmaker-font') format('svg'); /* iOS 4.1- */
}
[class^="fp-"], [class*=" fp-"] {
@@ -35,23 +35,27 @@
.fp-cloud-download-outline:before { content: "\ea13"; }
.fp-copy:before { content: "\ea14"; }
.fp-desktop:before { content: "\ea15"; }
-.fp-eye:before { content: "\ea16"; }
-.fp-fields-icon:before { content: "\ea17"; }
-.fp-flowgenie-outline:before { content: "\ea18"; }
-.fp-folder-outline:before { content: "\ea19"; }
-.fp-fullscreen:before { content: "\ea1a"; }
-.fp-github:before { content: "\ea1b"; }
-.fp-layout-icon:before { content: "\ea1c"; }
-.fp-map:before { content: "\ea1d"; }
-.fp-mobile:before { content: "\ea1e"; }
-.fp-pdf:before { content: "\ea1f"; }
-.fp-play-outline:before { content: "\ea20"; }
-.fp-plus:before { content: "\ea21"; }
-.fp-screen-outline:before { content: "\ea22"; }
-.fp-script-outline:before { content: "\ea23"; }
-.fp-slack-notification:before { content: "\ea24"; }
-.fp-slack:before { content: "\ea25"; }
-.fp-slideshow:before { content: "\ea26"; }
-.fp-table:before { content: "\ea27"; }
-.fp-trash:before { content: "\ea28"; }
-.fp-unlink:before { content: "\ea29"; }
+.fp-edit-outline:before { content: "\ea16"; }
+.fp-eye:before { content: "\ea17"; }
+.fp-fields-icon:before { content: "\ea18"; }
+.fp-flowgenie-outline:before { content: "\ea19"; }
+.fp-folder-outline:before { content: "\ea1a"; }
+.fp-fullscreen:before { content: "\ea1b"; }
+.fp-github:before { content: "\ea1c"; }
+.fp-layout-icon:before { content: "\ea1d"; }
+.fp-link-icon:before { content: "\ea1e"; }
+.fp-map:before { content: "\ea1f"; }
+.fp-mobile:before { content: "\ea20"; }
+.fp-pdf:before { content: "\ea21"; }
+.fp-play-outline:before { content: "\ea22"; }
+.fp-plus-thin:before { content: "\ea23"; }
+.fp-plus:before { content: "\ea24"; }
+.fp-remove-outlined:before { content: "\ea25"; }
+.fp-screen-outline:before { content: "\ea26"; }
+.fp-script-outline:before { content: "\ea27"; }
+.fp-slack-notification:before { content: "\ea28"; }
+.fp-slack:before { content: "\ea29"; }
+.fp-slideshow:before { content: "\ea2a"; }
+.fp-table:before { content: "\ea2b"; }
+.fp-trash:before { content: "\ea2c"; }
+.fp-unlink:before { content: "\ea2d"; }
diff --git a/resources/fonts/pm-font/processmaker-font.module.less b/resources/fonts/pm-font/processmaker-font.module.less
index 026d3cf05f..5b6fb9fdbc 100644
--- a/resources/fonts/pm-font/processmaker-font.module.less
+++ b/resources/fonts/pm-font/processmaker-font.module.less
@@ -1,10 +1,10 @@
@font-face {font-family: "processmaker-font";
- src: url('processmaker-font.eot?t=1730322668195'); /* IE9*/
- src: url('processmaker-font.eot?t=1730322668195#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url("processmaker-font.woff2?t=1730322668195") format("woff2"),
- url("processmaker-font.woff?t=1730322668195") format("woff"),
- url('processmaker-font.ttf?t=1730322668195') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
- url('processmaker-font.svg?t=1730322668195#processmaker-font') format('svg'); /* iOS 4.1- */
+ src: url('processmaker-font.eot?t=1733168374693'); /* IE9*/
+ src: url('processmaker-font.eot?t=1733168374693#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url("processmaker-font.woff2?t=1733168374693") format("woff2"),
+ url("processmaker-font.woff?t=1733168374693") format("woff"),
+ url('processmaker-font.ttf?t=1733168374693') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('processmaker-font.svg?t=1733168374693#processmaker-font') format('svg'); /* iOS 4.1- */
}
[class^="fp-"], [class*=" fp-"] {
@@ -36,25 +36,29 @@
.fp-cloud-download-outline:before { content: "\ea13"; }
.fp-copy:before { content: "\ea14"; }
.fp-desktop:before { content: "\ea15"; }
-.fp-eye:before { content: "\ea16"; }
-.fp-fields-icon:before { content: "\ea17"; }
-.fp-flowgenie-outline:before { content: "\ea18"; }
-.fp-folder-outline:before { content: "\ea19"; }
-.fp-fullscreen:before { content: "\ea1a"; }
-.fp-github:before { content: "\ea1b"; }
-.fp-layout-icon:before { content: "\ea1c"; }
-.fp-map:before { content: "\ea1d"; }
-.fp-mobile:before { content: "\ea1e"; }
-.fp-pdf:before { content: "\ea1f"; }
-.fp-play-outline:before { content: "\ea20"; }
-.fp-plus:before { content: "\ea21"; }
-.fp-screen-outline:before { content: "\ea22"; }
-.fp-script-outline:before { content: "\ea23"; }
-.fp-slack-notification:before { content: "\ea24"; }
-.fp-slack:before { content: "\ea25"; }
-.fp-slideshow:before { content: "\ea26"; }
-.fp-table:before { content: "\ea27"; }
-.fp-trash:before { content: "\ea28"; }
-.fp-unlink:before { content: "\ea29"; }
+.fp-edit-outline:before { content: "\ea16"; }
+.fp-eye:before { content: "\ea17"; }
+.fp-fields-icon:before { content: "\ea18"; }
+.fp-flowgenie-outline:before { content: "\ea19"; }
+.fp-folder-outline:before { content: "\ea1a"; }
+.fp-fullscreen:before { content: "\ea1b"; }
+.fp-github:before { content: "\ea1c"; }
+.fp-layout-icon:before { content: "\ea1d"; }
+.fp-link-icon:before { content: "\ea1e"; }
+.fp-map:before { content: "\ea1f"; }
+.fp-mobile:before { content: "\ea20"; }
+.fp-pdf:before { content: "\ea21"; }
+.fp-play-outline:before { content: "\ea22"; }
+.fp-plus-thin:before { content: "\ea23"; }
+.fp-plus:before { content: "\ea24"; }
+.fp-remove-outlined:before { content: "\ea25"; }
+.fp-screen-outline:before { content: "\ea26"; }
+.fp-script-outline:before { content: "\ea27"; }
+.fp-slack-notification:before { content: "\ea28"; }
+.fp-slack:before { content: "\ea29"; }
+.fp-slideshow:before { content: "\ea2a"; }
+.fp-table:before { content: "\ea2b"; }
+.fp-trash:before { content: "\ea2c"; }
+.fp-unlink:before { content: "\ea2d"; }
}
\ No newline at end of file
diff --git a/resources/fonts/pm-font/processmaker-font.scss b/resources/fonts/pm-font/processmaker-font.scss
index 1b4de47a37..ad7f2ab9b9 100644
--- a/resources/fonts/pm-font/processmaker-font.scss
+++ b/resources/fonts/pm-font/processmaker-font.scss
@@ -1,10 +1,10 @@
@font-face {font-family: "processmaker-font";
- src: url('processmaker-font.eot?t=1730322668195'); /* IE9*/
- src: url('processmaker-font.eot?t=1730322668195#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url("processmaker-font.woff2?t=1730322668195") format("woff2"),
- url("processmaker-font.woff?t=1730322668195") format("woff"),
- url('processmaker-font.ttf?t=1730322668195') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
- url('processmaker-font.svg?t=1730322668195#processmaker-font') format('svg'); /* iOS 4.1- */
+ src: url('processmaker-font.eot?t=1733168374693'); /* IE9*/
+ src: url('processmaker-font.eot?t=1733168374693#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url("processmaker-font.woff2?t=1733168374693") format("woff2"),
+ url("processmaker-font.woff?t=1733168374693") format("woff"),
+ url('processmaker-font.ttf?t=1733168374693') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('processmaker-font.svg?t=1733168374693#processmaker-font') format('svg'); /* iOS 4.1- */
}
[class^="fp-"], [class*=" fp-"] {
@@ -35,26 +35,30 @@
.fp-cloud-download-outline:before { content: "\ea13"; }
.fp-copy:before { content: "\ea14"; }
.fp-desktop:before { content: "\ea15"; }
-.fp-eye:before { content: "\ea16"; }
-.fp-fields-icon:before { content: "\ea17"; }
-.fp-flowgenie-outline:before { content: "\ea18"; }
-.fp-folder-outline:before { content: "\ea19"; }
-.fp-fullscreen:before { content: "\ea1a"; }
-.fp-github:before { content: "\ea1b"; }
-.fp-layout-icon:before { content: "\ea1c"; }
-.fp-map:before { content: "\ea1d"; }
-.fp-mobile:before { content: "\ea1e"; }
-.fp-pdf:before { content: "\ea1f"; }
-.fp-play-outline:before { content: "\ea20"; }
-.fp-plus:before { content: "\ea21"; }
-.fp-screen-outline:before { content: "\ea22"; }
-.fp-script-outline:before { content: "\ea23"; }
-.fp-slack-notification:before { content: "\ea24"; }
-.fp-slack:before { content: "\ea25"; }
-.fp-slideshow:before { content: "\ea26"; }
-.fp-table:before { content: "\ea27"; }
-.fp-trash:before { content: "\ea28"; }
-.fp-unlink:before { content: "\ea29"; }
+.fp-edit-outline:before { content: "\ea16"; }
+.fp-eye:before { content: "\ea17"; }
+.fp-fields-icon:before { content: "\ea18"; }
+.fp-flowgenie-outline:before { content: "\ea19"; }
+.fp-folder-outline:before { content: "\ea1a"; }
+.fp-fullscreen:before { content: "\ea1b"; }
+.fp-github:before { content: "\ea1c"; }
+.fp-layout-icon:before { content: "\ea1d"; }
+.fp-link-icon:before { content: "\ea1e"; }
+.fp-map:before { content: "\ea1f"; }
+.fp-mobile:before { content: "\ea20"; }
+.fp-pdf:before { content: "\ea21"; }
+.fp-play-outline:before { content: "\ea22"; }
+.fp-plus-thin:before { content: "\ea23"; }
+.fp-plus:before { content: "\ea24"; }
+.fp-remove-outlined:before { content: "\ea25"; }
+.fp-screen-outline:before { content: "\ea26"; }
+.fp-script-outline:before { content: "\ea27"; }
+.fp-slack-notification:before { content: "\ea28"; }
+.fp-slack:before { content: "\ea29"; }
+.fp-slideshow:before { content: "\ea2a"; }
+.fp-table:before { content: "\ea2b"; }
+.fp-trash:before { content: "\ea2c"; }
+.fp-unlink:before { content: "\ea2d"; }
$fp-bpmn-action-by-email: "\ea01";
$fp-bpmn-data-connector: "\ea02";
@@ -77,24 +81,28 @@ $fp-close: "\ea12";
$fp-cloud-download-outline: "\ea13";
$fp-copy: "\ea14";
$fp-desktop: "\ea15";
-$fp-eye: "\ea16";
-$fp-fields-icon: "\ea17";
-$fp-flowgenie-outline: "\ea18";
-$fp-folder-outline: "\ea19";
-$fp-fullscreen: "\ea1a";
-$fp-github: "\ea1b";
-$fp-layout-icon: "\ea1c";
-$fp-map: "\ea1d";
-$fp-mobile: "\ea1e";
-$fp-pdf: "\ea1f";
-$fp-play-outline: "\ea20";
-$fp-plus: "\ea21";
-$fp-screen-outline: "\ea22";
-$fp-script-outline: "\ea23";
-$fp-slack-notification: "\ea24";
-$fp-slack: "\ea25";
-$fp-slideshow: "\ea26";
-$fp-table: "\ea27";
-$fp-trash: "\ea28";
-$fp-unlink: "\ea29";
+$fp-edit-outline: "\ea16";
+$fp-eye: "\ea17";
+$fp-fields-icon: "\ea18";
+$fp-flowgenie-outline: "\ea19";
+$fp-folder-outline: "\ea1a";
+$fp-fullscreen: "\ea1b";
+$fp-github: "\ea1c";
+$fp-layout-icon: "\ea1d";
+$fp-link-icon: "\ea1e";
+$fp-map: "\ea1f";
+$fp-mobile: "\ea20";
+$fp-pdf: "\ea21";
+$fp-play-outline: "\ea22";
+$fp-plus-thin: "\ea23";
+$fp-plus: "\ea24";
+$fp-remove-outlined: "\ea25";
+$fp-screen-outline: "\ea26";
+$fp-script-outline: "\ea27";
+$fp-slack-notification: "\ea28";
+$fp-slack: "\ea29";
+$fp-slideshow: "\ea2a";
+$fp-table: "\ea2b";
+$fp-trash: "\ea2c";
+$fp-unlink: "\ea2d";
diff --git a/resources/fonts/pm-font/processmaker-font.styl b/resources/fonts/pm-font/processmaker-font.styl
index 004b55fd66..aebacf2c8d 100644
--- a/resources/fonts/pm-font/processmaker-font.styl
+++ b/resources/fonts/pm-font/processmaker-font.styl
@@ -1,10 +1,10 @@
@font-face {font-family: "processmaker-font";
- src: url('processmaker-font.eot?t=1730322668195'); /* IE9*/
- src: url('processmaker-font.eot?t=1730322668195#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url("processmaker-font.woff2?t=1730322668195") format("woff2"),
- url("processmaker-font.woff?t=1730322668195") format("woff"),
- url('processmaker-font.ttf?t=1730322668195') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
- url('processmaker-font.svg?t=1730322668195#processmaker-font') format('svg'); /* iOS 4.1- */
+ src: url('processmaker-font.eot?t=1733168374693'); /* IE9*/
+ src: url('processmaker-font.eot?t=1733168374693#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url("processmaker-font.woff2?t=1733168374693") format("woff2"),
+ url("processmaker-font.woff?t=1733168374693") format("woff"),
+ url('processmaker-font.ttf?t=1733168374693') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+ url('processmaker-font.svg?t=1733168374693#processmaker-font') format('svg'); /* iOS 4.1- */
}
[class^="fp-"], [class*=" fp-"] {
@@ -35,23 +35,27 @@
.fp-cloud-download-outline:before { content: "\ea13"; }
.fp-copy:before { content: "\ea14"; }
.fp-desktop:before { content: "\ea15"; }
-.fp-eye:before { content: "\ea16"; }
-.fp-fields-icon:before { content: "\ea17"; }
-.fp-flowgenie-outline:before { content: "\ea18"; }
-.fp-folder-outline:before { content: "\ea19"; }
-.fp-fullscreen:before { content: "\ea1a"; }
-.fp-github:before { content: "\ea1b"; }
-.fp-layout-icon:before { content: "\ea1c"; }
-.fp-map:before { content: "\ea1d"; }
-.fp-mobile:before { content: "\ea1e"; }
-.fp-pdf:before { content: "\ea1f"; }
-.fp-play-outline:before { content: "\ea20"; }
-.fp-plus:before { content: "\ea21"; }
-.fp-screen-outline:before { content: "\ea22"; }
-.fp-script-outline:before { content: "\ea23"; }
-.fp-slack-notification:before { content: "\ea24"; }
-.fp-slack:before { content: "\ea25"; }
-.fp-slideshow:before { content: "\ea26"; }
-.fp-table:before { content: "\ea27"; }
-.fp-trash:before { content: "\ea28"; }
-.fp-unlink:before { content: "\ea29"; }
+.fp-edit-outline:before { content: "\ea16"; }
+.fp-eye:before { content: "\ea17"; }
+.fp-fields-icon:before { content: "\ea18"; }
+.fp-flowgenie-outline:before { content: "\ea19"; }
+.fp-folder-outline:before { content: "\ea1a"; }
+.fp-fullscreen:before { content: "\ea1b"; }
+.fp-github:before { content: "\ea1c"; }
+.fp-layout-icon:before { content: "\ea1d"; }
+.fp-link-icon:before { content: "\ea1e"; }
+.fp-map:before { content: "\ea1f"; }
+.fp-mobile:before { content: "\ea20"; }
+.fp-pdf:before { content: "\ea21"; }
+.fp-play-outline:before { content: "\ea22"; }
+.fp-plus-thin:before { content: "\ea23"; }
+.fp-plus:before { content: "\ea24"; }
+.fp-remove-outlined:before { content: "\ea25"; }
+.fp-screen-outline:before { content: "\ea26"; }
+.fp-script-outline:before { content: "\ea27"; }
+.fp-slack-notification:before { content: "\ea28"; }
+.fp-slack:before { content: "\ea29"; }
+.fp-slideshow:before { content: "\ea2a"; }
+.fp-table:before { content: "\ea2b"; }
+.fp-trash:before { content: "\ea2c"; }
+.fp-unlink:before { content: "\ea2d"; }
diff --git a/resources/fonts/pm-font/processmaker-font.svg b/resources/fonts/pm-font/processmaker-font.svg
index e18aaa0817..adcf85c789 100644
--- a/resources/fonts/pm-font/processmaker-font.svg
+++ b/resources/fonts/pm-font/processmaker-font.svg
@@ -70,65 +70,77 @@