view.html.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. /**
  3. * The view file of feedback module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2015 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Chunsheng Wang <chunsheng@cnezsoft.com>
  8. * @package feedback
  9. * @version $Id: view.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
  10. * @link http://www.zentao.net
  11. */
  12. ?>
  13. <?php include $app->getModuleRoot() . 'common/view/header.html.php';?>
  14. <?php include $app->getModuleRoot() . 'common/view/kindeditor.html.php';?>
  15. <?php js::set('sysurl', common::getSysUrl());?>
  16. <style>
  17. #mainContent .main-col .detail-content {word-break: break-all;}
  18. </style>
  19. <?php js::set('browseType', $browseType);?>
  20. <?php js::set('moduleID', $feedback->module);?>
  21. <div id='mainMenu' class='clearfix'>
  22. <div class='btn-toolbar pull-left'>
  23. <?php $jumpMethod = empty($this->app->user->feedback) ? 'admin' : 'browse';?>
  24. <?php $browseLink = $app->session->feedbackList != false ? $app->session->feedbackList : inlink($jumpMethod, 'browseType=unclosed');?>
  25. <?php if(!isonlybody()):?>
  26. <?php echo html::a($browseLink, "<i class='icon-back'></i> " . $lang->goback, '', "class='btn btn-primary'");?>
  27. <div class='divider'></div>
  28. <?php endif;?>
  29. <div class='page-title'>
  30. <span class='label label-id'><?php echo $feedback->id;?></span>
  31. <strong>
  32. <?php
  33. if($feedback->public) echo "<span class='label label-info'>{$lang->feedback->public}</span>";
  34. echo $feedback->title;
  35. ?>
  36. </strong>
  37. <?php $status = $this->processStatus('feedback', $feedback);?>
  38. <?php echo " <span class='label label-status status-{$feedback->status}'>{$status}</span>";?>
  39. <?php echo " <span class='label label-info'>{$product->name}</span>";?>
  40. <?php if($feedback->deleted) echo "<span class='label label-danger'>{$lang->feedback->deleted}</span>";?>
  41. </div>
  42. </div>
  43. </div>
  44. <div id='mainContent' class='main-row'>
  45. <div class='main-col col-8'>
  46. <div class='cell'>
  47. <div class='detail'>
  48. <div class='detail-title'><?php echo $lang->feedback->desc;?></div>
  49. <div class='detail-content'><?php echo $feedback->desc;?></div>
  50. </div>
  51. <?php echo $this->fetch('file', 'printFiles', array('files' => $feedback->files, 'fieldset' => 'true', 'object' => $feedback, 'method' => 'view', 'showDelete' => false));?>
  52. <?php if($config->vision != 'lite' && !empty($relations)):?>
  53. <?php foreach($relations as $type => $relationList):?>
  54. <div class='detail'>
  55. <div class='detail-title'><?php echo $lang->feedback->$type;?></div>
  56. <?php $module = $type == 'userStory' ? 'requirement' : $type;?>
  57. <div class='detail-content'>
  58. <table class='table table-bordered table-fixed'>
  59. <thead>
  60. <tr class='text-center'>
  61. <th class='w-80px'><?php echo $lang->feedback->id;?></th>
  62. <?php if($this->config->vision == 'or' and $type == 'userStory'):?>
  63. <th class='w-120px'><?php echo $lang->story->product;?></th>
  64. <?php endif;?>
  65. <th class='w-60px'>P</th>
  66. <th><?php echo $lang->feedback->$type;?></th>
  67. <th class='w-120px'><?php echo $lang->story->stage;?>
  68. </th>
  69. <th class='w-120px'><?php echo $lang->story->status;?></th>
  70. <?php if($this->config->vision == 'or' and $type == 'userStory'):?>
  71. <th class='w-120px'><?php echo $lang->story->roadmap;?></th>
  72. <?php endif;?>
  73. </tr>
  74. </thead>
  75. <tbody>
  76. <?php foreach($relationList as $relation):?>
  77. <tr class='text-center'>
  78. <td><?php echo $relation->id;?></td>
  79. <?php if($this->config->vision == 'or' and $type == 'userStory'):?>
  80. <td title='<?php echo zget($products, $relation->product);?>'><?php echo zget($products, $relation->product);?></td>
  81. <?php endif;?>
  82. <td>
  83. <span class='<?php echo 'label-pri label-pri-' . zget($lang->$module->priList, $relation->pri);?>'><?php echo zget($lang->$module->priList, $relation->pri);?></span>
  84. </td>
  85. <td class='text-left c-title' title='<?php echo $relation->title;?>'>
  86. <?php echo common::hasPriv($module, 'view') ? html::a($this->createLink($module, 'view', "id={$relation->id}", 'html'), $relation->title, '', "class='text-primary' data-width='95%'") : $relation->title;?>
  87. </td>
  88. <td><?php echo zget($lang->story->stageList, $relation->stage);?></td>
  89. <td><?php echo $relation->statusLabel;?></td>
  90. <?php if($this->config->vision == 'or' && $type == 'userStory'):?>
  91. <td title='<?php echo zget($roadmaps, $relation->roadmap);?>'><?php echo zget($roadmaps, $relation->roadmap);?></td>
  92. <?php endif;?>
  93. </tr>
  94. <?php endforeach;?>
  95. </tbody>
  96. </table>
  97. </div>
  98. </div>
  99. <?php endforeach;?>
  100. <?php endif;?>
  101. </div>
  102. <?php $this->printExtendFields($feedback, 'div', "position=left&inCell=1&inForm=0");?>
  103. <div class='cell'><?php include $app->getModuleRoot() . 'common/view/action.html.php';?></div>
  104. <div class='main-actions'>
  105. <div class="btn-toolbar">
  106. <?php common::printBack($browseLink);?>
  107. <?php if(!isonlybody()) echo "<div class='divider'></div>";?>
  108. <?php $feedback->browseType = $browseType;?>
  109. <?php $feedback->userList = $users;?>
  110. <?php echo $this->feedback->buildOperateMenu($feedback, 'view');?>
  111. </div>
  112. </div>
  113. </div>
  114. <div class='side-col col-4'>
  115. <div class='cell'>
  116. <div class='detail'>
  117. <div class='detail-title'><?php echo $lang->feedback->lblBasic;?></div>
  118. <table class='table table-data table-condensed table-borderless'>
  119. <tr>
  120. <th class='w-80px'><?php echo $lang->feedback->product?></th>
  121. <td><?php echo (common::hasPriv('product', 'view') and in_array($feedback->product, explode(',', $this->app->user->view->products)) and isset($products[$feedback->product]) and !$product->shadow) ? html::a($this->createLink('product', 'view', "id={$feedback->product}"), zget($products, $feedback->product)) : $product->name;?></td>
  122. </tr>
  123. <tr>
  124. <th><?php echo $lang->feedback->module;?></th>
  125. <?php
  126. $moduleTitle = '';
  127. ob_start();
  128. if(empty($modulePath))
  129. {
  130. $moduleTitle .= '/';
  131. echo "/";
  132. }
  133. else
  134. {
  135. foreach($modulePath as $key => $module)
  136. {
  137. $moduleTitle .= $module->name;
  138. echo $module->name;
  139. if(isset($modulePath[$key + 1]))
  140. {
  141. $moduleTitle .= '/';
  142. echo $lang->arrow;
  143. }
  144. }
  145. }
  146. $printModule = ob_get_contents();
  147. ob_end_clean();
  148. ?>
  149. <td title='<?php echo $moduleTitle?>'><?php echo $printModule?></td>
  150. </tr>
  151. <tr>
  152. <th><?php echo $lang->feedback->status?></th>
  153. <td class='status-<?php echo $feedback->status;?>'><?php echo $status;?></td>
  154. </tr>
  155. <tr>
  156. <th><?php echo $lang->feedback->type;?></th>
  157. <td><?php echo zget($lang->feedback->typeList, $feedback->type, '');?></td>
  158. </tr>
  159. <tr>
  160. <th><?php echo $lang->feedback->pri;?></th>
  161. <td><span class='label-pri <?php echo 'label-pri-' . $feedback->pri;?>' title='<?php echo zget($lang->feedback->priList, $feedback->pri);?>'><?php echo $feedback->pri == '0' ? $lang->noData : zget($lang->feedback->priList, $feedback->pri)?></span></td>
  162. </tr>
  163. <tr>
  164. <th><?php echo $lang->feedback->solution;?></th>
  165. <td><?php echo zget($lang->feedback->solutionList, $feedback->solution, '');?></td>
  166. </tr>
  167. <tr>
  168. <th><?php echo $lang->feedback->openedBy?></th>
  169. <td>
  170. <?php
  171. echo zget($users, $feedback->openedBy);
  172. echo $lang->at . $feedback->openedDate;
  173. ?>
  174. </td>
  175. </tr>
  176. <tr>
  177. <th><?php echo $lang->feedback->assignedTo?></th>
  178. <td><?php echo zget($users, $feedback->assignedTo);?></td>
  179. </tr>
  180. <tr>
  181. <th><?php echo $lang->feedback->feedbackBy;?></th>
  182. <td><?php echo $feedback->feedbackBy;?></td>
  183. </tr>
  184. <tr>
  185. <th><?php echo $lang->feedback->notifyEmail;?></th>
  186. <td><?php echo $feedback->notifyEmail;?></td>
  187. </tr>
  188. <tr>
  189. <th><?php echo $lang->feedback->mailto;?></th>
  190. <td><?php $mailto = explode(',', str_replace(' ', '', $feedback->mailto)); foreach($mailto as $account) echo ' ' . $users[$account]; ?></td>
  191. </tr>
  192. <tr>
  193. <th><?php echo $lang->feedback->keywords;?></th>
  194. <td><?php echo $feedback->keywords;?></td>
  195. </tr>
  196. <?php if($feedback->activatedBy):?>
  197. <tr>
  198. <th><?php echo $lang->feedback->activatedBy;?></th>
  199. <td><?php echo zget($users, $feedback->activatedBy) . $lang->at . $feedback->activatedDate;?></td>
  200. </tr>
  201. <?php endif;?>
  202. <?php if($feedback->reviewedBy):?>
  203. <tr>
  204. <th><?php echo $lang->feedback->reviewedBy;?></th>
  205. <td>
  206. <?php
  207. foreach(explode(',', $feedback->reviewedBy) as $reviewedBy) echo zget($users, $reviewedBy) . ' ';
  208. echo $lang->at . substr($feedback->reviewedDate, 0, 10);
  209. ?>
  210. </td>
  211. </tr>
  212. <?php endif;?>
  213. <?php if($feedback->processedBy):?>
  214. <tr>
  215. <th><?php echo $lang->feedback->processedBy?></th>
  216. <td><?php echo zget($users, $feedback->processedBy) . $lang->at . $feedback->processedDate;?></td>
  217. </tr>
  218. <?php endif;?>
  219. <?php if($feedback->closedBy):?>
  220. <tr>
  221. <th><?php echo $lang->feedback->closedBy?></th>
  222. <td><?php echo zget($users, $feedback->closedBy) . $lang->at . $feedback->closedDate;?></td>
  223. </tr>
  224. <?php endif;?>
  225. <tr>
  226. <th><?php echo $lang->feedback->closedReason?></th>
  227. <td><?php echo zget($lang->feedback->closedReasonList, $feedback->closedReason);?></td>
  228. </tr>
  229. </table>
  230. </div>
  231. </div>
  232. <div class="cell">
  233. <div class='tabs'>
  234. <ul class='nav nav-tabs'>
  235. <li class='active'><a href='#source' data-toggle='tab'><?php echo $lang->feedback->sourceInfo;?></a></li>
  236. <li><a href='#internalContact' data-toggle='tab'><?php echo $lang->feedback->internalContact;?></a></li>
  237. </ul>
  238. <div class='tab-content'>
  239. <div class='tab-pane active' id='source'>
  240. <table class="table table-data">
  241. <tbody>
  242. <tr class="has-top-line">
  243. <th class='thWidth'><?php echo $lang->feedback->feedbackBy;?></th>
  244. <td><?php echo $feedback->feedbackBy;?></td>
  245. </tr>
  246. <tr>
  247. <th class='thWidth'><?php echo $lang->feedback->company;?></th>
  248. <td><?php echo $feedback->source;?></td>
  249. </tr>
  250. <tr>
  251. <th class='thWidth'><?php echo $lang->feedback->email;?></th>
  252. <td><?php echo $feedback->notifyEmail;?></td>
  253. </tr>
  254. </tbody>
  255. </table>
  256. </div>
  257. <div class='tab-pane' id='internalContact'>
  258. <table class='table table-data table-condensed'>
  259. <?php foreach($contacts as $contact):?>
  260. <tr>
  261. <th class='w-80px text-top'><?php echo $contact->realname ? $contact->realname : $contact->account;?></th>
  262. <td>
  263. <?php
  264. if($contact->mobile) echo "<p>" . $lang->user->mobile . ': '. $contact->mobile . "</p>";
  265. if($contact->email) echo "<p>" . $lang->user->email . ': '. $contact->email . "</p>";
  266. if($contact->phone) echo "<p>" . $lang->user->phone . ': '. $contact->phone . "</p>";
  267. if($contact->qq) echo "<p>" . $lang->user->qq . ': '. $contact->qq . "</p>";
  268. if($contact->skype) echo "<p>" . $lang->user->skype . ': '. $contact->skype . "</p>";
  269. ?>
  270. </td>
  271. </tr>
  272. <?php endforeach;?>
  273. </table>
  274. </div>
  275. </div>
  276. </div>
  277. </div>
  278. <?php $this->printExtendFields($feedback, 'div', "position=right&inCell=1&inForm=0");?>
  279. </div>
  280. </div>
  281. <div id='mainActions' class='main-actions'>
  282. <?php common::printPreAndNext($preAndNext);?>
  283. </div>
  284. <?php include './selectproject.html.php';?>
  285. <script>
  286. $(function()
  287. {
  288. $(".effort").modalTrigger({width:1024, iframe:true, transition:'elastic'});
  289. $('#feedbackTree').tree(
  290. {
  291. name: 'feedbackTree',
  292. initialState: 'preserve'
  293. });
  294. })
  295. </script>
  296. <?php include $app->getModuleRoot() . 'common/view/footer.html.php';?>