/**
  * Action to get the list of times for a day.
  */
 public function timesAction()
 {
     $this->_helper->viewRenderer->setNoRender();
     $this->_helper->layout()->disableLayout();
     $numSlots = 24 * 60 * 60 / self::SLOT_DURATION;
     if (!($date = $this->_request->getParam('day')) || !($tz = $this->_request->getParam('tz')) || !($pid = $this->_request->getParam('pid'))) {
         $response = array();
         for ($i = 0; $i < $numSlots; $i++) {
             $response[$i] = 'NOPERMISSION';
         }
         echo $this->view->json($response);
         return;
     }
     $bookingsResponse = Sahara_Soap::getSchedServerBookingsClient()->getBookings(array('userID' => array('userQName' => $this->_auth->getIdentity()), 'showCancelled' => false, 'showFinished' => false));
     $bookings = $bookingsResponse->bookings;
     $userBookings = array();
     if (is_array($bookings)) {
         foreach ($bookings as $b) {
             if (strpos($b->startTime, $date) === 0) {
                 $ss = Sahara_DateTimeUtil::getSlotTimeFromISO8601($b->startTime) - 1;
                 $es = Sahara_DateTimeUtil::getSlotTimeFromISO8601($b->endTime);
                 while (++$ss < $es) {
                     array_push($userBookings, $ss);
                 }
             }
         }
     } else {
         if ($bookings != NULL) {
             if (strpos($bookings->startTime, $date) === 0) {
                 $ss = Sahara_DateTimeUtil::getSlotTimeFromISO8601($bookings->startTime) - 1;
                 $es = Sahara_DateTimeUtil::getSlotTimeFromISO8601($bookings->endTime);
                 while (++$ss < $es) {
                     array_push($userBookings, $ss);
                 }
             }
         }
     }
     $freeTimes = Sahara_Soap::getSchedServerBookingsClient()->findFreeBookings(array('userID' => array('userQName' => $this->_auth->getIdentity()), 'permissionID' => array('permissionID' => $this->_request->getParam('pid')), 'period' => array('startTime' => $date . "T00:00:00" . $tz, 'endTime' => $date . "T23:59:59" . $tz)));
     $freeTimes = $freeTimes->bookingSlot;
     $freeSlots = array();
     if (is_array($freeTimes)) {
         foreach ($freeTimes as $t) {
             $freeSlots[Sahara_DateTimeUtil::getSlotTimeFromISO8601($t->slot->startTime)] = $t->state;
         }
     } else {
         if ($freeTimes != NULL) {
             $freeSlots[Sahara_DateTimeUtil::getSlotTimeFromISO8601($freeTimes->slot->startTime)] = $freeTimes->state;
         }
     }
     /* Combine the user bookings and free times. */
     $state = 'NOPERMISSION';
     $response = array();
     for ($i = 0; $i < $numSlots; $i++) {
         if (array_key_exists($i, $freeSlots)) {
             $state = $freeSlots[$i];
         }
         $response[$i] = in_array($i, $userBookings) ? 'OWNBOOKING' : $state;
     }
     echo $this->view->json($response);
 }