PageRenderTime 31ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/Calendar/calendarLayout.php

https://bitbucket.org/thomashii/vtigercrm-5.4-for-postgresql
PHP | 2203 lines | 1839 code | 139 blank | 225 comment | 395 complexity | 268aeff444a6aa0109477f46291c5705 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0
  1. <?php
  2. /*+********************************************************************************
  3. * The contents of this file are subject to the vtiger CRM Public License Version 1.0
  4. * ("License"); You may not use this file except in compliance with the License
  5. * The Original Code is: vtiger CRM Open Source
  6. * The Initial Developer of the Original Code is vtiger.
  7. * Portions created by vtiger are Copyright (C) vtiger.
  8. * All Rights Reserved.
  9. ********************************************************************************/
  10. require_once('include/database/PearDatabase.php');
  11. require_once('include/utils/CommonUtils.php');
  12. require_once('include/utils/UserInfoUtil.php');
  13. require_once('modules/Calendar/CalendarCommon.php');
  14. /**
  15. * Function creates HTML to display Events and Todos div tags
  16. * @param array $param_arr - collection of objects and strings
  17. * @param string $viewBox - string 'listview' or 'hourview' or may be empty. if 'listview' means get Events ListView.if 'hourview' means gets Events HourView. if empty means get Todos ListView
  18. * @param string $subtab - string 'todo' or 'event'. if 'todo' means Todos View else Events View
  19. */
  20. function calendar_layout(& $param_arr,$viewBox='',$subtab='')
  21. {
  22. global $mod_strings,$cal_log;
  23. $category = getParentTab();
  24. $cal_log->debug("Entering calendar_layout() method");
  25. $cal_header = array ();
  26. if (isset($param_arr['size']) && $param_arr['size'] == 'small')
  27. $param_arr['calendar']->show_events = false;
  28. $cal_header['view'] = $param_arr['view'];
  29. $cal_header['IMAGE_PATH'] = $param_arr['IMAGE_PATH'];
  30. $cal_header['calendar'] = $param_arr['calendar'];
  31. $eventlabel = $mod_strings['LBL_EVENTS'];
  32. $todolabel = $mod_strings['LBL_TODOS'];
  33. //if $param_arr['size'] is set to 'small', get small(mini) calendar
  34. if(isset($param_arr['size']) && $param_arr['size'] == 'small')
  35. {
  36. get_mini_calendar($param_arr);
  37. }
  38. else
  39. {
  40. // User Select Customization
  41. $onlyForUserParam = "onlyforuser=" . calendarview_getSelectedUserId();
  42. // END
  43. //To differentiate selected subtab from unselected one - Starts
  44. if($subtab == 'event')
  45. {
  46. $eventtab_class = 'dvtSelectedCell';
  47. $todotab_class = 'dvtUnSelectedCell';
  48. $event_anchor = $eventlabel;
  49. // Added for User Based CustomView for Calendar module
  50. $todo_anchor = "<a href='index.php?module=Calendar&action=index&view=".$cal_header['view']."".$cal_header['calendar']->date_time->get_date_str()."&viewOption=".$viewBox."&subtab=todo&parenttab=".$category."&$onlyForUserParam'>".$todolabel."</a>";
  51. }
  52. elseif($subtab == 'todo')
  53. {
  54. $eventtab_class = 'dvtUnSelectedCell';
  55. $todotab_class = 'dvtSelectedCell';
  56. // Added User Based CustomView for Calendar module
  57. $event_anchor = "<a href='index.php?module=Calendar&action=index&view=".$cal_header['view']."".$cal_header['calendar']->date_time->get_date_str()."&viewOption=".$viewBox."&subtab=event&parenttab=".$category."&$onlyForUserParam'>".$eventlabel."</a>";
  58. $todo_anchor = $todolabel;
  59. }
  60. //Ends
  61. //To get calendar header and its links(like Day,Week,Month,Year and etc.)
  62. get_cal_header_tab($cal_header,$viewBox,$subtab);
  63. $subheader = "";
  64. $subheader .=<<<EOQ
  65. <tr>
  66. <td colspan="8" class="calBorder">
  67. <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
  68. <tr>
  69. <td>
  70. <table class="small" border="0" cellpadding="3" cellspacing="0" width="100%">
  71. <tr>
  72. <td class="dvtTabCache" style="width: 10px;" nowrap="nowrap">&nbsp;</td>
  73. <td class="$eventtab_class" id="pi" align="center" nowrap="nowrap" width="75">$event_anchor</td>
  74. <td class="dvtTabCache" style="width: 10px;" nowrap="nowrap">&nbsp;</td>
  75. <td class="$todotab_class" style="width:100px;" id="mi" align="center" nowrap="nowrap">$todo_anchor</td>
  76. <td class="dvtTabCache" nowrap="nowrap">&nbsp;</td>
  77. </tr>
  78. </table>
  79. </td>
  80. </tr>
  81. <tr>
  82. <td class="calInnerBorder" align="left" bgcolor="#ffffff" valign="top">
  83. EOQ;
  84. echo $subheader;
  85. if($viewBox == 'hourview' && $subtab == 'event')
  86. {
  87. get_cal_header_data($param_arr,$viewBox,$subtab);
  88. getHourView($param_arr);
  89. }
  90. elseif($viewBox == 'listview' && $subtab == 'event')
  91. {
  92. get_cal_header_data($param_arr,$viewBox,$subtab);
  93. getEventListView($param_arr);
  94. }
  95. elseif($subtab == 'todo')
  96. {
  97. $todo_list = "";
  98. $todo_list .= getTodosListView($param_arr,'',$subtab);
  99. $todo_list .= '</td></tr></table></td></tr></table><br>';
  100. echo $todo_list;
  101. }
  102. }
  103. $cal_log->debug("Exiting calendar_layout() method");
  104. }
  105. /**
  106. * Function creates HTML to display small(mini) Calendar
  107. * @param array $cal - collection of objects and strings
  108. */
  109. function get_mini_calendar(& $cal){
  110. global $current_user,$adb,$cal_log,$mod_strings,$theme;
  111. $category = getParentTab();
  112. $cal_log->debug('Entering get_mini_calendar() method...');
  113. $count = 0;
  114. //To decide number of rows(weeks) in a month
  115. if ($cal['calendar']->month_array[$cal['calendar']->slices[35]]->start_time->month != $cal['calendar']->date_time->month) {
  116. $rows = 5;
  117. } else {
  118. $rows = 6;
  119. }
  120. $minical = "";
  121. $minical .= "<table class='mailClient ' bgcolor='white' border='0' cellpadding='2' cellspacing='0' width='98%'>
  122. <tr>
  123. <td class='calHdr'>&nbsp;</td>
  124. <td style='padding:5px' colspan='6' class='calHdr' align='center'>".get_previous_cal($cal)."&nbsp;";
  125. $minical .= "<a style='text-decoration: none;' href='index.php?module=Calendar&action=index&view=".$cal['view']."".$cal['calendar']->date_time->get_date_str()."&parenttab=".$category."'><b>".display_date($cal['view'],$cal['calendar']->date_time)."</b></a>&nbsp;".get_next_cal($cal)."</td>";
  126. $minical .= "<td class='calHdr' align='right'><a href='javascript:ghide(\"miniCal\");'><img src='". vtiger_imageurl('close.gif', $theme). "' align='right' border='0'></a>
  127. </td></tr>";
  128. $minical .= "<tr class='hdrNameBg'>";
  129. //To display days in week
  130. $minical .= '<th width="12%">'.$mod_strings['LBL_WEEK'].'</th>';
  131. for ($i = 0; $i < 7; $i ++){
  132. $weekday = $mod_strings['cal_weekdays_short'][$i];
  133. $minical .= '<th width="12%">'.$weekday.'</th>';
  134. }
  135. $minical .= "</tr>";
  136. $event_class = '';
  137. $class = '';
  138. for ($i = 0; $i < $rows; $i++){
  139. $minical .= "<tr>";
  140. //calculate blank days for first week
  141. for ($j = 0; $j < 7; $j ++){
  142. $cal['slice'] = $cal['calendar']->month_array[$cal['calendar']->slices[$count]];
  143. $class = dateCheck($cal['slice']->start_time->get_formatted_date());
  144. if($j == 0){
  145. $minical .= "<td style='text-align:center' ><a href='index.php?module=Calendar&action=index&view=week".$cal['slice']->start_time->get_date_str()."&parenttab=".$category."'>".$cal['slice']->start_time->week."</td>";
  146. }
  147. //To differentiate day having events from other days
  148. if(count($cal['slice']->activities) != 0 && ($cal['slice']->start_time->get_formatted_date() == $cal['slice']->activities[0]->start_time->get_formatted_date())){
  149. $event_class = 'class="eventDay"';
  150. }else{
  151. $event_class = '';
  152. }
  153. //To differentiate current day from other days
  154. if($class != '' ){
  155. $class = 'class="'.$class.'"';
  156. }else{
  157. $class = $event_class;
  158. }
  159. //To display month dates
  160. if ($cal['slice']->start_time->getMonth() == $cal['calendar']->date_time->getMonth()){
  161. $minical .= "<td ".$class." style='text-align:center' >";
  162. $minical .= "<a href='index.php?module=Calendar&action=index&view=".$cal['slice']->getView()."".$cal['slice']->start_time->get_date_str()."&parenttab=".$category."'>";
  163. $minical .= $cal['slice']->start_time->get_Date()."</a></td>";
  164. }else{
  165. $minical .= "<td style='text-align:center' ></td>";
  166. }
  167. $count++;
  168. }
  169. $minical .= '</tr>';
  170. }
  171. $minical .= "</table>";
  172. echo $minical;
  173. $cal_log->debug("Exiting get_mini_calendar() method...");
  174. }
  175. /**
  176. * Function creates HTML to display Calendar Header and its Links
  177. * @param array $header - collection of objects and strings
  178. * @param string $viewBox - string 'listview' or 'hourview' or may be empty. if 'listview' means Events ListView.if 'hourview' means Events HourView. if empty means get Todos ListView
  179. * @param string $subtab - string 'todo' or 'event'. if 'todo' means Todos View else Events View
  180. */
  181. function get_cal_header_tab(& $header,$viewBox,$subtab)
  182. {
  183. global $mod_strings,$cal_log;
  184. $category = getParentTab();
  185. $cal_log->debug("Entering get_cal_header_tab() method...");
  186. $tabhtml = "";
  187. $count = 1;
  188. include_once 'modules/Calendar/addEventUI.php';
  189. include_once 'modules/Calendar/header.php';
  190. $eventlabel = $mod_strings['LBL_EVENTS'];
  191. $todolabel = $mod_strings['LBL_TODOS'];
  192. $div = "<div id='miniCal' style='width:300px; position:absolute; display:none; left:100px; top:100px; z-index:100000; background-color:white'></div>
  193. <div id='calSettings' class='layerPopup calSettings' style='display:none;width:500px;' align=center ></div>
  194. <div id='dataArray'></div>
  195. ";
  196. echo $div;
  197. $tabhtml .= "<table class='small calHdr' align='center' border='0' cellpadding='5' cellspacing='0' width='100%'><tr>";
  198. $links = array ('day','week','month','year');
  199. //To differentiate the selected link from unselected links
  200. foreach ($links as $link)
  201. {
  202. if ($header['view'] == $link)
  203. {
  204. $class = 'calSel';
  205. $anchor = $mod_strings["LBL_".$header['calendar']->getCalendarView($link)];
  206. }
  207. else
  208. {
  209. $class = 'calUnSel';
  210. $anchor = "<a href='index.php?module=Calendar&action=index&view=".$link."".$header['calendar']->date_time->get_date_str()."&viewOption=".$viewBox."&subtab=".$subtab."&parenttab=".$category."'>".$mod_strings["LBL_".$header['calendar']->getCalendarView($link)]."</a>";
  211. }
  212. if($count == 1)
  213. $tabhtml .= "<!-- day week month buttons --> <td style='border-left: 1px solid #666666;' class=".$class.">".$anchor."</td>";
  214. else
  215. $tabhtml .= "<td class=".$class.">".$anchor."</td>";
  216. $count++;
  217. }
  218. //To get Navigation(next&previous) links and display Date info
  219. $tabhtml .= "<td width='30%'>
  220. <table border='0' cellpadding='0' cellspacing='0'>
  221. <tr>
  222. <td>".get_previous_cal($header,$viewBox,$subtab)."
  223. </td>";
  224. $tabhtml .= "<td class='calendarNav'>".display_date($header['view'],$header['calendar']->date_time)."</td>";
  225. $tabhtml .= "<td>".get_next_cal($header,$viewBox,$subtab)."
  226. </td></tr>
  227. </table>
  228. </td>";
  229. $tabhtml .= "<td width='2%'><img onClick='fnvshobj(this,\"miniCal\"); getMiniCal(\"view=".$header['calendar']->view."".$header['calendar']->date_time->get_date_str()."&viewOption=".$viewBox."&subtab=".$subtab."&parenttab=".$category."\");' src='".$header['IMAGE_PATH']."btnL3Calendar.gif' alt='".$mod_strings['LBL_OPENCAL']."...' title='".$mod_strings['LBL_OPENCAL']."...' align='absmiddle' border='0'></td>";
  230. $tabhtml .= "<td width=20% ><img onClick='fnvshobj(this,\"calSettings\"); getCalSettings(\"view=".$header['calendar']->view."".$header['calendar']->date_time->get_date_str()."&viewOption=".$viewBox."&subtab=".$subtab."&parenttab=".$category."\");' src='".$header['IMAGE_PATH']."tbarSettings.gif' alt='".$mod_strings['LBL_SETTINGS']."' title='".$mod_strings['LBL_SETTINGS']."' align='absmiddle' border='0'></td>";
  231. $tabhtml .= "<td class='calHdr calTopRight componentName'>".$app_strings['Calendar']."</td>";
  232. $tabhtml .= "</tr>";
  233. echo $tabhtml;
  234. $cal_log->debug("Exiting get_cal_header_tab() method...");
  235. }
  236. /**
  237. * Function creates HTML to display number of Events, Todos and pending list in calendar under header(Eg:Total Events : 5, 2 Pending / Total To Dos: 4, 1 Pending)
  238. * @param array $cal_arr - collection of objects and strings
  239. * @param string $viewBox - string 'listview' or 'hourview'. if 'listview' means Events ListView.if 'hourview' means Events HourView.
  240. */
  241. function get_cal_header_data(& $cal_arr,$viewBox,$subtab)
  242. {
  243. global $mod_strings,$cal_log,$current_user,$adb,$theme;
  244. $cal_log->debug("Entering get_cal_header_data() method...");
  245. global $current_user,$app_strings;
  246. $date_format = $current_user->date_format;
  247. $format = $cal_arr['calendar']->hour_format;
  248. $hour_startat = timeString(array('hour' => date('H:i', (time() + (5 * 60))), 'minute' => 0), '24');
  249. $hour_endat = timeString(array('hour'=>date('H:i',(time() + (60 * 60))),'minute'=>0),'24');
  250. $time_arr = getaddEventPopupTime($hour_startat,$hour_endat,$format);
  251. $date = new DateTimeField(null);
  252. //To get date in user selected format
  253. $temp_date = $date->getDisplayDate();
  254. if($current_user->column_fields['is_admin']=='on')
  255. $Res = $adb->pquery("select * from vtiger_activitytype",array());
  256. else
  257. {
  258. $roleid=$current_user->roleid;
  259. $subrole = getRoleSubordinates($roleid);
  260. if(count($subrole)> 0)
  261. {
  262. $roleids = $subrole;
  263. array_push($roleids, $roleid);
  264. }
  265. else
  266. {
  267. $roleids = $roleid;
  268. }
  269. if (count($roleids) > 1) {
  270. $Res=$adb->pquery("select distinct activitytype from vtiger_activitytype inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_activitytype.picklist_valueid where roleid in (". generateQuestionMarks($roleids) .") and picklistid in (select picklistid from vtiger_activitytype) order by sortid asc", array($roleids));
  271. } else {
  272. $Res=$adb->pquery("select distinct activitytype from vtiger_activitytype inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_activitytype.picklist_valueid where roleid = ? and picklistid in (select picklistid from vtiger_activitytype) order by sortid asc", array($roleid));
  273. }
  274. }
  275. $eventlist='';
  276. for($i=0; $i<$adb->num_rows($Res);$i++)
  277. {
  278. $eventlist .= $adb->query_result($Res,$i,'activitytype').";";
  279. }
  280. $headerdata = "";
  281. $headerdata .="
  282. <div style='display: block;' id='mnuTab'>
  283. <form name='EventViewOption' method='POST' action='index.php' style='display:inline;'>
  284. <input type='hidden' id='complete_view' name='complete_view' value='' />
  285. <table align='center' border='0' cellpadding='5' cellspacing='0' width='98%'>
  286. <tr><td colspan='3'>&nbsp;</td></tr>";
  287. if(isPermitted("Calendar","EditView") == "yes")
  288. {
  289. $headerdata .="<tr>
  290. <td>
  291. <table><tr><td class='calAddButton' style='cursor:pointer;height:30px' align='center' width='15%' onMouseOver='fnAddEvent(this,\"addEventDropDown\",\"".$temp_date."\",\"".$temp_date."\",\"".$time_arr['starthour']."\",\"".$time_arr['startmin']."\",\"".$time_arr['startfmt']."\",\"".$time_arr['endhour']."\",\"".$time_arr['endmin']."\",\"".$time_arr['endfmt']."\",\"".$viewBox."\",\"".$subtab."\",\"".$eventlist."\");'>
  292. ".$mod_strings['LBL_ADD']."
  293. <img src='".vtiger_imageurl('menuDnArrow.gif', $theme)."' style='padding-left: 5px;' border='0'>
  294. </td></tr></table> </td>";
  295. }
  296. else
  297. {
  298. $headerdata .="<tr><td>&nbsp;</td>";
  299. }
  300. $headerdata .="<td align='center' width='43%'><span id='total_activities'>";//USER SELECT CUSTOMIZATION
  301. $headerdata .= getEventInfo($cal_arr,'listcnt');
  302. $headerdata .= "</span></td>
  303. <td align='center' width='40%'><table border=0 cellspacing=0 cellpadding=2><tr><td class=small><b>".$mod_strings['LBL_VIEW']." : </b></td><td>";//USER SELECT CUSTOMIZATION
  304. $view_options = getEventViewOption($cal_arr,$viewBox);
  305. // User Select Customization
  306. $view_options .= calendarview_getUserSelectOptions( calendarview_getSelectedUserId() );
  307. // END
  308. $headerdata .=$view_options."</td></tr></table>
  309. </td>
  310. </tr>
  311. </table></form>";
  312. echo $headerdata;
  313. $cal_log->debug("Exiting get_cal_header_data() method...");
  314. }
  315. /**
  316. * Function creates HTML select statement to display View selection box
  317. * @param array $cal - collection of objects and strings
  318. * @param string $viewBox - string 'listview' or 'hourview'. if 'listview' means get Events ListView.if 'hourview' means get Events HourView.
  319. * return string $view - html selection box
  320. */
  321. function getEventViewOption(& $cal,$viewBox)
  322. {
  323. global $mod_strings,$cal_log;
  324. $category = getParentTab();
  325. if($viewBox == 'listview')
  326. {
  327. $list_sel = 'selected';
  328. $hr_sel = '';
  329. }
  330. else
  331. {
  332. $list_sel = '';
  333. $hr_sel = 'selected';
  334. }
  335. $cal_log->debug("Entering getEventViewOption() method...");
  336. $view = "<input type='hidden' name='view' value='".$cal['calendar']->view."'>
  337. <input type='hidden' name='hour' value='".$cal['calendar']->date_time->hour."'>
  338. <input type='hidden' name='day' value='".$cal['calendar']->date_time->day."'>
  339. <input type='hidden' name='week' value='".$cal['calendar']->date_time->week."'>
  340. <input type='hidden' name='month' value='".$cal['calendar']->date_time->month."'>
  341. <input type='hidden' name='year' value='".$cal['calendar']->date_time->year."'>
  342. <input type='hidden' name='parenttab' value='".$category."'>
  343. <input type='hidden' name='module' value='Calendar'>
  344. <input type='hidden' name='return_module' value='Calendar'>
  345. <input type='hidden' name='action' value=''>
  346. <input type='hidden' name='return_action' value=''>
  347. <select name='viewOption' class='importBox' id='view_Option' onChange='fnRedirect();'>";
  348. if($cal['view'] == 'day')
  349. {
  350. $view .="<option value='listview' ".$list_sel.">".$mod_strings['LBL_LISTVIEW']."</option>
  351. <option value='hourview' ".$hr_sel.">".$mod_strings['LBL_HRVIEW']."</option>";
  352. }
  353. elseif($cal['view'] == 'week')
  354. {
  355. $view .="<option value='listview' ".$list_sel.">".$mod_strings['LBL_LISTVIEW']."</option>
  356. <option value='hourview' ".$hr_sel.">".$mod_strings['LBL_WEEKVIEW']."</option>";
  357. }
  358. elseif($cal['view'] == 'month')
  359. {
  360. $view .="<option value='listview' ".$list_sel.">".$mod_strings['LBL_LISTVIEW']."</option>
  361. <option value='hourview' ".$hr_sel.">".$mod_strings['LBL_MONTHVIEW']."</option>";
  362. }
  363. elseif($cal['view'] == 'year')
  364. {
  365. $view .="<option value='listview' ".$list_sel.">".$mod_strings['LBL_LISTVIEW']."</option>
  366. <option value='hourview' ".$hr_sel.">".$mod_strings['LBL_YEARVIEW']."</option>";
  367. }
  368. else
  369. die("view is not defined");
  370. $view .="</select>";
  371. $cal_log->debug("Exiting getEventViewOption() method...");
  372. return $view;
  373. }
  374. /**
  375. * Function creates HTML anchor tag to get previous-day/week/month/year view
  376. * @param array $cal - collection of objects and strings
  377. * @param string $viewBox - string 'listview' or 'hourview' or may be empty. if 'listview' means previous link in Events ListView.if 'hourview' means previous link in Events HourView. if empty means previous link in Todos ListView
  378. * @param string $subtab - string 'todo' or 'event' or may be empty. if 'todo' means Todos View. if 'event' means Events View. if empty means small calendar view.
  379. * return string $link - html tags in string format
  380. */
  381. function get_previous_cal(& $cal,$viewBox='',$subtab='')
  382. {
  383. global $mod_strings,$cal_log,$theme;
  384. $category = getParentTab();
  385. $cal_log->debug("Entering get_previous_cal() method...");
  386. if(isset($cal['size']) && $cal['size'] == 'small')
  387. {
  388. $link = "<a href='javascript:getMiniCal(\"view=".$cal['calendar']->view."".$cal['calendar']->get_datechange_info('prev')."&parenttab=".$category."\")'><img src= '". vtiger_imageurl('small_left.gif', $theme)."' border='0' align='absmiddle' /></a>";
  389. }
  390. else
  391. {
  392. $link = "<a href='index.php?action=index&module=Calendar&view=".$cal['calendar']->view."".$cal['calendar']->get_datechange_info('prev')."&viewOption=".$viewBox."&subtab=".$subtab."&parenttab=".$category."&onlyforuser=".calendarview_getSelectedUserId()."' onclick='VtigerJS_DialogBox.block();return true;'><img src='".$cal['IMAGE_PATH']."cal_prev_nav.gif' border='0' align='absmiddle' /></a>";
  393. }
  394. $cal_log->debug("Exiting get_previous_cal() method...");
  395. return $link;
  396. }
  397. /**
  398. * Function creates HTML anchor tag to get next-day/week/month/year view
  399. * @param array $cal - collection of objects and strings
  400. * @param string $viewBox - string 'listview' or 'hourview' or may be empty. if 'listview' means next link in Events ListView.if 'hourview' means next link in Events HourView. if empty means next link in Todos ListView
  401. * @param string $subtab - string 'todo' or 'event' or may be empty. if 'todo' means Todos View. if 'event' means Events View. if empty means small calendar view.
  402. * return string $link - html tags in string format
  403. */
  404. function get_next_cal(& $cal,$viewBox='',$subtab='')
  405. {
  406. global $mod_strings,$cal_log,$theme;
  407. $category = getParentTab();
  408. $cal_log->debug("Entering get_next_cal() method...");
  409. if(isset($cal['size']) && $cal['size'] == 'small')
  410. {
  411. $link = "<a href='javascript:getMiniCal(\"view=".$cal['calendar']->view."".$cal['calendar']->get_datechange_info('next')."&parenttab=".$category."\")' ><img src='". vtiger_imageurl('small_right.gif', $theme)."' border='0' align='absmiddle' /></a>";
  412. }
  413. else
  414. {
  415. $link = "<a href='index.php?action=index&module=Calendar&view=".$cal['calendar']->view."".$cal['calendar']->get_datechange_info('next')."&viewOption=".$viewBox."&subtab=".$subtab."&parenttab=".$category."&onlyforuser=".calendarview_getSelectedUserId()."' onclick='VtigerJS_DialogBox.block();return true;'><img src='".$cal['IMAGE_PATH']."cal_next_nav.gif' border='0' align='absmiddle' /></a>";
  416. }
  417. $cal_log->debug("Exiting get_next_cal() method...");
  418. return $link;
  419. }
  420. /**
  421. * Function to get date info depending upon on the calendar view(Eg: 21 July 2000)
  422. * @param string $view - calendar view(day/week/month/year)
  423. * @param array $date_time - contains DateTime object
  424. * return string $label - date info(Eg for dayview : 13 July 2000)
  425. */
  426. function display_date($view,$date_time)
  427. {
  428. global $cal_log;
  429. $cal_log->debug("Entering display_date() method...");
  430. if ($view == 'day')
  431. {
  432. //$label = $date_time->getdayofWeek()." ";
  433. $label = $date_time->get_Date()." ";
  434. $label .= $date_time->getmonthName()." ";
  435. $label .= $date_time->year;
  436. $cal_log->debug("Exiting display_date() method...");
  437. return $label;
  438. }
  439. elseif ($view == 'week')
  440. {
  441. $week_start = $date_time->getThisweekDaysbyIndex(1);
  442. $week_end = $date_time->getThisweekDaysbyIndex(7);
  443. $label = $week_start->get_Date()." ";
  444. $label .= $week_start->getmonthName()." ";
  445. $label .= $week_start->year;
  446. $label .= " - ";
  447. $label .= $week_end->get_Date()." ";
  448. $label .= $week_end->getmonthName()." ";
  449. $label .= $week_end->year;
  450. $cal_log->debug("Exiting display_date() method...");
  451. return $label;
  452. }
  453. elseif ($view == 'month')
  454. {
  455. $label = $date_time->getmonthName()." ";
  456. $label .= $date_time->year;
  457. $cal_log->debug("Exiting display_date() method...");
  458. return $label;
  459. }
  460. elseif ($view == 'year')
  461. {
  462. $cal_log->debug("Exiting display_date() method...");
  463. return $date_time->year;
  464. }
  465. }
  466. /**
  467. * Function to get css class name for date
  468. * @param string $slice_date - date
  469. * returns string - css class name or empty string
  470. */
  471. function dateCheck($slice_date)
  472. {
  473. global $cal_log;
  474. $cal_log->debug("Entering dateCheck() method...");
  475. $userCurrenDate = new DateTimeField(date('Y-m-d H:i:s'));
  476. $today = $userCurrenDate->getDisplayDate();
  477. if($today == $slice_date)
  478. {
  479. $cal_log->debug("Exiting dateCheck() method...");
  480. //css class for day having event(s)
  481. return 'currDay';
  482. }
  483. else
  484. {
  485. $cal_log->debug("Exiting dateCheck() method...");
  486. return '';
  487. }
  488. }
  489. /**
  490. * Function to construct respective calendar layout depends on the calendar view
  491. * @param array $view - collection of objects and strings
  492. */
  493. function getHourView(& $view)
  494. {
  495. global $cal_log,$theme;
  496. $hourview_layout = '';
  497. $cal_log->debug("Entering getHourView() method...");
  498. $hourview_layout .= '<br /><!-- HOUR VIEW LAYER STARTS HERE -->
  499. <div id="hrView" align=center>';
  500. if($view['view'] == 'day')
  501. $hourview_layout .= getDayViewLayout($view);
  502. elseif($view['view'] == 'week')
  503. $hourview_layout .= getWeekViewLayout($view);
  504. elseif($view['view'] == 'month')
  505. $hourview_layout .= getMonthViewLayout($view);
  506. elseif($view['view'] == 'year')
  507. $hourview_layout .= getYearViewLayout($view);
  508. else
  509. die("view:".$view['view']." is not defined");
  510. $hourview_layout .= '<br></div>
  511. </div>';
  512. $hourview_layout .= '<br></td></tr></table></td></tr></table>
  513. </td></tr></table>
  514. </td></tr></table>
  515. </td></tr></table>
  516. </div>
  517. </td>
  518. <td valign=top><img src="'.vtiger_imageurl('showPanelTopRight.gif', $theme).'"></td>
  519. </tr>
  520. </table>
  521. <br>';
  522. echo $hourview_layout;
  523. $cal_log->debug("Exiting getHourView() method...");
  524. }
  525. /**
  526. * Fuction constructs Events ListView depends on the view
  527. * @param array $cal - collection of objects and strings
  528. * @param string $mode - string 'listcnt' or empty. if empty means get Events ListView else get total no. of events and no. of pending events Info.
  529. * returns string $activity_list - total no. of events and no. of pending events Info(Eg: Total Events : 2, 1 Pending).
  530. */
  531. function getEventListView(& $cal,$mode='')
  532. {
  533. global $cal_log,$theme;
  534. $list_view = "";
  535. $cal_log->debug("Entering getEventListView() method...");
  536. if($cal['calendar']->view == 'day')
  537. {
  538. $start_date = $end_date = $cal['calendar']->date_time->get_DB_formatted_date();
  539. }
  540. elseif($cal['calendar']->view == 'week')
  541. {
  542. $start_date = $cal['calendar']->slices[0];
  543. $end_date = $cal['calendar']->slices[6];
  544. $start_date = DateTimeField::convertToDBFormat($start_date);
  545. $end_date = DateTimeField::convertToDBFormat($end_date);
  546. }
  547. elseif($cal['calendar']->view == 'month')
  548. {
  549. $start_date = $cal['calendar']->date_time->getThismonthDaysbyIndex(0);
  550. $end_date = $cal['calendar']->date_time->getThismonthDaysbyIndex($cal['calendar']->date_time->daysinmonth - 1);
  551. $start_date = $start_date->get_DB_formatted_date();
  552. $end_date = $end_date->get_DB_formatted_date();
  553. }
  554. elseif($cal['calendar']->view == 'year')
  555. {
  556. $start_date = $cal['calendar']->date_time->getThisyearMonthsbyIndex(0);
  557. $end_date = $cal['calendar']->date_time->get_first_day_of_changed_year('increment');
  558. $start_date = $start_date->get_DB_formatted_date();
  559. $end_date = $end_date->get_DB_formatted_date();
  560. }
  561. else
  562. {
  563. die("view:".$cal['calendar']->view." is not defined");
  564. }
  565. //if $mode value is empty means get Events list in array format else get the count of total events and pending events in array format.
  566. if($mode != '')
  567. {
  568. $activity_list = getEventList($cal, $start_date, $end_date,$mode);
  569. $cal_log->debug("Exiting getEventListView() method...");
  570. return $activity_list;
  571. }
  572. else
  573. {
  574. $ret_arr = getEventList($cal, $start_date, $end_date,$mode);
  575. $activity_list = $ret_arr[0];
  576. $navigation_array = $ret_arr[1];
  577. }
  578. //To get Events listView
  579. $list_view .="<br><div id='listView'>";
  580. $list_view .=constructEventListView($cal,$activity_list,$navigation_array);
  581. $list_view .="<br></div>
  582. </div>";
  583. $list_view .="<br></td></tr></table></td></tr></table>
  584. </td></tr></table>
  585. </td></tr></table>
  586. </div>
  587. </td></tr></table>
  588. </td>
  589. <td valign=top><img src='".vtiger_imageurl('showPanelTopRight.gif', $theme)."'></td>
  590. </tr>
  591. </table>
  592. <br>";
  593. echo $list_view;
  594. $cal_log->debug("Exiting getEventListView() method...");
  595. }
  596. /**
  597. * Fuction constructs Todos ListView depends on the view
  598. * @param array $cal - collection of objects and strings
  599. * @param string $check - string 'listcnt' or empty. if empty means get Todos ListView else get total no. of Todos and no. of pending todos Info.
  600. * returns string $todo_list - total no. of todos and no. of pending todos Info(Eg: Total Todos : 2, 1 Pending).
  601. */
  602. function getTodosListView($cal, $check='',$subtab='')
  603. {
  604. global $cal_log,$theme;
  605. $list_view = "";
  606. $cal_log->debug("Entering getTodosListView() method...");
  607. if($cal['calendar']->view == 'day') {
  608. $start_date = $end_date = $cal['calendar']->date_time->get_DB_formatted_date();
  609. } elseif ($cal['calendar']->view == 'week') {
  610. $start_date = $cal['calendar']->slices[0];
  611. $end_date = $cal['calendar']->slices[6];
  612. $start_date = DateTimeField::convertToDBFormat($start_date);
  613. $end_date = DateTimeField::convertToDBFormat($end_date);
  614. } elseif ($cal['calendar']->view == 'month') {
  615. $start_date = $cal['calendar']->date_time->getThismonthDaysbyIndex(0);
  616. $end_date = $cal['calendar']->date_time->getThismonthDaysbyIndex($cal['calendar']->
  617. date_time->daysinmonth - 1);
  618. $start_date = $start_date->get_DB_formatted_date();
  619. $end_date = $end_date->get_DB_formatted_date();
  620. } elseif ($cal['calendar']->view == 'year') {
  621. $start_date = $cal['calendar']->date_time->getThisyearMonthsbyIndex(0);
  622. $end_date = $cal['calendar']->date_time->get_first_day_of_changed_year('increment');
  623. $start_date = $start_date->get_DB_formatted_date();
  624. $end_date = $end_date->get_DB_formatted_date();
  625. } else {
  626. die("view:" . $cal['calendar']->view . " is not defined");
  627. }
  628. //if $check value is empty means get Todos list in array format else get the count of total todos and pending todos in array format.
  629. if($check != '')
  630. {
  631. $todo_list = getTodoList($cal, $start_date, $end_date,$check);
  632. $cal_log->debug("Exiting getTodosListView() method...");
  633. return $todo_list;
  634. }
  635. else
  636. {
  637. $ret_arr = getTodoList($cal, $start_date, $end_date,$check);
  638. $todo_list = $ret_arr[0];
  639. $navigation_arr = $ret_arr[1];
  640. }
  641. $cal_log->debug("Exiting getTodosListView() method...");
  642. $list_view .="<div id='mnuTab2' style='background-color: rgb(255, 255, 215); display:block;'>";
  643. //To get Todos listView
  644. $list_view .= constructTodoListView($todo_list,$cal,$subtab,$navigation_arr);
  645. $list_view .="</div></div></td></tr></table></td></tr></table>
  646. </td></tr></table>
  647. </td></tr></table>
  648. </td></tr></table>
  649. </div>
  650. </td>
  651. <td valign=top><img src='".vtiger_imageurl('showPanelTopRight.gif', $theme)."'></td>
  652. </tr>
  653. </table>
  654. ";
  655. echo $list_view;
  656. }
  657. /**
  658. * Function creates HTML to display Calendar DayView
  659. * @param array $cal - collections of objects and strings.
  660. * return string $dayview_layout - html tags in string format
  661. */
  662. function getDayViewLayout(& $cal)
  663. {
  664. global $current_user,$app_strings,$cal_log,$adb;
  665. $no_of_rows = 1;
  666. $cal_log->debug("Entering getDayViewLayout() method...");
  667. $date_format = $current_user->date_format;
  668. $day_start_hour = $cal['calendar']->day_start_hour;
  669. $day_end_hour = $cal['calendar']->day_end_hour;
  670. $format = $cal['calendar']->hour_format;
  671. $show_complete_view = false;
  672. if(!empty($_REQUEST['complete_view'])){
  673. $show_complete_view =true;
  674. }
  675. $dayview_layout = '';
  676. $dayview_layout .= '<!-- Day view layout starts here --> <table border="0" cellpadding="10" cellspacing="0" width="100%">';
  677. $dayview_layout .= '<tr>
  678. <td id="mainContent" style="border-top: 1px solid rgb(204, 204, 204);">
  679. <table border="0" cellpadding="5" cellspacing="0" width="100%">';
  680. if(!empty($show_complete_view)) {
  681. $dayview_layout .= '<tr><td width=12% class="lvtCol" bgcolor="blue" valign=top><img onClick="document.EventViewOption.complete_view.value=0;fnRedirect();" src="'.vtiger_imageurl('activate.gif', $theme).'" border="0"></td><td class="dvtCellInfo">&nbsp;</td><td class="dvtCellInfo">&nbsp;</td></tr>';
  682. $day_start_hour = 0;
  683. $day_end_hour = 23;
  684. } else {
  685. $dayview_layout .= '<tr><td width=12% class="lvtCol" bgcolor="blue" valign=top><img onClick="document.EventViewOption.complete_view.value=1;fnRedirect();" src="'.vtiger_imageurl('inactivate.gif', $theme).'" border="0"></td><td class="dvtCellInfo">&nbsp;</td><td class="dvtCellInfo">&nbsp;</td></tr>';
  686. }
  687. for($j=0;$j<24;$j++)
  688. {
  689. $slice = $cal['calendar']->slices[$j];
  690. $act = $cal['calendar']->day_slice[$slice]->activities;
  691. if(!empty($act))
  692. {
  693. $temprows = count($act);
  694. $no_of_rows = ($no_of_rows>$temprows)?$no_of_rows:$temprows;
  695. }
  696. }
  697. for($i=$day_start_hour;$i<=$day_end_hour;$i++)
  698. {
  699. $time = array('hour'=>$i,'minute'=>0);
  700. $sub_str = formatUserTimeString($time,$format);
  701. $y = $i+1;
  702. $hour_startat = formatUserTimeString(array('hour'=>$i,'minute'=>0),'24');
  703. $hour_endat = formatUserTimeString(array('hour'=>$y,'minute'=>0),'24');
  704. $time_arr = getaddEventPopupTime($hour_startat,$hour_endat,$format);
  705. $date = new DateTimeField(null);
  706. $endDate = new DateTimeField(date('Y-m-d', time() + (1*24*50*60)));
  707. $sttemp_date = $date->getDisplayDate();
  708. $endtemp_date = $endDate->getDisplayDate();
  709. $js_string = "";
  710. if(isPermitted("Calendar","EditView") == "yes")
  711. $js_string = 'onClick="fnvshobj(this,\'addEvent\'); gshow(\'addEvent\',\'Call\',\''.$sttemp_date.'\',\''.$endtemp_date.'\',\''.$time_arr['starthour'].'\',\''.$time_arr['startmin'].'\',\''.$time_arr['startfmt'].'\',\''.$time_arr['endhour'].'\',\''.$time_arr['endmin'].'\',\''.$time_arr['endfmt'].'\',\'hourview\',\'event\')"';
  712. $dayview_layout .= '<tr>
  713. <td style="cursor:pointer;" class="lvtCol" valign=top height="75" width="10%" '.$js_string.'>'.$sub_str.'</td>';
  714. //To display events in Dayview
  715. $dayview_layout .= getdayEventLayer($cal,$cal['calendar']->slices[$i],$no_of_rows);
  716. $dayview_layout .= '</tr>';
  717. }
  718. $dayview_layout .= '</table>
  719. </td></tr></table>';
  720. $cal_log->debug("Exiting getDayViewLayout() method...");
  721. return $dayview_layout;
  722. }
  723. /**
  724. * Function creates HTML to display Calendar WeekView
  725. * @param array $cal - collections of objects and strings.
  726. * return string $weekview_layout - html tags in string format
  727. */
  728. function getWeekViewLayout(& $cal)
  729. {
  730. global $current_user,$app_strings,$cal_log,$theme;
  731. $category = getParentTab();
  732. $cal_log->debug("Entering getWeekViewLayout() method...");
  733. $date_format = $current_user->date_format;
  734. $day_start_hour = $cal['calendar']->day_start_hour;
  735. $day_end_hour = $cal['calendar']->day_end_hour;
  736. $format = $cal['calendar']->hour_format;
  737. $show_complete_view = false;
  738. if(!empty($_REQUEST['complete_view'])){
  739. $show_complete_view =true;
  740. }
  741. $weekview_layout = '';
  742. $weekview_layout .= '<table border="0" cellpadding="10" cellspacing="0" width="98%" class="calDayHour" style="background-color: #dadada">';
  743. for ($col=0;$col<=7;$col++)
  744. {
  745. if($col==0) {
  746. $weekview_layout .= '<tr>';
  747. if(!empty($show_complete_view)) {
  748. $weekview_layout .= '<td width=12% class="lvtCol" bgcolor="blue" valign=top><img onClick="document.EventViewOption.complete_view.value=0;fnRedirect();" src="'.vtiger_imageurl('activate.gif', $theme).'" border="0"></td>';
  749. $day_start_hour = 0;
  750. $day_end_hour = 23;
  751. } else {
  752. $weekview_layout .= '<td width=12% class="lvtCol" bgcolor="blue" valign=top><img onClick="document.EventViewOption.complete_view.value=1;fnRedirect();" src="'.vtiger_imageurl('inactivate.gif', $theme).'" border="0"></td>';
  753. }
  754. } else {
  755. //To display Days in Week
  756. $cal['slice'] = $cal['calendar']->week_array[$cal['calendar']->slices[$col-1]];
  757. $date = $cal['calendar']->date_time->getThisweekDaysbyIndex($col);
  758. $day = $date->getdayofWeek_inshort();
  759. $weekview_layout .= '<td width=12% class="lvtCol" bgcolor="blue" valign=top>';
  760. $weekview_layout .= '<a href="index.php?module=Calendar&action=index&view='.$cal['slice']->getView().'&'.$cal['slice']->start_time->get_date_str().'&parenttab='.$category.'">';
  761. $weekview_layout .= $date->get_Date().' - '.$day;
  762. $weekview_layout .= "</a>";
  763. $weekview_layout .= '</td>';
  764. }
  765. }
  766. $weekview_layout .= '</tr></table>';
  767. $weekview_layout .= '<table border="0" cellpadding="10" cellspacing="1" width="98%" class="calDayHour" style="background-color: #dadada">';
  768. //To display Hours in User selected format
  769. for($i=$day_start_hour;$i<=$day_end_hour;$i++)
  770. {
  771. $count = $i;
  772. $hour_startat = formatUserTimeString(array('hour'=>$i,'minute'=>0),'24');
  773. $hour_endat = formatUserTimeString(array('hour'=>($i+1),'minute'=>0),'24');
  774. $time_arr = getaddEventPopupTime($hour_startat,$hour_endat,$format);
  775. $weekview_layout .= '<tr>';
  776. for ($column=1;$column<=1;$column++)
  777. {
  778. $time = array('hour'=>$i,'minute'=>0);
  779. $sub_str = formatUserTimeString($time,$format);
  780. $weekview_layout .= '<td style="border-top: 1px solid rgb(239, 239, 239); background-color: rgb(234, 234, 234); height: 40px;" valign="top" width="12%">';
  781. $weekview_layout .=$sub_str;
  782. $weekview_layout .= '</td>';
  783. }
  784. for ($column=0;$column<=6;$column++)
  785. {
  786. $temp_ts = $cal['calendar']->week_array[$cal['calendar']->slices[$column]]->start_time->ts;
  787. $date = new DateTimeField(date('Y-m-d', $temp_ts));
  788. $sttemp_date = $date->getDisplayDate();
  789. if($i != 23)
  790. $endtemp_date = $sttemp_date;
  791. else
  792. {
  793. $endtemp_ts = $cal['calendar']->week_array[$cal['calendar']->slices[$column+1]]->start_time->ts;
  794. $endDate = new DateTimeField(date('Y-m-d', $temp_ts));
  795. $endtemp_date = $endDate->getDisplayDate();
  796. }
  797. $weekview_layout .= '<td class="cellNormal" onMouseOver="cal_show(\'create_'.$sttemp_date.''.$time_arr['starthour'].''.$time_arr['startfmt'].'\')" onMouseOut="fnHide_Event(\'create_'.$sttemp_date.''.$time_arr['starthour'].''.$time_arr['startfmt'].'\')" style="height: 40px;" bgcolor="white" valign="top" width="12%" align=right vlign=top>';
  798. $weekview_layout .= '<div id="create_'.$sttemp_date.''.$time_arr['starthour'].''.$time_arr['startfmt'].'" style="visibility: hidden;">';
  799. if(isPermitted("Calendar","EditView") == "yes")
  800. $weekview_layout .='<img onClick="fnvshobj(this,\'addEvent\'); gshow(\'addEvent\',\'Call\',\''.$sttemp_date.'\',\''.$endtemp_date.'\',\''.$time_arr['starthour'].'\',\''.$time_arr['startmin'].'\',\''.$time_arr['startfmt'].'\',\''.$time_arr['endhour'].'\',\''.$time_arr['endmin'].'\',\''.$time_arr['endfmt'].'\',\'hourview\',\'event\')" src="'.vtiger_imageurl('cal_add.gif', $theme).'" border="0">';
  801. $weekview_layout .='</div>';
  802. //To display events in WeekView
  803. $weekview_layout .=getweekEventLayer($cal,$cal['calendar']->week_hour_slices[$count]);
  804. $weekview_layout .= '</td>';
  805. $count = $count+24;
  806. }
  807. $weekview_layout .= '</tr>';
  808. }
  809. $weekview_layout .= '</table>';
  810. return $weekview_layout;
  811. $cal_log->debug("Exiting getWeekViewLayout() method...");
  812. }
  813. /**
  814. * Function creates HTML to display Calendar MonthView
  815. * @param array $cal - collections of objects and strings.
  816. * return string $monthview_layout - html tags in string format
  817. */
  818. function getMonthViewLayout(& $cal)
  819. {
  820. global $current_user,$app_strings,$cal_log,$theme;
  821. $category = getParentTab();
  822. $cal_log->debug("Entering getMonthViewLayout() method...");
  823. $date_format = $current_user->date_format;
  824. $count = 0;
  825. //To get no. of rows(weeks) in month
  826. if ($cal['calendar']->month_array[$cal['calendar']->slices[35]]->start_time->month != $cal['calendar']->date_time->month) {
  827. $rows = 5;
  828. } else {
  829. $rows = 6;
  830. }
  831. $format = $cal['calendar']->hour_format;
  832. $hour_startat = formatUserTimeString(array('hour'=>date('H:i'),'minute'=>0),'24');
  833. $hour_endat = formatUserTimeString(array('hour'=>date('H:i',(time() + (60 * 60))),'minute'=>0),'24');
  834. $time_arr = getaddEventPopupTime($hour_startat,$hour_endat,$format);
  835. $monthview_layout = '';
  836. $monthview_layout .= '<table class="calDayHour" style="background-color: rgb(218, 218, 218);" border="0" cellpadding="5" cellspacing="1" width="98%"><tr>';
  837. //To display days in week
  838. for ($i = 0; $i < 7; $i ++)
  839. {
  840. $first_row = $cal['calendar']->month_array[$cal['calendar']->slices[$i]];
  841. $weekday = $first_row->start_time->getdayofWeek();
  842. $monthview_layout .= '<td class="lvtCol" valign="top" width="14%">'.$weekday.'</td>';
  843. }
  844. $monthview_layout .= '</tr></table>';
  845. $monthview_layout .= '<!-- month headers --> <table border=0 cellspacing=1 cellpadding=5 width=98% class="calDayHour" >';
  846. $cnt = 0;
  847. for ($i = 0; $i < $rows; $i ++)
  848. {
  849. $monthview_layout .= '<tr>';
  850. for ($j = 0; $j < 7; $j ++)
  851. {
  852. $temp_ts = $cal['calendar']->month_array[$cal['calendar']->slices[$count]]->start_time->ts;
  853. $temp_date = (($date_format == 'dd-mm-yyyy')?(date('d-m-Y',$temp_ts)):(($date_format== 'mm-dd-yyyy')?(date('m-d-Y',$temp_ts)):(($date_format == 'yyyy-mm-dd')?(date('Y-m-d', $temp_ts)):(''))));
  854. if($cal['calendar']->day_start_hour != 23)
  855. $endtemp_date = $temp_date;
  856. else
  857. {
  858. $endtemp_ts = $cal['calendar']->month_array[$cal['calendar']->slices[$count+1]]->start_time->ts;
  859. $endtemp_date = (($date_format == 'dd-mm-yyyy')?(date('d-m-Y',$endtemp_ts)):(($date_format== 'mm-dd-yyyy')?(date('m-d-Y',$endtemp_ts)):(($date_format == 'yyyy-mm-dd')?(date('Y-m-d', $endtemp_ts)):(''))));
  860. }
  861. $cal['slice'] = $cal['calendar']->month_array[$cal['calendar']->slices[$count]];
  862. $monthclass = dateCheck($cal['slice']->start_time->get_formatted_date());
  863. if($monthclass != '')
  864. $monthclass = 'calSel';
  865. else
  866. $monthclass = 'dvtCellLabel';
  867. //to display dates in month
  868. if ($cal['slice']->start_time->getMonth() == $cal['calendar']->date_time->getMonth())
  869. {
  870. $monthview_layout .= '<td style="text-align:left;" class="'.$monthclass.'" width="14%" onMouseOver="cal_show(\'create_'.$temp_date.''.$time_arr['starthour'].'\')" onMouseOut="fnHide_Event(\'create_'.$temp_date.''.$time_arr['starthour'].'\')">';
  871. $monthview_layout .= '<a href="index.php?module=Calendar&action=index&view='.$cal['slice']->getView().''.$cal['slice']->start_time->get_date_str().'&parenttab='.$category.'">';
  872. $monthview_layout .= $cal['slice']->start_time->get_Date();
  873. $monthview_layout .= '</a>';
  874. $monthview_layout .= '<div id="create_'.$temp_date.''.$time_arr['starthour'].'" style="visibility:hidden;">';
  875. if(isPermitted("Calendar","EditView") == "yes")
  876. $monthview_layout .='<a onClick="fnvshobj(this,\'addEvent\'); gshow(\'addEvent\',\'Call\',\''.$temp_date.'\',\''.$endtemp_date.'\',\''.$time_arr['starthour'].'\',\''.$time_arr['startmin'].'\',\''.$time_arr['startfmt'].'\',\''.$time_arr['endhour'].'\',\''.$time_arr['endmin'].'\',\''.$time_arr['endfmt'].'\',\'hourview\',\'event\')" href="javascript:void(0)"><img src="' . vtiger_imageurl('cal_add.gif', $theme). '" border="0"></a>';
  877. $monthview_layout .= ' </div></td>';
  878. }
  879. else
  880. {
  881. $monthview_layout .= '<td class="dvtCellLabel" width="14%">&nbsp;</td>';
  882. }
  883. $count++;
  884. }
  885. $monthview_layout .= '</tr>';
  886. $monthview_layout .= '<tr>';
  887. for ($j = 0; $j < 7; $j ++)
  888. {
  889. $monthview_layout .= '<td bgcolor="white" height="90" valign="top" width="200" align=right>';
  890. $monthview_layout .= getmonthEventLayer($cal,$cal['calendar']->slices[$cnt]);
  891. $monthview_layout .= '</td>';
  892. $cnt++;
  893. }
  894. $monthview_layout .= '</tr>';
  895. }
  896. $monthview_layout .= '</table>';
  897. return $monthview_layout;
  898. $cal_log->debug("Exiting getMonthViewLayout() method...");
  899. }
  900. /**
  901. * Function creates HTML to display Calendar YearView
  902. * @param array $cal - collections of objects and strings.
  903. * return string $yearview_layout - html tags in string format
  904. */
  905. function getYearViewLayout(& $cal)
  906. {
  907. global $mod_strings,$cal_log;
  908. $category = getParentTab();
  909. $cal_log->debug("Entering getYearViewLayout() method...");
  910. $yearview_layout = '';
  911. $yearview_layout .= '<table border="0" cellpadding="5" cellspacing="0" width="100%">';
  912. $count = 0;
  913. //year view divided as 4 rows and 3 columns
  914. for($i=0;$i<4;$i++)
  915. {
  916. $yearview_layout .= '<tr>';
  917. for($j=0;$j<3;$j++)
  918. {
  919. $cal['slice'] = $cal['calendar']->year_array[$cal['calendar']->slices[$count]];
  920. $yearview_layout .= '<td width="33%">
  921. <table class="mailClient " border="0" cellpadding="2" cellspacing="0" width="98%">
  922. <tr>
  923. <td colspan="7" class="calHdr" style="padding:5px">
  924. <a style="text-decoration: none;" href="index.php?module=Calendar&action=index&view=month&hour=0&day=1&month='.($count+1).'&year='.$cal['calendar']->date_time->year.'&parenttab='.$category.'"><b>
  925. '.$cal['slice']->start_time->month_inlong.'
  926. </b></a>
  927. </td>
  928. </tr><tr class="hdrNameBg">';
  929. for($w=0;$w<7;$w++)
  930. {
  931. $yearview_layout .= '<th width="14%">'.$mod_strings['cal_weekdays_short'][$w].'</th>';
  932. }
  933. $yearview_layout .= '</tr>';
  934. $date = DateTimeField::convertToDBFormat($cal['calendar']->month_day_slices
  935. [$count][35]);
  936. list($_3rdyear,$_3rdmonth,$_3rddate) = explode("-",$date);
  937. $date = DateTimeField::convertToDBFormat($cal['calendar']->month_day_slices
  938. [$count][6]);
  939. list($_2ndyear,$_2ndmonth,$_2nddate) = explode("-",$date);
  940. //to get no. of rows(weeks) in month
  941. if ($_3rdmonth != $_2ndmonth) {
  942. $rows = 5;
  943. } else {
  944. $rows = 6;
  945. }
  946. $cnt = 0;
  947. $date_stack = Array();
  948. for ($k = 0; $k < 5; $k ++)
  949. {
  950. $yearview_layout .= '<tr>';
  951. for ($mr = 0; $mr < 7; $mr ++)
  952. {
  953. $date = DateTimeField::convertToDBFormat($cal['calendar']->month_day_slices
  954. [$count][$cnt]);
  955. list($_1styear,$_1stmonth,$_1stdate) = explode("-", $date);
  956. if(count($cal['slice']->activities) != 0)
  957. {
  958. for($act_count = 0;$act_count<count($cal['slice']->activities);$act_count++)
  959. {
  960. array_push($date_stack,$cal['slice']->activities[$act_count]->
  961. start_time->get_formatted_date());
  962. }
  963. }
  964. if(in_array($cal['calendar']->month_day_slices[$count][$cnt],$date_stack))
  965. $event_class = 'class="eventDay"';
  966. else
  967. $event_class = '';
  968. if($_1stmonth == $_2ndmonth)
  969. $curclass = dateCheck($cal['calendar']->month_day_slices[$count][$cnt]);
  970. if($curclass != '')
  971. {
  972. $class = 'class="'.$curclass.'"';
  973. $curclass = '';
  974. }
  975. else
  976. {
  977. $class = $event_class;
  978. $event_class = '';
  979. }
  980. $date = $_1stdate + 0;
  981. $month = $_1stmonth + 0;
  982. $yearview_layout .= '<td '.$class.' style="text-align:center">';
  983. if($rows == 6 && $k==0)
  984. {
  985. $tdate = DateTimeField::convertToDBFormat($cal['calendar']->
  986. month_day_slices[$count][35+$mr]);
  987. list($tempyear,$tempmonth,$tempdate) = explode("-", $tdate);
  988. if($tempmonth == $_2ndmonth)
  989. $yearview_layout .= '<a href="index.php?module=Calendar&action=index&view=day&hour=0&day='.$tempdate.'&month='.$tempmonth.'&year='.$tempyear.'&parenttab='.$category.'">'.$tempdate;
  990. }
  991. if($_1stmonth == $_2ndmonth)
  992. {
  993. $yearview_layout .= '<a href="index.php?module=Calendar&action=index&view=day&hour=0&day='.$date.'&month='.$month.'&year='.$_1styear.'&parenttab='.$category.'">'.$date;
  994. }
  995. $yearview_layout .= '</a></td>';
  996. $cnt++;
  997. }
  998. $yearview_layout .= '</tr>';
  999. }
  1000. $yearview_layout .= '
  1001. </table>
  1002. ';
  1003. $count++;
  1004. }
  1005. $yearview_layout .= '</tr>';
  1006. }
  1007. $yearview_layout .= '</table>';
  1008. return $yearview_layout;
  1009. $cal_log->debug("Exiting getYearViewLayout() method...");
  1010. }
  1011. /**
  1012. * Function creates HTML To display events in day view
  1013. * @param array $cal - collection of objects and strings
  1014. * @param string $slice - date:time(eg: 2006-07-13:10)
  1015. * returns string $eventlayer - hmtl in string format
  1016. */
  1017. function getdayEventLayer(& $cal,$slice,$rows)
  1018. {
  1019. global $mod_strings,$cal_log,$listview_max_textlength,$adb,$current_user,$theme;
  1020. $category = getParentTab();
  1021. $cal_log->debug("Entering getdayEventLayer() method...");
  1022. $eventlayer = '';
  1023. $arrow_img_name = '';
  1024. $rows = $rows + 1;
  1025. $last_colwidth = 100 / $rows;
  1026. $width = 100 / $rows ;
  1027. $act = $cal['calendar']->day_slice[$slice]->activities;
  1028. if(!empty($act))
  1029. {
  1030. for($i=0;$i<count($act);$i++)
  1031. {
  1032. $rowspan = 1;
  1033. $arrow_img_name = 'event'.$cal['calendar']->day_slice[$slice]->start_time->hour.'_'.$i;
  1034. $subject = $act[$i]->subject;
  1035. $id = $act[$i]->record;
  1036. if($listview_max_textlength && (strlen($subject)>$listview_max_textlength))
  1037. $subject = substr($subject,0,$listview_max_textlength)."...";
  1038. $format = $cal['calendar']->hour_format;
  1039. $duration_hour = $act[$i]->duration_hour;
  1040. $duration_min =$act[$i]->duration_minute;
  1041. $user = $act[$i]->owner;
  1042. $priority = $act[$i]->priority;
  1043. if($duration_min != '00')
  1044. $rowspan = $duration_hour+$rowspan;
  1045. elseif($duration_hour != '0')
  1046. {
  1047. $rowspan = $duration_hour;
  1048. }
  1049. $row_cnt = $rowspan;
  1050. $start_hour = timeString($act[$i]->start_time,$format);
  1051. $end_hour = timeString($act[$i]->end_time,$format);
  1052. $account_name = $act[$i]->accountname;
  1053. $eventstatus = $act[$i]->eventstatus;
  1054. $color = $act[$i]->color;
  1055. $image = vtiger_imageurl($act[$i]->image_name, $theme);
  1056. if($act[$i]->recurring)
  1057. $recurring = '<img src="'.vtiger_imageurl($act[$i]->recurring, $theme).'" align="middle" border="0"></img>';
  1058. else
  1059. $recurring = '&nbsp;';
  1060. $height = $rowspan * 75;
  1061. $javacript_str = '';
  1062. $idShared = "normal"; if($act[$i]->shared) $idShared = "shared";
  1063. /*if($eventstatus != 'Held')
  1064. {*/
  1065. if($idShared == "normal")
  1066. {
  1067. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete") == "yes")
  1068. $javacript_str = 'onMouseOver="cal_show(\''.$arrow_img_name.'\');" onMouseOut="fnHide_Event(\''.$arrow_img_name.'\');"';
  1069. $action_str = '<img src="' . vtiger_imageurl('cal_event.jpg', $theme). '" id="'.$arrow_img_name.'" style="visibility: hidden;" onClick="getcalAction(this,\'eventcalAction\','.$id.',\''.$cal['view'].'\',\''.$cal['calendar']->date_time->hour.'\',\''.$cal['calendar']->date_time->get_DB_formatted_date().'\',\'event\');" align="middle" border="0">';
  1070. }
  1071. else
  1072. {
  1073. $javacript_str = '';
  1074. $eventlayer .= '&nbsp;';
  1075. }
  1076. $eventlayer .= '<td class="dvtCellInfo" rowspan="'.$rowspan.'" colspan="1" width="'.$width.'%" >';
  1077. $visibility_query=$adb->pquery('SELECT visibility from vtiger_activity where activityid=?',array($id));
  1078. $visibility = $adb->query_result($visibility_query,0,'visibility');
  1079. $user_query = $adb->pquery("SELECT vtiger_crmentity.smownerid,vtiger_users.user_name from vtiger_crmentity,vtiger_users where crmid=? and vtiger_crmentity.smownerid=vtiger_users.id", array($id));
  1080. $userid = $adb->query_result($user_query,0,"smownerid");
  1081. $assigned_role_query=$adb->pquery("select roleid from vtiger_user2role where userid=?",array($userid));
  1082. $assigned_role_id = $adb->query_result($assigned_role_query,0,"roleid");
  1083. $role_list = $adb->pquery("SELECT * from vtiger_role WHERE parentrole LIKE '". formatForSqlLike($current_user->column_fields['roleid']) . formatForSqlLike($assigned_role_id) ."'",array());
  1084. $is_shared = $adb->pquery("SELECT * from vtiger_sharedcalendar where userid=? and sharedid=?",array($userid,$current_user->id));
  1085. $userName = getFullNameFromArray('Users', $current_user->column_fields);
  1086. if(($current_user->column_fields['is_admin']!='on' && $adb->num_rows($role_list)==0 && (($adb->num_rows($is_shared)==0 && ($visibility=='Public' || $visibility=='Private')) || $visibility=='Private')) && $userName!=$user)
  1087. {
  1088. $eventlayer .= '<div id="event_'.$cal['calendar']->day_slice[$slice]->start_time->hour.'_'.$i.'" class="event" style="height:'.$height.'px;">';
  1089. }
  1090. else{
  1091. $eventlayer .= '<div id="event_'.$cal['calendar']->day_slice[$slice]->start_time->hour.'_'.$i.'" class="event" style="height:'.$height.'px;" '.$javacript_str.'>';
  1092. }
  1093. $eventlayer .= '<table border="0" cellpadding="1" cellspacing="0" width="100%">
  1094. <tr>
  1095. <td width="10%" align="center"><img src="'.$image.'" align="middle" border="0"></td>
  1096. <td width="90%"><b>'.$start_hour.' - '.$end_hour.'</b></td></tr>';
  1097. $eventlayer .= '<tr><td align="center">'.$recurring.'</td>';
  1098. if(($current_user->column_fields['is_admin']!='on' && $adb->num_rows($role_list)==0 && (($adb->num_rows($is_shared)==0 && ($visibility=='Public' || $visibility=='Private')) || $visibility=='Private')) && $userName!=$user)
  1099. {
  1100. $eventlayer .= '<td><font color="silver"><b>'.$user.' - '.$mod_strings['LBL_BUSY'].'</b></font></td>';
  1101. }else{
  1102. $eventlayer .= '<td><a href="index.php?action=DetailView&module=Calendar&record='.$id.'&activity_mode=Events&viewtype=calendar&parenttab='.$category.'"><span class="orgTab">'.$subject.'</span></a></td>
  1103. </tr>
  1104. <tr><td align="center">';
  1105. if($act[$i]->shared)
  1106. $eventlayer .= '<img src="' . vtiger_imageurl('cal12x12Shared.gif', $theme). '" align="middle" border="0">';
  1107. else
  1108. $eventlayer .= '&nbsp;';
  1109. $eventlayer .= '</td><td>('.$user.' | '.getTranslatedString($eventstatus).' | '.getTranslatedString($priority).')</td></tr><tr><td align="center">'.$action_str.'</td><td>&nbsp;</td></tr>';
  1110. } $eventlayer .= '</table></div></td>';
  1111. }
  1112. $eventlayer .= '<td class="dvtCellInfo" rowspan="1" width="'.$last_colwidth.'%">&nbsp;</td>';
  1113. }
  1114. else
  1115. {
  1116. $eventlayer .= '<td class="dvtCellInfo" colspan="'.($rows - 1).'" width="'.($last_colwidth * ($rows - 1)).'%" rowspan="1">&nbsp;</td>';
  1117. $eventlayer .= '<td class="dvtCellInfo" rowspan="1" width="'.$last_colwidth.'%">&nbsp;</td>';
  1118. }
  1119. $cal_log->debug("Exiting getdayEventLayer() method...");
  1120. return $eventlayer;
  1121. }
  1122. /**
  1123. * Function creates HTML To display events in week view
  1124. * @param array $cal - collection of objects and strings
  1125. * @param string $slice - date:time(eg: 2006-07-13:10)
  1126. * returns string $eventlayer - hmtl in string format
  1127. */
  1128. function getweekEventLayer(& $cal,$slice)
  1129. {
  1130. global $mod_strings,$cal_log,$listview_max_textlength,$adb,$current_user,$theme;
  1131. $category = getParentTab();
  1132. $cal_log->debug("Entering getweekEventLayer() method...");
  1133. $eventlayer = '';
  1134. $arrow_img_name = '';
  1135. $act = $cal['calendar']->week_slice[$slice]->activities;
  1136. if(!empty($act))
  1137. {
  1138. for($i=0;$i<count($act);$i++)
  1139. {
  1140. /* fix given by dartagnanlaf START --integrated by Minnie */
  1141. $arrow_img_name = 'weekevent'.$cal['calendar']->week_slice[$slice]->start_time->get_formatted_date().'_'.$act[$i]->start_time->hour.'_'.$i;
  1142. /* fix given by dartagnanlaf END --integrated by Minnie */
  1143. $id = $act[$i]->record;
  1144. $subject = $act[$i]->subject;
  1145. if($listview_max_textlength && (strlen($subject)>$listview_max_textlength))
  1146. $subject = substr($subject,0,$listview_max_textlength)."...";
  1147. $format = $cal['calendar']->hour_format;
  1148. $start_hour = timeString($act[$i]->start_time, $format);
  1149. $end_hour = timeString($act[$i]->end_time, $format);
  1150. $account_name = $act[$i]->accountname;
  1151. $eventstatus = $act[$i]->eventstatus;
  1152. $user = $act[$i]->owner;
  1153. $priority = $act[$i]->priority;
  1154. $image = vtiger_imageurl($act[$i]->image_name, $theme);
  1155. $idShared = "normal"; if($act[$i]->shared) $idShared = "shared";
  1156. if($act[$i]->recurring)
  1157. $recurring = '<img src="'.vtiger_imageurl($act[$i]->recurring, $theme).'" align="middle" border="0"></img>';
  1158. else
  1159. $recurring = '&nbsp;';
  1160. $color = $act[$i]->color;
  1161. if($idShared == "normal")
  1162. {
  1163. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete") == "yes")
  1164. $javacript_str = 'onMouseOver="cal_show(\''.$arrow_img_name.'\');" onMouseOut="fnHide_Event(\''.$arrow_img_name.'\');"';
  1165. $action_str = '<img src="' . vtiger_imageurl('cal_event.jpg', $theme). '" id="'.$arrow_img_name.'" style="visibility: hidden;" onClick="getcalAction(this,\'eventcalAction\','.$id.',\''.$cal['view'].'\',\''.$cal['calendar']->date_time->hour.'\',\''.$cal['calendar']->date_time->get_DB_formatted_date().'\',\'event\');" align="middle" border="0">';
  1166. }
  1167. else
  1168. {
  1169. $javacript_str = '';
  1170. $eventlayer .= '&nbsp;';
  1171. }
  1172. $visibility_query=$adb->pquery('SELECT visibility from vtiger_activity where activityid=?',array($id));
  1173. $visibility = $adb->query_result($visibility_query,0,'visibility');
  1174. $user_query = $adb->pquery("SELECT vtiger_crmentity.smownerid,vtiger_users.user_name from vtiger_crmentity,vtiger_users where crmid=? and vtiger_crmentity.smownerid=vtiger_users.id", array($id));
  1175. $userid = $adb->query_result($user_query,0,"smownerid");
  1176. $assigned_role_query=$adb->pquery("select roleid from vtiger_user2role where userid=?",array($userid));
  1177. $assigned_role_id = $adb->query_result($assigned_role_query,0,"roleid");
  1178. $role_list = $adb->pquery("SELECT * from vtiger_role WHERE parentrole LIKE '". formatForSqlLike($current_user->column_fields['roleid']) . formatForSqlLike($assigned_role_id) ."'",array());
  1179. $is_shared = $adb->pquery("SELECT * from vtiger_sharedcalendar where userid=? and sharedid=?",array($userid,$current_user->id));
  1180. $userName = getFullNameFromArray('Users', $current_user->column_fields);
  1181. if(($current_user->column_fields['is_admin']!='on' && $adb->num_rows($role_list)==0 && (($adb->num_rows($is_shared)==0 && ($visibility=='Public' || $visibility=='Private')) || $visibility=='Private')) && $userName!=$user)
  1182. {
  1183. $eventlayer .= '<div id="event_'.$cal['calendar']->day_slice[$slice]->start_time->hour.'_'.$i.'" class="event" style="height:'.$height.'px;">';
  1184. }
  1185. else{
  1186. $eventlayer .= '<div id="event_'.$cal['calendar']->day_slice[$slice]->start_time->hour.'_'.$i.'" class="event" style="height:'.$height.'px;" '.$javacript_str.'>';
  1187. }
  1188. $eventlayer .='<table border="0" cellpadding="1" cellspacing="0" width="100%">
  1189. <tr>
  1190. <td width="10%" align="center"><img src="'.$image.'" align="middle" border="0"></td>
  1191. <td width="90%"><b>'.$start_hour.' - '.$end_hour.'</b></td>
  1192. </tr>
  1193. <tr>
  1194. <td align="center">'.$recurring.'</td>';
  1195. if(($current_user->column_fields['is_admin']!='on' && $adb->num_rows($role_list)==0 && (($adb->num_rows($is_shared)==0 && ($visibility=='Public' || $visibility=='Private')) || $visibility=='Private')) && $userName!=$user)
  1196. {
  1197. $eventlayer .= '<td><font color="silver"><b>'.$user.'-'.$mod_strings['LBL_BUSY'].'</b></font></td>';
  1198. }else{//CALUSER CUST END
  1199. $eventlayer .= '<td><a href="index.php?action=DetailView&module=Calendar&record='.$id.'&activity_mode=Events&viewtype=calendar&parenttab='.$category.'"><span class="orgTab">'.$subject.'</span></a></td>
  1200. </tr>
  1201. <tr><td align="center">';
  1202. if($act[$i]->shared)
  1203. $eventlayer .= '<img src="' . vtiger_imageurl('cal12x12Shared.gif', $theme). '" align="middle" border="0">';
  1204. else
  1205. $eventlayer .= '&nbsp;';
  1206. $eventlayer .= '</td><td>('.$user.' | '.getTranslatedString($eventstatus).' | '.getTranslatedString($priority).')</td></tr><tr><td align="center">'.$action_str.'</td><td>&nbsp;</td></tr>';
  1207. }
  1208. $eventlayer .= '</table></div><br>';
  1209. }
  1210. $cal_log->debug("Exiting getweekEventLayer() method...");
  1211. return $eventlayer;
  1212. }
  1213. }
  1214. /**
  1215. * Function creates HTML To display events in month view
  1216. * @param array $cal - collection of objects and strings
  1217. * @param string $slice - date(eg: 2006-07-13)
  1218. * returns string $eventlayer - hmtl in string format
  1219. */
  1220. function getmonthEventLayer(& $cal,$slice)
  1221. {
  1222. global $mod_strings,$cal_log,$adb,$current_user,$theme;
  1223. $category = getParentTab();
  1224. $cal_log->debug("Entering getmonthEventLayer() method...");
  1225. $eventlayer = '';
  1226. $arrow_img_name = '';
  1227. $act = $cal['calendar']->month_array[$slice]->activities;
  1228. if(!empty($act))
  1229. {
  1230. $no_of_act = count($act);
  1231. if($no_of_act>2)
  1232. {
  1233. $act_row = 2;
  1234. $remin_list = $no_of_act - $act_row;
  1235. }
  1236. else
  1237. {
  1238. $act_row = $no_of_act;
  1239. $remin_list = null;
  1240. }
  1241. for($i=0;$i<$act_row;$i++)
  1242. {
  1243. $arrow_img_name = 'event'.$cal['calendar']->month_array[$slice]->start_time->hour.'_'.$i;
  1244. $id = $act[$i]->record;
  1245. $subject = $act[$i]->subject;
  1246. if(strlen($subject)>10)
  1247. $subject = substr($subject,0,10)."...";
  1248. $format = $cal['calendar']->hour_format;
  1249. $start_hour = timeString($act[$i]->start_time,$format);
  1250. $end_hour = timeString($act[$i]->end_time,$format);
  1251. $account_name = $act[$i]->accountname;
  1252. $image = vtiger_imageurl($act[$i]->image_name, $theme);
  1253. $color = $act[$i]->color;
  1254. //Added for User Based Customview for Calendar Module
  1255. $visibility_query=$adb->pquery('SELECT visibility from vtiger_activity where activityid=?',array($id));
  1256. $visibility = $adb->query_result($visibility_query,0,'visibility');
  1257. $user_query = $adb->pquery("SELECT vtiger_crmentity.smownerid,vtiger_users.user_name from vtiger_crmentity,vtiger_users where crmid=? and vtiger_crmentity.smownerid=vtiger_users.id", array($id));
  1258. $userid = $adb->query_result($user_query,0,"smownerid");
  1259. $username = $adb->query_result($user_query,0,"user_name");
  1260. $assigned_role_query=$adb->pquery("select roleid from vtiger_user2role where userid=?",array($userid));
  1261. $assinged_role_id = $adb->query_result($assigned_role_query,0,"roleid");
  1262. $role_list = $adb->pquery("SELECT * from vtiger_role WHERE parentrole LIKE '". formatForSqlLike($current_user->column_fields['roleid']) . formatForSqlLike($assinged_role_id) ."'",array());
  1263. $is_shared = $adb->pquery("SELECT * from vtiger_sharedcalendar where userid=? and sharedid=?",array($userid,$current_user->id));
  1264. if(($current_user->column_fields['is_admin']!='on' && $adb->num_rows($role_list)==0 && (($adb->num_rows($is_shared)==0 && ($visibility=='Public' || $visibility=='Private')) || $visibility=='Private')) && $current_user->id != $userid)
  1265. {
  1266. $eventlayer .='<div class ="event" id="event_'.$cal['calendar']->month_array[$slice]->start_time->hour.'_'.$i.'">
  1267. <nobr><img src="'.$image.'" border="0"></img>&nbsp;'.$username.' - '.$mod_strings["LBL_BUSY"].'</nobr>
  1268. </div><br>';
  1269. }else{
  1270. $eventlayer .='<div class ="event" id="event_'.$cal['calendar']->month_array[$slice]->start_time->hour.'_'.$i.'">
  1271. <nobr><img src="'.$image.'" border="0"></img>&nbsp;<a href="index.php?action=DetailView&module=Calendar&record='.$id.'&activity_mode=Events&viewtype=calendar&parenttab='.$category.'"><span class="orgTab">'.$start_hour.' - '.$end_hour.'</span></a></nobr>
  1272. </div><br>';
  1273. }
  1274. }
  1275. if($remin_list != null)
  1276. {
  1277. $eventlayer .='<div valign=bottom align=right width=10%>
  1278. <a href="index.php?module=Calendar&action=index&view='.$cal['calendar']->month_array[$slice]->getView().'&'.$cal['calendar']->month_array[$slice]->start_time->get_date_str().'&parenttab='.$category.'" class="webMnu">
  1279. +'.$remin_list.'&nbsp;'.$mod_strings['LBL_MORE'].'</a></div>';
  1280. }
  1281. $cal_log->debug("Exiting getmonthEventLayer() method...");
  1282. return $eventlayer;
  1283. }
  1284. }
  1285. /**
  1286. * Function to get events list scheduled between specified dates
  1287. * @param array $calendar - collection of objects and strings
  1288. * @param string $start_date - date string
  1289. * @param string $end_date - date string
  1290. * @param string $info - string 'listcnt' or empty string. if 'listcnt' means it returns no. of events and no. of pending events in array format else it returns events list in array format
  1291. * return array $Entries - eventslists in array format
  1292. */
  1293. function getEventList(& $calendar,$start_date,$end_date,$info='')
  1294. {
  1295. global $log,$theme;
  1296. $Entries = Array();
  1297. $category = getParentTab();
  1298. global $adb,$current_user,$mod_strings,$app_strings,$cal_log,$listview_max_textlength,$list_max_entries_per_page;
  1299. require('user_privileges/user_privileges_'.$current_user->id.'.php');
  1300. require('user_privileges/sharing_privileges_'.$current_user->id.'.php');
  1301. $cal_log->debug("Entering getEventList() method...");
  1302. $and = "AND (
  1303. (
  1304. (
  1305. (to_timestamp(date_start || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(date_start ||' ' ||time_start, 'YYYY-MM-DD HH24:MI:SS') <= ?)
  1306. OR (to_timestamp(due_date || ' ' || time_end, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(due_date ||' ' ||time_end, 'YYYY-MM-DD HH24:MI:SS') <= ? )
  1307. OR (to_timestamp(date_start || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') <= ? AND to_timestamp(due_date ||' ' ||time_end, 'YYYY-MM-DD HH24:MI:SS') >= ?)
  1308. )
  1309. AND vtiger_recurringevents.activityid is NULL
  1310. )
  1311. OR (
  1312. (to_timestamp(vtiger_recurringevents.recurringdate || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') >= ?
  1313. AND to_timestamp(vtiger_recurringevents.recurringdate || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') <= ?)
  1314. OR (to_timestamp(due_date || ' ' ||time_end, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(due_date || ' ' ||time_end, 'YYYY-MM-DD HH24:MI:SS') <= ?)
  1315. OR (to_timestamp(vtiger_recurringevents.recurringdate || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') <= ?
  1316. AND to_timestamp(due_date || ' ' ||time_end, 'YYYY-MM-DD HH24:MI:SS') >= ?)
  1317. )
  1318. )";
  1319. $userNameSql = getSqlForNameInDisplayFormat(array('first_name'=>
  1320. 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
  1321. $query = "select * from ( SELECT distinct on (vtiger_activity.activityid) vtiger_groups.groupname, $userNameSql as user_name,vtiger_crmentity.smownerid, vtiger_crmentity.crmid,
  1322. vtiger_activity.* FROM vtiger_activity
  1323. INNER JOIN vtiger_crmentity
  1324. ON vtiger_crmentity.crmid = vtiger_activity.activityid
  1325. LEFT JOIN vtiger_groups
  1326. ON vtiger_groups.groupid = vtiger_crmentity.smownerid
  1327. LEFT JOIN vtiger_users
  1328. ON vtiger_users.id = vtiger_crmentity.smownerid
  1329. LEFT OUTER JOIN vtiger_recurringevents
  1330. ON vtiger_recurringevents.activityid = vtiger_activity.activityid
  1331. WHERE vtiger_crmentity.deleted = 0
  1332. AND (vtiger_activity.activitytype not in ('Emails','Task')) $and ";
  1333. $list_query = $query." AND vtiger_crmentity.smownerid = " . $current_user->id;
  1334. // User Select Customization: Changes should made also in (Appointment::readAppointment)
  1335. $query_filter_prefix = calendarview_getSelectedUserFilterQuerySuffix();
  1336. $query .= $query_filter_prefix;
  1337. $count_query .= $query_filter_prefix;
  1338. // END
  1339. $startDate = new DateTimeField($start_date.' 00:00');
  1340. $endDate = new DateTimeField($end_date. ' 23:59');
  1341. $params = $info_params = array(
  1342. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1343. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1344. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1345. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1346. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1347. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue()
  1348. );
  1349. if($info != '')
  1350. {
  1351. $groupids = explode(",", fetchUserGroupids($current_user->id)); // Explode can be removed, once implode is removed from fetchUserGroupids
  1352. if (count($groupids) > 0) {
  1353. $com_q = " AND (vtiger_crmentity.smownerid = ?
  1354. OR vtiger_groups.groupid in (". generateQuestionMarks($groupids) ."))
  1355. order BY vtiger_activity.activityid ) as t ";
  1356. } else {
  1357. $com_q = " AND vtiger_crmentity.smownerid = ?
  1358. order BY vtiger_activity.activityid ) as t ";
  1359. }
  1360. $pending_query = $query." AND (vtiger_activity.eventstatus = 'Planned')".$com_q;
  1361. $total_q = $query."".$com_q;
  1362. array_push($info_params, $current_user->id);
  1363. if (count($groupids) > 0) {
  1364. array_push($info_params, $groupids);
  1365. }
  1366. $total_res = $adb->pquery($total_q, $info_params);
  1367. $total = $adb->num_rows($total_res);
  1368. $res = $adb->pquery($pending_query, $info_params);
  1369. $pending_rows = $adb->num_rows($res);
  1370. $cal_log->debug("Exiting getEventList() method...");
  1371. return Array('totalevent'=>$total,'pendingevent'=>$pending_rows);
  1372. }
  1373. if($is_admin==false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[16] == 3)
  1374. {
  1375. $sec_parameter=getCalendarViewSecurityParameter();
  1376. $query .= $sec_parameter;
  1377. }
  1378. if(isset($_REQUEST['type']) && $_REQUEST['type'] == 'search')
  1379. {
  1380. $search_where = calendar_search_where($_REQUEST['field_name'],$_REQUEST['search_option'],$_REQUEST['search_text']);
  1381. $group_cond .= $search_where;
  1382. }
  1383. $group_cond .= " order BY vtiger_activity.activityid ) as t ORDER BY t.date_start,t.time_start ASC";
  1384. //Ticket 6476
  1385. if(PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false) === true){
  1386. $count_result = $adb->pquery( mkCountQuery( $query),$params);
  1387. $noofrows = $adb->query_result($count_result,0,"count");
  1388. }else{
  1389. $noofrows = null;
  1390. }
  1391. global $currentModule;
  1392. $queryMode = (isset($_REQUEST['query']) && $_REQUEST['query'] == 'true');
  1393. //$viewid is used as a key for cache query and other info so pass the dates as viewid
  1394. $viewid = $start_date.$end_date;
  1395. $start = ListViewSession::getRequestCurrentPage($currentModule, $adb->convert2sql($query,
  1396. $params), $viewid, $queryMode);
  1397. $navigation_array = VT_getSimpleNavigationValues($start,$list_max_entries_per_page,$noofrows);
  1398. //end
  1399. $start_rec = ($start-1) * $list_max_entries_per_page;
  1400. $end_rec = $navigation_array['end_val'];
  1401. //print_r($navigation_array);die();
  1402. //echo $end_rec.'val';
  1403. $list_query = $adb->convert2Sql($query, $params);
  1404. $_SESSION['Calendar_listquery'] = $list_query;
  1405. if($start_rec < 0)
  1406. $start_rec = 0;
  1407. $query .= $group_cond." limit $list_max_entries_per_page offset $start_rec ";
  1408. //if( $adb->dbType == "pgsql"){
  1409. // $query = fixPostgresQuery($query, $log, 0);
  1410. //}
  1411. $result = $adb->pquery($query, $params);
  1412. $rows = $adb->num_rows($result);
  1413. $c = 0;
  1414. if($start > 1)
  1415. $c = ($start-1) * $list_max_entries_per_page;
  1416. for($i=0;$i<$rows;$i++)
  1417. {
  1418. $element = Array();
  1419. $element['no'] = $c+1;
  1420. $image_tag = "";
  1421. $contact_data = "";
  1422. $more_link = "";
  1423. $start_time = $adb->query_result($result,$i,"time_start");
  1424. $end_time = $adb->query_result($result,$i,"time_end");
  1425. $date_start = $adb->query_result($result,$i,"date_start");
  1426. $due_date = $adb->query_result($result,$i,"due_date");
  1427. $date = new DateTimeField($date_start.' '.$start_time);
  1428. $endDate = new DateTimeField($due_date.' '.$end_time);
  1429. if(!empty($start_time)){
  1430. $start_time = $date->getDisplayTime();
  1431. }
  1432. if(!empty($end_time)){
  1433. $end_time = $endDate->getDisplayTime();
  1434. }
  1435. $format = $calendar['calendar']->hour_format;
  1436. $value = getaddEventPopupTime($start_time,$end_time,$format);
  1437. $start_hour = $value['starthour'].':'.$value['startmin'].''.$value['startfmt'];
  1438. $end_hour = $value['endhour'] .':'.$value['endmin'].''.$value['endfmt'];
  1439. $element['starttime'] = $date->getDisplayDate().' '.$start_hour;
  1440. $element['endtime'] = $endDate->getDisplayDate().' '.$end_hour;
  1441. $contact_id = $adb->query_result($result,$i,"contactid");
  1442. $id = $adb->query_result($result,$i,"activityid");
  1443. $subject = $adb->query_result($result,$i,"subject");
  1444. $eventstatus = $adb->query_result($result,$i,"eventstatus");
  1445. $assignedto = $adb->query_result($result,$i,"user_name");
  1446. $userid = $adb->query_result($result,$i,"smownerid");
  1447. $idShared = "normal";
  1448. if(!empty($assignedto) && $userid != $current_user->id && $adb->query_result($result,$i,"visibility") == "Public")
  1449. {
  1450. $que = "select * from vtiger_sharedcalendar where sharedid=? and userid=?";
  1451. $row = $adb->pquery($que, array($current_user->id, $userid));
  1452. $no = $adb->getRowCount($row);
  1453. if($no > 0) $idShared = "shared";
  1454. else $idShared = "normal";
  1455. }
  1456. if($listview_max_textlength && (strlen($subject)>$listview_max_textlength))
  1457. $subject = substr($subject,0,$listview_max_textlength)."...";
  1458. if($contact_id != '')
  1459. {
  1460. $displayValueArray = getEntityName('Contacts', $contact_id);
  1461. if (!empty($displayValueArray)) {
  1462. foreach ($displayValueArray as $key => $field_value) {
  1463. $contactname = $field_value;
  1464. }
  1465. }
  1466. $contact_data = "<b>".$contactname."</b>,";
  1467. }
  1468. $more_link = "<a href='index.php?action=DetailView&module=Calendar&record=".$id."&activity_mode=Events&viewtype=calendar&parenttab=".$category."' class='webMnu'>[".$mod_strings['LBL_MORE']."...]</a>";
  1469. $type = $adb->query_result($result,$i,"activitytype");
  1470. if($type == 'Call')
  1471. $image_tag = "<img src='" . vtiger_imageurl('Calls.gif', $theme). "' align='middle'>&nbsp;".$app_strings['Call'];
  1472. else if($type == 'Meeting')
  1473. $image_tag = "<img src='" . vtiger_imageurl('Meetings.gif', $theme). "' align='middle'>&nbsp;".$app_strings['Meeting'];
  1474. else
  1475. $image_tag = "&nbsp;".getTranslatedString($type);
  1476. $element['eventtype'] = $image_tag;
  1477. $element['eventdetail'] = $contact_data." ".$subject."&nbsp;".$more_link;
  1478. /*if(getFieldVisibilityPermission('Events',$current_user->id,'parent_id') == '0')
  1479. {
  1480. $element['relatedto']= getRelatedTo('Calendar',$result,$i);
  1481. }*/
  1482. if($idShared == "normal")
  1483. {
  1484. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete")=="yes")
  1485. $element['action'] ="<img onClick='getcalAction(this,\"eventcalAction\",".$id.",\"".$calendar['view']."\",\"".$calendar['calendar']->date_time->hour."\",\"".$calendar['calendar']->date_time->get_DB_formatted_date()."\",\"event\");' src='" . vtiger_imageurl('cal_event.jpg', $theme). "' border='0'>";
  1486. }
  1487. else
  1488. {
  1489. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete")=="yes")
  1490. $element['action']="<img onClick=\"alert('".$mod_strings["SHARED_EVENT_DEL_MSG"]."')\"; src='" . vtiger_imageurl('cal_event.jpg', $theme). "' border='0'>";
  1491. }
  1492. if(getFieldVisibilityPermission('Events',$current_user->id,'eventstatus') == '0')
  1493. {
  1494. if(!$is_admin && $eventstatus != '')
  1495. {
  1496. $roleid=$current_user->roleid;
  1497. $roleids = Array();
  1498. $subrole = getRoleSubordinates($roleid);
  1499. if(count($subrole)> 0)
  1500. $roleids = $subrole;
  1501. array_push($roleids, $roleid);
  1502. //here we are checking wheather the table contains the sortorder column .If sortorder is present in the main picklist table, then the role2picklist will be applicable for this table...
  1503. $sql="select * from vtiger_eventstatus where eventstatus=?";
  1504. $res = $adb->pquery($sql,array(decode_html($eventstatus)));
  1505. $picklistvalueid = $adb->query_result($res,0,'picklist_valueid');
  1506. if ($picklistvalueid != null) {
  1507. $pick_query="select * from vtiger_role2picklist where picklistvalueid=$picklistvalueid and roleid in (". generateQuestionMarks($roleids) .")";
  1508. $res_val=$adb->pquery($pick_query,array($roleids));
  1509. $num_val = $adb->num_rows($res_val);
  1510. }
  1511. if($num_val > 0)
  1512. $element['status'] = getTranslatedString(decode_html($eventstatus));
  1513. else
  1514. $element['status'] = "<font color='red'>".$app_strings['LBL_NOT_ACCESSIBLE']."</font>";
  1515. }else
  1516. $element['status'] = getTranslatedString(decode_html($eventstatus));
  1517. }
  1518. if(!empty($assignedto))
  1519. $element['assignedto'] = $assignedto;
  1520. else
  1521. $element['assignedto'] = $adb->query_result($result,$i,"groupname");
  1522. $element['visibility'] = $adb->query_result($result,$i,"visibility");
  1523. $c++;
  1524. $Entries[] = $element;
  1525. }
  1526. $ret_arr[0] = $Entries;
  1527. $ret_arr[1] = $navigation_array;
  1528. $cal_log->debug("Exiting getEventList() method...");
  1529. return $ret_arr;
  1530. }
  1531. /**
  1532. * Function to get todos list scheduled between specified dates
  1533. * @param array $calendar - collection of objects and strings
  1534. * @param string $start_date - date string
  1535. * @param string $end_date - date string
  1536. * @param string $info - string 'listcnt' or empty string. if 'listcnt' means it returns no. of todos and no. of pending todos in array format else it returns todos list in array format
  1537. * return array $Entries - todolists in array format
  1538. */
  1539. function getTodoList(& $calendar,$start_date,$end_date,$info='')
  1540. {
  1541. global $log,$app_strings,$theme;
  1542. $Entries = Array();
  1543. $category = getParentTab();
  1544. global $adb,$current_user,$mod_strings,$cal_log,$list_max_entries_per_page;
  1545. $cal_log->debug("Entering getTodoList() method...");
  1546. require('user_privileges/user_privileges_'.$current_user->id.'.php');
  1547. require('user_privileges/sharing_privileges_'.$current_user->id.'.php');
  1548. $userNameSql = getSqlForNameInDisplayFormat(array('first_name'=>
  1549. 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
  1550. $query = "SELECT vtiger_groups.groupname, $userNameSql as user_name, vtiger_crmentity.crmid, vtiger_cntactivityrel.contactid,
  1551. vtiger_activity.* FROM vtiger_activity
  1552. INNER JOIN vtiger_crmentity
  1553. ON vtiger_crmentity.crmid = vtiger_activity.activityid
  1554. LEFT JOIN vtiger_cntactivityrel
  1555. ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid
  1556. LEFT JOIN vtiger_groups
  1557. ON vtiger_groups.groupid = vtiger_crmentity.smownerid
  1558. LEFT JOIN vtiger_users
  1559. ON vtiger_users.id = vtiger_crmentity.smownerid";
  1560. $query .= getNonAdminAccessControlQuery('Calendar',$current_user);
  1561. $query .= "WHERE vtiger_crmentity.deleted = 0 AND vtiger_activity.activitytype = 'Task'".
  1562. " AND ((to_timestamp(date_start || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(date_start || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') <= ?)
  1563. OR (to_timestamp(due_date || ' ' || time_end, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(due_date || ' ' || time_end, 'YYYY-MM-DD HH24:MI:SS') <= ? )
  1564. OR (to_timestamp(date_start || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS') <= ? AND to_timestamp(due_date || ' ' || time_end, 'YYYY-MM-DD HH24:MI:SS') >= ?)
  1565. )";
  1566. $list_query = $query." AND vtiger_crmentity.smownerid = " . $current_user->id;
  1567. $startDate = new DateTimeField($start_date.' 00:00');
  1568. $endDate = new DateTimeField($end_date. ' 23:59');
  1569. $params = $info_params = array($startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1570. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(),
  1571. $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue());
  1572. if($info != '')
  1573. {
  1574. //added to fix #4816
  1575. $groupids = explode(",", fetchUserGroupids($current_user->id));
  1576. if (count($groupids) > 0 && !is_admin($current_user)) {
  1577. $com_q = " AND (vtiger_crmentity.smownerid = ?
  1578. OR vtiger_groups.groupid in (". generateQuestionMarks($groupids) ."))";
  1579. array_push($info_params, $current_user->id);
  1580. array_push($info_params, $groupids);
  1581. } elseif(!is_admin($current_user)) {
  1582. $com_q = " AND vtiger_crmentity.smownerid = ?";
  1583. array_push($info_params, $current_user->id);
  1584. }
  1585. //end
  1586. $pending_query = $query." AND (vtiger_activity.status != 'Completed')".$com_q;
  1587. $total_q = $query."".$com_q;
  1588. //if( $adb->dbType == "pgsql")
  1589. //{
  1590. // $pending_query = fixPostgresQuery( $pending_query, $log, 0);
  1591. // $total_q = fixPostgresQuery( $total_q, $log, 0);
  1592. //}
  1593. $total_res = $adb->pquery($total_q, $info_params);
  1594. $total = $adb->num_rows($total_res);
  1595. $res = $adb->pquery($pending_query, $info_params);
  1596. $pending_rows = $adb->num_rows($res);
  1597. $cal_log->debug("Exiting getTodoList() method...");
  1598. return Array('totaltodo'=>$total,'pendingtodo'=>$pending_rows);
  1599. }
  1600. $group_cond = '';
  1601. $group_cond .= " ORDER BY vtiger_activity.date_start,vtiger_activity.time_start ASC";
  1602. if(isset($_REQUEST['start']) && $_REQUEST['start'] != '')
  1603. $start = vtlib_purify($_REQUEST['start']);
  1604. else
  1605. $start = 1;
  1606. //T6477 changes
  1607. if(PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false) === true){
  1608. $count_res = $adb->pquery(mkCountQuery($query), $params);
  1609. $total_rec_count = $adb->query_result($count_res,0,'count');
  1610. }else{
  1611. $total_rec_count = null;
  1612. }
  1613. $navigation_array = VT_getSimpleNavigationValues($start,$list_max_entries_per_page,$total_rec_count);
  1614. $start_rec = ($start-1) * $list_max_entries_per_page;
  1615. $end_rec = $navigation_array['end_val'];
  1616. $list_query = $adb->convert2Sql($query, $params);
  1617. $_SESSION['Calendar_listquery'] = $list_query;
  1618. if($start_rec < 0)
  1619. $start_rec = 0;
  1620. //ends
  1621. $query .= $group_cond." offset $start_rec limit $list_max_entries_per_page";
  1622. //if( $adb->dbType == "pgsql"){
  1623. // $query = fixPostgresQuery( $query, $log, 0);
  1624. //}
  1625. $result = $adb->pquery($query, $params);
  1626. $rows = $adb->num_rows($result);
  1627. $c=0;
  1628. if($start > 1)
  1629. $c = ($start-1) * $list_max_entries_per_page;
  1630. for($i=0;$i<$rows;$i++)
  1631. {
  1632. $element = Array();
  1633. $contact_name = '';
  1634. $element['no'] = $c+1;
  1635. $more_link = "";
  1636. $start_time = $adb->query_result($result,$i,"time_start");
  1637. $date_start = $adb->query_result($result,$i,"date_start");
  1638. $due_date = $adb->query_result($result,$i,"due_date");
  1639. $date = new DateTimeField($date_start.' '.$start_time);
  1640. $endDate = new DateTimeField($due_date);
  1641. if(!empty($start_time)){
  1642. $start_time = $date->getDisplayTime();
  1643. }
  1644. $format = $calendar['calendar']->hour_format;
  1645. $value = getaddEventPopupTime($start_time,$start_time,$format);
  1646. $element['starttime'] = $value['starthour'].':'.$value['startmin'].''.$value['startfmt'];
  1647. $element['startdate'] = $date->getDisplayDate();
  1648. $element['duedate'] = $endDate->getDisplayDate();
  1649. $id = $adb->query_result($result,$i,"activityid");
  1650. $subject = $adb->query_result($result,$i,"subject");
  1651. $more_link = "<a href='index.php?action=DetailView&module=Calendar&record=".$id."&activity_mode=Task&viewtype=calendar&parenttab=".$category."' class='webMnu'>".$subject."</a>";
  1652. $element['tododetail'] = $more_link;
  1653. if(getFieldVisibilityPermission('Calendar',$current_user->id,'taskstatus') == '0')
  1654. {
  1655. $taskstatus = $adb->query_result($result,$i,"status");
  1656. if(!$is_admin && $taskstatus != '')
  1657. {
  1658. $roleid=$current_user->roleid;
  1659. $roleids = Array();
  1660. $subrole = getRoleSubordinates($roleid);
  1661. if(count($subrole)> 0)
  1662. $roleids = $subrole;
  1663. array_push($roleids, $roleid);
  1664. //here we are checking wheather the table contains the sortorder column .If sortorder is present in the main picklist table, then the role2picklist will be applicable for this table...
  1665. $sql="select * from vtiger_taskstatus where taskstatus=?";
  1666. $res = $adb->pquery($sql,array(decode_html($taskstatus)));
  1667. $picklistvalueid = $adb->query_result($res,0,'picklist_valueid');
  1668. if ($picklistvalueid != null) {
  1669. $pick_query="select * from vtiger_role2picklist where picklistvalueid=$picklistvalueid and roleid in (". generateQuestionMarks($roleids) .")";
  1670. $res_val=$adb->pquery($pick_query,array($roleids));
  1671. $num_val = $adb->num_rows($res_val);
  1672. }
  1673. if($num_val > 0)
  1674. $element['status'] = getTranslatedString(decode_html($taskstatus));
  1675. else
  1676. $element['status'] = "<font color='red'>".$app_strings['LBL_NOT_ACCESSIBLE']."</font>";
  1677. }else
  1678. $element['status'] = getTranslatedString(decode_html($taskstatus));
  1679. }
  1680. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete") == "yes")
  1681. $element['action'] ="<img onClick='getcalAction(this,\"taskcalAction\",".$id.",\"".$calendar['view']."\",\"".$calendar['calendar']->date_time->hour."\",\"".$calendar['calendar']->date_time->get_DB_formatted_date()."\",\"todo\");' src='" . vtiger_imageurl('cal_event.jpg', $theme). "' border='0'>";
  1682. $assignedto = $adb->query_result($result,$i,"user_name");
  1683. if(!empty($assignedto))
  1684. $element['assignedto'] = $assignedto;
  1685. else
  1686. $element['assignedto'] = $adb->query_result($result,$i,"groupname");
  1687. $c++;
  1688. $Entries[] = $element;
  1689. }
  1690. $ret_arr[0] = $Entries;
  1691. $ret_arr[1] = $navigation_array;
  1692. $cal_log->debug("Exiting getTodoList() method...");
  1693. return $ret_arr;
  1694. }
  1695. /**
  1696. * Function to get number of Events and Todos Info
  1697. * @param array $cal - collection of objects and strings
  1698. * @param string $mode - string 'listcnt' or may be empty. if empty means get Events/Todos ListView else get total events/todos and no. of pending events/todos Info.
  1699. * return array $event_todo_info - collection of events/todos info.
  1700. */
  1701. function getEventInfo(& $cal, $mode)
  1702. {
  1703. global $mod_strings,$cal_log;
  1704. $cal_log->debug("Entering getEventInfo() method...");
  1705. $event = Array();
  1706. $event['event']=getEventListView($cal, $mode);
  1707. $event_info = "";
  1708. $event_info .= $mod_strings['LBL_TOTALEVENTS']."&nbsp;".$event['event']['totalevent'];
  1709. if($event['event']['pendingevent'] != null)
  1710. $event_info .= ", ".$event['event']['pendingevent']."&nbsp;".$mod_strings['LBL_PENDING'];
  1711. $cal_log->debug("Exiting getEventInfo() method...");
  1712. return $event_info;
  1713. }
  1714. function getTodoInfo(& $cal, $mode)
  1715. {
  1716. global $mod_strings,$cal_log;
  1717. $cal_log->debug("Entering getTodoInfo() method...");
  1718. $todo = Array();
  1719. $todo['todo'] = getTodosListView($cal, $mode);
  1720. $todo_info = "";
  1721. $todo_info .=$mod_strings['LBL_TOTALTODOS']."&nbsp;".$todo['todo']['totaltodo'];
  1722. if($todo['todo']['pendingtodo'] != null)
  1723. $todo_info .= ", ".$todo['todo']['pendingtodo']."&nbsp;".$mod_strings['LBL_PENDING'];
  1724. $cal_log->debug("Exiting getTodoInfo() method...");
  1725. return $todo_info;
  1726. }
  1727. /**
  1728. * Function creates HTML to display Events ListView
  1729. * @param array $entry_list - collection of strings(Event Information)
  1730. * return string $list_view - html tags in string format
  1731. */
  1732. function constructEventListView(& $cal,$entry_list,$navigation_array='')
  1733. {
  1734. global $mod_strings,$app_strings,$adb,$cal_log,$current_user,$theme;
  1735. $cal_log->debug("Entering constructEventListView() method...");
  1736. $format = $cal['calendar']->hour_format;
  1737. $date_format = $current_user->date_format;
  1738. $date = new DateTimeField(null);
  1739. $endDate = new DateTimeField(date("Y-m-d H:i:s", (time() +
  1740. (1 * 24 * 60 * 60))));
  1741. $hour_startat = $date->getDisplayTime();
  1742. $hour_endat = $endDate->getDisplayTime();
  1743. $time_arr = getaddEventPopupTime($hour_startat,$hour_endat,$format);
  1744. $temp_ts = $cal['calendar']->date_time->ts;
  1745. //to get date in user selected date format
  1746. $temp_date = $date->getDisplayDate();
  1747. if($cal['calendar']->day_start_hour != 23)
  1748. $endtemp_date = $temp_date;
  1749. else
  1750. {
  1751. $endtemp_date = $endDate->getDisplayDate();
  1752. }
  1753. $list_view = "";
  1754. $start_datetime = $app_strings['LBL_START_DATE_TIME'];
  1755. $end_datetime = $app_strings['LBL_END_DATE_TIME'];
  1756. //Events listview header labels
  1757. $header = Array('0'=>'#',
  1758. '1'=>$start_datetime,
  1759. '2'=>$end_datetime,
  1760. '3'=>$mod_strings['LBL_EVENTTYPE'],
  1761. '4'=>$mod_strings['LBL_EVENTDETAILS']
  1762. );
  1763. $header_width = Array('0'=>'5%',
  1764. '1'=>'15%',
  1765. '2'=>'15%',
  1766. '3'=>'10%',
  1767. '4'=>'33%'
  1768. );
  1769. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete") == "yes")
  1770. {
  1771. array_push($header,$mod_strings['LBL_ACTION']);
  1772. array_push($header_width,'10%');
  1773. }
  1774. if(getFieldVisibilityPermission('Events',$current_user->id,'eventstatus') == '0')
  1775. {
  1776. array_push($header,$mod_strings['LBL_STATUS']);
  1777. array_push($header_width,'$10%');
  1778. }
  1779. array_push($header,$mod_strings['LBL_ASSINGEDTO']);
  1780. array_push($header_width,'15%');
  1781. $list_view .="<table style='background-color: rgb(204, 204, 204);' class='small' align='center' border='0' cellpadding='5' cellspacing='1' width='98%'>
  1782. <tr>";
  1783. $header_rows = count($header);
  1784. $navigationOutput = getTableHeaderSimpleNavigation($navigation_array, $url_string,"Calendar","index");
  1785. if($navigationOutput != '') {
  1786. $list_view .= "<tr width=100% bgcolor=white><td align=center colspan=$header_rows>";
  1787. $list_view .= "<table align=center width='98%'><tr>".$navigationOutput."</tr></table></td></tr>";
  1788. }
  1789. $list_view .= "<tr>";
  1790. for($i=0;$i<$header_rows;$i++) {
  1791. $list_view .="<td nowrap='nowrap' class='lvtCol' width='".$header_width[$i]."'>".$header[$i]."</td>";
  1792. }
  1793. $list_view .="</tr>";
  1794. $rows = count($entry_list);
  1795. if($rows != 0) {
  1796. $userName = getFullNameFromArray('Users', $current_user->column_fields);
  1797. for($i=0;$i<count($entry_list);$i++) {
  1798. $list_view .="<tr class='lvtColData' onmouseover='this.className=\"lvtColDataHover\"' onmouseout='this.className=\"lvtColData\"' bgcolor='white'>";
  1799. $userNameSql = getSqlForNameInDisplayFormat(array('first_name'=>
  1800. 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
  1801. $assigned_role_query=$adb->pquery("select vtiger_user2role.roleid,vtiger_user2role.userid
  1802. from vtiger_user2role
  1803. INNER JOIN vtiger_users ON vtiger_users.id=vtiger_user2role.userid
  1804. WHERE $userNameSql=?",
  1805. array($entry_list[$i]['assignedto']));
  1806. $assigned_user_role_id = $adb->query_result($assigned_role_query,0,"roleid");
  1807. $assigned_user_id = $adb->query_result($assigned_role_query,0,"userid");
  1808. $role_list = $adb->pquery("SELECT * from vtiger_role WHERE parentrole LIKE '". formatForSqlLike($current_user->column_fields['roleid']) . formatForSqlLike($assigned_user_role_id) ."'",array());
  1809. $is_shared = $adb->pquery("SELECT * from vtiger_sharedcalendar where userid=? and sharedid=?",array($assigned_user_id,$current_user->id));
  1810. foreach($entry_list[$i] as $key=>$entry) {
  1811. if($key!='visibility') {
  1812. if(($key=='eventdetail'|| $key=='action')
  1813. && ($current_user->column_fields['is_admin']!='on'
  1814. && $adb->num_rows($role_list)==0
  1815. && ($adb->num_rows($is_shared)==0 || $entry_list[$i]['visibility']=='Private'))
  1816. && $userName!=$entry_list[$i]['assignedto']) {
  1817. if($key=='eventdetail')
  1818. $list_view .="<td nowrap='nowrap'><font color='red'><b>".$entry_list[$i]['assignedto']." - ".$mod_strings['LBL_BUSY']."</b></font></td>";
  1819. else
  1820. $list_view .="<td nowrap='nowrap'><font color='red'>".$app_strings['LBL_NOT_ACCESSIBLE']."</font></td>";
  1821. }else
  1822. $list_view .="<td nowrap='nowrap'>$entry</td>";
  1823. }
  1824. }
  1825. $list_view .="</tr>";
  1826. }
  1827. }
  1828. else
  1829. {
  1830. $list_view .="<tr><td style='background-color:#efefef;height:340px' align='center' colspan='9'>
  1831. ";
  1832. $list_view .="<div style='border: 3px solid rgb(153, 153, 153); background-color: rgb(255, 255, 255); width: 45%; position: relative; z-index: 5000;'>
  1833. <table border='0' cellpadding='5' cellspacing='0' width='98%'>
  1834. <tr>
  1835. <td rowspan='2' width='25%'>
  1836. <img src='" . vtiger_imageurl('empty.jpg', $theme). "' height='60' width='61'></td>
  1837. <td style='border-bottom: 1px solid rgb(204, 204, 204);' nowrap='nowrap' width='75%'><span class='genHeaderSmall'>".$app_strings['LBL_NO']." ".$app_strings['Events']." ".$app_strings['LBL_FOUND']." !</span></td>
  1838. </tr>
  1839. <tr>";
  1840. //checking permission for Create/Edit Operation
  1841. if(isPermitted("Calendar","EditView") == "yes")
  1842. {
  1843. $list_view .="<td class='small' align='left' nowrap='nowrap'>".$app_strings['LBL_YOU_CAN_CREATE']."&nbsp;".$app_strings['LBL_AN']."&nbsp;".$app_strings['Event']."&nbsp;".$app_strings['LBL_NOW'].".&nbsp;".$app_strings['LBL_CLICK_THE_LINK'].":<br>
  1844. &nbsp;&nbsp;-<a href='javascript:void(0);' onClick='gshow(\"addEvent\",\"Call\",\"".$temp_date."\",\"".$endtemp_date."\",\"".$time_arr['starthour']."\",\"".$time_arr['startmin']."\",\"".$time_arr['startfmt']."\",\"".$time_arr['endhour']."\",\"".$time_arr['endmin']."\",\"".$time_arr['endfmt']."\",\"listview\",\"event\");'>".$app_strings['LBL_CREATE']."&nbsp;".$app_strings['LBL_AN']."&nbsp;".$app_strings['Event']."</a><br>
  1845. </td>";
  1846. }
  1847. else
  1848. {
  1849. $list_view .="<td class='small' align='left' nowrap='nowrap'>".$app_strings['LBL_YOU_ARE_NOT_ALLOWED_TO_CREATE']."&nbsp;".$app_strings['LBL_AN']."&nbsp;".$app_strings['Event']."<br></td>";
  1850. }
  1851. $list_view .="</tr>
  1852. </table>
  1853. </div>";
  1854. $list_view .="</td></tr>";
  1855. }
  1856. $list_view .="</table>";
  1857. $cal_log->debug("Exiting constructEventListView() method...");
  1858. return $list_view;
  1859. }
  1860. /**
  1861. * Function creates HTML to display Todos ListView
  1862. * @param array $todo_list - collection of strings(Todo Information)
  1863. * @param array $cal - collection of objects and strings
  1864. * return string $list_view - html tags in string format
  1865. */
  1866. function constructTodoListView($todo_list,$cal,$subtab,$navigation_array='')
  1867. {
  1868. global $mod_strings,$cal_log,$adb,$theme;
  1869. $cal_log->debug("Entering constructTodoListView() method...");
  1870. global $current_user,$app_strings;
  1871. $date_format = $current_user->date_format;
  1872. $format = $cal['calendar']->hour_format;
  1873. $date = new DateTimeField(null);
  1874. $endDate = new DateTimeField(date("Y-m-d H:i:s", (time() +
  1875. (1 * 24 * 60 * 60))));
  1876. $hour_startat = $date->getDisplayTime();
  1877. $hour_endat = $endDate->getDisplayTime();
  1878. $time_arr = getaddEventPopupTime($hour_startat,$hour_endat,$format);
  1879. //to get date in user selected date format
  1880. $temp_date = $date->getDisplayDate();
  1881. if($cal['calendar']->day_start_hour != 23)
  1882. $endtemp_date = $temp_date;
  1883. else {
  1884. $endtemp_date = $endDate->getDisplayDate();
  1885. }
  1886. $list_view = "";
  1887. //labels of listview header
  1888. if($cal['view'] == 'day')
  1889. {
  1890. $colspan = 9;
  1891. $header = Array('0'=>'#','1'=>$mod_strings['LBL_TIME'],
  1892. '2'=>$mod_strings['LBL_START_DATE'],
  1893. '3'=>$mod_strings['LBL_DUE_DATE'],
  1894. '4'=>$mod_strings['LBL_TODO']);
  1895. $header_width = Array('0'=>'5%','1'=>'10%','2'=>'10%','3'=>'38%',);
  1896. if(getFieldVisibilityPermission('Calendar',$current_user->id,'taskstatus') == '0')
  1897. {
  1898. array_push($header,$mod_strings['LBL_STATUS']);
  1899. array_push($header_width,'10%');
  1900. }
  1901. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete") == "yes")
  1902. {
  1903. array_push($header,$mod_strings['LBL_ACTION']);
  1904. array_push($header_width,'10%');
  1905. }
  1906. array_push($header,$mod_strings['LBL_ASSINGEDTO']);
  1907. array_push($header_width,'15%');
  1908. }
  1909. else
  1910. {
  1911. $colspan = 10;
  1912. $header = Array('0'=>'#',
  1913. '1'=>$mod_strings['LBL_TIME'],
  1914. '2'=>$mod_strings['LBL_START_DATE'],
  1915. '3'=>$mod_strings['LBL_DUE_DATE'],
  1916. '4'=>$mod_strings['LBL_TODO']
  1917. );
  1918. $header_width = Array('0'=>'5%',
  1919. '1'=>'10%',
  1920. '2'=>'10%',
  1921. '3'=>'10%',
  1922. '4'=>'28%'
  1923. );
  1924. if(getFieldVisibilityPermission('Calendar',$current_user->id,'taskstatus') == '0')
  1925. {
  1926. array_push($header,$mod_strings['LBL_STATUS']);
  1927. array_push($header_width,'10%');
  1928. }
  1929. if(isPermitted("Calendar","EditView") == "yes" || isPermitted("Calendar","Delete") == "yes")
  1930. {
  1931. array_push($header,$mod_strings['LBL_ACTION']);
  1932. }
  1933. array_push($header,$mod_strings['LBL_ASSINGEDTO']);
  1934. array_push($header_width,'15%');
  1935. }
  1936. if($current_user->column_fields['is_admin']=='on')
  1937. $Res = $adb->pquery("select * from vtiger_activitytype",array());
  1938. else
  1939. {
  1940. $roleid=$current_user->roleid;
  1941. $subrole = getRoleSubordinates($roleid);
  1942. if(count($subrole)> 0)
  1943. {
  1944. $roleids = $subrole;
  1945. array_push($roleids, $roleid);
  1946. }
  1947. else
  1948. {
  1949. $roleids = $roleid;
  1950. }
  1951. if (count($roleids) > 1) {
  1952. $Res=$adb->pquery("select distinct activitytype from vtiger_activitytype inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_activitytype.picklist_valueid where roleid in (". generateQuestionMarks($roleids) .") and picklistid in (select picklistid from vtiger_activitytype) order by sortid asc",array($roleids));
  1953. } else {
  1954. $Res=$adb->pquery("select distinct activitytype from vtiger_activitytype inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_activitytype.picklist_valueid where roleid = ? and picklistid in (select picklistid from vtiger_activitytype) order by sortid asc",array($roleid));
  1955. }
  1956. }
  1957. $eventlist='';
  1958. for($i=0; $i<$adb->num_rows($Res);$i++)
  1959. {
  1960. $eventlist .= $adb->query_result($Res,$i,'activitytype').";";
  1961. }
  1962. $list_view .="<table align='center' border='0' cellpadding='5' cellspacing='0' width='98%'>
  1963. <tr><td colspan='3'>&nbsp;</td></tr>";
  1964. //checking permission for Create/Edit Operation
  1965. if(isPermitted("Calendar","EditView") == "yes")
  1966. {
  1967. $list_view .="<tr>
  1968. <td class='calAddButton' onMouseOver='fnAddEvent(this,\"addEventDropDown\",\"".$temp_date."\",\"".$endtemp_date."\",\"".$time_arr['starthour']."\",\"".$time_arr['startmin']."\",\"".$time_arr['startfmt']."\",\"".$time_arr['endhour']."\",\"".$time_arr['endmin']."\",\"".$time_arr['endfmt']."\",\"\",\"".$subtab."\",\"".$eventlist."\");'style='border: 1px solid #666666;cursor:pointer;height:30px' align='center' width='10%'>
  1969. ".$mod_strings['LBL_ADD']."
  1970. <img src='".vtiger_imageurl('menuDnArrow.gif', $theme)."' style='padding-left: 5px;' border='0'> </td>";
  1971. }
  1972. else
  1973. {
  1974. $list_view .="<tr><td>&nbsp;</td>";
  1975. }
  1976. $list_view .="<td align='center' width='60%'><span id='total_activities'>".getTodoInfo($cal,'listcnt')."</span>&nbsp;</td>
  1977. <td align='right' width='28%'>&nbsp;</td>
  1978. </tr>
  1979. </table>
  1980. <br><table style='background-color: rgb(204, 204, 204);' class='small' align='center' border='0' cellpadding='5' cellspacing='1' width='98%'>
  1981. ";
  1982. $header_rows = count($header);
  1983. $navigationOutput = getTableHeaderSimpleNavigation($navigation_array, $url_string,"Calendar","index");
  1984. if($navigationOutput != '')
  1985. {
  1986. $list_view .= "<tr width=100% bgcolor=white><td align=center colspan=$header_rows>";
  1987. $list_view .= "<table align=center width='98%'><tr>".$navigationOutput."</tr></table></td></tr>";
  1988. }
  1989. $list_view .= "<tr>";
  1990. for($i=0;$i<$header_rows;$i++)
  1991. {
  1992. $list_view .="<td class='lvtCol' width='".$header_width[$i]."' nowrap='nowrap'>".$header[$i]."</td>";
  1993. }
  1994. $list_view .="</tr>";
  1995. $rows = count($todo_list);
  1996. if($rows != 0)
  1997. {
  1998. for($i=0;$i<count($todo_list);$i++)
  1999. {
  2000. $list_view .="<tr style='height: 25px;' bgcolor='white'>";
  2001. foreach($todo_list[$i] as $key=>$entry)
  2002. {
  2003. $list_view .="<td>".$entry."</td>";
  2004. }
  2005. $list_view .="</tr>";
  2006. }
  2007. }
  2008. else
  2009. {
  2010. $list_view .="<tr><td style='background-color:#efefef;height:340px' align='center' colspan='".$colspan."'>";
  2011. $list_view .="<div style='border: 3px solid rgb(153, 153, 153); background-color: rgb(255, 255, 255); width: 45%; position: relative; z-index: 5000;'>
  2012. <table border='0' cellpadding='5' cellspacing='0' width='98%'>
  2013. <tr>
  2014. <td rowspan='2' width='25%'>
  2015. <img src='" . vtiger_imageurl('empty.jpg', $theme). "' height='60' width='61'></td>
  2016. <td style='border-bottom: 1px solid rgb(204, 204, 204);' nowrap='nowrap' width='75%'><span class='genHeaderSmall'>".$app_strings['LBL_NO']." ".$app_strings['Todos']." ".$app_strings['LBL_FOUND']." !</span></td>
  2017. </tr>
  2018. <tr>";
  2019. //checking permission for Create/Edit Operation
  2020. if(isPermitted("Calendar","EditView") == "yes")
  2021. {
  2022. $list_view .="<td class='small' align='left' nowrap='nowrap'>".$app_strings['LBL_YOU_CAN_CREATE']."&nbsp;".$app_strings['LBL_A']."&nbsp;".$app_strings['Todo']."&nbsp;".$app_strings['LBL_NOW'].".&nbsp;".$app_strings['LBL_CLICK_THE_LINK']."&nbsp;:<br>
  2023. &nbsp;&nbsp;-<a href='javascript:void(0);' onClick='gshow(\"createTodo\",\"todo\",\"".$temp_date."\",\"".$temp_date."\",\"".$time_arr['starthour']."\",\"".$time_arr['startmin']."\",\"".$time_arr['startfmt']."\",\"".$time_arr['endhour']."\",\"".$time_arr['endmin']."\",\"".$time_arr['endfmt']."\",\"listview\",\"todo\");'>".$app_strings['LBL_CREATE']." ".$app_strings['LBL_A']." ".$app_strings['Todo']."</a>
  2024. </td>";
  2025. }
  2026. else
  2027. {
  2028. $list_view .="<td class='small' align='left' nowrap='nowrap'>".$app_strings['LBL_YOU_ARE_NOT_ALLOWED_TO_CREATE']."&nbsp;".$app_strings['LBL_A']."&nbsp;".$app_strings['Todo']."<br></td>";
  2029. }
  2030. $list_view .="</tr>
  2031. </table>
  2032. </div>";
  2033. $list_view .="</td></tr>";
  2034. }
  2035. $list_view .="</table><br>";
  2036. $cal_log->debug("Exiting constructTodoListView() method...");
  2037. return $list_view;
  2038. }
  2039. /**
  2040. * Function returns the list of privileges and permissions of the events that the current user can view the details of.
  2041. * return string - query that is used as secondary parameter to fetch the events that the user can view and the schedule of the users
  2042. */
  2043. function getCalendarViewSecurityParameter()
  2044. {
  2045. global $current_user;
  2046. require('user_privileges/user_privileges_'.$current_user->id.'.php');
  2047. require('user_privileges/sharing_privileges_'.$current_user->id.'.php');
  2048. require_once('modules/Calendar/CalendarCommon.php');
  2049. $shared_ids = getSharedCalendarId($current_user->id);
  2050. if(isset($shared_ids) && $shared_ids != '')
  2051. $condition = " or (vtiger_crmentity.smownerid in($shared_ids)) or (vtiger_crmentity.smownerid NOT LIKE ($current_user->id))";// and vtiger_activity.visibility = 'Public')";
  2052. else
  2053. $condition = "or (vtiger_crmentity.smownerid NOT LIKE ($current_user->id))";
  2054. $sec_query .= " and (vtiger_crmentity.smownerid in($current_user->id) $condition or vtiger_crmentity.smownerid in(select vtiger_user2role.userid from vtiger_user2role inner join vtiger_users on vtiger_users.id=vtiger_user2role.userid inner join vtiger_role on vtiger_role.roleid=vtiger_user2role.roleid where vtiger_role.parentrole like '".$current_user_parent_role_seq."::%')";
  2055. if(sizeof($current_user_groups) > 0)
  2056. {
  2057. $sec_query .= " or (vtiger_groups.groupid in (". implode(",", $current_user_groups) ."))";
  2058. }
  2059. $sec_query .= ")";
  2060. return $sec_query;
  2061. }
  2062. ?>