<?php
// mycssadmin ver 1.0.0
//  ------------------------------------------------------------------------ //
//                   This module; Copyright (c) 2005 gusagi                  //
//                        <http://good-tea.ddo.jp/dev>                       //
//  ------------------------------------------------------------------------ //

//*****************************************************************************/ 
// 直接呼び出された場合はexitする
//*****************************************************************************/ 
if( ! defined( 'XOOPS_ROOT_PATH' ) ) exit ;

if( ! class_exists( 'CssadminUtility' ) ) {

class CssadminUtility {

	/**
	 * CssadminUtility
	 * 
	 * @param void
	 * @return void
	 */
	function CssadminUtility() {
	}


	function getBlockArray() {
		// 初期処理
		global $xoopsModule,$xoopsUser,$xoopsConfig;
		$xoopsblock = new XoopsBlock();
		$block_arr = array();

		if (is_object($xoopsUser)) {
			if (!empty($xoopsModule)) {
				// set page title
				if (preg_match("/index\.php$/i", xoops_getenv('PHP_SELF')) && $xoopsConfig['startpage'] == $xoopsModule->getVar('dirname')) {
					$block_arr =& $xoopsblock->getAllByGroupModule($xoopsUser->getGroups(), $xoopsModule->getVar('mid'), true, XOOPS_BLOCK_VISIBLE);
				} else {
					$block_arr =& $xoopsblock->getAllByGroupModule($xoopsUser->getGroups(), $xoopsModule->getVar('mid'), false, XOOPS_BLOCK_VISIBLE);
				}
			} else {
				if (!empty($xoopsOption['show_cblock'])) {
					$block_arr =& $xoopsblock->getAllByGroupModule($xoopsUser->getGroups(), 0, true, XOOPS_BLOCK_VISIBLE);
				} else {
					$block_arr =& $xoopsblock->getAllByGroupModule($xoopsUser->getGroups(), 0, false, XOOPS_BLOCK_VISIBLE);
				}
			}
		} else {
			if (!empty($xoopsModule)) {
				// set page title
				if (preg_match("/index\.php$/i", xoops_getenv('PHP_SELF')) && $xoopsConfig['startpage'] == $xoopsModule->getVar('dirname')) {
					$block_arr =& $xoopsblock->getAllByGroupModule(XOOPS_GROUP_ANONYMOUS, $xoopsModule->getVar('mid'), true, XOOPS_BLOCK_VISIBLE);
				} else {
					$block_arr =& $xoopsblock->getAllByGroupModule(XOOPS_GROUP_ANONYMOUS, $xoopsModule->getVar('mid'), false, XOOPS_BLOCK_VISIBLE);
				}
			} else {
				if (!empty($xoopsOption['show_cblock'])) {
					$block_arr =& $xoopsblock->getAllByGroupModule(XOOPS_GROUP_ANONYMOUS, 0, true, XOOPS_BLOCK_VISIBLE);
				} else {
					$block_arr =& $xoopsblock->getAllByGroupModule(XOOPS_GROUP_ANONYMOUS, 0, false, XOOPS_BLOCK_VISIBLE);
				}
			}
		}
		return $block_arr;
	}


	function getCssadminHeader( $block_mod_dirname, $buf ) {
		// 初期処理
		global $xoopsTpl;
		$xoopsDB =& Database::getInstance();
		$cssadmin_header = '';
		$isCssadmin = ( $block_mod_dirname === 'cssadmin' ) ? true : false;
		// 表示中の画面がどのモジュールの画面かを取得
		$module_dirname = is_object($xoopsTpl) ? $xoopsTpl->get_template_vars( 'xoops_dirname' ) : '';
		if ( !empty($module_dirname) ) {
			// このブロックがcssadminモジュールのブロックで、
			// class/cssadmin_modules.class.phpが存在している場合、
			// モジュールに紐付いたCSSファイルを取得
			if ( $isCssadmin && 
				 file_exists(dirname(__FILE__) .'/cssadmin_modules.class.php') ) {
				include( dirname(__FILE__) .'/cssadmin_modules.class.php' );
				$css = $CssadminModules->getModuleCssHeader( $module_dirname );
				// モジュールに紐付いたCSSファイルが存在する場合、linkタグを生成
				if ( !empty($css) ) {
					$module_header = '<link rel="stylesheet" type="text/css" media="screen" href="';
					$module_header .= XOOPS_URL .'/modules/' .$module_dirname .'/css/';
					$module_header .= $css .'" />';
					// 生成したlinkタグが未出力であれば、cssadminのヘッダタグに追加
					if ( ! strstr($buf, $module_header) ) {
						$cssadmin_header .= $module_header ."\n";
					}
				}
			}
		}
		// 表示ブロックの取得
		global $block_arr;
		$bid_list = array();
		if ( empty($block_arr) ) {
			$block_arr = $this->getBlockArray();
		}
		foreach( $block_arr as $key=> $block ) {
			// ブロックがcssadminモジュールのブロックであるか、
			// このfunctionを呼び出したブロックであった場合は、css取得用bid配列に格納
			if ( $isCssadmin || 
				 $block_mod_dirname === $block->vars['dirname']['value'] ) {
				$bid_list[] = intval( $block->vars['bid']['value'] );
			}
		}
		if ( ! empty($bid_list) ) {
			$bids = implode( ',', $bid_list );
			// ブロックに紐付いたCSSが存在するか確認
			$cssadmin_blocks = $xoopsDB->prefix( 'cssadmin_blocks' );
			$modules = $xoopsDB->prefix( 'modules' );
			$sql = "SELECT modules.dirname, cssadmin_blocks.css FROM $cssadmin_blocks cssadmin_blocks";
			$sql .= " LEFT JOIN $modules modules ON modules.mid = cssadmin_blocks.mid";
			$sql .= " WHERE bid IN ( $bids )";
			$result = $xoopsDB->query( $sql );
			if ( $myrow = $xoopsDB->fetchArray($result) ) {
				// ブロック用CSS設定がある場合、ブロックヘッダをセットする
				do {
					$block_dirname = urlencode( htmlspecialchars($myrow['dirname'], ENT_QUOTES) );
					$block_css = urlencode( htmlspecialchars($myrow['css'], ENT_QUOTES) );
					$block_header = '<link rel="stylesheet" type="text/css" media="screen" href="';
					// $block_dirnameが取得できればモジュールブロック用CSS
					if ( ! empty($block_dirname) ) {
						$block_header .= XOOPS_URL .'/modules/' .$block_dirname .'/css/';
					// $block_dirnameが存在しなければカスタムブロック用CSS
					} else {
						$block_header .= XOOPS_URL .'/css/';
					}
					$block_header .= $block_css .'" />';
					// 生成したlinkタグが未出力であれば、cssadminのヘッダタグに追加
					if ( (! strstr($cssadmin_header, $block_header)) &&
						 (! strstr($buf, $block_header)) ) {
						$cssadmin_header .= $block_header ."\n";
					}
				} while ( $myrow = $xoopsDB->fetchArray($result) );
			}
		}
		if ( !empty($cssadmin_header) ) {
			$buf = str_replace( '</head>', 
			 					$cssadmin_header .'</head>', 
								$buf );
		}
		return $buf;
	}

// end of class
}

}

?>