<?php
/*
	Copyright(c) 2010 Shift Tech Inc. All Rights Reserved.
 	http://www.shift-tech.jp/

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

require_once (LIB_PATH.'/common/unitCommon.php');
/*
--FLASH 用 の詳細データ格納テーブル（公開情報）
DROP TABLE IF EXISTS unit_bFlash CASCADE;
CREATE TABLE unit_bFlash (
	pageu_code			integer,				--ユニット配列順序における登録番号
	bflash_title		text,					--タイトル
	bflash_swf			text,					--SWFファイル名
	bflash_w			integer,				--幅
	bflash_h			integer,				--高さ
	btm_padding			smallint default 2,		--下方スペース　0:なし　1：狭　2：標準　3：広
	primary key (pageu_code)
);

--FLASH 用 の詳細データ格納テーブル（下書き情報）
DROP TABLE IF EXISTS unit_bFlash_tmp CASCADE;
CREATE TABLE unit_bFlash_tmp (
	pageu_code			integer,				--ユニット配列順序における登録番号
	bflash_title		text,					--タイトル
	bflash_swf			text,					--SWFファイル名
	bflash_w			integer,				--幅
	bflash_h			integer,				--高さ
	btm_padding			smallint default 2,		--下方スペース　0:なし　1：狭　2：標準　3：広
	primary key (pageu_code)
);
 */
class bFlash extends unitCommon
{
	//------ ユニット毎に必ず設定しなくてはならない変数 -------//
	var $_table = "unit_bFlash"; //公開用テーブル名
	var $_tmptable = "unit_bFlash_tmp"; //下書き用テーブル名 //必ず公開用テーブル名のうしろに_tmpをつけてください
	var $columns = array(
					array("column"=>"pageu_code","conv"=>"n","tags"=>false),		//ユニット登録コード
					array("column"=>"bflash_title","conv"=>"","tags"=>false),		//タイトル
					array("column"=>"bflash_swf","conv"=>"","tags"=>false),			//SWF
					array("column"=>"bflash_w","conv"=>"n","tags"=>false),			//幅
					array("column"=>"bflash_h","conv"=>"n","tags"=>false),			//高さ
					array("column"=>"btm_padding","conv"=>"","tags"=>false)			//下方スペース
					);
	function bFlash()
	{
		$this->__construct();
	}

	function __construct()
	{
		unitCommon::__construct();
	}
	//-----------------

	//出力データセット処理（必須）
	function setDisplayData() {
		$data = null;
		$data = $this->getDetail();
		if ($data) {
			$data['src'] = UNITS_SWF_PATH.$data['bflash_swf'];
		}
		return $data;
	}

	/*
	 * DBより保存データ取得
	 * 改変可能
	 */
	function getDetail() {
		$rtn = null;
		$sql = "select * from ".$this->getTbl()." where pageu_code = ?";
		if(isset($this->_pageu_code)&&is_numeric($this->_pageu_code)) {
			$result = $this->db->prepare($sql,$this->_pageu_code);
			if($result) {
				$rtn = $result->fetchRow(DB_FETCHMODE_ASSOC);
			}
		}
		return $rtn;
	}


	function setDefault()
	{
		$data = $this->getDetail();
		$this->_form->setDefaults($data);
		if ($data['bflash_swf'] != '') {
			$this->_view->assign('src', BINGOTOPURL.UNITS_SWF_PATH.$data['bflash_swf']);
			$this->_view->assign('bflash_h', $data['bflash_h']);
			$this->_view->assign('bflash_w', $data['bflash_w']);
		}
	}

	//フォームエレメントの作成
	function setElements()
	{
		$this->_form->addElement('hidden','pageu_code', $this->_pageu_code,array("id"=>"pageu_code")); //ページコード
		$this->_form->addElement('hidden','bflash_swf', null,array("id"=>"bimg_img"));
		$this->_form->addElement('text','bflash_title', null, array('size'=>50,'id'=>'bflash_title'),$this->erchk);
		$this->_form->addElement('file', 'swf', '');
		$this->_form->addElement('text','bflash_w', null, array('size'=>7,'maxlength'=>3,'id'=>'bflash_w','style'=>'ime-mode:disabled'),$this->erchk);
		$this->_form->addElement('text','bflash_h', null, array('size'=>7,'maxlength'=>3,'id'=>'bflash_h','style'=>'ime-mode:disabled'),$this->erchk);
	}

