managemembers.html.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. /**
  3. * The manageMembers view file of project module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Shujie Tian<tianshujie@easycorp.ltd>
  7. * @package project
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. jsVar('users', $users);
  12. jsVar('roles', $roles);
  13. jsVar('projectID', $project->id);
  14. jsVar('copyProjectID', $copyProjectID);
  15. jsVar('oldAccountList', array_keys($currentMembers));
  16. jsVar('unlinkExecutionMembers', $lang->project->unlinkExecutionMembers);
  17. jsVar('executionMembers', $executionMembers);
  18. jsVar('isInModal', isInModal());
  19. jsVar('noSprintProject', !$project->multiple);
  20. /* zin: Define the set::module('team') feature bar on main menu. */
  21. $copyTeamBox = '';
  22. if(count($teams2Import) > 1)
  23. {
  24. $copyTeamBox = div
  25. (
  26. setClass('select-team-box ml-4'),
  27. span
  28. (
  29. set::className('flex items-center team-title'),
  30. $lang->execution->copyTeam
  31. ),
  32. picker
  33. (
  34. set::name('project'),
  35. set::value($copyProjectID),
  36. set::items($teams2Import),
  37. set('data-placeholder', $lang->project->copyTeamTitle),
  38. set::width('200px'),
  39. on::change('choseTeam2Copy')
  40. )
  41. );
  42. }
  43. featureBar
  44. (
  45. set::current('all'),
  46. set::linkParams("projectID={$project->id}"),
  47. div
  48. (
  49. setClass('select-dept-box ml-4'),
  50. span
  51. (
  52. set::className('flex items-center dept-title'),
  53. $lang->execution->selectDept
  54. ),
  55. picker
  56. (
  57. set::id('dept'),
  58. set::name('dept'),
  59. set::value($dept),
  60. set::items($depts),
  61. set::width('200px'),
  62. set('data-placeholder', $lang->execution->selectDeptTitle),
  63. on::change('setDeptUsers')
  64. ),
  65. $copyTeamBox
  66. )
  67. );
  68. $memberTR = array();
  69. $i = 0;
  70. foreach($teamMembers as $member)
  71. {
  72. if($member->memberType == 'dept' && !isset($users[$member->account])) continue;
  73. $memberTR[] = h::tr
  74. (
  75. $member->memberType == 'default' ? h::td(input
  76. (
  77. set::id("realnames{$i}"),
  78. set::name("realnames[$i]"),
  79. set::value($member->realname),
  80. set::readonly(true)
  81. ), input
  82. (
  83. set::id("account{$i}"),
  84. set::name("account[$i]"),
  85. set::value($member->account),
  86. set::type('hidden')
  87. )) : h::td(
  88. picker
  89. (
  90. set::id("account{$i}"),
  91. set::name("account[$i]"),
  92. set::value($member->account),
  93. set::items($users),
  94. set('data-max-list-count', $config->maxCount),
  95. set('onchange', "setRole(event, '{$i}')")
  96. )
  97. ),
  98. h::td
  99. (
  100. input
  101. (
  102. set::id("role{$i}"),
  103. set::name("role[$i]"),
  104. set::value($member->role)
  105. )
  106. ),
  107. h::td
  108. (
  109. setClass('hidden'),
  110. input
  111. (
  112. set::id("days{$i}"),
  113. set::name("days[$i]"),
  114. set::value($member->days)
  115. )
  116. ),
  117. h::td
  118. (
  119. setClass('hidden'),
  120. input
  121. (
  122. set::id("hours{$i}"),
  123. set::name("hours[$i]"),
  124. set::value($member->hours)
  125. )
  126. ),
  127. h::td
  128. (
  129. setClass('hidden'),
  130. radioList
  131. (
  132. set::id("limited{$i}"),
  133. set::name("limited[$i]"),
  134. set::items($lang->team->limitedList),
  135. set::value($member->limited),
  136. set::inline(true)
  137. )
  138. ),
  139. h::td
  140. (
  141. set::className('actions-list'),
  142. btnGroup
  143. (
  144. set::items(array(
  145. array('class' => 'btn btn-link text-gray', 'icon' => 'plus', 'onclick' => 'addItem(this)'),
  146. array('class' => 'btn btn-link text-gray', 'icon' => 'trash', 'onclick' => 'deleteItem(this)')
  147. ))
  148. )
  149. )
  150. );
  151. if(in_array($member->memberType, array('default', 'dept'))) unset($users[$member->account]);
  152. $i ++;
  153. }
  154. jsVar('+itemIndex', $i);
  155. $i = '_i';
  156. h::table
  157. (
  158. set::className('hidden'),
  159. set::id('addItem'),
  160. h::tr(
  161. h::td(
  162. picker
  163. (
  164. set::id("account{$i}"),
  165. set::name("account[$i]"),
  166. set::items($users),
  167. set('data-max-list-count', $config->maxCount),
  168. set('onchange', "setRole(this.value, '{$i}')")
  169. )
  170. ),
  171. h::td
  172. (
  173. input
  174. (
  175. set::id("role{$i}"),
  176. set::name("role[$i]")
  177. )
  178. ),
  179. h::td
  180. (
  181. setClass('hidden'),
  182. input
  183. (
  184. set::id("days{$i}"),
  185. set::name("days[$i]"),
  186. set::value($project->days)
  187. )
  188. ),
  189. h::td
  190. (
  191. setClass('hidden'),
  192. input
  193. (
  194. set::id("hours{$i}"),
  195. set::name("hours[$i]"),
  196. set::value($config->execution->defaultWorkhours)
  197. )
  198. ),
  199. h::td
  200. (
  201. setClass('hidden'),
  202. radioList
  203. (
  204. set::id("limited{$i}"),
  205. set::name("limited[$i]"),
  206. set::items($lang->team->limitedList),
  207. set::value('no'),
  208. set::inline(true)
  209. )
  210. ),
  211. h::td
  212. (
  213. set::className('actions-list'),
  214. btnGroup
  215. (
  216. set::items(array(
  217. array('class' => 'btn btn-link text-gray', 'icon' => 'plus', 'onclick' => 'addItem(this)'),
  218. array('class' => 'btn btn-link text-gray', 'icon' => 'trash', 'onclick' => 'deleteItem(this)')
  219. ))
  220. )
  221. )
  222. )
  223. );
  224. div
  225. (
  226. setClass('main-content'),
  227. form
  228. (
  229. setClass('main-form'),
  230. set::id('teamForm'),
  231. h::table
  232. (
  233. set::className('table table-form'),
  234. h::thead
  235. (
  236. h::tr
  237. (
  238. h::th($lang->team->account),
  239. h::th($lang->team->role),
  240. h::th
  241. (
  242. setClass('hidden'),
  243. $lang->team->days,
  244. set::width('76px')
  245. ),
  246. h::th
  247. (
  248. setClass('hidden'),
  249. $lang->team->hours,
  250. set::width('136px')
  251. ),
  252. h::th
  253. (
  254. setClass('hidden'),
  255. $lang->team->limited,
  256. set::width('96px')
  257. ),
  258. h::th
  259. (
  260. $lang->actions,
  261. set::width('48px')
  262. )
  263. )
  264. ),
  265. h::tbody
  266. (
  267. $memberTR,
  268. input
  269. (
  270. set::type('hidden'),
  271. set::name('removeExecution'),
  272. set::value('no')
  273. )
  274. )
  275. ),
  276. set::actions(array(
  277. array(
  278. 'text' => $lang->save,
  279. 'type' => 'primary',
  280. 'btnType' => 'button',
  281. 'onclick' => 'changeProjectMembers()'
  282. ),
  283. 'cancel'
  284. ))
  285. )
  286. );
  287. /* ====== Render page ====== */
  288. render();