calendar.html.php 7.8 KB

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