Converted to UTF-8

This commit is contained in:
2013-10-19 23:11:24 +02:00
parent f0cc9260ca
commit 2661e933da
6 changed files with 166 additions and 128 deletions

View File

@@ -1,3 +1,4 @@
AddDefaultCharset UTF-8
Options +FollowSymlinks
RewriteEngine on

View File

@@ -331,18 +331,27 @@ class Databap extends PhpObject
function __construct($oClassManagement)
{
parent::__construct();
$this->oClassManagement = $oClassManagement;
//Browser <> PHP <> MySql synchronization
date_default_timezone_set(Settings::TIMEZONE);
//header('Content-Type: text/html; charset=utf-8');
ini_set('default_charset', Settings::TEXT_ENC);
header('Content-Type: text/html; charset='.Settings::TEXT_ENC);
mb_internal_encoding(Settings::TEXT_ENC);
mb_http_output(Settings::TEXT_ENC);
mb_http_input(Settings::TEXT_ENC);
mb_language('uni');
mb_regex_encoding(Settings::TEXT_ENC);
$this->oMySql = new MySqlManager();
//Passing settings down to mySQL
$this->oMySql = new MySqlManager(Settings::DB_SERVER, Settings::DB_LOGIN, Settings::DB_PASS, Settings::DB_NAME, Settings::SQL_ENC);
if($this->oMySql->sDbState == MySqlManager::DB_NO_DATA) $this->install();
//Init other variables
$this->oProcedure = new Procedure($this->oMySql);
$this->setUserId(0);
$this->sLanguage = self::LANG_FR;
$this->oSearchEngine = new SearchEngine($this->oMySql);
$this->oClassManagement = $oClassManagement;
}
private function install()
@@ -387,6 +396,7 @@ class Databap extends PhpObject
public function getPage($sPage, $asVars)
{
$oPage = new Mask('index');
$oPage->setTag('text_enc', Settings::TEXT_ENC);
$oPage->setTag('first_page', $sPage);
$oPage->setTag('index_link', $asVars['serv_name']);
$oPage->setTag('line_break', "Global databap constants\n");
@@ -453,7 +463,7 @@ class Databap extends PhpObject
$oFeed = new Feed($asDesc);
//Building items
switch(strtolower($sCat))
switch(mb_strtolower($sCat))
{
case '9gag':
$sRegEx = '^(https?://|www\\.)(.*)9gag\\.com';
@@ -546,13 +556,13 @@ class Databap extends PhpObject
//Title & link
case 'font-color-normal':
$asArticleInfo['title'] = ucfirst(trim($oLink->nodeValue));
$asArticleInfo['title'] = substr($asArticleInfo['title'], -1)=='.'?substr($asArticleInfo['title'], 0, -1):$asArticleInfo['title'];
$asArticleInfo['title'] = mb_substr($asArticleInfo['title'], -1)=='.'?mb_substr($asArticleInfo['title'], 0, -1):$asArticleInfo['title'];
$asArticleInfo['link'] = $oLink->getAttribute('href');
$asArticleInfo['date'] = substr(str_replace(array($sSAPBlogUrl.'/', '/'), array('', '-'), $asArticleInfo['link']), 0, 10);
$asArticleInfo['date'] = mb_substr(str_replace(array($sSAPBlogUrl.'/', '/'), array('', '-'), $asArticleInfo['link']), 0, 10);
break;
//Author
case 'jiveTT-hover-user jive-username-link':
$asNames = array_filter(explode(' ', ucwords(trim($oLink->nodeValue))));
$asNames = array_filter(explode(' ', ToolBox::mb_ucwords(trim($oLink->nodeValue))));
$asArticleInfo['first_name'] = array_shift($asNames);
$asArticleInfo['last_name'] = implode('-', $asNames);
$asArticleInfo['email'] = $sSAPDomain.$oLink->getAttribute('href');
@@ -612,14 +622,14 @@ class Databap extends PhpObject
public function addUser($sFirstName, $sLastName, $sCompany, $sEmail='', $iClearance=self::CLEARANCE_MEMBER)
{
$sFirstName = strtolower($sFirstName);
$sLastName = strtolower($sLastName);
$sCompany = strtolower($sCompany);
$sEmail = strtolower($sEmail);
$sFirstName = mb_strtolower($sFirstName);
$sLastName = mb_strtolower($sLastName);
$sCompany = mb_strtolower($sCompany);
$sEmail = mb_strtolower($sEmail);
//Checking company existency in company table
$sCompanyTextCol = MySqlManager::getText(MySqlManager::COMP_TABLE);
$iCompanyId = $this->oMySql->selectInsert(MySqlManager::COMP_TABLE, array($sCompanyTextCol=>strtolower($sCompany), 'logo'=>self::DEFAULT_COMPANY_LOGO), array($sCompanyTextCol));
$iCompanyId = $this->oMySql->selectInsert(MySqlManager::COMP_TABLE, array($sCompanyTextCol=>mb_strtolower($sCompany), 'logo'=>self::DEFAULT_COMPANY_LOGO), array($sCompanyTextCol));
$asInfo = array('first_name'=>$sFirstName,
'last_name'=>$sLastName,
@@ -970,7 +980,7 @@ class Databap extends PhpObject
$asSelect = "*";
}
$asCode = $this->oMySql->selectRow(MySqlManager::CODE_TABLE, $iCodeId, $asSelect);
$asCode = $this->oMySql->selectRow(MySqlManager::CODE_TABLE, $iCodeId, $asSelect);$this->addError($asCode);
$asCode['description'] = self::getDescriptionFormat($asCode['description']);
$asCode['timestamp'] = strtotime($asCode['led']);
$asCode['led'] = self::getDateFormat($asCode['led']);
@@ -1447,31 +1457,31 @@ class Databap extends PhpObject
{
$sMessage = htmlspecialchars($sMessage);
$sType = self::MESSAGE_USER;
if(substr($sMessage, 0, 1) == '/')
if(mb_substr($sMessage, 0, 1) == '/')
{
if(substr($sMessage, 0, 4) == '/me ')
if(mb_substr($sMessage, 0, 4) == '/me ')
{
$sType = self::MESSAGE_ACTION;
$sMessage = substr($sMessage, 3);
$sMessage = mb_substr($sMessage, 3);
}
elseif(substr($sMessage, 0, 6) == '/slap ')
elseif(mb_substr($sMessage, 0, 6) == '/slap ')
{
$sType = self::MESSAGE_ACTION;
$sMessage = ' fout une grosse tarte &agrave; '.substr($sMessage, 5);
$sMessage = ' fout une grosse tarte &agrave; '.mb_substr($sMessage, 5);
}
elseif(substr($sMessage, 0, 4) == '/bs ')
elseif(mb_substr($sMessage, 0, 4) == '/bs ')
{
$sType = self::MESSAGE_ACTION;
$sMessage = ' bitch-slaps '.substr($sMessage, 3);
$sMessage = ' bitch-slaps '.mb_substr($sMessage, 3);
}
elseif(substr($sMessage, 0, 6) == '/kick ')
elseif(mb_substr($sMessage, 0, 6) == '/kick ')
{
$sType = self::MESSAGE_ACTION;
$sMessage = ' met un coup de pied au cul de '.substr($sMessage, 5);
$sMessage = ' met un coup de pied au cul de '.mb_substr($sMessage, 5);
}
elseif(substr($sMessage, 0, 6) == '/nick ' && strlen($sMessage)>6)
elseif(mb_substr($sMessage, 0, 6) == '/nick ' && mb_strlen($sMessage)>6)
{
$sNewNick = $this->getNickNameFormat(substr($sMessage, 5));
$sNewNick = $this->getNickNameFormat(mb_substr($sMessage, 5));
$sOldNick = $this->getNickNameFormat($this->getChatNickNames($this->getUserId()));
//changing Nickname
@@ -1482,9 +1492,9 @@ class Databap extends PhpObject
$sChanName = self::ALL_CHAN_TEXT;
$sMessage = $sOldNick.' a chang&eacute; son pseudo en '.$sNewNick;
}
elseif(substr($sMessage, 0, 9) == '/mission ' && strlen($sMessage)>9)
elseif(mb_substr($sMessage, 0, 9) == '/mission ' && mb_strlen($sMessage)>9)
{
$sNewStatus = substr($sMessage, 9);
$sNewStatus = mb_substr($sMessage, 9);
$sNewFormatStatus = $this->getDescriptionFormat($sNewStatus);
//changing Nickname
@@ -1495,13 +1505,13 @@ class Databap extends PhpObject
$sChanName = self::ALL_CHAN_TEXT;
$sMessage = 'est sur une nouvelle mission : '.$sNewFormatStatus;
}
elseif(substr($sMessage, 0, 6) == '/mail ' && strlen($sMessage)>6)
elseif(mb_substr($sMessage, 0, 6) == '/mail ' && mb_strlen($sMessage)>6)
{
$sImagePattern = '/\/mail (?P<nickname>\w+) (?P<message>.*)/';
preg_match($sImagePattern, $sMessage, $asMatches);
//Looking for user Id
$asContraints = array( 'LOWER(`'.MySqlManager::getText(MySqlManager::OPT_TABLE).'`)'=>strtolower($asMatches['nickname']),
$asContraints = array( 'LOWER(`'.MySqlManager::getText(MySqlManager::OPT_TABLE).'`)'=>mb_strtolower($asMatches['nickname']),
MySqlManager::getId(MySqlManager::OPTNAME_TABLE)=>self::OPT_NICKNAME);
$iUserIdTo = $this->oMySql->selectValue(MySqlManager::OPT_TABLE, MySqlManager::getId(MySqlManager::USER_TABLE), $asContraints);
@@ -1530,22 +1540,22 @@ class Databap extends PhpObject
}
$sType = self::MESSAGE_ACTION;
}
elseif(substr($sMessage, 0, 5) == '/mean')
elseif(mb_substr($sMessage, 0, 5) == '/mean')
{
$sPageContent = file_get_contents('http://www.randominsults.net/');
$sStartText = '<strong><i>';
$sEndText = '</i></strong>';
$iStartPos = strpos($sPageContent, $sStartText);
$iEndPos = strpos($sPageContent, $sEndText);
$iStartPos = mb_strpos($sPageContent, $sStartText);
$iEndPos = mb_strpos($sPageContent, $sEndText);
$sMessage = substr($sPageContent, $iStartPos + strlen($sStartText), $iEndPos - $iStartPos);
$sMessage = mb_substr($sPageContent, $iStartPos + mb_strlen($sStartText), $iEndPos - $iStartPos);
}
elseif(substr($sMessage, 0, 5) == '/like')
elseif(mb_substr($sMessage, 0, 5) == '/like')
{
$sType = self::MESSAGE_ACTION;
$sMessage = ' plussoie';
}
elseif(substr($sMessage, 0, 4) == '/now')
elseif(mb_substr($sMessage, 0, 4) == '/now')
{
$sType = self::MESSAGE_ACTION;
$asWeekDays = array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');
@@ -1553,15 +1563,15 @@ class Databap extends PhpObject
$sMessage = ' a demand&eacute; l\'heure. Pour sa gouverne, il est exactement '.date(self::TIME_FORMAT).
', le '.$asWeekDays[date('N')-1].' '.date('j').' '.$asMonths[date('n')-1].' '.date('Y').' (semaine '.date('W').')';
}
elseif($sMessage == '/channels' || substr($sMessage, 0, 5) == '/list' || $sMessage == '/chans')
elseif($sMessage == '/channels' || mb_substr($sMessage, 0, 5) == '/list' || $sMessage == '/chans')
{
//Always at least one channel open (the one the message is sent from)
$sMessage = ' a demand&eacute; les chans disponibles. Pour sa gouverne, les chans ayant des membres connect&eacute;s sont #'.MySqlManager::implodeAll($this->getActiveChannels(), ' (', ', #', '', ')');
$sType = self::MESSAGE_ACTION;
}
elseif(substr($sMessage, 0, 5) == '/img ' && strlen($sMessage)>5)
elseif(mb_substr($sMessage, 0, 5) == '/img ' && mb_strlen($sMessage)>5)
{
$sUrl = trim(substr($sMessage, 4));
$sUrl = trim(mb_substr($sMessage, 4));
$asResult = $this->downloadToTmp($sUrl);
if($asResult['error']=='')
{
@@ -1569,18 +1579,18 @@ class Databap extends PhpObject
$sType = self::MESSAGE_IMG;
}
}
elseif(substr($sMessage, 0, 6) == '/9gag ' && strlen($sMessage)>6)
elseif(mb_substr($sMessage, 0, 6) == '/9gag ' && mb_strlen($sMessage)>6)
{
$sMessage = $this->getJsonMessage($this->get9gagPost(trim(substr($sMessage, 6))));
$sMessage = $this->getJsonMessage($this->get9gagPost(trim(mb_substr($sMessage, 6))));
$sType = self::MESSAGE_9GAG;
}
elseif(substr($sMessage, 0, 7) == '/reboot' && $this->getUserClearance()==self::CLEARANCE_ADMIN)
elseif(mb_substr($sMessage, 0, 7) == '/reboot' && $this->getUserClearance()==self::CLEARANCE_ADMIN)
{
$sMessage = 'L\'administrateur a demand&eacute; un reboot. Votre page va se rafraichir automatiquement dans '.self::REBOOT_DELAY.' secondes.';
$sType = self::MESSAGE_REBOOT;
}
}
elseif(substr($sMessage, 0, 1) == '@' && strpos($sMessage, ' ')>1)
elseif(mb_substr($sMessage, 0, 1) == '@' && mb_strpos($sMessage, ' ')>1)
{
$sType = self::MESSAGE_PRIVATE;
}
@@ -1596,7 +1606,7 @@ class Databap extends PhpObject
private function downloadToTmp($sUrl)
{
$sFileInfo = pathinfo($sUrl);
$sImageExt = strtolower($sFileInfo['extension']);
$sImageExt = mb_strtolower($sFileInfo['extension']);
$sFilePath = self::DOC_TMP_FOLDER.uniqid().'.'.$sImageExt;
return ToolBox::createThumbnail($sUrl, self::CHAT_IMG_MAX_WIDTH, self::CHAT_IMG_MAX_HEIGHT, $sFilePath);
}
@@ -1685,7 +1695,7 @@ class Databap extends PhpObject
ksort($asSqlMessages);
//Sort out messages for Json Export
$iPrefixLen = strlen(self::JSON_PREFIX);
$iPrefixLen = mb_strlen(self::JSON_PREFIX);
$asMessages = array('messages'=>array(), 'last_message_id'=>0);
foreach($asSqlMessages as $iMessageId=>$asMessageInfo)
{
@@ -1728,9 +1738,9 @@ class Databap extends PhpObject
}
//Json message
if(substr($asMessages['messages'][$iMessageId]['message'], 0, $iPrefixLen) == self::JSON_PREFIX)
if(mb_substr($asMessages['messages'][$iMessageId]['message'], 0, $iPrefixLen) == self::JSON_PREFIX)
{
$asMessages['messages'][$iMessageId]['message'] = json_decode(substr($asMessages['messages'][$iMessageId]['message'], $iPrefixLen));
$asMessages['messages'][$iMessageId]['message'] = json_decode(mb_substr($asMessages['messages'][$iMessageId]['message'], $iPrefixLen));
}
else //Normal message
{
@@ -1936,7 +1946,7 @@ class Databap extends PhpObject
return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="content-type" content="text/html; charset='.Settings::TEXT_ENC.'" />
<meta name="author" content="'.$asUser['name'].' ('.$asUser['company'].')" />
<link rel="shortcut icon" href="images/favicon_gc3.ico" />
<title>Databap &bull;</title>
@@ -2067,8 +2077,8 @@ class Databap extends PhpObject
//login using form
if($sName!='' && $sCompany!='')
{
$asNames = explode(' ', strtolower($sName));
$sCompany = strtolower($sCompany);
$asNames = explode(' ', mb_strtolower($sName));
$sCompany = mb_strtolower($sCompany);
//Get Company's Id
$iCompanyId = $this->oMySql->selectValue(MySqlManager::COMP_TABLE, $sCompanyTableId, array($sCompanyTableText=>$sCompany));
@@ -2091,7 +2101,7 @@ class Databap extends PhpObject
$iUserId = $asUserInfo[$sUserTableId];
//Check pass reset necessity
$bResetPass = (substr($asUserInfo['led'], 0, 10) != date(Databap::DATE_SQL_FORMAT));
$bResetPass = (mb_substr($asUserInfo['led'], 0, 10) != date(Databap::DATE_SQL_FORMAT));
}
//Login using Token (limited access)
elseif($sAction==self::EXT_ACCESS && $sToken!='')
@@ -2114,14 +2124,14 @@ class Databap extends PhpObject
public function checkToken($sKey)
{
$iUserId = strstr($sKey, '_', true);
$sToken = substr($sKey, strlen($iUserId)+1);
return (strlen($sToken)==self::TOKEN_LENGTH && $this->generateToken($iUserId)==$sToken && $this->checkValue(MySqlManager::USER_TABLE, $iUserId))?$iUserId:0;
$iUserId = mb_strstr($sKey, '_', true);
$sToken = mb_substr($sKey, mb_strlen($iUserId)+1);
return (mb_strlen($sToken)==self::TOKEN_LENGTH && $this->generateToken($iUserId)==$sToken && $this->checkValue(MySqlManager::USER_TABLE, $iUserId))?$iUserId:0;
}
public function resetNecessary($iUserId)
{
$sLed = substr($this->oMySql->selectValue(MySqlManager::USER_TABLE, 'led', $iUserId), 0, 10);
$sLed = mb_substr($this->oMySql->selectValue(MySqlManager::USER_TABLE, 'led', $iUserId), 0, 10);
return $sLed != date(Databap::DATE_SQL_FORMAT);
}
@@ -2190,7 +2200,7 @@ class Databap extends PhpObject
return self::encryptPassword( $_SERVER['HTTP_USER_AGENT'].
$_SERVER['REMOTE_ADDR'].
$_SERVER['REQUEST_TIME'].
strstr(microtime(), ' ', true).
mb_strstr(microtime(), ' ', true).
$_SERVER['SERVER_SIGNATURE'].
$_SERVER['SERVER_ADMIN']);
}
@@ -2198,16 +2208,16 @@ class Databap extends PhpObject
private static function encryptPassword($sPass)
{
$sRandomText = 'F_RA-1H"2{bvj)5f?0sd3r#fP,K]U|w}hGiN@(sZ.sDe!7*x/:Mq+&';
for($iIndex=0; $iIndex < strlen($sPass); $iIndex++)
for($iIndex=0; $iIndex < mb_strlen($sPass); $iIndex++)
{
$sPass[$iIndex] = $sRandomText[$iIndex%strlen($sRandomText)] ^ $sPass[$iIndex];
$sPass[$iIndex] = $sRandomText[$iIndex%mb_strlen($sRandomText)] ^ $sPass[$iIndex];
}
return md5($sPass);
}
public static function getChanSafeName($sChanName)
{
$sChanSafeName = preg_replace('/[^a-z0-9]/', '_', strtolower($sChanName));
$sChanSafeName = preg_replace('/[^a-z0-9]/', '_', mb_strtolower($sChanName));
//Sort PM chans
$asPm = self::isPmChan($sChanSafeName);
@@ -2284,7 +2294,7 @@ class Databap extends PhpObject
public static function getCompanyFormat($sCompany)
{
return ucwords($sCompany);
return ToolBox::mb_ucwords($sCompany);
}
public static function getDescriptionFormat($sDescription)
@@ -2292,13 +2302,9 @@ class Databap extends PhpObject
return ucfirst($sDescription);
}
public static function jsonExport($asData, $bConvert=false)
public static function jsonExport($asData)
{
header('Content-type: application/json');
if($bConvert)
{
$asData = ToolBox::cleanData($asData, 'utf8_encode');
}
return self::jsonConvert($asData);
}
@@ -2319,7 +2325,7 @@ class Databap extends PhpObject
public static function toBytes($str)
{
$val = trim($str);
$last = strtolower($str[strlen($str)-1]);
$last = mb_strtolower($str[mb_strlen($str)-1]);
switch($last) {
case 'g': $val *= 1024;
case 'm': $val *= 1024;
@@ -2699,7 +2705,7 @@ class SearchEngine extends PhpObject
break;
}
$sWords = implode(self::KEYWORDS_SEPARATOR, $asWords);
$sWords = strtolower(str_replace("\n", self::KEYWORDS_SEPARATOR, $sWords));
$sWords = mb_strtolower(str_replace("\n", self::KEYWORDS_SEPARATOR, $sWords));
//TODO Fix char encoding
$sWords = preg_replace('/(\W+)/', self::KEYWORDS_SEPARATOR, $sWords); //remove all non-word characters
@@ -2884,7 +2890,7 @@ class SearchEngine extends PhpObject
private function checkSearchedWords($sWord)
{
return (strlen($sWord) >= 2);
return (mb_strlen($sWord) >= 2);
}
}
@@ -3063,7 +3069,7 @@ class Reader
}
//Enlarge line
if(strpos($sLine, $sServName) !== false)
if(mb_strpos($sLine, $sServName) !== false)
{
$sLiClass .= ' bigline';
}
@@ -3098,11 +3104,11 @@ class Reader
//Core Words
foreach($this->getWords('wCore') as $sCoreWord)
{
$sCoreWord = strtolower($sCoreWord);
$sCoreWord = mb_strtolower($sCoreWord);
$sPattern = '/>(([^<]*)([^\w&<]{1})|.{0})('.$sCoreWord.')([\W])/';
$sCode = preg_replace($sPattern, '>$1<span class="core">$4</span>$5', $sCode);
}
//$sCoreWords = str_replace(' ', '\ ', implode('|', array_map('strtolower', $this->getWords('wCore'))));
//$sCoreWords = str_replace(' ', '\ ', implode('|', array_map('mb_strtolower', $this->getWords('wCore'))));
//$sPattern = '/>(([^<]*)([^\w<]{1})|.{0})('.$sCoreWords.')(?=[\W])/U';
//$sCode = preg_replace($sPattern, '>$1<span class="core">$4</span>', $sCode);
@@ -3114,7 +3120,7 @@ class Reader
$sPattern = '/>([^<]*)\\'.$sOpWord.'/';
$sCode = preg_replace($sPattern, '>$1<span class="operator">'.$sOpWord.'</span>', $sCode);
}
//$sPattern = '/>([^<]*)['.implode(array_map('strtolower', ($this->getWords('cOperator')))).']/';
//$sPattern = '/>([^<]*)['.implode(array_map('mb_strtolower', ($this->getWords('cOperator')))).']/';
//echo $sPattern;
//$sCode = preg_replace($sPattern, '>$1<span class="operator">$2$3</span>', $sCode);
@@ -3128,12 +3134,12 @@ class Reader
private static function getFirstWord($sText)
{
return strstr(str_replace('.', ' ', trim($sText)), ' ', true);
return mb_strstr(str_replace('.', ' ', trim($sText)), ' ', true);
}
private static function getFirstChar($sText)
{
return substr(str_replace('.', ' ', trim($sText)), 0, 1);
return mb_substr(str_replace('.', ' ', trim($sText)), 0, 1);
}
private function addColor(&$sText, $sWord, $sClassColor)
@@ -3148,7 +3154,7 @@ class Reader
public static function convText2Html($sCode)
{
return htmlspecialchars(strtolower($sCode), ENT_QUOTES);
return htmlspecialchars(mb_strtolower($sCode), ENT_QUOTES);
}
public function getColoredCode()
@@ -3237,7 +3243,7 @@ class Mask extends PhpObject
{
$iStartPos = $this->getPartStartPos($sPartName);
$iEndPos = $this->getPartEndPos($sPartName);
$sPart = substr($this->sMask, $iStartPos, $iEndPos-$iStartPos);
$sPart = mb_substr($this->sMask, $iStartPos, $iEndPos-$iStartPos);
$sExtendedPart = $this->getPartPattern($sPartName, self::START_TAG).$sPart. $this->getPartPattern($sPartName, self::END_TAG);
$this->sMask = str_replace($sExtendedPart, $this->getPartTagPattern($sPartName), $this->sMask);
return $sPart;
@@ -3246,13 +3252,13 @@ class Mask extends PhpObject
private function getPartStartPos($sPartName)
{
$sPartStartPattern = $this->getPartPattern($sPartName, self::START_TAG);
return strpos($this->sMask, $sPartStartPattern) + strlen($sPartStartPattern);
return mb_strpos($this->sMask, $sPartStartPattern) + mb_strlen($sPartStartPattern);
}
private function getPartEndPos($sPartName)
{
$sPartEndPattern = $this->getPartPattern($sPartName, self::END_TAG);
return strpos($this->sMask, $sPartEndPattern);
return mb_strpos($this->sMask, $sPartEndPattern);
}
private function getPartPattern($sPartName, $sAction)
@@ -3373,7 +3379,7 @@ class fileUploader
function __construct($sFolderPath, $asAllowedExtensions = array()/*, $sizeLimit = 10485760*/)
{
$this->sFolderPath = $sFolderPath;
$this->asAllowedExtensions = array_map("strtolower", $asAllowedExtensions);
$this->asAllowedExtensions = array_map("mb_strtolower", $asAllowedExtensions);
//$this->iSizeLimit = $sizeLimit;
//$this->checkServerSettings();
$this->iSizeLimit = Databap::getMaxSize();
@@ -3409,7 +3415,7 @@ class fileUploader
private function toBytes($str)
{
$val = trim($str);
$last = strtolower($str[strlen($str)-1]);
$last = mb_strtolower($str[mb_strlen($str)-1]);
switch($last) {
case 'g': $val *= 1024;
case 'm': $val *= 1024;
@@ -3480,7 +3486,7 @@ class fileUploader
}
$asPathInfo = pathinfo($this->getName());
$sExt = strtolower($asPathInfo['extension']);
$sExt = mb_strtolower($asPathInfo['extension']);
$sExt = ($sExt=='jpg')?'jpeg':$sExt;
if($this->asAllowedExtensions && !in_array($sExt, $this->asAllowedExtensions))
{
@@ -3523,10 +3529,6 @@ class fileUploader
*/
class MySqlManager extends PhpObject
{
const DB_SERVER = Settings::DB_SERVER;
const DB_LOGIN = Settings::DB_LOGIN;
const DB_PASS = Settings::DB_PASS;
const DB_NAME = Settings::DB_NAME;
const DB_NO_CONN = 'ERR_1';
const DB_NO_DATA = 'ERR_2';
const ID_TAG = 'id_';
@@ -3555,16 +3557,19 @@ class MySqlManager extends PhpObject
public $sDbState;
private $oConnection;
private $sDatabase; //TODO Variable ?
private $bTrace;
public function __construct()
public function __construct($sDbServer, $sLogin, $sPass, $sDatabase, $sEncoding)
{
parent::__construct();
$this->sDatabase = $sDatabase;
//$this->oConnection = mysql_connect(self::DB_SERVER, self::DB_LOGIN, self::DB_PASS);
$this->oConnection = new mysqli(self::DB_SERVER, self::DB_LOGIN, self::DB_PASS);
$this->oConnection = new mysqli($sDbServer, $sLogin,$sPass);
$this->syncPhpParams($sEncoding);
/*
$dsn = 'mysql:dbname=databap;host=127.0.0.1';
$dsn = 'mysql:dbname='.$this->sDatabase.';host='.self::DB_SERVER;
try {$dbh = new PDO($dsn, self::DB_LOGIN, self::DB_PASS);}
catch (PDOException $e) {$this->addError('Connexion échouée : ' . $e->getMessage());}
*/
@@ -3579,8 +3584,8 @@ class MySqlManager extends PhpObject
}
else
{
//if(!mysql_select_db(self::DB_NAME, $this->oConnection))
if(!$this->oConnection->select_db(self::DB_NAME))
//if(!mysql_select_db($this->sDatabase, $this->oConnection))
if(!$this->oConnection->select_db($this->sDatabase))
{
$this->addError('bug selecting database. Installing...');
$this->sDbState = self::DB_NO_DATA;
@@ -3588,6 +3593,22 @@ class MySqlManager extends PhpObject
}
}
private function syncPhpParams($sEncoding)
{
//Characters encoding
$this->oConnection->set_charset($sEncoding); //SET NAMES
//Time zone
$oNow = new DateTime();
$iMins = $oNow->getOffset() / 60;
$iSign = ($iMins < 0)?-1:1;
$iMins = abs($iMins);
$iHours = floor($iMins / 60);
$iMins -= $iHours * 60;
$sOffset = sprintf('%+d:%02d', $iHours*$iSign, $iMins);
$this->setQuery("SET time_zone='{$sOffset}';");
}
public function __destruct()
{
parent::__destruct();
@@ -3608,7 +3629,7 @@ class MySqlManager extends PhpObject
$asTables = array();
foreach($asConstants as $sConstant=>$sConstantValue)
{
if(strpos($sConstant, $sTableTag)!==false && strpos($sConstant, $sTableTag)==(strlen($sConstant) - strlen($sTableTag)))
if(mb_strpos($sConstant, $sTableTag)!==false && mb_strpos($sConstant, $sTableTag)==(mb_strlen($sConstant) - mb_strlen($sTableTag)))
{
$asTables[] = $sConstantValue;
}
@@ -3619,10 +3640,10 @@ class MySqlManager extends PhpObject
public function install()
{
//Create Database
$this->setQuery("DROP DATABASE IF EXISTS ".self::DB_NAME);
$this->setQuery("CREATE DATABASE ".self::DB_NAME);
//mysql_select_db(self::DB_NAME, $this->oConnection);
$this->oConnection->select_db(self::DB_NAME);
$this->setQuery("DROP DATABASE IF EXISTS ".$this->sDatabase);
$this->setQuery("CREATE DATABASE ".$this->sDatabase." DEFAULT CHARACTER SET ".Settings::SQL_ENC." DEFAULT COLLATE ".Settings::SQL_ENC."_general_ci");
//mysql_select_db($this->sDatabase, $this->oConnection);
$this->oConnection->select_db($this->sDatabase);
//Create tables
@array_walk($this->getInstallQueries(), array($this, 'setQuery'));
@@ -3752,8 +3773,8 @@ class MySqlManager extends PhpObject
public static function getText($sTableName, $bFull=false)
{
$sColumnName = substr(str_replace('`', '', $sTableName), 0, -1);
$sColumnName = substr($sColumnName, -2)=='ie'?substr($sColumnName, 0, -2).'y':$sColumnName;
$sColumnName = mb_substr(str_replace('`', '', $sTableName), 0, -1);
$sColumnName = mb_substr($sColumnName, -2)=='ie'?mb_substr($sColumnName, 0, -2).'y':$sColumnName;
return $bFull?self::getFullColumnName($sTableName, $sColumnName):$sColumnName;
}
@@ -4354,7 +4375,7 @@ class ToolBox
//Add Server Name
$sServerName = array_key_exists('SERVER_NAME', $_SERVER)?$_SERVER['SERVER_NAME']:$_SERVER['PWD'];
$sAppPath = 'http://'.str_replace('http://', '', $sServerName.dirname($_SERVER['SCRIPT_NAME']));
$_GET['serv_name'] = $sAppPath.(substr($sAppPath, -1)!='/'?'/':'');
$_GET['serv_name'] = $sAppPath.(mb_substr($sAppPath, -1)!='/'?'/':'');
}
public static function array_map_encapsulate($oData, $sChar)
@@ -4372,24 +4393,24 @@ class ToolBox
public static function capitalizeWords($acText, $sCharList = '')
{
// Use ucwords if no delimiters are given
// Use ToolBox::mb_ucwords if no delimiters are given
if($sCharList=='') {
return ucwords($acText);
return ToolBox::mb_ucwords($acText);
}
// Go through all characters
$capitalizeNext = true;
$max = strlen($acText);
$max = mb_strlen($acText);
for ($i = 0; $i < $max; $i++)
{
if(strpos($sCharList, $acText[$i]) !== false)
if(mb_strpos($sCharList, $acText[$i]) !== false)
{
$capitalizeNext = true;
}
elseif($capitalizeNext)
{
$capitalizeNext = false;
$acText[$i] = strtoupper($acText[$i]);
$acText[$i] = mb_strtoupper($acText[$i]);
}
}
@@ -4438,13 +4459,13 @@ class ToolBox
//Look up the extension to choose the image creator
//TODO use MIME types
$sInInfo = pathinfo($sInPath);
$sInName = strtolower($sInInfo['basename']);
$sImageExt = strtolower($sInInfo['extension']);
$sInName = mb_strtolower($sInInfo['basename']);
$sImageExt = mb_strtolower($sInInfo['extension']);
$sImageExt = ($sImageExt=='jpg')?'jpeg':$sImageExt;
//New Destination folder
if($sOutPath=='') $sOutPath = $sInPath;
elseif(substr($sOutPath, -1)=='/') $sOutPath .= $sInName;
elseif(mb_substr($sOutPath, -1)=='/') $sOutPath .= $sInName;
//New sizes
if(in_array($sImageExt, Databap::$UPLOAD_IMG_EXTS))
@@ -4502,13 +4523,15 @@ class ToolBox
return (preg_match('/^.{1}/us', $sText, $ar) == 1);
}
/**
* Only works with ISO-8859-1 and UTF-8 encoding
*/
public static function strlen($sText)
function mb_ucwords($sText)
{
if(utf8_compliant($sText)) return strlen(utf8_decode($sText));
else return strlen($sText);
return mb_convert_case($sText, MB_CASE_TITLE, "UTF-8");
}
function file_get_contents_utf8($oFile)
{
$sContent = file_get_contents($oFile);
return mb_convert_encoding($sContent, 'UTF-8', mb_detect_encoding($sContent, 'UTF-8, ISO-8859-1', true));
}
}

View File

@@ -71,7 +71,7 @@ class Feed extends PhpObject {
$sItems = implode("\n", array_map(array($this, 'buildItem'), $asSortedItems));
//Global Feed
$sFeed = '<?xml version="1.0" encoding="ISO-8859-1" ?>';
$sFeed = '<?xml version="1.0" encoding="UTF-8" ?>';
$sFeed .= self::getHtml(self::getHtml($sRssFeedHeader.$sItems, 'channel'), 'rss', '', '', array('version'=>'2.0', 'xmlns:atom'=>'http://www.w3.org/2005/Atom'));
return $sFeed;

View File

@@ -171,31 +171,23 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS)
case 'fix_encoding':
/**
* Procedure (from ISO-8859-1, aka Latin-1)
* - Rss.php : switch ISO <-> UTF : $sFeed = '<?xml version="1.0" encoding="UTF-8" ?>';
* - .htaccess : ajout UTF-8 par défaut : AddDefaultCharset UTF-8 (+check syntax)
* - config.php : Ajouter dans le constructor de Databap :
* - ini_set('default_charset', 'UTF-8');
* - header('Content-Type: text/html; charset=utf-8');
* - config.php : changer tous les ISO en UTF :
* - <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> --> <meta http-equiv="content-type" content="text/html; charset=utf-8" />
* - config.php : Enlever la conversion en UTF8 de jsonExport()
* - config.php : Ajouter $this->oConnection->set_charset('utf8'); dans le constructeur de MySqlManager
* - replace strlen with ToolBox::strlen() --> check the so called mb_* functions
* - Re-encode all tables from database using utf8_encode()
* - Replace all <form> with <form accept-charset="UTF-8">
* - Alter database and change database generation script in MySqlManager :
* - ALTER DATABASE databap CHARACTER SET utf8 COLLATE utf8_general_ci;
* - (ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci;)
* - CREATE DATABASE `my_db` CHARACTER SET = utf8 COLLATE = utf8_general_ci;
* - CREATE TABLE `my_table` ([TABLE spec]) CHARACTER SET = utf8 COLLATE = utf8_general_ci;
* - (CREATE TABLE `my_table` ([TABLE spec]) CHARACTER SET = utf8 COLLATE = utf8_general_ci;)
* - Convert existing database :
* - mysqldump --default_character_set=latin1 -u root -p my_db > my_db.sql
* - iconv -f iso-8859-1 -t utf8 my_db.sql > my_db-utf8.sql
* - sed s/latin1/utf8/ < my_db-utf8.sql > my_db-utf8-final.sql
* - CREATE DATABASE `my_db` CHARACTER SET = utf8 COLLATE = utf8_general_ci;
* - mysql -u root -p my_db < my_db-utf8-final.sql
* - Switch your editor to UTF-8 (search 'encoding' in Eclipse preferences)
* - check http://webcollab.sourceforge.net/unicode.html
* - add mb_* function : sudo apt-get install php-mbstring --> check http://allseeing-i.com/How-to-setup-your-PHP-site-to-use-UTF8
* - replace strlen with ToolBox::strlen() --> check the so called mb_* functions
*/
$sResult = $oDatabap->fixEncoding();
break;
}
}

View File

@@ -1,8 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- <meta http-equiv="content-type" content="text/html; charset=utf-8" /> -->
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="content-type" content="text/html; charset=#text_enc#" />
<meta name="author" content="Francois Lutran" />
<meta name="description" content="Abap database for consultants" />
<meta name="keywords" content="ABAP, SAP, BW, BI" />

23
readme Normal file
View File

@@ -0,0 +1,23 @@
Hi there!
To install, kindly follow this procedure:
1. Add apache module rewrite (a2enmod rewrite on debian)
2. Add php-curl, php-gd and php-mbstring packages to PHP (if not already built in)
3. Create a settings.php in databap root folder :
<?php
class Settings
{
const DB_SERVER = 'localhost';
const DB_LOGIN = 'root';
const DB_PASS = 'pass';
const DB_NAME = 'databap';
const TIMEZONE = 'Europe/Paris';
const TEXT_ENC = 'UTF-8';
const SQL_ENC = 'utf8';
}
?>
4. You're good to go ! Check users SQL table for default admin user