<?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/sectionIdxDB.php');
require_once (LIB_PATH.'/common/categoryDB.php');
require_once (LIB_PATH.'/common/pageIdxDB.php');
require_once (LIB_PATH.'/common/pageView.php');
require_once (LIB_PATH.'/common/sectionuserDB.php');
require_once (LIB_PATH.'/common/unitCache.php');
class Admin_admin_contents_page_Index extends pageIdxDB
{
	var $_p = 0;
	function prepare($view)
	{
		$this->_p = $this->getRequest('p') ? $this->getRequest('p') : 0;
		$this->_sidx_code = $this->getRequest('sidx_code') ? $this->getRequest('sidx_code') : "";
		$this->_cat_code = $this->getRequest('cat_code') ? $this->getRequest('cat_code') : "";
		$this->setMprev();
		
		//編集可能チェック（担当者の場合のみ）
		//担当者の場合は編集できるメニューがある場合はそこへジャンプ、ない場合はアクセスエラー画面表示
		if($_SESSION["usr_info"]["usr_kanri"]!=1) {
			if(!sectionuserDB::EditCheck($_SESSION["usr_info"]["usr_code"],$this->_sidx_code)) {
				return 'contents/page/accesserr.tpl';
				exit();
			}
		}
		
		
		
		if(is_numeric($this->_sidx_code)) {
			$this->_sidx_data = sectionIdxDB::getData($this->_sidx_code,$this->_mprev);
			//$template_data = templateDB::getData($this->_sidx_data["sidx_tpl_code"]);
			//$template_data["thum"] = TEMPLATE_DIR."/".$template_data["skin_path"]."/thum.jpg";
			//$view->assign("tpl_data",$template_data);
		} else {
				return 'contents/page/err.tpl';
				exit();
		}
		if(is_numeric($this->_cat_code)) {
			$this->_cat_data = categoryDB::getData($this->_cat_code,$this->_mprev);
		} else {
				return 'contents/page/err.tpl';
				exit();
		}

		$errors = null;
		//再編集
		if($this->getRequest("BTNReEdit")&&is_numeric($this->getRequest("pidx_code"))) {
			if($this->setPublicToEditData($this->getRequest("pidx_code"))) {
				//$errors[]="保存しました";
			} else {
				$errors[]="編集モードへの移行に失敗しました";
			}
		}
		//公開処理
		else if($this->getRequest("BTNdisp")&&is_numeric($this->getRequest("pidx_code"))) {
			$pidx_code = $this->getRequest("pidx_code");
			$pidx_view_tmp = $this->getRequest("pidx_view_tmp");//申請中のレコードが公開されたのかチェックしてメール送信するため取得しておく
			$pageView = new pageView();
			if($pageView->setPublicData($pidx_code,$this->getRequest("pidx_date"))) {
				if($pidx_view_tmp==1) {
					//メール送信
					$pageData = $this->getTmpData($pidx_code);
					require_once (LIB_PATH.'/common/commonMail.php');
					$from = $_SESSION['usr_info']['usr_id'];
					$subject = "[".SITENAME."] ページ公開のお知らせ";
					//本文生成
					$msg = "公開申請中の下記のページを承認し、公開しました。\n";
					$msg .= "-------------------------------\n";
					$msg .= "　ページ情報\n";
					$msg .= "-------------------------------\n";
					$msg .= "ページURL：".pageView::getSiteURL($this->_sidx_data["sidx_dir"],$c=$this->_cat_data["cat_dir"],$pageData["pidx_url"],$this->_sidx_data["sidx_ssl"])."\n";
					if($this->_mprev) {
						$msg .= "※上記のURLはグローバルメニュー編集中につき、ページが表示されない場合があります。\n編集中のデザインにてページを確認する場合は下記URLからご確認ください。\n";
						$msg .= "ページURL：".pageView::getSiteURL($this->_sidx_data["sidx_dir"],$c=$this->_cat_data["cat_dir"],$pageData["pidx_url"],$this->_sidx_data["sidx_ssl"],$prev=true,$this->_mprev)."\n";
					}
					$msg .= "ページタイトル：".$pageData["pidx_title"]."\n";
					//送信先アドレス一覧取得　管理者、及び当セクションの担当者全員
					$sendtrgets = null;
					$sendtrgets = sectionuserDB::getPersonofCharge($this->_sidx_data["sidx_code"]);
					if(!is_array($sendtrgets)) {
						$errors[]="送信先アドレスが一件もみつかりませんでした。";
					} else {
						foreach($sendtrgets as $key=>$val) {
							if(!commonMail::sendMail($val["usr_id"], $subject, $msg, $from)) {
								$errors[]="ページの公開処理は完了しましたが、メール送信に失敗しました。";
								break;
							}
						}
						$errors[] = "ページ公開のお知らせメールを管理者、及び登録担当者宛に送信しました。";
					}
				} else {
					if($this->getRequest("mprev")==1) {
						$chkdata = null;
						$chkdata_cat = null;
						$chkdata = sectionIdxDB::getData($this->_sidx_code,false); //メニューが公開されているか調査
						$chkdata_cat = categoryDB::getData($this->_cat_code,false);
						if(!is_array($chkdata)||!(count($chkdata)>0) || !is_array($chkdata_cat) || !(count($chkdata_cat>0))) {
							$errors[]='公開しました。<script type="text/javascript">
//<![CDATA[
Event.observe(window, "load", function(event) {
alert("メニューが公開されていないため、公開したページはまだアクセスできません。\n「メニュー管理」よりメニューの公開処理を行えます。");
});
//]]>
</script>
							';
						} else {
							$errors[]="公開しました";
						}
					} else {
						$errors[]="公開しました";
					}
				}
				//ユニットキャッシュ機能
				//ユーザ編集エリアの静的ページを書き出し
				$cache = new unitCache();
				$cache->makeCache(&$view);
			} else {
				$errors[]="公開に失敗しました";
			}
		}
		//申請処理
		else if($this->getRequest("BTNapply")&&is_numeric($this->getRequest("pidx_code"))) {
			$pidx_code = $this->getRequest("pidx_code");

			if($this->setPidxView($pidx_code,1)) {
				//メール送信
				$pageData = $this->getTmpData($pidx_code);
				require_once (LIB_PATH.'/common/commonMail.php');
				$from = $_SESSION['usr_info']['usr_id'];
				$subject = "[".SITENAME."] 作成ページの公開申請 from ".$_SESSION['usr_info']['usr_sei']." ".$_SESSION['usr_info']['usr_mei'];
				//本文生成
				$msg = SITENAME." 管理者ユーザ様、\n\n";
				$msg .= "下記のページが新規作成、編集されました。\n管理者の方は下記URLより内容ご確認のうえ、管理画面-ページ管理より公開の処理をお願いします。\n";
				$msg .= "-------------------------------\n";
				$msg .= "　ページ情報\n";
				$msg .= "-------------------------------\n";
				$msg .= "プレビュー用URL：".pageView::getSiteURL($this->_sidx_data["sidx_dir"],$c=$this->_cat_data["cat_dir"],$pageData["pidx_url"],$this->_sidx_data["sidx_ssl"],true,$this->_mprev)."\n";
				$msg .= "ページタイトル：".$pageData["pidx_title"]."\n";
				$msg .= "申請者：".$_SESSION['usr_info']['usr_sei']." ".$_SESSION['usr_info']['usr_mei']."\n\n";
				$msg .= "管理画面へは下記URLからアクセスできます。\n";
				$msg .= WWW_SSL."/admin/index.php";
				//送信先アドレス一覧取得　管理者、及び当セクションの担当者全員
				$sendtrgets = null;
				$sendtrgets = sectionuserDB::getPersonofCharge($this->_sidx_data["sidx_code"]);
				if(!is_array($sendtrgets)) {
					$errors[]="送信先アドレスが一件もみつかりませんでした。";
				} else {
					foreach($sendtrgets as $key=>$val) {
						if(!commonMail::sendMail($val["usr_id"], $subject, $msg, $from)) {
							$errors[]="ページの申請処理が完了しましたが、メール送信に失敗しました。";
							break;
						}
					}
					$errors[] = "公開申請のメールを管理者、及び登録担当者宛に送信しました。";
				}
			} else {
				$errors[]="申請に失敗しました";
			}
		}
		//公開却下
		else if($this->getRequest("BTNreject")&&is_numeric($this->getRequest("pidx_code"))) {
			$pidx_code = $this->getRequest("pidx_code");
			if($this->setPidxView($pidx_code,-1)) {
				//メール送信
				require_once (LIB_PATH.'/common/commonMail.php');
				$pageData = $this->getTmpData($pidx_code);
				$from = ADMIN_MAIL;
				$subject = "[".SITENAME."] 作成ページの公開が却下されました";
				//本文生成
				$msg = SITENAME." 作成担当様\n\n";
				$msg .= "公開申請中の下記ページが承認されませんでした。内容を再確認ください。\n";
				$msg .= "-------------------------------\n";
				$msg .= "　ページ情報\n";
				$msg .= "-------------------------------\n";
				
				$msg .= "プレビュー用URL：".pageView::getSiteURL($this->_sidx_data["sidx_dir"],$c=$this->_cat_data["cat_dir"],$pageData["pidx_url"],$this->_sidx_data["sidx_ssl"],true)."\n";
				$msg .= "ページタイトル：".$pageData["pidx_title"]."\n\n";
				$msg .= "管理画面はこちらから\n";
				$msg .= WWW_SSL."/admin/index.php";
				//送信先アドレス一覧取得　管理者、及び当セクションの担当者全員
				$sendtrgets = null;
				$sendtrgets = sectionuserDB::getPersonofCharge($this->_sidx_data["sidx_code"]);
				if(!is_array($sendtrgets)) {
					$errors[]="送信先アドレスが一件もみつかりませんでした。";
				} else {
					foreach($sendtrgets as $key=>$val) {
						if(!commonMail::sendMail($val["usr_id"], $subject, $msg, $from)) {
							$errors[]="ページの公開承認却下の処理は完了しましたが、メール送信に失敗しました。";
							break;
						}
					}
					$errors[] = "公開却下のメールを管理者、及び登録担当者宛に送信しました。";
				}
			} else {
				$errors[]="却下に失敗しました";
			}
		}
		$view->assign('ERROR',$errors);
		
		return null;
	}

