You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

244 lines
16 KiB

  1. <!-- Wappler include head-page="layouts/admin" is="dmx-app" id="usermanage" appConnect="local" components="{dmxBootstrap5TableGenerator:{},dmxTyped:{},dmxBootstrap5Modal:{},dmxFormRepeat:{},dmxFormatter:{},dmxAutocomplete:{},dmxValidator:{}}" bootstrap5="cdn" bootstrap_icons="cdn" fontawesome_5="cdn" -->
  2. <dmx-value id="var_deleteuser" dmx-on:updated="conn_deleterole.load({})"></dmx-value>
  3. <dmx-serverconnect id="conn_deleterole" url="/api/roles/delete" dmx-on:done="conn_users.load({},true)"></dmx-serverconnect>
  4. <dmx-serverconnect id="conn_userinrole" url="/api/Users/userinrole" noload="true"></dmx-serverconnect>
  5. <dmx-serverconnect id="conn_permissions" url="/api/roles/permissions"></dmx-serverconnect>
  6. <dmx-serverconnect id="conn_depts" url="/api/roles/depts"></dmx-serverconnect>
  7. <dmx-serverconnect id="conn_userroles" url="/api/Users/readroles" noload="true"></dmx-serverconnect>
  8. <dmx-serverconnect id="conn_userdepts" url="/api/Users/readdepts"></dmx-serverconnect>
  9. <dmx-serverconnect id="conn_singleuser" url="/api/Users/read" noload="true"></dmx-serverconnect>
  10. <meta name="ac:route" content="/wadmin/usermanage">
  11. <dmx-serverconnect id="conn_users" url="/api/Users/search" dmx-param:filter="inp_search.value"></dmx-serverconnect>
  12. <dmx-serverconnect id="conn_deleteuser" url="/api/Users/delete" dmx-param:id="var_deleteuser.value" dmx-on:done="conn_users.load({},true)" noload="true"></dmx-serverconnect>
  13. <dmx-serverconnect id="conn_userroles" url="/api/Users/userroles"></dmx-serverconnect>
  14. <div class="modal" id="modal1" is="dmx-bs5-modal" tabindex="-1" dmx-on:hide-bs-modal="serverconnectform1.reset()">
  15. <div class="modal-dialog" role="document">
  16. <div class="modal-content">
  17. <div class="modal-header">
  18. <h5 class="modal-title">Edit User</h5>
  19. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  20. </div>
  21. <div class="modal-body">
  22. <div class="container">
  23. <div class="row">
  24. <div class="col">
  25. <form is="dmx-serverconnect-form" id="serverconnectform1" method="post" action="/api/Users/update" dmx-generator="bootstrap5" dmx-form-type="horizontal" dmx-populate="conn_singleuser.data.query" dmx-on:success="conn_users.load({});serverconnectform1.reset();modal1.hide()">
  26. <input type="hidden" name="id" id="inp_id" dmx-bind:value="conn_singleuser.data.query.id" dmxorgdomid="d468">
  27. <div class="form-group mb-3 row">
  28. <label for="inp_firstname" class="col-sm-2 col-form-label">Firstname</label>
  29. <div class="col-sm-10">
  30. <input type="text" class="form-control" id="inp_firstname" name="firstname" dmx-bind:value="conn_singleuser.data.query.firstname" aria-describedby="inp_firstname_help" placeholder="Enter Firstname" dmxorgdomid="d472">
  31. </div>
  32. </div>
  33. <div class="form-group mb-3 row">
  34. <label for="inp_lastname" class="col-sm-2 col-form-label">Lastname</label>
  35. <div class="col-sm-10">
  36. <input type="text" class="form-control" id="inp_lastname" name="lastname" dmx-bind:value="conn_singleuser.data.query.lastname" aria-describedby="inp_lastname_help" placeholder="Enter Lastname" dmxorgdomid="d476">
  37. </div>
  38. </div>
  39. <div class="form-group mb-3 row">
  40. <label for="inp_newuseremail" class="col-sm-2 col-form-label">Email</label>
  41. <div class="col-sm-10">
  42. <input type="text" class="form-control" id="inp_email" name="email" dmx-bind:value="conn_singleuser.data.query.email" aria-describedby="inp_email_help" placeholder="Enter Email" dmxorgdomid="d480">
  43. </div>
  44. </div>
  45. <div class="form-group mb-3 row">
  46. <legend class="col-sm-2 col-form-label">Validated</legend>
  47. <div class="col-sm-10 align-self-center">
  48. <div class="form-check">
  49. <input class="form-check-input" type="checkbox" value="1" id="inp_validated" name="validated" dmx-bind:value="conn_singleuser.data.query.validated" dmxorgdomid="d485" dmx-bind:checked="conn_singleuser.data.query.validated">
  50. </div>
  51. </div>
  52. </div>
  53. <div class="form-group mb-3 row">
  54. <div class="text-end col-sm-12">
  55. <button type="submit" class="btn btn-primary" dmx-bind:value="conn_singleuser.data.query.Save" dmx-bind:disabled="state.executing" dmxorgdomid="d490">Save <span class="spinner-border spinner-border-sm" role="status" dmx-show="state.executing" dmxorgdomid="d491"></span></button>
  56. </div>
  57. </div>
  58. </form>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="modal w-100" id="modal_permissiosn" is="dmx-bs5-modal" tabindex="-1" dmx-on:hide-bs-modal="frm_dept.reset();frm_role.reset()">
  67. <div class="modal-dialog modal-lg" role="document">
  68. <div class="modal-content">
  69. <div class="modal-header">
  70. <h5 class="modal-title">Edit Permissions</h5>
  71. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  72. </div>
  73. <div class="modal-body">
  74. <div class="container">
  75. <div class="row">
  76. <div class="col">
  77. <form id="frm_dept" is="dmx-serverconnect-form" method="post" action="/api/roles/create" dmx-on:success="conn_userdepts.load({userid: inp_deptuserid.value})">
  78. <input id="inp_deptuserid" name="userid" class="form-control" type="hidden">
  79. <div class="form-group md-3"> <label for="inp_department" class="form-label">Department</label>
  80. <input type="text" class="form-control" id="inp_department" name="roleid" aria-describedby="input1_help" placeholder="Enter some text" is="dmx-autocomplete" dmx-bind:data="conn_depts.data.query" optiontext="name" optionvalue="id" optionsearch="name">
  81. </div>
  82. <button id="btn_adddepartment" class="btn btn-primary" type="submit">Add</button>
  83. </form>
  84. </div>
  85. <div class="col">
  86. <form id="frm_role" is="dmx-serverconnect-form" method="post" action="/api/roles/create" dmx-on:success="conn_userroles.load({id: inp_roleuserid.value})">
  87. <input id="inp_roleuserid" name="userid" type="hidden" class="form-control">
  88. <div class="form-group md-3"> <label for="inp_role" class="form-label">Role</label>
  89. <input type="text" class="form-control" id="inp_role" name="roleid" aria-describedby="input1_help" placeholder="Enter some text" is="dmx-autocomplete" dmx-bind:data="conn_permissions.data.query" optiontext="name" optionvalue="id" optionsearch="name">
  90. </div>
  91. <button id="btn_addrole" class="btn btn-primary" type="submit">Button</button>
  92. </form>
  93. </div>
  94. </div>
  95. <div class="row">
  96. <div class="col">
  97. <div class="table-responsive">
  98. <table class="table table-striped table-bordered table-hover table-sm">
  99. <thead>
  100. <tr>
  101. <th scope="row"></th>
  102. <th scope="row" class="visually-hidden">idHeader</th>
  103. <th class="visually-hidden">Role IdId</th>
  104. <th>Name</th>
  105. </tr>
  106. </thead>
  107. <tbody is="dmx-repeat" dmx-generator="bs5table" dmx-bind:repeat="conn_userdepts.data.query" id="tableRepeat3">
  108. <tr>
  109. <td>
  110. <button id="btn_deletedept" class="btn btn-danger" dmx-on:click="conn_deleterole.load({id: id});conn_userdepts.load({userid: frm_dept.inp_deptuserid.value})">X</button>
  111. </td>
  112. <td dmx-text="id" class="visually-hidden"></td>
  113. <td dmx-text="roleid" class="visually-hidden"></td>
  114. <td dmx-text="name"></td>
  115. </tr>
  116. </tbody>
  117. </table>
  118. </div>
  119. </div>
  120. <div class="col">
  121. <div class="table-responsive">
  122. <table class="table table-striped table-bordered table-hover table-sm">
  123. <thead>
  124. <tr>
  125. <th scope="row"></th>
  126. <th scope="row" class="visually-hidden">idHeader</th>
  127. <th class="visually-hidden">Role IdId</th>
  128. <th>Name</th>
  129. </tr>
  130. </thead>
  131. <tbody is="dmx-repeat" dmx-generator="bs5table" dmx-bind:repeat="conn_userroles.data.query" id="tableRepeat2">
  132. <tr>
  133. <td>
  134. <button id="btn_deleterole" class="btn btn-danger" dmx-on:click="conn_deleterole.load({id: id});conn_userroles.load({id: frm_role.inp_roleuserid.value})">X</button>
  135. </td>
  136. <td dmx-text="id" class="visually-hidden">Cell</td>
  137. <td dmx-text="rolid" class="visually-hidden"></td>
  138. <td dmx-text="name"></td>
  139. </tr>
  140. </tbody>
  141. </table>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="modal-footer text-end">
  148. <button id="btn_done" class="btn btn-primary" dmx-on:click="frm_role.reset();frm_dept.reset();modal_permissiosn.hide()">Done</button>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. <div class="modal" id="modal_newuser" is="dmx-bs5-modal" tabindex="-1">
  154. <div class="modal-dialog" role="document">
  155. <div class="modal-content">
  156. <div class="modal-header">
  157. <h5 class="modal-title">Modal title</h5>
  158. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  159. </div>
  160. <div class="modal-body">
  161. <form id="frm_newuser" is="dmx-serverconnect-form" method="post" action="/api/Users/create" dmx-on:success="frm_newuser.reset();modal_newuser.hide();conn_users.load({})">
  162. <div class="form-group md-3"> <label for="inp_newuseremail" class="form-label">Email Address</label>
  163. <input type="text" class="form-control" id="inp_newuseremail" name="email" aria-describedby="input1_help" placeholder="email address">
  164. </div>
  165. <div class="form-group md-3"> <label for="inp_newuserdept" class="form-label">Department</label>
  166. <input type="text" class="form-control" id="inp_newuserdept" name="department" aria-describedby="input1_help" placeholder="Enter some text" is="dmx-autocomplete" dmx-bind:data="conn_depts.data.query" optiontext="name+' '" optionvalue="id" optionsearch="name+' '" required="">
  167. </div>
  168. <button id="btn_addnewuser" class="btn btn-primary" type="submit">Submit</button>
  169. </form>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. <div class="container mt-4">
  175. <div class="row">
  176. <div class="col">
  177. <div class="form-group mb-3 row">
  178. <label for="inp_search" class="col-sm-2 col-form-label">Search</label>
  179. <div class="col-sm-8">
  180. <input type="text" class="form-control" id="inp_search" name="search" aria-describedby="input1_help" placeholder="Enter Keyword">
  181. </div>
  182. </div>
  183. </div>
  184. </div>
  185. <div class="row">
  186. <div class="col">
  187. <button id="btn_newuser" class="btn btn-secondary mt-3 mb-3 ms-1 me-1" dmx-on:click="modal_newuser.show()">New User</button>
  188. </div>
  189. </div>
  190. <div class="row">
  191. <div class="col">
  192. <div class="table-responsive">
  193. <table class="table table-striped table-bordered table-hover table-sm">
  194. <thead>
  195. <tr>
  196. <th scope="row"></th>
  197. <th scope="row"></th>
  198. <th scope="row"></th>
  199. <th>User ID</th>
  200. <th>First Name</th>
  201. <th>Last Name</th>
  202. <th>Email</th>
  203. <th>Validated</th>
  204. <th scope="row">Dept</th>
  205. <th scope="row">Roles</th>
  206. </tr>
  207. </thead>
  208. <tbody is="dmx-repeat" dmx-generator="bs5table" dmx-bind:repeat="conn_users.data.query" id="tableRepeat1" key="id">
  209. <tr>
  210. <td>
  211. <button id="btn_edituser" class="btn btn-success w-100" dmx-bind:value="id" dmx-on:click="conn_singleuser.load({id: id});modal1.show();conn_userroles.load({id: id})">
  212. <i class="fas fa-edit"></i></button>
  213. </td>
  214. <td>
  215. <button id="btn_deleteuser" class="btn btn-danger w-100" dmx-on:click="var_deleteuser.setValue(id)">
  216. <i class="fas fa-trash-alt"></i></button>
  217. </td>
  218. <td>
  219. <button id="btn_userpermissions" class="btn w-100 btn-warning" dmx-on:click="modal_permissiosn.show();conn_userroles.load({id: id},true);conn_userdepts.load({userid: id});modal_permissiosn.frm_dept.inp_deptuserid.setValue(id);modal_permissiosn.frm_role.inp_roleuserid.setValue(id)">
  220. <i class="fas fa-user-tag"></i></button>
  221. </td>
  222. <td dmx-text="id"></td>
  223. <td dmx-text="firstname"></td>
  224. <td dmx-text="lastname"></td>
  225. <td dmx-text="email"></td>
  226. <td dmx-text="validated">
  227. </td>
  228. <td>
  229. <ul class="list-group">
  230. <li class="list-group-item" id="rpt_departments">
  231. <div id="repeat1" is="dmx-repeat"></div>List item
  232. </li>
  233. </ul>
  234. </td>
  235. <td></td>
  236. </tr>
  237. </tbody>
  238. </table>
  239. </div>
  240. </div>
  241. </div>
  242. </div>