calendar.html.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. /**
  3. * The view file of calendar module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2012 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @license business(商业软件)
  7. * @author Yangyang Shi <shiyangyang@cnezsoft.com>
  8. * @package calendar
  9. * @version $Id$
  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/datepicker.html.php';?>
  15. <?php include '../../../common/ext/view/calendar.html.php';?>
  16. <div id="mainMenu" class="clearfix">
  17. <div class="btn-toolbar pull-left">
  18. <?php echo html::a('#', $lang->effort->effortCalendar, '', "class='btn btn-link'");?>
  19. </div>
  20. <div class="btn-toolbar pull-right">
  21. <?php if(isset($effortCount) and common::hasPriv('my', 'effort')):?>
  22. <div class="btn-group panel-actions">
  23. <?php echo html::a(helper::createLink('effort', 'calendar'), "<i class='icon-cards-view'></i> &nbsp;", '', "class='btn btn-icon text-primary' title='{$lang->effort->calendar}' id='switchButton'");?>
  24. <?php echo html::a(helper::createLink('my', 'effort', "type=all"), "<i class='icon-list'></i> &nbsp;", '', "class='btn btn-icon' title='{$lang->effort->list}' id='switchButton'");?>
  25. </div>
  26. <?php endif;?>
  27. <?php if(common::hasPriv('effort', 'export')) echo html::a('javascript:exportCalendar("' . helper::createLink('effort', 'export', "userID={$user->id}&orderBy=date_asc&date=_date_") . '")', "<i class='icon-export muted'> </i> " . $lang->effort->export, '', "class='btn btn-link'") ?>
  28. <?php
  29. $date = str_replace('-', '', $date);
  30. common::printLink('effort', 'batchCreate', "date=$date", "<i class='icon icon-plus'></i> " . $lang->effort->create, '', "class='btn btn-primary' id='batchCreate' data-toggle='modal'", '', true);
  31. ?>
  32. </div>
  33. </div>
  34. <div class="main-row">
  35. <div class="main-col">
  36. <div class="cell">
  37. <div id="effortCalendar" class="calendar">
  38. <header class="calender-header table-row">
  39. <div class="btn-toolbar col-4 table-col text-middle">
  40. <button type="button" class="btn btn-info btn-mini btn-today"><?php echo $lang->today;?></button>
  41. <button type="button" class="btn btn-info btn-icon btn-mini btn-prev"><i class="icon-chevron-left"></i></button>
  42. <span id="date" class="calendar-caption"></span>
  43. <button type="button" class="btn btn-info btn-icon btn-mini btn-next"><i class="icon-chevron-right"></i></button>
  44. </div>
  45. </header>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <script>
  51. config.ajaxGetEffortsUrl = '<?php echo $this->createLink('effort', 'ajaxGetEfforts', "userID={$this->app->user->id}&year={year}");?>';
  52. config.effortViewUrl = '<?php echo $this->createLink('effort', 'view', 'id={id}', '', true);?>';
  53. config.batchAddUrl = '<?php echo $this->createLink('effort', 'batchCreate', 'date={date}', '', true);?>';
  54. config.textNetworkError = '<?php echo $lang->textNetworkError;?>';
  55. config.textHasMoreItems = '<?php echo $lang->textHasMoreItems;?>';
  56. </script>
  57. <script>
  58. var effortViewModalTrigger = new $.zui.ModalTrigger(
  59. {
  60. width: '70%',
  61. type: 'iframe',
  62. rememberPos: 'effortViewModal',
  63. waittime: 8000
  64. });
  65. var batchAddModalTrigger = new $.zui.ModalTrigger(
  66. {
  67. width: '95%',
  68. type: 'iframe',
  69. waittime: 8000,
  70. });
  71. var displayDate = 0;
  72. var calendar = false;
  73. $(function()
  74. {
  75. var expandedDays = {};
  76. var minExpandCount = 6;
  77. var $calendar = $('#effortCalendar');
  78. var toggleLoading = function(loading)
  79. {
  80. $calendar.toggleClass('loading', !!loading);
  81. };
  82. calendar = $calendar.calendar(
  83. {
  84. dragThenDrop: false,
  85. hideEmptyWeekends: true,
  86. data:
  87. {
  88. events: [],
  89. calendars:
  90. {
  91. defaultCal: {color: '#fff'}
  92. }
  93. },
  94. beforeDisplay: function(display, doDisplay)
  95. {
  96. var date = display.date;
  97. var thisDisplayDate = date.getFullYear();
  98. if (displayDate === thisDisplayDate)
  99. {
  100. return doDisplay();
  101. }
  102. else
  103. {
  104. displayDate = thisDisplayDate;
  105. }
  106. var calendar = this;
  107. toggleLoading(true);
  108. $.ajax(
  109. {
  110. url: config.ajaxGetEffortsUrl.replace('{year}', date.getFullYear()),
  111. dataType: 'json',
  112. success: function(data)
  113. {
  114. $.each(data, function(index, effort)
  115. {
  116. effort.allDay = !effort.end;
  117. effort.consumed = Number(effort.consumed).toFixed(2);
  118. });
  119. calendar.resetData({events: data});
  120. doDisplay();
  121. },
  122. error: function()
  123. {
  124. $.zui.messager.danger(config.textNetworkError);
  125. },
  126. complete: function() {toggleLoading(false);}
  127. });
  128. return false;
  129. },
  130. eventCreator: function(event, $cell, calendar)
  131. {
  132. var $event = $('<div title="' + event.title + '" data-id="' + (event.id || '') + '" class="event has-time" title="' + (event.desc || '') + '"><span class="title">' + event.title + '</span><span class="time">' + event.consumed + 'h</span></div>');
  133. return $event;
  134. },
  135. dayFormater: function($cell, date, dayEvents, calendar)
  136. {
  137. if(dayEvents && dayEvents.maxPos >= minExpandCount)
  138. {
  139. var hideManyEvents = !expandedDays[date.toDateString()];
  140. $cell.toggleClass('hide-many-events', hideManyEvents);
  141. if(hideManyEvents)
  142. {
  143. var $cellContent = $cell.find('.day > .content');
  144. var $showMore = $cellContent.find('.show-more-events');
  145. if(!$showMore.length)
  146. {
  147. $showMore = $('<div class="show-more-events" />').appendTo($cellContent);
  148. }
  149. else
  150. {
  151. $showMore.show();
  152. }
  153. $showMore.text(config.textHasMoreItems.format(dayEvents.maxPos - minExpandCount + 1));
  154. }
  155. }
  156. else
  157. {
  158. $cell.removeClass('hide-many-events');
  159. }
  160. if($cell.is('.past,.current')) $cell.addClass('with-plus-sign');
  161. },
  162. eventSorter: function(a, b)
  163. {
  164. var result = a.start - b.start;
  165. if (result === 0) {
  166. return a.id - b.id;
  167. }
  168. return result;
  169. }
  170. }).data('zui.calendar');
  171. $calendar.on('click', '.show-more-events', function(e)
  172. {
  173. var $cell = $(this).hide().closest('.cell-day');
  174. $cell.removeClass('hide-many-events');
  175. expandedDays[$cell.find('.day').attr('data-date')] = true;
  176. e.stopPropagation();
  177. }).on('click', '.event', function(e)
  178. {
  179. var event = $(this).data('event');
  180. eventUrl = config.effortViewUrl.replace('{id}', event.id);
  181. effortViewModalTrigger.show({url: eventUrl, width: '1080px'});
  182. e.stopPropagation();
  183. }).on('click', '.day', function(e)
  184. {
  185. var $day = $(this);
  186. var $cell = $day.parent();
  187. if (!$cell.hasClass('future') || $cell.hasClass('current'))
  188. {
  189. batchAddModalTrigger.show({url: config.batchAddUrl.replace('{date}', $day.data('date').format('yyyyMMdd')), showHeader:false});
  190. }
  191. e.stopPropagation();
  192. });
  193. $('#batchCreate').click(function(e)
  194. {
  195. batchAddModalTrigger.show({url: $(this).attr('href'), showHeader:false});
  196. return false;
  197. })
  198. $('.pull-left .btn-link').click(function()
  199. {
  200. $(this).css('background', 'unset');
  201. })
  202. });
  203. </script>
  204. <?php include $app->getModuleRoot() . 'common/view/footer.html.php';?>