managemembers.html.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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('roles', $roles);
  12. jsVar('projectID', $project->id);
  13. jsVar('copyProjectID', $copyProjectID);
  14. jsVar('oldAccountList', array_keys($currentMembers));
  15. jsVar('unlinkExecutionMembers', $lang->project->unlinkExecutionMembers);
  16. jsVar('executionMembers', array_values($executionMembers));
  17. jsVar('isInModal', isInModal());
  18. jsVar('noSprintProject', !$project->multiple);
  19. /* zin: Define the set::module('team') feature bar on main menu. */
  20. $copyTeamBox = '';
  21. if(count($teams2Import) > 1)
  22. {
  23. $copyTeamBox = div
  24. (
  25. setClass('select-team-box ml-4'),
  26. span
  27. (
  28. set::className('flex items-center team-title'),
  29. $lang->execution->copyTeam
  30. ),
  31. picker
  32. (
  33. set::name('project'),
  34. set::value($copyProjectID),
  35. set::items($teams2Import),
  36. set('data-placeholder', $lang->project->copyTeamTitle),
  37. set::width('200px'),
  38. on::change('choseTeam2Copy')
  39. )
  40. );
  41. }
  42. featureBar
  43. (
  44. set::current('all'),
  45. set::linkParams("projectID={$project->id}"),
  46. div
  47. (
  48. setClass('select-dept-box ml-4'),
  49. span
  50. (
  51. set::className('flex items-center dept-title'),
  52. $lang->execution->selectDept
  53. ),
  54. picker
  55. (
  56. set::id('dept'),
  57. setClass('ml-2'),
  58. set::name('dept'),
  59. set::value($dept),
  60. set::items($depts),
  61. set('data-placeholder', $lang->execution->selectDeptTitle),
  62. set::width('200px'),
  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(
  76. input
  77. (
  78. set::id("realnames{$i}"),
  79. set::name("realnames[$i]"),
  80. set::value($member->realname),
  81. set::readonly(true)
  82. ),
  83. input
  84. (
  85. set::id("account{$i}"),
  86. set::name("account[$i]"),
  87. set::value($member->account),
  88. set::type('hidden')
  89. )
  90. ) : h::td(
  91. picker
  92. (
  93. set::id("account{$i}"),
  94. set::name("account[$i]"),
  95. set::value($member->account),
  96. set::items(array_values($userItems)),
  97. set::maxItemsCount($config->maxCount),
  98. set('onchange', "setRole(event, '{$i}')")
  99. )
  100. ),
  101. h::td
  102. (
  103. input
  104. (
  105. set::id("role{$i}"),
  106. set::name("role[$i]"),
  107. set::value($member->role)
  108. )
  109. ),
  110. h::td
  111. (
  112. input
  113. (
  114. set::id("days{$i}"),
  115. set::name("days[$i]"),
  116. set::value($member->days)
  117. )
  118. ),
  119. h::td
  120. (
  121. input
  122. (
  123. set::id("hours{$i}"),
  124. set::name("hours[$i]"),
  125. set::value($member->hours)
  126. )
  127. ),
  128. h::td
  129. (
  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'))) $userItems[$member->account]['disabled'] = true;
  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(array_values($userItems)),
  167. set::maxItemsCount($config->maxCount),
  168. set('onchange', "setRole(event, '{$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. input
  182. (
  183. set::id("days{$i}"),
  184. set::name("days[$i]"),
  185. set::value($project->days)
  186. )
  187. ),
  188. h::td
  189. (
  190. input
  191. (
  192. set::id("hours{$i}"),
  193. set::name("hours[$i]"),
  194. set::value($config->execution->defaultWorkhours)
  195. )
  196. ),
  197. h::td
  198. (
  199. radioList
  200. (
  201. set::id("limited{$i}"),
  202. set::name("limited[$i]"),
  203. set::items($lang->team->limitedList),
  204. set::value('no'),
  205. set::inline(true)
  206. )
  207. ),
  208. h::td
  209. (
  210. set::className('actions-list'),
  211. btnGroup
  212. (
  213. set::items(array(
  214. array('class' => 'btn btn-link text-gray', 'icon' => 'plus', 'onclick' => 'addItem(this)'),
  215. array('class' => 'btn btn-link text-gray', 'icon' => 'trash', 'onclick' => 'deleteItem(this)')
  216. ))
  217. )
  218. )
  219. )
  220. );
  221. div
  222. (
  223. setClass('main-content'),
  224. form(setClass('main-form'), set::id('teamForm'), commonModel::isTutorialMode() ? null : set::ajax(array('beforeSubmit' => jsRaw("changeProjectMembers"))), h::table
  225. (
  226. set::className('table table-form'),
  227. h::thead
  228. (
  229. h::tr
  230. (
  231. h::th
  232. (
  233. $lang->team->account,
  234. set::width('240px')
  235. ),
  236. h::th
  237. (
  238. $lang->team->role,
  239. set::width('240px')
  240. ),
  241. h::th
  242. (
  243. $lang->team->days,
  244. set::width('76px')
  245. ),
  246. h::th
  247. (
  248. $lang->team->hours,
  249. set::width('136px')
  250. ),
  251. h::th
  252. (
  253. $lang->team->limited,
  254. set::width('96px')
  255. ),
  256. h::th
  257. (
  258. $lang->actions,
  259. set::width('48px')
  260. )
  261. )
  262. ),
  263. h::tbody
  264. (
  265. $memberTR,
  266. input
  267. (
  268. set::type('hidden'),
  269. set::name('removeExecution'),
  270. set::value('no')
  271. )
  272. )
  273. ))
  274. );
  275. /* ====== Render page ====== */
  276. render();