OSDN Git Service

MERGE: リビジョン1775のマージ。fileparseスキンタイプを使用可能に
[nucleus-jp/nucleus-next.git] / nucleus / libs / globalfunctions.php
index c526124..acff99b 100644 (file)
@@ -2,7 +2,7 @@
 \r
 /*\r
  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2009 The Nucleus Group\r
+ * Copyright (C) 2002-2012 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
@@ -12,8 +12,8 @@
  */\r
 /**\r
  * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
- * @version $Id: globalfunctions.php 1697 2012-03-10 13:15:47Z sakamocchi $\r
+ * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
+ * @version $Id: globalfunctions.php 1727 2012-04-07 02:54:22Z sakamocchi $\r
  */\r
 \r
 /* needed if we include globalfunctions from install.php */\r
@@ -23,9 +23,13 @@ $nucleus['version'] = 'v4.00 SVN';
 $nucleus['codename'] = '';\r
 \r
 /* check and die if someone is trying to override internal globals (when register_globals turn on) */\r
-checkVars(array('nucleus', 'CONF', 'DIR_LIBS', 'MYSQL_HOST', 'MYSQL_USER', 'MYSQL_PASSWORD', 'MYSQL_DATABASE', '$DIR_LOCALES', 'DIR_PLUGINS', 'HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_COOKIE_VARS', 'HTTP_ENV_VARS', 'HTTP_SESSION_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'GLOBALS', 'argv', 'argc', '_GET', '_POST', '_COOKIE', '_ENV', '_SESSION', '_SERVER', '_FILES'));\r
+checkVars(array('nucleus', 'CONF', 'DIR_LIBS', 'MYSQL_HOST', 'MYSQL_USER', 'MYSQL_PASSWORD', 'MYSQL_DATABASE', 'DIR_LOCALES', 'DIR_PLUGINS', 'HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_COOKIE_VARS', 'HTTP_ENV_VARS', 'HTTP_SESSION_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'GLOBALS', 'argv', 'argc', '_GET', '_POST', '_COOKIE', '_ENV', '_SESSION', '_SERVER', '_FILES'));\r
 \r
 /* debug mode */\r
+if ( !isset($CONF) )\r
+{\r
+       $CONF = array();\r
+}\r
 if ( array_key_exists('debug', $CONF) && $CONF['debug'] )\r
 {\r
        /* report all errors! */\r
@@ -156,6 +160,12 @@ if ( !headers_sent() )
        header('Generator: Nucleus CMS ' . $nucleus['version']);\r
 }\r
 \r
+/*\r
+ * NOTE: Since 4.0 release, Entity class becomes to be important class\r
+ *  with some wrapper functions for htmlspechalchars/htmlentity PHP's built-in function\r
+*/\r
+include($DIR_LIBS . 'ENTITY.php');\r
+\r
 /* include core classes that are needed for login & plugin handling */\r
 include_once($DIR_LIBS . 'mysql.php');\r
 /* added for 3.5 sql_* wrapper */\r
@@ -175,7 +185,7 @@ include($DIR_LIBS . 'ACTIONLOG.php');
 include($DIR_LIBS . 'MANAGER.php');\r
 include($DIR_LIBS . 'PLUGIN.php');\r
 \r
-$manager =& MANAGER::instance();\r
+$manager =& Manager::instance();\r
 \r
 /*\r
  * make sure there's no unnecessary escaping:\r
@@ -279,7 +289,7 @@ if ( ($CONF['DisableJsTools'] == 0)
        $CONF['DisableJsTools'] = 2;\r
 }\r
 \r
-$member = new MEMBER();\r
+$member = new Member();\r
 \r
 if ( $action == 'login' )\r
 {\r
@@ -339,7 +349,6 @@ include($DIR_LIBS . 'NOTIFICATION.php');
 include($DIR_LIBS . 'BAN.php');\r
 include($DIR_LIBS . 'PAGEFACTORY.php');\r
 include($DIR_LIBS . 'SEARCH.php');\r
-include($DIR_LIBS . 'ENTITY.php');\r
 include($DIR_LIBS . 'LINK.php');\r
 \r
 /* set lastVisit cookie (if allowed) */\r
@@ -415,7 +424,7 @@ if ( $CONF['URLMode'] == 'pathinfo' )
        if ( !$parsed )\r
        {\r
                /* default implementation */\r
-               $data = i18n::explode("/", $virtualpath );\r
+               $data = preg_split("#/#", $virtualpath );\r
                for ( $i = 0; $i < sizeof($data); $i++ )\r
                {\r
                        switch ( $data[$i] )\r
@@ -791,7 +800,7 @@ $manager->notify(
                        return array();\r
                }\r
                \r
-               $aHighlight = i18n::explode(' ', $query);\r
+               $aHighlight = preg_split('# #', $query);\r
                \r
                for ( $i = 0; $i < count($aHighlight); $i++ )\r
                {\r
@@ -821,7 +830,7 @@ $manager->notify(
         */\r
        function getBlogIDFromName($name)\r
        {\r
-               return quickQuery('SELECT `bnumber` AS `result` FROM `' . sql_table('blog') . '` WHERE `bshortname` = "' . sql_real_escape_string($name) . '"');\r
+               return quickQuery('SELECT bnumber AS result FROM ' . sql_table('blog') . ' WHERE bshortname = "' . sql_real_escape_string($name) . '"');\r
        }\r
 \r
 \r
@@ -832,7 +841,7 @@ $manager->notify(
         */\r
        function getBlogNameFromID($id)\r
        {\r
-               return quickQuery('SELECT `bname` AS `result` FROM `' . sql_table('blog') . '` WHERE `bnumber` = ' . intval($id));\r
+               return quickQuery('SELECT bname AS result FROM ' . sql_table('blog') . ' WHERE bnumber = ' . intval($id));\r
        }\r
 \r
 \r
@@ -843,7 +852,7 @@ $manager->notify(
         */\r
        function getBlogIDFromItemID($item_id)\r
        {\r
-               return quickQuery('SELECT `iblog` AS `result` FROM `' . sql_table('item') . '` WHERE `inumber` = ' . intval($item_id));\r
+               return quickQuery('SELECT iblog AS result FROM ' . sql_table('item') . ' WHERE inumber = ' . intval($item_id));\r
        }\r
 \r
 \r
@@ -854,7 +863,7 @@ $manager->notify(
         */\r
        function getBlogIDFromCommentID($comment_id)\r
        {\r
-               return quickQuery('SELECT `cblog` AS `result` FROM `' . sql_table('comment') . '` WHERE `cnumber` = ' . intval($comment_id));\r
+               return quickQuery('SELECT cblog AS result FROM ' . sql_table('comment') . ' WHERE cnumber = ' . intval($comment_id));\r
        }\r
 \r
 \r
@@ -865,7 +874,7 @@ $manager->notify(
         */\r
        function getBlogIDFromCatID($category_id)\r
        {\r
-               return quickQuery('SELECT `cblog` AS `result` FROM `' . sql_table('category') . '` WHERE `catid` = ' . intval($category_id));\r
+               return quickQuery('SELECT cblog AS result FROM ' . sql_table('category') . ' WHERE catid = ' . intval($category_id));\r
        }\r
 \r
 \r
@@ -876,7 +885,7 @@ $manager->notify(
         */\r
        function getCatIDFromName($name)\r
        {\r
-               return quickQuery('SELECT `catid` AS `result` FROM `' . sql_table('category') . '` WHERE `cname` = "' . sql_real_escape_string($name) . '"');\r
+               return quickQuery('SELECT catid AS result FROM ' . sql_table('category') . ' WHERE cname = "' . sql_real_escape_string($name) . '"');\r
        }\r
 \r
 \r
@@ -913,7 +922,7 @@ function selector()
        {\r
                global $DIR_LIBS, $errormessage;\r
                include_once($DIR_LIBS . 'ACTION.php');\r
-               $a = new ACTION();\r
+               $a = new Action();\r
                $errorInfo = $a->doAction($action);\r
                \r
                if ( $errorInfo )\r
@@ -1019,7 +1028,6 @@ function selector()
                {\r
                        $query = "SELECT inumber, ititle FROM %s WHERE itime>'%s' AND itime<='%s' AND idraft=0 AND iblog=%d AND icat=%d ORDER BY itime ASC LIMIT 1";\r
                        $query = sprintf($query, sql_table('item'), i18n::formatted_datetime('mysql', $timestamp), i18n::formatted_datetime('mysql', $b->getCorrectTime()), $blogid, $catid);\r
-                       \r
                }\r
                $res = sql_query($query);\r
                \r
@@ -1172,7 +1180,7 @@ function selector()
        {\r
                $type = 'member';\r
                \r
-               if ( !MEMBER::existsID($memberid) )\r
+               if ( !Member::existsID($memberid) )\r
                {\r
                        doError(_ERROR_NOSUCHMEMBER);\r
                }\r
@@ -1246,7 +1254,7 @@ function selector()
        \r
        $skin = new SKIN($skinid);\r
        \r
-       if ( !$skin->isValid )\r
+       if ( !$skin->isValid() )\r
        {\r
                doError(_ERROR_NOSUCHSKIN);\r
        }\r
@@ -1266,30 +1274,38 @@ function selector()
 /**\r
   * Show error skin with given message. An optional skin-object to use can be given\r
   */\r
-function doError($msg, $skin = '') {\r
-    global $errormessage, $CONF, $skinid, $blogid, $manager;\r
-\r
-    if ($skin == '') {\r
-\r
-        if (SKIN::existsID($skinid) ) {\r
-            $skin = new SKIN($skinid);\r
-        } elseif ($manager->existsBlogID($blogid) ) {\r
-            $blog =& $manager->getBlog($blogid);\r
-            $skin = new SKIN($blog->getDefaultSkin() );\r
-        } elseif ($CONF['DefaultBlog']) {\r
-            $blog =& $manager->getBlog($CONF['DefaultBlog']);\r
-            $skin = new SKIN($blog->getDefaultSkin() );\r
-        } else {\r
-            // this statement should actually never be executed\r
-            $skin = new SKIN($CONF['BaseSkin']);\r
-        }\r
-\r
-    }\r
-\r
-    $skinid = $skin->id;\r
-    $errormessage = $msg;\r
-    $skin->parse('error');\r
-    exit;\r
+function doError($msg, $skin = '')\r
+{\r
+       global $errormessage, $CONF, $skinid, $blogid, $manager;\r
+       \r
+       if ( $skin == '' )\r
+       {\r
+               if ( Skin::existsID($skinid) )\r
+               {\r
+                       $id = $skinid;\r
+               }\r
+               elseif ( $manager->existsBlogID($blogid) )\r
+               {\r
+                       $blog =& $manager->getBlog($blogid);\r
+                       $id = $blog->getDefaultSkin();\r
+               }\r
+               elseif ($CONF['DefaultBlog'] )\r
+               {\r
+                       $blog =& $manager->getBlog($CONF['DefaultBlog']);\r
+                       $id = $blog->getDefaultSkin();\r
+               }\r
+               else\r
+               {\r
+                       // this statement should actually never be executed\r
+                       $id = $CONF['BaseSkin'];\r
+               }\r
+               $skin = new Skin($id);\r
+       }\r
+       \r
+       $skinid = $skin->getID();\r
+       $errormessage = $msg;\r
+       $skin->parse('error');\r
+       exit;\r
 }\r
 \r
 function getConfig() {\r
@@ -1391,45 +1407,28 @@ function selectItem($id) {
     $itemid = intval($id);\r
 }\r
 \r
-// force the use of a translation file (warning: can cause warnings)\r
-function selectLanguage($language) {\r
+function parseFile($filename, $includeMode = 'normal', $includePrefix = '')
+{
+       global $skinid;
 \r
-       global $DIR_LANG;\r
-\r
-       # replaced ereg_replace() below with preg_replace(). ereg* functions are deprecated in PHP 5.3.0\r
-       # original ereg_replace: preg_replace( '@\\|/@', '', $language) . '.php')\r
-       # important note that '\' must be matched with '\\\\' in preg* expressions\r
-\r
-       include($DIR_LANG . preg_replace('#[\\\\|/]#', '', $language) . '.php');\r
-\r
-}\r
-\r
-function parseFile($filename, $includeMode = 'normal', $includePrefix = '') {\r
-    $handler = new ACTIONS('fileparser');\r
-    $parser = new PARSER(SKIN::getAllowedActionsForType('fileparser'), $handler);\r
-    $handler->parser =& $parser;\r
-\r
-    // set IncludeMode properties of parser\r
-    PARSER::setProperty('IncludeMode', $includeMode);\r
-    PARSER::setProperty('IncludePrefix', $includePrefix);\r
-\r
-    if (!file_exists($filename) ) {\r
-        doError('A file is missing');\r
+       if ( !$skinid || !existsID($skinid) )
+       {
+               $skin = new Skin($CONF['BaseSkin']);
+       }
+       else
+       {
+               $skin = new Skin($skinid);
     }\r
 \r
-    $fsize = filesize($filename);\r
+       $oldIncludeMode = Parser::getProperty('IncludeMode');
+       $oldIncludePrefix = Parser::getProperty('IncludePrefix');
 \r
-    if ($fsize <= 0) {\r
-        return;\r
-    }\r
+       $skin->parse('fileparse', $filename);
 \r
-    // read file\r
-    $fd = fopen ($filename, 'r');\r
-    $contents = fread ($fd, $fsize);\r
-    fclose ($fd);\r
+       Parser::setProperty('IncludeMode', $oldIncludeMode);
+       Parser::setProperty('IncludePrefix', $oldIncludePrefix);
 \r
-    // parse file contents\r
-    $parser->parse($contents);\r
+       return;
 }\r
 \r
 /**\r
@@ -1441,7 +1440,7 @@ function debug($msg) {
 \r
 // shortcut\r
 function addToLog($level, $msg) {\r
-    ACTIONLOG::add($level, $msg);\r
+    ActionLog::add($level, $msg);\r
 }\r
 \r
 // shows a link to help file\r
@@ -1504,35 +1503,35 @@ function checkPlugin($plug) {
 }\r
 \r
 /**\r
- * @param $querystr\r
- *             querystring to alter (e.g. foo=1&bar=2&x=y)\r
- * @param $param\r
- *             name of parameter to change (e.g. 'foo')\r
- * @param $value\r
- *             New value for that parameter (e.g. 3)\r
- * @result\r
- *             altered query string (for the examples above: foo=3&bar=2&x=y)\r
+ * alterQueryStr()\r
+ * \r
+ * @param      string  $querystr       querystring to alter (e.g. foo=1&bar=2&x=y)\r
+ * @param      string  $param  name of parameter to change (e.g. 'foo')\r
+ * @param      string  $value  New value for that parameter (e.g. 3)\r
+ * @result     string  altered query string (for the examples above: foo=3&bar=2&x=y)\r
  */\r
-function alterQueryStr($querystr, $param, $value) {\r
-    $vars = i18n::explode('&', $querystr);\r
-    $set  = false;\r
-\r
-    for ($i = 0; $i < count($vars); $i++) {\r
-        $v = i18n::explode('=', $vars[$i]);\r
-\r
-        if ($v[0] == $param) {\r
-            $v[1] = $value;\r
-            $vars[$i] = implode('=', $v);\r
-            $set = true;\r
-            break;\r
-        }\r
-    }\r
-\r
-    if (!$set) {\r
-        $vars[] = $param . '=' . $value;\r
-    }\r
-\r
-    return ltrim(implode('&', $vars), '&');\r
+function alterQueryStr($querystr, $param, $value)\r
+{\r
+       $vars = preg_split('#&#', $querystr);\r
+       $set = FALSE;\r
+       \r
+       for ( $i = 0; $i < count($vars); $i++ )\r
+       {\r
+               $v = preg_split('#=#', $vars[$i]);\r
+               \r
+               if ( $v[0] == $param )\r
+               {\r
+                       $v[1] = $value;\r
+                       $vars[$i] = implode('=', $v);\r
+                       $set = true;\r
+                       break;\r
+               }\r
+       }\r
+       if ( !$set )\r
+       {\r
+               $vars[] = "{$param}={$value}";\r
+       }\r
+       return ltrim(implode('&', $vars), '&');\r
 }\r
 \r
 // passes one variable as hidden input field (multiple fields for arrays)\r
@@ -1548,7 +1547,7 @@ function passVar($key, $value) {
     }\r
 \r
     // other values: do stripslashes if needed\r
-    ?><input type="hidden" name="<?php echo ENTITY::hsc($key)?>" value="<?php echo ENTITY::hsc(undoMagic($value) )?>" /><?php\r
+    ?><input type="hidden" name="<?php echo Entity::hsc($key)?>" value="<?php echo Entity::hsc(undoMagic($value) )?>" /><?php\r
 }\r
 \r
 function checkVars($aVars) {\r
@@ -1635,6 +1634,8 @@ function sanitizeParams()
 }\r
 \r
 /**\r
+ * ticketForPlugin()\r
+ * \r
  * Check ticket when not checked in plugin's admin page\r
  * to avoid CSRF.\r
  * Also avoid the access to plugin/index.php by guest user.\r
@@ -1687,7 +1688,7 @@ function ticketForPlugin()
        \r
        // Solve the plugin name.\r
        $plugins = array();\r
-       $query = 'SELECT `pfile` FROM '.sql_table('plugin');\r
+       $query = 'SELECT pfile FROM '.sql_table('plugin');\r
        $res = sql_query($query);\r
        \r
        while($row = sql_fetch_row($res) )\r
@@ -1764,7 +1765,7 @@ function ticketForPlugin()
                // Resolve URI and QUERY_STRING\r
                if ($uri = serverVar('REQUEST_URI') )\r
                {\r
-                       list($uri, $qstring) = i18n::explode('?', $uri);\r
+                       list($uri, $qstring) = preg_split('#\?#', $uri);\r
                }\r
                else\r
                {\r
@@ -1779,18 +1780,18 @@ function ticketForPlugin()
                        $qstring = '?' . $qstring;\r
                }\r
                \r
-               echo '<p>' . _SETTINGS_UPDATE . ' : ' . _QMENU_PLUGINS . ' <span style="color:red;">' . ENTITY::hsc($plugin_name) . "</span> ?</p>\n";\r
+               echo '<p>' . _SETTINGS_UPDATE . ' : ' . _QMENU_PLUGINS . ' <span style="color:red;">' . Entity::hsc($plugin_name) . "</span> ?</p>\n";\r
                \r
                switch(strtoupper(serverVar('REQUEST_METHOD') ) )\r
                {\r
                        case 'POST':\r
-                               echo '<form method="POST" action="'.ENTITY::hsc($uri.$qstring).'">';\r
+                               echo '<form method="POST" action="'.Entity::hsc($uri.$qstring).'">';\r
                                $manager->addTicketHidden();\r
                                _addInputTags($post);\r
                                break;\r
                        \r
                        case 'GET':\r
-                               echo '<form method="GET" action="'.ENTITY::hsc($uri).'">';\r
+                               echo '<form method="GET" action="'.Entity::hsc($uri).'">';\r
                                $manager->addTicketHidden();\r
                                _addInputTags($get);\r
                        \r
@@ -1808,7 +1809,8 @@ function ticketForPlugin()
        \r
        /* Create new ticket */\r
        $ticket=$manager->addTicketToUrl('');\r
-       $ticketforplugin['ticket']=i18n::substr($ticket,i18n::strpos($ticket,'ticket=')+7);\r
+       $ticketforplugin['ticket'] = preg_split($ticket, i18n::strpos($ticket, 'ticket=') + 7);\r
+       return;\r
 }\r
 \r
 function _addInputTags(&$keys,$prefix=''){\r
@@ -1818,38 +1820,47 @@ function _addInputTags(&$keys,$prefix=''){
         else {\r
             if (get_magic_quotes_gpc()) $value=stripslashes($value);\r
             if ($key=='ticket') continue;\r
-            echo '<input type="hidden" name="'.ENTITY::hsc($key).\r
-                '" value="'.ENTITY::hsc($value).'" />'."\n";\r
+            echo '<input type="hidden" name="'.Entity::hsc($key).\r
+                '" value="'.Entity::hsc($value).'" />'."\n";\r
         }\r
     }\r
 }\r
 \r
 /**\r
+ * serverStringToArray()\r
  * Convert the server string such as $_SERVER['REQUEST_URI']\r
  * to arry like arry['blogid']=1 and array['page']=2 etc.\r
+ * \r
+ * @param      string  $str            string\r
+ * @param      string  $array          \r
+ * @param      string  $frontParam     \r
  */\r
 function serverStringToArray($str, &$array, &$frontParam)\r
 {\r
-    // init param\r
-    $array = array();\r
-    $frontParam = "";\r
-\r
-    // split front param, e.g. /index.php, and others, e.g. blogid=1&page=2\r
-    if (strstr($str, "?")){\r
-        list($frontParam, $args) = preg_split("/\?/", $str, 2);\r
-    }\r
-    else {\r
-        $args = $str;\r
-        $frontParam = "";\r
-    }\r
-\r
-    // If there is no args like blogid=1&page=2, return\r
-    if (!strstr($str, "=") && !i18n::strlen($frontParam)) {\r
-        $frontParam = $str;\r
-        return;\r
-    }\r
-\r
-    $array = i18n::explode("&", $args);\r
+       // init param\r
+       $array = array();\r
+       $frontParam = "";\r
+       \r
+       // split front param, e.g. /index.php, and others, e.g. blogid=1&page=2\r
+       if ( i18n::strpos($str, "?") > 0 )\r
+       {\r
+               list($frontParam, $args) = preg_split("#\?#", $str, 2);\r
+       }\r
+       else\r
+       {\r
+               $args = $str;\r
+               $frontParam = "";\r
+       }\r
+       \r
+       // If there is no args like blogid=1&page=2, return\r
+       if ( i18n::strpos($str, "=") == FALSE && !i18n::strlen($frontParam) )\r
+       {\r
+               $frontParam = $str;\r
+               return;\r
+       }\r
+       \r
+       $array = preg_split("#&#", $args);\r
+       return;\r
 }\r
 \r
 /**\r
@@ -1869,54 +1880,62 @@ function arrayToServerString($array, $frontParam, &$str)
 }\r
 \r
 /**\r
+ * sanitizeArray()\r
  * Sanitize array parameters.\r
  * This function checks both key and value.\r
  * - check key if it inclues " (double quote),  remove from array\r
  * - check value if it includes \ (escape sequece), remove remaining string\r
+ * \r
+ * @param      array   &$array \r
+ * @return     void\r
  */\r
 function sanitizeArray(&$array)\r
 {\r
-    $excludeListForSanitization = array('query');\r
-//     $excludeListForSanitization = array();\r
-\r
-    foreach ($array as $k => $v) {\r
-\r
-        // split to key and value\r
-        list($key, $val) = preg_split("/=/", $v, 2);\r
-        if (!isset($val)) {\r
-            continue;\r
-        }\r
-\r
-        // when magic quotes is on, need to use stripslashes,\r
-        // and then addslashes\r
-        if (get_magic_quotes_gpc()) {\r
-            $val = stripslashes($val);\r
-        }\r
+       $excludeListForSanitization = array('query');\r
+       \r
+       foreach ( $array as $k => $v )\r
+       {\r
+               // split to key and value\r
+               list($key, $val) = preg_split("#=#", $v, 2);\r
+               if ( !isset($val) )\r
+               {\r
+                       continue;\r
+               }\r
+               \r
+               // when magic quotes is on, need to use stripslashes,\r
+               // and then addslashes\r
+               if ( get_magic_quotes_gpc() )\r
+               {\r
+                       $val = stripslashes($val);\r
+               }\r
                // note that we must use addslashes here because this function is called before the db connection is made\r
                // and sql_real_escape_string needs a db connection\r
-        $val = addslashes($val);\r
-\r
-        // if $key is included in exclude list, skip this param\r
-        if (!in_array($key, $excludeListForSanitization)) {\r
-\r
-            // check value\r
-            if (i18n::strpos($val, '\\')) {\r
-                list($val, $tmp) = i18n::explode('\\', $val);\r
-            }\r
-\r
-            // remove control code etc.\r
-            $val = strtr($val, "\0\r\n<>'\"", "       ");\r
-\r
-            // check key\r
-            if (preg_match('/\"/i', $key)) {\r
-                unset($array[$k]);\r
-                continue;\r
-            }\r
-\r
-            // set sanitized info\r
-            $array[$k] = sprintf("%s=%s", $key, $val);\r
-        }\r
-    }\r
+               $val = addslashes($val);\r
+               \r
+               // if $key is included in exclude list, skip this param\r
+               if ( !in_array($key, $excludeListForSanitization) )\r
+               {\r
+                       // check value\r
+                       if ( i18n::strpos($val, '\\') )\r
+                       {\r
+                               list($val, $tmp) = preg_split('#\\\\#', $val);\r
+                       }\r
+                       \r
+                       // remove control code etc.\r
+                       $val = strtr($val, "\0\r\n<>'\"", "       ");\r
+                       \r
+                       // check key\r
+                       if ( preg_match('#\"#', $key) )\r
+                       {\r
+                               unset($array[$k]);\r
+                               continue;\r
+                       }\r
+                       \r
+                       // set sanitized info\r
+                       $array[$k] = sprintf("%s=%s", $key, $val);\r
+               }\r
+       }\r
+       return;\r
 }\r
 \r
 /**\r
@@ -2041,35 +2060,35 @@ function isValidMailAddress($address)
 /**\r
  * Centralisation of the functions that deals XML entities\r
  * Deprecated since 4.0:\r
- * Please use ENTITY::FunctionName(...) instead\r
+ * Please use Entity::FunctionName(...) instead\r
  */\r
 function highlight($text, $expression, $highlight)\r
 {\r
-       return ENTITY::highlight($text, $expression, $highlight);\r
+       return Entity::highlight($text, $expression, $highlight);\r
 }\r
 function shorten($string, $maxlength, $suffix)\r
 {\r
-       return ENTITY::shorten($string, $maxlength, $suffix);\r
+       return Entity::shorten($string, $maxlength, $suffix);\r
 }\r
 function stringStripTags ($string)\r
 {\r
-       return ENTITY::strip_tags($string);\r
+       return Entity::strip_tags($string);\r
 }\r
 function toAscii($string)\r
 {\r
-       return ENTITY::anchor_footnoting($string);\r
+       return Entity::anchor_footnoting($string);\r
 }\r
 function stringToAttribute ($string)\r
 {\r
-       return ENTITY::hsc($string);\r
+       return Entity::hsc($string);\r
 }\r
 function stringToXML ($string)\r
 {\r
-       return ENTITY::hen($string);\r
+       return Entity::hen($string);\r
 }\r
 function encode_desc($data)\r
 {\r
-       return ENTITY::hen($data);\r
+       return Entity::hen($data);\r
 }\r
 /**\r
  * Centralisation of the functions that deals with locales\r
@@ -2085,6 +2104,13 @@ function getLanguageName()
        }\r
        return $language;\r
 }\r
+/* NOTE: this is completely deprecated because generating much warnings */\r
+function selectLanguage($language)\r
+{\r
+       global $DIR_LANG;\r
+       include($DIR_LANG . preg_replace('#[\\\\|/]#', '', $language) . '.php');\r
+       return;\r
+}\r
 \r
 /* NOTE: use i18n::get_available_locales() directly instead of this */\r
 function checkLanguage($lang)\r
@@ -2106,41 +2132,41 @@ function formatDate($format, $timestamp, $default_format, &$blog)
 function mysqldate($timestamp)\r
 {\r
        return '"' . i18n::formatted_datetime('mysql', $timestamp) . '"';\r
-}\r
+ }\r
 /**\r
  * Centralisation of the functions that generate links\r
  * Deprecated since 4.0:\r
- * Please use LINK::FunctionName(...) instead\r
+ * Please use Link::FunctionName(...) instead\r
  */\r
 function createItemLink($itemid, $extra = '')\r
 {\r
-       return LINK::create_item_link($itemid, $extra);\r
+       return Link::create_item_link($itemid, $extra);\r
 }\r
 function createMemberLink($memberid, $extra = '')\r
 {\r
-       return LINK::create_member_link($memberid, $extra);\r
+       return Link::create_member_link($memberid, $extra);\r
 }\r
 function createCategoryLink($catid, $extra = '')\r
 {\r
-       return LINK::create_category_link($catid, $extra);\r
+       return Link::create_category_link($catid, $extra);\r
 }\r
 function createArchiveListLink($blogid = '', $extra = '')\r
 {\r
-       return LINK::create_archivelist_link($blogid, $extra);\r
+       return Link::create_archivelist_link($blogid, $extra);\r
 }\r
 function createArchiveLink($blogid, $archive, $extra = '')\r
 {\r
-       return LINK::create_archive_link($blogid, $archive, $extra);\r
+       return Link::create_archive_link($blogid, $archive, $extra);\r
 }\r
 function createBlogidLink($blogid, $params = '')\r
 {\r
-       return LINK::create_blogid_link($blogid, $params = '');\r
+       return Link::create_blogid_link($blogid, $params = '');\r
 }\r
 function createLink($type, $params)\r
 {\r
-       return LINK::create_link($type, $params);\r
+       return Link::create_link($type, $params);\r
 }\r
 function createBlogLink($url, $params)\r
 {\r
-       return LINK::create_blog_link($url, $params);\r
+       return Link::create_blog_link($url, $params);\r
 }\r