*

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(12)空室管理画面 C

公開日: : 最終更新日:2013/07/06 WordPress ,

空室情報のデータベース処理を一気に終えました。ごちゃごちゃしてきたので、もっとスッキリ書く方法が無いか模索したのですが、私の知識ではこれが精一杯。

こまかい調整は完了後に改めて試してみるということで、今回は先に進みます。

プラグインファイルのメイン部分

大きく3つの処理にわかれました。ひとつは日付や部屋タイプを変更した場合、そして空室を更新する場合と何も処理しない最初の表示となります。form の action に update と change を持たせて if で分岐。値がない場合は最初の表示となります。

wp-contents/plugins/drtehotel/drtehotel.php

//空室管理画面に表示する内容
include_once "class/rooms.php";
$rm = new ROOM();
//日付・部屋タイプ変更
if ($_POST['action']=='change') {
	$rm->rtype = $_POST['rtype'];
	$rm->rdate = $_POST['rdate'];
	$rm->stdRooms = $_POST['stdRooms'];
	$rm->refresh_table($this->table_name, $rm->rdate);
} else if ($_POST['action']=='update') {
	check_admin_referer('example');
	$rm->rtype = $_POST['rtype'];
	$rm->rdate = $_POST['rdate'];
	$rm->stdRooms = $_POST['stdRooms'];
	$rm->comments = '<div id="message" class="updated"><p>更新しました。</p></div>';
	$rm->update_rooms($this->table_name);
	$rm->delete_old($this->table_name);		// 古いデータの削除
} else {
	$rm->check_rdata();
	$rm->refresh_table($this->table_name, $rm->rdate);
}
//画面表示
$rm->load_data($this->table_name);
$rm->show_screen();

rtype プロパティへの割り当てが一回で済むような気もしますが、とりあえず後の課題としておきます。change(部屋タイプや日付の更新処理)の場合に、新しい空室情報のレコードが存在するかどうかをrefresh_table 関数で該当する月のレコードが存在するかどうかの確認処理します。内容は後ほど。

update(空室情報更新処理)の場合は delete_old 関数で古いレコードを削除しています。stdRooms で初期設定の部屋数を持ち歩いているのが気持ち悪いので、これも今後の課題としておきます。

スクリーンショット 2013-07-01 3.51.13

ROOMクラスのデータベース処理

空室更新処理です。テーブル名を引数で渡しているのは、wp_rooms のように頭に自動で追加される接頭辞(プレフィックス)に対応するためにプラグインファイル側で処理しているからです。

wp-contents/plugins/drtehotel/class/rooms.php

function update_rooms($table_name) {
	global $wpdb;
	if ( is_admin() ) {
		$last = intval($_POST['lastday']);
		$month = $_POST['month'];
		for ($i=0; $i<$last; $i++) {
			if( $i<9 )	$dd = "0" . strval($i+1); else $dd = $i + 1;
			$sd = $month . "-" . $dd;
			$rc = 'r_count' . $i;
			$rc = intval(mb_convert_kana($_POST[$rc], "a"));
			$wpdb->query( $wpdb->prepare(
				"UPDATE $table_name SET r_count = %d WHERE
				 r_season = %s AND s_date = %s" ,
					$rc, $this->rtype, $sd ));
		}
	}
}

データベース処理の時は必ず is_admin で権限の確認をするようにしてみました。$_POST[‘lastday’]で最終日、$_POST[‘month’]で 2013-06 という形式の対象となる日付を取得しています。$this->rtype は部屋の種類です。

	
function delete_old($table_name) {
	global $wpdb;
	if ( is_admin() ) {
		$startday = date("Y-m") . "-01";
		$sql = 'DELETE FROM ' . $table_name . ' s_date<"' . $startday . '"';
		$results = $wpdb->query($sql);
	}
}

削除処理は今月の1日以前(つまりもう使用しなデータ)を削除しています。

function refresh_table($table_name, $month) {
	global $wpdb;
	if ( is_admin() ) {
		$yy = mb_substr($month,0,4);		// 年の取り出し
		$mm = mb_substr($month,5,2);		// 月の取り出し
		$startday = $yy . "-" . $mm . "-01";
		$last = date('t', mktime(0,0,0, $mm, 1, $yy));
		$lastday= date('Y-m-t', mktime(0,0,0, $mm, 1, $yy));
		$sql = 'SELECT COUNT(*) FROM ' . $table_name . ' WHERE r_season= "' . $this->rtype
		 . '" AND (s_date>="' . $startday . '" AND s_date<= "' . $lastday . '" )';
		$results = $wpdb->get_var($sql);
		if ($results<20) {
			$sql = 'DELETE FROM ' . $table_name . ' WHERE r_season="' . $this->rtype
			 . '" AND (s_date>="' . $startday . '" AND s_date<= "' . $lastday . '" )';
			$results = $wpdb->query($sql);
			for ($i=0; $i<$last; $i++) {
				if( $i<9 )	$dd = "0" . strval($i+1); else $dd = $i + 1;
				$dd = $yy . "-" . $mm . "-" . $dd;
				$wpdb->query( $wpdb->prepare( 
				"INSERT INTO $table_name ( plan_id, s_date, r_count, r_season ) VALUES ( %s, %s, %d, %s )",
				strval($i+1), $dd, $this->stdRooms, $this->rtype ) );
			}			
		}
	}
}

