• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

classes/Calendar/class.ilAppointmentHandler.php

Go to the documentation of this file.
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()); //$user->data["FirstName"]." ".$user->data["SurName"]);
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 //echo "AppHandler:insertApp()<br>";
00066                         for($ii=0;$ii<count($user);$ii++) {
00067                                 if ($user[$ii] != "" && $user[$ii] != null) {
00068 //echo "user:".$user[$ii]."<br>";
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                 // All appointments of the last 105 days, 'cause the duration can be 99 days, 99 hours and 99 minutes
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                                                         !! Situation hier !!
00179                                                         $startTimestamp = Periodenanfang
00180                                                         $endTimestamp = Periodenende
00181                                                         $currentTimestamp = startTimestamp des Appointments
00182                                                         $resultAppointment = Aktueller Recordset der cal_appointment
00183                                                         $resultAppointmentRepeats = Aktueller Recordset der cal_appointmentRepeats
00184                                                         $appointmentRepeatsNotResultset = Resultset auf die cal_appointmentRepeatsNot
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                                                         // We took a while statement, because of the small count of iterations
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                         //mittendrin
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                         //Ende
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                         //mittendrin
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 ?>

Generated on Fri Dec 13 2013 09:06:33 for ILIAS Release_3_4_x_branch .rev 46804 by  doxygen 1.7.1