Rajout du dossier core + MAJ .gitignore
This commit is contained in:
142
core/lib/Thelia/Tools/I18n.php
Normal file
142
core/lib/Thelia/Tools/I18n.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/*************************************************************************************/
|
||||
/* This file is part of the Thelia package. */
|
||||
/* */
|
||||
/* Copyright (c) OpenStudio */
|
||||
/* email : dev@thelia.net */
|
||||
/* web : http://www.thelia.net */
|
||||
/* */
|
||||
/* For the full copyright and license information, please view the LICENSE.txt */
|
||||
/* file that was distributed with this source code. */
|
||||
/*************************************************************************************/
|
||||
|
||||
namespace Thelia\Tools;
|
||||
|
||||
use Propel\Runtime\ActiveQuery\ModelCriteria;
|
||||
use Thelia\Model\Lang;
|
||||
|
||||
/**
|
||||
* Created by JetBrains PhpStorm.
|
||||
* Date: 8/19/13
|
||||
* Time: 3:24 PM
|
||||
*
|
||||
* Helper for translations
|
||||
*
|
||||
* @package I18n
|
||||
* @author Guillaume MOREL <gmorel@openstudio.fr>
|
||||
*
|
||||
*/
|
||||
class I18n
|
||||
{
|
||||
protected static $defaultLocale;
|
||||
|
||||
/**
|
||||
* Create a \DateTime from a date picker form input
|
||||
* The date format is the same as the one from the current User Session
|
||||
* Ex : $lang = $session->getLang()
|
||||
*
|
||||
* @param Lang $lang Object containing date format
|
||||
* @param string $date String to convert
|
||||
*
|
||||
* @return \DateTime
|
||||
*/
|
||||
public function getDateTimeFromForm(Lang $lang, $date)
|
||||
{
|
||||
$currentDateFormat = $lang->getDateFormat();
|
||||
|
||||
return \DateTime::createFromFormat($currentDateFormat, $date);
|
||||
}
|
||||
|
||||
public static function forceI18nRetrieving($askedLocale, $modelName, $id, $needed = array('Title'))
|
||||
{
|
||||
$i18nQueryClass = sprintf("\\Thelia\\Model\\%sI18nQuery", $modelName);
|
||||
$i18nClass = sprintf("\\Thelia\\Model\\%sI18n", $modelName);
|
||||
|
||||
/* get customer language translation */
|
||||
$i18n = $i18nQueryClass::create()
|
||||
->filterById($id)
|
||||
->filterByLocale(
|
||||
$askedLocale
|
||||
)->findOne();
|
||||
/* or default translation */
|
||||
if (null === $i18n) {
|
||||
$i18n = $i18nQueryClass::create()
|
||||
->filterById($id)
|
||||
->filterByLocale(
|
||||
Lang::getDefaultLanguage()->getLocale()
|
||||
)->findOne();
|
||||
}
|
||||
if (null === $i18n) {
|
||||
// @todo something else ?
|
||||
$i18n = new $i18nClass();
|
||||
;
|
||||
$i18n->setId($id);
|
||||
foreach ($needed as $need) {
|
||||
$method = sprintf('set%s', $need);
|
||||
if (method_exists($i18n, $method)) {
|
||||
$i18n->$method('DEFAULT ' . strtoupper($need));
|
||||
} else {
|
||||
// @todo throw sg ?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $i18n;
|
||||
}
|
||||
|
||||
public static function addI18nCondition(
|
||||
ModelCriteria $query,
|
||||
$i18nTableName,
|
||||
$tableIdColumn,
|
||||
$i18nIdColumn,
|
||||
$localeColumn,
|
||||
$locale
|
||||
) {
|
||||
if (null === static::$defaultLocale) {
|
||||
static::$defaultLocale = Lang::getDefaultLanguage()->getLocale();
|
||||
}
|
||||
|
||||
$locale = static::realEscape($locale);
|
||||
$defaultLocale = static::realEscape(static::$defaultLocale);
|
||||
|
||||
$query
|
||||
->_and()
|
||||
->where(
|
||||
"CASE WHEN ".$tableIdColumn." IN".
|
||||
"(SELECT DISTINCT ".$i18nIdColumn." ".
|
||||
"FROM `".$i18nTableName."` ".
|
||||
"WHERE locale=$locale) ".
|
||||
"THEN ".$localeColumn." = $locale ".
|
||||
"ELSE ".$localeColumn." = $defaultLocale ".
|
||||
"END"
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @return string
|
||||
*
|
||||
* Really escapes a string for SQL query.
|
||||
*/
|
||||
public static function realEscape($str)
|
||||
{
|
||||
$str = trim($str, "\"'");
|
||||
|
||||
$return = "CONCAT(";
|
||||
$len = strlen($str);
|
||||
|
||||
for ($i = 0; $i < $len; ++$i) {
|
||||
$return .= "CHAR(".ord($str[$i])."),";
|
||||
}
|
||||
|
||||
if ($i > 0) {
|
||||
$return = substr($return, 0, -1);
|
||||
} else {
|
||||
$return = "\"\"";
|
||||
}
|
||||
$return .= ")";
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user