<?
class SessionModule implements charcoal_IModule
{
	/*
	 *    コンストラクタ
	 */
	public function __construct()
	{
	}

	/*
	 * モジュール名
	 */
	public function getModuleName()
	{
		return "Session module";
	}

	/*
	 * モジュールを初期化する
	 */
	public function init( charcoal_Config $config )
	{
	}

	/*
	 * モジュールの処理を実行する
	 */
	public function execute( $action, charcoal_Request $request, charcoal_ProcedureContext $context, charcoal_Response $response )
	{
		switch ( $action ){
		case 'clear':
			{
				// セッションを破棄します
				$context->session->destroy();
			}
			break;
		case 'delete_step1':
			{
				// セッションからデータを削除
				$context->session->remove( 'step1_data' );
			}
			break;
		case 'write_step1':
			{
				// セッションにデータを書き込む
				$context->session->set( 'step1_data', s('ステップ1のデータ') );
			}
			break;
		case 'delete_step2':
			{
				// セッションからデータを削除
				$context->session->remove( 'step2_data' );
			}
			break;
		case 'write_step2':
			{
				// セッションにデータを書き込む
				$context->session->set( 'step2_data', s('ステップ2のデータ') );
			}
			break;
		case 'delete_step3':
			{
				// セッションからデータを削除
				$context->session->remove( 'step3_data' );
			}
			break;
		case 'write_step3':
			{
				// セッションにデータを書き込む
				$context->session->set( 'step3_data', s('ステップ3のデータ') );
			}
			break;
		case 'view':
			{
				// セッション名を取得
				$session_name = $context->session->getName();

				// セッション保存場所を取得
				$session_save_path = $context->session->getSavePath();

				// セッションクッキーのパラメータを取得
				$cookie_parameters = $context->session->getCookieParameters();
				$cookie_parameters = charcoal_System::arrayToString( $cookie_parameters );

				// 出力するメッセージをセッションから取得
				$step1_data = $context->session->get( 'step1_data' );
				$step2_data = $context->session->get( 'step2_data' );
				$step3_data = $context->session->get( 'step3_data' );

				// sessionをダンプ
				$dump_session = $context->session->__toString();

				// $_SESSIONをダンプ
				$dump_php_session = charcoal_System::arrayToString( $_SESSION );

				// $_REQUESTをダンプ
				$dump_php_request = charcoal_System::arrayToString( $_REQUEST );

				// Smarty#assignの代わりにResponseに値をセットします。
				$response->set( "session_name", $session_name );
				$response->set( "session_save_path", $session_save_path );
				$response->set( "cookie_parameters", $cookie_parameters );
				$response->set( "step1_data", $step1_data );
				$response->set( "step2_data", $step2_data );
				$response->set( "step3_data", $step3_data );
				$response->set( "dump_session", $dump_session );
				$response->set( "dump_php_session", $dump_php_session );
				$response->set( "dump_php_request", $dump_php_request );

				// テンプレートIDのセット: top_pageテンプレートを使用
				$context->set( "smarty_template", "top_page" );
			}
			break;
		}
	}
}
