time_from, $obj->time_to)) throw new ValidationErrorException("Time ranges are incorrect"); } public function setInactivityTimes ($times) { global $wpdb; $r = $wpdb->delete( $wpdb->prefix.'g_calendar_inactivity_times', array( 'calendar_id' => $this->id ) ); if ($r===false) return false; if (count($times) > 0) { $d = array(); foreach($times as $v) { $d[] = "({$this->id}, ".abs(intval($v[0])).", ".abs(intval($v[1])).")"; } $r = $wpdb->query( "INSERT INTO {$wpdb->prefix}g_calendar_inactivity_times(calendar_id,time_from,time_to) VALUES " . implode(",",$d) ); return !!$r; } return true; } public function getInactivityTimes () { global $wpdb; $results = $wpdb->get_results("SELECT time_from, time_to FROM {$wpdb->prefix}g_calendar_inactivity_times WHERE calendar_id = {$this->id}"); return array_map(function($d){return array($d->time_from,$d->time_to);}, $results); } /** * @param array $extras */ public function setExtras (array $extras) { global $wpdb; $r = $wpdb->delete( $wpdb->prefix."g_extra_calendar", array( "calendar_id" => $this->id ) ); if ($r===false) return false; if (count($extras)>0) { $r = $wpdb->query( "INSERT INTO {$wpdb->prefix}g_extra_calendar(calendar_id,extra_id) VALUES($this->id, " . implode("),({$this->id}, ",array_map(function($e){return $e->id;},$extras)) . ")" ); return !!$r; } return true; } public function getExtras () { return Extra::getForCalendar($this); } public function setUnavailDays (array $timings) { global $wpdb; $r = $wpdb->delete( $wpdb->prefix."g_calendar_timing", array( 'calendar_id' => $this->id ) ); if($r===false)return false; foreach ($timings as $k => $v) { if (empty(strtotime($v[0])) or empty(strtotime($v[1]))) return false; $timings[$k][0] = date("Y-m-d",strtotime($v[0])); $timings[$k][1] = date("Y-m-d",strtotime($v[1])); } if (count($timings)==0)return true; $d = array(); foreach ($timings as $v) { $d[] = "{$this->id},'unavail','{$v[0]}','{$v[1]}'"; } return !!$wpdb->query("INSERT INTO {$wpdb->prefix}g_calendar_timing (calendar_id, status, date_from, date_to) VALUES (".implode("),(", $d).")"); } public function getUnavailDays ($date_from, $date_to) { global $wpdb; $date_from = date("Y-m-d",strtotime($date_from)); $date_to = date("Y-m-d",strtotime($date_to)-1); $results = $wpdb->get_results(" SELECT date_from, date_to FROM {$wpdb->prefix}g_calendar_timing WHERE ((date_from >= '$date_from' AND date_from <= '$date_to') OR (date_to >= '$date_from' AND date_to <= '$date_to')) AND status = 'unavail' AND calendar_id = {$this->id} ", ARRAY_A); return $results; } }