<commit_before><?php
if (!defined('__GOOSE__')) exit();

/**
 * Module
 *
 */

class Module {

	public $installModules;

	/**
	 * init
	 */
	public function __construct() {}

	/**
	 * exist module
	 * 모듈이 존재하는지 체크하고 경로를 반환한다.
	 *
	 * @param string $moduleName
	 * @return string
	 */
	public static function existModule($moduleName)
	{
		$path = 'module/'.$moduleName;
		if (is_dir(__GOOSE_PWD__.$path.'.user/'))
		{
			$path .= '.user/';
		}
		else if(is_dir(__GOOSE_PWD__.$path.'/'))
		{
			$path .= '/';
		}
		else
		{
			return array('state' => 'error', 'message' => 'module not found');
		}
		return array(
			'pwd' => __GOOSE_PWD__.$path
			,'path' => $path
		);
	}

	/**
	 * get module
	 *
	 * @param string $moduleName
	 * @param array $params 라우트 정보를 가지고 있다.
	 * @param boolean $install 인스톨용으로 사용되는 모듈인지에 대한 여부
	 * @return object
	 */
	public static function load($moduleName, $params=null, $install=false)
	{
		global $goose;

		$existModule = self::existModule($moduleName);
		if ($existModule['state'] == 'error')
		{
			return $existModule;
		}
		else
		{
			$pwd = $existModule['pwd'];
			$path = $existModule['path'];
		}

		$pwd_setting = Util::checkUserFile($pwd.'setting.json');
		$pwd_class = Util::checkUserFile($pwd.$moduleName.'.class.php');

		if ($pwd_class && $pwd_setting)
		{
			require_once($pwd_class);
			$settings = Util::jsonToArray(Util::openFile($pwd_setting));

			// check install
			if (($settings['install'] && !in_array($moduleName, $goose->modules)) && !$install)
			{
				return array('state' => 'error', 'message' => '인스톨이 필요한 모듈입니다.');
			}

			// check permission
			if (($settings['permission'] && $settings['permission'] > $_SESSION['goose_level']) && !$goose->isAdmin)
			{
				return array('state' => 'error', 'message' => '접근 권한이 없습니다.');
			}

			// check setting
			if (!$settings)
			{
				return array('state' => 'error', 'message' => 'error setting.json');<commit_msg>setting.user.json 파일 속성값을 합치는 기능으로 변경<commit_after><?php
if (!defined('__GOOSE__')) exit();

/**
 * Module
 *
 */

class Module {

	public $installModules;

	/**
	 * init
	 */
	public function __construct() {}

	/**
	 * exist module
	 * 모듈이 존재하는지 체크하고 경로를 반환한다.
	 *
	 * @param string $moduleName
	 * @return string
	 */
	public static function existModule($moduleName)
	{
		$path = 'module/'.$moduleName;
		if (is_dir(__GOOSE_PWD__.$path.'.user/'))
		{
			$path .= '.user/';
		}
		else if(is_dir(__GOOSE_PWD__.$path.'/'))
		{
			$path .= '/';
		}
		else
		{
			return array('state' => 'error', 'message' => 'module not found');
		}
		return array(
			'pwd' => __GOOSE_PWD__.$path
			,'path' => $path
		);
	}

	/**
	 * get module
	 *
	 * @param string $moduleName
	 * @param array $params 라우트 정보를 가지고 있다.
	 * @param boolean $install 인스톨용으로 사용되는 모듈인지에 대한 여부
	 * @return object
	 */
	public static function load($moduleName, $params=null, $install=false)
	{
		global $goose;

		$existModule = self::existModule($moduleName);
		if ($existModule['state'] == 'error')
		{
			return $existModule;
		}
		else
		{
			$pwd = $existModule['pwd'];
			$path = $existModule['path'];
		}

		// set setting data
		$tmp_settingOriginal = Util::jsonToArray(Util::openFile($pwd.'setting.json'));
		$tmp_settingUser = Util::jsonToArray(Util::openFile($pwd.'setting.user.json'));
		if ($tmp_settingOriginal && $tmp_settingUser)
		{
			$settings = ($tmp_settingUser) ? Util::extendArray($tmp_settingOriginal, $tmp_settingUser) : $tmp_settingOriginal;
		}
		else
		{
			$settings = ($tmp_settingUser) ? $tmp_settingUser : null;
			$settings = ($tmp_settingOriginal) ? $tmp_settingOriginal : $settings;
		}
		if (!$settings || !is_array($settings)) return array('state' => 'error', 'message' => 'setting.json파일이 없습니다.');

		// set module class path
		$pwd_class = Util::checkUserFile($pwd.$moduleName.'.class.php');

		if ($pwd_class)
		{
			require_once($pwd_class);

			// check install
			if (($settings['install'] && !in_array($moduleName, $goose->modules)) && !$install)
			{
				return array('state' => 'error', 'message' => '인스톨이 필요한 모듈입니다.');
			}

			// check permission
			if (($settings['permission'] && $settings['permission'] > $_SESSION['goose_level']) && !$goose->isAdmin)
			{
				return array('state' => 'error', 'message' => '접근 권한이 없습니다.');
			}

			// check setting
			if (!$settings)
			{
				return array('state' => 'error', 'message' => 'error setting.json');
{'fraction_non_alphanumeric': 0.19018264840182647, 'fraction_numerical': 0.0, 'mean_word_length': 3.5446058091286305, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '749824', 'n_tokens_mistral': 1880, 'n_tokens_neox': 1757, 'n_words': 320}