	function perform($view)
	{
		//ツリービュー
		$tree = $this->getTreeView($view);
		
		if(is_numeric($this->_sidx_code)&&is_numeric($this->_cat_code)&& is_array($this->_sidx_data)&& is_array($this->_cat_data)) {
			$list = $this->getlistAll($this->_sidx_code, $this->_cat_code);
		} else {
			 return 'contents/page/accesserr.tpl';
		}
		//index.php有無チェック
		if($this->getPtype($this->_sidx_code,$this->_cat_code,$prev=true)) {
			$view->assign('Ptype1', true);
		}
		//リスト型index.php有無チェック
		/*pidx_ptype=1は廃止 v1.2
		$this->_listflg = $this->getPtypeList($this->_sidx_code,$this->_cat_code,$prev=true);
		$view->assign("Ptype2",$this->_listflg);
		*/
		
		$rtn = array();
		$rtn = Pager(AD_PAGER_LIMIT, $this->_p, $list, $method='GET', $urlvar='p');
		//url変換
		if(is_array($rtn["pagedata"])) {
			foreach($rtn["pagedata"] as $key => $val) {
				$rtn["pagedata"][$key]["url"] = pageView::getSiteURL($this->_sidx_data["sidx_dir"],$c=$this->_cat_data["cat_dir"],$p=$val["pidx_url_tmp"],$this->_sidx_data["sidx_ssl"]);
				$rtn["pagedata"][$key]["preurl"] = pageView::getSiteURL($this->_sidx_data["sidx_dir"],$c=$this->_cat_data["cat_dir"],$p=$val["pidx_url_tmp"],$this->_sidx_data["sidx_ssl"],$prev=true);
			}
		}
		$view->assign('list', $rtn["pagedata"]);
		$view->assign('Pages', $rtn["pageNavi"]["all"]);
		$view->assign('sidx_data',$this->_sidx_data);
		$view->assign('cat_data',$this->_cat_data);
		
		if($tree!=null) {
			$view->assign("treeView", $tree);
			//$view->assign("treeViewPre", $treePre);
		} else {
			return 'contents/page/err.tpl';
		}
		///////////////////
		
		
        return 'contents/page/index.tpl';
	}
	
