ILIAS  Release_4_1_x_branch Revision 61804
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilCalendarAppointmentPanelGUI.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 include_once './Services/Calendar/classes/class.ilCalendarSettings.php';
25 
35 {
36  protected $seed = null;
37 
38  protected static $counter = 0;
39  protected static $instance = null;
40 
41  protected $settings = null;
42 
43  protected $tpl = null;
44  protected $lng = null;
45  protected $ctrl = null;
46 
54  protected function __construct(ilDate $seed = null)
55  {
56  global $lng,$ilCtrl;
57 
58  $this->lng = $lng;
59  $this->ctrl = $ilCtrl;
60  $this->settings = ilCalendarSettings::_getInstance();
61 
62  $this->seed = $seed;
63  }
64 
73  public static function _getInstance(ilDate $seed)
74  {
75  if(isset(self::$instance) and self::$instance)
76  {
77  return self::$instance;
78  }
79  return self::$instance = new ilCalendarAppointmentPanelGUI($seed);
80  }
81 
85  public function getSeed()
86  {
87  return $this->seed;
88  }
89 
90 
98  public function getHTML($a_app)
99  {
100  global $tree,$lng,$ilUser;
101 
102  self::$counter++;
103 
104  $this->tpl = new ilTemplate('tpl.appointment_panel.html',true,true,'Services/Calendar');
105 
106  // Panel variables
107  $this->tpl->setVariable('PANEL_NUM',self::$counter);
108  $this->tpl->setVariable('PANEL_TITLE', str_replace(' ()', '', $a_app['event']->getPresentationTitle()));
109  if ($a_app["event"]->isMilestone())
110  {
111  $this->tpl->setVariable('PANEL_DETAILS',$this->lng->txt('cal_ms_details'));
112  }
113  else
114  {
115  $this->tpl->setVariable('PANEL_DETAILS',$this->lng->txt('cal_details'));
116  }
117  $this->tpl->setVariable('PANEL_TXT_DATE',$this->lng->txt('date'));
118 
119  if($a_app['fullday'])
120  {
121  $this->tpl->setVariable('PANEL_DATE',ilDatePresentation::formatPeriod(
122  new ilDate($a_app['dstart'],IL_CAL_UNIX),
123  new ilDate($a_app['dend'],IL_CAL_UNIX)));
124  }
125  else
126  {
127  $this->tpl->setVariable('PANEL_DATE',ilDatePresentation::formatPeriod(
128  new ilDateTime($a_app['dstart'],IL_CAL_UNIX),
129  new ilDateTime($a_app['dend'],IL_CAL_UNIX)));
130  }
131  if($a_app['event']->getLocation())
132  {
133  $this->tpl->setVariable('PANEL_TXT_WHERE',$this->lng->txt('cal_where'));
134  $this->tpl->setVariable('PANEL_WHERE',ilUtil::makeClickable($a_app['event']->getLocation()),true);
135  }
136  if($a_app['event']->getDescription())
137  {
138  $this->tpl->setVariable('PANEL_TXT_DESC',$this->lng->txt('description'));
139  $this->tpl->setVariable('PANEL_DESC',ilUtil::makeClickable(nl2br($a_app['event']->getDescription())));
140  }
141 
142  if($a_app['event']->isMilestone() && $a_app['event']->getCompletion() > 0)
143  {
144  $this->tpl->setVariable('PANEL_TXT_COMPL',$this->lng->txt('cal_task_completion'));
145  $this->tpl->setVariable('PANEL_COMPL',$a_app['event']->getCompletion()." %");
146  }
147 
148  if ($a_app['event']->isMilestone())
149  {
150  // users responsible
151  $users = $a_app['event']->readResponsibleUsers();
152  $delim = "";
153  foreach($users as $r)
154  {
155  $value.= $delim.$r["lastname"].", ".$r["firstname"]." [".$r["login"]."]";
156  $delim = "<br />";
157  }
158  if (count($users) > 0)
159  {
160  $this->tpl->setVariable('PANEL_TXT_RESP', $this->lng->txt('cal_responsible'));
161  $this->tpl->setVariable('PANEL_RESP', $value);
162  }
163  }
164 
165  include_once('./Services/Calendar/classes/class.ilCalendarCategoryAssignments.php');
166  $cat_id = ilCalendarCategoryAssignments::_lookupCategory($a_app['event']->getEntryId());
167  $cat_info = ilCalendarCategories::_getInstance()->getCategoryInfo($cat_id);
168  $entry_obj_id = isset($cat_info['subitem_obj_ids'][$cat_id]) ?
169  $cat_info['subitem_obj_ids'][$cat_id] :
170  $cat_info['obj_id'];
171 
172  $this->tpl->setVariable('PANEL_TXT_CAL_TYPE',$this->lng->txt('cal_cal_type'));
173  switch($cat_info['type'])
174  {
176  $this->tpl->setVariable('PANEL_CAL_TYPE',$this->lng->txt('cal_type_system'));
177  break;
178 
180  $this->tpl->setVariable('PANEL_CAL_TYPE',$this->lng->txt('cal_type_personal'));
181  break;
182 
184  $type = ilObject::_lookupType($cat_info['obj_id']);
185  $this->tpl->setVariable('PANEL_CAL_TYPE',$this->lng->txt('cal_type_'.$type));
186 
187  // Course group appointment registration
188  if($this->settings->isCGRegistrationEnabled() and $type == 'crs' or type == 'grp')
189  {
190  if(!$a_app['event']->isAutoGenerated())
191  {
192  include_once './Services/Calendar/classes/class.ilCalendarRegistration.php';
193  $reg = new ilCalendarRegistration($a_app['event']->getEntryId());
194 
195  if($reg->isRegistered($ilUser->getId(),new ilDateTime($a_app['dstart'],IL_CAL_UNIX),new ilDateTime($a_app['dend'],IL_CAL_UNIX)))
196  {
197  $this->tpl->setCurrentBlock('panel_cancel_book_link');
198  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
199  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$a_app['event']->getEntryId());
200  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','dstart',$a_app['dstart']);
201  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','dend',$a_app['dend']);
202 
203  $this->tpl->setVariable('TXT_PANEL_CANCELBOOK', $this->lng->txt('cal_reg_unregister'));
204  $this->tpl->setVariable('PANEL_CANCELBOOK_HREF', $this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','confirmUnregister'));
205  $this->tpl->parseCurrentBlock();
206  }
207  else
208  {
209  $this->tpl->setCurrentBlock('panel_book_link');
210  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
211  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$a_app['event']->getEntryId());
212  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','dstart',$a_app['dstart']);
213  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','dend',$a_app['dend']);
214  $this->tpl->setVariable('TXT_PANEL_BOOK', $this->lng->txt('cal_reg_register'));
215  $this->tpl->setVariable('PANEL_BOOK_HREF', $this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','confirmRegister'));
216  $this->tpl->parseCurrentBlock();
217  }
218 
219  include_once 'classes/class.ilLink.php';
220  $registrations = array();
221  foreach($reg->getRegisteredUsers(new ilDateTime($a_app['dstart'],IL_CAL_UNIX),new ilDateTime($a_app['dend'],IL_CAL_UNIX)) as $usr_data)
222  {
223  $usr_id = $usr_data['usr_id'];
224  $this->ctrl->setParameterByClass('ilconsultationhoursgui','user',$usr_id);
225  $registrations[] = '<a href="'.$this->ctrl->getLinkTargetByClass('ilconsultationhoursgui', 'showprofile').'">'.ilObjUser::_lookupFullname($usr_id);
226  $this->ctrl->setParameterByClass('ilconsultationhoursgui','user','');
227  }
228  if(count($registrations))
229  {
230  $this->tpl->setCurrentBlock('panel_current_booking');
231  $this->tpl->setVariable('PANEL_TXT_CURRENT_BOOKING', $this->lng->txt('cal_reg_registered_users'));
232  $this->tpl->setVariable('PANEL_CURRENT_BOOKING', implode('<br />', $registrations));
233  $this->tpl->parseCurrentBlock();
234  }
235  }
236  }
237  break;
238 
240  $this->tpl->setVariable('PANEL_CAL_TYPE',$this->lng->txt('cal_ch_ch'));
241 
242  include_once 'Services/Booking/classes/class.ilBookingEntry.php';
243  $entry = new ilBookingEntry($a_app['event']->getContextId());
244 
245  $is_owner = $entry->isOwner();
246  $user_entry = ($cat_info['obj_id'] == $ilUser->getId());
247 
248  if($user_entry && !$is_owner)
249  {
250  // find source calendar entry in owner calendar
251  include_once 'Services/Calendar/classes/ConsultationHours/class.ilConsultationHourAppointments.php';
252  $apps = ilConsultationHourAppointments::getAppointmentIds($entry->getObjId(), $a_app['event']->getContextId(), $a_app['event']->getStart());
253  $ref_event = $apps[0];
254  }
255  else
256  {
257  $ref_event = $a_app['event']->getEntryId();
258  }
259 
260  $this->tpl->setCurrentBlock('panel_booking_owner');
261  $this->tpl->setVariable('PANEL_TXT_BOOKING_OWNER', $this->lng->txt('cal_ch_booking_owner'));
262  $this->tpl->setVariable('PANEL_BOOKING_OWNER', ilObjUser::_lookupFullname($entry->getObjId()));
263  $this->tpl->parseCurrentBlock();
264 
265  $this->tpl->setCurrentBlock('panel_max_booking');
266  $this->tpl->setVariable('PANEL_TXT_MAX_BOOKING', $this->lng->txt('cal_ch_num_bookings'));
267  $this->tpl->setVariable('PANEL_MAX_BOOKING', $entry->getNumberOfBookings());
268  $this->tpl->parseCurrentBlock();
269 
270  if(!$is_owner)
271  {
272  if($entry->hasBooked($ref_event))
273  {
274  $this->tpl->setCurrentBlock('panel_cancel_book_link');
275  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$ref_event);
276  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
277  $this->tpl->setVariable('TXT_PANEL_CANCELBOOK', $this->lng->txt('cal_ch_cancel_booking'));
278  $this->tpl->setVariable('PANEL_CANCELBOOK_HREF', $this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','cancelBooking'));
279  $this->tpl->parseCurrentBlock();
280  }
281  else if(!$entry->isBookedOut($ref_event))
282  {
283  $this->tpl->setCurrentBlock('panel_book_link');
284  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$ref_event);
285  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
286  $this->tpl->setVariable('TXT_PANEL_BOOK', $this->lng->txt('cal_ch_book'));
287  $this->tpl->setVariable('PANEL_BOOK_HREF', $this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','book'));
288  $this->tpl->parseCurrentBlock();
289  }
290 
291  $this->tpl->setCurrentBlock('panel_current_booking');
292  $this->tpl->setVariable('PANEL_TXT_CURRENT_BOOKING', $this->lng->txt('cal_ch_current_bookings'));
293  $this->tpl->setVariable('PANEL_CURRENT_BOOKING', $entry->getCurrentNumberOfBookings($ref_event));
294  $this->tpl->parseCurrentBlock();
295  }
296  else
297  {
298  $target = $entry->getTargetObjId();
299  if($target)
300  {
301  global $ilObjDataCache;
302 
303  $this->tpl->setCurrentBlock('panel_booking_target');
304  $this->tpl->setVariable('PANEL_TXT_BOOKING_TARGET', $this->lng->txt('cal_ch_target_object'));
305  $this->tpl->setVariable('PANEL_BOOKING_TARGET', $ilObjDataCache->lookupTitle($target));
306  $this->tpl->parseCurrentBlock();
307  }
308 
309  include_once 'classes/class.ilLink.php';
310  $bookings = array();
311  $this->ctrl->setParameterByClass('ilconsultationhoursgui','panel',1);
312  foreach($entry->getCurrentBookings($a_app['event']->getEntryId()) as $user_id)
313  {
314  $this->ctrl->setParameterByClass('ilconsultationhoursgui','user',$user_id);
315  $bookings[] = '<a href="'.$this->ctrl->getLinkTargetByClass('ilconsultationhoursgui', 'showprofile').'">'.ilObjUser::_lookupFullname($user_id);
316  $this->ctrl->setParameterByClass('ilconsultationhoursgui','user','');
317  }
318  $this->ctrl->setParameterByClass('ilconsultationhoursgui','panel','');
319  $this->tpl->setCurrentBlock('panel_current_booking');
320  $this->tpl->setVariable('PANEL_TXT_CURRENT_BOOKING', $this->lng->txt('cal_ch_current_bookings'));
321  $this->tpl->setVariable('PANEL_CURRENT_BOOKING', implode('<br />', $bookings));
322  $this->tpl->parseCurrentBlock();
323  }
324  break;
325 
327  $this->tpl->setVariable('PANEL_CAL_TYPE',$this->lng->txt('cal_ch_booking'));
328 
329  $this->tpl->setCurrentBlock('panel_cancel_book_link');
330  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$a_app['event']->getEntryId());
331  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
332  $this->tpl->setVariable('TXT_PANEL_CANCELBOOK', $this->lng->txt('cal_ch_cancel_booking'));
333  $this->tpl->setVariable('PANEL_CANCELBOOK_HREF', $this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','cancelBooking'));
334  $this->tpl->parseCurrentBlock();
335  break;
336  }
337 
338  $this->tpl->setVariable('PANEL_TXT_CAL_NAME',$this->lng->txt('cal_calendar_name'));
339  $this->tpl->setVariable('PANEL_CAL_NAME',$cat_info['title']);
340 
341 
342  if($cat_info['editable'] and !$a_app['event']->isAutoGenerated())
343  {
344  $this->tpl->setCurrentBlock('panel_edit_link');
345  $this->tpl->setVariable('TXT_PANEL_EDIT',$this->lng->txt('edit'));
346 
347  $this->ctrl->clearParametersByClass('ilcalendarappointmentgui');
348  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
349  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$a_app['event']->getEntryId());
350  $this->tpl->setVariable('PANEL_EDIT_HREF',$this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','edit'));
351 
352  $this->tpl->setCurrentBlock('panel_delete_link');
353  $this->tpl->setVariable('TXT_PANEL_DELETE',$this->lng->txt('delete'));
354 
355  $this->ctrl->clearParametersByClass('ilcalendarappointmentgui');
356  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','seed',$this->getSeed()->get(IL_CAL_DATE));
357  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','app_id',$a_app['event']->getEntryId());
358  $this->ctrl->setParameterByClass('ilcalendarappointmentgui','dt',$a_app['dstart']);
359  $this->tpl->setVariable('PANEL_DELETE_HREF',$this->ctrl->getLinkTargetByClass('ilcalendarappointmentgui','askdelete'));
360  $this->tpl->parseCurrentBlock();
361  }
362  include_once('./Services/Calendar/classes/class.ilCalendarCategory.php');
363  if($cat_info['type'] == ilCalendarCategory::TYPE_OBJ)
364  {
365  $refs = ilObject::_getAllReferences($entry_obj_id);
366  $type = ilObject::_lookupType($entry_obj_id);
367  $title = ilObject::_lookupTitle($entry_obj_id) ?
368  ilObject::_lookupTitle($entry_obj_id) :
369  $lng->txt('obj_'.$type);
370 
371  include_once('classes/class.ilLink.php');
372  $href = ilLink::_getStaticLink(current($refs),ilObject::_lookupType($entry_obj_id));
373  $parent = $tree->getParentId(current($refs));
374  $parent_title = ilObject::_lookupTitle(ilObject::_lookupObjId($parent));
375  $this->tpl->setVariable('PANEL_TXT_LINK',$this->lng->txt('ext_link'));
376  $this->tpl->setVariable('PANEL_LINK_HREF',$href);
377  $this->tpl->setVariable('PANEL_LINK_NAME',$title);
378  $this->tpl->setVariable('PANEL_PARENT',$parent_title);
379  }
380 
381  return $this->tpl->get();
382  }
383 }
384 ?>