peopleBody.jade 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. template(name="people")
  2. .setting-content
  3. unless currentUser.isAdmin
  4. | {{_ 'error-notAuthorized'}}
  5. else
  6. .content-title.ext-box
  7. .ext-box-left
  8. if loading.get
  9. +spinner
  10. else if orgSetting.get
  11. span
  12. i.fa.fa-sitemap
  13. unless isMiniScreen
  14. | {{_ 'organizations'}}
  15. input#searchOrgInput(placeholder="{{_ 'search'}}")
  16. button#searchOrgButton
  17. i.fa.fa-search
  18. | {{_ 'search'}}
  19. .ext-box-right
  20. span {{#unless isMiniScreen}}{{_ 'org-number'}}{{/unless}} #{orgNumber}
  21. else if teamSetting.get
  22. span
  23. i.fa.fa-users
  24. unless isMiniScreen
  25. | {{_ 'teams'}}
  26. input#searchTeamInput(placeholder="{{_ 'search'}}")
  27. button#searchTeamButton
  28. i.fa.fa-search
  29. | {{_ 'search'}}
  30. .ext-box-right
  31. span {{#unless isMiniScreen}}{{_ 'team-number'}}{{/unless}} #{teamNumber}
  32. else if peopleSetting.get
  33. span
  34. i.fa.fa-user
  35. unless isMiniScreen
  36. | {{_ 'people'}}
  37. input#searchInput(placeholder="{{_ 'search'}}")
  38. button#searchButton
  39. i.fa.fa-search
  40. | {{_ 'search'}}
  41. .ext-box-right
  42. span {{#unless isMiniScreen}}{{_ 'people-number'}}{{/unless}} #{peopleNumber}
  43. .divAddOrRemoveTeam#divAddOrRemoveTeam
  44. button#addOrRemoveTeam
  45. i.fa.fa-edit
  46. | {{_ 'add'}} / {{_ 'delete'}} {{_ 'teams'}}
  47. .content-body
  48. .side-menu
  49. ul
  50. li.active
  51. a.js-org-menu(data-id="org-setting")
  52. i.fa.fa-sitemap
  53. | {{_ 'organizations'}}
  54. li
  55. a.js-team-menu(data-id="team-setting")
  56. i.fa.fa-users
  57. | {{_ 'teams'}}
  58. li
  59. a.js-people-menu(data-id="people-setting")
  60. i.fa.fa-user
  61. | {{_ 'people'}}
  62. .main-body
  63. if loading.get
  64. +spinner
  65. else if orgSetting.get
  66. +orgGeneral
  67. else if teamSetting.get
  68. +teamGeneral
  69. else if peopleSetting.get
  70. +peopleGeneral
  71. template(name="orgGeneral")
  72. table
  73. tbody
  74. tr
  75. th {{_ 'displayName'}}
  76. th {{_ 'description'}}
  77. th {{_ 'shortName'}}
  78. th {{_ 'website'}}
  79. th {{_ 'createdAt'}}
  80. th {{_ 'active'}}
  81. th
  82. +newOrgRow
  83. each org in orgList
  84. +orgRow(orgId=org._id)
  85. template(name="teamGeneral")
  86. table
  87. tbody
  88. tr
  89. th {{_ 'displayName'}}
  90. th {{_ 'description'}}
  91. th {{_ 'shortName'}}
  92. th {{_ 'website'}}
  93. th {{_ 'createdAt'}}
  94. th {{_ 'active'}}
  95. th
  96. +newTeamRow
  97. each team in teamList
  98. +teamRow(teamId=team._id)
  99. template(name="peopleGeneral")
  100. #divAddOrRemoveTeamContainer
  101. +modifyTeamsUsers
  102. table
  103. tbody
  104. tr
  105. th
  106. th {{_ 'username'}}
  107. th {{_ 'fullname'}}
  108. th {{_ 'initials'}}
  109. th {{_ 'admin'}}
  110. th {{_ 'email'}}
  111. th {{_ 'verified'}}
  112. th {{_ 'createdAt'}}
  113. th {{_ 'active'}}
  114. th {{_ 'authentication-method'}}
  115. th {{_ 'import-usernames'}}
  116. th {{_ 'organizations'}}
  117. th {{_ 'teams'}}
  118. th
  119. +newUserRow
  120. each user in peopleList
  121. +peopleRow(userId=user._id)
  122. template(name="newOrgRow")
  123. a.new-org
  124. i.fa.fa-plus-square
  125. | {{_ 'new'}}
  126. template(name="newTeamRow")
  127. a.new-team
  128. i.fa.fa-plus-square
  129. | {{_ 'new'}}
  130. template(name="newUserRow")
  131. a.new-user
  132. i.fa.fa-plus-square
  133. | {{_ 'new'}}
  134. template(name="orgRow")
  135. tr
  136. if orgData.orgIsActive
  137. td <s>{{ orgData.orgDisplayName }}</s>
  138. else
  139. td {{ orgData.orgDisplayName }}
  140. if orgData.orgIsActive
  141. td <s>{{ orgData.orgDesc }}</s>
  142. else
  143. td {{ orgData.orgDesc }}
  144. if orgData.orgIsActive
  145. td <s>{{ orgData.orgShortName }}</s>
  146. else
  147. td {{ orgData.orgShortName }}
  148. if orgData.orgIsActive
  149. td <s>{{ orgData.orgWebsite }}</s>
  150. else
  151. td {{ orgData.orgWebsite }}
  152. if orgData.orgIsActive
  153. td <s>{{ moment orgData.createdAt 'LLL' }}</s>
  154. else
  155. td {{ moment orgData.createdAt 'LLL' }}
  156. td
  157. if orgData.orgIsActive
  158. | {{_ 'no'}}
  159. else
  160. | {{_ 'yes'}}
  161. td
  162. a.edit-org
  163. i.fa.fa-edit
  164. | {{_ 'edit'}}
  165. a.more-settings-org
  166. i.fa.fa-ellipsis-h
  167. template(name="teamRow")
  168. tr
  169. if teamData.teamIsActive
  170. td <s>{{ teamData.teamDisplayName }}</s>
  171. else
  172. td {{ teamData.teamDisplayName }}
  173. if teamData.teamIsActive
  174. td <s>{{ teamData.teamDesc }}</s>
  175. else
  176. td {{ teamData.teamDesc }}
  177. if teamData.teamIsActive
  178. td <s>{{ teamData.teamShortName }}</s>
  179. else
  180. td {{ teamData.teamShortName }}
  181. if teamData.teamIsActive
  182. td <s>{{ teamData.teamWebsite }}</s>
  183. else
  184. td {{ teamData.teamWebsite }}
  185. if teamData.teamIsActive
  186. td <s>{{ moment teamData.createdAt 'LLL' }}</s>
  187. else
  188. td {{ moment teamData.createdAt 'LLL' }}
  189. td
  190. if teamData.teamIsActive
  191. | {{_ 'no'}}
  192. else
  193. | {{_ 'yes'}}
  194. td
  195. a.edit-team
  196. i.fa.fa-edit
  197. | {{_ 'edit'}}
  198. a.more-settings-team
  199. i.fa.fa-ellipsis-h
  200. template(name="peopleRow")
  201. tr
  202. if userData.loginDisabled
  203. td
  204. input.selectUserChkBox(type="checkbox", disabled="disabled", id="{{userData._id}}")
  205. else
  206. td
  207. input.selectUserChkBox(type="checkbox", id="{{userData._id}}")
  208. if userData.loginDisabled
  209. td.username <s>{{ userData.username }}</s>
  210. else
  211. td.username {{ userData.username }}
  212. if userData.loginDisabled
  213. td <s>{{ userData.profile.fullname }}</s>
  214. else
  215. td {{ userData.profile.fullname }}
  216. if userData.loginDisabled
  217. td <s>{{ userData.profile.initials }}</s>
  218. else
  219. td {{ userData.profile.initials }}
  220. if userData.loginDisabled
  221. td
  222. if userData.isAdmin
  223. | <s>{{_ 'yes'}}</s>
  224. else
  225. | <s>{{_ 'no'}}</s>
  226. else
  227. td
  228. if userData.isAdmin
  229. | {{_ 'yes'}}
  230. else
  231. | {{_ 'no'}}
  232. if userData.loginDisabled
  233. td <s>{{ userData.emails.[0].address }}</s>
  234. else
  235. td {{ userData.emails.[0].address }}
  236. if userData.loginDisabled
  237. td
  238. if userData.emails.[0].verified
  239. | <s>{{_ 'yes'}}</s>
  240. else
  241. | <s>{{_ 'no'}}</s>
  242. else
  243. td
  244. if userData.emails.[0].verified
  245. | {{_ 'yes'}}
  246. else
  247. | {{_ 'no'}}
  248. if userData.loginDisabled
  249. td <s>{{ moment userData.createdAt 'LLL' }}</s>
  250. else
  251. td {{ moment userData.createdAt 'LLL' }}
  252. td
  253. if userData.loginDisabled
  254. | {{_ 'no'}}
  255. else
  256. | {{_ 'yes'}}
  257. if userData.loginDisabled
  258. td <s>{{_ userData.authenticationMethod }}</s>
  259. else
  260. td {{_ userData.authenticationMethod }}
  261. if userData.loginDisabled
  262. td <s>{{ userData.importUsernamesString }}</s>
  263. else
  264. td {{ userData.importUsernamesString }}
  265. if userData.loginDisabled
  266. td <s>{{ userData.orgsUserBelongs }}</s>
  267. else
  268. td {{ userData.orgsUserBelongs }}
  269. if userData.loginDisabled
  270. td <s>{{ userData.teamsUserBelongs }}</s>
  271. else
  272. td {{ userData.teamsUserBelongs }}
  273. td
  274. a.edit-user
  275. i.fa.fa-edit
  276. | {{_ 'edit'}}
  277. a.more-settings-user
  278. i.fa.fa-ellipsis-h
  279. template(name="editOrgPopup")
  280. form
  281. label.hide.orgId(type="text" value=org._id)
  282. label
  283. | {{_ 'displayName'}}
  284. input.js-orgDisplayName(type="text" value=org.orgDisplayName required)
  285. span.error.hide.orgname-taken
  286. | {{_ 'error-orgname-taken'}}
  287. label
  288. | {{_ 'description'}}
  289. input.js-orgDesc(type="text" value=org.orgDesc required)
  290. label
  291. | {{_ 'shortName'}}
  292. input.js-orgShortName(type="text" value=org.orgShortName required)
  293. label
  294. | {{_ 'website'}}
  295. input.js-orgWebsite(type="text" value=org.orgWebsite required)
  296. label
  297. | {{_ 'active'}}
  298. select.select-active.js-org-isactive
  299. option(value="false") {{_ 'yes'}}
  300. option(value="true" selected="{{org.orgIsActive}}") {{_ 'no'}}
  301. hr
  302. div.buttonsContainer
  303. input.primary.wide(type="submit" value="{{_ 'save'}}")
  304. template(name="editTeamPopup")
  305. form
  306. label.hide.teamId(type="text" value=team._id)
  307. label
  308. | {{_ 'displayName'}}
  309. input.js-teamDisplayName(type="text" value=team.teamDisplayName required)
  310. span.error.hide.teamname-taken
  311. | {{_ 'error-teamname-taken'}}
  312. label
  313. | {{_ 'description'}}
  314. input.js-teamDesc(type="text" value=team.teamDesc required)
  315. label
  316. | {{_ 'shortName'}}
  317. input.js-teamShortName(type="text" value=team.teamShortName required)
  318. label
  319. | {{_ 'website'}}
  320. input.js-teamWebsite(type="text" value=team.teamWebsite required)
  321. label
  322. | {{_ 'active'}}
  323. select.select-active.js-team-isactive
  324. option(value="false") {{_ 'yes'}}
  325. option(value="true" selected="{{team.teamIsActive}}") {{_ 'no'}}
  326. hr
  327. div.buttonsContainer
  328. input.primary.wide(type="submit" value="{{_ 'save'}}")
  329. template(name="editUserPopup")
  330. form
  331. label.hide.userId(type="text" value=user._id)
  332. label
  333. | {{_ 'username'}}
  334. span.error.hide.username-taken
  335. | {{_ 'error-username-taken'}}
  336. if isLdap
  337. input.js-profile-username(type="text" value=user.username readonly)
  338. else
  339. input.js-profile-username(type="text" value=user.username required)
  340. label
  341. | {{_ 'fullname'}}
  342. input.js-profile-fullname(type="text" value=user.profile.fullname required)
  343. label
  344. | {{_ 'initials'}}
  345. input.js-profile-initials(type="text" value=user.profile.initials)
  346. label
  347. | {{_ 'admin'}}
  348. select.select-role.js-profile-isadmin
  349. option(value="false") {{_ 'no'}}
  350. option(value="true" selected="{{user.isAdmin}}") {{_ 'yes'}}
  351. label
  352. | {{_ 'email'}}
  353. span.error.hide.email-taken
  354. | {{_ 'error-email-taken'}}
  355. if isLdap
  356. input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
  357. else
  358. input.js-profile-email(type="email" value="{{user.emails.[0].address}}" required)
  359. label
  360. | {{_ 'import-usernames'}}
  361. input.js-import-usernames(type="text" value=user.importUsernames)
  362. label
  363. | {{_ 'verified'}}
  364. select.select-verified.js-profile-email-verified
  365. option(value="false") {{_ 'no'}}
  366. option(value="true" selected="{{userData.emails.[0].verified}}") {{_ 'yes'}}
  367. label
  368. | {{_ 'active'}}
  369. select.select-active.js-profile-isactive
  370. option(value="false") {{_ 'yes'}}
  371. option(value="true" selected="{{user.loginDisabled}}") {{_ 'no'}}
  372. label
  373. | {{_ 'authentication-type'}}
  374. select.select-authenticationMethod.js-authenticationMethod
  375. each authentications
  376. if isSelected value
  377. option(value="{{value}}" selected) {{_ value}}
  378. else
  379. option(value="{{value}}") {{_ value}}
  380. label
  381. | {{_ 'organizations'}}
  382. i.fa.fa-plus-square#addUserOrg
  383. i.fa.fa-minus-square#removeUserOrg
  384. select.js-orgs#jsOrgs
  385. option(value="-1") {{_ 'organizations'}} :
  386. each value in orgsDatas
  387. option(value="{{value._id}}") {{_ value.orgDisplayName}}
  388. input#jsUserOrgsInPut.js-userOrgs(type="text" value=user.orgsUserBelongs, disabled)
  389. input#jsUserOrgIdsInPut.js-userOrgIds.hide(type="text" value=user.orgIdsUserBelongs)
  390. label
  391. | {{_ 'teams'}}
  392. i.fa.fa-plus-square#addUserTeam
  393. i.fa.fa-minus-square#removeUserTeam
  394. select.js-teams#jsTeams
  395. option(value="-1") {{_ 'teams'}} :
  396. each value in teamsDatas
  397. option(value="{{value._id}}") {{_ value.teamDisplayName}}
  398. input#jsUserTeamsInPut.js-userteams(type="text" value=user.teamsUserBelongs, disabled)
  399. input#jsUserTeamIdsInPut.js-userteamIds.hide(type="text" value=user.teamIdsUserBelongs)
  400. hr
  401. label
  402. | {{_ 'password'}}
  403. input.js-profile-password(type="password")
  404. div.buttonsContainer
  405. input.primary.wide(type="submit" value="{{_ 'save'}}")
  406. template(name="newOrgPopup")
  407. form
  408. //label.hide.userId(type="text" value=user._id)
  409. label
  410. | {{_ 'displayName'}}
  411. input.js-orgDisplayName(type="text" value="" required)
  412. label
  413. | {{_ 'description'}}
  414. input.js-orgDesc(type="text" value="" required)
  415. label
  416. | {{_ 'shortName'}}
  417. input.js-orgShortName(type="text" value="" required)
  418. label
  419. | {{_ 'website'}}
  420. input.js-orgWebsite(type="text" value="" required)
  421. label
  422. | {{_ 'active'}}
  423. select.select-active.js-org-isactive
  424. option(value="false" selected="selected") {{_ 'yes'}}
  425. option(value="true") {{_ 'no'}}
  426. hr
  427. div.buttonsContainer
  428. input.primary.wide(type="submit" value="{{_ 'save'}}")
  429. template(name="newTeamPopup")
  430. form
  431. //label.hide.teamId(type="text" value=team._id)
  432. label
  433. | {{_ 'displayName'}}
  434. input.js-teamDisplayName(type="text" value="" required)
  435. label
  436. | {{_ 'description'}}
  437. input.js-teamDesc(type="text" value="" required)
  438. label
  439. | {{_ 'shortName'}}
  440. input.js-teamShortName(type="text" value="" required)
  441. label
  442. | {{_ 'website'}}
  443. input.js-teamWebsite(type="text" value="" required)
  444. label
  445. | {{_ 'active'}}
  446. select.select-active.js-team-isactive
  447. option(value="false" selected="selected") {{_ 'yes'}}
  448. option(value="true") {{_ 'no'}}
  449. hr
  450. div.buttonsContainer
  451. input.primary.wide(type="submit" value="{{_ 'save'}}")
  452. template(name="modifyTeamsUsers")
  453. label
  454. | {{_ 'teams'}}
  455. select.js-teamsUser#jsteamsUser
  456. each value in teamsDatas
  457. option(value="{{value._id}}") {{_ value.teamDisplayName}}
  458. hr
  459. label
  460. | {{_ 'r-action'}}
  461. .form-group.flex
  462. input.wekan-form-control#addAction(type="radio" name="action" value="true" checked="checked")
  463. span {{_ 'add'}}
  464. input.wekan-form-control#deleteAction(type="radio" name="action" value="false")
  465. span {{_ 'delete'}}
  466. div.buttonsContainer
  467. input.primary.wide#addTeamBtn(type="submit" value="{{_ 'save'}}")
  468. input.primary.wide#cancelBtn(type="submit" value="{{_ 'cancel'}}")
  469. template(name="newUserPopup")
  470. form
  471. //label.hide.userId(type="text" value=user._id)
  472. label
  473. | {{_ 'fullname'}}
  474. input.js-profile-fullname(type="text" value="" required)
  475. label
  476. | {{_ 'username'}}
  477. span.error.hide.username-taken
  478. | {{_ 'error-username-taken'}}
  479. //if isLdap
  480. // input.js-profile-username(type="text" value=user.username readonly)
  481. //else
  482. input.js-profile-username(type="text" value="" required)
  483. label
  484. | {{_ 'initials'}}
  485. input.js-profile-initials(type="text" value="")
  486. label
  487. | {{_ 'email'}}
  488. span.error.hide.email-taken
  489. | {{_ 'error-email-taken'}}
  490. //if isLdap
  491. // input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
  492. //else
  493. input.js-profile-email(type="email" value="" required)
  494. label
  495. | {{_ 'import-usernames'}}
  496. input.js-import-usernames(type="text" value="")
  497. label
  498. | {{_ 'admin'}}
  499. select.select-role.js-profile-isadmin
  500. option(value="false" selected="selected") {{_ 'no'}}
  501. option(value="true") {{_ 'yes'}}
  502. label
  503. | {{_ 'active'}}
  504. select.select-active.js-profile-isactive
  505. option(value="false" selected="selected") {{_ 'yes'}}
  506. option(value="true") {{_ 'no'}}
  507. label
  508. | {{_ 'authentication-type'}}
  509. select.select-authenticationMethod.js-authenticationMethod
  510. each authentications
  511. if isSelected value
  512. option(value="{{value}}" selected) {{_ value}}
  513. else
  514. option(value="{{value}}") {{_ value}}
  515. label
  516. | {{_ 'organizations'}}
  517. i.fa.fa-plus-square#addUserOrgNewUser
  518. i.fa.fa-minus-square#removeUserOrgNewUser
  519. select.js-orgsNewUser#jsOrgsNewUser
  520. option(value="-1") {{_ 'organizations'}} :
  521. each value in orgsDatas
  522. option(value="{{value._id}}") {{_ value.orgDisplayName}}
  523. input#jsUserOrgsInPutNewUser.js-userOrgsNewUser(type="text" value=user.orgsUserBelongs, disabled)
  524. input#jsUserOrgIdsInPutNewUser.js-userOrgIdsNewUser.hide(type="text" value=user.orgIdsUserBelongs)
  525. label
  526. | {{_ 'teams'}}
  527. i.fa.fa-plus-square#addUserTeamNewUser
  528. i.fa.fa-minus-square#removeUserTeamNewUser
  529. select.js-teamsNewUser#jsTeamsNewUser
  530. option(value="-1") {{_ 'teams'}} :
  531. each value in teamsDatas
  532. option(value="{{value._id}}") {{_ value.teamDisplayName}}
  533. input#jsUserTeamsInPutNewUser.js-userteamsNewUser(type="text" value=user.teamsUserBelongs, disabled)
  534. input#jsUserTeamIdsInPutNewUser.js-userteamIdsNewUser.hide(type="text" value=user.teamIdsUserBelongs)
  535. hr
  536. label
  537. | {{_ 'password'}}
  538. input.js-profile-password(type="password" required)
  539. div.buttonsContainer
  540. input.primary.wide(type="submit" value="{{_ 'save'}}")
  541. template(name="settingsOrgPopup")
  542. ul.pop-over-list
  543. li
  544. form
  545. label#deleteOrgWarningMessage.hide
  546. | {{_ 'delete-org-warning-message'}}
  547. br
  548. label
  549. | {{_ 'delete-org-confirm-popup'}}
  550. br
  551. label.hide.orgId(type="text" value=org._id)
  552. labeldelete-org-confirm-popup
  553. div.buttonsContainer
  554. input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
  555. // It's not yet possible to impersonate organization. Only impersonate user,
  556. // because that changes current user ID. What would it mean in practice
  557. // to impersonate organization?
  558. // li
  559. // a.impersonate-org
  560. // i.fa.fa-user
  561. // | {{_ 'impersonate-org'}}
  562. //
  563. //
  564. template(name="settingsTeamPopup")
  565. ul.pop-over-list
  566. li
  567. form
  568. label#deleteTeamWarningMessage.hide
  569. | {{_ 'delete-team-warning-message'}}
  570. br
  571. label
  572. | {{_ 'delete-team-confirm-popup'}}
  573. br
  574. label.hide.teamId(type="text" value=team._id)
  575. div.buttonsContainer
  576. input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
  577. template(name="settingsUserPopup")
  578. ul.pop-over-list
  579. li
  580. a.impersonate-user
  581. i.fa.fa-user
  582. | {{_ 'impersonate-user'}}
  583. br
  584. hr
  585. li
  586. form
  587. label.hide.userId(type="text" value=user._id)
  588. label
  589. | {{_ 'delete-user-confirm-popup' }}
  590. br
  591. div.buttonsContainer
  592. input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
  593. // Delete is enabled, but there is still bug of leaving empty user avatars
  594. // to boards: boards members, card members and assignees have
  595. // empty users. So it is better to remove user from all boards before removing user.
  596. // See:
  597. // - wekan/client/components/settings/peopleBody.jade deleteButton
  598. // - wekan/client/components/settings/peopleBody.js deleteButton
  599. // - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
  600. // that does now remove member from board, card members and assignees correctly,
  601. // but that should be used to remove user from all boards similarly
  602. // - wekan/models/users.js Delete is not enabled