<?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/>.
*/

/**
 * ページの構成unitDBアクセスクラス
 * @author 	yamamoto
 * @version	
 */
require_once (LIB_PATH.'/common/unitDB.php');
class pageUnitDB extends Model
{
	var $_form = null;
	var $erchk = 'server';//quickformエラーチェックのフラグ'client'or'server;
	var $db=null;
	var $_sidx_code = null;
	var $_cat_code = null;
	var $_pidx_code = null;
	var $_m_unit = null;
	//KVa => 半カナを全カナ,濁点つきの文字を１文字に変換する (K、H と共に利用する）,全角英数字を半角英数字に変換する
	//KVC => 半カナを全カナ,濁点つきの文字を１文字に変換する (K、H と共に利用する）,全角ひらがなを全角カタカナに変換する
	//n   => 全角数字を半角数字に変換する
/*
DROP TABLE IF EXISTS tbl_page_unit CASCADE;
CREATE TABLE tbl_page_unit (
	pageu_code			integer,			--ユニット登録コード
	pageu_pidx_code		integer not null,	--記事コード
	pageu_pagec_code	integer not null,	--コンテナコード
	pageu_column		integer default 0,	--コンテナ内カラムNo, 左から 0, 1,2,3,4,5
	pageu_unit_code		integer not null,	---ユニットマスタコード
	pageu_order			integer default 0,	--表示順
	primary key (pageu_code)
);
CREATE SEQUENCE tbl_page_unit_pageu_code_seq;

--ユニットの配置順序（TMP）------------------------------------------------------------
DROP TABLE IF EXISTS tbl_page_unit_tmp CASCADE;
CREATE TABLE tbl_page_unit_tmp (
	pageu_code			integer,			--ユニット登録コード
	pageu_extmodule_code	integer,		--拡張モジュールコード（!=nullの場合は削除不可、移動可能）
	pageu_pidx_code		integer not null,	--記事コード
	pageu_pagec_code	integer not null,	--コンテナコード
	pageu_column		integer default 0,	--コンテナ内カラムNo, 左から 0, 1,2,3,4,5
	pageu_unit_code		integer not null,	---ユニットマスタコード
	pageu_order			integer default 0,	--表示順
	primary key (pageu_code)
);

*/
	var $columns = array(
						array("column"=>"pageu_code","conv"=>"n","tags"=>false),		//ユニット登録コード
						array("column"=>"pageu_extmodule_code","conv"=>"n","tags"=>false),		//拡張モジュール登録コード
						array("column"=>"pageu_pidx_code","conv"=>"n","tags"=>false),	//ページ番号
						array("column"=>"pageu_pagec_code","conv"=>"n","tags"=>false),	//コンテナコード
						array("column"=>"pageu_column","conv"=>"n","tags"=>false),		//コンテナカラム番号
						array("column"=>"pageu_unit_code","conv"=>"a","tags"=>false),	//ユニットマスタコード
						array("column"=>"pageu_order","conv"=>"n","tags"=>false)		//表示順
						);

	function pageUnitDB()
	{
		$this->__construct();
	}
	function __construct()
	{
		Model::__construct();
		$this->db = new DataBase();
	}

	//フォームエレメントの作成
	function setElements()
	{
		$this->_form->addElement('hidden','token', null);
		if(empty($this->_form->_submitValues)) {
			$record["token"] = $this->getToken();
			$this->_form->setDefaults($record);
		}
		$this->_form->addElement('hidden','sidx_code', $this->getrequest("sidx_code"),array("id"=>"sidx_code"));
		$this->_form->addElement('hidden','cat_code', $this->getrequest("cat_code"),array("id"=>"cat_code"));
		$this->_form->addElement('hidden','pidx_code', $this->getrequest("pidx_code"),array("id"=>"pidx_code"));
		$this->_form->addElement('hidden','mprev', $this->getrequest("mprev"),array("id"=>"mprev"));
	}
	
