operate.html.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. /**
  3. * The operate view file of flow module of ZDOO.
  4. *
  5. * @copyright Copyright 2009-2016 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @license 商业软件,非开源软件
  7. * @author Gang Liu <liugang@cnezsoft.com>
  8. * @package flow
  9. * @version $Id$
  10. * @link http://www.zdoo.com
  11. */
  12. ?>
  13. <?php
  14. include 'header.html.php';
  15. include '../../common/view/picker.html.php';
  16. $isModal = $action->open == 'modal';
  17. $colspan = $isModal ? '' : "colspan='2'";
  18. $editorModule = $action->action == 'edit' ? 'edit' : 'operate';
  19. if(!empty($this->config->flow->editor->$editorModule)) include $app->getModuleRoot() . 'common/view/kindeditor.html.php';
  20. js::set('moduleName', $flow->module);
  21. js::set('action', $action->action);
  22. ?>
  23. <?php if(!$isModal):?>
  24. <div class='panel'>
  25. <div class='panel-heading'>
  26. <strong><?php echo str_replace('-', '', $title);?></strong>
  27. </div>
  28. <div class='panel-body'>
  29. <?php else:?>
  30. <div id='mainContent' class='main-content'>
  31. <div class='main-header'>
  32. <h2><?php echo $title;?></h2>
  33. </div>
  34. <?php endif;?>
  35. <form id='operateForm' method='post' enctype='multipart/form-data' action='<?php echo $actionURL;?>'>
  36. <table class='table table-form'>
  37. <?php if(!empty($config->openedApproval) && $flow->approval == 'enabled' && $action->action == 'approvalsubmit'):?>
  38. <tr>
  39. <th class='w-100px'><?php echo $lang->{$flow->module}->reviewers;?></th>
  40. <td id='reviewerBox'></td>
  41. </tr>
  42. <?php endif;?>
  43. <?php $hasChildFields = false;?>
  44. <?php $childKey = 1;?>
  45. <?php foreach($fields as $field):?>
  46. <?php if(!$field->show) continue;?>
  47. <?php $readonly = $field->readonly;?>
  48. <?php $width = ($field->width && $field->width != 'auto' ? $field->width . 'px' : 'auto');?>
  49. <?php $value = ($field->defaultValue or $field->defaultValue === 0) ? $field->defaultValue : zget($data, $field->field, '');?>
  50. <?php /* Print files. */ ?>
  51. <?php if($field->control == 'file'):?>
  52. <tr class='field-row'>
  53. <th class='w-100px'><?php echo $field->name;?></th>
  54. <td>
  55. <?php $fileField = "files{$field->field}";?>
  56. <?php $labelsName = "labels{$field->field}";?>
  57. <?php if($readonly) echo $this->fetch('file', 'printFiles', array('files' => $data->$fileField, 'fieldset' => 'false'));?>
  58. <?php if(!$readonly) echo $this->fetch('file', 'buildOldForm', "fileCount=1&percent=0.9&filesName={$fileField}&labelsName={$labelsName}");?>
  59. </td>
  60. <?php if(!$isModal):?>
  61. <td></td>
  62. <?php endif;?>
  63. </tr>
  64. <?php /* Print mailto. */ ?>
  65. <?php elseif($field->field == 'mailto'):?>
  66. <?php if($field->buildin) $users = $this->loadModel('user')->getDeptPairs('pofirst|nodeleted|noclosed');?>
  67. <?php if($field->buildin) $users = $this->loadModel('user')->getDeptPairs('pofirst|nodeleted|noclosed');?>
  68. <tr class='field-row'>
  69. <th class='w-100px'><?php echo $field->name;?></th>
  70. <td>
  71. <div class='input-group'>
  72. <?php echo html::select('mailto[]', $users, $value, "class='form-control chosen' data-placeholder='{$lang->chooseUserToMail}' multiple");?>
  73. <?php echo $this->fetch('my', 'buildContactLists');?>
  74. </div>
  75. </td>
  76. <?php if(!$isModal):?>
  77. <td class='text-important'><?php echo $lang->flow->tips->notice;?></td>
  78. <?php endif;?>
  79. </tr>
  80. <?php /* Print sub tables. */ ?>
  81. <?php elseif(isset($childFields[$field->field])):?>
  82. <?php $hasChildFields = true;?>
  83. <?php $childModule = $field->field;?>
  84. <tr class='field-row'>
  85. <th><?php echo $field->name;?></th>
  86. <td <?php echo $colspan;?> class='child'>
  87. <table class='table table-form table-child' data-child='<?php echo $field->field;?>' id='<?php echo $field->field;?>' style='width: <?php echo $width;?>'>
  88. <?php $datas = isset($childDatas[$field->field]) ? $childDatas[$field->field] : array();?>
  89. <?php foreach($datas as $childData):?>
  90. <tr>
  91. <?php foreach($childFields[$field->field] as $childField):?>
  92. <?php if(!$childField->show) continue;?>
  93. <?php if($childField->control == 'file') continue;?>
  94. <?php $childWidth = ($childField->width && $childField->width != 'auto' ? $childField->width . 'px' : 'auto');?>
  95. <?php $childValue = ($childField->defaultValue or $childField->defaultValue === 0) ? $childField->defaultValue : zget($childData, $childField->field, '');?>
  96. <td style='width: <?php echo $childWidth;?>'>
  97. <?php
  98. if($readonly or $childField->readonly)
  99. {
  100. if($childField->control == 'multi-select' or $childField->control == 'checkbox')
  101. {
  102. $childValues = explode(',', $childValue);
  103. foreach($childValues as $childV)
  104. {
  105. if(in_array($childV, $this->config->flow->variables)) $childV = $this->loadModel('workflowhook')->getParamRealValue($childV);
  106. echo zget($field->options, $childV, '') . ' ';
  107. }
  108. }
  109. else
  110. {
  111. echo zget($childField->options, $childValue);
  112. }
  113. echo html::hidden("children[$childModule][$childField->field][$childKey]", $childValue);
  114. }
  115. else
  116. {
  117. $element = "children[$childModule][$childField->field][$childKey]";
  118. echo $this->flow->buildControl($childField, $childValue, $element, $field->field);
  119. }
  120. ?>
  121. </td>
  122. <?php endforeach;?>
  123. <?php if(!$readonly):?>
  124. <td class='w-100px'>
  125. <?php echo html::hidden("children[$childModule][id][$childKey]", $childData->id);?>
  126. <a href='javascript:;' class='btn btn-default addItem'><i class='icon-plus'></i></a>
  127. <a href='javascript:;' class='btn btn-default delItem'><i class='icon-close'></i></a>
  128. </td>
  129. <?php endif;?>
  130. </tr>
  131. <?php $childKey++;?>
  132. <?php endforeach;?>
  133. <?php /* Add a empty row of sub table. */ ?>
  134. <?php if(!$readonly && empty($datas)):?>
  135. <tr class='field-row'>
  136. <?php foreach($childFields[$field->field] as $childField):?>
  137. <?php if(!$childField->show) continue;?>
  138. <?php if($childField->control == 'file') continue;?>
  139. <?php $childWidth = ($childField->width && $childField->width != 'auto' ? $childField->width . 'px' : 'auto');?>
  140. <td style='width: <?php echo $childWidth;?>'>
  141. <?php $element = "children[$childModule][$childField->field][$childKey]";?>
  142. <?php echo $this->flow->buildControl($childField, $childField->defaultValue, $element, $childModule);?>
  143. </td>
  144. <?php endforeach;?>
  145. <td class='w-100px'>
  146. <?php echo html::hidden("children[$childModule][id][$childKey]");?>
  147. <a href='javascript:;' class='btn btn-default addItem'><i class='icon-plus'></i></a>
  148. <a href='javascript:;' class='btn btn-default delItem'><i class='icon-close'></i></a>
  149. </td>
  150. </tr>
  151. <?php $childKey++;?>
  152. <?php endif;?>
  153. </table>
  154. </td>
  155. </tr>
  156. <?php /* Print other fields. */ ?>
  157. <?php else:?>
  158. <?php
  159. $attr = 'class="field-row"';
  160. $relation = zget($relations, $field->field, '');
  161. if($relation && strpos(",$relation->actions,", ',many2one,') === false)
  162. {
  163. $prevDataID = isset($data->{$field->field}) ? $data->{$field->field} : 0;
  164. $attr = "class='prevTR field-row' data-prev='{$relation->prev}' data-next='{$relation->next}' data-action='$action->action' data-field='{$relation->field}' data-dataID='$prevDataID'";
  165. }
  166. ?>
  167. <tr <?php echo $attr;?>>
  168. <th class='w-100px'><?php echo $field->name;?></th>
  169. <td>
  170. <div style='width: <?php echo $width;?>'>
  171. <?php
  172. if($readonly)
  173. {
  174. if($field->control == 'multi-select' or $field->control == 'checkbox')
  175. {
  176. if(!is_array($value)) $value = explode(',', $value);
  177. foreach($value as $v)
  178. {
  179. if(in_array($v, $this->config->flow->variables)) $v = $this->loadModel('workflowhook')->getParamRealValue($v);
  180. echo zget($field->options, $v, '') . ' ';
  181. }
  182. $value = join(',', $value);
  183. }
  184. else
  185. {
  186. echo zget($field->options, $value);
  187. }
  188. echo html::hidden($field->field, $field->control == 'richtext' ? str_replace("'", '&#039;', htmlspecialchars($value)) : $value);
  189. }
  190. else
  191. {
  192. echo $this->flow->buildControl($field, $value);
  193. }
  194. ?>
  195. </div>
  196. </td>
  197. <?php if(!$isModal):?>
  198. <td></td>
  199. <?php endif;?>
  200. </tr>
  201. <?php endif;?>
  202. <?php endforeach;?>
  203. <tr>
  204. <th></th>
  205. <td <?php echo $colspan;?> class='form-actions'>
  206. <?php echo html::submitButton();?>
  207. <?php if(!$isModal) echo html::backButton();?>
  208. <?php echo html::hidden('referer', $referer);?>
  209. </td>
  210. </tr>
  211. </table>
  212. </form>
  213. <?php if(!$isModal):?>
  214. </div>
  215. <?php endif;?>
  216. </div>
  217. <?php
  218. /* The table below is used to generate dom when click plus button. */
  219. if($hasChildFields)
  220. {
  221. $itemRows = array();
  222. foreach($childFields as $childModule => $moduleFields)
  223. {
  224. $itemRow = '<tr>';
  225. foreach($moduleFields as $childField)
  226. {
  227. if(!$childField->show) continue;
  228. if($childField->control == 'file') continue;
  229. $element = "children[$childModule][$childField->field][KEY]";
  230. $childWidth = ($childField->width && $childField->width != 'auto' ? $childField->width . 'px' : 'auto');
  231. $itemRow .= "<td style='width: {$childWidth}'>";
  232. $itemRow .= $this->flow->buildControl($childField, $childField->defaultValue, $element, $childModule);
  233. $itemRow .= '</td>';
  234. }
  235. $itemRow .= "<td class='w-100px'>";
  236. $itemRow .= html::hidden("children[$childModule][id][KEY]");
  237. $itemRow .= "<a href='javascript:;' class='btn btn-default addItem'><i class='icon-plus'></i></a> ";
  238. $itemRow .= "<a href='javascript:;' class='btn btn-default delItem'><i class='icon-close'></i></a>";
  239. $itemRow .= '</td>';
  240. $itemRow .= '</tr>';
  241. $itemRows[$childModule] = $itemRow;
  242. }
  243. js::set('itemRows', $itemRows);
  244. }
  245. ?>
  246. <?php js::set('childKey', $childKey);?>
  247. <?php if($formulaScript) echo $formulaScript;?>
  248. <?php if($linkageScript) echo $linkageScript;?>
  249. <script>
  250. $(document).on('click', 'td.child .addItem', function()
  251. {
  252. var child = $(this).parents('table').data('child');
  253. $(this).closest('tr').after(itemRows[child].replace(/KEY/g, childKey));
  254. initSelect($(this).closest('tr').next().find('.picker-select'));
  255. $(this).closest('tr').next().find('.form-date').datetimepicker(
  256. {
  257. language: config.clientLang,
  258. weekStart: 1,
  259. todayBtn: 1,
  260. autoclose: 1,
  261. todayHighlight: 1,
  262. startView: 2,
  263. minView: 2,
  264. forceParse: 0,
  265. format: 'yyyy-mm-dd'
  266. });
  267. $(this).closest('tr').next().find('.form-datetime').datetimepicker(
  268. {
  269. language: config.clientLang,
  270. weekStart: 1,
  271. todayBtn: 1,
  272. autoclose: 1,
  273. todayHighlight: 1,
  274. startView: 2,
  275. forceParse: 0,
  276. showMeridian: 1,
  277. format: 'yyyy-mm-dd hh:ii'
  278. });
  279. childKey++;
  280. });
  281. $(document).on('click', 'td.child .delItem', function()
  282. {
  283. if($(this).parents('.table-child').find('tr').size() > 1)
  284. {
  285. $(this).closest('tr').remove();
  286. }
  287. else
  288. {
  289. $(this).closest('tr').find('input,select,textarea').val('');
  290. $(this).closest('tr').find('.chosen-controled').trigger('chosen:updated');
  291. $(this).closest('tr').find('.picker-selection-remove').click();
  292. }
  293. })
  294. var link = createLink('flow', 'ajaxGetNodes', 'object=' + moduleName);
  295. $('#reviewerBox').load(link, function(){$(this).find('select').chosen()});
  296. </script>
  297. <script>
  298. <?php helper::import('../js/search.js');?>
  299. </script>
  300. <?php include 'footer.html.php';?>