public function listJsonAction() { $criteria = new RM_Unit_Search_Criteria(array(), true); $dao = new RM_Units(); $filters = $this->_getParam('filter', array()); $isSelector = $this->_getParam('selector', false); $showOnlyAvailable = $this->_getParam('showOnlyAvailable', false); if ($showOnlyAvailable) { $reservationPeriod = new RM_Reservation_Period(new RM_Date(strtotime($this->_getParam('start_datetime'))), new RM_Date(strtotime($this->_getParam('end_datetime')))); $unitsReserved = $dao->getReservedUnits($reservationPeriod); $unitArray = array(); foreach ($unitsReserved as $unit) { $unitArray[] = $unit->getId(); } if (count($unitArray) > 0) { $filters[] = array('field' => "id", 'data' => array('type' => "listin", 'value' => implode(",", $unitArray), 'comparison' => 'notin')); } } if ($this->_getParam('reservationID') !== null) { $reservationID = $this->_getParam('reservationID'); $reservationModel = new RM_Reservations(); $reservation = $reservationModel->find($reservationID)->current(); if ($reservation !== null) { $detailsModel = new RM_ReservationDetails(); $details = $detailsModel->getAllByReservation($reservation); $reservedUnitIDs = array(); foreach ($details as $detail) { $reservedUnitIDs[] = $detail->unit_id; } if (count($reservedUnitIDs) > 0) { $filters[] = array('field' => "id", 'data' => array('type' => "listin", 'value' => implode(",", $reservedUnitIDs), 'comparison' => 'notin')); } } } $criteria->filters = $filters; $units = $dao->getAll($criteria)->toArray(); $criteria->offset = $this->_getParam('start'); $criteria->order = $this->_getParam('sort', 'id') . ' ' . $this->_getParam('dir', 'DESC'); $criteria->count = $this->_getParam('limit'); $total = $dao->getAll($criteria)->count(); $json = new stdClass(); $json->total = $total; $json->data = $units; return array('data' => $json); }