	//フォーム入力エラーチェックの設定
	function setRules()
	{
		$this->_form->applyFilter('__ALL__','trim');
		$this->_form->_submitValues = DataBase::ConvColumnVals($this->_form->_submitValues,$this->columns); //ルールに従った値変換、タグの除去
		$this->_form->setJsWarnings('下記の項目が不正です。','');
		$this->_form->addRule('pageu_code','・「ユニットコード」が不明です。コンテンツ管理よりやり直してください','required',null,$this->erchk);
		//未登録（デフォルト）なら画像必須
		$obj = $this->_form->getElement("bflash_swf");
		if (!$obj->getValue()) {
			$this->_form->addRule('swf','・SWFファイルを選択してください。','uploadedfile',null,'server');
		}
		$this->_form->addRule('swf',"・SWFファイルサイズが大きすぎます。<br />アップロード可能なファイルサイズは".MAX_FILE_SIZE/(1000*1000)."Mbyte未満となっております。",'maxfilesize',MAX_FILE_SIZE,null,'server');
		$this->_form->addRule('swf','・アップロードできるファイル形式は「SWF」となっております。','mimetype',array("application/x-shockwave-flash"));
		$this->_form->addRule('bflash_w','・横サイズを入力してください。','required',null,$this->erchk);
		$this->_form->addRule('bflash_w','・横サイズは半角整数（3桁以内）で入力してください。', 'regex', '/^[0-9]{1,3}$/', $this->erchk);
		$this->_form->addRule('bflash_h','・縦サイズを入力してください。','required',null,$this->erchk);
		$this->_form->addRule('bflash_h','・縦サイズは半角整数（3桁以内）で入力してください。', 'regex', '/^[0-9]{1,3}$/', $this->erchk);
	}

	//データ下書き保存処理
	function doSave($post)
	{
		$bflash = '';
		//既存データがあるか確認（画像削除用にも使用）
		$old_data = $this->getDetail();

		//ファイルがアップロードされいてる場合の処理
		if (is_uploaded_file($_FILES['swf']["tmp_name"])) {
			//ファイル名
			$bflash = $this->_pageu_code.'-1-'.date("YmdHis");

			//保存用ディレクトリ
			$path = BASE_PATH.UNITS_SWF_PATH;
			//がなければ作成
			if (!is_dir($path)) {
				if (!mkdir($path, 0777)) {
					return "・保存先ディレクトリがありません";
				}
			}
			//保存（オリジナル）
			$fl = $this->_form->getElement('swf');
			$bflash = commonFile::uploadImage($fl, $path, $bflash);
			if (!$bflash) {
				return "・ファイルの保存に失敗しました";
			}
		}

		$record = null;
		foreach($this->columns as $val) {
			if($post[$val["column"]]!=null){
				$record[$val["column"]] = $post[$val["column"]];
			} else {
				$record[$val["column"]] = null;
			}
		}
		if ($bflash) {
			$record["bflash_swf"] = $bflash;
		}
/*
		else {
			//画像がなければサイズも保存しない
			unset($record["bflash_w"]);
			unset($record["bflash_h"]);
		}
*/
		//既存データがあるか確認
		$old_data = $this->getDetail();
		$this->db->query('BEGIN');
		//保存処理開始
		if(is_array($old_data)&& count($old_data)>0) {
			//更新
			if(!$this->db->update($this->getTbl(),$record, "pageu_code=".$record["pageu_code"])) {
				$this->db->query('ROLLBACK');
				return "・データの保存に失敗しました";
			}
		} else { //新規
			if(!$this->db->insert($this->getTbl(),$record)) {
				$this->db->query('ROLLBACK');
				return "・データの保存に失敗しました";
			}
		}
		$this->db->query('COMMIT');
		return null;
	}
}
?>