OSDN Git Service

Merge Yamamoto's personal 3.51 release. Still remain some codes such as NP_Security_E...
authorsakamocchi <sakamocchi@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Fri, 24 Dec 2010 13:53:20 +0000 (13:53 +0000)
committersakamocchi <sakamocchi@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Fri, 24 Dec 2010 13:53:20 +0000 (13:53 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/trunk@1067 1ca29b6e-896d-4ea0-84a5-967f57386b96

29 files changed:
utf8/install.php [deleted file]
utf8/install/index.php [new file with mode: 0755]
utf8/install/install.sql [moved from utf8/install.sql with 100% similarity]
utf8/install/install_lang_japanese.php [moved from utf8/install_lang_japanese.php with 85% similarity]
utf8/nucleus/bookmarklet.php
utf8/nucleus/documentation/history.html
utf8/nucleus/forms/commentform-loggedin.template
utf8/nucleus/forms/commentform-notloggedin.template
utf8/nucleus/index.php
utf8/nucleus/language/japanese-euc.php
utf8/nucleus/libs/ACTIONS.php
utf8/nucleus/libs/ADMIN.php
utf8/nucleus/libs/ITEMACTIONS.php
utf8/nucleus/libs/globalfunctions.php
utf8/nucleus/libs/include/bookmarklet-add.template
utf8/nucleus/libs/include/bookmarklet-edit.template
utf8/nucleus/libs/showlist.php
utf8/nucleus/libs/sql/pdo.php
utf8/nucleus/plugins/NP_Ping.php
utf8/nucleus/plugins/NP_SkinFiles.php
utf8/nucleus/plugins/skinfiles/help.html
utf8/nucleus/plugins/skinfiles/index.php
utf8/nucleus/styles/admin.css
utf8/nucleus/styles/jquery-ui/ui.all.css
utf8/nucleus/styles/jquery-ui/ui.theme.css
utf8/nucleus/xmlrpc/api_nucleus.inc.php
utf8/skins/atom/skinbackup.xml
utf8/skins/default/inc/head.inc
utf8/skins/rss2.0/skinbackup.xml

diff --git a/utf8/install.php b/utf8/install.php
deleted file mode 100755 (executable)
index d50270a..0000000
+++ /dev/null
@@ -1,1237 +0,0 @@
-<?php\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2009 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- * This script will install the Nucleus tables in your SQL-database, and initialize the data in\r
- * those tables.\r
- *\r
- * Below is a friendly way of letting users on non-php systems know that Nucleus won't run there.\r
- * ?><div style="font-size: xx-large;">If you see this text in your browser when you open <i>install.php</i>, your web server is not able to run PHP-scripts, and therefor Nucleus will not be able to run there. </div><div style="display: none"><?php\r
- */\r
-\r
-/**\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
- * @version $Id$\r
- * $NucleusJP: install.php,v 1.7 2007/02/04 06:28:44 kimitake Exp $\r
- */\r
-\r
-/*\r
-    This part of the install.php code allows for customization of the install process.\r
-    When distributing plugins or skins together with a Nucleus installation, the\r
-    configuration below will instruct to install them\r
-\r
-    -- Start Of Configurable Part --\r
-*/\r
-\r
-include('./install_lang_japanese.php');\r
-\r
-// array with names of plugins to install. Plugin files must be present in the nucleus/plugin/\r
-// directory.\r
-//\r
-// example:\r
-//     array('NP_TrackBack', 'NP_MemberGoodies')\r
-$aConfPlugsToInstall = array(\r
-    'NP_SkinFiles',\r
-    'NP_SecurityEnforcer',\r
-    'NP_Text'\r
-);\r
-\r
-\r
-// array with skins to install. skins must be present under the skins/ directory with\r
-// a subdirectory having the same name that contains a skinbackup.xml file\r
-//\r
-// example:\r
-//     array('base','rsd')\r
-$aConfSkinsToImport = array(\r
-    'atom',\r
-    'rss2.0',\r
-    'rsd',\r
-    'default',\r
-);\r
-\r
-/*\r
-    -- End Of Configurable Part --\r
-*/\r
-\r
-// don't give warnings for uninitialized vars\r
-error_reporting(E_ERROR | E_WARNING | E_PARSE);\r
-\r
-// make sure there's no unnecessary escaping:\r
-set_magic_quotes_runtime(0);\r
-\r
-// if there are some plugins or skins to import, do not include vars\r
-// in globalfunctions.php again... so set a flag\r
-if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) {\r
-    global $CONF;\r
-    $CONF['installscript'] = 1;\r
-}\r
-\r
-if (phpversion() >= '4.1.0') {\r
-    include_once('nucleus/libs/vars4.1.0.php');\r
-} else {\r
-    include_once('nucleus/libs/vars4.0.6.php');\r
-}\r
-\r
-// include core classes that are needed for login & plugin handling\r
-// added for 3.5 sql_* wrapper\r
-global $MYSQL_HANDLER;\r
-//set the handler if different from mysql (or mysqli)\r
-//$MYSQL_HANDLER = array('pdo','mysql');\r
-if (!isset($MYSQL_HANDLER))\r
-    $MYSQL_HANDLER = array('mysql','');\r
-include_once('nucleus/libs/sql/'.$MYSQL_HANDLER[0].'.php');\r
-// end new for 3.5 sql_* wrapper\r
-include_once('nucleus/libs/mysql.php');\r
-\r
-// check if mysql support is installed\r
-// this check may not make sense, as is, in a version past 3.5x\r
-    if (!function_exists('mysql_query') ) {\r
-        _doError(_ERROR1);\r
-    }\r
-\r
-    if (postVar('action') == 'go') {\r
-        doInstall();\r
-    } else {\r
-        showInstallForm();\r
-    }\r
-\r
-exit;\r
-\r
-function showInstallForm() {\r
-    // 0. pre check if all necessary files exist\r
-    doCheckFiles();\r
-\r
-    ?>\r
-    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-    <html xmlns="http://www.w3.org/1999/xhtml">\r
-    <head>\r
-        <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
-        <title><?php echo _TITLE; ?></title>\r
-        <style type="text/css"><!--\r
-            @import url('nucleus/documentation/styles/manual.css');\r
-        --></style>\r
-        <script type="text/javascript"><!--\r
-            var submitcount = 0;\r
-\r
-            // function to make sure the submit button only gets pressed once\r
-            function checkSubmit() {\r
-                if (submitcount == 0) {\r
-                    submitcount++;\r
-                    return true;\r
-                } else {\r
-                    return false;\r
-                }\r
-            }\r
-        --></script>\r
-    </head>\r
-    <body>\r
-        <div style="text-align:center"><img src="./nucleus/styles/logo.gif" /></div> <!-- Nucleus logo -->\r
-        <form method="post" action="install.php">\r
-\r
-        <h1><?php echo _HEADER1; ?></h1>\r
-\r
-        <?php echo _TEXT1; ?>\r
-\r
-        <h1><?php echo _HEADER1_2 ?></h1>\r
-\r
-        <?php echo _TEXT1_2; ?>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT1_2_TAB_HEAD; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><?php echo _TEXT1_2_TAB_FIELD1; ?></td>\r
-                    <td>\r
-                        <select name="charset" tabindex="10000">\r
-                            <option value="utf8" selected="selected">UTF-8</option>\r
-                            <option value="ujis" >EUC-JP</option>\r
-                        </select>\r
-                    </td>\r
-                </tr>\r
-            </table>\r
-        </fieldset>\r
-\r
-        <h1><?php echo _HEADER2; ?></h1>\r
-\r
-        <?php echo _TEXT2; ?>\r
-\r
-        <ul>\r
-            <li>PHP:\r
-\r
-<?php\r
-    echo phpversion();\r
-    $minVersion = '4.0.6';\r
-\r
-    if (phpversion() < $minVersion) {\r
-        echo ' <span class="warning" style="display:block">' . sprintf(_TEXT2_WARN, $minVersion) . '</span>';\r
-    } elseif (phpversion() < '5') {\r
-        echo ' <span class="warning" style="display:block">' . _TEXT2_WARN3 . '</span>';\r
-    }\r
-?>\r
-\r
-            </li>\r
-            <li>MySQL:\r
-\r
-<?php\r
-    // note: this piece of code is taken from phpMyAdmin\r
-    $conn   = sql_connect_args('localhost','','');\r
-    $result = @sql_query('SELECT VERSION() AS version', $conn);\r
-\r
-    if ($result != FALSE && @sql_num_rows($result) > 0) {\r
-        $row   = sql_fetch_array($result);\r
-        $match = explode('.', $row['version']);\r
-    } else {\r
-        $result = @sql_query('SHOW VARIABLES LIKE \'version\'', $conn);\r
-\r
-        if ($result != FALSE && @sql_num_rows($result) > 0) {\r
-            $row   = sql_fetch_row($result);\r
-            $match = explode('.', $row[1]);\r
-        } else {\r
-            $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0';\r
-            preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);\r
-            $match = explode('.', $version[0]);\r
-\r
-            if ($match[0] == '') {\r
-                $match[0] = '0';\r
-                $match[1] = '0';\r
-                $match[2] = '0';\r
-            }\r
-        }\r
-    }\r
-\r
-    sql_disconnect($conn);\r
-    $mysqlVersion = implode($match, '.');\r
-    $minVersion   = '3.23';\r
-\r
-    if ($mysqlVersion == '0.0.0') {\r
-        echo _NOTIFICATION1;\r
-    }\r
-    else {\r
-        echo $mysqlVersion;\r
-    }\r
-\r
-    if ($mysqlVersion < $minVersion) {\r
-        echo ' <span class="warning" style="display:block">' . sprintf(_TEXT2_WARN2, $minVersion) . '</span>';\r
-    }\r
-?>\r
-\r
-            </li>\r
-        </ul>\r
-\r
-<?php\r
-    // tell people how they can have their config file filled out automatically\r
-    if (@file_exists('config.php') && @!is_writable('config.php')) {\r
-?>\r
-\r
-        <h1><?php echo _HEADER3; ?></h1>\r
-\r
-        <?php echo _TEXT3;\r
-\r
-} ?>\r
-\r
-        <h1><?php echo _HEADER4; ?></h1>\r
-\r
-        <?php echo _TEXT4; ?>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT4_TAB_HEAD; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><?php echo _TEXT4_TAB_FIELD1; ?></td>\r
-                    <td><input name="mySQL_host" value="<?php echo htmlspecialchars(@ini_get('mysql.default_host') )?>" tabindex="10010" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT4_TAB_FIELD2; ?></td>\r
-                    <td><input name="mySQL_user" tabindex="10020" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT4_TAB_FIELD3; ?></td>\r
-                    <td><input name="mySQL_password" type="password" tabindex="10030" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT4_TAB_FIELD4; ?></td>\r
-                    <td><input name="mySQL_database" tabindex="10040" /> (<input name="mySQL_create" value="1" type="checkbox" id="mySQL_create" tabindex="10050" /><label for="mySQL_create"><?php echo _TEXT4_TAB_FIELD4_ADD; ?></label>)</td>\r
-                </tr>\r
-            </table>\r
-        </fieldset>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT4_TAB2_HEAD; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><input name="mySQL_usePrefix" value="1" type="checkbox" id="mySQL_usePrefix" tabindex="10060" /><label for="mySQL_usePrefix"><?php echo _TEXT4_TAB2_FIELD; ?></label></td>\r
-                    <td><input name="mySQL_tablePrefix" value="" tabindex="10070" /></td>\r
-                </tr>\r
-            </table>\r
-\r
-            <?php echo _TEXT4_TAB2_ADD; ?>\r
-\r
-        </fieldset>\r
-\r
-    <h1><?php echo _HEADER5; ?></h1>\r
-\r
-    <?php echo _TEXT5; ?>\r
-\r
-<?php\r
-\r
-    // no need to this all! dirname(__FILE__) is all we need -- moraes\r
-    /*\r
-    // discover full path\r
-    $fullPath = serverVar('PATH_TRANSLATED');\r
-\r
-    if ($fullPath == '') {\r
-        $fullPath = serverVar('SCRIPT_FILENAME');\r
-    }\r
-\r
-    $basePath = str_replace('install.php', '', $fullPath);\r
-    $basePath = replaceDoubleBackslash($basePath);\r
-    $basePath = replaceDoubleBackslash($basePath);\r
-\r
-    // add slash at end if necessary\r
-    if (!endsWithSlash($basePath) ) {\r
-        $basePath .= '/';\r
-    }\r
-    */\r
-\r
-    $basePath = dirname(__FILE__) . '/';\r
-?>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT5_TAB_HEAD; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD1; ?></td>\r
-                    <td><input name="IndexURL" size="60" value="<?php\r
-                        $url = 'http://' . serverVar('HTTP_HOST') . serverVar('PHP_SELF');\r
-                        $url = str_replace('install.php', '', $url);\r
-                        $url = replaceDoubleBackslash($url);\r
-\r
-                        // add slash at end if necessary\r
-                        if (!endsWithSlash($url) ) {\r
-                            $url .= '/';\r
-                        }\r
-\r
-                        echo $url; ?>" tabindex="10080" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD2; ?></td>\r
-                    <td><input name="AdminURL" size="60" value="<?php\r
-                        if ($url) {\r
-                            echo $url . 'nucleus/';\r
-                        } ?>" tabindex="10090" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD3; ?></td>\r
-                    <td><input name="AdminPath" size="60" value="<?php\r
-                        if($basePath) {\r
-                            echo $basePath . 'nucleus/';\r
-                        } ?>" tabindex="10100" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD4; ?></td>\r
-                    <td><input name="MediaURL" size="60" value="<?php\r
-                        if ($url) {\r
-                            echo $url . 'media/';\r
-                        } ?>" tabindex="10110" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD5; ?></td>\r
-                    <td><input name="MediaPath" size="60" value="<?php\r
-                        if ($basePath) {\r
-                            echo $basePath . 'media/';\r
-                        } ?>" tabindex="10120" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD6; ?></td>\r
-                    <td><input name="SkinsURL" size="60" value="<?php\r
-                        if ($url) {\r
-                            echo $url . 'skins/';\r
-                        } ?>" tabindex="10130" />\r
-                        <br />(<?php echo _TEXT5_TAB_FIELD7_2; ?>)\r
-                    </td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD7; ?></td>\r
-                    <td><input name="SkinsPath" size="60" value="<?php\r
-                        if ($basePath) {\r
-                            echo $basePath . 'skins/';\r
-                        } ?>" tabindex="10140" />\r
-                        <br />(<?php echo _TEXT5_TAB_FIELD7_2; ?>)\r
-                    </td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD8; ?></td>\r
-                    <td><input name="PluginURL" size="60" value="<?php\r
-                        if ($url) {\r
-                            echo $url . 'nucleus/plugins/';\r
-                        } ?>" tabindex="10150" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT5_TAB_FIELD9; ?></td>\r
-                    <td><input name="ActionURL" size="60" value="<?php\r
-                        if ($url) {\r
-                            echo $url . 'action.php';\r
-                        } ?>" tabindex="10160" />\r
-                        <br />(<?php echo _TEXT5_TAB_FIELD9_2;?>)\r
-                    </td>\r
-                </tr>\r
-            </table>\r
-        </fieldset>\r
-\r
-        <?php echo _TEXT5_2; ?>\r
-\r
-        <h1><? echo _HEADER6; ?></h1>\r
-\r
-        <?php echo _TEXT6; ?>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT6_TAB_HEAD; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><?php echo _TEXT6_TAB_FIELD1; ?></td>\r
-                    <td><input name="User_name" value="" tabindex="10170" /> <small>(<?php echo _TEXT6_TAB_FIELD1_2; ?>)</small></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT6_TAB_FIELD2; ?></td>\r
-                    <td><input name="User_realname" value="" tabindex="10180" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT6_TAB_FIELD3; ?></td>\r
-                    <td><input name="User_password" type="password" value="" tabindex="10190" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT6_TAB_FIELD4; ?></td>\r
-                    <td><input name="User_password2" type="password" value="" tabindex="10200" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT6_TAB_FIELD5; ?></td>\r
-                    <td><input name="User_email" value="" tabindex="10210" /> <small>(<?php echo _TEXT6_TAB_FIELD5_2; ?>)</small></td>\r
-                </tr>\r
-            </table>\r
-        </fieldset>\r
-\r
-        <h1><?php echo _HEADER7; ?></h1>\r
-\r
-        <?php echo _TEXT7; ?>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT7_TAB_HEAD; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><?php echo _TEXT7_TAB_FIELD1; ?></td>\r
-                    <td><input name="Blog_name" size="60" value="My Nucleus CMS" tabindex="10220" /></td>\r
-                </tr>\r
-                <tr>\r
-                    <td><?php echo _TEXT7_TAB_FIELD2; ?></td>\r
-                    <td><input name="Blog_shortname" value="mynucleuscms" tabindex="10230" /> <small>(<?php echo _TEXT7_TAB_FIELD2_2; ?>)</small></td>\r
-                </tr>\r
-            </table>\r
-        </fieldset>\r
-\r
-        <h1><?php echo _HEADER8; ?></h1>\r
-\r
-        <fieldset>\r
-            <legend><?php echo _TEXT8_TAB_HEADER; ?></legend>\r
-            <table>\r
-                <tr>\r
-                    <td><input name="Weblog_ping" value="1" type="checkbox" id="Weblog_ping" tabindex="10240" /><?php echo _TEXT8_TAB_FIELD1; ?></td>\r
-                </tr>\r
-            </table>\r
-        </fieldset>\r
-\r
-        <h1><?php echo _HEADER9; ?></h1>\r
-\r
-        <?php echo _TEXT9; ?>\r
-\r
-        <p><input name="action" value="go" type="hidden" /> <input type="submit" value="<?php echo _BUTTON1; ?>" onclick="return checkSubmit();" tabindex="10250" /></p>\r
-\r
-        </form>\r
-    </body>\r
-</html>\r
-\r
-<?php }\r
-\r
-function tableName($unPrefixed) {\r
-    global $mysql_usePrefix, $mysql_prefix;\r
-\r
-    if ($mysql_usePrefix == 1) {\r
-        return $mysql_prefix . $unPrefixed;\r
-    } else {\r
-        return $unPrefixed;\r
-    }\r
-}\r
-\r
-function doInstall() {\r
-    global $mysql_usePrefix, $mysql_prefix, $weblog_ping;\r
-\r
-    // 0. put all POST-vars into vars\r
-    $mysql_host        = postVar('mySQL_host');\r
-    $mysql_user        = postVar('mySQL_user');\r
-    $mysql_password    = postVar('mySQL_password');\r
-    $mysql_database    = postVar('mySQL_database');\r
-    $mysql_create      = postVar('mySQL_create');\r
-    $mysql_usePrefix   = postVar('mySQL_usePrefix');\r
-    $mysql_prefix      = postVar('mySQL_tablePrefix');\r
-    $config_indexurl   = postVar('IndexURL');\r
-    $config_adminurl   = postVar('AdminURL');\r
-    $config_adminpath  = postVar('AdminPath');\r
-    $config_mediaurl   = postVar('MediaURL');\r
-    $config_skinsurl   = postVar('SkinsURL');\r
-    $config_pluginurl  = postVar('PluginURL');\r
-    $config_actionurl  = postVar('ActionURL');\r
-    $config_mediapath  = postVar('MediaPath');\r
-    $config_skinspath  = postVar('SkinsPath');\r
-    $user_name         = postVar('User_name');\r
-    $user_realname     = postVar('User_realname');\r
-    $user_password     = postVar('User_password');\r
-    $user_password2    = postVar('User_password2');\r
-    $user_email        = postVar('User_email');\r
-    $blog_name         = postVar('Blog_name');\r
-    $blog_shortname    = postVar('Blog_shortname');\r
-    $charset           = postVar('charset');\r
-    $config_adminemail = $user_email;\r
-    $config_sitename   = $blog_name;\r
-    $weblog_ping       = postVar('Weblog_ping');\r
-\r
-    $_POST = array();\r
-    if (!extension_loaded('mbstring')) {\r
-        include('nucleus/libs/mb_emulator/mb-emulator.php');\r
-    }\r
-    if ($charset == 'ujis') {\r
-        define('_CHARSET', 'EUC-JP');\r
-        $config_sitename = mb_convert_encoding($config_sitename, _CHARSET, 'UTF-8');\r
-        $user_realname  = mb_convert_encoding($user_realname, _CHARSET, 'UTF-8');\r
-        $blog_name      = mb_convert_encoding($blog_name, _CHARSET, 'UTF-8');\r
-    } else {\r
-        define('_CHARSET', 'UTF-8');\r
-    }\r
-\r
-    $config_indexurl   = replaceDoubleBackslash($config_indexurl);\r
-    $config_adminurl   = replaceDoubleBackslash($config_adminurl);\r
-    $config_mediaurl   = replaceDoubleBackslash($config_mediaurl);\r
-    $config_skinsurl   = replaceDoubleBackslash($config_skinsurl);\r
-    $config_pluginurl  = replaceDoubleBackslash($config_pluginurl);\r
-    $config_actionurl  = replaceDoubleBackslash($config_actionurl);\r
-    $config_adminpath  = replaceDoubleBackslash($config_adminpath);\r
-    $config_skinspath  = replaceDoubleBackslash($config_skinspath);\r
-    $config_mediapath  = replaceDoubleBackslash($config_mediapath);\r
-\r
-    // 1. check all the data\r
-    $errors = array();\r
-\r
-    if (!$mysql_database) {\r
-        array_push($errors, _ERROR2);\r
-    }\r
-\r
-    if (($mysql_usePrefix == 1) && (strlen($mysql_prefix) == 0) ) {\r
-        array_push($errors, _ERROR3);\r
-    }\r
-\r
-    if (($mysql_usePrefix == 1) && (!eregi('^[a-zA-Z0-9_]+$', $mysql_prefix) ) ) {\r
-        array_push($errors, _ERROR4);\r
-    }\r
-\r
-    // TODO: add action.php check\r
-    if (!endsWithSlash($config_indexurl) || !endsWithSlash($config_adminurl) || !endsWithSlash($config_mediaurl) || !endsWithSlash($config_pluginurl) || !endsWithSlash($config_skinsurl) ) {\r
-        array_push($errors, _ERROR5);\r
-    }\r
-\r
-    if (!endsWithSlash($config_adminpath) ) {\r
-        array_push($errors, _ERROR6);\r
-    }\r
-\r
-    if (!endsWithSlash($config_mediapath) ) {\r
-        array_push($errors, _ERROR7);\r
-    }\r
-\r
-    if (!endsWithSlash($config_skinspath) ) {\r
-        array_push($errors, _ERROR8);\r
-    }\r
-\r
-    if (!is_dir($config_adminpath) ) {\r
-        array_push($errors, _ERROR9);\r
-    }\r
-\r
-    if (!_isValidMailAddress($user_email) ) {\r
-        array_push($errors, _ERROR10);\r
-    }\r
-\r
-    if (!_isValidDisplayName($user_name) ) {\r
-        array_push($errors, _ERROR11);\r
-    }\r
-\r
-    if (!$user_password || !$user_password2) {\r
-        array_push($errors, _ERROR12);\r
-    }\r
-\r
-    if ($user_password != $user_password2) {\r
-        array_push($errors, _ERROR13);\r
-    }\r
-\r
-    if (!_isValidShortName($blog_shortname) ) {\r
-        array_push($errors, _ERROR14);\r
-    }\r
-\r
-    if (sizeof($errors) > 0) {\r
-        showErrorMessages($errors);\r
-    }\r
-\r
-    // 2-1. try to log in to mySQL\r
-\r
-    global $MYSQL_CONN;\r
-    // this will need to be changed if we ever allow\r
-    $MYSQL_CONN = @sql_connect_args($mysql_host, $mysql_user, $mysql_password);\r
-\r
-    if ($MYSQL_CONN == false) {\r
-        _doError(_ERROR15 . ': ' . sql_error() );\r
-    }\r
-\r
-// <add for garble measure>\r
-    // 2-2. set DEFAULT CHARSET and COLLATE\r
-    $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));\r
-    if ($mySqlVer >= '5.0.7' && phpversion() >= '5.2.3') {\r
-        mysql_set_charset($charset);\r
-    } elseif ($mySqlVer >= '4.1.0') {\r
-        sql_query("SET NAMES " . $charset);\r
-    }\r
-    $collation = ($charset == 'utf8') ? 'utf8_unicode_ci' : 'ujis_japanese_ci';\r
-// </add for garble measure>*/\r
-\r
-    // 3. try to create database (if needed)\r
-    if ($mysql_create == 1) {\r
-        $sql = 'CREATE DATABASE '\r
-             .     $mysql_database;\r
-// <add for garble measure>\r
-    if ($mySqlVer >= '4.1.0') {\r
-        $sql .= ' DEFAULT CHARACTER SET '\r
-              .     $charset\r
-              . ' COLLATE '\r
-              .     $collation;\r
-    }\r
-// </add for garble measure>*/\r
-        sql_query($sql,$MYSQL_CONN) or _doError(_ERROR16 . ': ' . sql_error($MYSQL_CONN));\r
-    }\r
-\r
-    // 4. try to select database\r
-    sql_select_db($mysql_database,$MYSQL_CONN) or _doError(_ERROR17);\r
-\r
-    // 5. execute queries\r
-    $filename = 'install.sql';\r
-    $fd = fopen($filename, 'r');\r
-    $queries = fread($fd, filesize($filename) );\r
-    fclose($fd);\r
-\r
-    $queries = split("(;\n|;\r)", $queries);\r
-\r
-    $aTableNames = array(\r
-        'nucleus_actionlog',\r
-        'nucleus_ban',\r
-        'nucleus_blog',\r
-        'nucleus_category',\r
-        'nucleus_comment',\r
-        'nucleus_config',\r
-        'nucleus_item',\r
-        'nucleus_karma',\r
-        'nucleus_member',\r
-        'nucleus_plugin',\r
-        'nucleus_skin',\r
-        'nucleus_template',\r
-        'nucleus_team',\r
-        'nucleus_activation',\r
-        'nucleus_tickets'\r
-    );\r
-// these are unneeded (one of the replacements above takes care of them)\r
-//                     'nucleus_plugin_event',\r
-//                     'nucleus_plugin_option',\r
-//                     'nucleus_plugin_option_desc',\r
-//                     'nucleus_skin_desc',\r
-//                     'nucleus_template_desc',\r
-\r
-    $aTableNamesPrefixed = array(\r
-        $mysql_prefix . 'nucleus_actionlog',\r
-        $mysql_prefix . 'nucleus_ban',\r
-        $mysql_prefix . 'nucleus_blog',\r
-        $mysql_prefix . 'nucleus_category',\r
-        $mysql_prefix . 'nucleus_comment',\r
-        $mysql_prefix . 'nucleus_config',\r
-        $mysql_prefix . 'nucleus_item',\r
-        $mysql_prefix . 'nucleus_karma',\r
-        $mysql_prefix . 'nucleus_member',\r
-        $mysql_prefix . 'nucleus_plugin',\r
-        $mysql_prefix . 'nucleus_skin',\r
-        $mysql_prefix . 'nucleus_template',\r
-        $mysql_prefix . 'nucleus_team',\r
-        $mysql_prefix . 'nucleus_activation',\r
-        $mysql_prefix . 'nucleus_tickets'\r
-    );\r
-// these are unneeded (one of the replacements above takes care of them)\r
-//                     $mysql_prefix . 'nucleus_plugin_event',\r
-//                     $mysql_prefix . 'nucleus_plugin_option',\r
-//                     $mysql_prefix . 'nucleus_plugin_option_desc',\r
-//                     $mysql_prefix . 'nucleus_skin_desc',\r
-//                     $mysql_prefix . 'nucleus_template_desc',\r
-\r
-    $count = count($queries);\r
-\r
-    for ($idx = 0; $idx < $count; $idx++) {\r
-        $query = trim($queries[$idx]);\r
-        // echo "QUERY = <small>" . htmlspecialchars($query) . "</small><p>";\r
-\r
-        if ($query) {\r
-\r
-            if ($mysql_usePrefix == 1) {\r
-                    $query = str_replace($aTableNames, $aTableNamesPrefixed, $query);\r
-            }\r
-// <add for garble measure>\r
-            if ($mysql_create != 1 && strpos($query, 'CREATE TABLE') === 0 && $mySqlVer >= '4.1.0') {\r
-                $query .= ' DEFAULT CHARACTER SET ' . $charset . ' COLLATE ' . $collation;\r
-            }\r
-// </add for garble measure>*/\r
-\r
-            sql_query($query,$MYSQL_CONN) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($query) . '</small>): ' . sql_error($MYSQL_CONN) );\r
-        }\r
-    }\r
-\r
-    // 5a make first post\r
-    if ($charset == 'ujis') {\r
-        $itm_title = mb_convert_encoding(_1ST_POST_TITLE, _CHARSET, 'UTF-8');\r
-        $itm_body  = mb_convert_encoding(_1ST_POST, _CHARSET, 'UTF-8');\r
-        $itm_more  = mb_convert_encoding(_1ST_POST2, _CHARSET, 'UTF-8');\r
-    } else {\r
-        $itm_title = _1ST_POST_TITLE;\r
-        $itm_body  = _1ST_POST;\r
-        $itm_more  = _1ST_POST2;\r
-    }\r
-    $newpost = "INSERT INTO "\r
-             . tableName('nucleus_item')\r
-             . " VALUES ("\r
-             . "1, "\r
-             . "'" . $itm_title . "',"\r
-             . " '" . $itm_body . "',"\r
-             . " '" . $itm_more . "',"\r
-             . " 1, 1, '2005-08-15 11:04:26', 0, 0, 0, 1, 0, 1);";\r
-    sql_query($newpost,$MYSQL_CONN) or _doError(_ERROR18 . ' (<small>' . htmlspecialchars($newpost) . '</small>): ' . sql_error($MYSQL_CONN) );\r
-\r
-    // 6. update global settings\r
-    updateConfig('IndexURL',   $config_indexurl);\r
-    updateConfig('AdminURL',   $config_adminurl);\r
-    updateConfig('MediaURL',   $config_mediaurl);\r
-    updateConfig('SkinsURL',   $config_skinsurl);\r
-    updateConfig('PluginURL',  $config_pluginurl);\r
-    updateConfig('ActionURL',  $config_actionurl);\r
-    updateConfig('AdminEmail', $config_adminemail);\r
-    updateConfig('SiteName',   $config_sitename);\r
-    if ($charset == 'ujis') {\r
-        updateConfig('Language',   'japanese-euc');\r
-    }\r
-\r
-    // 7. update GOD member\r
-    $query = 'UPDATE ' . tableName('nucleus_member')\r
-           . " SET mname     = '" . addslashes($user_name) . "',"\r
-           . " mrealname     = '" . addslashes($user_realname) . "',"\r
-           . " mpassword     = '" . md5(addslashes($user_password) ) . "',"\r
-           . " murl          = '" . addslashes($config_indexurl) . "',"\r
-           . " memail        = '" . addslashes($user_email) . "',"\r
-           . " madmin        = 1,"\r
-           . " mcanlogin     = 1"\r
-           . " WHERE"\r
-           . " mnumber       = 1";\r
-\r
-    sql_query($query,$MYSQL_CONN) or _doError(_ERROR19 . ': ' . sql_error($MYSQL_CONN) );\r
-\r
-    // 8. update weblog settings\r
-    $query = 'UPDATE ' . tableName('nucleus_blog')\r
-           . " SET bname  = '" . addslashes($blog_name) . "',"\r
-           . " bshortname = '" . addslashes($blog_shortname) . "',"\r
-           . " burl       = '" . addslashes($config_indexurl) . "'"\r
-           . " WHERE"\r
-           . " bnumber    = 1";\r
-\r
-    sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) );\r
-\r
-    // 8-2. update category settings\r
-    if ($charset == 'ujis') {\r
-        $cat_name = mb_convert_encoding(_GENERALCAT_NAME, _CHARSET, 'UTF-8');\r
-        $cat_desc = mb_convert_encoding(_GENERALCAT_DESC, _CHARSET, 'UTF-8');\r
-    } else {\r
-        $cat_name = _GENERALCAT_NAME;\r
-        $cat_desc = _GENERALCAT_DESC;\r
-    }\r
-    $query = 'UPDATE ' . tableName('nucleus_category')\r
-           . " SET cname  = '" . $cat_name . "',"\r
-           . " cdesc      = '" . $cat_desc . "'"\r
-           . " WHERE"\r
-           . " catid      = 1";\r
-\r
-    sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) );\r
-\r
-    // 9. update item date\r
-    $query = 'UPDATE ' . tableName('nucleus_item')\r
-           . " SET   itime   = '" . date('Y-m-d H:i:s', time() ) ."'"\r
-           . " WHERE inumber = 1";\r
-\r
-    sql_query($query,$MYSQL_CONN) or _doError(_ERROR21 . ': ' . sql_error($MYSQL_CONN) );\r
-\r
-    global $aConfPlugsToInstall, $aConfSkinsToImport;\r
-    $aSkinErrors = array();\r
-    $aPlugErrors = array();\r
-\r
-    if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) {\r
-        // 10. set global variables\r
-        global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_PREFIX;\r
-\r
-        $MYSQL_HOST     = $mysql_host;\r
-        $MYSQL_USER     = $mysql_user;\r
-        $MYSQL_PASSWORD = $mysql_password;\r
-        $MYSQL_DATABASE = $mysql_database;\r
-        $MYSQL_PREFIX   = ($mysql_usePrefix == 1) ? $mysql_prefix : '';\r
-\r
-        global $DIR_NUCLEUS, $DIR_MEDIA, $DIR_SKINS, $DIR_PLUGINS, $DIR_LANG, $DIR_LIBS;\r
-\r
-        $DIR_NUCLEUS = $config_adminpath;\r
-        $DIR_MEDIA   = $config_mediapath;\r
-        $DIR_SKINS   = $config_skinspath;\r
-        $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
-        $DIR_LANG    = $DIR_NUCLEUS . 'language/';\r
-        $DIR_LIBS    = $DIR_NUCLEUS . 'libs/';\r
-\r
-        // close database connection (needs to be closed if we want to include globalfunctions.php)\r
-        sql_close($MYSQL_CONN);\r
-\r
-        $manager = '';\r
-        include_once($DIR_LIBS . 'globalfunctions.php');\r
-\r
-        // 11. install custom skins\r
-        $aSkinErrors = installCustomSkins($manager);\r
-        $defskinQue  = 'SELECT `sdnumber` as result FROM ' . sql_table('skin_desc') . ' WHERE `sdname` = "default"';\r
-        $defSkinID   = quickQuery($defskinQue);\r
-        $updateQuery = 'UPDATE ' . sql_table('blog') . ' SET `bdefskin` = ' . intval($defSkinID) . ' WHERE `bnumber` = 1';\r
-        sql_query($updateQuery);\r
-        $updateQuery = 'UPDATE ' . sql_table('config') . ' SET `value` = ' . intval($defSkinID). ' WHERE `name` = "BaseSkin"';\r
-        sql_query($updateQuery);\r
-\r
-        // 12. install NP_Ping, if decided\r
-        if ($weblog_ping == 1) {\r
-            global $aConfPlugsToInstall;\r
-            array_push($aConfPlugsToInstall, "NP_Ping");\r
-        }\r
-\r
-        // 13. install custom plugins\r
-        $aPlugErrors = installCustomPlugs($manager);\r
-    }\r
-\r
-    // 14. Write config file ourselves (if possible)\r
-    $bConfigWritten = 0;\r
-\r
-    if (@file_exists('config.php') && is_writable('config.php') && $fp = @fopen('config.php', 'w') ) {\r
-        $config_data = '<' . '?php' . "\n\n";\r
-        //$config_data .= "\n"; (extraneous, just added extra \n to previous line\r
-        $config_data .= "   // mySQL connection information\n";\r
-        $config_data .= "   \$MYSQL_HOST     = '" . $mysql_host . "';\n";\r
-        $config_data .= "   \$MYSQL_USER     = '" . $mysql_user . "';\n";\r
-        $config_data .= "   \$MYSQL_PASSWORD = '" . $mysql_password . "';\n";\r
-        $config_data .= "   \$MYSQL_DATABASE = '" . $mysql_database . "';\n";\r
-        $config_data .= "   \$MYSQL_PREFIX   = '" . (($mysql_usePrefix == 1) ? $mysql_prefix : '') . "';\n";\r
-        $config_data .= "   // new in 3.50. first element is db handler, the second is the db driver used by the handler\n";\r
-        $config_data .= "   // default is \$MYSQL_HANDLER = array('mysql','mysql');\n";\r
-        $config_data .= "   //\$MYSQL_HANDLER = array('mysql','mysql');\n";\r
-        $config_data .= "   //\$MYSQL_HANDLER = array('pdo','mysql');\n";\r
-        $config_data .= "   \$MYSQL_HANDLER = array('".$MYSQL_HANDLER[0]."','".$MYSQL_HANDLER[1]."');\n";\r
-        $config_data .= "\n";\r
-        $config_data .= "   // main nucleus directory\n";\r
-        $config_data .= "   \$DIR_NUCLEUS = '" . $config_adminpath . "';\n";\r
-        $config_data .= "\n";\r
-        $config_data .= "   // path to media dir\n";\r
-        $config_data .= "   \$DIR_MEDIA   = '" . $config_mediapath . "';\n";\r
-        $config_data .= "\n";\r
-        $config_data .= "   // extra skin files for imported skins\n";\r
-        $config_data .= "   \$DIR_SKINS   = '" . $config_skinspath . "';\n";\r
-        $config_data .= "\n";\r
-        $config_data .= "   // these dirs are normally sub dirs of the nucleus dir, but \n";\r
-        $config_data .= "   // you can redefine them if you wish\n";\r
-        $config_data .= "   \$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";\r
-        $config_data .= "   \$DIR_LANG    = \$DIR_NUCLEUS . 'language/';\n";\r
-        $config_data .= "   \$DIR_LIBS    = \$DIR_NUCLEUS . 'libs/';\n";\r
-        $config_data .= "\n";\r
-        $config_data .= "   // include libs\n";\r
-        $config_data .= "   include(\$DIR_LIBS . 'globalfunctions.php');\n";\r
-        $config_data .= "   if (!extension_loaded('mbstring')) {\n";\r
-        $config_data .= "       include(\$DIR_LIBS . 'mb_emulator/mb-emulator.php');\n";\r
-        $config_data .= "   }\n";\r
-        $config_data .= "?" . ">";\r
-\r
-        $result = @fputs($fp, $config_data, strlen($config_data) );\r
-        fclose($fp);\r
-\r
-        if ($result) {\r
-            $bConfigWritten = 1;\r
-        }\r
-    }\r
-\r
-?>\r
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-    <title><?php echo _TITLE; ?></title>\r
-    <style>@import url('nucleus/styles/manual.css');</style>\r
-</head>\r
-<body>\r
-    <div style='text-align:center'><img src='./nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
-\r
-<?php\r
-    $aAllErrors = array_merge($aSkinErrors, $aPlugErrors);\r
-\r
-    if (count($aAllErrors) > 0) {\r
-        echo '<h1>' . _TITLE2 . '</h1>';\r
-        echo '<ul><li>' . implode('</li><li>', $aAllErrors) . '</li></ul>';\r
-    }\r
-\r
-    if (!$bConfigWritten) { ?>\r
-        <h1><?php echo _TITLE3; ?></h1>\r
-\r
-        <? echo _TEXT10; ?>\r
-\r
-        <pre><code>&lt;?php\r
-    // mySQL connection information\r
-    $MYSQL_HOST     = '<b><?php echo $mysql_host?></b>';\r
-    $MYSQL_USER     = '<b><?php echo $mysql_user?></b>';\r
-    $MYSQL_PASSWORD = '<i><b>xxxxxxxxxxx</b></i>';\r
-    $MYSQL_DATABASE = '<b><?php echo $mysql_database?></b>';\r
-    $MYSQL_PREFIX   = '<b><?php echo ($mysql_usePrefix == 1)?$mysql_prefix:''?></b>';\r
-\r
-    // main nucleus directory\r
-    $DIR_NUCLEUS = '<b><?php echo $config_adminpath?></b>';\r
-\r
-    // path to media dir\r
-    $DIR_MEDIA   = '<b><?php echo $config_mediapath?></b>';\r
-\r
-    // extra skin files for imported skins\r
-    $DIR_SKINS   = '<b><?php echo $config_skinspath?></b>';\r
-\r
-    // these dirs are normally sub dirs of the nucleus dir, but\r
-    // you can redefine them if you wish\r
-    $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
-    $DIR_LANG    = $DIR_NUCLEUS . 'language/';\r
-    $DIR_LIBS    = $DIR_NUCLEUS . 'libs/';\r
-\r
-    // include libs\r
-    include($DIR_LIBS . 'globalfunctions.php');\r
-    if (!extension_loaded('mbstring')) {\r
-        include($DIR_LIBS . 'mb_emulator/mb-emulator.php');\r
-    }\r
-?&gt;</code></pre>\r
-\r
-    <?php echo _TEXT11; ?>\r
-\r
-    <div class="note">\r
-    <?php echo _TEXT12; ?>\r
-    </div>\r
-\r
-<?php } else { ?>\r
-\r
-    <h1><?php echo _TITLE4; ?></h1>\r
-\r
-    <?php echo _TEXT13; ?>\r
-\r
-<?php } ?>\r
-\r
-    <h1><?php echo _TITLE5; ?></h1>\r
-    \r
-    <?php echo _TEXT14; ?>\r
-\r
-    <ul>\r
-        <li><?php echo _TEXT14_L1; ?></li>\r
-        <li><?php echo _TEXT14_L2; ?></li>\r
-    </ul>\r
-\r
-    <h1><?php echo _HEADER10; ?></h1>\r
-\r
-    <?php echo _TEXT15; ?>\r
-\r
-        <ul>\r
-        <li><?php echo _TEXT15_L1; ?></li>\r
-        <li><?php echo _TEXT15_L2; ?></li>\r
-        <li><?php echo _TEXT15_L3; ?></li>\r
-        </ul>\r
-\r
-    <?php echo _TEXT16; ?>\r
-\r
-    <h1><?php echo _HEADER11; ?></h1>\r
-\r
-    <p><?php echo _TEXT16_H; ?>\r
-        <ul>\r
-            <li><a href="<?php echo $config_adminurl?>"><?php echo _TEXT16_L1; ?></a></li>\r
-            <li><a href="<?php echo $config_indexurl?>"><?php echo _TEXT16_L2; ?></a></li>\r
-        </ul>\r
-    </p>\r
-\r
-</body>\r
-</html>\r
-\r
-<?php\r
-}\r
-\r
-function installCustomPlugs(&$manager) {\r
-    global $aConfPlugsToInstall, $DIR_LIBS;\r
-\r
-    $aErrors = array();\r
-\r
-    if (count($aConfPlugsToInstall) == 0) {\r
-        return $aErrors;\r
-    }\r
-\r
-    $res = sql_query('SELECT * FROM ' . sql_table('plugin') );\r
-    $numCurrent = sql_num_rows($res);\r
-\r
-    foreach ($aConfPlugsToInstall as $plugName) {\r
-        // do this before calling getPlugin (in case the plugin id is used there)\r
-        $query = 'INSERT INTO ' . sql_table('plugin') . ' (porder, pfile) VALUES (' . (++$numCurrent) . ', "' . addslashes($plugName) . '")';\r
-        sql_query($query);\r
-\r
-        // get and install the plugin\r
-        $manager->clearCachedInfo('installedPlugins');\r
-        $plugin =& $manager->getPlugin($plugName);\r
-        $plugin->plugid = $numCurrent;\r
-\r
-        if (!$plugin) {\r
-            sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pfile=\'' . addslashes($plugName) . '\'');\r
-            $numCurrent--;\r
-            array_push($aErrors, _ERROR22 . $plugName);\r
-            continue;\r
-        }\r
-\r
-        $plugin->install();\r
-    }\r
-\r
-    // SYNC PLUGIN EVENT LIST\r
-    sql_query('DELETE FROM ' . sql_table('plugin_event') );\r
-\r
-    // loop over all installed plugins\r
-    $res = sql_query('SELECT pid, pfile FROM ' . sql_table('plugin') );\r
-\r
-    while($o = sql_fetch_object($res) ) {\r
-        $pid  =  $o->pid;\r
-        $plug =& $manager->getPlugin($o->pfile);\r
-\r
-        if ($plug) {\r
-            $eventList = $plug->getEventList();\r
-\r
-            foreach ($eventList as $eventName) {\r
-                sql_query('INSERT INTO ' . sql_table('plugin_event') . ' (pid, event) VALUES (' . $pid . ', \'' . $eventName . '\')');\r
-            }\r
-        }\r
-    }\r
-\r
-    return $aErrors;\r
-}\r
-\r
-function installCustomSkins(&$manager) {\r
-    global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;\r
-\r
-       $aErrors = array();\r
-       global $manager;\r
-       if (empty($manager)) {\r
-           $manager = new MANAGER;\r
-       }\r
-\r
-    if (count($aConfSkinsToImport) == 0) {\r
-        return $aErrors;\r
-    }\r
-\r
-    // load skinie class\r
-    include_once($DIR_LIBS . 'skinie.php');\r
-\r
-    $importer = new SKINIMPORT();\r
-\r
-    foreach ($aConfSkinsToImport as $skinName) {\r
-        $importer->reset();\r
-        $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';\r
-\r
-        if (!@file_exists($skinFile) ) {\r
-            array_push($aErrors, _ERROR23_1 . $skinFile . ' : ' . _ERROR23_2);\r
-            continue;\r
-        }\r
-\r
-        $error = $importer->readFile($skinFile);\r
-\r
-        if ($error) {\r
-            array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error);\r
-            continue;\r
-        }\r
-\r
-        $error = $importer->writeToDatabase(1);\r
-\r
-        if ($error) {\r
-            array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error);\r
-            continue;\r
-        }\r
-    }\r
-\r
-    return $aErrors;\r
-}\r
-\r
-// give an error if one or more nucleus are not accessible\r
-function doCheckFiles() {\r
-    $missingfiles = array();\r
-    $files = array(\r
-        'install.sql',\r
-        'index.php',\r
-        'action.php',\r
-        'nucleus/index.php',\r
-        'nucleus/libs/globalfunctions.php',\r
-        'nucleus/libs/ADMIN.php',\r
-        'nucleus/libs/BLOG.php',\r
-        'nucleus/libs/COMMENT.php',\r
-        'nucleus/libs/COMMENTS.php',\r
-        'nucleus/libs/ITEM.php',\r
-        'nucleus/libs/MEMBER.php',\r
-        'nucleus/libs/SKIN.php',\r
-        'nucleus/libs/TEMPLATE.php',\r
-        'nucleus/libs/MEDIA.php',\r
-        'nucleus/libs/ACTIONLOG.php',\r
-        'nucleus/media.php'\r
-    );\r
-\r
-    $count = count($files);\r
-\r
-    for ($i = 0; $i < $count; $i++) {\r
-        if (!is_readable($files[$i]) ) {\r
-            array_push($missingfiles, _ERROR25_1 . $files[$i] . _ERROR25_2);\r
-        }\r
-    }\r
-\r
-// The above code replaces several if statements of the form:\r
-\r
-//     if (!is_readable('install.sql') ) {\r
-//             array_push($missingfiles, 'File <b>install.sql</b> is missing or not readable');\r
-//     }\r
-\r
-    if (count($missingfiles) > 0) {\r
-        showErrorMessages($missingfiles);\r
-    }\r
-}\r
-\r
-function updateConfig($name, $val) {\r
-    global $MYSQL_CONN;\r
-    $name = addslashes($name);\r
-    $val  = trim(addslashes($val) );\r
-\r
-    $query = 'UPDATE ' . tableName('nucleus_config')\r
-           . " SET   value = '$val'"\r
-           . " WHERE name  = '$name'";\r
-\r
-    sql_query($query,$MYSQL_CONN) or _doError(_ERROR26 . ': ' . sql_error($MYSQL_CONN) );\r
-    return sql_insert_id($MYSQL_CONN);\r
-}\r
-\r
-function replaceDoubleBackslash($input) {\r
-    return str_replace('\\', '/', $input);\r
-}\r
-\r
-function endsWithSlash($s) {\r
-    return (strrpos($s, '/') == strlen($s) - 1);\r
-}\r
-\r
-/**\r
- * Checks if email address is valid\r
- */\r
-function _isValidMailAddress($address) {\r
-    if (preg_match("/^[a-zA-Z0-9\._-]+@+[A-Za-z0-9\._-]+\.+[A-Za-z]{2,4}$/", $address) ) {\r
-        return 1;\r
-    } else {\r
-        return 0;\r
-    }\r
-}\r
-\r
-// returns true if the given string is a valid shortname\r
-// (to check short blog names and nicknames)\r
-// logic: starts and ends with a non space, can contain spaces in between\r
-//        min 2 chars\r
-function _isValidShortName($name) {\r
-    if (eregi("^[a-z0-9]+$", $name) ) {\r
-        return 1;\r
-    } else {\r
-        return 0;\r
-    }\r
-}\r
-\r
-\r
-\r
-// returns true if the given string is a valid display name\r
-// (to check nicknames)\r
-function _isValidDisplayName($name) {\r
-    if (eregi("^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$", $name) ) {\r
-        return 1;\r
-    } else {\r
-        return 0;\r
-    }\r
-}\r
-\r
-function _doError($msg) {\r
-    ?>\r
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-    <title><?php echo _TITLE; ?></title>\r
-    <style>@import url('nucleus/styles/manual.css');</style>\r
-</head>\r
-<body>\r
-    <div style='text-align:center'><img src='./nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
-    <h1><?php echo _ERROR27; ?></h1>\r
-\r
-    <p><?php echo _ERROR28; ?> "<?php echo $msg; ?>";</p>\r
-\r
-    <p><a href="install.php" onclick="history.back();"><?php echo _TEXT17; ?></a></p>\r
-</body>\r
-</html>\r
-\r
-<?php\r
-    exit;\r
-}\r
-\r
-function showErrorMessages($errors) {\r
-    ?>\r
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-    <title><?php echo _TITLE; ?></title>\r
-    <style>@import url('nucleus/styles/manual.css');</style>\r
-</head>\r
-<body>\r
-    <div style='text-align:center'><img src='./nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
-    <h1><?php echo _ERROR27; ?></h1>\r
-\r
-    <p><?php echo _ERROR29; ?>:</p>\r
-\r
-    <ul>\r
-\r
-<?php\r
-    while($msg = array_shift($errors) ) {\r
-        echo '<li>' . $msg . '</li>';\r
-    }\r
-?>\r
-\r
-    </ul>\r
-\r
-    <p><a href="install.php" onclick="history.back();return false;"><?php echo _TEXT17; ?></a></p>\r
-</body>\r
-</html>\r
-\r
-<?php\r
-    exit;\r
-}\r
-\r
-/* for the non-php systems that decide to show the contents:\r
-?></div><?php  */\r
-\r
-?>
\ No newline at end of file
diff --git a/utf8/install/index.php b/utf8/install/index.php
new file mode 100755 (executable)
index 0000000..48b9617
--- /dev/null
@@ -0,0 +1,1242 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2009 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ * This script will install the Nucleus tables in your SQL-database, and initialize the data in\r
+ * those tables.\r
+ *\r
+ * Below is a friendly way of letting users on non-php systems know that Nucleus won't run there.\r
+ * ?><div style="font-size: xx-large;">If you see this text in your browser when you open <i>install.php</i>, your web server is not able to run PHP-scripts, and therefor Nucleus will not be able to run there. </div><div style="display: none"><?php\r
+ */\r
+\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
+ * @version $Id$\r
+ * $NucleusJP: install.php,v 1.7 2007/02/04 06:28:44 kimitake Exp $\r
+ */\r
+\r
+/*\r
+       This part of the install.php code allows for customization of the install process.\r
+       When distributing plugins or skins together with a Nucleus installation, the\r
+       configuration below will instruct to install them\r
+\r
+       -- Start Of Configurable Part --\r
+*/\r
+\r
+include('./install_lang_japanese.php');\r
+\r
+// array with names of plugins to install. Plugin files must be present in the nucleus/plugin/\r
+// directory.\r
+//\r
+// example:\r
+//      array('NP_TrackBack', 'NP_MemberGoodies')\r
+$aConfPlugsToInstall = array(\r
+       'NP_SkinFiles',\r
+       'NP_SecurityEnforcer',\r
+       'NP_Text'\r
+);\r
+\r
+\r
+// array with skins to install. skins must be present under the skins/ directory with\r
+// a subdirectory having the same name that contains a skinbackup.xml file\r
+//\r
+// example:\r
+//      array('base','rsd')\r
+$aConfSkinsToImport = array(\r
+       'atom',\r
+       'rss2.0',\r
+       'rsd',\r
+       'default',\r
+);\r
+\r
+/*\r
+       -- End Of Configurable Part --\r
+*/\r
+\r
+// don't give warnings for uninitialized vars\r
+error_reporting(E_ERROR | E_WARNING | E_PARSE);\r
+\r
+// make sure there's no unnecessary escaping:\r
+set_magic_quotes_runtime(0);\r
+\r
+// if there are some plugins or skins to import, do not include vars\r
+// in globalfunctions.php again... so set a flag\r
+if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) {\r
+       global $CONF;\r
+       $CONF['installscript'] = 1;\r
+}\r
+\r
+if (phpversion() >= '4.1.0') {\r
+       include_once('../nucleus/libs/vars4.1.0.php');\r
+} else {\r
+       include_once('../nucleus/libs/vars4.0.6.php');\r
+}\r
+\r
+// include core classes that are needed for login & plugin handling\r
+// added for 3.5 sql_* wrapper\r
+global $MYSQL_HANDLER;\r
+//set the handler if different from mysql (or mysqli)\r
+//$MYSQL_HANDLER = array('pdo','mysql');\r
+if (!isset($MYSQL_HANDLER)) {\r
+       $MYSQL_HANDLER = array('mysql','');\r
+}\r
+\r
+include_once('../nucleus/libs/sql/'.$MYSQL_HANDLER[0].'.php');\r
+// end new for 3.5 sql_* wrapper\r
+include_once('../nucleus/libs/mysql.php');\r
+\r
+// check if mysql support is installed\r
+// this check may not make sense, as is, in a version past 3.5x\r
+if (!function_exists('mysql_query') ) {\r
+       _doError(_ERROR1);\r
+}\r
+\r
+if (postVar('action') == 'go') {\r
+       doInstall();\r
+} else {\r
+       showInstallForm();\r
+}\r
+\r
+exit;\r
+\r
+function showInstallForm() {\r
+       // 0. pre check if all necessary files exist\r
+       doCheckFiles();\r
+\r
+       ?>\r
+       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+       <html xmlns="http://www.w3.org/1999/xhtml">\r
+       <head>\r
+               <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
+               <title><?php echo _TITLE; ?></title>\r
+               <style type="text/css"><!--\r
+                       @import url('../nucleus/documentation/styles/manual.css');\r
+               --></style>\r
+               <script type="text/javascript"><!--\r
+                       var submitcount = 0;\r
+\r
+                       // function to make sure the submit button only gets pressed once\r
+                       function checkSubmit() {\r
+                               if (submitcount == 0) {\r
+                                       submitcount++;\r
+                                       return true;\r
+                               } else {\r
+                                       return false;\r
+                               }\r
+                       }\r
+               --></script>\r
+       </head>\r
+       <body>\r
+               <div style="text-align:center"><img src="../nucleus/styles/logo.gif" /></div> <!-- Nucleus logo -->\r
+               <form method="post" action="index.php">\r
+\r
+               <h1><?php echo _HEADER1; ?></h1>\r
+\r
+               <?php echo _TEXT1; ?>\r
+\r
+               <h1><?php echo _HEADER1_2 ?></h1>\r
+\r
+               <?php echo _TEXT1_2; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT1_2_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT1_2_TAB_FIELD1; ?></td>\r
+                                       <td>\r
+                                               <select name="charset" tabindex="10000">\r
+                                                       <option value="utf8" selected="selected">UTF-8</option>\r
+                                                       <option value="ujis" >EUC-JP</option>\r
+                                               </select>\r
+                                       </td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <h1><?php echo _HEADER2; ?></h1>\r
+\r
+               <?php echo _TEXT2; ?>\r
+\r
+               <ul>\r
+                       <li>PHP:\r
+\r
+<?php\r
+       echo phpversion();\r
+       $minVersion = '4.0.6';\r
+\r
+       if (phpversion() < $minVersion) {\r
+               echo ' <span class="warning" style="display:block">' . sprintf(_TEXT2_WARN, $minVersion) . '</span>';\r
+       } elseif (phpversion() < '5') {\r
+               echo ' <span class="warning" style="display:block">' . _TEXT2_WARN3 . '</span>';\r
+       }\r
+?>\r
+\r
+                       </li>\r
+                       <li>MySQL:\r
+\r
+<?php\r
+       // note: this piece of code is taken from phpMyAdmin\r
+       $conn   = sql_connect_args('localhost','','');\r
+       $result = @sql_query('SELECT VERSION() AS version', $conn);\r
+\r
+       if ($result != FALSE && @sql_num_rows($result) > 0) {\r
+               $row   = sql_fetch_array($result);\r
+               $match = explode('.', $row['version']);\r
+       } else {\r
+               $result = @sql_query('SHOW VARIABLES LIKE \'version\'', $conn);\r
+\r
+               if ($result != FALSE && @sql_num_rows($result) > 0) {\r
+                       $row   = sql_fetch_row($result);\r
+                       $match = explode('.', $row[1]);\r
+               } else {\r
+                       $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0';\r
+                       preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);\r
+                       $match = explode('.', $version[0]);\r
+\r
+                       if ($match[0] == '') {\r
+                               $match[0] = '0';\r
+                               $match[1] = '0';\r
+                               $match[2] = '0';\r
+                       }\r
+               }\r
+       }\r
+\r
+       sql_disconnect($conn);\r
+       $mysqlVersion = implode($match, '.');\r
+       $minVersion   = '3.23';\r
+\r
+       if ($mysqlVersion == '0.0.0') {\r
+               echo _NOTIFICATION1;\r
+       }\r
+       else {\r
+               echo $mysqlVersion;\r
+       }\r
+\r
+       if ($mysqlVersion < $minVersion) {\r
+               echo ' <span class="warning" style="display:block">' . sprintf(_TEXT2_WARN2, $minVersion) . '</span>';\r
+       }\r
+?>\r
+\r
+                       </li>\r
+               </ul>\r
+\r
+<?php\r
+       // tell people how they can have their config file filled out automatically\r
+       if (@file_exists('../config.php') && @!is_writable('../config.php')) {\r
+?>\r
+\r
+               <h1><?php echo _HEADER3; ?></h1>\r
+\r
+               <?php echo _TEXT3;\r
+\r
+} ?>\r
+\r
+               <h1><?php echo _HEADER4; ?></h1>\r
+\r
+               <?php echo _TEXT4; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT4_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD1; ?></td>\r
+                                       <td><input name="mySQL_host" value="<?php echo htmlspecialchars(@ini_get('mysql.default_host') )?>" tabindex="10010" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD2; ?></td>\r
+                                       <td><input name="mySQL_user" tabindex="10020" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD3; ?></td>\r
+                                       <td><input name="mySQL_password" type="password" tabindex="10030" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD4; ?></td>\r
+                                       <td><input name="mySQL_database" tabindex="10040" /> (<input name="mySQL_create" value="1" type="checkbox" id="mySQL_create" tabindex="10050" /><label for="mySQL_create"><?php echo _TEXT4_TAB_FIELD4_ADD; ?></label>)</td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT4_TAB2_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><input name="mySQL_usePrefix" value="1" type="checkbox" id="mySQL_usePrefix" tabindex="10060" /><label for="mySQL_usePrefix"><?php echo _TEXT4_TAB2_FIELD; ?></label></td>\r
+                                       <td><input name="mySQL_tablePrefix" value="" tabindex="10070" /></td>\r
+                               </tr>\r
+                       </table>\r
+\r
+                       <?php echo _TEXT4_TAB2_ADD; ?>\r
+\r
+               </fieldset>\r
+\r
+       <h1><?php echo _HEADER5; ?></h1>\r
+\r
+       <?php echo _TEXT5; ?>\r
+\r
+<?php\r
+\r
+       // no need to this all! dirname(__FILE__) is all we need -- moraes\r
+       /*\r
+       // discover full path\r
+       $fullPath = serverVar('PATH_TRANSLATED');\r
+\r
+       if ($fullPath == '') {\r
+               $fullPath = serverVar('SCRIPT_FILENAME');\r
+       }\r
+\r
+       $basePath = str_replace('install.php', '', $fullPath);\r
+       $basePath = replaceDoubleBackslash($basePath);\r
+       $basePath = replaceDoubleBackslash($basePath);\r
+\r
+       // add slash at end if necessary\r
+       if (!endsWithSlash($basePath) ) {\r
+               $basePath .= '/';\r
+       }\r
+       */\r
+\r
+       $basePath = str_replace('install/index.php', '', dirname(__FILE__));\r
+?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT5_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD1; ?></td>\r
+                                       <td><input name="IndexURL" size="60" value="<?php\r
+                                               $url = 'http://' . serverVar('HTTP_HOST') . serverVar('PHP_SELF');\r
+                                               $url = str_replace('install/index.php', '', $url);\r
+                                               $url = replaceDoubleBackslash($url);\r
+\r
+                                               // add slash at end if necessary\r
+                                               if (!endsWithSlash($url) ) {\r
+                                                       $url .= '/';\r
+                                               }\r
+\r
+                                               echo $url; ?>" tabindex="10080" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD2; ?></td>\r
+                                       <td><input name="AdminURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'nucleus/';\r
+                                               } ?>" tabindex="10090" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD3; ?></td>\r
+                                       <td><input name="AdminPath" size="60" value="<?php\r
+                                               if($basePath) {\r
+                                                       echo $basePath . 'nucleus/';\r
+                                               } ?>" tabindex="10100" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD4; ?></td>\r
+                                       <td><input name="MediaURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'media/';\r
+                                               } ?>" tabindex="10110" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD5; ?></td>\r
+                                       <td><input name="MediaPath" size="60" value="<?php\r
+                                               if ($basePath) {\r
+                                                       echo $basePath . 'media/';\r
+                                               } ?>" tabindex="10120" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD6; ?></td>\r
+                                       <td><input name="SkinsURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'skins/';\r
+                                               } ?>" tabindex="10130" />\r
+                                               <br />(<?php echo _TEXT5_TAB_FIELD7_2; ?>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD7; ?></td>\r
+                                       <td><input name="SkinsPath" size="60" value="<?php\r
+                                               if ($basePath) {\r
+                                                       echo $basePath . 'skins/';\r
+                                               } ?>" tabindex="10140" />\r
+                                               <br />(<?php echo _TEXT5_TAB_FIELD7_2; ?>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD8; ?></td>\r
+                                       <td><input name="PluginURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'nucleus/plugins/';\r
+                                               } ?>" tabindex="10150" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD9; ?></td>\r
+                                       <td><input name="ActionURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'action.php';\r
+                                               } ?>" tabindex="10160" />\r
+                                               <br />(<?php echo _TEXT5_TAB_FIELD9_2;?>)\r
+                                       </td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <?php echo _TEXT5_2; ?>\r
+\r
+               <h1><? echo _HEADER6; ?></h1>\r
+\r
+               <?php echo _TEXT6; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT6_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD1; ?></td>\r
+                                       <td><input name="User_name" value="" tabindex="10170" /> (<?php echo _TEXT6_TAB_FIELD1_2; ?>)</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD2; ?></td>\r
+                                       <td><input name="User_realname" value="" tabindex="10180" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD3; ?></td>\r
+                                       <td><input name="User_password" type="password" value="" tabindex="10190" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD4; ?></td>\r
+                                       <td><input name="User_password2" type="password" value="" tabindex="10200" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD5; ?></td>\r
+                                       <td><input name="User_email" value="" tabindex="10210" /> (<?php echo _TEXT6_TAB_FIELD5_2; ?>)</td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <h1><?php echo _HEADER7; ?></h1>\r
+\r
+               <?php echo _TEXT7; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT7_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT7_TAB_FIELD1; ?></td>\r
+                                       <td><input name="Blog_name" size="60" value="My Nucleus CMS" tabindex="10220" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT7_TAB_FIELD2; ?></td>\r
+                                       <td><input name="Blog_shortname" value="mynucleuscms" tabindex="10230" /> (<?php echo _TEXT7_TAB_FIELD2_2; ?>)</td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <h1><?php echo _HEADER8; ?></h1>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT8_TAB_HEADER; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><input name="Weblog_ping" value="1" type="checkbox" id="Weblog_ping" tabindex="10240" /><?php echo _TEXT8_TAB_FIELD1; ?></td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+               \r
+               <h1><?php echo _HEADER9; ?></h1>\r
+               \r
+               <?php echo _TEXT9; ?>\r
+               \r
+               <p>\r
+               <input name="action" value="go" type="hidden" />\r
+               <input type="submit" value="<?php echo _BUTTON1; ?>" onclick="return checkSubmit();" tabindex="10250" />\r
+               </p>\r
+               \r
+               </form>\r
+       </body>\r
+</html>\r
+\r
+<?php }\r
+\r
+function tableName($unPrefixed) {\r
+       global $mysql_usePrefix, $mysql_prefix;\r
+\r
+       if ($mysql_usePrefix == 1) {\r
+               return $mysql_prefix . $unPrefixed;\r
+       } else {\r
+               return $unPrefixed;\r
+       }\r
+}\r
+\r
+function doInstall() {\r
+       global $mysql_usePrefix, $mysql_prefix, $weblog_ping;\r
+\r
+       // 0. put all POST-vars into vars\r
+       $mysql_host             = postVar('mySQL_host');\r
+       $mysql_user             = postVar('mySQL_user');\r
+       $mysql_password = postVar('mySQL_password');\r
+       $mysql_database = postVar('mySQL_database');\r
+       $mysql_create     = postVar('mySQL_create');\r
+       $mysql_usePrefix   = postVar('mySQL_usePrefix');\r
+       $mysql_prefix     = postVar('mySQL_tablePrefix');\r
+       $config_indexurl   = postVar('IndexURL');\r
+       $config_adminurl   = postVar('AdminURL');\r
+       $config_adminpath  = postVar('AdminPath');\r
+       $config_mediaurl   = postVar('MediaURL');\r
+       $config_skinsurl   = postVar('SkinsURL');\r
+       $config_pluginurl  = postVar('PluginURL');\r
+       $config_actionurl  = postVar('ActionURL');\r
+       $config_mediapath  = postVar('MediaPath');\r
+       $config_skinspath  = postVar('SkinsPath');\r
+       $user_name               = postVar('User_name');\r
+       $user_realname   = postVar('User_realname');\r
+       $user_password   = postVar('User_password');\r
+       $user_password2 = postVar('User_password2');\r
+       $user_email             = postVar('User_email');\r
+       $blog_name               = postVar('Blog_name');\r
+       $blog_shortname = postVar('Blog_shortname');\r
+       $charset                   = postVar('charset');\r
+       $config_adminemail = $user_email;\r
+       $config_sitename   = $blog_name;\r
+       $weblog_ping       = postVar('Weblog_ping');\r
+\r
+       $_POST = array();\r
+       if (!extension_loaded('mbstring')) {\r
+               include('../nucleus/libs/mb_emulator/mb-emulator.php');\r
+       }\r
+       if ($charset == 'ujis') {\r
+               define('_CHARSET', 'EUC-JP');\r
+               $config_sitename = mb_convert_encoding($config_sitename, _CHARSET, 'UTF-8');\r
+               $user_realname  = mb_convert_encoding($user_realname, _CHARSET, 'UTF-8');\r
+               $blog_name        = mb_convert_encoding($blog_name, _CHARSET, 'UTF-8');\r
+       } else {\r
+               define('_CHARSET', 'UTF-8');\r
+       }\r
+\r
+       $config_indexurl   = replaceDoubleBackslash($config_indexurl);\r
+       $config_adminurl   = replaceDoubleBackslash($config_adminurl);\r
+       $config_mediaurl   = replaceDoubleBackslash($config_mediaurl);\r
+       $config_skinsurl   = replaceDoubleBackslash($config_skinsurl);\r
+       $config_pluginurl  = replaceDoubleBackslash($config_pluginurl);\r
+       $config_actionurl  = replaceDoubleBackslash($config_actionurl);\r
+       $config_adminpath  = replaceDoubleBackslash($config_adminpath);\r
+       $config_skinspath  = replaceDoubleBackslash($config_skinspath);\r
+       $config_mediapath  = replaceDoubleBackslash($config_mediapath);\r
+\r
+       // 1. check all the data\r
+       $errors = array();\r
+\r
+       if (!$mysql_database) {\r
+               array_push($errors, _ERROR2);\r
+       }\r
+\r
+       if (($mysql_usePrefix == 1) && (strlen($mysql_prefix) == 0) ) {\r
+               array_push($errors, _ERROR3);\r
+       }\r
+\r
+       if (($mysql_usePrefix == 1) && (!eregi('^[a-zA-Z0-9_]+$', $mysql_prefix) ) ) {\r
+               array_push($errors, _ERROR4);\r
+       }\r
+\r
+       // TODO: add action.php check\r
+       if (!endsWithSlash($config_indexurl) || !endsWithSlash($config_adminurl) || !endsWithSlash($config_mediaurl) || !endsWithSlash($config_pluginurl) || !endsWithSlash($config_skinsurl) ) {\r
+               array_push($errors, _ERROR5);\r
+       }\r
+\r
+       if (!endsWithSlash($config_adminpath) ) {\r
+               array_push($errors, _ERROR6);\r
+       }\r
+\r
+       if (!endsWithSlash($config_mediapath) ) {\r
+               array_push($errors, _ERROR7);\r
+       }\r
+\r
+       if (!endsWithSlash($config_skinspath) ) {\r
+               array_push($errors, _ERROR8);\r
+       }\r
+\r
+       if (!is_dir($config_adminpath) ) {\r
+               array_push($errors, _ERROR9);\r
+       }\r
+\r
+       if (!_isValidMailAddress($user_email) ) {\r
+               array_push($errors, _ERROR10);\r
+       }\r
+\r
+       if (!_isValidDisplayName($user_name) ) {\r
+               array_push($errors, _ERROR11);\r
+       }\r
+\r
+       if (!$user_password || !$user_password2) {\r
+               array_push($errors, _ERROR12);\r
+       }\r
+\r
+       if ($user_password != $user_password2) {\r
+               array_push($errors, _ERROR13);\r
+       }\r
+\r
+       if (!_isValidShortName($blog_shortname) ) {\r
+               array_push($errors, _ERROR14);\r
+       }\r
+\r
+       if (sizeof($errors) > 0) {\r
+               showErrorMessages($errors);\r
+       }\r
+\r
+       // 2-1. try to log in to mySQL\r
+\r
+       global $MYSQL_CONN;\r
+       // this will need to be changed if we ever allow\r
+       $MYSQL_CONN = @sql_connect_args($mysql_host, $mysql_user, $mysql_password);\r
+\r
+       if ($MYSQL_CONN == false) {\r
+               _doError(_ERROR15 . ': ' . sql_error() );\r
+       }\r
+\r
+// <add for garble measure>\r
+       // 2-2. set DEFAULT CHARSET and COLLATE\r
+       $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));\r
+       if ($mySqlVer >= '5.0.7' && phpversion() >= '5.2.3') {\r
+               mysql_set_charset($charset);\r
+       } elseif ($mySqlVer >= '4.1.0') {\r
+               sql_query("SET NAMES " . $charset);\r
+       }\r
+       $collation = ($charset == 'utf8') ? 'utf8_unicode_ci' : 'ujis_japanese_ci';\r
+// </add for garble measure>*/\r
+\r
+       // 3. try to create database (if needed)\r
+       if ($mysql_create == 1) {\r
+               $sql = 'CREATE DATABASE '\r
+                        .       $mysql_database;\r
+// <add for garble measure>\r
+       if ($mySqlVer >= '4.1.0') {\r
+               $sql .= ' DEFAULT CHARACTER SET '\r
+                         .      $charset\r
+                         . ' COLLATE '\r
+                         .      $collation;\r
+       }\r
+// </add for garble measure>*/\r
+               sql_query($sql,$MYSQL_CONN) or _doError(_ERROR16 . ': ' . sql_error($MYSQL_CONN));\r
+       }\r
+\r
+       // 4. try to select database\r
+       sql_select_db($mysql_database,$MYSQL_CONN) or _doError(_ERROR17);\r
+\r
+       // 5. execute queries\r
+       $filename = 'install.sql';\r
+       $fd = fopen($filename, 'r');\r
+       $queries = fread($fd, filesize($filename) );\r
+       fclose($fd);\r
+\r
+       $queries = split("(;\n|;\r)", $queries);\r
+\r
+       $aTableNames = array(\r
+               'nucleus_actionlog',\r
+               'nucleus_ban',\r
+               'nucleus_blog',\r
+               'nucleus_category',\r
+               'nucleus_comment',\r
+               'nucleus_config',\r
+               'nucleus_item',\r
+               'nucleus_karma',\r
+               'nucleus_member',\r
+               'nucleus_plugin',\r
+               'nucleus_skin',\r
+               'nucleus_template',\r
+               'nucleus_team',\r
+               'nucleus_activation',\r
+               'nucleus_tickets'\r
+       );\r
+// these are unneeded (one of the replacements above takes care of them)\r
+//                     'nucleus_plugin_event',\r
+//                     'nucleus_plugin_option',\r
+//                     'nucleus_plugin_option_desc',\r
+//                     'nucleus_skin_desc',\r
+//                     'nucleus_template_desc',\r
+\r
+       $aTableNamesPrefixed = array(\r
+               $mysql_prefix . 'nucleus_actionlog',\r
+               $mysql_prefix . 'nucleus_ban',\r
+               $mysql_prefix . 'nucleus_blog',\r
+               $mysql_prefix . 'nucleus_category',\r
+               $mysql_prefix . 'nucleus_comment',\r
+               $mysql_prefix . 'nucleus_config',\r
+               $mysql_prefix . 'nucleus_item',\r
+               $mysql_prefix . 'nucleus_karma',\r
+               $mysql_prefix . 'nucleus_member',\r
+               $mysql_prefix . 'nucleus_plugin',\r
+               $mysql_prefix . 'nucleus_skin',\r
+               $mysql_prefix . 'nucleus_template',\r
+               $mysql_prefix . 'nucleus_team',\r
+               $mysql_prefix . 'nucleus_activation',\r
+               $mysql_prefix . 'nucleus_tickets'\r
+       );\r
+// these are unneeded (one of the replacements above takes care of them)\r
+//                     $mysql_prefix . 'nucleus_plugin_event',\r
+//                     $mysql_prefix . 'nucleus_plugin_option',\r
+//                     $mysql_prefix . 'nucleus_plugin_option_desc',\r
+//                     $mysql_prefix . 'nucleus_skin_desc',\r
+//                     $mysql_prefix . 'nucleus_template_desc',\r
+\r
+       $count = count($queries);\r
+\r
+       for ($idx = 0; $idx < $count; $idx++) {\r
+               $query = trim($queries[$idx]);\r
+               // echo "QUERY = " . htmlspecialchars($query) . "<p>";\r
+\r
+               if ($query) {\r
+\r
+                       if ($mysql_usePrefix == 1) {\r
+                                       $query = str_replace($aTableNames, $aTableNamesPrefixed, $query);\r
+                       }\r
+// <add for garble measure>\r
+                       if ($mysql_create != 1 && strpos($query, 'CREATE TABLE') === 0 && $mySqlVer >= '4.1.0') {\r
+                               $query .= ' DEFAULT CHARACTER SET ' . $charset . ' COLLATE ' . $collation;\r
+                       }\r
+// </add for garble measure>*/\r
+\r
+                       sql_query($query,$MYSQL_CONN) or _doError(_ERROR30 . ' (' . htmlspecialchars($query) . '): ' . sql_error($MYSQL_CONN) );\r
+               }\r
+       }\r
+\r
+       // 5a make first post\r
+       if ($charset == 'ujis') {\r
+               $itm_title = mb_convert_encoding(_1ST_POST_TITLE, _CHARSET, 'UTF-8');\r
+               $itm_body  = mb_convert_encoding(_1ST_POST, _CHARSET, 'UTF-8');\r
+               $itm_more  = mb_convert_encoding(_1ST_POST2, _CHARSET, 'UTF-8');\r
+       } else {\r
+               $itm_title = _1ST_POST_TITLE;\r
+               $itm_body  = _1ST_POST;\r
+               $itm_more  = _1ST_POST2;\r
+       }\r
+       $newpost = "INSERT INTO "\r
+                        . tableName('nucleus_item')\r
+                        . " VALUES ("\r
+                        . "1, "\r
+                        . "'" . $itm_title . "',"\r
+                        . " '" . $itm_body . "',"\r
+                        . " '" . $itm_more . "',"\r
+                        . " 1, 1, '2005-08-15 11:04:26', 0, 0, 0, 1, 0, 1);";\r
+       sql_query($newpost,$MYSQL_CONN) or _doError(_ERROR18 . ' (' . htmlspecialchars($newpost) . '): ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 6. update global settings\r
+       updateConfig('IndexURL',   $config_indexurl);\r
+       updateConfig('AdminURL',   $config_adminurl);\r
+       updateConfig('MediaURL',   $config_mediaurl);\r
+       updateConfig('SkinsURL',   $config_skinsurl);\r
+       updateConfig('PluginURL',  $config_pluginurl);\r
+       updateConfig('ActionURL',  $config_actionurl);\r
+       updateConfig('AdminEmail', $config_adminemail);\r
+       updateConfig('SiteName',   $config_sitename);\r
+       if ($charset == 'ujis') {\r
+               updateConfig('Language',   'japanese-euc');\r
+       }\r
+\r
+       // 7. update GOD member\r
+       $query = 'UPDATE ' . tableName('nucleus_member')\r
+                  . " SET mname         = '" . addslashes($user_name) . "',"\r
+                  . " mrealname         = '" . addslashes($user_realname) . "',"\r
+                  . " mpassword         = '" . md5(addslashes($user_password) ) . "',"\r
+                  . " murl               = '" . addslashes($config_indexurl) . "',"\r
+                  . " memail           = '" . addslashes($user_email) . "',"\r
+                  . " madmin           = 1,"\r
+                  . " mcanlogin         = 1"\r
+                  . " WHERE"\r
+                  . " mnumber     = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR19 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 8. update weblog settings\r
+       $query = 'UPDATE ' . tableName('nucleus_blog')\r
+                  . " SET bname  = '" . addslashes($blog_name) . "',"\r
+                  . " bshortname = '" . addslashes($blog_shortname) . "',"\r
+                  . " burl        = '" . addslashes($config_indexurl) . "'"\r
+                  . " WHERE"\r
+                  . " bnumber  = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 8-2. update category settings\r
+       if ($charset == 'ujis') {\r
+               $cat_name = mb_convert_encoding(_GENERALCAT_NAME, _CHARSET, 'UTF-8');\r
+               $cat_desc = mb_convert_encoding(_GENERALCAT_DESC, _CHARSET, 'UTF-8');\r
+       } else {\r
+               $cat_name = _GENERALCAT_NAME;\r
+               $cat_desc = _GENERALCAT_DESC;\r
+       }\r
+       $query = 'UPDATE ' . tableName('nucleus_category')\r
+                  . " SET cname  = '" . $cat_name . "',"\r
+                  . " cdesc      = '" . $cat_desc . "'"\r
+                  . " WHERE"\r
+                  . " catid      = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 9. update item date\r
+       $query = 'UPDATE ' . tableName('nucleus_item')\r
+                  . " SET   itime   = '" . date('Y-m-d H:i:s', time() ) ."'"\r
+                  . " WHERE inumber = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR21 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       global $aConfPlugsToInstall, $aConfSkinsToImport;\r
+       $aSkinErrors = array();\r
+       $aPlugErrors = array();\r
+\r
+       if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) {\r
+               // 10. set global variables\r
+               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_PREFIX;\r
+\r
+               $MYSQL_HOST      = $mysql_host;\r
+               $MYSQL_USER      = $mysql_user;\r
+               $MYSQL_PASSWORD = $mysql_password;\r
+               $MYSQL_DATABASE = $mysql_database;\r
+               $MYSQL_PREFIX   = ($mysql_usePrefix == 1) ? $mysql_prefix : '';\r
+\r
+               global $DIR_NUCLEUS, $DIR_MEDIA, $DIR_SKINS, $DIR_PLUGINS, $DIR_LANG, $DIR_LIBS;\r
+\r
+               $DIR_NUCLEUS = $config_adminpath;\r
+               $DIR_MEDIA   = $config_mediapath;\r
+               $DIR_SKINS   = $config_skinspath;\r
+               $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
+               $DIR_LANG       = $DIR_NUCLEUS . 'language/';\r
+               $DIR_LIBS       = $DIR_NUCLEUS . 'libs/';\r
+\r
+               // close database connection (needs to be closed if we want to include globalfunctions.php)\r
+               sql_close($MYSQL_CONN);\r
+\r
+               $manager = '';\r
+               include_once($DIR_LIBS . 'globalfunctions.php');\r
+\r
+               // 11. install custom skins\r
+               $aSkinErrors = installCustomSkins($manager);\r
+               $defskinQue  = 'SELECT `sdnumber` as result FROM ' . sql_table('skin_desc') . ' WHERE `sdname` = "default"';\r
+               $defSkinID   = quickQuery($defskinQue);\r
+               $updateQuery = 'UPDATE ' . sql_table('blog') . ' SET `bdefskin` = ' . intval($defSkinID) . ' WHERE `bnumber` = 1';\r
+               sql_query($updateQuery);\r
+               $updateQuery = 'UPDATE ' . sql_table('config') . ' SET `value` = ' . intval($defSkinID). ' WHERE `name` = "BaseSkin"';\r
+               sql_query($updateQuery);\r
+\r
+               // 12. install NP_Ping, if decided\r
+               if ($weblog_ping == 1) {\r
+                       global $aConfPlugsToInstall;\r
+                       array_push($aConfPlugsToInstall, "NP_Ping");\r
+               }\r
+\r
+               // 13. install custom plugins\r
+               $aPlugErrors = installCustomPlugs($manager);\r
+       }\r
+\r
+       // 14. Write config file ourselves (if possible)\r
+       $bConfigWritten = 0;\r
+\r
+       if (@file_exists('../config.php') && is_writable('../config.php') && $fp = @fopen('../config.php', 'w') ) {\r
+               $config_data = '<' . '?php' . "\n\n";\r
+               //$config_data .= "\n"; (extraneous, just added extra \n to previous line\r
+               $config_data .= "   // mySQL connection information\n";\r
+               $config_data .= "   \$MYSQL_HOST         = '" . $mysql_host . "';\n";\r
+               $config_data .= "   \$MYSQL_USER         = '" . $mysql_user . "';\n";\r
+               $config_data .= "   \$MYSQL_PASSWORD = '" . $mysql_password . "';\n";\r
+               $config_data .= "   \$MYSQL_DATABASE = '" . $mysql_database . "';\n";\r
+               $config_data .= "   \$MYSQL_PREFIX   = '" . (($mysql_usePrefix == 1) ? $mysql_prefix : '') . "';\n";\r
+               $config_data .= "   // new in 3.50. first element is db handler, the second is the db driver used by the handler\n";\r
+               $config_data .= "   // default is \$MYSQL_HANDLER = array('mysql','mysql');\n";\r
+               $config_data .= "   //\$MYSQL_HANDLER = array('mysql','mysql');\n";\r
+               $config_data .= "   //\$MYSQL_HANDLER = array('pdo','mysql');\n";\r
+               $config_data .= "   \$MYSQL_HANDLER = array('".$MYSQL_HANDLER[0]."','".$MYSQL_HANDLER[1]."');\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // main nucleus directory\n";\r
+               $config_data .= "   \$DIR_NUCLEUS = '" . $config_adminpath . "';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // path to media dir\n";\r
+               $config_data .= "   \$DIR_MEDIA   = '" . $config_mediapath . "';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // extra skin files for imported skins\n";\r
+               $config_data .= "   \$DIR_SKINS   = '" . $config_skinspath . "';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // these dirs are normally sub dirs of the nucleus dir, but \n";\r
+               $config_data .= "   // you can redefine them if you wish\n";\r
+               $config_data .= "   \$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";\r
+               $config_data .= "   \$DIR_LANG  = \$DIR_NUCLEUS . 'language/';\n";\r
+               $config_data .= "   \$DIR_LIBS  = \$DIR_NUCLEUS . 'libs/';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // include libs\n";\r
+               $config_data .= "   include(\$DIR_LIBS . 'globalfunctions.php');\n";\r
+               $config_data .= "   if (!extension_loaded('mbstring')) {\n";\r
+               $config_data .= "          include(\$DIR_LIBS . 'mb_emulator/mb-emulator.php');\n";\r
+               $config_data .= "   }\n";\r
+               $config_data .= "?" . ">";\r
+\r
+               $result = @fputs($fp, $config_data, strlen($config_data) );\r
+               fclose($fp);\r
+\r
+               if ($result) {\r
+                       $bConfigWritten = 1;\r
+               }\r
+       }\r
+\r
+?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title><?php echo _TITLE; ?></title>\r
+       <style>@import url('../nucleus/styles/manual.css');</style>\r
+</head>\r
+<body>\r
+       <div style='text-align:center'><img src='../nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
+\r
+<?php\r
+       $aAllErrors = array_merge($aSkinErrors, $aPlugErrors);\r
+\r
+       if (count($aAllErrors) > 0) {\r
+               echo '<h1>' . _TITLE2 . '</h1>';\r
+               echo '<ul><li>' . implode('</li><li>', $aAllErrors) . '</li></ul>';\r
+       }\r
+\r
+       if (!$bConfigWritten) { ?>\r
+               <h1><?php echo _TITLE3; ?></h1>\r
+\r
+               <? echo _TEXT10; ?>\r
+\r
+               <pre><code>&lt;?php\r
+       // mySQL connection information\r
+       $MYSQL_HOST      = '<b><?php echo $mysql_host?></b>';\r
+       $MYSQL_USER      = '<b><?php echo $mysql_user?></b>';\r
+       $MYSQL_PASSWORD = '<i><b>xxxxxxxxxxx</b></i>';\r
+       $MYSQL_DATABASE = '<b><?php echo $mysql_database?></b>';\r
+       $MYSQL_PREFIX   = '<b><?php echo ($mysql_usePrefix == 1)?$mysql_prefix:''?></b>';\r
+\r
+       // main nucleus directory\r
+       $DIR_NUCLEUS = '<b><?php echo $config_adminpath?></b>';\r
+\r
+       // path to media dir\r
+       $DIR_MEDIA   = '<b><?php echo $config_mediapath?></b>';\r
+\r
+       // extra skin files for imported skins\r
+       $DIR_SKINS   = '<b><?php echo $config_skinspath?></b>';\r
+\r
+       // these dirs are normally sub dirs of the nucleus dir, but\r
+       // you can redefine them if you wish\r
+       $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
+       $DIR_LANG       = $DIR_NUCLEUS . 'language/';\r
+       $DIR_LIBS       = $DIR_NUCLEUS . 'libs/';\r
+\r
+       // include libs\r
+       include($DIR_LIBS . 'globalfunctions.php');\r
+       if (!extension_loaded('mbstring')) {\r
+               include($DIR_LIBS . 'mb_emulator/mb-emulator.php');\r
+       }\r
+?&gt;</code></pre>\r
+\r
+       <?php echo _TEXT11; ?>\r
+\r
+       <div class="note">\r
+       <?php echo _TEXT12; ?>\r
+       </div>\r
+\r
+<?php } else { ?>\r
+\r
+       <h1><?php echo _TITLE4; ?></h1>\r
+\r
+       <?php echo _TEXT13; ?>\r
+\r
+<?php } ?>\r
+\r
+       <h1><?php echo _TITLE5; ?></h1>\r
+       \r
+       <?php echo _TEXT14; ?>\r
+\r
+       <ul>\r
+               <li><?php echo _TEXT14_L1; ?></li>\r
+               <li><?php echo _TEXT14_L2; ?></li>\r
+       </ul>\r
+\r
+       <h1><?php echo _HEADER10; ?></h1>\r
+\r
+       <?php echo _TEXT15; ?>\r
+\r
+               <ul>\r
+               <li><?php echo _TEXT15_L1; ?></li>\r
+               <li><?php echo _TEXT15_L2; ?></li>\r
+               <li><?php echo _TEXT15_L3; ?></li>\r
+               </ul>\r
+\r
+       <?php echo _TEXT16; ?>\r
+\r
+       <h1><?php echo _HEADER11; ?></h1>\r
+\r
+       <p><?php echo _TEXT16_H; ?>\r
+               <ul>\r
+                       <li><a href="<?php echo $config_adminurl?>"><?php echo _TEXT16_L1; ?></a></li>\r
+                       <li><a href="<?php echo $config_indexurl?>"><?php echo _TEXT16_L2; ?></a></li>\r
+               </ul>\r
+       </p>\r
+\r
+</body>\r
+</html>\r
+\r
+<?php\r
+}\r
+\r
+function installCustomPlugs(&$manager) {\r
+       global $aConfPlugsToInstall, $DIR_LIBS;\r
+\r
+       $aErrors = array();\r
+\r
+       if (count($aConfPlugsToInstall) == 0) {\r
+               return $aErrors;\r
+       }\r
+\r
+       $res = sql_query('SELECT * FROM ' . sql_table('plugin') );\r
+       $numCurrent = sql_num_rows($res);\r
+\r
+       foreach ($aConfPlugsToInstall as $plugName) {\r
+               // do this before calling getPlugin (in case the plugin id is used there)\r
+               $query = 'INSERT INTO ' . sql_table('plugin') . ' (porder, pfile) VALUES (' . (++$numCurrent) . ', "' . addslashes($plugName) . '")';\r
+               sql_query($query);\r
+\r
+               // get and install the plugin\r
+               $manager->clearCachedInfo('installedPlugins');\r
+               $plugin =& $manager->getPlugin($plugName);\r
+               $plugin->plugid = $numCurrent;\r
+\r
+               if (!$plugin) {\r
+                       sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pfile=\'' . addslashes($plugName) . '\'');\r
+                       $numCurrent--;\r
+                       array_push($aErrors, _ERROR22 . $plugName);\r
+                       continue;\r
+               }\r
+\r
+               $plugin->install();\r
+       }\r
+\r
+       // SYNC PLUGIN EVENT LIST\r
+       sql_query('DELETE FROM ' . sql_table('plugin_event') );\r
+\r
+       // loop over all installed plugins\r
+       $res = sql_query('SELECT pid, pfile FROM ' . sql_table('plugin') );\r
+\r
+       while($o = sql_fetch_object($res) ) {\r
+               $pid  =  $o->pid;\r
+               $plug =& $manager->getPlugin($o->pfile);\r
+\r
+               if ($plug) {\r
+                       $eventList = $plug->getEventList();\r
+\r
+                       foreach ($eventList as $eventName) {\r
+                               sql_query('INSERT INTO ' . sql_table('plugin_event') . ' (pid, event) VALUES (' . $pid . ', \'' . $eventName . '\')');\r
+                       }\r
+               }\r
+       }\r
+\r
+       return $aErrors;\r
+}\r
+\r
+function installCustomSkins(&$manager) {\r
+       global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;\r
+\r
+       $aErrors = array();\r
+       global $manager;\r
+       if (empty($manager)) {\r
+               $manager = new MANAGER;\r
+       }\r
+\r
+       if (count($aConfSkinsToImport) == 0) {\r
+               return $aErrors;\r
+       }\r
+\r
+       // load skinie class\r
+       include_once($DIR_LIBS . 'skinie.php');\r
+\r
+       $importer = new SKINIMPORT();\r
+\r
+       foreach ($aConfSkinsToImport as $skinName) {\r
+               $importer->reset();\r
+               $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';\r
+\r
+               if (!@file_exists($skinFile) ) {\r
+                       array_push($aErrors, _ERROR23_1 . $skinFile . ' : ' . _ERROR23_2);\r
+                       continue;\r
+               }\r
+\r
+               $error = $importer->readFile($skinFile);\r
+\r
+               if ($error) {\r
+                       array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error);\r
+                       continue;\r
+               }\r
+\r
+               $error = $importer->writeToDatabase(1);\r
+\r
+               if ($error) {\r
+                       array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error);\r
+                       continue;\r
+               }\r
+       }\r
+\r
+       return $aErrors;\r
+}\r
+\r
+// give an error if one or more nucleus are not accessible\r
+function doCheckFiles() {\r
+       $missingfiles = array();\r
+       $files = array(\r
+               'install.sql',\r
+               '../index.php',\r
+               '../action.php',\r
+               '../nucleus/index.php',\r
+               '../nucleus/libs/globalfunctions.php',\r
+               '../nucleus/libs/ADMIN.php',\r
+               '../nucleus/libs/BLOG.php',\r
+               '../nucleus/libs/COMMENT.php',\r
+               '../nucleus/libs/COMMENTS.php',\r
+               '../nucleus/libs/ITEM.php',\r
+               '../nucleus/libs/MEMBER.php',\r
+               '../nucleus/libs/SKIN.php',\r
+               '../nucleus/libs/TEMPLATE.php',\r
+               '../nucleus/libs/MEDIA.php',\r
+               '../nucleus/libs/ACTIONLOG.php',\r
+               '../nucleus/media.php'\r
+       );\r
+\r
+       $count = count($files);\r
+\r
+       for ($i = 0; $i < $count; $i++) {\r
+               if (!is_readable($files[$i]) ) {\r
+                       array_push($missingfiles, _ERROR25_1 . $files[$i] . _ERROR25_2);\r
+               }\r
+       }\r
+\r
+// The above code replaces several if statements of the form:\r
+\r
+//     if (!is_readable('install.sql') ) {\r
+//             array_push($missingfiles, 'File <b>install.sql</b> is missing or not readable');\r
+//     }\r
+\r
+       if (count($missingfiles) > 0) {\r
+               showErrorMessages($missingfiles);\r
+       }\r
+}\r
+\r
+function updateConfig($name, $val) {\r
+       global $MYSQL_CONN;\r
+       $name = addslashes($name);\r
+       $val  = trim(addslashes($val) );\r
+\r
+       $query = 'UPDATE ' . tableName('nucleus_config')\r
+                  . " SET   value = '$val'"\r
+                  . " WHERE name  = '$name'";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR26 . ': ' . sql_error($MYSQL_CONN) );\r
+       return sql_insert_id($MYSQL_CONN);\r
+}\r
+\r
+function replaceDoubleBackslash($input) {\r
+       return str_replace('\\', '/', $input);\r
+}\r
+\r
+function endsWithSlash($s) {\r
+       return (strrpos($s, '/') == strlen($s) - 1);\r
+}\r
+\r
+/**\r
+ * Checks if email address is valid\r
+ */\r
+function _isValidMailAddress($address) {\r
+       if (preg_match("/^[a-zA-Z0-9\._-]+@+[A-Za-z0-9\._-]+\.+[A-Za-z]{2,4}$/", $address) ) {\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+// returns true if the given string is a valid shortname\r
+// (to check short blog names and nicknames)\r
+// logic: starts and ends with a non space, can contain spaces in between\r
+//             min 2 chars\r
+function _isValidShortName($name) {\r
+       if (eregi("^[a-z0-9]+$", $name) ) {\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+\r
+\r
+// returns true if the given string is a valid display name\r
+// (to check nicknames)\r
+function _isValidDisplayName($name) {\r
+       if (eregi("^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$", $name) ) {\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+function _doError($msg) {\r
+       ?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title><?php echo _TITLE; ?></title>\r
+       <style>@import url('../nucleus/styles/manual.css');</style>\r
+</head>\r
+<body>\r
+       <div style='text-align:center'><img src='../nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
+       <h1><?php echo _ERROR27; ?></h1>\r
+\r
+       <p><?php echo _ERROR28; ?> "<?php echo $msg; ?>";</p>\r
+\r
+       <p><a href="index.php" onclick="history.back();"><?php echo _TEXT17; ?></a></p>\r
+</body>\r
+</html>\r
+\r
+<?php\r
+       exit;\r
+}\r
+\r
+function showErrorMessages($errors) {\r
+       ?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title><?php echo _TITLE; ?></title>\r
+       <style>@import url('../nucleus/styles/manual.css');</style>\r
+</head>\r
+<body>\r
+       <div style='text-align:center'><img src='../nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
+       <h1><?php echo _ERROR27; ?></h1>\r
+\r
+       <p><?php echo _ERROR29; ?>:</p>\r
+\r
+       <ul>\r
+\r
+<?php\r
+       while($msg = array_shift($errors) ) {\r
+               echo '<li>' . $msg . '</li>';\r
+       }\r
+?>\r
+\r
+       </ul>\r
+\r
+       <p><a href="index.php" onclick="history.back();return false;"><?php echo _TEXT17; ?></a></p>\r
+</body>\r
+</html>\r
+\r
+<?php\r
+       exit;\r
+}\r
+\r
+/* for the non-php systems that decide to show the contents:\r
+?></div><?php  */\r
+\r
+?>
\ No newline at end of file
similarity index 100%
rename from utf8/install.sql
rename to utf8/install/install.sql
similarity index 85%
rename from utf8/install_lang_japanese.php
rename to utf8/install/install_lang_japanese.php
index 0664a8b..dd50346 100644 (file)
@@ -15,8 +15,8 @@
  * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
  * @version $Id$\r
  */\r
-define('_HEADER1_2',                   '使用するキャラクタセット');\r
-define('_TEXT1_2',                             'NucleusCMSで使用するキャラクタセットを選択します。「UTF-8」か「EUC-JP」かを、セレクトボックスから選択してください。');\r
+define('_HEADER1_2',                   'キャラクタセット');\r
+define('_TEXT1_2',                             '使用するキャラクタセットを選択します。UTF-8を推奨します。');\r
 define('_TEXT1_2_TAB_HEAD',            'キャラクタセットの選択');\r
 define('_TEXT1_2_TAB_FIELD1',  'キャラクタセット');\r
 \r
@@ -34,7 +34,7 @@ define('_ERROR9_3',                           '<tt>action.php</tt>ファイルへのURLにファイル
 define('_ERROR10',                             'メールアドレスが不正です。');\r
 define('_ERROR11',                             '「表示される名前」に使用できない文字が含まれています。(使用できる文字:a-z と 0-9、最初と最後以外の空白)');\r
 define('_ERROR12',                             'パスワードが入力されていません。');\r
-define('_ERROR13',                             'å\85¥å\8a\9bã\81\95ã\82\8cã\81\9fäº\8cã\81¤ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81\8cä¸\80è\87´ã\81\97ã\81¾ã\81\9bã\82\93ã\81§ã\81\97ã\81\9fã\80\82');\r
+define('_ERROR13',                             '入力された二つのパスワードが一致しません。');\r
 define('_ERROR14',                             '「ブログの短縮名(略称)」に使用できない文字が含まれています。(使用できる文字:a-z と 0-9。空白は使用できません)');\r
 define('_ERROR15',                             'mySQL serverに接続できませんでした。');\r
 define('_ERROR16',                             'データベースを作成できませんでした。作成の権限があるかどうか確認してください。SQL エラーの内容:');\r
@@ -46,7 +46,7 @@ define('_ERROR21',                            '次のクエリの実行中にエラーが発生しまし
 define('_ERROR22',                             'プラグイン「%s」をインストールできませんでした。');\r
 define('_ERROR23_1',                   'テーマファイル「%s」が読み込めませんでした。');\r
 define('_ERROR23_2',                   'ファイルが見つかりません。');\r
-define('_ERROR24',                             'テーマ「%s」をインポート出来ませんでした。');\r
+define('_ERROR24',                             'テーマ「%s」をインポートできませんでした。');\r
 define('_ERROR25_1',                   'プログラムのコアファイル <b>');\r
 define('_ERROR25_2',                   '</b> が見つからない、もしくは読み出し禁止になっています。');\r
 define('_ERROR26',                             '設定の更新中にエラーが発生しました。実行したクエリは次の通りです:');\r
@@ -64,7 +64,7 @@ define('_TITLE4',                             'インストールは完了しました!');
 define('_TITLE5',                              'スパムとの戦い');\r
 \r
 define('_HEADER1',                             'Nucleusのインストール');\r
-define('_TEXT1',                               '<p>このスクリプトはNucleusのインストールを手助けします。MySQLテーブルのセットアップと、<i>config.php</i>に入力するための情報を表示します(config.phpのパーミッションを0666にしておけば、後者の作業は自動的に行われます)。これをなす為に、いくつかの情報を入力する必要があります。</p><p>すべての欄の入力が必要です。オプション情報は、インストールが完了後Nucleusの管理領域から設定可能です。</p>');\r
+define('_TEXT1',                               '<p>MySQLテーブルのセットアップと、config.php に入力するための情報を表示します(config.phpのパーミッションを0666にしておけば、後者の作業は自動的に行われます)。これをなす為に、いくつかの情報を入力する必要があります。</p><p>すべての欄の入力が必要です。オプション情報は、インストールが完了後Nucleusの管理領域から設定可能です。</p>');\r
 \r
 define('_HEADER2',                             'PHP と MySQL のバージョン');\r
 define('_TEXT2',                               '<p>以下はあなたのウェブホストにおけるPHPとMySQLサーバーのバージョンです。Nucleusのサポートフォーラムに問題を報告する時は、この情報を書き添えてください。</p>');\r
@@ -72,11 +72,11 @@ define('_TEXT2_WARN',                       ' 注意: Nucleusの動作には少なくともバージ
 define('_TEXT2_WARN2',                 ' 注意: Nucleusの動作には少なくともバージョン %s が必要です');\r
 define('_TEXT2_WARN3',                 '警告! 動作しているPHPのバージョンが古いようです!次にリリースされるNucleusCMSではPHP4はサポートされません!早急にPHP5にアップグレードしてください!');\r
 \r
-define('_HEADER3',                             '<i>config.php</i>の自動設定');\r
-define('_TEXT3',                               '<em>config.php</em>のパーミッションを<strong>666</strong>にしておけば、スクリプトが自動で設定情報を書き込みます。ただし、Nucleusのインストール完了後、<strong><em style="font-color:#f00;">必ず</em></strong>パーミッションを<strong>444</strong>に変更してください(<a href="nucleus/documentation/tips.html#filepermissions">パーミッション変更の簡易ガイド</a>)。</p><p>スクリプトに書き込み権限を与えなくても、インストール中に<em>config.php</em>に書き込むべき内容が表示されるので、内容を書き換えてFTP等でアップロードすれば問題ありません。');\r
+define('_HEADER3',                             'config.phpの自動設定');\r
+define('_TEXT3',                               '<strong style="color:red;">config.phpへの書き込みができません。</strong>config.phpのパーミッションを<strong>666</strong>にしておけば、スクリプトが自動で設定情報を書き込みます。ただし、Nucleusのインストール完了後、<strong><em style="font-color:#f00;">必ず</em></strong>パーミッションを<strong>444</strong>に変更してください(<a href="nucleus/documentation/tips.html#filepermissions">パーミッション変更の簡易ガイド</a>)。</p>');\r
 \r
-define('_HEADER4',                             'MySQLのログインデータ');\r
-define('_TEXT4',                               '<p>MySQLのデータを以下に入力してください。それらはデータベース・テーブルを作成し情報を入力するために必要なものです。後で、<i>config.php</i>にも記入する必要があります(上記の自動設定を利用する場合、その手順は省略されます)。</p><p>もしこの情報がわからなければ、システム管理者かホスティング元に連絡をとってください。ほとんどの場合、ホスト名は「localhost」です。もしNucleusがあなたのサーバのPHP設定から「default MySQL host」を検知したなら、「ホスト名」に既に記入されているはずです。もっとも、この情報が正確であるという保証はありません。</p>');\r
+define('_HEADER4',                             'MySQLのログイン情報');\r
+define('_TEXT4',                               '<p>データベースのログイン情報を入力してください。この情報が分からない場合は、システム管理者かホスティング元に確認をとってください。ほとんどの場合、ホスト名は「localhost」です。もしNucleusがあなたのサーバのPHP設定から「default MySQL host」を検出していれば「ホスト名」に既に記入されているはずですが、この情報が正確であるという保証はありません。</p>');\r
 define('_TEXT4_TAB_HEAD',              '基本のデータベース設定');\r
 define('_TEXT4_TAB_FIELD1',            'ホスト名:');\r
 define('_TEXT4_TAB_FIELD2',            'ユーザー名:');\r
@@ -85,11 +85,11 @@ define('_TEXT4_TAB_FIELD4',         'データベース名:');
 define('_TEXT4_TAB_FIELD4_ADD',        'データベースを作成する必要がある');\r
 \r
 define('_TEXT4_TAB2_HEAD',             '高度なデータベース設定');\r
-define('_TEXT4_TAB2_FIELD',            'テーブル・プリフィックスを使用する:');\r
-define('_TEXT4_TAB2_ADD',              '<p>一つのデータベースに複数のNucleusをインストールし、自分が何をやっているのか理解している場合を除き、<strong>これを変更する必要はありません</strong>。</p><p>Nucleusによって生成されたすべてのデータベーステーブルは、このプリフィックスが頭につきます。</p>');\r
+define('_TEXT4_TAB2_FIELD',            '異なるテーブル・プリフィックスを使用する:');\r
+define('_TEXT4_TAB2_ADD',              '<p><strong>通常はここを変更する必要はありません。</strong>ひとつのデータベースに複数のNucleusをインストールしたい場合にこの設定を用います。</p>');\r
 \r
 define('_HEADER5',                             'ディレクトリとURL');\r
-define('_TEXT5',                               '<p>ã\81\93ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82¹ã\82¯ã\83ªã\83\97ã\83\88ã\81¯Nucleusã\81\8cã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81¨URLã\82\92è¦\8bã\81¤ã\81\91ã\82\88ã\81\86ã\81¨ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82ä¸\8bã\81®å\80¤ã\82\92ã\83\81ã\82§ã\83\83ã\82¯ã\81\97ã\81¦å¿\85è¦\81ã\81ªã\82\89è¨\82æ­£ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81®ã\83\91ã\82¹ã\81¨URLã\81¯ã\82¹ã\83©ã\83\83ã\82·ã\83¥\'/\'ã\81§çµ\82ã\82\8fã\82\89ã\81ªã\81\8fã\81¦ã\81¯ã\81ªã\82\8aã\81¾ã\81\9bã\82\93。</p>');\r
+define('_TEXT5',                               '<p>ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81¨URLã\82\92ä¸\8bè¨\98ã\81®è¨­å®\9aã\81§ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81¾ã\81\99ã\80\82ç\89¹æ®\8aã\81ªã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªæ§\8bæ\88\90ã\81§é\81\8bç\94¨ã\81\97ã\81\9fã\81\84å ´å\90\88ã\81¯ã\80\81ã\81\93ã\81\93ã\81§å¤\89æ\9b´ã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81®ã\83\91ã\82¹å\8f\8aã\81³URLã\81¯ã\82¹ã\83©ã\83\83ã\82·ã\83¥ã\80\8c\80\8dã\81§é\96\89ã\81\98ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。</p>');\r
 \r
 define('_TEXT5_TAB_HEAD',              'ディレクトリとURL');\r
 define('_TEXT5_TAB_FIELD1',            'サイトの<strong>URL</strong>:');\r
@@ -112,12 +112,12 @@ define('_TEXT6_TAB_FIELD1',               '表示される名前(ログインID):');
 define('_TEXT6_TAB_FIELD1_2',  '使用できる文字:a-z と 0-9、最初と最後以外の空白');\r
 define('_TEXT6_TAB_FIELD2',            '本名(ハンドル名):');\r
 define('_TEXT6_TAB_FIELD3',            'パスワード:');\r
-define('_TEXT6_TAB_FIELD4',            'パスワード(確認の為にもういちど入力してください):');\r
+define('_TEXT6_TAB_FIELD4',            'パスワード(確認入力):');\r
 define('_TEXT6_TAB_FIELD5',            'メールアドレス:');\r
 define('_TEXT6_TAB_FIELD5_2',  '利用可能なメールアドレスを入れてください');\r
 \r
 define('_HEADER7',                             'ブログのデータ');\r
-define('_TEXT7',                               '<p>以下に、デフォルトのWeblogを作成するための情報を入力してください。このWeblogの名前は、サイト名としても利用されます。</p>');\r
+define('_TEXT7',                               '<p>デフォルトのブログを作成するための情報を入力してください。このブログの名前は、サイト名としても利用されます。</p>');\r
 define('_TEXT7_TAB_HEAD',              'ブログのデータ');\r
 define('_TEXT7_TAB_FIELD1',            'ブログの名前:');\r
 define('_TEXT7_TAB_FIELD2',            'ブログの短縮名(略称):');\r
@@ -129,7 +129,7 @@ define('_TEXT8_TAB_HEADER',         '更新Ping');
 define('_TEXT8_TAB_PLUGINDEP', '以下のプラグインに依存します。%s'); //<addsatona date="2008-09-03" />\r
 //define('_TEXT8_TAB_HEADER',          'プラグインの選択');\r
 define('_TEXT8_TAB_HEADER2',   'テーマの選択');\r
-define('_TEXT8_TAB_FIELD1',            'æ\9b´æ\96°Pingé\80\81ä¿¡ã\81®ã\81\9fã\82\81ã\81«ã\80\81NP_Pingã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81¾ã\81\99ã\81\8bï¼\9f\81\93ã\81®ã\83\97ã\83©ã\82°ã\82¤ã\83³ã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81ªã\81\8fã\81¦ã\82\82ã\80\81ä»\96ã\81®ã\83\97ã\83©ã\82°ã\82¤ã\83³ã\81§æ\9b´æ\96°Pingã\82\92é\80\81ä¿¡ã\81\99ã\82\8bäº\8bã\81¯å\87ºæ\9d¥ã\81¾ã\81\99)');\r
+define('_TEXT8_TAB_FIELD1',            'æ\9b´æ\96°Pingé\80\81ä¿¡ã\83\97ã\83©ã\82°ã\82¤ã\83³ <a href="http://www.google.com/search?hl=ja&q=NP_Ping&lr=lang_ja" target="_blank">NP_Ping</a> ã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\99ã\82\8b (æ\9b´æ\96°Pingã\82\92é\80\81ä¿¡ã\81\99ã\82\8bã\83\97ã\83©ã\82°ã\82¤ã\83³ã\81¯ä»\96ã\81«ã\82\82ã\81\82ã\82\8aã\81¾ã\81\99ã\80\82)');\r
 \r
 define('_HEADER9',                             'データの送信');\r
 define('_TEXT9',                               '<p>上に書いてきたデータが正しいか確かめてください。よければデータベース・テーブルと最初のデータを設定するために下のボタンを押してください。少し時間がかかるかもしれませんがご辛抱を。<strong>ボタンをクリックするのは一回だけにしてください。</strong></p>');\r
@@ -138,16 +138,16 @@ define('_TEXT10',                         '<p>データベーステーブルの初期値入力が成
 define('_TEXT11',                              '<p>あなたのコンピュータ上のファイルを書き換えたら、FTPを使ってウェブサーバにアップロードしてください。ASCIIモードで送信してファイルを上書きします。</p>');\r
 define('_TEXT12',                              '<b>付記:</b> <i>config.php</i>の最初や終わりにスペースを空けないようにしましょう。実行時にエラーを引き起こす原因となります。<br />したがって、config.phpの最初の文字は "&lt;"で最後の文字は"&gt;"としなければなりません。');\r
 define('_TEXT13',                              '<p>Nucleusはインストールされ、<code>config.php</code>はアップデートされました。</p><p>セキュリティのため<code>config.php</code>のパーミッションを444に戻すことを忘れないでください(<a href="nucleus/documentation/tips.html#filepermissions">パーミッション変更の簡易ガイド</a>)。</p>');\r
-define('_TEXT14',                              '<p>Nucleusは誰でもブログにコメントを残す事が出来る様になっているので、このままではスパマーの温床になる危険があります。以下の方法によってブログを保護することをお勧めします:</p>');\r
-define('_TEXT14_L1',                   'あなたがコメントを必要としないのであれば、管理エリアから「あなたのブログ」 &gt; 「ブログ設定」 とたどり、 「コメントを許可しますか?」 の設定を「いいえ」にする事で、コメント投稿フォームを非表示にする事が出来ます。');\r
+define('_TEXT14',                              '<p>Nucleusは誰でもブログにコメントを残すことができる様になっているので、このままではスパムの温床になる危険があります。以下の方法によってブログを保護することをお勧めします:</p>');\r
+define('_TEXT14_L1',                   'あなたがコメントを必要としないのであれば、管理エリアから「あなたのブログ」 &gt; 「ブログ設定」 とたどり、 「コメントを許可しますか?」 の設定を「いいえ」にすることで、コメント投稿フォームを非表示にすることができます。');\r
 define('_TEXT14_L2',                   'スパムを撃退・管理する為のプラグインをインストールすることも可能です:<a href="http://japan.nucleuscms.org/wiki/plugins_by_category#supamutsuru">Nucleus Japan wiki</a> (ブックマークをお勧めします)');\r
 define('_HEADER10',                            'インストールファイルの削除');\r
-define('_TEXT15',                              '<p>ウェブサーバから次のファイルを削除してください:</p>');\r
+define('_TEXT15',                              '<p>ウェブサーバから /install/ ディレクトリを削除してください:</p>');\r
 define('_TEXT15_L1',                   '<b>install.sql</b>:テーブルの構造を内包するファイル');\r
-define('_TEXT15_L2',                   '<b>install.php</b>:このファイル');\r
+define('_TEXT15_L2',                   '<b>install/index.php</b>:このファイル');\r
 \r
 define('_TEXT15_L3',                   '<b>install_lang_japanese.php</b>:インストーラの言語ファイル');\r
-define('_TEXT16',                      '<p>ã\82\82ã\81\97ã\81\93ã\82\8cã\82\89ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92å\89\8aé\99¤ã\81\97ã\81¦ã\81\84ã\81ªã\81\91ã\82\8cã\81°ã\80\81管ç\90\86é \98å\9f\9fã\82\92é\96\8bã\81\8fã\81\93ã\81¨ã\81\8cå\87ºæ\9d¥ません。</p>');\r
+define('_TEXT16',                      '<p>ã\82\82ã\81\97ã\81\93ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92å\89\8aé\99¤ã\81\97ã\81¦ã\81\84ã\81ªã\81\91ã\82\8cã\81°ã\80\81管ç\90\86é \98å\9f\9fã\82\92é\96\8bã\81\8fã\81\93ã\81¨ã\81\8cã\81§ã\81\8dません。</p>');\r
 \r
 define('_HEADER11',                            'ウェブサイトの確認');\r
 define('_TEXT16_H',                            'ウェブサイトを使う準備が整いました。');\r
@@ -156,15 +156,15 @@ define('_TEXT16_L2',                      'すぐにサイトへ行ってみる');
 \r
 define('_TEXT17',                              '戻る');\r
 \r
-define('_BUTTON1',                             'Nucleus CMSのインストール');\r
+define('_BUTTON1',                             'インストールを実行する');\r
 \r
 // General category\r
 define('_GENERALCAT_NAME',             '総合');\r
 define('_GENERALCAT_DESC',             '投稿した記事に合うカテゴリが無い時にこのカテゴリを使用すると良いでしょう');\r
 \r
-define('_1ST_POST_TITLE',              'Nucleus CMS バージョン3.50へようこそ');\r
-define('_1ST_POST',                            'ã\82¦ã\82§ã\83\96ã\83\9aã\83¼ã\82¸ã\81®ä½\9cæ\88\90ã\82\92è£\9cå\8a©ã\81\99ã\82\8bç©\8dã\81¿æ\9c¨ã\81\8cã\81\93ã\81\93ã\81«ã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\81\9dã\82\8cã\81¯å¿\83èº\8dã\82\8bblogã\81«ã\81ªã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ã\81\97ã\80\81観ã\82\8bã\82\82ã\81®ã\82\92å\92\8cã\81¾ã\81\9bã\82\8b家æ\97\8fã\81®ã\83\9aã\83¼ã\82¸ã\81«ã\81ªã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ã\81\97ã\80\81å®\9fã\82\8aå¤\9aã\81\8d趣味のサイトになるかもしれません。あるいは現在のあなたには想像がつかないものになることだってあるでしょう。<br />\r
-<br />用途が思いつきませんでしたか? それならここへ来て正解です。なぜならあなた同様私たちにもわからないのですから。');\r
+define('_1ST_POST_TITLE',              'Nucleus CMS バージョン3.51へようこそ');\r
+define('_1ST_POST',                            'ã\82¦ã\82§ã\83\96ã\82µã\82¤ã\83\88ã\81®ä½\9cæ\88\90ã\82\92è£\9cå\8a©ã\81\99ã\82\8bç©\8dã\81¿æ\9c¨ã\81\8cã\81\93ã\81\93ã\81«ã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\81\9dã\82\8cã\81¯å¿\83èº\8dã\82\8bã\83\96ã\83­ã\82°ã\81«ã\81ªã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ã\81\97ã\80\81è¦\8bã\82\8b人ã\82\92å\92\8cã\81¾ã\81\9bã\82\8b家æ\97\8fã\81®ã\82µã\82¤ã\83\88ã\81«ã\81ªã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ã\81\97ã\80\81å®\9fã\82\8aå¤\9aã\81\84趣味のサイトになるかもしれません。あるいは現在のあなたには想像がつかないものになることだってあるでしょう。<br />\r
+<br />用途が思いつきませんでしたか? それならここへ来て正解です。なぜならあなた同様私たちにもわからないのですから。');\r
 define('_1ST_POST2',                   'これはサイトにおける最初のエントリーです。スタートを切りやすいように、リンクと情報を入れておきました。<br />\r
 <br />\r
 この記事を削除することもできますが、どちらにせよ記事を追加していくことによってやがてメインページからは見えなくなります。Nucleusを扱ううちに生じたメモをコメントとして追加し、将来アクセスできるようにこのページをブックマークしておくのも手です。<br />\r
index f583be3..7f01912 100755 (executable)
@@ -29,22 +29,22 @@ include('../config.php');
 $action = requestVar('action');
 
 if ($action == 'contextmenucode') {
-    bm_doContextMenuCode();
-    exit;
+       bm_doContextMenuCode();
+       exit;
 }
 
 if (!$member->isLoggedIn() ) {
-    bm_loginAndPassThrough();
-    exit;
+       bm_loginAndPassThrough();
+       exit;
 }
 
 // on successfull login
 if ( ($action == 'login') && ($member->isLoggedIn() ) ) {
-    $action = requestVar('nextaction');
+       $action = requestVar('nextaction');
 }
 
 if ($action == '') {
-    $action = 'add';
+       $action = 'add';
 }
 
 sendContentType('text/html', 'bookmarklet-' . $action);
@@ -55,318 +55,318 @@ $aActionsNotToCheck = array('login', 'add', 'edit');
 
 if (!in_array($action, $aActionsNotToCheck) ) {
 
-    if (!$manager->checkTicket() ) {
-        bm_doError(_ERROR_BADTICKET);
-    }
+       if (!$manager->checkTicket() ) {
+               bm_doError(_ERROR_BADTICKET);
+       }
 
 }
 
 // find out what to do
 switch ($action) {
-    // adds the item for real
-    case 'additem':
-        bm_doAddItem();
-        break;
-
-    // shows the edit item form
-    case 'edit':
-        bm_doEditForm();
-        break;
-
-    // edits the item for real
-    case 'edititem':
-        bm_doEditItem();
-        break;
-
-    // on login, 'action' gets changed to 'nextaction'
-    case 'login':
-        bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG);
-        break;
-
-    // shows the fill in form
-    case 'add':
-    default:
-        bm_doShowForm();
-        break;
+       // adds the item for real
+       case 'additem':
+               bm_doAddItem();
+               break;
+
+               // shows the edit item form
+       case 'edit':
+               bm_doEditForm();
+               break;
+
+               // edits the item for real
+       case 'edititem':
+               bm_doEditItem();
+               break;
+
+               // on login, 'action' gets changed to 'nextaction'
+       case 'login':
+               bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG);
+               break;
+
+               // shows the fill in form
+       case 'add':
+       default:
+               bm_doShowForm();
+               break;
 }
 
 function bm_doAddItem() {
-    global $member, $manager, $CONF;
-
-    $manager->loadClass('ITEM');
-    $result = ITEM::createFromRequest();
-
-    if ($result['status'] == 'error') {
-        bm_doError($result['message']);
-    }
-
-    $blogid = getBlogIDFromItemID($result['itemid']);
-    $blog =& $manager->getBlog($blogid);
-
-    if ($result['status'] == 'newcategory') {
-        $href      = 'index.php?action=categoryedit&amp;blogid=' . $blogid . '&amp;catid=' . $result['catid'];
-        $onclick   = 'if (event &amp;&amp; event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
-        $title     = _BOOKMARKLET_NEW_WINDOW;
-        $aTag      = ' <a href="' . $href . '" onclick="' . $onclick . '" title="' . $title . '">';
-        $message   = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>';
-        $extrahead = '';
-    } else {
-        $message = _ITEM_ADDED;
-        $extrahead = '';
-    }
-
-    bm_message(_ITEM_ADDED, _ITEM_ADDED, $message,$extrahead);
+       global $member, $manager, $CONF;
+
+       $manager->loadClass('ITEM');
+       $result = ITEM::createFromRequest();
+
+       if ($result['status'] == 'error') {
+               bm_doError($result['message']);
+       }
+
+       $blogid = getBlogIDFromItemID($result['itemid']);
+       $blog =& $manager->getBlog($blogid);
+
+       if ($result['status'] == 'newcategory') {
+               $href      = 'index.php?action=categoryedit&amp;blogid=' . $blogid . '&amp;catid=' . $result['catid'];
+               $onclick   = 'if (event &amp;&amp; event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
+               $title     = _BOOKMARKLET_NEW_WINDOW;
+               $aTag      = ' <a href="' . $href . '" onclick="' . $onclick . '" title="' . $title . '">';
+               $message   = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>';
+               $extrahead = '';
+       } else {
+               $message = _ITEM_ADDED;
+               $extrahead = '';
+       }
+
+       bm_message(_ITEM_ADDED, _ITEM_ADDED, $message,$extrahead);
 }
 
 function bm_doEditItem() {
-    global $member, $manager, $CONF;
-
-    $itemid = intRequestVar('itemid');
-    $catid = postVar('catid');
-
-    // only allow if user is allowed to alter item
-    if (!$member->canUpdateItem($itemid, $catid) ) {
-        bm_doError(_ERROR_DISALLOWED);
-    }
-
-    $body = postVar('body');
-    $title = postVar('title');
-    $more = postVar('more');
-    $closed = intPostVar('closed');
-    $actiontype = postVar('actiontype');
-    $draftid = intPostVar('draftid');
-
-    // redirect to admin area on delete (has delete confirmation)
-    if ($actiontype == 'delete') {
-        redirect('index.php?action=itemdelete&itemid=' . $itemid);
-        exit;
-    }
-
-    // create new category if needed (only on edit/changedate)
-    if (strstr($catid,'newcat') ) {
-        // get blogid
-        list($blogid) = sscanf($catid, "newcat-%d");
-
-        // create
-        $blog =& $manager->getBlog($blogid);
-        $catid = $blog->createNewCategory();
-
-        // show error when sth goes wrong
-        if (!$catid) {
-            bm_doError(_BOOKMARKLET_ERROR_COULDNTNEWCAT);
-        }
-    }
-
-    // only edit action is allowed for bookmarklet edit
-    switch ($actiontype) {
-        case 'changedate':
-            $publish = 1;
-            $wasdraft = 0;
-            $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year') );
-            break;
-        case 'edit':
-            $publish = 1;
-            $wasdraft = 0;
-            $timestamp = 0;
-            break;
-        case 'backtodrafts':
-            $publish = 0;
-            $wasdraft = 0;
-            $timestamp = 0;
-            break;
-        default:
-            bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG);
-    }
-
-    // update item for real
-    ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
-
-    if ($draftid > 0) {
-        ITEM::delete($draftid);
-    }
-
-    // show success message
-    if ($catid != intPostVar('catid') ) {
-        $href      = 'index.php?action=categoryedit&amp;blogid=' . $blog->getID() . '&amp;catid=' . $catid;
-        $onclick   = 'if (event &amp;&amp; event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
-        $title     = _BOOKMARKLET_NEW_WINDOW;
-        $aTag      = ' <a href="' . $href . '" onclick="' . $onclick . '" title="' . $title . '">';
-        $message   = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>';
-        bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>', '');
-    } else {
-        bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _ITEM_UPDATED, '');
-    }
+       global $member, $manager, $CONF;
+
+       $itemid = intRequestVar('itemid');
+       $catid = postVar('catid');
+
+       // only allow if user is allowed to alter item
+       if (!$member->canUpdateItem($itemid, $catid) ) {
+               bm_doError(_ERROR_DISALLOWED);
+       }
+
+       $body = postVar('body');
+       $title = postVar('title');
+       $more = postVar('more');
+       $closed = intPostVar('closed');
+       $actiontype = postVar('actiontype');
+       $draftid = intPostVar('draftid');
+
+       // redirect to admin area on delete (has delete confirmation)
+       if ($actiontype == 'delete') {
+               redirect('index.php?action=itemdelete&itemid=' . $itemid);
+               exit;
+       }
+
+       // create new category if needed (only on edit/changedate)
+       if (strstr($catid,'newcat') ) {
+               // get blogid
+               list($blogid) = sscanf($catid, "newcat-%d");
+
+               // create
+               $blog =& $manager->getBlog($blogid);
+               $catid = $blog->createNewCategory();
+
+               // show error when sth goes wrong
+               if (!$catid) {
+                       bm_doError(_BOOKMARKLET_ERROR_COULDNTNEWCAT);
+               }
+       }
+
+       // only edit action is allowed for bookmarklet edit
+       switch ($actiontype) {
+               case 'changedate':
+                       $publish = 1;
+                       $wasdraft = 0;
+                       $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year') );
+                       break;
+               case 'edit':
+                       $publish = 1;
+                       $wasdraft = 0;
+                       $timestamp = 0;
+                       break;
+               case 'backtodrafts':
+                       $publish = 0;
+                       $wasdraft = 0;
+                       $timestamp = 0;
+                       break;
+               default:
+                       bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG);
+       }
+
+       // update item for real
+       ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
+
+       if ($draftid > 0) {
+               ITEM::delete($draftid);
+       }
+
+       // show success message
+       if ($catid != intPostVar('catid') ) {
+               $href      = 'index.php?action=categoryedit&amp;blogid=' . $blog->getID() . '&amp;catid=' . $catid;
+               $onclick   = 'if (event &amp;&amp; event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
+               $title     = _BOOKMARKLET_NEW_WINDOW;
+               $aTag      = ' <a href="' . $href . '" onclick="' . $onclick . '" title="' . $title . '">';
+               $message   = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>';
+               bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>', '');
+       } else {
+               bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _ITEM_UPDATED, '');
+       }
 }
 
 function bm_loginAndPassThrough() {
 
-    $blogid = intRequestVar('blogid');
-    $log_text = requestVar('logtext');
-    $log_link = requestVar('loglink');
-    $log_linktitle = requestVar('loglinktitle');
+       $blogid = intRequestVar('blogid');
+       $log_text = requestVar('logtext');
+       $log_link = requestVar('loglink');
+       $log_linktitle = requestVar('loglinktitle');
 
-    ?>
+       ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-    <html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
-        <title>Nucleus</title>
-        <?php bm_style(); ?>
-    </head>
-    <body>
-    <h1><?php echo _LOGIN_PLEASE ?></h1>
-
-    <form method="post" action="bookmarklet.php">
-    <p>
-        <input name="action" value="login" type="hidden" />
-        <input name="blogid" value="<?php echo htmlspecialchars($blogid); ?>" type="hidden" />
-        <input name="logtext" value="<?php echo htmlspecialchars($log_text); ?>" type="hidden" />
-        <input name="loglink" value="<?php echo htmlspecialchars($log_link); ?>" type="hidden" />
-        <input name="loglinktitle" value="<?php echo htmlspecialchars($log_linktitle); ?>" type="hidden" />
-        <?php echo _LOGINFORM_NAME ?>
-        <br /><input name="login" />
-        <br /><?php echo _LOGINFORM_PWD ?>
-        <br /><input name="password" type="password" />
-        <br /><br />
-        <br /><input type="submit" value="<?php echo _LOGIN ?>" />
-    </p>
-    </form>
-    <p><a href="bookmarklet.php" onclick="window.close();"><?php echo _POPUP_CLOSE ?></a></p>
-    </body>
-    </html>
-    <?php
+<html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
+<title>Nucleus</title>
+       <?php bm_style(); ?>
+</head>
+<body>
+<h1><?php echo _LOGIN_PLEASE ?></h1>
+
+<form method="post" action="bookmarklet.php">
+       <p>
+               <input name="action" value="login" type="hidden" />
+               <input name="blogid" value="<?php echo htmlspecialchars($blogid); ?>" type="hidden" />
+               <input name="logtext" value="<?php echo htmlspecialchars($log_text); ?>" type="hidden" />
+               <input name="loglink" value="<?php echo htmlspecialchars($log_link); ?>" type="hidden" />
+               <input name="loglinktitle" value="<?php echo htmlspecialchars($log_linktitle); ?>" type="hidden" />
+               <?php echo _LOGINFORM_NAME ?>
+               <br /><input name="login" />
+               <br /><?php echo _LOGINFORM_PWD ?>
+               <br /><input name="password" type="password" />
+               <br /><br />
+               <br /><input type="submit" value="<?php echo _LOGIN ?>" />
+       </p>
+</form>
+<p><a href="bookmarklet.php" onclick="window.close();"><?php echo _POPUP_CLOSE ?></a></p>
+</body>
+</html>
+       <?php
 }
 
 function bm_doShowForm() {
-    global $member;
+       global $member;
 
-    $blogid = intRequestVar('blogid');
-    $log_text = trim(requestVar('logtext'));
-    $log_link = requestVar('loglink');
-    $log_linktitle = requestVar('loglinktitle');
+       $blogid = intRequestVar('blogid');
+       $log_text = trim(requestVar('logtext'));
+       $log_link = requestVar('loglink');
+       $log_linktitle = requestVar('loglinktitle');
 
-    $log_text = uniDecode($log_text,_CHARSET);
-    $log_linktitle = uniDecode($log_linktitle,_CHARSET);
-    
-    if (!BLOG::existsID($blogid) ) {
-        bm_doError(_ERROR_NOSUCHBLOG);
-    }
+       $log_text = uniDecode($log_text,_CHARSET);
+       $log_linktitle = uniDecode($log_linktitle,_CHARSET);
 
-    if (!$member->isTeamMember($blogid) ) {
-        bm_doError(_ERROR_NOTONTEAM);
-    }
+       if (!BLOG::existsID($blogid) ) {
+               bm_doError(_ERROR_NOSUCHBLOG);
+       }
 
-    $logje = '';
+       if (!$member->isTeamMember($blogid) ) {
+               bm_doError(_ERROR_NOTONTEAM);
+       }
 
-    if ($log_text) {
-        $logje .= '<blockquote><div>"' . htmlspecialchars($log_text) . '"</div></blockquote>' . "\n";
-    }
+       $logje = '';
 
-    if (!$log_linktitle) {
-        $log_linktitle = $log_link;
-    }
+       if ($log_text) {
+               $logje .= '<blockquote><div>"' . htmlspecialchars($log_text) . '"</div></blockquote>' . "\n";
+       }
 
-    if ($log_link) {
-        $logje .= '<a href="' . htmlspecialchars($log_link) . '">' . htmlspecialchars($log_linktitle) . '</a>';
-    }
+       if (!$log_linktitle) {
+               $log_linktitle = $log_link;
+       }
 
-    $item['body'] = $logje;
-    $item['title'] = htmlspecialchars($log_linktitle);
+       if ($log_link) {
+               $logje .= '<a href="' . htmlspecialchars($log_link) . '">' . htmlspecialchars($log_linktitle) . '</a>';
+       }
 
-    $factory = new PAGEFACTORY($blogid);
-    $factory->createAddForm('bookmarklet', $item);
+       $item['body'] = $logje;
+       $item['title'] = htmlspecialchars($log_linktitle);
+
+       $factory = new PAGEFACTORY($blogid);
+       $factory->createAddForm('bookmarklet', $item);
 }
 
 function bm_doEditForm() {
-    global $member, $manager;
+       global $member, $manager;
 
-    $itemid = intRequestVar('itemid');
+       $itemid = intRequestVar('itemid');
 
-    if (!$manager->existsItem($itemid, 0, 0) ) {
-        bm_doError(_ERROR_NOSUCHITEM);
-    }
+       if (!$manager->existsItem($itemid, 0, 0) ) {
+               bm_doError(_ERROR_NOSUCHITEM);
+       }
 
-    if (!$member->canAlterItem($itemid) ) {
-        bm_doError(_ERROR_DISALLOWED);
-    }
+       if (!$member->canAlterItem($itemid) ) {
+               bm_doError(_ERROR_DISALLOWED);
+       }
 
-    $item =& $manager->getItem($itemid, 1, 1);
-    $blog =& $manager->getBlog(getBlogIDFromItemID($itemid) );
+       $item =& $manager->getItem($itemid, 1, 1);
+       $blog =& $manager->getBlog(getBlogIDFromItemID($itemid) );
 
-    $manager->notify('PrepareItemForEdit', array('item' => &$item) );
+       $manager->notify('PrepareItemForEdit', array('item' => &$item) );
 
-    if ($blog->convertBreaks() ) {
-        $item['body'] = removeBreaks($item['body']);
-        $item['more'] = removeBreaks($item['more']);
-    }
+       if ($blog->convertBreaks() ) {
+               $item['body'] = removeBreaks($item['body']);
+               $item['more'] = removeBreaks($item['more']);
+       }
 
-    $formfactory = new PAGEFACTORY($blog->getID() );
-    $formfactory->createEditForm('bookmarklet', $item);
+       $formfactory = new PAGEFACTORY($blog->getID() );
+       $formfactory->createEditForm('bookmarklet', $item);
 }
 
 function bm_doError($msg) {
-    bm_message(_ERROR, _ERRORMSG, $msg);
-    die;
+       bm_message(_ERROR, _ERRORMSG, $msg);
+       die;
 }
 
 function bm_message($title, $head, $msg, $extrahead = '') {
-    ?>
+       ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-    <html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
-        <title><?php echo $title ?></title>
-        <?php bm_style(); ?>
-        <?php echo $extrahead; ?>
-    </head>
-    <body>
-    <h1><?php echo $head; ?></h1>
-    <p><?php echo $msg; ?></p>
-    <p><a href="bookmarklet.php" onclick="window.close();window.opener.location.reload();"><?php echo _POPUP_CLOSE ?></a></p>
-    </body>
-    </html>
-
-    <?php
+<html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
+<title><?php echo $title ?></title>
+       <?php bm_style(); ?>
+       <?php echo $extrahead; ?>
+</head>
+<body>
+<h1><?php echo $head; ?></h1>
+<p><?php echo $msg; ?></p>
+<p><a href="bookmarklet.php" onclick="window.close();window.opener.location.reload();"><?php echo _POPUP_CLOSE ?></a></p>
+</body>
+</html>
+
+       <?php
 }
 
 function bm_style() {
-    echo '<link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />';
-    echo '<link rel="stylesheet" type="text/css" href="styles/addedit.css" />';
+       echo '<link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />';
+       echo '<link rel="stylesheet" type="text/css" href="styles/addedit.css" />';
 }
 
 function bm_doContextMenuCode() {
-    global $CONF;
-    ?>
+       global $CONF;
+       ?>
 <script type="text/javascript" defer="defer">
 doc = external.menuArguments.document;
 lt = escape(doc.selection.createRange().text);
 loglink = escape(external.menuArguments.location.href);
 loglinktitle = escape(doc.title);
-wingm = window.open('<?php echo $CONF['AdminURL']?>bookmarklet.php?blogid=<?php echo intGetVar('blogid')?>&logtext=' + lt + '&loglink=' + loglink + '&loglinktitle=' + loglinktitle, 'nucleusbm', 'scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');
+wingm = window.open('<?php echo $CONF['AdminURL']?>bookmarklet.php?blogid=<?php echo intGetVar('blogid')?>&logtext=' + lt + '&loglink=' + loglink + '&loglinktitle=' + loglinktitle, 'nucleusbm', 'scrollbars=yes,width=710,height=500,left=10,top=10,status=yes,resizable=yes');
 wingm.focus();
 </script>
-    <?php
+       <?php
 }
 
 function uniDecode($str,$charcode){
-  $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", 'toUtf8', $str);
-  return mb_convert_encoding($text, $charcode, 'UTF-8');
+       $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", 'toUtf8', $str);
+       return mb_convert_encoding($text, $charcode, 'UTF-8');
 }
 function toUtf8($ar){
-  foreach($ar as $val){
-    $val = intval(substr($val,2),16);
-    if($val < 0x7F){        // 0000-007F
-        $c .= chr($val);
-    }elseif($val < 0x800) { // 0080-0800
-        $c .= chr(0xC0 | ($val / 64));
-        $c .= chr(0x80 | ($val % 64));
-    }else{                // 0800-FFFF
-        $c .= chr(0xE0 | (($val / 64) / 64));
-        $c .= chr(0x80 | (($val / 64) % 64));
-        $c .= chr(0x80 | ($val % 64));
-    }
-  }
-  return $c;
+       foreach($ar as $val){
+               $val = intval(substr($val,2),16);
+               if($val < 0x7F){        // 0000-007F
+                       $c .= chr($val);
+               }elseif($val < 0x800) { // 0080-0800
+                       $c .= chr(0xC0 | ($val / 64));
+                       $c .= chr(0x80 | ($val % 64));
+               }else{                // 0800-FFFF
+                       $c .= chr(0xE0 | (($val / 64) / 64));
+                       $c .= chr(0x80 | (($val / 64) % 64));
+                       $c .= chr(0x80 | ($val % 64));
+               }
+       }
+       return $c;
 }
 
 ?>
\ No newline at end of file
index d54c9a0..68086e2 100755 (executable)
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
 <head>\r
-    <!--\r
-        Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
-        Copyright (C) 2002-2009 The Nucleus Group\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2009 The Nucleus Group\r
 \r
-        This program is free software; you can redistribute it and/or\r
-        modify it under the terms of the GNU General Public License\r
-        as published by the Free Software Foundation; either version 2\r
-        of the License, or (at your option) any later version.\r
-        (see nucleus/documentation/index.html#license for more info)\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
 \r
-        @license http://nucleuscms.org/license.txt GNU General Public License\r
-        @copyright Copyright (C) 2002-2009 The Nucleus Group\r
-    -->\r
-    <!-- $Id$ -->\r
-    <!-- $NucleusJP: history.html,v 1.12 2007/03/12 05:34:46 kimitake Exp $ -->\r
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-    <meta http-equiv="Content-Style-Type" content="text/css" />\r
-    <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
-    <link rel="index" href="./index.html" />\r
-    <title>Nucleus - History</title>\r
-    <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-    <style type="text/css">\r
-        strong {\r
-            font-weight: bold;\r
-        }\r
-        em {\r
-            font-style: italic;\r
-        }\r
-    </style>\r
-    <script src="http://www.google.com/jsapi"></script>\r
-    <script type="text/javascript">\r
-        google.load("jquery", "1");\r
-        google.setOnLoadCallback(function() {\r
-            $.getScript("devdocs/javascript/fontsizeChanger.js");\r
-        });\r
-    </script>\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2009 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: history.html,v 1.12 2007/03/12 05:34:46 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <meta http-equiv="Content-Style-Type" content="text/css" />\r
+       <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+       <link rel="index" href="./index.html" />\r
+       <title>Nucleus - History</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+       <style type="text/css">\r
+               strong {\r
+                       font-weight: bold;\r
+               }\r
+               em {\r
+                       font-style: italic;\r
+               }\r
+       </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("devdocs/javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
 </head>\r
 <body>\r
-    <div id="fontSizeChanger">\r
-    <a href="#top" id="f_small">小</a>\r
-    <a href="#top" id="f_medium">中</a>\r
-    <a href="#top" id="f_large">大</a>\r
-    </div>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
 <div id="body">\r
 \r
 <h1>更新履歴</h1>\r
 \r
 <p>\r
-    <a href="index.html">Nucleusマニュアルに戻る</a>\r
+       <a href="index.html">Nucleusマニュアルに戻る</a>\r
 </p>\r
 \r
 <ul>\r
-    <li>\r
-        <strong>Nucleus v3.5 (SVN)</strong>\r
-        <ul>\r
+       <li>\r
+               <strong>Nucleus v3.51 (November 1, 2009)</strong>\r
+               <ul>\r
+                       <li>FIX: fix warning caused by unreachable code in PDO (admun)</li>\r
+                       <li>FIX: fix typo in NP_Ping (admun)</li>\r
+                       <li>FIX: fix typo in XMLRPC api (admun)</li>\r
+                       <li>FIX: Bug in upgrade procedure where no check to verify new column does not currently exist before running the add query. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=19170" title="Upgrade Bug Report">this thread</a> (ftruscot)</li>\r
+                       <li>FIX: Bug where activation not completed. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=19176" title="Activation Bug Report">this thread</a> (ftruscot)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.5 (SVN)</strong>\r
+               <ul>\r
                        <li>ADD: Comment template variable userwebsitelink which acts like userlink, but only shows web address and never email. (ftruscot)</li>\r
-            <li>ADD: 2 Category List template variables, catiscurrent and its synonym, currentcat. (ftruscot)</li>\r
-            <li>ADD: code to warn if using a non-mysql database handler and a plugin does not supportsFeature 'SqlApi'. (ftruscot)</li>\r
-            <li>CHANGE: set php setting, display_errors, to 0 when not in debug mode to keep users with poorly configured servers from displaying errors on the page. (ftruscot)</li>\r
-            <li>FIX: PHP5.3 warning caused by MANAGER::notify(). See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18997" title="php 5.3 Error">this thread</a>. (ftruscot)</li>\r
-            <li>FIX: bookmarklet unaware of character set being used. Fix suggested by wgroleau. (ftruscot)</li>\r
-            <li>FIX: super-admin disallowed from uploading files if not on any teamlists. (ftruscot)</li>\r
-            <li>ADD: $CONF['ActivationDays'] variable to control days before activation expire. Manually set in config.php if needed (no admin interface). (ftruscot)</li>\r
-            <li>CHANGE:Notify ITEM link after karma votes(ACTION.php). (shizuki)</li>\r
-            <li>CHANGE:Remove bsendping col from nucleus_blog table(install.sql/upgrade3.5.php). (shizuki)</li>\r
-            <li>ADD:sql_field_name function for backup class(mysql.php/pdo.php). (shizuki)</li>\r
-            <li>FIX:Fix short open tag(NP_Ping.php). (shizuki)</li>\r
-            <li>CHANGED: NP_Ping and related infrastructure changes. (admun)</li>\r
-            <li>ADDED: upgrade code for 3.5 in upgrades folder. Includes notices about end of PHP4 support and info on 2 new plugins included in plugins folder. (ftruscot)</li>\r
-            <li>CHANGED: modified upgrade functions to use 3 digit version indicators everywhere. i.e. 340 instead of 34. (ftruscot)</li>\r
-            <li>CHANGED: increased length of displayname, mname, to 32 characters. (ftruscot)</li>\r
-            <li>CHANGED: modified install.php and sql_* handlers to allow installation using PDO. Activation is manual and not intended for public consumption in 3.50. Only tested for pdo-mysql handler. (ftruscot)</li>\r
-            <li>ADDED/CHANGED: extended sql_* api to cover all mysql_* functions used in core. Functions loaded from nucleus/libs/sql/ folder. See <a href="http://wakka.xiffy.nl/planning:3.50#mysql_api_warning" title="sql API">here</a>. (ftruscot)</li>\r
-            <li>FIXED: atom.phpとxml-rss2.phpで_CHARSETをチェックして文字コード変換(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4376" target="_blank" class="postlink">Nicleus3.41 へアップグレード後 xml-rss2.php でエラー</a>)(きゃしゃ)</li>\r
-            <li>CHANGED: SEARCH.php改良(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4370" target="_blank" class="postlink">&lt;%relevance%&gt;対応SEARCH.php</a>、<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=3824" target="_blank" class="postlink">検索結果の正確さ</a>)(きゃしゃ)</li>\r
-            <li>CHANGED: _CHARSETチェックのときにstrtoupper(きゃしゃ)</li>\r
-            <li>CHANGED: インストーラの文字化け対策部分をデフォルトで有効に。globalfunctions.phpの方は、状況に応じて。(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4385" target="_blank" class="postlink">インストール後管理画面は正常表示、サイトが真っ白</a>)(きゃしゃ)</li>\r
-            <li>CHANGED: インストーラエラーページをUTF-8固定に。(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=25024#25024" target="_blank" class="postlink">3.41インストール->スキンエラー</a>(きゃしゃ)</li>\r
-            <li>CHANGED: 言語ファイルの反映漏れ修正。ただし、言語ファイル読み込み前に表示される可能性のあるメッセージは定数定義前なのでそのまま(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=24903#24903" target="_blank" class="postlink">インストール後管理画面は正常表示、サイトが真っ白</a>)(きゃしゃ)</li>\r
-            <li>FIXED: pingオプションのチェックボックス削除(きゃしゃ)</li>\r
-            <li>FIXED: parsedincludeの無限ループ対策、NP_includespecialからの移植時仕様変更に伴うコード修正。(きゃしゃ)</li>\r
-            <li>FIXED: karma通知修正(きゃしゃ)</li>\r
-            <li>FIXED: catidのみがURLで指定された場合、blogidを補完する(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4417" target="_blank" class="postlink">ShowBlogsのページ送りにblogidの付加をするには?</a>)(きゃしゃ)</li>\r
-            <li>ADDED: NP_Text plugin to core installation. Makes distribution of internationalised plugins easier. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=15005" title="forgotpassword">this thread</a>. (ftruscot)</li>\r
-            <li>ADDED: links in plugins help of help.html to link to two main plugin repositories. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18214" title="forgotpassword">this thread</a>. (ftruscot)</li>\r
-            <li>ADDED: selectSpecialSkinType() function to globalfunctions.php. (ftruscot)</li>\r
-            <li>ADDED: Check in ADMIN.php pagehead() function to display alert if newer version is available. new function, getLatestVersion() in globalfunctions.php, and new files on nucleuscms.org, version_check.php, to serve latest version. (ftruscot)</li>\r
-            <li>ADDED: skinvar for all skin types to display a sticky item from any blog anywhere. (ftruscot)</li>\r
-            <li>REMOVED: check on canlogin during forgotpassword process. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18753" title="forgotpassword">this thread</a>. Suggestion by phillip_r. (ftruscot)</li>\r
-            <li>ADDED: div with id of adminwrapper around contents of admin page for improved control of admin page look. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18551" title="adminwrapper">this thread</a>. Suggestion by monkeybrain. (ftruscot)</li>\r
-            <li>ADDED: NP_SecurityEnforcer plugin to core installation. It can be set to enforce password length and complexity rules, as well as maximum failed login attempts. Put in plugin so can be superceded later by better techniques. (ftruscot)</li>\r
-            <li>CHANGED: LoginSuccess event in globalfunctions.php to inlcude <i>username</i> in the data array to specify the login name entered by the user. (ftruscot)</li>\r
-            <li>FIXED: backup.php, _backup_dump_structure() function, to use SHOW CREATE TABLE <i>name</i>, to generate table creation SQL. Adds ENGINE, AUTO_INCREMENT, and DEFAULT CHARSET. (ftruscot)</li>\r
-            <li>ADDED: PrePasswordSet event in ADMIN.php to allow plugin to enforce any password length or complexity rules for improved security. (ftruscot)</li>\r
-            <li>CHANGED: move send update ping option override to NP_Ping</li>\r
-            <li>ADDED: Year-based archives and archivelists, adds archiveyearlist and otherarchiveyearlist skin vars (ftruscot)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.41(March 14, 2009)</strong>\r
-        <ul>\r
-            <li>CHANGED: ドキュメントの文字サイズを可変に(jQuery使用)(character size of the document, variably via jQuery.) (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=89">#89(JP)</a>): metaWeblog.newPostにおけるコメント可否. (shizuki/NKJG)</li>\r
-            <li>CHANGED: help.htmlのポップアップサイズ変更(Adjust popup window size for help.html). (shizuki)</li>\r
-            <li>CHANGED: ブックマークレット差し替え(nucleus/libs/include/bookmarklet-add.template、bookmarklet-edit.template)(Bookmarklet use tab navigation)(shizuki)</li>\r
-            <li>CHANGED: NP_SkinFilesオプション用言語定義追加(NP_SkinFiles option word update via language file)(shizuki)</li>\r
-            <li>UPDATED: NP_SkinFiles 2.03に差し替え(code:yama/commit:shizuki)(NP_SkinFiles update to 2.03)(code:yama,katsumi/commit:shizuki)</li>\r
-            <li>FIXED: 「General」カテゴリのUPDATE漏れ修正(install.php)(preinstall default category name is not localize)(shizuki)</li>\r
-            <li>FIXED: When inclusion tried to do the special skin type by skin of error types, $skinid wasn't set.(yu/shizuki)</li>\r
-            <li>FIXED: Reduce PHP Notices caused by undefined variables and wrong offsets (shizuki, kaigreve)</li>\r
-            <li>FIXED: additional changes in the language files english.php and english-utf8.php to reflect modifications since version 3.30 (kaigreve)</li>\r
-            <li>FIXED: SQL error in MEMBER::write() where mautosave not forced to be integer. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18575">Problem with 3.40</a>. (ftruscot)\r
-            <li>ADDED: debug info in System info to show if $CONF['ItemURL'] is broken in admin panel (admun)</li>\r
-            <li>FIXED: Reorder the setting of config vars ($CONF) to avoid notices (should have no side effects)(kaigreve)</li>\r
-            <li>FIXED: Avoid notices caused by explode because the string '\\' is not a part of the $val and no array is returned(kaigreve)</li>\r
-            <li>FIXED: remove one redundant definition of the constant _MANAGER_PLUGINFILE_NOTFOUND(kaigreve)</li>\r
-            <li>FIXED: bug in showlist.php for displaying plugin dependency. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18594">Manage Plugins error in Nucleus 3.40</a> (ftruscot, thanks ajmiller)</li>\r
-            <li>CHANGED: Modify Fix SQL error when new blog add by shizuki, to give a default english value for category name, category desc, first item title, and first item body in case where user does not have updated language file. (ftruscot)</li>\r
-            <li>FIXED: Fix SQL Error when new blog add. (shizuki)</li>\r
-            <li>CHANGED: Mod Change link URI of 'help icon' to full URI (documentation/help.html to $CONF['AdminURL'].'documentation/help.html') (shizuki)</li>\r
-            <li>ADDED: getTeamBlogs() method to MEMBER class to retrieve list of blogs to which a member has team rights (ftruscot)</li>\r
-            <li>FIXED: rearrange english.php and english-utf8.php files so all new-to-3.40 contants are grouped together at top (ftruscot)</li>\r
-            <li>FIXED: Add missing language item to english-utf-8.php (admun)</li>\r
-            <li>FIXED: CONF['Self'] merging error in globalfunctions.php (admun)</li>\r
-            <li>CHANGED: Comment count at items list display via 'sprintf()'. (shizuki)</li>\r
-            <li>ADDED: instructions for manually adding .htaccess files to media and skins folder after upgrade. (ftruscot)</li>\r
-            <li>FIXED: the unwished ping after adding an item to a new category (what you have written here: http://forum.nucleuscms.org/viewtopic.php?p=89142#89142)(shizuki)</li>\r
-            <li>FIXED: Few hardcoded strings moved to langage file(shizuki)</li>\r
-            <li>CHANGED: Ease the solution for the new member option for autosave draft(kaigreve)</li>\r
-            <li>CHANGED: Move System overview in the menu of the admin area under the entry for the configuration (ADMIN.php)</li>\r
-            <li>CHANGED: Shorten menu entry to 'System info' and correct 'enable' to 'enabled' (english.php)</li>\r
-            <li>CHANGED: height of page class in help.html to avoid overlaps on long help topics. (ftruscot)</li>\r
-            <li>ADDED: .htaccess file in skins/ and nucleus/libs/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)</li>\r
-            <li>ADDED: .htaccess file in media/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)</li>\r
-            <li>ADDED: New member option to decide whether the autosave draft function is used or not (kaigreve)</li>\r
-            <li>CHANGED: Additional improvements and updates in devdocs and help.html (ftruscot)</li>\r
-            <li>ADDED: Warning for PHP 4.x depreciated during upgrade(admun)</li>\r
-            <li>ADDED: Documentation, as needed, for changes below. (ftruscot)</li>\r
-            <li>ADDED: BLOG::readLogFromList() and BLOG::getSqlItemList() to allow using the core item display mechanisms for customized lists of items. Will be used primarily by plugins. (ftruscot)</li>\r
-            <li>CHANGED: MEMBER::login() to add CustomLogin event. Provides hook for plugins to perform authentication from external sources. (ftruscot)</li>\r
-            <li>ADDED: Upgrade scripts for version 3.40. Lengthen nucleus_template.tpartname column to 64. Lengthen nucleus_template_desc.tdname to 64. (ftruscot)</li>\r
-            <li>ADDED: Warning for PHP 4.x depreciated (admun)</li>\r
-            <li>FIXED: MySQL version check failure in install.php (admun)</li>\r
-            <li>FIXED: bugs in last fix of directory traversal vulnerability in Nucleus media manager. Fix code providedby kmorimatsu inserted by ftruscot.</li>\r
-            <li>FIXED: directory traversal vulnerability in Nucleus media manager. Fix code provided by kmorimatsu inserted by ftruscot.</li>\r
-            <li>FIXED: cuser field of non-member comments being blanked out intermittently<a href="http://forum.nucleuscms.org/viewtopic.php?t=18059">Old comments from field is gone.</a> Caused by registration with names longer than 16 characters. Enforce 16 character limit in createaccount.php, ADMIN.php, ACTION.php (ftruscot)</li>\r
-            <li>ADDED: Add delete permission check (katsumi/admun)</li>\r
-            <li>ADDED: Add ATOM1.0 autodiscovery for default skin. (shizuki)</li>\r
-            <li>FIXED: Fix short open tag on skins/default/show_benchmark.inc. (shizuki)</li>\r
-            <li>FIXED: Fix broken XML for Skins. (shizuki)</li>\r
-            <li>ADDED: <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=3231">Japanese forum:Special skin parts are used as a skin part.</a> (Andy/shizuki)</li>\r
-            <li>ADDED: The number of comments is indicated on the item list screen. <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=2231">Japanese forum(The confirmation and the elimination which are a comment every item.)</a> (shizuki)</li>\r
-            <li>ADDED: Automatic re loading after an item renewal. <a href="http://blog.bitocean.net/item/40/catid/2">Bibou-Nikki/Automatic re loading after an item renewal.</a> (shizuki)</li>\r
-            <li>ADDED: Prevention of comment double contribution. <a href="http://blog.bitocean.net/item/35/catid/2">Bibou-Nikki/Prevention of comment double contribution.</a> (shizuki)</li>\r
-            <li>ADDED: Addition of an item  The hack which checks a radio button of "of the date and time, designation" automatically if the item of the date is changed at the time of edit. <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=2285">Japanese forum(Check box of "later, addition" and "of a time stamp, renewal")</a> (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=110">#110(JP)</a>): When an item is added by "new category", a SendPing event doesn't occur. (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=58">#58(JP)</a>): When database backup, table name and a column name are bound up with back quotat. (shizuki)</li>\r
-            <li>CHANGED: Eliminate few hardcoded language (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=94">#94(JP)</a>): A plugin option isn't generated. (kimitake/shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=79">#79(JP)</a>): Permission setting of upload isn't effective. (shizuki/yu)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=77">#77(JP)</a>): [XHTML] When the attribute of the option is hidden,&lt;tr&gt; isn't output. (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=76">#76(JP)</a>): [XHTML] Validate admin-area. (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=67">#67(JP)</a>): Change isn't reflected on ValidateForm event. (shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=107">#107(JP)</a>): When editing an item, time generation will be an error. (kotorisan/yu/shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=108">#108(JP)</a>): Pop-up, for if a character string is empty, nothing is indicated. (sato-na/shizuki)</li>\r
-            <li>FIXED: Fix history. (shizuki)</li>\r
-            <li>FIXED: "history.html" is XHTML 1.0 Strict. (shizuki)</li>\r
-            <li>FIXED: (<a href="http://dev.nucleuscms.org/tracker/index.php?id=142&amp;do=details">#142</a><a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=97">#97(JP)</a>): Plugin API: Incorrect operation order. (shizuki/Andrew Black)</li>\r
-            <li>ADDED: <a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=22675#22675">Add tool tip for "MEDIA" button</a> (shizuki/kyasya)</li>\r
-            <li>CHANGED: make ItemVars case insentive to ease the usage (work with plugins that use the function doItemVar) (kaigreve)</li>\r
-            <li>ADDED: new event in TEMPLATE.php called PreTemplateRead to allow plugin developers to change name of template being used. This is obscure and probably won't be publicized, but I need it for NP_MultiLanguage to allow mapping of templates depending on language being viewed, permitting translations of all parts of a template and localization of dates. (ftruscot)</li>\r
-            <li>ADDED: three new events in BLOG.php called PreArchiveListItem, PreCategoryListItem, and PreBlogListItem to allow plugin developers to modify or add template variables to the ArchiveList Item, Category List Item and Blog List Item template fields (ftruscot)</li>\r
-            <li>FIXED: fix redirect function in globalfunctions so that it does not strip out the permitted "*" character. See <a href="http://forum.nucleuscms.org/viewtopic.php?p=86007#86007">forum(Trying to get a create an account link)</a> (ftruscot)</li>\r
-            <li>ADDED: add description of the doIf function to the plugin documentation (ftruscot)</li>\r
-            <li>FIXED: fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot (ftruscot)</li>\r
-            <li>ADDED: add description of charset skin variable to documentation. (ftruscot)</li>\r
-            <li>ADDED: add global configuration, DefaultListSize, which sets and maintains a custom value for length of item/comment lists in the admin area (ftruscot)</li>\r
-            <li>FIXED: fix content type of bookmarklet.php file to text/html to conform with other pages (ftruscot)</li>\r
-            <li>ADDED: new event in createaccount.php called RegistrationFormExtraFields to allow fields from plugins onto registration form (ftruscot)</li>\r
-            <li>FIXED: CONF['Self'] fix (admun)</li>\r
-            <li>ADDED: Add a link to the front end that allows to add an item in a bookmarklet popup window (two new skinvars addlink and addpopupcode needed) (kaigreve)</li>\r
-            <li>ADDED: add a cancel button to the bookmarklet add and edit forms (kaigreve)</li>\r
-            <li>CHANGED: Move the submit button in the bookmarklet edit from to the end of the button bar (logical order) (kaigreve)</li>\r
-            <li>ADDED: Add the possibility to move a published item back to drafts (kaigreve)</li>\r
-            <li>ADDED: more and improved comments in classes NucleusPlugin, BACKUP, ITEM and ITEMACTIONS (kaigreve)</li>\r
-            <li>CHANGED: Use ISO date for backup filename and add hour, minute and second  (kaigreve)</li>\r
-            <li>CHANGED: Put backup functions in an own class Backup (kaigreve)</li>\r
-            <li>FIXED: add default values for the parse_bloglist function to avoid warnings (kaigreve)</li>\r
-            <li>FIXED: fix case sensitive function name createDraftFromRequest in class ACTION (admun)</li>\r
-            <li>ADDED: add description of the doItemVar function to the plugin documentation (kaigreve)</li>\r
-            <li>ADDED: add language file install_lang_english.php to install process (admun)</li>\r
-            <li>ADDED: add option to install NP_Ping during installation (admun)</li>\r
-            <li>FIXED: remove bug in the plugin api: function clearOptionValueCache hasn't worked correct with the getOption function (kaigreve)</li>\r
-            <li>ADDED: add global configuration DebugVars which decides if unresolved Vars (SkinVars, TemplateVars, ItemVars) are shown on the blog (kaigreve)</li>\r
-            <li>FIXED: Fix getNotifyFromMailAddress to use email field now that we've separated email/url fields (gregorlove)</li>\r
-            <li>CHANGED: extend skinvar Bloglist with parameters to specify the sort order (kaigreve)</li>\r
-            <li>ADDED: add comment URL and email to "edit comment" form and make them editable (gregorlove)</li>\r
-            <li>ADDED: new event in ADMIN.php called TemplateExtraFields to allow plugin developers to add fields to templates. This should encourage plugin authors to make use of the core template storage to provide formatting for their output. This event just presents the extra fields on the template edit form and stores data entered there into the nucleus_template table. It is the responsibility of the plugin authors to use the template fields they add and to provide the variables used in those fields. Plugins should also document their variables and provide for a default, either in the code or through a plugin option. (ftruscot)</li> \r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=73">#73(JP)</a>): スキン読み込みの改良. (kotorisan/yu/shizuki)</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=74">#74(JP)</a>): スキン編集画面の日本語化漏れ. (shizuki)</li>\r
-            <li>CHANGED: プラグイン一覧画面の「入手元URL」を本家にあわせて表示しないようにした。</li>\r
-            <li>CHANGED: スキンタイプ一覧のヘルプアイコンの位置を本家にあわせて名前の前に移動。</li>\r
-            <li>CHANGED: 管理画面CSS差し替え(code:yama/commit:shizuki)</li>\r
-            <li>FIXED: スキン差し替えによる問題修正(PHP4のみ。PHP5オンリーになったら戻す。SKIN.php、TEMPLATE.php)(shizuki)</li>\r
-            <li>CHANGED: デフォルトスキンを日本語版に差し替え(coded:yama/commit:shizuki)</li>\r
-            <li>CHANGED: バージョンチェックの飛び先を日本公式に変更(shizuki)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.31 SP3 (Dec 17, 2008)</strong>\r
-        <ul>\r
-            <li>FIXED: Avoid directory traversal in media manager (kmorimatsu)</li>\r
-            <li>FIXED: Security fix to avoid deletion of item by non-admin acount (kmorimatsu)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.31 SP2 (EUC-JP only) (September 26, 2008)</strong>\r
-        <ul>\r
-            <li>FIXED: An XSS issue</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.31 SP1 (February 5, 2008)</strong>\r
-        <ul>\r
-            <li>FIXED: An XSS issue</li>\r
-            <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=82">#82(JP)</a>): fix &lt;%itemtitle%&gt; on COMMENT_HEADER COMMENT_BODY COMMENT_FOOTER (shizuki)</li>\r
-            <li>CHANGED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=83">#83(JP)</a>): Change bookmarklet height. Add 50pix. (kmorimatsu)</li>\r
-            <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;id=84">#84(JP)</a>): To avoid showing ticket in the URL, redirect to pluginlist, instead. (kmorimatsu)</li>\r
-            <li>ADDED: add <code>createaccount.html</code> with a redirect to <code>createaccount.php</code> for backward compatibility with the old location of the form</li>\r
-            <li>CHANGED: protect the 'create account form' against abuse: show the form only if needed and add FormExtra (e.g. Captcha) and ValidateForm (to validate input) events (ftruscot and kaigreve)</li>\r
-            <li>FIXED: bug in upgrade script (admun)</li>\r
-            <li>CHANGED: update xmlrpc client to version 2.2, this version supports PHP 5.2.x (kimitake)</li>\r
-            <li>CHANGED: use require instead of include for the file inclusion (kimitake)</li>\r
-            <li>CHANGED: rollback benchmark default skin (admun)</li>\r
-            <li>FIXED: possible security problem in NP_Ping (admun)</li>\r
-            <li>ADDED: NP_Ping sends ping for future post via JustPosted event (admun)</li>\r
-            <li>ADDED: JustPosted event (admun)</li>\r
-            <li>ADDED: move weblogs.com ping function into plugin (admun)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.3 (May 1, 2007)</strong>\r
-        <ul>\r
-            <li>ADDED: check cmail column to separate to URL and cemail when Nucleus upgrade to 3.3 or later. (kimitake/katsumi)</li>\r
+                       <li>ADD: 2 Category List template variables, catiscurrent and its synonym, currentcat. (ftruscot)</li>\r
+                       <li>ADD: code to warn if using a non-mysql database handler and a plugin does not supportsFeature 'SqlApi'. (ftruscot)</li>\r
+                       <li>CHANGE: set php setting, display_errors, to 0 when not in debug mode to keep users with poorly configured servers from displaying errors on the page. (ftruscot)</li>\r
+                       <li>FIX: PHP5.3 warning caused by MANAGER::notify(). See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18997" title="php 5.3 Error">this thread</a>. (ftruscot)</li>\r
+                       <li>FIX: bookmarklet unaware of character set being used. Fix suggested by wgroleau. (ftruscot)</li>\r
+                       <li>FIX: super-admin disallowed from uploading files if not on any teamlists. (ftruscot)</li>\r
+                       <li>ADD: $CONF['ActivationDays'] variable to control days before activation expire. Manually set in config.php if needed (no admin interface). (ftruscot)</li>\r
+                       <li>CHANGE:Notify ITEM link after karma votes(ACTION.php). (shizuki)</li>\r
+                       <li>CHANGE:Remove bsendping col from nucleus_blog table(install.sql/upgrade3.5.php). (shizuki)</li>\r
+                       <li>ADD:sql_field_name function for backup class(mysql.php/pdo.php). (shizuki)</li>\r
+                       <li>FIX:Fix short open tag(NP_Ping.php). (shizuki)</li>\r
+                       <li>CHANGED: NP_Ping and related infrastructure changes. (admun)</li>\r
+                       <li>ADDED: upgrade code for 3.5 in upgrades folder. Includes notices about end of PHP4 support and info on 2 new plugins included in plugins folder. (ftruscot)</li>\r
+                       <li>CHANGED: modified upgrade functions to use 3 digit version indicators everywhere. i.e. 340 instead of 34. (ftruscot)</li>\r
+                       <li>CHANGED: increased length of displayname, mname, to 32 characters. (ftruscot)</li>\r
+                       <li>CHANGED: modified install.php and sql_* handlers to allow installation using PDO. Activation is manual and not intended for public consumption in 3.50. Only tested for pdo-mysql handler. (ftruscot)</li>\r
+                       <li>ADDED/CHANGED: extended sql_* api to cover all mysql_* functions used in core. Functions loaded from nucleus/libs/sql/ folder. See <a href="http://wakka.xiffy.nl/planning:3.50#mysql_api_warning" title="sql API">here</a>. (ftruscot)</li>\r
+                       <li>FIXED: atom.phpとxml-rss2.phpで_CHARSETをチェックして文字コード変換(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4376" target="_blank" class="postlink">Nicleus3.41 へアップグレード後 xml-rss2.php でエラー</a>)(きゃしゃ)</li>\r
+                       <li>CHANGED: SEARCH.php改良(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4370" target="_blank" class="postlink">&lt;%relevance%&gt;対応SEARCH.php</a>、<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=3824" target="_blank" class="postlink">検索結果の正確さ</a>)(きゃしゃ)</li>\r
+                       <li>CHANGED: _CHARSETチェックのときにstrtoupper(きゃしゃ)</li>\r
+                       <li>CHANGED: インストーラの文字化け対策部分をデフォルトで有効に。globalfunctions.phpの方は、状況に応じて。(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4385" target="_blank" class="postlink">インストール後管理画面は正常表示、サイトが真っ白</a>)(きゃしゃ)</li>\r
+                       <li>CHANGED: インストーラエラーページをUTF-8固定に。(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=25024#25024" target="_blank" class="postlink">3.41インストール->スキンエラー</a>(きゃしゃ)</li>\r
+                       <li>CHANGED: 言語ファイルの反映漏れ修正。ただし、言語ファイル読み込み前に表示される可能性のあるメッセージは定数定義前なのでそのまま(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=24903#24903" target="_blank" class="postlink">インストール後管理画面は正常表示、サイトが真っ白</a>)(きゃしゃ)</li>\r
+                       <li>FIXED: pingオプションのチェックボックス削除(きゃしゃ)</li>\r
+                       <li>FIXED: parsedincludeの無限ループ対策、NP_includespecialからの移植時仕様変更に伴うコード修正。(きゃしゃ)</li>\r
+                       <li>FIXED: karma通知修正(きゃしゃ)</li>\r
+                       <li>FIXED: catidのみがURLで指定された場合、blogidを補完する(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4417" target="_blank" class="postlink">ShowBlogsのページ送りにblogidの付加をするには?</a>)(きゃしゃ)</li>\r
+                       <li>ADDED: NP_Text plugin to core installation. Makes distribution of internationalised plugins easier. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=15005" title="forgotpassword">this thread</a>. (ftruscot)</li>\r
+                       <li>ADDED: links in plugins help of help.html to link to two main plugin repositories. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18214" title="forgotpassword">this thread</a>. (ftruscot)</li>\r
+                       <li>ADDED: selectSpecialSkinType() function to globalfunctions.php. (ftruscot)</li>\r
+                       <li>ADDED: Check in ADMIN.php pagehead() function to display alert if newer version is available. new function, getLatestVersion() in globalfunctions.php, and new files on nucleuscms.org, version_check.php, to serve latest version. (ftruscot)</li>\r
+                       <li>ADDED: skinvar for all skin types to display a sticky item from any blog anywhere. (ftruscot)</li>\r
+                       <li>REMOVED: check on canlogin during forgotpassword process. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18753" title="forgotpassword">this thread</a>. Suggestion by phillip_r. (ftruscot)</li>\r
+                       <li>ADDED: div with id of adminwrapper around contents of admin page for improved control of admin page look. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18551" title="adminwrapper">this thread</a>. Suggestion by monkeybrain. (ftruscot)</li>\r
+                       <li>ADDED: NP_SecurityEnforcer plugin to core installation. It can be set to enforce password length and complexity rules, as well as maximum failed login attempts. Put in plugin so can be superceded later by better techniques. (ftruscot)</li>\r
+                       <li>CHANGED: LoginSuccess event in globalfunctions.php to inlcude <i>username</i> in the data array to specify the login name entered by the user. (ftruscot)</li>\r
+                       <li>FIXED: backup.php, _backup_dump_structure() function, to use SHOW CREATE TABLE <i>name</i>, to generate table creation SQL. Adds ENGINE, AUTO_INCREMENT, and DEFAULT CHARSET. (ftruscot)</li>\r
+                       <li>ADDED: PrePasswordSet event in ADMIN.php to allow plugin to enforce any password length or complexity rules for improved security. (ftruscot)</li>\r
+                       <li>CHANGED: move send update ping option override to NP_Ping</li>\r
+                       <li>ADDED: Year-based archives and archivelists, adds archiveyearlist and otherarchiveyearlist skin vars (ftruscot)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.41(March 14, 2009)</strong>\r
+               <ul>\r
+                       <li>CHANGED: ドキュメントの文字サイズを可変に(jQuery使用)(character size of the document, variably via jQuery.) (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=89">#89(JP)</a>): metaWeblog.newPostにおけるコメント可否. (shizuki/NKJG)</li>\r
+                       <li>CHANGED: help.htmlのポップアップサイズ変更(Adjust popup window size for help.html). (shizuki)</li>\r
+                       <li>CHANGED: ブックマークレット差し替え(nucleus/libs/include/bookmarklet-add.template、bookmarklet-edit.template)(Bookmarklet use tab navigation)(shizuki)</li>\r
+                       <li>CHANGED: NP_SkinFilesオプション用言語定義追加(NP_SkinFiles option word update via language file)(shizuki)</li>\r
+                       <li>UPDATED: NP_SkinFiles 2.03に差し替え(code:yama/commit:shizuki)(NP_SkinFiles update to 2.03)(code:yama,katsumi/commit:shizuki)</li>\r
+                       <li>FIXED: 「General」カテゴリのUPDATE漏れ修正(install.php)(preinstall default category name is not localize)(shizuki)</li>\r
+                       <li>FIXED: When inclusion tried to do the special skin type by skin of error types, $skinid wasn't set.(yu/shizuki)</li>\r
+                       <li>FIXED: Reduce PHP Notices caused by undefined variables and wrong offsets (shizuki, kaigreve)</li>\r
+                       <li>FIXED: additional changes in the language files english.php and english-utf8.php to reflect modifications since version 3.30 (kaigreve)</li>\r
+                       <li>FIXED: SQL error in MEMBER::write() where mautosave not forced to be integer. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18575">Problem with 3.40</a>. (ftruscot)</li>\r
+                       <li>ADDED: debug info in System info to show if $CONF['ItemURL'] is broken in admin panel (admun)</li>\r
+                       <li>FIXED: Reorder the setting of config vars ($CONF) to avoid notices (should have no side effects)(kaigreve)</li>\r
+                       <li>FIXED: Avoid notices caused by explode because the string '\\' is not a part of the $val and no array is returned(kaigreve)</li>\r
+                       <li>FIXED: remove one redundant definition of the constant _MANAGER_PLUGINFILE_NOTFOUND(kaigreve)</li>\r
+                       <li>FIXED: bug in showlist.php for displaying plugin dependency. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18594">Manage Plugins error in Nucleus 3.40</a> (ftruscot, thanks ajmiller)</li>\r
+                       <li>CHANGED: Modify Fix SQL error when new blog add by shizuki, to give a default english value for category name, category desc, first item title, and first item body in case where user does not have updated language file. (ftruscot)</li>\r
+                       <li>FIXED: Fix SQL Error when new blog add. (shizuki)</li>\r
+                       <li>CHANGED: Mod Change link URI of 'help icon' to full URI (documentation/help.html to $CONF['AdminURL'].'documentation/help.html') (shizuki)</li>\r
+                       <li>ADDED: getTeamBlogs() method to MEMBER class to retrieve list of blogs to which a member has team rights (ftruscot)</li>\r
+                       <li>FIXED: rearrange english.php and english-utf8.php files so all new-to-3.40 contants are grouped together at top (ftruscot)</li>\r
+                       <li>FIXED: Add missing language item to english-utf-8.php (admun)</li>\r
+                       <li>FIXED: CONF['Self'] merging error in globalfunctions.php (admun)</li>\r
+                       <li>CHANGED: Comment count at items list display via 'sprintf()'. (shizuki)</li>\r
+                       <li>ADDED: instructions for manually adding .htaccess files to media and skins folder after upgrade. (ftruscot)</li>\r
+                       <li>FIXED: the unwished ping after adding an item to a new category (what you have written here: http://forum.nucleuscms.org/viewtopic.php?p=89142#89142)(shizuki)</li>\r
+                       <li>FIXED: Few hardcoded strings moved to langage file(shizuki)</li>\r
+                       <li>CHANGED: Ease the solution for the new member option for autosave draft(kaigreve)</li>\r
+                       <li>CHANGED: Move System overview in the menu of the admin area under the entry for the configuration (ADMIN.php)</li>\r
+                       <li>CHANGED: Shorten menu entry to 'System info' and correct 'enable' to 'enabled' (english.php)</li>\r
+                       <li>CHANGED: height of page class in help.html to avoid overlaps on long help topics. (ftruscot)</li>\r
+                       <li>ADDED: .htaccess file in skins/ and nucleus/libs/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)</li>\r
+                       <li>ADDED: .htaccess file in media/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)</li>\r
+                       <li>ADDED: New member option to decide whether the autosave draft function is used or not (kaigreve)</li>\r
+                       <li>CHANGED: Additional improvements and updates in devdocs and help.html (ftruscot)</li>\r
+                       <li>ADDED: Warning for PHP 4.x depreciated during upgrade(admun)</li>\r
+                       <li>ADDED: Documentation, as needed, for changes below. (ftruscot)</li>\r
+                       <li>ADDED: BLOG::readLogFromList() and BLOG::getSqlItemList() to allow using the core item display mechanisms for customized lists of items. Will be used primarily by plugins. (ftruscot)</li>\r
+                       <li>CHANGED: MEMBER::login() to add CustomLogin event. Provides hook for plugins to perform authentication from external sources. (ftruscot)</li>\r
+                       <li>ADDED: Upgrade scripts for version 3.40. Lengthen nucleus_template.tpartname column to 64. Lengthen nucleus_template_desc.tdname to 64. (ftruscot)</li>\r
+                       <li>ADDED: Warning for PHP 4.x depreciated (admun)</li>\r
+                       <li>FIXED: MySQL version check failure in install.php (admun)</li>\r
+                       <li>FIXED: bugs in last fix of directory traversal vulnerability in Nucleus media manager. Fix code providedby kmorimatsu inserted by ftruscot.</li>\r
+                       <li>FIXED: directory traversal vulnerability in Nucleus media manager. Fix code provided by kmorimatsu inserted by ftruscot.</li>\r
+                       <li>FIXED: cuser field of non-member comments being blanked out intermittently<a href="http://forum.nucleuscms.org/viewtopic.php?t=18059">Old comments from field is gone.</a> Caused by registration with names longer than 16 characters. Enforce 16 character limit in createaccount.php, ADMIN.php, ACTION.php (ftruscot)</li>\r
+                       <li>ADDED: Add delete permission check (katsumi/admun)</li>\r
+                       <li>ADDED: Add ATOM1.0 autodiscovery for default skin. (shizuki)</li>\r
+                       <li>FIXED: Fix short open tag on skins/default/show_benchmark.inc. (shizuki)</li>\r
+                       <li>FIXED: Fix broken XML for Skins. (shizuki)</li>\r
+                       <li>ADDED: <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=3231">Japanese forum:Special skin parts are used as a skin part.</a> (Andy/shizuki)</li>\r
+                       <li>ADDED: The number of comments is indicated on the item list screen. <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=2231">Japanese forum(The confirmation and the elimination which are a comment every item.)</a> (shizuki)</li>\r
+                       <li>ADDED: Automatic re loading after an item renewal. <a href="http://blog.bitocean.net/item/40/catid/2">Bibou-Nikki/Automatic re loading after an item renewal.</a> (shizuki)</li>\r
+                       <li>ADDED: Prevention of comment double contribution. <a href="http://blog.bitocean.net/item/35/catid/2">Bibou-Nikki/Prevention of comment double contribution.</a> (shizuki)</li>\r
+                       <li>ADDED: Addition of an item  The hack which checks a radio button of "of the date and time, designation" automatically if the item of the date is changed at the time of edit. <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=2285">Japanese forum(Check box of "later, addition" and "of a time stamp, renewal")</a> (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=110">#110(JP)</a>): When an item is added by "new category", a SendPing event doesn't occur. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=58">#58(JP)</a>): When database backup, table name and a column name are bound up with back quotat. (shizuki)</li>\r
+                       <li>CHANGED: Eliminate few hardcoded language (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=94">#94(JP)</a>): A plugin option isn't generated. (kimitake/shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=79">#79(JP)</a>): Permission setting of upload isn't effective. (shizuki/yu)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=77">#77(JP)</a>): [XHTML] When the attribute of the option is hidden,&lt;tr&gt; isn't output. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=76">#76(JP)</a>): [XHTML] Validate admin-area. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=67">#67(JP)</a>): Change isn't reflected on ValidateForm event. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=107">#107(JP)</a>): When editing an item, time generation will be an error. (kotorisan/yu/shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=108">#108(JP)</a>): Pop-up, for if a character string is empty, nothing is indicated. (sato-na/shizuki)</li>\r
+                       <li>FIXED: Fix history. (shizuki)</li>\r
+                       <li>FIXED: "history.html" is XHTML 1.0 Strict. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://dev.nucleuscms.org/tracker/index.php?id=142&amp;do=details">#142</a><a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=97">#97(JP)</a>): Plugin API: Incorrect operation order. (shizuki/Andrew Black)</li>\r
+                       <li>ADDED: <a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=22675#22675">Add tool tip for "MEDIA" button</a> (shizuki/kyasya)</li>\r
+                       <li>CHANGED: make ItemVars case insentive to ease the usage (work with plugins that use the function doItemVar) (kaigreve)</li>\r
+                       <li>ADDED: new event in TEMPLATE.php called PreTemplateRead to allow plugin developers to change name of template being used. This is obscure and probably won't be publicized, but I need it for NP_MultiLanguage to allow mapping of templates depending on language being viewed, permitting translations of all parts of a template and localization of dates. (ftruscot)</li>\r
+                       <li>ADDED: three new events in BLOG.php called PreArchiveListItem, PreCategoryListItem, and PreBlogListItem to allow plugin developers to modify or add template variables to the ArchiveList Item, Category List Item and Blog List Item template fields (ftruscot)</li>\r
+                       <li>FIXED: fix redirect function in globalfunctions so that it does not strip out the permitted "*" character. See <a href="http://forum.nucleuscms.org/viewtopic.php?p=86007#86007">forum(Trying to get a create an account link)</a> (ftruscot)</li>\r
+                       <li>ADDED: add description of the doIf function to the plugin documentation (ftruscot)</li>\r
+                       <li>FIXED: fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot (ftruscot)</li>\r
+                       <li>ADDED: add description of charset skin variable to documentation. (ftruscot)</li>\r
+                       <li>ADDED: add global configuration, DefaultListSize, which sets and maintains a custom value for length of item/comment lists in the admin area (ftruscot)</li>\r
+                       <li>FIXED: fix content type of bookmarklet.php file to text/html to conform with other pages (ftruscot)</li>\r
+                       <li>ADDED: new event in createaccount.php called RegistrationFormExtraFields to allow fields from plugins onto registration form (ftruscot)</li>\r
+                       <li>FIXED: CONF['Self'] fix (admun)</li>\r
+                       <li>ADDED: Add a link to the front end that allows to add an item in a bookmarklet popup window (two new skinvars addlink and addpopupcode needed) (kaigreve)</li>\r
+                       <li>ADDED: add a cancel button to the bookmarklet add and edit forms (kaigreve)</li>\r
+                       <li>CHANGED: Move the submit button in the bookmarklet edit from to the end of the button bar (logical order) (kaigreve)</li>\r
+                       <li>ADDED: Add the possibility to move a published item back to drafts (kaigreve)</li>\r
+                       <li>ADDED: more and improved comments in classes NucleusPlugin, BACKUP, ITEM and ITEMACTIONS (kaigreve)</li>\r
+                       <li>CHANGED: Use ISO date for backup filename and add hour, minute and second  (kaigreve)</li>\r
+                       <li>CHANGED: Put backup functions in an own class Backup (kaigreve)</li>\r
+                       <li>FIXED: add default values for the parse_bloglist function to avoid warnings (kaigreve)</li>\r
+                       <li>FIXED: fix case sensitive function name createDraftFromRequest in class ACTION (admun)</li>\r
+                       <li>ADDED: add description of the doItemVar function to the plugin documentation (kaigreve)</li>\r
+                       <li>ADDED: add language file install_lang_english.php to install process (admun)</li>\r
+                       <li>ADDED: add option to install NP_Ping during installation (admun)</li>\r
+                       <li>FIXED: remove bug in the plugin api: function clearOptionValueCache hasn't worked correct with the getOption function (kaigreve)</li>\r
+                       <li>ADDED: add global configuration DebugVars which decides if unresolved Vars (SkinVars, TemplateVars, ItemVars) are shown on the blog (kaigreve)</li>\r
+                       <li>FIXED: Fix getNotifyFromMailAddress to use email field now that we've separated email/url fields (gregorlove)</li>\r
+                       <li>CHANGED: extend skinvar Bloglist with parameters to specify the sort order (kaigreve)</li>\r
+                       <li>ADDED: add comment URL and email to "edit comment" form and make them editable (gregorlove)</li>\r
+                       <li>ADDED: new event in ADMIN.php called TemplateExtraFields to allow plugin developers to add fields to templates. This should encourage plugin authors to make use of the core template storage to provide formatting for their output. This event just presents the extra fields on the template edit form and stores data entered there into the nucleus_template table. It is the responsibility of the plugin authors to use the template fields they add and to provide the variables used in those fields. Plugins should also document their variables and provide for a default, either in the code or through a plugin option. (ftruscot)</li> \r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=73">#73(JP)</a>): スキン読み込みの改良. (kotorisan/yu/shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=74">#74(JP)</a>): スキン編集画面の日本語化漏れ. (shizuki)</li>\r
+                       <li>CHANGED: プラグイン一覧画面の「入手元URL」を本家にあわせて表示しないようにした。</li>\r
+                       <li>CHANGED: スキンタイプ一覧のヘルプアイコンの位置を本家にあわせて名前の前に移動。</li>\r
+                       <li>CHANGED: 管理画面CSS差し替え(code:yama/commit:shizuki)</li>\r
+                       <li>FIXED: スキン差し替えによる問題修正(PHP4のみ。PHP5オンリーになったら戻す。SKIN.php、TEMPLATE.php)(shizuki)</li>\r
+                       <li>CHANGED: デフォルトスキンを日本語版に差し替え(coded:yama/commit:shizuki)</li>\r
+                       <li>CHANGED: バージョンチェックの飛び先を日本公式に変更(shizuki)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.31 SP3 (Dec 17, 2008)</strong>\r
+               <ul>\r
+                       <li>FIXED: Avoid directory traversal in media manager (kmorimatsu)</li>\r
+                       <li>FIXED: Security fix to avoid deletion of item by non-admin acount (kmorimatsu)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.31 SP2 (EUC-JP only) (September 26, 2008)</strong>\r
+               <ul>\r
+                       <li>FIXED: An XSS issue</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.31 SP1 (February 5, 2008)</strong>\r
+               <ul>\r
+                       <li>FIXED: An XSS issue</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=82">#82(JP)</a>): fix &lt;%itemtitle%&gt; on COMMENT_HEADER COMMENT_BODY COMMENT_FOOTER (shizuki)</li>\r
+                       <li>CHANGED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=83">#83(JP)</a>): Change bookmarklet height. Add 50pix. (kmorimatsu)</li>\r
+                       <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;id=84">#84(JP)</a>): To avoid showing ticket in the URL, redirect to pluginlist, instead. (kmorimatsu)</li>\r
+                       <li>ADDED: add <code>createaccount.html</code> with a redirect to <code>createaccount.php</code> for backward compatibility with the old location of the form</li>\r
+                       <li>CHANGED: protect the 'create account form' against abuse: show the form only if needed and add FormExtra (e.g. Captcha) and ValidateForm (to validate input) events (ftruscot and kaigreve)</li>\r
+                       <li>FIXED: bug in upgrade script (admun)</li>\r
+                       <li>CHANGED: update xmlrpc client to version 2.2, this version supports PHP 5.2.x (kimitake)</li>\r
+                       <li>CHANGED: use require instead of include for the file inclusion (kimitake)</li>\r
+                       <li>CHANGED: rollback benchmark default skin (admun)</li>\r
+                       <li>FIXED: possible security problem in NP_Ping (admun)</li>\r
+                       <li>ADDED: NP_Ping sends ping for future post via JustPosted event (admun)</li>\r
+                       <li>ADDED: JustPosted event (admun)</li>\r
+                       <li>ADDED: move weblogs.com ping function into plugin (admun)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.3 (May 1, 2007)</strong>\r
+               <ul>\r
+                       <li>ADDED: check cmail column to separate to URL and cemail when Nucleus upgrade to 3.3 or later. (kimitake/katsumi)</li>\r
 \r
 \r
-            <li>\r
-                ADDED: Serveral changes and fixes from Nucleus Japan (details in the log files of the <a href="http://sourceforge.net/svn/?group_id=66479">Nucleus repository</a> at sourceforge.net)\r
-                <ul>\r
-                    <li>ADDED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=68">#68(JP)</a>): Encrypted cookie key. (Katsumi)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=60">#60(JP)</a>): Item link in notification email is wrong. (shizuki)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=62">#62(JP)</a>): email address is not referred in &lt;%usermail%&gt;. (shizuki)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=66">#66(JP)</a>): Even if calling PostPluginOptionsUpdate, getOption does not returns correct value. (Katsumi)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=49">#49(JP)</a>): PLUGIN::getAllItemOptions does not work correctly. (NKJG)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=57">#57(JP)</a>): SQL error happens when updating plugin option. (Katsumi)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=56">#56(JP)</a>): When creating db backup, the key length drops (Katsumi)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=41">#41(JP)</a>): fixed dropped info during backing up (Katsumi)</li>\r
-                    <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=40">#40(JP)</a>): fixed PostAddCategory event (Kimitake)</li>\r
-                    <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=48">#48(JP)</a>): Super-admin always can login to admin page (Kimitake)</li>\r
-                    <li>ADDED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=45">#45</a>  from the Japanese Tracker): include code from NP_0TicketForPlugin in the core (Changes from Nucleus Japan)(Katsumi)</li>\r
-                </ul>\r
-            </li>\r
-            <li>ADDED: Sanitize parameters such as $_GET and $_SERVER['REQUEST_URI'] etc. to avoid XSS (from Nucleus Japan)</li>\r
-            <li>ADDED: new events for Media upload: PreMediaUpload and PostMediaUpload (kaigreve)</li>\r
-            <li>ADDED: new skinvar bloglist (kaigreve)</li>\r
-            <li>ADDED: new method for URL rewriting with the global variable virtualpath, new .htaccess file can be found in the folder extra/fancyurl-2, more information <a href="http://forum.nucleuscms.org/viewtopic.php?t=12241">forum(Another approach to Fancy URLs)</a> (kaigreve and Legolas)</li>\r
-            <li>FIXED: allow + in email address, see <a href="http://forum.nucleuscms.org/viewtopic.php?t=14207">forum(Minor bug fix in globalfunctions.php)</a> (wgroleau)</li>\r
-            <li>FIXED: XHTML compliance in default skin (admun)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=80&amp;do=details">#80</a>): Atom 1.0 support (rakaz)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=129&amp;do=details">#129</a>): Plugin API: SpamCheck event called from core. (rakaz)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=128&amp;do=details">#128</a>): Don't show DISALLOWED(XXXX) errors (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=127&amp;do=details">#127</a>): parse_commentform: double-escaped URLs (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=121&amp;do=details">#121</a>): backup fails when <code>$plugin-&gt;getTableList()</code> doesn't return an array (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=118&amp;do=details">#118</a>): Errors in default skin (legolas)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=119&amp;do=details">#119</a>): Added optional includeMode/includePrefix parameters to <code>parseFile()</code> (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=115&amp;do=details">#115</a>): Redundant database queries on member table (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=114&amp;do=details">#114</a>): Magic quotes not correctly undone when <code>magic_quotes_sybase</code> enabled (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=104&amp;do=details">#104</a>): Return to blogsettings - link missing on edit category</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=107&amp;do=details">#107</a>): Better path detection in install.php (dekarma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=106&amp;do=details">#106</a>): Make 'Log Out' link under Comment box work with Fancy URLs (Wendy Smoak)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=99&amp;do=details">#99</a>): Use workaround when the only installed MySQL PHP extension is mysqli (dekarma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=98&amp;do=details">#98</a>): More "Fatal error: Only variables can be passed by reference" occurrences on some installations (pete)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=23&amp;do=details">#23</a>): adding email/url + email field display in blog comment list (admun)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=12">#12</a>): item id and timestamp were not sent along with <code>GenerateURL</code> event when <code>itemlink</code> called from commentvars (karma)</li>\r
-            <li>CHANGED: Now using XML-RPC for PHP (phpxmlrpc) v1.2.1</li>\r
-            <li>FIXED: (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=97">#97</a>): file uploads didn't check <code>$_FILES['file']['error']</code> codes. (dekarma)</li>\r
-            <li>CHANGED: Update user instruction for Blogger conversion tool</li>\r
-            <li>ADDED: When an e-mail is provided in the comment-form it is validated. (TeRanEX)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=23&amp;do=details">#23</a>): Splitted the URL &amp; E-mail field in comments. (gRegor, ketsugi, Red Dalek, TeRanEX)</li>\r
-            <li>ADDED: (bug 817364): delete member enhancement (admun)</li>\r
-            <li>ADDED: Auto save draft (Legolas)</li>\r
-            <li>ADDED: Custom skin parts (tutorio)</li>\r
-            <li>ADDED: ヘルプファイルにスキン変数&lt;%charset%&gt;のヘルプを追加(add description of charset skin variable to documentation.) (shizuki)</li>\r
-            <li>FIXED: ヘルプファイルの「if/else/endif」の項目を修正。「ifnot/elseif/elseifnot」を追加(fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot) (shizuki)</li>\r
-            <li>ADDED: プラグインAPIドキュメントに「doIf()」メソッドの項目を追加(add description of the doIf function to the plugin documentation) (shizuki)</li>\r
-            <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=39">#39(JP)</a>): 管理領域のContent-Typeをtext/htmlのままに(reverted content type for admin area)(Kimitake)</li>\r
-            <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=42">#42(JP)</a>): プリインストールされるATOMのスキンの「xml:lang」が「en-us」になっていたのを修正(atom feed template specifies xml:lang but it is en-us, it should be ja, in install.sql)(Kimitake)</li>\r
-            <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=46">#46(JP)</a>: ドラフト保存されるアイテムの日付のフォーマットを修正(fixed date format for draft entry)(Kimitake)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.24 (November 11, 2006)</strong>\r
-        <ul>\r
-            <li>FIXED: XSS issue (reported by <a href="http://www.jpcert.or.jp/">JPCERT/CC</a>).</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.23 (May 23, 2006)</strong>\r
-        <ul>\r
-            <li>FIXED: Remote code execution vulnerability (reported by rgod).</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.22 (August 21, 2005)</strong>\r
-        <ul>\r
-            <li>FIXED: Major security vulnerability in the phpxmlrpc library.</li>\r
-            <li>FIXED: New NP_SkinFiles version, fixing a minor security issue. (rakaz)</li>\r
-            <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=17">#17</a>): An errormessage is now displayed when logon through loginform failed. (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=91">#91</a>): Initialize variables in MEMBER class (andrew)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=90">#90</a>): there was no plugin callback on member edits when the email address changed (andrew)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=90">#90</a>): when editing members other than yourself, you shouldn't be logged out (andrew)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=85">#85</a>): If both <code>itemid</code> and <code>catid</code> are specified in the URL, ignore <code>catid</code> if it doesn't match <code>itemid</code> (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=49">#49</a>): 'name clashes' warning on skin import no longer displayed when no clashes detected (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=67">#67</a>): Add resilency to upgrade scripts (Frankenstein)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=88">#88</a>): PHP5.1: "Fatal error: Only variables can be passed by reference" (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=87">#87</a>): Translate &amp; -&gt; &amp;amp; when links added via toolbar (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=42">#42</a>): <code>formatDate</code> didn't always use the correct timezone (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=43">#43</a>): Only load user language file when logged in (karma).</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=76">#76</a>): Disabling site blocked admin menu access (karma).</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=57">#57</a>): PostRegister event not fired from inside admin area.</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=58">#58</a>): images and popups were not in feeds. (karma)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=33">#33</a>): add item form invalid ticket error (admun)</li>\r
-            <li>FIXED: Most buttons of the toolbar reset the scroll position of the textarea to the top in Firefox (leonbloy)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=64">#64</a>): Applications that use the metaweblogAPI, such as Ecto can now also access and edit the extended body (rakaz)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=63">#63</a>): _getArrayVal() always returned first element of array (rakaz)</li>\r
-            <li>ADDED: add InitSkinParse event (rakaz)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=38">#38</a>): added alternative output for &lt;%title%&gt;, &lt;%itemtitle%&gt;, &lt;%previtemtitle%&gt; and &lt;%nextitemtitle%&gt; (rakaz)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=51">#51</a>): removed hardcoded charset declaration from the RSS 2 skin (rakaz)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=55">#55</a>): add &lt;%skinvar%&gt; variable that corresponds with _CHARSET (rakaz)</li>\r
-            <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=24">#24</a>): add PostUpdateItem event (admun)</li>\r
-            <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=48">#48</a>):  &lt;%if(nextitem)%&gt; and &lt;%nextlink%&gt; didn't use the timezone offset. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6371">Basic</a>)</li>\r
-            <li>FIXED: "ADMIN.php line 5270" fatal error when plugin filename and plugin classname mismatch (Frankenstein)</li>\r
-            <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=16">#16</a>): Event <code>PreSkinItem</code> can now modify the skin contents; <code>PreComment</code> now knows the ItemID. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6266">suggested</a> by Andy)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.21 (June 30, 2005)</strong>\r
-        <ul>\r
-            <li>FIXED: <a href="http://secunia.com/advisories/15852/">XML-RPC for PHP Unspecified PHP Code Execution Vulnerability</a></li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.2 (March 7, 2005)</strong>\r
-        <ul>\r
-            <li>ADDED: <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles</a> plugin installed on full install</li>\r
-            <li>FIXED: Installing plugins through install.php failed (karma)</li>\r
-            <li>FIXED: whitespace at start/end got trimmed on skin edit/import (karma)</li>\r
-            <li>ADDED: <code>title</code>-attributes on inline/popup images (moraes)</li>\r
-            <li>ADDED: New default skin (Ivan, hcgtv, moraes, ...)</li>\r
-            <li>ADDED: fr 1081569, <code>&lt;%if(category,catid,1)%&gt;</code> support (moraes)</li>\r
-            <li>ADDED: support for <code>rel="nofollow"</code> (Rakaz)</li>\r
-            <li>FIXED: bug 1058978, subscription list of updated plugin showed the updated subscriptions while the old subscription-list was still in the database. Nucleus now gives a warning (TeRanEX)</li>\r
-            <li>FIXED: bug 1083959, closed site still allowed posting comments (karma)</li>\r
-            <li>FIXED: bug 1083971, editing blog settings was not possible on PHP versions &lt; 4.2.0 (floatval) (karma)</li>\r
-            <li>FIXED: In v3.15, deleting an item via the bookmarklet failed (karma)</li>\r
-            <li>ADDED: Support for <code>&lt;%blogsetting(short)%&gt;</code>, as suggested by caw (karma)</li>\r
-            <li>FIXED: Default skin used <code>application/xml+rss</code> instead of <code>application/rss+xml</code>, causing RSS autodiscovery to fail. (karma)</li>\r
-            <li>FIXED: Moved more hardcoded text into language files</li>\r
-            <li>FIXED: Made it so malicious users cannot trick a logged in site member/admin into visiting a specifically crafted URL that performs some admin area task. (karma).</li>\r
-            <li>FIXED: bug 976777, weblogs.com was not ping when posting draft (admun)</li>\r
-            <li>ADDED: bug 1008171, cookie-prefix (karma)</li>\r
-            <li>CHANGED: bug 1008175, move <code>getTemplate</code> into <code>MANAGER</code> class + some other performance tweaks (karma)</li>\r
-            <li>ADDED: add plugin dependency check (admun)</li>\r
-            <li>CHANGED: Sending out activation links rather than new passwords on new accounts, forgotten passwords, etc. (karma)</li>\r
-            <li>ADDED: Plugins can now make text- and textarea-optiontypes readonly (TeRanEX)</li>\r
-            <li>CHANGED: new plugin event <code>FormExtra</code> (for use with <code>ValidateForm</code>) (karma)</li>\r
-            <li>CHANGED: better error handling when commenting. Errors now displayed together with comment form. (karma)</li>\r
-            <li>CHANGED: actions (commenting, membermail, ...) can be done using any entry point, not just through <code>action.php</code> (karma)</li>\r
-            <li>CHANGED: Added <code>$</code><code>Id$</code> info in sourcefiles (karma)</li>\r
-            <li>CHANGED: PrePluginOptionsEdit-event now has an <code>extra</code>-field which can be used to add option-specific code to the page (TeRanEX)</li>\r
-            <li>ADDED: new event, PrePluginOptionsUpdate, can be used by plugins to verify/modify the new value for an option (TeRanEX)</li>\r
-            <li>ADDED: Plugins can now provide a documentation page, which is shown inside the admin area (TeRanEX)</li>\r
-            <li>ADDED: Plugins can now limit values for an option to be only numeric (<code>datatype=numerical</code>) (TeRanEX)</li>\r
-            <li>ADDED: OptionTop-methods, to let a plugin retreive an array of the x-highest (or lowest) values of an option (TeRanEX)</li>\r
-            <li>ADDED: Plugins can now make specific options for items. These options can be edited directly from the item add or edit page (TeRanEX)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.15 (November 14, 2004)</strong>\r
-        <ul>\r
-            <li>FIXED: Some XSS issues, as reported by Alexander Antipov</li>\r
-            <li>FIXED: Validate data that is sent as HTTP headers (redirects etc) (karma)</li>\r
-            <li>FIXED: bug 1029057, parsed include doesn't accept empty files (karma)</li>\r
-            <li>FIXED: bug 1036849, 'relevance' listed in list of available skinvars, while it's a templatevar (karma)</li>\r
-            <li>FIXED: It was possible to spoof the username on comments, even when "protect member names" was turned on. Reported by bigmouth. (karma)</li>\r
-            <li>FIXED: bug 1025675, if(hasplugin) causes warnings in action log when plugin does not exist (karma)</li>\r
-            <li>FIXED: bug 1008700, taking away admin attribute from a member was disallowed when that member did not have logon rights (karma)</li>\r
-            <li>FIXED: bug 968925, member edit leak out repeat password box while it should be hidden (admun)</li>\r
-            <li>FIXED: bug 933580, URLs in comments followed with a comma should not have the comma in the generated hyperlink (karma)</li>\r
-            <li>FIXED: bug 1019584, separating search terms with a '+' character caused SQL errors (karma)</li>\r
-            <li>FIXED: bug 1016217, superadmin should be allowed to edit all items/comments (karma)</li>\r
-            <li>FIXED: bug 1019191, <code>&lt;%if(blogsetting,..)%&gt;</code> / <code>&lt;%if(category,...)%&gt;</code> broken on error pages (karma)</li>\r
-            <li>FIXED: Made sure no code relies on the PHP5 setting <code>register_long_arrays</code> to be <code>On</code> (karma)</li>\r
-            <li>FIXED: <code>Call to undefined function</code> when user specified a language in its profile (jef pober)</li>\r
-            <li>FIXED: Quickmenu didn't show up after login from <code>index.php?action=showlogin</code> (karma)</li>\r
-            <li>CHANGED: new plugin event <code>ValidateForm</code> (karma)</li>\r
-            <li>CHANGED: Extra whitespace to make skin exports easier to read in text editors (karma)</li>\r
-            <li>CHANGED: e-mail notifications are now sent as <code>utf-8</code> rather than <code>iso-8859-1</code> (karma)</li>\r
-            <li>ADDED: Admin members can click the version number in the admin area to check for a newer version (karma)</li>\r
-            <li>ADDED: <code>&lt;%if(admin)%&gt;</code> and <code>&lt;%if(admin,blogname)%&gt;</code> in skins (karma)</li>\r
-            <li>ADDED: In the admin area, a list of all comments for a blog is now available (karma)</li>\r
-            <li>ADDED: <code>ITEM::getitem</code> returns blogid, as suggested by leonbloy (karma)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.1 (July 28, 2004)</strong>\r
-        <ul>\r
-            <li>FIXED: Nucleus v3.01 was missing a fix in <code>backup.php</code>, which could cause fulltext key info not to be backed up correctly</li>\r
-            <li>ADDED: support for patch levels, so plugin API enhancements can be distributed to power users earlier (<a href="http://forum.nucleuscms.org/viewtopic.php?t=4142" title="More info...">suggested</a> by TeRanEX)</li>\r
-            <li>FIXED: bug 974090, multiple identical SQL queries were executed when checking if a plugin is available (karma)</li>\r
-            <li>FIXED: Default language wasn't always respected (fushimi)</li>\r
-            <li>CHANGED: new bookmarklet style (TeRanEX / moraes)</li>\r
-            <li>FIXED: After a karma vote, redirection to referer URL failed if <code>register_globals</code> is turned off (karma)</li>\r
-            <li>FIXED: SQL Injection Vulnerability, reported by aCiDBiTS</li>\r
-            <li>FIXED: bug 689468, moved PostAddComment from action.php to COMMENTS.php(admun)</li>\r
-            <li>FIXED: bug 967580, Class variables were not explicitly defined in PHP classes (karma)</li>\r
-            <li>FIXED: IE6 unreadable Admin menu textarea (admun)</li>\r
-            <li>FIXED: Skin exports for skins containing CDATA sections (like the RSS feeds) caused the <code>skinbackup.xml</code> to contain invalid XML. (Import still worked, however) (karma)</li>\r
-            <li>FIXED: German language file wrong translation (admun)</li>\r
-            <li>CHANGED: replaced <code>split</code> by <code>preg_split</code> in the parser class. Should be faster according to PHP docs (karma)</li>\r
-            <li>FIXED: documentation typo (admun)</li>\r
-            <li>FIXED: PHP5: Install script failed to discover install path automatically (karma)</li>\r
-            <li>FIXED: Skin parser no longer parses skinvars when they are inside a non-displayed <code>if</code>-section (karma)</li>\r
-            <li>FIXED: bug 817361, prefix http:// to member's URL if missing (admun)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.01 (July 13, 2004)</strong>\r
-        <ul>\r
-            <li>FIXED: PHP5: Links to plugin admin area broken (radekradek)</li>\r
-            <li>FIXED: bug 966011, skins created with v2.0 could not be imported (karma)</li>\r
-            <li>FIXED: Security issue spotted by rADo2</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.0 (May 30, 2004)</strong>\r
-        <ul>\r
-            <li>FIXED: When adding a weblog, select globally defined default skin by default (TeRanEX)</li>\r
-            <li>FIXED: CSS conflict in default skin (moraes)</li>\r
-            <li>FIXED: ADMIN.php no-cache after doctype added to support dynamic content for plugins in admin area (rADo2)</li>\r
-            <li>FIXED: vars4.1.0.php fixed a strange bug for some PHP installs having empty $_REQUEST[] (rADo2)</li>\r
-            <li>FIXED: globalfunctions.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
-            <li>FIXED: install.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
-            <li>FIXED: install.php - installCustomSkins skinbackup.xml renamed (rADo2)</li>\r
-            <li>FIXED: install.php - installCustomPlugs now correctly syncs plugin events (rADo2)</li>\r
-            <li>FIXED: Forcing focus on add/edit window after closing media library (nakahara21)</li>\r
-            <li>ADDED: <code>class</code> attributes on textareas that allow skins/templates to be edited (karma)</li>\r
-            <li>FIXED: Documentation and errors now tell to chmod config.php to 444 instead of 644 (hcgtv)</li>\r
-            <li>CHANGED: Admin area style power-up (Radek)</li>\r
-            <li>FIXED: Install script used $PHP_SELF, which is not available when register_globals is off (nakahara21)</li>\r
-            <li>FIXED; Skin import failed if there were CDATA sections (Nucleus Japan)</li>\r
-            <li>FIXED: <code>undoMagic</code> choked on array variables (Nucleus Japan)</li>\r
-            <li>FIXED: htmlspecialchars causes broken url like "&amp;amp;amp;" (Nucleus Japan)</li>\r
-            <li>FIXED: PostAddCategory event was never called (Nucleus Japan)</li>\r
-            <li>FIXED: PostAddCategory event was not called when creating a new weblog (Nucleus Japan)</li>\r
-            <li>FIXED: &lt;%blogurl%&gt; problem on category lists (nakahara21)</li>\r
-            <li>CHANGED: Took out the HTTP Authentication part for now (it has no real use yet, and caused problems when Nucleus is installed in a protected directory)</li>\r
-            <li>FIXED: When the 'Allow login edit' option was disabled, the e-mail address was not checked for validity when a user edited his/her settings. This would cause an e-mail with new password to be sent out to an invalid address. (Frankenstein)</li>\r
-            <li>FIXED: Some PHP files were missing the closing <code>?&gt;</code> tag (ikeizer)</li>\r
-            <li>FIXED: Plugins were inable to delete options (leonbloy)</li>\r
-            <li>FIXED: XML-RPC: <code>metaWeblog.newPost</code> fails when an empty array is passed as list of categories (caused problems with Ecto)</li>\r
-            <li>FIXED: Eliminated 2 SQL queries on most requests.</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v3.0 RC (April 27, 2004)</strong>\r
-        <ul>\r
-            <li>CHANGED: Labeled it v3.0, since users started believing "2.5 beta == 25 final"</li>\r
-            <li>FIXED: XML-RPC: <code>metaWeblog.editPost</code> assigned the default category again when no categories were passed along (karma).</li>\r
-            <li>FIXED: XML-RPC: <code>mt.getPostCategories</code> returned an invalid result (karma)</li>\r
-            <li>CHANGED: On clean install, RSS and Atom feeds contain full items rather than excerpts only (karma)</li>\r
-            <li>REMOVED: Clean installation does not include RSS 0.91 feed anymore. Only the RSS 2.0 and Atom 0.3 feeds are included (karma)</li>\r
-            <li>ADDED: When a skin provides a preview thumbnail, it is displayed in the skin overview (include prefix required, 100x75 preview.png, preview-large.png). Also, when a readme.html file is present in the skin include dir, a link to that file is added (karma)</li>\r
-            <li>CHANGED: Allowed skin names to have slashes (<code>/</code>) in them (karma)</li>\r
-            <li>FIXED: When adding media in non-IE browsers, all text was removed</li>\r
-            <li>FIXED: Wrong times displayed / 'no such item' errors when MySQL server and PHP server are in different timezones (karma)</li>\r
-            <li>ADDED: Made sure language files for v2.5beta can be used with v2.5final without strange strings (e.g. _SETTINGS_EXTAUTH) showing up in the admin area (karma)</li>\r
-            <li>FIXED: No CSS styles were applied on 'insert media' popup (karma)</li>\r
-            <li>FIXED: Some more possible problems with URL linking in comments (karma)</li>\r
-            <li>FIXED: In Opera, buttons on the extended area added text to the main body text instead (karma)</li>\r
-            <li>CHANGED: Admin pages are being sent as <code>text/html</code> instead of <code>application/xhtml+xml</code> again, since it caused too much javascript problems. When <code>$CONF['debug']</code> is <code>1</code> however, the pages are still sent as <code>application/xhtml+xml</code> (karma)</li>\r
-            <li>FIXED: <code>itemlink</code> in templatevars didn't include itemid when used on item skins (mas)</li>\r
-            <li>FIXED: Errors when deleting plugins with options (Curtis)</li>\r
-            <li>FIXED: &amp; not encoded in category names/descriptions in admin area (karma)</li>\r
-            <li>ADDED: <code>hasplugin</code> option on <code>if</code> skinvars (Kazuhiko)</li>\r
-            <li><del>ADDED: External Authentication (plugin contains authentication code) (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
-            <li><del>ADDED: HTTP Authentication (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
-            <li>FIXED: When using the JavaScript buttons to add images/bold text/... to the extended text area, the text was added to the main text body instead if JavaScript toolbar style was set to 'simple' (karma)</li>\r
-            <li>FIXED: XML-RPC: Added <code>postid</code> in structs returned by <code>metaWeblog.getPost</code> and <code>metaWeblog.getRecentPosts</code> (karma)</li>\r
-            <li>FIXED: XML-RPC: <code>metaWeblog.getRecentPosts</code> expected a <code>string</code> instead of an <code>int</code> for the <code>amountOfPosts</code> parameter. (karma)</li>\r
-            <li>FIXED: convert linebreaks broke <code>\r\n</code> linebreaks (jmuto)</li>\r
-            <li>FIXED: On <code>index</code> and <code>search</code> skinparts, <code>nextlink</code>/<code>prevlink</code> could not be used before a <code>blog</code> or <code>searchresults</code> skinvar was called (karma)</li>\r
-            <li>FIXED: SQL errors when search query contained single quotes (<code>'</code>) (karma)</li>\r
-            <li>FIXED: Backup did not store information about FULLTEXT keys. (karma)</li>\r
-            <li>ADDED: Extended the <code>date</code> templatevariables with pre-defined formats <code>utc</code> and <code>iso8601</code> (needed for Atom syndication; karma)</li>\r
-            <li>FIXED: super-admins that were not on a blog team did not see the categories when trying to add an item to that blog (karma)</li>\r
-            <li>FIXED: <code>nextresults</code> and <code>prevresults</code> were listed as available skunvars, while they don't exist (karma)</li>\r
-            <li>FIXED: XML-RPC library wrote <code>&lt;?phpxml version="1.0"?&gt;</code> as XML header (jmuto)</li>\r
-            <li>FIXED: not longer showing comment form when comments disabled for blog (jmuto)</li>\r
-            <li>CHANGED: Plugin options are no longer limited to 128 characters (karma)</li>\r
-            <li>CHANGED: Exported skins are now saved as <code>skinbackup.xml</code> instead of <code>skindata.xml</code> to avoid confusion. (karma)</li>\r
-            <li>ADDED: New plugin events <code>AdminPrePageHead</code>, <code>AdminPrePageFoot</code>, <code>PreSendContentType</code>, <code>QuickMenu</code>, <code>BookmarkletExtraHead</code> (karma)</li>\r
-            <li>FIXED: Fix for bookmarklet, which failed in Opera (jmuto)</li>\r
-            <li>FIXED: <code>nextitemtitle</code> and <code>previtemtitle</code> skinvars did not htmlencode their output (karma)</li>\r
-            <li>CHANGED/ADDED: make all skinvars that insert links consistent. They can now all take a linktext parameter to insert a full link instead of a raw link. The <code>nextlink</code>/<code>prevlink</code> on search/index pages (introduced 2.5 beta) had to change for this. Skinvars that can take a linktext: <code>todaylink</code>, <code>archivelink</code>, <code>prevlink</code>, <code>nextlink</code> and <code>itemlink</code> (karma)</li>\r
-            <li>FIXED: XML-RPC: <code>mt.setPostCategories</code> asumed that <code>isPrimary</code> was always present (karma)</li>\r
-            <li>FIXED: Plugins that generate output when they are loaded can not longer break backups. (Xiffy)</li>\r
-            <li>FIXED: The test that auto-disabled fancy URLs was incorrect, and also applied to top-level domains that use 3 characters (like .com) (karma)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v2.5 beta (October 11, 2003)</strong>\r
-        <ul>\r
-            <li>ADDED: <code>if(previtem)</code>, <code>if(nextitem)</code> and <code>if(skintype,<em>typename</em>)</code> skinvars.</li>\r
-            <li>FIXED: RSS conditional GET wasn't working correctly (Visa Kopu)</li>\r
-            <li>ADDED: Templatevar <code>relevance</code> available when displaying search results (Xiffy)</li>\r
-            <li>CHANGED: <code>nextlink</code> and <code>prevlink</code> skinvar now also available on <code>search</code> and <code>index</code> skins. (Xiffy)</li>\r
-            <li>ADDED: Skinvars <code>nextitemtitle</code> and <code>previtemtitle</code> on <code>item</code> skins (Xiffy)</li>\r
-            <li>FIXED: Upload did not notice duplicates correctly</li>\r
-            <li>ADDED: XML-RPC: Support for <code>metaWeblog.newMediaObject</code> and <code>metaWeblog.getRecentPosts</code> methods</li>\r
-            <li>ADDED: XML-RPC: Support for the <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a> (except for <code>mt.getTrackbackPings</code>)</li>\r
-            <li>CHANGED: Fulltext search, prev/next links on search pages, ... (Xiffy)</li>\r
-            <li>FIXED/CHANGED: Action log size drops back to 250 when more than 500 entries.</li>\r
-            <li>FIXED: No more restrictions on category names</li>\r
-            <li>ADDED: possibility to create <a href="http://nucleuscms.org/documentation/devdocs/custominstall.html">custom installs</a></li>\r
-            <li>FIXED: XHTML admin documents now have a proper <code>xmlns</code> attribute set; <del>admin pages are now sent as <code>application/xhtml+xml</code> if the client browser accepts it.</del> <ins>Removed again in 3.5final</ins></li>\r
-            <li>ADDED: Plugins can now make specific options for blogs, categories and members. These options can be edited directly from the blogsettings or member settings page.</li>\r
-            <li>FIXED: It's no longer possible to select an item from an other weblog through <code>?itemid=</code> when there is a different <code>blogid=</code> parameter set in the request (or set using <code>selectBlog</code>)</li>\r
-            <li>FIXED: Disallowed while trying to create a new category on item edit</li>\r
-            <li>FIXED: Date/Time variables in date footer were not parsed</li>\r
-            <li>FIXED: Adding an item while creating a new category prevented ping to be sent to weblogs.com</li>\r
-            <li>FIXED: Right-click bookmarklet for IE (re-install to get it working with IE6)</li>\r
-            <li>FIXED/CHANGED: hyperlink conversion in comments: ftp/http/mailto supported</li>\r
-            <li>FIXED: spaces in between multiple notify e-mail addresses caused ar error message saying the e-mail address is invalid.</li>\r
-            <li>FIXED: <code>archivedate</code> skinvar ignored the 'locale' parameter that was passed to it</li>\r
-            <li>FIXED: <code>selectBlog</code> did not protect for changes in <code>?archivelist</code></li>\r
-            <li>FIXED: <code>selectCategory</code> now takes a category id instead of a name (multiple categories can have the same name)</li>\r
-            <li>CHANGED: Fancy URLs are only generated when <code>$CONF['Self']</code> does not end in <code>.php</code> (this avoids URLs like <code>index.php/item/95/item/94/member/1</code> when turning fancy URLs on without further configuration)</li>\r
-            <li>CHANGED: Install script updates <em>config.php</em> automatically when it is writable</li>\r
-            <li>CHANGED: When the content type of a skin is <code>application/xhtml+xml</code>, only send this to browsers that specify this type in their <code>HTTP_ACCEPT</code> header (otherwise, send <code>text/html</code> instead)</li>\r
-            <li>CHANGED: More intelligent search keywords highlighting (multiple separate keywords etc), also available inside comment bodies now</li>\r
-            <li>ADDED: Possibility to filter on filename in media library</li>\r
-            <li>FIXED: <code>include('config.php')</code> caused problems when another <code>config.php</code> was in the PHP include path (nils bernhard)</li>\r
-            <li>ADDED: LiveJournal conversion (moraes)</li>\r
-            <li>FIXED: Karma Vote URLs used relative links to <code>action.php</code></li>\r
-            <li>CHANGED: Support for PHP versions having <code>short_open_tag = Off</code> (Andrew Brampton/Terry Chay)</li>\r
-            <li>ADDED: Plugin options can now also use a <code>textarea</code> type. (max. size for data is still 128 bytes though)</li>\r
-            <li>FIXED: When unable to load a plugin, an error message is added to the actionlog</li>\r
-            <li>FIXED: Not all messages sent to the actionlog actually appeared there</li>\r
-            <li>ADDED: Made it possible to install more than one Nucleus installation in the same database (using a prefix to the tablenames)</li>\r
-            <li>ADDED: Nucleus does not longer allow access to the Admin Area when files like <code>install.php</code>, <code>install.sql</code> or the <code>nucleus/upgrades</code> directory are still on the server.</li>\r
-            <li>ADDED: <code>&lt;%member%&gt;</code> skinvar now also accepts <code>id</code> and <code>yourid</code> as parameter</li>\r
-            <li>FIXED: JavaScript toolbar works better in Gecko-based browsers (Mozilla Firebird/Netscape 7)</li>\r
-            <li>ADDED: <code>supportsFeature</code> method to plugin interface</li>\r
-            <li>FIXED: Destination URL parameter on <code>membermailform</code> skinvar didn't work</li>\r
-            <li>FIXED: Encoding of the window title of popup images (Osamu Higuchi)</li>\r
-            <li>FIXED: Link at end of install sequence was pointing to install.php</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v2.0 Final (April 3, 2003)</strong>\r
-        <ul>\r
-            <li>FIXED: renamed the <code>xmlrpc_encode</code> and <code>xmlrpc_decode</code> methods in <code>xmlrpc.inc.php</code>, avoiding naming conflicts on some PHP configurations that are compiled with XMLRPC support</li>\r
-            <li>FIXED: restore did not work on some PHP configurations, and did not correctly recognize <code>application/x-gzip</code> encoding type</li>\r
-            <li>ADDED: <code>if(onteam[,blogname])</code> skinvar</li>\r
-            <li>ADDED: automatic warning when headers have already been sent, with filename and linenumber included</li>\r
-            <li>ADDED: About 40 extra plugin events</li>\r
-            <li>ADDED: Made <code>&lt;%member%&gt;</code> available on all skin parts, and added <em>yourname</em>, <em>yoururl</em>, ... parameters</li>\r
-            <li>FIXED: plugin loading is now a little more robust (non-fatal errors in the plugin PHP file used to cause a fatal error afterwards)</li>\r
-            <li>ADDED: extra variables inside popup code/image code/media code template-parts: <code>width</code>, <code>height</code>, <code>link</code> and <code>text</code></li>\r
-            <li>ADDED: Extra optional parameter for <code>image</code> skinvar, indicating which information to insert on the page</li>\r
-            <li>CHANGED: Marked the <code>imagetext</code> skinvar as deprecated (use <code>image(caption)</code> instead)</li>\r
-            <li>CHANGED: Marked the <code>ifcat</code> skinvar as deprecated (use <code>if(category)</code> instead)</li>\r
-            <li>CHANGED: Marked the <code>vars</code> skinvar as deprecated (if anyone needs a hidden 'itemid' formfield [are there?], the itemid skinvar can be used instead)</li>\r
-            <li>ADDED: <code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code> method in plugin interface</li>\r
-            <li>CHANGED: comments are now also parsed using the same method as skins and items, allowing plugins, includes and more to be used there as well</li>\r
-            <li>FIXED: guests cannot longer place 'fake' comments (making it look as if a regsitered memeber made the comment)</li>\r
-            <li>FIXED: item contents is no longer trimmed</li>\r
-            <li>FIXED: Made install script look less messy</li>\r
-            <li>ADDED: <code>selectItem($id)</code> method</li>\r
-            <li>FIXED: Unable to disable comments through 'edit item'</li>\r
-            <li>ADDED: Plugins: EditItemFormExtras event gets itemid as separate parameter</li>\r
-            <li>FIXED: missing ; in presented new blog code</li>\r
-            <li>FIXED: PHP 4.0.6 didn't show item/member/... lists on admin area (PHP bug)</li>\r
-            <li>ADDED: Plugin Hook: BlogSettingsFormExtras</li>\r
-            <li>FIXED: &lt;%if(blogsetting,bcomments,1)%&gt; skinvars were not working</li>\r
-            <li>ADDED: &lt;%if(loggedin)%&gt; skinvars were not working</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v2.0 beta (January 18, 2003)</strong>\r
-        <ul>\r
-            <li>FIXED: Highlighted text no longer has &lt;!--h--&gt; in it</li>\r
-            <li>ADDED; Plugin hook: PostAuthentication</li>\r
-            <li>ADDED: Plugin hooks PreAddItemForm, AddItemFormExtras and EditItemFormExtras</li>\r
-            <li>CHANGED: Notifications emails (new comment, etc) are not sent to the person causing the notification (comment author)</li>\r
-            <li>ADDED: plugins can access global variables <code>$currentTemplateName</code> and <code>$currentSkinName</code></li>\r
-            <li>CHANGED: Spaces after commas in &lt;%image%&gt;, &lt;%popup%&gt;, &lt;%media%&gt; </li>\r
-            <li>FIXED: HTML to Text conversion didn't always work</li>\r
-            <li>ADDED: &lt;%date%&gt; templatevars extras (rfc822 &amp; rfc822GMT) (Xiffy)</li>\r
-            <li>ADDED: ranges for &lt;%blog(...)%&gt; and &lt;%otherblog(...)%&gt; skinvars</li>\r
-            <li>ADDED: templatevars &lt;%author(email)%&gt;, &lt;%author(url)%&gt; and &lt;%author(id)%&lt;</li>\r
-            <li>CHANGED: Added info on new weblog creation (split up creation process into two steps)</li>\r
-            <li>FIXED: Login screen after email address change did not work correctly</li>\r
-            <li>ADDED: Plugin Hook: PrePluginOptionsEdit</li>\r
-            <li>ADDED: Added a getMinNucleusVersion method to the plugin interface</li>\r
-            <li>ADDED: PostPluginOptionsUpdate plugin event</li>\r
-            <li>ADDED: Javascript toolbar: align left/center/right buttons (Irmo)</li>\r
-            <li>ADDED: RSD skin/template</li>\r
-            <li>ADDED: 'Fancy' URLs option &amp; support files. Allows for URLs like http://hostname/archive/1/2003-01-05 instead of http://hostname/index.php?blogid=1&amp;archive=2003-01-05</li>\r
-            <li>ADDED: RSS 2.0 skin/template (Xiffy)</li>\r
-            <li>ADDED: skinvar &lt;%skinname%&gt;</li>\r
-            <li>ADDED: if/else in skins. parameters for 'if' are currently 'category' (=ifcat) or 'blogsetting/settingname' (settingname = columnname from database...)</li>\r
-            <li>ADDED: Etag/If-None-Match support for xml-rss.php (needs some more work)</li>\r
-            <li>FIXED: more friendly bookmarklet for Opera 6 users (all tabs are visible, editing through bookmarklet works)</li>\r
-            <li>ADDED: on edit item, the post time can be changed (only if 'allow post to past' is enabled)</li>\r
-            <li>ADDED: 'Allow Post to Past' option on weblog basis</li>\r
-            <li>ADDED: IncludeMode and IncludePrefix settings in nucleus_skin_desc + interface to change these settings + user IncludePrefix while parsing includes.</li>\r
-            <li>CHANGED: nucleusbutton skinvar now takes into account IncludeMode</li>\r
-            <li>CHANGED: btimeoffset column is now DECIMAL instead of INT </li>\r
-            <li>CHANGED: took away actionurl parameters from commentform and membermailform skinvars (it's a global setting now)</li>\r
-            <li>ADDED: &lt;%set(property,value)%&lt; skin/template-var to set global parser properties. Only one option defined so far: 'IncludeMode'. Can be 'skindir' or 'normal' and affects the include/parseinclude/phpinclude skin/templatevars</li>\r
-            <li>ADDED: &lt;%skinfile(filename)%&gt; skinvar (to be used on imported skins)</li>\r
-            <li>ADDED: $CONF['SkinsURL'] and $DIR_SKINS (config.php)</li>\r
-            <li>CHANGED: friendly names used on skin edit (instead of 'index', 'item' etc)</li>\r
-            <li>ADDED: action url to global settings (action.php location)</li>\r
-            <li>ADDED: $desturl and $actionurl parameters on membermailform skinvar</li>\r
-            <li>ADDED: skin import/export class</li>\r
-            <li>CHANGED: media library now works with multiple collections, of which one is private to the site member, and the rest is globally shared.</li>\r
-            <li>CHANGED: base skin can now be changed (it's now a config setting). This skin is ONLY used in two cased: when all else fails, and when the selected skin does not have contents for the needed skinpart</li>\r
-            <li>CHANGED: positive and negative karma votes are now kept separately, since that works better and is more flexible. The &lt;%karma%&gt; templatevar received an extra parameter to select which information to show</li>\r
-            <li>ADDED: skinvars archivenext/archiveprev/archivetype</li>\r
-            <li>CHANGED: skinvars nextlink/prevlink now also work on archive skins</li>\r
-            <li>CHANGED: move item now also allows to choose a category</li>\r
-            <li>CHANGED: new items can be added to other blogs also now</li>\r
-            <li>FIXED: archivedate skinvar displaying wrong date</li>\r
-            <li>FIXED: serverVar function was not working when using vars4.0.6.php</li>\r
-            <li>ADDED: now also listing category in itemlist</li>\r
-            <li>CHANGED: Admin Area now uses the Site Name instead of Nucleus</li>\r
-            <li>CHANGED: admin.css and admin area: corrected h1, h2, h3 depth levels</li>\r
-            <li>ADDED: batch operations</li>\r
-            <li>FIXED: when language settings are changed, the new language is used immediately (only for global settings, not for member settings)</li>\r
-            <li>CHANGED: archivelist query now uses the  SUBSTRING MySQL function instead of the YEAR/DAYOFMONTH/MONTH functions (caused trouble for some people)</li>\r
-            <li>ADDED: maxlength attributes on forms</li>\r
-            <li>CHANGED: commentlists: placed time/author in same table cell </li>\r
-            <li>ADDED: extra convertor for Blogger blogs that use YACCS comments (exportable in CAIF format)</li>\r
-            <li>FIXED: some possible security issues (thanks to Morgan Tocker)</li>\r
-            <li>FIXED: shortening of strings does not corrupt HTML entities anymore (e.g. in RSS-feeds)</li>\r
-            <li>CHANGED: links in comments are now handled differently. Part of the URL is now displayed instead of just http://.../</li>\r
-            <li>ADDED: Opera version of bookmarklet</li>\r
-            <li>ADDED: selectLanguage() function to force the use of a certain language file</li>\r
-            <li>REMOVED: there was a plugin event AddItem which was actually not needed at all (wasn't included in the documentation too)</li>\r
-            <li>ADDED: archivelist skinvars now takes an extra limit-parameter</li>\r
-            <li>CHANGED: moved all forms which can be included through skinvar out of SKIN.php and into .template files in the nucleus/forms directory.</li>\r
-            <li>FIXED: 'clone skin' did not copy contenttype</li>\r
-            <li>FIXED: Errors in XML-RSS template (upgrading users might need to change this manually or by importing an updated skin)</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v1.55 (August 26, 2002)</strong>\r
-        <ul>\r
-            <li>ADDED: &lt;%archivedaylist%&gt; and &lt;%otherarchivedaylist%&gt; skinvars (to show archives by day instead of by month)</li>\r
-            <li>FIXED: PHP error on createAccount through action.php</li>\r
-            <li>ADDED: new parseFile-method available in index.php. Allows to parse non-blog pages with skinvars</li>\r
-            <li>FIXED: editing comments with hyperreffed links</li>\r
-            <li>ADDED: 'delete item' option on edit item, plus 'delete item' confirmation screens (also on bookmarklet)</li>\r
-            <li>CHANGED: on multi-blog systems, the admin now only gets to see the blogs for which (s)he is on the team. All other blogs are available through an 'show all blogs...' link</li>\r
-            <li>FIXED: link to recent items after weblogs.com ping was broken</li>\r
-            <li>CHANGED: plugin event call 'PreAddComment' moved to immediately before the item is added to the database</li>\r
-            <li>FIXED: tab-orders were not correct on multiple admin pages</li>\r
-            <li>ADDED: &lt;%itemid%&gt; and &lt;%itemlink%&gt; available on item pages</li>\r
-            <li>FIXED: install.php now works when the PHP option magic_quotes_runtime is enabled</li>\r
-            <li>CHANGED: install.php gives an error when PHP is compiled without MySQL installed</li>\r
-            <li>CHANGED: install.php automatically fills the 'mysql hostname' field when PHP option mysql.default_host is set.</li>\r
-            <li>FIXED: greymatter convert was not putting a reference to the weblog in the comments table.</li>\r
-            <li>CHANGED: added some linebreaks in the login screen of the admin area</li>\r
-            <li>ADDED: new plugin events: PreAddItem, PreUpdateItem, PrepareItemForEdit, PreUpdateComment, PrepareCommentForEdit</li>\r
-            <li>ADDED: JavaScript to hide empty fields when editing templates</li>\r
-            <li>CHANGED: Admin area CSS now uses relative fontsizes and fontsize-keywords (also added trick to make IE5 get it right)</li>\r
-            <li>FIXED: backup was broken :(</li>\r
-            <li>CHANGED: replaced an SQL query that caused problems (NATURAL JOIN replaced by implicit inner join)</li>\r
-            <li>ADDED: &lt;%self%&gt; available in categorylist templates</li>\r
-            <li>ADDED: &lt;%itemtitle%&gt; skinvar available on item-skins</li>\r
-            <li>FIXED: editing a comment you made in a blog that's not your own resulted in a 'disallowed action' error </li>\r
-            <li>FIXED: plugin was listed twice in the list of available skinvars</li>\r
-            <li>ADDED: &lt;%archivedate%&gt; skinvar on archive skins</li>\r
-            <li>FIXED: admininstrators could not edit details of other members</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v1.5 (August 13, 2002)</strong>\r
-        <ul>\r
-            <li>ADDED: Introducing plugins (define your own skinvars and templatevars, add event listeners, ...)</li>\r
-            <li>CHANGED: simpler and more accessible default templates/skins</li>\r
-            <li>FIXED: GreyMatter convert now works when the <code>asp_tags</code> option in PHP is enabled</li>\r
-            <li>ADDED: title and authorName fields in Blogger API getRecentItems call</li>\r
-            <li>ADDED: HTML label tags for radio buttons and checkboxes (this way you can click anywhere on the text instead of only on the radio button/checkbox itself)</li>\r
-            <li>FIXED: deleting a comment you made in a blog that's not your own resulted in a 'disallowed action' error (thanks moraes)</li>\r
-            <li>CHANGED: the place where comments are inserted can now be chosen from within the template. Just include &lt;%comments%&gt; in the ITEM templatepart whereever you want the comment count (or comments) to appear. In upgrading, the old ordening is imitated by adding '&lt;%comments%&gt;' to the end of the ITEM template part.</li>\r
-            <li>CHANGED: now trimming parameters that were passed to skinvars/templatevars</li>\r
-            <li>ADDED: &lt;%referer%&gt; skinvar, which inserts HTTP_REFERER</li>\r
-            <li>ADDED: '- New Category -' can now be chosen on add/edit item (only for blog admins). A new category is then created, and the chance is given to edit the category details.</li>\r
-            <li>ADDED: optional attributes for templatevars &lt;%time(format)%&gt;, &lt;%date(format)%&gt;, &lt;%syndicate_title(maxLength)%&gt;, &lt;%syndicate_description(maxLength)%&gt;</li>\r
-            <li>ADDED: new user registrations show up in action log</li>\r
-            <li>ADDED: new option to allow non-members to send messages (the membermailform)</li>\r
-            <li>FIXED: when an admin edits an item written by someone else, and uploads an image, the image is now saved under the original authors media directory</li>\r
-            <li>CHANGED: &lt;%author(realname)%&gt; in item templates now inserts the real name of the author</li>\r
-            <li>FIXED: install.php now works when magic_quotes_gpc is disabled</li>\r
-            <li>ADDED: New settings: PluginURL, MaxUploadSize, ProtectMemNames</li>\r
-            <li>ADDED: hotlinks to the defined skinparts from the skin overview (also gives a good view on which skinparts have been defined and which have not been defined)</li>\r
-            <li>ADDED: &lt;%smartbody%&gt; for item templates, which chooses between showing the body and extended part, based on the extended part being empty or not. Using this, the body text can be your full text, and the extended part could be seen as an 'introduction', which you want to show on the front page. (request from smarko)</li>\r
-            <li>ADDED: &lt;%edit%&gt;, &lt;%editlink%&gt; and &lt;%editpopupcode%&gt; can be used in item templates (and in items themselves) to insert a link  to where the item can be edited/deleted. (default setting uses bookmarklet to do this). The edit links only get shown when the user is allowed to edit a certain item (blog admin or item author). </li>\r
-            <li>FIXED: bookmarklet now works correctly when magic_quotes_gpc and register_globals are turned off </li>\r
-            <li>ADDED: PHP and MySQL versions are listed during the installation proces, with warnings when those version numbers are lower than what Nucleus requires</li>\r
-            <li>CHANGED: item parsing method changed, so it's more easily extensible. plugin, parsedinclude, include and phpinclude are now also allowed in some templates. Inside items, there are also 3 allowed variables: 'image', 'media' and 'popup'</li>\r
-            <li>FIXED: image popups didn't work with register_globals disabled</li>\r
-            <li>CHANGED: renamed method: getBlogidFromName -&gt; getBlogIDFromName (consistency)</li>\r
-            <li>ADDED: method selectCategory($name)</li>\r
-            <li>FIXED: Nucleus now handles data correctly when magic_quotes_gpc is disabled (solves some problems with template editing)</li>\r
-            <li>CHANGED: categories in selection box are now sorted by name (tip from katatonik)</li>\r
-            <li>FIXED: Not all tables got exported on backup :( (thanks Xiffy!)</li>\r
-            <li>FIXED: add item form didn't handle keyboard shortcuts correctly (thanks Hop!)</li>\r
-            <li>CHANGED: 'remember me' checkbox is now checked when the information was remembered from before (this way, the cookie gets set again and does not expire)</li>\r
-            <li>FIXED: after a category got selected through skinvar parameters, skinvars applying to all categories also got applied only to the last category that was selected (thanks Xiffy!)</li>\r
-            <li>ADDED: table nucleus_comment got an extra cblog column (redundant) to allow to find the blog that goes with a comment more easily.</li>\r
-            <li>FIXED: email address checking routine (false email addresses like foo@@bar.com were allowed)</li>\r
-            <li>CHANGED: New installations now get a robots.txt file (disallows karma voting/commenting/... by bots)</li>\r
-            <li>CHANGED: JavaScript preview now shows image outlines and popup image links</li>\r
-            <li>CHANGED: searchform now available on ALL skintypes</li>\r
-            <li>FIXED: headers in globalfunctions/SKIN.php now sent _only_ when no other headers have been sent before. Should make including easier.</li>\r
-            <li>CHANGED: RSS-auto-discovery tag in default skin</li>\r
-            <li>CHANGED: formfields got labels (accessibility issue). Also access keys have been defined: L for login, 4 for Search (on windows, actions keys are used together with the ALT key)</li>\r
-            <li>ADDED: left and right box buttons on JS toolbar</li>\r
-            <li>FIXED: truncated entry when login is requested after adding (data didn't get passed on correctly)</li>\r
-            <li>ADDED: &lt;%authorlink%&gt; to template vars for item templates (this one can take catid into account)</li>\r
-            <li>ADDED: $CONF['Self'] =&gt; $CONF['ItemURL'], $CONF['IndexURL'], ... to optionally allow people to use different files for items/archives/...</li>\r
-            <li>CHANGED: Now using mysql_fetch_assoc instead of mysql_fetch_array (efficiency)</li>\r
-            <li>CHANGED: The &lt;%searchresults%&gt; and &lt;%othersearchresults%&gt; skintags got an extra parameter to limit the number of results (defaults to 50)</li>\r
-            <li>FIXED: doError did not take into account chosen skin</li>\r
-            <li>FIXED: Commentform not shown anymore for closed items (a message is shown instead)</li>\r
-            <li>CHANGED: Removed all unneccessary javascript: links (deprecated)</li>\r
-            <li>CHANGED: Media: Procentual width and height values are now allowed in image and inline constructs (e.g. &lt;%image(bla.gif|50%|50%|lala)%&gt;)</li>\r
-            <li>FIXED: Blogger API: getPost wasn't returning category name</li>\r
-            <li>FIXED: Blogger API: getRecentPosts wasn't converting linebreaks</li>\r
-            <li>FIXED: surpressed warning on mysql_close</li>\r
-            <li>FIXED: install-script now also accepts email addresses that contain uppercase characters</li>\r
-            <li>FIXED: imported items did not show up in the weblog</li>\r
-            <li>FIXED: blogger api &lt;title&gt; thingie didn't work</li>\r
-            <li>CHANGED: Made all uploaded files be chmodded to 644</li>\r
-            <li>FIXED: template cloning didn't clone all parts</li>\r
-            <li>FIXED: After new user registration, there was a redirect to the members url (use 'desturl' now to indicate destination url)</li>\r
-            <li>...and a lot of small changes</li>\r
-        </ul>\r
-    </li>\r
-    <li>\r
-        <strong>Nucleus v1.1 (April 30, 2002)</strong>\r
-        <ul>\r
-            <li>Started assuming that at least PHP 4.0.5 is available. (for older PHP versions, some small code-changes should do the trick)</li>\r
-            <li>Added bookmarklets for Mac/IE5 users and Mozilla. Also, made the title of the page also show up in the title field of the new item. Makes more sense. <small>(thanks to <a href="http://www.35mm.org">Ricardo Lamego</a>)</small></li>\r
-            <li>Made the <a href="http://www.php.net/manual/en/language.variables.predefined.php" title="see PHP doc">predefined PHP variables</a> available in scripts called through &lt;%phpinclude(..)%&gt; <small>(thanks to <a href="http://www.polskaya.be/">Polskaya</a> for noticing the problem)</small></li>\r
-            <li>Fixed: &lt;%additemform%&gt; and &lt;%nucleusbutton%&gt; didn't work when admin area was not in a dir named 'nucleus'</li>\r
-            <li>Added: &lt;%sitevar(adminurl)%&gt; and shortcut &lt;%adminurl%&gt; to include the URL of the admin area</li>\r
-            <li>Changed all references to nucleus.demuynck.org into references to <a href="http://nucleuscms.org/">nucleuscms.org</a></li>\r
-            <li>Extra settings: cookie domain, cookie path, secure cookie (for https)</li>\r
-            <li>Instead of stripping tags in comments, &lt; and &gt; are now replaced by their entities (&amp;lt; and &amp;gt;). This way, greater than and lower than signs can be used in comments <small>(inspiration by <a href="http://www.adfundum.be/">Steven Verbruggen</a>)</small></li>\r
-            <li>Added charset to language files, so international character sets can be used when needed <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=56">forum</a>)</small></li>\r
-            <li>Added an extra content-type attribute to skins, so the output type can be set correctly by Nucleus</li>\r
-            <li>Removed the 'headlines' skin and templates. Don't want new users to get too confused.</li>\r
-            <li>Notification emails now also get the senders display name</li>\r
-            <li>All errors now handled by doError method in globalfunctions.php (makes it easier when you want to use your own error handler instead of the error skin)</li>\r
-            <li>Site-members can now override the default site-language setting for the pages they visit</li>\r
-            <li>Added skinvars &lt;%otherarchive%&gt; and &lt;%othersearchresults%&gt; for use on archive/search pages.</li>\r
-            <li>Skinvar &lt;%searchform%&gt; now takes an optional parameter: blogname (for which you want a search form)</li>\r
-            <li>Introducing categories! (new settings; new skinvars category, categorylist and ifcat; new template vars &lt;%category%&gt;, &lt;%catid%&gt; and &lt;%categorylink%&gt;; new optional category params for skinvars blog, otherblog, archive, otherarchive, archivelist, otherarchivelist)</li>\r
-            <li>Fixed: error skin didn't get copied on skin cloning</li>\r
-            <li>Even more new skinvars to make skinning easier: &lt;%todaylink%&gt;, &lt;%archivelink%&gt;, &lt;%prevlink%&gt; and &lt;%nextlink%&gt; <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=67">forum</a>)</small></li>\r
-            <li>Fixed: The install script was giving warnings about uninitialized variables on some PHP configurations</li>\r
-            <li>Moved version history to separate file</li>\r
-            <li>Made upgrade scripts a little more robust and more verbose</li>\r
-            <li>XML-RPC: <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> support</li>\r
-            <li>XML-RPC: &lt;title&gt; and &lt;category&gt; tags can now be used with the Blogger API (similar to b2)</li>\r
-            <li>Fixed problem with create account <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=92">forum</a>)</small></li>\r
-            <li>Made it so Nucleus still works when using PHP &gt;4.1.0 with register_globals turned off, which is the default setting for new installations <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=95">forum</a>)</small></li>\r
-            <li>Media library: popup now requests login when needed</li>\r
-            <li>Media library: option to auto-prefix uploaded files with date (turned on by default)</li>\r
-            <li>Backup/Restore: backup file name now has date + nucleus.sql renamed to install.sql + extra "I'm sure"-checkbox on restore to avoid errors <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=100">forum</a>)</small></li>\r
-            <li>Javascript toolbar: simpler version available that works in Mozilla</li>\r
-            <li>Fixed: Closed items don't show 'no comments' link anymore <small>(forum)</small></li>\r
-            <li>Fixed: Drafts items don't result in 'January 1970' entries in archivelist</li>\r
-            <li>Fixed: Added &lt;image&gt; tag to xmlrss skin for new installs. It's required. (defaults to a nucleus logo, up to you to change it)</li>\r
-            <li>Fixed: Error with restore (content with semicolons in it would not get restored)</li>\r
-            <li>Added: Extra notification options</li>\r
-            <li>Archives can now also be accessed by day, and an extra daylink template var is available in date headers</li>\r
-            <li>Fixes in default skin</li>\r
-            <li>As always, lots of small fixes &amp; code rewrites</li>\r
-            <li>\r
-                Changes (additions to and <del>deletions</del> from) language file:\r
-                <ul>\r
-                    <li>_SETTINGS_COOKIES_TITLE</li>\r
-                    <li>_SETTINGS_COOKIEDOMAIN</li>\r
-                    <li>_SETTINGS_COOKIEPATH</li>\r
-                    <li>_SETTINGS_COOKIESECURE</li>\r
-                    <li>_SKIN_UPDATED</li>\r
-                    <li>_TEMPLATE_UPDATED</li>\r
-                    <li>_CHARSET</li>\r
-                    <li>_MEMBERS_DEFLANG</li>\r
-                    <li>_MEMBERS_USESITELANG</li>\r
-                    <li>_ADD_CATEGORY</li>\r
-                    <li>_ADD_DRAFTNFUTURE</li>\r
-                    <li>_ERROR_NOSUCHLANGUAGE</li>\r
-                    <li>_ERROR_NOSUCHCATEGORY</li>\r
-                    <li>_ERROR_DELETEDEFCATEGORY</li>\r
-                    <li>_ERROR_DELETELASTCATEGORY</li>\r
-                    <li>_ERROR_BADCATEGORYNAME</li>\r
-                    <li>_ERROR_DUPCATEGORYNAME</li>\r
-                    <li>_CONFIRMTXT_CATEGORY</li>\r
-                    <li>_DELETED_CATEGORY</li>\r
-                    <li>_LISTS_TYPE</li>\r
-                    <li>_SKIN_TYPE</li>\r
-                    <li>_YOURSITE</li>\r
-                    <li><del>_LIST_COMMENT_HOST</del></li>\r
-                    <li>_SETTINGS_MEDIA</li>\r
-                    <li>_SETTINGS_MEDIAPREFIX</li>\r
-                    <li>_SETTINGS_MEMBERS</li>\r
-                    <li>_LOGIN_FORGOT</li>\r
-                    <li>_TEMPLATE_CATEGORYLIST</li>\r
-                    <li>_TEMPLATE_CATHEADER</li>\r
-                    <li>_TEMPLATE_CATITEM</li>\r
-                    <li>_TEMPLATE_CATFOOTER</li>\r
-                    <li>_EBLOG_DEFCAT</li>\r
-                    <li>_EBLOG_CAT_TITLE</li>\r
-                    <li>_EBLOG_CAT_NAME</li>\r
-                    <li>_EBLOG_CAT_DESC</li>\r
-                    <li>_EBLOG_CAT_CREATE</li>\r
-                    <li>_EBLOG_CAT_UPDATE</li>\r
-                    <li>_EBLOG_CAT_UPDATE_BTN</li>\r
-                    <li>_EBLOG_NOTIFY_ON</li>\r
-                    <li>_EBLOG_NOTIFY_COMMENT</li>\r
-                    <li>_EBLOG_NOTIFY_KARMA</li>\r
-                    <li>_EBLOG_NOTIFY_ITEM</li>\r
+                       <li>\r
+                               ADDED: Serveral changes and fixes from Nucleus Japan (details in the log files of the <a href="http://sourceforge.net/svn/?group_id=66479">Nucleus repository</a> at sourceforge.net)\r
+                               <ul>\r
+                                       <li>ADDED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=68">#68(JP)</a>): Encrypted cookie key. (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=60">#60(JP)</a>): Item link in notification email is wrong. (shizuki)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=62">#62(JP)</a>): email address is not referred in &lt;%usermail%&gt;. (shizuki)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=66">#66(JP)</a>): Even if calling PostPluginOptionsUpdate, getOption does not returns correct value. (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=49">#49(JP)</a>): PLUGIN::getAllItemOptions does not work correctly. (NKJG)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=57">#57(JP)</a>): SQL error happens when updating plugin option. (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=56">#56(JP)</a>): When creating db backup, the key length drops (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=41">#41(JP)</a>): fixed dropped info during backing up (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=40">#40(JP)</a>): fixed PostAddCategory event (Kimitake)</li>\r
+                                       <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=48">#48(JP)</a>): Super-admin always can login to admin page (Kimitake)</li>\r
+                                       <li>ADDED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=45">#45</a>  from the Japanese Tracker): include code from NP_0TicketForPlugin in the core (Changes from Nucleus Japan)(Katsumi)</li>\r
+                               </ul>\r
+                       </li>\r
+                       <li>ADDED: Sanitize parameters such as $_GET and $_SERVER['REQUEST_URI'] etc. to avoid XSS (from Nucleus Japan)</li>\r
+                       <li>ADDED: new events for Media upload: PreMediaUpload and PostMediaUpload (kaigreve)</li>\r
+                       <li>ADDED: new skinvar bloglist (kaigreve)</li>\r
+                       <li>ADDED: new method for URL rewriting with the global variable virtualpath, new .htaccess file can be found in the folder extra/fancyurl-2, more information <a href="http://forum.nucleuscms.org/viewtopic.php?t=12241">forum(Another approach to Fancy URLs)</a> (kaigreve and Legolas)</li>\r
+                       <li>FIXED: allow + in email address, see <a href="http://forum.nucleuscms.org/viewtopic.php?t=14207">forum(Minor bug fix in globalfunctions.php)</a> (wgroleau)</li>\r
+                       <li>FIXED: XHTML compliance in default skin (admun)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=80&amp;do=details">#80</a>): Atom 1.0 support (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=129&amp;do=details">#129</a>): Plugin API: SpamCheck event called from core. (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=128&amp;do=details">#128</a>): Don't show DISALLOWED(XXXX) errors (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=127&amp;do=details">#127</a>): parse_commentform: double-escaped URLs (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=121&amp;do=details">#121</a>): backup fails when <code>$plugin-&gt;getTableList()</code> doesn't return an array (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=118&amp;do=details">#118</a>): Errors in default skin (legolas)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=119&amp;do=details">#119</a>): Added optional includeMode/includePrefix parameters to <code>parseFile()</code> (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=115&amp;do=details">#115</a>): Redundant database queries on member table (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=114&amp;do=details">#114</a>): Magic quotes not correctly undone when <code>magic_quotes_sybase</code> enabled (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=104&amp;do=details">#104</a>): Return to blogsettings - link missing on edit category</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=107&amp;do=details">#107</a>): Better path detection in install.php (dekarma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=106&amp;do=details">#106</a>): Make 'Log Out' link under Comment box work with Fancy URLs (Wendy Smoak)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=99&amp;do=details">#99</a>): Use workaround when the only installed MySQL PHP extension is mysqli (dekarma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=98&amp;do=details">#98</a>): More "Fatal error: Only variables can be passed by reference" occurrences on some installations (pete)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=23&amp;do=details">#23</a>): adding email/url + email field display in blog comment list (admun)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=12">#12</a>): item id and timestamp were not sent along with <code>GenerateURL</code> event when <code>itemlink</code> called from commentvars (karma)</li>\r
+                       <li>CHANGED: Now using XML-RPC for PHP (phpxmlrpc) v1.2.1</li>\r
+                       <li>FIXED: (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=97">#97</a>): file uploads didn't check <code>$_FILES['file']['error']</code> codes. (dekarma)</li>\r
+                       <li>CHANGED: Update user instruction for Blogger conversion tool</li>\r
+                       <li>ADDED: When an e-mail is provided in the comment-form it is validated. (TeRanEX)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=23&amp;do=details">#23</a>): Splitted the URL &amp; E-mail field in comments. (gRegor, ketsugi, Red Dalek, TeRanEX)</li>\r
+                       <li>ADDED: (bug 817364): delete member enhancement (admun)</li>\r
+                       <li>ADDED: Auto save draft (Legolas)</li>\r
+                       <li>ADDED: Custom skin parts (tutorio)</li>\r
+                       <li>ADDED: ヘルプファイルにスキン変数&lt;%charset%&gt;のヘルプを追加(add description of charset skin variable to documentation.) (shizuki)</li>\r
+                       <li>FIXED: ヘルプファイルの「if/else/endif」の項目を修正。「ifnot/elseif/elseifnot」を追加(fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot) (shizuki)</li>\r
+                       <li>ADDED: プラグインAPIドキュメントに「doIf()」メソッドの項目を追加(add description of the doIf function to the plugin documentation) (shizuki)</li>\r
+                       <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=39">#39(JP)</a>): 管理領域のContent-Typeをtext/htmlのままに(reverted content type for admin area)(Kimitake)</li>\r
+                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=42">#42(JP)</a>): プリインストールされるATOMのスキンの「xml:lang」が「en-us」になっていたのを修正(atom feed template specifies xml:lang but it is en-us, it should be ja, in install.sql)(Kimitake)</li>\r
+                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=46">#46(JP)</a>: ドラフト保存されるアイテムの日付のフォーマットを修正(fixed date format for draft entry)(Kimitake)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.24 (November 11, 2006)</strong>\r
+               <ul>\r
+                       <li>FIXED: XSS issue (reported by <a href="http://www.jpcert.or.jp/">JPCERT/CC</a>).</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.23 (May 23, 2006)</strong>\r
+               <ul>\r
+                       <li>FIXED: Remote code execution vulnerability (reported by rgod).</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.22 (August 21, 2005)</strong>\r
+               <ul>\r
+                       <li>FIXED: Major security vulnerability in the phpxmlrpc library.</li>\r
+                       <li>FIXED: New NP_SkinFiles version, fixing a minor security issue. (rakaz)</li>\r
+                       <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=17">#17</a>): An errormessage is now displayed when logon through loginform failed. (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=91">#91</a>): Initialize variables in MEMBER class (andrew)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=90">#90</a>): there was no plugin callback on member edits when the email address changed (andrew)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=90">#90</a>): when editing members other than yourself, you shouldn't be logged out (andrew)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=85">#85</a>): If both <code>itemid</code> and <code>catid</code> are specified in the URL, ignore <code>catid</code> if it doesn't match <code>itemid</code> (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=49">#49</a>): 'name clashes' warning on skin import no longer displayed when no clashes detected (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=67">#67</a>): Add resilency to upgrade scripts (Frankenstein)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=88">#88</a>): PHP5.1: "Fatal error: Only variables can be passed by reference" (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=87">#87</a>): Translate &amp; -&gt; &amp;amp; when links added via toolbar (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=42">#42</a>): <code>formatDate</code> didn't always use the correct timezone (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=43">#43</a>): Only load user language file when logged in (karma).</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=76">#76</a>): Disabling site blocked admin menu access (karma).</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=57">#57</a>): PostRegister event not fired from inside admin area.</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=58">#58</a>): images and popups were not in feeds. (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=33">#33</a>): add item form invalid ticket error (admun)</li>\r
+                       <li>FIXED: Most buttons of the toolbar reset the scroll position of the textarea to the top in Firefox (leonbloy)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=64">#64</a>): Applications that use the metaweblogAPI, such as Ecto can now also access and edit the extended body (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=63">#63</a>): _getArrayVal() always returned first element of array (rakaz)</li>\r
+                       <li>ADDED: add InitSkinParse event (rakaz)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=38">#38</a>): added alternative output for &lt;%title%&gt;, &lt;%itemtitle%&gt;, &lt;%previtemtitle%&gt; and &lt;%nextitemtitle%&gt; (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=51">#51</a>): removed hardcoded charset declaration from the RSS 2 skin (rakaz)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=55">#55</a>): add &lt;%skinvar%&gt; variable that corresponds with _CHARSET (rakaz)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=24">#24</a>): add PostUpdateItem event (admun)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=48">#48</a>):  &lt;%if(nextitem)%&gt; and &lt;%nextlink%&gt; didn't use the timezone offset. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6371">Basic</a>)</li>\r
+                       <li>FIXED: "ADMIN.php line 5270" fatal error when plugin filename and plugin classname mismatch (Frankenstein)</li>\r
+                       <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=16">#16</a>): Event <code>PreSkinItem</code> can now modify the skin contents; <code>PreComment</code> now knows the ItemID. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6266">suggested</a> by Andy)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.21 (June 30, 2005)</strong>\r
+               <ul>\r
+                       <li>FIXED: <a href="http://secunia.com/advisories/15852/">XML-RPC for PHP Unspecified PHP Code Execution Vulnerability</a></li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.2 (March 7, 2005)</strong>\r
+               <ul>\r
+                       <li>ADDED: <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles</a> plugin installed on full install</li>\r
+                       <li>FIXED: Installing plugins through install.php failed (karma)</li>\r
+                       <li>FIXED: whitespace at start/end got trimmed on skin edit/import (karma)</li>\r
+                       <li>ADDED: <code>title</code>-attributes on inline/popup images (moraes)</li>\r
+                       <li>ADDED: New default skin (Ivan, hcgtv, moraes, ...)</li>\r
+                       <li>ADDED: fr 1081569, <code>&lt;%if(category,catid,1)%&gt;</code> support (moraes)</li>\r
+                       <li>ADDED: support for <code>rel="nofollow"</code> (Rakaz)</li>\r
+                       <li>FIXED: bug 1058978, subscription list of updated plugin showed the updated subscriptions while the old subscription-list was still in the database. Nucleus now gives a warning (TeRanEX)</li>\r
+                       <li>FIXED: bug 1083959, closed site still allowed posting comments (karma)</li>\r
+                       <li>FIXED: bug 1083971, editing blog settings was not possible on PHP versions &lt; 4.2.0 (floatval) (karma)</li>\r
+                       <li>FIXED: In v3.15, deleting an item via the bookmarklet failed (karma)</li>\r
+                       <li>ADDED: Support for <code>&lt;%blogsetting(short)%&gt;</code>, as suggested by caw (karma)</li>\r
+                       <li>FIXED: Default skin used <code>application/xml+rss</code> instead of <code>application/rss+xml</code>, causing RSS autodiscovery to fail. (karma)</li>\r
+                       <li>FIXED: Moved more hardcoded text into language files</li>\r
+                       <li>FIXED: Made it so malicious users cannot trick a logged in site member/admin into visiting a specifically crafted URL that performs some admin area task. (karma).</li>\r
+                       <li>FIXED: bug 976777, weblogs.com was not ping when posting draft (admun)</li>\r
+                       <li>ADDED: bug 1008171, cookie-prefix (karma)</li>\r
+                       <li>CHANGED: bug 1008175, move <code>getTemplate</code> into <code>MANAGER</code> class + some other performance tweaks (karma)</li>\r
+                       <li>ADDED: add plugin dependency check (admun)</li>\r
+                       <li>CHANGED: Sending out activation links rather than new passwords on new accounts, forgotten passwords, etc. (karma)</li>\r
+                       <li>ADDED: Plugins can now make text- and textarea-optiontypes readonly (TeRanEX)</li>\r
+                       <li>CHANGED: new plugin event <code>FormExtra</code> (for use with <code>ValidateForm</code>) (karma)</li>\r
+                       <li>CHANGED: better error handling when commenting. Errors now displayed together with comment form. (karma)</li>\r
+                       <li>CHANGED: actions (commenting, membermail, ...) can be done using any entry point, not just through <code>action.php</code> (karma)</li>\r
+                       <li>CHANGED: Added <code>$</code><code>Id$</code> info in sourcefiles (karma)</li>\r
+                       <li>CHANGED: PrePluginOptionsEdit-event now has an <code>extra</code>-field which can be used to add option-specific code to the page (TeRanEX)</li>\r
+                       <li>ADDED: new event, PrePluginOptionsUpdate, can be used by plugins to verify/modify the new value for an option (TeRanEX)</li>\r
+                       <li>ADDED: Plugins can now provide a documentation page, which is shown inside the admin area (TeRanEX)</li>\r
+                       <li>ADDED: Plugins can now limit values for an option to be only numeric (<code>datatype=numerical</code>) (TeRanEX)</li>\r
+                       <li>ADDED: OptionTop-methods, to let a plugin retreive an array of the x-highest (or lowest) values of an option (TeRanEX)</li>\r
+                       <li>ADDED: Plugins can now make specific options for items. These options can be edited directly from the item add or edit page (TeRanEX)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.15 (November 14, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: Some XSS issues, as reported by Alexander Antipov</li>\r
+                       <li>FIXED: Validate data that is sent as HTTP headers (redirects etc) (karma)</li>\r
+                       <li>FIXED: bug 1029057, parsed include doesn't accept empty files (karma)</li>\r
+                       <li>FIXED: bug 1036849, 'relevance' listed in list of available skinvars, while it's a templatevar (karma)</li>\r
+                       <li>FIXED: It was possible to spoof the username on comments, even when "protect member names" was turned on. Reported by bigmouth. (karma)</li>\r
+                       <li>FIXED: bug 1025675, if(hasplugin) causes warnings in action log when plugin does not exist (karma)</li>\r
+                       <li>FIXED: bug 1008700, taking away admin attribute from a member was disallowed when that member did not have logon rights (karma)</li>\r
+                       <li>FIXED: bug 968925, member edit leak out repeat password box while it should be hidden (admun)</li>\r
+                       <li>FIXED: bug 933580, URLs in comments followed with a comma should not have the comma in the generated hyperlink (karma)</li>\r
+                       <li>FIXED: bug 1019584, separating search terms with a '+' character caused SQL errors (karma)</li>\r
+                       <li>FIXED: bug 1016217, superadmin should be allowed to edit all items/comments (karma)</li>\r
+                       <li>FIXED: bug 1019191, <code>&lt;%if(blogsetting,..)%&gt;</code> / <code>&lt;%if(category,...)%&gt;</code> broken on error pages (karma)</li>\r
+                       <li>FIXED: Made sure no code relies on the PHP5 setting <code>register_long_arrays</code> to be <code>On</code> (karma)</li>\r
+                       <li>FIXED: <code>Call to undefined function</code> when user specified a language in its profile (jef pober)</li>\r
+                       <li>FIXED: Quickmenu didn't show up after login from <code>index.php?action=showlogin</code> (karma)</li>\r
+                       <li>CHANGED: new plugin event <code>ValidateForm</code> (karma)</li>\r
+                       <li>CHANGED: Extra whitespace to make skin exports easier to read in text editors (karma)</li>\r
+                       <li>CHANGED: e-mail notifications are now sent as <code>utf-8</code> rather than <code>iso-8859-1</code> (karma)</li>\r
+                       <li>ADDED: Admin members can click the version number in the admin area to check for a newer version (karma)</li>\r
+                       <li>ADDED: <code>&lt;%if(admin)%&gt;</code> and <code>&lt;%if(admin,blogname)%&gt;</code> in skins (karma)</li>\r
+                       <li>ADDED: In the admin area, a list of all comments for a blog is now available (karma)</li>\r
+                       <li>ADDED: <code>ITEM::getitem</code> returns blogid, as suggested by leonbloy (karma)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.1 (July 28, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: Nucleus v3.01 was missing a fix in <code>backup.php</code>, which could cause fulltext key info not to be backed up correctly</li>\r
+                       <li>ADDED: support for patch levels, so plugin API enhancements can be distributed to power users earlier (<a href="http://forum.nucleuscms.org/viewtopic.php?t=4142" title="More info...">suggested</a> by TeRanEX)</li>\r
+                       <li>FIXED: bug 974090, multiple identical SQL queries were executed when checking if a plugin is available (karma)</li>\r
+                       <li>FIXED: Default language wasn't always respected (fushimi)</li>\r
+                       <li>CHANGED: new bookmarklet style (TeRanEX / moraes)</li>\r
+                       <li>FIXED: After a karma vote, redirection to referer URL failed if <code>register_globals</code> is turned off (karma)</li>\r
+                       <li>FIXED: SQL Injection Vulnerability, reported by aCiDBiTS</li>\r
+                       <li>FIXED: bug 689468, moved PostAddComment from action.php to COMMENTS.php(admun)</li>\r
+                       <li>FIXED: bug 967580, Class variables were not explicitly defined in PHP classes (karma)</li>\r
+                       <li>FIXED: IE6 unreadable Admin menu textarea (admun)</li>\r
+                       <li>FIXED: Skin exports for skins containing CDATA sections (like the RSS feeds) caused the <code>skinbackup.xml</code> to contain invalid XML. (Import still worked, however) (karma)</li>\r
+                       <li>FIXED: German language file wrong translation (admun)</li>\r
+                       <li>CHANGED: replaced <code>split</code> by <code>preg_split</code> in the parser class. Should be faster according to PHP docs (karma)</li>\r
+                       <li>FIXED: documentation typo (admun)</li>\r
+                       <li>FIXED: PHP5: Install script failed to discover install path automatically (karma)</li>\r
+                       <li>FIXED: Skin parser no longer parses skinvars when they are inside a non-displayed <code>if</code>-section (karma)</li>\r
+                       <li>FIXED: bug 817361, prefix http:// to member's URL if missing (admun)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.01 (July 13, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: PHP5: Links to plugin admin area broken (radekradek)</li>\r
+                       <li>FIXED: bug 966011, skins created with v2.0 could not be imported (karma)</li>\r
+                       <li>FIXED: Security issue spotted by rADo2</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.0 (May 30, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: When adding a weblog, select globally defined default skin by default (TeRanEX)</li>\r
+                       <li>FIXED: CSS conflict in default skin (moraes)</li>\r
+                       <li>FIXED: ADMIN.php no-cache after doctype added to support dynamic content for plugins in admin area (rADo2)</li>\r
+                       <li>FIXED: vars4.1.0.php fixed a strange bug for some PHP installs having empty $_REQUEST[] (rADo2)</li>\r
+                       <li>FIXED: globalfunctions.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
+                       <li>FIXED: install.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
+                       <li>FIXED: install.php - installCustomSkins skinbackup.xml renamed (rADo2)</li>\r
+                       <li>FIXED: install.php - installCustomPlugs now correctly syncs plugin events (rADo2)</li>\r
+                       <li>FIXED: Forcing focus on add/edit window after closing media library (nakahara21)</li>\r
+                       <li>ADDED: <code>class</code> attributes on textareas that allow skins/templates to be edited (karma)</li>\r
+                       <li>FIXED: Documentation and errors now tell to chmod config.php to 444 instead of 644 (hcgtv)</li>\r
+                       <li>CHANGED: Admin area style power-up (Radek)</li>\r
+                       <li>FIXED: Install script used $PHP_SELF, which is not available when register_globals is off (nakahara21)</li>\r
+                       <li>FIXED; Skin import failed if there were CDATA sections (Nucleus Japan)</li>\r
+                       <li>FIXED: <code>undoMagic</code> choked on array variables (Nucleus Japan)</li>\r
+                       <li>FIXED: htmlspecialchars causes broken url like "&amp;amp;amp;" (Nucleus Japan)</li>\r
+                       <li>FIXED: PostAddCategory event was never called (Nucleus Japan)</li>\r
+                       <li>FIXED: PostAddCategory event was not called when creating a new weblog (Nucleus Japan)</li>\r
+                       <li>FIXED: &lt;%blogurl%&gt; problem on category lists (nakahara21)</li>\r
+                       <li>CHANGED: Took out the HTTP Authentication part for now (it has no real use yet, and caused problems when Nucleus is installed in a protected directory)</li>\r
+                       <li>FIXED: When the 'Allow login edit' option was disabled, the e-mail address was not checked for validity when a user edited his/her settings. This would cause an e-mail with new password to be sent out to an invalid address. (Frankenstein)</li>\r
+                       <li>FIXED: Some PHP files were missing the closing <code>?&gt;</code> tag (ikeizer)</li>\r
+                       <li>FIXED: Plugins were inable to delete options (leonbloy)</li>\r
+                       <li>FIXED: XML-RPC: <code>metaWeblog.newPost</code> fails when an empty array is passed as list of categories (caused problems with Ecto)</li>\r
+                       <li>FIXED: Eliminated 2 SQL queries on most requests.</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.0 RC (April 27, 2004)</strong>\r
+               <ul>\r
+                       <li>CHANGED: Labeled it v3.0, since users started believing "2.5 beta == 25 final"</li>\r
+                       <li>FIXED: XML-RPC: <code>metaWeblog.editPost</code> assigned the default category again when no categories were passed along (karma).</li>\r
+                       <li>FIXED: XML-RPC: <code>mt.getPostCategories</code> returned an invalid result (karma)</li>\r
+                       <li>CHANGED: On clean install, RSS and Atom feeds contain full items rather than excerpts only (karma)</li>\r
+                       <li>REMOVED: Clean installation does not include RSS 0.91 feed anymore. Only the RSS 2.0 and Atom 0.3 feeds are included (karma)</li>\r
+                       <li>ADDED: When a skin provides a preview thumbnail, it is displayed in the skin overview (include prefix required, 100x75 preview.png, preview-large.png). Also, when a readme.html file is present in the skin include dir, a link to that file is added (karma)</li>\r
+                       <li>CHANGED: Allowed skin names to have slashes (<code>/</code>) in them (karma)</li>\r
+                       <li>FIXED: When adding media in non-IE browsers, all text was removed</li>\r
+                       <li>FIXED: Wrong times displayed / 'no such item' errors when MySQL server and PHP server are in different timezones (karma)</li>\r
+                       <li>ADDED: Made sure language files for v2.5beta can be used with v2.5final without strange strings (e.g. _SETTINGS_EXTAUTH) showing up in the admin area (karma)</li>\r
+                       <li>FIXED: No CSS styles were applied on 'insert media' popup (karma)</li>\r
+                       <li>FIXED: Some more possible problems with URL linking in comments (karma)</li>\r
+                       <li>FIXED: In Opera, buttons on the extended area added text to the main body text instead (karma)</li>\r
+                       <li>CHANGED: Admin pages are being sent as <code>text/html</code> instead of <code>application/xhtml+xml</code> again, since it caused too much javascript problems. When <code>$CONF['debug']</code> is <code>1</code> however, the pages are still sent as <code>application/xhtml+xml</code> (karma)</li>\r
+                       <li>FIXED: <code>itemlink</code> in templatevars didn't include itemid when used on item skins (mas)</li>\r
+                       <li>FIXED: Errors when deleting plugins with options (Curtis)</li>\r
+                       <li>FIXED: &amp; not encoded in category names/descriptions in admin area (karma)</li>\r
+                       <li>ADDED: <code>hasplugin</code> option on <code>if</code> skinvars (Kazuhiko)</li>\r
+                       <li><del>ADDED: External Authentication (plugin contains authentication code) (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
+                       <li><del>ADDED: HTTP Authentication (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
+                       <li>FIXED: When using the JavaScript buttons to add images/bold text/... to the extended text area, the text was added to the main text body instead if JavaScript toolbar style was set to 'simple' (karma)</li>\r
+                       <li>FIXED: XML-RPC: Added <code>postid</code> in structs returned by <code>metaWeblog.getPost</code> and <code>metaWeblog.getRecentPosts</code> (karma)</li>\r
+                       <li>FIXED: XML-RPC: <code>metaWeblog.getRecentPosts</code> expected a <code>string</code> instead of an <code>int</code> for the <code>amountOfPosts</code> parameter. (karma)</li>\r
+                       <li>FIXED: convert linebreaks broke <code>\r\n</code> linebreaks (jmuto)</li>\r
+                       <li>FIXED: On <code>index</code> and <code>search</code> skinparts, <code>nextlink</code>/<code>prevlink</code> could not be used before a <code>blog</code> or <code>searchresults</code> skinvar was called (karma)</li>\r
+                       <li>FIXED: SQL errors when search query contained single quotes (<code>'</code>) (karma)</li>\r
+                       <li>FIXED: Backup did not store information about FULLTEXT keys. (karma)</li>\r
+                       <li>ADDED: Extended the <code>date</code> templatevariables with pre-defined formats <code>utc</code> and <code>iso8601</code> (needed for Atom syndication; karma)</li>\r
+                       <li>FIXED: super-admins that were not on a blog team did not see the categories when trying to add an item to that blog (karma)</li>\r
+                       <li>FIXED: <code>nextresults</code> and <code>prevresults</code> were listed as available skunvars, while they don't exist (karma)</li>\r
+                       <li>FIXED: XML-RPC library wrote <code>&lt;?phpxml version="1.0"?&gt;</code> as XML header (jmuto)</li>\r
+                       <li>FIXED: not longer showing comment form when comments disabled for blog (jmuto)</li>\r
+                       <li>CHANGED: Plugin options are no longer limited to 128 characters (karma)</li>\r
+                       <li>CHANGED: Exported skins are now saved as <code>skinbackup.xml</code> instead of <code>skindata.xml</code> to avoid confusion. (karma)</li>\r
+                       <li>ADDED: New plugin events <code>AdminPrePageHead</code>, <code>AdminPrePageFoot</code>, <code>PreSendContentType</code>, <code>QuickMenu</code>, <code>BookmarkletExtraHead</code> (karma)</li>\r
+                       <li>FIXED: Fix for bookmarklet, which failed in Opera (jmuto)</li>\r
+                       <li>FIXED: <code>nextitemtitle</code> and <code>previtemtitle</code> skinvars did not htmlencode their output (karma)</li>\r
+                       <li>CHANGED/ADDED: make all skinvars that insert links consistent. They can now all take a linktext parameter to insert a full link instead of a raw link. The <code>nextlink</code>/<code>prevlink</code> on search/index pages (introduced 2.5 beta) had to change for this. Skinvars that can take a linktext: <code>todaylink</code>, <code>archivelink</code>, <code>prevlink</code>, <code>nextlink</code> and <code>itemlink</code> (karma)</li>\r
+                       <li>FIXED: XML-RPC: <code>mt.setPostCategories</code> asumed that <code>isPrimary</code> was always present (karma)</li>\r
+                       <li>FIXED: Plugins that generate output when they are loaded can not longer break backups. (Xiffy)</li>\r
+                       <li>FIXED: The test that auto-disabled fancy URLs was incorrect, and also applied to top-level domains that use 3 characters (like .com) (karma)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v2.5 beta (October 11, 2003)</strong>\r
+               <ul>\r
+                       <li>ADDED: <code>if(previtem)</code>, <code>if(nextitem)</code> and <code>if(skintype,<em>typename</em>)</code> skinvars.</li>\r
+                       <li>FIXED: RSS conditional GET wasn't working correctly (Visa Kopu)</li>\r
+                       <li>ADDED: Templatevar <code>relevance</code> available when displaying search results (Xiffy)</li>\r
+                       <li>CHANGED: <code>nextlink</code> and <code>prevlink</code> skinvar now also available on <code>search</code> and <code>index</code> skins. (Xiffy)</li>\r
+                       <li>ADDED: Skinvars <code>nextitemtitle</code> and <code>previtemtitle</code> on <code>item</code> skins (Xiffy)</li>\r
+                       <li>FIXED: Upload did not notice duplicates correctly</li>\r
+                       <li>ADDED: XML-RPC: Support for <code>metaWeblog.newMediaObject</code> and <code>metaWeblog.getRecentPosts</code> methods</li>\r
+                       <li>ADDED: XML-RPC: Support for the <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a> (except for <code>mt.getTrackbackPings</code>)</li>\r
+                       <li>CHANGED: Fulltext search, prev/next links on search pages, ... (Xiffy)</li>\r
+                       <li>FIXED/CHANGED: Action log size drops back to 250 when more than 500 entries.</li>\r
+                       <li>FIXED: No more restrictions on category names</li>\r
+                       <li>ADDED: possibility to create <a href="http://nucleuscms.org/documentation/devdocs/custominstall.html">custom installs</a></li>\r
+                       <li>FIXED: XHTML admin documents now have a proper <code>xmlns</code> attribute set; <del>admin pages are now sent as <code>application/xhtml+xml</code> if the client browser accepts it.</del> <ins>Removed again in 3.5final</ins></li>\r
+                       <li>ADDED: Plugins can now make specific options for blogs, categories and members. These options can be edited directly from the blogsettings or member settings page.</li>\r
+                       <li>FIXED: It's no longer possible to select an item from an other weblog through <code>?itemid=</code> when there is a different <code>blogid=</code> parameter set in the request (or set using <code>selectBlog</code>)</li>\r
+                       <li>FIXED: Disallowed while trying to create a new category on item edit</li>\r
+                       <li>FIXED: Date/Time variables in date footer were not parsed</li>\r
+                       <li>FIXED: Adding an item while creating a new category prevented ping to be sent to weblogs.com</li>\r
+                       <li>FIXED: Right-click bookmarklet for IE (re-install to get it working with IE6)</li>\r
+                       <li>FIXED/CHANGED: hyperlink conversion in comments: ftp/http/mailto supported</li>\r
+                       <li>FIXED: spaces in between multiple notify e-mail addresses caused ar error message saying the e-mail address is invalid.</li>\r
+                       <li>FIXED: <code>archivedate</code> skinvar ignored the 'locale' parameter that was passed to it</li>\r
+                       <li>FIXED: <code>selectBlog</code> did not protect for changes in <code>?archivelist</code></li>\r
+                       <li>FIXED: <code>selectCategory</code> now takes a category id instead of a name (multiple categories can have the same name)</li>\r
+                       <li>CHANGED: Fancy URLs are only generated when <code>$CONF['Self']</code> does not end in <code>.php</code> (this avoids URLs like <code>index.php/item/95/item/94/member/1</code> when turning fancy URLs on without further configuration)</li>\r
+                       <li>CHANGED: Install script updates <em>config.php</em> automatically when it is writable</li>\r
+                       <li>CHANGED: When the content type of a skin is <code>application/xhtml+xml</code>, only send this to browsers that specify this type in their <code>HTTP_ACCEPT</code> header (otherwise, send <code>text/html</code> instead)</li>\r
+                       <li>CHANGED: More intelligent search keywords highlighting (multiple separate keywords etc), also available inside comment bodies now</li>\r
+                       <li>ADDED: Possibility to filter on filename in media library</li>\r
+                       <li>FIXED: <code>include('config.php')</code> caused problems when another <code>config.php</code> was in the PHP include path (nils bernhard)</li>\r
+                       <li>ADDED: LiveJournal conversion (moraes)</li>\r
+                       <li>FIXED: Karma Vote URLs used relative links to <code>action.php</code></li>\r
+                       <li>CHANGED: Support for PHP versions having <code>short_open_tag = Off</code> (Andrew Brampton/Terry Chay)</li>\r
+                       <li>ADDED: Plugin options can now also use a <code>textarea</code> type. (max. size for data is still 128 bytes though)</li>\r
+                       <li>FIXED: When unable to load a plugin, an error message is added to the actionlog</li>\r
+                       <li>FIXED: Not all messages sent to the actionlog actually appeared there</li>\r
+                       <li>ADDED: Made it possible to install more than one Nucleus installation in the same database (using a prefix to the tablenames)</li>\r
+                       <li>ADDED: Nucleus does not longer allow access to the Admin Area when files like <code>install.php</code>, <code>install.sql</code> or the <code>nucleus/upgrades</code> directory are still on the server.</li>\r
+                       <li>ADDED: <code>&lt;%member%&gt;</code> skinvar now also accepts <code>id</code> and <code>yourid</code> as parameter</li>\r
+                       <li>FIXED: JavaScript toolbar works better in Gecko-based browsers (Mozilla Firebird/Netscape 7)</li>\r
+                       <li>ADDED: <code>supportsFeature</code> method to plugin interface</li>\r
+                       <li>FIXED: Destination URL parameter on <code>membermailform</code> skinvar didn't work</li>\r
+                       <li>FIXED: Encoding of the window title of popup images (Osamu Higuchi)</li>\r
+                       <li>FIXED: Link at end of install sequence was pointing to install.php</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v2.0 Final (April 3, 2003)</strong>\r
+               <ul>\r
+                       <li>FIXED: renamed the <code>xmlrpc_encode</code> and <code>xmlrpc_decode</cod