1+ property personas; _originIcons : Collection
2+ property _originIcon : Picture
3+
4+ Class constructor ($formName : Text)
5+
6+ This:C1470 ._originIcons := This:C1470 .getIcons ()
7+ This:C1470 .personas := This:C1470 .getPersonas ()
8+
9+ Function getPersonas ()- > $personas : Collection
10+
11+
12+ var $folder : 4D:C1709 .Folder
13+ var $file : 4D:C1709 .File
14+ var $lang : Text
15+ var $localizedPersonaFolders ; $defaultPersonaFolders ; $dataPersonas ; $files : Collection
16+ var $persona : Object
17+ var $i : Integer
18+ var $validated : Boolean
19+
20+ $lang := Get database localization:C1009 (Current localization:K5:22 ; * )
21+ $personas := []
22+
23+ $localizedPersonaFolders := []
24+ $defaultPersonaFolders := []
25+
26+ $localizedPersonaFolders .push (Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/" + $lang )) // default
27+ $localizedPersonaFolders .push (Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/" + $lang ; * )) // host resources
28+ $localizedPersonaFolders .push (Folder:C1567 (Folder:C1567 (fk user preferences folder:K87:10 ).path + "4DWP_AI/Personas/" + $lang ; fk posix path:K87:1 ))
29+
30+ $defaultPersonaFolders .push (Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/en/" ))
31+ $defaultPersonaFolders .push (Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/en/" ; * ))
32+ $defaultPersonaFolders .push (Folder:C1567 (Folder:C1567 (fk user preferences folder:K87:10 ).path + "4DWP_AI/Personas/en" ; fk posix path:K87:1 ))
33+
34+ // local personas
35+ For ($i; 0; $localizedPersonaFolders .length - 1)
36+ $folder := $localizedPersonaFolders [$i ]
37+ If ($folder .exists = False:C215)
38+ $folder := $defaultPersonaFolders [$i ]
39+ End if
40+ If ($folder .exists = True:C214)
41+
42+ $files := $folder .files (fk ignore invisible:K87:22 )
43+ For each ($file; $files)
44+ // $validated:=This.JSONvalidate("persona"; $file.getText())
45+ $validated := True:C214
46+ If ($validated)
47+ $persona := JSON Parse:C1218 ($file .getText ())
48+ $persona ._fileName := $file .fullName
49+ $persona ._origin := Choose:C955 ($i ; "Default" ; "Resources" ; "Single User" )
50+ $persona ._originIcon := This:C1470 ._originIcons [$i ]
51+ $personas .push ($persona )
52+ End if
53+ End for each
54+
55+ End if
56+ End for
57+
58+ // data (server) personas
59+ $dataPersonas := AI_GetPersonas ($lang ) // executed on server
60+ For each ($persona; $dataPersonas)
61+ $persona ._origin := "All Users"
62+ $persona ._originIcon := This:C1470 ._originIcons [3 ]
63+ End for each
64+ $personas .combine ($dataPersonas )
65+
66+
67+ Function getIcons ()- > $icons : Collection
68+
69+ var $fileNames : Collection
70+ var $fileName ; $filePath : Text
71+ var $picture : Picture
72+
73+ $icons := []
74+ $fileNames := ["locker.png"; "database.png"; "single.png"; "multi.png"]
75+ For each ($fileName; $fileNames)
76+ $filePath := File:C1566 ("/RESOURCES/Images/AI/" + $FileName ).platformPath
77+ READ PICTURE FILE:C678 ($filePath ; $picture )
78+ $icons .push ($picture )
79+ End for each
80+
81+ Function getPersona ($id : Integer)- > $persona : Object
82+
83+ If ($id<= This:C1470 .personas .length )
84+ $persona := This:C1470 .personas [$id ]
85+ End if
86+
87+
88+
89+ Function save ($persona : Object)
90+
91+ var $folder : 4D:C1709 .Folder
92+ var $file : 4D:C1709 .File
93+ var $lang ; $json : Text
94+
95+ $lang := Get database localization:C1009 (Current localization:K5:22 ; * )
96+
97+ Case of
98+ : ($persona ._origin = "default") // must be saved in the 4DWP resources folder
99+
100+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/" + $lang )
101+ If ($folder .exists = False:C215)
102+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/en/" )
103+ End if
104+
105+ : ($persona ._origin = "resources") // must be saved in the host database resources
106+
107+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/" + $lang ; * )
108+ If ($folder .exists = False:C215)
109+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/en/" ; * )
110+ End if
111+
112+
113+ : ($persona ._origin = "user") // must be saved in the user's folder
114+
115+ $folder := Folder:C1567 (Folder:C1567 (fk user preferences folder:K87:10 ).path + "4DWP_AI/Personas/" + $lang ; fk posix path:K87:1 )
116+ If ($folder .exists = False:C215)
117+ $folder := Folder:C1567 (Folder:C1567 (fk user preferences folder:K87:10 ).path + "4DWP_AI/Personas/en" ; fk posix path:K87:1 )
118+ End if
119+
120+ : ($persona ._origin = "data") // must be saved in the data folder
121+
122+ End case
123+
124+
125+ If ($folder# Null:C1517)
126+
127+ $file := File:C1566 ($folder .path + $persona .name + ".json" ; fk posix path:K87:1 )
128+ OB REMOVE:C1226 ($persona ; "_origin" )
129+ OB REMOVE:C1226 ($persona ; "_originIcon" )
130+
131+ $json := JSON Stringify:C1217 ($persona ; * )
132+ $file .setText ($json )
133+
134+ Else // data folder case
135+
136+ AI_SavePersona ($persona ; $lang )
137+
138+ End if
139+
140+
141+
142+ Function delete ($persona : Object)
143+
144+ var $folder : 4D:C1709 .Folder
145+ var $file : 4D:C1709 .File
146+ var $lang ; $json : Text
147+
148+ $lang := Get database localization:C1009 (Current localization:K5:22 ; * )
149+
150+ Case of
151+ : ($persona ._origin = "default") // must be saved in the 4DWP resources folder
152+
153+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/" + $lang )
154+ If ($folder .exists = False:C215)
155+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/en/" )
156+ End if
157+
158+ : ($persona ._origin = "resources") // must be saved in the host database resources
159+
160+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/" + $lang ; * )
161+ If ($folder .exists = False:C215)
162+ $folder := Folder:C1567 ("/RESOURCES/4DWP_AI/Personas/en/" ; * )
163+ End if
164+
165+
166+ : ($persona ._origin = "user") // must be saved in the user's folder
167+
168+ $folder := Folder:C1567 (Folder:C1567 (fk user preferences folder:K87:10 ).path + "4DWP_AI/Personas/" + $lang ; fk posix path:K87:1 )
169+ If ($folder .exists = False:C215)
170+ $folder := Folder:C1567 (Folder:C1567 (fk user preferences folder:K87:10 ).path + "4DWP_AI/Personas/en" ; fk posix path:K87:1 )
171+ End if
172+
173+ : ($persona ._origin = "data") // must be saved in the data folder
174+
175+ End case
176+
177+
178+ If ($folder# Null:C1517)
179+
180+ $file := File:C1566 ($folder .path + $persona .name + ".json" ; fk posix path:K87:1 )
181+
182+ If ($file .exists )
183+ $file .delete ()
184+ End if
185+
186+ Else // data folder case
187+
188+ AI_SavePersona ($persona ; $lang )
189+
190+ End if
191+
192+
193+
194+
0 commit comments