array('model'=>'Room_Dates','far_key'=>'id','foreign_key'=>'room_id'), ); public function room_dates(Model_Setup $so,$date,$days=0) { $result = array(); $date_end = $date+$days*86400; $open_dates = $so->open_dates($date,$days); foreach ($this->dates->where('code','=','A')->where_startstop($date,$date_end)->find_all() as $o) { $x = $date; while ($x<$date_end) { // If we havent made the start date yet, we need to advance if (! $open_dates[$x] OR ($o->date_start > $x AND (is_null($o->date_stop) OR $o->date_stop > $date_end)) OR ((is_null($o->date_start) OR $o->date_start > $x) AND $o->date_stop > $date_end) OR (! is_null($o->date_start) AND ! is_null($o->date_stop))) { if (! isset($result[$x]) OR ! $result[$x]) $result[$x] = 0; $x += 86400; continue; } // Check that this record covers our current date if ($o->date_stop < $x AND ! is_null($o->date_stop)) break; $result[$x] = $o->avail(date('w',$x)); $x += 86400; } } // If we broke out and our date $days hasnt ben evaluated, we are closed while ($x<$date_end) { if (! isset($result[$x]) OR ! $result[$x]) $result[$x] = 0; $x += 86400; } return $result; } } ?>