peopleBody.jade 22 KB

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