From 5c1e79e5a7cc835ce9a9d5ebb82b680a5f48ce35 Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Fri, 8 Sep 2006 03:39:43 +0000 Subject: [PATCH] pgpoolAdmin initial release --- README | 1 + README.euc_jp | 1 + changePassword.php | 100 + command.php | 128 + common.php | 390 +++ conf/pgmgt.conf.php | 15 + config.php | 297 +++ definePgpoolConfParam.php | 235 ++ doc/en/changePassword.html | 62 + doc/en/config.html | 116 + doc/en/errorCode.html | 180 ++ doc/en/images/1.jpg | Bin 0 -> 31387 bytes doc/en/images/2.jpg | Bin 0 -> 36982 bytes doc/en/images/3.jpg | Bin 0 -> 85280 bytes doc/en/images/4.jpg | Bin 0 -> 37694 bytes doc/en/images/ng.gif | Bin 0 -> 174 bytes doc/en/images/nodestatus.jpg | Bin 0 -> 58325 bytes doc/en/images/ok.gif | Bin 0 -> 172 bytes doc/en/images/pgpooladmin.jpg | Bin 0 -> 95368 bytes doc/en/images/restart.jpg | Bin 0 -> 36407 bytes doc/en/images/start.jpg | Bin 0 -> 23815 bytes doc/en/images/status.jpg | Bin 0 -> 57607 bytes doc/en/images/stop.jpg | Bin 0 -> 29991 bytes doc/en/install.html | 424 +++ doc/en/login.html | 68 + doc/en/logout.html | 43 + doc/en/nodeServerStatus.html | 75 + doc/en/pgconfig.html | 453 ++++ doc/en/queryCache.html | 86 + doc/en/status.html | 135 + doc/en/systemDb.html | 101 + doc/images/background.gif | Bin 0 -> 53 bytes doc/images/logo.gif | Bin 0 -> 2256 bytes doc/images/marker.gif | Bin 0 -> 46 bytes doc/images/sea.jpg | Bin 0 -> 5399 bytes doc/images/spacer.gif | Bin 0 -> 43 bytes doc/index_en.html | 55 + doc/index_ja.html | 55 + doc/ja/changePassword.html | 61 + doc/ja/config.html | 123 + doc/ja/errorCode.html | 163 ++ doc/ja/images/1.jpg | Bin 0 -> 32627 bytes doc/ja/images/2.jpg | Bin 0 -> 36208 bytes doc/ja/images/3.jpg | Bin 0 -> 58708 bytes doc/ja/images/4.jpg | Bin 0 -> 33665 bytes doc/ja/images/ng.gif | Bin 0 -> 174 bytes doc/ja/images/nodestatus.jpg | Bin 0 -> 55983 bytes doc/ja/images/ok.gif | Bin 0 -> 172 bytes doc/ja/images/pgpooladmin.jpg | Bin 0 -> 94317 bytes doc/ja/images/restart.jpg | Bin 0 -> 34865 bytes doc/ja/images/start.jpg | Bin 0 -> 23579 bytes doc/ja/images/status.jpg | Bin 0 -> 71805 bytes doc/ja/images/stop.jpg | Bin 0 -> 29607 bytes doc/ja/install.html | 423 +++ doc/ja/login.html | 63 + doc/ja/logout.html | 43 + doc/ja/nodeServerStatus.html | 70 + doc/ja/pgconfig.html | 457 ++++ doc/ja/queryCache.html | 77 + doc/ja/status.html | 134 + doc/ja/systemDb.html | 99 + doc/screen.css | 170 ++ help.php | 46 + images/ascending.gif | Bin 0 -> 46 bytes images/back.gif | Bin 0 -> 160 bytes images/background.gif | Bin 0 -> 53 bytes images/descending.gif | Bin 0 -> 46 bytes images/logo.gif | Bin 0 -> 2256 bytes images/marker.gif | Bin 0 -> 46 bytes images/question.gif | Bin 0 -> 228 bytes images/sea.jpg | Bin 0 -> 5399 bytes images/spacer.gif | Bin 0 -> 43 bytes index.php | 37 + innerLog.php | 54 + innerNodeServerStatus.php | 61 + innerSummary.php | 41 + innerSystemCatalog.php | 78 + install/checkDirectory.php | 122 + install/checkParameter.php | 423 +++ install/defaultParameter.php | 39 + install/finish.php | 58 + install/images/ng.gif | Bin 0 -> 174 bytes install/images/ok.gif | Bin 0 -> 172 bytes install/index.php | 76 + install/lang/en.lang.php | 57 + install/lang/ja.lang.php | 57 + install/setLang.php | 43 + lang/en.lang.php | 250 ++ lang/ja.lang.php | 253 ++ libs/Config_File.class.php | 389 +++ libs/Smarty.class.php | 1944 ++++++++++++++ libs/Smarty_Compiler.class.php | 2313 +++++++++++++++++ libs/debug.tpl | 64 + .../core.assemble_plugin_filepath.php | 67 + .../core.assign_smarty_interface.php | 43 + libs/internals/core.create_dir_structure.php | 79 + libs/internals/core.display_debug_console.php | 61 + libs/internals/core.get_include_path.php | 44 + libs/internals/core.get_microtime.php | 23 + libs/internals/core.get_php_resource.php | 80 + libs/internals/core.is_secure.php | 59 + libs/internals/core.is_trusted.php | 47 + libs/internals/core.load_plugins.php | 125 + libs/internals/core.load_resource_plugin.php | 74 + .../internals/core.process_cached_inserts.php | 71 + .../core.process_compiled_include.php | 37 + libs/internals/core.read_cache_file.php | 101 + libs/internals/core.rm_auto.php | 71 + libs/internals/core.rmdir.php | 54 + libs/internals/core.run_insert_handler.php | 71 + libs/internals/core.smarty_include_php.php | 50 + libs/internals/core.write_cache_file.php | 96 + .../internals/core.write_compiled_include.php | 91 + .../core.write_compiled_resource.php | 35 + libs/internals/core.write_file.php | 54 + libs/plugins/block.textformat.php | 103 + libs/plugins/compiler.assign.php | 40 + libs/plugins/function.assign_debug_info.php | 40 + libs/plugins/function.config_load.php | 142 + libs/plugins/function.counter.php | 80 + libs/plugins/function.cycle.php | 102 + libs/plugins/function.debug.php | 35 + libs/plugins/function.eval.php | 49 + libs/plugins/function.fetch.php | 221 ++ libs/plugins/function.html_checkboxes.php | 143 + libs/plugins/function.html_image.php | 142 + libs/plugins/function.html_options.php | 122 + libs/plugins/function.html_radios.php | 156 ++ libs/plugins/function.html_select_date.php | 323 +++ libs/plugins/function.html_select_time.php | 194 ++ libs/plugins/function.html_table.php | 137 + libs/plugins/function.mailto.php | 163 ++ libs/plugins/function.math.php | 84 + libs/plugins/function.popup.php | 119 + libs/plugins/function.popup_init.php | 40 + libs/plugins/modifier.capitalize.php | 43 + libs/plugins/modifier.cat.php | 33 + libs/plugins/modifier.count_characters.php | 32 + libs/plugins/modifier.count_paragraphs.php | 29 + libs/plugins/modifier.count_sentences.php | 29 + libs/plugins/modifier.count_words.php | 33 + libs/plugins/modifier.date_format.php | 49 + libs/plugins/modifier.debug_print_var.php | 57 + libs/plugins/modifier.default.php | 32 + libs/plugins/modifier.escape.php | 93 + libs/plugins/modifier.indent.php | 28 + libs/plugins/modifier.lower.php | 26 + libs/plugins/modifier.nl2br.php | 35 + libs/plugins/modifier.regex_replace.php | 35 + libs/plugins/modifier.replace.php | 30 + libs/plugins/modifier.spacify.php | 30 + libs/plugins/modifier.string_format.php | 29 + libs/plugins/modifier.strip.php | 33 + libs/plugins/modifier.strip_tags.php | 32 + libs/plugins/modifier.truncate.php | 50 + libs/plugins/modifier.upper.php | 26 + libs/plugins/modifier.wordwrap.php | 29 + libs/plugins/outputfilter.trimwhitespace.php | 75 + libs/plugins/shared.escape_special_chars.php | 31 + libs/plugins/shared.make_timestamp.php | 46 + login.php | 102 + logout.php | 33 + nodeServerStatus.php | 37 + nodeStatus.php | 101 + pgconfig.php | 452 ++++ procInfo.php | 72 + queryCache.php | 187 ++ screen.css | 151 ++ status.php | 246 ++ systemDb.php | 445 ++++ templates/changePassword.tpl | 46 + templates/config.tpl | 162 ++ templates/error.tpl | 37 + templates/footer.tpl | 4 + templates/help/en/changePassword.tpl | 47 + templates/help/en/config.tpl | 90 + templates/help/en/errorCode.tpl | 148 ++ templates/help/en/login.tpl | 50 + templates/help/en/nodeServerStatus.tpl | 56 + templates/help/en/pgconfig.tpl | 393 +++ templates/help/en/queryCache.tpl | 81 + templates/help/en/status.tpl | 115 + templates/help/en/systemDb.tpl | 85 + templates/help/ja/changePassword.tpl | 48 + templates/help/ja/config.tpl | 98 + templates/help/ja/errorCode.tpl | 147 ++ templates/help/ja/login.tpl | 49 + templates/help/ja/nodeServerStatus.tpl | 53 + templates/help/ja/pgconfig.tpl | 437 ++++ templates/help/ja/queryCache.tpl | 66 + templates/help/ja/status.tpl | 113 + templates/help/ja/systemDb.tpl | 77 + templates/innerError.tpl | 22 + templates/innerLog.tpl | 32 + templates/innerNodeServerStatus.tpl | 44 + templates/innerSummary.tpl | 59 + templates/innerSystemCatalog.tpl | 46 + templates/login.tpl | 43 + templates/menu.tpl | 16 + templates/nodeServerStatus.tpl | 88 + templates/nodeStatus.tpl | 55 + templates/pgconfig.tpl | 647 +++++ templates/pgmgtNotFound.tpl | 22 + templates/procInfo.tpl | 48 + templates/queryCache.tpl | 97 + templates/status.tpl | 333 +++ templates/systemDb.tpl | 198 ++ version.php | 28 + 208 files changed, 22147 insertions(+) create mode 100644 README create mode 100644 README.euc_jp create mode 100644 changePassword.php create mode 100644 command.php create mode 100644 common.php create mode 100644 conf/pgmgt.conf.php create mode 100644 config.php create mode 100644 definePgpoolConfParam.php create mode 100644 doc/en/changePassword.html create mode 100644 doc/en/config.html create mode 100644 doc/en/errorCode.html create mode 100644 doc/en/images/1.jpg create mode 100644 doc/en/images/2.jpg create mode 100644 doc/en/images/3.jpg create mode 100644 doc/en/images/4.jpg create mode 100644 doc/en/images/ng.gif create mode 100644 doc/en/images/nodestatus.jpg create mode 100644 doc/en/images/ok.gif create mode 100644 doc/en/images/pgpooladmin.jpg create mode 100644 doc/en/images/restart.jpg create mode 100644 doc/en/images/start.jpg create mode 100644 doc/en/images/status.jpg create mode 100644 doc/en/images/stop.jpg create mode 100644 doc/en/install.html create mode 100644 doc/en/login.html create mode 100644 doc/en/logout.html create mode 100644 doc/en/nodeServerStatus.html create mode 100644 doc/en/pgconfig.html create mode 100644 doc/en/queryCache.html create mode 100644 doc/en/status.html create mode 100644 doc/en/systemDb.html create mode 100644 doc/images/background.gif create mode 100644 doc/images/logo.gif create mode 100644 doc/images/marker.gif create mode 100644 doc/images/sea.jpg create mode 100644 doc/images/spacer.gif create mode 100644 doc/index_en.html create mode 100644 doc/index_ja.html create mode 100644 doc/ja/changePassword.html create mode 100644 doc/ja/config.html create mode 100644 doc/ja/errorCode.html create mode 100644 doc/ja/images/1.jpg create mode 100644 doc/ja/images/2.jpg create mode 100644 doc/ja/images/3.jpg create mode 100644 doc/ja/images/4.jpg create mode 100644 doc/ja/images/ng.gif create mode 100644 doc/ja/images/nodestatus.jpg create mode 100644 doc/ja/images/ok.gif create mode 100644 doc/ja/images/pgpooladmin.jpg create mode 100644 doc/ja/images/restart.jpg create mode 100644 doc/ja/images/start.jpg create mode 100644 doc/ja/images/status.jpg create mode 100644 doc/ja/images/stop.jpg create mode 100644 doc/ja/install.html create mode 100644 doc/ja/login.html create mode 100644 doc/ja/logout.html create mode 100644 doc/ja/nodeServerStatus.html create mode 100644 doc/ja/pgconfig.html create mode 100644 doc/ja/queryCache.html create mode 100644 doc/ja/status.html create mode 100644 doc/ja/systemDb.html create mode 100644 doc/screen.css create mode 100644 help.php create mode 100644 images/ascending.gif create mode 100644 images/back.gif create mode 100644 images/background.gif create mode 100644 images/descending.gif create mode 100644 images/logo.gif create mode 100644 images/marker.gif create mode 100644 images/question.gif create mode 100644 images/sea.jpg create mode 100644 images/spacer.gif create mode 100644 index.php create mode 100644 innerLog.php create mode 100644 innerNodeServerStatus.php create mode 100644 innerSummary.php create mode 100644 innerSystemCatalog.php create mode 100644 install/checkDirectory.php create mode 100644 install/checkParameter.php create mode 100644 install/defaultParameter.php create mode 100644 install/finish.php create mode 100644 install/images/ng.gif create mode 100644 install/images/ok.gif create mode 100644 install/index.php create mode 100644 install/lang/en.lang.php create mode 100644 install/lang/ja.lang.php create mode 100644 install/setLang.php create mode 100644 lang/en.lang.php create mode 100644 lang/ja.lang.php create mode 100644 libs/Config_File.class.php create mode 100644 libs/Smarty.class.php create mode 100644 libs/Smarty_Compiler.class.php create mode 100644 libs/debug.tpl create mode 100644 libs/internals/core.assemble_plugin_filepath.php create mode 100644 libs/internals/core.assign_smarty_interface.php create mode 100644 libs/internals/core.create_dir_structure.php create mode 100644 libs/internals/core.display_debug_console.php create mode 100644 libs/internals/core.get_include_path.php create mode 100644 libs/internals/core.get_microtime.php create mode 100644 libs/internals/core.get_php_resource.php create mode 100644 libs/internals/core.is_secure.php create mode 100644 libs/internals/core.is_trusted.php create mode 100644 libs/internals/core.load_plugins.php create mode 100644 libs/internals/core.load_resource_plugin.php create mode 100644 libs/internals/core.process_cached_inserts.php create mode 100644 libs/internals/core.process_compiled_include.php create mode 100644 libs/internals/core.read_cache_file.php create mode 100644 libs/internals/core.rm_auto.php create mode 100644 libs/internals/core.rmdir.php create mode 100644 libs/internals/core.run_insert_handler.php create mode 100644 libs/internals/core.smarty_include_php.php create mode 100644 libs/internals/core.write_cache_file.php create mode 100644 libs/internals/core.write_compiled_include.php create mode 100644 libs/internals/core.write_compiled_resource.php create mode 100644 libs/internals/core.write_file.php create mode 100644 libs/plugins/block.textformat.php create mode 100644 libs/plugins/compiler.assign.php create mode 100644 libs/plugins/function.assign_debug_info.php create mode 100644 libs/plugins/function.config_load.php create mode 100644 libs/plugins/function.counter.php create mode 100644 libs/plugins/function.cycle.php create mode 100644 libs/plugins/function.debug.php create mode 100644 libs/plugins/function.eval.php create mode 100644 libs/plugins/function.fetch.php create mode 100644 libs/plugins/function.html_checkboxes.php create mode 100644 libs/plugins/function.html_image.php create mode 100644 libs/plugins/function.html_options.php create mode 100644 libs/plugins/function.html_radios.php create mode 100644 libs/plugins/function.html_select_date.php create mode 100644 libs/plugins/function.html_select_time.php create mode 100644 libs/plugins/function.html_table.php create mode 100644 libs/plugins/function.mailto.php create mode 100644 libs/plugins/function.math.php create mode 100644 libs/plugins/function.popup.php create mode 100644 libs/plugins/function.popup_init.php create mode 100644 libs/plugins/modifier.capitalize.php create mode 100644 libs/plugins/modifier.cat.php create mode 100644 libs/plugins/modifier.count_characters.php create mode 100644 libs/plugins/modifier.count_paragraphs.php create mode 100644 libs/plugins/modifier.count_sentences.php create mode 100644 libs/plugins/modifier.count_words.php create mode 100644 libs/plugins/modifier.date_format.php create mode 100644 libs/plugins/modifier.debug_print_var.php create mode 100644 libs/plugins/modifier.default.php create mode 100644 libs/plugins/modifier.escape.php create mode 100644 libs/plugins/modifier.indent.php create mode 100644 libs/plugins/modifier.lower.php create mode 100644 libs/plugins/modifier.nl2br.php create mode 100644 libs/plugins/modifier.regex_replace.php create mode 100644 libs/plugins/modifier.replace.php create mode 100644 libs/plugins/modifier.spacify.php create mode 100644 libs/plugins/modifier.string_format.php create mode 100644 libs/plugins/modifier.strip.php create mode 100644 libs/plugins/modifier.strip_tags.php create mode 100644 libs/plugins/modifier.truncate.php create mode 100644 libs/plugins/modifier.upper.php create mode 100644 libs/plugins/modifier.wordwrap.php create mode 100644 libs/plugins/outputfilter.trimwhitespace.php create mode 100644 libs/plugins/shared.escape_special_chars.php create mode 100644 libs/plugins/shared.make_timestamp.php create mode 100644 login.php create mode 100644 logout.php create mode 100644 nodeServerStatus.php create mode 100644 nodeStatus.php create mode 100644 pgconfig.php create mode 100644 procInfo.php create mode 100644 queryCache.php create mode 100644 screen.css create mode 100644 status.php create mode 100644 systemDb.php create mode 100644 templates/changePassword.tpl create mode 100644 templates/config.tpl create mode 100644 templates/error.tpl create mode 100644 templates/footer.tpl create mode 100644 templates/help/en/changePassword.tpl create mode 100644 templates/help/en/config.tpl create mode 100644 templates/help/en/errorCode.tpl create mode 100644 templates/help/en/login.tpl create mode 100644 templates/help/en/nodeServerStatus.tpl create mode 100644 templates/help/en/pgconfig.tpl create mode 100644 templates/help/en/queryCache.tpl create mode 100644 templates/help/en/status.tpl create mode 100644 templates/help/en/systemDb.tpl create mode 100644 templates/help/ja/changePassword.tpl create mode 100644 templates/help/ja/config.tpl create mode 100644 templates/help/ja/errorCode.tpl create mode 100644 templates/help/ja/login.tpl create mode 100644 templates/help/ja/nodeServerStatus.tpl create mode 100644 templates/help/ja/pgconfig.tpl create mode 100644 templates/help/ja/queryCache.tpl create mode 100644 templates/help/ja/status.tpl create mode 100644 templates/help/ja/systemDb.tpl create mode 100644 templates/innerError.tpl create mode 100644 templates/innerLog.tpl create mode 100644 templates/innerNodeServerStatus.tpl create mode 100644 templates/innerSummary.tpl create mode 100644 templates/innerSystemCatalog.tpl create mode 100644 templates/login.tpl create mode 100644 templates/menu.tpl create mode 100644 templates/nodeServerStatus.tpl create mode 100644 templates/nodeStatus.tpl create mode 100644 templates/pgconfig.tpl create mode 100644 templates/pgmgtNotFound.tpl create mode 100644 templates/procInfo.tpl create mode 100644 templates/queryCache.tpl create mode 100644 templates/status.tpl create mode 100644 templates/systemDb.tpl create mode 100644 version.php diff --git a/README b/README new file mode 100644 index 0000000..bab8870 --- /dev/null +++ b/README @@ -0,0 +1 @@ +See doc/index_en.html diff --git a/README.euc_jp b/README.euc_jp new file mode 100644 index 0000000..1d3e753 --- /dev/null +++ b/README.euc_jp @@ -0,0 +1 @@ +doc/index_ja.html ¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£ diff --git a/changePassword.php b/changePassword.php new file mode 100644 index 0000000..5233870 --- /dev/null +++ b/changePassword.php @@ -0,0 +1,100 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); +$tpl->assign('help', basename( __FILE__, '.php')); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + header('Location: login.php'); + exit(); +} + +if(isset($_POST['action'])) { + $action = $_POST['action']; +} else { + $action = FALSE; +} + + +switch ( $action ) { + case 'update': + + if(!isset($_POST['password']) || !isset($_POST['password2'])) { + $tpl->display('changePassword.tpl'); + break; + } + + $password = $_POST['password']; + $password2 = $_POST['password2']; + + if($password == '' || $password2 == '') { + $tpl->assign('error', $message['errPasswordMismatch']); + $tpl->display('changePassword.tpl'); + break; + } + + if($password === $password2) { + + $passFile = @file(_PGPOOL2_PASSWORD_FILE); + if($passFile == false) { + $errorCode = 'e6001'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); + } + + if( ! is_writable(_PGPOOL2_PASSWORD_FILE) ) { + $errorCode = 'e6003'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); + } + $fw = fopen(_PGPOOL2_PASSWORD_FILE, 'w'); + + for($i=0; $idisplay('login.tpl'); + break; + } else { + $tpl->assign('error', $message['errPasswordMismatch']); + } + + default: + $tpl->display('changePassword.tpl'); + break; +} +?> + diff --git a/command.php b/command.php new file mode 100644 index 0000000..a59964a --- /dev/null +++ b/command.php @@ -0,0 +1,128 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); + +/** + * Execute pcp command + * + * @param string $command + * @param srgs $num + * @return array + */ +function execPcp($command, $num='') { + $pcpStatus = array ( + '0' => 'SUCCESS', + '1' => 'UNKNOWNERR', + '2' => 'EOFERR', + '3' => 'NOMEMERR', + '4' => 'READERR', + '5' => 'WRITEERR', + '6' => 'TIMEOUTERR', + '7' => 'INVALERR', + '8' => 'CONNERR', + '9' => 'NOCONNERR', + '10' => 'SOCKERR', + '11' => 'HOSTERR', + '12' => 'BACKENDERR', + '13' => 'AUTHERR', + '127' => 'COMMANDERROR' + ); + + $param = readPcpInfo(); + $param['hostname'] = _PGPOOL2_PCP_HOSTNAME; + + $args = " " . $param['pcp_timeout'] . " " . $param['hostname'] . " " . $param['pcp_port'] . " ". $_SESSION[SESSION_LOGIN_USER] . " " . $_SESSION[SESSION_LOGIN_USER_PASSWORD] . " " . $num; + + switch ($command) { + case 'PCP_NODE_COUNT': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_node_count' . $args; + $ret = exec($cmd, $output, $return_var); + break; + + case 'PCP_NODE_INFO': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_node_info' . $args; + $ret = exec($cmd, $output, $return_var); + break; + + case 'PCP_ATTACH_NODE': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_attach_node' . $args; + $ret = exec($cmd, $output, $return_var); + break; + + case 'PCP_DETACH_NODE': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_detach_node' . $args; + $ret = exec($cmd, $output, $return_var); + break; + + case 'PCP_PROC_COUNT': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_proc_count' . $args; + $ret = exec($cmd, $output, $return_var); + break; + + case 'PCP_PROC_INFO': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_proc_info' . $args; + $ret = exec($cmd, $output, $return_var); + $ret = $output; + break; + + case 'PCP_START_PGPOOL': + $cmdOption = $num; + $cmdOption = $cmdOption . ' -f ' . _PGPOOL2_CONFIG_FILE + . ' -F ' . _PGPOOL2_PASSWORD_FILE; + if(DoesPgpoolPidExist()) { + return array('FAIL'=> ''); + } + $cmd = _PGPOOL2_COMMAND . $cmdOption . ' 2>&1 &'; + $ret = exec($cmd, $output, $return_var); + if($return_var == 0) { + return array($pcpStatus[$return_var] => $output); + } else { + return array('FAIL' => $output); + } + break; + + case 'PCP_STOP_PGPOOL': + $cmd = _PGPOOL2_PCP_DIR . '/pcp_stop_pgpool' . $args; + $ret = exec($cmd, $output, $return_var); + break; + + default: + return array($pspStatus[1] => $pspStatus[1]); + } + return array($pcpStatus[$return_var] => $ret); +} + +/** + * Read parameter of pcp_port and pcp_timeout from pgpool.conf + * + * @return array + */ +function readPcpInfo() { + + $params = readConfigParams(array('pcp_port', 'pcp_timeout')); + return $params; +} +?> diff --git a/common.php b/common.php new file mode 100644 index 0000000..fcb6390 --- /dev/null +++ b/common.php @@ -0,0 +1,390 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version SVN: $Id$ + */ + +require_once('version.php'); +require_once('libs/Smarty.class.php'); +error_reporting(E_ALL); + +define('SESSION_LOGIN_USER', 'loginUser'); +define('SESSION_LOGIN_USER_PASSWORD', 'md5pass'); +define('SESSION_LANG', 'lang'); +define('SESSION_MESSAGE', 'message'); + +session_start(); + +/** + * Smarty Parameter + */ +define('SMARTY_TEMPLATE_DIR', dirname(__FILE__) . '/templates' ); +define('SMARTY_COMPILE_DIR', dirname(__FILE__) . '/templates_c' ); + +/** + * Initialize Smartry + */ +$tpl = new Smarty(); +$tpl->assign('version', $version); + +if(!file_exists('conf/pgmgt.conf.php')) { + include('lang/en.lang.php'); + $tpl->assign('message', $message); + $tpl->display('pgmgtNotFound.tpl'); + exit(); +} + +require_once('conf/pgmgt.conf.php'); + +/** + * Check login + */ +$isLogin = FALSE; +if(isset($_SESSION[SESSION_LOGIN_USER])) { + $isLogin = TRUE; + $tpl->assign('isLogin', $isLogin); +} + +/** + * Check pgmgt.conf.php Parameter + */ +$errors = array(); +if( !defined('_PGPOOL2_LANG') + || !defined('_PGPOOL2_CONFIG_FILE') + || !defined('_PGPOOL2_PASSWORD_FILE') + || !defined('_PGPOOL2_COMMAND') + || !defined('_PGPOOL2_PCP_DIR') + || !defined('_PGPOOL2_PCP_HOSTNAME') + || !defined('_PGPOOL2_STATUS_REFRESH_TIME')) { + + include('lang/en.lang.php'); + $tpl->assign('message', $message); + $errorCode = 'e7'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); + } + +/** + * Create message catalog list + */ +$messageList = array(); + +$res_dir = opendir('lang/'); +while($file_name = readdir( $res_dir )) { + if(ereg('.*\.lang\.php$', $file_name)) { + if(@is_file('lang/' . $file_name)) { + include('lang/' . $file_name); + $messageList[$message['lang']] = $message['strLang']; + } else { + $errorCode = 'e2'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); + + } + } +} +$tpl->assign('messageList', $messageList); + +/** + * Load message catalog + */ + +$lang = selectLanguage(_PGPOOL2_LANG, $messageList); +include('lang/' . $lang . '.lang.php'); +$tpl->assign('message', $message); +$_SESSION[SESSION_MESSAGE] = $message; + +/** + * Open databse connection + * + * @param array $param + * @return resource + */ +function openDBConnection($param) +{ + $host= $param['hostname']; + $port = $param['port']; + $dbname = $param['dbname']; + $user = $param['user']; + $password = $param['password']; + + if($host != '') { + $conStr = "host=$host port=$port dbname=$dbname user=$user password=$password" ; + } else { + $conStr = "port=$port dbname=$dbname" ; + } + + $con = @pg_connect($conStr); + return $con; +} + +/** + * Close database connection + * + * @param bool + */ +function closeDBConnection($connection) +{ + return pg_close($connection); +} + +/** + * Execute query + * + * @param resource $conn + * @param string $sql + * @return resource + */ +function execQuery($conn, $sql) { + $rs = @pg_query($conn, $sql); + if(!pg_result_status($rs) == PGSQL_TUPLES_OK) { + return false; + } + + return $rs; +} + +/** + * Select language registred in conf directory + * + * @return string + */ +function selectLanguage($selectLang, $messageList) { + if( $selectLang == null || $selectLang == 'auto') { + if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + $acceptLanguages = $_SERVER['HTTP_ACCEPT_LANGUAGE']; + } else { + $acceptLanguages = FALSE; + } + + $lang = null; + + if($acceptLanguages == FALSE) { + $lang = 'en'; + } else { + $langList = split(',|;', $acceptLanguages); + foreach($langList as $acceptLanguage) { + foreach(array_keys($messageList) as $messageLanguage) { + if( $acceptLanguage == $messageLanguage ) { + $lang = $messageLanguage; + break; + } + } + if( $lang != null) break; + } + } + } else { + $lang = $selectLang; + } + $_SESSION[SESSION_LANG] = $lang; + return $lang; +} + +/** + * Whether pgpool is operating in the parallel mode or not? + * + * @return bool + */ +function isParallelMode() { + + $params = readConfigParams(array('parallel_mode')); + + if($params['parallel_mode'] == 'true') { + return true; + } else { + return false; + } +} + +/** + * Confirmation whether node is active or is not. + * + * @return bool + */ +function NodeActive($num) { + $healthCheckDb = 'template1'; + + $params = readHealthCheckParam(); + + $healthCheckUser = $params['health_check_user']; + $backendHostName = $params['backend_hostname'][$num]; + $backendPort = $params['backend_port'][$num]; + if($backendHostName != '') { + $conStr = "dbname=$healthCheckDb user=$healthCheckUser host=$backendHostName port=$backendPort" ; + } else { + $conStr = "dbname=$healthCheckDb port=$backendPort" ; + } + + $conn = @pg_connect($conStr); + + if($conn == FALSE) { + @pg_close($conn); + return FALSE; + } else { + @pg_close($conn); + return TRUE; + } +} + +/** + * Read parameter from pgpool.conf using health check + * + * @return array + */ +function readHealthCheckParam() { + + $params = readConfigParams(array('health_check_user', + 'backend_hostname', + 'backend_port', + 'backend_weight')); + + return $params; +} + +/** + * Existence confirmation of pgpool.pid + * + * @return bool + */ +function DoesPgpoolPidExist() { + $pidFile = readLogDir() . '/pgpool.pid'; + if( file_exists($pidFile) ) { + return true; + } + return false; +} + +/** + * Existence confirmation of pgpool.pid + * + * @return bool + */ +function readLogDir() { + + $params = readConfigParams(array('logdir')); + return $params['logdir']; +} + +/** + * Whether pgpool is operating in the replication mode or not? + * + * @return bool + */ +function isReplicationMode() { + + $params = readConfigParams(array('replication_mode')); + + if($params['replication_mode'] == 'true') { + return true; + } else { + return false; + } +} + +/** + * Whether pgpool is operating in the master slave mode or not? + * + * @return bool + */ +function isMasterSlaveMode() { + + $params = readConfigParams(array('master_slave_mode')); + + if($params['master_slave_mode'] == 'true') { + return true; + } else { + return false; + } +} + +/** + * Read parameters specified in $paramList from pgpool.conf. + * If $paramList is not specified, all item is read from pgpool.conf. + * + * @param array $paramList + * @return array + */ +function readConfigParams($paramList = FALSE) { + + $results = array(); + $configParam = array(); + + $configFile = @file(_PGPOOL2_CONFIG_FILE); + if($configFile == false) { + $errTpl = new Smarty(); + $errTpl->assign('message', $_SESSION[SESSION_MESSAGE]); + $errorCode = 'e4'; + $errTpl->assign('errorCode', $errorCode); + $errTpl->display('error.tpl'); + exit(); + } + + foreach ($configFile as $line_num => $line) { + $line = trim($line); + if(preg_match("/^\w/", $line)) { + list($key, $value) = split("=", $line); + + $key = trim($key); + $value = trim($value); + + if(preg_match("/^backend_hostname/", $key)) { + $num = str_replace('backend_hostname', '', $key); + $configParam['backend_hostname'][$num] = ereg_replace("'", "", $value); + } + else if(preg_match("/^backend_port/", $key)) { + $num = str_replace('backend_port', '', $key); + $configParam['backend_port'][$num] = $value; + } + else if(preg_match("/^backend_weight/", $key)) { + $num = str_replace('backend_weight', '', $key); + $configParam['backend_weight'][$num] = $value; + } + else { + $configParam[$key] = ereg_replace("'", "", $value); + } + } + } + + if(is_array($paramList)) { + foreach($paramList as $key) { + if(isset($configParam[$key])) { + $results[$key] = $configParam[$key]; + } else { + include('definePgpoolConfParam.php'); + if(!preg_match("/^backend_hostname/", $key) + && !preg_match("/^backend_port/", $key) + && !preg_match("/^backend_weight/", $key)) { + $results[$key] = $pgpoolConfigParam[$key]['default']; + } + } + } + } else { + $results = $configParam; + } + + return $results; + +} + +?> diff --git a/conf/pgmgt.conf.php b/conf/pgmgt.conf.php new file mode 100644 index 0000000..732e5cb --- /dev/null +++ b/conf/pgmgt.conf.php @@ -0,0 +1,15 @@ + diff --git a/config.php b/config.php new file mode 100644 index 0000000..6acd424 --- /dev/null +++ b/config.php @@ -0,0 +1,297 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); +$tpl->assign('help', basename( __FILE__, '.php')); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + header('Location: login.php'); + exit(); +} + +if(isset($_POST['action'])) { + $action = $_POST['action']; +} else { + $action = FALSE; +} + +$errors = array(); +$params = array(); + +/** + * Read current parameter + */ +if( defined('_PGPOOL2_LANG')) + $params['lang'] = _PGPOOL2_LANG; +else + $errors['lang'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_CONFIG_FILE')) + $params['pgpool_config_file'] = _PGPOOL2_CONFIG_FILE; +else + $errors['pgpool_config_file'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_PASSWORD_FILE')) + $params['password_file'] = _PGPOOL2_PASSWORD_FILE; +else + $errors['password_file'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_COMMAND')) + $params['pgpool_command'] = _PGPOOL2_COMMAND; +else + $errors['pgpool_command'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_CMD_OPTION_C')) + $params['c'] = _PGPOOL2_CMD_OPTION_C; +else + $errors['c'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_CMD_OPTION_D')) + $params['d'] = _PGPOOL2_CMD_OPTION_D; +else + $errors['d'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_CMD_OPTION_M')) + $params['m'] = _PGPOOL2_CMD_OPTION_M; +else + $errors['m'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_CMD_OPTION_N')) + $params['n'] = _PGPOOL2_CMD_OPTION_N; +else + $errors['n'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_LOG_FILE')) + $params['pgpool_logfile'] = _PGPOOL2_LOG_FILE; +else + $errors['pgpool_logfile'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_PCP_DIR')) + $params['pcp_client_dir'] = _PGPOOL2_PCP_DIR; +else + $errors['pcp_client_dir'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_PCP_HOSTNAME')) + $params['pcp_hostname'] = _PGPOOL2_PCP_HOSTNAME; +else + $errors['pcp_hostname'] = $message['errNoDefined']; + +if( defined('_PGPOOL2_STATUS_REFRESH_TIME')) + $params['pcp_refresh_time'] = _PGPOOL2_STATUS_REFRESH_TIME; +else + $errors['pcp_refresh_time'] = $message['errNoDefined']; + +switch ( $action ) { + case 'update': + + $key = 'lang'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + + $key = 'pgpool_config_file'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + if(!@is_file($params[$key])) { + $errors[$key] = $message['errFileNotFound']; + } + + $key = 'password_file'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + if(!@is_file($params[$key])) { + $errors[$key] = $message['errFileNotFound']; + } + + $key = 'pgpool_command'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + if(!is_executable($params[$key])) { + $errors[$key] = $message['errFileNotFound']; + } + + $key = 'c'; + if(isset($_POST[$key])) { + $params[$key] = 1; + } else { + $params[$key] = 0; + } + + $key = 'd'; + if(isset($_POST[$key])) { + $params[$key] = 1; + } else { + $params[$key] = 0; + } + + $key = 'm'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + + $key = 'n'; + if(isset($_POST[$key])) { + $params[$key] = 1; + } else { + $params[$key] = 0; + } + + $key = 'pgpool_logfile'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + if($params[$key] != '' && !is_writable(dirname($params[$key]))) { + $errors[$key] = $message['errFileNotWritable']; + } + + $key = 'pcp_client_dir'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + + $key = 'pcp_hostname'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + if(!ereg("^[0-9a-zA-Z\._\-]+$", $params[$key])) { + $errors[$key] = $message['errIllegalHostname']; + } + + $key = 'pcp_refresh_time'; + if(isset($_POST[$key])) { + $params[$key] = $_POST[$key]; + } else { + $errors[$key] = $message['errNoDefined']; + } + if( !is_numeric($params[$key] )) { + $errors[$key] = $message['errShouldBeInteger']; + } else { + if ( $params[$key] < 0) { + $errors[$key] = $message['errShouldBeZeroOrMore']; + } + } + + if( count($errors) == 0 ) { + + $pgmgtConfigFile = dirname(__FILE__) . '/conf/pgmgt.conf.php'; + + if( ! is_writable($pgmgtConfigFile)) { + $errorCode = 'e5003'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); + } + + $fp = fopen( $pgmgtConfigFile, "w"); + if($fp == false) { + $errorCode = 'e5001'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); + } + + $str = "\n"; + fputs($fp, $str); + fclose($fp); + + $tpl->assign('status', 'success'); + } + + /** + * reload message catalog + */ + $lang = selectLanguage($params['lang'], $messageList); + include('lang/' . $lang . '.lang.php'); + $tpl->assign('message', $message); + break; + + default: +} + +$tpl->assign('pgpoolConf', _PGPOOL2_CONFIG_FILE); +$tpl->assign('pcpConf', _PGPOOL2_PASSWORD_FILE); +$tpl->assign('params', $params); +$tpl->assign('errors', $errors); +$tpl->display('config.tpl'); + +?> diff --git a/definePgpoolConfParam.php b/definePgpoolConfParam.php new file mode 100644 index 0000000..400247c --- /dev/null +++ b/definePgpoolConfParam.php @@ -0,0 +1,235 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +$pgpoolConfigParam = array(); +$pgpoolConfigBackendParam = array(); + +$strreg = '^[0-9a-zA-Z_\-]+$'; +$dirreg = '^\/[0-9a-zA-Z\._\/\-]+$'; +$hostreg = "^[0-9a-zA-Z\._\-]*$"; + +$key = 'listen_addresses'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='localhost'; +$pgpoolConfigParam[$key]['regexp'] = '^([0-9a-zA-Z\._\-]+|[\*]{1})$'; + +$key = 'port'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='9999'; +$pgpoolConfigParam[$key]['max'] = 65355; +$pgpoolConfigParam[$key]['min'] = 1024; + +$key = 'socket_dir'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='/tmp'; +$pgpoolConfigParam[$key]['regexp'] = "$dirreg"; + +$key = 'backend_socket_dir'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='/tmp'; +$pgpoolConfigParam[$key]['regexp'] = "$dirreg"; + +$key = 'num_init_children'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='32'; +$pgpoolConfigParam[$key]['min'] = 1; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'max_pool'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='4'; +$pgpoolConfigParam[$key]['min'] = 1; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'child_life_time'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='300'; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'connection_life_time'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='0'; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'child_max_connections'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='0'; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'logdir'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='/tmp'; +$pgpoolConfigParam[$key]['regexp'] = "$dirreg"; + +$key = 'pcp_timeout'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] ='10'; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'replication_mode'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'replication_strict'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =true; + +$key = 'replication_timeout'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] =5000; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'load_balance_mode'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'replication_stop_on_mismatch'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'reset_query_list'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'; +$pgpoolConfigParam[$key]['regexp'] = "^[0-9a-zA-Z; ]+$"; + +$key = 'print_timestamp'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =true; + +$key = 'master_slave_mode'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'connection_cache'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =true; + +$key = 'health_check_timeout'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] =20; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'health_check_period'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] =0; +$pgpoolConfigParam[$key]['min'] = 0; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'health_check_user'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='nodoby'; +$pgpoolConfigParam[$key]['regexp'] = "^[0-9a-zA-Z_\.\-]+$"; + +$key = 'insert_lock'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'ignore_leading_white_space'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'parallel_mode'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'log_statement'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'enable_query_cache'; +$pgpoolConfigParam[$key]['type'] ='B'; +$pgpoolConfigParam[$key]['default'] =false; + +$key = 'system_db_hostname'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='system_db_hostname'; +$pgpoolConfigParam[$key]['regexp'] = $hostreg; + +$key = 'system_db_port'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] =5432; +$pgpoolConfigParam[$key]['min'] = 1024; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'system_db_dbname'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='pgpool'; +$pgpoolConfigParam[$key]['regexp'] = "$strreg"; + +$key = 'system_db_schema'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='pgpool_catalog'; +$pgpoolConfigParam[$key]['regexp'] = "$strreg"; + +$key = 'system_db_user'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='pgpool'; +$pgpoolConfigParam[$key]['regexp'] = "^[0-9a-zA-Z_\.\-]*$"; + +$key = 'system_db_password'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] =''; +$pgpoolConfigParam[$key]['regexp'] = ".*"; + +$key = 'pcp_port'; +$pgpoolConfigParam[$key]['type'] ='N'; +$pgpoolConfigParam[$key]['default'] =9898; +$pgpoolConfigParam[$key]['min'] = 1024; +$pgpoolConfigParam[$key]['max'] = 65355; + +$key = 'pcp_socket_dir'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] ='/tmp'; +$pgpoolConfigParam[$key]['regexp'] = "$dirreg"; + +$key = 'pgpool2_hostname'; +$pgpoolConfigParam[$key]['type'] ='C'; +$pgpoolConfigParam[$key]['default'] = 'localhost'; +$pgpoolConfigParam[$key]['regexp'] = $hostreg; + +$key = 'backend_hostname'; +$pgpoolConfigBackendParam[$key]['type'] ='C'; +$pgpoolConfigBackendParam[$key]['default'] =''; +$pgpoolConfigBackendParam[$key]['regexp'] = "^[0-9a-zA-Z\._\-]*$"; + +$key = 'backend_port'; +$pgpoolConfigBackendParam[$key]['type'] ='N'; +$pgpoolConfigBackendParam[$key]['default'] ='5432'; +$pgpoolConfigBackendParam[$key]['min'] = 1024; +$pgpoolConfigBackendParam[$key]['max'] = 65355; + +$key = 'backend_weight'; +$pgpoolConfigBackendParam[$key]['type'] ='F'; +$pgpoolConfigBackendParam[$key]['default'] ='1'; +$pgpoolConfigBackendParam[$key]['min'] = 0.0; +$pgpoolConfigBackendParam[$key]['max'] = 1.0; + +?> \ No newline at end of file diff --git a/doc/en/changePassword.html b/doc/en/changePassword.html new file mode 100644 index 0000000..2d62670 --- /dev/null +++ b/doc/en/changePassword.html @@ -0,0 +1,62 @@ + + + +Change Password + + + + + + +
+ +

Change Password

+

Summary

+ + The password of the user who is logging in the pgpool administration tool is changed. +

Feature

+ Please input a new password to each input column twice and push the update button.
+ When it is successful, the login screen is displayed. Please login with the new password. + + + + + + + + + + + + + + + +
+ +
+
+ + + diff --git a/doc/en/config.html b/doc/en/config.html new file mode 100644 index 0000000..4e396d4 --- /dev/null +++ b/doc/en/config.html @@ -0,0 +1,116 @@ + + + +pgpoolAdmin Setting + + + + + + +
+ +

pgpoolAdmin Setting

+

Summary

+ + The setting of the pgpool administration tool can be displayed and be changed. +

+

Feature

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ (string)The language that wants to be displayed is selected.
+ (string)Path to pgpool.conf is specified in the full path.
+ + (string)Path to pcp.conf is specified in the full path.
+ (string)
Clears query cache(-c)When starting pgpool, the query cache is cleared.
Don't run in daemon mode(-n)Pgpool can be run in non-daemon mode. For display of pgpool log in this pool, it is necessary to turn on this item.
Debug mode(-d)Pgpool can be run in debug mode. When the debugging log is necessary, it turns it on.
Stop mode(-d)All the processes of pgpool are stopped. The pgpool stop option is displayed, when "Pgpool Stop" is pushed. There are stop mode for pgpool as follows. +
    +
  • smart
  • +
  • fast
  • + +
  • immediate
  • +
+ If pgpool is stopped, pgpool status in the status window become "pgpool stop" and start option for pgpool is displayed.
pgpool.conf(-f)When pgpool starts, pgpool.conf must be specified. The path of pgpool.conf is specified in "pgpool.conf File".
pcp.conf(-F)When pgpool starts, pcp.conf must be specified. The path of pcp.conf is specified in "Password File".
+ (string)The log file used when starting in non-daemon mode is specified by the full path form. If this is not specified, pgpool.log file is created in the directory specified in the logdir item of pgpool.conf.
+ (string)The directory that has installed the PCP command is specified.
+ (string)The host name that executes the PCP command is specified. It usually becomes "localhost".
+ (integer) + + The update interval of status is specified every second. When 0 is specified, it doesn't update it automatically.
+

Finally, The update button is renewed pushing.

+
+ + + diff --git a/doc/en/errorCode.html b/doc/en/errorCode.html new file mode 100644 index 0000000..4bfa249 --- /dev/null +++ b/doc/en/errorCode.html @@ -0,0 +1,180 @@ + + + +{$message.strNodeStatus|escape} + + + + + + + +
+

Error Code

+ +

Common

+ + + + + + + + + + + + + + + + + +
No found pgmgt.conf.php.Please confirm whether the pgmgt.conf.php file is in the conf directory. Moreover, please confirm whether there is an appropriate right of access.
No found message catalog.Please confirm whether the message catalog file is in the lang directory.
PCP command error occurred.Please confirm whether in the place that the Pcp command specified by a set
No found pgpool.conf.Please confirm whether in the place that the Pcp command specified by a set menu.
No found Smarty template file.Please confirm whether the template file for the display is in the template directory.
No found help.Please confirm whether the Help file is in template/help or less.
No found Parameter in pgpmgt.conf.phpPlease confirm whether the parameter to be specified to pgmgt.conf.php.
No found pcp_timeout in pgpool.confPlease confirm whether pcp_timeout to be specified with pgpool.conf.
No found pcp_port in pgpool.confPlease confirm whether pcp_port to be specified with pgpool.conf.
+ +

pgpool Status

+ + + + + + + + + + + + + + + + + + + + + +
PCP command error occurred.It is displayed when failing in the call of the pcp command. Please confirm whether in the place that the Pcp command specified by a set menu.
pcp_node_count command error occurred.It is an execution of pcp_node_count error. Please confirm whether pcp_node_count can be normally executed.
pcp_node_info command error occurred.It is an execution of pcp_node_info error. Please confirm whether pcp_node_infot can be normally executed.
pcp_proc_count command error occurred.It is an execution of pcp_proc_count error. Please confirm whether pcp_proc_count can be normally executed.
pcp_proc_info command error occurred.It is an execution of pcp_proc_info error. Please confirm whether pcp_proc_info can be normally executed.
pcp_stop_pgpool command error occurred.It is an execution of pcp_stop_pgpool error. Please confirm whether pcp_stop_pgpool can be normally executed.
pcp_detach_node command error occurred.It is an execution of pcp_detach_node error. Please confirm whether pcp_detach_node can be normally executed.
No found pgpool.conf.Please confirm whether in the place that pgpool.conf specified by a set menu. Moreover, please confirm whether there is an appropriate right of access to pgpool.conf.
No found pcp.conf.Please confirm whether in the place that pcp.conf specified by a set menu. Moreover, please confirm whether there is an appropriate right of access to pcp.conf.
pcp_attach_node command error occurred.It is an execution of pcp_attach_node error. Please confirm whether pcp_detach_node can be normally executed.
No found log ifle.Please confirm whether in the place that the pgpool log file specified by a set menu. Moreover, please confirm whether there is an appropriate right of access to the specified log file. It is made for the directory specified with logdir of pgpool.conf by the file name of pgpool.log when not specifying it.
+ +

Node Status

+ + + + + + + + +
Detailed information cannot be acquired.Please confirm whether to connect it with the node by the psql command.
+ +

Query Cache

+ + + + + + + + + + + +
Database connection error occurred.Please confirm whether to connect it with the data base specified with system DB of pgpool.conf.
The error occurred when SELECT was executedPlease confirm whether the record of Cericasshutabl can be normally acquired.
No found pgpool.conf.Please confirm whether in the place that pcp.conf specified by a set menu. Moreover, please confirm whether there is an appropriate right of access to pcp.conf.
+ +

Partitioning Rule

+ + + + + + + + + + + + + + + +
Database connection error occurred.Please confirm whether to connect it with the data base specified with system DB of pgpool.conf.
The SQL error occurred when SELECT was executedPlease confirm whether the record of system DB table can be normally acquired.
The SQL error occurred when INSERT was executedPlease confirm whether the record can be normally inserted in system DB table.
The SQL error occurred when UPDATE was executedPlease confirm whether the record of system DB table can be normally renewed.
The SQL error occurred when DELETE was executedPlease confirm whether the record of system DB table can be normally deleted.
No found pgpool.conf.Please confirm whether in the place that pcp.conf specified by a set menu. Moreover, please confirm whether there is an appropriate right of access to pcp.conf.
+ +

pgpool.conf Setting

+ + + + + + + + + + + + +
No found pgpool.conf.Please confirm whether in the place that pcp.conf specified by a set menu. Moreover, please confirm whether there is an appropriate right of access to pcp.conf.
It is not possible to read to pgpool.conf. Please confirm whether there is a reading right of access in pgpool.conf.
It is not possible to write to pgpool.conf. Please confirm whether there is a writing right of access in pgpool.conf.
There is not required parameter in pgpool.confPlease confirm whether there are all parameters in pgpool.conf.
+ +

pgpoolAdmin Setting

+ + + + + + + + + + + +
No found pgmgt.conf.php.Please confirm whether the pgmgt.conf.php file is in the conf directory. Moreover, please confirm whether there is an appropriate right of access.
It is not possible to read to pgmgt.conf.php.Please confirm whether there is a reading right of access in the pgmgt.conf.php file.
It is not possible to write to pgmgt.conf.php.Please confirm whether there is a writing right of access in the pgmgt.conf.php file.
+ +

Change Password

+ + + + + + + + + + +
No found pcp.confPlease confirm whether in the place that pcp.conf specified by a set
It is not possible to read to pcp.conf. menu.
It is not possible to write to pcp.conf. Please confirm whether there is a reading right of access in the pcp.conf file.
+ +

Logout

+ + + + + + + + + +
No found pcp.conf.Please confirm whether in the place that pcp.conf specified by a set menu.
+ +
+ + + diff --git a/doc/en/images/1.jpg b/doc/en/images/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e691d022dc3ce88a7b94f3aa00d736483d1c4011 GIT binary patch literal 31387 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 CW8|~| literal 0 HcmV?d00001 diff --git a/doc/en/images/3.jpg b/doc/en/images/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4f112dce6abfea75f0c608e9ef5bbbfdf1bde8b GIT binary patch literal 85280 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 eO#q0%vzfYE;ab3cA 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 literal 0 HcmV?d00001 diff --git a/doc/en/images/ng.gif b/doc/en/images/ng.gif new file mode 100644 index 0000000000000000000000000000000000000000..b10aca7fc5b0d7c4f34893c43515377bdba080b7 GIT binary patch literal 174 zcmZ?wbhEHb6k-r!*v!E2ABfJJ`5zGQf5V3V3JU*$V8Md_#>W2z1pX%^{NKO-zk>q< z5>Wif!oUvHr2`TJnZdvky}@Ip5MzUiX*DOeT9@|&))On3Iy4tHY&o@7q)d6A2-mZp z77ngYekSVdOiC;X6b(04HvTD++2M7wkYP^A*5*Ts&yJqr(@zk2tR)c?z;mb|YaK^! NzoUWB1#3YDYXD1eK(7D* literal 0 HcmV?d00001 diff --git a/doc/en/images/nodestatus.jpg b/doc/en/images/nodestatus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef573942c58f898e9e5ac9f1909ebfe8dbe55f5c GIT binary patch literal 58325 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%0Acj~=plTS?aQ?}p5wOkuGV-m?9THcP-Z#s^7kK@ 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 literal 0 HcmV?d00001 diff --git a/doc/en/images/restart.jpg b/doc/en/images/restart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd596db2b8dca2e7e9b3b25daf67882ae7e47789 GIT binary patch literal 36407 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 L;tcrynEL+!Vx3RS literal 0 HcmV?d00001 diff --git a/doc/en/images/start.jpg b/doc/en/images/start.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b1c4771c232472ae0c8f2d34efdeded6b9f93db GIT binary patch literal 23815 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 literal 0 HcmV?d00001 diff --git a/doc/en/images/status.jpg b/doc/en/images/status.jpg new file mode 100644 index 0000000000000000000000000000000000000000..601e0090284dad49aff67fd759463457fc75f84b GIT binary patch literal 57607 zcmeFZ1yr2NmMGjYVgwCt2X_cGu7?0ky0L=?57t0q!Gnd95ZpqejRt94o5n2(ZfR)T zgS)%G&bc#p?#y~K>;Gr1_trn_zs2ICs&;)<``cQztBTw4+n)d;2nY-U+_`fH@Cx?> zxSayX10LM}m2l4oj~?KDpFDi<;Ng>}j~_pI{P-!s)4vkI(`U~Jo;`a?OiV&TOiV>d zNl8Wf_w=iiJ9v0_PoF#`BOoB7ASEQFp!)@-`|J7lcK>DO_A7w+(Vc<2SNHA^1MU*v zxkr5GwhcfFxC6L*?-#m%Pxl|(y@z+_;UgT>k_Z661KhiJ|1r_S`*?Vd@a_Tb+`V`I z0Uj|4>2t=1WCF3|OmZ69I=a{)3T8n~Ei-5gJT5+GaCl^qMfjz&>jxAiFmve1$BJ)kqMwkJ==nVbP+(QtzEVIdZWL1B)&&-pOjG}^EsJ-rkQ!nAd{dR96L1sKug;>cHzUfJv?UMOP8#Q??U7( z3aEWndDq)X0RBDPhZ5f-2FL=+7|P#^{o7doo!s56kiHIGHj@OuL7MPCivvH*M-GdK zWCOb{9tANbXExe~fAWgxbr$tz{+&?M5~RP+_{NDnW;d`48hStWXT}Op(jdffD!=!G zRnn+-0w-ixDdw#J?-N>`qPjM)a)rvnN8L*4R&x&;Tv81E*s(w@q^LIpYuZpRZeq+v z&Lh?n8$%4^imAmXAU{aaKU`f|cab6%?n} zXbajRW2K*0g@d}I?OR^XZ>|ckogiPjkndzMv6gVNR-=XkWAdta7553%LD)t5Lqb^w zytgGJ4MtQ{#4u*{8~KgO2yLd?Q0c;!&wbbmqpVT{L?eATMCJ23qK~j(^}oZfe|X0@ zsWl$}xX0)y#dLb`h(>e4h2_ZSXY8{!IZmP@(4REm)Qjg_3QZIIv$ufV^G8{KEU0H| z+~-|R7>mC9la%G9;S-G*axaPlDui2@=H~-pOY6jD76-7SR*$T?f-T=!o#rVB9-n_~ zmDmX6{Vt&!(a$9#{+98FS#81^OsGp!+fp?@r0aTr6k$O^ZY#9W70Ld&#syu~WyY6a zoo;C)D7gL@#_z5uYFr=GJiL>1(l38Fk_v5e!?P=}CNMC4jV4GC;8; zC}M5A#FzXJiKAQ*wWz?W-vgD6)=24~-{Ndyz$_z3eR8igW~{HQE%Qp5Q2%<0WSb8g z1AC2jozssDs;3^*pBGSimq^LBp=9-1)Gnb+edWxt!f*4D>!ZdWEv-#1BWaH^QCev% z4*T1>SwNnn)oEJpwlD{UOM`B&hFvti&b)UU$MQ0rSI%6V4=DyH%@S`bLlteR_%-it zifQ}an6E+XWSje80=QHQD{HN3;1-h(Rhr`E1TXIr?B^&PvHUbdiq{yigQeMg#h?<3 zYFa98tZ>&gR*LHR4C3Mruyeqc*PDM};jiq|CmbphGo!lAFlAC!RBM=A37QlY8^cH&Q7MnrP;27UU?cal6- zmq(>{eFzPEo6AJ2;6WF6>6`>EIUP=zl5KGFbL!?M5*jT4M$HSzODPS;FBc zg_!|(9;G}e77JrR#B9h~WVFfP6Qa%QQIi;XnyvM$)G^;aZ+@{megW%Q3;1ADRRLuM zTZpES7Dxfbk_q_48-65a~PLSbV%c{{uz;eeq!qNd=)w2$VX> zT&R@?!)|Gwo>Jc8mLPwj(A6muc3egc#?X3MI60VOy;OG090-Yu~K|3nVkefzXj zcaJ0<(T&O_%-K1DDTLtAf;*1}p8~J-hD8DW7?(x9`xfkhM z$1E*Ep^CE$;v=3Aho-OQDaqn$rBWUArM}V3tRng`hy-Nv=j>~ES8#h|sLED);s^-; zlGd$P#G>uJwuOg$6rwu55zIoP5WC>lPG9!Um$Ig`s1wCt{9KE;2B|h(AYce?_iCDy ze`TgiLZe?*0A~g>GXYtd!Jc?~yTD|#rH1g5MxndQyZuw+u}Cb4WtRZNTs_ylHpl|9nl5ysgsO~_67#IA_Ptr=^S z;o|gZQFuZD-IavG7zJz3X7i<`s3Pc1DfiD!WOy!!D>e^Q@HviF?G%Gq$K{E~NZF8)TBG8&OMnNP7Xc z^x~HF5_hI=To`)3atq+@ijc@Hu0G1JjqJ{S@O^+LCIZTO{`5M}Sc`XKU8wpKwRUk! z#t!4+NbaI}e|~TUH97fnlR6*f*oZq}nG!q1Nl6ET1G&ap`K%0bVw3$4@cXTgLVfm} zM?cdDACgNyo;)kwFyy*)A8h`12&ZEMf7%!3RD!#mc6;s7w~JK>twaS!>yl~c>aY7n z6~X&>Cv^H~bSMnidul1rQ?Zvf6m-sp$Ky?MR&x9-h_1>b%UkgCL_)0k z^AfHTE~Q=i9|S^rYBulA#(|3ZR>!H5-HN>KW=0kWYDrCl1)3D{WajHcau5jlevyAg zs?kBFu&_7iXio-{o9t@NGx^OZZs8LjEB+^8;m1-@z)jId;Xyv4s``m7pO<^wB6zFZ zBswCq7wq$phe73ySFAk`$lRtAVl#-Hb8=A1ktyp;8lKV3#^2WL7Af!wA~CYDKj@_e zBxhv#ZUH5>Eq|^af1W?lE0RrFyVM$u?w0Q+W0y1^Mb@S+jQqCDEjW)p;Z5A_JNBQU zYaVRx4RqLHur^z1YhE3A(add4W?rl($7yI#x29>vE;Br3EBRpkhLJvVb@7cFJ)N+U zip3Y3J7=*cMLZ?SaqadIuhYUIba8?(g4q|0O4hhY7QPx$#;p1#cE^97?N zc-WP?zb!z{&&;pK*g*ynnXj06b8R%Jm<_0;&Q@n=g(8f6W66dpj^3F4v<}TGDbXw! zlCq6-j_LZmN%*_A!+45N45u3EeXj<0ki%#6x@$nNlC5qy<@m^4h2{@}rO9~3d!!3G zl1^JD3Mwb6MfI_ohOVLhZC01T`dERDDMguRy9k@{=Ub&^;QH2>HlQ%cf|1ZDnU;^W zy(OnaiaNnb9KQy=W$A-kK)TH(WZyPg-DT{=A$MOU>SXeYqT8x>dQdCGvd-SpM>ylI zW=N$pOYY~u_e({xzFb&zm>*}ZUPbPyuiA)8>=byoT z!ZCR{Dh?8F_XVfS0=_7|^D3+P=qAP54UA?&_Ng3&D@4g7nh$_kTiJCqtZEAg*gX(Y37M<;ukcUR29TG$aOU0~m<1hNtou ztK5^>aZa{Hg9MQEms+aRAge;dyrw5wESprBOUotft%5s8J_`!UT2>+>wyx0Zer9`| zYlKAdtau#}hjNqTHikObQ7(M-5;)#7>|q`TcO9}USp=~H1yII&8zCuuVkybVJfaWn zq*4>E0@$d`lwum^_n0)JYkJS4!pWJ-$8eP399ol-3q(UV9r#VN54RYMv4;fD%`V5A!C zBZ8VS*`#{wt<=Wat4Bt|_%faBNuenL&SSRZ3e%x1ewEaH*t9Zt2XY0a*`I#cF zts8s*4cECm(3SsjshQMGy4^5%$yb08*s84lwr2+H5fO1l$4CWOD-npxZbt2&jw;Bg zvK6F0VSq*|fTaD$lo!N)xOJc9&Y$-H-38NZ;AP|Tc0#NVF5&WHgSH{9;g0VnRkg$_ z{dS^b)`yrE#r7%n)`kq-1qY|GLBnXo%`*Fy5+S-E^n3H_;EB5yWkT@K7v1(_Gjzf$ zUfUA+CWc*d8~b6?)2BGwKDn8$N<8bWJxH5tU2(vt&DMvAObNVW@&+^t=#C7SC@qH@ZqbRG+BUGGB(iA^vx z6@a9SNeUvkW=G>y)PxD-6U7hJ7Mjb4bH>;NUO^;C^0cdvAirx)oIAhXKfX>>u|k~8 z9QYL&t%RKDA9Rsg>GnrUJPn%8-(*FjkKo~_o)`GuI$C6kd6_GN+C!pIiEE{Q=sR?u z(VGu|<5EKM`OaBkkT_H7NADz9wn`<-{FOtRNVoeI&ONW~RIeV&76(uK3DBrqWrW8IFHo z7*T$G>{o9TWE-|lQ=nYbH>C%gr?8y?C+$Y(nVD+{ZNL3GAiz<|HGUY+BQjwDvrYC_ zXmrkHvDyhSFx2Y^WWSRCz2j!bqR@7nVYcl!=G-}9ReEHU!j4=@6-8w9R4a<}Ve2eg zh$(9Q2XYJ?K(X}W;8nHL|;A3%<&J_TRJ>)+ULBQ%iIhJk1LuEXO=k2 zeSZtExA@w23%HxnzpHU0Z5k)@4rJA(zvKnIQ97(Ry#*Y!1RwaCUde72pPf_1tQg_f z<9lNmk8ce7MjIs-YD?@TV0wpgw}2I?4Ad>4@3?scH&I+%9QFF`->;bdT?ro!JMNar0Q_^`4qN%Y5XK`Om^WggVe$DS!N(oB;oeeeLxhZQ2X z%I!cq8?fxsVnmyU?eq;I3fR zEl@ilJJ$V8q00~gJvpUey`>%eJht!c*JHCW8Y|6patEmiG@1m9>IUnAKuU9%T8a1e zE2u11%fhn3pO)?quG_4rBkeQ5NVaTQL#Z>0t%xDj@=ck7r zl|)&k*F?z#BQ&E!^TP$Zm1Y(MKxv_YRIsSPwgHaz)Zt#2r;l6|^_Z2XM%q3lI23?I zX9Q1JbD9FIGHwAAq1P+%dgg6rYv_|^txx;Yh4uy~zm@l|*vFwNA>MAaB?g~O_o&{U z))H#H8e}Twsn}ZcN|uQiT7YIaDR0zJK78WxXY>2~iV2x>@`<$z-N1BxXf=kJb?>z4 zfZl{WKJ>%d2%$QuLTl$yL3}Rhw_3aV5P9AnPKrvbjYDT7%K{uen&p66Q@2Azd4pn2 zgxtJeY-X<>K6tAG7noRcMRc_Y2~#c z*7RBx{ajK5UbgO)J9)K!yFQF>g$nn~M~|!ojtm5HPmeN5@*d3-s6O_rPN2~bg}{3; zma$BN3o2-RM1C($BN!W1nJHc!nTrSnXV0(Q#Pu#!*B-b{+syKsNdiOAaj!OHg0v7e z8i_Tm^kuWs5TREQJn(}}Y_79w>n41&+>`qcN(4Q)!lp;CA1|%J(pQz>%Qf6*?x!Df zPi~_zwSz;nZsA*WQlr{vy`%cu+`FC`J3JmgI{U`G)o?+VQ|!mS;pS8IM*Z+`JkpMGGmkBsK8YLVnIZU|+XX30hiSw8kPN7yj7s}kz-3owqP;44NgAQ%nYXH>w*i+I zPpg>jOD8`2nokOXhDyxxJV?d1NPWbL)${_dx8J*pgrs$A!r!x>xa#n!UD61L3!KnI zn`Q|8ULK{w(aW1Pd?73zb3}2MXL)Yr@KreLSl%RRTyUsRNInt=jx z|BGIAiK9gJ%aF6ZUNF5c@J8NSErl{pMT?<5l0rV2JG9XJGL2XEnsu4~=2gp8L-uO> z@rzqP^i^|&tSRZ4f9v79>!*j9atp$1wRzKvR@p1|&e&|6Y>%9KNgLzHMV*1^KWt>Y z1t`D01zcy7-U1?G)@&K(N6uxQFEU9zw}5jC++*3FaOuqd%zsROe}7XdcwF2O=K{vAjpu$@__9j>{_`fMD*v9d zvttw7{>^`$9?Y)1G5-0Noj(G71<=Pp?|gm@4G@%hnAm;`NJ0q$fjp5$vOCvV3cnve zOvFFrJ0(Q3nxW&95_zaX-GMUuzUFN~#SJ-J@=R|dK&8EZP(^zAe1m2glB~xZtpEj{ zoWc~09)-6gCA<#K*?9V8D8n<#^eiwGs#fjC1!mY~e{Q8}f@HX7PFGzP6 ze1bW_n)ZF{_3~*HQf$ZZ7s&Go704PTQy(R}Po$rpnDTDo7T_H{m;Wh=as5?PEHD3W zwWr#@S8|0t`_2p;kJuo=vdd0x@Pv$7Ha|=^dew;ukc8z`&Cxg@9U40@;r+|E00|`@ zv2o=shRb2A!L5+*W+usqllH5KAl2fNNFU29^GPKsnbicq}J1dcW+bK@?)}Q9OY@W%dH1>oe@jL zi=g=S3z`gCzIq*97m(7&^S>-Zt*{R!Dh0jJv1X6#ZW|Bk=2wx2#`>NyqBFqEG81;X z`u-n?=A&~)qG6no(b*3{d3TRTBz2@xP5DV(KKQ@QS#vn66P!3gqQyRaX?d^MIY%cn zO=t2<=%mi(U45T-;g)X;jac=5+Chp2Qc++!l0D{7yL^b_w2Q)S#R5}RB7N%*QS zA|jfZkHzxt!83gWklBP*s`3G?SBL|(Na$#tczaYGW z)+X|aVtAyonM!ITFEJ@}lK=v)M!5T(^Og?KkK;fG6wGWBLDbf(@Nnd~CE#S&NI4H%VN67YI z_zGqCG`S;oz`lVK-!icZChR@`9&_0DvDhKj=BC6w`|cqzux8USUX8v`H7+l5#mJil z6gf8erYlt!`s$^ob*nUle>rJ0(&Y8kbh%Bxq&K7e4+ce_O3Dn*;o?|nfh1e$>|hd! zRON6Jv@N6(oL8mmH`wFsYG5wv>>fd*()QzqsE3YGEA+Xen)Q=I{64^C9U>ZO(aA!X(L~nC8AS$M4>MdAB|Rt1wb@m zr-7P8cb!Mwmj@?dGSYW{@HU02 zkzF?!6t8V8%D!>7YIdHlpLWYs$(hzFMYglD#v-gXjb&~DN(5X2u%z%#W#M@(3iOtm z=d+iQbdWUY#Uf+Pp#vISCCnt4%nU}7kO%PcU%Ch+bs*AWuGRP4QXhp($&N+Cp1jxu zExnwLYaQ}<^brg~iKa#jb)t21)_CUB>7{3B@$zW$tmV_Qvz?ab{Z~dTjBAxVv_#aJ zIO9Q%5LN1@M+tEoZpEn@Woi-8f{ZqWhjy%P2K@dThS?p#A}AC$e(i8C737n$R)+(t z?YPIKp!zn=ca=UJ;8sZekcz4R@et7I?9g_FL$XHPY3EQkV^`$yl-*diTCZK6x~Fc- zK82xZRdsHugwtA;IVE?g3$326V{^g``&a>l+0bRqT4-a9mzQYtnI2Anj2}mX43&@NtV7*z4=Yghv3f)@i(q5W{VOf1Pk8Q$*zJZ@&epI&!3RstFBX(U0R zTW)0nd?T~eI*CMe9(XTRC*S0h)tZqc!Uk5GNm<8}DQ5aqbD>B^zk&L;R>gJIevpd<*JNO4sn6`C8Nbe$v-RnYX9lD(jl@>32>-fHb{IXLb>TaXG z(R`FjOT#VTtF``%Q5ze+x0=SK{Yq3^oGciKdomcWxZ&y{Mpd`adU8`NF-xQ>6|A7Y z6@3~tIpG?X`DGEZ#zIB>eqR_ntoO{CUd|f9u=C8VCT-&l=53Y8WTY%+n`&8bQ;|%E zB6u#ibnh$q@w?=U1YitTULCpQhOpSAU^mDr57^hxCT{*lOMBLQ2W>H?V!--`L>&OY zmu23k`T%84*VcjH3FSpDuk$ptrz?o*WSe1BE+@h#$=*zTdf__8Ko1>J542jTqC$JC*YKLbU;;F?>tHd%?PDXC-Er0?h*ev4 zJxBr}zZbuqahDOO485YSv3Z%|W3PA&Pw18eV)RwQsJ+>ThB^7LnCmn>Pj~0#{HPzxEmUBG`H<|& zg1FfR@g}uY@QR9*2v!q|FQGO(>}(Res6Bjm*^IXzX;LHUja#V3-Exj_@=?m z+QXP69+z6@YU+jXlW(e*et(%}IclSs0JU@^Cb{ryhGUx9a?`{4>Pxm&r}WW@hA@kK zC#PdHu>JwF{ z$dhVUa1z34EpUcaR$n-IT%E9y!X=&=( zn;U6ni9!cE(bB@xdKxT)zuLrzED(3Ue>(uOQa2 z_!uaU91#}kC%s>gBBB4Y!`4thkYxSES3Qx3*}(bEoHm4=od$_|-iOn+`Ywl@aG(rB zEnlmCjOYFQpeHN{kC}Ud!vaA2dO=b%0l{JD1QcquPxV+3VO0RZEii1FWp6$t_44C~ zH!EF63xvU`BeO7qd@K5oUF|fJ^+?aYTQ(R>0C^7jzy`xQ(1Ik7EPfHo{qn`&hO*JvN#Ye-jQTy?uBa=mgW!d;Kv8Qd`bU>v#QVVI|D2-# zk04UlEla%B{1t2MF`+RGuU1MPVlA@2001nJPzBhH{DbQ9haykqGH7oBpNEw-cwhGZ zzWQS58(w^#>=H|l7L5VE?gzy0an19$fYYlEGei)VhE->98-;>m27?s>zv>x8V>Q9j z6vIrM8=xPP;gE57rvxGsAVYs1(KTSV&V*SctHwjRZOE=zq$a#^l1i7fBBqcd>K{id zOP{y$u~{b)sTyi77bvv_K@Eq$^AtSk=3D0*)X%>K%|^z9fjb;*}zsuqAE&Nh|qF`ou;CFCcC)_>IRb2w&ccz-dJ z;jp{66D4jEFP8BB`1t;r;;}4-!Aa8d-8HRvUQ_Fa_eWo*i;UIaUo`}_yKgVjzhpdW z&O4v~F*7SGpX@U&lb6r_oxkAbookI}^uS8`DPh6JrM5^rlAx`jBMrZcl82X0E22(X1(8Ug<)cMo*&n`@9B@UQLkS{jp0Jt`s@C$9)8u$ za`zkW;LBFle0M7FPa;i|Eb32N&6pUQ7aeZt!#~Wxp@SRaN6X`8B4;4F2oztFNw!Zqb#J7{Y6s-n!5mTpKm#oz#h0i|dr;=YC38Ut>?At;trJPakGX z)Xb|7`}g4=-27k{K27q6Rvr{ZyPYx|-aWW!TWLPT1%*Jq7@3~t>>Eop(}{Mk%BF9{ zw}8RVeJ$%yrMYR@zR=zViWHwd*~*8ms9A<%!b2vPoz|2Fj4W#Z+z?k}>}?=$*nRuP zf2}%uz5PmdgJDHJ(LY-7Jwj) zKN0SqDe<3B<~drV4Y^F6!^M+(2=vEY{cW$~MwUPL(cRdn>5MndO%D67rR2xOTkwt8 z3L#wm{ciy<%A!||Zo;5|1Sb#Hn^4C@knrM+jN|&nfJ;_Uw3)c3 z^i=amBzfzKDyr`NCtfgm%=%}ad+!k=Of|Pb7SE#8H1nyZgYd)|kj~}$kwL8Ozr6Nx zI7QXtJ$|QA%S-Z{NxRBDsKoLGQ5D;eaYlf^82>>&cl4 zmfWGnP0`J#950P?(-Ke9O4AG)>MZZsjfVvZw^DkjqCw90t4{{G$S-XZHZ37QLwoA# zFtGhtTlk53<2`r3CgalM{@A3{x0ZagGZVv-6`w~9K}G}CnQhinEN7n|1U4D#ZvJph z`skX&M9aH8EL{D0$4A6))T*R?c`~Oq>FF<&{xuO5-U4*L-`w*bcsaHS(Hcl*`tx5w z|J}cguU~&J4BEP+7^0?mP%xI@MNBjzq^f1J4lT?|YCIBKSk@vW&g>@UVb*Pk5r%E) zunAVVSr+%5;S9J;shlawwt3fXarwwG#i_c}v30A*iiEj@uY3dSP#eGufm_)Y@{7`(?e?lRpVvdik~^Xjydj3W~)n< z)_X?J9md3coRKX4n|1t^R^VPWV{3In%&d1A5zy1$$I>-ZHKD2`IX0SXEU%zS(eJ(^ zw}+Du(nwbcUME>g(`Xf*l-WkYQSo4sR3m^Z*8NTRh`|fJ(isKY)yY_Lx058TZC30{ z;Yl^<*_wKDD(LO-ENP49UdV?$0?DAyoYx0JYRlJyQU>- zF)L#IC_}LvgO8;vlkESlYB~ds56YTiEovKX9*mcFdi}im+04ug%)s+_&pE}KQHy$f<(@lED9UdSRjpu7=#848D(!^qx}0uDv1xfZv7J~*oYGYOS(4H0&n-wN z=UUVEDk_DRjMqCaVg<(GT$bO8ZJ|@Sy~vgd%hq~Nzc~>f-O+4}K8x7KtlIw0v*>8< z{QNB*))~_VndS*mxEAFGQkJZB0BisAl}9(~WmUllusBq~<+(oN*N>-c(}m`=bXpVI zK98&4STeLVV{**|9zUPtoi9yzkLS>Bm_d ze+T_HGxru#8>Bgfhx=;Mmll5%T-A$&LOgIW0#*+13@Zg_+AjOHeriSC!H&1dyqy)t z=cUcuL6aaX96~Zh!&=hLKIIX@a(NM5D=n=%93SamfBtf3rVZq%R%2B0k#SN)iMhbCj$2uyil2EAm z;Dqgs9c;>AD#>AdSOxmMY3oFDQ7qBGB%WFwG5}SIiAmfgXJgOosfXn{XdC$G-u?2w zCG}l0(~WV{uTB?_46bb<-n8+-93xeS`_EjsdDvQl3>;Mp7pq76dBnO~(8^H~lj;zE z3qk#x9&Lqe{-_c@CRn(7Hum($f9r&gjh@VFZ#}{*DfdvcQ72(E4C;ZY8Hu)U>r?1* zr5_WQc;Fz#=?S#A>zNPABIR9v41>_PEAfuEPbJr~Pk43(<$=T7v`9t6Zvljh)?Dvf z+rqfYNDAK;;EuI~LtXQxm+>khvAZP~nJt1vq=cX%bA9ck;z zE|jftNoJi>uWJjYN)#KiO|1?+Ds%dIQ6XDNdFF1RrSsak`v98K-y{=mKjmcahEWs% z+CYvWSu4$NXOO$T+qjj6(3;b`RbFoo>gtphC5IxrJiZ-YygFl%=GoNhZ5Q0eQ0>KZ zVm4oqafYL@sbRLL6>9dT*MWYSEsB;_k!w_{ex1_7;zv21yxqH+9C-Gc2(1^=LDfKc zOpF25RU0m0EI_8R)jf3O{Y191_INB%jdsY$VvbkiU9{3@vrSkwzdC5nYMEq{p0oCK zR8_6!x`4DFOL$0R562JaBng^zIEA3w4(-mGthY~vZ*D8e6|SQ5eC}f1ec-0`XwNRW zp#5tZb*gx8vdC5n?r58&#T5OEn!-Ai9{ZjE$)rwN#ZZ;hqKH19{3>Od5Xh=OC+gwsWaN0#TTBYuq!F27t09QQ@5gUzsyRuT}|~u3JzPtd!u5u zJW$VVun8!QW*eTf)x40+Y+F(jdhhIueP2_@>(Jn=_34x+jblmSYPN;^&o4%^9d;|( zY->hYtm`tv5w2+xY+SuV z#QxR?iGxZfdgKu*yttsIduaG`mC1VO;Z~KK!gf?BdgwhOFy5bo`t2-bO>;>Mxf;v+ z=j0?4f;L)12CT@X7^!(=#9^<-_S5n0|Wl1lIvumiN38jKx9+yc@P_s8pV>Rp!8Hd8Er56j8y!Za=^{c&K# z)2+(IeekN6Z+$u47fAQEsGp+d%AYeaBiAP8gRarhn4UtLqO+Y7Mp1Uy!Gs|C^Z(XD z{MVItH2ma^LpIZj&~~;|KUl23fi>KCA5II>y{LeOHi|EpwL9DTE=z^AYgEwd^hS+< z3`U3D$|o6)`z1ovV-Q8-mnQdiRyo&0rp_C0?4v@{GRCTgRhJH*z3xM5Pp-k&*O`<< zsdJ6oz)sqE%slD5rCF@MWmDmTn42=vxGjGY;7D>wnYB`9D!zDD_)xWkh?{9Ym>u4h z`^*hyC}Zbcuqhu}p_0GF##`LKtwQR4_?!49ThKs;@n8&tEh0~e^V{?#=cST;zlP89 z4A9$r?5Ln9&k1$iaE1P=D*#J&BCPN3w@n3_(nZ3n@w38u9rMt2%r@2CH7Y02oyM4i zO5o$x6#K28X0~ztCW%U?u~X|q4$}?}O$4ok*q#E_@Dq|jLF}xCO8O=*t%o}@$l|wT zTQ!*+@*Y9p@Is}o_19>oO;r)!cjI*>#5A1YN|CsAx2FWL(dW9RXxxE~AM}UqeOBWC znr{_|TRD-&?XHRWVDLM%QpQhqujY59fK+Nu7E>*U!Hs+W^BWgk8$LaIb_t{x%N#L$G^oy}wDRXkx!NyJ305u85R`*;2JB zE#upz&84!^*MTFh!icjZ9djL2X3A`kdc8)Ylp*V zi%n(7_W^WmY(#)Ee`2-!6S+(IuC5E6z~?%oq|#L0Z2pUr=Wk`OMatjXT1&&&&L+2O znhyyFLMd@~Zw)xRVDiHK}e|qwk>SVGe zns`zU4JOK_tEvqrRhL@Qe_J>*GPFarU*_(!G1HLiuN>uh4)jd>DNV790$r>59^~b4 z4IC=!=Q;TIX1wPp_t9vW~J9*SSv^(hJr4z6vT%w;y4+{ti|Seaaz$+Iuv zq-)(ueO(yUtI~)pQR5_d^*N8CKrzt~-qn&c#+sZ9EtnEozNzj_pqN6x84L~%43?-D zSj62{^g@IymOa<9sj;ko{hTKEd3ca$r&hyQRzs@AMQ?j1+!{7iXKkZ5F0D3f85{>CWcUaOXb07VHMHAC-sKMY zzf8(X@nN1qF-dBqEPcJam(jggJy~FcNzPEFwgg^4kmNIutO%KHumhF2!y)Be{ggpK)S+@W{6Um8D;wS3FSKlT&BNasR10n*tZtYcjZ@QP25aE}!D3 z(1;Wpb7hD6lgcP8m9i>TNjtT&W`ia{X~ISI4cGE0Z#!$=vrzn3R%sX9pWUHw{@V|eLAE>rV<<1X~_b!;K^7d6BU9saUDK7oGoL^JEKxE zQmZCtIjcth=Ui}|a#6##c(L}4%U4?yA{|&7;RMZ8`LY*@eV-Guw&|@TP@IoI-Nvn$ zKcDfrlm#UuALi7z-z!Ru}KU@XL5-e`HhlKIfxd(bQQq;;6AnyeF3KjMU?q| zwYwVwq0Vzb`?eZ6#{!(sB+@zO3mzbx`S9+(`!~Km((x}c^S{%w#%Onpoa^#>S1WY#`bHj_s-3WEhO64+{}AF{{~4exwk9e56MV% zs@-jimxXj)i2==b@@B7di+;cCGsWhu()_(M{PBi@(-zyp0hvRJqk{8}%cv``)=_bE zYk&yfhTrbwKL`0Ix&A3#vIPIslaqg%m46z@{|o*kLw9?#!Ne<&oQgaxYMr;+pc127 zl4CRJGM}jSes5i23-rZ#;90*5*Y^532de2J!-oIpVhhFlGg$VN~JlZJsh94YdHltv!o zUbdRd=(Ow|v2`1s1Q1LZFZi6dv@+VagS9RrB+<8xvaIP1?mVG^s>M!EcxL`SrI|N_ z@2IU;71Ea^C)pJo_~Yp}_gd5 zcPOPx{mfT%(B~ENuRI)#72?sggH|$Akz$*66LD1@a1)53^RdWB6R;eK;lOipshGjZ zKfbnV+CwFE{#d<8mkKJ%6(tuCNk|DxfXc&LL#-Y$Ijp7_ecTRrfR92R7rU6fZ1*+z z)Scw6iWLrWU`(DGvM{C!er-mgt-4K=dzz>XiO7xUH?Fn>GZ8+Gt<>_oykSS9QbNo@ zr3eW_9W_p3rjp}W4$CiWg7B4-4WmhPW7p-M60j$)YdzA*SjcLZUh{5E;{JO|aV6&C zAFmwH``d=Lj~yPs4IzIhz@NVPx0%!bf$gS$>73CufPU~6kkYjBG_LROc|0wFANW2> zH;$)CR4Scf0^1Dd4YO~ofV4k5(f%vDULXEvx7E9-rr4vo`S|3oxVfRQ!$O2ysMn<1 zQb%6$@FM}U{@4fiV*{u)6G{dd>k9dy>q`QxV~z?U|61EO6Qg_IW%bD452%ss}RVT$MAhXvd`a928GXMfJEWZE$C3 z36|}9Ikb{Cjz_mwofFQUVK@SzSezP_XyspwhSfQ0(_pi?L>P>MJjllVG#eZF?GoHeg?1{ zU(ED|ZE?N9zbTmGFI19~e%0ggo{WVQOn=_0J*xJ}Vb3X1YpQUe)whhVt<)T~)sAP0 z%Leu`3h<&lI}ej?z`=eM^*Tc6n0;lfQog)#u9wBdOsGD?$K}Zm`C29+lbX{?2rvQ( z*GR6E>T|3=FkoWNl1^L?ztjwKHGx{^9jr}kDK-auc(GLb)*fjt$~G=?ILIuQ63RoX zQ}3{l%TG5zzT*UO#&|zT~_v?t-x4^_K8qz4WASB#xTizCXUc*bOwi z7I!)=AN%o($if=Ue(S%8{Gah8o%C-!F~;>C&8$J!3|v7*tAAKp;H=d^c&@se($%@7 z=tMEfv-Ebx!c>q_8e{q03JSP;SdiWmviLEz4ZraNVS%Yd8Hdv(yT^a%mi8EqIetm# z^I)!YhdD|!Y2`=L#lez3k)(MI{}u_u1@MP+@_?kqk_D$0UBjJD5$CxIUylSW1Q-_@ zf;LN#b|Kfxh+1r%0(7#!;D=~|^g|?sZy)iv6vx=kn1ZM|oNWGsbWr>Q;-wxHsr(`3 zgE}hdxqNKWc=r0SR%-UxKP-D7LrwK3fvnETfdx^ z2ruBC0azQdX(#T;#$rgPYGTA&rI6~F3(R*zZjC02dJ1B**D&?^RsX=-(WXDm=AP7C zxXkUE{iDJa=Cr=kyr8Kxm-YynM2I{_PBm!iVw(-iX9R}?j0+RKN6PLkf33gwkMhF@ zebV}3QC47r0tS*5#2{q@?KMh;~R!hzryaCC6RenV@{yDy*?Eb1Y&FU)cRLe*}4QgO<)31 zN2Q!=_DEQbgJC;eh>+fn4U2+B7au#_8E4~{;JD(hp{aFdX34U&;me98m_<#8@0jtQ zW|+r+eXY4&o|_M@ni*G(6YzQevy|xE?VA(YEKj8db@*S+`zULsOqlXq=nw!TVOfJ?-1q`?jLoS5kFw25m@R9d7EmMv?CIB0B<6o;nE## zcRrzqJ3jq&9A#99u|(=rDARv@)0cz3UZBWXgCFJ-$XJgSe%48n z!*XJuVi}##NofLOLam)Ra93Le(wO`>u5c$dH=q75_TD?JscqdGWw~rf zQ9yc8AfX589b9yhP$cvOP+A~B=tWShbO; z9ZvNEVpcA@^}~xb>AL}GatgiVFg^3q4?y=4X`UF~)&&#cwD|8|d#o%j6hyxtHdc)S zD($}2wBM!Ao&6BWGik7fHqk+ZI!=KKJi#D1E|m%W{Ucz8{0&pb1WlR_CYlgFs)U0 z3C?R+y6swUOqAGEq6IACvZMk6qxm}*kG?-y|rp=u7RBz{)(Nmm2mUE+L*1QQnV7-=OZEbco?T^v&Ij$Y z&LbacxHCn3+=9Z3of@T|nV?s=o1CmJoDwbwma&71APA8?{t{EbhE$`#*_qURPN}c# z-eq`NCp%AFJ`i?m%{lU+2ESd{-6!LpVM+oW!~FWC$*`OK=tZ-KRGk3>>*@+2tu2Ll zj{B?XuY;_<+^1wQn&#ZU{&i5lt<)=BN`qL6H8k_V%D;Q3Sd#UbftHFs_O(_%X zW*_cgZdI_nUNnp;Fha3OOCo+Le*Y9TN%T+UKN0G(nZroBD4Fr;wDx-0LuSZJ{ zLE*Cw^;E{O1&_D%!S#=d*EcmvRhR`-9-4Vwp}#RulE&2e3TOG)^0cfVHjTe-bsD%c z0zfHlgYNTT(x>FU}e z(|@rq|7G;`Nm+CBBmT7rHL#ziw>G+6m6y_3n3TvbHKSK}lt2@gPoTK+*}N6h-yjO7HX8 z>u+1yH?HA8QXZQ|4_WsP&S?5vsl;~V;xfn#)joQe6pJ_ng;N9uTXTDgX-`bnslPC& zW$CjQ1_?YjoWLxF{@@LmYd;ckCok%?789{n&MjCrpcD}0i^mT%fn8TqFs5fS!}R({ zuj3hQ)SjJMcMgwIx1Kg2GF{RYG?XN>;XP~dmiE3~Ynb)}Y4bmoBcwObiwJ?E}N2S4WZUUt9|tZhgM^~AjR zC-W^<+#N4UiY-REYp{bbBIr_oOZWF+z3@hX?o-&WKkBG#t75akA@lc;!bLH%EJZ3A z;DA{&mK&NNMr@^eXCB4C78*8PbIEyRLL}usE1`4qzx|s@==>uB%y5$=Zl;q-J?%79 z7ULqPzHbTxGaJQ7+XE}pCK^<#>Z`APuII=F$2NW2cdk^ywQ`nKvA?54$fG|MbOgOE zSxOcO{yFn?|3~rDf0_^fuP!bA^U?nK8GIh)C)Gu>{8pCS)(aFz8W2IA@MJ}hkJNNy z>G!(C;lT1TTzjj9u^#;LRLxngn(Xh7YuEeI03VGk#iyKrp2vfF?m6I!A5!(aiFUE% zfp4p#KWu4PnD>>EE$k&^LziMn5~^*m5U{0-wGxd6;UAfFzQz5k@T}dSWWpp1`SiRP{f=x?m>{uJNInE@|OxMbsJ*Z66#IO3^)HdF?gXwP~ zQ{DMF(;fSVB(vq5`nv23zoFzg_Q)x*+_@WNC?QwuqoCuGC#W<}V8~L}*i#o}Xv3{Jd1HO~@b8XG z*F5wT@aAq8cphxYzE}Ikj3;d?9W- zKV~Ybz(Pe6?n;#fO+ZOjr!tV#KBcfjNoOVJs{x zOv63Z*K*<|s!EHq+eiCjw{hCUj_T)+5+u5U{c`&kf@cMiNfKajNo}p@5wM)i8O~qd z#l^(2_pB8hp>hO7FpkDh!gYF=vYW*WlXw%3 zd#ru1=f<1_ibwtXOtp-!w>m_o^q)l5PFGKz*;dMt`UXrQ-pjrQZkTXikqVYPdKqp~ z{Ezx*1-s8se#mzj$23&oSf}ld&Gw_C|3Zxt{|V_T{^suU%dfrlWp7WeT~uwO+Iz;e zsMV>=UShZJ;<=n>r*LSxZ<3L39|#PI9}a7#Xa?q&hr1^teuR5}FIjkkelu-=iAm<{ z>N=_xAoGV)%AbeRXp6!__NW5sa+^NpZDQ1Y;O}&k{JXhL-G{z1djU(znkAoJ)#vZ$ zKcn8N>O>t&p=Ft^Z470dj6{6D`z7M0@8>*Txf8x`cLfKb z>Ai-G_27-J^jprG#rH?J$tUU{ zT5A*CCy2fI&YnUX#w0wqIf%B_P?i(eV+Fsasf6p!AE0c9sh0N6OnqE6+yh71kQZYo zXBVSQ5uRXtS(vr_(rh6t_DG3x**=KS9~(O1(MPW1KOPuED^=g4}xI^li3>sj4_ z!ZPgz5s@P!snS5}c z9D;Vr&ME2fN(q?^qfX9fcy^z8;+fI>HS>{mn51@^g!DNaqo*uLmOK^n{M)O!_YvmD zL=tG~T7ngEy~t4Jj065m2yAd3=lhJ8SmUO5V}_ zMz-yDxY+U#M-pBu@5T=i)Ms|<_t+Ektine0RrKrtLya&%ZO{dKqcWqX(^1c1I5y(Q zBs4brIOzC?S^u`B$CQa}wiV)JA>MCOcbd3AeQrNG(vNp_cIb*7_ zPASFMnk05z(^xUQy9|Zs@aRnMWR@nS3bxO56~!S>-?VOCKeqMnTdv3+2|7|38WnG0 zz0_3-#@+}kaR(90+$dKQM`(HGt{g9fhOn{bPcpYvie1P)B&mj`MTMsr10xiH)Kd|2 znkeEvuAfc+8=dOVo(nj7L-(QEGgYORO-~YdPScZ_#hW)N4t9lX*K%NwBkD%%?g;%7 z$n5HMe%S26Nx;)V^fd$QU>ur8-j^O#fRYCS^}qcQ!uVtg)v^dK`dXuu<5Cpqhp)Ky&-+Xl_tu5-KNbl%iAA|qb z=HbQuh+ZB`bw3Rmve7X!z-G6 zg7!p}TTDs!EH%ZFI?x>>yQvLS4&Q6ShR_EhR<|ULYY2lpg#*gpyW9?m%V`~`mvPgmZ zA}d4*WgP_^PIrY^YmXRoS@3Q+R+wIKc5NLBJ0{;=F^2khu9!qAWXHB#)X@t?BnDpwOcAV4&W3C|B1n6`VI`OanUIT*VYaQj)Cf7i2^V^|l1Xvv?6_(@A2+Ryg9~ zM1`q`ji17`i>ukvD{b-Fip&e+FYu6H`rw^6=XjvCmef6Qmd&y}@hSuJ2C=ltABlp{kDAt61XJsaQ> zx%WPTF{eTZO_X+CH%#C^zL_}XiEh|-V%gnZa1v<{M^c1O6vdH6u;Fum2Tc9T`sW$_ zyVIWHV}RrWfbqKHCywE+&m8;8U;&x?tL_s~C#=2O!o3&28Gn^|?&K1bx_0h|NCel- zn%Y*QgU7$qv1uhAJ^?7>+sqtrZ4dLNeF&1Nk?d z-=i>-hKW}`sorFKOqF*-Q21NB@4?4|W59FJp^kjHj%UR6S83a96Tu^g@Ajt502P}BOk{t_`$l2&d*$+J z4j+&EN5U;|Ze23#2U(yHuA*NWnOG&o%MYYa*VN;E6|>@6$g!iB%fnawKT`zIBVht1 ziHG1fa;r~Q4mLF#as3Us=Rj{RH)hznoL5J1z&Qfnh7x3Ut6swM-Nbz)awa>Z+V-q) zCC9ou*15F-tusnmJqpv7Y43lWZ6lYa%my}n;*Cca(l&K*B_H)s_6cH(AarUfTX-0BT9V|d9(hYG6E9Xr_3xYA11uT&dN1$MG9LX5=B%quQ(mCzX@r05 zy;YruF5OAlpHh^E=gwpxAmPRz^&_Y4wJONKz1c`FQGD2HpgA|IQAWzWoS$m^JjQ&^p>HUrOnhrc_SIkt~zU*d%)KWDia&VRwLcJ8swyZc`LY)oG!&F z5y6C&*jQy$ym(Pi(Ntl3r2E4j1~e8>W@L{RM~{F_W0Q`%!&2|CGEK>rNPS*TOOJlv zWp$~-ZzfuhATB$l87lqO{4h4#xUPXf$Vu04q}&0r5T8wn{`w|2-VxfZfgc~uixpfI zCo)R_!Ew0eA$$eIKCHqr&Y;CZ5xJ9W5O#9vZOr6vmd?WImP&(!Xof2>CMH#W7{;&id64VPDTf_tkB37BFF8V)PKKT=;?n|Ksgm9uUVBY?n^ z%cW33&nC7eBg!6p{hdyfE7MWtrR98%i;v*0!R&{Sn$Zr3muDTyjT`2Uf=~fvqD|I? za^|jvsplO3liqrYQ*rh)8$Vp@W#CMQ+{=;RXQ%tDlWXK>+K0~l`OS+l>q9BNImBz@ zV2_huH4(!#feyY8WoL@^7(e>{?_1@}-+zNiek7DUwaN&%>|x&vYj_VcK?w^>e?fAK z`sXkQk>1a$bw?CnNxdGblTBT=yDZ1ikS6Y@TaZ^wE|rE9Ziz+Y<2=c`ib=IsJX|aO zyUPC(iLvS3_=|pUM)S<~5MY((Y}pbaR7G6$CAzXB%||o|LW{K?O80R4T86Cp^qq@9F8FfM{>?)s7TJ{|@TnNKrk1-72Zk8S<%+f3@c zum37^X)ad@VY24`JDt;aVe7*ZGq3!qhF=QXINL(w-ydGGTw}K=f5%tz;KL6#J0tU+j2yy}dIt zLqffsOOykCQBG>ARQ1CKJiWYl>AHiKqDwHVKfA@Qap0CjzlUzpb9T_PM&ZVYGyp`z zW;d$q(NPpqazlUuk}8(0`A!TGH6F~a{>^XKMm#%9K2&K_fwcd|6E;mH)j{A5tzc!u z0`ivHkm{$#+p280dQ+vhi-p-nhIM@h42pDIwGJ;a(Q>4N#C=Gy#Rv=2ks=WImyz%? z?WdiKpW=%Rv0uhEd+DPyjGF{3)CUAVH%Zr6y=4P5qEdxLFM;7!_)_n)nJqTqv#*#l z*}JA>&#*5!ByO}Z4Sp{$s>bmMQFW6|oicz?%?-^2o|Fy~yd*rB`)s_HwQE~c*?}~$ z{9co9w8*O6#EmJ2W!?wF=j_9ICS;fJUaySt==EKjectd0KQ-r#v%Io<%#^~;VoF=U z?{qNmk_~V~q4PPL63)8evFTK^Vwo=ag$~n@(aaZ%IEC-@ME{?#>rc zXumX{o(9yvXJL@$3A^~{hmUW(@H9k%0^*7nrl@W?cmub01WOwkfB5$RvtVy~}z8A6s zt+bk%$1qHbn_d+6&lKpE%VMswNNP2~A55=@F)9Ne$$_6U&Ee54iJ1-IyBFZ}eQ z)#&Z)3g)@xIj6XgRBE?1CFxm-odh%v>eK4uotA@L&VC!dT4(B(8J-w>cB|UUt|eK= z%YO(A!gteBv33x?K$Lw9uMR#jO9?76vLWh$k~2UW{3c}Bs}k-oFd+-;NFFLTL3@lUcd0`EZyZ1>#>~Qg=@WpDcL1CWAzYZmJFWC^MyvKX-^Q zGW4h)14v$-a!c~?1eu#VTg*ocu&gSJ;-#$4FK0I>b%sv&SvoHD-AFucVNDk9e_`C+ zT+MuIr^%;QzldECgG7W$0(N0HN|ewg3u-IG3zL-d)0NFE4;-A^RbvFIFkv3u+#w%$ z5uUSO`ru`e?z_ol(UvE@>6sA~=pse2 z&zz^m6j`|Rk`w)o+R_T0p)txHYfNgTAJ|yt=BIsXx_gw&9m7aD9~-Fg@StmQAclSo zVz2F;OM~`mEv9PQO1^y-sp~R}ndb*Yz9~DR$(wTUiQP(ZkNxqm^@dIUOBYVOY!$2m zt4IR#*4DIz<*{wpk=!6tA3O0hQ6QZ#CL}C#4s^BAizma^&0RK*bxoFNSeBjO)|642 z07h9B4+(3GY4M*+v879pbM^c@HkN zwzjQ!XW_m4>r;z=ab)><*=Ziiyp>FLb+wahL9c1FouM|TS?D)2!Z5r%r}%JkxZfVrM0h#!vj_eQsF)a5FW)q$rpGgb3RhOz8QS z$ZZM7-l=mfe|4*;Q9t7hpAws*dBw`Yo8fqkvdNr}g-(S!&c*U!ESb3t-d**{4`rrr z%U65~W5w4lypt;)!O6M5*_pedH^AHm>{#kjwi{pZUX+K+nd2UW&_}ma=O~Bqf}VYO z?pv?g6*f^v4NRg&P`o4Dt*M$>BpR_6<$>md_k`FpwjV>9@sT?jsjbJvo<^ChH z_ss^Q>leabeTpb$>hHW9=TmmQSmmR9e8A~B(GmMPU}Y}CbkL&rWRCqIPsq=I;hv-fcN9w}5fY}t_v9zLXRx@}Ef zX>$(&70=G{$}+pOxe?FN`*hHELQQKL%GEz`tXfV|12qye4Zw2eZQ0IMoU<8oI^mSs z10nf#>Afs72#fRe+<@gTLP2?eY1jK3GDiNLBdb+Y4rH zc2!q8Ua5+aXf##7brLYW^ti?$c+yEG*E@Z5y%3_b^vo4W2%;NLq{~<Dspm@QK)rgpu^YNg6iqMgAVXj76(1qW$TTxz#1ym_yJBS~ZPp#8sDbf!Y zmB(70vVK3UYx;h5l6;IKBrX^{wS2AKY&+2Ao^b^)Y?kMW)0fc2!*XEsQbGmjbS`P- zj*uxXyY}NK8he39(CJ}2o8&6L5ytcHcK{AeLUo-Vdxq0kcn6BIq-^;w-~sTEEh z!j5U$w7m-B=qh_vcv+p}^ko~moOacED@p(*5LB}%VHvh$VIpI)T>I6`iz5Kx)gad& z_eqXa}TnXnn2$33T_e7^VrwPX!4YANn_1ynjFlb2m=Un6+jlZY>%EA*^l4P*c)Y7 zF)fJPm1Gdft;ZTSjbuuhpcq@N1})lx`X-AkJQi^8fe+pamcxqV%J#|K8%k*@L(;q> z1zke3=_&*TFYpx|4E1)|X@O{-yF)=dX*c87jj(VuzSJV@-%Cu(U2!7f}VM2c4ee zVct6YXz1IyYFZHFWpLE{ydQj4iLK@3#tOJm8zozx zMjuuC=(PcO$uLkz;o{`F{vG5KyKPhl6n6Wn+OUb?0z0I_LO3XbRme2v>Qn>7^#yjZ ze{(JD>Fn}MB$^cpE>lev7wvxZXtsjK`L3qhsg0c0Pk8}CMKirA-^hR_9-W)10`?`s zy&rKSB_aN2*x{EvORiK#V{bF zc+$f|oW`AhK-EFD-59u)rCoQovC1MJ_*PzHhEgegBK5{vm3kz3La;uq)54*xVm}ZB zy})QTz#-UdWglOv7?ju*?O!x*J(w(@>9UPI?2~RqOb6zows~E}O=YIt3ec%Len&Z{ zey6(}5Qy@R4_ji-;6Omb6O85`z3eF-tWyk};5gzk601{G+I+Jcl^&gd*d5W7u#NEk zqYL~?e@=tm8YaB@ym0i0+K9(5CUZVNsNX)dL>&3E_@U3_<|pBvci+6f{?>#Fypy{6 z>4#FpRYXHeNB_Z{-|2X@Qa}{@<@MVgztdr!7;)@N`vzz@{!Z6BMqmiZQf?8rc7M%% z@=P1_zhvA0Kr_+!EJ&KC@@jyRdLbsjJ>w;F?yNw$h5VabaPA!9=IqcP43<&z$TTmv zKUgcZYeq!=EPd>hV?xUM$wfJFwo3tzxb~CFvXChnr9^i8Ngk-j%Q%VlZvRPp8LPxi zpe)?}$#8keTOQn4_XnBf)&G;5h4>BK`b(Dj=SAnsaolqF2PJspEvo;fOHOPq!aIj` zbu#f#;pvjL*hx;pv)_Pp@x%R-eAwYoYVf=do7{L5Yx-1lWUG;1?1`24BBV}hHTEmx z>8JmE-+xWQO25_J!hZ9n@*tzJ!Z#K4%9qBp61|+5+yILt-4F((sRCMwDh@h`Uj?i@t6x>NF3Bd{TG{o$pUN@o5 zwl3N`XC3ejCItVM-6e%Cu4-(;n|NpNdV2m^-M%{LlBBR*4dZnkPX|K1{>~!M?0Y4Me7`~4wlX|pE$jWtHT!dxnJYnMw;t3V`!;PmG|HmX1cE!QeqntNKauzgAcPt+P^ zEjV=V2t~pao+SjU__?cW?ozv)P9LhxRDaJKmwF@H`0>XTWU-Z=N`T-%ebr-+ZzZ|9 z7-h9i1><=)rZVZ$$*&!0r4uhc+^jtl`1z3E!3l3zWKG0G-92rmMy(}4moZ+q$;<;z zy_90_c;yqMsSL*2E{U(5!)@6^6n%A@vLlO${TItE{Ia!GH9r9hQLM1^ z%;>q+9Pk`B+HuHM;-*;E+-JnuC1)vhX1?tVne|~rV7`CmB$ZKRyE3kLN!ili(Z_b` zOka}`0N_IZDLBPKsqXHD(!|X`Q8SFtO9P@fsFpw0JU70{KElT}PdcZO^+qO*sRLUj z;cAv;b=H9(jjoS~&c!=4K&j_4AJHN+=2-jjB8464bD6h9A79H}TLdS+|6Vj%AuN04 z*UkrVA)KQ+dfy+VG>yXZeDl0+F4T1LIvUsPWZ*WsV;|mX+kjU+PnR%e5U@Pm`t4|L znXg662f}x+W7{8(;hTm!Hm1>Al<&*?gNhK*q?Ede+X<{MduznKLltMK%^!rjJvB0? zhfEqyFs&iJAX&F(9dqR9DRA)VdPh$*5#;96HOEE#W++#ay1`YF^XP3kpDb7*!~uhX1MDmVe`LrRrmU5ur!Xb4vMjuAkooB~mR?vk|30 ztcfULI$xFh-g^`x{-DG;B<>Xt1=jbpwWDUC#4>F&s&jzJ6V5^vvdCqh48NVl*Etx& zCbDBmS+EKem%ger9J4E$>!#W^pnPelyV-Zpb+WN9SQV|v@puGakS6mgu3BB7%qrgH zomrKh(T%knGRhM70TKODWfQ8P+!(>D&w3eUiUga#m#N(H+LK4f`N-VkF97xrDR z_a|uzA&A_i`1Y9f0tv(rN-P)#7Oid)nZ$UWHw#GYGB$*WNiDbE8{W3>>R*H)yVD+3UHg!VBcB!nLUksC0%U!0OPM`_A274T(ET#-T23C5RDitnt=>tZAj2c zI!{M8Z1`6fjcG)pgquTM2Uoglr+5~?`;+#U2|orG4fIS%`g>`MpE}}#`{IRK;(ro} zdgTateavNM?!KKr$C_i|hC&WFEOjZ*#8@RH4qQI!?meF6E)-M z$^i&7S+Q4cGvVX(P;+CY3%&`F0Pl?P#8eW6UWG>bz22v}e9YR9*bX0D$z0t+is}~E z@%6^#x2kFRO8lvZPJ!P-O|+YA(>mn z0nWCY-AH~YHipQ1V*50C zb|HquT-{&|ml{e@4+5esDKv>R_;vgC2aezAqNJR2Zu-|RfO-q-J91K}{qXTUn1yEs zHyE5A`$p4Op45OOve11gK1g^|!}%j->d@<)Z^72?>mkzMFTK-cGG$K^0)?0Z!BQa7 z$WlZ*MqD(c^z`lQ!Ofx5&Imj{yoB@AXue)~`3HE)$uWzm__N`!*ocmmSPDU_nIr@8 z!0-a9fl+R3TvX;;gP(&-8?x@l)VNJMz;<~kdd=}YFccf3D}lOJU9N}=QQD8 z*AvVivuYe0h8QET7M4PcbZ)s;Fd+Psu(}W>!b8-O-fh2{h;8w5!*L zk8~%j>L$U#-ZC8HYTd;f_V<*gwNd2ULT|XEy~??C~&E= z+1U~y1|xZ|*R6_{&H;{TMkMY(12QOK)oUOAd>{iYc4oY&9ka z!a9qk0qPHsd*nC%Vcf^9bTT|}=mDp1+T)sUZI9YhxoOMG=q)((U9oU=4OryKJsx}7 z^78Ts55IpSNR1^mGtw2N#N2ft&HO>b{esU#Uk=LbSt&;Ai&$Pntf${<-639oH<&!x z=;eqEpUc*MGO)=}S5ngTu3ol0{Okg<3IL@)V2$ii8da@adp6NpY!WHnsN$)BLmKAa z%JQvw(d;=E{Ho~LkA412i=(b}%SBE3nci|iO~)s0$93e$@VO`Tj?TOJUXMrHkIaZXs|eTaRc{B_iUjX z%pqInoW5y`vw?(~cL@u!f}sACt^iwMMK(6LTkix2JNq0SA!+DSHw3JZhpGnqRRXMs zGG}ML;x1%4ZW1|0KFaL5ScBz&;nOi}*m`Nzqg1X7^YiK#yPMVf4|2uZ3D@ibyGPSPwDGD8Z(?K(P@Fy9Ji6g#Yjh43Kwk=exF*oYu!ND@MA%9(8KDK~yRx^aj(G1<|f3I7bu<7F(#1m`pgw z>oP!;%3=7L?Q5*JOKAxfudl@^E%fgXdyjWyemg1Gu?)Z5Kql;t=Q(!Qfo4-_DoEh& zr?!1Ko)m(F=xwKo48V42Twaj@uC2RNB}dbS#%cp(6@P0z=S|}no=*Aq?lOy|FuVoK zMGcGaQL0lQG3dk&fXxLA3@6VQBtP_<_K^4b6uKeQ=iWYulXD%&uOWGR-~{Jfo7$R@ zyEG~=e6*JVL|z8br2TUKUi;HMVU;GYV(Ec6v;KR=QBZrgE@j7vPkg~2eMa&6jj%dX ztW=zMKk0o<2fuf(duLo-)|Ff(X)k}f!1jg_{7Z=3#|0+h{r5+rLa$HNE}Qw)70z}g z4G$id7t|wItY+C>tN06ZWby>hSJ$m=yUR~B!WwqWv)Co&9ON9CyAHiyHKuX*bjUU; zI$a`YWy7#!lPJDsalb;ad3{=VKFW|NPTR*TK!SJiiPKyv{{@E}{-lLE3wTq5Cjzr; z5vLbtG6?+uqvSdc=flb28AVdVtoyUJoJ`YIp9XoabUw@Fw59jj3lb_wX z_D?tZ)3nTJrsbwo?Ajal?@a3~jYO|iOloHGr8Bt}gE%kCqbpSe$9PUsUDHbx#fCpf zr~Pv4XN&)ekF${>@?gx6Rk``M6TYxq6JjW~RV801->?2jw)x+ue^m|!*b#34+Z0e* zUBbT@*5sxZiBBeh6dox`wYl@bZ(!fzQaLXTyG7=sllPzOE+2NuW-|YWr)+-}EB6b- z-|>n~d&vI-p@tHF-%3FHCP~ta7Kiv^x%K+RMrLb(&{AuY=jNPQMk{ro%15uHe1;u# z4Y@ADN|0M=B{vi)eBIvpg;|8P7Bh&qW*4Cp>ET3t1j+Ym-%Kq#ySkHQ*!@cAIiv)) znefI+FAFl~b*$?U=(LAL=LerYMBR_wmKo`QNj`-PmR&xU-CSgogv?00#(6j3>K!b? z^mOtqDE9td)+N@_I#X9VPMuYLal8{3DxvS%Cy?vsj2MkvRGgi!$-v7Z!bM))4x=AV zBLi^vUYxgJV67j-*AwTIz0-{oN4ed0TBOSrT_$io-m#zP{a(L>+1nGFshIs&B9qI= z3|WHUIBZ^i5RR0t?cFRM9oXe=dprVFVHUC83#iWc3QE_VyW;W-AuTa{Kx{17@hOdZ z*&6|86b>qHJF=CI&?I;^Pk{I=q?%kV7!&68ADGrQxJ8x@TujA@CA(AUiZ_&6-S&$@ zWOmk}uOzsoRGKP)U~F8ueH70vEwG_WAk?F`ER7X4hD2hQva*A-AD_PQ%7tPVfzcJe zWUoKd3s6C)$MD6a1y5K=jc1t{?1T&|Eoq*=h4)vxBGq|CQo24i>{_>RdF#G>zR&0x z%k#$bmt&9$appK>-l}P@I6RzH!(d^uRAWQ6aFNui4j z!=wd80!pW9vKkN`ez-6bmaB~+>!z#@%w6=gTGAYa7>_unh1yf{fq0ytJb<`fhxNw&fd`-8A zrqA>aoL|R`|u`M zkIb~Yy)4F>;FCz&Yl{A3>7V62#R0mRLmy^hMODunyS7Ft0#bJ8yew+BbnL3MdVlqt zo!Fb9uw8Jwy1rk2uGS>+D+K%*-C!6ZYnW!^LLUM!6Sj)V9Y|Ed!7K?|eCa#O08mfm zh$)Hb-0X{h#R6-ywimW_nWVhc!O_AX6)9x8SJ>wvbiyaY4OZGm*kngP z$R#w1j*Cu&EwN0^lmH&7mY<|1gVH zSIn|BdhJI;BwMcKBLEA_Ir-RwP{}AxM%&&;8_vW@ojk$lLet>-rl9n)RAg_mO{ln3 z{jQ!7Mc;16jxE6)ISvnqV`E=+boWvfe%_NFh$}Q`H1Q}6) zLY~YhNodj)?|Hkm5`Vxqo%jJ}1i4H3h}pu*W{xjs;Rbi!S=|qtBgTd!F+9O?fu=`u z9+Qj{shh7Op8g!>|Kf2r`U(;%mdcL`j)6hZ-85DoNP?W4+_o@%f_Hk{v-!Y|Y=!;e zjkCp_osF!@;P?aIs;1t>=v zGU&K73;Bpq2X0kMH9Wcf;;Qo^2xTMvq3Zbbj;-3KU9m~K5P5X~TN0X|7FHa8JY6~V z(Ek@=uJ2>O)IhiS0nlas9&hAuTgawNDMlqcKsOnCjIyZ`e)wdc^X{2$)znI1S*>69 z2OoB(L%em)v2H2rm+``q|K#!fv9;T53MC4tD zSf*<(ce#1;m4s5`B)Pi|`IMXyEwVJIROd_%@7=k2SO@y<`QPbWPhLpPd08*NvfpHD zGxFriGkr=9xVf-r=jcvp-dyUS*AgYE2Bk1Du1at#UtF1=oe=0|;iW=Lb@$5=COE)= zj|_wY6m2kMyGD`zd>&T&j4{g5dP)}P8eZg2w$NNi6nyNzX#pg##oGzP=HU)t_nxy5 zX*%T<_2ogCMh>9LNr~nQj8p3l#rsn+>@6lt*g7xFolyUduKjOz^e+hfQ@n z#)=_(Zu6~9*r{@4YTs2yfi-jScG+cInZJ>e9$qCNb!1v{rT_yYK;I@vAg-sx#s3B>a0VX#%9vr zm1lOGuIVrA?c|h>p9IfB{nhZg(Rw|}e3PCUjdj1iX;!}|z}_`c#uw3YQDHqMKV<+6 zXkIU4Hu87x7|8!p1`Qf9Xqv%o-eq`rM(g4_rT*NFuF4oKmn@bF-U^f5M9 z$Kg$2!3xDh#X2|`wO>Ch?fx2C=I1w!tQ8pSOfxrXS0YG+V;cnx7DLlyxs~7yvzzG+ zEd}*=^I?p$3|hud=hrSf6CvX-`!Uj1K2ZWQpVyVU z$06YS3=JTWKNai-q5&k1b|&)SG-hgs7k@L*e+>!#zpxG1pO!BeNc4@aofY2a1R~ND z__h%%mBFzmx){*mYT z=sBFW>rtG@JC>zaGCfD-kgs5qm#Ah?4{Q-$SPL>$DKiGId<6sI01m&BwrP3$jz2<< z5rJ7m%TcP`2Faq~hC@T^hR`Ir5u+Yf_XU?}PST6q@$aXH1e&LExKBEfN-E5*#8qYl zm&BxbLl_v&SDHQ?WNN1^OF<{r>vDpBj=BmU29q!%ZC%RMZIXu)-f-|a@#pneGiMt| z`{m%^D>2cn`K0S_4^12#P%G;pz~GIMEgSRCx4p`CrhdGWx3PiW4&#q=2n!7RAaVa9 z_pAktOzRa(MFmMiBdNQpy`}vN`}LUUx}R-)#{5$o{bk=Y6w^PVXz;^s&z)Vfi^8?) zPo#ad^vzb*;Is$%ovv+FF*vwt8&bGiJ52@MMy z)dsT{6j8Hw8xy#*A6MI1b$z9V@f+@aOlcXJxd1*BDDDYRqM{31p#FUvg}Ugc7^pcGW`NWaq3KHF z?#LgiqF!XC3@3K?`uBXbOQATRuNjh@IwAe(dgMHkZmf-fINWIH>5%N7di>i{WAFU& zHtUu@1b7Djp+}lYao}^+Bec19zl5gvthdq6mMF7Gpgdx~HK3bM0@KIgj(!>&&3DrN@H7Q0%eFgbDj<$9 zv{c2-nHv11?R>ZJ%O2KQyblO8z+mcn1mI5v+JB_Ey~X$y`t_xJx)BF$WWx+1XT5AVMl|D>z?e|G4%cmL+l7%$Y{4YDF8 z4at(H`QuJyecE%Qq9-jP;n;N0x`aIIIFWcdoi&z-(i9h38JCYU_Rc=;oBF~PsO}tr z-HB2DtKr%Ia58mT;`vO?^9QevE;W9gOg~b+t5PVr7>G-~UxlEN^Ti)jqK;7Cp6^@a zbDG?I^4+O~uQNmG8DsgI4+Ps;sJOXfWr%QKHVhY{mYak>UCvgnpjA8_cUHdu0yFbS zXE|uAi)OgpiBaIFs0e>ao+o=wCN=iUzCuiG%8Sr8w<3K`u@MBxy*(<<%3PZ9j-{I8 zq{VnU=f6h?1C zBbEYfBd$@wDU>p6zYJGjMIk8WS+&CxECFbmb;`RRI}62#B@EIBl=j5CwD)oZe?rvx z5%4uLOftD5CiLMWC}@02G?U&80s?8|nDLlyvbj74TT}A}KHklHp4;va>opfcinrV- z+bo&abMi5B>rGs+$dHhY*?B%f}h z6WhGFT#gPq$)v#BbEG4uet4Xygu%;92~=<#>VJ?ZqFPyZjGQ!Tk_wUVYi{Durg;<9 zG_v|4n=Z@mbP$6WqnTa1eI|eHI8>NHu$8Y9@@+*qE*2GaW&u@G6Qe@VDiKI;y0#)K zE)6v1HHuj97!XO*bt{ubB)#%~9-2PtZ()%UlkEbzdC#$z#}e(f%c!5@kxH$OcY6V3 zZImLoM&nie)>k>M{*U&)JgUho+t=!LR#ZTd*@BP&LZAqQ8Ehd8Nl1`@Pzi&AObL@r zfgnhgB7+Q?0D*)_h5!Kr66Q&(m?J?TOag*}%pd|XDGo1IzwXyvtM2XF{rbLj*IUJ3 zeCIpE&i>9h`<#8w{{3QlF=~IbraLf?*tm@$$2d5oRd#U?s^V5}<+c?n<>5QgNE&a1>emOj|sh>3>q_ zs*+CQ#Bq7$0_TG6R_ZBYt+2?tx%-d@A@BZ5ek$YCeID<&69p?Y1};BUM?0T(MlJ4s ztmMpVi|+C{uiI=)>FYr=SWr*At~xvTDRujqZCaYxtoyP@HM~f3B(lAJ_nzMn`ADNJpaDGv8~T zA-|9puEfZ8TMLTVpRP&Oq+n2$LFxh@2jWS$-5%ApjEIKO?-Tx$#8DFK03^ zXYs4XA~1>BZ6!ZRvz2{KQ#Y)UpvXJk;X6preEnmgUp0&R*k%y8RJ ziprr6D~-6-wZ4Y!HlGSCR1b6;-F*5!R-nWy?3z08y}4^*+k$b?nG;~QK1=VeFZ=u~ z1yu|~qSq2YtuDGn=XLGB>WLYpm7H*TmWfJeO8%xm}`|ZLaw+g4&R$=^7#<$tcAB?YpHVGt81n}om>;^_{^9e*AIf9SX0t-X|WEW zG@~P}an^2XHRDDRKA?gMDFtP2eK|4y1YyQFBnMR1 zAX2Yln(&$g$J=}7ml~54^^6Vni;H#cbOfAtz0_u^gc`jBi;h2Z_8Z?ojIY25FjGS} zYPF+a#wv9=%A_wWR(YYKSAW!IsN_iqStmZ#!b*=%MMh1QATyOIz zJ^Kk9nTxmlAA{S|vucxSB*PUioUoc;B&RdX6G}BuxI{$-{1_7rK`Epx!4)nlH@Y$R zpR@UU8}=(V&WV75KUU~=m^?fdx5+NV>$LBGO_#<9nIi_{EX-xCWaKgj(*7WRcX~KI z?sKCkU2_uTeD=|iY@FjqdU@E+x;pS3ggVK8%->H#m$ir|@~WRQ`D8 zGI6o+sgCG33`8=h?88%9JsP}|2h)!CAWSFnDV;$Yx8W>Pf_^I1qfaZ_phEcd$3oE| zZjeRmiNF3B;a`+d_W$^I|FFoulE3EO4fXh1ULEL2s3S@JV6nk_J2P}sT5Mrypp*M= zsZ_e?oqpvnLdDbh?cbF9rB>uegBa(jI^VXt%WTQ}O9kCDAgm~x1cO5#^32g;r&7p3 zIT+00;Q5j_1E@3?jlUm)|M62_>+udZ!PmLq?|5*5np<)VMYt;r=D7c&dIXy+GI~_| zIpCmiy}rpwfnl?@qyC+#zJr>A$}b|VbSoni{M_h?M{7t{P}oAiHS^- zzl*SH6Ko8_fF*UG8ek}E!cc5VkM2Dvt+-|Grcldps=vY;g$HQH?R2-vlOWkqYeoEShwQgkr=?bIkb~L(q4Ji7ITo@HK`Y_ZY?pI=cHcTHr7) z8DG}>OAvz5UEHsAVc^c zR4MOoNXJt)4gK(m{y4DzN8Q1Z+LH&{+`Z6UKJyMCctMN+L*_)4V@1(kk4ceoRjK~K zyj_7Ey)GUX`{dXY$GlI8d1#UN%VC^Scv%V20%lTr*RS6|f>p~xu^=wj?D?#dNR&l- zYUb-0dYh^NxE3^9>o35FV$?d%7OAT{h2LmX#zXCFtWkNJb1y#{Bz>QA?W*T<(e%3d zQceN-xQY7dunP4IAL!=lwqGh(UQxSjL-QLDV5C;-Y#`GD)3@Ej`iYxikCzuPBa1NP zdTSR36SmIk8>lqoCEY`69eP<9=@EpIW~sc3OEVj?A8MLkj2rzZ8NpJNY4_tXPRXHBCKC~yh(ZE`H9R9@a!Y92SS)~=k}jDe0Zwv2NAleyFp*}6-u8RfAW6!%f2uBSdpI?ynDH`Km6+h z=07X>Yt(=i`Q*ZRmnKI)Vzr)itd&6Bx-2(MwCA{)rjtbqq!7clTOrfyLMqkP0+1s% zLrX(GZwGp}Z(ZNCIIgcy0}{d0O75N?hdO0eUY-NLS@^7^^if{gcumgsQVV6q_RL`p zr+fqu)B{R?3Uil+#m*P)6&<@6a!*~#|2n|6U9GWj{6Y+JrtjuZ37t^bgj?*f^+~ag z)2aCoQc_I!dTYH%T#1plot#EO1p}qSiSHt+RXJJXBW6< z&r1R3@-L>}mGv0nM_eV%S2H3Bo@FeR68!kRQch@L@uqISR$|4dW{z)nJ1w@<`KL+)iRm+wWJ7-(%>^qc@7651Yyr23;DU)x|HDC_M`EDOfS zgnvh07?*oL?{#MZz%1X-+kRZ{=;KkI2e?o%LASEa8l}u{{djP2k&TePl5Z{}6 z?#MII3o$M09q)_&T0-D5-|@Wmdx77z^n2I%I)Z*555LbEzfYC_{q})b9n5>>6H-be zj%_YX4xG``uk1y?k-mTq5B7L_BE?#5K;7`%)81rwXTH$r^~Kg&JHwY@C3RR|&G$e2 zrqTWNVf$^ryK6mvj3sO=ov|;Y`p7y&KZl-eLSh2Ni%yg@$YM(x@QbM)C0FE~>;}R= zXk|k=6=9XHo;^;g3e9GQXOXU;-Yraq26#I?+!gJkP>4$&K_6-yTv=exkJaIYOfM1S)Q*wBx=bbM~GA3;o@YNy?kK zM=~V2+z*H2zenGT8_GGruPVll4%e-m8c3g6nsu6$NZyvRhp0IsEx+wi@(H}gfVuHZ zO)G{q!r@=`Dc5@yFB_k;d5mr~=_Y8x)VmvP+y^Imu3aRy&HRxt= ze%lsuX8Gv{zZ}zdt;sH19zXG0yC*!Pnq025`1lven;9olu6^fOx^slkDnUHsnD$sMeucek)QQ1sWG6orJ*Sh{}V|wGqc`bvHbHFLbIHN z{;8ZsbNPaouH=q*`ncdUIWtSs`Y~~!i2eB&OJ(jB)5Dw_yzVvty&=zkv!DHwiNA_N zkbEWvx+iokP6-_#?8yzP--Gc8ujh0}O zOSEi@N36!h#HQ!)7hbRD?v&#p?lC*Wp~}%*dnh3ol^^}EJ8>eVqTVv0^r5;Lgl%-C z?UHoni(-Ya4jJzmGiL@Aq@;xJdYe4As9&vB>36Y#+S4NIfYW-4K1qZoOlMBZ*usdM zMHN%ZxNl1mE-O{Q%LfQek>lMkABSysy&f-uwkLv=irVyAypsM5A=MKP+8@Q>ZfbiY zePW2d;v(=sbgH-wj8w4UVC;0E6+C$%Ci5o3!}R{3&PhofH-Y+-HRBK2^&P_tX;R2H z6pZg20f%v{ARqWy^vk~E^`RZoKJU+Gfs7x$Zn`v^sU`Q_cv90-d13p!OuVu-60S#6 zJPO}#b3H4LuZRD|>QO3zR-EBWNI0v_J!J{)j!UM$ z4iArvb~Vb-e@PZQGj1@a(G@V&y|v|e4W=Ui1@=s}XpZ)czL5kNsauI1Xp{G!!3L}~ z;Pr^$Hxs4&;F^;ispmYfDkPwVzC}a#T}^Q-AFK9icM}TbLEVyjp+=ow2W8ADX+z*d z6&rw{`XeeA5rw#S!!m9tNF z&aUzgW%{OTMUJ~q!#vaPw!j4-w`36*$NexvY>B&{YKd%bR`b)xol>Y4iGo8%Pw!Tb zHz)_zhupX)_Gy;h{IWLT*-l3H_%^F%dgDz{rj%=@PmJ@6GZGt;iVfp#otW08*nwUl zRH1Zwilpt8K%9og>o{C>zN~>~k3T9-=Td%dQCp1_fLj$J083UJtUQ5l^Y1FkwI~b# z)StsRzLDZFyxG`?u^CRtc&+tS>A0h3Qrdds{y^+|YP?k=0E}X@RCK-@k?0lJ;l@VFv0w@l#7vSYl$a12D|mDIHPf`$qc~xge4x#+cdZxt zu4WS59r|KN>e&@-KXJ`QX}?jw4Ai}H{HO@OVkiBdzq57Eqz9X?B`aUDAAIs?6>} zaB=@I+=?-u63wOL132e7{*Td`t&diZCcZy$dcueOn(4d+!_UWo22NTaPAI9?v&6;y z+gP}MvUHVu-Mb@KIL)PGU6)fa*vjf#6wid@${*ci0j6Oo`GY=>lI=cXXH5Fep33QS zC>Uf`Q7+3;yF($1P92wT_S${SxIDYZ4Jq`Cxv+F^Pn#R&&*wfPUWE&)=Ztbi5@7JDo9nXh1IuVM5G!txc+w|5_&kDJ)xhiCj*Y`3 z;&bHNmU^QaydHh%D^3jIM4hp@a7e5((U2KHo!RWURRk>TFmijY`N07(Cf9v`%)zN$ zfF8i9^f4$72uDBMg_pH18{Oi**I98{qEZDRbHvD!;^7Nl9lcRjHk!jTo1 zg}{wwbRTYq-Mb}3aOY9{)iT%ajXY9*oU3YFV zR(V|M7bY)w{)i5vmU9q}b|tYuGrPaE=)9FHn313{taaPvnFcHI_W7cx^)c9I_a{dn z;UsXE0l6JN7i@6#T|-hJb5+>Y)LxIX&bN8+^44WzE+{;6WGeP_U86)>+sR7f=gVA` zAkgcIGut>{FTvC^rzWg@Gl?7a9Yu%lW5vWu^@_jhmHyGNN(C{HY?l5=$ssJ>9=n(G zVaZ}_5bi~PX;UnrVdfM2G9Ql1Lf2d_?v;n;%TY;&d?PP6!WXqcU<4#6eH;4Gvu*Et zDxu+K2kg0GfK9bs*`vf62$hbo5_F}2?%%s=O3Kc+PM+TSvu>p1vTfGH*m+*3E=G`u z4=aF0l2&^*xksT2y_1LgD|Fd>yNu~tQvL+fJ2zq1YY^|NM|G-iT9p82JAMj3)c-K? zrk}glx_`HB#tlC3CkQ`l{f#&hAN%d2Cu7d{KFOT3rG`Qc zeBCHMOzs*=`p!>+i2T02W>UXi67T9G9cylMrY21qR(QkoQf4}dtz0b+q!o`PIDK7J ztbORC+e%UzwS-Ys?PTRWrKCDyf{J6fYo?u$&r0GYE5Xhxt!1Bj8DH(OP#O4OGukr# z>yqtjw|UM!C$~Fx+%rA-T;7cpGon)R%do@|YD@~DXa9;B|GW{7Ba$WX1X*;YRqjE% zKkM}7Ih>SolQGA&#t&z!6dR-J(OF~9$r82}mVutBdsdO{xy7)nT1`8Ghk6tz$`^cX zFXsq!H^LL&p5AzPa>{d4O^ti{dv%pEqcTa_{_LmwcXaSGNF!7_Kmk=H6m$YMgq z{LW2SOTH2_e8(sC*&zaL$oiUgvRd@#40l!F*q`oh6#C9O71?;kfn)=I%-EmR#dGVF z4IDYbSr6m)(66JAUV@S|nHstL)Y}~L%B=Y^BT6wi{{Boxx9GM6WKy<_)Mzs?N>R&zFHfd-^#Rl373f=9K$SCjNRi^Y6Pl{M&;3+Ts0gieHLOz7_qd>ssSC_YN+_LiwZ2>=z~^vl_B<#@yA*#2qvMN#(nU$l3G z!*uk{O2_Ucp99{!9za0-{_wjFe(wkWGsi-G|E7-Ic|e>!Qyq=^HVd;m<7taKUgt6H zW!c%O0uURkJY!19$}SYK_gf8wZ@-^i3H4t*s{t&qz@7&(mBFwvxEBOY1A=g|y)l1) z9Ph(9rNET}-Mb0FVVFvUP`<%=S^bUf3uDLEu&@0K>c+D1cUUPNthRz4AlaQn6LI_o zdJ*sCQ?1K3Ldkjb5ipk=wD*8wrz#b;wo|3%MX_X7s^U?|LXSLoMh-PS(;6@Z21{hX z=)9D=8l(Z-XoHtORg_em<;Uif0BDLE}aK_Y2L#&`7VEda=KHwEMYP1FkAf3047-Ybbce$xw_WiJ^ zEccYs7Bgc=J)Im0b!9B^s#UFu*@#fLR)A<8NQOy8qYyMJVN=VxF){zJN_6z*A}_NN zuvPWBekK?!N_de;&c|NZv&pc^@-!#qAb7O`D_JU14 zsMiWi^0*e0IMW~g`LFj6O6(swHSUR2yjPgXa07*kc_QHi-U9k?j#zn={-T*bxUKx^~grBhv+W=w5{ zS8KC;6y=J0+|iYnvHeUadLSxb}&8Z1D0HYbo*dhNb%y`I2hM9PfrOC z?AqN7xkF1IeJ>IgTj8i-ZUv04Irw2*-Kp0~-<#}?8!7l;`DLHVOs~O#T+uxGeC?^t z2idqIpoAW|v;Ykn!N95AanfMD>2o4)+!lDTCK%kAO!GSyJ55alA&gM&cv(#4E2p)N zh6z3TP=#-5+V`-kr?x*^H0_AQTL~YPqq&u<=A7fJXiAFv zRB|T+_+Su*6}#blO=9#7)Fne2BscI*r1uWs&omG{>TJ*tXL zPaRs&D98bt8<)aw0F3FO*)Vq%DLdNd16H2VmLouAjr4WOoWC%5C$UFGZm5{sm52*a zZZ6-A6U`v@R?#sl%yh@w-M|!gkv%J{u@8BB+2=gBTSM@y;9WKMp3CTw_#&T$t-fj? z^QldNkI*d*7E1XOolnC$w)V=IHLkv5(R`|$K=U=Wxs9#az}isou9U&39Jp)c6`=)n zQ)4~=M5UT($DU~a9#A2QXDx+hC*y$yY%BQ-*QnSzps;Qu%W6?QtVW-bLKRmiQ&Z0W zj)l}{WQA#D=i8m$QyHm$A(jA-zd;m6jin;RAolm36hWIGVO>qxwvNmNqmiG6T9dE> zUhX3m$yLgRQ`*s2f@qO0uQwzhfW9c{lo=K*d1$X&20F)TrWb}_SE`mV4o*uJ&119& zFRt_O>hN;QC*+)O&)g*PtZ4G=70(5f zy?qd?j^`$exO+Z5cthR0`oq(>^XM#6NGS1V?a6NO+Pe%{M9)cjrUE~<7o$P#j&^lN z*di9E$oGe9yM`)>KPop+&!`;$*qd8Nl-+D_HT9Im7H`h)!Bzg?^|q$1Z|gKy))-Wj zvJyb6Z%Q^zhMv6v%=zQnHOSk8Y@d%RZeRAL*yWk%QKC4dSBth009gRq7Y~8YHEpOY zel)hSnQ5>vS;-9Ao9Vf20n+ekOsEAOh4M`VLZ5mEY?f`l^JGmjU!-r?zS}rx-2tDL ze8JwgA$G>ob61zm?b@Pi2l1(ZzF~G`aVT2N=yO)h0(ZLP>J=?>P2pUMw-|Z0t#T-> zN#%(vr_`myb*0kcw$=_L>p?#yD8#zdDm!w=WSAfSpNPvf$5;Xd3pM~<-6{vMaJ$lk(nmkSVsgzj=;uu_z z$Q)f%ky>eQ&Dp(GJ~ucB>ZzgnQmF4#8c=l0Y7plc$klDaFJ^ad+e^9q5*?|cFloCs zU`|3UfW;j&Tw%@F`Q$r$GC2gS&L!uv2^hk5#rjAZy$`N3f#9X!?aVyga*j8)>ddRI zc`0AneUPW@Aray8nBm>60WgAlklo$!(9OthKKBbrV4mtdB%*sxK4m%MG$b+a9y%W~ zoHAq5Iv)8cDADe6Z1hekWe^iSBk#jFA)%B1ybk6Hm&KOrr@lcpc0P%1YkD|Pv1pr% zel%dYBrn8Jd_ggnH40WjRBz6{uuWDGn@y(=Ci!>i`<0Cua3Z;!z?CqSpn zZ2$BRjMU%0mN;s>h_?W?3m?@V>{r;Ntxe+>R*#SAB4cE>G^nSi6Qi>6o`YfLyX$hB zAx8Z?N4CSLx}%nyHp88vsGzQn2$pt-1Jt{2(PeeTX*8G3G^gNBi_JHoihPWuf`kN$ z$t2o@eBpnqmISOTHrL#6Kbe*XEYA4OA#HeW2(5&FIKjQA zOw9*CMH~o`*9a4ne{b2=X?Vn%ayCv8SqADEeReN&s&uyZeXFzf?l8#~`8<}$1b2$1qc0OwgV z%9%Z+Yyx1Yvymq(p?t;5YZy|1uqd)+&~1HX4)SRTX!DfNIg`Dp1npRMk9AOGn=tns zSdqhEXDg|r`??16Fe!wgpV-_E=&AbIeT7J5Nd!bveh{n3!&Qr2e?{mue6>i?6>Ey6 zfm6XgUH-?ezw?LVVh1C(#Lh|Ir+?d2tvF&6rNLmLw6debXq3Qd(%C>Y??fgI4E7e5 zX{#VpyQq0+GafFmJITd0DYdEDVv&h^VNry6P4mKnVTA4<-AU_R5YySFCJPSU>niO8 zFd?A^RxK1@NEzTWiXSKQ(#YyS2J4oqHWdOH6&i$heL$i~{#=L|oaCi7Y26sC&A335 zem>~_u=~MQ&{`K*>Il(~lMFzweV81`<kFa?sdx7%WIwUDb)Ea#85q{ny0+E~T1j zk`oE|?yjt^h`W;?ggE|e;znn~l0k&n4dr(W$1A+frj=Px*A+7FPjg&hY|J2uVhI6o z_oAIoUnKdtjCnzDDMgoMI-s8NDGV|JEI%PS)YeWtpHZdaT1{gGNMZ()eGt%MZeN6= zdhY{2pdyLX#Muen6G&rUSp8IFY1SlmwTb<*a1nW9piyI%AwERLPiMv(&RwKxfoGWk z(m2#He}qwruOcWP0?k1rG)_^)>XzS{TY+~@Z*;MNVAK5WW?B@?>>}g^QS+z(FY$6dKs8{j4Of7IvYp_ ze#i=9a|mEX4f(h=L?t(V(!f+ii1hQPZhw{IIqWx75|xF;L&cHzNOFj=Gf{l=|dddq#U;PR22{DN{%%E$&GFu&BXz&MDh96k2S}p~y zE^FnQ2Ut|@+PE-hY(Cz^dA>Rxy!v^zcr$2zC9u1|L)mGWbQXk60?wb~@40Z2m<0Zw z%Z*H%=LuSzC68j9)UA72t(YJ&rl~s~Fq9^|z?DtEwJ}`eh&jchGBhT`PPx0od*fyt zx$SJtGS}LaJM}W{tjeBhMS?nfhvy!yyZ^3?pQ=k`CziL(I{Cj9y%#0!1VHn25poYgX&glTDI8 zwf&KQR0se(d;Vk-=_yYL``KSVP!N%xs(Fs^r1I=JHUbVVA|ACeKD(%j;rHkY8r9+D z7aR_LKaM^iIkwW$0sRR$D@TqWX8`C3Pu^f7U;{(|nJu60?7#eve6Pze@Z-g}O&%I? z+BssLcMlTC9xdY4DjW$6vncnmX>##IH=&_S49CA z`a>9#Wq6ds*VcTCnKzunRPZEKq8idg0}%`F46OGbvb zS;Se5i?wDk^8Hr>tCjUY#--#HuG(Aqoab@_WnzQ-TCT2Hj{x!sX+{+7QCaoq3RrUm zx+77|csRH11@-eKdqzsOI;MCz@L{A{w*v9mLRx2eI< zP?2titc?(X%D2Le@DZShmOD44_D}Erl`wlL+wn4+4+P7dRtCLa@i*^H%3#};D@i#N zAReoKHAmmAc~e=-oN9uz3$_~&d?;CqS5D3ZD;RL}CQB=4>@ycfy} zSwj2Luzqb9uzaI%st7JK59P3T{c3xqXZlb*1{21-dGe(fcMzRtEbBR{HF`~gO}Z+l6?Kvh z*mBnxDG-g*Q&wwLnY)mLlv8*p}26bx#y)qb_EB6Dl=E12cW{2N}bU7YqAXGLg zXaeU)uA}MWQ10!~q>KSMu03|%@7ULt+9fl#^44)9TA9;^Wtn*_1L{3hu@JFesV>gp zSU0s>FhwLGhZL^-7=~1+4l+i|Ink);Tt}zPOGe`g@N%Zg>Vx`$NeM zvvNR`E_lFVZC+~%Pf@ov*r>a5VwUo?j)+@%N}B(rf-(zL3prLj9AW?=&tQog!li&7 zS%$T60Ws^mggA{=)kWfs41}veUQ6pFau(bc3(K722E$=ez@gJF!WLXy28=rjbV25; zi(@YoJHOg-FB=%d+E_(!qfIDKY8Xs;od~*r+s&(uEusIpak{94Yk2)u5Ynf$*AA}R z_Z^j>mndDN8XcWo^}!Mn_1#VIOL;q9Wi+1rI{WL8RWEE=HQuT$Ldq_B6n z%uB+rxcd7H;{urzUPY?AH+OUw+S{S1U_CBnPnfro1`<8Ks$L=dsBoW52e}eoP5H9P zjejPL7aUK__bgAb*qg%7aK47N-t3Zm}Z!j)u^@|yLzNv z$r|IU}0%*06Xw+;&Rqwf-1z zjGWx2MW+YdXmIbt;a&XE+fsIhu)I6gE+ITcG9y)jRkJ|-&9CqOR}qD|FxQeRXe8Rg zSw>!uz6KUoC?SdVaf#?>v-C`^U)v`{P#6W~4z zFq|&8nOz3i;*!fpr3dM>^=UQ8dWH;iYl_ug7qYNP=?q{geoN-C7S=ibT;^vq&{2O9 zQ>g0a-rUo6+QXkD&S<$Q6)cR#Vo5K~atpHl9&-6wWs&$k5c z4uwhWsyza*^ms>ascWp~xV_E`EQ!DcMGJV2bwEK=6wW|@+n-7q$SSJ>2nWb*)h63U&b}=c?ot~W znGvqgkIC;(u+CfWFPqlo0)g}$=+$<5u)DFoiR}Kef-5_yBW0u2`SSWB;BBJwBOv~` zve|4UBU(gr^p5RxXlp@HdjCX2$eL76a+bsH=R!UAd6qA~Q<{)2FpmF2kuPWvcI9nw zDk(8tF9TEEKSw{CXG#8%;{{SX_6`*g=owhXcAz}diVQ0uK9rxYpS75P>`BD#@G;bm zYmm2vTNHGIbKMd=*M?q8-sw7}u|Xz3pXub=L1{+iH;hXB8SL;SK|Y)x;>k;=ueK@G z$y`0U(r!*k@tE1R40s@E1_wT@B(W!b*ClpzXIz)4wgme**%%oG9C7{O9Fla`)VBNv z6v%F-XXdjTOjV!}8HzfU5OMuf3#%a zCv)@XzbtyNtSj*{qHDBLhW-)Wm9Gv_1m7(rA%Ai zCsx}y=;!D8m*x#~I?T=(@|E}B^B67-ESb)dQn0_tX1P*Z_w(a*o=l#Ek1aXoQptGL z3WB=^tn;kHVaM$kth2~#8JB{$pEsi}T5E%lO{aozjU1{QNr9VWQYCr`rP#%9$< z^bGD{(Ev6IUO^*mZ^Z4}UnXo$M=K>M@6qdoQ->@|+LrUapzhgPhjk%oKu?f%) zNeyFqd{Jhb(X~bP>w)sYdZVMNtJ?;{<0dwzTZ8!4sGZ%yJ9 zT**A`H=G>ZB`JvXCqqXnlq_=^RmSwUWossh!CCPNk~9Ee7l`CGW$?tue)oj|SM^v&!;F&ozXq9)e(VRP?f_n8*VF+oDJ7H6?c z@r)pG3lhBu2v7HOBn0~i<8>{_0{{$-H-PM+~OLxzjMioWoII=zE9mymZ*k(X-D`yOrY1B}^(r==%9g z&Ip%R)+HErx9~nU>P`l&u4i_FfEf}`z<304F>4>ImDhB&>;)S`s}$K^I2*Cxp${Gh zgf}IJYc6#uDW>t)xfaHkw!O)(#_!p?8>6kMT{z?-U1~u}0IzsEjTg11=R#?Uj%7De z>>V{VssCC*|K|gu_~3ebp-wG2so_l>vz{TzYkyiKw?4fj$z$U)P`&F{^qw(UoX9k} zlHn%ih>Z{SOs-kgj(I~bSd+fvGwyDK^u%9$IJh3f8+co2^1{ySsMtZl)Ul>E@}U>_ z7Fy~$u{zRy!@Qt9p&mUYO}KB*+)#Sb^MZ~{Zdc#8He%|1I+CBWkL6&dW^T$wBpHRK zNxA4>rzx13_Qak~ z%8AwAFNXsWphN3g_jDOUx=ru`!%di7-P`~iIffFPnsi-><({zf_GystFjGiPXE5kn z2mF21{1f;yjKb^^|6WEg@w$@IJ!OaCIF5yJ~-nC9>#jYS_g9qr?x;D92 z8-2*tdWh>I!P8`GRljs%c+I?4eI*3N`cv@osbIMW`-N(+LGq`|q~1!))txlkX!OMK-kl0-C9xR1B~2*IX8b zIsz7;!qDWY@P_55QlTfjx)i+#kAPcf6g0UmXg9Do`-HNmef>5NnS$+sHGh|RM*{|1 z9x|phY>M!JPK^zCS*)DY6{@q9PiEpI(^5dkU44$Pv(>>R924U!5HJ9&N-GJQ1` zi904f{&glOsoxDUUo7M<3eaahIhYX$WN+$h442QmiRz>fG>B5c=-ae@mN;1R?4{BC z7;X>xa7LJ2diVn*Aab#JfD8X%nafIb*!tXR))v-JhmOxYEC4v_-Pr`R=kvL>JBV^| zPg!@Wn@TjltrpN!5yMbW;0$c!T`6!h?@3nRg$Eq%+Py^0obgF7Xi}e|t{+X?2%(P7 z3)itjv?T6h><<1I-hxPuvTF{G`w^7K#6V>s$xO(g8J(mihVhJGoBUpl%K-mT{t!Pk))Y$a-}SKL?X zbg7wMo0n9_9MVQxhLm(jAi$X`k{ZwEqcHmwB5EbRX@q}Ei_H@-IdiH0t)cznM^JJZ z=O%4hC7)q_Z0a&|{7&Ytl%oVpVgk|esdSkdr%wkM4lpGRM+`iT{kajefNpdLNd}|m zBx|FJEQL2sDY0xIP6VhP0y37)`Z3_reDgJ6y zu&iiD1*E)-N>8|Xn~uZnEt3=hbKhMazxh$}bJqNM@y;6rJv>Hb!RPWSRSu9^pT(6O zm160jBUfE{nQ-wtRczd8kL8In)-ljhcCE$$JG$E^%6XY;~@EoQTwtQyW&lOoAoo8s2aCyAJQ9lH7mV9TDcVV%>-jm??9fZ`N| zQ9*F{j8S+1;`_AXh>DJU+|HjII=zWY3-)}IQ_)FU;IIdkS#HP!&r*ewq-p?hns^S* zp(GO&8bs@4I2VFwA4HU)3_Q|!laj}PK@8M?x?9ukT(*zFvpdS_68dt^q)u|%9oXVz z9s#4*D(jIQ&FYLy`)hHyMLYlLS= zoq$>JP7^k)e-b!OTy`g-s=3PR?nO`Jya27r3ynGsUs2H0SmlNdTn1NB*XQSEqFR_6 zSAJ}#JMPAn=Dt~p2hm053fVOJh+mue=9#v;7A0tCog_?b|4g^zQn!FQKvU!gs^6{9 z&^UJ19YM(WH}r#wqPL+;d4Z+a>=UYU7MADl4*)!}d4)9jZGp?-U-j9H! z#tp+qK%r4`mZMU;2Dx%~#P)E)%5vAeV|r1Hh2>kz4XZEc`1ts7Uk)+B7H`edLw`kS zP`opm7ziw!W)pg{kO+&Xya{K)>yl|wl@Rh~k!0|inRgo7(c@;7y=4g-md3=D}^(MTK&@h8~HZxBoCMH`#2H$0p zWoU}M70Vr%^^LYou`c3)CxJ7$j$^x6GCA1)^N?d29s@uPsjovHSH49o4)DZU8VkR@6 zHz$fp-B@jexSJ|I&*6T~VFgA?iKc&S^_j=D;}M{$UpzL-InJ9L!xQ=lK+PJ)Rnpvb ztDAB`*p-!dMXE8&yL^3)31W1$#tIvXIB(G@)5phE;7)2hz4aZIH7vfeQ*9ND^n;{k##wxzW+9X8vi@TAb~R z9|kZNwLryVjj=OF zEvjxRD$s}g_CDHKVF=KwxtocQ4+44Wq_N6VP-6K7O#gkR0bQ(>xu<$q(X0?q%PUt^ zV((XX$x;!{C)(KokP7)T^bg!6Fty)%ukSrkfO#zOQ4+vM0EWP9?#XO$i`u;eXLk3X z9{-2t1Inz79}Dwr@pD2q`8y1;?$^B|_?Pzgc=wnW+uk+HhvOp3e{>bUl{E%$WJU_F(yj>4toNtZy|(@Gw$3-qH`vR$S;zizC!-))d3BRfT64br zO!e%atrZ`MqU8IZ#{N&w{?9P@j~5tExY_oPSbEEb6?<0(+~NXuZ`V*#SnbwM7vb(k zr-V43Z6sImoQ+jWyE~% zg49t-|9UMlZ}?*PcPWrvQJuO@xH%i=$fz0yE#AmzO}%`GxE9e%(Xpi)myjJ>miU$A z=2!KCro{R+YG`u%B?C89o`L6>NwgLc=Ul+3Ym=@!cPzqohWxLrO2pEaLdlkuSw64^ z&Slo620aYxJ+{l#Mal1sV46YV`J~10Cp`uwVjC{sK~=br;H{MdBrEwx!Diq(xeXuc zx1h8x0~YM%*7Rn;~O5n|^pmNPf$FfZS6-5qMePqe66?E+tV=IyVd(H;TNhUQld zz8qg{6Zj+3s{$qx)h6a-XSwX(RW;UaCJWiLwnhXIz*pO<+onQUD3Ckv1)i-pdAk1aDD$%tIM zy(B}?fVj`nT{Nak<%OQVW?_v3T9X3qRaN+&%;_%8pb^hOw@EDy?gk+! z4E*yR6E1xA5GoQgCszVDW(P81oq**+vdrF9HV}SpZLAW#=G~<`bWV4h4aqT$#lmOYR>qwJ}gg`zX2+mdR*Lw z8Ul!t16sB_w9}j7929f^Tec$CzJ6G{3!yZ@86Wt9Q~bIe&bVYt4)R4)8wQRIsCNq4 z3SC+@Mk+H?OP;e2t8)4DUq+G!0>5J#5t=Q^Brax79XY^Z!rG#a>uBH-wQfyK&PXCV zQVe3#zBi>ND~m+~tv_GW`l@gne$81>vqdy!c?9sp`7K!bx{w(i3?#i|{b9?uJh2y$ z>(m05atfQ2k{nk(NQM^Y#AUw9_u%pL>rKlMd^p4!pJn;><01go3DUFul2=&&QB6u# z?PGVT45r>HmSCuY9#G zR{AEJVNT|wvqjDM?bS~C*vpovhK-_FkNd=M(*t|e7i3;QE6Y!WfT)bYJBp-&#ZvU+ zd~npYZ<8v$(BbNV*&o$t;UWE(JfRo1lZ_1DQ$6nPReNxH9{~yX+tklLuO%^U-ud*8 zJ4T6AzF~>0n?1mpH^0!I#P>d_7Kb_A1o!)ogbPz3gO^nqk*uB5I8+xNgf}efr81^% z;Z`$^FKXWEy~tY_JLXH*uR6!>v7^Q|ic1M4^s88sk3D@-_57o1_j9&NK*%OHNY<%I zXP07SMN#Zo5}YoVqKOaaa|$DP3X|AQXIr)cM%%1T1XTuD*y4-~>A^0bNv{>wvpuZP zFTrBDy-C{@sUq5&(dnPN=ZnW3AAI{_tj{-`BG#wj7I>;MA4RSL#lSK-7C93G2<)M< z%(nF3;lNdYll-6m@UX(#$74uAMTgzSqhP}`jKeEVbDkKNw92Ob7t#;2`C2hy#9k$@ ztJ@^#I>l#`A233D_p}<pyE6|7KQ0=sFz_MtPow{){g$9#PZlBn&~^s9M~t?~ zjU;g(gls;<1O>76;cPZ*|5sW=%wH!D{O9DQk?`w5Yb6~%PVHA6#Z(B2>anJWpxflu z*Stss=wP&Rs1E(r+`Ic|q(Qx$>D@Ty6H)SoWzakUwj(c~OKT0~{FBV=0VuWV$}>U! z72 z-1-y0t1x8Wo!&&wN)AUT7*5^XcqYH;xd6`( z*=#tfjN|tetdG-0G1Vu1SZ6R{WKC%ybpBfx@2ub5Czw|5BVIml7%;5u)zyjUyCjMD z97x0ajx-V@Ga{{gf$%?!A*~vXwX@XjpDCYI*5uynT8f@v+ma%_V+YzcU{1G3A@}|3 zJi`iQl&Y)PV>#n>oY{$+AQ*bAT!i{S`72v;g@5)K#b+}+@cwxGtcR4n`$A=2mS=qz zp<9G(mS)WRMwmePCUN^)wRwwh0Xdd`yYQra7o)oX6$FB9aJOmb$#LNQj zAB}V{lC?4elBLM-PDNG89AJP$CQvdV1DWOg7CGNeyDL>S$hJmT_IX)OP(h)Rm;5Op zrOW2FwTSogn*Wczg@N9|>KSu*#;Y`2!>B`P@*c7)=Tw>bSz$aJ1>*{}_h&F23zIxo zYzxmLuT~R7xX5 z#)bN$;_maK2uFJPIF?u7)Yt*l&nN?S6UK$!-0{82wk7o+)w>Op-XppQj?a9sp)M=T zXcN?_w$n(_=bhdxI=ZuTU}`T-%Cg!SXs=l~@b>b6aeNeV6UL^_+3Xb8vJ47b-o&`{ z@l0nNYo81ZnK7@vV?9&9Vi?C?gFkrKJ@7Q^H-qX7lC6*?r|pJEY%Pt$YAP8LS=OoW z`dMdEm|5>xgcxl*iv>Nc?sYE~+bS+RpvOQ3p!Gz`XS>#|E7r2qzUO}l(top!{3ly; zL(Nx-vOol}DL0Njxf8=$W7;GKvdX*bACbN)aKLUcDr_KEww=oS51MSsCvy2wXgRFD6lNE7z@N6GiBXGrb= z%q&q0tes{Bjt5@EFwF#>`rjC$#L~7V>xJo`%!d#M2mAL}+N)s`b(*kYOos(76V;xVM#7ejdpQX>DwOM-tIr&Xl%`0%d?qReqS!F+fb(;j8yXGf{c0u+8|TFvC4dy# z&xqi6cXj0B)c;f)SPiy0JSZV#yk$W*ex*Y2y$i@$ddEcJ*8p#oSEM|g$gv*#{8`S6 zfBb4=Ty2r(nEYN*??J>QpnR4WC!$q}N*epXuggM5=?a{)fQj}sb^d8CKhkFVS0SKC z#6FOqN&9jKa^dCTt2<{icJ}cD-cdKA$MCCi%zQ_0pmBJ!-r~8-49!rIx@O9$H1yxz zqW;$mzDoh`glDwYcUayO&A*_oPnQ^{py<(542Z+(6MZAy5s6T%8zR4f6p>F)7n^aEYe`QS;pg&2|q^MreGom^$Viutf zl?@F{(a-n^(HmWFNV$LIbn)4+^w|1gY?_UW2EoTTKR=p-PbS;br+tW_(siNlo?~Qh zdQa5W$FB$ikrfbH+v<{nn#C(eTTt-NlXe3wjA@gfmYF$>OM>JXB}h#5!i70AZ(UB_ z?%mCNg_4yN53)anU3g@WC^Y>@tQ<5544){_*SmJ=S*0kQQnuAAieTE zDvX4sw!_w>4@2xo3)Xt#6Ep6vabY@5AIEf33UkBqK7=8dxlbqMMe`7yMkWj&6CM?n387|J{e z`HUerqAG8nh>QL^rJG7bs#sbtdOeN8`tS9crPx$X6V5*ZuD@}@L32F{{aT7;3<8;q zWVkzDyII<4_9uEB;pdY@@Lqv`mWHin@fZ#WklqSZpDDo z-<1}4Uvi9{N`G$C>b?asIra{V|M}0+|C``fX*@Xl4m`NnJ`ObK_ zSz8~-_K4e7)>U#`8C+OUl)Rzw)&?Wb|4ou;*05Ew%r-chH<>+Jt4|SAes9VQY_<~5 z8h_gxKVXA2l0Km^2lYQrcFm6`{z5`T6=oiWGM#eN$EC7E(_522@*$q}q~(E<8<;dC zGoRdYjD70Fc9b}Gs#VB~v?(Unn2)?@tY6&hsTj{%%SM%&{!Il>B~`uZR9!(C1Z8m% zJovHWJmhDi6YVX2N2YU~8=fmH?kYXE*l_-3(_o%@9!_*HaBf9ZC!Dqc8`G6JxdSol zou@k?Zv+?j8g23goQh4DR5+!!UjNwT&}!`6r|7V59$(nMOj*X4)7j3?w(`AH;A~Z9 z#udIp#-e3ci4xC{y8?}LE_@LFz>SqIp{k=U)P@4p&Q2UlWkmPy)bOhBmIU|e()Fg) zF9*VcRw~@8r^#c=_tZ3B>M#e8W4P#6XDftAWbyUqyu*nQog<1ot1y$Zw?#ENlt0Hi zd<5VLf#nFj7s{f25{lz3Lv3;G!q#6b#C~pXdZ#AZwDL;OD}Uh-?s>q+)82w@QsKr; zA$B27k*6L0Q_n{Jyy_A=zMwF7luHn(`tUql)XunoA%>-M${-+|K0GUb?X5}SVC-$J zwyC6=g1lD`VjHP5f&!w^(o;MJA}6sg<7#JRJnPLPfH(i{_jwYt?&dpRbI&L8&M8rZ z^H0P0`YDqsVD#as8(0Hapy+gcP^66;{1bfC9#L zCC5&8kxN+qqMetRf%Fz?Togr^-eAKu5oN`+hsVjHgD@(pEbtEA)N!If+I$?i6q!A@ zbKBkPf`uQyAR85XdvD^0NYDd@dL|joNsxoE1>cD>sn$H3GBHkD^^iMAn&lJSdczH~ zG=7^I81j_~Oth4?Qos#Z_-4ia%(0*cP3Drgoq#f&A9d@nQ4%j9xgkYJSr;`ZZ{CL5 z?HM>b$0;y}puJIvIhB9$1tbSAXJ)>pwX?{IDZl5=} zgWZ<){O^OZt!znUI49kcA;VHK^(fDBv7?L9l*ppP6Q1Ls06H^5LV2t*mwKzc+^lNm z-jEC_dlf^f43XSl616c}kflD$M%4xVk_tLbQ58PAD*x)ZkIZC02d#~DNUKsTDO?JR z|FO}20Ey7nqbF@X^oZ_CtwDQ{`_0*^X2_By7Js}}K%VoXxMyZ*T>e};!VsrI3xOGs z$K3DX@Rax_3AwsLQ_dNtW9!sem);Oh68dTNHP3mrBTF~hex@@+gQbLEzCH;OMJ{gfpZ5J)-udnmsh{7=X;8Aoa7#sBf1ZHaMYx+ z(LEy2rIUtO*H-vJPmC0P-M%&(i{qQCjhasM*vclg*?QwxMg~I02qk%&rYNHCDKu=i zL&0sUQ4|Y0VQAPxHkP0=dhRomZ7BtE&V40n8D`}kz6GLpo6oQBrf>ay1HOGG08J;5%?vdALnb90;=A*-!@{O4nJC`VgxH+o zam2)mQ8hNFt{;>7o&_xHx|y?fD|^?^SniLFotv*p$k*6@rUI$A+ zHmUnTFu^{%S|)(obw5ceB+tf-c~q}f4U|8aL#>p*kz!4tXm?P21RMp7o7A1$N>$-Z z*=o#utPE6dsF<>1wR_!#HtM+=47>B0o++wbMU- ztCcjYvq+bG29Y6c>u2R#jvf&NIc%{c;O8Y8!u=EOHDVc(iY$_vR}$nRmGu|4JYun0-THiBigAWk1@f9%@dLM+N=1^g7Ip z@5NUhTkI}zo6b6WN4dx-J8tWjIg*g94`Gr)N&aaWsp$`I94&oWio~n2E6m6(97r7_ zE0jRwXgy-=BlsSTzqE}Z>_CPX^c$HV+Ehr5V%d( zv)S%%u9tVd5`K?pP@R+{7y0|&uA4MG>+WQHlJ0PNU7I$TH{BQv0-Co@9|4s$tRs9( zhSm~_@8=8H{r9j>BpfmcsAx&sj$1Mp|W3a7O06}i2krKfx0-)(gc zx>1I*!9@JE>IYYk=`YNVzHJ2cv%~4il4)t{Th^W6`w>`l9O?)L{(6-fg=Dbr^8 zZ=|L@HFNnqT3ZJ!&IAYA-B-uUqE>e0h|}^49jv)Hix-f7-SrxCRLkRW#i)*HXxDd~ z1(wExj3W9t_L1G(2p?pOfwE8m8+$UB8V4vUy6HD?5UtTS(&u)Ci*)_{{oBSsZBJ4? zdh5$KI`3K?3YS$uWbBBQF1|oBBeu4ApHO3tOMW(nl;0v8TK&rt))NDo-JI$IBE(Ya zoa$UgzdHoBsfCsVr(734)h$)V1NqA_xL8ZAY(0InU2L->fSFoSysmdN{R21j5q);% z6@n_iE>QGQ*EfNk1Ir^$zJ@$s9|8JL{+ezVkR>)o&vc}VvW$U@X^F{FqI42b&8m~` zP>nelYG)+PcO?5Tlu^Ek0mX1%`E7oLT@jxP>zvCGe{(}KOUAUG6+q_sJ$z7KMdFOg zSH4<=Zn6#;t4IQqywwx3n#+WtYvM#Xs{5fUyzOrPQIesN9&SJ6#|+lrlvo?}MBb1i zPU+;6*48IRxC%|7+&hS8O_TVySBj{zrh-i4CP#$Ms(IGf)tKoR%S|(WNRkYcwnR4H z+`7t**ZN%j2S!&WiF77&t$1pp9-Kr+)emTT)o8D*J3PDpjhm3PNwNFwC~WBwKopX) znf;5ihrZ;7*L(d%l4~P)c{BMydE-km|92b3J#lT~z@)T+b6}K|pgUEjm&Ygn+{|=q z^lFFUQANydvXm+6v^=;7N=oXNdXd22R*bK8faHCZ{;~tq;=ilnnj@T*1u`{G)#koQ>*(pa&0#1XA9gs1t~+%?W7drz1I;hF^Z~wgODCN)HSZjBsqdH zI>MD?*4*2K*nXvdAQM4e@sEVZvcy)ka#oMeykXjwY_KFCd=nH>{s>rycxo~D2t5tc zPDHiToV`dB;8>uAl#&8nd7on^on0wYcEEGY8Ms;u8h5;JGp{qbc}b3yu2*rN8t26HO7XcN96Oz8Uc#MDXMdwzqbP zEc&({Web(1t4!LQ+ccU$shQg97I@35#+~P;=YMsl%CXIV3m4QrL*q562=>j<)G=dC z@X%f#3fef9;S0ppP%f7t*h5K|N9h_OgNQgYckH*OooJc!j%g0m$47ztx2zZj#Fst! zn67ihA-HJoXDEPxkf&%U-*9J#l8jPFDO_{kK&W1#>Xlk5vhYE)REU=G=VnINcI5dj zl9_mwUrq zbAd7i@A@HCE*JH5PR5&wW&6cjfY)*PwPdchexa((oz&r~}K^-?}@eNj9cN#+BiI$C0gu{dW3y}ML@!>Z%0vYRZ zE(M9EQ60PdFE9CE%pM+Z&{W%6DQZ`ES&L!I1Z3Lb!LOUz&0ki=d&>6giq+Y?A0B*x z`-`ngIH&)Zol9Dku=VqtSeyXP(6mU6oy>94~4PkBu9Pn=O(A3_9@UN{Fq zzAup>Jk)cuJCHaSZt0qBy&qdH$HhE*#i^_*cxFb0ub|-U&}ILXA2VA)xc0WP+miE= z03JEfFm|Fgn;vxZF1!iXK5&Eg9Ej@R!+hw!wzsI*)CebaqP{(JAL_`6RV1(oDc^Dj2%cc!A)ghr zs)JuxI>4kF*N~DprgE@s&yW}*D?>-K5R^t4j#YMaBmrx&tG7{iofgG6#f#;ZW_m-G zO|&*28#s_o!|(5k;N4VA^{a!|`#ejijRWqItyZI4@t^at%JmomL>ZurGQ|AXb{x@Z|dAA>6{H&X_t z_0^H#m__T4wYFXbT5<_>Q!T65FoeV|8i>|vVBvh=^a23#j39FHX}N}MeE~F+hth3) zNx;a84ZVpb(rnNAQ%>xnxzIHB%xh-w+`7G^) ztKol~`9jYR&Jsd2VndT0epgok6etIx5$Y4yWmZsh@7+0JNO937b65a!l8sxdzRQ*6 z*o`nT{Tg`UYEsxz8(u2!aY51Mn~$YcMmlZG-1m=T4iq(spX!1)*S<=ft_+y?&y3Rt zNJ;NmAG$D-z1t(eM?S&q4I|%+6~bb_FtZNk)sFeP=JX5-@=&L@?1He}x$$;}y>vcK z%n}A6qbp&|`B10V60hIYtN&s)%_Q$8W-VbE-Mz=z_(%at?c%R9aSs*d393hQU?>NABDN&z<=n=ELa?YM!SPggh9Z)<<5 z=g5Y}Nb0xn*zs?YG`LIMnVazaL)1LAK1Yf9=90@^u7MGvfRM&8|9Ai2 zD2$u^jgcvd{6{KJ<7p02S9L59wPJ(S{s`De;K+821;2DG`f5pU^g7F7`&AH^0C!U( zX5P@LT$0K`k%;hL^p0-d!n*>T{>o=qp8~>fT=?~ja0`C_yI5s^*l_Ee?}$)5{@ujbelD;2Y!~9`>cMk^SgRM&-o1|9oB>z&Kkl9qz^6n`28V7%|I&kq z1!Mmcza=daH6wFM4<{S>yY|3`^mzF#8fM|>j=U?^UAxXF4sGB%R-}8M?mDjCI7#fU zs^#MO{su*_Lrk%bZ)Jo{>P;NPu{C;H)7g=A>V1!0*Fihf^v-Om5~}i4IC#TEoKB{z zEFbm*y2;s=l?{Y*)>d-&8(Adul+n3Jg&GkGvlcK5nAT8@A^_(=%h%IUXG=Z&6Bx-& z+P9hK2-aqGvUY;b!?M`1%t-HoB9?S@Q$P-mt2du`#{@GL3k$hjDYiyc$%8BwcrCtM zHy?NeX)r((K+)Vr5l%~t-kCdlgWbB^u9eLWP=76}-0iO8czuG!6bJaH^M1bFrJ>nh zyn(&dGg-Z2=E+$>aRty_`Vc1L80UAIvZn%Qq>VeFz0)aAF9zrl@?jWE!`N8%&b8Fq zIRHum1;lc%bF2@R3v~6?`OqW#TN3=fc{r>+?CA*T8S>PK<8xKxtF7a4G=9JrU-SB@ zG|cY!6tD}oAN=S;fpW=?2paS=96GV4I+<0f6k2QqJ-up2(8aaAM?;naZ#d|Pjv*Xz zxcTP-d4xfAT_q-2Q_4gn=5G}#=a(nV>XE7n_FrYCTiUCTX46v-$l1FMd9MdvH6 z$88$T-`Kjah^x)b7jCWPN30Y)0)mV4cP&sBglm1nfk1ahii+Rfm1UnUlHW*wsvZAj zDwP%eeU)!px{$5}lJ{dXng-Wwlp=X4CW+ggoJh0>z*AZf=$O!a|jEZEan_k-d5Xvh^j z7Iblgj{ue938khoaD1lj3P}My0E2^j^Hn#qUBhUax92wv^6=Sb4XSFF(?I1;2^M0> znaVEF*WIjWs?sYPhzClkQQDZgP02Q|+U=t!y}V4@{-5@)I;zcO+fxB56x!0_P@zz? zxLbkZPH=6J04ZABTPUGeaJS+l6et!X$U#DY;O_1cthn^0=bm$K&wcOSciw$#y|>m| zFMlL^X7=ov*)!|=_RQ@4%c81+hJ%KdLi~GqkqN3jc}2o;v!40Eao<}+Qr2TaNZw&c zpTP?yeFBZrf!1ex+g!X0Sy@_(uZ-}$K5>w^eLiga`zw#1(gH{Fo?$Qhj|8F6TY{e! zp--tj=BPHpsdFyTPKq+dB+Nl+MT9)d&6@VLeUo4&k8w9?b}~@+%jMkr0^Ny&qq) zOj6n$qfJDH9=XMo$0((Rz~i^Xoer5+NvA%KGsz!k7FF2^C0xBuIKKAgLv>4Y|C9Sc zZMex-w`1;2uu%FExM0?d{M@08%uiFBOn_1DH%_1qf!VvQv)vX2;nbp}HyPocc27NJ zkwCW=wWbY3i3)(E#0ZZb;vc zlK3RsA`29LQ@#OQWB-h?HiXnPT1G(@t(^f{nwrt&C_q!DNrX-=`=`*v^pG_(nnbL< z@Ux9Pn!nbTG8MvxJhj+WC`?%9z6jVzN4|&?2ornbv9gPOCjAp4mhT6TA`)V%GHO(P zuDhB7nOClJ`Ia>ld==-*H@>YI0To;a*Iu%Wes| z5#LdKoy+jV!DDGJ?^;mOHacX4Eta23am2^KsM-tq%RCUVH-CU$QpP9dnTaPYGG?;p zPb@mGs(W_=_|Vej`m2Z(Li)E2FW3y~HD(=t5;pU@u;I(!g;oAlSi^6^vI0GO%x2g_ zF#Z&VGe;p6iO=)5+(G(MH7E9UgNDDXo8=WVS&AO2-u?9CQ^Kp40X1DSP^YBjgphZR z!H$YE$=w4=rKv-(N&_1e*(d7UgV{Wq^io9ysWoFf>)ci^?<)Yx zc;y8wVm?C=)CAjKk|gpVnGSc|$qz2c0#f(m4Ow>;k2%I36{NyBHV@HvN-|3K$85Re z?zS9gnyA!#%o(7>JL!-d$kyE%+i=ktfey%1>|<0~4LjqKR@-58IT4?7-;nyL`T-WW z1aOoXz*4FEgQFJBM%jHiH>cfsf{SM4SZm77YPwZbNucf7uOm#RztKOvJ8V5gZ?dz7 zdN7jTmt)3sA{LQBQlZ7w^N#r?C`!C#ZdfL9;^iTzQS80pk8#*IhXbvTstX5n4lTWj@44R6uL%bgt7R#KKb$eksn+Dufu#))sNP}Z4y;RpdCxtt zUeb6ruPOxsIoL|aqjHn?YzPfeiT-JR3PS_=h3~5x&WK}pzN$$O^=hT zXood+2WzjM4fD|lzwxSKzpS1us*{dou+c6IfEHzzPqJ!qSL(-VYCITRc(%v==8i^8 zUu_F9Sy^(+N&jNkTr)kE`$cRgFL21MpmI=`Fq6y_d+x5F$uWrLY0@>haU}EXHA~O6 z`n<>=i_su~O`noZ$y@y()EeF&oAz0AuB1 zXIk)@B1zt6lWtH_O$=ziRf`s*VLAU*Kb~d=h*SVxDL<6CfDw9th~!pNmbjK*x}B3u z1t7j85Igap3l#s`4(g8-zUYeM?brR0%`E5ZnSxrDGWsFyDa4h*qYI-IQsfCmwMDGx zw`(?}FtoXYKR55{M*b`oOpX{po3iO3LAX`RBEkP=Azs&}RTMA_VRj0zyMX6F<+Y$e zvtB(92)+&YP^58{&3fK0!J7e*9IwHcnO3uNbMhj7S!TQ@YeH_0lX%PxKs08|`8<6k zk}stHq}+MpC7Lp8|cL7p-qShNI;u^~lZCLunW}vkg5@caI(t zgjQS_s_T-OHf@9|V8c2NjYFEzm`N8?%l8zItMpo**w9kyQwJnVZxc)|Jo3-L#^4cV zSI~(1n$GWBUTz^K#tp16sbxedm5#uzDzlm5zT(%6g&mbpE1vJRScx&T7dreHEJ=NO173rZ-#cQ2aT6r9?Z%TJeDBNt?2oc@5zn=^f+s ziu4cxep<|n5rL249-rN5yEmu(WE^_%oA=Ym&69r}Wq9-1S%ygBxWFy0sD-y&V41Z0 z%%+Hs#UqaqgZ6wo(GI^VLzInZ8xwRWeYjHVfskykUlBZu?Vq`{bw{0~h>_}f(TL6b zWt2}!<432TL*V^HS85}yDon-W=h=}muhN?~A=&%4LzS2MNJHHO9Jcg&kev3GE=onQ$i+HU$`5bxJ>BbXHn^7o8jlaY zjE6rGD?K;DD%}vSZ+U%MytslpfRvZ^t^T^37~@QeZ~VE4+}}DbQ%ahzm++>btd-k# zNxBg6pn0Ohy}83A#Ew|5)gLNBoyZ3WKJ!V3f&UnTD^TDoWO;rY*1O z3Zx~w!{tufcLB(mrr(zfjj=1R86+e^#FLbjsv*Zx@sNkYi9=4HHt;=q%{m?ro!!-8 z(hUpy$!Pr}$yDe3Cf#y*})hP%Hhy z{c$#i@cwqI7ig_MzRTAlj8-pt#Ip9@f6K|P?pZzm{3FBhRE&X0UQZ$AGQ8tje_Yhc zpJk}w2L^-2Zqb?oKao#WUG6fA$c<;}YnLs&6B5^cKS>)4?Is-@O~{(LAz-R-Po^K( z^XTeAq12WSo2&E|gY?*#6)$sgqhyWx_aC9dCC~!d~(VR{lRu*q=`^Rc`hB%8FIRZYqz2hnTodh&$Fy zu1~JfSEC$1X9kTWWewnUZ%wsKkUJ&EY zzu)%SS#EH)D`40~-o3|eztxyG{eVzdX>Xv(GRfmunOeYVYoR$66O|QxCVap{{7~s7 zQjJwgh4=oQYa)is{R)o}kcPd~oo=0;4sUtLKt53FX=vG8?Qyfu%IIm7WYfw=4neMbYCv=04EB z=H1Ltq0K%_Pc()p&us=K7fyFP^0NfAt%>9zdzy`* zX>+fc+RQkn4-kg@pB0uPWZl{r_NG$^^pLPlkFuyw`z^;J5Hhn{uxb3!dvVl@GxTc>TXb0olAdvd=jh8 zaz-xY@TFo+arJ`+4X)g@?{O z!U9$+Q7P2#kDNJI2gnnnt9lh$q)`42^KC2_RhtZLz37JqfDa}`d|=K=!o4_NPJ2#b z3#MbYSIY**f%xKg_?Tj!v=4W0bv2DBb~({{LJ5iz79P6RH#hmAQ+sv8?iWvqC zAzXWnw%(q)e) zc@DIoazTh)r*>IFm{f1{%Bkp6?NG`XZ4)SScWXwfLUzCsCKgG#yq$W-VynkQ`Iu&; zodf}9VVAP^!%s88`-fTkPZB>*D%>MTCp9UdJ^3gRdvCBAL$*Tf&XSgJX)c+fv{>q4 zdJ-YfGOh4DS1b`fHN=e9_D1nN@z<7T4J^@9OQh6`SOjnBCHgw+?ybQd@Xlku=C8?E zXOdW@5TI!mlwTrs*@j-f>fmdLK%%Ko|4=wGO+eMTX#n(zF$>asLq^(j{3RK5ER)Zx zT6(4i8!IBt+}j(=tzm9~pY=XrF3;ZIr8&Z z_z{wX<7BCO&3-OTItbY^>pe|ReQqX7HT&AyEA zbzmM%Ei3>@fFYUX3jz{JoH1D+4HoI~x^eV_h!^}Bis@uJMEo*!=2Cz;0*t}MMq%fA z(l*_3ap_*y&AhJb?rnoNT+FCJ-e1RRU>%-b565A!kIMI^I+_O@-(2M*xf?l6Y%?ZA zDs^lxo?|;<-Bkn6oYB?W9qf+_22XZNup!8ex35zPawL=Qu2zyZKb|%$9vkh>eOh$Z zA@e3eT0lWfpj_`wKU;%KbnjM&^GGg1}UxGD@#tu_amNb~Z(?--V3nF-hD?cG&OW zg8Id|lLvE#r$*xnhu*(Y8`);o*(%I|EbUwsVItyCb&=<&p4^rY`V5=ezHv)pjlcxw zDGPQNd<+B{(nACJbLpfGL!w)&B`rLHU8)8x-9Ec@HFUjxY~d}aJC#F2c=?cr?n}fp zGv=2bV>;N)*KsQkqNV8Ww%9RKa{-MYDRX5bgO}F_qn`w^_&)NwC9c)CUNMT7)X5c)FiW`xR3{_kWbBcRrfjtHAJPXV9>`ak1 zEz~pBeeFQ{B_T6zLQd1uO1$Rc9A*6VJtY;ZvQ7eLLY%%5(X26ZdxbynOaz9&?L;DS>pUUy0+E-TkoMKmiKER$t|Q*N}+hhCcPdJE zcRxcV>?qZ^@|w7Y6D}c-KNn6Dw(+L&<~O!RZk>J%OI=H$5y9%iY{+hT58Jz8X`5yPE4XDO>3*6H%5` zX*Q6#*M}}uT_Q=d4xBkVR!q=ko@}qHm7FU9T44r#wdDNkiqfPm-lHK9Zg?CjfU`Yy zq7rRe(Fd5wpMz4!t6D-EXY*MfVG6(W{2eY1 zBD7Q-B?(j>DLQ3fUedYPSyVCi)M`_RP(euk?}uD};`irsFiE3tgWMH-6woC|Qo=2( zpwO>P*np6kEM}!;x!L)!>FlvkYtlkGWR1qwWsiFI%zBNKD96P`%D$U|$PjEFcV#5^ zJ5IGWTNw6Wr)y4ZW)f3jj6L$2_RitE=r`ZZJ3Aw!&5FQ^A7X+LraWI@`6&9Vmq$Bxi`P`9{SXa&y+E~Rji>@$>@HCJwi?G4$WEt z^K#WSv>YzuVh6{YccO`{{5Ga@J4Kq>4|ZX_Yo`txm`yC4;Af)?cHhY_8*@il9XD1ES;sY7Et5q>Ls^2U7 zq(TKAFFhW-x;1*CT}9tD4Q`J^{?6a1Q;gvFAhLdT`T`kd?(PNa8~h+1w1HZQ7(hT#djd{FZFK6YP{1zRTt*wKm!G)Is{Q7 zRrD^pL6raisoM6tiDi9@uSAh=wcOEy4jqJtTlMB}Pn;8Cb@%o>s*JQF)_UOI(w~3u zzx~0_W08{N&_Vt9R$I%dA-+<==f$KnP7T$?-Uo+9D_6B1`OnYxb0I_KU!rIKweO#UAFTedd+a}- z(Z7`bWE>XAGyI9i{!c9a-A8kvUHSw4Wy2$nl!MpXO+)ia>y@3!b<$s`kM(Nh>ar(dJ7N&jI1^CNl00OW$mbEJBeYZD z7VS~EPrt2JfbT<6eBVy9-fU`}=fBrP6V2&X%3^LGZ~T=g8yl=d-#0av&*OH;4lw+U!juW((Ys+jF*$WC5_*6wA`=KO`iX?t( zg9e#c92U=PyTZS2^$h668{cTEm0>MLu#ht{m=qLyJtkU8c?ds@Q18*n?lG&Bb~3Si z&BW7x<2_I}1axp}lakRhVvj zY0KlD6jB0SXWy!9?c3aFiwx*+=kj=2b`aWM=uKi7DqK!+$J~~i)Ba83dnz7uybneUeWpjVo1Mbcc2CP@`@I6N4@<);Ael9SCjgI_~@OvM%|cC z%1)@~GYSI4U)N)I!RD*=9?5=SkKv=li?>Lzy8j9IX zMvGcjBfY)NU(nifHiF0Bar!TDdEUHJa4nf6JMs`;?B*`UlSrSNQ2h5R}M;r8&QSvK&qsXachLf2v-p+%Nsh$)}c^ zQ^%zD?hEtnYyk8~p9-)HdF}_}S>fl@2p@cn4!6K>DGqsVs`B~Gwl zI=|x-;WHNAjshr{z(9Ur0y0pGt%{!unlR6{OC^Aof*{Jj`eBmJ<+da|!`sj%&qzNo z1Zk+lso*m=$?qf+#159L(M4&0X)nZ+v(&0K^|M-xz;|kr=)`O)nk_V9@j(lqNKW`| z#XYHO$bJET_o4SB-Ud`>9!#L7MboN-gh8P)YQa6aw2&ZTvD2@j#99PVE%2l^6L+OR zSx6nr1uJVFTlndiPRqw6I$YK#Lmg^FQpg&W%bBy9Ax+(bhbmvl;m(4lzJnopNUOacrZ0g&7B#PfxtdN@#d%M4*A4!BSkeI@L zE@)_=RYsS5B${=PR7SDqy|+=|rAh!-(~^1N!Lz3}d2(qV& zg)D^hbxY^tX*{5fh@qi^z>_ciD)xo>19d6s3e~*) z4z5FKG*mTG_ipmYvz~7kY^&rQpQ@m!3$#8~adqSE5#(}`&htJ;V^OITUOEOtSnGvF zx%z$awKEjIR$8PCt~<`O7oMU4OPq}^6z(lY{*2|2QAZ1}g)*k`+a-1J3gDe`;>AF= zKvxBE7uWs8bPsp2*3w-uJfY zcO2VW~d?k3PN0 zP0)E|&U<&BpymA0H^r|(gzzF+FmXZ}hbxOk(?wmKTpYiDDgZ12 zeALvr-F!ml@5#&?$Jy!_+F%UQd2Jr!w8m*eb&c?x{Oo?S&{|2Jo1SB;fR{NIO+F`X Sbx2zE&)8@G8jtVyv3~;zb#SNv literal 0 HcmV?d00001 diff --git a/doc/en/install.html b/doc/en/install.html new file mode 100644 index 0000000..3251255 --- /dev/null +++ b/doc/en/install.html @@ -0,0 +1,424 @@ + + + +Installing Pgpool Management Tool + + + + + + +
+

Installing Pgpool Administration Tool

+

Preface

+Please confirm pgpool normally can be installed, and operates before starting the installation of the pgpool management tool.

+The following software is at least installed in the server that operates pgpool when the pgpool management tool is installed, and it should be normally operating. + +

    +
  • HTTP Server(Apache)
  • +
  • PHP4.4.2 and higher
  • +
  • pgpool
  • +
+Before starting the install, be sure to have: +
    +
  • Setup the HTTP, PHP and pgpool properly.
  • +
  • Turn cookie and JavaScript? support in your browser on.
  • +
+

Precondition

+It explains on the assumption of being set it here as follows. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
/var/www/html
apache
/var/www/html/admin-tool
/usr/local/bin/pgpool
/usr/local/bin/pcp_attach_node
/usr/local/bin/pcp_detach_node
/usr/local/bin/pcp_node_count
/usr/local/bin/pcp_node_info
/usr/local/bin/pcp_proc_count
/usr/local/bin/pcp_proc_info
/usr/local/bin/pcp_stop_pgpool
/usr/local/bin/pcp_systemdb_info
/usr/local/bin/pg_md5
/usr/local/etc/pgpool.conf
/usr/local/etc/pcp.conf
+

Install

+It explains the installation of the management tool as follows. +
    +
  1. To execute pgpool and the pcp tool set up from the Apach user, the right of access is set.
  2. +
    + + +
    cd /usr/local/bin
    ls
    +
    + It is confirmed that there is the following files. +  
      +
    • pgpool
    • +
    • pcp_attach_node
    • +
    • pcp_detach_node
    • +
    • pcp_node_count
    • +
    • pcp_node_info
    • +
    • pcp_proc_count
    • +
    • pcp_proc_info
    • +
    • pcp_stop_pgpool
    • +
    • pcp_systemdb_info
    • +
    • pg_md5
    • +
    +
    + + +
    chmod 755 /usr/local/bin/pgpool
    chmod 755 /usr/local/bin/pcp_*
    +
    +
  3. +The login user is registered in the pcp.conf file.The turning md5 password is obtained. +
    + +
    pg_md5 password_string
    +
    +Next, the obtained character string write on pcp.conf as follows. +

    username:md5 password

    +
  4. +
  5. +Admin-tools.tar.gz that is the management tool program file is developed below the html directory of Apache.
    +
    + + + + + +
    mv admin-tool.tar.gz /tmp
    cd /tmp
    tar xzf admin-tool.tar.gz
    mv admin-tool /var/www/html
    rm admin-tool.tar.gz
    +
    +
  6. +
  7. +The file is confirmed. +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    find /var/www/html/admin-tool -print
    /var/www/html/admin-tool
    /var/www/html/admin-tool/install
    /var/www/html/admin-tool/install/finish.php
    /var/www/html/admin-tool/install/defaultParameter.php
    /var/www/html/admin-tool/install/setLang.php
    /var/www/html/admin-tool/install/checkDirectory.php
    /var/www/html/admin-tool/install/images
    /var/www/html/admin-tool/install/images/Thumbs.db
    /var/www/html/admin-tool/install/images/ng.gif
    /var/www/html/admin-tool/install/images/ok.gif
    /var/www/html/admin-tool/install/index.php
    /var/www/html/admin-tool/install/checkParameter.php
    /var/www/html/admin-tool/install/lang
    /var/www/html/admin-tool/install/lang/ja.lang.php
    /var/www/html/admin-tool/install/lang/en.lang.php
    /var/www/html/admin-tool/libs
    /var/www/html/admin-tool/libs/Smarty.class.php
    /var/www/html/admin-tool/libs/plugins
    /var/www/html/admin-tool/libs/plugins/function.counter.php
    /var/www/html/admin-tool/libs/plugins/modifier.escape.php
    /var/www/html/admin-tool/libs/plugins/modifier.replace.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_characters.php
    /var/www/html/admin-tool/libs/plugins/block.textformat.php
    /var/www/html/admin-tool/libs/plugins/modifier.spacify.php
    /var/www/html/admin-tool/libs/plugins/modifier.date_format.php
    /var/www/html/admin-tool/libs/plugins/modifier.regex_replace.php
    /var/www/html/admin-tool/libs/plugins/modifier.lower.php
    /var/www/html/admin-tool/libs/plugins/modifier.debug_print_var.php
    /var/www/html/admin-tool/libs/plugins/function.eval.php
    /var/www/html/admin-tool/libs/plugins/function.html_image.php
    /var/www/html/admin-tool/libs/plugins/modifier.nl2br.php
    /var/www/html/admin-tool/libs/plugins/modifier.strip_tags.php
    /var/www/html/admin-tool/libs/plugins/outputfilter.trimwhitespace.php
    /var/www/html/admin-tool/libs/plugins/function.assign_debug_info.php
    /var/www/html/admin-tool/libs/plugins/modifier.strip.php
    /var/www/html/admin-tool/libs/plugins/shared.make_timestamp.php
    /var/www/html/admin-tool/libs/plugins/function.html_select_date.php
    /var/www/html/admin-tool/libs/plugins/modifier.truncate.php
    /var/www/html/admin-tool/libs/plugins/compiler.assign.php
    /var/www/html/admin-tool/libs/plugins/modifier.capitalize.php
    /var/www/html/admin-tool/libs/plugins/modifier.wordwrap.php
    /var/www/html/admin-tool/libs/plugins/modifier.indent.php
    /var/www/html/admin-tool/libs/plugins/function.html_checkboxes.php
    /var/www/html/admin-tool/libs/plugins/shared.escape_special_chars.php
    /var/www/html/admin-tool/libs/plugins/function.cycle.php
    /var/www/html/admin-tool/libs/plugins/function.math.php
    /var/www/html/admin-tool/libs/plugins/modifier.cat.php
    /var/www/html/admin-tool/libs/plugins/function.html_select_time.php
    /var/www/html/admin-tool/libs/plugins/function.html_options.php
    /var/www/html/admin-tool/libs/plugins/function.fetch.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_paragraphs.php
    /var/www/html/admin-tool/libs/plugins/function.config_load.php
    /var/www/html/admin-tool/libs/plugins/function.popup_init.php
    /var/www/html/admin-tool/libs/plugins/modifier.string_format.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_sentences.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_words.php
    /var/www/html/admin-tool/libs/plugins/modifier.default.php
    /var/www/html/admin-tool/libs/plugins/function.popup.php
    /var/www/html/admin-tool/libs/plugins/modifier.upper.php
    /var/www/html/admin-tool/libs/plugins/function.html_table.php
    /var/www/html/admin-tool/libs/plugins/function.debug.php
    /var/www/html/admin-tool/libs/plugins/function.html_radios.php
    /var/www/html/admin-tool/libs/plugins/function.mailto.php
    /var/www/html/admin-tool/libs/internals
    /var/www/html/admin-tool/libs/internals/core.write_cache_file.php
    /var/www/html/admin-tool/libs/internals/core.display_debug_console.php
    /var/www/html/admin-tool/libs/internals/core.load_resource_plugin.php
    /var/www/html/admin-tool/libs/internals/core.is_trusted.php
    /var/www/html/admin-tool/libs/internals/core.is_secure.php
    /var/www/html/admin-tool/libs/internals/core.assemble_plugin_filepath.php
    /var/www/html/admin-tool/libs/internals/core.get_microtime.php
    /var/www/html/admin-tool/libs/internals/core.load_plugins.php
    /var/www/html/admin-tool/libs/internals/core.rmdir.php
    /var/www/html/admin-tool/libs/internals/core.smarty_include_php.php
    /var/www/html/admin-tool/libs/internals/core.process_compiled_include.php
    /var/www/html/admin-tool/libs/internals/core.run_insert_handler.php
    /var/www/html/admin-tool/libs/internals/core.process_cached_inserts.php
    /var/www/html/admin-tool/libs/internals/core.write_file.php
    /var/www/html/admin-tool/libs/internals/core.write_compiled_include.php
    /var/www/html/admin-tool/libs/internals/core.rm_auto.php
    /var/www/html/admin-tool/libs/internals/core.get_include_path.php
    /var/www/html/admin-tool/libs/internals/core.write_compiled_resource.php
    /var/www/html/admin-tool/libs/internals/core.get_php_resource.php
    /var/www/html/admin-tool/libs/internals/core.read_cache_file.php
    /var/www/html/admin-tool/libs/internals/core.create_dir_structure.php
    /var/www/html/admin-tool/libs/internals/core.assign_smarty_interface.php
    /var/www/html/admin-tool/libs/Smarty_Compiler.class.php
    /var/www/html/admin-tool/libs/debug.tpl
    /var/www/html/admin-tool/libs/Config_File.class.php
    /var/www/html/admin-tool/nodeServerStatus.php
    /var/www/html/admin-tool/login.php
    /var/www/html/admin-tool/innerSystemCatalog.php
    /var/www/html/admin-tool/definePgpoolConfParam.php
    /var/www/html/admin-tool/systemDb.php
    /var/www/html/admin-tool/setLang.php
    /var/www/html/admin-tool/queryCache.php
    /var/www/html/admin-tool/pgconfig.php
    /var/www/html/admin-tool/common.php
    /var/www/html/admin-tool/status.php
    /var/www/html/admin-tool/config.php
    /var/www/html/admin-tool/command.php
    /var/www/html/admin-tool/templates
    /var/www/html/admin-tool/templates/pgmgtNotFound.tpl
    /var/www/html/admin-tool/templates/changePassword.tpl
    /var/www/html/admin-tool/templates/systemDb.tpl
    /var/www/html/admin-tool/templates/pleaseInstall.tpl
    /var/www/html/admin-tool/templates/nodeStatus.tpl
    /var/www/html/admin-tool/templates/login.tpl
    /var/www/html/admin-tool/templates/queryCache.tpl
    /var/www/html/admin-tool/templates/procInfo.tpl
    /var/www/html/admin-tool/templates/status.tpl
    /var/www/html/admin-tool/templates/innerSystemCatalog.tpl
    /var/www/html/admin-tool/templates/pgconfig.tpl
    /var/www/html/admin-tool/templates/help
    /var/www/html/admin-tool/templates/help/ja
    /var/www/html/admin-tool/templates/help/ja/changePassword.tpl
    /var/www/html/admin-tool/templates/help/ja/systemDb.tpl
    /var/www/html/admin-tool/templates/help/ja/login.tpl
    /var/www/html/admin-tool/templates/help/ja/queryCache.tpl
    /var/www/html/admin-tool/templates/help/ja/status.tpl
    /var/www/html/admin-tool/templates/help/ja/pgconfig.tpl
    /var/www/html/admin-tool/templates/help/ja/config.tpl
    /var/www/html/admin-tool/templates/help/ja/nodeServerStatus.tpl
    /var/www/html/admin-tool/templates/help/en
    /var/www/html/admin-tool/templates/help/en/changePassword.tpl
    /var/www/html/admin-tool/templates/help/en/systemDb.tpl
    /var/www/html/admin-tool/templates/help/en/login.tpl
    /var/www/html/admin-tool/templates/help/en/queryCache.tpl
    /var/www/html/admin-tool/templates/help/en/status.tpl
    /var/www/html/admin-tool/templates/help/en/pgconfig.tpl
    /var/www/html/admin-tool/templates/help/en/config.tpl
    /var/www/html/admin-tool/templates/help/en/nodeServerStatus.tpl
    /var/www/html/admin-tool/templates/footer.tpl
    /var/www/html/admin-tool/templates/innerError.tpl
    /var/www/html/admin-tool/templates/innerNodeServerStatus.tpl
    /var/www/html/admin-tool/templates/menu.tpl
    /var/www/html/admin-tool/templates/config.tpl
    /var/www/html/admin-tool/templates/nodeServerStatus.tpl
    /var/www/html/admin-tool/templates/error.tpl
    /var/www/html/admin-tool/screen.css
    /var/www/html/admin-tool/conf
    /var/www/html/admin-tool/conf/pgmgt.conf.php
    /var/www/html/admin-tool/innerNodeServerStatus.php
    /var/www/html/admin-tool/changePassword.php
    /var/www/html/admin-tool/images
    /var/www/html/admin-tool/images/question.gif
    /var/www/html/admin-tool/images/background.gif
    /var/www/html/admin-tool/images/descending.gif
    /var/www/html/admin-tool/images/ascending.gif
    /var/www/html/admin-tool/images/elephant.gif
    /var/www/html/admin-tool/images/Thumbs.db
    /var/www/html/admin-tool/images/spacer.gif
    /var/www/html/admin-tool/images/logo.gif
    /var/www/html/admin-tool/images/back.gif
    /var/www/html/admin-tool/images/marker.gif
    /var/www/html/admin-tool/images/seaen.jpg
    /var/www/html/admin-tool/images/turtle.gif
    /var/www/html/admin-tool/index.php
    /var/www/html/admin-tool/templates_c
    /var/www/html/admin-tool/lang
    /var/www/html/admin-tool/lang/ja.lang.php
    /var/www/html/admin-tool/lang/en.lang.php
    /var/www/html/admin-tool/procInfo.php
    /var/www/html/admin-tool/nodeStatus.php
    /var/www/html/admin-tool/help.php
    /var/www/html/admin-tool/logout.php
    +
  8. +It accesses install/phpinfo.php from Web a browser. It is confirmed that the function of php_mstring and php_pgsql is effective. +
      +
    • "Multibyte Support" is "enabled".
    • +
    • "PostgreSQL Support" is "enabled".
    • +
    +

    Please confirm the setting of PHP again when these items are not "enabled".

    +
  9. + +
  10. +The writing right of access is set to the "templates_c" directory in the progressing directory and the "conf/pgmgt.conf.php" file. + +
    + + +
    cd /var/www/html/admin-tool
    chmod 777 templates_c
    +
    +
  11. +
  12. +The writing authority to pgmgt.conf.php is set to apache process user. +
    + + + +
    cd /var/www/html/admin-tool/conf
    chown apache pgmgt.conf.php
    chmod 644 pgmgt.conf.php
    +
    +
  13. +
  14. +The writing right is set to the pgpool.conf file and the pcp.conf file that is the configuration file of pgpool. +
    + + + + + +
    cd /usr/local/etc
    chown apache pgpool.conf
    chmod 644 pgpool.conf
    chown apache pcp.conf
    chmod 644 pcp.conf
    +
    +
  15. +
  16. + The Multi byte and the PostgreSQL library is confirmed. Following URL is accessed from a browser. +

    http://ServerName/admin-tool/install/phpinfo.php

    + It is confirmed that the set up information of PHP is displayed. + Whether Multibyte Support and PostgreSQL Support are enabled is confirmed to them. Please confirm the setting of PHP again when not becoming it. +
  17. +
  18. +It accesses the installer. URL is as follows. +

    http://ServerName/admin-tool/install/index.php

    +
  19. +
  20. +The display language is selected. +

    +
  21. +
  22. +The right of access of the directory is confirmed. When is displayed right, it is appropriately set. Please click "Next" button. +Please it is not appropriately set when is displayed, and confirm the error message, correct, and push "Check" button. +

    +
  23. +
  24. +The management tool is set. When is displayed right, it is appropriately set. Please click "Next" button. +Please it is not appropriately set when is displayed, and confirm the error message, correct, and push "Check" button. +

    +

    +
    pgpool.conf
    +
    The full path of the pgpool.conf file is specified.
    +
    Password File
    +
    The full path of the pcp.conf file is specified.
    +
    pgpool Command
    +
    The full path of the pgpool command file is specified.
    +
    PCP Directory
    +
    The full path of the directory that the PCP command group has installed is specified.
    +
    PCP Hostname
    +
    The host name that has installed the PCP command is specified.
    +
    Refresh Time
    +
    The interval when the status of pgpool is updated automatically is set every second. It doesn't update it automatically in case of 0.
    +
    +

    +

    +
  25. +
  26. +The installation of the management tool finished. At last, The "install" directory is deleted. +

    +
    + +
    rm -Rf /var/www/html/admin-tool/install
    +
    +
  27. +
+

Display of login screen

+When "top" is clicked on the installation completion screen, the login screen of the management tool is displayed. The username and the password set according to installation procedure 2 are input and it logs it in. +
+ + + \ No newline at end of file diff --git a/doc/en/login.html b/doc/en/login.html new file mode 100644 index 0000000..e277740 --- /dev/null +++ b/doc/en/login.html @@ -0,0 +1,68 @@ + + + +Login + + + + + + +
+ +

Login

+

Summary

+

It is a login screen. Please input the user-name and the password set to pcp.conf.
+ When the attestation succeeds, the status screen is displayed. The login screen is displayed again when failing. + +

Feature

+ +
+ + + + + + + + + + + + + + + + + + +
+ Please input the user-name here.
+ Please input the password here.
+ Please push the button when you input the user-name and the password.
+
+
+ + + diff --git a/doc/en/logout.html b/doc/en/logout.html new file mode 100644 index 0000000..0f2a528 --- /dev/null +++ b/doc/en/logout.html @@ -0,0 +1,43 @@ + + + +Logout + + + + + + +
+ +

Logout

+

Summary

+

This menu is displayed, if login is succeed. +

Feature

+ If logout is clicked, it logs out and the login screen is displayed. +
+ + + diff --git a/doc/en/nodeServerStatus.html b/doc/en/nodeServerStatus.html new file mode 100644 index 0000000..ea907a5 --- /dev/null +++ b/doc/en/nodeServerStatus.html @@ -0,0 +1,75 @@ + + + +Node Satsus + + + + + + + +
+ +

Node Status

+

Summary

+On the node status screen, +
  • IP Address
  • +
  • Port
  • +
  • Status
  • +
  • Detail
  • +
+

can be acquired for each nodes.

+

+

Feature

+ + + + + + + + + + + + + + + + + + + + +
The IP address of the node.
The port number that the postmaster runs on.
It is displayed whether postmaster is operating.
When the postmaster runs on, it will be displayed.
+Pg_settings information is displayed for PostgreSQL, and pool_status is displayed for pgpool. +
+ + +
+ + + + diff --git a/doc/en/pgconfig.html b/doc/en/pgconfig.html new file mode 100644 index 0000000..6bb98ad --- /dev/null +++ b/doc/en/pgconfig.html @@ -0,0 +1,453 @@ + + + +pgpool Setting + + + + + + +
+

pgpool Setting

+

Summary

+ + The content of pgpool.conf that is the configuration file of pgpool set can be displayed and be changed. +

Feature

+ Please input the value that wants to change and push the update button. +

Addition of A backend host

+ Please push the add button when you want to add a new back end host.
+ It inputs in back end host's item and a new input column can be done, and input information on a new back end host there, please.
+ Please push the update button when input ends. +

Deletion of backend host

+ + Please push the delete button at the right of the host setting when you want to delete the back end host who has registered.
+ +

Connections

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+
listen_addresses (string)
+Specifies the addresses to listen on for TCP/IP connections. Set to '*' for all configured IP interfaces, '' for no TCP/IP connections, or else to a specific IP address or host name. The default is 'localhost'. Note that connections via UNIX domain sockets are always allowed. +
+
port (integer)
The port number where pgpool is running on. Default value is 9999.
+
socket_dir (string)
The directory of unix domain socket for PostgreSQL server. Default value is '/tmp'.
+
num_init_children (integer)
Number of pgpool process initially forked. Default value is 32.
+
max_pool (integer)
+Number of connection pools each pgpool server process are keeping. pgpool will make a new connection if there's no user name and database name pair yet. Thus it is recommended that max_pool exceeds the number of such that possible pairs. If it exceeds, the oldest connection is discarded and the new connection uses the slot. The default value is 4. +
+
child_life_time (integer)
Life of a idle child process in seconds. This will prevent unwanted memory leaks or other problems. Default is 300. Set it to 0 disables this feature.
+
connection_life_time (integer)
Life time for each idle connection in seconds. 0 means the life time is forever. The default value is 0.
+
child_max_connections (integer)
If child_max_connections connections were received, child exits. 0 means no exit. The default value is 0.
+
connection_cache
If true, cache connections to PostgreSQL. Default value is true.
+
pgpool2_hostname (string)
The host name that pgpool2 runs is specified.
+

Backends

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+
backend_socket_dir (string)
The directory of unix domain socket for PostgreSQL server. Default value is '/tmp'.

backend_hostname (string)
The host name that PostgreSQL runs is specified.

backend_port (integer)
It is a port number that postmaster is running.

backend_weight (integer)
The weight at the load balance mode is set by the value from 0 to 1. Relative weight is calculated and distributed from the value specified with all the back end servers.
+

PCP (pgpool Control Port)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+ +
pcp_port (integer)
It is a port number to connect it with PCP. Default is 9898.
+
pcp_socket_dir (string)
The directory of unix domain socket for PCP. Default value is '/tmp'.
+
pcp_timeout (integer)
The time-out of the PCP command is set. The connection disconnect when there will not be response in this time.
+

Logging

+ + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+ +
logdir (string)
The directory name to store pgpool's log files. Currently only a file named pgpool.pid(has pgpool's process id) is stored. The default value for logdir is '/tmp'.
+
print_timestamp
If true timestamp is added to each log line. Default value is true.
+

Replication

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+
replication_mode
Set this true if you are going to use replication functionality. Default is false.
+ +
replication_strict
If true, pgpool will wait for the completion of the master query before sending a query to the secondary server. This is the safest and default operating mode for pgpool. Default is true. +
+
replication_timeout (integer)
In non strict replication mode, there will be a chance of deadlock. pgpool will abort the session if master or secondary does not respond within this milli seconds. if set to 0, timeout is disabled.
+
replication_stop_on_mismatch
Stop replication mode on data mismatch between master and secondary. Default is false.
+
reset_query_list (string)
SQL command to initialize the connection when the session ends is delimited by ";".
+

Health Check

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+ +
health_check_timeout (integer)
pgpool does "health check" periodically to detect PostgreSQL servers down, network communication problems or as such. If something is going wrong, pgpool will automatically run into fail over or degeneration mode.
+
health_check_period (integer)
Specifies the interval for next health checking. 0 means no health checking. The default is 0(i.e. no health checking).
+
health_check_user (string)
PostgreSQL user name for the health checking.
+

System Database

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+
system_db_hostname (string)
The host name that system DB is operating is specified. It connects with Unix domain socket when not specifying it.
+
system_db_port (integer)
The port number to connect system DB is specified.
+
system_db_dbname (string)
The data base name of system DB is specified.
+
system_db_schema (string)
The schema name of system DB is specified.
+
system_db_user (string)
The username connected with system DB is specified.
+
system_db_password (string)
The password connected with system DB is specified.
+

Others

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDetail
+
load_balance_mode
Perform load balancing for SELECT. Default is false.
+
master_slave_mode
Run in master/slave mode. See 14 for more details. Default value is false. This mode is not compatible with replication_mode.
+
insert_lock
+If you replicate a table having SERIAL data type column, sometimes the serial value does not match between servers. You can avoid the problem by using a table lock (with a performance penalty due to +less currency in transactions). For this you need to rewrite you query: + +

+INSERT INTO .... +

+

+to: +

+

+BEGIN;
+LOCK TABLE ...
+INSERT INTO ...
+COMMIT; +

+

+This is painfull. If you turn on insert_lock, pgpool will +automatically do the rewriting for you. + +

+
+
ignore_leading_white_space
If true, ignore leading white spaces of each query while pgpool judges if the query is a SELECT so that it can be load balanced. This is usefull for certain APIs such as DBI/DBD which is + know as adding an extra leading white space.
+
parallel_mode
When pgpool runs on parallel mode, true is specified. It is necessary to specify a partitioning rule in this case.
+ +
log_statement
If true, print all statements to the log. Like the log_statement option to PostgreSQL, this allows for observing queries without engaging in full debugging.
+
enable_query_cache
When the result of SELECT is cached, it makes it to true.
+
+ + + + + diff --git a/doc/en/queryCache.html b/doc/en/queryCache.html new file mode 100644 index 0000000..4374cd7 --- /dev/null +++ b/doc/en/queryCache.html @@ -0,0 +1,86 @@ + + + +Query Cache + + + + + + +
+ +

Query Cache

+
+

Summary

+ +

It is possible to cache the SELECT query, if enable_query_cache of pgpool.conf is true.

+

Feature

+

It is possible to search for the data that exists in the query cache. It searches for the query string and the database name, and it processes it by the partial agreement retrieval. It becomes a search for the logical product with the query string and the database name. + + + + + + + + + + + + + + + +
Query +
Database
+ + +
+

Query cache list

+

+ +The query string, database name and create time which existing in cache is displayed. When "Query", "Database" and "Create Time" clicked, the records is sorted. Whenever clicking, it is sorted in the ascending order or the descending order.

+ +

When the check is put in the check box in the left of the data that wants to be deleted, and the deletion button is pushed, it is deleted. +

+ + + + + + + + + + + + + +
QueryDatabaseCreate Time
+ +
+
+ + diff --git a/doc/en/status.html b/doc/en/status.html new file mode 100644 index 0000000..61cfe8e --- /dev/null +++ b/doc/en/status.html @@ -0,0 +1,135 @@ + + + +pgpool Status + + + + + + +
+ +

pgpool Status

+

Summary

+On the status screen, it is possible to display it for pgpool as follows, +
  • Summary
  • +
  • Process Information
  • +
  • Node Information
  • +
  • Log
  • +
+and operate it. +
    +
  • Start
  • +
  • Stop
  • +
  • Restart
  • +
+

Feature

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
The content of pgpool.conf is displayed.

In each process for pgpool,

+
    +
  • Process ID
  • +
  • Database Name
  • +
  • Username
  • +
  • Process start time
  • +
  • Connection create time
  • +
  • Protocol major version
  • +
  • Protocol miner version
  • +
  • Use of connection
  • +
+

will be shown.
+ In each process, it will be displayed only the number of max_pool in pgpool.conf in the maximum. +

In each node,

+
    +
  • IP address
  • +
  • Port number
  • +
  • Status
  • +
  • Weight
  • +
  • Disconnect button
  • +
+

will be shown. But, the button for disconnection will not be shown when pgpool is running on parallel mode.

+

In the status,

+
    +
  • Up. Disconnect
  • +
  • Up. Connected
  • +
  • Down
  • +
+

the three states will be shown.

It is possible to display about log of pgpool when pgpool doesn't run in daemon mode(-n).
It is possible to start pgpool when it is stopped. The start option of pgpool +
    +
  • Clears query cache(-c)
  • +
  • don't run in daemon mode(-n)
  • +
  • stop mode(-m)
  • +
  • pgpool.conf(-f)
  • +
  • pcp.conf(-F)
  • +
+ can be specified. +

+
All the processes of pgpool are stopped. The pgpool stop option is displayed, when "pgpool Stop" is pushed. There are stop mode for pgpool as follows. +
    +
  • smart
  • +
  • fast
  • +
  • immediate
  • +
+ If pgpool is stopped, pgpool status in the status window becomes "pgpool stop" and the start option for pgpool is displayed. +

+
First, all the processes of pgpool are stopped and then pgpool start process is executed. Both the start and the stop of the abovementioned items can be specified. +

+
+ + +
+
+ + + diff --git a/doc/en/systemDb.html b/doc/en/systemDb.html new file mode 100644 index 0000000..af0c03a --- /dev/null +++ b/doc/en/systemDb.html @@ -0,0 +1,101 @@ + + + +Partitioning Rule + + + + + + +
+ +

Partitioning Rule

+

Summary

+ +The setting of a parallel query is defined for parallel_mode=true in pgpool.conf. +

Feature

+The data type of each column is as follows.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TEXTDistributed database name
TEXTSchema name of database
TEXTDistributed table name
TEXTColumn Name of Distributed key
TEXT[]List of row name of table that distributes data
TEXT[]List of type of row name
TEXTFunction name that defines partitioning rule
+

+

Add

+The value is input to all columns and "Add" button is pushed.
+Please enclose each element with a single quotation, and delimit each element by the comma about the column list and the type list of column. + +

Update

+Please click the data base name of the definition that wants to be updated. Please the value must be displayed in the input field and correct and push "Update" button. However, neither the data base name, the schema name nor the table name are revocable. +

Delete

+Please click the data base name of the definition that wants to be deleted. Please push "Delete" button. The confirmation dialog is displayed and push the "OK" button, please. +
+ + + diff --git a/doc/images/background.gif b/doc/images/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed77230e94efc79be87d24b4d6c159e5feb1b07e GIT binary patch literal 53 zcmZ?wbhEHb+{nPl@PUzG!;yPGe*9Pb$-)2vIv@fh!@$JT)4%fcTmHp!w%lUjVz34P D)kqOI literal 0 HcmV?d00001 diff --git a/doc/images/logo.gif b/doc/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d63d04d49028c1ef24430045dc51a0d1336ecaa GIT binary patch literal 2256 zcmb7-`#;kQ1AxE#ZewG%xh9umbI&GJDpGAoh?IQ`tlUQ~HOIA)d)kp) z=A_QtGBW8L!bz@)8X>1cozA=WbKd{peSUa;dOn}$q>IyGn_wAm6zBthD$!JI<#Ufr zA-%XKDF3NIJd@o#I=#HHwf(JgbYXe@OaH|3jfNLI;n?Wxs!S$x;kGDMnQ!18H4yTHgYyzu%5Us6Y&|&M6KK6>X^X@+k2z+v91sOf1Yf* z`eN<+uXD}uZhK2#uC!j4L_L}9P5%y|*uFyxlWpoAE1*-*a)()%Yh-o`G$AJ`&J0Y# z$fw5Jr(qyD3AYJyg&5eOvLFXfrt95foq92~s z*uvDzZI($S6=+#OY8I#4y#+(5q5~{6m}Lladw44I{b`j1J-hn^`Bh{=obp@OfV17E zk1n6|D%`@p6pL-gdQOlErEmI7G&lZH4F0_G#KgPjD7K(ABllOwm4e5()b|Bhz2ir* zbIkh2TEcM(B`;z`D`S}mhyeD)vAeGIIRiSP$=gPV#E}V+sB_lHQ3j>)$tf?(P8rq( z9o^9J#0F;HXr?+2k6;T-Xc~O-@N|;cfOF{C9?M(=l&c;jV_=&?XjY#lQ}s{~w*`@3 z(HDFXqIM8+_A0>xHsWFoqf9fjkPLm0nm;-ZJ)Se_=@(CaE$=JHQO5>H-=*(5XF!7K z=BXF(22D|+9Cok)?s+w8qCXzIEtkLXy3iodN1L+&*vw^WpUw1lFU(`=UN#l(3P|k8 z@bX3$+`7=?YhHpgjBJ<88^N|Dh1C|SBTo1B?YNot#8FeK0u4=C7H87b$%iJ>n6q_qVK2y+ZZ~o1aMr=R82c`qJ`S_3IK*G}!*tKS1GcN+XiAV_05-!$yKSmV;r9EQov|)`x zMc)(R<0QuPfWTrqdPT?f@pQ|J;@aEf<#bkESlBDdskh?yR^BQ!(lV_gPHoPg< zDN%pg&-FZBM7q2Ul}sEXGYxweM`3jUbFL0E^UI8knR2P#8q7uY9X<7N;`(>2#gBlC z(Z;BFZK&nJOml8zA?*~hzWQhA>nM0FzK;w3v=<1!a^rXDk6)s^LFvO>BRJjp##j|Q zZ%5HqDK8judaPE?YyePd7zh*elQpgQ_*n$}oZv#9=D})+UDG_GHou{^obT1CcrT!$ z?)V3!V=4xVMg}3Evhj_JZXMqOG2``ERbjft85L2aE5~VmbHtBX+G|Qm1&UyRj`6Dg z+}Ry#na!EFiy;?ur{0(TGS;1*SUiiEan=YJ+&mCp>||`$PL8x$0-h7tq2OSf<@L1y zf}O!`{ac9@5r@^d{p*PIW6b+GV1h&04KZVKoH*3#!18Y zv&z{`33&CxG2>&Yz-&UuE7+VK4-f@HK>)KSzf(E(M9KUG`0duP{Wf+EKxl*u(#6Sk zFy6z2rnZQ85rY+Y=d`i0pHSPCO>63rFqLowF;bqw@P_emcIV89G5NcQ4wZBW8wWIF zvh8FJY0X`x*5o1e-Tz_gn{Aj9%0EEsxC@az84X6hmpn9L5z3a4Fi0m@U0$`6b)Y-c zb+UUf_&_ZDSW>N75I;M-3g@6V{NV@GGP}5y0{4x{2muw?UUxkAEgYD!*M@Oxvbf<$ zaV7eiuT_J0C6MLpAhY7WTF?4B zFT`@7W6+#%oJy07J1+5kMd3d9=r>+~4-8^ikw87d;eF4?uSS0Q>+^%@@Aiiv@`qjH z+&!q#AB&n`xfU#W4a1$G4&kD@?qvf=|Et6dSX2$D4?dV$uNX z*OOhEXf58X1hl4QqG#fqogqyvDBOywJ*=i&7~iIRE+zDeDyI5kyaL*p?Ns=P4Nl%a zU^PPYJ_Z?)9R{uKZn%$C7 zfS>N4H7P9a_V_M9t)|I-#8qMK_t7>RWL9q+{jk#@2VeV4@H{V_hN7@7|iS*px-zG%p R_U3f=)$`g%YViPYUQxfWtZAa0C+ZD$oFUSO- zV1F13>^B#}3*{4I;RpL(p^CHKsm3MbDk-B5m;eIQ3FPtu`oL^9Bh=}zxdIXZ*f9z; z3_!cUfySD`FK{@SLWL}ASyfo8818u@q7l)IL>9I1yz}gd@ctaJoU(<;GA2|6{^mTp zdvruKHbg;(c1Qvv1%*SAL?Eq{>6VVZo#ncX-T;U+vFVdk(1f=*qC>$%w4^fbS z;iBB7?V-OiJRyXbaJG&eFg-7ET2ZCY+&C3M< z+F4^7%?zS~wuGp#)(Xf$z>G4*nw}*LAm>;c?i)mcCu0G^9GfrJ^qi%}9d0qgeB{Zs zzkcg;$N|`MoJ5fXCE}=LJG7k4JnyZOhq4#FYSmuJjtjdB|F%Yv9Y} z&_i`VO~5Op?n_SU$xI&PF z#*3OpS~dWUPN!K7I~rgYa#XI#xQJJ_HK~2ryhY4Fw_OZI-jW^Kjz`?8e2pil6DhxEZBCmh zeA5^Y(pHZ*9-RA40sxQ&y$6Gz0I$&yP(3Xq3hf8vj0zj&^b#15@xMl8$ApqF82yma$FI7Ch^06u|01Y`h8LqQoJ^Bxc8Y%&X) z2hB!kP-0=j3gYg~LQ?pxalK~lzCA&*5jj`K7IY#go(9&j_RHcabOW_IG3}dcQg!i) ztG5S!qgf0QG?2@F0-7N$1Oxma14po!v#sr_6xuiE3&IwMBd`%X7ST!xrf4>z=WNg4 zZes<)h}D|{HEMMl#rBFp>Ke6ijC{3v@e%RZI&_e63?s^PB!jHZ%RXs6qBp^Z8HLd z-7_yk-qV3ko4>{t0w)mLpIo9Cf^>2M3!zfT_})YN)1*XsWH8yEjuft6hO*L3V!9;>MX-- zw)VEK@eT4K#q~Ip_<0TypXf%7WNqFe=hw}3Pi@LQPbj)qcYIMh&CyydpMqAG^|6~< zp&kH(!8=bboyqebFCgCL{_^)?$hCTEsKLA{tLa+l=8HtB;IWS!4^;wwzlIP18)_Ju zgw>*nVvqzF-~k&&-?hwvbqTN!+B;j7`K<oGB)yzQf(Dl?0K$Zm8SHPbDa}fqdTb7^yQ>@;Psmi3UIy|)x}LE zNx|h)byUeqagO)#di|OC^@!EWx*MnL>Ue~9xaq}BdAUWcp}xcdS5BYTb6=cSiMn-q zVf2)5+96L@$JgJV5!P293|sx`DZkCb@boeXR2`SRMa(SN^oozhM+NcNY+jS;+G<-Q zg@s`zPfskZ3NAe~Pt$Z3p3bM*>b_31d3ok?UigI6nD(;-`ng*(;5rQe+5smNWPlAw zw-OZ*EkF*?gQ>V&+%}YIO1mPUif(#@1L7Lrn_%@SoE|p0k&<`25>5Mut-p z74CZb44pF^zVfE2iy2~YZ)=$8mwS_r{xH@YpFUrl7<+Y5GQ1-{PL7oQ&P~oQG0J2l zub^f1PHIc?NAL7xNy7-M8b14{ayxQTiQFHauF2X{Y9ze_Yj zo3eMxrH^La3{y_tHFx~3^Uu%Yx27)#4lmM&>sEW?y#E;gd!y&#G5hmZFgCT#SE_TiV&GLONK!3|3tGLCcq`NRA^Vz`DC$DW z#S&#_V)7^4!bMwSmGShXzieIy5Jv5(4&;{Q3SFDGPv>K+)(!9#a$j*oFAkNj(n1TX zow4HUEhlt}WC~o%20Z-7d_6@gUZ~7H_9&K%)2JO*cKd0crWYSm5^~XioK*bmd%an+ z<3NhQ4{Dt2dJ~2*yy?vJ{it(oOpDq!)S@3LA7Uz(LcLws*lE}3+gPS~1+8PrSjkee z+z6JK*Z2NMzh+fG7*;Lzl^qo{}-wxxC&AcXmLo=*7tvRk<<6Hb*;n%Gb zZr_Ku&d)(&2o5?CUVLNQq}nP=uYmWFqH zeiiyjUGELKCREV*k@Qpyweo7kpk|g1x%bKV+r!BZD1a+LKm=ZhW6O`c*u968Ee|rm z;A8kOA1XHPo)ohZehv_ye5{I|e001v*|T0rIw(Fln3nCJdUe3Ms@30V8qpskotj5Y z$}cyPua6#SkV@r=lI~Kf50ciHZ@^W53o*#>+X)9CunX2d5-5J;SP;C6Rarw}z zg_NIq&nZJ65*#ub#zr5#w9KCl(w+X4eRF$b=gnpENuxdMl*u6CaXK zYmP-3QzpZ8^k%$0vhi=tEAZ-}4J)-G^7K*Fz1je|=8WZfp%qChfu48|T!Oi5GnqEO zJbmfvmt7a;!m>)%(X%7D&K>r;j{d#@i!w<~75%ayw+t~ZWu)C(l=-gxJC>b+G>VH&HZD%x$3l4A0v>p8i6GnG2u-AjrS z@d$V{R$cz2^463qXS6z{byCC;G0la?*H|Q0%A;0zb1pd4qi^x04T;n4Q2IERO7Q&&HEp7w9-84SqOJ9#`XC4T0Np0zQ_#&o!;J~CG~ zps?=`dNb!(E%T;qbq!jj`~$uI=&IF4k5>=rZJ*l0=nKmstzp*#NvEohg^IQf)6t~X z!noG!l`aHt?Y=)uq-G`zlJ_OQ{UBYwX8Jk%sGVNL=Z+`Gm$Q8Py_kg2PRVN)Fyp_* zh$TOGuIXDY>a_f$IkA0)$N#5Q-FAGwm!MWr;xX~3%r-aq=$$8TZ|UFP6?(6{JJuMg zI1^%Ylu{^r{DfuP4!%>@(iPoAPfbrcN^<#rCi(D2aDreB0Ju9Fb_gX> zmCMD_#L_ru#=StvMHjADaMg&}3blIrvZ{4T);U)hyOBkhiK#qBuXoNlc_NOw7)P-i zvVT@SQP&qeAy9Lo@Wsb>jmvFor+pt$$lu)@C{B$T!FA-Vrp(Hp*=2qQ0MAe>JY~vZ zr=@#2)?|LwPtCt7)>{)tNX%+Zowj>PcF8*cvQI3u_+JyRFUSljjW>@bC9YUC^OD&% zCh@aPD-WGN(m<2pG%MhXD59H12N&;x)vTIh`RFi*y|GT+25$Ff2M@f=?zi1*MX-F> z-rvim?FX8D{w|EVy`MI-tv7pgL?!#vty4Z0JGvrYpFfyVIAuL}CT1z5qf@`kUH{$w zqd)}b>LtzF-pgq|?ID3hm2p3nK1pHr-!GHr4}c5JQPKL;?Uc=##WbJJGgCiLP@W$E z63r1TdzTFzyxV%@=dMJB$}N%S`?ky*uD%c5STddO+x|GE=o7lV@%`)8Pt84k#F?3s zC-&#U=z4Qk7caE-%;vUbp;of<*tc2Gorn7g5a1Ei9Rq$LL*2t2 z&lXeJ3jeB&C~OybKuPfDo^e-|XU-YeHJe7NW|r+H+0>}JZi-Ft;J@B&*7PXs$Y`DD zGgGfl!Y`#JI!thHJ{~lUI=T?Mn48uTweam<7YZ&_TMnt3rkyq1<4s(54B*KBBRJA?UAw>q}T z^=$|rbG%QuugH;J`$(;_hp)+H(mx}bbg4Nl^R0Y<`pey!Uh>+J@n2tBhuaD5=U5;L z#ZFS#biQtWCsQW_7e)C3PIq2ecCl`cC~rO?U7O~ibG@m}P-jhzGHEkMmroLABt}a2 z0f5NxH)w^gZRdFmK5q3)fA;*P$54@t?2nG&ay(h-Ys{M^GkmRY(hK8@H%g@PF?PX$ z0sJ}k* zkfm;!Qsg@s9vY5VnB3ZI&nR1utpmhBaYhCPCMFj~25SJyItL8^ literal 0 HcmV?d00001 diff --git a/doc/index_en.html b/doc/index_en.html new file mode 100644 index 0000000..6198545 --- /dev/null +++ b/doc/index_en.html @@ -0,0 +1,55 @@ + + + +pgpool Administration Tool + + + + + + +
+

Introduction

+ The pgpool Administration Tool is management tool of pgpool. It is possible to monitor, start, stop pgpool and change setting for pgpool. +

Screen

+ The menu is displayed left and the function in each menu is displayed right on Screen of pgpoolAdmin. +

+ After login, the following menus are displayed. +
    +
  • pgpool Status
  • +
  • Node Status
  • +
  • Query Cache
  • +
  • Partitioning Rule
  • +
  • pgpool.conf Setting
  • +
  • pgpoolAdmin Setting
  • +
  • Change Password
  • +
  • Logout
  • +
+

+ There is a help button on the right of the screen. Help can be displayed by clicking it. +

+ + + diff --git a/doc/index_ja.html b/doc/index_ja.html new file mode 100644 index 0000000..1747709 --- /dev/null +++ b/doc/index_ja.html @@ -0,0 +1,55 @@ + + + +pgpool Administration Tool + + + + + + +
+

はじめに

+ pgpool Administration Toolはpgpoolの管理をするためのツールです。GUIベースで、pgpoolの状態監視や起動・停止、pgpool.confの設定を行うことができます。 +

画面構成

+ pgpoolAdminの画面は、左側にメニューが表示され、右側に各メニューでの機能が表示されます。 +

+ ログイン後に表示されるメニューは +
    +
  • pgpoolステータス
  • +
  • ノードステータス
  • +
  • クエリキャッシュ
  • +
  • 分散ルール
  • +
  • pgpool.conf設定
  • +
  • 管理ツール設定
  • +
  • パスワード変更
  • +
  • ログアウト
  • +
+ になります。

+ 画面右上にはヘルプボタンがあります。ヘルプボタンを押すと開いている機能でのヘルプを表示することができます。 +

+ + + diff --git a/doc/ja/changePassword.html b/doc/ja/changePassword.html new file mode 100644 index 0000000..18cb4d4 --- /dev/null +++ b/doc/ja/changePassword.html @@ -0,0 +1,61 @@ + + + +パスワード変更 + + + + + + +
+ +

パスワード変更

+

概要

+ 管理ツールにログインしているユーザのパスワードを変更します。 +

機能

+ それぞれの入力欄に新しいパスワードを2回入力して更新ボタンを押してください。
+ 更新ボタンを押すと、ログイン画面が表示されます。新しいパスワードでログインしてください。 +

+ + + + + + + + + + + + + +
+ +
+

+ + + diff --git a/doc/ja/config.html b/doc/ja/config.html new file mode 100644 index 0000000..3c32b07 --- /dev/null +++ b/doc/ja/config.html @@ -0,0 +1,123 @@ + + + +管理ツール設定 + + + + + + +
+ +

管理ツール設定

+

概要

+ + pgpool管理ツールの設定を表示・変更することができます。 +

+

機能

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ (string)表示したい言語を選択します。「auto」を選択した場合には、ブラウザで設定した言語が優先的に表示されます。
+ (string)pgpool.confへのパスをフルパスで指定します。
+ + (string)pcp.confへのパスをフルパスで指定します。
+ (string)pgpoolへのパスをフルパスで指定します。
+ (string)
クエリキャッシュクリア(-c)起動時にクエリキャッシュをクリアします。
非デーモンモード(-n)非デーモンモードでpgpoolを起動します。pgpoolのログを管理ツールで表示するには、この項目をオンにする必要があります。
デバッグモード(-d)デバッグモードで起動します。デバッグログが必要な場合にはオンにします。
停止モード(-m)pgpoolのすべてのプロセスを終了します。pgpool停止ボタンを押すと、終了オプションが表示されます。停止モードとして +
    + +
  • smart
  • +
  • fast
  • +
  • immediate
  • +
+ を選択することができます。終了すると、pgpoolステータスが「pgpool停止」となり、起動用画面が表示されます。
pgpool.conf(-f)pgpoolの起動時に指定するpgpool.confです。pgpool.confのパスは「pgpool.confファイル」で指定した値になります。
pcp.conf(-F)pgpoolの起動時に指定するpcp.confです。pgpool.confのパスは「パスワードファイル」で指定した値になります。
+ + (string)非デーモンモードで起動した場合に使用するログファイルをフルパスで指定します。設定しない場合にはpgpool.confのlogdirで指定してあるパスにpgpool.logファイルを作成します。
+ (string)PCPコマンドがインストールしてあるディレクトリを指定します。
+ (string)PCPコマンドがインストールしてあるディレクトリを指定します。
+ (string)PCPコマンドを実行するホスト名を指定します。通常は「localhost」になります。
+ (integer) + + ステータスの更新間隔を秒単位で指定します。0を指定した場合には自動更新しません。 +
+

最後に更新ボタンを押して更新します。

+
+ + diff --git a/doc/ja/errorCode.html b/doc/ja/errorCode.html new file mode 100644 index 0000000..db234ff --- /dev/null +++ b/doc/ja/errorCode.html @@ -0,0 +1,163 @@ + + + +エラーコード + + + + + + + +
+

エラーコード

+

共通

+ + + + + + + + + + + + + + + +
pgmgt.conf.phpが見つかりませんpgmgt.conf.phpファイルがconfディレクトリにあるか確認してください。また、適切なアクセス権があるか確認してください。
メッセージカタログが見つかりませんメッセージカタログファイルがlangディレクトリにあるか確認してください。
pcpコマンドエラーが発生しましたPcpコマンドが設定メニューで指定した場所にあるか確認してください。
pgpool.confが見つかりませんpgpool.confが設定メニューで指定した場所にあるか確認してください。また、pgpool.confに適切なアクセス権があるか確認してください。
テンプレートファイルが見つかりません表示用テンプレートファイルがtemplateディレクトリにあるか確認してください。
ヘルプが見つかりませんヘルプファイルがtemplate/help以下にあるか確認してください。
pgmgt.conf.phpのパラメータが足りませんpgmgt.conf.phpにパラメータが指定してあるか確認してください。
pcp_timeoutがpgpool.confで見つかりませんpcp_timeoutがpgpool.confで指定してあるか確認してください。
pcp_portがpgpool.confで見つかりませんpcp_portがpgpool.confで指定してあるか確認してください。
+ +

pgpoolステータス

+ + + + + + + + + + + + + + + + + +
pcpコマンドエラーが発生しましたpcpコマンドの呼び出しに失敗した場合に表示されます。Pcpコマンドが設定メニューで指定した場所にあるか確認してください。
pcp_node_countコマンドでエラーが発生しましたpcp_node_countの実行エラーです。pcp_node_countが正常に実行できるか確認してください。
pcp_node_infoコマンドでエラーが発生しましたpcp_node_infoの実行エラーです。pcp_node_infotが正常に実行できるか確認してください。
pcp_proc_countコマンドでエラーが発生しましたpcp_proc_countの実行エラーです。pcp_proc_countが正常に実行できるか確認してください。
pcp_proc_infoコマンドでエラーが発生しましたpcp_proc_infoの実行エラーです。pcp_proc_infoが正常に実行できるか確認してください。
pcp_stop_pgpoolコマンドでエラーが発生しましたpcp_stop_pgpoolの実行エラーです。pcp_stop_pgpoolが正常に実行できるか確認してください。
pcp_detach_nodeコマンドでエラーが発生しましたpcp_detach_nodeの実行エラーです。pcp_detach_nodeが正常に実行できるか確認してください。
指定したpgpool.confが見つかりませんpgpool.confが設定メニューで指定した場所にあるか確認してください。また、pgpool.confに適切なアクセス権があるか確認してください。
指定したpcp.confが見つかりませんpcp.confが設定メニューで指定した場所にあるか確認してください。またpcp.confに適切なアクセス権があるか確認してください。
pcp_attach_nodeコマンドでエラーが発生しましたpcp_attach_nodeの実行エラーです。pcp_detach_nodeが正常に実行できるか確認してください。
ログファイルが見つかりませんpgpoolログファイルが設定メニューで指定した場所にあるか確認してください。また指定したログファイルに適切なアクセス権があるか確認してください。指定しない場合には、pgpool.confのlogdirで指定したディレクトリにpgpool.logというファイル名で作成されます。
+ +

ノードステータス

+ + + + + + + +
詳細情報が取得できませんノードにpsqlコマンドで接続できるか確認してください。
+ +

クエリキャッシュ

+ + + + + + + + + +
データベースに接続できませんpgpool.confのシステムDBで指定したデータベースに接続できるか確認してください。
レコード取得時にエラーが発生しましたクエリキャッシュテーブルのレコードが正常に取得できるか確認してください。
pgpool.confが見つかりませんpcp.confが設定メニューで指定した場所にあるか確認してください。またpcp.confに適切なアクセス権があるか確認してください。
+ +

分散ルール

+ + + + + + + + + + + + +
データベースに接続できませんpgpool.confのシステムDBで指定したデータベースに接続できるか確認してください。
レコード取得時にエラーが発生しましたシステムDBテーブルのレコードが正常に取得できるか確認してください。
レコード登録時にエラーが発生しましたシステムDBテーブルにレコードが正常に挿入できるか確認してください。
レコード更新時にエラーが発生しましたシステムDBテーブルのレコードが正常に更新できるか確認してください。
レコード削除時にエラーが発生しましたシステムDBテーブルのレコードが正常に削除できるか確認してください。
pgpool.confが見つかりませんpcp.confが設定メニューで指定した場所にあるか確認してください。またpcp.confに適切なアクセス権があるか確認してください。
+ +

pgpool.conf設定

+ + + + + + + + + + +
pgpool.confが見つかりませんpcp.confが設定メニューで指定した場所にあるか確認してください。またpcp.confに適切なアクセス権があるか確認してください。
pgpool.confから読み込みができませんpgpool.confに読み込みアクセス権があるか確認してください。
pgpool.confに書き込みができませんpgpool.confに書き込みアクセス権があるか確認してください。
pgpool.confに必要なパラメータがありませんpgpool.confにパラメータがすべてあるか確認してください。
+ +

管理ツール設定

+ + + + + + + + + +
pgmgt.conf.phpが見つかりませんpgmgt.conf.phpファイルがconfディレクトリにあるか確認してください。また、適切なアクセス権があるか確認してください。
pgmgt.conf.phpから読み込みができませんpgmgt.conf.phpファイルに読み込みアクセス権があるか確認してください。
pgmgt.conf.phpに書き込みができませんpgmgt.conf.phpファイルに書き込みアクセス権があるか確認してください。
+ +

パスワード変更

+ + + + + + + + + +
pcp.confが見つかりませんpcp.confが設定メニューで指定した場所にあるか確認してください。
pcp.confに読み込みができませんpcp.confファイルに読み込みアクセス権があるか確認してください。
pcp.confに書き込みができませんpcp.confファイルに書き込みアクセス権があるか確認してください。
+ +

ログアウト

+ + + + + + + +
pcp.confが見つかりませんpcp.confが設定メニューで指定した場所にあるか確認してください。
+ + +
+ + + diff --git a/doc/ja/images/1.jpg b/doc/ja/images/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..474f072998125aeb0782320b12e7ddff6797b798 GIT binary patch literal 32627 zcmeFZcT|(xwl^HRVnsldqFX?aF1^E6>2*^=Xn`$N2%Q9^pKU=15(K0}kWK;#8<0Q} zib|6bkc5B`0@4DZ1nC`K_PzIKf<*PMib)T#rA1qeTF_Hp~SQ3OE5c4FCYtk0BP|%0pK_XE%WB$7AHg5e@JX zaQ5`+(`QbfJ#*&lg|o-si|5atJ%8~M8{0)TwoBJ8{o8fz(v_>%u3ovs!NJMN!NJGN z%gcA?AJ>U<=gwWebou7BYd3kg*tvNAk?}uG9DM|^pFbga%Iwq$cECyY6Q|fu9JKS9PMte@`Q+(y$1VH= zXTN@zBZXphRz`r6>)b>0C;iC-H>|k>l4O5-WKk^`q>%3{Cl5Ve^(pZAW6K&LZD6Y6 z%@-ejviOc=^}og$3lC43-MwH_UE3LR^2LR` zOEM1Xzp>FxH%!Znjo8UOi9H0Xdx0`bKpoM*&5}%ZbARKA8L!NkHD0#58xu_Vm>|w4 zPu%aLrY(L+t~~-2#h$mG4lB7;3AQNRBqnO)MZ)-SgKK6Mw;VL2vv@+x~?z2A^35&JFhADGR;i8Wg_aoHtKHO3nopZYk@I_7&J0$BI+SG`CaxlN z8)=PZW~Re&eybs}RihogFqe@odmzulDc1IqoxCT{bzQslg1`w0 z_@gH;T^hbzPkze$S!kGDt5wM75!Q+vYwh-|Ho`9f^oY6ozS#UrcCoR!EY?Xm-}=M$ zEJ)y~xcDPnxnr(s#48?c+*2-~YXV&|_|>{7rn-H5jIM2_sP#kvhyj^m+jdePtp2Kv zff#KjHQ&H$!sN=IzQV6~O(4X{u^`!D2RsYJcCL}?U#ugT8favUuyyg}m(^XA6WI~p zVKeU25?Hx5OAX>%?+H_OiO$h#7Ra|b(qS2IirXSx+KEhi%M?s32QUDlmY?U;VJU5@B|n7 zpmsMxS>Ub_E54alDVmmw-z1*C;9VyaI3QFut=9>J3v&5u_rS~Nn62yEU{NxqFy4|z zD5pi_mqi&GewpVZJcwfoxWs5kv|T37G2WTJ!@5~Dx}&kmE;0AkL{k~PrPuz`7@isl zOnln#xWObhEUiBauN61-P~CCERMSOpAVG_g zT=P4r0bUF*6)x`6U&~6e!jd9u5xQYnL2d(Szrg?+dY`loF045D903f<7sD!#07@W4 zjn>S*h*InkAmkpu=ADCvjnJUt9suCndxoz;!|IHN(AK#}6%`~DRmGvvO2;7p60P5& z7h7lHE|}R=c{MmkyHBkz`}hCU;{W32#Jdx*r+<-)y`^(XL&(t9>cRtu^OrzhuBQNH z$Y(NtUx&X_h-aL+WdQ1aZ&lzaeA|Le!es@laoayjXjV+>O0cBkn-e;|4jexlenBU( z%d}Q}?iaTXev*m$&8{T=dU1UT8`{KBM!`a5guAo|Uh)JblnLSl3+1~>EJxcHk}r(W z6UZuG-n2z*JBzv5Y<+3_G+!SYi_&>k)!DzJUoeM%;MEA9ohD;+8BX;@*sp0DCcMo) zXCB+s7Z5Fu`%3q`#X=dGCjRBe7D^?`?zQGPh+iUEN?K2W6qJ>L?-q0zWb~9jzuO(T zxn>0MCgw7*Fz6yqGq=*a5#V;Fzg)3m&{98Dcr84{E{0Q?2%H2&Ns6xUZ*{Yih z|9kMu><`r;`rjs9hR}urIH1~Z!RY+ z+5Bi(vrTpJz5P;kFRnR~Je%v#@OD=NnVf}8Rt*+FYqvUUSe_FTDQ3SC?<{b?-Q72f zAius+XE*Kcu7b{U|4oS<^5ymm5@2gIX+j5fn3~SBlLn^?XP9G15@qqv(E@Xjh_2>< zw$^|uSF%!f-Rtj+?F!awbo2{{Y^#nIU!vK_Fu7bv?$_o%7rVAYE0u_-qQLf9v)?F4 zgRz}-#lTcbny&@|&)$>7HLxMEe_et5l4TES#!O^1OjUJrUgyc|!c%&we7Z+cgIxWZ zd?d~@oFBu7F<50pz{lPt5adN3;iKPm$4*X}g-DW~MO}v}tv(*9d=Zf<wzH}5z61d&6FrC?$7?qo&mU0cdQ1;dUMdq%X zy4Gb?WNhTAxpAR_O&x+&@XVYq?$Wo3!%AW0=#{vZsSOoR&X8yPnua9Di%4}f{3?;A z7&YXRI_!dm1eSv-$-0yE(wPCDOvmoP6HG>vCnuF{DdXLjHBG0>E9I>TJjQoRUY|jg zhly3iHlB~oi|d|#w7aiE2xv|WUcle6oU!F?T*6(n;|}?XD(1HL6~vu{ct#4rVPEfzqK-?1hStlxgNBA9z*E!_fTkU^ z(!5HWM-1tmIRbFeH4@+4uIY@7V(Y{UejZVomdj4bVTB;iJzVAJ4&a|am%5;%y-IYZ%4G?UGN)y6id zjB8d8`zn>cvEGZY8#x{xnNJumPml^I{~BvxAYPz)fn5W z=eirHJD}qvt7)w=9>^!t0ajb8cIU78WY3Fj5&%cJRvEbbcy1p)FNp4xbL^Y|TB}r+ z=_y#=d6ent{zD8xiVWC*6lYsP?AR;5n z$$KR8dx0|!oQd-OQKDUhsLYi5uz8bV>>LAguZ`~N-5wdQ;c`+5-=?ou3(rV=-?H9` zw`-W1s5Ob9^N%2E)731g>>dfSFYPAcxAfrNdD;add|NdB|w z@b!&RqF-gRksXcb22&+fB>nE1km$g(MJ(ovE4=bTLsQ^ee2HWUaCw52i4&e@XeI(J zfxUH*S_Q(;#iXP`Qfj%>{dlSia=;5(YCHb+*<8k^v-={)cXyGIj9AMaO)gag=^mpS z3SZV?6EC3_nwux=n?f>XYlp)??{lSO>)Z&kU4#aHNs>3?^>1o9KmQlT=bzw9?~U0m zT)X>L_T{~Ir<7k7Ap|UXMgMlZs`#~j{jF@q%j%}L5?(TvHT!3Yv?;NncMcH9`7#QZ9Pf!Rb_z~Y+ z-Gy1>yb~Naw2F@Ho7Cllx{)Gp#a8`*!{l;Bwt+S+wqHwBt6&;wgwSaGv|rjq6MivF z1lekUDs}C1YrCiG+GLaV>dfOr%b3n4W<_0%y^`=;z+SGHU0X%WQLC8oy}b zH<*9Fl4qN9a*N#}A;n;nJnf~5v~BA1tRIjvoNiC`Z@*RiiEr9hm1n)9a4ls~pj)bX zX${W}=GL7h-vXKmCUJE#+T?$Q8OyK*~!VAk|A?Y>mBYJQs1nM70Fal><5o=h}Zx4XQpx%#)8gYEFVEd2Vx>(r07 z++Za$2@O-t9o#pZ$~a$P1-cN0K&OEonsX%eceQ;YS*?jKfW3_^9D#MlCQmk<*l*MN zUJWS0(*%G8mR14^t?V&uls|iXFmRn6~gR8R#ktJgF10U-t!iW5IIp z2C2Nrwh*YJPvgN4J0L;j(8>|eOPqp&yYEIRoB&-fklfG|u~mVmdtfqZzvKJRGY1X@%O`^i4=5F-nJ#^sjXd=SrHQT~5juiN3r-rd zS8ZoZ7eHDP&-8S0|oG+fwGzBJklR+4>Y;z%o~Ab+~7Z8ysdN;?Y?2t%)zLp@i&KikE% zBOBb-H4?;$qzfdbUb+`|y80a$`4#WTIPWZIB5}zr-D*gB=fdkz1($|N***dJQsP$< zUnP9N%FI$dmFv2y?MxuS;5K?zrJIaKhpn))>xat8$=OB{Khs|6$p*q;*!h_<1Q$$9 z|3J#7$o(bIG1V_As-vr3RcKUOQ7`t^1C-eqN+^W022>Z6xQ zzha+|;=WojBIR9ZR+`ovb77&tT|>q8B2V6T(KZv9WS+L<=Qas~hU|`r=rA~(p?cAm ztpaH^Bo->*VW+dnQ;Nc%k~`Bg3rmsPugMLdnO^TEFzN};K2H)C!zUOH=C!NVuWvpL zQp)EUP(QqA-7T4!IWGP94Y_HrAc?@6hP7!L+l1QREC1?yJ(WP(oFAy6d=%-b6Gzd75cYV`um>W2`U zmAG~X?i#ltO|ZGShViPEl|IuWwQENxaPoMp;Aj+6TU+PutZ@&?ZN2XZ@VWV*;|S2D zegrrIcognxTs;EVds}ZW11(YqyR1?>jjJ^E9>MWkbBpX}A3$}4E%$C^wJIN8 zG!a)J2|`kDNy=lAnsl^3b?%ozIy&|uCF(C60fO>p@nh(c!tBZ`NKjYRpc$vv2FNWT z8DHV$@-@NqrP9Qtpy|kyOUiMX16h-squ4F8?`^v(Ahn;6x~QlgtnDc^QV;V__FP-DA_TSU@FhU^WM zE{qGz$AKsQYX(;J>f;wULDSpOx8zil*T>lOnW8E&Ne5mbk9kw$`{6j<%CTG#twq7e z>bdVCu&+B$nCf5u$$I=3$+N!*pE(_St?P8lPaY>v0n+?Wsp=c4{@l)XIt%`Dx|zPw zedMpVz_TY!df?ZQsVAQQCc#~*$fo_dUsQnw{1kz-IE5~Mj(+=76297*3j8^3noG8Q zdQ~JN?qzGK#QX+G2|dGHyH*&EI7@ml!@u79)@OXukS*)A?^)E;dY8YhBXK zUo+D$X`HFtx(C(@<2TZHe8;2i%cy^(gc#NLV!n&-XkxZaR zs@HV$0za4j5SXH|i%GrRlm|;EAO_2$I~~!|J6%3ne^g}AWrG4|wrAx^J)bK6}`EWA|z4 z46%HqE3B@Z=_K+Uq=9$hNQDY}%STxjBEDvBE-{{bg0zNn2jP4V&kU&Imp=@(cZs0O zoy+t*61bw-RPZ%Vm>)5DRq$~0M#vEWtgz`3)XZmn=TfM%x4U6>u9Y+0+W z0M=$0k*n2J!l4wvy?eJor$GammiWrjK@k^^abU-ZbFZH&M90@uYP0Y302KDxX2uW!hnPrQ&EIQ<@ z7*qMfsg_r(pt&pUo;}vsTi-VXJoP>>c=!SGTbIGTPrWBs14!jpr)g zhYO42pJo~5cK@Qtdzth6lJmpcDDJLIKFp_xu8dz@@)ha^nkvG9(CTA1)tPmkeqDbj zF)^2&)2S|Ep+5v(IXtfVJhwV~&;mIeI=5$?Ilq@OpO)pgA2x2d@)?Uxo^eB_d3=&{ z$&;v3v6)_w%O_b`_8ml4$v};oH@S^XYOW%!)}j@FKhKFtQ3D?xTupF~x?(2FB)^V$ zYRh30>)+eB#+jMUM@<<&b{M>JXbbqA;y5QZYyuL`+5RbvpyWk)?3k>?$2H<_tonc) z;I)!w52eZAX~mz$VO3DmExRkmE6>r|#b^TQj5wj%c(+bN_TWumW4mQ#OZ#@hVM$ef zrCLcy7~PCr>PD~4bZn>v!oVAWGN=Fw;ZGcEa*?_*JTTCwo}gS_Xl5o9 zSTiX%)_1X@&n30et6$t9{&_*s#bT~=7mol6bd6H3Bf#axs~IAyL4i7GBa*xEgBB-Y z<;eQUFvmM)6R&f}=OZkp8kdh9{iBuP>D+(Jmnu_%CbkdGIo}Rse0iep++eM!SaR9R zMEK>JaPC>leAgp@w?abr6w(1Tiwp(Jud3Q2>znk@_+BSfG}BT)7NHv?r;hG?Onk~P z^%GPe6`T2}WEgBKFi3TnDvMjG zNFKchUDmd46#TN-Ux8liHI1pvd#|&?TcE1M;o7@{%w@e2ThqxxV8;z$KI)-p@I6l7 zDA{=#goo12)x(=Z#hv+VrbY~5morluNirO893_ZL;nE-uY@Rl#s_SsqJGtmVW0vEv z-J1n5ETTY#%K($2f@;p>Y!Z|V3Brf)KKe?2C_a{$Z0qVJE??!MpP!~w$EgR))>Ms} zGLo)XVjcm`hS=)U`VS>b0uNmMzgm&MFa|q?RQfFiw3#cBYRSgX$#w>CpMEC%+c-yO ztu?C@+95UI=YV3RuKhA(5@DFhdy#Ks2dsH19DOe#ApsUP@X5L3$NIZ!ADpo4y6@{=?Xr#uOn!i-t%Erq3I73a7Wf{u$2(DW<)K01C@lqU?h6+C`; zv9|=Hv4l&PEy>#BsSluyvMS7r)$Z2cM>)Po;l5S73n(oMER<}=WzzAb<~rsfNW;T#)t$d= z$%+8WYu7qCeS$_Z*_YbbNiA|I*ZZONoTU~u-t?wMAEJpQV|e67+Vp(HlN4Ns;a2Tp zxM(r*{&XA0YpOg@3g{re&egQwTkPW14-r^^7>uNbrsVhjvr_%nY0gUk0Q&tC;Lq*i zvuAAD#saUmd+ZEc5+9%aMG$F5w%RYc_bSpEToUCn`2_|J*=1^! zhP4@@VLoBeB`G6Lwj6<8&xah;Q@WQ#Z^7Ts?5eKzLf%fIB9OE%sqg#;hy?;y7^mf~!R70@=s(MVU-YKg~vBG%N&{ZSP)jYuz$}$!!@KBD7zAB=WbCQYRfNJ zq$|kB5L@8S1$NP;n5#LvAh$|P6K12}3So?LC{+p(sh~A_Tz?%go>G7-*4l7d5Fab4 z2w8qGwg0GeajccV+sdU+|n_ zQk@eM?`UG?7}0mrN?xU}wtzJti__^|em8bl`lG#LgYNyAZ(9-j@$cG|B_(+Jc+2BE zsX!}g?=BqWq`oR8Yb2Q38@NLS8BlMu>f9yC$tk4!F83)dVA3us*iYGs`8c9@S|QD@ zqX})}&KbikG@s$Z)Y^TWA^Wt@+Y$7?{UJ%-G>95kds>ZfO^pfPNJAilisz3}mb&@f zdJn>J(H16rui2nS+D+H1-d<7><-GVi?q(r*JxT@4S+Q@BIMG3gd7kd+OYg2L4u^#- zPrFa`Yyf?dcsczE9=%Lg-72S7+K40)q?!Q<8}`>Z0n0G>Kd$sbE3r`&HxFA%4W34zag(u+jym8ey=(0oA0*6FjM6$3InR$l~;h0GN z?FBIbw_ezgi(7wCm$l*g22_9pbqn^}QQIixTnC~vRQVA9kYt?clX?Twc@H5`V+LN~ za*SdX7hM`+j(V{U&1Wy>s#Nu`_B3_Q%V52=>bB_6WxAIc)=4Dkt{Y^{1ZtE`JCqMP zCjOEu?k@UO7t^o6w5HKNRmr>wx2Z@FFtBSc%Dg2glE_?Zm?@| zS9rf-z9@hz>W&5pQvID3WPo1I%_;A7b97f>!oZMJr_il5*QGEPCGT{LZJwqwG)nre zioiRDZYU;{Tuihkf1JA;6exx#fn*Rte4B;087g1U)F5;AW8r1zw&hSTc9P+=TR7HXXg>F}fwx;C-&;e{TI%UZ#&!uojosh0jDK*#%v zk}@}^{{GFRdv*b}wqT3c450)U%JEKu7AtM2Z!bU@=t7}vPTJWHo$=Kc%gBUu3)+g` ztilK3+4a zr@1&^{*IdcNeA@sWbLDSGUxB#hfl_lUvj$0HDLD3bj%;b)ARkm7Q35Y%b!02e2~6Y z>~J8&X+0~QzOO9|&zadr%{>x&=oTpOedezGL$~x|zG5%87&Y)CD4t8bE0$gHu{anm zEZRSJmw%)VSPSAS;vcOoE=v$en4=n-+sv%5=ciJZ9*0XF0eqjNCiQAt1t(}|+?#o0 zhj9{Ntzq*KTO80WR;+$qokRSKM57~k09cCA3 zMXP%&352WpIkdK~KEk7kGL+B3O!dDQ{?&)a0``~K{Pm{%r5ygh(1$nwr6zv0_Alfs z;_sTc=I`41<}TO2EBr5O7a#mXwR4k3!OfnE(}@rMQSfTM1HFy5nc}OLVf%8492&XZ zPQMg+fx(g*|3lw@?)ke7coK1*!IJ$4_-^OlOP*sK9)o#-|B3wE?3I55)gv=Z>G%KL zT)ZD0Z@1q}Vd*9Qh zV(+&p@6To@{&=+3_Db)!r&!#Q$0+-h&wqg82lP;C^psCi-pGLO`IWQ@k$+=wE;>Xi z#1T$&A1w4&cdIw}?$^#$x#c?xGh4tlVjdj~j>jeS;_JxI zcvp_AUXI*eu>OM<+?4Wh{Ea{}Jr7BZuC!|ws=dw9gV&MsPDMR3k-0E4V$!6fI@k7Rlonw;*3`N5nO%@G!fOE?W`68-r0i6Q27fRz(Y!H-u{i>? z^|4#>N!>`$1Rv9-jDJR6S$=$HyLM74acfUkGcpoHWFLR{9ov59a3M-idOxzz&yv;B z^x_kEE-GvJLcQqWc1VnhhV)~l_y2MCLZpZ^r}o*GExL*SdnZ#a?8=Yq=XuMopUH+9 zkG*IR{$9E_F?I==@_z+E{_VA>+NxmD4Fn`-aO&z~AbT`9TIH;nLH5@goRz=a-YFF~Q(CoW*WKQP8}^>_F8l7W z`F`w8RidZu$E8%hONRrz{b@2w;>!Hhg}>#Eyaa#Z{Iar0crM(d?T2iYd7>kYD z!RgW9mk)0Os~p`x1<^3zNQ4rL12-eG@iRs>04@vrG{2dcMlDEv|Mc{jeWBdTFoerzTfkk(tb#iDWFU@haVTNeL@~h> z(|7Ii+Zovc3w0)=qZsAp{(0M0FHcWnFZ*KSp+TA?oB|~cxy6wdDGCq{CS<(fQH-iR zKQL|usOR5oISk2G53JS?DyPZubJSWKAJ7nfT}O#wdj(U@9V9hu>D1sPpJ|be>E*s3 zOlsU;jo`@6&hwTMLlI!_p*@dc3VP+#JEjK;?$sf9f7a)oo4x1!9fM0O>k_OTuKmLb zS|UNuJxLb5@w+@y_)F$^ClQ$&fzZ$*uYhRYZA}|^Oq~LrRTs5gjh{{SGzwYca{MVU zS7JlP#Ae!!Z>gxF+(+Xv^KNd}0JYot+aOXwC#h_aEDUtSoqU!p;1Mm%3WKfkL>Et1 z;)dfR7lQ14AwhKCgB7=+J|S}2GDGV2F}o(*#A8bv*02{usNS;8%v^3VZe;<6)h~=* z9O;p3RK>KhcfnC`mTjJ8tGOAsJs|1yt1QZ^T3u1QdW(t$4PNNx*W@0LZA(0CZl9IMIt5o8C@o^{4mzKbJI>g0AVE6d#QS-M9L1M4~aXyn2ndbBm4b>eUuc&l*HLb*F%ZCKRWBPoEb)?ijzN+Kc z(_AOjwGZkTI!~91*WO^07#CF$NW~ck>1Wl?^se`(NnVM{X=KxFY7Q}>R#5zYIBjU5 zka7*h{eB^(O3Nj?L4E|$oAgdUEeXX1mCr4D8Vd5&rt@9(Y7SPvkb!0vZ=DkcjZT|u z+N8);ANFG?aA-j~(eYabB6Pe{Vg5<+Ze#coVJ<$GvS4|6g!VQMn2W$59F72mW z-ZL4Yh2SWonA*$ee6;T~5sycukLDb>xVRn!fefWyksZ4y=PLZ-f&$bPOJa(c^Sbs+ zGYQRc(;4GeBnKJB@J>DWVMuVX?*yGu>)hIk)j$@K@_60B8tZ^-g9+eT$KC3T z{l;(5pt$O4Zxj;X-~hos{m&f(e&k1&`$ zTric(@)j|!dN?C^msI>)!j>V-v;R3q`_9>R&q8&1HEeBEuW>`YPj1QI5T3) zL=6^Gfn0BcyPiFLg2b~*+So<94Lef>1M%#Y;EU6e!Hr2WT$m8nI58iYKEJVyTd1DF z(W-mKVK`mC*R<@&3YRpMuhHtO)xX$73NcF$=xZSmQRl1@&uRs*u>M`w=oDOH+sJj>;D^tvUH`cuR)`^ zmA4ioy{0p~87mkq(PwGA3#|xG_UKpAcvQG27g%C8w_BbGm2yl$j0rPw3n&&S?~0>G zKO`!}kQ90O{s19D2S;~ET5Q|H(DR~>0O3({)1)u!qcy?EmF~^G59>?Ck)O}cTjVB7 zd}%ixT{NEmQsn^8BoMfDktv0SJA`k95a4vcz5;<~i)pV?4OSd{H_lrM^ThS{GQ83H*A7KJdf8;gR%?Zn#LK?po5Z#?I=Hkba-7O>ws6!^6RRG(}^jqIt5W8 zeVSyq??@7LjMCnz$&*YAQ)`v4gqbjgb$3%s;aMdm_mOjB+t-VK$n?bBNx4m=Q7QTI zDVSEBD*3H~2bl{6&6oqllE&R2s2h2pNwR|OQzK&&U#&y2M>#&t-NT36g{)lvGJjD$ zL}k@U%9;Qv_-gskTn;%rl36Q}P>tVKQ!+_lD())}rS4Y4JN-$HR15G1jlHHX`Abrgaf zr{+&I(f9QOPAn^bN=tYa$w>YZ3UZTCATCe_#b_I_vv=)qY&!Ld`f;#xC>e(jhaLfP z%jO3Uq>8s}eP5-MDEYn>t)$u<_YpH)_7`oiF&dCPa*6L_OHKy})iN8sT~y&=sc=qR~t8q@2A5!-tBiGKhtT z1BvMo+Sa{BX|@ge)5Ot4I3-}IM$d3}w&ju>LHoJL{3!mq`tTZ5F9z1e#Zy)$G5KM6 z%bi%>TgkO6CH*=!*Irhee#6=qmsuj-ZD)~3XSHuP{BO5R2rIwcmbel$F9XqD>88m@ zVH^$WOOoMT=zG1rs+364$r>2}4IVC-?iF|w`j)b^$Cpe5C+o)F@T*o{Q!z~o%P6S` zltl!St${dX{`%YA885Gya&L$kPr;XgU{4OQO8Zj=liqQ;``LKr(3dI7fizbnuE&1a zK8qG)k6Z{@ju%IU3cst1mhnHfyGt8&Y&=;V!QGa&_dX-V!s7Bc%@XY~fjYcL0QbQs zxlF3>eS{Uz7!;srFUO%amHzJQF~f4VbedlkiZGmwiOq~FR_X}{PS>S*%E!f~+lAq0 zaK*s%bGz16CLkBv#RNOzPMqCSeX>iw=$fXSmdR$DuXSFi@*JDL1pQajDtMi zuH6>cu2uWEYRy+(SMFUMU_RAJa@!h5mAlmq`-SkO_s-?{dMFi0=I-UHfz$)3WOQ;` zT7fmmiKFzrA>1p=dO)`ok~4S5oX;fvY$N{waGp6QUlUu+j73D5P`EaL9j#G?vHiFO zY;19gQ8nFd*gfh#j+q_OrbLNi0ijLD6D+Is{>L^mZmz7N!g83#V^QH;^fa~2dX9|L z0VaGIt(I~##R}hCjX6AahyXy9ts& z#VF}6jc3676qpq`u|+8SPTB}_~@YHUCnuwp`owj(feXg#fC9O<#9i(j$LW; zfeJR8lTGnh9x)A7PG+KtsPjUmYHTfspgZLrWB)<((lX071ZFU zKKenr?eGQx*)rXYsKLa|Zu1fe)@nUrvXqn*>D4{yBS0B>1z$~{(7e1s%5Lm4-U$k6 z%5tUa-&_XlphJB@PU1Mchkn3?EoR<_yp?cn4q2dUzggid8%B-ajeFC&cRPAC_ z(!>wEy^&a`O<^0>B+{^3h=Ruhd#&4#Pf$TI>JnrXK^m!#rd~6^TwBsyv+&Ruq_>zR zG?CJl^Y(m->|ISfxd_fGv&l*rzPjGvTg(0<)^tgY$t6ir>V}0G@`hCfMEpjwa=(zZ zphLnD;F+%vTRoJ!#>k?RD5+6i?&MT>i1igooKVh&mVz4MKYVa8ldSTQ%7z&9$q{Pd z$5RdY@$Rl^y1F96FkVY`b@946rY?ik9b}&}lUnn!(=7&6Q(YwG3MUyBM*EJAljNFT zHTe*}6iX3m=NY9NA;%ltO%qGhuai>od!);^mn8)yDeO?~S&|Lb=dhJRUa(r#7_mEy zD)atbPz8-(gM^9a#oyuLWscUsR8hHesC2~_1`{l7(S86Cjo{a!F?Dk8eK?*2@$6xV zDG??sAvMkCXG>PIlUV(r)yt2If3xlS5JYic=i7JOc{*%LeT^D4UIaP}L(d;`$=PRb zM#q#ct(WvljT}d7rbO1+cM=44h$G`K*FfR%-AFFF&)Z=is&O&8sAg!heW=qZAj-W% zBDr-AgRw#7XJZFQ6+xC2=)~4;qZfqHD)|f?#EyRKwe94PF*kQSvtQw{jL=c>A&8(Rqw*4KVu%*faoy#`QMoP=?Y?2gZJ{dSw{gWD(m{eM zz1i9K3ks3>o5;nAI+D4BM8fWRSs&+8X{M`jkP?PhJ$~kscyQ{$v=ir+r{VhdaifHZ z*_XsuO@8s=tW{dUx6F+0v=rZPPm&szc-44$JF=T&wOPd88^(bvC`hWbEl%LNg|r2W zC)G2pygF04{5vlBn?B!He8*(A)%4693@u7dDHAs^Z*X)&?NzdX_{Kw*!k9v3DK%CDQsp)CHtme?A0(^;hv}Uxe}4kVsn|o<-nY`K zPeH4EK`XrD>5tJ64o&I^fdHn*&zwxUY)dY)#wQvAL+%L^U% z6BSZ+hu2}SdMrwZnY z;^>2YI0Vm|>NgEb-u6;S~fa zT#8ZP1f_RPLCdGG_36B)7lYDQsoJmD>a?ug4&JiuOw_#g^}{pI$m(AL?U^FQn97+b z`iSUE#JeBeW0HZ*LL@|pFsk>HOd>WbtnrM*gm1M(v9NdL>ilGMWMQjQYugGeEr6dc zEFhJ^Vj9xyT}Bf38uRw>y2m{2>_7$@;$Gty5+Gb(FtqwuVsW)Swzr|a}3Y_daFec?Hulu?H!ZazGyZu4=i^ znN*lHTP*_18VJ4xg?chop+4E(u}GWOaeI>C3iY`rM&fCEB}*#?n=MPHcdUQ;q<@q3Fjuc`vk5PQ`z6N*UW+b6*Fc8xm1RfL&kS z*5mD&BR~Q@#ECu@5*j(aBfB?xxak;11Yz|U22v3d3RpXZQpSj~C;gsLF@%|SM*iLW zK*F0q{ba$E%3QomhxqFEC75#fLZs+YhxNSAfn)TAy{Oyr+fN7L*Zha*nj}#u7z*x| zBV@Sc9Q!>m&WASB;kD(Nl1hegzeZ}DleGNC@b(RB^m>w788iZKFR45`2Xu%$&Gg^0 zk1$@dy|G?>@Oo*zwm#BC&3SQXMaiqp)3}C%b7reK(J0&Z2YJt=Ga}C=ISg1nv)2Ps z?WkS#8ov}o62slI>F?UF5q>QoQdHa^*hy}IT zJ_&m}8c46*#FF&!jrHcO^wwsC*?jbIG*01RcK>#Cj=JPn;*K0NI&OAE`B-67SSo_! z9qIJ-)!i#z$2ADvo~n$;JSDVMp&#OUJBd@WUPNzsJF-V8HR^?evKk- zji}z{mOti@IL0W_JzV|J-HiRf^jQlL7{f+)uwl%m$7H3qMap2yMqYh?|5sM+niq4=X^E6J6JPQn8z#r7 z8@j>548ZqHYirV2gJa>1V+A%MxN(|(4I^o#&vaMW>AIkx{#d8^c5Q&|t(e@4F}dEy zM|g~|3_>oa{|aAJTIHGILX|>GJq;yo8q^7Dx>I5DVf>&DbdxdJ{|pxS`qOM6$Pb>i zSY_NhbgIY(q+wJ_E&n}XN64ktZ+=~DF67aa-(~325ZGq({JKJPXko}wgu4OJu!`Ub z9@MFwg}3gRH)knzC|uk2a8lS@0DbcbX1kagQ_wxUgn)iCQO_hk&K#Z_X#`)K`I;5c z&nH2m$m70c2eOu?W9kkMyP?oUQaL6H*+{5u4qkAfW5Z|DabdwT(^%K?nWkTA2ZEKw zRJ^8q%QE}>Br4Lfo=YHtfWIc#3sRvnmRDzQW&24+Zm2CVo0WD=w3Tk!oqar9inxE?LG`PjwCIKpsK~X5Lb|7kR(t zB`!UB$_X|U=oi-{wHY$Ow?4K$TIG$Tb_ZvJA7|~t*;KyJX;5IUM6)sXN7v*vDon}EYY!UVuQx9-^A{lu7w#g=bY??Js0&H=bv2O zZl?JkjC1%R!?BZoxMipg}5CC7%AIN(!8@QXyuMgUeO>k_C40^C2*9$x8{bSe%2~k zmL_+jwKsyA` zqI;zVMVfbWG&095C|Ovokyj#X$_HYyMvOkV{cbMw&nt+3i44jA{3raM_feoMSgpLj zqFvYpmNZDvn$6?qp#m|nSzuY(*0I-NAD};Wt;b`}jVbuJl z4qH*YNOd#_@`zdCFJ4d!bai*ab`F1uZ+LC zoxdGGyJ6!|FQ=E*BD5Su;dwAjnh=w5j4s@UeQn#Y*=HIS~mTq%1p>0GYo~) zWimg>r{kCz7-7}sHWDh|t*)&K<y>V&F+3n30X6+Au@8S7dtk&+E{1nLd z@540%a`d>g2WlllpFY)ilz9+2Bz_I~cW%G*1q<7JWMw;@J4-_5BNvUUexoZkUAdgC z@mS+qrpwvXAjx;sYZN_CLsY42vclUA(+tIX&MH7Rs3%1LdLxbyO3jF6fL>}zb}xQi z?yT4cm+pjLy1V1+nm~jE5J^A@Ag8oa*4Ts{1Z0PVfB^yo1dl~_0t86dML>2?5l}>-H{RR-yw9ok zJm=o$-skrB=gd1Z&u`|PUp_PQ&Nrba32vRki>$)jA8XaQ8-WfuCC37~aV7{=K`ohd zvX(_|)wUlSN~-DzWQhFva8Db2L0L-bgF+bFTU_})&OTAyvs*ya8OS_z?4a+iR-oGa z)bmyT@-A>StNGo5s9^f@Hr}o8$JnA-k41x-w{<_dymx=LpTIY-pH<_EGhpMO%lv*< z_jy}%Bi>ioj6QUX#Jd`hV_Ht~XH9?KbIUjN>!+o)PLkt8OT;;keOJBf z=2m`fv(Y|Ol3~N3Q!t83d>13wuadoxb%(fgZ`JZDRB-g=Y&Y8!W2U7cn7H9p?i-?=h#aqSS-Mo$IMH@J^g7MQ zu`?#uf?TZfOAkBDy#YZfJg6~$0EY3Nsj68!r_(thV_D3}2HHlIfiX|B=mlZm4tMD+ zX<-F95wWB2)xr>5_I7mDsBRl?Z@p z&3beRmFW$}Chu@Zlej&Y*E_ zP|8hBT?G!cx}2cyVBh`W*j4S?bc}ur``))8!KHm8Z>x~I_=gkzLHg$q)}66YZj&ho zIBtBvZST;t1`vEpRg0qfKxBJKJnXj9?h9Uaf9NH!_6;99q6CHZVQp8=H*B z!H|@(qhyN8%-fPaW22nC6_B$p>|DsD^odUH`dOt3jN^7e36&>&90$%Xa?_km7_d$A zsh}u`(5m5wy@OZHKYzt3ZxTQtJxfVSjZYl7qs*IxsN~e(MxHkP=9Spm9bN5Emdq*= z3jge})ANVz)iqsZM{LkIouG7I;XwDciJXWlP_{p6?xvvmr0NXqrijR3@*~VD)&B;R zY<}O^&J;Nr46W}(kU5P*Zp$U&te429uSUP4>URJpp>P{>Zk4%_)wXuJ3B~yO58G(9 zKwNE-pYxdC3$dl)^U}cAqyvssX{~xIs~dv|-ROa`IZ)&GDk@*y`y$I?r^RxIUa`Z` zzxn3s&`A;IO}?*^KasbNZgGvAveb9uWB5T&xvlQKH~zKt>MB^<}3 zegq-KFHE$Cda`q?FgI_t`pmWhiKM`1N0d5XKu_Lu*+El{{75PQbT0MB&IenB>)A7S z7LTGF^zD`M@E~!RriYo;i`>$}Afivnyx_uW*mY0rDNn7GGhl$!=hEcXnz44?2f*}jMqMqb0_u1x4^Prov$q(F>{pAhk8j{*WCwtS#wF@sfd*Jm5P6foO#_6{0WCmFc(yR>(6M0^g}Z3Trw zSpZp!D1eJ|ccKg(>RY)YLa_)lXkVfdak~6^XGRZ^L`Epr!S<|JKNLPk;czqMdrT90;^sXqIYp4C(Kh3M(gMZ z-Y<~LS|!hXHwqRT;C{@|Hys^nJy(6T%(LMOL;MY1Mf^|Ry%#%zzx00mg6tvxr7)Yz zTsb6+c_MByIGk@rP#c!dm;R%+R=fLPm`14ER{NRw&G^*I#CXToytQBbVMVbdPJ#>X)l&GAB6xY5g)%&S>W#M#NW@eenFS!?Fv zlfP;CTXc-@Z|oBEc5I8o%*rexQ)b?0Wu`{V8T`IykaeSZw0Y~l)uv`)$(Kr9baFx; zg~iSX6~p=1H=uFWJiiAe5&g7H&h*drd_1PKx=dTnw@yv^--($y)?2 zl6qL@>>De9^ZOdnY z-5csUKYYSi{bQ3qT`{~coo;>=82E6*|4ecC5HJYxbY^FGaU})o#5YsEpG3!`cfMMx zTAH^3d-f(OhFemIgHG)CA(X3e#k$<#ASIE!F2r+xVQ6sU&&#iiuLCZV3; zB#7igw5f8oo^7l&NdaU$^E1Puj_gw8h9Ko6;{kq0maBV*l3>~lh3e7u2}emgPn;F` zMKOzfv_NuY_BHc5MF)J`x?gz_o4CE5-Skkz^PBG7*C~QGDNFK!%$l+5x#g8Z^~^~- z$GKozQr&!pH%d@PW=X3uo4z#bAxzWH)VS(amLgWloX|Mc($RQLHvmG;YNZq7(!DOFN+j=es;y~CVa^Mi5tzW2iS^+T{U;Wt zg8p%De@gD32GI;s;Ckn}kK3%e*lry~(XHnbq_7>A8I_MW;3|2uj0CJ~fe**ujz~i(0CFT&1nM3!XnJ3B2rt!z1nXQzS;hPB{FtJ&OpM@RmKHZud@eQ|*uzk4gM3d*5Tg2Xo z6FKnWtve1l!S8!yuMJxK_VDOL=C@LXMBibrS};2k6D2pOHzhVY6mhO@W~e(G+(Vbqz^g!`l+{ERlTtE?H6MiXa^|YQ+siy{QVh{vWI{}W zRd=JZhLKc-NvdlSxv-F_`9cozDTDWqZNB8^ePr;NZN#yk-bmkia6WvHQX4P+$l#w$ z_)|CfAKiACf&A^Ce2|B`B3u8~4ixl=@x*Ob=Ec zU`=7PRvQTxW&L4h;P`>DOs~m)^MSDfBqS9wcC#*6LQ;tzu&igSrTGJv-TeSx!B2FR zCGe&CRDxLRHERK@62#K@z-#|I8v#1c`oGZh7|m_}wKH~=5CBEPBMEnMt;P(Wp$*Z= z4S&ESF+}%~?>~i>|3d`(S2O+2&6ebFh&t`{QJfLoM-eL9DH|tp&r$E zAj9RnykOu+wfoVb@WWt$RV%u4DP3zgfq0;#JIgojr>dZb-@YnR@XLt!+3V*e@4VY0 zUouvJJxl{6E7g^iU7Lq1rsq!P#l1ZS73Jzngs?NHB~fZNa&3d~&#hT(AQi1y%Uak!*H)fPA_6mQzna)we++Hb6u`^`W zFlbDD=Ufhrofe}W)NL_$2f$|TcK4He4?c$C6JTR`ZgO)MXYJQ)0Icf{ zcGxyEsn~QHjv>9aQ5yDcp&Zve1a$&kn#&(EJT~~sxbvAr>XZTA>yJdf4>wM|7e^$N z+vUbCyZbBvO6>)K{CJu~(JPS8T5+58^m}BmOTL>y3tRWw%#d}rW@mWc``3BNf7GOQ z%-K!_u7IC?9~0?=LgDsDXP}TV8S1CB?xo1)ds_9U@!U%0SX7A)1WPwdVXuQtEJ$sS zJQ;=PObc?6X+fMV$EL`x?3X~mZ0JSNrFd+ex(bnje2kLIW1>M9)A$PW zK&m$Z)w8(qU3%`3X1O>9-jm6qf`R@Ek$^7l;H=Y!k0D9rLj|e_JaMf99y@=(RkP2_neEjCnT2zYt9C8 zIl2jZyp*LmPPvkQD4_W$34zhvv*+{e16pL#h}}_Mr41bwteJ&Ghe(CB_}4R# zV=@^42Rk$S*mn1H0jaT*l>p<_qk00LM(6l|^_2>s=o>g^mqEvs=uRrW;VVFuD%~}Y zE9f5baWJu!#L8)Cv+w1l)NqoxAa~WYSu{RI1iitK?RFS)2FBs5p!x)(R1%CsaO8q~Do-H?5qhzV&lUmCjY} zN@&_^_9YRLf;x>vE<(?D-nafNJp5QS>RMs4+ajRZpjO7Q67ZlTJFsTrBFjJ4;n?vX z_Ut+S8uLz%)b;MrcG*_(O!FBz>W0)sjrzHmQofz3A2oR4(RX{kh8|A43Na?yV_#F=)o1o{J5=h@ z&~)sb#4~b5C+y>5q^aleVy+j4f|6p@1tlJPga~701S~AP`c-}SQuT{083X-Qd~vF5 zezFAudP8Uk#WPfVSvggqcf}3;l7FiapL338{_TT*SMK)!ixQAfnAvuikbCK2d%wDO z+HKE!AM*YS56%t@5F1$GkSn5g&U@>0Mtdne;lQA9c7vLnW^cPqi**Z`V1;qW>B&6J zXeMNYF(L`_P53%-?JX*Nuf6?mc)TJ4t0EFvkH+}iee?I|Ee52bLveK87+kfchZ#lN zzNOhZJji5sR^vKLc|vU&1AwAJ{xdi4jM99b5kTl3Dd~`UnbVH~`sx;HaBHb0#z3e9#a-xF+pwK2}+uobmr&R8WOJ^5mH zMX(&v>QVb-mB6|-v#*9&ARBX$Yi{F3T`c!ZB%*GW!yueTsOwmIOZ%j8$bhRJ+0wav z`6Oukt=tBK&TuI&1z}rgMWA91U2fNTK#?Kc*nq=*{`c24Ug@u@)H&s}7KN*XA;6{f zR~jyRNre2adH_1~o!8Lrq97h0-R>6Cjyax9qX;sHD{>NN_mybjKGLqtmg>`DGBd z<+OOi>k>W7MB103JvihduuX8C0UCTino(l}Y)$YFCk0K$8ogv)DejBZNn`q#8FA1D zXm*w|>rFWWi|*nW$ssHbt;O zJM$a)6n!R)W1TJzjz^zJdbj_1QP$TlRLUL7Yk(LH8$_3~)zKg3jrO_DH*+Fc1mV1; z`zqU%m@qftcLZuk9qjD@y0G&DgRlz)=!Z(Z41`je3N@*N`l<&s7yZolAGUSijf>;Y zZy2r>VTiKoIF(*dX*$T2gH|o4h){L2x4g*L7sMJ)lm5?du(ORcJVJ9N*9tY$Hkf(9 zV34RJtw~m*1>N!@IAtmd$b!~Wq?NVmx6()ht`~GTnxquhDVGYgmAK*fv#!*#xu*|* zeK2OsmIFy2E2zz#^G;sxQY9bi?;dg665`@6N|Yh*Gi9)++iY37pnE-3bOQ8(N9lBw z{S{Q{?N{{^0EFCd|FxDleWb8In*X4s*!Jpno}O}Op*z{ftp#6bUMOVCtf19FSr*={ zd91}Y6_(!J8x*%~`!(A$C%dVRtQ6ORzI>KSj;RzsyL|>$=Co`C)4F53b33%O_fIQv5@f)~@}_ zFsL+IZk^jx=4HiJbXKK$KPHbQpIFsJE};5N%bOppk~?n3Y(S9l)cdfvlR75gLy&7w z2fGZqzw6>F!fR=T&}l?YkW3%C@62t@Wk6`Y-+3pIJw@Fp?n(h>FZV-HVp zQ<_e_R^Kd^?L(S{=UEsAz!klM_b;lF@<7k}8+F<`n=I{g(wrA#T;M1f6Z?4>vvEbl zEpJhXo?X@@vT=Rs0gg$icgKgI2x-`ufA#3=9xlHevsj#*(4Y1j9saaDSQm|_56rfm zG#OCs&*oKG+C~*>u^_CpryUA0k;eLA{vRsW2GqzoF}9CL1KRAzY|iiKD`>JGj5m@)v!N1;8t z=u~V|!aky)3;M1V`_v0(ze*Wq@=7M$U5!|IKG;PdpT(X<(SVCc1k>jT@yTOZlVEq( zWH-(&IL`%icZfgCGHYjY>xwj^S#7|}aSK)>5SGg7;1%5qHefM0_2CD+Y0D~-4q z!4uDXPdoTqWsC%`{(n59qS39G*N2`YafbZ{Yi7{oX^mkp4HT>xq?mxKh|akzSoo0R s4+(Bk3IE9`ul7nUqVA6}u@g}fu)m7@)nk7-%wO~6|NG}6=l79+0}GKyxc~qF literal 0 HcmV?d00001 diff --git a/doc/ja/images/2.jpg b/doc/ja/images/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b433b53910c4a834fece8face4a83ebc4d814b3 GIT binary patch literal 36208 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%0D;GdWT5ZB(X$H@Y4tbUD^;%H%y|49T7d;@#slG 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 WD4<1Bf>WL2--%2Aw{;KsgZ&>t(nO>H literal 0 HcmV?d00001 diff --git a/doc/ja/images/3.jpg b/doc/ja/images/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d81b724be8795d8743ad777b1f545d517846712 GIT binary patch literal 58708 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 literal 0 HcmV?d00001 diff --git a/doc/ja/images/4.jpg b/doc/ja/images/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7553e9b82b75edba2f72e220aa2e51e08b8a82a4 GIT binary patch literal 33665 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 yyx8S=T@f>(q<@ub7CIJWjr2G##ag(Y5 literal 0 HcmV?d00001 diff --git a/doc/ja/images/ng.gif b/doc/ja/images/ng.gif new file mode 100644 index 0000000000000000000000000000000000000000..b10aca7fc5b0d7c4f34893c43515377bdba080b7 GIT binary patch literal 174 zcmZ?wbhEHb6k-r!*v!E2ABfJJ`5zGQf5V3V3JU*$V8Md_#>W2z1pX%^{NKO-zk>q< z5>Wif!oUvHr2`TJnZdvky}@Ip5MzUiX*DOeT9@|&))On3Iy4tHY&o@7q)d6A2-mZp z77ngYekSVdOiC;X6b(04HvTD++2M7wkYP^A*5*Ts&yJqr(@zk2tR)c?z;mb|YaK^! NzoUWB1#3YDYXD1eK(7D* literal 0 HcmV?d00001 diff --git a/doc/ja/images/nodestatus.jpg b/doc/ja/images/nodestatus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3064d2ab5cc3afa84df4dec1eb12913e4be25d4 GIT binary patch literal 55983 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ⅅaZ7&O+zHWpn62hz-sjOK5kakj=ApAlE~u?=#FNZcL6U?w%8Rxr!)ck z40k;{C(GHEykEE`#eS%x(4E1P6`y3>GJ{8yuy)n zg|Yh@N?j;Lf=E0cxJV+Tuti0+?}XXN*9a9KxqzT}An4lJgUX6&eO)2w@BZkk>}7rL z=4pqJ1xG6)xzfl73?3}qgT}d)i%8mqRzf&=JVPzLM&qJp*&7VNwI~Gx(7SSSBi(o@ zye0|*sPkRDLgOGxvgKFF;XivXDjRtr{)QvRC`GYSVSOEwr{N@IX<3KEqkxmYu{)|~ z;$wHBBkDZ^<(F$rpSe9kLf6;dQ_-cvpH>T&bIDNKK?UqpeNGsiCOi(~Pi^HhoVEqF zrIwQ*0-cWQ$KKZ06p5BRTX?i_VfZYiCDi4~P1u*!lWVVvJ`1U4TNtkCS}>+itql9# ztEYQlCu8!x?F)m*tFTiMUmfCm=ucyF*mu)?)lpUjg3v^Mlu@+iJd!d*HL=xi*W-&f z1D}rtAJY7lO(Rbzu!UkhKx9~4YEu1#axfpf8xOxcKwz{Q8@Z^(CpN1hSr|VP=TuTE zLm>91Ix(23L_o|MvMsr6Zpgw-nP-qfA9@K+}m)9-_tLXB^e zh}*yR%M3{A7|7X+xPmT8Ky7wStRV7Z)546lRO%JpP_E?oi#fH;Z kqJ0u}=QO~C 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 HP(J+&FcsKW literal 0 HcmV?d00001 diff --git a/doc/ja/images/ok.gif b/doc/ja/images/ok.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee85496a79d9b395f4e2a546b86fee8c39289cde GIT binary patch literal 172 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 literal 0 HcmV?d00001 diff --git a/doc/ja/images/restart.jpg b/doc/ja/images/restart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9706803171f0fcbe3ad501841ea2f7edb170027 GIT binary patch literal 34865 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 literal 0 HcmV?d00001 diff --git a/doc/ja/images/start.jpg b/doc/ja/images/start.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd9a81e5b26fbc972a280a2747f5d881ab79ba54 GIT binary patch literal 23579 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 I((k5!1F>`RR{#J2 literal 0 HcmV?d00001 diff --git a/doc/ja/images/status.jpg b/doc/ja/images/status.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a59a087946516b8f17eb374bd6f0e14575f0c6e GIT binary patch literal 71805 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 + + +pgpool管理ツールインストール方法 + + + + + + +
+

pgpool管理ツールインストール方法

+

はじめに

+pgpool管理ツールのインストールを始める前に、pgpoolが正常にインストールでき、稼動することを確認してください。

+pgpool管理ツールをインストールする場合、少なくとも以下のソフトウェアがpgpoolが稼動するサーバにインストールされていて、正常に動く必要があります。 +

    +
  • HTTPサーバ(Apache)
  • +
  • PHP4.4.2以上
  • +
  • pgpool
  • +
+インストールを始める前に次の準備をしてください。 + +
    +
  • HTTPサーバ、PHP、pgpoolを適切にセットアップする。
  • +
  • ブラウザのクッキーとJavaScriptを有効にする。
  • +
+

前提条件

+ここでは以下のように設定してあることを前提として説明します。 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
/var/www/html
apache
/var/www/html/admin-tool
/usr/local/bin/pgpool
/usr/local/bin/pcp_attach_node
/usr/local/bin/pcp_detach_node
/usr/local/bin/pcp_node_count
/usr/local/bin/pcp_node_info
/usr/local/bin/pcp_proc_count
/usr/local/bin/pcp_proc_info
/usr/local/bin/pcp_stop_pgpool
/usr/local/bin/pcp_systemdb_info
/usr/local/bin/pg_md5
/usr/local/etc/pgpool.conf
/usr/local/etc/pcp.conf
+

インストール

+以下に手順をおって、管理ツールのインストールを説明します。 +
    +
  1. セットアップしたpgpoolおよびpcpツールをApachユーザから実行できるようにアクセス権を設定します。
  2. +
    + + +
    cd /usr/local/bin
    ls
    +
    + 以下のファイルがあることを確認します。 +  
      +
    • pgpool
    • +
    • pcp_attach_node
    • +
    • pcp_detach_node
    • +
    • pcp_node_count
    • +
    • pcp_node_info
    • +
    • pcp_proc_count
    • +
    • pcp_proc_info
    • +
    • pcp_stop_pgpool
    • +
    • pcp_systemdb_info
    • +
    • pg_md5
    • +
    +
    + + +
    chmod 755 /usr/local/bin/pgpool
    chmod 755 /usr/local/bin/pcp_*
    +
    +
  3. +pcp.confファイルにログインユーザの登録を行います。最初にパスワードをmd5化した文字列を取得します。 +
    + +
    pg_md5 パスワード文字列
    +
    +次に、取得した文字列をpcp.confに +

    ユーザ名:md5化したパスワード

    +の行を追加します。 +
  4. +
  5. +管理ツールプログラムadmin-tool.tar.gzをApacheのhtmlディレクトリ以下に展開します。
    +
    + + + + + +
    mv admin-tool.tar.gz /tmp
    cd /tmp
    tar xzf admin-tool.tar.gz
    mv admin-tool /var/www/html
    rm admin-tool.tar.gz
    +
    +
  6. +
  7. +ファイルを確認します。 +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    find /var/www/html/admin-tool -print
    /var/www/html/admin-tool
    /var/www/html/admin-tool/install
    /var/www/html/admin-tool/install/finish.php
    /var/www/html/admin-tool/install/defaultParameter.php
    /var/www/html/admin-tool/install/setLang.php
    /var/www/html/admin-tool/install/checkDirectory.php
    /var/www/html/admin-tool/install/images
    /var/www/html/admin-tool/install/images/Thumbs.db
    /var/www/html/admin-tool/install/images/ng.gif
    /var/www/html/admin-tool/install/images/ok.gif
    /var/www/html/admin-tool/install/index.php
    /var/www/html/admin-tool/install/checkParameter.php
    /var/www/html/admin-tool/install/lang
    /var/www/html/admin-tool/install/lang/ja.lang.php
    /var/www/html/admin-tool/install/lang/en.lang.php
    /var/www/html/admin-tool/libs
    /var/www/html/admin-tool/libs/Smarty.class.php
    /var/www/html/admin-tool/libs/plugins
    /var/www/html/admin-tool/libs/plugins/function.counter.php
    /var/www/html/admin-tool/libs/plugins/modifier.escape.php
    /var/www/html/admin-tool/libs/plugins/modifier.replace.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_characters.php
    /var/www/html/admin-tool/libs/plugins/block.textformat.php
    /var/www/html/admin-tool/libs/plugins/modifier.spacify.php
    /var/www/html/admin-tool/libs/plugins/modifier.date_format.php
    /var/www/html/admin-tool/libs/plugins/modifier.regex_replace.php
    /var/www/html/admin-tool/libs/plugins/modifier.lower.php
    /var/www/html/admin-tool/libs/plugins/modifier.debug_print_var.php
    /var/www/html/admin-tool/libs/plugins/function.eval.php
    /var/www/html/admin-tool/libs/plugins/function.html_image.php
    /var/www/html/admin-tool/libs/plugins/modifier.nl2br.php
    /var/www/html/admin-tool/libs/plugins/modifier.strip_tags.php
    /var/www/html/admin-tool/libs/plugins/outputfilter.trimwhitespace.php
    /var/www/html/admin-tool/libs/plugins/function.assign_debug_info.php
    /var/www/html/admin-tool/libs/plugins/modifier.strip.php
    /var/www/html/admin-tool/libs/plugins/shared.make_timestamp.php
    /var/www/html/admin-tool/libs/plugins/function.html_select_date.php
    /var/www/html/admin-tool/libs/plugins/modifier.truncate.php
    /var/www/html/admin-tool/libs/plugins/compiler.assign.php
    /var/www/html/admin-tool/libs/plugins/modifier.capitalize.php
    /var/www/html/admin-tool/libs/plugins/modifier.wordwrap.php
    /var/www/html/admin-tool/libs/plugins/modifier.indent.php
    /var/www/html/admin-tool/libs/plugins/function.html_checkboxes.php
    /var/www/html/admin-tool/libs/plugins/shared.escape_special_chars.php
    /var/www/html/admin-tool/libs/plugins/function.cycle.php
    /var/www/html/admin-tool/libs/plugins/function.math.php
    /var/www/html/admin-tool/libs/plugins/modifier.cat.php
    /var/www/html/admin-tool/libs/plugins/function.html_select_time.php
    /var/www/html/admin-tool/libs/plugins/function.html_options.php
    /var/www/html/admin-tool/libs/plugins/function.fetch.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_paragraphs.php
    /var/www/html/admin-tool/libs/plugins/function.config_load.php
    /var/www/html/admin-tool/libs/plugins/function.popup_init.php
    /var/www/html/admin-tool/libs/plugins/modifier.string_format.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_sentences.php
    /var/www/html/admin-tool/libs/plugins/modifier.count_words.php
    /var/www/html/admin-tool/libs/plugins/modifier.default.php
    /var/www/html/admin-tool/libs/plugins/function.popup.php
    /var/www/html/admin-tool/libs/plugins/modifier.upper.php
    /var/www/html/admin-tool/libs/plugins/function.html_table.php
    /var/www/html/admin-tool/libs/plugins/function.debug.php
    /var/www/html/admin-tool/libs/plugins/function.html_radios.php
    /var/www/html/admin-tool/libs/plugins/function.mailto.php
    /var/www/html/admin-tool/libs/internals
    /var/www/html/admin-tool/libs/internals/core.write_cache_file.php
    /var/www/html/admin-tool/libs/internals/core.display_debug_console.php
    /var/www/html/admin-tool/libs/internals/core.load_resource_plugin.php
    /var/www/html/admin-tool/libs/internals/core.is_trusted.php
    /var/www/html/admin-tool/libs/internals/core.is_secure.php
    /var/www/html/admin-tool/libs/internals/core.assemble_plugin_filepath.php
    /var/www/html/admin-tool/libs/internals/core.get_microtime.php
    /var/www/html/admin-tool/libs/internals/core.load_plugins.php
    /var/www/html/admin-tool/libs/internals/core.rmdir.php
    /var/www/html/admin-tool/libs/internals/core.smarty_include_php.php
    /var/www/html/admin-tool/libs/internals/core.process_compiled_include.php
    /var/www/html/admin-tool/libs/internals/core.run_insert_handler.php
    /var/www/html/admin-tool/libs/internals/core.process_cached_inserts.php
    /var/www/html/admin-tool/libs/internals/core.write_file.php
    /var/www/html/admin-tool/libs/internals/core.write_compiled_include.php
    /var/www/html/admin-tool/libs/internals/core.rm_auto.php
    /var/www/html/admin-tool/libs/internals/core.get_include_path.php
    /var/www/html/admin-tool/libs/internals/core.write_compiled_resource.php
    /var/www/html/admin-tool/libs/internals/core.get_php_resource.php
    /var/www/html/admin-tool/libs/internals/core.read_cache_file.php
    /var/www/html/admin-tool/libs/internals/core.create_dir_structure.php
    /var/www/html/admin-tool/libs/internals/core.assign_smarty_interface.php
    /var/www/html/admin-tool/libs/Smarty_Compiler.class.php
    /var/www/html/admin-tool/libs/debug.tpl
    /var/www/html/admin-tool/libs/Config_File.class.php
    /var/www/html/admin-tool/nodeServerStatus.php
    /var/www/html/admin-tool/login.php
    /var/www/html/admin-tool/innerSystemCatalog.php
    /var/www/html/admin-tool/definePgpoolConfParam.php
    /var/www/html/admin-tool/systemDb.php
    /var/www/html/admin-tool/setLang.php
    /var/www/html/admin-tool/queryCache.php
    /var/www/html/admin-tool/pgconfig.php
    /var/www/html/admin-tool/common.php
    /var/www/html/admin-tool/status.php
    /var/www/html/admin-tool/config.php
    /var/www/html/admin-tool/command.php
    /var/www/html/admin-tool/templates
    /var/www/html/admin-tool/templates/pgmgtNotFound.tpl
    /var/www/html/admin-tool/templates/changePassword.tpl
    /var/www/html/admin-tool/templates/systemDb.tpl
    /var/www/html/admin-tool/templates/pleaseInstall.tpl
    /var/www/html/admin-tool/templates/nodeStatus.tpl
    /var/www/html/admin-tool/templates/login.tpl
    /var/www/html/admin-tool/templates/queryCache.tpl
    /var/www/html/admin-tool/templates/procInfo.tpl
    /var/www/html/admin-tool/templates/status.tpl
    /var/www/html/admin-tool/templates/innerSystemCatalog.tpl
    /var/www/html/admin-tool/templates/pgconfig.tpl
    /var/www/html/admin-tool/templates/help
    /var/www/html/admin-tool/templates/help/ja
    /var/www/html/admin-tool/templates/help/ja/changePassword.tpl
    /var/www/html/admin-tool/templates/help/ja/systemDb.tpl
    /var/www/html/admin-tool/templates/help/ja/login.tpl
    /var/www/html/admin-tool/templates/help/ja/queryCache.tpl
    /var/www/html/admin-tool/templates/help/ja/status.tpl
    /var/www/html/admin-tool/templates/help/ja/pgconfig.tpl
    /var/www/html/admin-tool/templates/help/ja/config.tpl
    /var/www/html/admin-tool/templates/help/ja/nodeServerStatus.tpl
    /var/www/html/admin-tool/templates/help/en
    /var/www/html/admin-tool/templates/help/en/changePassword.tpl
    /var/www/html/admin-tool/templates/help/en/systemDb.tpl
    /var/www/html/admin-tool/templates/help/en/login.tpl
    /var/www/html/admin-tool/templates/help/en/queryCache.tpl
    /var/www/html/admin-tool/templates/help/en/status.tpl
    /var/www/html/admin-tool/templates/help/en/pgconfig.tpl
    /var/www/html/admin-tool/templates/help/en/config.tpl
    /var/www/html/admin-tool/templates/help/en/nodeServerStatus.tpl
    /var/www/html/admin-tool/templates/footer.tpl
    /var/www/html/admin-tool/templates/innerError.tpl
    /var/www/html/admin-tool/templates/innerNodeServerStatus.tpl
    /var/www/html/admin-tool/templates/menu.tpl
    /var/www/html/admin-tool/templates/config.tpl
    /var/www/html/admin-tool/templates/nodeServerStatus.tpl
    /var/www/html/admin-tool/templates/error.tpl
    /var/www/html/admin-tool/screen.css
    /var/www/html/admin-tool/conf
    /var/www/html/admin-tool/conf/pgmgt.conf.php
    /var/www/html/admin-tool/innerNodeServerStatus.php
    /var/www/html/admin-tool/changePassword.php
    /var/www/html/admin-tool/images
    /var/www/html/admin-tool/images/question.gif
    /var/www/html/admin-tool/images/background.gif
    /var/www/html/admin-tool/images/descending.gif
    /var/www/html/admin-tool/images/ascending.gif
    /var/www/html/admin-tool/images/elephant.gif
    /var/www/html/admin-tool/images/Thumbs.db
    /var/www/html/admin-tool/images/spacer.gif
    /var/www/html/admin-tool/images/logo.gif
    /var/www/html/admin-tool/images/back.gif
    /var/www/html/admin-tool/images/marker.gif
    /var/www/html/admin-tool/images/sea.jpg
    /var/www/html/admin-tool/images/turtle.gif
    /var/www/html/admin-tool/index.php
    /var/www/html/admin-tool/templates_c
    /var/www/html/admin-tool/lang
    /var/www/html/admin-tool/lang/ja.lang.php
    /var/www/html/admin-tool/lang/en.lang.php
    /var/www/html/admin-tool/procInfo.php
    /var/www/html/admin-tool/nodeStatus.php
    /var/www/html/admin-tool/help.php
    /var/www/html/admin-tool/logout.php
    +
  8. +
  9. +Webブラウザからinstall/phpinfo.phpにアクセスします。php_mstringとphp_pgsqlの機能が有効であることを確認します。 +
      +
    • 「Multibyte Support」が「enabled」になっている。
    • +
    • 「PostgreSQL Support」が「enabled」になっている。
    • +
    +

    これらの項目が「enabled」になっていない場合には、PHPの設定を再度確認してください。

    +
  10. +
  11. +展開したディレクトリ内にある「templates_c」ディレクトリ、「conf/pgmgt.conf.php」ファイルに書き込みアクセス権を設定します。 +
    + + +
    cd /var/www/html/admin-tool
    chmod 777 templates_c
    +
    +
  12. +
  13. +管理ツール設定ファイルにApacheプロセスのユーザに書き込み権限を与えます。 +
    + + + +
    cd /var/www/html/admin-tool/conf
    chown apache pgmgt.conf.php
    chmod 644 pgmgt.conf.php
    +
    +
  14. +
  15. +pgpoolの設定ファイルであるpgpool.confファイルとpcp.confファイルにapacheプロセスユーザからの書き込み権限を設定します。 +
    + + + + + +
    cd /usr/local/etc
    chown apache pgpool.conf
    chmod 644 pgpool.conf
    chown apache pcp.conf
    chmod 644 pcp.conf
    +
    +
  16. +
  17. + PHPのマルチバイトとPostgreSQLライブラリがインストールされているか確認します。ブラウザから +

    http://インストールしたサーバ/admin-tool/install/phpinfo.php

    + にアクセスします。PHPの設定情報が表示されるかどうか確認します。 + それらの中にMultibyte SupportとPostgreSQL Supportがenabledになっているか確認します。なっていない場合には、PHPの設定を再度確認してください。 +
  18. +
  19. +インストーラにアクセスします。URLは +

    http://インストールしたサーバ/admin-tool/install/index.php

    +になります。 +
  20. +
  21. +表示言語を選択します。 +

    +
  22. +
  23. +ディレクトリのアクセス権の確認を行います。右側にが表示された場合には、適切に設定されています。「次へ」ボタンをクリックしてください。が表示された場合には適切に設定されてませんので、エラーメッセージを確認し修正して「チェック」ボタンを押してください。 +

    +
  24. +
  25. +管理ツールの設定を行います。右側にが表示された場合には、適切に設定されています。「次へ」ボタンをクリックしてください。が表示された場合には適切に設定されてませんので、エラーメッセージを確認し修正して「チェック」ボタンを押してください。 +

    +

    +
    pgpool.conf
    +
    pgpool.confファイルのパスをフルパスで指定します。
    +
    パスワードファイル
    +
    pcp.confファイルのパスをフルパスで指定します。
    +
    pgpoolコマンド
    +
    pgpoolファイルのパスをフルパスで指定します。
    +
    PCPディレクトリ
    +
    PCPコマンド群がインストールしてあるディレクトリをフルパスで指定します。
    +
    PCPホスト名
    +
    PCPコマンドがインストールしてあるホスト名を指定します。
    +
    更新間隔
    +
    pgpoolのステータスを自動更新する間隔を秒単位で設定します。0の場合には自動更新しません。
    +
    +

    +

    +
  26. +
  27. +これで管理ツールのインストールは終了しました。最後に「install」ディレクトリを削除して終了です。 +

    +
    + +
    rm -Rf /var/www/html/admin-tool/install
    +
    +
  28. +
+

ログイン画面の表示

+インストール完了画面で「トップ画面へ移動」をクリックすると管理ツールのログイン画面が表示されます。インストール手順2で設定したユーザ名とパスワードを入力してログインします。 +
+ + + \ No newline at end of file diff --git a/doc/ja/login.html b/doc/ja/login.html new file mode 100644 index 0000000..7f2c1e8 --- /dev/null +++ b/doc/ja/login.html @@ -0,0 +1,63 @@ + + + +ログイン + + + + + + +
+ +

ログイン

+

概要

+

ログインページです。pcp.confに設定したユーザ名およびパスワードを入力してください。
+ 認証が成功すると、ステータス画面が表示されます。失敗した場合には、再度ログイン画面が表示されます。 +

機能

+ + + + + + + + + + + + + + + + +
+ ここにユーザ名を入力してください。
+ ここにパスワードを入力してください。
+ ユーザ名とパスワードを入力したらボタンを押してください。
+
+ + + diff --git a/doc/ja/logout.html b/doc/ja/logout.html new file mode 100644 index 0000000..5ab6357 --- /dev/null +++ b/doc/ja/logout.html @@ -0,0 +1,43 @@ + + + +ログアウト + + + + + + +
+ +

ログアウト

+

概要

+

ログインに成功すると、メニューに表示されます。 +

機能

+ クリックすると、ログアウトしてログイン画面が表示されます。 +
+ + + diff --git a/doc/ja/nodeServerStatus.html b/doc/ja/nodeServerStatus.html new file mode 100644 index 0000000..aab8e6c --- /dev/null +++ b/doc/ja/nodeServerStatus.html @@ -0,0 +1,70 @@ + + + +ノードステータス + + + + + + + +
+ +

ノードステータス

+

概要

+ノードステータスでは、各ノードについて +
  • IPアドレス
  • +
  • ポート
  • +
  • ステータス
  • +
  • 詳細情報
  • +
+

を取得することができます。

+

+

機能

+ + + + + + + + + + + + + + + + + +
ノードのIPアドレス
Postmasterが稼働しているポート番号
Postmasterが稼働状態であるかどうかを表示します。
Postmasterが稼働状態の場合にのみ表示されます。
+PostgreSQLの場合にはpg_settings情報、pgpoolの場合にはpool_statusを取得します。 +
+
+ + + diff --git a/doc/ja/pgconfig.html b/doc/ja/pgconfig.html new file mode 100644 index 0000000..613a77d --- /dev/null +++ b/doc/ja/pgconfig.html @@ -0,0 +1,457 @@ + + + +pgpool.conf設定 + + + + + + +
+

pgpool.conf設定

+

概要

+ + pgpoolの設定ファイルであるpgpool.confの設定内容を表示・変更することができます。 +

機能

+ 変更したい値を入力して更新ボタンを押してください。 +

バックエンドホストの追加

+ 新しいバックエンドホストを追加したい場合には、追加ボタンを押してください。
+ バックエンドホストの項目に新しい入力欄ができますので、そこに新しいバックエンドホストの情報を入力してください。
+ 入力が終わりましたら、更新ボタンを押してください。 +

バックエンドホストの削除

+ + 登録してあるバックエンドホストを削除したい場合には、そのホスト設定の右側にある削除ボタンを押してください。
+ +

Connections

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
listen_addresses (string)
+TCP/IPコネクションを受け付けるアドレスをホスト名またはIPアドレスで指定します。「*」を指定するとすべてのIPインタフェースからのコネクションを受け付けます。「''」を指定するとTCP/IPコネクションを受け付けま +せん。デフォルト値は「localhost」です。
UNIXドメインソケット経由のコネクションは常に受け付けます。 +
+
port (integer)
pgpoolがコネクションを受け付けるポート番号です。デフォルト値は9999です
+
socket_dir (string)
PostgreSQLサーバのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。
+
num_init_children (integer)
preforkするpgpoolのサーバプロセスの数です。デフォルト値は32になっています。
+なお、問い合わせのキャンセルを行うと通常のコネクションとは別に新たなコネクションが張られます。したがって、すべてのコネクションが使用中の場合は問い合わせのキャンセルができなくってしまうので、ご注意下 + さい。問い合わせのキャンセルを必ず保証したい場合は、想定されるコネクション数の倍の値を設定することをおすすめします。
+
max_pool (integer)
pgpoolの各サーバプロセスがキープするPostgreSQLへの最大コネクション数です。pgpoolは、ユーザ名、データベースが同じならばコネクションを再利用しますが、そうでなければ新たにPostgreSQLへのコネクションを確立しようとします。したがって、ここでは想定される[ユーザ名:データベース名]のペアの種類の数だけをmax_poolに指定しておく必要があります。もしmax_poolを使いきってしまった場合は一番古いコネクションを切断し、そのスロットが再利用されます。
max_poolのデフォルト値は4です。
なお、pgpool全体としては、num_init_children*max_pool 分だけPostgreSQLへのコネクションが張られる点に注意してください
+
child_life_time (integer)
pgpoolの子プロセスの寿命です。アイドル状態になってからchild_life_time秒経過すると、一旦終了して新しいプロセスを起動します。メモリーリークその他の障害に備えた予防措置です。child_life_timeのデフォルト値は300秒、すなわち5分です。0を指定するとこの機能は働きません(すなわち起動しっ放し)。なお、まだ一度もコネクションを受け付けていないプロセスにはchild_life_timeは適用されません。
+
connection_life_time (integer)
コネクションプール中のコネクションの有効期間を秒単位で指定します。0を指定すると有効期間は無限になります。connection_life_timeのデフォルト値は0です。
+
child_max_connections (integer)
各pgpool子プロセスへの接続回数がこの設定値を超えると、その子プロセスを終了します。child_life_timeやconnection_life_timeが効かないくらい忙しいサーバで、PostgreSQLバックエンドが肥大化するのを防ぐのに有効です。
+
connection_cache
trueならコネクションをキャッシュします。デフォルトはtrueです。
+
pgpool2_hostname (string)
pgpool2が稼働しているホスト名を指定します。
+

Backends

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+ +
backend_socket_dir (string)
PostgreSQLサーバのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。

backend_hostname (string)
postmasterが稼働しているホスト名を指定します。指定しない場合にはUnix domain socketで接続します。

backend_port (integer)
postmasterが稼働しているポート番号です。

backend_weight (integer)
ロードバランスモード時に振り分ける重みを0から1の値で設定します。すべてのバックエンドサーバで指定した値から相対的な重みを計算して振り分けます。
+

PCP (pgpool Control Port)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
pcp_port (integer)
PCPに接続するためのポート番号です。デフォルトは9898です。
+
pcp_socket_dir (string)
PCPのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。
+
pcp_timeout (integer)
PCPコマンドのタイムアウトを設定します。この時間の間に応答がない場合にはコネクションを切断します。
+

Logging

+ + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
logdir (string)
pgpoolの各種ログファイルを格納するディレクトリです。現在のところ、pgpool.pidというプロセスIDを格納するファイルだけが作られるようになっています。logdirのデフォルト値は'/tmp'です。
+
print_timestamp
trueならばpgpoolのログにタイムスタンプを追加します。デフォルトはtrueです。
+

Replication

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
replication_mode
レプリケーションモードで動作させる場合はtrueを指定してください。デフォルト値はfalseです。
+ +
replication_strict
このオプションをtrueにすると、masterの問い合わせ処理の完了を待ってからsecondaryの処理に移ります。デッドロックの危険性はなくなりますが、masterとsecondaryの間で問い合わせの並列処理を行わなくなるので性能が低下する場合もあります。
なお、すべての問い合わせではなくて、SQLのコメントを使って一部の問い合わせのみstrict動作させることもできます。
このオプションのデフォルト値はtrueです
+
replication_timeout (integer)
replication_strictがfalseのときにデッドロックを監視するためのタイムアウト時間をミリ秒単位で指定します。デフォルト値は5000、すなわち5秒です。0を指定するとタイムアウトしなくなります。
+
replication_stop_on_mismatch
trueを指定するとマスタとセカンダリの間でデータの不一致があった場合に強制的に縮退運転に入ります。このオプションがfalseの場合は、該当の問い合わせを強制的に終了するだけに留めます。デフォルト値はfalseです。
+
reset_query_list (string)
セッションが終了するときにコネクションを初期化するためのSQLコマンドを「;」で区切って列挙します。デフォルトは以下のようになっていますが、任意のSQL文を追加しても構いません。 +

reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'

+PostgreSQLのバージョンによって使用できるSQLコマンドが違うので、PostgreSQL 7.3以前では注意してください(「4. pgpoolの稼働環境」参照)。
なお、「ABORT」は、PostgreSQL 7.4以上ではトランザクションブロックの中にいない場合には発行されません。 +
+

Health Check

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
health_check_timeout (integer)
pgpoolはサーバ障害やネットワーク障害を検知するために、定期的にバックエンドに接続を試みます。これを「ヘルスチェック」と言います。障害が検知されると、フェイルオーバや縮退運転を試みます。
この パラメータは、ネットワークケーブルが抜けた際などにヘルスチェックが長時間待たされるのを防ぐためのタイムアウト値を秒単位で指定します。デフォルトは20秒です。0を指定するとタイムアウト処理をしません。
なお、ヘルスチェックを有効にすると、ヘルスチェックのための余分の接続が1つ必要になりますので、PostgreSQLのpostgresql.confの設定項目のmax_connectionsを少くとも1増やすようにしてください
+
health_check_period (integer)
ヘルスチェックを行う間隔を秒単位で指定します。0を指定するとヘルスチェックを行いません。デフォルトは0です(つまりヘルスチェックを行いません)。 +
+
health_check_user (string)
ヘルスチェックを行うためのPostgreSQLユーザ名です。
+

System Database

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
system_db_hostname (string)
システムDBが稼働しているホスト名を指定します。指定しない場合にはUnix domain socketで接続します。
+
system_db_port (integer)
システムDBがあるPostgreSQLに接続するためのポート番号を指定します。
+ +
system_db_dbname (string)
システムDBのデータベース名を指定します。
+
system_db_schema (string)
システムDBのスキーマを指定します。
+
system_db_user (string)
システムDBに接続するユーザ名を指定します。
+ +
system_db_password (string)
システムDBに接続するユーザのパスワードを指定します。
+

Others

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
項目詳細
+
load_balance_mode
trueを指定するとレプリケーションモードの際に、SELECT文をマスタとセカンダリの間でロードバランスします。デフォルト値はfalseです
+
master_slave_mode
trueならばマスタ/スレーブモードでpgpoolを運転します。デフォルトはfalseです。このモードはreplication_modeとは両立しません。
+
insert_lock
+SERIAL型を使っているテーブルをレプリケーションすると、SERIAL型の列の値がマスタとセカンダリで一致しなくなることがあります。この問題は、該当テーブルを明示的にロックすることで回避できます(もちろんトランザ +クションの並列実行性は犠牲になりますが)。しかし、そのためには、 +

+INSERT INTO ... +

+

+を +

+

+BEGIN;
+ +LOCK TABLE ...
+INSERT INTO ...
+COMMIT; +

+

+ に書き換えなければなりません。insert_lockをtrueにすると自動的にトランザクションの開始、テーブルロック、トランザクションの終了を行ってくれるので、こうした手間を省くことができます(すでにトランザクションが開始されている場合はLOCK TABLE...だけが実行されます)。 + +

+ +
ignore_leading_white_space
trueならば、load balanceの際にSQL文行頭の空白を無視します(全角スペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに有効です
+
parallel_mode
pgpoolをパラレルモードで稼働させる場合にはtrueを指定します。この場合には分散ルールを指定する必要があります。
+
log_statement
trueならばSQL文をログ出力します。この役目はPostgreSQLのlog_statementオプションと似ていて、デバッグオプションがないときでも問い合わせをログ出力して調べることができるので便利です。
+
enable_query_cache
SELECTの結果をキャッシュする場合にはtrueにします。
+
+ + + diff --git a/doc/ja/queryCache.html b/doc/ja/queryCache.html new file mode 100644 index 0000000..ec75e34 --- /dev/null +++ b/doc/ja/queryCache.html @@ -0,0 +1,77 @@ + + + +クエリキャッシュ + + + + + + +
+ +

クエリキャッシュ

+

概要

+

enable_query_cache = true の場合に、SELECT 文の結果をキャッシュさせます。

+

機能

+

クエリキャッシュのデータを検索することができます。検索対象は、クエリ文字列とデータベース名で、部分一致検索を行うことができます。クエリ文字列とデータベース名はAND検索になります。

+ + + + + + + + + + + + + +
クエリ文字列 +
データベース名
+ + +
+

クエリキャッシュリスト

+

現在キャッシュされているクエリ文字列、データベース名、作成時刻が表示されます。「クエリ文字列」、「データベース名」および「作成時刻」をクリックすると、並べ替えが行われます。クリックするたびに、昇順または降順で並べ替えが行われます。

+

削除したいデータの左にあるチェックボックスにチェックを入れて、削除ボタンを押すと削除されます。一番上のチェックボックスにチェックするとすべてのレコードが選択されます。

+ + + + + + + + + + + +
クエリ文字列データベース名作成時刻
+ +
+
+ + diff --git a/doc/ja/status.html b/doc/ja/status.html new file mode 100644 index 0000000..ff45b41 --- /dev/null +++ b/doc/ja/status.html @@ -0,0 +1,134 @@ + + + +pgpoolステータス + + + + + + +
+ +

pgpoolステータス

+

概要

+ステータスでは、pgpoolについて +
    +
  • サマリー
  • +
  • プロセス情報
  • +
  • ノード情報
  • +
  • ログ
  • +
+の表示とpgpoolの +
    +
  • 起動
  • +
  • 停止
  • +
  • 再起動
  • +
+を行うことができます。 +

説明

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pgpool.confの内容を表示します。

pgppolの各プロセスについて

+
    +
  • プロセスID
  • +
  • データベース名
  • +
  • 接続ユーザ名
  • +
  • プロセススタート時刻
  • +
  • コネクション作成時刻
  • +
  • プロトコルメジャーバージョン
  • +
  • プロトコルマイナーバージョン
  • +
  • コネクション使用回数
  • +
+

が表示されます。
+ 各プロセスについて、最大でpgpool.confのmax_pool分だけ表示されます。 +

各ノードについて

+
    +
  • IPアドレス
  • +
  • ボート番号
  • +
  • ステータス
  • +
  • 負荷分散ウェイト
  • +
  • 切断ボタン
  • +
+

が表示されます。ただし、pgpoolがパラレルモードで動いているときは、切断ボタンは表示されません。

+

ステータスには

+
    +
  • ノード稼働中。接続無し
  • +
  • ノード稼働中。接続中
  • +
  • ノードダウン
  • +
+

の3つの状態が表示されます。

pgpool非デーモンモード(-n)で起動されているときに、pgpoolのログを表示することができます。
pgpoolの停止時には、pgpoolを起動することができます。起動オプションとして +
    +
  • クエリキャッシュクリア
  • +
  • 非デーモンモード
  • +
  • デバッグモード
  • +
  • pgpool.conf
  • +
  • pcp.conf
  • +
+ を指定することかできます。 +

+
pgpoolのすべてのプロセスを終了します。pgpool停止ボタンを押すと、終了オプションが表示されます。停止モードとして +
    +
  • smart
  • +
  • fast
  • +
  • immediate
  • +
+ を選択することができます。終了すると、pgpoolステータスが「pgpool停止」となり、起動用画面が表示されます。 +

+
pgpoolのすべてのプロセスを終了し続けて起動処理をします。上記の起動と停止の両方の項目を指定することができます。 +

+
+
+ + + diff --git a/doc/ja/systemDb.html b/doc/ja/systemDb.html new file mode 100644 index 0000000..8eec464 --- /dev/null +++ b/doc/ja/systemDb.html @@ -0,0 +1,99 @@ + + + +分散ルール + + + + + + +
+ +

分散ルール

+

概要

+ +pgpool.confのparallel_mode=trueの場合に並列問い合わせの設定を定義します。 +

機能

+各カラムのデータ型は以下のとおりです。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TEXT分散を行うデータベース名
TEXTデータベースのスキーマ名
TEXT分散を行うテープル
TEXT分散キーとなる列名
TEXT[]データを分散させるテーブルの列名リスト
TEXT[]列名に対する型のリスト
TEXT分散ルールを定義した関数名
+

+

追加

+すべてのカラムに値を入力して「追加」ボタンを押します。
+列名リストと列データ型リストについては、各要素をシングルクォーテーションで囲み、各要素をカンマで区切ってください。 +

更新

+更新したい定義のデータベース名をクリックしてください。入力フィールドに値が表示されますので修正して「更新」ボタンを押してください。ただし、データベース名、スキーマ名、テーブル名は変更できません。 +

削除

+削除したい定義のデータベース名をクリックしてください。「削除」ボタンを押してください。確認ダイアログが表示されますので「OK」ボタンを押してください。 +
+ + diff --git a/doc/screen.css b/doc/screen.css new file mode 100644 index 0000000..1a13d7b --- /dev/null +++ b/doc/screen.css @@ -0,0 +1,170 @@ +body { + margin: 0; + font: x-small Verdana, Arial, Helvetica, sans-serif; +} +h1 { + margin: 0; +} +h2 { + padding-bottom: 4px; + border-bottom: 1px solid red; + color: red; + font-size: small; +} +h3 { + color: red; + font-size: x-small; +} +ul { + list-style: square; +} +table { + border-top: 1px solid lightsteelblue; + border-collapse: collapse; +} +th, td { + padding: 4px 8px; + border-bottom: 1px solid lightsteelblue; +} +thead th, thead td, tfoot th, tfoot td { + background: ghostwhite; +} +tbody th { + font-weight: normal; + text-align: left; +} +a:link { + color: red; + text-decoration: none; +} +a:visited { + color: maroon; + text-decoration: none; +} +a:link:hover, a:visited:hover { + color: orangered; + text-decoration: underline; +} +a img { + border: none; +} +input { + font: x-small Verdana, Arial, Helvetica, sans-serif; +} +label { + font-weight: bold; +} +#header { + padding: 8px; + border-bottom: 8px solid white; + background: steelblue url("images/sea.jpg") no-repeat bottom right; +} +#menu { + padding-bottom: 40px; + border-top: 1px solid lightsteelblue; + border-right: 1px solid lightsteelblue; + float: left; + width: 176px; + overflow: hidden; + background: ghostwhite; +} +#menu ul { + margin: 0; + padding: 0; + list-style: none; +} +#menu li { + border-bottom: 1px solid lightsteelblue; +} +#menu a:link, #menu a:visited { + padding: 8px 0; + display: block; + color: black; + background: url("images/marker.gif") no-repeat 8px; + text-indent: 16px; + text-decoration: none; +} +#menu a:hover { + background: antiquewhite url("images/marker.gif") no-repeat 8px; +} +#content { + padding: 8px 8px 40px 185px; + border-top: 1px solid lightsteelblue; + background: white url("images/background.gif") repeat-y left; +} +#submenu { + border: 1px solid lightsteelblue; + float: right; + background: ghostwhite; +} +#submenu h3 { + margin: 0; + padding: 4px 8px; + border-bottom: 4px solid white; + color: white; + background: steelblue; + text-align: center; +} +#submenu ul { + margin: 0; + padding: 8px; + border-top: 1px solid lightsteelblue; + list-style: square inside; +} +#footer { + padding: 8px 8px 20px; + clear: left; + color: white; + background: lightsteelblue; +} +#footer address { + font-style: normal; +} +#footer p { + margin: 0; + float: right; +} +#footer a:link, #footer a:visited { + color: white; + font-weight: bold; +} +.hidden { + display: none; +} +.odd { +} +.even { + background: azure; +} +.error { + font-weight: normal; + text-align: left; + background: red; +} +.right_border { + border-right: 1px solid lightsteelblue; + border-collapse: collapse; +} + +#help { + float: right; +} + +#cmd_window { + margin-top : 20px ; + margin-bottom : 20px ; +} +#cmd_window table { + border-top: 1px solid black; + border-collapse: collapse; + width: 70%; +} + +#cmd_window tr td { + border-bottom: 1px solid black; + background: black; + color: white; + font-size: x-small; + padding-left: 10px; + padding-right: 100px; +} diff --git a/help.php b/help.php new file mode 100644 index 0000000..76223f4 --- /dev/null +++ b/help.php @@ -0,0 +1,46 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); +$tpl->assign('help', basename( __FILE__, '.php')); + +$lang = $_SESSION[SESSION_LANG]; + +$help = $_GET['help']; +$tpl->assign('help', $help); + +$tempFile = SMARTY_TEMPLATE_DIR . "/help/$lang/$help" . '.tpl'; + +if( ! file_exists($tempFile)) { + $errorCode = 'e6'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('error.tpl'); + exit(); +} + +$tpl->assign('isHelp', true); +$tpl->display($tempFile); + +?> diff --git a/images/ascending.gif b/images/ascending.gif new file mode 100644 index 0000000000000000000000000000000000000000..6438089e858ef04860f138457249708ddfb0c9a4 GIT binary patch literal 46 ycmZ?wbhEHbWMyDx_`t~E*0kmS|Nn|VSr{1@7#VaJfB+=Jz{Kj4z`i4v!5RP><_dWL literal 0 HcmV?d00001 diff --git a/images/back.gif b/images/back.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9a71a56c03e19d162d87b399fa349243af087a5 GIT binary patch literal 160 zcmZ?wbhEHbz&!jO+|t3_2iTkQodtz5$-1U5v|GEKf2daPYX4Gd6KZE&a4`rIi+k#vKbjCC;iR z4i1l&2;Vh07V)AZW>sI?yfbA!S5_R5IMjN!kxl4O=BZbELR9)%$~*Ja1sSXXu|Yn8 literal 0 HcmV?d00001 diff --git a/images/background.gif b/images/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed77230e94efc79be87d24b4d6c159e5feb1b07e GIT binary patch literal 53 zcmZ?wbhEHb+{nPl@PUzG!;yPGe*9Pb$-)2vIv@fh!@$JT)4%fcTmHp!w%lUjVz34P D)kqOI literal 0 HcmV?d00001 diff --git a/images/descending.gif b/images/descending.gif new file mode 100644 index 0000000000000000000000000000000000000000..64be7cc197a28b98047be7a1fb36da40a9b829bd GIT binary patch literal 46 ycmZ?wbhEHbWMyDx_`t~E*0kmS|Nn|VSr{1@7#VaJfB+=Jz{J`jE6yFwU=08matY4> literal 0 HcmV?d00001 diff --git a/images/logo.gif b/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d63d04d49028c1ef24430045dc51a0d1336ecaa GIT binary patch literal 2256 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 literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000..dc3bffb --- /dev/null +++ b/index.php @@ -0,0 +1,37 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); +$tpl->assign('help', basename( __FILE__, '.php')); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + header('Location: login.php'); + exit(); +} else { + header('Location: status.php'); + exit(); +} + +?> \ No newline at end of file diff --git a/innerLog.php b/innerLog.php new file mode 100644 index 0000000..97013d5 --- /dev/null +++ b/innerLog.php @@ -0,0 +1,54 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + exit(); +} + +$pgpoolLog = _PGPOOL2_LOG_FILE; +if($pgpoolLog == '') { + $logDir = readLogDir(); + $pgpoolLog = "$logDir/pgpool.log"; +} + +$logFile = @file($pgpoolLog); +if($logFile == false) { + $errorCode = 'e8001'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('innerError.tpl'); + exit(); +} + +$logSplitFile = array(); +for($i=0; $iassign('logFile', $logFile); +$tpl->display('innerLog.tpl'); + +?> diff --git a/innerNodeServerStatus.php b/innerNodeServerStatus.php new file mode 100644 index 0000000..7b61b15 --- /dev/null +++ b/innerNodeServerStatus.php @@ -0,0 +1,61 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + exit(); +} + +$healthCheckDb = 'template1'; + +$params = readHealthCheckParam(); + +$healthCheckUser = $params['health_check_user']; + +if(isset($params['backend_hostname'])) { + $backendHostName = $params['backend_hostname']; + $backendPort = $params['backend_port']; +} else { + $backendHostName = array(); +} + +$result = array(); +foreach($backendHostName as $num => $hostname) { + $result[$num]['hostname'] = $backendHostName[$num]; + $result[$num]['port'] = $backendPort[$num]; + + if(NodeActive($num)) { + $result[$num]['status'] = TRUE; + } else { + $result[$num]['status'] = FALSE; + } +} + +$tpl->assign('nodeServerStatus', $result); +$tpl->assign('nodeCount', count($result)); +$tpl->display('innerNodeServerStatus.tpl'); + +?> diff --git a/innerSummary.php b/innerSummary.php new file mode 100644 index 0000000..74e47e2 --- /dev/null +++ b/innerSummary.php @@ -0,0 +1,41 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + exit(); +} + +$params = readConfigParams(array('parallel_mode', + 'enable_query_cache', + 'replication_mode', + 'load_balance_mode', + 'health_check_period')); + +$tpl->assign('params', $params); +$tpl->display('innerSummary.tpl'); + +?> diff --git a/innerSystemCatalog.php b/innerSystemCatalog.php new file mode 100644 index 0000000..a3d66d6 --- /dev/null +++ b/innerSystemCatalog.php @@ -0,0 +1,78 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('common.php'); + +if(!isset($_SESSION[SESSION_LOGIN_USER])) { + exit(); +} + +$pgCatalog = pg_escape_string($_GET['catalog']); +$nodeNum = $_GET['num']; + +if($pgCatalog == '') { + return; +} + +$params =readHealthCheckParam(); + +$dbParams['hostname'] = $params['backend_hostname'][$nodeNum]; +$dbParams['port'] = $params['backend_port'][$nodeNum]; +$dbParams['dbname'] = 'template1'; +$dbParams['user'] = $params['health_check_user']; +$dbParams['password'] =''; + +$tpl->assign('hostname', $dbParams['hostname'] ); +$tpl->assign('port', $dbParams['port'] ); + +$conn = openDBConnection($dbParams); + +$sql = 'show pool_status'; + +$rs = execQuery($conn, $sql); + +if(!pg_result_status($rs) == PGSQL_TUPLES_OK) { + $sql = "SELECT * FROM $pgCatalog"; + $rs = execQuery($conn, $sql); + $tpl->assign('catalog', $pgCatalog); +} else { + $tpl->assign('catalog', 'pool_status'); +} + +if(!pg_result_status($rs) == PGSQL_TUPLES_OK) { + $errorCode = 'e8001'; + $tpl->assign('errorCode', $errorCode); + $tpl->display('innerError.tpl'); + exit(); +} + +$results = pg_fetch_all($rs); + +closeDBConnection($conn); + +$tpl->assign('results', $results); +$tpl->display('innerSystemCatalog.tpl'); + +?> diff --git a/install/checkDirectory.php b/install/checkDirectory.php new file mode 100644 index 0000000..cae86a9 --- /dev/null +++ b/install/checkDirectory.php @@ -0,0 +1,122 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('../version.php'); + +session_start(); + +require_once('setLang.php'); + +$error = false; + +$action = ''; +if(isset($_POST['action'])) { + $action = $_POST['action']; +} + +$templates_c = dirname(dirname(__FILE__) . '/') . '/templates_c'; +if(!is_writable($templates_c)) { + $templates_c = $templates_c . ' write denied'; + $error = true; +} else { + unset($templates_c); +} +$conf = dirname(dirname(__FILE__) . '/') . '/conf/pgmgt.conf.php'; +if(!is_writable($conf)) { + $conf = $conf . ' write denied'; + $error = true; +} else { + unset($conf); +} + +if(!$error && $action == 'next') { + header("Location: checkParameter.php"); +} + +?> + + + + +<? echo $message['strDirectoryCheck'] ?> + + + + +
+

Welcome to pgpool-II Administration Tool

+

+ + '; + } else { + echo ''; + } + ?> + + + + + + + + + + + +
+ " . $templates_c; + else + echo "ok"; + ?> +
+ " . $conf; + else + echo "ok"; + ?> +
+

+'; +else + echo ''; +?> +

+ +
+ + + diff --git a/install/checkParameter.php b/install/checkParameter.php new file mode 100644 index 0000000..feaaca2 --- /dev/null +++ b/install/checkParameter.php @@ -0,0 +1,423 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('../version.php'); + +session_start(); + +require("defaultParameter.php"); +require_once('setLang.php'); + +$error = false; + +$action = ''; +if(isset($_POST['action'])) { + $action = $_POST['action']; +} + +$pgpool2_config_file = $_POST['pgpool2_config_file']; +if( !$pgpool2_config_file) { + $pgpool2_config_file = _PGPOOL2_CONFIG_FILE; +} +if(!@is_file($pgpool2_config_file)) { + $msgPgpoolConfigFile = 'No file found'; + $error = true; +} +else { + if(!is_readable($pgpool2_config_file)) { + $msgPgpoolConfigFile = 'Read access denied'; + $error = true; + } + if(!is_writable($pgpool2_config_file)) { + $msgPgpoolConfigFile = 'Write access denied'; + $error = true; + } +} + +$password_file = $_POST['password_file']; +if( !$password_file) { + $password_file = _PGPOOL2_PASSWORD_FILE; +} +if(!@is_file($password_file)) { + $msgPasswordFile = 'No file found'; + $error = true; +} +else { + if(!is_readable($password_file)) { + $msgPasswordFile = 'Read access denied'; + $error = true; + } + if(!is_writable($password_file)) { + $msgPasswordFile = 'Write access denied'; + $error = true; + } +} + +$pgpool_command = $_POST['pgpool_command']; +if( !$pgpool_command) { + $pgpool_command = _PGPOOL2_COMMAND; +} +if(!@is_file($pgpool_command)) { + $msgPgpoolCommand = 'Pgpool not found'; + $error = true; +} +if(!is_executable($pgpool_command)) { + $msgPgpoolCommand = 'Pgppol command can\'t excutable'; + $error = true; +} + +$pgpool_logfile = $_POST['pgpool_logfile']; +if( !$pgpool_logfile) { + $pgpool_logfile = _PGPOOL2_LOG_FILE; +} +if(!is_dir(dirname($pgpool_logfile))) { + $msgPgpoolLogFile = 'No Directory found'; + $error = true; +} +else { + if(!is_writable(dirname($pgpool_logfile))) { + $msgPgpoolLogFile = 'Write access denied'; + $error = true; + } +} + +$pcp_client_dir = $_POST['pcp_client_dir']; +if( !$pcp_client_dir) { + $pcp_client_dir = _PGPOOL2_PCP_DIR; +} +if(!is_dir($pcp_client_dir)) { + $msgPcpClientDir = 'Directory not found'; + $error = true; +} +else { + $command = array('pcp_attach_node', + 'pcp_detach_node', + 'pcp_node_count', + 'pcp_node_info', + 'pcp_proc_count', + 'pcp_proc_info', + 'pcp_stop_pgpool', + 'pcp_systemdb_info'); + + for($i=0; $i"."\n"); + + fclose($fp); + + header("Location: finish.php"); +} +?> + + + + +<?php echo $message['strParameterCheck']; ?> + + + + +
+

Welcome to pgpool-II Administration Tool

+

+
+ '; + } else { + echo ''; + } + ?> + + + + + + + + + + + + + + + + + + + + + ' . $msgCmdC; + echo ' + + + + + ' . $msgCmdN; + echo ' + + + + + ' . $msgCmdD; + echo ' + + + + + ' . $msgCmdM; + echo ' + + + + + + + + + + + + + + + + + + + +
+ ' . $msgPgpoolConfigFile; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
+ ' . $msgPasswordFile; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
+ ' . $msgPgpoolCommand; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
ng'; + } else { + echo 'ok'; + } + ?> +
ng'; + } else { + echo 'ok'; + } + ?> +
ng'; + } else { + echo 'ok'; + } + ?> +
+ ng'; + } else { + echo 'ok'; + } + ?> +
+ ' . $msgPgpoolLogFile; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
+ ' . $msgPcpClientDir; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
+ ' . $msgPcpHostname; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
+ ' . $msgPcpRefreshTime; + echo 'ng'; + } else { + echo 'ok'; + } + ?> +
+

+'; +} +else { +echo ''; +} +?> +

+
+
+ + + diff --git a/install/defaultParameter.php b/install/defaultParameter.php new file mode 100644 index 0000000..245c441 --- /dev/null +++ b/install/defaultParameter.php @@ -0,0 +1,39 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +define("_PGPOOL2_CONFIG_FILE", "/usr/local/etc/pgpool.conf"); +define("_PGPOOL2_PASSWORD_FILE", "/usr/local/etc/pcp.conf"); +define("_PGPOOL2_COMMAND", "/usr/local/bin/pgpool"); +define("_PGPOOL2_CMD_OPTION_C", "0"); +define("_PGPOOL2_CMD_OPTION_D", "0"); +define("_PGPOOL2_CMD_OPTION_M", "s"); +define("_PGPOOL2_CMD_OPTION_N", "0"); +define("_PGPOOL2_LOG_FILE", "/tmp/pgpool.log"); +define("_PGPOOL2_PCP_DIR", "/usr/local/bin"); +define("_PGPOOL2_PCP_HOSTNAME", "localhost"); +define("_PGPOOL2_PCP_TIMEOUT", "10"); +define("_PGPOOL2_STATUS_REFRESH_TIME", "0"); + +?> \ No newline at end of file diff --git a/install/finish.php b/install/finish.php new file mode 100644 index 0000000..9c44709 --- /dev/null +++ b/install/finish.php @@ -0,0 +1,58 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('../version.php'); + +session_start(); + +require_once('setLang.php'); + +$installDir = dirname(__FILE__); + +?> + + + + +<?php echo $message['msgCongratulations']; ?> + + + + +
+

Welcome to pgpool-II Administration Tool

+

+ +

+
+ + + + diff --git a/install/images/ng.gif b/install/images/ng.gif new file mode 100644 index 0000000000000000000000000000000000000000..b10aca7fc5b0d7c4f34893c43515377bdba080b7 GIT binary patch literal 174 zcmZ?wbhEHb6k-r!*v!E2ABfJJ`5zGQf5V3V3JU*$V8Md_#>W2z1pX%^{NKO-zk>q< z5>Wif!oUvHr2`TJnZdvky}@Ip5MzUiX*DOeT9@|&))On3Iy4tHY&o@7q)d6A2-mZp z77ngYekSVdOiC;X6b(04HvTD++2M7wkYP^A*5*Ts&yJqr(@zk2tR)c?z;mb|YaK^! NzoUWB1#3YDYXD1eK(7D* literal 0 HcmV?d00001 diff --git a/install/images/ok.gif b/install/images/ok.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee85496a79d9b395f4e2a546b86fee8c39289cde GIT binary patch literal 172 zcmZ?wbhEHb6k-r!*v!DdaE9T)rvnZ*9sd9SKmW~qg-Z(lcl-s;3!MLY-r$-+!u^B| z?>7Kd!GYpW76x{P{|q`H5s(=SERh8so;*7aOgPD|6~Q6m;V!eNB1dS_J_kz`12x8z z8?K16>u|-fFJNHITljE=`Np3v&Z@_5RQfghXu1g&L^(G$9 + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('../version.php'); + +$messageList = array(); +$res_dir = opendir('lang/'); +while($file_name = readdir( $res_dir )) { + if(ereg('^[^\.]', $file_name)) { + include('lang/' . $file_name); + $messageList[$message['lang']] = $message['strLang']; + } +} + +?> + + + + +Welcome to pgpool-II Administration Tool + + + + +
+

Welcome to pgpool-II Administration Tool

+
+ + + + + + + +
+ +
+

+
+
+ + + diff --git a/install/lang/en.lang.php b/install/lang/en.lang.php new file mode 100644 index 0000000..640ea04 --- /dev/null +++ b/install/lang/en.lang.php @@ -0,0 +1,57 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +$message = array( + 'lang' => 'en', + 'strLang' => 'English', + 'strNext' => 'Next', + 'strCheck' => 'Check', + 'strDirectoryCheck' => 'Directory Cehck', + 'strParameterCheck' => 'Parameter Setting', + 'strFinish' => 'Finish', + 'strPgConfFile' => 'pgpool.conf File', + 'strPasswordFile' => 'Password file', + 'strPgmgtFile' => 'pgpoolAdmin Setting File', + 'strTempDir' => 'Template Directory', + 'strPgpoolCommand' => 'Pgpool Command', + 'strPgpoolCommandOption' => 'Pgpool Command Option', + 'strCmdC' => 'Clears query cache', + 'strCmdD' => 'debug mode', + 'strCmdM' => 'stop mode', + 'strCmdN' => 'don\'t run in daemon mode', + 'strCmdPgpoolFile' => 'pgpool.conf', + 'strCmdPcpFile' => 'pcp.conf', + 'strCmdDesc' => 'If it is a blank, this option is ignored.', + 'strPgpoolLogFile' => 'Pgpool Logfile', + 'strPcpDir' => 'PCP directory', + 'strPcpTimeout' => 'PCP Timeout', + 'strPcpHostName' => 'PCP Hostname', + 'strPcpRefreshTime' => 'Refresh Time', + 'msgCongratulations' => 'Congratulations. Pgpool Administration Tool was installed!', + 'msgDeleteInstallDir' => ' : Please remove this directory', + 'msgToTop' => 'top' +); + +?> diff --git a/install/lang/ja.lang.php b/install/lang/ja.lang.php new file mode 100644 index 0000000..df76304 --- /dev/null +++ b/install/lang/ja.lang.php @@ -0,0 +1,57 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +$message = array( + 'lang' => 'ja', + 'strLang' => '日本語', + 'strNext' => '次へ', + 'strCheck' => 'チェック', + 'strDirectoryCheck' => 'ディレクトリ確認', + 'strParameterCheck' => '管理ツールパラメータ設定', + 'strFinish' => '完了', + 'strPgConfFile' => 'pgpool.confファイル', + 'strPasswordFile' => 'パスワードファイル', + 'strPgmgtFile' => '管理ツール設定ファイル', + 'strTempDir' => 'テンプレートディレクトリ', + 'strPgpoolCommand' => 'Pgpoolコマンド', + 'strPgpoolCommandOption' => 'pgpoolコマンドオプション', + 'strCmdC' => 'クエリキャッシュクリア', + 'strCmdD' => 'デバッグモード', + 'strCmdM' => '停止モード', + 'strCmdN' => '非デーモンモード', + 'strCmdPgpoolFile' => 'pgpool.conf', + 'strCmdPcpFile' => 'pcp.conf', + 'strCmdDesc' => '空白の場合には無視', + 'strPgpoolLogFile' => 'Pgpoolログファイル', + 'strPcpDir' => 'PCPディレクトリ', + 'strPcpTimeout' => 'PCPタイムアウト', + 'strPcpHostName' => 'PCPホスト名', + 'strPcpRefreshTime' => '更新間隔(0で自動更新しない)', + 'msgCongratulations' => 'おめでとうございます。インストールは終了しました。', + 'msgDeleteInstallDir' => 'を削除してください', + 'msgToTop' => 'トップ画面へ移動' +); + +?> diff --git a/install/setLang.php b/install/setLang.php new file mode 100644 index 0000000..4f8c9ce --- /dev/null +++ b/install/setLang.php @@ -0,0 +1,43 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +require_once('../version.php'); + +if(!isset($_POST['lang']) && !isset($_SESSION['lang'])) { + $lang = 'en'; +} +else { + if(isset($_POST['lang'])) { + $lang = $_POST['lang']; + $_SESSION['lang'] = $lang; + } + else { + $lang = $_SESSION['lang']; + } +} + +include('lang/'. $lang . '.lang.php'); + +?> diff --git a/lang/en.lang.php b/lang/en.lang.php new file mode 100644 index 0000000..5957aad --- /dev/null +++ b/lang/en.lang.php @@ -0,0 +1,250 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +$message = array( + 'lang' => 'en', + 'strLang' => 'English', + 'descBackend_hostname' => 'The real PostgreSQL server name pgpool could connect', + 'descBackend_port' => 'The port number where real PostgreSQL server is running on', + 'descBackend_socket_dir' => 'The socket directory PostgreSQL could connect', + 'descBackend_weight' => 'Load balance weight when pgpool is running in the state of load balance mode', + 'descChild_life_time' => 'Life of a idle child process in seconds', + 'descChild_max_connections' => 'If child_max_connections connections were received, child exits', + 'descConnection_cache' => 'If true, cache connections to PostgreSQL', + 'descConnection_life_time' => 'Life time for each idle connection in seconds', + 'descEnable_query_cache' => 'Perform query cache', + 'descHealth_check_period' => 'Specifies the interval for next health checking. 0 means no health checking', + 'descHealth_check_timeout' => 'Pgpool does "health check" periodically to detect PostgreSQL servers down, network communication problems or as such', + 'descHealth_check_user' => 'PostgreSQL user name for the health checking', + 'descIgnore_leading_white_space' => 'If true, ignore leading white spaces of each query while pgpool judges if the query is a SELECT so that it can be load balanced', + 'descInsert_lock' => ' If you replicate a table having SERIAL data type column, sometimes the serial value does not match between servers', + 'descListen_addresses' => 'Specifies the addresses to listen on for TCP/IP connections', + 'descLoad_balance_mode' => 'Perform load balancing for SELECT', + 'descLog_statement' => 'If true, print all statements to the log', + 'descLogdir' => 'The directory name to store pgpool\'s log files', + 'descMaster_slave_mode' => 'Run in master/slave mode', + 'descMax_pool' => 'Number of connection pools each pgpool server process are keeping', + 'descNum_init_children' => 'Number of pgpool process initially forked', + 'descParallel_mode' => 'Run in parallel mode', + 'descPcp_port' => 'The port number where pcp is running on', + 'descPcp_socket_dir' => 'The socket directory pcp could connect', + 'descPcp_timeout' => 'When there is no response in this time from client, it disconnect and stop', + 'descPgpool2_hostname' => 'Pgpool2 server name where running on', + 'descPort' => 'The port number where pgpool is running on', + 'descPrint_timestamp' => 'If true timestamp is added to each log line', + 'descReplication_mode' => 'Set this true if you are going to use replication functionality', + 'descReplication_stop_on_mismatch' => 'Stop replication mode on data mismatch between master and secondary', + 'descReplication_strict' => 'If true, pgpool will wait for the completion of the master query before sending a query to the secondary server', + 'descReplication_timeout' => 'In non strict replication mode, there will be a chance of deadlock', + 'descReset_query_list' => 'Semicolon separated SQL commands to be issued at the end of session', + 'descSocket_dir' => 'The socket directory pgpool could connect', + 'descSystem_db_dbname' => 'The database name of system database', + 'descSystem_db_hostname' => 'The server name system database running on', + 'descSystem_db_password' => 'The password of system database who connects system database', + 'descSystem_db_port' => 'The port number system database could connect', + 'descSystem_db_schema' => 'The schema name of system database', + 'descSystem_db_user' => 'The username when connection system database', + 'errAlreadyExist' => 'It is already exist.', + 'errFileNotExecutable' => 'File can\'t executable', + 'errFileNotFound' => 'File not found', + 'errFileNotWritable' => 'File can\'t write', + 'errIllegalHostname' => 'Illegal Hostname', + 'errInputEverything' => 'Please input all items', + 'errNoDefined' => 'No defined Parameter', + 'errNotSameLength' => 'The array length of col_list is not corresponding to that of type_list. It should be the same number of elements.', + 'errPasswordMismatch' => 'The password is a mismatch', + 'errRequired' => 'This is reqired', + 'errShouldBeInteger' => 'This should be an integer', + 'errShouldBeZeroOrMore' => 'This should be 0 or more', + 'errSingleQuotation' => 'Please enclose the array element with a single quotation.', + 'msgDeleteConfirm' => 'May I really delete it?', + 'msgMasterDbConnectionError' => 'Mater DB connection failed', + 'msgPgpoolConfNotFound' => 'pgpool.conf not found', + 'msgPleaseSetup' => 'No found configuration file. Please execute the setup.', + 'msgRestart' => 'Please Restart to reflect the change', + 'msgRestartPgpool' => 'May I really restart pgpool?', + 'msgSameAsPasswordFile' => 'The value is the same as item Password File', + 'msgSameAsPgpoolFile' => 'The value is the same as item pgpool.conf File', + 'msgStopPgpool' => 'May I really stop pgpool?', + 'msgUpdateComplete' => 'Update complete', + 'msgUpdateFailed' => 'Update failed', + 'strAdd' => 'Add', + 'strAdminPassword' => 'Password', + 'strBack' => 'Back', + 'strCancel' => 'Cancel', + 'strChangePassword' => 'Change Password', + 'strClear' => 'Clear', + 'strClearQueryCache' => 'Clear Query Cache', + 'strCmdC' => 'Clears query cache', + 'strCmdD' => 'Debug mode', + 'strCmdDesc' => 'If it is a blank, this option is ignored.', + 'strCmdM' => 'Stop mode', + 'strCmdN' => 'Don\'t run in daemon mode', + 'strCmdPcpFile' => 'pcp.conf', + 'strCmdPgpoolFile' => 'pgpool.conf', + 'strColList' => 'Column List', + 'strColName' => 'Column Name of Distributed key', + 'strCommon' => 'Common', + 'strConnectionError' => 'Connection Error', + 'strConnTime' => 'Connection Create Time', + 'strConnUsed' => 'Use of Connection', + 'strConnUser' => 'Username', + 'strCreateTime' => 'Create Time', + 'strDataError' => 'Data Error', + 'strDateFormat' => 'M j G:i:s T Y', + 'strDb' => 'Database', + 'strDbName' => 'Database Name', + 'strDebug' => 'Debug Mode', + 'strDelete' => 'Delete', + 'strDeleted' => 'lines were deleted', + 'strDetail' => 'Detail', + 'strDetailInfo' => 'Detail Infomation', + 'strDisconnect' => 'Disconnect', + 'strDistDefFunc'=> 'Distributed Function Name', + 'strDown' => 'Down', + 'strError' => 'Error', + 'strErrorCode' => 'Error Code', + 'strErrorMessage' => 'Error Message', + 'strExecute' => 'Execute', + 'strFeature' => 'Feature', + 'strHealthCheck' => 'Health Check', + 'strHelp' => 'Help', + 'strInvalidation' => 'Invalidation', + 'strIPaddress' => 'IP Address', + 'strLanguage' => 'Language', + 'strLoadBalanceMode' => 'Load Balance Mode', + 'strLog' => 'Log', + 'strLogin' => 'Login', + 'strLoginName' => 'Login Name', + 'strLogout' => 'Logout', + 'strMasterServer' => 'Master Server', + 'strMeasures' => 'Measures', + 'strNodeInfo' => 'Node Info.', + 'strNodeStatus' => 'Node Status', + 'strNodeStatus1' => 'Up. Disconnect', + 'strNodeStatus2' => 'Up. Connected', + 'strNodeStatus3' => 'Down', + 'strNoNode' => 'There is no node', + 'strOff' => 'Off', + 'strOn' => 'On', + 'strParallelMode' => 'Parallel Mode', + 'strParameter' => 'Parameter', + 'strPassword' => 'Password', + 'strPasswordConfirmation' => 'Password Confirmation', + 'strPasswordFile' => 'Password File', + 'strPcpConfFile' => 'pcp.conf File', + 'strPcpDir' => 'PCP Directory', + 'strPcpHostName' => 'PCP Hostname', + 'strPcpRefreshTime' => 'Refresh Time', + 'strPcpTimeout' => 'PCP Timeout', + 'strPgConfFile' => 'pgpool.conf File', + 'strPgConfSetting' => 'pgpool.conf Setting', + 'strPgpool' => 'pgpool', + 'strPgpool1' => 'pgpool-I', + 'strPgpool2' => 'pgpool-II', + 'strPgpoolCommand' => 'pgpool Command', + 'strPgpoolCommandOption' => 'pgpool Command Option', + 'strPgpoolLogFile' => 'pgpool Logfile', + 'strPgpoolManagementSystem' => 'pgpool-II Management System', + 'strPgpoolServer' => 'pgpool-II Server', + 'strPgpoolStatus' => 'pgpool Status', + 'strPgpoolSummary' => 'Summary', + 'strPleaseWait' => 'Please wait...', + 'strPort' => 'Port', + 'strProcId' => 'Process ID', + 'strProcInfo' => 'Process Info.', + 'strProcTime' => 'Process Start Time', + 'strProtocolMajorVersion' => 'Protocol Major Version', + 'strProtocolNinorVersion' => 'Protocol Minor Version', + 'strQueryCache' => 'Query Cache', + 'strQueryStr' => 'Query', + 'strReplicationMode' => 'Replication Mode', + 'strReset' => 'Reset', + 'strRestart' => 'Restart', + 'strRestartOption' => 'pgpool Restart Option', + 'strRestartPgpool' => 'Restart pgpool', + 'strReturn' => 'Return', + 'strSchemaName' => 'Schema Name', + 'strSearch' => 'Search', + 'strSecondaryServer' => 'Secondary Server', + 'strSetting' => 'pgpoolAdmin Setting', + 'strSetup' => 'Setup', + 'strStartOption' => 'Start Option', + 'strStartPgpool' => 'Start pgpool', + 'strStatus' => 'Status', + 'strStopOption' => 'pgpool Stop Option', + 'strStopPgpool' => 'Stop pgpool', + 'strSummary' => 'Summary', + 'strSystemDb' => 'Partitioning Rule', + 'strTable' => 'Table', + 'strTypeList' => 'Type List of Column', + 'strUp' => 'Up', + 'strUpdate' => 'Update', + 'strValue' => 'Value', + 'strWeight' => 'Weight', + 'e1' => 'No found pgmgt.conf.php.', + 'e2' => 'No found message catalog.', + 'e3' => 'PCP command error occurred.', + 'e4' => 'No found pgpool.conf.', + 'e5' => 'No found Smarty template file.', + 'e6' => 'No found help.', + 'e8' => 'No found pcp_timeout in pgpool.conf', + 'e9' => 'No found pcp_timeout in pgpool.conf', + 'e7' => 'No found Parameter in pgpmgt.conf.php', + 'e1001' => 'PCP command error occurred.', + 'e1002' => 'pcp_node_count command error occurred.', + 'e1003' => 'pcp_node_info command error occurred.', + 'e1004' => 'pcp_proc_count command error occurred.', + 'e1005' => 'pcp_proc_info command error occurred.', + 'e1006' => 'pcp_stop_pgpool command error occurred.', + 'e1007' => 'pcp_detach_node command error occurred.', + 'e1008' => 'No found pgpool.conf.', + 'e1009' => 'No found pcp.conf.', + 'e1010' => 'pcp_attach_node command error occurred.', + 'e1011' => 'No found log ifle.', + 'e2001' => 'Database connection error occurred.', + 'e2002' => 'The error occurred when SELECT was executed', + 'e2003' => 'No found pgpool.conf.', + 'e3001' => 'Database connection error occurred.', + 'e3002' => 'The SQL error occurred when SELECT was executed', + 'e3003' => 'The SQL error occurred when INSERT was executed', + 'e3004' => 'The SQL error occurred when UPDATE was executed', + 'e3005' => 'The SQL error occurred when DELETE was executed', + 'e3006' => 'No found pgpool.conf.', + 'e4001' => 'No found pgpool.conf.', + 'e4002' => 'It is not possible to read to pgpool.conf. ', + 'e4003' => 'It is not possible to write to pgpool.conf. ', + 'e5001' => 'No found pgmgt.conf.php.', + 'e5002' => 'It is not possible to read to pgmgt.conf.php.', + 'e5003' => 'It is not possible to write to pgmgt.conf.php.', + 'e6001' => 'No found pcp.conf', + 'e6002' => 'It is not possible to read to pcp.conf. ', + 'e6003' => 'It is not possible to write to pcp.conf. ', + 'e7001' => 'No found pcp.conf.', + 'e8001' => 'Detailed information cannot be acquired.', + +); + +?> diff --git a/lang/ja.lang.php b/lang/ja.lang.php new file mode 100644 index 0000000..a006e28 --- /dev/null +++ b/lang/ja.lang.php @@ -0,0 +1,253 @@ + + * @copyright 2003-2006 PgPool Global Development Group + * @version CVS: $Id$ + */ + +$message = array( + 'lang' => 'ja', + 'strLang' => '日本語', + 'descBackend_hostname' => 'pgpoolが接続するPostgreSQLサーバ(postmaster)が動いているホスト名', + 'descBackend_port' => 'PostgreSQLサーバのポート番号', + 'descBackend_socket_dir' => 'PostgreSQLサーバのUnix domain socketのディレクトリ', + 'descBackend_weight' => 'ロードバランスモード時のSELECTを振り分ける「重み」の定義', + 'descChild_life_time' => 'pgpoolの子プロセスの寿命', + 'descChild_max_connections' => '各pgpool子プロセスが終了するまでの接続回数', + 'descConnection_cache' => 'コネクションをキャッシュ', + 'descConnection_life_time' => 'コネクションプール中のコネクションの有効期間(秒)', + 'descEnable_query_cache' => 'クエリキャッシュ機能の有効化', + 'descHealth_check_period' => 'ヘルスチェックを行う間隔(秒)', + 'descHealth_check_timeout' => 'ヘルスチェックが長時間待たされるのを防ぐためのタイムアウト値(秒)', + 'descHealth_check_user' => 'ヘルスチェックを行うためのPostgreSQLユーザ名', + 'descIgnore_leading_white_space' => 'trueならば、load balanceの際にSQL文行頭の空白を無視', + 'descInsert_lock' => '自動的にトランザクションの開始,テーブルロック,トランザクションの終了', + 'descListen_addresses' => 'TCP/IPコネクションを受け付けるアドレス', + 'descLoad_balance_mode' => 'レプリケーションモード時にSELECT文を各ノードにロードバランス', + 'descLog_statement' => 'trueならばSQL文をログ出力', + 'descLogdir' => 'pgpoolの各種ログファイルを格納するディレクトリ', + 'descMaster_slave_mode' => 'マスタ/スレーブモードでpgpoolを運転', + 'descMax_pool' => 'pgpoolの各サーバプロセスがキープするPostgreSQLへの最大コネクション数', + 'descNum_init_children' => 'preforkするpgpoolのサーバプロセス数', + 'descParallel_mode' => 'パラレルモードでpgpoolを運転', + 'descPcp_port' => 'pgpool-IIが受け付けているポート番号', + 'descPcp_socket_dir' => 'pcpがコネクションを受け付けるUnix domain socketディレクトリ', + 'descPcp_timeout' => 'この時間内にクライアントから応答がない場合はコネクションを切断して終了', + 'descPgpool2_hostname' => 'pgpool2 が動作しているホスト名', + 'descPort' => 'pgpoolがコネクションを受け付けるポート番号', + 'descPrint_timestamp' => 'pgpoolのログにタイムスタンプを追加', + 'descReplication_mode' => 'レプリケーションモードの有効化', + 'descReplication_stop_on_mismatch' => 'trueを指定するとマスタとセカンダリの間でデータの不一致があった場合に強制的に縮退運転', + 'descReplication_strict' => 'masterの問い合わせ処理の完了を待ってからsecondaryの処理', + 'descReplication_timeout' => 'replication_strictがfalseのときにデッドロックを監視するためのタイムアウト時間', + 'descReset_query_list' => 'セッションが終了するときにコネクションを初期化するためのSQLコマンド', + 'descSocket_dir' => 'pgpoolがコネクションを受け付けるUnix domain socketディレクトリ', + 'descSystem_db_dbname' => 'System DBのデータベース名', + 'descSystem_db_hostname' => 'System DBが動いているホスト名', + 'descSystem_db_password' => 'System DBに接続するユーザのパスワード', + 'descSystem_db_port' => 'System DBに接続するためのポート番号', + 'descSystem_db_schema' => 'System DBのスキーマ', + 'descSystem_db_user' => 'System DBに接続するときのユーザ名', + 'errAlreadyExist' => 'すでに登録されています', + 'errFileNotExecutable' => 'コマンドを実行できません', + 'errFileNotFound' => 'ファイルが見つかりません', + 'errFileNotWritable' => 'ファイルの書き込みができません', + 'errIllegalHostname' => '不正なホスト名です', + 'errInputEverything' => 'すべてを入力してください', + 'errNoDefined' => 'パラメータが設定されていません', + 'errNotSameLength' => '列名リストと列データ型リストの配列の長さが一致しません。同じ要素数である必要があります。', + 'errPasswordMismatch' => 'パスワードが一致しません', + 'errRequired' => 'これは必須項目です', + 'errShouldBeInteger' => '0以上の整数を入力してください', + 'errShouldBeZeroOrMore' => '0以上である必要があります', + 'errSingleQuotation' => '配列要素をシングルクォーテーションで囲んでください。', + 'msgDeleteConfirm' => '本当に削除してよいですか?', + 'msgMasterDbConnectionError' => 'マスターDBに接続できません', + 'msgPgpoolConfNotFound' => 'pgpool.confが見つかりません', + 'msgPleaseSetup' => '設定ファイルが見つかりません。セットアップを実行してください。', + 'msgRestart' => '変更を反映するには再起動してください', + 'msgRestartPgpool' => 'pgpoolを再起動してよいですか?', + 'msgSameAsPasswordFile' => '値はパスワードファイルの設定値となります', + 'msgSameAsPgpoolFile' => '値はpgpool.confファイルの設定値となります', + 'msgStopPgpool' => 'pgpoolを停止してよいですか?', + 'msgUpdateComplete' => '更新は正常に終了しました', + 'msgUpdateFailed' => '更新に失敗しました', + 'strAdd' => '追加', + 'strAdminPassword' => '管理者パスワード', + 'strBack' => '戻る', + 'strCancel' => 'キャンセル', + 'strChangePassword' => 'パスワード変更', + 'strClear' => 'クリア', + 'strClearQueryCache' => 'クエリキャッシュ削除', + 'strCmdC' => 'クエリキャッシュクリア', + 'strCmdD' => 'デバッグモード', + 'strCmdDesc' => '空白の場合には無視', + 'strCmdM' => '停止モード', + 'strCmdN' => '非デーモンモード', + 'strCmdPcpFile' => 'pcp.conf', + 'strCmdPgpoolFile' => 'pgpool.conf', + 'strColList' => '列名リスト', + 'strColName' => '分散キー列名', + 'strCommon' => '共通', + 'strConnectionError' => 'コネクションエラー', + 'strConnTime' => 'コネクション作成時刻', + 'strConnUsed' => 'コネクション使用回数', + 'strConnUser' => '接続ユーザ名', + 'strCreateTime' => '作成時刻', + 'strDataError' => 'データエラー', + 'strDateFormat' => 'Y年m月d日 H時i分s秒', + 'strDb' => 'データベース名', + 'strDbName' => 'データベース名', + 'strDebug' => 'デバッグモード', + 'strDelete' => '削除', + 'strDeleted' => 'レコードが削除されました', + 'strDetail' => '詳細', + 'strDetailInfo' => '詳細情報', + 'strDisconnect' => '切断', + 'strDistDefFunc'=> '分散関数名', + 'strDown' => 'ダウン', + 'strError' => 'エラー', + 'strErrorCode' => 'エラーコード', + 'strErrorMessage' => 'エラーメッセージ', + 'strExecute' => '実行', + 'strFeature' => '機能', + 'strHealthCheck' => 'ヘルスチェック', + 'strHelp' => 'ヘルプ', + 'strInvalidation' => '無効', + 'strIPaddress' => 'IPアドレス', + 'strLanguage' => '言語', + 'strLoadBalanceMode' => 'ロードバランスモード', + 'strLog' => 'ログ', + 'strLogin' => 'ログイン', + 'strLoginName' => 'ログイン名', + 'strLogout' => 'ログアウト', + 'strMasterServer' => 'マスターサーバ', + 'strMeasures' => '対策', + 'strNodeInfo' => 'ノード情報', + 'strNodeStatus' => 'ノードステータス', + 'strNodeStatus1' => 'ノード稼働中。接続無し', + 'strNodeStatus2' => 'ノード稼働中。接続有り', + 'strNodeStatus3' => 'ノードダウン', + 'strNoNode' => 'ノードがありません', + 'strOff' => 'オフ', + 'strOn' => 'オン', + 'strParallelMode' => 'パラレルモード', + 'strParameter' => '項目', + 'strPassword' => 'パスワード', + 'strPasswordConfirmation' => 'パスワード(確認)', + 'strPasswordFile' => 'パスワードファイル', + 'strPcpConfFile' => 'pcp.confファイル', + 'strPcpDir' => 'PCPディレクトリ', + 'strPcpHostName' => 'PCPホスト名', + 'strPcpRefreshTime' => '更新間隔(0で自動更新しない)', + 'strPcpTimeout' => 'PCPタイムアウト', + 'strPgConfFile' => 'pgpool.confファイル', + 'strPgConfSetting' => 'pgpool.conf設定', + 'strPgpool' => 'pgpool', + 'strPgpool1' => 'pgpool-I', + 'strPgpool2' => 'pgpool-II', + 'strPgpoolCommand' => 'pgpoolコマンド', + 'strPgpoolCommandOption' => 'pgpoolコマンドオプション', + 'strPgpoolLogFile' => 'pgpoolログファイル', + 'strPgpoolManagementSystem' => 'pgpool-II管理システム', + 'strPgpoolServer' => 'pgpool-IIサーバ', + 'strPgpoolStatus' => 'pgpoolステータス', + 'strPgpoolSummary' => 'サマリー', + 'strPleaseWait' => 'しばらくお待ちください・・・', + 'strPort' => 'ポート', + 'strProcId' => 'プロセスID', + 'strProcInfo' => 'プロセス情報', + 'strProcTime' => 'プロセススタート時刻', + 'strProtocolMajorVersion' => 'プロトコルメジャーバージョン', + 'strProtocolNinorVersion' => 'プロトコルマイナーバージョン', + 'strQueryCache' => 'クエリキャッシュ', + 'strQueryStr' => 'クエリ文字列', + 'strReplicationMode' => 'レプリケーションモード', + 'strReset' => 'リセット', + 'strRestart' => '再起動', + 'strRestartOption' => 'pgpool再起動オプション', + 'strRestartPgpool' => 'pgpool再起動', + 'strReturn' => '復帰', + 'strSchemaName' => 'スキーマ名', + 'strSearch' => '検索', + 'strSecondaryServer' => 'セカンダリサーバ', + 'strSetting' => '管理ツール設定', + 'strSetup' => 'セットアップ', + 'strStartOption' => '起動オプション', + 'strStartPgpool' => 'pgpool起動', + 'strStatus' => 'ステータス', + 'strStopOption' => 'pgpool停止オプション', + 'strStopPgpool' => 'pgpool停止', + 'strSummary' => '概要', + 'strSystemDb' => '分散ルール', + 'strTable' => 'テーブル名', + 'strTypeList' => '列データ型リスト', + 'strUp' => 'アップ', + 'strUpdate' => '更新', + 'strValue' => '値', + 'strWeight' => 'ウェイト', + 'e1' => 'pgmgt.conf.phpが見つかりません', + 'e2' => 'メッセージカタログが見つかりません', + 'e3' => 'pcpコマンドエラーが発生しました', + 'e1' => 'pgmgt.conf.phpが見つかりません', + 'e2' => 'メッセージカタログが見つかりません', + 'e3' => 'pcpコマンドエラーが発生しました', + 'e4' => 'pgpool.confが見つかりません', + 'e5' => 'テンプレートファイルが見つかりません', + 'e6' => 'ヘルプが見つかりません', + 'e7' => 'pgmgt.conf.phpのパラメータが足りません', + 'e8' => 'pcp_timeoutがpgpool.confで見つかりません', + 'e9' => 'pcp_portがpgpool.confで見つかりません', + 'e1001' => 'pcpコマンドエラーが発生しました', + 'e1002' => 'pcp_node_countコマンドでエラーが発生しました', + 'e1003' => 'pcp_node_infoコマンドでエラーが発生しました', + 'e1004' => 'pcp_proc_countコマンドでエラーが発生しました', + 'e1005' => 'pcp_proc_infoコマンドでエラーが発生しました', + 'e1006' => 'pcp_stop_pgpoolコマンドでエラーが発生しました', + 'e1007' => 'pcp_detach_nodeコマンドでエラーが発生しました', + 'e1008' => '指定したpgpool.confが見つかりません', + 'e1009' => '指定したpcp.confが見つかりません', + 'e1010' => 'pcp_attach_nodeコマンドでエラーが発生しました', + 'e1011' => 'ログファイルが見つかりません', + 'e2001' => 'データベースに接続できません', + 'e2002' => 'レコード取得時にエラーが発生しました', + 'e2003' => 'pgpool.confが見つかりません', + 'e3001' => 'データベースに接続できません', + 'e3002' => 'レコード取得時にエラーが発生しました', + 'e3003' => 'レコード登録時にエラーが発生しました', + 'e3004' => 'レコード更新時にエラーが発生しました', + 'e3005' => 'レコード削除時にエラーが発生しました', + 'e3006' => 'pgpool.confが見つかりません', + 'e4001' => 'pgpool.confが見つかりません', + 'e4002' => 'pgpool.confから読み込みができません', + 'e4003' => 'pgpool.confiに書き込みができません', + 'e5001' => 'pgmgt.conf.phpが見つかりません', + 'e5002' => 'pgmgt.conf.phpから読み込みができません', + 'e5003' => 'pgmgt.conf.phpに書き込みができません', + 'e6001' => 'pcp.confが見つかりません', + 'e6002' => 'pcp.confに読み込みができません', + 'e6003' => 'pcp.confに書き込みができません', + 'e7001' => 'pcp.confが見つかりません', + 'e8001' => '詳細情報が取得できません', + +); + +?> diff --git a/libs/Config_File.class.php b/libs/Config_File.class.php new file mode 100644 index 0000000..c0c8a0c --- /dev/null +++ b/libs/Config_File.class.php @@ -0,0 +1,389 @@ + + * @access public + * @package Smarty + */ + +/* $Id$ */ + +/** + * Config file reading class + * @package Smarty + */ +class Config_File { + /**#@+ + * Options + * @var boolean + */ + /** + * Controls whether variables with the same name overwrite each other. + */ + var $overwrite = true; + + /** + * Controls whether config values of on/true/yes and off/false/no get + * converted to boolean values automatically. + */ + var $booleanize = true; + + /** + * Controls whether hidden config sections/vars are read from the file. + */ + var $read_hidden = true; + + /** + * Controls whether or not to fix mac or dos formatted newlines. + * If set to true, \r or \r\n will be changed to \n. + */ + var $fix_newlines = true; + /**#@-*/ + + /** @access private */ + var $_config_path = ""; + var $_config_data = array(); + /**#@-*/ + + /** + * Constructs a new config file class. + * + * @param string $config_path (optional) path to the config files + */ + function Config_File($config_path = NULL) + { + if (isset($config_path)) + $this->set_path($config_path); + } + + + /** + * Set the path where configuration files can be found. + * + * @param string $config_path path to the config files + */ + function set_path($config_path) + { + if (!empty($config_path)) { + if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) { + $this->_trigger_error_msg("Bad config file path '$config_path'"); + return; + } + if(substr($config_path, -1) != DIRECTORY_SEPARATOR) { + $config_path .= DIRECTORY_SEPARATOR; + } + + $this->_config_path = $config_path; + } + } + + + /** + * Retrieves config info based on the file, section, and variable name. + * + * @param string $file_name config file to get info for + * @param string $section_name (optional) section to get info for + * @param string $var_name (optional) variable to get info for + * @return string|array a value or array of values + */ + function get($file_name, $section_name = NULL, $var_name = NULL) + { + if (empty($file_name)) { + $this->_trigger_error_msg('Empty config file name'); + return; + } else { + $file_name = $this->_config_path . $file_name; + if (!isset($this->_config_data[$file_name])) + $this->load_file($file_name, false); + } + + if (!empty($var_name)) { + if (empty($section_name)) { + return $this->_config_data[$file_name]["vars"][$var_name]; + } else { + if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name])) + return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]; + else + return array(); + } + } else { + if (empty($section_name)) { + return (array)$this->_config_data[$file_name]["vars"]; + } else { + if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"])) + return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"]; + else + return array(); + } + } + } + + + /** + * Retrieves config info based on the key. + * + * @param $file_name string config key (filename/section/var) + * @return string|array same as get() + * @uses get() retrieves information from config file and returns it + */ + function &get_key($config_key) + { + list($file_name, $section_name, $var_name) = explode('/', $config_key, 3); + $result = &$this->get($file_name, $section_name, $var_name); + return $result; + } + + /** + * Get all loaded config file names. + * + * @return array an array of loaded config file names + */ + function get_file_names() + { + return array_keys($this->_config_data); + } + + + /** + * Get all section names from a loaded file. + * + * @param string $file_name config file to get section names from + * @return array an array of section names from the specified file + */ + function get_section_names($file_name) + { + $file_name = $this->_config_path . $file_name; + if (!isset($this->_config_data[$file_name])) { + $this->_trigger_error_msg("Unknown config file '$file_name'"); + return; + } + + return array_keys($this->_config_data[$file_name]["sections"]); + } + + + /** + * Get all global or section variable names. + * + * @param string $file_name config file to get info for + * @param string $section_name (optional) section to get info for + * @return array an array of variables names from the specified file/section + */ + function get_var_names($file_name, $section = NULL) + { + if (empty($file_name)) { + $this->_trigger_error_msg('Empty config file name'); + return; + } else if (!isset($this->_config_data[$file_name])) { + $this->_trigger_error_msg("Unknown config file '$file_name'"); + return; + } + + if (empty($section)) + return array_keys($this->_config_data[$file_name]["vars"]); + else + return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]); + } + + + /** + * Clear loaded config data for a certain file or all files. + * + * @param string $file_name file to clear config data for + */ + function clear($file_name = NULL) + { + if ($file_name === NULL) + $this->_config_data = array(); + else if (isset($this->_config_data[$file_name])) + $this->_config_data[$file_name] = array(); + } + + + /** + * Load a configuration file manually. + * + * @param string $file_name file name to load + * @param boolean $prepend_path whether current config path should be + * prepended to the filename + */ + function load_file($file_name, $prepend_path = true) + { + if ($prepend_path && $this->_config_path != "") + $config_file = $this->_config_path . $file_name; + else + $config_file = $file_name; + + ini_set('track_errors', true); + $fp = @fopen($config_file, "r"); + if (!is_resource($fp)) { + $this->_trigger_error_msg("Could not open config file '$config_file'"); + return false; + } + + $contents = ($size = filesize($config_file)) ? fread($fp, $size) : ''; + fclose($fp); + + $this->_config_data[$config_file] = $this->parse_contents($contents); + return true; + } + + /** + * Store the contents of a file manually. + * + * @param string $config_file file name of the related contents + * @param string $contents the file-contents to parse + */ + function set_file_contents($config_file, $contents) + { + $this->_config_data[$config_file] = $this->parse_contents($contents); + return true; + } + + /** + * parse the source of a configuration file manually. + * + * @param string $contents the file-contents to parse + */ + function parse_contents($contents) + { + if($this->fix_newlines) { + // fix mac/dos formatted newlines + $contents = preg_replace('!\r\n?!', "\n", $contents); + } + + $config_data = array(); + $config_data['sections'] = array(); + $config_data['vars'] = array(); + + /* reference to fill with data */ + $vars =& $config_data['vars']; + + /* parse file line by line */ + preg_match_all('!^.*\r?\n?!m', $contents, $match); + $lines = $match[0]; + for ($i=0, $count=count($lines); $i<$count; $i++) { + $line = $lines[$i]; + if (empty($line)) continue; + + if ( substr($line, 0, 1) == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) { + /* section found */ + if (substr($match[1], 0, 1) == '.') { + /* hidden section */ + if ($this->read_hidden) { + $section_name = substr($match[1], 1); + } else { + /* break reference to $vars to ignore hidden section */ + unset($vars); + $vars = array(); + continue; + } + } else { + $section_name = $match[1]; + } + if (!isset($config_data['sections'][$section_name])) + $config_data['sections'][$section_name] = array('vars' => array()); + $vars =& $config_data['sections'][$section_name]['vars']; + continue; + } + + if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) { + /* variable found */ + $var_name = rtrim($match[1]); + if (strpos($match[2], '"""') === 0) { + /* handle multiline-value */ + $lines[$i] = substr($match[2], 3); + $var_value = ''; + while ($i<$count) { + if (($pos = strpos($lines[$i], '"""')) === false) { + $var_value .= $lines[$i++]; + } else { + /* end of multiline-value */ + $var_value .= substr($lines[$i], 0, $pos); + break; + } + } + $booleanize = false; + + } else { + /* handle simple value */ + $var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2])); + $booleanize = $this->booleanize; + + } + $this->_set_config_var($vars, $var_name, $var_value, $booleanize); + } + /* else unparsable line / means it is a comment / means ignore it */ + } + return $config_data; + } + + /**#@+ @access private */ + /** + * @param array &$container + * @param string $var_name + * @param mixed $var_value + * @param boolean $booleanize determines whether $var_value is converted to + * to true/false + */ + function _set_config_var(&$container, $var_name, $var_value, $booleanize) + { + if (substr($var_name, 0, 1) == '.') { + if (!$this->read_hidden) + return; + else + $var_name = substr($var_name, 1); + } + + if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) { + $this->_trigger_error_msg("Bad variable name '$var_name'"); + return; + } + + if ($booleanize) { + if (preg_match("/^(on|true|yes)$/i", $var_value)) + $var_value = true; + else if (preg_match("/^(off|false|no)$/i", $var_value)) + $var_value = false; + } + + if (!isset($container[$var_name]) || $this->overwrite) + $container[$var_name] = $var_value; + else { + settype($container[$var_name], 'array'); + $container[$var_name][] = $var_value; + } + } + + /** + * @uses trigger_error() creates a PHP warning/error + * @param string $error_msg + * @param integer $error_type one of + */ + function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Config_File error: $error_msg", $error_type); + } + /**#@-*/ +} + +?> diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php new file mode 100644 index 0000000..8e6a459 --- /dev/null +++ b/libs/Smarty.class.php @@ -0,0 +1,1944 @@ + + * @author Andrei Zmievski + * @package Smarty + * @version 2.6.13 + */ + +/* $Id$ */ + +/** + * DIR_SEP isn't used anymore, but third party apps might + */ +if(!defined('DIR_SEP')) { + define('DIR_SEP', DIRECTORY_SEPARATOR); +} + +/** + * set SMARTY_DIR to absolute path to Smarty library files. + * if not defined, include_path will be used. Sets SMARTY_DIR only if user + * application has not already defined it. + */ + +if (!defined('SMARTY_DIR')) { + define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); +} + +if (!defined('SMARTY_CORE_DIR')) { + define('SMARTY_CORE_DIR', SMARTY_DIR . 'internals' . DIRECTORY_SEPARATOR); +} + +define('SMARTY_PHP_PASSTHRU', 0); +define('SMARTY_PHP_QUOTE', 1); +define('SMARTY_PHP_REMOVE', 2); +define('SMARTY_PHP_ALLOW', 3); + +/** + * @package Smarty + */ +class Smarty +{ + /**#@+ + * Smarty Configuration Section + */ + + /** + * The name of the directory where templates are located. + * + * @var string + */ + var $template_dir = 'templates'; + + /** + * The directory where compiled templates are located. + * + * @var string + */ + var $compile_dir = 'templates_c'; + + /** + * The directory where config files are located. + * + * @var string + */ + var $config_dir = 'configs'; + + /** + * An array of directories searched for plugins. + * + * @var array + */ + var $plugins_dir = array('plugins'); + + /** + * If debugging is enabled, a debug console window will display + * when the page loads (make sure your browser allows unrequested + * popup windows) + * + * @var boolean + */ + var $debugging = false; + + /** + * When set, smarty does uses this value as error_reporting-level. + * + * @var boolean + */ + var $error_reporting = null; + + /** + * This is the path to the debug console template. If not set, + * the default one will be used. + * + * @var string + */ + var $debug_tpl = ''; + + /** + * This determines if debugging is enable-able from the browser. + *
    + *
  • NONE => no debugging control allowed
  • + *
  • URL => enable debugging when SMARTY_DEBUG is found in the URL.
  • + *
+ * @link http://www.foo.dom/index.php?SMARTY_DEBUG + * @var string + */ + var $debugging_ctrl = 'NONE'; + + /** + * This tells Smarty whether to check for recompiling or not. Recompiling + * does not need to happen unless a template or config file is changed. + * Typically you enable this during development, and disable for + * production. + * + * @var boolean + */ + var $compile_check = true; + + /** + * This forces templates to compile every time. Useful for development + * or debugging. + * + * @var boolean + */ + var $force_compile = false; + + /** + * This enables template caching. + *
    + *
  • 0 = no caching
  • + *
  • 1 = use class cache_lifetime value
  • + *
  • 2 = use cache_lifetime in cache file
  • + *
+ * @var integer + */ + var $caching = 0; + + /** + * The name of the directory for cache files. + * + * @var string + */ + var $cache_dir = 'cache'; + + /** + * This is the number of seconds cached content will persist. + *
    + *
  • 0 = always regenerate cache
  • + *
  • -1 = never expires
  • + *
+ * + * @var integer + */ + var $cache_lifetime = 3600; + + /** + * Only used when $caching is enabled. If true, then If-Modified-Since headers + * are respected with cached content, and appropriate HTTP headers are sent. + * This way repeated hits to a cached page do not send the entire page to the + * client every time. + * + * @var boolean + */ + var $cache_modified_check = false; + + /** + * This determines how Smarty handles "" tags in templates. + * possible values: + *
    + *
  • SMARTY_PHP_PASSTHRU -> print tags as plain text
  • + *
  • SMARTY_PHP_QUOTE -> escape tags as entities
  • + *
  • SMARTY_PHP_REMOVE -> remove php tags
  • + *
  • SMARTY_PHP_ALLOW -> execute php tags
  • + *
+ * + * @var integer + */ + var $php_handling = SMARTY_PHP_PASSTHRU; + + /** + * This enables template security. When enabled, many things are restricted + * in the templates that normally would go unchecked. This is useful when + * untrusted parties are editing templates and you want a reasonable level + * of security. (no direct execution of PHP in templates for example) + * + * @var boolean + */ + var $security = false; + + /** + * This is the list of template directories that are considered secure. This + * is used only if {@link $security} is enabled. One directory per array + * element. {@link $template_dir} is in this list implicitly. + * + * @var array + */ + var $secure_dir = array(); + + /** + * These are the security settings for Smarty. They are used only when + * {@link $security} is enabled. + * + * @var array + */ + var $security_settings = array( + 'PHP_HANDLING' => false, + 'IF_FUNCS' => array('array', 'list', + 'isset', 'empty', + 'count', 'sizeof', + 'in_array', 'is_array', + 'true', 'false', 'null'), + 'INCLUDE_ANY' => false, + 'PHP_TAGS' => false, + 'MODIFIER_FUNCS' => array('count'), + 'ALLOW_CONSTANTS' => false + ); + + /** + * This is an array of directories where trusted php scripts reside. + * {@link $security} is disabled during their inclusion/execution. + * + * @var array + */ + var $trusted_dir = array(); + + /** + * The left delimiter used for the template tags. + * + * @var string + */ + var $left_delimiter = '{'; + + /** + * The right delimiter used for the template tags. + * + * @var string + */ + var $right_delimiter = '}'; + + /** + * The order in which request variables are registered, similar to + * variables_order in php.ini E = Environment, G = GET, P = POST, + * C = Cookies, S = Server + * + * @var string + */ + var $request_vars_order = 'EGPCS'; + + /** + * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false) + * are uses as request-vars or $_*[]-vars. note: if + * request_use_auto_globals is true, then $request_vars_order has + * no effect, but the php-ini-value "gpc_order" + * + * @var boolean + */ + var $request_use_auto_globals = true; + + /** + * Set this if you want different sets of compiled files for the same + * templates. This is useful for things like different languages. + * Instead of creating separate sets of templates per language, you + * set different compile_ids like 'en' and 'de'. + * + * @var string + */ + var $compile_id = null; + + /** + * This tells Smarty whether or not to use sub dirs in the cache/ and + * templates_c/ directories. sub directories better organized, but + * may not work well with PHP safe mode enabled. + * + * @var boolean + * + */ + var $use_sub_dirs = false; + + /** + * This is a list of the modifiers to apply to all template variables. + * Put each modifier in a separate array element in the order you want + * them applied. example: array('escape:"htmlall"'); + * + * @var array + */ + var $default_modifiers = array(); + + /** + * This is the resource type to be used when not specified + * at the beginning of the resource path. examples: + * $smarty->display('file:index.tpl'); + * $smarty->display('db:index.tpl'); + * $smarty->display('index.tpl'); // will use default resource type + * {include file="file:index.tpl"} + * {include file="db:index.tpl"} + * {include file="index.tpl"} {* will use default resource type *} + * + * @var array + */ + var $default_resource_type = 'file'; + + /** + * The function used for cache file handling. If not set, built-in caching is used. + * + * @var null|string function name + */ + var $cache_handler_func = null; + + /** + * This indicates which filters are automatically loaded into Smarty. + * + * @var array array of filter names + */ + var $autoload_filters = array(); + + /**#@+ + * @var boolean + */ + /** + * This tells if config file vars of the same name overwrite each other or not. + * if disabled, same name variables are accumulated in an array. + */ + var $config_overwrite = true; + + /** + * This tells whether or not to automatically booleanize config file variables. + * If enabled, then the strings "on", "true", and "yes" are treated as boolean + * true, and "off", "false" and "no" are treated as boolean false. + */ + var $config_booleanize = true; + + /** + * This tells whether hidden sections [.foobar] are readable from the + * tempalates or not. Normally you would never allow this since that is + * the point behind hidden sections: the application can access them, but + * the templates cannot. + */ + var $config_read_hidden = false; + + /** + * This tells whether or not automatically fix newlines in config files. + * It basically converts \r (mac) or \r\n (dos) to \n + */ + var $config_fix_newlines = true; + /**#@-*/ + + /** + * If a template cannot be found, this PHP function will be executed. + * Useful for creating templates on-the-fly or other special action. + * + * @var string function name + */ + var $default_template_handler_func = ''; + + /** + * The file that contains the compiler class. This can a full + * pathname, or relative to the php_include path. + * + * @var string + */ + var $compiler_file = 'Smarty_Compiler.class.php'; + + /** + * The class used for compiling templates. + * + * @var string + */ + var $compiler_class = 'Smarty_Compiler'; + + /** + * The class used to load config vars. + * + * @var string + */ + var $config_class = 'Config_File'; + +/**#@+ + * END Smarty Configuration Section + * There should be no need to touch anything below this line. + * @access private + */ + /** + * where assigned template vars are kept + * + * @var array + */ + var $_tpl_vars = array(); + + /** + * stores run-time $smarty.* vars + * + * @var null|array + */ + var $_smarty_vars = null; + + /** + * keeps track of sections + * + * @var array + */ + var $_sections = array(); + + /** + * keeps track of foreach blocks + * + * @var array + */ + var $_foreach = array(); + + /** + * keeps track of tag hierarchy + * + * @var array + */ + var $_tag_stack = array(); + + /** + * configuration object + * + * @var Config_file + */ + var $_conf_obj = null; + + /** + * loaded configuration settings + * + * @var array + */ + var $_config = array(array('vars' => array(), 'files' => array())); + + /** + * md5 checksum of the string 'Smarty' + * + * @var string + */ + var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; + + /** + * Smarty version number + * + * @var string + */ + var $_version = '2.6.13'; + + /** + * current template inclusion depth + * + * @var integer + */ + var $_inclusion_depth = 0; + + /** + * for different compiled templates + * + * @var string + */ + var $_compile_id = null; + + /** + * text in URL to enable debug mode + * + * @var string + */ + var $_smarty_debug_id = 'SMARTY_DEBUG'; + + /** + * debugging information for debug console + * + * @var array + */ + var $_smarty_debug_info = array(); + + /** + * info that makes up a cache file + * + * @var array + */ + var $_cache_info = array(); + + /** + * default file permissions + * + * @var integer + */ + var $_file_perms = 0644; + + /** + * default dir permissions + * + * @var integer + */ + var $_dir_perms = 0771; + + /** + * registered objects + * + * @var array + */ + var $_reg_objects = array(); + + /** + * table keeping track of plugins + * + * @var array + */ + var $_plugins = array( + 'modifier' => array(), + 'function' => array(), + 'block' => array(), + 'compiler' => array(), + 'prefilter' => array(), + 'postfilter' => array(), + 'outputfilter' => array(), + 'resource' => array(), + 'insert' => array()); + + + /** + * cache serials + * + * @var array + */ + var $_cache_serials = array(); + + /** + * name of optional cache include file + * + * @var string + */ + var $_cache_include = null; + + /** + * indicate if the current code is used in a compiled + * include + * + * @var string + */ + var $_cache_including = false; + + /**#@-*/ + /** + * The class constructor. + */ + function Smarty() + { + $this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] + : @$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']); + } + + /** + * assigns values to template variables + * + * @param array|string $tpl_var the template variable name(s) + * @param mixed $value the value to assign + */ + function assign($tpl_var, $value = null) + { + if (is_array($tpl_var)){ + foreach ($tpl_var as $key => $val) { + if ($key != '') { + $this->_tpl_vars[$key] = $val; + } + } + } else { + if ($tpl_var != '') + $this->_tpl_vars[$tpl_var] = $value; + } + } + + /** + * assigns values to template variables by reference + * + * @param string $tpl_var the template variable name + * @param mixed $value the referenced value to assign + */ + function assign_by_ref($tpl_var, &$value) + { + if ($tpl_var != '') + $this->_tpl_vars[$tpl_var] = &$value; + } + + /** + * appends values to template variables + * + * @param array|string $tpl_var the template variable name(s) + * @param mixed $value the value to append + */ + function append($tpl_var, $value=null, $merge=false) + { + if (is_array($tpl_var)) { + // $tpl_var is an array, ignore $value + foreach ($tpl_var as $_key => $_val) { + if ($_key != '') { + if(!@is_array($this->_tpl_vars[$_key])) { + settype($this->_tpl_vars[$_key],'array'); + } + if($merge && is_array($_val)) { + foreach($_val as $_mkey => $_mval) { + $this->_tpl_vars[$_key][$_mkey] = $_mval; + } + } else { + $this->_tpl_vars[$_key][] = $_val; + } + } + } + } else { + if ($tpl_var != '' && isset($value)) { + if(!@is_array($this->_tpl_vars[$tpl_var])) { + settype($this->_tpl_vars[$tpl_var],'array'); + } + if($merge && is_array($value)) { + foreach($value as $_mkey => $_mval) { + $this->_tpl_vars[$tpl_var][$_mkey] = $_mval; + } + } else { + $this->_tpl_vars[$tpl_var][] = $value; + } + } + } + } + + /** + * appends values to template variables by reference + * + * @param string $tpl_var the template variable name + * @param mixed $value the referenced value to append + */ + function append_by_ref($tpl_var, &$value, $merge=false) + { + if ($tpl_var != '' && isset($value)) { + if(!@is_array($this->_tpl_vars[$tpl_var])) { + settype($this->_tpl_vars[$tpl_var],'array'); + } + if ($merge && is_array($value)) { + foreach($value as $_key => $_val) { + $this->_tpl_vars[$tpl_var][$_key] = &$value[$_key]; + } + } else { + $this->_tpl_vars[$tpl_var][] = &$value; + } + } + } + + + /** + * clear the given assigned template variable. + * + * @param string $tpl_var the template variable to clear + */ + function clear_assign($tpl_var) + { + if (is_array($tpl_var)) + foreach ($tpl_var as $curr_var) + unset($this->_tpl_vars[$curr_var]); + else + unset($this->_tpl_vars[$tpl_var]); + } + + + /** + * Registers custom function to be used in templates + * + * @param string $function the name of the template function + * @param string $function_impl the name of the PHP function to register + */ + function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) + { + $this->_plugins['function'][$function] = + array($function_impl, null, null, false, $cacheable, $cache_attrs); + + } + + /** + * Unregisters custom function + * + * @param string $function name of template function + */ + function unregister_function($function) + { + unset($this->_plugins['function'][$function]); + } + + /** + * Registers object to be used in templates + * + * @param string $object name of template object + * @param object &$object_impl the referenced PHP object to register + * @param null|array $allowed list of allowed methods (empty = all) + * @param boolean $smarty_args smarty argument format, else traditional + * @param null|array $block_functs list of methods that are block format + */ + function register_object($object, &$object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) + { + settype($allowed, 'array'); + settype($smarty_args, 'boolean'); + $this->_reg_objects[$object] = + array(&$object_impl, $allowed, $smarty_args, $block_methods); + } + + /** + * Unregisters object + * + * @param string $object name of template object + */ + function unregister_object($object) + { + unset($this->_reg_objects[$object]); + } + + + /** + * Registers block function to be used in templates + * + * @param string $block name of template block + * @param string $block_impl PHP function to register + */ + function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) + { + $this->_plugins['block'][$block] = + array($block_impl, null, null, false, $cacheable, $cache_attrs); + } + + /** + * Unregisters block function + * + * @param string $block name of template function + */ + function unregister_block($block) + { + unset($this->_plugins['block'][$block]); + } + + /** + * Registers compiler function + * + * @param string $function name of template function + * @param string $function_impl name of PHP function to register + */ + function register_compiler_function($function, $function_impl, $cacheable=true) + { + $this->_plugins['compiler'][$function] = + array($function_impl, null, null, false, $cacheable); + } + + /** + * Unregisters compiler function + * + * @param string $function name of template function + */ + function unregister_compiler_function($function) + { + unset($this->_plugins['compiler'][$function]); + } + + /** + * Registers modifier to be used in templates + * + * @param string $modifier name of template modifier + * @param string $modifier_impl name of PHP function to register + */ + function register_modifier($modifier, $modifier_impl) + { + $this->_plugins['modifier'][$modifier] = + array($modifier_impl, null, null, false); + } + + /** + * Unregisters modifier + * + * @param string $modifier name of template modifier + */ + function unregister_modifier($modifier) + { + unset($this->_plugins['modifier'][$modifier]); + } + + /** + * Registers a resource to fetch a template + * + * @param string $type name of resource + * @param array $functions array of functions to handle resource + */ + function register_resource($type, $functions) + { + if (count($functions)==4) { + $this->_plugins['resource'][$type] = + array($functions, false); + + } elseif (count($functions)==5) { + $this->_plugins['resource'][$type] = + array(array(array(&$functions[0], $functions[1]) + ,array(&$functions[0], $functions[2]) + ,array(&$functions[0], $functions[3]) + ,array(&$functions[0], $functions[4])) + ,false); + + } else { + $this->trigger_error("malformed function-list for '$type' in register_resource"); + + } + } + + /** + * Unregisters a resource + * + * @param string $type name of resource + */ + function unregister_resource($type) + { + unset($this->_plugins['resource'][$type]); + } + + /** + * Registers a prefilter function to apply + * to a template before compiling + * + * @param string $function name of PHP function to register + */ + function register_prefilter($function) + { + $_name = (is_array($function)) ? $function[1] : $function; + $this->_plugins['prefilter'][$_name] + = array($function, null, null, false); + } + + /** + * Unregisters a prefilter function + * + * @param string $function name of PHP function + */ + function unregister_prefilter($function) + { + unset($this->_plugins['prefilter'][$function]); + } + + /** + * Registers a postfilter function to apply + * to a compiled template after compilation + * + * @param string $function name of PHP function to register + */ + function register_postfilter($function) + { + $_name = (is_array($function)) ? $function[1] : $function; + $this->_plugins['postfilter'][$_name] + = array($function, null, null, false); + } + + /** + * Unregisters a postfilter function + * + * @param string $function name of PHP function + */ + function unregister_postfilter($function) + { + unset($this->_plugins['postfilter'][$function]); + } + + /** + * Registers an output filter function to apply + * to a template output + * + * @param string $function name of PHP function + */ + function register_outputfilter($function) + { + $_name = (is_array($function)) ? $function[1] : $function; + $this->_plugins['outputfilter'][$_name] + = array($function, null, null, false); + } + + /** + * Unregisters an outputfilter function + * + * @param string $function name of PHP function + */ + function unregister_outputfilter($function) + { + unset($this->_plugins['outputfilter'][$function]); + } + + /** + * load a filter of specified type and name + * + * @param string $type filter type + * @param string $name filter name + */ + function load_filter($type, $name) + { + switch ($type) { + case 'output': + $_params = array('plugins' => array(array($type . 'filter', $name, null, null, false))); + require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + break; + + case 'pre': + case 'post': + if (!isset($this->_plugins[$type . 'filter'][$name])) + $this->_plugins[$type . 'filter'][$name] = false; + break; + } + } + + /** + * clear cached content for the given template and cache id + * + * @param string $tpl_file name of template file + * @param string $cache_id name of cache_id + * @param string $compile_id name of compile_id + * @param string $exp_time expiration time + * @return boolean + */ + function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) + { + + if (!isset($compile_id)) + $compile_id = $this->compile_id; + + if (!isset($tpl_file)) + $compile_id = null; + + $_auto_id = $this->_get_auto_id($cache_id, $compile_id); + + if (!empty($this->cache_handler_func)) { + return call_user_func_array($this->cache_handler_func, + array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time)); + } else { + $_params = array('auto_base' => $this->cache_dir, + 'auto_source' => $tpl_file, + 'auto_id' => $_auto_id, + 'exp_time' => $exp_time); + require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + + } + + + /** + * clear the entire contents of cache (all templates) + * + * @param string $exp_time expire time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + function clear_all_cache($exp_time = null) + { + return $this->clear_cache(null, null, null, $exp_time); + } + + + /** + * test to see if valid cache exists for this template + * + * @param string $tpl_file name of template file + * @param string $cache_id + * @param string $compile_id + * @return string|false results of {@link _read_cache_file()} + */ + function is_cached($tpl_file, $cache_id = null, $compile_id = null) + { + if (!$this->caching) + return false; + + if (!isset($compile_id)) + $compile_id = $this->compile_id; + + $_params = array( + 'tpl_file' => $tpl_file, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id + ); + require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); + return smarty_core_read_cache_file($_params, $this); + } + + + /** + * clear all the assigned template variables. + * + */ + function clear_all_assign() + { + $this->_tpl_vars = array(); + } + + /** + * clears compiled version of specified template resource, + * or all compiled template files if one is not specified. + * This function is for advanced use only, not normally needed. + * + * @param string $tpl_file + * @param string $compile_id + * @param string $exp_time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) + { + if (!isset($compile_id)) { + $compile_id = $this->compile_id; + } + $_params = array('auto_base' => $this->compile_dir, + 'auto_source' => $tpl_file, + 'auto_id' => $compile_id, + 'exp_time' => $exp_time, + 'extensions' => array('.inc', '.php')); + require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + + /** + * Checks whether requested template exists. + * + * @param string $tpl_file + * @return boolean + */ + function template_exists($tpl_file) + { + $_params = array('resource_name' => $tpl_file, 'quiet'=>true, 'get_source'=>false); + return $this->_fetch_resource_info($_params); + } + + /** + * Returns an array containing template variables + * + * @param string $name + * @param string $type + * @return array + */ + function &get_template_vars($name=null) + { + if(!isset($name)) { + return $this->_tpl_vars; + } elseif(isset($this->_tpl_vars[$name])) { + return $this->_tpl_vars[$name]; + } else { + // var non-existant, return valid reference + $_tmp = null; + return $_tmp; + } + } + + /** + * Returns an array containing config variables + * + * @param string $name + * @param string $type + * @return array + */ + function &get_config_vars($name=null) + { + if(!isset($name) && is_array($this->_config[0])) { + return $this->_config[0]['vars']; + } else if(isset($this->_config[0]['vars'][$name])) { + return $this->_config[0]['vars'][$name]; + } else { + // var non-existant, return valid reference + $_tmp = null; + return $_tmp; + } + } + + /** + * trigger Smarty error + * + * @param string $error_msg + * @param integer $error_type + */ + function trigger_error($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Smarty error: $error_msg", $error_type); + } + + + /** + * executes & displays the template results + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + */ + function display($resource_name, $cache_id = null, $compile_id = null) + { + $this->fetch($resource_name, $cache_id, $compile_id, true); + } + + /** + * executes & returns or displays the template results + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + * @param boolean $display + */ + function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) + { + static $_cache_info = array(); + + $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting) + ? $this->error_reporting : error_reporting() & ~E_NOTICE); + + if (!$this->debugging && $this->debugging_ctrl == 'URL') { + $_query_string = $this->request_use_auto_globals ? $_SERVER['QUERY_STRING'] : $GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING']; + if (@strstr($_query_string, $this->_smarty_debug_id)) { + if (@strstr($_query_string, $this->_smarty_debug_id . '=on')) { + // enable debugging for this browser session + @setcookie('SMARTY_DEBUG', true); + $this->debugging = true; + } elseif (@strstr($_query_string, $this->_smarty_debug_id . '=off')) { + // disable debugging for this browser session + @setcookie('SMARTY_DEBUG', false); + $this->debugging = false; + } else { + // enable debugging for this page + $this->debugging = true; + } + } else { + $this->debugging = (bool)($this->request_use_auto_globals ? @$_COOKIE['SMARTY_DEBUG'] : @$GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG']); + } + } + + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $_debug_start_time = smarty_core_get_microtime($_params, $this); + $this->_smarty_debug_info[] = array('type' => 'template', + 'filename' => $resource_name, + 'depth' => 0); + $_included_tpls_idx = count($this->_smarty_debug_info) - 1; + } + + if (!isset($compile_id)) { + $compile_id = $this->compile_id; + } + + $this->_compile_id = $compile_id; + $this->_inclusion_depth = 0; + + if ($this->caching) { + // save old cache_info, initialize cache_info + array_push($_cache_info, $this->_cache_info); + $this->_cache_info = array(); + $_params = array( + 'tpl_file' => $resource_name, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id, + 'results' => null + ); + require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); + if (smarty_core_read_cache_file($_params, $this)) { + $_smarty_results = $_params['results']; + if (!empty($this->_cache_info['insert_tags'])) { + $_params = array('plugins' => $this->_cache_info['insert_tags']); + require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + $_params = array('results' => $_smarty_results); + require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); + $_smarty_results = smarty_core_process_cached_inserts($_params, $this); + } + if (!empty($this->_cache_info['cache_serials'])) { + $_params = array('results' => $_smarty_results); + require_once(SMARTY_CORE_DIR . 'core.process_compiled_include.php'); + $_smarty_results = smarty_core_process_compiled_include($_params, $this); + } + + + if ($display) { + if ($this->debugging) + { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $_debug_start_time; + require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); + $_smarty_results .= smarty_core_display_debug_console($_params, $this); + } + if ($this->cache_modified_check) { + $_server_vars = ($this->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; + $_last_modified_date = @substr($_server_vars['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_server_vars['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); + $_gmt_mtime = gmdate('D, d M Y H:i:s', $this->_cache_info['timestamp']).' GMT'; + if (@count($this->_cache_info['insert_tags']) == 0 + && !$this->_cache_serials + && $_gmt_mtime == $_last_modified_date) { + if (php_sapi_name()=='cgi') + header('Status: 304 Not Modified'); + else + header('HTTP/1.1 304 Not Modified'); + + } else { + header('Last-Modified: '.$_gmt_mtime); + echo $_smarty_results; + } + } else { + echo $_smarty_results; + } + error_reporting($_smarty_old_error_level); + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + return true; + } else { + error_reporting($_smarty_old_error_level); + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + return $_smarty_results; + } + } else { + $this->_cache_info['template'][$resource_name] = true; + if ($this->cache_modified_check && $display) { + header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT'); + } + } + } + + // load filters that are marked as autoload + if (count($this->autoload_filters)) { + foreach ($this->autoload_filters as $_filter_type => $_filters) { + foreach ($_filters as $_filter) { + $this->load_filter($_filter_type, $_filter); + } + } + } + + $_smarty_compile_path = $this->_get_compile_path($resource_name); + + // if we just need to display the results, don't perform output + // buffering - for speed + $_cache_including = $this->_cache_including; + $this->_cache_including = false; + if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) { + if ($this->_is_compiled($resource_name, $_smarty_compile_path) + || $this->_compile_resource($resource_name, $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + } else { + ob_start(); + if ($this->_is_compiled($resource_name, $_smarty_compile_path) + || $this->_compile_resource($resource_name, $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + $_smarty_results = ob_get_contents(); + ob_end_clean(); + + foreach ((array)$this->_plugins['outputfilter'] as $_output_filter) { + $_smarty_results = call_user_func_array($_output_filter[0], array($_smarty_results, &$this)); + } + } + + if ($this->caching) { + $_params = array('tpl_file' => $resource_name, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id, + 'results' => $_smarty_results); + require_once(SMARTY_CORE_DIR . 'core.write_cache_file.php'); + smarty_core_write_cache_file($_params, $this); + require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); + $_smarty_results = smarty_core_process_cached_inserts($_params, $this); + + if ($this->_cache_serials) { + // strip nocache-tags from output + $_smarty_results = preg_replace('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!s' + ,'' + ,$_smarty_results); + } + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + } + $this->_cache_including = $_cache_including; + + if ($display) { + if (isset($_smarty_results)) { echo $_smarty_results; } + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = (smarty_core_get_microtime($_params, $this) - $_debug_start_time); + require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); + echo smarty_core_display_debug_console($_params, $this); + } + error_reporting($_smarty_old_error_level); + return; + } else { + error_reporting($_smarty_old_error_level); + if (isset($_smarty_results)) { return $_smarty_results; } + } + } + + /** + * load configuration values + * + * @param string $file + * @param string $section + * @param string $scope + */ + function config_load($file, $section = null, $scope = 'global') + { + require_once($this->_get_plugin_filepath('function', 'config_load')); + smarty_function_config_load(array('file' => $file, 'section' => $section, 'scope' => $scope), $this); + } + + /** + * return a reference to a registered object + * + * @param string $name + * @return object + */ + function &get_registered_object($name) { + if (!isset($this->_reg_objects[$name])) + $this->_trigger_fatal_error("'$name' is not a registered object"); + + if (!is_object($this->_reg_objects[$name][0])) + $this->_trigger_fatal_error("registered '$name' is not an object"); + + return $this->_reg_objects[$name][0]; + } + + /** + * clear configuration values + * + * @param string $var + */ + function clear_config($var = null) + { + if(!isset($var)) { + // clear all values + $this->_config = array(array('vars' => array(), + 'files' => array())); + } else { + unset($this->_config[0]['vars'][$var]); + } + } + + /** + * get filepath of requested plugin + * + * @param string $type + * @param string $name + * @return string|false + */ + function _get_plugin_filepath($type, $name) + { + $_params = array('type' => $type, 'name' => $name); + require_once(SMARTY_CORE_DIR . 'core.assemble_plugin_filepath.php'); + return smarty_core_assemble_plugin_filepath($_params, $this); + } + + /** + * test if resource needs compiling + * + * @param string $resource_name + * @param string $compile_path + * @return boolean + */ + function _is_compiled($resource_name, $compile_path) + { + if (!$this->force_compile && file_exists($compile_path)) { + if (!$this->compile_check) { + // no need to check compiled file + return true; + } else { + // get file source and timestamp + $_params = array('resource_name' => $resource_name, 'get_source'=>false); + if (!$this->_fetch_resource_info($_params)) { + return false; + } + if ($_params['resource_timestamp'] <= filemtime($compile_path)) { + // template not expired, no recompile + return true; + } else { + // compile template + return false; + } + } + } else { + // compiled template does not exist, or forced compile + return false; + } + } + + /** + * compile the template + * + * @param string $resource_name + * @param string $compile_path + * @return boolean + */ + function _compile_resource($resource_name, $compile_path) + { + + $_params = array('resource_name' => $resource_name); + if (!$this->_fetch_resource_info($_params)) { + return false; + } + + $_source_content = $_params['source_content']; + $_cache_include = substr($compile_path, 0, -4).'.inc'; + + if ($this->_compile_source($resource_name, $_source_content, $_compiled_content, $_cache_include)) { + // if a _cache_serial was set, we also have to write an include-file: + if ($this->_cache_include_info) { + require_once(SMARTY_CORE_DIR . 'core.write_compiled_include.php'); + smarty_core_write_compiled_include(array_merge($this->_cache_include_info, array('compiled_content'=>$_compiled_content, 'resource_name'=>$resource_name)), $this); + } + + $_params = array('compile_path'=>$compile_path, 'compiled_content' => $_compiled_content); + require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); + smarty_core_write_compiled_resource($_params, $this); + + return true; + } else { + return false; + } + + } + + /** + * compile the given source + * + * @param string $resource_name + * @param string $source_content + * @param string $compiled_content + * @return boolean + */ + function _compile_source($resource_name, &$source_content, &$compiled_content, $cache_include_path=null) + { + if (file_exists(SMARTY_DIR . $this->compiler_file)) { + require_once(SMARTY_DIR . $this->compiler_file); + } else { + // use include_path + require_once($this->compiler_file); + } + + + $smarty_compiler = new $this->compiler_class; + + $smarty_compiler->template_dir = $this->template_dir; + $smarty_compiler->compile_dir = $this->compile_dir; + $smarty_compiler->plugins_dir = $this->plugins_dir; + $smarty_compiler->config_dir = $this->config_dir; + $smarty_compiler->force_compile = $this->force_compile; + $smarty_compiler->caching = $this->caching; + $smarty_compiler->php_handling = $this->php_handling; + $smarty_compiler->left_delimiter = $this->left_delimiter; + $smarty_compiler->right_delimiter = $this->right_delimiter; + $smarty_compiler->_version = $this->_version; + $smarty_compiler->security = $this->security; + $smarty_compiler->secure_dir = $this->secure_dir; + $smarty_compiler->security_settings = $this->security_settings; + $smarty_compiler->trusted_dir = $this->trusted_dir; + $smarty_compiler->use_sub_dirs = $this->use_sub_dirs; + $smarty_compiler->_reg_objects = &$this->_reg_objects; + $smarty_compiler->_plugins = &$this->_plugins; + $smarty_compiler->_tpl_vars = &$this->_tpl_vars; + $smarty_compiler->default_modifiers = $this->default_modifiers; + $smarty_compiler->compile_id = $this->_compile_id; + $smarty_compiler->_config = $this->_config; + $smarty_compiler->request_use_auto_globals = $this->request_use_auto_globals; + + if (isset($cache_include_path) && isset($this->_cache_serials[$cache_include_path])) { + $smarty_compiler->_cache_serial = $this->_cache_serials[$cache_include_path]; + } + $smarty_compiler->_cache_include = $cache_include_path; + + + $_results = $smarty_compiler->_compile_file($resource_name, $source_content, $compiled_content); + + if ($smarty_compiler->_cache_serial) { + $this->_cache_include_info = array( + 'cache_serial'=>$smarty_compiler->_cache_serial + ,'plugins_code'=>$smarty_compiler->_plugins_code + ,'include_file_path' => $cache_include_path); + + } else { + $this->_cache_include_info = null; + + } + + return $_results; + } + + /** + * Get the compile path for this resource + * + * @param string $resource_name + * @return string results of {@link _get_auto_filename()} + */ + function _get_compile_path($resource_name) + { + return $this->_get_auto_filename($this->compile_dir, $resource_name, + $this->_compile_id) . '.php'; + } + + /** + * fetch the template info. Gets timestamp, and source + * if get_source is true + * + * sets $source_content to the source of the template, and + * $resource_timestamp to its time stamp + * @param string $resource_name + * @param string $source_content + * @param integer $resource_timestamp + * @param boolean $get_source + * @param boolean $quiet + * @return boolean + */ + + function _fetch_resource_info(&$params) + { + if(!isset($params['get_source'])) { $params['get_source'] = true; } + if(!isset($params['quiet'])) { $params['quiet'] = false; } + + $_return = false; + $_params = array('resource_name' => $params['resource_name']) ; + if (isset($params['resource_base_path'])) + $_params['resource_base_path'] = $params['resource_base_path']; + else + $_params['resource_base_path'] = $this->template_dir; + + if ($this->_parse_resource_name($_params)) { + $_resource_type = $_params['resource_type']; + $_resource_name = $_params['resource_name']; + switch ($_resource_type) { + case 'file': + if ($params['get_source']) { + $params['source_content'] = $this->_read_file($_resource_name); + } + $params['resource_timestamp'] = filemtime($_resource_name); + $_return = is_file($_resource_name); + break; + + default: + // call resource functions to fetch the template source and timestamp + if ($params['get_source']) { + $_source_return = isset($this->_plugins['resource'][$_resource_type]) && + call_user_func_array($this->_plugins['resource'][$_resource_type][0][0], + array($_resource_name, &$params['source_content'], &$this)); + } else { + $_source_return = true; + } + + $_timestamp_return = isset($this->_plugins['resource'][$_resource_type]) && + call_user_func_array($this->_plugins['resource'][$_resource_type][0][1], + array($_resource_name, &$params['resource_timestamp'], &$this)); + + $_return = $_source_return && $_timestamp_return; + break; + } + } + + if (!$_return) { + // see if we can get a template with the default template handler + if (!empty($this->default_template_handler_func)) { + if (!is_callable($this->default_template_handler_func)) { + $this->trigger_error("default template handler function \"$this->default_template_handler_func\" doesn't exist."); + } else { + $_return = call_user_func_array( + $this->default_template_handler_func, + array($_params['resource_type'], $_params['resource_name'], &$params['source_content'], &$params['resource_timestamp'], &$this)); + } + } + } + + if (!$_return) { + if (!$params['quiet']) { + $this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"'); + } + } else if ($_return && $this->security) { + require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); + if (!smarty_core_is_secure($_params, $this)) { + if (!$params['quiet']) + $this->trigger_error('(secure mode) accessing "' . $params['resource_name'] . '" is not allowed'); + $params['source_content'] = null; + $params['resource_timestamp'] = null; + return false; + } + } + return $_return; + } + + + /** + * parse out the type and name from the resource + * + * @param string $resource_base_path + * @param string $resource_name + * @param string $resource_type + * @param string $resource_name + * @return boolean + */ + + function _parse_resource_name(&$params) + { + + // split tpl_path by the first colon + $_resource_name_parts = explode(':', $params['resource_name'], 2); + + if (count($_resource_name_parts) == 1) { + // no resource type given + $params['resource_type'] = $this->default_resource_type; + $params['resource_name'] = $_resource_name_parts[0]; + } else { + if(strlen($_resource_name_parts[0]) == 1) { + // 1 char is not resource type, but part of filepath + $params['resource_type'] = $this->default_resource_type; + $params['resource_name'] = $params['resource_name']; + } else { + $params['resource_type'] = $_resource_name_parts[0]; + $params['resource_name'] = $_resource_name_parts[1]; + } + } + + if ($params['resource_type'] == 'file') { + if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $params['resource_name'])) { + // relative pathname to $params['resource_base_path'] + // use the first directory where the file is found + foreach ((array)$params['resource_base_path'] as $_curr_path) { + $_fullpath = $_curr_path . DIRECTORY_SEPARATOR . $params['resource_name']; + if (file_exists($_fullpath) && is_file($_fullpath)) { + $params['resource_name'] = $_fullpath; + return true; + } + // didn't find the file, try include_path + $_params = array('file_path' => $_fullpath); + require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $this)) { + $params['resource_name'] = $_params['new_file_path']; + return true; + } + } + return false; + } else { + /* absolute path */ + return file_exists($params['resource_name']); + } + } elseif (empty($this->_plugins['resource'][$params['resource_type']])) { + $_params = array('type' => $params['resource_type']); + require_once(SMARTY_CORE_DIR . 'core.load_resource_plugin.php'); + smarty_core_load_resource_plugin($_params, $this); + } + + return true; + } + + + /** + * Handle modifiers + * + * @param string|null $modifier_name + * @param array|null $map_array + * @return string result of modifiers + */ + function _run_mod_handler() + { + $_args = func_get_args(); + list($_modifier_name, $_map_array) = array_splice($_args, 0, 2); + list($_func_name, $_tpl_file, $_tpl_line) = + $this->_plugins['modifier'][$_modifier_name]; + + $_var = $_args[0]; + foreach ($_var as $_key => $_val) { + $_args[0] = $_val; + $_var[$_key] = call_user_func_array($_func_name, $_args); + } + return $_var; + } + + /** + * Remove starting and ending quotes from the string + * + * @param string $string + * @return string + */ + function _dequote($string) + { + if ((substr($string, 0, 1) == "'" || substr($string, 0, 1) == '"') && + substr($string, -1) == substr($string, 0, 1)) + return substr($string, 1, -1); + else + return $string; + } + + + /** + * read in a file + * + * @param string $filename + * @return string + */ + function _read_file($filename) + { + if ( file_exists($filename) && ($fd = @fopen($filename, 'rb')) ) { + $contents = ''; + while (!feof($fd)) { + $contents .= fread($fd, 8192); + } + fclose($fd); + return $contents; + } else { + return false; + } + } + + /** + * get a concrete filename for automagically created content + * + * @param string $auto_base + * @param string $auto_source + * @param string $auto_id + * @return string + * @staticvar string|null + * @staticvar string|null + */ + function _get_auto_filename($auto_base, $auto_source = null, $auto_id = null) + { + $_compile_dir_sep = $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^'; + $_return = $auto_base . DIRECTORY_SEPARATOR; + + if(isset($auto_id)) { + // make auto_id safe for directory names + $auto_id = str_replace('%7C',$_compile_dir_sep,(urlencode($auto_id))); + // split into separate directories + $_return .= $auto_id . $_compile_dir_sep; + } + + if(isset($auto_source)) { + // make source name safe for filename + $_filename = urlencode(basename($auto_source)); + $_crc32 = sprintf('%08X', crc32($auto_source)); + // prepend %% to avoid name conflicts with + // with $params['auto_id'] names + $_crc32 = substr($_crc32, 0, 2) . $_compile_dir_sep . + substr($_crc32, 0, 3) . $_compile_dir_sep . $_crc32; + $_return .= '%%' . $_crc32 . '%%' . $_filename; + } + + return $_return; + } + + /** + * unlink a file, possibly using expiration time + * + * @param string $resource + * @param integer $exp_time + */ + function _unlink($resource, $exp_time = null) + { + if(isset($exp_time)) { + if(time() - @filemtime($resource) >= $exp_time) { + return @unlink($resource); + } + } else { + return @unlink($resource); + } + } + + /** + * returns an auto_id for auto-file-functions + * + * @param string $cache_id + * @param string $compile_id + * @return string|null + */ + function _get_auto_id($cache_id=null, $compile_id=null) { + if (isset($cache_id)) + return (isset($compile_id)) ? $cache_id . '|' . $compile_id : $cache_id; + elseif(isset($compile_id)) + return $compile_id; + else + return null; + } + + /** + * trigger Smarty plugin error + * + * @param string $error_msg + * @param string $tpl_file + * @param integer $tpl_line + * @param string $file + * @param integer $line + * @param integer $error_type + */ + function _trigger_fatal_error($error_msg, $tpl_file = null, $tpl_line = null, + $file = null, $line = null, $error_type = E_USER_ERROR) + { + if(isset($file) && isset($line)) { + $info = ' ('.basename($file).", line $line)"; + } else { + $info = ''; + } + if (isset($tpl_line) && isset($tpl_file)) { + $this->trigger_error('[in ' . $tpl_file . ' line ' . $tpl_line . "]: $error_msg$info", $error_type); + } else { + $this->trigger_error($error_msg . $info, $error_type); + } + } + + + /** + * callback function for preg_replace, to call a non-cacheable block + * @return string + */ + function _process_compiled_include_callback($match) { + $_func = '_smarty_tplfunc_'.$match[2].'_'.$match[3]; + ob_start(); + $_func($this); + $_ret = ob_get_contents(); + ob_end_clean(); + return $_ret; + } + + + /** + * called for included templates + * + * @param string $_smarty_include_tpl_file + * @param string $_smarty_include_vars + */ + + // $_smarty_include_tpl_file, $_smarty_include_vars + + function _smarty_include($params) + { + if ($this->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $debug_start_time = smarty_core_get_microtime($_params, $this); + $this->_smarty_debug_info[] = array('type' => 'template', + 'filename' => $params['smarty_include_tpl_file'], + 'depth' => ++$this->_inclusion_depth); + $included_tpls_idx = count($this->_smarty_debug_info) - 1; + } + + $this->_tpl_vars = array_merge($this->_tpl_vars, $params['smarty_include_vars']); + + // config vars are treated as local, so push a copy of the + // current ones onto the front of the stack + array_unshift($this->_config, $this->_config[0]); + + $_smarty_compile_path = $this->_get_compile_path($params['smarty_include_tpl_file']); + + + if ($this->_is_compiled($params['smarty_include_tpl_file'], $_smarty_compile_path) + || $this->_compile_resource($params['smarty_include_tpl_file'], $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + + // pop the local vars off the front of the stack + array_shift($this->_config); + + $this->_inclusion_depth--; + + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $debug_start_time; + } + + if ($this->caching) { + $this->_cache_info['template'][$params['smarty_include_tpl_file']] = true; + } + } + + + /** + * get or set an array of cached attributes for function that is + * not cacheable + * @return array + */ + function &_smarty_cache_attrs($cache_serial, $count) { + $_cache_attrs =& $this->_cache_info['cache_attrs'][$cache_serial][$count]; + + if ($this->_cache_including) { + /* return next set of cache_attrs */ + $_return = current($_cache_attrs); + next($_cache_attrs); + return $_return; + + } else { + /* add a reference to a new set of cache_attrs */ + $_cache_attrs[] = array(); + return $_cache_attrs[count($_cache_attrs)-1]; + + } + + } + + + /** + * wrapper for include() retaining $this + * @return mixed + */ + function _include($filename, $once=false, $params=null) + { + if ($once) { + return include_once($filename); + } else { + return include($filename); + } + } + + + /** + * wrapper for eval() retaining $this + * @return mixed + */ + function _eval($code, $params=null) + { + return eval($code); + } + /**#@-*/ + +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/Smarty_Compiler.class.php b/libs/Smarty_Compiler.class.php new file mode 100644 index 0000000..95bb1a2 --- /dev/null +++ b/libs/Smarty_Compiler.class.php @@ -0,0 +1,2313 @@ + + * @author Andrei Zmievski + * @version 2.6.13 + * @copyright 2001-2005 New Digital Group, Inc. + * @package Smarty + */ + +/* $Id$ */ + +/** + * Template compiling class + * @package Smarty + */ +class Smarty_Compiler extends Smarty { + + // internal vars + /**#@+ + * @access private + */ + var $_folded_blocks = array(); // keeps folded template blocks + var $_current_file = null; // the current template being compiled + var $_current_line_no = 1; // line number for error messages + var $_capture_stack = array(); // keeps track of nested capture buffers + var $_plugin_info = array(); // keeps track of plugins to load + var $_init_smarty_vars = false; + var $_permitted_tokens = array('true','false','yes','no','on','off','null'); + var $_db_qstr_regexp = null; // regexps are setup in the constructor + var $_si_qstr_regexp = null; + var $_qstr_regexp = null; + var $_func_regexp = null; + var $_reg_obj_regexp = null; + var $_var_bracket_regexp = null; + var $_num_const_regexp = null; + var $_dvar_guts_regexp = null; + var $_dvar_regexp = null; + var $_cvar_regexp = null; + var $_svar_regexp = null; + var $_avar_regexp = null; + var $_mod_regexp = null; + var $_var_regexp = null; + var $_parenth_param_regexp = null; + var $_func_call_regexp = null; + var $_obj_ext_regexp = null; + var $_obj_start_regexp = null; + var $_obj_params_regexp = null; + var $_obj_call_regexp = null; + var $_cacheable_state = 0; + var $_cache_attrs_count = 0; + var $_nocache_count = 0; + var $_cache_serial = null; + var $_cache_include = null; + + var $_strip_depth = 0; + var $_additional_newline = "\n"; + + /**#@-*/ + /** + * The class constructor. + */ + function Smarty_Compiler() + { + // matches double quoted strings: + // "foobar" + // "foo\"bar" + $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"'; + + // matches single quoted strings: + // 'foobar' + // 'foo\'bar' + $this->_si_qstr_regexp = '\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\''; + + // matches single or double quoted strings + $this->_qstr_regexp = '(?:' . $this->_db_qstr_regexp . '|' . $this->_si_qstr_regexp . ')'; + + // matches bracket portion of vars + // [0] + // [foo] + // [$bar] + $this->_var_bracket_regexp = '\[\$?[\w\.]+\]'; + + // matches numerical constants + // 30 + // -12 + // 13.22 + $this->_num_const_regexp = '(?:\-?\d+(?:\.\d+)?)'; + + // matches $ vars (not objects): + // $foo + // $foo.bar + // $foo.bar.foobar + // $foo[0] + // $foo[$bar] + // $foo[5][blah] + // $foo[5].bar[$foobar][4] + $this->_dvar_math_regexp = '(?:[\+\*\/\%]|(?:-(?!>)))'; + $this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]'; + $this->_dvar_guts_regexp = '\w+(?:' . $this->_var_bracket_regexp + . ')*(?:\.\$?\w+(?:' . $this->_var_bracket_regexp . ')*)*(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?'; + $this->_dvar_regexp = '\$' . $this->_dvar_guts_regexp; + + // matches config vars: + // #foo# + // #foobar123_foo# + $this->_cvar_regexp = '\#\w+\#'; + + // matches section vars: + // %foo.bar% + $this->_svar_regexp = '\%\w+\.\w+\%'; + + // matches all valid variables (no quotes, no modifiers) + $this->_avar_regexp = '(?:' . $this->_dvar_regexp . '|' + . $this->_cvar_regexp . '|' . $this->_svar_regexp . ')'; + + // matches valid variable syntax: + // $foo + // $foo + // #foo# + // #foo# + // "text" + // "text" + $this->_var_regexp = '(?:' . $this->_avar_regexp . '|' . $this->_qstr_regexp . ')'; + + // matches valid object call (one level of object nesting allowed in parameters): + // $foo->bar + // $foo->bar() + // $foo->bar("text") + // $foo->bar($foo, $bar, "text") + // $foo->bar($foo, "foo") + // $foo->bar->foo() + // $foo->bar->foo->bar() + // $foo->bar($foo->bar) + // $foo->bar($foo->bar()) + // $foo->bar($foo->bar($blah,$foo,44,"foo",$foo[0].bar)) + $this->_obj_ext_regexp = '\->(?:\$?' . $this->_dvar_guts_regexp . ')'; + $this->_obj_restricted_param_regexp = '(?:' + . '(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')(?:' . $this->_obj_ext_regexp . '(?:\((?:(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')' + . '(?:\s*,\s*(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . '))*)?\))?)*)'; + $this->_obj_single_param_regexp = '(?:\w+|' . $this->_obj_restricted_param_regexp . '(?:\s*,\s*(?:(?:\w+|' + . $this->_var_regexp . $this->_obj_restricted_param_regexp . ')))*)'; + $this->_obj_params_regexp = '\((?:' . $this->_obj_single_param_regexp + . '(?:\s*,\s*' . $this->_obj_single_param_regexp . ')*)?\)'; + $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)'; + $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?)'; + + // matches valid modifier syntax: + // |foo + // |@foo + // |foo:"bar" + // |foo:$bar + // |foo:"bar":$foobar + // |foo|bar + // |foo:$foo->bar + $this->_mod_regexp = '(?:\|@?\w+(?::(?:\w+|' . $this->_num_const_regexp . '|' + . $this->_obj_call_regexp . '|' . $this->_avar_regexp . '|' . $this->_qstr_regexp .'))*)'; + + // matches valid function name: + // foo123 + // _foo_bar + $this->_func_regexp = '[a-zA-Z_]\w*'; + + // matches valid registered object: + // foo->bar + $this->_reg_obj_regexp = '[a-zA-Z_]\w*->[a-zA-Z_]\w*'; + + // matches valid parameter values: + // true + // $foo + // $foo|bar + // #foo# + // #foo#|bar + // "text" + // "text"|bar + // $foo->bar + $this->_param_regexp = '(?:\s*(?:' . $this->_obj_call_regexp . '|' + . $this->_var_regexp . '|' . $this->_num_const_regexp . '|\w+)(?>' . $this->_mod_regexp . '*)\s*)'; + + // matches valid parenthesised function parameters: + // + // "text" + // $foo, $bar, "text" + // $foo|bar, "foo"|bar, $foo->bar($foo)|bar + $this->_parenth_param_regexp = '(?:\((?:\w+|' + . $this->_param_regexp . '(?:\s*,\s*(?:(?:\w+|' + . $this->_param_regexp . ')))*)?\))'; + + // matches valid function call: + // foo() + // foo_bar($foo) + // _foo_bar($foo,"bar") + // foo123($foo,$foo->bar(),"foo") + $this->_func_call_regexp = '(?:' . $this->_func_regexp . '\s*(?:' + . $this->_parenth_param_regexp . '))'; + } + + /** + * compile a resource + * + * sets $compiled_content to the compiled source + * @param string $resource_name + * @param string $source_content + * @param string $compiled_content + * @return true + */ + function _compile_file($resource_name, $source_content, &$compiled_content) + { + + if ($this->security) { + // do not allow php syntax to be executed unless specified + if ($this->php_handling == SMARTY_PHP_ALLOW && + !$this->security_settings['PHP_HANDLING']) { + $this->php_handling = SMARTY_PHP_PASSTHRU; + } + } + + $this->_load_filters(); + + $this->_current_file = $resource_name; + $this->_current_line_no = 1; + $ldq = preg_quote($this->left_delimiter, '~'); + $rdq = preg_quote($this->right_delimiter, '~'); + + // run template source through prefilter functions + if (count($this->_plugins['prefilter']) > 0) { + foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { + if ($prefilter === false) continue; + if ($prefilter[3] || is_callable($prefilter[0])) { + $source_content = call_user_func_array($prefilter[0], + array($source_content, &$this)); + $this->_plugins['prefilter'][$filter_name][3] = true; + } else { + $this->_trigger_fatal_error("[plugin] prefilter '$filter_name' is not implemented"); + } + } + } + + /* fetch all special blocks */ + $search = "~{$ldq}\*(.*?)\*{$rdq}|{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s*/literal\s*{$rdq}|{$ldq}\s*php\s*{$rdq}(.*?){$ldq}\s*/php\s*{$rdq}~s"; + + preg_match_all($search, $source_content, $match, PREG_SET_ORDER); + $this->_folded_blocks = $match; + reset($this->_folded_blocks); + + /* replace special blocks by "{php}" */ + $source_content = preg_replace($search.'e', "'" + . $this->_quote_replace($this->left_delimiter) . 'php' + . "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'" + . $this->_quote_replace($this->right_delimiter) + . "'" + , $source_content); + + /* Gather all template tags. */ + preg_match_all("~{$ldq}\s*(.*?)\s*{$rdq}~s", $source_content, $_match); + $template_tags = $_match[1]; + /* Split content by template tags to obtain non-template content. */ + $text_blocks = preg_split("~{$ldq}.*?{$rdq}~s", $source_content); + + /* loop through text blocks */ + for ($curr_tb = 0, $for_max = count($text_blocks); $curr_tb < $for_max; $curr_tb++) { + /* match anything resembling php tags */ + if (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $text_blocks[$curr_tb], $sp_match)) { + /* replace tags with placeholders to prevent recursive replacements */ + $sp_match[1] = array_unique($sp_match[1]); + usort($sp_match[1], '_smarty_sort_length'); + for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { + $text_blocks[$curr_tb] = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$text_blocks[$curr_tb]); + } + /* process each one */ + for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { + if ($this->php_handling == SMARTY_PHP_PASSTHRU) { + /* echo php contents */ + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', ''."\n", $text_blocks[$curr_tb]); + } else if ($this->php_handling == SMARTY_PHP_QUOTE) { + /* quote php tags */ + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', htmlspecialchars($sp_match[1][$curr_sp]), $text_blocks[$curr_tb]); + } else if ($this->php_handling == SMARTY_PHP_REMOVE) { + /* remove php tags */ + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '', $text_blocks[$curr_tb]); + } else { + /* SMARTY_PHP_ALLOW, but echo non php starting tags */ + $sp_match[1][$curr_sp] = preg_replace('~(<\?(?!php|=|$))~i', ''."\n", $sp_match[1][$curr_sp]); + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', $sp_match[1][$curr_sp], $text_blocks[$curr_tb]); + } + } + } + } + + /* Compile the template tags into PHP code. */ + $compiled_tags = array(); + for ($i = 0, $for_max = count($template_tags); $i < $for_max; $i++) { + $this->_current_line_no += substr_count($text_blocks[$i], "\n"); + $compiled_tags[] = $this->_compile_tag($template_tags[$i]); + $this->_current_line_no += substr_count($template_tags[$i], "\n"); + } + if (count($this->_tag_stack)>0) { + list($_open_tag, $_line_no) = end($this->_tag_stack); + $this->_syntax_error("unclosed tag \{$_open_tag} (opened line $_line_no).", E_USER_ERROR, __FILE__, __LINE__); + return; + } + + /* Reformat $text_blocks between 'strip' and '/strip' tags, + removing spaces, tabs and newlines. */ + $strip = false; + for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { + if ($compiled_tags[$i] == '{strip}') { + $compiled_tags[$i] = ''; + $strip = true; + /* remove leading whitespaces */ + $text_blocks[$i + 1] = ltrim($text_blocks[$i + 1]); + } + if ($strip) { + /* strip all $text_blocks before the next '/strip' */ + for ($j = $i + 1; $j < $for_max; $j++) { + /* remove leading and trailing whitespaces of each line */ + $text_blocks[$j] = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $text_blocks[$j]); + if ($compiled_tags[$j] == '{/strip}') { + /* remove trailing whitespaces from the last text_block */ + $text_blocks[$j] = rtrim($text_blocks[$j]); + } + $text_blocks[$j] = ""\'", "\\"=>"\\\\")) . "'; ?>"; + if ($compiled_tags[$j] == '{/strip}') { + $compiled_tags[$j] = "\n"; /* slurped by php, but necessary + if a newline is following the closing strip-tag */ + $strip = false; + $i = $j; + break; + } + } + } + } + $compiled_content = ''; + + /* Interleave the compiled contents and text blocks to get the final result. */ + for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { + if ($compiled_tags[$i] == '') { + // tag result empty, remove first newline from following text block + $text_blocks[$i+1] = preg_replace('~^(\r\n|\r|\n)~', '', $text_blocks[$i+1]); + } + $compiled_content .= $text_blocks[$i].$compiled_tags[$i]; + } + $compiled_content .= $text_blocks[$i]; + + // remove \n from the end of the file, if any + if (strlen($compiled_content) && (substr($compiled_content, -1) == "\n") ) { + $compiled_content = substr($compiled_content, 0, -1); + } + + if (!empty($this->_cache_serial)) { + $compiled_content = "_cache_serials['".$this->_cache_include."'] = '".$this->_cache_serial."'; ?>" . $compiled_content; + } + + // remove unnecessary close/open tags + $compiled_content = preg_replace('~\?>\n?<\?php~', '', $compiled_content); + + // run compiled template through postfilter functions + if (count($this->_plugins['postfilter']) > 0) { + foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { + if ($postfilter === false) continue; + if ($postfilter[3] || is_callable($postfilter[0])) { + $compiled_content = call_user_func_array($postfilter[0], + array($compiled_content, &$this)); + $this->_plugins['postfilter'][$filter_name][3] = true; + } else { + $this->_trigger_fatal_error("Smarty plugin error: postfilter '$filter_name' is not implemented"); + } + } + } + + // put header at the top of the compiled template + $template_header = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; + $template_header .= " compiled from ".strtr(urlencode($resource_name), array('%2F'=>'/', '%3A'=>':'))." */ ?>\n"; + + /* Emit code to load needed plugins. */ + $this->_plugins_code = ''; + if (count($this->_plugin_info)) { + $_plugins_params = "array('plugins' => array("; + foreach ($this->_plugin_info as $plugin_type => $plugins) { + foreach ($plugins as $plugin_name => $plugin_info) { + $_plugins_params .= "array('$plugin_type', '$plugin_name', '" . strtr($plugin_info[0], array("'" => "\\'", "\\" => "\\\\")) . "', $plugin_info[1], "; + $_plugins_params .= $plugin_info[2] ? 'true),' : 'false),'; + } + } + $_plugins_params .= '))'; + $plugins_code = "\n"; + $template_header .= $plugins_code; + $this->_plugin_info = array(); + $this->_plugins_code = $plugins_code; + } + + if ($this->_init_smarty_vars) { + $template_header .= "\n"; + $this->_init_smarty_vars = false; + } + + $compiled_content = $template_header . $compiled_content; + return true; + } + + /** + * Compile a template tag + * + * @param string $template_tag + * @return string + */ + function _compile_tag($template_tag) + { + /* Matched comment. */ + if (substr($template_tag, 0, 1) == '*' && substr($template_tag, -1) == '*') + return ''; + + /* Split tag into two three parts: command, command modifiers and the arguments. */ + if(! preg_match('~^(?:(' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp + . '|\/?' . $this->_reg_obj_regexp . '|\/?' . $this->_func_regexp . ')(' . $this->_mod_regexp . '*)) + (?:\s+(.*))?$ + ~xs', $template_tag, $match)) { + $this->_syntax_error("unrecognized tag: $template_tag", E_USER_ERROR, __FILE__, __LINE__); + } + + $tag_command = $match[1]; + $tag_modifier = isset($match[2]) ? $match[2] : null; + $tag_args = isset($match[3]) ? $match[3] : null; + + if (preg_match('~^' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '$~', $tag_command)) { + /* tag name is a variable or object */ + $_return = $this->_parse_var_props($tag_command . $tag_modifier); + return "" . $this->_additional_newline; + } + + /* If the tag name is a registered object, we process it. */ + if (preg_match('~^\/?' . $this->_reg_obj_regexp . '$~', $tag_command)) { + return $this->_compile_registered_object_tag($tag_command, $this->_parse_attrs($tag_args), $tag_modifier); + } + + switch ($tag_command) { + case 'include': + return $this->_compile_include_tag($tag_args); + + case 'include_php': + return $this->_compile_include_php_tag($tag_args); + + case 'if': + $this->_push_tag('if'); + return $this->_compile_if_tag($tag_args); + + case 'else': + list($_open_tag) = end($this->_tag_stack); + if ($_open_tag != 'if' && $_open_tag != 'elseif') + $this->_syntax_error('unexpected {else}', E_USER_ERROR, __FILE__, __LINE__); + else + $this->_push_tag('else'); + return ''; + + case 'elseif': + list($_open_tag) = end($this->_tag_stack); + if ($_open_tag != 'if' && $_open_tag != 'elseif') + $this->_syntax_error('unexpected {elseif}', E_USER_ERROR, __FILE__, __LINE__); + if ($_open_tag == 'if') + $this->_push_tag('elseif'); + return $this->_compile_if_tag($tag_args, true); + + case '/if': + $this->_pop_tag('if'); + return ''; + + case 'capture': + return $this->_compile_capture_tag(true, $tag_args); + + case '/capture': + return $this->_compile_capture_tag(false); + + case 'ldelim': + return $this->left_delimiter; + + case 'rdelim': + return $this->right_delimiter; + + case 'section': + $this->_push_tag('section'); + return $this->_compile_section_start($tag_args); + + case 'sectionelse': + $this->_push_tag('sectionelse'); + return ""; + break; + + case '/section': + $_open_tag = $this->_pop_tag('section'); + if ($_open_tag == 'sectionelse') + return ""; + else + return ""; + + case 'foreach': + $this->_push_tag('foreach'); + return $this->_compile_foreach_start($tag_args); + break; + + case 'foreachelse': + $this->_push_tag('foreachelse'); + return ""; + + case '/foreach': + $_open_tag = $this->_pop_tag('foreach'); + if ($_open_tag == 'foreachelse') + return ""; + else + return ""; + break; + + case 'strip': + case '/strip': + if (substr($tag_command, 0, 1)=='/') { + $this->_pop_tag('strip'); + if (--$this->_strip_depth==0) { /* outermost closing {/strip} */ + $this->_additional_newline = "\n"; + return '{' . $tag_command . '}'; + } + } else { + $this->_push_tag('strip'); + if ($this->_strip_depth++==0) { /* outermost opening {strip} */ + $this->_additional_newline = ""; + return '{' . $tag_command . '}'; + } + } + return ''; + + case 'php': + /* handle folded tags replaced by {php} */ + list(, $block) = each($this->_folded_blocks); + $this->_current_line_no += substr_count($block[0], "\n"); + /* the number of matched elements in the regexp in _compile_file() + determins the type of folded tag that was found */ + switch (count($block)) { + case 2: /* comment */ + return ''; + + case 3: /* literal */ + return ""\'", "\\"=>"\\\\")) . "'; ?>" . $this->_additional_newline; + + case 4: /* php */ + if ($this->security && !$this->security_settings['PHP_TAGS']) { + $this->_syntax_error("(secure mode) php tags not permitted", E_USER_WARNING, __FILE__, __LINE__); + return; + } + return ''; + } + break; + + case 'insert': + return $this->_compile_insert_tag($tag_args); + + default: + if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) { + return $output; + } else if ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) { + return $output; + } else if ($this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier, $output)) { + return $output; + } else { + $this->_syntax_error("unrecognized tag '$tag_command'", E_USER_ERROR, __FILE__, __LINE__); + } + + } + } + + + /** + * compile the custom compiler tag + * + * sets $output to the compiled custom compiler tag + * @param string $tag_command + * @param string $tag_args + * @param string $output + * @return boolean + */ + function _compile_compiler_tag($tag_command, $tag_args, &$output) + { + $found = false; + $have_function = true; + + /* + * First we check if the compiler function has already been registered + * or loaded from a plugin file. + */ + if (isset($this->_plugins['compiler'][$tag_command])) { + $found = true; + $plugin_func = $this->_plugins['compiler'][$tag_command][0]; + if (!is_callable($plugin_func)) { + $message = "compiler function '$tag_command' is not implemented"; + $have_function = false; + } + } + /* + * Otherwise we need to load plugin file and look for the function + * inside it. + */ + else if ($plugin_file = $this->_get_plugin_filepath('compiler', $tag_command)) { + $found = true; + + include_once $plugin_file; + + $plugin_func = 'smarty_compiler_' . $tag_command; + if (!is_callable($plugin_func)) { + $message = "plugin function $plugin_func() not found in $plugin_file\n"; + $have_function = false; + } else { + $this->_plugins['compiler'][$tag_command] = array($plugin_func, null, null, null, true); + } + } + + /* + * True return value means that we either found a plugin or a + * dynamically registered function. False means that we didn't and the + * compiler should now emit code to load custom function plugin for this + * tag. + */ + if ($found) { + if ($have_function) { + $output = call_user_func_array($plugin_func, array($tag_args, &$this)); + if($output != '') { + $output = '_push_cacheable_state('compiler', $tag_command) + . $output + . $this->_pop_cacheable_state('compiler', $tag_command) . ' ?>'; + } + } else { + $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); + } + return true; + } else { + return false; + } + } + + + /** + * compile block function tag + * + * sets $output to compiled block function tag + * @param string $tag_command + * @param string $tag_args + * @param string $tag_modifier + * @param string $output + * @return boolean + */ + function _compile_block_tag($tag_command, $tag_args, $tag_modifier, &$output) + { + if (substr($tag_command, 0, 1) == '/') { + $start_tag = false; + $tag_command = substr($tag_command, 1); + } else + $start_tag = true; + + $found = false; + $have_function = true; + + /* + * First we check if the block function has already been registered + * or loaded from a plugin file. + */ + if (isset($this->_plugins['block'][$tag_command])) { + $found = true; + $plugin_func = $this->_plugins['block'][$tag_command][0]; + if (!is_callable($plugin_func)) { + $message = "block function '$tag_command' is not implemented"; + $have_function = false; + } + } + /* + * Otherwise we need to load plugin file and look for the function + * inside it. + */ + else if ($plugin_file = $this->_get_plugin_filepath('block', $tag_command)) { + $found = true; + + include_once $plugin_file; + + $plugin_func = 'smarty_block_' . $tag_command; + if (!function_exists($plugin_func)) { + $message = "plugin function $plugin_func() not found in $plugin_file\n"; + $have_function = false; + } else { + $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true); + + } + } + + if (!$found) { + return false; + } else if (!$have_function) { + $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); + return true; + } + + /* + * Even though we've located the plugin function, compilation + * happens only once, so the plugin will still need to be loaded + * at runtime for future requests. + */ + $this->_add_plugin('block', $tag_command); + + if ($start_tag) + $this->_push_tag($tag_command); + else + $this->_pop_tag($tag_command); + + if ($start_tag) { + $output = '_push_cacheable_state('block', $tag_command); + $attrs = $this->_parse_attrs($tag_args); + $_cache_attrs=''; + $arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs); + $output .= "$_cache_attrs\$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); '; + $output .= '$_block_repeat=true;' . $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat);'; + $output .= 'while ($_block_repeat) { ob_start(); ?>'; + } else { + $output = '_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $_block_content, $this, $_block_repeat)'; + if ($tag_modifier != '') { + $this->_parse_modifiers($_out_tag_text, $tag_modifier); + } + $output .= '$_block_repeat=false;echo ' . $_out_tag_text . '; } '; + $output .= " array_pop(\$this->_tag_stack); " . $this->_pop_cacheable_state('block', $tag_command) . '?>'; + } + + return true; + } + + + /** + * compile custom function tag + * + * @param string $tag_command + * @param string $tag_args + * @param string $tag_modifier + * @return string + */ + function _compile_custom_tag($tag_command, $tag_args, $tag_modifier, &$output) + { + $found = false; + $have_function = true; + + /* + * First we check if the custom function has already been registered + * or loaded from a plugin file. + */ + if (isset($this->_plugins['function'][$tag_command])) { + $found = true; + $plugin_func = $this->_plugins['function'][$tag_command][0]; + if (!is_callable($plugin_func)) { + $message = "custom function '$tag_command' is not implemented"; + $have_function = false; + } + } + /* + * Otherwise we need to load plugin file and look for the function + * inside it. + */ + else if ($plugin_file = $this->_get_plugin_filepath('function', $tag_command)) { + $found = true; + + include_once $plugin_file; + + $plugin_func = 'smarty_function_' . $tag_command; + if (!function_exists($plugin_func)) { + $message = "plugin function $plugin_func() not found in $plugin_file\n"; + $have_function = false; + } else { + $this->_plugins['function'][$tag_command] = array($plugin_func, null, null, null, true); + + } + } + + if (!$found) { + return false; + } else if (!$have_function) { + $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); + return true; + } + + /* declare plugin to be loaded on display of the template that + we compile right now */ + $this->_add_plugin('function', $tag_command); + + $_cacheable_state = $this->_push_cacheable_state('function', $tag_command); + $attrs = $this->_parse_attrs($tag_args); + $_cache_attrs = ''; + $arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs); + + $output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)"; + if($tag_modifier != '') { + $this->_parse_modifiers($output, $tag_modifier); + } + + if($output != '') { + $output = '_pop_cacheable_state('function', $tag_command) . "?>" . $this->_additional_newline; + } + + return true; + } + + /** + * compile a registered object tag + * + * @param string $tag_command + * @param array $attrs + * @param string $tag_modifier + * @return string + */ + function _compile_registered_object_tag($tag_command, $attrs, $tag_modifier) + { + if (substr($tag_command, 0, 1) == '/') { + $start_tag = false; + $tag_command = substr($tag_command, 1); + } else { + $start_tag = true; + } + + list($object, $obj_comp) = explode('->', $tag_command); + + $arg_list = array(); + if(count($attrs)) { + $_assign_var = false; + foreach ($attrs as $arg_name => $arg_value) { + if($arg_name == 'assign') { + $_assign_var = $arg_value; + unset($attrs['assign']); + continue; + } + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + } + + if($this->_reg_objects[$object][2]) { + // smarty object argument format + $args = "array(".implode(',', (array)$arg_list)."), \$this"; + } else { + // traditional argument format + $args = implode(',', array_values($attrs)); + if (empty($args)) { + $args = 'null'; + } + } + + $prefix = ''; + $postfix = ''; + $newline = ''; + if(!is_object($this->_reg_objects[$object][0])) { + $this->_trigger_fatal_error("registered '$object' is not an object" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); + } elseif(!empty($this->_reg_objects[$object][1]) && !in_array($obj_comp, $this->_reg_objects[$object][1])) { + $this->_trigger_fatal_error("'$obj_comp' is not a registered component of object '$object'", $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); + } elseif(method_exists($this->_reg_objects[$object][0], $obj_comp)) { + // method + if(in_array($obj_comp, $this->_reg_objects[$object][3])) { + // block method + if ($start_tag) { + $prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); "; + $prefix .= "\$_block_repeat=true; \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat); "; + $prefix .= "while (\$_block_repeat) { ob_start();"; + $return = null; + $postfix = ''; + } else { + $prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); "; + $return = "\$_block_repeat=false; \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat)"; + $postfix = "} array_pop(\$this->_tag_stack);"; + } + } else { + // non-block method + $return = "\$this->_reg_objects['$object'][0]->$obj_comp($args)"; + } + } else { + // property + $return = "\$this->_reg_objects['$object'][0]->$obj_comp"; + } + + if($return != null) { + if($tag_modifier != '') { + $this->_parse_modifiers($return, $tag_modifier); + } + + if(!empty($_assign_var)) { + $output = "\$this->assign('" . $this->_dequote($_assign_var) ."', $return);"; + } else { + $output = 'echo ' . $return . ';'; + $newline = $this->_additional_newline; + } + } else { + $output = ''; + } + + return '" . $newline; + } + + /** + * Compile {insert ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_insert_tag($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $name = $this->_dequote($attrs['name']); + + if (empty($name)) { + $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__); + } + + if (!empty($attrs['script'])) { + $delayed_loading = true; + } else { + $delayed_loading = false; + } + + foreach ($attrs as $arg_name => $arg_value) { + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + + $this->_add_plugin('insert', $name, $delayed_loading); + + $_params = "array('args' => array(".implode(', ', (array)$arg_list)."))"; + + return "" . $this->_additional_newline; + } + + /** + * Compile {include ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_include_tag($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $arg_list = array(); + + if (empty($attrs['file'])) { + $this->_syntax_error("missing 'file' attribute in include tag", E_USER_ERROR, __FILE__, __LINE__); + } + + foreach ($attrs as $arg_name => $arg_value) { + if ($arg_name == 'file') { + $include_file = $arg_value; + continue; + } else if ($arg_name == 'assign') { + $assign_var = $arg_value; + continue; + } + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + + $output = '_tpl_vars;\n"; + + + $_params = "array('smarty_include_tpl_file' => " . $include_file . ", 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))"; + $output .= "\$this->_smarty_include($_params);\n" . + "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" . + "unset(\$_smarty_tpl_vars);\n"; + + if (isset($assign_var)) { + $output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n"; + } + + $output .= ' ?>'; + + return $output; + + } + + /** + * Compile {include ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_include_php_tag($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + + if (empty($attrs['file'])) { + $this->_syntax_error("missing 'file' attribute in include_php tag", E_USER_ERROR, __FILE__, __LINE__); + } + + $assign_var = (empty($attrs['assign'])) ? '' : $this->_dequote($attrs['assign']); + $once_var = (empty($attrs['once']) || $attrs['once']=='false') ? 'false' : 'true'; + + $arg_list = array(); + foreach($attrs as $arg_name => $arg_value) { + if($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') { + if(is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + } + + $_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', $arg_list)."))"; + + return "" . $this->_additional_newline; + } + + + /** + * Compile {section ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_section_start($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $arg_list = array(); + + $output = '_syntax_error("missing section name", E_USER_ERROR, __FILE__, __LINE__); + } + + $output .= "unset(\$this->_sections[$section_name]);\n"; + $section_props = "\$this->_sections[$section_name]"; + + foreach ($attrs as $attr_name => $attr_value) { + switch ($attr_name) { + case 'loop': + $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n"; + break; + + case 'show': + if (is_bool($attr_value)) + $show_attr_value = $attr_value ? 'true' : 'false'; + else + $show_attr_value = "(bool)$attr_value"; + $output .= "{$section_props}['show'] = $show_attr_value;\n"; + break; + + case 'name': + $output .= "{$section_props}['$attr_name'] = $attr_value;\n"; + break; + + case 'max': + case 'start': + $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n"; + break; + + case 'step': + $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n"; + break; + + default: + $this->_syntax_error("unknown section attribute - '$attr_name'", E_USER_ERROR, __FILE__, __LINE__); + break; + } + } + + if (!isset($attrs['show'])) + $output .= "{$section_props}['show'] = true;\n"; + + if (!isset($attrs['loop'])) + $output .= "{$section_props}['loop'] = 1;\n"; + + if (!isset($attrs['max'])) + $output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; + else + $output .= "if ({$section_props}['max'] < 0)\n" . + " {$section_props}['max'] = {$section_props}['loop'];\n"; + + if (!isset($attrs['step'])) + $output .= "{$section_props}['step'] = 1;\n"; + + if (!isset($attrs['start'])) + $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; + else { + $output .= "if ({$section_props}['start'] < 0)\n" . + " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . + "else\n" . + " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n"; + } + + $output .= "if ({$section_props}['show']) {\n"; + if (!isset($attrs['start']) && !isset($attrs['step']) && !isset($attrs['max'])) { + $output .= " {$section_props}['total'] = {$section_props}['loop'];\n"; + } else { + $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n"; + } + $output .= " if ({$section_props}['total'] == 0)\n" . + " {$section_props}['show'] = false;\n" . + "} else\n" . + " {$section_props}['total'] = 0;\n"; + + $output .= "if ({$section_props}['show']):\n"; + $output .= " + for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1; + {$section_props}['iteration'] <= {$section_props}['total']; + {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n"; + $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n"; + $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n"; + $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n"; + $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n"; + $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n"; + + $output .= "?>"; + + return $output; + } + + + /** + * Compile {foreach ...} tag. + * + * @param string $tag_args + * @return string + */ + function _compile_foreach_start($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $arg_list = array(); + + if (empty($attrs['from'])) { + return $this->_syntax_error("foreach: missing 'from' attribute", E_USER_ERROR, __FILE__, __LINE__); + } + $from = $attrs['from']; + + if (empty($attrs['item'])) { + return $this->_syntax_error("foreach: missing 'item' attribute", E_USER_ERROR, __FILE__, __LINE__); + } + $item = $this->_dequote($attrs['item']); + if (!preg_match('~^\w+$~', $item)) { + return $this->_syntax_error("'foreach: item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); + } + + if (isset($attrs['key'])) { + $key = $this->_dequote($attrs['key']); + if (!preg_match('~^\w+$~', $key)) { + return $this->_syntax_error("foreach: 'key' must to be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); + } + $key_part = "\$this->_tpl_vars['$key'] => "; + } else { + $key = null; + $key_part = ''; + } + + if (isset($attrs['name'])) { + $name = $attrs['name']; + } else { + $name = null; + } + + $output = '_foreach[$name]"; + $output .= "{$foreach_props} = array('total' => count(\$_from), 'iteration' => 0);\n"; + $output .= "if ({$foreach_props}['total'] > 0):\n"; + $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; + $output .= " {$foreach_props}['iteration']++;\n"; + } else { + $output .= "if (count(\$_from)):\n"; + $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; + } + $output .= '?>'; + + return $output; + } + + + /** + * Compile {capture} .. {/capture} tags + * + * @param boolean $start true if this is the {capture} tag + * @param string $tag_args + * @return string + */ + + function _compile_capture_tag($start, $tag_args = '') + { + $attrs = $this->_parse_attrs($tag_args); + + if ($start) { + if (isset($attrs['name'])) + $buffer = $attrs['name']; + else + $buffer = "'default'"; + + if (isset($attrs['assign'])) + $assign = $attrs['assign']; + else + $assign = null; + $output = ""; + $this->_capture_stack[] = array($buffer, $assign); + } else { + list($buffer, $assign) = array_pop($this->_capture_stack); + $output = "_smarty_vars['capture'][$buffer] = ob_get_contents(); "; + if (isset($assign)) { + $output .= " \$this->assign($assign, ob_get_contents());"; + } + $output .= "ob_end_clean(); ?>"; + } + + return $output; + } + + /** + * Compile {if ...} tag + * + * @param string $tag_args + * @param boolean $elseif if true, uses elseif instead of if + * @return string + */ + function _compile_if_tag($tag_args, $elseif = false) + { + + /* Tokenize args for 'if' tag. */ + preg_match_all('~(?> + ' . $this->_obj_call_regexp . '(?:' . $this->_mod_regexp . '*)? | # valid object call + ' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)? | # var or quoted string + \-?0[xX][0-9a-fA-F]+|\-?\d+(?:\.\d+)?|\.\d+|!==|===|==|!=|<>|<<|>>|<=|>=|\&\&|\|\||\(|\)|,|\!|\^|=|\&|\~|<|>|\||\%|\+|\-|\/|\*|\@ | # valid non-word token + \b\w+\b | # valid word token + \S+ # anything else + )~x', $tag_args, $match); + + $tokens = $match[0]; + + if(empty($tokens)) { + $_error_msg = $elseif ? "'elseif'" : "'if'"; + $_error_msg .= ' statement requires arguments'; + $this->_syntax_error($_error_msg, E_USER_ERROR, __FILE__, __LINE__); + } + + + // make sure we have balanced parenthesis + $token_count = array_count_values($tokens); + if(isset($token_count['(']) && $token_count['('] != $token_count[')']) { + $this->_syntax_error("unbalanced parenthesis in if statement", E_USER_ERROR, __FILE__, __LINE__); + } + + $is_arg_stack = array(); + + for ($i = 0; $i < count($tokens); $i++) { + + $token = &$tokens[$i]; + + switch (strtolower($token)) { + case '!': + case '%': + case '!==': + case '==': + case '===': + case '>': + case '<': + case '!=': + case '<>': + case '<<': + case '>>': + case '<=': + case '>=': + case '&&': + case '||': + case '|': + case '^': + case '&': + case '~': + case ')': + case ',': + case '+': + case '-': + case '*': + case '/': + case '@': + break; + + case 'eq': + $token = '=='; + break; + + case 'ne': + case 'neq': + $token = '!='; + break; + + case 'lt': + $token = '<'; + break; + + case 'le': + case 'lte': + $token = '<='; + break; + + case 'gt': + $token = '>'; + break; + + case 'ge': + case 'gte': + $token = '>='; + break; + + case 'and': + $token = '&&'; + break; + + case 'or': + $token = '||'; + break; + + case 'not': + $token = '!'; + break; + + case 'mod': + $token = '%'; + break; + + case '(': + array_push($is_arg_stack, $i); + break; + + case 'is': + /* If last token was a ')', we operate on the parenthesized + expression. The start of the expression is on the stack. + Otherwise, we operate on the last encountered token. */ + if ($tokens[$i-1] == ')') + $is_arg_start = array_pop($is_arg_stack); + else + $is_arg_start = $i-1; + /* Construct the argument for 'is' expression, so it knows + what to operate on. */ + $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); + + /* Pass all tokens from next one until the end to the + 'is' expression parsing function. The function will + return modified tokens, where the first one is the result + of the 'is' expression and the rest are the tokens it + didn't touch. */ + $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); + + /* Replace the old tokens with the new ones. */ + array_splice($tokens, $is_arg_start, count($tokens), $new_tokens); + + /* Adjust argument start so that it won't change from the + current position for the next iteration. */ + $i = $is_arg_start; + break; + + default: + if(preg_match('~^' . $this->_func_regexp . '$~', $token) ) { + // function call + if($this->security && + !in_array($token, $this->security_settings['IF_FUNCS'])) { + $this->_syntax_error("(secure mode) '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); + } + } elseif(preg_match('~^' . $this->_var_regexp . '$~', $token) && (strpos('+-*/^%&|', substr($token, -1)) === false) && isset($tokens[$i+1]) && $tokens[$i+1] == '(') { + // variable function call + $this->_syntax_error("variable function call '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); + } elseif(preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$~', $token)) { + // object or variable + $token = $this->_parse_var_props($token); + } elseif(is_numeric($token)) { + // number, skip it + } else { + $this->_syntax_error("unidentified token '$token'", E_USER_ERROR, __FILE__, __LINE__); + } + break; + } + } + + if ($elseif) + return ''; + else + return ''; + } + + + function _compile_arg_list($type, $name, $attrs, &$cache_code) { + $arg_list = array(); + + if (isset($type) && isset($name) + && isset($this->_plugins[$type]) + && isset($this->_plugins[$type][$name]) + && empty($this->_plugins[$type][$name][4]) + && is_array($this->_plugins[$type][$name][5]) + ) { + /* we have a list of parameters that should be cached */ + $_cache_attrs = $this->_plugins[$type][$name][5]; + $_count = $this->_cache_attrs_count++; + $cache_code = "\$_cache_attrs =& \$this->_smarty_cache_attrs('$this->_cache_serial','$_count');"; + + } else { + /* no parameters are cached */ + $_cache_attrs = null; + } + + foreach ($attrs as $arg_name => $arg_value) { + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + if (is_null($arg_value)) + $arg_value = 'null'; + if ($_cache_attrs && in_array($arg_name, $_cache_attrs)) { + $arg_list[] = "'$arg_name' => (\$this->_cache_including) ? \$_cache_attrs['$arg_name'] : (\$_cache_attrs['$arg_name']=$arg_value)"; + } else { + $arg_list[] = "'$arg_name' => $arg_value"; + } + } + return $arg_list; + } + + /** + * Parse is expression + * + * @param string $is_arg + * @param array $tokens + * @return array + */ + function _parse_is_expr($is_arg, $tokens) + { + $expr_end = 0; + $negate_expr = false; + + if (($first_token = array_shift($tokens)) == 'not') { + $negate_expr = true; + $expr_type = array_shift($tokens); + } else + $expr_type = $first_token; + + switch ($expr_type) { + case 'even': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))"; + } else + $expr = "!(1 & $is_arg)"; + break; + + case 'odd': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))"; + } else + $expr = "(1 & $is_arg)"; + break; + + case 'div': + if (@$tokens[$expr_end] == 'by') { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!($is_arg % " . $this->_parse_var_props($expr_arg) . ")"; + } else { + $this->_syntax_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__); + } + break; + + default: + $this->_syntax_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__); + break; + } + + if ($negate_expr) { + $expr = "!($expr)"; + } + + array_splice($tokens, 0, $expr_end, $expr); + + return $tokens; + } + + + /** + * Parse attribute string + * + * @param string $tag_args + * @return array + */ + function _parse_attrs($tag_args) + { + + /* Tokenize tag attributes. */ + preg_match_all('~(?:' . $this->_obj_call_regexp . '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+) + )+ | + [=] + ~x', $tag_args, $match); + $tokens = $match[0]; + + $attrs = array(); + /* Parse state: + 0 - expecting attribute name + 1 - expecting '=' + 2 - expecting attribute value (not '=') */ + $state = 0; + + foreach ($tokens as $token) { + switch ($state) { + case 0: + /* If the token is a valid identifier, we set attribute name + and go to state 1. */ + if (preg_match('~^\w+$~', $token)) { + $attr_name = $token; + $state = 1; + } else + $this->_syntax_error("invalid attribute name: '$token'", E_USER_ERROR, __FILE__, __LINE__); + break; + + case 1: + /* If the token is '=', then we go to state 2. */ + if ($token == '=') { + $state = 2; + } else + $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); + break; + + case 2: + /* If token is not '=', we set the attribute value and go to + state 0. */ + if ($token != '=') { + /* We booleanize the token if it's a non-quoted possible + boolean value. */ + if (preg_match('~^(on|yes|true)$~', $token)) { + $token = 'true'; + } else if (preg_match('~^(off|no|false)$~', $token)) { + $token = 'false'; + } else if ($token == 'null') { + $token = 'null'; + } else if (preg_match('~^' . $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) { + /* treat integer literally */ + } else if (!preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$~', $token)) { + /* treat as a string, double-quote it escaping quotes */ + $token = '"'.addslashes($token).'"'; + } + + $attrs[$attr_name] = $token; + $state = 0; + } else + $this->_syntax_error("'=' cannot be an attribute value", E_USER_ERROR, __FILE__, __LINE__); + break; + } + $last_token = $token; + } + + if($state != 0) { + if($state == 1) { + $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); + } else { + $this->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__); + } + } + + $this->_parse_vars_props($attrs); + + return $attrs; + } + + /** + * compile multiple variables and section properties tokens into + * PHP code + * + * @param array $tokens + */ + function _parse_vars_props(&$tokens) + { + foreach($tokens as $key => $val) { + $tokens[$key] = $this->_parse_var_props($val); + } + } + + /** + * compile single variable and section properties token into + * PHP code + * + * @param string $val + * @param string $tag_attrs + * @return string + */ + function _parse_var_props($val) + { + $val = trim($val); + + if(preg_match('~^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~', $val, $match)) { + // $ variable or object + $return = $this->_parse_var($match[1]); + $modifiers = $match[2]; + if (!empty($this->default_modifiers) && !preg_match('~(^|\|)smarty:nodefaults($|\|)~',$modifiers)) { + $_default_mod_string = implode('|',(array)$this->default_modifiers); + $modifiers = empty($modifiers) ? $_default_mod_string : $_default_mod_string . '|' . $modifiers; + } + $this->_parse_modifiers($return, $modifiers); + return $return; + } elseif (preg_match('~^' . $this->_db_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { + // double quoted text + preg_match('~^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); + $return = $this->_expand_quoted_text($match[1]); + if($match[2] != '') { + $this->_parse_modifiers($return, $match[2]); + } + return $return; + } + elseif(preg_match('~^' . $this->_num_const_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { + // numerical constant + preg_match('~^(' . $this->_num_const_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); + if($match[2] != '') { + $this->_parse_modifiers($match[1], $match[2]); + return $match[1]; + } + } + elseif(preg_match('~^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { + // single quoted text + preg_match('~^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); + if($match[2] != '') { + $this->_parse_modifiers($match[1], $match[2]); + return $match[1]; + } + } + elseif(preg_match('~^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { + // config var + return $this->_parse_conf_var($val); + } + elseif(preg_match('~^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { + // section var + return $this->_parse_section_prop($val); + } + elseif(!in_array($val, $this->_permitted_tokens) && !is_numeric($val)) { + // literal string + return $this->_expand_quoted_text('"' . strtr($val, array('\\' => '\\\\', '"' => '\\"')) .'"'); + } + return $val; + } + + /** + * expand quoted text with embedded variables + * + * @param string $var_expr + * @return string + */ + function _expand_quoted_text($var_expr) + { + // if contains unescaped $, expand it + if(preg_match_all('~(?:\`(?_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?_parse_var(str_replace('`','',$_var)) . ')."', $var_expr); + } + $_return = preg_replace('~\.""|(?_dvar_math_regexp.'|'.$this->_qstr_regexp.')~', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE); + + if(count($_math_vars) > 1) { + $_first_var = ""; + $_complete_var = ""; + $_output = ""; + // simple check if there is any math, to stop recursion (due to modifiers with "xx % yy" as parameter) + foreach($_math_vars as $_k => $_math_var) { + $_math_var = $_math_vars[$_k]; + + if(!empty($_math_var) || is_numeric($_math_var)) { + // hit a math operator, so process the stuff which came before it + if(preg_match('~^' . $this->_dvar_math_regexp . '$~', $_math_var)) { + $_has_math = true; + if(!empty($_complete_var) || is_numeric($_complete_var)) { + $_output .= $this->_parse_var($_complete_var); + } + + // just output the math operator to php + $_output .= $_math_var; + + if(empty($_first_var)) + $_first_var = $_complete_var; + + $_complete_var = ""; + } else { + $_complete_var .= $_math_var; + } + } + } + if($_has_math) { + if(!empty($_complete_var) || is_numeric($_complete_var)) + $_output .= $this->_parse_var($_complete_var); + + // get the modifiers working (only the last var from math + modifier is left) + $var_expr = $_complete_var; + } + } + + // prevent cutting of first digit in the number (we _definitly_ got a number if the first char is a digit) + if(is_numeric(substr($var_expr, 0, 1))) + $_var_ref = $var_expr; + else + $_var_ref = substr($var_expr, 1); + + if(!$_has_math) { + + // get [foo] and .foo and ->foo and (...) pieces + preg_match_all('~(?:^\w+)|' . $this->_obj_params_regexp . '|(?:' . $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+~', $_var_ref, $match); + + $_indexes = $match[0]; + $_var_name = array_shift($_indexes); + + /* Handle $smarty.* variable references as a special case. */ + if ($_var_name == 'smarty') { + /* + * If the reference could be compiled, use the compiled output; + * otherwise, fall back on the $smarty variable generated at + * run-time. + */ + if (($smarty_ref = $this->_compile_smarty_ref($_indexes)) !== null) { + $_output = $smarty_ref; + } else { + $_var_name = substr(array_shift($_indexes), 1); + $_output = "\$this->_smarty_vars['$_var_name']"; + } + } elseif(is_numeric($_var_name) && is_numeric(substr($var_expr, 0, 1))) { + // because . is the operator for accessing arrays thru inidizes we need to put it together again for floating point numbers + if(count($_indexes) > 0) + { + $_var_name .= implode("", $_indexes); + $_indexes = array(); + } + $_output = $_var_name; + } else { + $_output = "\$this->_tpl_vars['$_var_name']"; + } + + foreach ($_indexes as $_index) { + if (substr($_index, 0, 1) == '[') { + $_index = substr($_index, 1, -1); + if (is_numeric($_index)) { + $_output .= "[$_index]"; + } elseif (substr($_index, 0, 1) == '$') { + if (strpos($_index, '.') !== false) { + $_output .= '[' . $this->_parse_var($_index) . ']'; + } else { + $_output .= "[\$this->_tpl_vars['" . substr($_index, 1) . "']]"; + } + } else { + $_var_parts = explode('.', $_index); + $_var_section = $_var_parts[0]; + $_var_section_prop = isset($_var_parts[1]) ? $_var_parts[1] : 'index'; + $_output .= "[\$this->_sections['$_var_section']['$_var_section_prop']]"; + } + } else if (substr($_index, 0, 1) == '.') { + if (substr($_index, 1, 1) == '$') + $_output .= "[\$this->_tpl_vars['" . substr($_index, 2) . "']]"; + else + $_output .= "['" . substr($_index, 1) . "']"; + } else if (substr($_index,0,2) == '->') { + if(substr($_index,2,2) == '__') { + $this->_syntax_error('call to internal object members is not allowed', E_USER_ERROR, __FILE__, __LINE__); + } elseif($this->security && substr($_index, 2, 1) == '_') { + $this->_syntax_error('(secure) call to private object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); + } elseif (substr($_index, 2, 1) == '$') { + if ($this->security) { + $this->_syntax_error('(secure) call to dynamic object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); + } else { + $_output .= '->{(($_var=$this->_tpl_vars[\''.substr($_index,3).'\']) && substr($_var,0,2)!=\'__\') ? $_var : $this->trigger_error("cannot access property \\"$_var\\"")}'; + } + } else { + $_output .= $_index; + } + } elseif (substr($_index, 0, 1) == '(') { + $_index = $this->_parse_parenth_args($_index); + $_output .= $_index; + } else { + $_output .= $_index; + } + } + } + + return $_output; + } + + /** + * parse arguments in function call parenthesis + * + * @param string $parenth_args + * @return string + */ + function _parse_parenth_args($parenth_args) + { + preg_match_all('~' . $this->_param_regexp . '~',$parenth_args, $match); + $orig_vals = $match = $match[0]; + $this->_parse_vars_props($match); + $replace = array(); + for ($i = 0, $count = count($match); $i < $count; $i++) { + $replace[$orig_vals[$i]] = $match[$i]; + } + return strtr($parenth_args, $replace); + } + + /** + * parse configuration variable expression into PHP code + * + * @param string $conf_var_expr + */ + function _parse_conf_var($conf_var_expr) + { + $parts = explode('|', $conf_var_expr, 2); + $var_ref = $parts[0]; + $modifiers = isset($parts[1]) ? $parts[1] : ''; + + $var_name = substr($var_ref, 1, -1); + + $output = "\$this->_config[0]['vars']['$var_name']"; + + $this->_parse_modifiers($output, $modifiers); + + return $output; + } + + /** + * parse section property expression into PHP code + * + * @param string $section_prop_expr + * @return string + */ + function _parse_section_prop($section_prop_expr) + { + $parts = explode('|', $section_prop_expr, 2); + $var_ref = $parts[0]; + $modifiers = isset($parts[1]) ? $parts[1] : ''; + + preg_match('!%(\w+)\.(\w+)%!', $var_ref, $match); + $section_name = $match[1]; + $prop_name = $match[2]; + + $output = "\$this->_sections['$section_name']['$prop_name']"; + + $this->_parse_modifiers($output, $modifiers); + + return $output; + } + + + /** + * parse modifier chain into PHP code + * + * sets $output to parsed modified chain + * @param string $output + * @param string $modifier_string + */ + function _parse_modifiers(&$output, $modifier_string) + { + preg_match_all('~\|(@?\w+)((?>:(?:'. $this->_qstr_regexp . '|[^|]+))*)~', '|' . $modifier_string, $_match); + list(, $_modifiers, $modifier_arg_strings) = $_match; + + for ($_i = 0, $_for_max = count($_modifiers); $_i < $_for_max; $_i++) { + $_modifier_name = $_modifiers[$_i]; + + if($_modifier_name == 'smarty') { + // skip smarty modifier + continue; + } + + preg_match_all('~:(' . $this->_qstr_regexp . '|[^:]+)~', $modifier_arg_strings[$_i], $_match); + $_modifier_args = $_match[1]; + + if (substr($_modifier_name, 0, 1) == '@') { + $_map_array = false; + $_modifier_name = substr($_modifier_name, 1); + } else { + $_map_array = true; + } + + if (empty($this->_plugins['modifier'][$_modifier_name]) + && !$this->_get_plugin_filepath('modifier', $_modifier_name) + && function_exists($_modifier_name)) { + if ($this->security && !in_array($_modifier_name, $this->security_settings['MODIFIER_FUNCS'])) { + $this->_trigger_fatal_error("[plugin] (secure mode) modifier '$_modifier_name' is not allowed" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); + } else { + $this->_plugins['modifier'][$_modifier_name] = array($_modifier_name, null, null, false); + } + } + $this->_add_plugin('modifier', $_modifier_name); + + $this->_parse_vars_props($_modifier_args); + + if($_modifier_name == 'default') { + // supress notifications of default modifier vars and args + if(substr($output, 0, 1) == '$') { + $output = '@' . $output; + } + if(isset($_modifier_args[0]) && substr($_modifier_args[0], 0, 1) == '$') { + $_modifier_args[0] = '@' . $_modifier_args[0]; + } + } + if (count($_modifier_args) > 0) + $_modifier_args = ', '.implode(', ', $_modifier_args); + else + $_modifier_args = ''; + + if ($_map_array) { + $output = "((is_array(\$_tmp=$output)) ? \$this->_run_mod_handler('$_modifier_name', true, \$_tmp$_modifier_args) : " . $this->_compile_plugin_call('modifier', $_modifier_name) . "(\$_tmp$_modifier_args))"; + + } else { + + $output = $this->_compile_plugin_call('modifier', $_modifier_name)."($output$_modifier_args)"; + + } + } + } + + + /** + * add plugin + * + * @param string $type + * @param string $name + * @param boolean? $delayed_loading + */ + function _add_plugin($type, $name, $delayed_loading = null) + { + if (!isset($this->_plugin_info[$type])) { + $this->_plugin_info[$type] = array(); + } + if (!isset($this->_plugin_info[$type][$name])) { + $this->_plugin_info[$type][$name] = array($this->_current_file, + $this->_current_line_no, + $delayed_loading); + } + } + + + /** + * Compiles references of type $smarty.foo + * + * @param string $indexes + * @return string + */ + function _compile_smarty_ref(&$indexes) + { + /* Extract the reference name. */ + $_ref = substr($indexes[0], 1); + foreach($indexes as $_index_no=>$_index) { + if (substr($_index, 0, 1) != '.' && $_index_no<2 || !preg_match('~^(\.|\[|->)~', $_index)) { + $this->_syntax_error('$smarty' . implode('', array_slice($indexes, 0, 2)) . ' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); + } + } + + switch ($_ref) { + case 'now': + $compiled_ref = 'time()'; + $_max_index = 1; + break; + + case 'foreach': + array_shift($indexes); + $_var = $this->_parse_var_props(substr($indexes[0], 1)); + $_propname = substr($indexes[1], 1); + $_max_index = 1; + switch ($_propname) { + case 'index': + array_shift($indexes); + $compiled_ref = "(\$this->_foreach[$_var]['iteration']-1)"; + break; + + case 'first': + array_shift($indexes); + $compiled_ref = "(\$this->_foreach[$_var]['iteration'] <= 1)"; + break; + + case 'last': + array_shift($indexes); + $compiled_ref = "(\$this->_foreach[$_var]['iteration'] == \$this->_foreach[$_var]['total'])"; + break; + + case 'show': + array_shift($indexes); + $compiled_ref = "(\$this->_foreach[$_var]['total'] > 0)"; + break; + + default: + unset($_max_index); + $compiled_ref = "\$this->_foreach[$_var]"; + } + break; + + case 'section': + array_shift($indexes); + $_var = $this->_parse_var_props(substr($indexes[0], 1)); + $compiled_ref = "\$this->_sections[$_var]"; + break; + + case 'get': + $compiled_ref = ($this->request_use_auto_globals) ? '$_GET' : "\$GLOBALS['HTTP_GET_VARS']"; + break; + + case 'post': + $compiled_ref = ($this->request_use_auto_globals) ? '$_POST' : "\$GLOBALS['HTTP_POST_VARS']"; + break; + + case 'cookies': + $compiled_ref = ($this->request_use_auto_globals) ? '$_COOKIE' : "\$GLOBALS['HTTP_COOKIE_VARS']"; + break; + + case 'env': + $compiled_ref = ($this->request_use_auto_globals) ? '$_ENV' : "\$GLOBALS['HTTP_ENV_VARS']"; + break; + + case 'server': + $compiled_ref = ($this->request_use_auto_globals) ? '$_SERVER' : "\$GLOBALS['HTTP_SERVER_VARS']"; + break; + + case 'session': + $compiled_ref = ($this->request_use_auto_globals) ? '$_SESSION' : "\$GLOBALS['HTTP_SESSION_VARS']"; + break; + + /* + * These cases are handled either at run-time or elsewhere in the + * compiler. + */ + case 'request': + if ($this->request_use_auto_globals) { + $compiled_ref = '$_REQUEST'; + break; + } else { + $this->_init_smarty_vars = true; + } + return null; + + case 'capture': + return null; + + case 'template': + $compiled_ref = "'$this->_current_file'"; + $_max_index = 1; + break; + + case 'version': + $compiled_ref = "'$this->_version'"; + $_max_index = 1; + break; + + case 'const': + if ($this->security && !$this->security_settings['ALLOW_CONSTANTS']) { + $this->_syntax_error("(secure mode) constants not permitted", + E_USER_WARNING, __FILE__, __LINE__); + return; + } + array_shift($indexes); + if (preg_match('!^\.\w+$!', $indexes[0])) { + $compiled_ref = '@' . substr($indexes[0], 1); + } else { + $_val = $this->_parse_var_props(substr($indexes[0], 1)); + $compiled_ref = '@constant(' . $_val . ')'; + } + $_max_index = 1; + break; + + case 'config': + $compiled_ref = "\$this->_config[0]['vars']"; + $_max_index = 3; + break; + + case 'ldelim': + $compiled_ref = "'$this->left_delimiter'"; + break; + + case 'rdelim': + $compiled_ref = "'$this->right_delimiter'"; + break; + + default: + $this->_syntax_error('$smarty.' . $_ref . ' is an unknown reference', E_USER_ERROR, __FILE__, __LINE__); + break; + } + + if (isset($_max_index) && count($indexes) > $_max_index) { + $this->_syntax_error('$smarty' . implode('', $indexes) .' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); + } + + array_shift($indexes); + return $compiled_ref; + } + + /** + * compiles call to plugin of type $type with name $name + * returns a string containing the function-name or method call + * without the paramter-list that would have follow to make the + * call valid php-syntax + * + * @param string $type + * @param string $name + * @return string + */ + function _compile_plugin_call($type, $name) { + if (isset($this->_plugins[$type][$name])) { + /* plugin loaded */ + if (is_array($this->_plugins[$type][$name][0])) { + return ((is_object($this->_plugins[$type][$name][0][0])) ? + "\$this->_plugins['$type']['$name'][0][0]->" /* method callback */ + : (string)($this->_plugins[$type][$name][0][0]).'::' /* class callback */ + ). $this->_plugins[$type][$name][0][1]; + + } else { + /* function callback */ + return $this->_plugins[$type][$name][0]; + + } + } else { + /* plugin not loaded -> auto-loadable-plugin */ + return 'smarty_'.$type.'_'.$name; + + } + } + + /** + * load pre- and post-filters + */ + function _load_filters() + { + if (count($this->_plugins['prefilter']) > 0) { + foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { + if ($prefilter === false) { + unset($this->_plugins['prefilter'][$filter_name]); + $_params = array('plugins' => array(array('prefilter', $filter_name, null, null, false))); + require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + } + } + } + if (count($this->_plugins['postfilter']) > 0) { + foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { + if ($postfilter === false) { + unset($this->_plugins['postfilter'][$filter_name]); + $_params = array('plugins' => array(array('postfilter', $filter_name, null, null, false))); + require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + } + } + } + } + + + /** + * Quote subpattern references + * + * @param string $string + * @return string + */ + function _quote_replace($string) + { + return strtr($string, array('\\' => '\\\\', '$' => '\\$')); + } + + /** + * display Smarty syntax error + * + * @param string $error_msg + * @param integer $error_type + * @param string $file + * @param integer $line + */ + function _syntax_error($error_msg, $error_type = E_USER_ERROR, $file=null, $line=null) + { + $this->_trigger_fatal_error("syntax error: $error_msg", $this->_current_file, $this->_current_line_no, $file, $line, $error_type); + } + + + /** + * check if the compilation changes from cacheable to + * non-cacheable state with the beginning of the current + * plugin. return php-code to reflect the transition. + * @return string + */ + function _push_cacheable_state($type, $name) { + $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; + if ($_cacheable + || 0<$this->_cacheable_state++) return ''; + if (!isset($this->_cache_serial)) $this->_cache_serial = md5(uniqid('Smarty')); + $_ret = 'if ($this->caching && !$this->_cache_including) { echo \'{nocache:' + . $this->_cache_serial . '#' . $this->_nocache_count + . '}\'; };'; + return $_ret; + } + + + /** + * check if the compilation changes from non-cacheable to + * cacheable state with the end of the current plugin return + * php-code to reflect the transition. + * @return string + */ + function _pop_cacheable_state($type, $name) { + $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; + if ($_cacheable + || --$this->_cacheable_state>0) return ''; + return 'if ($this->caching && !$this->_cache_including) { echo \'{/nocache:' + . $this->_cache_serial . '#' . ($this->_nocache_count++) + . '}\'; };'; + } + + + /** + * push opening tag-name, file-name and line-number on the tag-stack + * @param string the opening tag's name + */ + function _push_tag($open_tag) + { + array_push($this->_tag_stack, array($open_tag, $this->_current_line_no)); + } + + /** + * pop closing tag-name + * raise an error if this stack-top doesn't match with the closing tag + * @param string the closing tag's name + * @return string the opening tag's name + */ + function _pop_tag($close_tag) + { + $message = ''; + if (count($this->_tag_stack)>0) { + list($_open_tag, $_line_no) = array_pop($this->_tag_stack); + if ($close_tag == $_open_tag) { + return $_open_tag; + } + if ($close_tag == 'if' && ($_open_tag == 'else' || $_open_tag == 'elseif' )) { + return $this->_pop_tag($close_tag); + } + if ($close_tag == 'section' && $_open_tag == 'sectionelse') { + $this->_pop_tag($close_tag); + return $_open_tag; + } + if ($close_tag == 'foreach' && $_open_tag == 'foreachelse') { + $this->_pop_tag($close_tag); + return $_open_tag; + } + if ($_open_tag == 'else' || $_open_tag == 'elseif') { + $_open_tag = 'if'; + } elseif ($_open_tag == 'sectionelse') { + $_open_tag = 'section'; + } elseif ($_open_tag == 'foreachelse') { + $_open_tag = 'foreach'; + } + $message = " expected {/$_open_tag} (opened line $_line_no)."; + } + $this->_syntax_error("mismatched tag {/$close_tag}.$message", + E_USER_ERROR, __FILE__, __LINE__); + } + +} + +/** + * compare to values by their string length + * + * @access private + * @param string $a + * @param string $b + * @return 0|-1|1 + */ +function _smarty_sort_length($a, $b) +{ + if($a == $b) + return 0; + + if(strlen($a) == strlen($b)) + return ($a > $b) ? -1 : 1; + + return (strlen($a) > strlen($b)) ? -1 : 1; +} + + +/* vim: set et: */ + +?> diff --git a/libs/debug.tpl b/libs/debug.tpl new file mode 100644 index 0000000..7f1c9d4 --- /dev/null +++ b/libs/debug.tpl @@ -0,0 +1,64 @@ +{* Smarty *} + +{* debug.tpl, last updated version 2.0.1 *} + +{assign_debug_info} + +{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"} + + + + {section name=templates loop=$_debug_tpls} + + {sectionelse} + + {/section} + + {section name=vars loop=$_debug_keys} + + {sectionelse} + + {/section} + + {section name=config_vars loop=$_debug_config_keys} + + {sectionelse} + + {/section} +
Smarty Debug Console
included templates & config files (load time in seconds):
{section name=indent loop=$_debug_tpls[templates].depth}   {/section}{$_debug_tpls[templates].filename|escape:html}{if isset($_debug_tpls[templates].exec_time)} ({$_debug_tpls[templates].exec_time|string_format:"%.5f"}){if %templates.index% eq 0} (total){/if}{/if}
no templates included
assigned template variables:
{ldelim}${$_debug_keys[vars]}{rdelim}{$_debug_vals[vars]|@debug_print_var}
no template variables assigned
assigned config file variables (outer template scope):
{ldelim}#{$_debug_config_keys[config_vars]}#{rdelim}{$_debug_config_vals[config_vars]|@debug_print_var}
no config vars assigned
+ +{else} + +{/if} diff --git a/libs/internals/core.assemble_plugin_filepath.php b/libs/internals/core.assemble_plugin_filepath.php new file mode 100644 index 0000000..690d3dd --- /dev/null +++ b/libs/internals/core.assemble_plugin_filepath.php @@ -0,0 +1,67 @@ +plugins_dir as $_plugin_dir) { + + $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; + + // see if path is relative + if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) { + $_relative_paths[] = $_plugin_dir; + // relative path, see if it is in the SMARTY_DIR + if (@is_readable(SMARTY_DIR . $_plugin_filepath)) { + $_return = SMARTY_DIR . $_plugin_filepath; + break; + } + } + // try relative to cwd (or absolute) + if (@is_readable($_plugin_filepath)) { + $_return = $_plugin_filepath; + break; + } + } + + if($_return === false) { + // still not found, try PHP include_path + if(isset($_relative_paths)) { + foreach ((array)$_relative_paths as $_plugin_dir) { + + $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; + + $_params = array('file_path' => $_plugin_filepath); + require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $smarty)) { + $_return = $_params['new_file_path']; + break; + } + } + } + } + $_filepaths_cache[$_plugin_filename] = $_return; + return $_return; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.assign_smarty_interface.php b/libs/internals/core.assign_smarty_interface.php new file mode 100644 index 0000000..7e65a73 --- /dev/null +++ b/libs/internals/core.assign_smarty_interface.php @@ -0,0 +1,43 @@ + + * Name: assign_smarty_interface
+ * Purpose: assign the $smarty interface variable + * @param array Format: null + * @param Smarty + */ +function smarty_core_assign_smarty_interface($params, &$smarty) +{ + if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) { + return; + } + + $_globals_map = array('g' => 'HTTP_GET_VARS', + 'p' => 'HTTP_POST_VARS', + 'c' => 'HTTP_COOKIE_VARS', + 's' => 'HTTP_SERVER_VARS', + 'e' => 'HTTP_ENV_VARS'); + + $_smarty_vars_request = array(); + + foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) { + if (isset($_globals_map[$_c])) { + $_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]); + } + } + $_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']); + + $smarty->_smarty_vars['request'] = $_smarty_vars_request; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.create_dir_structure.php b/libs/internals/core.create_dir_structure.php new file mode 100644 index 0000000..3eecc49 --- /dev/null +++ b/libs/internals/core.create_dir_structure.php @@ -0,0 +1,79 @@ +_dir_perms) && !is_dir($_new_dir)) { + $smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); + return false; + } + $_new_dir .= '/'; + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.display_debug_console.php b/libs/internals/core.display_debug_console.php new file mode 100644 index 0000000..1a80f39 --- /dev/null +++ b/libs/internals/core.display_debug_console.php @@ -0,0 +1,61 @@ + + * Name: display_debug_console
+ * Purpose: display the javascript debug console window + * @param array Format: null + * @param Smarty + */ +function smarty_core_display_debug_console($params, &$smarty) +{ + // we must force compile the debug template in case the environment + // changed between separate applications. + + if(empty($smarty->debug_tpl)) { + // set path to debug template from SMARTY_DIR + $smarty->debug_tpl = SMARTY_DIR . 'debug.tpl'; + if($smarty->security && is_file($smarty->debug_tpl)) { + $smarty->secure_dir[] = realpath($smarty->debug_tpl); + } + $smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl'; + } + + $_ldelim_orig = $smarty->left_delimiter; + $_rdelim_orig = $smarty->right_delimiter; + + $smarty->left_delimiter = '{'; + $smarty->right_delimiter = '}'; + + $_compile_id_orig = $smarty->_compile_id; + $smarty->_compile_id = null; + + $_compile_path = $smarty->_get_compile_path($smarty->debug_tpl); + if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path)) + { + ob_start(); + $smarty->_include($_compile_path); + $_results = ob_get_contents(); + ob_end_clean(); + } else { + $_results = ''; + } + + $smarty->_compile_id = $_compile_id_orig; + + $smarty->left_delimiter = $_ldelim_orig; + $smarty->right_delimiter = $_rdelim_orig; + + return $_results; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.get_include_path.php b/libs/internals/core.get_include_path.php new file mode 100644 index 0000000..4343241 --- /dev/null +++ b/libs/internals/core.get_include_path.php @@ -0,0 +1,44 @@ + diff --git a/libs/internals/core.get_microtime.php b/libs/internals/core.get_microtime.php new file mode 100644 index 0000000..f1a28e0 --- /dev/null +++ b/libs/internals/core.get_microtime.php @@ -0,0 +1,23 @@ + diff --git a/libs/internals/core.get_php_resource.php b/libs/internals/core.get_php_resource.php new file mode 100644 index 0000000..786d4e7 --- /dev/null +++ b/libs/internals/core.get_php_resource.php @@ -0,0 +1,80 @@ +trusted_dir; + $smarty->_parse_resource_name($params, $smarty); + + /* + * Find out if the resource exists. + */ + + if ($params['resource_type'] == 'file') { + $_readable = false; + if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) { + $_readable = true; + } else { + // test for file in include_path + $_params = array('file_path' => $params['resource_name']); + require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $smarty)) { + $_include_path = $_params['new_file_path']; + $_readable = true; + } + } + } else if ($params['resource_type'] != 'file') { + $_template_source = null; + $_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0]) + && call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0], + array($params['resource_name'], &$_template_source, &$smarty)); + } + + /* + * Set the error function, depending on which class calls us. + */ + if (method_exists($smarty, '_syntax_error')) { + $_error_funcc = '_syntax_error'; + } else { + $_error_funcc = 'trigger_error'; + } + + if ($_readable) { + if ($smarty->security) { + require_once(SMARTY_CORE_DIR . 'core.is_trusted.php'); + if (!smarty_core_is_trusted($params, $smarty)) { + $smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted'); + return false; + } + } + } else { + $smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable'); + return false; + } + + if ($params['resource_type'] == 'file') { + $params['php_resource'] = $params['resource_name']; + } else { + $params['php_resource'] = $_template_source; + } + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.is_secure.php b/libs/internals/core.is_secure.php new file mode 100644 index 0000000..d54abd4 --- /dev/null +++ b/libs/internals/core.is_secure.php @@ -0,0 +1,59 @@ +security || $smarty->security_settings['INCLUDE_ANY']) { + return true; + } + + if ($params['resource_type'] == 'file') { + $_rp = realpath($params['resource_name']); + if (isset($params['resource_base_path'])) { + foreach ((array)$params['resource_base_path'] as $curr_dir) { + if ( ($_cd = realpath($curr_dir)) !== false && + strncmp($_rp, $_cd, strlen($_cd)) == 0 && + substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) { + return true; + } + } + } + if (!empty($smarty->secure_dir)) { + foreach ((array)$smarty->secure_dir as $curr_dir) { + if ( ($_cd = realpath($curr_dir)) !== false) { + if($_cd == $_rp) { + return true; + } elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 && + substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) { + return true; + } + } + } + } + } else { + // resource is not on local file system + return call_user_func_array( + $smarty->_plugins['resource'][$params['resource_type']][0][2], + array($params['resource_name'], &$smarty)); + } + + return false; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.is_trusted.php b/libs/internals/core.is_trusted.php new file mode 100644 index 0000000..4299731 --- /dev/null +++ b/libs/internals/core.is_trusted.php @@ -0,0 +1,47 @@ +trusted_dir)) { + $_rp = realpath($params['resource_name']); + foreach ((array)$smarty->trusted_dir as $curr_dir) { + if (!empty($curr_dir) && is_readable ($curr_dir)) { + $_cd = realpath($curr_dir); + if (strncmp($_rp, $_cd, strlen($_cd)) == 0 + && substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) { + $_smarty_trusted = true; + break; + } + } + } + } + + } else { + // resource is not on local file system + $_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3], + array($params['resource_name'], $smarty)); + } + + return $_smarty_trusted; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.load_plugins.php b/libs/internals/core.load_plugins.php new file mode 100644 index 0000000..6db1dc5 --- /dev/null +++ b/libs/internals/core.load_plugins.php @@ -0,0 +1,125 @@ +_plugins[$_type][$_name]; + + /* + * We do not load plugin more than once for each instance of Smarty. + * The following code checks for that. The plugin can also be + * registered dynamically at runtime, in which case template file + * and line number will be unknown, so we fill them in. + * + * The final element of the info array is a flag that indicates + * whether the dynamically registered plugin function has been + * checked for existence yet or not. + */ + if (isset($_plugin)) { + if (empty($_plugin[3])) { + if (!is_callable($_plugin[0])) { + $smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } else { + $_plugin[1] = $_tpl_file; + $_plugin[2] = $_tpl_line; + $_plugin[3] = true; + if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */ + } + } + continue; + } else if ($_type == 'insert') { + /* + * For backwards compatibility, we check for insert functions in + * the symbol table before trying to load them as a plugin. + */ + $_plugin_func = 'insert_' . $_name; + if (function_exists($_plugin_func)) { + $_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false); + continue; + } + } + + $_plugin_file = $smarty->_get_plugin_filepath($_type, $_name); + + if (! $_found = ($_plugin_file != false)) { + $_message = "could not load plugin file '$_type.$_name.php'\n"; + } + + /* + * If plugin file is found, it -must- provide the properly named + * plugin function. In case it doesn't, simply output the error and + * do not fall back on any other method. + */ + if ($_found) { + include_once $_plugin_file; + + $_plugin_func = 'smarty_' . $_type . '_' . $_name; + if (!function_exists($_plugin_func)) { + $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__); + continue; + } + } + /* + * In case of insert plugins, their code may be loaded later via + * 'script' attribute. + */ + else if ($_type == 'insert' && $_delayed_loading) { + $_plugin_func = 'smarty_' . $_type . '_' . $_name; + $_found = true; + } + + /* + * Plugin specific processing and error checking. + */ + if (!$_found) { + if ($_type == 'modifier') { + /* + * In case modifier falls back on using PHP functions + * directly, we only allow those specified in the security + * context. + */ + if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) { + $_message = "(secure mode) modifier '$_name' is not allowed"; + } else { + if (!function_exists($_name)) { + $_message = "modifier '$_name' is not implemented"; + } else { + $_plugin_func = $_name; + $_found = true; + } + } + } else if ($_type == 'function') { + /* + * This is a catch-all situation. + */ + $_message = "unknown tag - '$_name'"; + } + } + + if ($_found) { + $smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true); + } else { + // output error + $smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.load_resource_plugin.php b/libs/internals/core.load_resource_plugin.php new file mode 100644 index 0000000..a7d37d1 --- /dev/null +++ b/libs/internals/core.load_resource_plugin.php @@ -0,0 +1,74 @@ +_plugins['resource'][$params['type']]; + if (isset($_plugin)) { + if (!$_plugin[1] && count($_plugin[0])) { + $_plugin[1] = true; + foreach ($_plugin[0] as $_plugin_func) { + if (!is_callable($_plugin_func)) { + $_plugin[1] = false; + break; + } + } + } + + if (!$_plugin[1]) { + $smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__); + } + + return; + } + + $_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']); + $_found = ($_plugin_file != false); + + if ($_found) { /* + * If the plugin file is found, it -must- provide the properly named + * plugin functions. + */ + include_once($_plugin_file); + + /* + * Locate functions that we require the plugin to provide. + */ + $_resource_ops = array('source', 'timestamp', 'secure', 'trusted'); + $_resource_funcs = array(); + foreach ($_resource_ops as $_op) { + $_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op; + if (!function_exists($_plugin_func)) { + $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__); + return; + } else { + $_resource_funcs[] = $_plugin_func; + } + } + + $smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true); + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.process_cached_inserts.php b/libs/internals/core.process_cached_inserts.php new file mode 100644 index 0000000..1d78edd --- /dev/null +++ b/libs/internals/core.process_cached_inserts.php @@ -0,0 +1,71 @@ +_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis', + $params['results'], $match); + list($cached_inserts, $insert_args) = $match; + + for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) { + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + $args = unserialize($insert_args[$i]); + $name = $args['name']; + + if (isset($args['script'])) { + $_params = array('resource_name' => $smarty->_dequote($args['script'])); + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); + if(!smarty_core_get_php_resource($_params, $smarty)) { + return false; + } + $resource_type = $_params['resource_type']; + $php_resource = $_params['php_resource']; + + + if ($resource_type == 'file') { + $smarty->_include($php_resource, true); + } else { + $smarty->_eval($php_resource); + } + } + + $function_name = $smarty->_plugins['insert'][$name][0]; + if (empty($args['assign'])) { + $replace = $function_name($args, $smarty); + } else { + $smarty->assign($args['assign'], $function_name($args, $smarty)); + $replace = ''; + } + + $params['results'] = substr_replace($params['results'], $replace, strpos($params['results'], $cached_inserts[$i]), strlen($cached_inserts[$i])); + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'insert', + 'filename' => 'insert_'.$name, + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time); + } + } + + return $params['results']; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.process_compiled_include.php b/libs/internals/core.process_compiled_include.php new file mode 100644 index 0000000..d539423 --- /dev/null +++ b/libs/internals/core.process_compiled_include.php @@ -0,0 +1,37 @@ +_cache_including; + $smarty->_cache_including = true; + + $_return = $params['results']; + + foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) { + $smarty->_include($_include_file_path, true); + } + + foreach ($smarty->_cache_serials as $_include_file_path=>$_cache_serial) { + $_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s', + array(&$smarty, '_process_compiled_include_callback'), + $_return); + } + $smarty->_cache_including = $_cache_including; + return $_return; +} + +?> diff --git a/libs/internals/core.read_cache_file.php b/libs/internals/core.read_cache_file.php new file mode 100644 index 0000000..c60e113 --- /dev/null +++ b/libs/internals/core.read_cache_file.php @@ -0,0 +1,101 @@ +force_compile) { + // force compile enabled, always regenerate + return false; + } + + if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) { + list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']]; + return true; + } + + if (!empty($smarty->cache_handler_func)) { + // use cache_handler function + call_user_func_array($smarty->cache_handler_func, + array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); + } else { + // use local cache file + $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); + $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); + $params['results'] = $smarty->_read_file($_cache_file); + } + + if (empty($params['results'])) { + // nothing to parse (error?), regenerate cache + return false; + } + + $_contents = $params['results']; + $_info_start = strpos($_contents, "\n") + 1; + $_info_len = (int)substr($_contents, 0, $_info_start - 1); + $_cache_info = unserialize(substr($_contents, $_info_start, $_info_len)); + $params['results'] = substr($_contents, $_info_start + $_info_len); + + if ($smarty->caching == 2 && isset ($_cache_info['expires'])){ + // caching by expiration time + if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) { + // cache expired, regenerate + return false; + } + } else { + // caching by lifetime + if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) { + // cache expired, regenerate + return false; + } + } + + if ($smarty->compile_check) { + $_params = array('get_source' => false, 'quiet'=>true); + foreach (array_keys($_cache_info['template']) as $_template_dep) { + $_params['resource_name'] = $_template_dep; + if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { + // template file has changed, regenerate cache + return false; + } + } + + if (isset($_cache_info['config'])) { + $_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true); + foreach (array_keys($_cache_info['config']) as $_config_dep) { + $_params['resource_name'] = $_config_dep; + if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { + // config file has changed, regenerate cache + return false; + } + } + } + } + + $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info); + + $smarty->_cache_info = $_cache_info; + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.rm_auto.php b/libs/internals/core.rm_auto.php new file mode 100644 index 0000000..b251f64 --- /dev/null +++ b/libs/internals/core.rm_auto.php @@ -0,0 +1,71 @@ + $params['auto_base'], + 'level' => 0, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); + $_res = smarty_core_rmdir($_params, $smarty); + } else { + $_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']); + + if(isset($params['auto_source'])) { + if (isset($params['extensions'])) { + $_res = false; + foreach ((array)$params['extensions'] as $_extension) + $_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']); + } else { + $_res = $smarty->_unlink($_tname, $params['exp_time']); + } + } elseif ($smarty->use_sub_dirs) { + $_params = array( + 'dirname' => $_tname, + 'level' => 1, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); + $_res = smarty_core_rmdir($_params, $smarty); + } else { + // remove matching file names + $_handle = opendir($params['auto_base']); + $_res = true; + while (false !== ($_filename = readdir($_handle))) { + if($_filename == '.' || $_filename == '..') { + continue; + } elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) { + $_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']); + } + } + } + } + + return $_res; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.rmdir.php b/libs/internals/core.rmdir.php new file mode 100644 index 0000000..2166c44 --- /dev/null +++ b/libs/internals/core.rmdir.php @@ -0,0 +1,54 @@ + keep root) + * WARNING: no tests, it will try to remove what you tell it! + * + * @param string $dirname + * @param integer $level + * @param integer $exp_time + * @return boolean + */ + +// $dirname, $level = 1, $exp_time = null + +function smarty_core_rmdir($params, &$smarty) +{ + if(!isset($params['level'])) { $params['level'] = 1; } + if(!isset($params['exp_time'])) { $params['exp_time'] = null; } + + if($_handle = @opendir($params['dirname'])) { + + while (false !== ($_entry = readdir($_handle))) { + if ($_entry != '.' && $_entry != '..') { + if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) { + $_params = array( + 'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry, + 'level' => $params['level'] + 1, + 'exp_time' => $params['exp_time'] + ); + smarty_core_rmdir($_params, $smarty); + } + else { + $smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']); + } + } + } + closedir($_handle); + } + + if ($params['level']) { + return @rmdir($params['dirname']); + } + return (bool)$_handle; + +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.run_insert_handler.php b/libs/internals/core.run_insert_handler.php new file mode 100644 index 0000000..71c3845 --- /dev/null +++ b/libs/internals/core.run_insert_handler.php @@ -0,0 +1,71 @@ +debugging) { + $_params = array(); + $_debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + if ($smarty->caching) { + $_arg_string = serialize($params['args']); + $_name = $params['args']['name']; + if (!isset($smarty->_cache_info['insert_tags'][$_name])) { + $smarty->_cache_info['insert_tags'][$_name] = array('insert', + $_name, + $smarty->_plugins['insert'][$_name][1], + $smarty->_plugins['insert'][$_name][2], + !empty($params['args']['script']) ? true : false); + } + return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5; + } else { + if (isset($params['args']['script'])) { + $_params = array('resource_name' => $smarty->_dequote($params['args']['script'])); + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); + if(!smarty_core_get_php_resource($_params, $smarty)) { + return false; + } + + if ($_params['resource_type'] == 'file') { + $smarty->_include($_params['php_resource'], true); + } else { + $smarty->_eval($_params['php_resource']); + } + unset($params['args']['script']); + } + + $_funcname = $smarty->_plugins['insert'][$params['args']['name']][0]; + $_content = $_funcname($params['args'], $smarty); + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'insert', + 'filename' => 'insert_'.$params['args']['name'], + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); + } + + if (!empty($params['args']["assign"])) { + $smarty->assign($params['args']["assign"], $_content); + } else { + return $_content; + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.smarty_include_php.php b/libs/internals/core.smarty_include_php.php new file mode 100644 index 0000000..30c6e76 --- /dev/null +++ b/libs/internals/core.smarty_include_php.php @@ -0,0 +1,50 @@ + $params['smarty_file']); + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); + smarty_core_get_php_resource($_params, $smarty); + $_smarty_resource_type = $_params['resource_type']; + $_smarty_php_resource = $_params['php_resource']; + + if (!empty($params['smarty_assign'])) { + ob_start(); + if ($_smarty_resource_type == 'file') { + $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); + } else { + $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); + } + $smarty->assign($params['smarty_assign'], ob_get_contents()); + ob_end_clean(); + } else { + if ($_smarty_resource_type == 'file') { + $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); + } else { + $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); + } + } +} + + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.write_cache_file.php b/libs/internals/core.write_cache_file.php new file mode 100644 index 0000000..72f785b --- /dev/null +++ b/libs/internals/core.write_cache_file.php @@ -0,0 +1,96 @@ +_cache_info['timestamp'] = time(); + if ($smarty->cache_lifetime > -1){ + // expiration set + $smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime; + } else { + // cache will never expire + $smarty->_cache_info['expires'] = -1; + } + + // collapse nocache.../nocache-tags + if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) { + // remove everything between every pair of outermost noache.../nocache-tags + // and replace it by a single nocache-tag + // this new nocache-tag will be replaced by dynamic contents in + // smarty_core_process_compiled_includes() on a cache-read + + $match_count = count($match[0]); + $results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE); + + $level = 0; + $j = 0; + for ($i=0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) { + if ($results[$i] == $match[0][$j]) { + // nocache tag + if ($match[1][$j]) { // closing tag + $level--; + unset($results[$i]); + } else { // opening tag + if ($level++ > 0) unset($results[$i]); + } + $j++; + } elseif ($level > 0) { + unset($results[$i]); + } + } + $params['results'] = implode('', $results); + } + $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials; + + // prepend the cache header info into cache file + $_cache_info = serialize($smarty->_cache_info); + $params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results']; + + if (!empty($smarty->cache_handler_func)) { + // use cache_handler function + call_user_func_array($smarty->cache_handler_func, + array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); + } else { + // use local cache file + + if(!@is_writable($smarty->cache_dir)) { + // cache_dir not writable, see if it exists + if(!@is_dir($smarty->cache_dir)) { + $smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); + return false; + } + $smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR); + return false; + } + + $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); + $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); + $_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true); + require_once(SMARTY_CORE_DIR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.write_compiled_include.php b/libs/internals/core.write_compiled_include.php new file mode 100644 index 0000000..3a78094 --- /dev/null +++ b/libs/internals/core.write_compiled_include.php @@ -0,0 +1,91 @@ +caching && \!\$this->_cache_including\) \{ echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; \};'; + $_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\) \{ echo \'\{/nocache\:(\\2)#(\\3)\}\'; \};'; + + preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us', + $params['compiled_content'], $_match_source, PREG_SET_ORDER); + + // no nocache-parts found: done + if (count($_match_source)==0) return; + + // convert the matched php-code to functions + $_include_compiled = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; + $_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n"; + + $_compile_path = $params['include_file_path']; + + $smarty->_cache_serials[$_compile_path] = $params['cache_serial']; + $_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>"; + + $_include_compiled .= $params['plugins_code']; + $_include_compiled .= "= 5.0) ? '_smarty' : 'this'; + for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) { + $_match =& $_match_source[$_i]; + $source = $_match[4]; + if ($this_varname == '_smarty') { + /* rename $this to $_smarty in the sourcecode */ + $tokens = token_get_all('\n"; + + $_params = array('filename' => $_compile_path, + 'contents' => $_include_compiled, 'create_dirs' => true); + + require_once(SMARTY_CORE_DIR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; +} + + +?> diff --git a/libs/internals/core.write_compiled_resource.php b/libs/internals/core.write_compiled_resource.php new file mode 100644 index 0000000..b902eff --- /dev/null +++ b/libs/internals/core.write_compiled_resource.php @@ -0,0 +1,35 @@ +compile_dir)) { + // compile_dir not writable, see if it exists + if(!@is_dir($smarty->compile_dir)) { + $smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); + return false; + } + $smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR); + return false; + } + + $_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true); + require_once(SMARTY_CORE_DIR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/internals/core.write_file.php b/libs/internals/core.write_file.php new file mode 100644 index 0000000..09e1698 --- /dev/null +++ b/libs/internals/core.write_file.php @@ -0,0 +1,54 @@ + $_dirname); + require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php'); + smarty_core_create_dir_structure($_params, $smarty); + } + + // write to tmp file, then rename it to avoid + // file locking race condition + $_tmp_file = tempnam($_dirname, 'wrt'); + + if (!($fd = @fopen($_tmp_file, 'wb'))) { + $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt'); + if (!($fd = @fopen($_tmp_file, 'wb'))) { + $smarty->trigger_error("problem writing temporary file '$_tmp_file'"); + return false; + } + } + + fwrite($fd, $params['contents']); + fclose($fd); + + // Delete the file if it allready exists (this is needed on Win, + // because it cannot overwrite files with rename() + if (file_exists($params['filename'])) { + @unlink($params['filename']); + } + @rename($_tmp_file, $params['filename']); + @chmod($params['filename'], $smarty->_file_perms); + + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/block.textformat.php b/libs/plugins/block.textformat.php new file mode 100644 index 0000000..8cd010a --- /dev/null +++ b/libs/plugins/block.textformat.php @@ -0,0 +1,103 @@ + + * Name: textformat
+ * Purpose: format text a certain way with preset styles + * or custom wrap/indent settings
+ * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * @param array + *
+ * Params:   style: string (email)
+ *           indent: integer (0)
+ *           wrap: integer (80)
+ *           wrap_char string ("\n")
+ *           indent_char: string (" ")
+ *           wrap_boundary: boolean (true)
+ * 
+ * @author Monte Ohrt + * @param string contents of the block + * @param Smarty clever simulation of a method + * @return string string $content re-formatted + */ +function smarty_block_textformat($params, $content, &$smarty) +{ + if (is_null($content)) { + return; + } + + $style = null; + $indent = 0; + $indent_first = 0; + $indent_char = ' '; + $wrap = 80; + $wrap_char = "\n"; + $wrap_cut = false; + $assign = null; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'style': + case 'indent_char': + case 'wrap_char': + case 'assign': + $$_key = (string)$_val; + break; + + case 'indent': + case 'indent_first': + case 'wrap': + $$_key = (int)$_val; + break; + + case 'wrap_cut': + $$_key = (bool)$_val; + break; + + default: + $smarty->trigger_error("textformat: unknown attribute '$_key'"); + } + } + + if ($style == 'email') { + $wrap = 72; + } + + // split into paragraphs + $_paragraphs = preg_split('![\r\n][\r\n]!',$content); + $_output = ''; + + for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { + if ($_paragraphs[$_x] == '') { + continue; + } + // convert mult. spaces & special chars to single space + $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]); + // indent first line + if($indent_first > 0) { + $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; + } + // wordwrap sentences + $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); + // indent lines + if($indent > 0) { + $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); + } + } + $_output = implode($wrap_char . $wrap_char, $_paragraphs); + + return $assign ? $smarty->assign($assign, $_output) : $_output; + +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/compiler.assign.php b/libs/plugins/compiler.assign.php new file mode 100644 index 0000000..be17298 --- /dev/null +++ b/libs/plugins/compiler.assign.php @@ -0,0 +1,40 @@ + + * Name: assign
+ * Purpose: assign a value to a template variable + * @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign} + * (Smarty online manual) + * @author Monte Ohrt (initial author) + * @auther messju mohr (conversion to compiler function) + * @param string containing var-attribute and value-attribute + * @param Smarty_Compiler + */ +function smarty_compiler_assign($tag_attrs, &$compiler) +{ + $_params = $compiler->_parse_attrs($tag_attrs); + + if (!isset($_params['var'])) { + $compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING); + return; + } + + if (!isset($_params['value'])) { + $compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING); + return; + } + + return "\$this->assign({$_params['var']}, {$_params['value']});"; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.assign_debug_info.php b/libs/plugins/function.assign_debug_info.php new file mode 100644 index 0000000..6540498 --- /dev/null +++ b/libs/plugins/function.assign_debug_info.php @@ -0,0 +1,40 @@ + + * Name: assign_debug_info
+ * Purpose: assign debug info to the template
+ * @author Monte Ohrt + * @param array unused in this plugin, this plugin uses {@link Smarty::$_config}, + * {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info} + * @param Smarty + */ +function smarty_function_assign_debug_info($params, &$smarty) +{ + $assigned_vars = $smarty->_tpl_vars; + ksort($assigned_vars); + if (@is_array($smarty->_config[0])) { + $config_vars = $smarty->_config[0]; + ksort($config_vars); + $smarty->assign("_debug_config_keys", array_keys($config_vars)); + $smarty->assign("_debug_config_vals", array_values($config_vars)); + } + + $included_templates = $smarty->_smarty_debug_info; + + $smarty->assign("_debug_keys", array_keys($assigned_vars)); + $smarty->assign("_debug_vals", array_values($assigned_vars)); + + $smarty->assign("_debug_tpls", $included_templates); +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.config_load.php b/libs/plugins/function.config_load.php new file mode 100644 index 0000000..db89f63 --- /dev/null +++ b/libs/plugins/function.config_load.php @@ -0,0 +1,142 @@ + + * Name: config_load
+ * Purpose: load config file vars + * @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} + * (Smarty online manual) + * @author Monte Ohrt + * @author messju mohr (added use of resources) + * @param array Format: + *
+ * array('file' => required config file name,
+ *       'section' => optional config file section to load
+ *       'scope' => local/parent/global
+ *       'global' => overrides scope, setting to parent if true)
+ * 
+ * @param Smarty + */ +function smarty_function_config_load($params, &$smarty) +{ + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $_debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + $_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null; + $_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null; + $_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global'; + $_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false; + + if (!isset($_file) || strlen($_file) == 0) { + $smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__); + } + + if (isset($_scope)) { + if ($_scope != 'local' && + $_scope != 'parent' && + $_scope != 'global') { + $smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__); + } + } else { + if ($_global) { + $_scope = 'parent'; + } else { + $_scope = 'local'; + } + } + + $_params = array('resource_name' => $_file, + 'resource_base_path' => $smarty->config_dir, + 'get_source' => false); + $smarty->_parse_resource_name($_params); + $_file_path = $_params['resource_type'] . ':' . $_params['resource_name']; + if (isset($_section)) + $_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section); + else + $_compile_file = $smarty->_get_compile_path($_file_path); + + if($smarty->force_compile || !file_exists($_compile_file)) { + $_compile = true; + } elseif ($smarty->compile_check) { + $_params = array('resource_name' => $_file, + 'resource_base_path' => $smarty->config_dir, + 'get_source' => false); + $_compile = $smarty->_fetch_resource_info($_params) && + $_params['resource_timestamp'] > filemtime($_compile_file); + } else { + $_compile = false; + } + + if($_compile) { + // compile config file + if(!is_object($smarty->_conf_obj)) { + require_once SMARTY_DIR . $smarty->config_class . '.class.php'; + $smarty->_conf_obj = new $smarty->config_class(); + $smarty->_conf_obj->overwrite = $smarty->config_overwrite; + $smarty->_conf_obj->booleanize = $smarty->config_booleanize; + $smarty->_conf_obj->read_hidden = $smarty->config_read_hidden; + $smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines; + } + + $_params = array('resource_name' => $_file, + 'resource_base_path' => $smarty->config_dir, + $_params['get_source'] = true); + if (!$smarty->_fetch_resource_info($_params)) { + return; + } + $smarty->_conf_obj->set_file_contents($_file, $_params['source_content']); + $_config_vars = array_merge($smarty->_conf_obj->get($_file), + $smarty->_conf_obj->get($_file, $_section)); + if(function_exists('var_export')) { + $_output = ''; + } else { + $_output = ''\\\'', '\\'=>'\\\\')) . '\'); ?>'; + } + $_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp'])); + require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); + smarty_core_write_compiled_resource($_params, $smarty); + } else { + include($_compile_file); + } + + if ($smarty->caching) { + $smarty->_cache_info['config'][$_file] = true; + } + + $smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars); + $smarty->_config[0]['files'][$_file] = true; + + if ($_scope == 'parent') { + $smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars); + $smarty->_config[1]['files'][$_file] = true; + } else if ($_scope == 'global') { + for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) { + $smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars); + $smarty->_config[$i]['files'][$_file] = true; + } + } + + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'config', + 'filename' => $_file.' ['.$_section.'] '.$_scope, + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); + } + +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.counter.php b/libs/plugins/function.counter.php new file mode 100644 index 0000000..1f26db5 --- /dev/null +++ b/libs/plugins/function.counter.php @@ -0,0 +1,80 @@ + + * Name: counter
+ * Purpose: print out a counter value + * @author Monte Ohrt + * @link http://smarty.php.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * @param array parameters + * @param Smarty + * @return string|null + */ +function smarty_function_counter($params, &$smarty) +{ + static $counters = array(); + + $name = (isset($params['name'])) ? $params['name'] : 'default'; + if (!isset($counters[$name])) { + $counters[$name] = array( + 'start'=>1, + 'skip'=>1, + 'direction'=>'up', + 'count'=>1 + ); + } + $counter =& $counters[$name]; + + if (isset($params['start'])) { + $counter['start'] = $counter['count'] = (int)$params['start']; + } + + if (!empty($params['assign'])) { + $counter['assign'] = $params['assign']; + } + + if (isset($counter['assign'])) { + $smarty->assign($counter['assign'], $counter['count']); + } + + if (isset($params['print'])) { + $print = (bool)$params['print']; + } else { + $print = empty($counter['assign']); + } + + if ($print) { + $retval = $counter['count']; + } else { + $retval = null; + } + + if (isset($params['skip'])) { + $counter['skip'] = $params['skip']; + } + + if (isset($params['direction'])) { + $counter['direction'] = $params['direction']; + } + + if ($counter['direction'] == "down") + $counter['count'] -= $counter['skip']; + else + $counter['count'] += $counter['skip']; + + return $retval; + +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.cycle.php b/libs/plugins/function.cycle.php new file mode 100644 index 0000000..fe78bb8 --- /dev/null +++ b/libs/plugins/function.cycle.php @@ -0,0 +1,102 @@ + + * Name: cycle
+ * Date: May 3, 2002
+ * Purpose: cycle through given values
+ * Input: + * - name = name of cycle (optional) + * - values = comma separated list of values to cycle, + * or an array of values to cycle + * (this can be left out for subsequent calls) + * - reset = boolean - resets given var to true + * - print = boolean - print var or not. default is true + * - advance = boolean - whether or not to advance the cycle + * - delimiter = the value delimiter, default is "," + * - assign = boolean, assigns to template var instead of + * printed. + * + * Examples:
+ *
+ * {cycle values="#eeeeee,#d0d0d0d"}
+ * {cycle name=row values="one,two,three" reset=true}
+ * {cycle name=row}
+ * 
+ * @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} + * (Smarty online manual) + * @author Monte Ohrt + * @author credit to Mark Priatel + * @author credit to Gerard + * @author credit to Jason Sweat + * @version 1.3 + * @param array + * @param Smarty + * @return string|null + */ +function smarty_function_cycle($params, &$smarty) +{ + static $cycle_vars; + + $name = (empty($params['name'])) ? 'default' : $params['name']; + $print = (isset($params['print'])) ? (bool)$params['print'] : true; + $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true; + $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false; + + if (!in_array('values', array_keys($params))) { + if(!isset($cycle_vars[$name]['values'])) { + $smarty->trigger_error("cycle: missing 'values' parameter"); + return; + } + } else { + if(isset($cycle_vars[$name]['values']) + && $cycle_vars[$name]['values'] != $params['values'] ) { + $cycle_vars[$name]['index'] = 0; + } + $cycle_vars[$name]['values'] = $params['values']; + } + + $cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ','; + + if(is_array($cycle_vars[$name]['values'])) { + $cycle_array = $cycle_vars[$name]['values']; + } else { + $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); + } + + if(!isset($cycle_vars[$name]['index']) || $reset ) { + $cycle_vars[$name]['index'] = 0; + } + + if (isset($params['assign'])) { + $print = false; + $smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); + } + + if($print) { + $retval = $cycle_array[$cycle_vars[$name]['index']]; + } else { + $retval = null; + } + + if($advance) { + if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { + $cycle_vars[$name]['index'] = 0; + } else { + $cycle_vars[$name]['index']++; + } + } + + return $retval; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.debug.php b/libs/plugins/function.debug.php new file mode 100644 index 0000000..4345230 --- /dev/null +++ b/libs/plugins/function.debug.php @@ -0,0 +1,35 @@ + + * Name: debug
+ * Date: July 1, 2002
+ * Purpose: popup debug window + * @link http://smarty.php.net/manual/en/language.function.debug.php {debug} + * (Smarty online manual) + * @author Monte Ohrt + * @version 1.0 + * @param array + * @param Smarty + * @return string output from {@link Smarty::_generate_debug_output()} + */ +function smarty_function_debug($params, &$smarty) +{ + if (isset($params['output'])) { + $smarty->assign('_smarty_debug_output', $params['output']); + } + require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); + return smarty_core_display_debug_console(null, $smarty); +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.eval.php b/libs/plugins/function.eval.php new file mode 100644 index 0000000..ff0472d --- /dev/null +++ b/libs/plugins/function.eval.php @@ -0,0 +1,49 @@ + + * Name: eval
+ * Purpose: evaluate a template variable as a template
+ * @link http://smarty.php.net/manual/en/language.function.eval.php {eval} + * (Smarty online manual) + * @author Monte Ohrt + * @param array + * @param Smarty + */ +function smarty_function_eval($params, &$smarty) +{ + + if (!isset($params['var'])) { + $smarty->trigger_error("eval: missing 'var' parameter"); + return; + } + + if($params['var'] == '') { + return; + } + + $smarty->_compile_source('evaluated template', $params['var'], $_var_compiled); + + ob_start(); + $smarty->_eval('?>' . $_var_compiled); + $_contents = ob_get_contents(); + ob_end_clean(); + + if (!empty($params['assign'])) { + $smarty->assign($params['assign'], $_contents); + } else { + return $_contents; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.fetch.php b/libs/plugins/function.fetch.php new file mode 100644 index 0000000..81b1bfc --- /dev/null +++ b/libs/plugins/function.fetch.php @@ -0,0 +1,221 @@ + + * Name: fetch
+ * Purpose: fetch file, web or ftp data and display results + * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} + * (Smarty online manual) + * @author Monte Ohrt + * @param array + * @param Smarty + * @return string|null if the assign parameter is passed, Smarty assigns the + * result to a template variable + */ +function smarty_function_fetch($params, &$smarty) +{ + if (empty($params['file'])) { + $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); + return; + } + + $content = ''; + if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { + $_params = array('resource_type' => 'file', 'resource_name' => $params['file']); + require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); + if(!smarty_core_is_secure($_params, $smarty)) { + $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); + return; + } + + // fetch the file + if($fp = @fopen($params['file'],'r')) { + while(!feof($fp)) { + $content .= fgets ($fp,4096); + } + fclose($fp); + } else { + $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); + return; + } + } else { + // not a local file + if(preg_match('!^http://!i',$params['file'])) { + // http fetch + if($uri_parts = parse_url($params['file'])) { + // set defaults + $host = $server_name = $uri_parts['host']; + $timeout = 30; + $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + $agent = "Smarty Template Engine ".$smarty->_version; + $referer = ""; + $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; + $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; + $_is_proxy = false; + if(empty($uri_parts['port'])) { + $port = 80; + } else { + $port = $uri_parts['port']; + } + if(!empty($uri_parts['user'])) { + $user = $uri_parts['user']; + } + if(!empty($uri_parts['pass'])) { + $pass = $uri_parts['pass']; + } + // loop through parameters, setup headers + foreach($params as $param_key => $param_value) { + switch($param_key) { + case "file": + case "assign": + case "assign_headers": + break; + case "user": + if(!empty($param_value)) { + $user = $param_value; + } + break; + case "pass": + if(!empty($param_value)) { + $pass = $param_value; + } + break; + case "accept": + if(!empty($param_value)) { + $accept = $param_value; + } + break; + case "header": + if(!empty($param_value)) { + if(!preg_match('![\w\d-]+: .+!',$param_value)) { + $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'"); + return; + } else { + $extra_headers[] = $param_value; + } + } + break; + case "proxy_host": + if(!empty($param_value)) { + $proxy_host = $param_value; + } + break; + case "proxy_port": + if(!preg_match('!\D!', $param_value)) { + $proxy_port = (int) $param_value; + } else { + $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); + return; + } + break; + case "agent": + if(!empty($param_value)) { + $agent = $param_value; + } + break; + case "referer": + if(!empty($param_value)) { + $referer = $param_value; + } + break; + case "timeout": + if(!preg_match('!\D!', $param_value)) { + $timeout = (int) $param_value; + } else { + $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); + return; + } + break; + default: + $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'"); + return; + } + } + if(!empty($proxy_host) && !empty($proxy_port)) { + $_is_proxy = true; + $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); + } else { + $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); + } + + if(!$fp) { + $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); + return; + } else { + if($_is_proxy) { + fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + } else { + fputs($fp, "GET $uri HTTP/1.0\r\n"); + } + if(!empty($host)) { + fputs($fp, "Host: $host\r\n"); + } + if(!empty($accept)) { + fputs($fp, "Accept: $accept\r\n"); + } + if(!empty($agent)) { + fputs($fp, "User-Agent: $agent\r\n"); + } + if(!empty($referer)) { + fputs($fp, "Referer: $referer\r\n"); + } + if(isset($extra_headers) && is_array($extra_headers)) { + foreach($extra_headers as $curr_header) { + fputs($fp, $curr_header."\r\n"); + } + } + if(!empty($user) && !empty($pass)) { + fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); + } + + fputs($fp, "\r\n"); + while(!feof($fp)) { + $content .= fgets($fp,4096); + } + fclose($fp); + $csplit = split("\r\n\r\n",$content,2); + + $content = $csplit[1]; + + if(!empty($params['assign_headers'])) { + $smarty->assign($params['assign_headers'],split("\r\n",$csplit[0])); + } + } + } else { + $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); + return; + } + } else { + // ftp fetch + if($fp = @fopen($params['file'],'r')) { + while(!feof($fp)) { + $content .= fgets ($fp,4096); + } + fclose($fp); + } else { + $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\''); + return; + } + } + + } + + + if (!empty($params['assign'])) { + $smarty->assign($params['assign'],$content); + } else { + return $content; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.html_checkboxes.php b/libs/plugins/function.html_checkboxes.php new file mode 100644 index 0000000..ed8ad7f --- /dev/null +++ b/libs/plugins/function.html_checkboxes.php @@ -0,0 +1,143 @@ + + * Type: function
+ * Name: html_checkboxes
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of checkbox input types
+ * Input:
+ * - name (optional) - string default "checkbox" + * - values (required) - array + * - options (optional) - associative array + * - checked (optional) - array default not set + * - separator (optional) - ie
or   + * - output (optional) - the output next to each checkbox + * - assign (optional) - assign the output as an array to this variable + * Examples: + *
+ * {html_checkboxes values=$ids output=$names}
+ * {html_checkboxes values=$ids name='box' separator='
' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} + *
+ * @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * (Smarty online manual) + * @author Christopher Kvarme + * @author credits to Monte Ohrt + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_checkboxes($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $name = 'checkbox'; + $values = null; + $options = null; + $selected = null; + $separator = ''; + $labels = true; + $output = null; + + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + case 'separator': + $$_key = $_val; + break; + + case 'labels': + $$_key = (bool)$_val; + break; + + case 'options': + $$_key = (array)$_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array)$_val); + break; + + case 'checked': + case 'selected': + $selected = array_map('strval', array_values((array)$_val)); + break; + + case 'checkboxes': + $smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array)$_val; + break; + + case 'assign': + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + settype($selected, 'array'); + $_html_result = array(); + + if (isset($options)) { + + foreach ($options as $_key=>$_val) + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + + + } else { + foreach ($values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + } + + } + + if(!empty($params['assign'])) { + $smarty->assign($params['assign'], $_html_result); + } else { + return implode("\n",$_html_result); + } + +} + +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) { + $_output = ''; + if ($labels) $_output .= ''; + $_output .= $separator; + + return $_output; +} + +?> diff --git a/libs/plugins/function.html_image.php b/libs/plugins/function.html_image.php new file mode 100644 index 0000000..9abae72 --- /dev/null +++ b/libs/plugins/function.html_image.php @@ -0,0 +1,142 @@ + + * Name: html_image
+ * Date: Feb 24, 2003
+ * Purpose: format HTML tags for the image
+ * Input:
+ * - file = file (and path) of image (required) + * - height = image height (optional, default actual height) + * - width = image width (optional, default actual width) + * - basedir = base directory for absolute paths, default + * is environment variable DOCUMENT_ROOT + * - path_prefix = prefix for path output (optional, default empty) + * + * Examples: {html_image file="/images/masthead.gif"} + * Output: + * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} + * (Smarty online manual) + * @author Monte Ohrt + * @author credits to Duda - wrote first image function + * in repository, helped with lots of functionality + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_image($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $alt = ''; + $file = ''; + $height = ''; + $width = ''; + $extra = ''; + $prefix = ''; + $suffix = ''; + $path_prefix = ''; + $server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; + $basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; + foreach($params as $_key => $_val) { + switch($_key) { + case 'file': + case 'height': + case 'width': + case 'dpi': + case 'path_prefix': + case 'basedir': + $$_key = $_val; + break; + + case 'alt': + if(!is_array($_val)) { + $$_key = smarty_function_escape_special_chars($_val); + } else { + $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + + case 'link': + case 'href': + $prefix = ''; + $suffix = ''; + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (empty($file)) { + $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); + return; + } + + if (substr($file,0,1) == '/') { + $_image_path = $basedir . $file; + } else { + $_image_path = $file; + } + + if(!isset($params['width']) || !isset($params['height'])) { + if(!$_image_data = @getimagesize($_image_path)) { + if(!file_exists($_image_path)) { + $smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); + return; + } else if(!is_readable($_image_path)) { + $smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); + return; + } else { + $smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); + return; + } + } + if ($smarty->security && + ($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) && + (require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) && + (!smarty_core_is_secure($_params, $smarty)) ) { + $smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); + } + + if(!isset($params['width'])) { + $width = $_image_data[0]; + } + if(!isset($params['height'])) { + $height = $_image_data[1]; + } + + } + + if(isset($params['dpi'])) { + if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) { + $dpi_default = 72; + } else { + $dpi_default = 96; + } + $_resize = $dpi_default/$params['dpi']; + $width = round($width * $_resize); + $height = round($height * $_resize); + } + + return $prefix . ''.$alt.'' . $suffix; +} + +/* vim: set expandtab: */ + +?> diff --git a/libs/plugins/function.html_options.php b/libs/plugins/function.html_options.php new file mode 100644 index 0000000..cebadde --- /dev/null +++ b/libs/plugins/function.html_options.php @@ -0,0 +1,122 @@ + + * Name: html_options
+ * Input:
+ * - name (optional) - string default "select" + * - values (required if no options supplied) - array + * - options (required if no values supplied) - associative array + * - selected (optional) - string default not set + * - output (required if not options supplied) - array + * Purpose: Prints the list of