prefix = $prefix;
$this->pluginName = $pluginName;
$this->setting = new booking_package_setting($prefix, $pluginName);
$this->schedule = new booking_package_schedule($prefix, $pluginName, null);
}
public function catchWebhook($target, $server, $post, $body = false){
global $wpdb;
/** accountKey **/
$accountKey = 1;
$timeMin = date('U') - (7 * 24 * 60 * 60);
$schedule = $this->schedule;
$setting = $this->setting;
$list = array();
$eventList = array();
$calendarAccountList = array();
$table_name = $wpdb->prefix . "booking_package_calendar_accounts";
#$sql = $wpdb->prepare("SELECT `key`,`googleCalendarID` FROM `".$table_name."`;", array());
$rows = $wpdb->get_results("SELECT `key`,`googleCalendarID` FROM `".$table_name."`;", ARRAY_A);
foreach($rows as $row){
$calendarAccountList[$row['googleCalendarID']] = $row['key'];
$list = array_merge($list, $schedule->getUserList($timeMin, $row['key']));
$eventList = array_merge($eventList, $setting->listsGC($row['key'], $row['googleCalendarID'], $timeMin));
}
#$eventList = $setting->listsGC($timeMin);
#var_dump($eventList);
if(is_null($eventList)){
return null;
}
$timezone = get_option('timezone_string');
date_default_timezone_set($timezone);
#$list = $schedule->getUserList($timeMin, $accountKey);
$userLists = array();
for($i = 0; $i < count($list); $i++){
$key = $list[$i]["iCalIDforGoogleCalendar"];
$userLists[$key] = $list[$i];
}
#var_dump($calendarAccountList);
$googleCalendarID = null;
foreach($eventList as $key => $value){
$calendarAccount = array();
if(isset($calendarAccountList[$value['googleCalendarID']])){
$accountKey = $calendarAccountList[$value['googleCalendarID']];
$calendarAccount = $schedule->getCalendarAccount($accountKey);
$googleCalendarID = $value['googleCalendarID'];
}else{
continue;
}
#print "iCalIDforGoogleCalendar = ".$key."
";
$iCalIDforGoogleCalendar = $key;
$timeStart = date( "U", strtotime($value["timeStart"]));
$timeEnd = date( "U", strtotime($value["timeEnd"]));
$accommodationDetails = array();
if(isset($userLists[$key])){
#print "check update
";
$id = $userLists[$key]['key'];
$applicantCount = $userLists[$key]['applicantCount'];
$accommodationDetails = json_decode($userLists[$key]['accommodationDetails'], true);
$description = $eventList[$key]['description'];
$bookingTimeStart = $userLists[$key]["scheduleUnixTime"];
$bookingTimeEnd = $userLists[$key]["scheduleUnixTime"] + (intval($userLists[$key]["courseTime"]) * 60);
if($calendarAccount['type'] == 'hotel'){
#var_dump($value);
$bookingTimeStart = $userLists[$key]["checkIn"];
$bookingTimeEnd = $userLists[$key]["checkOut"] - (1440 * 60);
/**
$timeStart = date('U', mktime(0, 0, 0, date('n', $timeStart), date('j', $timeStart), date('Y', $timeStart)));
$timeEnd = date('U', mktime(0, 0, 0, date('n', $timeEnd), date('j', $timeEnd), date('Y', $timeEnd))) - (1440 * 60);
**/
if(!is_null($value['dateStart']) && !is_null($value['dateEnd'])){
$dateStartParse = date_parse($value['dateStart']);
$dateEndParse = date_parse($value['dateEnd']);
$timeStart = date('U', mktime(0, 0, 0, $dateStartParse['month'], $dateStartParse['day'], $dateStartParse['year']));
$timeEnd = date('U', mktime(0, 0, 0, $dateEndParse['month'], $dateEndParse['day'], $dateEndParse['year'])) - (1440 * 60);
}else{
$timeStart = date('U', mktime(0, 0, 0, date('n', $timeStart), date('j', $timeStart), date('Y', $timeStart)));
$timeEnd = date('U', mktime(0, 0, 0, date('n', $timeEnd), date('j', $timeEnd), date('Y', $timeEnd))) - (1440 * 60);
}
if($bookingTimeStart != $timeStart || $bookingTimeEnd != $timeEnd){
#print $bookingTimeStart." ".$timeStart." - ".$bookingTimeEnd." ".$timeEnd."
";
$scheduleResponse = $schedule->serachSchedule($timeStart, $accountKey);
if($scheduleResponse['status'] != "error"){
$accommodationDetails['list'][(string) $timeStart] = $scheduleResponse;
}
$scheduleResponse = $schedule->serachSchedule($timeEnd, $accountKey);
if($scheduleResponse['status'] != "error"){
$accommodationDetails['list'][(string) $timeEnd] = $scheduleResponse;
}
#$guestsList = $setting->getGuestsList($accountKey, true);
$guestsList = $accommodationDetails['guestsList'];
#var_dump($guestsList);
foreach($guestsList as $guestsKey => $guestsValue){
for($i = 0; $i < count($guestsValue['json']); $i++){
if($guestsValue['json'][$i]['selected'] == 1){
$accommodationDetails['guestsList'][$guestsValue['key']] = $guestsValue['json'][$i];
}
}
}
$accommodationDetails = $schedule->createAccommodationDetails($calendarAccount, $accommodationDetails, $timeStart, $applicantCount, $accommodationDetails);
unset($accommodationDetails['list']);
#$bookingTimeEnd += 1440 * 60;
$timeEnd++;
#var_dump($accommodationDetails);
#var_dump($userLists[$key]);
}
}
$form = $userLists[$key]["praivateData"];
#print "bookingTimeStart = ".$bookingTimeStart."
";
#print "bookingTimeEnd = ".$bookingTimeEnd."
";
if(intval($userLists[$key]['resultOfGoogleCalendar']) != 0){
$update = $this->prepareFrom("update", $id, $eventList[$key]['name'], $eventList[$key]['address'], $eventList[$key]['description'], json_decode($form, true));
if($bookingTimeStart != $timeStart || $bookingTimeEnd != $timeEnd){
$response = $schedule->changeBookingTime("update", $id, $userLists[$key]["scheduleKey"], $userLists[$key]["status"], $userLists[$key]['applicantCount'], $timeStart, $timeEnd, $bookingTimeStart, $bookingTimeEnd, $accommodationDetails, $accountKey);
if($response['event'] == 'return'){
$setting->pushGC('update', $accountKey, $calendarAccount['type'], $id, $googleCalendarID, $bookingTimeStart, $bookingTimeEnd, json_decode($form), $key);
}
}
}
unset($userLists[$key]);
}else{
$googleCalendarIDofVisitor = $schedule->serachGoogleCalendarIdOfVisitor($iCalIDforGoogleCalendar);
if($googleCalendarIDofVisitor != false){
continue;
}
if($calendarAccount['type'] == 'hotel'){
#var_dump($value);
if(!is_null($value['dateStart']) && !is_null($value['dateEnd'])){
$dateStartParse = date_parse($value['dateStart']);
$dateEndParse = date_parse($value['dateEnd']);
$timeStart = date('U', mktime(0, 0, 0, $dateStartParse['month'], $dateStartParse['day'], $dateStartParse['year']));
$timeEnd = date('U', mktime(0, 0, 0, $dateEndParse['month'], $dateEndParse['day'], $dateEndParse['year'])) - (1440 * 60);
}else{
$timeStart = date('U', mktime(0, 0, 0, date('n', $timeStart), date('j', $timeStart), date('Y', $timeStart)));
$timeEnd = date('U', mktime(0, 0, 0, date('n', $timeEnd), date('j', $timeEnd), date('Y', $timeEnd))) - (1440 * 60);
}
$scheduleResponse = $schedule->serachSchedule($timeStart, $accountKey);
if($scheduleResponse['status'] != "error"){
$accommodationDetails['list'][(string) $timeStart] = $scheduleResponse;
}else{
$setting->deleteGC($accountKey, $iCalIDforGoogleCalendar, $googleCalendarID);
continue;
}
$scheduleResponse = $schedule->serachSchedule($timeEnd, $accountKey);
if($scheduleResponse['status'] != "error"){
$accommodationDetails['list'][(string) $timeEnd] = $scheduleResponse;
}else{
$setting->deleteGC($accountKey, $iCalIDforGoogleCalendar, $googleCalendarID);
continue;
}
$guestsList = $setting->getGuestsList($accountKey, true);
foreach($guestsList as $guestsKey => $guestsValue){
#$guestsJson = json_decode($guestsValue['json'], true);
$accommodationDetails['guestsList'][$guestsValue['key']] = $guestsJson[0];
}
$accommodationDetails = $schedule->createAccommodationDetails($calendarAccount, $accommodationDetails, $timeStart, $applicantCount, null);
unset($accommodationDetails['list']);
$schedule->setAccommodationDetails($accommodationDetails);
}
$bookingSchedule = $schedule->serachSchedule($timeStart, $accountKey);
if($bookingSchedule['status'] != 'error' && $bookingSchedule['stop'] == 'false'){
$applicantCount = 1;
$time = ($timeEnd - $timeStart) / 60;
$course = $this->prepareCourses($time, $accountKey);
/** $course arrays exchange to $courseKey, $courseName, $courseTime, $courseCost. **/
extract($course, EXTR_SKIP);
$bool = $schedule->changeBookingTime("insert", null, null, null, $applicantCount, $timeStart, $timeEnd, null, null, $accommodationDetails, $accountKey);
if($bool === true){
$form = json_encode($setting->getForm($accountKey));
$form = $this->prepareFrom("insert", $id, $eventList[$key]['name'], $eventList[$key]['address'], $eventList[$key]['description'], json_decode($form, true));
$table_name = $wpdb->prefix . "booking_package_schedules";
$sql = "SELECT * FROM `".$table_name."` WHERE `accountKey` = %d AND (`unixTime` >= %d AND `unixTime` < %d) ORDER BY `unixTime` ASC ;";
$values = array(intval($accountKey), intval($timeStart), intval($timeEnd));
if($timeStart == $timeEnd){
$sql = "SELECT * FROM `".$table_name."` WHERE `accountKey` = %d AND `unixTime` = %d;";
$values = array(intval($accountKey), intval($timeStart));
}
if($calendarAccount['type'] == 'hotel'){
$sql = "SELECT * FROM `".$table_name."` WHERE `accountKey` = %d AND (`unixTime` >= %d AND `unixTime` <= %d) ORDER BY `unixTime` ASC ;";
$values = array(intval($accountKey), intval($timeStart), intval($timeEnd));
}
$currency = get_option($this->prefix."currency", 'usd');
$status = $schedule->getStatus();
$schedule->updateRemainderSeart("increase", $sql, $values, $applicantCount);
$lastID = $schedule->insertPrivateData(date('U'), 'google', $status, $bookingSchedule['key'], $bookingSchedule['unixTime'], $bookingSchedule['title'], $bookingSchedule['cost'], $courseKey, $courseName, $courseTime, $courseCost, $form, $currency, null, null, $accountKey, $applicantCount);
$schedule->updateICalIDforGoogleCalendar($lastID, $iCalIDforGoogleCalendar);
}else{
/** Delete events sent from Google Calendar. **/
#var_dump("Delete events sent from Google Calendar.");
$setting->deleteGC($accountKey, $iCalIDforGoogleCalendar, $googleCalendarID);
}
}else{
$setting->deleteGC($accountKey, $iCalIDforGoogleCalendar, $googleCalendarID);
#print "Google Calendar から送られてきたイベントを削除
";
}
}
#print "