	//フォーム入力エラーチェックの設定
	function setRules()
	{
		$this->_form->applyFilter('__ALL__','trim');
		$this->_form->_submitValues = DataBase::ConvColumnVals($this->_form->_submitValues,$this->columns); //ルールに従った値変換、タグの除去
		$this->_form->setJsWarnings('下記の項目が不正です。','');		
		$this->_form->addRule('sidx_code','・「セクションコード」が不明です。コンテンツ管理よりやり直してください','required',null,$this->erchk);
		$this->_form->addRule('cat_code','・「カテゴリコード」が不明です。コンテンツ管理よりやり直してください','required',null,$this->erchk);
		$this->_form->addRule('pidx_code','・「ページコード」が不明です。コンテンツ管理よりやり直してください','required',null,$this->erchk);
	}
	
	//ボタン作成
	function setButtons() {
		$buttons = array();
		//$buttons[] = $this->_form->createElement('submit','BTNback','もどる',array('id'=>'BTNback'));
		$buttons[] = $this->_form->createElement('submit','BTNsave','保存する',array('id'=>'BTNsave'));
		$this->_form->addGroup($buttons,"buttons", null, '&nbsp;&nbsp;');
	}

	/**
	 * ページコードからユニットリスト取得
	 * @param pidx_code
	 * @return	array
	 */
	function getData($pidx_code, $prev=true)
	{
		$tbl = ($prev)?"tbl_page_unit_tmp":"tbl_page_unit";
		$rtn = array();
		if(isset($pidx_code)&&is_numeric($pidx_code)) {
			$sql = "select * 
					from ".$tbl." 
					inner join tbl_unit on pageu_unit_code = unit_code 
					left outer join tbl_extmodule on unit_extmodule_code = extmodule_code 
					where pageu_pidx_code = ? and unit_active = 1  and (extmodule_active is null or extmodule_active = 1) 
					order by pageu_pagec_code,pageu_column,pageu_order";
			$result = $this->db->prepare($sql,$pidx_code);
			while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){
				$rtn[] = $row;
			}
		}
		return $rtn;
	}
	
	/*
	 * ユニットコードから詳細情報取得
	 * @param pageu_code ユニットコード
	 * @param prev プレビューフラグ
	 */
	function getDetail($pageu_code,$prev=false) {
		$table = "tbl_page_unit";
		if($prev) {
			$table = "tbl_page_unit_tmp";
		}
		
		$rtn = array();
		if(isset($pageu_code)&&is_numeric($pageu_code)) {
			$sql = "select * 
					from ".$table." 
					inner join tbl_unit on pageu_unit_code = unit_code 
					left outer join tbl_extmodule on unit_extmodule_code = extmodule_code 
					where pageu_code = ? and unit_active = 1";
			$result = $this->db->prepare($sql,$pageu_code);
			$rtn = $result->fetchRow(DB_FETCHMODE_ASSOC);
		}
		return $rtn;
	}
	
	/*
	 * クリップボードのユニット詳細データ取得
	 */
	function getUnitClipDetail($pageu_code) {
		$rtn = array();
		if(isset($pageu_code)&&is_numeric($pageu_code)) {
			$sql = "select * 
					from tbl_unitclip 
					inner join tbl_unit on pageu_unit_code = unit_code 
					left outer join tbl_extmodule on unit_extmodule_code = extmodule_code 
					where pageu_code = ? and unit_active = 1";
			$result = $this->db->prepare($sql,$pageu_code);
			$rtn = $result->fetchRow(DB_FETCHMODE_ASSOC);
		}
		return $rtn;
	}
	
	/*
	 * クリップボードに登録されているユニット一覧取得
	 */
	function getUnitClipList() {
		$sql = "select * from tbl_unitclip 
					inner join tbl_unit on pageu_unit_code = unit_code 
					left outer join tbl_extmodule on unit_extmodule_code = extmodule_code 
					where unitclip_active=1 and unit_active = 1 and (extmodule_active is null or extmodule_active = 1) 
					order by pageu_code desc";
		$result = $this->db->query($sql);
		$rtn=null;
		$data = array();
		if($result != null) {
			global $m_unit_type;
			while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
				if(isset($row) && is_array($row) && count($row) > 0) {
					if(isset($row["unit_type"])){
					 	$row["unit_type_name"] = $m_unit_type[$row["unit_type"]];
					 	$idname = basename($row["unit_php_path"], ".php");
						if($row["unit_type"]==2 ||$row["unit_type"]==3) {
							$row["unit_icn"] = '<img src="../../..'.UNITS_DIR.'/'.$idname.'/'.$idname.'.gif">'."\n";
						} else if($row["unit_type"]==6){
							$row["unit_icn"] = '<img src="../../..'.MODULES_DIR.'/'.unitDB::getModuleUnitPath($row["extmodule_path"]).$idname.'/'.$idname.'.gif">'."\n";
						} else {
							$row["unit_icn"] = '<img src="../../..'.EXT_UNITS_DIR.'/'.$idname.'/'.$idname.'.gif">'."\n";
						}
					}
					$data[$row["pageu_code"]] = $row;
				}
			}
		}
		return $data;
	}

	//データ保存
	// return null == 成功、　エラー時はメッセージを返す
	function doSave()
	{
		if(!is_array($_SESSION["page_unit"])) {
			return "・ユニットが一つも登録されていません。";
		}
		//updateかinsertかdeleteかを判断するため、DBよりデータを取得
		$savedlist = $this->getData($this->_pidx_code);
		//idだけの配列に変換
		foreach($savedlist as $key=>$val) {
			$saved_ids[] = $val["pageu_code"];
		}
		//コンテナ存在チェック用にコンテナIDを配列に入れておく
		$container_ar = array();
		$pagecontainerDB = new pagecontainerDB();
		$tmp = array();
		$tmp = $pagecontainerDB->getData($this->_pidx_code, 1);
		foreach($tmp as $tmp => $val) {
			$container_ar[] = $val["pagec_code"];
		}

		$this->db->query('BEGIN');
		foreach($_SESSION["page_unit"] as $key => $val) { //コンテナ
			foreach($val as $ckey => $cval) { //カラム
				foreach($cval as $ukey => $uval) { //ゆにっと
					//保存用レコードの作成
					$record = array();
					foreach($this->columns as $col) {
						if(isset($uval[$col["column"]])){
							$record[$col["column"]] = $uval[$col["column"]];
						} else {
							$record[$col["column"]] = null;
						}
					}
					//保存処理開始
					if(is_array($saved_ids) && in_array($record["pageu_code"],$saved_ids)) {
						//更新
						if(in_array($record["pageu_pagec_code"], $container_ar)) {
							if(!$this->db->update("tbl_page_unit_tmp",$record, "pageu_code=".$record["pageu_code"])) {
								$this->db->query('ROLLBACK');
								return "・データの保存に失敗しました";
							}
						} else {
								$this->db->query('ROLLBACK');
								return "・保存先のコンテナが削除されています。STEP1からやり直してください。";
						}
						

					} else { //新規
						$record["pageu_code"] = $this->db->getKey("tbl_page_unit_pageu_code");//登録ID
						//コピーユニットかどうか判別
						if(isset($uval["cp"]) && is_numeric($uval["cp"])) { //コピーユニットならば、コピー処理
							//コピーコードからユニットのクラスを宣言
							$unitdata = null;
							$unitdata = $this->getUnitClipDetail($uval["cp"]);
							//プログラムファイルの読み込み
							if(isset($unitdata["unit_php_path"])) {
								$units_dir = basename($unitdata["unit_php_path"],".php");
								//require_once(UNITS_PATH."/".$units_dir[0]."/".$unitdata["unit_php_path"]);
								switch($unitdata["unit_type"]) {
									case 2:
									case 3:
										require_once(UNITS_PATH."/".$units_dir."/".$unitdata["unit_php_path"]);
										break;
									case 4:
									case 5:
										require_once(EXT_UNITS_PATH."/".$units_dir."/".$unitdata["unit_php_path"]);
										break;
									case 6:
											require_once(MODULES_PATH."/".unitDB::getModuleUnitPath($unitdata["extmodule_path"]).$units_dir."/".$unitdata["unit_php_path"]);
										break;
									default :
										break;
								}
							}
							$unit_class = new $units_dir;
							$unit_class->init($uval["cp"], $unit_class_name, $view=null, $prev=true, $unitdata);
							if(!$unit_class->unitCopy($uval["cp"], $record["pageu_code"], $this->db)) { // $uval["cp"]:コピー元のユニット登録コード
								$this->db->query('ROLLBACK');
								return "・データの保存に失敗しました";
							}
						}
						if(in_array($record["pageu_pagec_code"], $container_ar)) {
							if(!$this->db->insert("tbl_page_unit_tmp",$record)) {
								$this->db->query('ROLLBACK');
								return "・データの保存に失敗しました";
							}
						} else {
								$this->db->query('ROLLBACK');
								return "・保存先のコンテナが削除されています。STEP1からやり直してください。";
						}
					}
					//保存処理を行ったidを保存しておく
					$savedcmp_ids[] = $record["pageu_code"];
				}
			}
		}
		//削除処理
		if(is_array($saved_ids)) {
			foreach($saved_ids as $id) {
				if(!in_array($id, $savedcmp_ids)) {
					if(!$this->db->delete("tbl_page_unit_tmp", "pageu_code=".$id)) {
						$this->db->query('ROLLBACK');
						return "・既存データの削除に失敗しました";
					}
				}
			}
		}
		$this->db->query('COMMIT');
		return null;
	}
	
	//セッション情報からhtmlの作成(Admin、ユニット配置変更用)
	function makeHTML($view) {
		
		$this->unitCall();
		
		$html=null;
		//itemsリストのhtmlを再構築(コンテナ)
		if(is_array($_SESSION["page_container"])) {
			foreach($_SESSION["page_container"] as $key => $val) {
				//ここにドロップエリア用divとDBに保存されているliのリストをセットする
				$data = array();
				for($i=0;$i<pagecontainerDB::getMaxColumn($val["pagec_type"]);$i++) {
					//コンテナごとのカラム名称（div id）決定//Sotable宣言用にコンテナのカラム名称を取得しておく
					$div_ids[$val["pagec_code"]][$i] = 'c'.$val["pagec_code"].'_'.$i.'-inner';
					//関連付けjs文作成しておく
					$js_containment[] = '"'.$div_ids[$val["pagec_code"]][$i].'"';
					$data[$i] = '<div id="c'.$val["pagec_code"].'_'.$i.'" class="page"><div id="'.$div_ids[$val["pagec_code"]][$i].'" class="droppables" style="min-height: 100px; cursor: pointer;">';
					//$i:カラム番号,pagec_code:コンテナ番号を元にセッションからユニットコードを取得
					//セッションの値を元にコンテナ内部のユニットリストhtmlを生成
					$unithtml_ar = array();
					if(is_array($_SESSION["page_unit"][$val["pagec_code"]][$i])) {
						$unithtml_ar =  $this->makeUnitListHTML($view,$_SESSION["page_unit"][$val["pagec_code"]][$i],$prev=true);

						foreach($unithtml_ar as $ukey => $uval) {
							//$unit_idname = $this->_m_unit[$_SESSION["page_unit"][$val["pagec_code"]][$i][$ukey]["pageu_unit_code"]]["unit_idname"];
							$pageu_unit_code = $_SESSION["page_unit"][$val["pagec_code"]][$i][$ukey]["pageu_unit_code"];
							$pageu_code = $_SESSION["page_unit"][$val["pagec_code"]][$i][$ukey]["pageu_code"];
							$addunit_idname = 'addunit-'.$pageu_unit_code.'_'.$pageu_code;
							//$data[$i] .= '<div id="'.$addunit_idname.'" class="adunit" onmouseover=\'Position.clone($("'.$addunit_idname.'"), $("'.$addunit_idname.'-handle"));\'>
							//			<div class="handles" id="'.$addunit_idname.'-handle" style="position:absolute;z-index:100;background-color:#fff;-moz-opacity: 0.0;opacity:.0;filter: alpha(opacity=0);">&nbsp;</div>
							//			'.$uval.'
							//			</div>'."\n";
							$data[$i] .= '<div id="'.$addunit_idname.'" class="adunit">';
							if($_SESSION["page_unit"][$val["pagec_code"]][$i][$ukey]["unit_extmodule_private"]==1) { //モジュール専用ユニットの場合はコピー、削除不可
								$data[$i] .= '<div class="handles1" id="'.$addunit_idname.'-handle"></div>';
							} else {
								$data[$i] .= '<div class="handles1" id="'.$addunit_idname.'-handle"><div class="unitCopy"><a href="#noscript" onClick="ConfunitCp(\''.$addunit_idname.'\');" title="このユニットをコピーする">コピー</a></div><div class="unitDelete"><a href="#noscript" onClick="ConfunitDel(\''.$addunit_idname.'\');" title="このユニットを削除する">削除</a></div></div>';
							}
							$data[$i] .=$uval.'
							<div class="handles2">&nbsp;</div>
							</div>'."\n";
							/*
							$data[$i] .= '<div id="'.$addunit_idname.'" class="adunit" onmouseover="Element.show(\''.$addunit_idname.'-handle2\');Element.show(\''.$addunit_idname.'-handle\')" onmouseout="Element.hide(\''.$addunit_idname.'-handle2\');Element.hide(\''.$addunit_idname.'-handle\')">
							<div class="handles1" id="'.$addunit_idname.'-handle" style="display:none;"><div class="unitDelete"><a href="#noscript" onClick="ConfunitDel(\''.$addunit_idname.'\');" title="このユニットを削除する">削除</a></div></div>
							'.$uval.'
							<div id="'.$addunit_idname.'-handle2" class="handles2" style="display:none;">&nbsp;</div>
							</div>'."\n";
							*/
						}
					}
					//ユニット番号から詳細情報を取得する。
					$data[$i] .='</div></div>'."\n";
					//ドロップエリア宣言js
					$data[$i] .= '<script type="text/javascript">//<![CDATA'."\n";
					$data[$i] .= 
'Droppables.add("c'.$val["pagec_code"].'_'.$i.'", 
	{accept:"unit",
	hoverclass:"page-active",
	onDrop:function(element, droppableElement){
		parent_dimensions = Element.getDimensions(droppableElement);
		var target_y = $("c'.$val["pagec_code"].'_'.$i.'").offsetTop;
		var torder=-1;
		var cnt = 0;
		for(var i=0;i<$("c'.$val["pagec_code"].'_'.$i.'-inner").childNodes.length;i++) {
			if($("items").childNodes['.$i.'] && $("c'.$val["pagec_code"].'_'.$i.'-inner").childNodes[i].className =="adunit") {
				var dime = Element.getDimensions($("c'.$val["pagec_code"].'_'.$i.'-inner").childNodes[i]);
				var comp = eval(target_y+dime.height/2);
				if(mp_y < comp && torder<0) {
					torder = cnt;
				}
				target_y += dime.height;
				cnt++;
			}
		}
		new Ajax.Updater("'.$div_ids[$val["pagec_code"]][$i].'", "../../aj/page-unitlayout.php", {
			asynchronous:true, 
			evalScripts:true,
			//onComplete:function() {document.location.reload();},
			parameters:"mode=add&cunit='.$val["pagec_code"].'_'.$i.'&id=" + encodeURIComponent(element.id)+"&pidx_code="+$("pidx_code").value+"&order="+torder
		});}});'."\n";
					$data[$i] .= '//]]></script>'."\n";
				}
				$view->assign("data",$data);
				//unit追加用ドロップエリアulの作成
				$html.= $view->fetch(PAGEC_PATH.$val["pagec_type"].".tpl")."\n";
			}
							
			//並び替え宣言js Sotable
			$containment = implode(', ', $js_containment);
			$html .= '<script type="text/javascript">//<![CDATA'."\n";
			$html .= 'sections = ['.$containment.'];'."\n";
			foreach($_SESSION["page_container"] as $key => $val) {
				for($i=0;$i<pagecontainerDB::getMaxColumn($val["pagec_type"]);$i++) {
					$html .= 'Sortable.create("'.$div_ids[$val["pagec_code"]][$i].'", {tag:"div", dropOnEmpty:true, containment:sections,only:"adunit", constraint:false,onUpdate:function(){getParams()}});'."\n";
				}
			}
			$html .= '//]]></script>'."\n";
		}
		return $html;
	}
	
	function unitCall() {
		//あらかじめユニットマスタの一覧を取得しておく
		$unitDB = new unitDB();
		if(!is_array($this->_m_unit)) {
			$this->_m_unit = $unitDB->getlist($unit_type=array(2,3,4,5,6)); //2:デザインユニット, 3:機能ユニットのみ取得しておく 2008.11.12 4:拡張Dユニット、5:拡張機能ユニット 6:拡張モジュールユニット追加
		}
		//全てのユニットプログラムを読み込んでおく
		foreach($this->_m_unit as $key=>$val) {
			if(isset($val["unit_php_path"])) {
				$units_dir = explode(".", $val["unit_php_path"]);
				switch($val["unit_type"]) {
					case 2:
					case 3:
						require_once(UNITS_PATH."/".$units_dir[0]."/".$val["unit_php_path"]);
						break;
					case 4:
					case 5:
						require_once(EXT_UNITS_PATH."/".$units_dir[0]."/".$val["unit_php_path"]);
						break;
					case 6:
							require_once(MODULES_PATH."/".unitDB::getModuleUnitPath($val["extmodule_path"]).$units_dir[0]."/".$val["unit_php_path"]);
						break;
					default :
						break;
				}
			}
		}
	}
	
	function makeUnitListHTML($view,$ulist,$prev=false) { //一般でも使えるユニットデータ取得

		$this->unitCall();
		
		$html = null;
		if(is_array($ulist)) {
			foreach($ulist as $key => $val) {
				//unit_codeからユニットの詳細情報取得
				list($unit_class_name,$trash) = explode('.', $this->_m_unit[$val["pageu_unit_code"]]["unit_php_path"]);
				if($unit_class_name!=null) {
					$unit_class = new $unit_class_name;
					if(isset($val["cp"])&&is_numeric($val["cp"])) { //コピーユニットだった場合　v1.2
						$unit_class->init($val["cp"],$unit_class_name, $view, $prev,$this->_m_unit[$val["pageu_unit_code"]]);
            			$html[$val["pageu_code"]] = $unit_class->output($this->_m_unit[$val["pageu_unit_code"]]["unit_type"]);
					} else {
						$unit_class->init($val["pageu_code"],$unit_class_name, $view, $prev,$this->_m_unit[$val["pageu_unit_code"]]);
            			$html[$val["pageu_code"]] = $unit_class->output($this->_m_unit[$val["pageu_unit_code"]]["unit_type"]);
					}
				}
			}
		}
		return $html;
	}
	
	//現在登録されているコンテナ&ユニットのCSS定義をすべて取得
	function makeAllUnitsCSS() {
		$css_str = null;
		$unitDB =new unitDB();
		$_m_unit = $unitDB->getlist($unit_type=array(1,2,3,4,5,6)); 
		//全てのユニットの関連CSSを取得
		$css_path = array();
		$css_str = '@charset "UTF-8";'."\n\n";
		foreach($_m_unit as $key=>$val) {
			$path = null;
			if(isset($val["unit_tpl_path"])) {
				$units_dir = basename($val["unit_php_path"],".php");
				switch($val["unit_type"]) {
					case 1:
						$path =  PAGEC_PATH.str_replace(".tpl",".css",$val["unit_tpl_path"]);
						break;
					case 2:
					case 3:
						$path = UNITS_PATH."/".$units_dir."/".str_replace(".tpl",".css",$val["unit_tpl_path"]);
						break;
					case 4:
					case 5:
						$path = EXT_UNITS_PATH."/".$units_dir."/".str_replace(".tpl",".css",$val["unit_tpl_path"]);
						break;
					case 6:
						$path =MODULES_PATH."/".unitDB::getModuleUnitPath($val["extmodule_path"]).$units_dir."/".str_replace(".tpl",".css",$val["unit_tpl_path"]);
						break;
					default :
						break;
				}
			}
			if(file_exists($path)) {
				//@charsetを除去
				$css_str .= str_replace('@charset "UTF-8";', '', file_get_contents($path));
				$css_str .= "\n\n";
			}
		}
		return $css_str;
	}
	
	function putAllUnitsCSS($str=null) {
		$ret = false;
		$newCssFile = @fopen(CACHE_PATH.'/AllUnits.css', 'w');
		$ret = fwrite($newCssFile, $str);
		@fclose($newCssFile);
		@chmod(CACHE_PATH.'/AllUnits.css', 0644);
		return $ret;
	}
}
?>