	function getTreeView(&$view) {
		$sectionIdxDB = New sectionIdxDB();
		$list = array(); //セクションリスト
		if($_SESSION["usr_info"]["usr_kanri"]!=1){
			$list = $sectionIdxDB->getlistAll($_SESSION["usr_info"]["usr_code"]);
		} else {
			$list = $sectionIdxDB->getlistAll();
		}
		//編集中メニューの先頭のIDを取得する
		if(is_array($list)) {
			foreach($list as $key => $val) {
				if($val["sidx_view_tmp"]!=2) {
					 $view->assign("tmpPagesidx_code",$val["sidx_code_tmp"]);
					 break;
				}
			}
		}
		
		
		$clist = array(); //セクションごとのカテゴリ格納ツリー
		if(is_array($list)) {
			foreach($list as $key=>$val) {
				$clist[$val["sidx_code"]]=array();
			}
		} else {
			//リストが無い場合は許可されているセクションがなし
			return null;
		}
		$categoryDB= new categoryDB();
		$call = $categoryDB->getlistAll();
		foreach($clist as $key=>$val){
			foreach($call as $ckey=>$cval) {
				if($cval["cat_sidx_code"] == null || $cval["cat_sidx_code"]==$key) {
					$clist[$key][] = $cval;
				}
			}
		}
		$js = null;
		//sectionツリー
		if(is_array($list)) {
			$rootflg=false;
			foreach($list as $key=>$val) {
				if($val["sidx_code"]) {
					$js .= 'var secp = {label:"'.htmlspecialchars($val["sidx_title"]).'", href:"index.php?cat_code=1&sidx_code='.$val["sidx_code"].'"};'."\n";
					$open_flg = 'false';
					/*
					if($this->getRequest("sidx_code") == $val["sidx_code"]) {
						$open_flg = 'true';
					}
					*/
					//全部開いておく
					$open_flg = 'true';
					if($val["sidx_code"]==1) {
						$js .= 'var root = new YAHOO.widget.TextNode(secp, tree.getRoot(), true);'."\n";
						$rootflg = true;
					} else {
						$js .= 'var sec'.$val["sidx_code"].' = new YAHOO.widget.TextNode(secp, root, '.$open_flg.');'."\n";
					}
				}
			}
			if(!$rootflg) {
				$js = 'var rootp = { label:"編集可能なメニュー一覧", href:""};var root = new YAHOO.widget.TextNode(rootp, tree.getRoot(), true);'.$js;
			}
		}
		//カテゴリツリー
		$cnt = 0;
		foreach($clist as $ckey => $crecord) {
			foreach($crecord as $cckey => $ccrecord) {
				$jscat = null;
				if($ccrecord["cat_code"]!=null && $ccrecord["cat_code"]!=1) {
					$jscat = 'var catp = {label:"'.htmlspecialchars($ccrecord["cat_name"]).'", href:"index.php?sidx_code='.$ckey.'&cat_code='.$ccrecord["cat_code"].'"};'."\n";
				}
				$open_flg = 'false';
				if($this->getRequest("cat_code") == $ccrecord["cat_code"]) {
					$open_flg = 'true';
				}
				if($jscat!=null) {
					$js .= $jscat;
					$js .= 'var cat'.$cnt.' = new YAHOO.widget.TextNode(catp, sec'.$ckey.', '.$open_flg.');'."\n";
				}
				$cnt++;
			}
		}
		return $js;
	}

	function setMprev() {
		$this->_mprev = $this->getRequest('mprev') ? true : false;
	}
	
}
?>
