Files
grzanieplus.pl/plugins/stLanguagePlugin/lib/model/LanguageTranslationPeer.php
2025-03-12 17:06:23 +01:00

133 lines
4.6 KiB
PHP

<?php
class LanguageTranslationPeer
{
const TABLE_NAME = 'st_language_translation';
const CATALOGUE = self::TABLE_NAME.'.catalogue';
const INDEX = self::TABLE_NAME.'.index';
const PHRASE = self::TABLE_NAME.'.phrase';
const BACKEND_PHRASE = self::TABLE_NAME.'.backend_phrase';
const DEFAULT_PHRASE_TRANSLATION = self::TABLE_NAME.'.default_phrase_translation';
const USER_PHRASE_TRANSLATION = self::TABLE_NAME.'.user_phrase_translation';
const LANGUAGE_ID = self::TABLE_NAME.'.language_id';
/**
* Ostatnio wykonane kryteria
*
* @var Criteria
*/
protected static $lastCriteria = null;
protected static $lastResults = null;
public static function retrieveByPK($catalogue, $index, $languageId)
{
$c = new Criteria();
$c->add(self::CATALOGUE, $catalogue);
$c->add(self::INDEX, $index);
$c->add(self::LANGUAGE_ID, $languageId);
return self::doSelectOne($c);
}
public static function doSelectOne(Criteria $c)
{
$results = self::doSelect($c);
return $results ? $results[0] : null;
}
/**
* Zwraca tablicę domyślnych tłumaczeń
*
* @param Criteria $c
* @return LanguageTranslation[]
*/
public static function doSelect(Criteria $c)
{
if (null === self::$lastCriteria || !self::$lastCriteria->equals($c))
{
$results = array();
$language = LanguagePeer::retrieveByPK($c->get(self::LANGUAGE_ID));
$languageEditor = new stLanguageEditor($language);
$searchPhrase = $c->get(self::BACKEND_PHRASE) ? trim($c->get(self::BACKEND_PHRASE), '% ') : null;
$searchTranslation = $c->get(self::USER_PHRASE_TRANSLATION) ? trim($c->get(self::USER_PHRASE_TRANSLATION), '% ') : null;
$searchCatalogue = $c->get(self::CATALOGUE) ? trim($c->get(self::CATALOGUE), '% ') : null;
$searchIndex = $c->get(self::INDEX) ? trim($c->get(self::INDEX), '% ') : null;
if ($searchPhrase || $searchTranslation)
{
$phrases = $languageEditor->search($searchPhrase, $searchTranslation, $searchCatalogue);
}
else
{
$phrases = $languageEditor->getPhrases($searchCatalogue, $searchIndex);
}
foreach ($phrases as $catalogue => $data)
{
foreach ($data as $index => $phrase)
{
$languageTranslation = new LanguageTranslation();
$languageTranslation->setCatalogue($catalogue);
$languageTranslation->setIndex($index);
$languageTranslation->setPhrase($phrase['phrase']);
$languageTranslation->setDefaultPhraseTranslation($phrase['shop']);
$languageTranslation->setUserPhraseTranslation(isset($phrase['user']) ? $phrase['user'] : null);
$languageTranslation->setBackendPhrase($phrase['backend_phrase']);
$languageTranslation->setLanguage($languageEditor->getLanguage());
$results[] = $languageTranslation;
}
}
if ($searchPhrase)
{
usort($results, function(LanguageTranslation $t1, LanguageTranslation $t2) {
return mb_strlen($t1->getPhrase()) > mb_strlen($t2->getPhrase());
});
}
self::$lastCriteria = $c;
self::$lastResults = array_slice($results, $c->getOffset(), $c->getLimit() > 0 ? $c->getLimit() : null);
}
return self::$lastResults;
}
public static function doCount(Criteria $c)
{
$results = self::doSelect($c);
return count($results);
}
public static function getMapBuilder()
{
return BasePeer::getMapBuilder('plugins.stLanguagePlugin.lib.model.LanguageTranslationMapBuilder');
}
public static function translateFieldName($name, $fromType, $toType)
{
return $name;
}
}
// static code to register the map builder for this Peer with the main Propel class
if (Propel::isInit()) {
// the MapBuilder classes register themselves with Propel during initialization
// so we need to load them here.
try {
LanguageTranslationPeer::getMapBuilder();
} catch (Exception $e) {
Propel::log('Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR);
}
} else {
// even if Propel is not yet initialized, the map builder class can be registered
// now and then it will be loaded when Propel initializes.
Propel::registerMapBuilder('plugins.stLanguagePlugin.lib.model.LanguageTranslationMapBuilder');
}