SELECT COUNT(*)を$wpdb->get_varすることでレコード数を取得しています。レコード数が少ない時はデータが無いと判断して新しいデータを追加します。20件以下の場合はデータレコードが異常と判定し、一度レコードを削除してから新規に追加しています。$this->stdRoomsは初期設定された空き部屋数。

function load_data($table_name) {
	global $wpdb;
	if ( is_admin() ) {
		$yy = mb_substr($this->rdate,0,4);		// 年の取り出し
		$mm = mb_substr($this->rdate,5,2);		// 月の取り出し
		$startday = $yy . "-" . $mm . "-01";
		$lastday= date('Y-m-t', mktime(0,0,0, $mm, 1, $yy));	
		$results = $wpdb->get_results($wpdb->prepare(
			"SELECT * FROM $table_name WHERE r_season=%s AND (s_date>=%s AND s_date<=%s) ORDER BY s_date",
		$this->rtype, $startday, $lastday ));
		//var_dump($results);
		foreach ($results as $row) {
			$this->aki[] = $row->r_count;
		}
	}
}

レコードの読み込み処理です。日付順にORDERして配列に読み込んで置きます。のちほどのHTML生成過程で配列を読み込みながらフォームを表示します。

function create_calendar() {
	$yy = mb_substr($this->rdate,0,4);		// 年の取り出し
	$mm = mb_substr($this->rdate,5,2);		// 月の取り出し
	$last = date('t', mktime(0,0,0, $mm, 1, $yy));		// 末日
	$week = array( '日', '月', '火', '水', '木', '金', '土' );
	
	$tmp = "";
	for ($i=0; $i<$last; $i++) {
		if( $i<9 )	$dd = "0" . strval($i+1);
		else $dd = $i + 1;
		$youbi = date('w', mktime(0,0,0, $mm, $dd, $yy));
		$tmp .= '<tr>';
		$tmp .= '<td>' . $yy . "年" . $mm . "月" . $dd . "日</td>";
		if( $youbi==0 )	$tmp .= '<td class="sun">' . $week[$youbi] . "曜日</td>";
		else if( $youbi==6 )	$tmp .= '<td class="sat">' . $week[$youbi] . "曜日</td>";
		else $tmp .= '<td class="week">' . $week[$youbi] . "曜日</td>";
		$tmp .= '<td>'. $this->rtype . '</td>';
		$tmp .= '<td>';
		$tmp .= '<input type="text" name="r_count' . $i . '" value="' . $this->aki[$i] . '">';
		$tmp .= '<input type="hidden" name="s_date' . $i . '" value="' . $yy . '-' . $mm . '-' . $dd . '" />';
		$tmp .= '</td>';
		$tmp .= '</tr>';
	}
	$tmp .= '<input type="hidden" name="lastday" value="' . $last . '" />';
	$tmp .= '<input type="hidden" name="month" value="' . $yy . '-' . $mm . '" />';
	return $tmp;
}

HTML 生成部分。特に難しいところは無いような気がします。

今回はちょと長かったなぁ


Sponsored Link


 
 

関連記事

ワードプレス用宿泊予約プラグイン開発「空室カレンダー表示」

前回ネットで検索して見つけた calendar($year = "", $month = "") 関

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(2)

前回の物を若干変更しながら、どんどん進んでいきたいと思います。今回は管理画面の表示内容について行って

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(3)

前回のソースがイマイチだったので若干書き直しました。しかし、これで正しいのかも疑問なんですが、取り敢

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(1)

初心者が、あらためて WordPress のプラグインを一から作る経過報告。たぶん連載記事ですね。途

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(9)空室管理画面を考える

前回までで基本的なプラグインの制作方法を簡単に学びました。今回からは空室管理の画面を作ってみます。柔

記事を読む

ご質問は掲示板へお願いいたします。

Message

メールアドレスが公開されることはありません。

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

気になる情報・新製品発見メモ

日頃ネットをウロウロしていて記事にするほどでもない情報、記事にするほど

YAMAHA MG10UXミキサー到着

2018年 物置(事務所or作業場or遊び部屋)の一角を音声収録&撮影

そしてzbrush coreをインストールしてみる話

Blenderに挫折してから一気に3Dにのめり込んでいます。 ま

録音環境を改善する!吸音パネルをDIYとか

久々に更新! すっかり更新グセが抜けてしまい、イマイチやる気が出

CeVIO Creative StudioがMacのWin10で認証失敗

久しぶりに更新できました。 この時期は寒くて...と言い訳から入

xismoを使ってみて覚えたところと謎なところ(追記あり)

謎と言っても私の理解が足りないだけなんですけどね^^; 一応私の

→もっと見る




  •  

PAGE TOP ↑