00001 <?php
00002
00013 require_once "./classes/Calendar/class.ilAppointment.php";
00014 require_once "./classes/Calendar/class.ilCalDBHandler.php";
00015 require_once "./classes/class.ilObjUser.php";
00016
00017 class ilAppointmentHandler
00018 {
00019
00020 var $appointmentArrayList;
00021 var $arrayIndex;
00022 var $startTimestamp;
00023 var $endTimestamp;
00024
00025 function getAppointmentArrayList($userId, $startTimestamp, $endTimestamp) {
00026 $this->deleteOldAppointments();
00027 $appointmentArrayList = $this->setAppointmentArrayList ($userId, $startTimestamp, $endTimestamp);
00028 return $appointmentArrayList;
00029 }
00030
00031 function getSecretAppointmentArrayList($usersArray, $startTimestamp, $endTimestamp) {
00032 $appointmentArrayList = null;
00033 $finalAppointmentArrayList = null;
00034 for ($i=0;$i<count($usersArray);$i++) {
00035 if ($usersArray[$i] != "" && $usersArray[$i] != null) {
00036 $appointmentArrayList = array_merge($appointmentArrayList,
00037 $this->setAppointmentArrayList($usersArray[$i], $startTimestamp, $endTimestamp));
00038 }
00039 }
00040 for($ii=0;$ii<count($appointmentArrayList);$ii++) {
00041
00042 $resultAppointment = $appointmentArrayList[$ii];
00043
00044 if($resultAppointment->getAccess() == "Public")
00045 {
00046 $user = new ilObjUser($resultAppointment->getUserId());
00047 $resultAppointment->setDescription("-");
00048 $resultAppointment->setTerm($user->buildFullName());
00049 $resultAppointment->setLocation("-");
00050 $finalAppointmentArrayList[] = $resultAppointment;
00051 }
00052 }
00053
00054 if(count($finalAppointmentArrayList) > 0) {
00055 usort($finalAppointmentArrayList, array("AppointmentHandler", "cmp"));
00056 }
00057 return $finalAppointmentArrayList;
00058 }
00059
00060 function insertAppointment($user, $appointment) {
00061 if ($appointment != null) {
00062 $dbHandler = new ilCalDBHandler();
00063
00064 $appointmentUnionId = time() + mt_rand(1,1000000) + $appointment->getOwnerId();
00065
00066 for($ii=0;$ii<count($user);$ii++) {
00067 if ($user[$ii] != "" && $user[$ii] != null) {
00068
00069 $placeHolder = $appointment->getStartTimestamp() + mt_rand(1, 99);
00070 $currentUser = $user[$ii];
00071 $dbtable = "cal_appointment";
00072 $fields = "term, appointmentUnionId, categoryId, priorityId, access, duration, startTimestamp, serial, userId";
00073 $values = "'".$placeHolder."', 1, 1, 1, 'Private', 0, 0, 0, ".$currentUser;
00074 $number_of_values = 3;
00075 $dbHandler->insert($number_of_values, $dbtable, $fields, $values);
00076
00077 $where = "cal_appointment.term = '".$placeHolder."' AND cal_appointment.userId=".$currentUser;
00078 $appointmentResultSet = $dbHandler->select($dbtable, "", $where);
00079
00080 if (count($appointmentResultSet) != 1)
00081 die("AppointmentHandler::insertAppointment: got not exact one new appointment from DB");
00082 else {
00083 $row = $appointmentResultSet->fetchRow();
00084 $currentAppointmentId = $row[0];
00085 }
00086 unset($appointmentResultSet);
00087
00088 $values = "cal_appointment.access = '".$appointment->getAccess()."', ".
00089 "cal_appointment.categoryId = ".$appointment->getCategoryId().", ".
00090 "cal_appointment.description = '".$appointment->getDescription()."', ".
00091 "cal_appointment.duration = ".$appointment->getDuration().", ".
00092 "cal_appointment.priorityId = ".$appointment->getPriorityId().", ".
00093 "cal_appointment.startTimestamp = ".$appointment->getStartTimestamp().", ".
00094 "cal_appointment.term = '".$appointment->getTerm()."', ".
00095 "cal_appointment.appointmentUnionId = ".$appointmentUnionId.", ".
00096 "cal_appointment.location = '".$appointment->getLocation()."', ".
00097 "cal_appointment.serial = ".$appointment->getSerial().", ".
00098 "cal_appointment.ownerId = ".$appointment->getOwnerId();
00099 "cal_appointment.userId = ".$currentUser;
00100 $whereCondition = "cal_appointment.appointmentId = ".$currentAppointmentId;
00101
00102 $dbHandler->update($dbtable, $values, $whereCondition);
00103
00104 if ($appointment->getSerial() == 1) {
00105
00106 $dbtable = "cal_appointmentrepeats";
00107 $fields = "appointmentId, endTimestamp, type, weekdays";
00108 if ($appointment->getSer_stop() == "")
00109 $ets = 0;
00110 else
00111 $ets = $appointment->getSer_stop();
00112 $values = $currentAppointmentId.", ".$ets.", '".
00113 $appointment->getSer_type()."', '".$appointment->getSer_days()."'";
00114 $number_of_values = 3;
00115 $dbHandler-> insert($number_of_values, $dbtable, $fields, $values);
00116 }
00117 }
00118 }
00119 }
00120 }
00121
00122 function setAppointmentArrayList($userId, $st, $et) {
00123 global $appointmentArrayList, $arrayIndex, $startTimestamp, $endTimestamp;
00124 $startTimestamp = $st;
00125 $endTimestamp = $et;
00126 $appointmentArrayList = null;
00127 $appointmentRepeatsNotTS = null;
00128
00129 $startTimestamp105 = strtotime("-105 days", $startTimestamp);
00130
00131 $dbtable = "cal_appointment, cal_priority, cal_category";
00132
00133 $where = "((cal_appointment.userId = $userId AND ".
00134 "cal_appointment.serial = 0 AND ".
00135 "((cal_appointment.StartTimestamp BETWEEN $startTimestamp105 AND $endTimestamp) AND ( startTimestamp+(duration*60)>$startTimestamp )) ) ".
00136 "OR (cal_appointment.userId = $userId AND ".
00137 "cal_appointment.serial = 1)) ".
00138 "AND cal_priority.priorityId = cal_appointment.priorityId ".
00139 "AND cal_category.categoryId = cal_appointment.categoryId";
00140 $orderBy = "cal_appointment.startTimestamp ASC";
00141
00142 $dbHandler = new ilCalDBHandler();
00143 $appointmentResultset = $dbHandler->select($dbtable, "cal_appointment.*, cal_priority.term as priTerm, cal_category.term as calTerm", $where, $orderBy);
00144 if ($appointmentResultset->numRows() > 0) {
00145 $arrayIndex = 0;
00146 while($resultAppointment = $appointmentResultset->fetchRow(DB_FETCHMODE_ASSOC)){
00147
00148 if ($resultAppointment["serial"] == 1) {
00149 $dbtable = "cal_appointmentrepeats";
00150 $where = "cal_appointmentrepeats.appointmentId=".$resultAppointment["appointmentId"];
00151 $appointmentRepeatsResultset = $dbHandler->select($dbtable, "", $where);
00152
00153 if ($appointmentRepeatsResultset->numRows() == 1) {
00154 $resultAppointmentRepeats = $appointmentRepeatsResultset->fetchRow(DB_FETCHMODE_ASSOC);
00155 $dbtable = "cal_appointmentrepeatsnot";
00156 $where = "cal_appointmentrepeatsnot.appointmentRepeatsId=".$resultAppointmentRepeats["appointmentId"];
00157 $appointmentRepeatsNotResultset = $dbHandler->select($dbtable, "*", $where);
00158 while($resultAppointmentRepeatsNot = $appointmentRepeatsNotResultset->fetchRow(DB_FETCHMODE_ASSOC)) {
00159 $appointmentRepeatsNotTS[] = $resultAppointmentRepeatsNot["leaveOutTimestamp"];
00160 }
00161 }
00162 else {
00163 $resultAppointmentRepeats = null;
00164 $resultAppointmentRepeatsNot = null;
00165 }
00166
00167 if ($resultAppointmentRepeats["endTimestamp"] >= $startTimestamp ||
00168 ($resultAppointmentRepeats["endTimestamp"] == "NULL" ||
00169 $resultAppointmentRepeats["endTimestamp"] == null ||
00170 $resultAppointmentRepeats["endTimestamp"] == "" ||
00171 $resultAppointmentRepeats["endTimestamp"] == 0
00172 )
00173 ) {
00174
00175 $currentTimestamp = $resultAppointment["startTimestamp"];
00176 $timer = 0;
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 if ($resultAppointmentRepeats["type"] == "ser_week") {
00187 $weekdays = $resultAppointmentRepeats["weekdays"];
00188 for ($i=0;$i<7;$i++)
00189 {
00190 $weekdaysArray[$i] = substr($weekdays, $i, 1);
00191 }
00192 $startTimestampZ = $startTimestamp - ($resultAppointment["duration"]*60);
00193 $splitStartTimestamp = getdate($startTimestampZ);
00194 $splitCurrentTimestamp = getdate($currentTimestamp);
00195 $sts = $startTimestampZ < ($currentTimestamp+($resultAppointment["duration"]*60))
00196 ? $currentTimestamp : mktime($splitCurrentTimestamp["hours"],
00197 $splitCurrentTimestamp["minutes"],
00198 $splitCurrentTimestamp["seconds"],
00199 $splitStartTimestamp["mon"],
00200 $splitStartTimestamp["mday"],
00201 $splitStartTimestamp["year"]);
00202 $diffDays = ($endTimestamp - $startTimestampZ)/(24*60*60);
00203
00204 for($i=0;$i<=$diffDays;$i++) {
00205 $calcTimestamp = strtotime("+".$i." days", $sts);
00206 $weekdayCalcTS = date("w", $calcTimestamp);
00207 if ($weekdaysArray[$weekdayCalcTS] == "y" || $weekdaysArray[$weekdayCalcTS] == "Y") {
00208 $exists = false;
00209
00210 for($ii=0;$ii<count($appointmentRepeatsNotTS);$ii++) {
00211 if ($appointmentRepeatsNotTS[$ii] == $calcTimestamp)
00212 $exists = True;
00213 }
00214
00215 $daEndTimestamp = $resultAppointmentRepeats["endTimestamp"] == 0 ? strtotime("+1 year", $startTimestamp) : $resultAppointmentRepeats["endTimestamp"];
00216
00217 if ($exists == false && $calcTimestamp <= $daEndTimestamp) {
00218 $this->createAppointmentObjectsForDuration($resultAppointment, $calcTimestamp, $resultAppointmentRepeats);
00219 }
00220 }
00221 }
00222 }
00223
00224 if ($resultAppointmentRepeats["type"] == "ser_month") {
00225
00226 $startTimestampZ = $startTimestamp - ($resultAppointment["duration"]*60);
00227 $splitStartTimestamp = getdate($startTimestampZ);
00228 $splitCurrentTimestamp = getdate($currentTimestamp);
00229 $sts = $startTimestampZ < ($currentTimestamp+($resultAppointment["duration"]*60))
00230 ? $currentTimestamp : mktime($splitCurrentTimestamp["hours"],
00231 $splitCurrentTimestamp["minutes"],
00232 $splitCurrentTimestamp["seconds"],
00233 $splitStartTimestamp["mon"],
00234 $splitCurrentTimestamp["mday"],
00235 $splitStartTimestamp["year"]);
00236
00237 $diffMonths = ((date("Y", $endTimestamp) - date("Y", $sts) - 1) * 12) + ((12 - date("m", ($sts>$endTimestamp?$endTimestamp:$sts))) + date("m", $endTimestamp));
00238
00239 unset($i);
00240 for($i=0;$i<=$diffMonths;$i++) {
00241 $calcTimestamp = strtotime("+".$i." month", $sts);
00242 $calcDay = date("d", $calcTimestamp);
00243 $startDay = date("d", $resultAppointment["startTimestamp"]);
00244 if($calcDay<$startDay) {
00245 $tempTimestamp = strtotime("-1 month", $calcTimestamp);
00246 $numOfDays = date("t", $tempTimestamp);
00247 $temp = getdate($tempTimestamp);
00248 $calcTimestamp = mktime($temp["hours"],$temp["minutes"],$temp["seconds"],$temp["mon"],$numOfDays,$temp["year"]);
00249 }
00250
00251 $exists = false;
00252 for($ii=0;$ii<count($appointmentRepeatsNotTS);$ii++) {
00253 if ($appointmentRepeatsNotTS[$ii] == $calcTimestamp)
00254 $exists = True;
00255 }
00256
00257 $daEndTimestamp = $resultAppointmentRepeats["endTimestamp"] == 0 ? strtotime("+1 year", $startTimestamp) : $resultAppointmentRepeats["endTimestamp"];
00258 if ($exists == false && $calcTimestamp <= $daEndTimestamp && $calcTimestamp <= $endTimestamp) {
00259 $this->createAppointmentObjectsForDuration($resultAppointment, $calcTimestamp, $resultAppointmentRepeats);
00260 }
00261 }
00262 }
00263
00264 if ($resultAppointmentRepeats["type"] == "ser_halfayear") {
00265 $notFound = true;
00266
00267 while($notFound && $currentTimestamp <= $endTimestamp) {
00268 if ($currentTimestamp >= ($startTimestamp - ($resultAppointment["duration"]*60)) && $currentTimestamp <= $endTimestamp) {
00269 $notFound = false;
00270
00271 $exists = False;
00272
00273 $currentDay = date("d", $currentTimestamp);
00274 $startDay = date("d", $resultAppointment["startTimestamp"]);
00275 if($currentDay<$startDay) {
00276 $tempTimestamp = strtotime("-1 month", $currentTimestamp);
00277 $numOfDays = date("t", $tempTimestamp);
00278 $temp = getdate($tempTimestamp);
00279 $currentTimestamp = mktime($temp["hours"],$temp["minutes"],$temp["seconds"],$temp["mon"],$numOfDays,$temp["year"]);
00280 }
00281
00282 for($ii=0;$ii<count($appointmentRepeatsNotTS);$ii++) {
00283 if ($appointmentRepeatsNotTS[$ii] == $currentTimestamp)
00284 $exists = True;
00285 }
00286
00287 $daEndTimestamp = $resultAppointmentRepeats["endTimestamp"] == 0 ? strtotime("+1 year", $startTimestamp) : $resultAppointmentRepeats["endTimestamp"];
00288 if ($exists == false && $currentTimestamp <= $daEndTimestamp) {
00289
00290 $this->createAppointmentObjectsForDuration($resultAppointment, $currentTimestamp, $resultAppointmentRepeats);
00291 }
00292 }
00293 $currentTimestamp = strtotime("+ 6 month", $currentTimestamp);
00294 }
00295 }
00296 if ($resultAppointmentRepeats["type"] == "ser_year") {
00297 $notFound = true;
00298 while($notFound && $currentTimestamp <= $endTimestamp) {
00299 if ($currentTimestamp >= ($startTimestamp - ($resultAppointment["duration"]*60))&& $currentTimestamp <= $endTimestamp) {
00300 $notFound = false;
00301
00302 $exists = False;
00303
00304 for($ii=0;$ii<count($appointmentRepeatsNotTS);$ii++) {
00305 if ($appointmentRepeatsNotTS[$ii] == $currentTimestamp)
00306 $exists = True;
00307 }
00308
00309 $daEndTimestamp = $resultAppointmentRepeats["endTimestamp"] == 0 ? strtotime("+1 year", $startTimestamp) : $resultAppointmentRepeats["endTimestamp"];
00310
00311 if ($exists == false && $calcTimestamp <= $daEndTimestamp) {
00312
00313 $this->createAppointmentObjectsForDuration($resultAppointment, $currentTimestamp, $resultAppointmentRepeats);
00314 }
00315 }
00316 $currentTimestamp = strtotime("+ 1 year", $currentTimestamp);
00317 }
00318 }
00319 }
00320 }
00321
00322 else {
00323 $this->createAppointmentObjectsForDuration($resultAppointment);
00324 }
00325 }
00326 }
00327 else {
00328 $appointmentArrayList = null;
00329 }
00330 if(count($appointmentArrayList) > 0) {
00331 usort($appointmentArrayList, array("AppointmentHandler", "cmp"));
00332 }
00333 $arrayIndex = 0;
00334 return $appointmentArrayList;
00335 }
00336
00337 function cmp ($a, $b) {
00338 if ($a->getStartTimestamp() == $b->getStartTimestamp()) return 0;
00339 return ($a->getStartTimestamp() < $b->getStartTimestamp()) ? -1 : 1;
00340 }
00341
00342 function createAppointmentObjectsForDuration($resultAppointment, $currentTimestamp=null, $resultAppointmentRepeats=null) {
00343 global $appointmentArrayList, $arrayIndex, $startTimestamp, $endTimestamp;
00344 if ($currentTimestamp == null)
00345 $currentTimestamp = $resultAppointment["startTimestamp"];
00346
00347 if ($resultAppointment["duration"] == 0) {
00348 $appointment = new ilAppointment;
00349
00350 $appointment->setAccess($resultAppointment["access"]);
00351 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00352 $appointment->setCategory($resultAppointment["catTerm"]);
00353 $appointment->setCategoryId($resultAppointment["categoryId"]);
00354 $appointment->setDescription($resultAppointment["description"]);
00355 $appointment->setDuration($resultAppointment["duration"]);
00356 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00357 $appointment->setOwnerId($resultAppointment["ownerId"]);
00358 $appointment->setUserId($resultAppointment["userId"]);
00359 $appointment->setPriority($resultAppointment["priTerm"]);
00360 $appointment->setPriorityId($resultAppointment["prioityId"]);
00361 $appointment->setStartTimestamp($currentTimestamp);
00362 $appointment->setTerm($resultAppointment["term"]);
00363 $appointment->setLocation($resultAppointment["location"]);
00364 $appointment->setSerial($resultAppointment["serial"]);
00365 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00366 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00367 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00368 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00369 }
00370
00371 $appointmentArrayList[$arrayIndex] = $appointment;
00372 $arrayIndex++;
00373 }
00374 elseif($currentTimestamp >= $startTimestamp) {
00375 $appointment = new ilAppointment;
00376
00377 $appointment->setAccess($resultAppointment["access"]);
00378 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00379 $appointment->setCategory($resultAppointment["catTerm"]);
00380 $appointment->setCategoryId($resultAppointment["categoryId"]);
00381 $appointment->setDescription($resultAppointment["description"]);
00382 $appointment->setDuration($resultAppointment["duration"]);
00383 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00384 $appointment->setOwnerId($resultAppointment["ownerId"]);
00385 $appointment->setUserId($resultAppointment["userId"]);
00386 $appointment->setPriority($resultAppointment["priTerm"]);
00387 $appointment->setPriorityId($resultAppointment["priorityId"]);
00388 $appointment->setStartTimestamp($currentTimestamp);
00389 $appointment->setTerm("<i>[S]</i> ".$resultAppointment["term"]);
00390 $appointment->setLocation($resultAppointment["location"]);
00391 $appointment->setSerial($resultAppointment["serial"]);
00392 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00393 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00394 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00395 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00396 }
00397
00398 $appointmentArrayList[$arrayIndex] = $appointment;
00399 $arrayIndex++;
00400
00401 $appointmentStartDay = getdate($currentTimestamp);
00402 $startIterateTS = mktime(0,0,0,$appointmentStartDay["mon"],$appointmentStartDay["mday"],$appointmentStartDay["year"]);
00403 $endIterateTS = strtotime("-23 hours 59 minutes", ($currentTimestamp+($resultAppointment["duration"]*60)));
00404 if ($endIterateTS > $endTimestamp)
00405 $endIterateTS = $endTimestamp;
00406
00407
00408 $break = false;
00409 while($break == false) {
00410 $startIterateTS = strtotime("+ 1 day", $startIterateTS);
00411 if ($startIterateTS > $endIterateTS) {
00412 $break = true;
00413 }
00414 else {
00416 $appointment = new ilAppointment;
00417
00418 $appointment->setAccess($resultAppointment["access"]);
00419 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00420 $appointment->setCategory($resultAppointment["catTerm"]);
00421 $appointment->setCategoryId($resultAppointment["categoryId"]);
00422 $appointment->setDescription($resultAppointment["description"]);
00423 $appointment->setDuration(0);
00424 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00425 $appointment->setOwnerId($resultAppointment["ownerId"]);
00426 $appointment->setUserId($resultAppointment["userId"]);
00427 $appointment->setPriority($resultAppointment["priTerm"]);
00428 $appointment->setPriorityId($resultAppointment["priorityId"]);
00429 $appointment->setStartTimestamp($startIterateTS);
00430 $appointment->setTerm("<i>[M]</i> ".$resultAppointment["term"]);
00431 $appointment->setLocation($resultAppointment["location"]);
00432 $appointment->setSerial($resultAppointment["serial"]);
00433 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00434 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00435 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00436 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00437 }
00438
00439 $appointmentArrayList[$arrayIndex] = $appointment;
00440 $arrayIndex++;
00441 }
00442 }
00443
00444
00445 if (($currentTimestamp+($resultAppointment["duration"]*60))<=$endTimestamp) {
00446 $appointment = new ilAppointment;
00447
00448 $appointment->setAccess($resultAppointment["access"]);
00449 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00450 $appointment->setCategory($resultAppointment["catTerm"]);
00451 $appointment->setCategoryId($resultAppointment["categoryId"]);
00452 $appointment->setDescription($resultAppointment["description"]);
00453 $appointment->setDuration(0);
00454 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00455 $appointment->setOwnerId($resultAppointment["ownerId"]);
00456 $appointment->setUserId($resultAppointment["userId"]);
00457 $appointment->setPriority($resultAppointment["priTerm"]);
00458 $appointment->setPriorityId($resultAppointment["priorityId"]);
00459 $appointment->setStartTimestamp($currentTimestamp+($resultAppointment["duration"]*60));
00460 $appointment->setTerm("<i>[E]</i> ".$resultAppointment["term"]);
00461 $appointment->setLocation($resultAppointment["location"]);
00462 $appointment->setSerial($resultAppointment["serial"]);
00463 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00464 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00465 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00466 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00467 }
00468
00469 $appointmentArrayList[$arrayIndex] = $appointment;
00470 $arrayIndex++;
00471 }
00472 }
00473 elseif(($currentTimestamp < $startTimestamp)
00474 && (($currentTimestamp+($resultAppointment["duration"]*60)) > $startTimestamp)
00475 && (($currentTimestamp+($resultAppointment["duration"]*60)) < $endTimestamp) ) {
00476
00477 $appointmentStartDay = getdate($startTimestamp);
00478 $startIterateTS = mktime(0,0,0,$appointmentStartDay["mon"],$appointmentStartDay["mday"],$appointmentStartDay["year"]);
00479 $endIterateTS = strtotime("-23 hours 59 minutes", ($currentTimestamp+($resultAppointment["duration"]*60)));
00480 if ($endIterateTS > $endTimestamp)
00481 $endIterateTS = $endTimestamp;
00482
00483
00484 $break = false;
00485 unset($i);
00486 $i=0;
00487 while($break == false) {
00488 $sITS = strtotime("+ ".$i." day", $startIterateTS);
00489 $i++;
00490 if ($sITS > $endIterateTS) {
00491 $break = true;
00492 }
00493 else {
00494 $appointment = new ilAppointment;
00495
00496 $appointment->setAccess($resultAppointment["access"]);
00497 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00498 $appointment->setCategory($resultAppointment["catTerm"]);
00499 $appointment->setCategoryId($resultAppointment["categoryId"]);
00500 $appointment->setDescription($resultAppointment["description"]);
00501 $appointment->setDuration(0);
00502 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00503 $appointment->setOwnerId($resultAppointment["ownerId"]);
00504 $appointment->setUserId($resultAppointment["userId"]);
00505 $appointment->setPriority($resultAppointment["priTerm"]);
00506 $appointment->setPriorityId($resultAppointment["priorityId"]);
00507 $appointment->setStartTimestamp($sITS);
00508 $appointment->setTerm("<i>[M]</i> ".$resultAppointment["term"]);
00509 $appointment->setLocation($resultAppointment["location"]);
00510 $appointment->setSerial($resultAppointment["serial"]);
00511 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00512 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00513 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00514 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00515 }
00516
00517 $appointmentArrayList[$arrayIndex] = $appointment;
00518 $arrayIndex++;
00519 }
00520 }
00521
00522 $appointment = new ilAppointment;
00523
00524 $appointment->setAccess($resultAppointment["access"]);
00525 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00526 $appointment->setCategory($resultAppointment["catTerm"]);
00527 $appointment->setCategoryId($resultAppointment["categoryId"]);
00528 $appointment->setDescription($resultAppointment["description"]);
00529 $appointment->setDuration(0);
00530 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00531 $appointment->setOwnerId($resultAppointment["ownerId"]);
00532 $appointment->setUserId($resultAppointment["userId"]);
00533 $appointment->setPriority($resultAppointment["priTerm"]);
00534 $appointment->setPriorityId($resultAppointment["priorityId"]);
00535 $appointment->setStartTimestamp($currentTimestamp+($resultAppointment["duration"]*60));
00536 $appointment->setTerm("<i>[E]</i> ".$resultAppointment["term"]);
00537 $appointment->setLocation($resultAppointment["location"]);
00538 $appointment->setSerial($resultAppointment["serial"]);
00539 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00540 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00541 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00542 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00543 }
00544
00545 $appointmentArrayList[$arrayIndex] = $appointment;
00546 $arrayIndex++;
00547 }
00548 elseif ( ($currentTimestamp < $startTimestamp)
00549 && (($currentTimestamp+($resultAppointment["duration"]*60)) > $endTimestamp) ) {
00550
00551
00552 $numOfDays = ($endTimestamp - $startTimestamp)/(24*60*60);
00553 for ($i=0;$i<$numOfDays;$i++) {
00554 $day = getdate($startTimestamp);
00555 $newts = mktime(0,0,1,$day["mon"],$day["mday"]+$i,$day["year"]);
00556 $appointment = new ilAppointment;
00557
00558 $appointment->setAccess($resultAppointment["access"]);
00559 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00560 $appointment->setCategory($resultAppointment["catTerm"]);
00561 $appointment->setCategoryId($resultAppointment["categoryId"]);
00562 $appointment->setDescription($resultAppointment["description"]);
00563 $appointment->setDuration(0);
00564 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00565 $appointment->setOwnerId($resultAppointment["ownerId"]);
00566 $appointment->setUserId($resultAppointment["userId"]);
00567 $appointment->setPriority($resultAppointment["priTerm"]);
00568 $appointment->setPriorityId($resultAppointment["priorityId"]);
00569 $appointment->setStartTimestamp($newts);
00570 $appointment->setTerm("<i>[M]</i> ".$resultAppointment["term"]);
00571 $appointment->setLocation($resultAppointment["location"]);
00572 $appointment->setSerial($resultAppointment["serial"]);
00573 if($resultAppointmentRepeats != null && count($resultAppointmentRepeats) > 0) {
00574 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00575 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00576 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00577 }
00578
00579 $appointmentArrayList[$arrayIndex] = $appointment;
00580 $arrayIndex++;
00581 }
00582 }
00583 }
00584
00585 function getAppointmentsPD($userId) {
00586 $today = getdate();
00587 $startTimestamp = mktime(0,0,0,$today["mon"],$today["mday"],$today["year"]);
00588 $endTimestamp = mktime(0,0,0,$today["mon"],$today["mday"]+1,$today["year"]);
00589
00590 $appointmentArrayList = $this->setAppointmentArrayList($userId, $startTimestamp, $endTimestamp);
00591 return $appointmentArrayList;
00592 }
00593
00594 function deleteAppointment($userId, $appointmentId, $appointmentUnionId) {
00595 $dbHandler = new ilCalDBHandler;
00596 $appointment = $this->getSingleAppointment($appointmentId);
00597
00598 if ($appointmentUnionId == Null || $appointmentUnionId == "" || $appointmentUnionId == 0) {
00599
00600 $dbtable = "cal_appointmentrepeats";
00601 $where = "cal_appointmentrepeats.appointmentId = $appointmentId";
00602 $appointmentRepeatsResultset = $dbHandler->select($dbtable, $where);
00603
00604 $dbtable = "cal_appointment";
00605 $where = "cal_appointment.appointmentId = $appointmentId";
00606 $dbHandler-> delete($dbtable, $where);
00607
00608 $dbtable = "cal_appointmentrepeats";
00609 $where = "cal_appointmentrepeats.appointmentId = $appointmentId";
00610 $dbHandler-> delete($dbtable, $where);
00611
00612 $dbtable = "cal_appointmentrepeatsnot";
00613 $where = "cal_appointmentrepeatsnot.appointmentRepeatsId = ".$appointmentRepeatsResultset["appointmentId"];
00614 $dbHandler-> delete($dbtable, $where);
00615 return true;
00616 }
00617 else {
00618 if ($appointment->getOwnerId() == $userId ) {
00619
00620 $dbtable= "cal_appointment";
00621 $where = "cal_appointment.appointmentUnionId = $appointmentUnionId";
00622 $appointmentResultset = $dbHandler->select($dbtable, "", $where);
00623
00624 $dbtable = "cal_appointment";
00625 $where = "cal_appointment.appointmentUnionId = $appointmentUnionId";
00626 $dbHandler->delete($dbtable, $where);
00627
00628 while($resultAppointment = $appointmentResultset->fetchRow(DB_FETCHMODE_ASSOC))
00629 {
00630 $dbtable = "cal_appointmentrepeats";
00631 $where = "cal_appointmentrepeats.appointmentId =".$appointmentId;
00632 $appointmentRepeatsResultset = $dbHandler->select($dbtable, "", $where);
00633 $resultAppointmentRepeats = $appointmentRepeatsResultset->fetchRow(DB_FETCHMODE_ASSOC);
00634
00635 $dbtable = "cal_appointmentrepeats";
00636 $where = "cal_appointmentrepeats.appointmentId = ".$appointmentId;
00637 $dbHandler->delete($dbtable, $where);
00638
00639 if ($resultAppointmentRepeats["appointmentRepeatsId"] != "" &&
00640 $resultAppointmentRepeats["appointmentRepeatsId"] != Null &&
00641 $resultAppointmentRepeats["appointmentRepeatsId"] != 0)
00642 {
00643 $dbtable = "cal_appointmentrepeatsnot";
00644 $where = "cal_appointmentrepeatsnot.appointmentRepeatsId = ".$resultAppointmentRepeats["appointmentRepeatsId"];
00645 $dbHandler-> delete($dbtable, $where);
00646 }
00647 }
00648 return true;
00649 }
00650 }
00651 return false;
00652 }
00653
00654 function appointmentRepeatsNot ($appointmentId, $leaveOutTimestamp) {
00655 $dbHandler = new ilCalDBHandler;
00656
00657 $dbtable = "cal_appointmentrepeats";
00658 $where = "cal_appointmentrepeats.appointmentId = $appointmentId";
00659 $appointmentRepeatsResultset = $dbHandler->select($dbtable, $where);
00660
00661 $appointmentRepeatsId = $appointmentRepeatsResultset["appointmentRepeatsId"];
00662
00663 $dbtable = "cal_appointmentrepeatsnot";
00664 $number_of_values = 2;
00665 $fields = "appointmentRepeatsId, leaveOutTimestamp";
00666 $values = "'$appointmentId', '$leaveOutTimestamp'";
00667 $dbHandler->insert($number_of_values, $dbtable, $fields, $values);
00668 return true;
00669 }
00670
00671 function appointmentUpdate ($ownerId, $appointment) {
00672 $dbHandler = new ilCalDBHandler;
00673
00674 $dbtable = "cal_appointment";
00675 $column = "appointmentID";
00676 $where = "ownerID=".$ownerId." AND appointmentID=".$appointment->getAppointmentId();
00677 $res = $dbHandler->select($dbtable, $column, $where);
00678
00679 if($res->numRows() > 0) {
00680 $dbtable = "cal_appointment";
00681 $values = "cal_appointment.access = '".$appointment->getAccess()."', ".
00682 "cal_appointment.categoryId = ".$appointment->getCategoryId().", ".
00683 "cal_appointment.description = '".$appointment->getDescription()."', ".
00684 "cal_appointment.duration = ".$appointment->getDuration().", ".
00685 "cal_appointment.priorityId = ".$appointment->getPriorityId().", ".
00686 "cal_appointment.StartTimestamp = ".$appointment->getStartTimestamp().", ".
00687 "cal_appointment.term = '".$appointment->getTerm()."', ".
00688 "cal_appointment.location = '".$appointment->getLocation()."', ".
00689 "cal_appointment.serial = ".$appointment->getSerial();
00690 $where = "cal_appointment.appointmentUnionId = ".$appointment->getAppointmentUnionId();
00691 $dbHandler->update($dbtable, $values, $where);
00692
00693 $appointmentResultSet = $dbHandler->select($dbtable, "appointmentId", "appointmentUnionId=".$appointment->getAppointmentUnionId());
00694 if ($appointmentResultSet->numRows() >= 1) {
00695 while($resultAppointment = $appointmentResultSet->fetchRow(DB_FETCHMODE_ASSOC)) {
00696 $appointmentRepeatsResultSet = $dbHandler->select("cal_appointmentrepeats", "appointmentRepeatsId", "appointmentId=".$resultAppointment["appointmentId"]);
00697 if ($appointmentRepeatsResultSet->numRows() >= 1) {
00698 $dbtable = "cal_appointmentrepeats";
00699 $values = "cal_appointmentrepeats.weekdays = '".$appointment->getSer_days()."', ".
00700 "cal_appointmentrepeats.endTimestamp = ".$appointment->getSer_stop().", ".
00701 "cal_appointmentrepeats.type = '".$appointment->getSer_type()."'";
00702 $where = "cal_appointmentrepeats.appointmentId = ".$resultAppointment["appointmentId"];
00703 $dbHandler->update($dbtable, $values, $where);
00704 }
00705 else {
00706 $dbTable = "cal_appointmentrepeats";
00707 $fields = "weekdays, endTimestamp, type, appointmentId";
00708 $values = "'".$appointment->getSer_days()."', ".$appointment->getSer_stop().", '".$appointment->getSer_type()."', ".$resultAppointment["appointmentId"];
00709 $dbHandler->insert(2, $dbTable, $fields, $values);
00710 }
00711 }
00712 }
00713 return true;
00714 }
00715 else {
00716 return false;
00717 }
00718 }
00719
00720
00721 function deleteOldAppointments() {
00722 $lastDelete = strtotime("-400 days");
00723 $dbh = new ilCalDBHandler();
00724
00725 $dbh->delete("cal_appointment", "startTimestamp<".$lastDelete." AND serial=0");
00726 }
00727
00728 function getSingleAppointment($aid) {
00729 if ($aid == "" || $aid == null || $aid < 0) {
00730 return new ilAppointment();
00731 }
00732 else {
00733 $dbHandler = new ilCalDBHandler();
00734 $dbtable = "cal_appointment";
00735 $where = "cal_appointment.appointmentId = ".$aid;
00736 $appointmentResultSet = $dbHandler->select($dbtable, "", $where);
00737 if ($appointmentResultSet->numRows() > 0) {
00738 $resultAppointment = $appointmentResultSet->fetchRow(DB_FETCHMODE_ASSOC);
00739
00740 $dbtable = "cal_appointmentrepeats";
00741 $where = "cal_appointmentrepeats.appointmentId=".$resultAppointment["appointmentId"];
00742 $appointmentRepeatsResultset = $dbHandler->select($dbtable, "", $where);
00743
00744 if ($appointmentRepeatsResultset->numRows() == 1)
00745 $resultAppointmentRepeats = $appointmentRepeatsResultset->fetchRow(DB_FETCHMODE_ASSOC);
00746 else
00747 $resultAppointmentRepeats = null;
00748
00749 $appointment = new ilAppointment();
00750
00751 $appointment->setAccess($resultAppointment["access"]);
00752 $appointment->setAppointmentId($resultAppointment["appointmentId"]);
00753 $appointment->setCategory($resultAppointment["catTerm"]);
00754 $appointment->setCategoryId($resultAppointment["categoryId"]);
00755 $appointment->setDescription($resultAppointment["description"]);
00756 $appointment->setDuration($resultAppointment["duration"]);
00757 $appointment->setAppointmentUnionId($resultAppointment["appointmentUnionId"]);
00758 $appointment->setOwnerId($resultAppointment["ownerId"]);
00759 $appointment->setPriority($resultAppointment["priTerm"]);
00760 $appointment->setPriorityId($resultAppointment["priorityId"]);
00761 $appointment->setStartTimestamp($resultAppointment["startTimestamp"]);
00762 $appointment->setTerm($resultAppointment["term"]);
00763 $appointment->setLocation($resultAppointment["location"]);
00764 $appointment->setSerial($resultAppointment["serial"]);
00765 $appointment->setSer_type($resultAppointmentRepeats["type"]);
00766 $appointment->setSer_days($resultAppointmentRepeats["weekdays"]);
00767 $appointment->setSer_stop($resultAppointmentRepeats["endTimestamp"]);
00768
00769 return $appointment;
00770 }
00771 else
00772 return new ilAppointment();
00773 }
00774 }
00775 }
00776 ?>