PageRenderTime 52ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/branches/gettext_version/TimeIt/modules/TimeIt/pnblocks/calendar.php

https://github.com/planetenkiller/TimeIt-zk-12
PHP | 243 lines | 179 code | 33 blank | 31 comment | 35 complexity | 4e314e6ea6d6b424b8af879d7100118c MD5 | raw file
  1. <?php
  2. /**
  3. * TimeIt Calendar Module
  4. *
  5. * @copyright (c) TimeIt Development Team
  6. * @link http://code.zikula.org/timeit
  7. * @version $Id$
  8. * @license GNU/GPL - http://www.gnu.org/copyleft/gpl.html
  9. * @package TimeIt
  10. * @subpackage Blocks
  11. */
  12. Loader::requireOnce('modules/TimeIt/common.php');
  13. // ensure that the TimeIt pntables.php is loaded
  14. pnModDBInfoLoad('TimeIt');
  15. /**
  16. * initialise block
  17. */
  18. function TimeIt_calendarblock_init()
  19. {
  20. pnSecAddSchema('TimeIt:blocks:calendarblock', 'Block title::');
  21. }
  22. /**
  23. * get information on block
  24. */
  25. function TimeIt_calendarblock_info()
  26. {
  27. // Values
  28. return array('text_type' => 'calendar',
  29. 'module' => 'TimeIt',
  30. 'text_type_long' => 'Calendar Block',
  31. 'allow_multiple' => true,
  32. 'form_content' => false,
  33. 'form_refresh' => false,
  34. 'show_preview' => true,
  35. 'admin_tableless' => false);
  36. }
  37. function TimeIt_calendarblock_display($blockinfo)
  38. {
  39. if (!SecurityUtil::checkPermission('TimeIt:blocks:calendarblock', "$blockinfo[title]::", ACCESS_READ)) {
  40. return false;
  41. }
  42. $vars = pnBlockVarsFromContent($blockinfo['content']);
  43. $vars['maxEvents'] = (int)$vars['maxEvents'];
  44. $vars['maxMonths'] = (int)$vars['maxMonths'];
  45. $pnRender = pnRender::getInstance('TimeIt');
  46. $pnRender->assign('tiConfig', pnModGetVar('TimeIt'));
  47. $processEvents = true;
  48. if($vars['forUser'] && !pnUserLoggedIn()) {
  49. // user isn't logged in -> private events aren't possible
  50. if($vars['forUserHide']) {
  51. return false;
  52. } else {
  53. $processEvents = false;
  54. }
  55. }
  56. $eventsNew = array();
  57. $eventFound = false;
  58. $date = getdate(time());
  59. if($processEvents) {
  60. $catFilter = explode('@#@', $vars['catFilter']);
  61. $filterObj = new TimeItFilter('event');
  62. $filterObj->addGroup();
  63. if($vars['forUser']) {
  64. $filterObj->addExp('cr_uid:eq:-1');
  65. $filterObj->addExp('sharing:le:2');
  66. }
  67. if($vars['catFilter']) {
  68. $filterObj->addExp('category:in:'.(int)$catFilter[1]);
  69. }
  70. if($vars['tifilter']) {
  71. TimeIt_Filter::getFilterFormString($vars['tifilter'], $filterObj);
  72. }
  73. $startStamp = DateUtil::getDatetime(mktime(0,0,0,$date['mon'], $date['mday'], $date['year']), DATEONLYFORMAT_FIXED);
  74. if($vars['viewType'] == 'upcoming') {
  75. $strtotimeStr = "+ ". $vars['maxMonths'] . " " . (isset($vars['maxUnit'])&&$vars['maxUnit']=='days'? "days" : "months");
  76. $endStamp = DateUtil::getDatetime(strtotime($strtotimeStr, $date[0]), DATEONLYFORMAT_FIXED);
  77. } else {
  78. $endStamp = $startStamp;
  79. }
  80. $events = TimeItDomainFactory::getInstance('event')->getDailySortedEvents($startStamp, $endStamp, (int)$vars['calendar'], $filterObj);
  81. if($vars['viewType'] == 'today') {
  82. $vars['maxEvents'] = 1000000; // big limit because we want to show all todays events
  83. }
  84. $count = 0;
  85. // loop over days
  86. foreach($events AS $day => $cats) {
  87. $eventsNew[$day] = $cats;
  88. // loop over cats
  89. foreach($cats AS $key1 => $objs) {
  90. $tmp_count = count($objs['data']);
  91. if(($tmp_count+$count) <= $vars['maxEvents']) {
  92. $count += $tmp_count;
  93. } else if($count < $vars['maxEvents'] && ($tmp_count+$count) > $vars['maxEvents'] ) {
  94. $max = $vars['maxEvents'] - $count;
  95. $tmp_count -= $max;
  96. $count += $max;
  97. }
  98. // loop over events
  99. foreach($objs['data'] AS $key => $obj) {
  100. // limit arrived
  101. if($tmp_count <= 0) {
  102. unset($eventsNew[$day][$key1]['data'][$key]);
  103. }
  104. $eventFound = true;
  105. if((int)$obj['allDay'] == 0) {
  106. $now = (int)date('Hi');
  107. $explDur = explode(',', $obj['allDayDur']);
  108. $explDur = $explDur[0] . (((int)$explDur[1]<10)?'0'.$explDur[1]:$explDur[1]);
  109. $time = (int)str_replace(':','',$obj['allDayStartLocal']);
  110. $time += (int)$explDur;
  111. if($time < $now) {
  112. unset($events[$key1]['data'][$key]);
  113. if(count($events[$key1]['data']) == 0) {
  114. unset($events[$key1]);
  115. }
  116. }
  117. }
  118. $tmp_count--;
  119. }
  120. // limit arrived
  121. if($count >= $vars['maxEvents']) {
  122. break 2; // maximum arrived
  123. }
  124. }
  125. }
  126. }
  127. $pnRender->assign('events', $eventsNew);
  128. $pnRender->assign('eventFound', $eventFound);
  129. $pnRender->assign('day', $date['mday']);
  130. $pnRender->assign('month', $date['mon']);
  131. $pnRender->assign('year', $date['year']);
  132. $pnRender->assign('tiConfig', pnModGetVar('TimeIt'));
  133. $pnRender->assign('asDate', DateUtil::getDatetime($date[0], DATEONLYFORMAT_FIXED));
  134. //echo $vars['viewType'];
  135. $pnRender->assign('viewType',$vars['viewType']);
  136. $blockinfo['content'] = $pnRender->fetch("block_calendar.htm");
  137. return themesideblock($blockinfo);
  138. }
  139. /**
  140. * Display a Form to edit the Configuration.
  141. */
  142. function TimeIt_calendarblock_modify($blockinfo)
  143. {
  144. $vars = pnBlockVarsFromContent($blockinfo['content']);
  145. if (!isset($vars['calendar'])) {
  146. $vars['calendar'] = pnModGetVar('TimeIt', 'defaultCalendar');
  147. }
  148. if (empty($vars['viewType'])) {
  149. $vars['viewType'] = 'today';
  150. }
  151. if (empty($vars['maxMonths'])) {
  152. $vars['maxMonths'] = 3;
  153. }
  154. if (empty($vars['maxEvents'])) {
  155. $vars['maxEvents'] = 10;
  156. }
  157. if (!isset($vars['forUser'])) {
  158. $vars['forUser'] = 0;
  159. }
  160. if (!isset($vars['forUserHide'])) {
  161. $vars['forUserHide'] = 1;
  162. }
  163. if (!isset($vars['catFilter'])) {
  164. $vars['catFilter'] = null;
  165. }
  166. if (!isset($vars['tifilter'])) {
  167. $vars['tifilter'] = null;
  168. }
  169. if (!isset($vars['maxUnit'])) {
  170. $vars['maxUnit'] = "";
  171. }
  172. Loader::loadClass('CategoryRegistryUtil');
  173. Loader::loadClass('CategoryUtil');
  174. $pnRender = pnRender::getInstance('TimeIt', false);
  175. $pnRender->assign($vars);
  176. $pnRender->assign('calendars', TimeItDomainFactory::getInstance('calendar')->getObjectListForDropdown());
  177. $props = CategoryRegistryUtil::getRegisteredModuleCategories('TimeIt','TimeIt_events');
  178. $cats = array();
  179. foreach ($props AS $property => $cid)
  180. {
  181. $cat = CategoryUtil::getSubCategories($cid);
  182. foreach($cat AS $c)
  183. {
  184. $cats[] = array('value'=>$property.'@#@'.$c['id'],
  185. 'text'=>$property.'->'.((isset($c['display_name'][pnUserGetLang()]) && !empty($c['display_name'][pnUserGetLang()]))?$c['display_name'][pnUserGetLang()]:$c['name']));
  186. }
  187. }
  188. $pnRender->assign('regedcats', $cats);
  189. return $pnRender->fetch('block_calendar_modify.htm');
  190. }
  191. /**
  192. * Update the Configuration of the Block.
  193. */
  194. function TimeIt_calendarblock_update($blockinfo)
  195. {
  196. $vars = pnBlockVarsFromContent($blockinfo['content']);
  197. $vars['calendar'] = FormUtil::getPassedValue('calendar', pnModGetVar('TimeIt', 'defaultCalendar'), 'POST');
  198. $vars['viewType'] = FormUtil::getPassedValue('viewType', 'today', 'POST');
  199. $vars['maxMonths'] = FormUtil::getPassedValue('maxMonths', 3, 'POST');
  200. $vars['maxEvents'] = FormUtil::getPassedValue('maxEvents', 10, 'POST');
  201. $vars['forUser'] = FormUtil::getPassedValue('forUser', false, 'POST');
  202. $vars['forUserHide'] = FormUtil::getPassedValue('forUserHide', false, 'POST');
  203. $vars['catFilter'] = FormUtil::getPassedValue('catFilter', null, 'POST');
  204. $vars['tifilter'] = FormUtil::getPassedValue('tifilter', null, 'POST');
  205. $vars['maxUnit'] = FormUtil::getPassedValue('maxUnit', "", 'POST');
  206. $blockinfo['content'] = pnBlockVarsToContent($vars);
  207. $pnRender = pnRender::getInstance('TimeIt');
  208. $pnRender->clear_cache('block_calendar.htm');
  209. return $blockinfo;
  210. }