dashboardImpl.cls 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. /*------------------------------------------------------------------------
  2. File : adresse_dict
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Thu Jun 26 13:56:20 CEST 2025
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.Core.String FROM PROPATH.
  12. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  13. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH.
  14. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  15. USING OpenEdge.Web.WebHandler FROM PROPATH.
  16. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  17. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  18. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  19. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  20. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  21. USING utilities.utilitiesHandler FROM PROPATH.
  22. USING OpenEdge.Net.HTTP.HttpHeader FROM PROPATH.
  23. CLASS dashboard.dashboardImpl INHERITS WebHandler:
  24. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  25. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  27. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  28. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  29. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO INIT 'user,admin'.
  30. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  31. DEFINE TEMP-TABLE tcompanies
  32. SERIALIZE-NAME 'companies'
  33. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  34. FIELD company_name AS CHARACTER SERIALIZE-NAME 'company_name'
  35. FIELD lSelected AS LOGICAL SERIALIZE-NAME 'selected'
  36. .
  37. DEFINE TEMP-TABLE tLevel1
  38. SERIALIZE-NAME ''
  39. FIELD menu_id AS INTEGER
  40. FIELD menu_text AS CHARACTER
  41. FIELD menu_link AS CHARACTER
  42. FIELD openMode AS CHARACTER
  43. FIELD admin AS LOGICAL
  44. FIELD level1_recid AS RECID SERIALIZE-HIDDEN
  45. .
  46. DEFINE TEMP-TABLE tLevel2
  47. SERIALIZE-NAME 'children'
  48. FIELD level1_recid AS RECID SERIALIZE-HIDDEN
  49. FIELD menu_id AS INTEGER
  50. FIELD menu_text AS CHARACTER
  51. FIELD menu_link AS CHARACTER
  52. FIELD openMode AS CHARACTER
  53. FIELD admin AS LOGICAL
  54. FIELD level2_recid AS RECID SERIALIZE-HIDDEN
  55. .
  56. DEFINE TEMP-TABLE tLevel3
  57. SERIALIZE-NAME 'children'
  58. FIELD level2_recid AS RECID SERIALIZE-HIDDEN
  59. FIELD menu_id AS INTEGER
  60. FIELD menu_text AS CHARACTER
  61. FIELD menu_link AS CHARACTER
  62. FIELD openMode AS CHARACTER
  63. FIELD admin AS LOGICAL
  64. FIELD level3_recid AS RECID SERIALIZE-HIDDEN
  65. .
  66. DEFINE DATASET menu_structur SERIALIZE-HIDDEN
  67. FOR tLevel1, tLevel2, tLevel3
  68. PARENT-ID-RELATION RELATION1 FOR tLevel1, tLevel2
  69. PARENT-ID-FIELD level1_recid
  70. PARENT-ID-RELATION RELATION2 FOR tLevel2, tLevel3
  71. PARENT-ID-FIELD level2_recid
  72. .
  73. DEFINE VARIABLE hDSmenu_structur AS HANDLE NO-UNDO.
  74. /*------------------------------------------------------------------------------
  75. Purpose:
  76. Notes:
  77. ------------------------------------------------------------------------------*/
  78. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  79. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  80. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  81. DEFINE VARIABLE oBody AS String NO-UNDO.
  82. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  83. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  84. DEFINE VARIABLE oJsonMenu AS JsonObject NO-UNDO.
  85. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  86. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  87. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  88. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  89. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  90. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  91. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  92. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  93. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  94. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  95. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  96. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  97. DEFINE VARIABLE lAdmin AS LOGICAL NO-UNDO INIT FALSE.
  98. DEFINE VARIABLE htwebmenu AS HANDLE NO-UNDO.
  99. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  100. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  101. DEFINE VARIABLE rtlevel1 AS RECID NO-UNDO.
  102. DEFINE VARIABLE rtlevel2 AS RECID NO-UNDO.
  103. DEFINE VARIABLE cnewuser_name AS CHARACTER NO-UNDO.
  104. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  105. outilitiesHandler = NEW utilitiesHandler().
  106. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  107. outilitiesHandler:getHeaderData(
  108. INPUT poRequest ,
  109. INPUT cQueryString ,
  110. OUTPUT ccompany ,
  111. OUTPUT cuser_name ,
  112. OUTPUT cAnzeigeName ,
  113. OUTPUT ilanguage_id ,
  114. OUTPUT cSessionToken,
  115. OUTPUT cFunction ,
  116. OUTPUT oJsonIdent
  117. ).
  118. oJsonIdent:WriteFile('C:\TEMP\dashboard_GET.json', TRUE).
  119. cuser_name = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
  120. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
  121. cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  122. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
  123. lRetVal = FALSE.
  124. DO WHILE cFunction = 'init':
  125. hDSmenu_structur = DATASET menu_structur:HANDLE.
  126. EMPTY TEMP-TABLE tlevel1.
  127. EMPTY TEMP-TABLE tlevel2.
  128. EMPTY TEMP-TABLE tlevel3.
  129. DO ii = 1 TO NUM-ENTRIES(cUsers, ','):
  130. cnewuser_name = ENTRY(ii, cUsers, ',').
  131. FIND FIRST webmenu NO-LOCK
  132. WHERE webmenu.company = ccompany
  133. AND webmenu.user_name = cnewuser_name NO-ERROR.
  134. IF AVAILABLE webmenu THEN LEAVE.
  135. cnewuser_name = ''.
  136. END.
  137. FIND FIRST users NO-LOCK
  138. WHERE users.user_name = oJsonIdent:GetCharacter('H_user_name').
  139. IF NOT AVAILABLE users THEN LEAVE.
  140. lAdmin = users.lAdmin.
  141. FOR EACH webmenu NO-LOCK
  142. WHERE webmenu.company = ccompany
  143. AND webmenu.user_name = cnewuser_name
  144. AND webmenu.level1 > 0 :
  145. IF NOT lAdmin AND
  146. webmenu.menu_link <> '' AND
  147. webmenu.ladmin THEN NEXT.
  148. IF webmenu.level2 = 0 THEN
  149. DO:
  150. CREATE tlevel1.
  151. ASSIGN
  152. tlevel1.level1_recid = RECID(tLevel1)
  153. tlevel1.menu_id = webmenu.level1
  154. tlevel1.menu_text = webmenu.menu_title
  155. tlevel1.menu_link = webmenu.menu_link
  156. tlevel1.openMode = webmenu.openmode
  157. tlevel1.admin = webmenu.ladmin
  158. rtlevel1 = RECID(tlevel1).
  159. NEXT.
  160. END.
  161. IF webmenu.level3 = 0 THEN
  162. DO:
  163. CREATE tlevel2.
  164. ASSIGN
  165. tlevel2.level1_recid = rtlevel1
  166. tlevel2.level2_recid = RECID(tLevel2)
  167. tlevel2.menu_id = webmenu.level2
  168. tlevel2.menu_text = webmenu.menu_title
  169. tlevel2.menu_link = webmenu.menu_link
  170. tlevel2.openmode = webmenu.openmode
  171. tlevel2.admin = webmenu.ladmin
  172. rtlevel2 = RECID(tlevel2).
  173. NEXT.
  174. END.
  175. CREATE tlevel3.
  176. ASSIGN
  177. tlevel3.level2_recid = rtlevel2
  178. tlevel3.level3_recid = RECID(tLevel3)
  179. tlevel3.menu_id = webmenu.level3
  180. tlevel3.menu_text = webmenu.menu_title
  181. tlevel3.menu_link = webmenu.menu_link
  182. tlevel3.openMode = webmenu.openmode
  183. tlevel3.admin = webmenu.ladmin
  184. .
  185. END.
  186. cContent-Type = "application/json".
  187. cDefautlCharSet = 'utf-8'.
  188. oJsonResponse = NEW JsonObject().
  189. oJsonMenu = NEW JsonObject().
  190. oJsonMenu:READ(hDSmenu_structur).
  191. oJsonMenu:WRITE(lcJsonInhalt, FALSE).
  192. ii = INDEX(lcJsonInhalt, '[').
  193. lcJsonInhalt = SUBSTRING(lcJsonInhalt, ii).
  194. ii = R-INDEX(lcJsonInhalt, ']').
  195. lcJsonInhalt = SUBSTRING(lcJsonInhalt,01,ii).
  196. MESSAGE STRING(lcJsonInhalt).
  197. lRetVal = TRUE.
  198. LEAVE.
  199. END.
  200. oBody = NEW STRING(lcJsonInhalt).
  201. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  202. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  203. oWriter = NEW WebResponseWriter(oResponse).
  204. oWriter:Open().
  205. oWriter:Close().
  206. RETURN 0.
  207. CATCH e AS Progress.Lang.Error:
  208. END CATCH.
  209. FINALLY:
  210. END FINALLY.
  211. END METHOD.
  212. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  213. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  214. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  215. RETURN result.
  216. END METHOD.
  217. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  218. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  219. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  220. RETURN result.
  221. END METHOD.
  222. /*------------------------------------------------------------------------------
  223. Purpose:
  224. Notes:
  225. ------------------------------------------------------------------------------*/
  226. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  227. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  228. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  229. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  230. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  231. DEFINE VARIABLE oMessage AS JsonObject NO-UNDO.
  232. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  233. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  234. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  235. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  236. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  237. DEFINE VARIABLE lcErrorMessage AS LONGCHAR NO-UNDO.
  238. DEFINE VARIABLE lError AS LOGICAL NO-UNDO.
  239. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  240. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  241. oHeader = poRequest:GetHeader('X-COMPANY').
  242. ccompany = oHeader:VALUE.
  243. oHeader = poRequest:GetHeader('X-USER-NAME').
  244. cuser_name = oHeader:VALUE.
  245. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  246. cAnzeigeName = oHeader:VALUE.
  247. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  248. ilanguage_id = INTEGER(oHeader:VALUE).
  249. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  250. cSessionToken = oHeader:VALUE.
  251. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  252. MESSAGE 'getJsonFromRequest = ' lRetVal.
  253. oJsonData:WRITE(lcJsonString, FALSE).
  254. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  255. MESSAGE ccompany '-' cuser_name '-' cSessionToken.
  256. lcErrorMessage = ''.
  257. lError = FALSE.
  258. outilitiesHandler = NEW utilitiesHandler().
  259. DO WHILE TRUE:
  260. FIND FIRST users NO-LOCK
  261. WHERE users.user_name = cuser_name NO-ERROR.
  262. /* IF NOT AVAILABLE users THEN */
  263. /* DO: */
  264. /* lError = TRUE. */
  265. /* outilitiesHandler:getErrorMessage ( */
  266. /* INPUT '1990', */
  267. /* INPUT 1 , /* Sprcd*/ */
  268. /* INPUT '' , /* Parameter */*/
  269. /* OUTPUT lcMessage */
  270. /* ). */
  271. /* LEAVE. */
  272. /* END. */
  273. ilanguage_id = users.language_id.
  274. /* IF users.password <> cPassword THEN */
  275. /* DO: */
  276. /* lError = TRUE. */
  277. /* outilitiesHandler:getErrorMessage ( */
  278. /* INPUT '1992', */
  279. /* INPUT ilanguage_id, /* Sprcd*/ */
  280. /* INPUT '' , /* Parameter */*/
  281. /* OUTPUT lcMessage */
  282. /* ). */
  283. /* LEAVE. */
  284. /* END. */
  285. FIND FIRST userauthorization NO-LOCK
  286. WHERE userauthorization.company = ccompany
  287. AND userauthorization.user_name = cuser_name NO-ERROR.
  288. /* IF NOT AVAILABLE userauthorization THEN */
  289. /* DO: */
  290. /* lError = TRUE. */
  291. /* outilitiesHandler:getErrorMessage ( */
  292. /* INPUT '1991' , */
  293. /* INPUT ilanguage_id, /* Sprcd*/ */
  294. /* INPUT '' , /* Parameter */*/
  295. /* OUTPUT lcMessage */
  296. /* ). */
  297. /* LEAVE. */
  298. /* END. */
  299. /* REPEAT TRANSACTION ON ERROR UNDO, LEAVE: */
  300. /* FIND FIRST userdata NO-LOCK */
  301. /* WHERE userdata.user_name = cuser_name */
  302. /* AND userdata.record_type = 'LOGIN' */
  303. /* AND userdata.key_type = 'company' NO-ERROR.*/
  304. /* IF NOT AVAILABLE userdata THEN */
  305. /* DO: */
  306. /* CREATE userdata. */
  307. /* ASSIGN */
  308. /* userdata.user_name = cuser_name */
  309. /* userdata.record_type = 'LOGIN' */
  310. /* userdata.key_type = 'company'. */
  311. /* END. */
  312. /* ASSIGN */
  313. /* userdata.cfield_1 = ccompany */
  314. /* userdata.cfield_2 = cuser_name. */
  315. /* RELEASE userdata. */
  316. /* LEAVE. */
  317. /* END. */
  318. oResponse = NEW OpenEdge.Web.WebResponse().
  319. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  320. oResponse:ContentType = "application/json;charset=utf-8".
  321. oWriter = NEW WebResponseWriter(oResponse).
  322. oJsonResponse = NEW JsonObject().
  323. oJsonResponse:ADD('success' , TRUE ).
  324. oJsonResponse:ADD('session_token', cSessionToken).
  325. oJsonResponse:ADD('company' , ccompany ).
  326. oJsonResponse:ADD('user_name' , cuser_name ).
  327. oJsonResponse:ADD('language_id' , ilanguage_id ).
  328. oJsonResponse:WRITE(lcJsonString, FALSE).
  329. MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
  330. oWriter:Open().
  331. oWriter:Write(lcJsonString).
  332. oWriter:Close().
  333. RETURN 0.
  334. END.
  335. MESSAGE 'Meldung von getErrorMessage ' STRING(lcMessage).
  336. oResponse = NEW OpenEdge.Web.WebResponse().
  337. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  338. oResponse:ContentType = "application/json;charset=utf-8".
  339. oWriter = NEW WebResponseWriter(oResponse).
  340. oParser = NEW ObjectModelParser().
  341. oJsonResponse = NEW JsonObject().
  342. oJsonResponse:ADD('success', FALSE).
  343. oJsonResponse:ADD('message', 'ung�ltiger users oder ung�ltiges Passwort!') NO-ERROR.
  344. oJsonResponse:WRITE(lcJsonString, TRUE).
  345. MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
  346. oWriter:Open().
  347. oWriter:Write(lcJsonString).
  348. oWriter:Close().
  349. RETURN 0.
  350. CATCH e AS Progress.Lang.Error:
  351. END CATCH.
  352. FINALLY:
  353. DELETE OBJECT oParser NO-ERROR.
  354. END FINALLY.
  355. END METHOD.
  356. /*------------------------------------------------------------------------------
  357. Purpose:
  358. Notes:
  359. ------------------------------------------------------------------------------*/
  360. METHOD PUBLIC LOGICAL POSTDATAFILLDS(
  361. INPUT iphDS AS HANDLE
  362. ):
  363. RETURN TRUE.
  364. END METHOD.
  365. END CLASS.