Merge branch 'optim' of https://github.com/thelia/thelia into optim

Conflicts:
	core/lib/Thelia/Action/Order.php
	core/lib/Thelia/Core/Template/Element/BaseLoop.php
This commit is contained in:
Franck Allimant
2014-01-31 15:49:59 +01:00
353 changed files with 5389 additions and 3089 deletions

1
.gitignore vendored
View File

@@ -29,3 +29,4 @@ phpmyadmin
templates/default-esi
local/modules/TemplateEsiModule
composer.phar
web/.htaccess

View File

@@ -2,6 +2,13 @@
- Tinymce is now a dedicated module. You need to activate it.
- Fix PDF creation. Bug #180
- Fix many translation issues.
- The TaxManager is now a service
- Loop output is now put in cache for better performance
- loop count is refactored. It used now count propel method instead of classic loop method
- UTF-8 is used during install process, no more encoding problem in database now
- an admin can now choose a prefered locale and switch language in admin panel
- module repository is available on github : https://github.com/thelia-modules
- import module from Thelia 1 is available. It works from Thelia 1.4.2 : https://github.com/thelia-modules/importT1
#2.0.0-beta3
- Coupon effect inputs are now more customisable (input text, select, ajax, etc.. are usable) and unlimited amount of input for coupon effect are now possible too

View File

@@ -36,7 +36,7 @@ use Thelia\Model\Map\AddressTableMap;
* @package Thelia\Action
* @author Manuel Raynaud <mraynaud@openstudio.fr>
*/
class Address extends BaseAction implements EventSubscriberInterface
class Address implements EventSubscriberInterface
{
public function create(AddressCreateOrUpdateEvent $event)
@@ -69,7 +69,7 @@ class Address extends BaseAction implements EventSubscriberInterface
protected function createOrUpdate(AddressModel $addressModel, AddressCreateOrUpdateEvent $event)
{
$addressModel->setDispatcher($this->getDispatcher());
$addressModel->setDispatcher($event->getDispatcher());
$con = Propel::getWriteConnection(AddressTableMap::DATABASE_NAME);
$con->beginTransaction();
try {

View File

@@ -30,7 +30,7 @@ use Thelia\Core\Event\TheliaEvents;
use Thelia\Model\Admin as AdminModel;
use Thelia\Model\AdminQuery;
class Administrator extends BaseAction implements EventSubscriberInterface
class Administrator implements EventSubscriberInterface
{
/**
* @param AdministratorEvent $event
@@ -40,12 +40,13 @@ class Administrator extends BaseAction implements EventSubscriberInterface
$administrator = new AdminModel();
$administrator
->setDispatcher($this->getDispatcher())
->setDispatcher($event->getDispatcher())
->setFirstname($event->getFirstname())
->setLastname($event->getLastname())
->setLogin($event->getLogin())
->setPassword($event->getPassword())
->setProfileId($event->getProfile())
->setLocale($event->getLocale())
;
$administrator->save();
@@ -61,11 +62,12 @@ class Administrator extends BaseAction implements EventSubscriberInterface
if (null !== $administrator = AdminQuery::create()->findPk($event->getId())) {
$administrator
->setDispatcher($this->getDispatcher())
->setDispatcher($event->getDispatcher())
->setFirstname($event->getFirstname())
->setLastname($event->getLastname())
->setLogin($event->getLogin())
->setProfileId($event->getProfile())
->setLocale($event->getLocale())
;
if ('' !== $event->getPassword()) {

View File

@@ -23,15 +23,12 @@
namespace Thelia\Action;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Model\ConfigQuery;
use Thelia\Model\Config as ConfigModel;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\Config\ConfigUpdateEvent;
use Thelia\Core\Event\Config\ConfigCreateEvent;
use Thelia\Core\Event\Config\ConfigDeleteEvent;
use Thelia\Core\Event\Config\ConfigUpdateEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Model\Config as ConfigModel;
use Thelia\Model\ConfigQuery;
class Config extends BaseAction implements EventSubscriberInterface
{
@@ -44,9 +41,14 @@ class Config extends BaseAction implements EventSubscriberInterface
{
$config = new ConfigModel();
$config->setDispatcher($this->getDispatcher())->setName($event->getEventName())->setValue($event->getValue())
->setLocale($event->getLocale())->setTitle($event->getTitle())->setHidden($event->getHidden())
->setSecured($event->getSecured())->save();
$config->setDispatcher($this->getDispatcher())
->setName($event->getEventName())
->setValue($event->getValue())
->setLocale($event->getLocale())
->setTitle($event->getTitle())
->setHidden($event->getHidden())
->setSecured($event->getSecured())
->save();
$event->setConfig($config);
}
@@ -59,7 +61,7 @@ class Config extends BaseAction implements EventSubscriberInterface
public function setValue(ConfigUpdateEvent $event)
{
if (null !== $config = $search->findPk($event->getConfigId())) {
if (null !== $config = ConfigQuery::create()->findPk($event->getConfigId())) {
if ($event->getValue() !== $config->getValue()) {
@@ -80,10 +82,17 @@ class Config extends BaseAction implements EventSubscriberInterface
if (null !== $config = ConfigQuery::create()->findPk($event->getConfigId())) {
$config->setDispatcher($this->getDispatcher())->setName($event->getEventName())->setValue($event->getValue())
->setHidden($event->getHidden())->setSecured($event->getSecured())->setLocale($event->getLocale())
->setTitle($event->getTitle())->setDescription($event->getDescription())->setChapo($event->getChapo())
->setPostscriptum($event->getPostscriptum())->save();
$config->setDispatcher($this->getDispatcher())
->setName($event->getEventName())
->setValue($event->getValue())
->setHidden($event->getHidden())
->setSecured($event->getSecured())
->setLocale($event->getLocale())
->setTitle($event->getTitle())
->setDescription($event->getDescription())
->setChapo($event->getChapo())
->setPostscriptum($event->getPostscriptum())
->save();
$event->setConfig($config);
}

View File

@@ -28,6 +28,7 @@ use Thelia\Core\Event\ActionEvent;
use Thelia\Core\Event\Customer\CustomerCreateOrUpdateEvent;
use Thelia\Core\Event\Customer\CustomerEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Security\SecurityContext;
use Thelia\Model\Customer as CustomerModel;
use Thelia\Core\Event\Customer\CustomerLoginEvent;
@@ -39,8 +40,14 @@ use Thelia\Core\Event\Customer\CustomerLoginEvent;
* @package Thelia\Action
* @author Manuel Raynaud <mraynaud@openstudio.fr>
*/
class Customer extends BaseAction implements EventSubscriberInterface
class Customer implements EventSubscriberInterface
{
protected $securityContext;
public function __construct(SecurityContext $securityContext)
{
$this->securityContext = $securityContext;
}
public function create(CustomerCreateOrUpdateEvent $event)
{
@@ -65,7 +72,7 @@ class Customer extends BaseAction implements EventSubscriberInterface
$customer = $event->getCustomer();
$customer->setDispatcher($this->getDispatcher());
$customer->setDispatcher($event->getDispatcher());
$customer
->setTitleId($event->getTitle())
@@ -91,7 +98,7 @@ class Customer extends BaseAction implements EventSubscriberInterface
private function createOrUpdateCustomer(CustomerModel $customer, CustomerCreateOrUpdateEvent $event)
{
$customer->setDispatcher($this->getDispatcher());
$customer->setDispatcher($event->getDispatcher());
$customer->createOrUpdate(
$event->getTitle(),
@@ -140,7 +147,7 @@ class Customer extends BaseAction implements EventSubscriberInterface
*/
protected function getSecurityContext()
{
return $this->container->get('thelia.securityContext');
return $this->securityContext;
}
/**

View File

@@ -23,33 +23,30 @@
namespace Thelia\Action;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Cart\CartTrait;
use Thelia\Core\Event\Cart\CartEvent;
use Thelia\Core\Event\Order\OrderAddressEvent;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\Order\OrderManualEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Exception\TheliaProcessException;
use Thelia\Model\AddressQuery;
use Thelia\Model\Cart as CartModel;
use Thelia\Model\ConfigQuery;
use Thelia\Model\MessageQuery;
use Thelia\Model\OrderProductAttributeCombination;
use Thelia\Model\ModuleQuery;
use Thelia\Model\OrderProduct;
use Thelia\Model\OrderStatus;
use Thelia\Model\Currency;
use Thelia\Model\Customer;
use Thelia\Model\Lang;
use Thelia\Model\Map\OrderTableMap;
use Thelia\Model\MessageQuery;
use Thelia\Model\ModuleQuery;
use Thelia\Model\Order as ModelOrder;
use Thelia\Model\OrderAddress;
use Thelia\Model\OrderProduct;
use Thelia\Model\OrderProductAttributeCombination;
use Thelia\Model\OrderStatus;
use Thelia\Model\OrderStatusQuery;
use Thelia\Tools\I18n;
use Thelia\Model\Currency;
use Thelia\Model\Lang;
use Thelia\Model\Country;
use Thelia\Model\Customer;
use Thelia\Core\Event\Order\OrderManualEvent;
use Thelia\Model\Cart as CartModel;
use Thelia\Model\Order as ModelOrder;
/**
*
@@ -129,7 +126,7 @@ class Order extends BaseAction implements EventSubscriberInterface
$con->beginTransaction();
/* use a copy to avoid errored reccord in session */
/* use a copy to avoid errored record in session */
$placedOrder = $sessionOrder->copy();
$placedOrder->setDispatcher($this->getDispatcher());
@@ -307,9 +304,7 @@ class Order extends BaseAction implements EventSubscriberInterface
$this->getSecurityContext()->getCustomerUser()
);
$this->getDispatcher()->dispatch(TheliaEvents::ORDER_BEFORE_PAYMENT, new OrderEvent($placedOrder));
$event->getDispatcher()->dispatch(TheliaEvents::ORDER_BEFORE_PAYMENT, new OrderEvent($placedOrder));
/* clear session */
$session
@@ -322,7 +317,7 @@ class Order extends BaseAction implements EventSubscriberInterface
$event->setPlacedOrder($placedOrder);
/* empty cart */
$this->getDispatcher()->dispatch(TheliaEvents::CART_CLEAR, new CartEvent($this->getCart($this->getRequest())));
$event->getDispatcher()->dispatch(TheliaEvents::CART_CLEAR, new CartEvent($this->getCart($this->getRequest())));
/* call pay method */

View File

@@ -62,6 +62,13 @@ class CreateAdminUser extends ContainerAwareCommand
'User last name',
null
)
->addOption(
"locale",
null,
InputOption::VALUE_OPTIONAL,
'Preferred locale (default: en_US)',
null
)
->addOption(
'password',
null,
@@ -122,6 +129,7 @@ class CreateAdminUser extends ContainerAwareCommand
$admin->setLogin($input->getOption("login_name") ?: $this->enterData($dialog, $output, "Admin login name : ", "Please enter a login name."));
$admin->setFirstname($input->getOption("first_name") ?: $this->enterData($dialog, $output, "User first name : ", "Please enter user first name."));
$admin->setLastname($input->getOption("last_name") ?: $this->enterData($dialog, $output, "User last name : ", "Please enter user last name."));
$admin->setLocale($input->getOption("locale") ?: 'en_US');
do {
$password = $input->getOption("password") ?: $this->enterData($dialog, $output, "Password : ", "Please enter a password.", true);

View File

@@ -227,6 +227,7 @@ class Install extends ContainerAwareCommand
$connectionInfo["username"],
$connectionInfo["password"]
);
$connection->query('SET NAMES \'UTF8\'');
} catch (\PDOException $e) {
$output->writeln(array(
"<error>Wrong connection information</error>"

View File

@@ -106,7 +106,6 @@ class ModuleGenerateCommand extends BaseModuleGenerate
$schemaContent = file_get_contents($skeletonDir . "schema.xml");
$schemaContent = str_replace("%%CONFIG_DIR%%", THELIA_CONF_DIR, $schemaContent);
$schemaContent = str_replace("%%NAMESPACE%%", $this->module, $schemaContent);
file_put_contents($this->moduleDirectory . DIRECTORY_SEPARATOR . "Config". DIRECTORY_SEPARATOR . "schema.xml", $schemaContent);

View File

@@ -3,5 +3,5 @@
<!--
See propel documentation on http://propelorm.org for all information about schema file
-->
<external-schema filename="%%CONFIG_DIR%%schema.xml" referenceOnly="true" />
<external-schema filename="local/config/schema.xml" referenceOnly="true" />
</database>

205
core/lib/Thelia/Config/I18n/en_US.php Normal file → Executable file
View File

@@ -1,14 +1,201 @@
<?php
return array(
'Delivery module' => 'Delivery module',
'Quantity' => 'Quantity',
'Product' => 'Product',
'Unit. price' => 'Unit. price',
'Tax' => 'Tax',
'Unit taxed price' => 'Unit taxed price',
'Taxed total' => 'Taxed total',
'Payment module' => 'Payment module',
'%obj SEO modification' => '%obj SEO modification',
'%obj creation' => '%obj creation',
'%obj modification' => '%obj modification',
'A currency with code "%name" already exists.' => 'A currency with code "%name" already exists.',
'A message with name "%name" already exists.' => 'A message with name "%name" already exists.',
'A variable with name "%name" already exists.' => 'A variable with name "%name" already exists.',
'Activate logs only for these IP Addresses' => 'Activate logs only for these IP Addresses',
'Activate logs only for these files' => 'Activate logs only for these files',
'Add to all product templates' => 'Add to all product templates',
'Additional address' => 'Additional address',
'Address Line 2' => 'Address Line 2',
'Address Line 3' => 'Address Line 3',
'Address label' => 'Address label',
'Advertise this product as new' => 'Advertise this product as new',
'Alerts' => 'Alerts',
'Alpha code 2 *' => 'Alpha code 2 *',
'Alpha code 3 *' => 'Alpha code 3 *',
'Amount removed from the cart' => 'Amount removed from the cart',
'Apply exchange rates on price in %sym' => 'Apply exchange rates on price in %sym',
'Area' => 'Area',
'Attribute ID:Attribute AV ID' => 'Attribute ID:Attribute AV ID',
'Auth mode' => 'Auth mode',
'Available quantity' => 'Available quantity',
'Available quantity *' => 'Available quantity *',
'Business ID' => 'Business ID',
'Cannot find a default country. Please define one.' => 'Cannot find a default country. Please define one.',
'Cannot find the shop country. Please select a shop country.' => 'Cannot find the shop country. Please select a shop country.',
'Category title *' => 'Category title *',
'Cellphone' => 'Cellphone',
'Chapo' => 'Chapo',
'City' => 'City',
'Combination builder' => 'Combination builder',
'Compagny' => 'Compagny',
'Company' => 'Company',
'Company Name' => 'Company Name',
'Conclusion' => 'Conclusion',
'Constant amount' => 'Constant amount',
'Constant amount found in one of the product\'s feature' => 'Constant amount found in one of the product\'s feature',
'Content title *' => 'Content title *',
'Country' => 'Country',
'Country area' => 'Country area',
'Country title *' => 'Country title *',
'Critical' => 'Critical',
'Current Password' => 'Current Password',
'Debug' => 'Debug',
'Default folder *' => 'Default folder *',
'Default product category *' => 'Default product category *',
'Default product sale element' => 'Default product sale element',
'Description' => 'Description',
'Detailed description' => 'Detailed description',
'Disabled' => 'Disabled',
'EAN Code' => 'EAN Code',
'Email Address' => 'Email Address',
'Email address' => 'Email address',
'Emergency' => 'Emergency',
'Enable remote SMTP use' => 'Enable remote SMTP use',
'Encryption' => 'Encryption',
'Errors' => 'Errors',
'Failed to update language definition: %ex' => 'Failed to update language definition: %ex',
'Fax' => 'Fax',
'Feature value does not match FLOAT format' => 'Feature value does not match FLOAT format',
'First Name' => 'First Name',
'Firstname' => 'Firstname',
'Folder title *' => 'Folder title *',
'Full Name' => 'Full Name',
'HTML Message' => 'HTML Message',
'Host' => 'Host',
'I would like to receive the newsletter or the latest news.' => 'I would like to receive the newsletter or the latest news.',
'ISO 4217 code *' => 'ISO 4217 code *',
'ISO 639-1 Code' => 'ISO 639-1 Code',
'ISO Code *' => 'ISO Code *',
'If a translation is missing or incomplete :' => 'If a translation is missing or incomplete :',
'Information' => 'Information',
'Invalid product_sale_elements' => 'Invalid product_sale_elements',
'Invalid value for walkMode parameter: %value' => 'Invalid value for walkMode parameter: %value',
'Is it the default product sale element ?' => 'Is it the default product sale element ?',
'Language name' => 'Language name',
'Last Name' => 'Last Name',
'Lastname' => 'Lastname',
'Log format *' => 'Log format *',
'Log level *' => 'Log level *',
'Login' => 'Login',
'Login failed. Please check your username and password.' => 'Login failed. Please check your username and password.',
'Make this address as my primary address' => 'Make this address as my primary address',
'Message subject' => 'Message subject',
'Meta Description' => 'Meta Description',
'Meta Keywords' => 'Meta Keywords',
'Name' => 'Name',
'Name *' => 'Name *',
'Name of the HTML layout file' => 'Name of the HTML layout file',
'Name of the HTML template file' => 'Name of the HTML template file',
'Name of the text layout file' => 'Name of the text layout file',
'Name of the text template file' => 'Name of the text template file',
'New Password' => 'New Password',
'No %obj was created.' => 'No %obj was created.',
'No %obj was updated.' => 'No %obj was updated.',
'No, I am a new customer.' => 'No, I am a new customer.',
'Notices' => 'Notices',
'Page Title' => 'Page Title',
'Parent category *' => 'Parent category *',
'Parent folder *' => 'Parent folder *',
'Password' => 'Password',
'Password *' => 'Password *',
'Password confirmation' => 'Password confirmation',
'Percentage of the product price' => 'Percentage of the product price',
'Percentage removed from the cart' => 'Percentage removed from the cart',
'Phone' => 'Phone',
'Please enter your email address' => 'Please enter your email address',
'Please enter your password' => 'Please enter your password',
'Please specify either \'path\' or \'file\' parameter in {url} function.' => 'Please specify either \'path\' or \'file\' parameter in {url} function.',
'Port' => 'Port',
'Post Scriptum' => 'Post Scriptum',
'Postage' => 'Postage',
'Total' => 'Total',
'Preferred locale' => 'Preferred locale',
'Prevent mailing template modification or deletion, except for super-admin' => 'Prevent mailing template modification or deletion, except for super-admin',
'Prevent variable modification or deletion, except for super-admin' => 'Prevent variable modification or deletion, except for super-admin',
'Price' => 'Price',
'Price currency *' => 'Price currency *',
'Prodcut ID *' => 'Prodcut ID *',
'Product ID' => 'Product ID',
'Product ID *' => 'Product ID *',
'Product base price excluding taxes *' => 'Product base price excluding taxes *',
'Product price excluding taxes' => 'Product price excluding taxes',
'Product price excluding taxes *' => 'Product price excluding taxes *',
'Product price including taxes' => 'Product price including taxes',
'Product reference *' => 'Product reference *',
'Product sale element ID *' => 'Product sale element ID *',
'Product template' => 'Product template',
'Product title *' => 'Product title *',
'ProductSaleElement modification' => 'ProductSaleElement modification',
'Profile' => 'Profile',
'Profile Code' => 'Profile Code',
'Purpose *' => 'Purpose *',
'Quantity' => 'Quantity',
'Rate from &euro; *' => 'Rate from &euro; *',
'Redirecting ...' => 'Redirecting ...',
'Redirecting to %url' => 'Redirecting to %url',
'Reference' => 'Reference',
'Reference *' => 'Reference *',
'Remember me ?' => 'Remember me ?',
'Remove X amount to total cart' => 'Remove X amount to total cart',
'Remove X percent to total cart' => 'Remove X percent to total cart',
'Replace by the default language' => 'Replace by the default language',
'Replace current document by this file' => 'Replace current document by this file',
'Replace current image by this file' => 'Replace current image by this file',
'Rewriten URL' => 'Rewriten URL',
'Rotated Text File' => 'Rotated Text File',
'Sale price excluding taxes' => 'Sale price excluding taxes',
'Sale price including taxes' => 'Sale price including taxes',
'Show redirections *' => 'Show redirections *',
'Sorry, an error occured: %msg' => 'Sorry, an error occured: %msg',
'Sorry, you are not allowed to perform this action.' => 'Sorry, you are not allowed to perform this action.',
'Sorry, you\'re not allowed to perform this action' => 'Sorry, you\'re not allowed to perform this action',
'Source IP' => 'Source IP',
'Store configuration failed.' => 'Store configuration failed.',
'Store email address' => 'Store email address',
'Store logs into text file' => 'Store logs into text file',
'Store logs into text file, up to a certian size, then a new file is created' => 'Store logs into text file, up to a certian size, then a new file is created',
'Store name' => 'Store name',
'Street Address' => 'Street Address',
'Street Address ' => 'Street Address ',
'Strictly use the requested language' => 'Strictly use the requested language',
'Subject' => 'Subject',
'Summary' => 'Summary',
'Symbol *' => 'Symbol *',
'System log configuration failed.' => 'System log configuration failed.',
'Tax rule for this product *' => 'Tax rule for this product *',
'Template Name *' => 'Template Name *',
'Template file %file cannot be found.' => 'Template file %file cannot be found.',
'Text File' => 'Text File',
'Text Message' => 'Text Message',
'This category is online.' => 'This category is online.',
'This content is online.' => 'This content is online.',
'This extension must be installed and loaded' => 'This extension must be installed and loaded',
'This folder is online.' => 'This folder is online.',
'This product is on sale' => 'This product is on sale',
'This product is online' => 'This product is online',
'Timeout' => 'Timeout',
'Title' => 'Title',
'Title *' => 'Title *',
'Type' => 'Type',
'Username' => 'Username',
'Username *' => 'Username *',
'Value' => 'Value',
'Value *' => 'Value *',
'Warnings' => 'Warnings',
'Weight' => 'Weight',
'Weight *' => 'Weight *',
'Yes, I have a password :' => 'Yes, I have a password :',
'Your Email Address' => 'Your Email Address',
'Your Message' => 'Your Message',
'Zip code' => 'Zip code',
'date format' => 'date format',
'language locale' => 'language locale',
'mailing system modification' => 'mailing system modification',
'shipping area name' => 'shipping area name',
'time format' => 'time format',
);

42
core/lib/Thelia/Config/I18n/es_ES.php Normal file → Executable file
View File

@@ -1,36 +1,14 @@
<?php
return array(
'Combination builder' => 'Combination builder',
'Title' => 'Title',
'City' => 'City',
'Zip code' => 'Zip code',
'Country' => 'Country',
'Phone' => 'Phone',
'Login' => 'Login',
'Password' => 'Password',
'Profile' => 'Profile',
'Postage' => 'Postage',
'Add to all product templates' => 'Add to all product templates',
'Quantity' => 'Quantity',
'Name' => 'Name',
'Value' => 'Value',
'Subject' => 'Subject',
'Company' => 'Company',
'Description' => 'Description',
'Language name' => 'Language name',
'ISO 639 Code' => 'ISO 639 Code',
'If a translation is missing or incomplete :' => 'If a translation is missing or incomplete :',
'Host' => 'Host',
'Port' => 'Port',
'Encryption' => 'Encryption',
'Username' => 'Username',
'Timeout' => 'Timeout',
'Source IP' => 'Source IP',
'Email address' => 'Email address',
'Firstname' => 'Firstname',
'Lastname' => 'Lastname',
'Additional address' => 'Additional address',
'Reference' => 'Reference',
'EAN Code' => 'EAN Code',
'Delivery module' => 'Módulo de entrega',
'Quantity' => 'Cantidad',
'Product' => 'Producto',
'Unit. price' => 'Precio unitario',
'Tax' => 'Impuestos',
'Unit taxed price' => 'Precio unitario IVA incluido',
'Taxed total' => 'Total + IVA',
'Payment module' => 'Módulo de pago',
'Postage' => 'Gastos de envío',
'Total' => 'Total',
);

28
core/lib/Thelia/Config/I18n/fr_FR.php Normal file → Executable file
View File

@@ -19,7 +19,9 @@ return array(
'Alpha code 2 *' => 'Code Alpha 2 *',
'Alpha code 3 *' => 'Code Alpha 3 *',
'Amount removed from the cart' => 'Montant déduit du panier',
'Apply exchange rates on price in %sym' => 'Appliquer le taux de change sur le prix en %sym',
'Area' => 'Zone',
'Attribute ID:Attribute AV ID' => 'Déclinaison ID : Valeur de déclinaison ID',
'Auth mode' => 'Mode d\'authentification',
'Available quantity' => 'Quantité disponible',
'Available quantity *' => 'Quantité disponible *',
@@ -30,11 +32,13 @@ return array(
'Cellphone' => 'Numéro de portable',
'Chapo' => 'Chapeau',
'City' => 'Ville',
'Combination builder' => 'Constructeur de combinaison',
'Combination builder' => 'générateur de combinaison',
'Compagny' => 'Société',
'Company' => 'Entreprise',
'Company Name' => 'Nom de la société',
'Conclusion' => 'Conclusion',
'Constant amount' => 'Montant fixe',
'Constant amount found in one of the product\'s feature' => 'Montant fixe trouvé depuis une caractéristique produit',
'Content title *' => 'Titre du contenu *',
'Country' => 'Pays',
'Country area' => 'Zone du pays',
@@ -44,6 +48,7 @@ return array(
'Debug' => 'Debug',
'Default folder *' => 'Dossier par défaut *',
'Default product category *' => 'Catégorie du produit par défaut *',
'Default product sale element' => 'Product Sale Element par défaut',
'Description' => 'Description',
'Detailed description' => 'Description détaillée',
'Disabled' => 'Désactivé',
@@ -54,21 +59,24 @@ return array(
'Enable remote SMTP use' => 'Activer l\'utilisation d\'un serveur SMTP distant.',
'Encryption' => 'Chiffrement',
'Errors' => 'Erreurs',
'Failed to update language definition: %ex' => 'Erreur lors de la mise à jour de la définition de la langue : %ex',
'Fax' => 'Fax',
'Feature value does not match FLOAT format' => 'valeur de caractéristique n\'est pas un FLOAT',
'First Name' => 'Prénom',
'Firstname' => 'Prénom',
'Folder title *' => 'Titre du dossier *',
'Full Name' => 'Nom complet',
'HTML Message' => 'Message au format HTML',
'Host' => 'Host',
'Host' => 'Nom de l\'hôte',
'I would like to receive the newsletter or the latest news.' => 'Je souhaite recevoir la lettre d\'information ou les dernières actualités.',
'ISO 4217 code *' => 'Code ISO 4217 *',
'ISO 639 Code' => 'Code ISO 639',
'ISO 639-1 Code' => 'Code ISO 639-1',
'ISO Code *' => 'Code ISO *',
'If a translation is missing or incomplete :' => 'Si une traduction est manquante ou incomplète:',
'If a translation is missing or incomplete :' => 'Si une traduction est manquante ou incomplète :',
'Information' => 'Information',
'Invalid product_sale_elements' => 'product_sale_elements invalide',
'Invalid value for walkMode parameter: %value' => 'Valeur incorrecte pour le paramètre walkMode : %value',
'Is it the default product sale element ?' => 'Product Sale Element par défaut ?',
'Language name' => 'Nom de la langue',
'Last Name' => 'Nom',
'Lastname' => 'Nom',
@@ -97,6 +105,7 @@ return array(
'Password' => 'Mot de passe',
'Password *' => 'Mot de passe *',
'Password confirmation' => 'Confirmation du mot de passe.',
'Percentage of the product price' => 'Pourcentage du prix du produit',
'Percentage removed from the cart' => 'Pourcentage déduit du panier',
'Phone' => 'Téléphone',
'Please enter your email address' => 'Renseignez votre adresse mail',
@@ -105,6 +114,7 @@ return array(
'Port' => 'Port',
'Post Scriptum' => 'Post-scriptum',
'Postage' => 'Frais de livraison',
'Preferred locale' => 'locale souhaitée',
'Prevent mailing template modification or deletion, except for super-admin' => 'Prévenir la suppression ou la modification ds templates de mail, excepté pour les super-administrateurs.',
'Prevent variable modification or deletion, except for super-admin' => 'Prévenir la suppression ou la modification de variables, excepté pour les super-administrateurs.',
'Price' => 'Prix',
@@ -114,18 +124,20 @@ return array(
'Product ID *' => 'ID produit *',
'Product base price excluding taxes *' => 'Prix du produit Hors Taxe *',
'Product price excluding taxes' => 'Prix du produit Hors Taxes',
'Product price excluding taxes *' => 'prix HT',
'Product price including taxes' => 'Prix du produit taxes incluses',
'Product reference *' => 'Référence du produit *',
'Product sale element ID *' => 'Product sale element ID *',
'Product template' => 'Template du produit',
'Product title *' => 'Titre du produit *',
'ProductSaleElement modification' => 'Modification de ProductSaleElement.',
'Profile' => 'Profil',
'Profile Code' => 'Profil',
'Quantity' => 'Quantité',
'Purpose *' => 'Objet',
'Rate from &euro; *' => 'Taux à partie de l\'&euro; *',
'Redirecting ...' => 'Redirection ...',
'Redirecting to %url' => 'Redirection vers %url',
'Reference' => 'Reference',
'Reference' => 'Référence',
'Reference *' => 'Référence *',
'Remember me ?' => 'Se souvenir de moi ?',
'Remove X amount to total cart' => 'Enlève un montant fixe du total du panier',
@@ -134,6 +146,7 @@ return array(
'Replace current document by this file' => 'Remplacer le document courant par ce fichier',
'Replace current image by this file' => 'Remplacer l\'image courante par ce fichier',
'Rewriten URL' => 'URL re-écrite',
'Rotated Text File' => 'Rotation du fichier texte',
'Sale price excluding taxes' => 'Prix de vente Hors Taxes',
'Sale price including taxes' => 'Prix de vente Toutes Taxes Comprises',
'Show redirections *' => 'Montrer les redirections *',
@@ -144,6 +157,7 @@ return array(
'Store configuration failed.' => 'Erreur de configuration du magasin.',
'Store email address' => 'Adresse mail du magasin',
'Store logs into text file' => 'Conserver les logs dans des fichiers texte',
'Store logs into text file, up to a certian size, then a new file is created' => 'Sauvegarder les logs dans un fichier texte. A partir d\'une certaine taille un nouveau fichier est crée',
'Store name' => 'Nom du magasin',
'Street Address' => 'Adresse',
'Street Address ' => 'Rue',
@@ -163,7 +177,7 @@ return array(
'This folder is online.' => 'Ce dossier est en ligne.',
'This product is on sale' => 'Ce produit est en promo',
'This product is online' => 'Ce produit est en ligne',
'Timeout' => 'Timeout',
'Timeout' => 'Délai d\'attente expiré',
'Title' => 'Titre',
'Title *' => 'Titre *',
'Type' => 'Type',

0
core/lib/Thelia/Config/I18n/it_IT.php Normal file → Executable file
View File

View File

@@ -16,13 +16,12 @@
<tag name="kernel.event_subscriber"/>
</service>
<service id="thelia.action.customer" class="Thelia\Action\Customer">
<argument type="service" id="service_container"/>
<service id="thelia.action.customer" class="Thelia\Action\Customer" scope="request">
<argument type="service" id="thelia.securityContext"/>
<tag name="kernel.event_subscriber"/>
</service>
<service id="thelia.action.address" class="Thelia\Action\Address">
<argument type="service" id="service_container"/>
<tag name="kernel.event_subscriber"/>
</service>
@@ -156,7 +155,6 @@
</service>
<service id="thelia.action.administrator" class="Thelia\Action\Administrator">
<argument type="service" id="service_container"/>
<tag name="kernel.event_subscriber"/>
</service>

View File

@@ -66,6 +66,7 @@ class AdministratorController extends AbstractCrudController
$event->setLastname($formData['lastname']);
$event->setPassword($formData['password']);
$event->setProfile($formData['profile'] ? : null);
$event->setLocale($formData['locale']);
return $event;
}
@@ -80,6 +81,7 @@ class AdministratorController extends AbstractCrudController
$event->setLastname($formData['lastname']);
$event->setPassword($formData['password']);
$event->setProfile($formData['profile'] ? : null);
$event->setLocale($formData['locale']);
return $event;
}
@@ -108,6 +110,7 @@ class AdministratorController extends AbstractCrudController
'lastname' => $object->getLastname(),
'login' => $object->getLogin(),
'profile' => $object->getProfileId(),
'locale' => $object->getLocale()
);
// Setup the object form

View File

@@ -38,6 +38,7 @@ use Thelia\Form\Lang\LangDefaultBehaviorForm;
use Thelia\Form\Lang\LangUpdateForm;
use Thelia\Form\Lang\LangUrlEvent;
use Thelia\Form\Lang\LangUrlForm;
use Thelia\Log\Tlog;
use Thelia\Model\ConfigQuery;
use Thelia\Model\LangQuery;
@@ -118,11 +119,12 @@ class LangController extends BaseAdminController
$changedObject = $event->getLang();
$this->adminLogAppend(AdminResources::LANGUAGE, AccessManager::UPDATE, sprintf("%s %s (ID %s) modified", 'Lang', $changedObject->getTitle(), $changedObject->getId()));
$this->redirectToRoute('admin.configuration.languages');
} catch (\Exception $e) {
$error_msg = $e->getMessage();
} catch (\Exception $ex) {
$error_msg = $this->getTranslator()->trans("Failed to update language definition: %ex", array("%ex" => $ex->getMessage()));
Tlog::getInstance()->addError("Failed to update language definition", $ex->getMessage());
}
return $this->renderDefault();
return $this->renderDefault(array('error_message' => $error_msg));
}
protected function hydrateEvent($event,Form $form)
@@ -156,7 +158,7 @@ class LangController extends BaseAdminController
$this->adminLogAppend(AdminResources::LANGUAGE, AccessManager::UPDATE, sprintf("%s %s (ID %s) modified", 'Lang', $changedObject->getTitle(), $changedObject->getId()));
} catch (\Exception $e) {
\Thelia\Log\Tlog::getInstance()->error(sprintf("Error on changing default languages with message : %s", $e->getMessage()));
Tlog::getInstance()->error(sprintf("Error on changing default languages with message : %s", $e->getMessage()));
$error = $e->getMessage();
}
@@ -223,12 +225,12 @@ class LangController extends BaseAdminController
$this->redirectToRoute('admin.configuration.languages');
} catch (\Exception $ex) {
\Thelia\Log\Tlog::getInstance()->error(sprintf("error during language removal with message : %s", $ex->getMessage()));
Tlog::getInstance()->error(sprintf("error during language removal with message : %s", $ex->getMessage()));
$error_msg = $ex->getMessage();
}
return $this->renderDefault(array(
'error_delete_message' => $error_msg
'error_message' => $error_msg
));
}

View File

@@ -46,7 +46,11 @@ class OrderController extends BaseAdminController
public function indexAction()
{
if (null !== $response = $this->checkAuth(AdminResources::ORDER, array(), AccessManager::VIEW)) return $response;
return $this->render("orders", array("display_order" => 20));
return $this->render("orders", array(
"display_order" => 20,
"orders_order" => $this->getListOrderFromSession("orders", "orders_order", "create-date-reverse")
));
}
public function viewAction($order_id)

View File

@@ -26,8 +26,11 @@ namespace Thelia\Controller\Admin;
use Thelia\Form\AdminLogin;
use Thelia\Core\Security\Authentication\AdminUsernamePasswordFormAuthenticator;
use Thelia\Form\Exception\FormValidationException;
use Thelia\Model\Admin;
use Thelia\Model\AdminLog;
use Thelia\Core\Security\Exception\AuthenticationException;
use Thelia\Model\Lang;
use Thelia\Model\LangQuery;
use Thelia\Tools\URL;
use Thelia\Tools\Redirect;
use Thelia\Core\Event\TheliaEvents;
@@ -56,8 +59,11 @@ class SessionController extends BaseAdminController
// Update the cookie
$this->createAdminRememberMeCookie($user);
$this->applyUserLocale($user);
// Render the home page
return $this->render("home");
} catch (TokenAuthenticationException $ex) {
$this->adminLogAppend("admin", "LOGIN", "Token based authentication failed.");
@@ -69,6 +75,18 @@ class SessionController extends BaseAdminController
return $this->render("login");
}
protected function applyUserLocale(Admin $user) {
// Set the current language according to Admin locale preference
$locale = $user->getLocale();
if (null === $lang = LangQuery::create()->findOneByLocale($locale)) {
$lang = Lang::getDefaultLanguage();
}
$this->getSession()->setLang($lang);
}
public function checkLogoutAction()
{
$this->dispatch(TheliaEvents::ADMIN_LOGOUT);
@@ -102,6 +120,8 @@ class SessionController extends BaseAdminController
// Log authentication success
AdminLog::append("admin", "LOGIN", "Authentication successful", $request, $user, false);
$this->applyUserLocale($user);
/**
* FIXME: we have tou find a way to send cookie
*/

View File

@@ -35,6 +35,7 @@ class AdministratorEvent extends ActionEvent
protected $login = null;
protected $password = null;
protected $profile = null;
protected $locale = null;
public function __construct(Admin $administrator = null)
{
@@ -61,6 +62,8 @@ class AdministratorEvent extends ActionEvent
public function setId($id)
{
$this->id = $id;
return $this;
}
public function getId()
@@ -71,6 +74,8 @@ class AdministratorEvent extends ActionEvent
public function setFirstname($firstname)
{
$this->firstname = $firstname;
return $this;
}
public function getFirstname()
@@ -81,6 +86,8 @@ class AdministratorEvent extends ActionEvent
public function setLastname($lastname)
{
$this->lastname = $lastname;
return $this;
}
public function getLastname()
@@ -91,6 +98,8 @@ class AdministratorEvent extends ActionEvent
public function setLogin($login)
{
$this->login = $login;
return $this;
}
public function getLogin()
@@ -101,6 +110,8 @@ class AdministratorEvent extends ActionEvent
public function setPassword($password)
{
$this->password = $password;
return $this;
}
public function getPassword()
@@ -111,10 +122,23 @@ class AdministratorEvent extends ActionEvent
public function setProfile($profile)
{
$this->profile = $profile;
return $this;
}
public function getProfile()
{
return $this->profile;
}
public function setLocale($locale)
{
$this->locale = $locale;
return $this;
}
public function getLocale()
{
return $this->locale;
}
}

View File

@@ -54,6 +54,8 @@ class AdministratorUpdatePasswordEvent extends ActionEvent
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
@@ -70,6 +72,8 @@ class AdministratorUpdatePasswordEvent extends ActionEvent
public function setAdmin(Admin $admin)
{
$this->admin = $admin;
return $this;
}
/**

View File

@@ -48,6 +48,7 @@ class CartEvent extends ActionEvent
public function setAppend($append)
{
$this->append = $append;
return $this;
}
/**
@@ -64,6 +65,7 @@ class CartEvent extends ActionEvent
public function setCartItem($cartItem)
{
$this->cartItem = $cartItem;
return $this;
}
/**
@@ -80,6 +82,7 @@ class CartEvent extends ActionEvent
public function setNewness($newness)
{
$this->newness = $newness;
return $this;
}
/**
@@ -96,6 +99,7 @@ class CartEvent extends ActionEvent
public function setProduct($product)
{
$this->product = $product;
return $this;
}
/**
@@ -112,6 +116,7 @@ class CartEvent extends ActionEvent
public function setProductSaleElementsId($productSaleElementsId)
{
$this->productSaleElementsId = $productSaleElementsId;
return $this;
}
/**
@@ -128,6 +133,7 @@ class CartEvent extends ActionEvent
public function setQuantity($quantity)
{
$this->quantity = $quantity;
return $this;
}
/**
@@ -145,5 +151,4 @@ class CartEvent extends ActionEvent
{
return $this->cart;
}
}

View File

@@ -0,0 +1,266 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Core\Event\Order;
use Thelia\Model\Order;
use Thelia\Model\Currency;
use Thelia\Model\Lang;
use Thelia\Model\Cart;
use Thelia\Model\Customer;
class OrderManualEvent extends OrderEvent
{
protected $currency = null;
protected $lang = null;
protected $cart = null;
protected $customer = null;
/**
* @param Order $order
*/
public function __construct(Order $order, Currency $currency, Lang $lang, Cart $cart, Customer $customer)
{
$this
->setOrder($order)
->setCurrency($currency)
->setLang($lang)
->setCart($cart)
->setCustomer($customer)
;
}
/**
* @param Order $order
*/
public function setOrder(Order $order)
{
$this->order = $order;
return $this;
}
/**
* @param Order $order
*/
public function setPlacedOrder(Order $order)
{
$this->placedOrder = $order;
return $this;
}
/**
* @param $address
*/
public function setInvoiceAddress($address)
{
$this->invoiceAddress = $address;
return $this;
}
/**
* @param $address
*/
public function setDeliveryAddress($address)
{
$this->deliveryAddress = $address;
return $this;
}
/**
* @param $module
*/
public function setDeliveryModule($module)
{
$this->deliveryModule = $module;
return $this;
}
/**
* @param $module
*/
public function setPaymentModule($module)
{
$this->paymentModule = $module;
return $this;
}
/**
* @param $postage
*/
public function setPostage($postage)
{
$this->postage = $postage;
return $this;
}
/**
* @param $ref
*/
public function setRef($ref)
{
$this->ref = $ref;
return $this;
}
/**
* @param $status
*/
public function setStatus($status)
{
$this->status = $status;
return $this;
}
/**
* @param $deliveryRef
*/
public function setDeliveryRef($deliveryRef)
{
$this->deliveryRef = $deliveryRef;
}
/**
* @return null|Order
*/
public function getOrder()
{
return $this->order;
}
/**
* @return null|Order
*/
public function getPlacedOrder()
{
return $this->placedOrder;
}
/**
* @return null|int
*/
public function getInvoiceAddress()
{
return $this->invoiceAddress;
}
/**
* @return null|int
*/
public function getDeliveryAddress()
{
return $this->deliveryAddress;
}
/**
* @return null|int
*/
public function getDeliveryModule()
{
return $this->deliveryModule;
}
/**
* @return null|int
*/
public function getPaymentModule()
{
return $this->paymentModule;
}
/**
* @return null|int
*/
public function getPostage()
{
return $this->postage;
}
/**
* @return null|int
*/
public function getRef()
{
return $this->ref;
}
/**
* @return null|int
*/
public function getStatus()
{
return $this->status;
}
/**
* @return null|string
*/
public function getDeliveryRef()
{
return $this->deliveryRef;
}
public function getCurrency()
{
return $this->currency;
}
public function setCurrency($currency)
{
$this->currency = $currency;
return $this;
}
public function getLang()
{
return $this->lang;
}
public function setLang($lang)
{
$this->lang = $lang;
return $this;
}
public function getCart()
{
return $this->cart;
}
public function setCart($cart)
{
$this->cart = $cart;
return $this;
}
public function getCustomer()
{
return $this->customer;
}
public function setCustomer($customer)
{
$this->customer = $customer;
return $this;
}
}

View File

@@ -378,6 +378,8 @@ final class TheliaEvents
const ORDER_AFTER_CREATE = "action.order.afterCreate";
const ORDER_BEFORE_PAYMENT = "action.order.beforePayment";
const ORDER_CREATE_MANUAL = "action.order.createManual";
const ORDER_UPDATE_STATUS = "action.order.updateStatus";
const ORDER_UPDATE_DELIVERY_REF = "action.order.updateDeliveryRef";
const ORDER_UPDATE_ADDRESS = "action.order.updateAddress";

View File

@@ -24,14 +24,11 @@
namespace Thelia\Core\Template\Element;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\ActiveQuery\ModelCriteria;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Thelia\Core\Security\SecurityContext;
use Thelia\Core\Template\Element\Exception\LoopException;
use Thelia\Core\Template\Loop\Argument\Argument;
use Propel\Runtime\ActiveQuery\ModelCriteria;
use Thelia\Core\Security\SecurityContext;
use Thelia\Type\AlphaNumStringListType;
use Thelia\Type\EnumListType;
use Thelia\Type\EnumType;
use Thelia\Type\TypeCollection;
@@ -67,6 +64,9 @@ abstract class BaseLoop
protected $timestampable = false;
protected $versionable = false;
private static $cacheLoopResult = array();
private static $cacheCount = array();
/**
* Create a new Loop
*
@@ -335,71 +335,79 @@ abstract class BaseLoop
public function count()
{
$count = 0;
if ($this instanceof PropelSearchLoopInterface) {
$searchModelCriteria = $this->buildModelCriteria();
if (null === $searchModelCriteria) {
$count = 0;
} else {
$count = $searchModelCriteria->count();
}
} elseif ($this instanceof ArraySearchLoopInterface) {
$searchArray = $this->buildArray();
if (null === $searchArray) {
$count = 0;
} else {
$count = count($searchArray);
$hash = $this->args->getHash();
if(false === isset(self::$cacheCount[$hash]))
{
$count = 0;
if ($this instanceof PropelSearchLoopInterface) {
$searchModelCriteria = $this->buildModelCriteria();
if (null === $searchModelCriteria) {
$count = 0;
} else {
$count = $searchModelCriteria->count();
}
} elseif ($this instanceof ArraySearchLoopInterface) {
$searchArray = $this->buildArray();
if (null === $searchArray) {
$count = 0;
} else {
$count = count($searchArray);
}
}
self::$cacheCount[$hash] = $count;
}
return $count;
return self::$cacheCount[$hash];
}
/**
* @param $pagination
* @return LoopResult
*/
public function exec(&$pagination, $count = false)
public function exec(&$pagination)
{
if ($this instanceof PropelSearchLoopInterface) {
$searchModelCriteria = $this->buildModelCriteria();
if (null === $searchModelCriteria) {
$results = array();
} else {
$results = $this->search(
$searchModelCriteria,
$pagination
);
$hash = $this->args->getHash();
if(false === isset(self::$cacheLoopResult[$hash]))
{
if ($this instanceof PropelSearchLoopInterface) {
$searchModelCriteria = $this->buildModelCriteria();
if (null === $searchModelCriteria) {
$results = array();
} else {
$results = $this->search(
$searchModelCriteria,
$pagination
);
}
} elseif ($this instanceof ArraySearchLoopInterface) {
$searchArray = $this->buildArray();
if (null === $searchArray) {
$results = array();
} else {
$results = $this->searchArray(
$searchArray,
$pagination
);
}
}
} elseif ($this instanceof ArraySearchLoopInterface) {
$searchArray = $this->buildArray();
if (null === $searchArray) {
$results = array();
} else {
$results = $this->searchArray(
$searchArray,
$pagination
);
$loopResult = new LoopResult($results);
if (true === $this->countable) {
$loopResult->setCountable();
}
if (true === $this->timestampable) {
$loopResult->setTimestamped();
}
if (true === $this->versionable) {
$loopResult->setVersioned();
}
self::$cacheLoopResult[$hash] = $this->parseResults($loopResult);
}
if ($count) {
return $results ? count($results) : 0;
}
return self::$cacheLoopResult[$hash];
$loopResult = new LoopResult($results);
if (true === $this->countable) {
$loopResult->setCountable();
}
if (true === $this->timestampable) {
$loopResult->setTimestamped();
}
if (true === $this->versionable) {
$loopResult->setVersioned();
}
return $this->parseResults($loopResult);
}
protected function checkInterface()

View File

@@ -89,6 +89,7 @@ class Admin extends BaseLoop implements PropelSearchLoopInterface
->set("FIRSTNAME",$admin->getFirstname())
->set("LASTNAME",$admin->getLastname())
->set("LOGIN",$admin->getLogin())
->set("LOCALE",$admin->getLocale())
;
$loopResult->addRow($loopResultRow);

View File

@@ -56,6 +56,11 @@ class Argument
return $this->type->getFormattedValue($this->value);
}
public function getRawValue()
{
return $this->value;
}
public function setValue($value)
{
if ($value === null) {
@@ -147,4 +152,5 @@ class Argument
$empty
);
}
}

View File

@@ -144,4 +144,20 @@ class ArgumentCollection implements \Iterator
{
reset($this->arguments);
}
public function getHash()
{
$arguments = $this->arguments;
if (array_key_exists('name', $arguments)) {
unset($arguments['name']);
}
$string = '';
foreach ($arguments as $key => $argument) {
$string .= $key.'='.$argument->getRawValue();
}
return md5($string);
}
}

View File

@@ -67,7 +67,8 @@ class FeatureValue extends BaseI18nLoop implements PropelSearchLoopInterface
new Type\EnumListType(array('alpha', 'alpha_reverse', 'manual', 'manual_reverse'))
),
'manual'
)
),
Argument::createBooleanTypeArgument('force_return', true)
);
}

View File

@@ -26,17 +26,20 @@ namespace Thelia\Core\Template\Loop;
use Propel\Runtime\ActiveQuery\Criteria;
use Thelia\Core\Template\Element\BaseLoop;
use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Element\PropelSearchLoopInterface;
use Thelia\Core\Template\Element\SearchLoopInterface;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Model\Base\Customer;
use Thelia\Model\CustomerQuery;
use Thelia\Model\Map\CustomerTableMap;
use Thelia\Model\Map\OrderAddressTableMap;
use Thelia\Model\OrderAddressQuery;
use Thelia\Model\OrderQuery;
use Thelia\Type\TypeCollection;
use Thelia\Type;
use Thelia\Type\TypeCollection;
/**
*
* @package Thelia\Core\Template\Loop
@@ -72,7 +75,14 @@ class Order extends BaseLoop implements SearchLoopInterface, PropelSearchLoopInt
new Argument(
'order',
new TypeCollection(
new Type\EnumListType(array('create-date', 'create-date-reverse'))
new Type\EnumListType(array(
'id', 'id-reverse',
'reference', 'reference-reverse',
'create-date', 'create-date-reverse',
'company', 'company-reverse',
'customer-name', 'customer-name-reverse',
'status', 'status-reverse'
))
),
'create-date-reverse'
)
@@ -165,12 +175,67 @@ class Order extends BaseLoop implements SearchLoopInterface, PropelSearchLoopInt
foreach ($orderers as $orderer) {
switch ($orderer) {
case 'id':
$search->orderById(Criteria::ASC);
break;
case 'id_reverse':
$search->orderById(Criteria::DESC);
break;
case 'reference':
$search->orderByRef(Criteria::ASC);
break;
case 'reference_reverse':
$search->orderByRef(Criteria::DESC);
break;
case "create-date":
$search->orderByCreatedAt(Criteria::ASC);
break;
case "create-date-reverse":
$search->orderByCreatedAt(Criteria::DESC);
break;
case "status":
$search->orderByStatusId(Criteria::ASC);
break;
case "status":
$search->orderByStatusId(Criteria::DESC);
break;
case 'company' :
$search
->joinOrderAddressRelatedByDeliveryOrderAddressId()
->withColumn(OrderAddressTableMap::COMPANY, 'company')
->orderBy('company', Criteria::ASC)
;
break;
case 'companyreverse' :
$search
->joinOrderAddressRelatedByDeliveryOrderAddressId()
->withColumn(OrderAddressTableMap::COMPANY, 'company')
->orderBy('company', Criteria::DESC)
;
break;
case 'customer-name' :
$search
->joinCustomer()
->withColumn(CustomerTableMap::FIRSTNAME, 'firstname')
->withColumn(CustomerTableMap::LASTNAME, 'lastname')
->orderBy('lastname', Criteria::ASC)
->orderBy('firstname', Criteria::ASC)
;
break;
case 'customer-name-reverse' :
$search
->joinCustomer()
->withColumn(CustomerTableMap::FIRSTNAME, 'firstname')
->withColumn(CustomerTableMap::LASTNAME, 'lastname')
->orderBy('lastname', Criteria::DESC)
->orderBy('firstname', Criteria::DESC)
;
break;
}
}

View File

@@ -36,10 +36,12 @@ use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Exception\TaxEngineException;
use Thelia\Model\CategoryQuery;
use Thelia\Model\ConfigQuery;
use Thelia\Model\CurrencyQuery;
use Thelia\Model\Map\ProductPriceTableMap;
use Thelia\Model\Map\ProductSaleElementsTableMap;
use Thelia\Model\Map\ProductTableMap;
use Thelia\Model\ProductCategoryQuery;
use Thelia\Model\ProductQuery;
use Thelia\TaxEngine\TaxEngine;
use Thelia\Type\TypeCollection;

View File

@@ -28,6 +28,7 @@ use Thelia\Core\Template\Smarty\AbstractSmartyPlugin;
use Thelia\Core\Template\Smarty\Exception\SmartyPluginException;
use Thelia\Core\Template\Smarty\SmartyPluginDescriptor;
use Thelia\Tools\DateTimeFormat;
use Thelia\Tools\MoneyFormat;
use Thelia\Tools\NumberFormat;
/**
@@ -135,6 +136,40 @@ class Format extends AbstractSmartyPlugin
$this->getParam($params, "thousands_sep", null)
);
}
/**
*
* display a amount in expected format
*
* available parameters :
* number => int or float number
* decimals => how many decimals format expected
* dec_point => separator for the decimal point
* thousands_sep => thousands separator
* symbol => Currency symbol
*
* ex : {format_money number="1246.12" decimals="1" dec_point="," thousands_sep=" " symbol="€"} will output "1 246,1 €"
*
* @param $params
* @param null $template
* @throws \Thelia\Core\Template\Smarty\Exception\SmartyPluginException
* @return string the expected number formatted
*/
public function formatMoney($params, $template = null)
{
$number = $this->getParam($params, "number", false);
if ($number === false || $number == '') {
return "";
}
return MoneyFormat::getInstance($this->request)->format(
$number,
$this->getParam($params, "decimals", null),
$this->getParam($params, "dec_point", null),
$this->getParam($params, "thousands_sep", null),
$this->getParam($params, "symbol", null)
);
}
/**
* @return an array of SmartyPluginDescriptor
@@ -143,7 +178,8 @@ class Format extends AbstractSmartyPlugin
{
return array(
new SmartyPluginDescriptor("function", "format_date", $this, "formatDate"),
new SmartyPluginDescriptor("function", "format_number", $this, "formatNumber")
);
new SmartyPluginDescriptor("function", "format_number", $this, "formatNumber"),
new SmartyPluginDescriptor("function", "format_money", $this, "formatMoney")
);
}
}

View File

@@ -82,8 +82,9 @@ class Module extends AbstractSmartyPlugin
}
}
if (! empty($content))
if (! empty($content)) {
return $template->fetch(sprintf("string:%s", $content));
}
return "";
}

View File

@@ -31,9 +31,6 @@ use Thelia\Core\Template\Smarty\SmartyPluginDescriptor;
use Thelia\Core\Template\Element\Exception\ElementNotFoundException;
use Thelia\Core\Template\Element\Exception\InvalidElementException;
use Symfony\Component\HttpFoundation\Request;
use Thelia\Core\Security\SecurityContext;
class TheliaLoop extends AbstractSmartyPlugin
{
protected static $pagination = null;

View File

@@ -59,7 +59,7 @@ use Thelia\Log\Tlog;
class Thelia extends Kernel
{
const THELIA_VERSION = '2.0.0-beta3';
const THELIA_VERSION = '2.0.0-beta4';
public function init()
{
@@ -87,7 +87,7 @@ class Thelia extends Kernel
$con->setAttribute(ConnectionWrapper::PROPEL_ATTR_CACHE_PREPARES, true);
if ($this->isDebug()) {
$serviceContainer->setLogger('defaultLogger', \Thelia\Log\Tlog::getInstance());
//$con->useDebug(true);
$con->useDebug(true);
}
}

View File

@@ -27,6 +27,7 @@ use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\ExecutionContextInterface;
use Thelia\Core\Translation\Translator;
use Thelia\Model\AdminQuery;
use Thelia\Model\LangQuery;
use Thelia\Model\ProfileQuery;
class AdministratorCreationForm extends BaseForm
@@ -100,9 +101,35 @@ class AdministratorCreationForm extends BaseForm
),
)
)
->add(
'locale',
"choice",
array(
"choices" => $this->getLocaleList(),
"constraints" => array(
new Constraints\NotBlank(),
),
"label" => Translator::getInstance()->trans('Preferred locale'),
"label_attr" => array(
"for" => "locale"
),
)
)
;
}
protected function getLocaleList() {
$locales = array();
$list = LangQuery::create()->find();
foreach($list as $item) {
$locales[$item->getLocale()] = $item->getLocale();
}
return $locales;
}
public function verifyPasswordField($value, ExecutionContextInterface $context)
{
$data = $context->getRoot()->getData();

View File

@@ -70,7 +70,7 @@ class LangCreateForm extends BaseForm
'constraints' => array(
new NotBlank()
),
'label' => Translator::getInstance()->trans('ISO 639 Code'),
'label' => Translator::getInstance()->trans('ISO 639-1 Code'),
'label_attr' => array(
'for' => 'code_lang'
)

View File

@@ -28,6 +28,7 @@ use Thelia\Core\Form\Type\TheliaType;
use Thelia\Core\Translation\Translator;
use Thelia\TaxEngine\TaxEngine;
use Thelia\Model\Tax;
use Thelia\Core\HttpFoundation\Request;
/**
* Class TaxCreationForm

View File

@@ -39,7 +39,8 @@ class Update
protected static $version = array(
'0' => '2.0.0-beta1',
'1' => '2.0.0-beta2',
'2' => '2.0.0-beta3'
'2' => '2.0.0-beta3',
'3' => '2.0.0-beta4'
);
protected function isLatestVersion($version)

View File

@@ -26,31 +26,29 @@ namespace Thelia\Log;
abstract class AbstractTlogDestination
{
//Tableau de TlogDestinationConfig paramétrant la destination
protected $_configs;
protected $_configs = array();
//Tableau des lignes de logs stockés avant utilisation par ecrire()
protected $_logs;
protected $_logs = array();
public function __construct()
{
$this->_configs = array();
$this->_logs = array();
// Initialiser les variables de configuration
$this->_configs = $this->getConfigs();
$this->_configs = $this->getConfigs();
// Appliquer la configuration
$this->configure();
}
//Affecte une valeur à une configuration de la destination
public function setConfig($name, $value)
public function setConfig($name, $value, $apply_changes = true)
{
foreach ($this->_configs as $config) {
if ($config->getName() == $name) {
$config->setValue($value);
// Appliquer les changements
$this->configure();
if ($apply_changes) $this->configure();
return true;
}

View File

@@ -37,9 +37,6 @@ class TlogDestinationFile extends AbstractTlogDestination
const VAR_MODE = "tlog_destinationfile_mode";
const VALEUR_MODE_DEFAULT = "A";
const VAR_MAX_FILE_SIZE_KB = "tlog_destinationfile_max_file_size";
const MAX_FILE_SIZE_KB_DEFAULT = 1024; // 1 Mb
protected $path_defaut = false;
protected $fh = false;
@@ -49,10 +46,18 @@ class TlogDestinationFile extends AbstractTlogDestination
parent::__construct();
}
protected function getFilePath() {
return $this->getConfig(self::VAR_PATH_FILE);
}
protected function getOpenMode() {
return strtolower($this->getConfig(self::VAR_MODE, self::VALEUR_MODE_DEFAULT)) == 'a' ? 'a' : 'w';
}
public function configure()
{
$file_path = $this->getConfig(self::VAR_PATH_FILE);
$mode = strtolower($this->getConfig(self::VAR_MODE, self::VALEUR_MODE_DEFAULT)) == 'a' ? 'a' : 'w';
$file_path = $this->getFilePath();
$mode = $this->getOpenMode();
if (! empty($file_path)) {
if (! is_file($file_path)) {
@@ -67,23 +72,6 @@ class TlogDestinationFile extends AbstractTlogDestination
if ($this->fh) @fclose($this->fh);
if (filesize($file_path) > 1024 * $this->getConfig(self::VAR_MAX_FILE_SIZE_KB, self::MAX_FILE_SIZE_KB_DEFAULT)) {
$idx = 1;
do {
$file_path_bk = "$file_path.$idx";
$idx++;
} while (file_exists($file_path_bk));
@rename($file_path, $file_path_bk);
@touch($file_path);
@chmod($file_path, 0666);
}
$this->fh = fopen($file_path, $mode);
}
}
@@ -114,13 +102,6 @@ class TlogDestinationFile extends AbstractTlogDestination
'Enter E to empty this file for each request, or A to always append logs. Consider resetting the file from time to time',
self::VALEUR_MODE_DEFAULT,
TlogDestinationConfig::TYPE_TEXTFIELD
),
new TlogDestinationConfig(
self::VAR_MAX_FILE_SIZE_KB,
'Maximum log file size, in Kb',
'When this size if exeeded, a backup copy of the file is made, and a new log file is opened. As the file size check is performed only at the beginning of a request, the file size may be bigger thant this limit. Note: 1 Mb = 1024 Kb',
self::MAX_FILE_SIZE_KB_DEFAULT,
TlogDestinationConfig::TYPE_TEXTFIELD
)
);
}

View File

@@ -0,0 +1,101 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Log\Destination;
use Thelia\Log\AbstractTlogDestination;
use Thelia\Log\TlogDestinationConfig;
use Thelia\Core\Translation\Translator;
class TlogDestinationRotatingFile extends TlogDestinationFile
{
// Nom des variables de configuration
// ----------------------------------
const VAR_MAX_FILE_SIZE_KB = "tlog_destinationfile_max_file_size";
const MAX_FILE_SIZE_KB_DEFAULT = 1024; // 1 Mb
public function __construct($maxFileSize = self::MAX_FILE_SIZE_KB_DEFAULT)
{
$this->path_defaut = THELIA_ROOT . "log" . DS . self::TLOG_DEFAULT_NAME;
$this->setConfig(self::VAR_MAX_FILE_SIZE_KB, $maxFileSize, false);
parent::__construct();
}
public function configure()
{
parent::configure();
$file_path = $this->getFilePath();
$mode = $this->getOpenMode();
if ($this->fh) @fclose($this->fh);
if (filesize($file_path) > 1024 * $this->getConfig(self::VAR_MAX_FILE_SIZE_KB, self::MAX_FILE_SIZE_KB_DEFAULT)) {
$idx = 1;
do {
$file_path_bk = "$file_path.$idx";
$idx++;
} while (file_exists($file_path_bk));
@rename($file_path, $file_path_bk);
@touch($file_path);
@chmod($file_path, 0666);
}
$this->fh = fopen($file_path, $mode);
}
public function getTitle()
{
return Translator::getInstance()->trans('Rotated Text File');
}
public function getDescription()
{
return Translator::getInstance()->trans('Store logs into text file, up to a certian size, then a new file is created');
}
public function getConfigs()
{
$arr = parent::getConfigs();
$arr[] =
new TlogDestinationConfig(
self::VAR_MAX_FILE_SIZE_KB,
'Maximum log file size, in Kb',
'When this size if exeeded, a backup copy of the file is made, and a new log file is opened. As the file size check is performed only at the beginning of a request, the file size may be bigger thant this limit. Note: 1 Mb = 1024 Kb',
self::MAX_FILE_SIZE_KB_DEFAULT,
TlogDestinationConfig::TYPE_TEXTFIELD
);
return $arr;
}
}

View File

@@ -69,7 +69,7 @@ class Tlog Implements LoggerInterface
// default values
const DEFAULT_LEVEL = self::DEBUG;
const DEFAUT_DESTINATIONS = "Thelia\Log\Destination\TlogDestinationFile";
const DEFAUT_DESTINATIONS = "Thelia\Log\Destination\TlogDestinationRotatingFile";
const DEFAUT_PREFIXE = "#INDEX: #LEVEL [#FILE:#FUNCTION()] {#LINE} #DATE #HOUR: ";
const DEFAUT_FILES = "*";
const DEFAUT_IP = "";

View File

@@ -31,7 +31,7 @@ class Admin extends BaseAdmin implements UserInterface
{
$profileId = $this->getProfileId();
if( null === $profileId ) {
if( null === $profileId || 0 === $profileId ) {
return AdminResources::SUPERADMINISTRATOR;
}

View File

@@ -92,6 +92,12 @@ abstract class Admin implements ActiveRecordInterface
*/
protected $password;
/**
* The value for the locale field.
* @var string
*/
protected $locale;
/**
* The value for the algo field.
* @var string
@@ -465,6 +471,17 @@ abstract class Admin implements ActiveRecordInterface
return $this->password;
}
/**
* Get the [locale] column value.
*
* @return string
*/
public function getLocale()
{
return $this->locale;
}
/**
* Get the [algo] column value.
*
@@ -679,6 +696,27 @@ abstract class Admin implements ActiveRecordInterface
return $this;
} // setPassword()
/**
* Set the value of [locale] column.
*
* @param string $v new value
* @return \Thelia\Model\Admin The current object (for fluent API support)
*/
public function setLocale($v)
{
if ($v !== null) {
$v = (string) $v;
}
if ($this->locale !== $v) {
$this->locale = $v;
$this->modifiedColumns[AdminTableMap::LOCALE] = true;
}
return $this;
} // setLocale()
/**
* Set the value of [algo] column.
*
@@ -860,25 +898,28 @@ abstract class Admin implements ActiveRecordInterface
$col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : AdminTableMap::translateFieldName('Password', TableMap::TYPE_PHPNAME, $indexType)];
$this->password = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 6 + $startcol : AdminTableMap::translateFieldName('Algo', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 6 + $startcol : AdminTableMap::translateFieldName('Locale', TableMap::TYPE_PHPNAME, $indexType)];
$this->locale = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 7 + $startcol : AdminTableMap::translateFieldName('Algo', TableMap::TYPE_PHPNAME, $indexType)];
$this->algo = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 7 + $startcol : AdminTableMap::translateFieldName('Salt', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 8 + $startcol : AdminTableMap::translateFieldName('Salt', TableMap::TYPE_PHPNAME, $indexType)];
$this->salt = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 8 + $startcol : AdminTableMap::translateFieldName('RememberMeToken', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 9 + $startcol : AdminTableMap::translateFieldName('RememberMeToken', TableMap::TYPE_PHPNAME, $indexType)];
$this->remember_me_token = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 9 + $startcol : AdminTableMap::translateFieldName('RememberMeSerial', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 10 + $startcol : AdminTableMap::translateFieldName('RememberMeSerial', TableMap::TYPE_PHPNAME, $indexType)];
$this->remember_me_serial = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 10 + $startcol : AdminTableMap::translateFieldName('CreatedAt', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 11 + $startcol : AdminTableMap::translateFieldName('CreatedAt', TableMap::TYPE_PHPNAME, $indexType)];
if ($col === '0000-00-00 00:00:00') {
$col = null;
}
$this->created_at = (null !== $col) ? PropelDateTime::newInstance($col, null, '\DateTime') : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 11 + $startcol : AdminTableMap::translateFieldName('UpdatedAt', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 12 + $startcol : AdminTableMap::translateFieldName('UpdatedAt', TableMap::TYPE_PHPNAME, $indexType)];
if ($col === '0000-00-00 00:00:00') {
$col = null;
}
@@ -891,7 +932,7 @@ abstract class Admin implements ActiveRecordInterface
$this->ensureConsistency();
}
return $startcol + 12; // 12 = AdminTableMap::NUM_HYDRATE_COLUMNS.
return $startcol + 13; // 13 = AdminTableMap::NUM_HYDRATE_COLUMNS.
} catch (Exception $e) {
throw new PropelException("Error populating \Thelia\Model\Admin object", 0, $e);
@@ -1145,6 +1186,9 @@ abstract class Admin implements ActiveRecordInterface
if ($this->isColumnModified(AdminTableMap::PASSWORD)) {
$modifiedColumns[':p' . $index++] = '`PASSWORD`';
}
if ($this->isColumnModified(AdminTableMap::LOCALE)) {
$modifiedColumns[':p' . $index++] = '`LOCALE`';
}
if ($this->isColumnModified(AdminTableMap::ALGO)) {
$modifiedColumns[':p' . $index++] = '`ALGO`';
}
@@ -1192,6 +1236,9 @@ abstract class Admin implements ActiveRecordInterface
case '`PASSWORD`':
$stmt->bindValue($identifier, $this->password, PDO::PARAM_STR);
break;
case '`LOCALE`':
$stmt->bindValue($identifier, $this->locale, PDO::PARAM_STR);
break;
case '`ALGO`':
$stmt->bindValue($identifier, $this->algo, PDO::PARAM_STR);
break;
@@ -1291,21 +1338,24 @@ abstract class Admin implements ActiveRecordInterface
return $this->getPassword();
break;
case 6:
return $this->getAlgo();
return $this->getLocale();
break;
case 7:
return $this->getSalt();
return $this->getAlgo();
break;
case 8:
return $this->getRememberMeToken();
return $this->getSalt();
break;
case 9:
return $this->getRememberMeSerial();
return $this->getRememberMeToken();
break;
case 10:
return $this->getCreatedAt();
return $this->getRememberMeSerial();
break;
case 11:
return $this->getCreatedAt();
break;
case 12:
return $this->getUpdatedAt();
break;
default:
@@ -1343,12 +1393,13 @@ abstract class Admin implements ActiveRecordInterface
$keys[3] => $this->getLastname(),
$keys[4] => $this->getLogin(),
$keys[5] => $this->getPassword(),
$keys[6] => $this->getAlgo(),
$keys[7] => $this->getSalt(),
$keys[8] => $this->getRememberMeToken(),
$keys[9] => $this->getRememberMeSerial(),
$keys[10] => $this->getCreatedAt(),
$keys[11] => $this->getUpdatedAt(),
$keys[6] => $this->getLocale(),
$keys[7] => $this->getAlgo(),
$keys[8] => $this->getSalt(),
$keys[9] => $this->getRememberMeToken(),
$keys[10] => $this->getRememberMeSerial(),
$keys[11] => $this->getCreatedAt(),
$keys[12] => $this->getUpdatedAt(),
);
$virtualColumns = $this->virtualColumns;
foreach ($virtualColumns as $key => $virtualColumn) {
@@ -1412,21 +1463,24 @@ abstract class Admin implements ActiveRecordInterface
$this->setPassword($value);
break;
case 6:
$this->setAlgo($value);
$this->setLocale($value);
break;
case 7:
$this->setSalt($value);
$this->setAlgo($value);
break;
case 8:
$this->setRememberMeToken($value);
$this->setSalt($value);
break;
case 9:
$this->setRememberMeSerial($value);
$this->setRememberMeToken($value);
break;
case 10:
$this->setCreatedAt($value);
$this->setRememberMeSerial($value);
break;
case 11:
$this->setCreatedAt($value);
break;
case 12:
$this->setUpdatedAt($value);
break;
} // switch()
@@ -1459,12 +1513,13 @@ abstract class Admin implements ActiveRecordInterface
if (array_key_exists($keys[3], $arr)) $this->setLastname($arr[$keys[3]]);
if (array_key_exists($keys[4], $arr)) $this->setLogin($arr[$keys[4]]);
if (array_key_exists($keys[5], $arr)) $this->setPassword($arr[$keys[5]]);
if (array_key_exists($keys[6], $arr)) $this->setAlgo($arr[$keys[6]]);
if (array_key_exists($keys[7], $arr)) $this->setSalt($arr[$keys[7]]);
if (array_key_exists($keys[8], $arr)) $this->setRememberMeToken($arr[$keys[8]]);
if (array_key_exists($keys[9], $arr)) $this->setRememberMeSerial($arr[$keys[9]]);
if (array_key_exists($keys[10], $arr)) $this->setCreatedAt($arr[$keys[10]]);
if (array_key_exists($keys[11], $arr)) $this->setUpdatedAt($arr[$keys[11]]);
if (array_key_exists($keys[6], $arr)) $this->setLocale($arr[$keys[6]]);
if (array_key_exists($keys[7], $arr)) $this->setAlgo($arr[$keys[7]]);
if (array_key_exists($keys[8], $arr)) $this->setSalt($arr[$keys[8]]);
if (array_key_exists($keys[9], $arr)) $this->setRememberMeToken($arr[$keys[9]]);
if (array_key_exists($keys[10], $arr)) $this->setRememberMeSerial($arr[$keys[10]]);
if (array_key_exists($keys[11], $arr)) $this->setCreatedAt($arr[$keys[11]]);
if (array_key_exists($keys[12], $arr)) $this->setUpdatedAt($arr[$keys[12]]);
}
/**
@@ -1482,6 +1537,7 @@ abstract class Admin implements ActiveRecordInterface
if ($this->isColumnModified(AdminTableMap::LASTNAME)) $criteria->add(AdminTableMap::LASTNAME, $this->lastname);
if ($this->isColumnModified(AdminTableMap::LOGIN)) $criteria->add(AdminTableMap::LOGIN, $this->login);
if ($this->isColumnModified(AdminTableMap::PASSWORD)) $criteria->add(AdminTableMap::PASSWORD, $this->password);
if ($this->isColumnModified(AdminTableMap::LOCALE)) $criteria->add(AdminTableMap::LOCALE, $this->locale);
if ($this->isColumnModified(AdminTableMap::ALGO)) $criteria->add(AdminTableMap::ALGO, $this->algo);
if ($this->isColumnModified(AdminTableMap::SALT)) $criteria->add(AdminTableMap::SALT, $this->salt);
if ($this->isColumnModified(AdminTableMap::REMEMBER_ME_TOKEN)) $criteria->add(AdminTableMap::REMEMBER_ME_TOKEN, $this->remember_me_token);
@@ -1556,6 +1612,7 @@ abstract class Admin implements ActiveRecordInterface
$copyObj->setLastname($this->getLastname());
$copyObj->setLogin($this->getLogin());
$copyObj->setPassword($this->getPassword());
$copyObj->setLocale($this->getLocale());
$copyObj->setAlgo($this->getAlgo());
$copyObj->setSalt($this->getSalt());
$copyObj->setRememberMeToken($this->getRememberMeToken());
@@ -1652,6 +1709,7 @@ abstract class Admin implements ActiveRecordInterface
$this->lastname = null;
$this->login = null;
$this->password = null;
$this->locale = null;
$this->algo = null;
$this->salt = null;
$this->remember_me_token = null;

View File

@@ -27,6 +27,7 @@ use Thelia\Model\Map\AdminTableMap;
* @method ChildAdminQuery orderByLastname($order = Criteria::ASC) Order by the lastname column
* @method ChildAdminQuery orderByLogin($order = Criteria::ASC) Order by the login column
* @method ChildAdminQuery orderByPassword($order = Criteria::ASC) Order by the password column
* @method ChildAdminQuery orderByLocale($order = Criteria::ASC) Order by the locale column
* @method ChildAdminQuery orderByAlgo($order = Criteria::ASC) Order by the algo column
* @method ChildAdminQuery orderBySalt($order = Criteria::ASC) Order by the salt column
* @method ChildAdminQuery orderByRememberMeToken($order = Criteria::ASC) Order by the remember_me_token column
@@ -40,6 +41,7 @@ use Thelia\Model\Map\AdminTableMap;
* @method ChildAdminQuery groupByLastname() Group by the lastname column
* @method ChildAdminQuery groupByLogin() Group by the login column
* @method ChildAdminQuery groupByPassword() Group by the password column
* @method ChildAdminQuery groupByLocale() Group by the locale column
* @method ChildAdminQuery groupByAlgo() Group by the algo column
* @method ChildAdminQuery groupBySalt() Group by the salt column
* @method ChildAdminQuery groupByRememberMeToken() Group by the remember_me_token column
@@ -64,6 +66,7 @@ use Thelia\Model\Map\AdminTableMap;
* @method ChildAdmin findOneByLastname(string $lastname) Return the first ChildAdmin filtered by the lastname column
* @method ChildAdmin findOneByLogin(string $login) Return the first ChildAdmin filtered by the login column
* @method ChildAdmin findOneByPassword(string $password) Return the first ChildAdmin filtered by the password column
* @method ChildAdmin findOneByLocale(string $locale) Return the first ChildAdmin filtered by the locale column
* @method ChildAdmin findOneByAlgo(string $algo) Return the first ChildAdmin filtered by the algo column
* @method ChildAdmin findOneBySalt(string $salt) Return the first ChildAdmin filtered by the salt column
* @method ChildAdmin findOneByRememberMeToken(string $remember_me_token) Return the first ChildAdmin filtered by the remember_me_token column
@@ -77,6 +80,7 @@ use Thelia\Model\Map\AdminTableMap;
* @method array findByLastname(string $lastname) Return ChildAdmin objects filtered by the lastname column
* @method array findByLogin(string $login) Return ChildAdmin objects filtered by the login column
* @method array findByPassword(string $password) Return ChildAdmin objects filtered by the password column
* @method array findByLocale(string $locale) Return ChildAdmin objects filtered by the locale column
* @method array findByAlgo(string $algo) Return ChildAdmin objects filtered by the algo column
* @method array findBySalt(string $salt) Return ChildAdmin objects filtered by the salt column
* @method array findByRememberMeToken(string $remember_me_token) Return ChildAdmin objects filtered by the remember_me_token column
@@ -171,7 +175,7 @@ abstract class AdminQuery extends ModelCriteria
*/
protected function findPkSimple($key, $con)
{
$sql = 'SELECT `ID`, `PROFILE_ID`, `FIRSTNAME`, `LASTNAME`, `LOGIN`, `PASSWORD`, `ALGO`, `SALT`, `REMEMBER_ME_TOKEN`, `REMEMBER_ME_SERIAL`, `CREATED_AT`, `UPDATED_AT` FROM `admin` WHERE `ID` = :p0';
$sql = 'SELECT `ID`, `PROFILE_ID`, `FIRSTNAME`, `LASTNAME`, `LOGIN`, `PASSWORD`, `LOCALE`, `ALGO`, `SALT`, `REMEMBER_ME_TOKEN`, `REMEMBER_ME_SERIAL`, `CREATED_AT`, `UPDATED_AT` FROM `admin` WHERE `ID` = :p0';
try {
$stmt = $con->prepare($sql);
$stmt->bindValue(':p0', $key, PDO::PARAM_INT);
@@ -460,6 +464,35 @@ abstract class AdminQuery extends ModelCriteria
return $this->addUsingAlias(AdminTableMap::PASSWORD, $password, $comparison);
}
/**
* Filter the query on the locale column
*
* Example usage:
* <code>
* $query->filterByLocale('fooValue'); // WHERE locale = 'fooValue'
* $query->filterByLocale('%fooValue%'); // WHERE locale LIKE '%fooValue%'
* </code>
*
* @param string $locale The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return ChildAdminQuery The current query, for fluid interface
*/
public function filterByLocale($locale = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($locale)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $locale)) {
$locale = str_replace('*', '%', $locale);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(AdminTableMap::LOCALE, $locale, $comparison);
}
/**
* Filter the query on the algo column
*

View File

@@ -92,6 +92,9 @@ class ConfigQuery extends BaseConfigQuery {
return self::read('check-available-stock', 1) != 0;
}
public static function getUnknownFlagPath() {
return self::read('unknown-flag-path', '/assets/img/flags/unknown.png');
}
/* smtp config */
public static function isSmtpEnable()
{

View File

@@ -5,8 +5,11 @@ namespace Thelia\Model;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Exception\PropelException;
use Propel\Runtime\Propel;
use Symfony\Component\Filesystem\Filesystem;
use Thelia\Core\Event\Lang\LangEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Template\TemplateHelper;
use Thelia\Core\Translation\Translator;
use Thelia\Model\Base\Lang as BaseLang;
use Thelia\Model\LangQuery;
use Thelia\Model\Map\LangTableMap;
@@ -53,6 +56,33 @@ class Lang extends BaseLang {
}
protected function fixMissingFlag() {
// Be sure that a lang have a flag, otherwise copy the
// "unknown" flag
$adminTemplate = TemplateHelper::getInstance()->getActiveAdminTemplate();
$unknownFlag = ConfigQuery::getUnknownFlagPath();
$unknownFlagPath = $adminTemplate->getAbsolutePath().DS.$unknownFlag;
if (! file_exists($unknownFlagPath)) {
throw new \RuntimeException(
Translator::getInstance()->trans(
"The image which replaces an undefined country flag (%file) was not found. Please check unknown-flag-path configuration variable, and check that the image exists.",
array("%file" => $unknownFlag)
)
);
}
// Check if the country flag exists
$countryFlag = rtrim(dirname($unknownFlagPath), DS).DS.$this->getCode().'.png';
if (! file_exists($countryFlag)) {
$fs = new Filesystem();
$fs->copy($unknownFlagPath, $countryFlag);
}
}
public function preInsert(ConnectionInterface $con = null)
{
$this->dispatchEvent(TheliaEvents::BEFORE_CREATELANG, new LangEvent($this));
@@ -63,6 +93,8 @@ class Lang extends BaseLang {
public function postInsert(ConnectionInterface $con = null)
{
$this->dispatchEvent(TheliaEvents::AFTER_CREATELANG, new LangEvent($this));
$this->fixMissingFlag();
}
public function preUpdate(ConnectionInterface $con = null)
@@ -75,6 +107,8 @@ class Lang extends BaseLang {
public function postUpdate(ConnectionInterface $con = null)
{
$this->dispatchEvent(TheliaEvents::AFTER_UPDATELANG, new LangEvent($this));
$this->fixMissingFlag();
}
public function preDelete(ConnectionInterface $con = null)

View File

@@ -58,7 +58,7 @@ class AdminTableMap extends TableMap
/**
* The total number of columns
*/
const NUM_COLUMNS = 12;
const NUM_COLUMNS = 13;
/**
* The number of lazy-loaded columns
@@ -68,7 +68,7 @@ class AdminTableMap extends TableMap
/**
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
*/
const NUM_HYDRATE_COLUMNS = 12;
const NUM_HYDRATE_COLUMNS = 13;
/**
* the column name for the ID field
@@ -100,6 +100,11 @@ class AdminTableMap extends TableMap
*/
const PASSWORD = 'admin.PASSWORD';
/**
* the column name for the LOCALE field
*/
const LOCALE = 'admin.LOCALE';
/**
* the column name for the ALGO field
*/
@@ -142,12 +147,12 @@ class AdminTableMap extends TableMap
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
protected static $fieldNames = array (
self::TYPE_PHPNAME => array('Id', 'ProfileId', 'Firstname', 'Lastname', 'Login', 'Password', 'Algo', 'Salt', 'RememberMeToken', 'RememberMeSerial', 'CreatedAt', 'UpdatedAt', ),
self::TYPE_STUDLYPHPNAME => array('id', 'profileId', 'firstname', 'lastname', 'login', 'password', 'algo', 'salt', 'rememberMeToken', 'rememberMeSerial', 'createdAt', 'updatedAt', ),
self::TYPE_COLNAME => array(AdminTableMap::ID, AdminTableMap::PROFILE_ID, AdminTableMap::FIRSTNAME, AdminTableMap::LASTNAME, AdminTableMap::LOGIN, AdminTableMap::PASSWORD, AdminTableMap::ALGO, AdminTableMap::SALT, AdminTableMap::REMEMBER_ME_TOKEN, AdminTableMap::REMEMBER_ME_SERIAL, AdminTableMap::CREATED_AT, AdminTableMap::UPDATED_AT, ),
self::TYPE_RAW_COLNAME => array('ID', 'PROFILE_ID', 'FIRSTNAME', 'LASTNAME', 'LOGIN', 'PASSWORD', 'ALGO', 'SALT', 'REMEMBER_ME_TOKEN', 'REMEMBER_ME_SERIAL', 'CREATED_AT', 'UPDATED_AT', ),
self::TYPE_FIELDNAME => array('id', 'profile_id', 'firstname', 'lastname', 'login', 'password', 'algo', 'salt', 'remember_me_token', 'remember_me_serial', 'created_at', 'updated_at', ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, )
self::TYPE_PHPNAME => array('Id', 'ProfileId', 'Firstname', 'Lastname', 'Login', 'Password', 'Locale', 'Algo', 'Salt', 'RememberMeToken', 'RememberMeSerial', 'CreatedAt', 'UpdatedAt', ),
self::TYPE_STUDLYPHPNAME => array('id', 'profileId', 'firstname', 'lastname', 'login', 'password', 'locale', 'algo', 'salt', 'rememberMeToken', 'rememberMeSerial', 'createdAt', 'updatedAt', ),
self::TYPE_COLNAME => array(AdminTableMap::ID, AdminTableMap::PROFILE_ID, AdminTableMap::FIRSTNAME, AdminTableMap::LASTNAME, AdminTableMap::LOGIN, AdminTableMap::PASSWORD, AdminTableMap::LOCALE, AdminTableMap::ALGO, AdminTableMap::SALT, AdminTableMap::REMEMBER_ME_TOKEN, AdminTableMap::REMEMBER_ME_SERIAL, AdminTableMap::CREATED_AT, AdminTableMap::UPDATED_AT, ),
self::TYPE_RAW_COLNAME => array('ID', 'PROFILE_ID', 'FIRSTNAME', 'LASTNAME', 'LOGIN', 'PASSWORD', 'LOCALE', 'ALGO', 'SALT', 'REMEMBER_ME_TOKEN', 'REMEMBER_ME_SERIAL', 'CREATED_AT', 'UPDATED_AT', ),
self::TYPE_FIELDNAME => array('id', 'profile_id', 'firstname', 'lastname', 'login', 'password', 'locale', 'algo', 'salt', 'remember_me_token', 'remember_me_serial', 'created_at', 'updated_at', ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, )
);
/**
@@ -157,12 +162,12 @@ class AdminTableMap extends TableMap
* e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0
*/
protected static $fieldKeys = array (
self::TYPE_PHPNAME => array('Id' => 0, 'ProfileId' => 1, 'Firstname' => 2, 'Lastname' => 3, 'Login' => 4, 'Password' => 5, 'Algo' => 6, 'Salt' => 7, 'RememberMeToken' => 8, 'RememberMeSerial' => 9, 'CreatedAt' => 10, 'UpdatedAt' => 11, ),
self::TYPE_STUDLYPHPNAME => array('id' => 0, 'profileId' => 1, 'firstname' => 2, 'lastname' => 3, 'login' => 4, 'password' => 5, 'algo' => 6, 'salt' => 7, 'rememberMeToken' => 8, 'rememberMeSerial' => 9, 'createdAt' => 10, 'updatedAt' => 11, ),
self::TYPE_COLNAME => array(AdminTableMap::ID => 0, AdminTableMap::PROFILE_ID => 1, AdminTableMap::FIRSTNAME => 2, AdminTableMap::LASTNAME => 3, AdminTableMap::LOGIN => 4, AdminTableMap::PASSWORD => 5, AdminTableMap::ALGO => 6, AdminTableMap::SALT => 7, AdminTableMap::REMEMBER_ME_TOKEN => 8, AdminTableMap::REMEMBER_ME_SERIAL => 9, AdminTableMap::CREATED_AT => 10, AdminTableMap::UPDATED_AT => 11, ),
self::TYPE_RAW_COLNAME => array('ID' => 0, 'PROFILE_ID' => 1, 'FIRSTNAME' => 2, 'LASTNAME' => 3, 'LOGIN' => 4, 'PASSWORD' => 5, 'ALGO' => 6, 'SALT' => 7, 'REMEMBER_ME_TOKEN' => 8, 'REMEMBER_ME_SERIAL' => 9, 'CREATED_AT' => 10, 'UPDATED_AT' => 11, ),
self::TYPE_FIELDNAME => array('id' => 0, 'profile_id' => 1, 'firstname' => 2, 'lastname' => 3, 'login' => 4, 'password' => 5, 'algo' => 6, 'salt' => 7, 'remember_me_token' => 8, 'remember_me_serial' => 9, 'created_at' => 10, 'updated_at' => 11, ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, )
self::TYPE_PHPNAME => array('Id' => 0, 'ProfileId' => 1, 'Firstname' => 2, 'Lastname' => 3, 'Login' => 4, 'Password' => 5, 'Locale' => 6, 'Algo' => 7, 'Salt' => 8, 'RememberMeToken' => 9, 'RememberMeSerial' => 10, 'CreatedAt' => 11, 'UpdatedAt' => 12, ),
self::TYPE_STUDLYPHPNAME => array('id' => 0, 'profileId' => 1, 'firstname' => 2, 'lastname' => 3, 'login' => 4, 'password' => 5, 'locale' => 6, 'algo' => 7, 'salt' => 8, 'rememberMeToken' => 9, 'rememberMeSerial' => 10, 'createdAt' => 11, 'updatedAt' => 12, ),
self::TYPE_COLNAME => array(AdminTableMap::ID => 0, AdminTableMap::PROFILE_ID => 1, AdminTableMap::FIRSTNAME => 2, AdminTableMap::LASTNAME => 3, AdminTableMap::LOGIN => 4, AdminTableMap::PASSWORD => 5, AdminTableMap::LOCALE => 6, AdminTableMap::ALGO => 7, AdminTableMap::SALT => 8, AdminTableMap::REMEMBER_ME_TOKEN => 9, AdminTableMap::REMEMBER_ME_SERIAL => 10, AdminTableMap::CREATED_AT => 11, AdminTableMap::UPDATED_AT => 12, ),
self::TYPE_RAW_COLNAME => array('ID' => 0, 'PROFILE_ID' => 1, 'FIRSTNAME' => 2, 'LASTNAME' => 3, 'LOGIN' => 4, 'PASSWORD' => 5, 'LOCALE' => 6, 'ALGO' => 7, 'SALT' => 8, 'REMEMBER_ME_TOKEN' => 9, 'REMEMBER_ME_SERIAL' => 10, 'CREATED_AT' => 11, 'UPDATED_AT' => 12, ),
self::TYPE_FIELDNAME => array('id' => 0, 'profile_id' => 1, 'firstname' => 2, 'lastname' => 3, 'login' => 4, 'password' => 5, 'locale' => 6, 'algo' => 7, 'salt' => 8, 'remember_me_token' => 9, 'remember_me_serial' => 10, 'created_at' => 11, 'updated_at' => 12, ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, )
);
/**
@@ -187,6 +192,7 @@ class AdminTableMap extends TableMap
$this->addColumn('LASTNAME', 'Lastname', 'VARCHAR', true, 100, null);
$this->addColumn('LOGIN', 'Login', 'VARCHAR', true, 100, null);
$this->addColumn('PASSWORD', 'Password', 'VARCHAR', true, 128, null);
$this->addColumn('LOCALE', 'Locale', 'VARCHAR', true, 45, null);
$this->addColumn('ALGO', 'Algo', 'VARCHAR', false, 128, null);
$this->addColumn('SALT', 'Salt', 'VARCHAR', false, 128, null);
$this->addColumn('REMEMBER_ME_TOKEN', 'RememberMeToken', 'VARCHAR', false, 255, null);
@@ -360,6 +366,7 @@ class AdminTableMap extends TableMap
$criteria->addSelectColumn(AdminTableMap::LASTNAME);
$criteria->addSelectColumn(AdminTableMap::LOGIN);
$criteria->addSelectColumn(AdminTableMap::PASSWORD);
$criteria->addSelectColumn(AdminTableMap::LOCALE);
$criteria->addSelectColumn(AdminTableMap::ALGO);
$criteria->addSelectColumn(AdminTableMap::SALT);
$criteria->addSelectColumn(AdminTableMap::REMEMBER_ME_TOKEN);
@@ -373,6 +380,7 @@ class AdminTableMap extends TableMap
$criteria->addSelectColumn($alias . '.LASTNAME');
$criteria->addSelectColumn($alias . '.LOGIN');
$criteria->addSelectColumn($alias . '.PASSWORD');
$criteria->addSelectColumn($alias . '.LOCALE');
$criteria->addSelectColumn($alias . '.ALGO');
$criteria->addSelectColumn($alias . '.SALT');
$criteria->addSelectColumn($alias . '.REMEMBER_ME_TOKEN');

View File

@@ -208,7 +208,7 @@ class CouponTableMap extends TableMap
$this->addPrimaryKey('ID', 'Id', 'INTEGER', true, null, null);
$this->addColumn('CODE', 'Code', 'VARCHAR', true, 45, null);
$this->addColumn('TYPE', 'Type', 'VARCHAR', true, 255, null);
$this->addColumn('SERIALIZED_EFFECTS', 'SerializedEffects', 'LONGVARCHAR', true, null, null);
$this->addColumn('SERIALIZED_EFFECTS', 'SerializedEffects', 'CLOB', true, null, null);
$this->addColumn('IS_ENABLED', 'IsEnabled', 'BOOLEAN', true, 1, null);
$this->addColumn('EXPIRATION_DATE', 'ExpirationDate', 'TIMESTAMP', true, null, null);
$this->addColumn('MAX_USAGE', 'MaxUsage', 'INTEGER', true, null, null);

View File

@@ -199,7 +199,7 @@ class CouponVersionTableMap extends TableMap
$this->addForeignPrimaryKey('ID', 'Id', 'INTEGER' , 'coupon', 'ID', true, null, null);
$this->addColumn('CODE', 'Code', 'VARCHAR', true, 45, null);
$this->addColumn('TYPE', 'Type', 'VARCHAR', true, 255, null);
$this->addColumn('SERIALIZED_EFFECTS', 'SerializedEffects', 'LONGVARCHAR', true, null, null);
$this->addColumn('SERIALIZED_EFFECTS', 'SerializedEffects', 'CLOB', true, null, null);
$this->addColumn('IS_ENABLED', 'IsEnabled', 'BOOLEAN', true, 1, null);
$this->addColumn('EXPIRATION_DATE', 'ExpirationDate', 'TIMESTAMP', true, null, null);
$this->addColumn('MAX_USAGE', 'MaxUsage', 'INTEGER', true, null, null);

View File

@@ -55,6 +55,8 @@ class Product extends BaseProduct
/**
* Return the default PSE for this product.
*
* @return ProductSaleElements
*/
public function getDefaultSaleElements() {
return ProductSaleElementsQuery::create()->filterByProductId($this->id)->filterByIsDefault(true)->find();

View File

@@ -36,7 +36,7 @@ use Thelia\Tests\Action\BaseAction;
* @package Thelia\Tests\Action
* @author Manuel Raynaud <mraynaud@openstudio.fr>
*/
class AddressTest extends BaseAction
class AddressTest extends \PHPUnit_Framework_TestCase
{
public function testCreatedAddress()
@@ -59,8 +59,9 @@ class AddressTest extends BaseAction
""
);
$AddressCreateOrUpdateEvent->setCustomer($customer);
$AddressCreateOrUpdateEvent->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"));
$actionAddress = new Address($this->getContainer());
$actionAddress = new Address();
$actionAddress->create($AddressCreateOrUpdateEvent);
$createdAddress = $AddressCreateOrUpdateEvent->getAddress();
@@ -106,8 +107,9 @@ class AddressTest extends BaseAction
""
);
$addressEvent->setAddress($address);
$addressEvent->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"));
$actionAddress = new Address($this->getContainer());
$actionAddress = new Address();
$actionAddress->update($addressEvent);
$updatedAddress = $addressEvent->getAddress();

View File

@@ -0,0 +1,143 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Tests\Action;
use Thelia\Action\Administrator;
use Thelia\Core\Event\Administrator\AdministratorEvent;
use Thelia\Core\Event\Administrator\AdministratorUpdatePasswordEvent;
use Thelia\Model\AdminQuery;
use Thelia\Model\LangQuery;
/**
* Class AdministratorTest
* @package Thelia\Tests\Action
* @author Manuel Raynaud <mraynaud@openstudio.fr>
*/
class AdministratorTest extends \PHPUnit_Framework_TestCase
{
public function testCreate()
{
$login = 'thelia'.uniqid();
$locale = LangQuery::create()->findOne()->getLocale();
$adminEvent = new AdministratorEvent();
$adminEvent
->setFirstname('thelia')
->setLastname('thelia')
->setLogin($login)
->setPassword('azerty')
->setLocale($locale)
->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"))
;
$admin = new Administrator();
$admin->create($adminEvent);
$createdAdmin = $adminEvent->getAdministrator();
$this->assertInstanceOf("Thelia\Model\Admin", $createdAdmin);
$this->assertFalse($createdAdmin->isNew());
$this->assertEquals($adminEvent->getFirstname(), $createdAdmin->getFirstname());
$this->assertEquals($adminEvent->getLastname(), $createdAdmin->getLastname());
$this->assertEquals($adminEvent->getLogin(), $createdAdmin->getLogin());
$this->assertEquals($adminEvent->getLocale(), $createdAdmin->getLocale());
$this->assertEquals($adminEvent->getProfile(), $createdAdmin->getProfileId());
$this->assertTrue(password_verify($adminEvent->getPassword(), $createdAdmin->getPassword()));
}
public function testUpdate()
{
$admin = AdminQuery::create()->findOne();
$login = 'thelia'.uniqid();
$locale = LangQuery::create()->findOne()->getLocale();
$adminEvent = new AdministratorEvent();
$adminEvent
->setId($admin->getId())
->setFirstname('thelia_update')
->setLastname('thelia_update')
->setLogin($login)
->setPassword('azertyuiop')
->setLocale($locale)
->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"))
;
$actionAdmin = new Administrator();
$actionAdmin->update($adminEvent);
$updatedAdmin = $adminEvent->getAdministrator();
$this->assertInstanceOf("Thelia\Model\Admin", $updatedAdmin);
$this->assertFalse($updatedAdmin->isNew());
$this->assertEquals($adminEvent->getFirstname(), $updatedAdmin->getFirstname());
$this->assertEquals($adminEvent->getLastname(), $updatedAdmin->getLastname());
$this->assertEquals($adminEvent->getLogin(), $updatedAdmin->getLogin());
$this->assertEquals($adminEvent->getLocale(), $updatedAdmin->getLocale());
$this->assertEquals($adminEvent->getProfile(), $updatedAdmin->getProfileId());
$this->assertTrue(password_verify($adminEvent->getPassword(), $updatedAdmin->getPassword()));
}
public function testDelete()
{
$admin = AdminQuery::create()->findOne();
$adminEvent = new AdministratorEvent();
$adminEvent
->setId($admin->getId())
->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"))
;
$actionAdmin = new Administrator();
$actionAdmin->delete($adminEvent);
$deletedAdmin = $adminEvent->getAdministrator();
$this->assertInstanceOf("Thelia\Model\Admin", $deletedAdmin);
$this->assertTrue($deletedAdmin->isDeleted());
}
public function testUpdatePassword()
{
$admin = AdminQuery::create()->findOne();
$adminEvent = new AdministratorUpdatePasswordEvent($admin);
$adminEvent
->setPassword('toto')
->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"));
$actionAdmin = new Administrator();
$actionAdmin->updatePassword($adminEvent);
$updatedAdmin = $adminEvent->getAdmin();
$this->assertInstanceOf("Thelia\Model\Admin", $updatedAdmin);
$this->assertTrue(password_verify($adminEvent->getPassword(), $updatedAdmin->getPassword()));
}
}

View File

@@ -24,6 +24,9 @@
namespace Thelia\Tests\Action\ImageTest;
use Thelia\Action\Customer;
use Thelia\Core\Event\Customer\CustomerCreateOrUpdateEvent;
use Thelia\Core\HttpFoundation\Request;
use Thelia\Core\Security\SecurityContext;
use Thelia\Model\CustomerQuery;
/**
* Class CustomerTest
@@ -32,15 +35,12 @@ use Thelia\Core\Event\Customer\CustomerCreateOrUpdateEvent;
*/
class CustomerTest extends \PHPUnit_Framework_TestCase
{
public function getContainer()
public static function setUpBeforeClass()
{
$container = new \Symfony\Component\DependencyInjection\ContainerBuilder();
$dispatcher = $this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface");
$container->set("event_dispatcher", $dispatcher);
return $container;
CustomerQuery::create()
->filterByRef('testRef')
->delete();
}
public function testCreatedCustomer()
@@ -67,7 +67,9 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
null
);
$customerAction = new Customer($this->getContainer());
$customerCreateEvent->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"));
$customerAction = new Customer(new SecurityContext(new Request()));
$customerAction->create($customerCreateEvent);
@@ -126,7 +128,9 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
'testRef'
);
$customerAction = new Customer($this->getContainer());
$customerCreateEvent->setDispatcher($this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface"));
$customerAction = new Customer(new SecurityContext(new Request()));
$customerAction->create($customerCreateEvent);

View File

@@ -0,0 +1,57 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Tools;
use Symfony\Component\HttpFoundation\Request;
class MoneyFormat extends NumberFormat
{
public static function getInstance(Request $request)
{
return new MoneyFormat($request);
}
/**
* Get a standard number, with '.' as decimal point no thousands separator, and no currency symbol
* so that this number can be used to perform calculations.
*
* @param float $number the number
* @param string $decimals number of decimal figures
*/
public function formatStandardMoney($number, $decimals = null)
{
return parent::formatStandardNumber($number, $decimals);
}
public function format($number, $decimals = null, $decPoint = null, $thousandsSep = null, $symbol = null)
{
$number = parent::format($number, $decimals, $decPoint, $thousandsSep);
if ($symbol !== null) {
// FIXME: should be a parameter related to i18n configuration
$number = $number . ' ' . $symbol;
}
return $number;
}
}

View File

@@ -154,7 +154,8 @@ class URL
$sepChar = strstr($base, '?') === false ? '?' : '&';
if ('' !== $queryString = rtrim($queryString, "&")) $queryString = $sepChar . $queryString;
return $base . $queryString;
return rtrim($base, '&') . $queryString;
}
/**

View File

@@ -101,6 +101,10 @@ try {
->find();
$customer->delete();
$admin = Thelia\Model\AdminQuery::create()
->find();
$admin->delete();
$folder = Thelia\Model\FolderQuery::create()
->find();
$folder->delete();
@@ -183,6 +187,17 @@ try {
;
}
for ($i=0; $i<3; $i++) {
$admin = new Thelia\Model\Admin();
$admin
->setFirstname($faker->firstname)
->setLastname($faker->lastname)
->setLogin($faker->firstname)
->setPassword('azerty')
->setLocale('en_US')
->save();
}
for ($i = 0; $i < 50; $i++) {
$customer = new Thelia\Model\Customer();
$customer->createOrUpdate(

View File

@@ -32,16 +32,19 @@ INSERT INTO `config` (`name`, `value`, `secured`, `hidden`, `created_at`, `updat
('url_site','', 0, 0, NOW(), NOW()),
('pdf_invoice_file', 'invoice', 0, 0, NOW(), NOW()),
('pdf_delivery_file', 'delivery', 0, 0, NOW(), NOW()),
('unknown-flag-path','assets/img/flags/unknown.png', 0, 0, NOW(), NOW()),
('session_config.default', '1', 1, 1, NOW(), NOW()),
('default_lang_without_translation', '1', 1, 1, NOW(), NOW()),
('store_name','', 0, 1, NOW(), NOW()),
('store_email','', 0, 1, NOW(), NOW()),
('one_domain_foreach_lang','0', 1, 1, NOW(), NOW()),
('thelia_version','2.0.0-beta3', 1, 1, NOW(), NOW()),
('thelia_version','2.0.0-beta4', 1, 1, NOW(), NOW()),
('thelia_major_version','2', 1, 1, NOW(), NOW()),
('thelia_minus_version','0', 1, 1, NOW(), NOW()),
('thelia_release_version','0', 1, 1, NOW(), NOW()),
('thelia_extra_version','beta3', 1, 1, NOW(), NOW());
('thelia_extra_version','beta4', 1, 1, NOW(), NOW());
INSERT INTO `config_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `postscriptum`) VALUES
(1, 'en_US', 'Class name of the session handler', NULL, NULL, NULL),
@@ -70,7 +73,8 @@ INSERT INTO `config_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `pos
(24, 'en_US', '"Remember me" cookie expiration time, in seconds, for customer users', NULL, NULL, NULL),
(25, 'en_US', 'Base URL of the shop (e.g. http://www.yourshopdomain.com)', NULL, NULL, NULL),
(26, 'en_US', 'Name of the invoice view in the current PDF template (without extension)', NULL, NULL, NULL),
(27, 'en_US', 'Name of the delivery view in the current PDF template (without extension)', NULL, NULL, NULL);
(27, 'en_US', 'Name of the delivery view in the current PDF template (without extension)', NULL, NULL, NULL),
(28, 'en_US', 'The path (relative to the default back-office template) to the image used when no flag image can be found for a country', NULL, NULL, NULL);
INSERT INTO `module` (`id`, `code`, `type`, `activate`, `position`, `full_namespace`, `created_at`, `updated_at`) VALUES
(1, 'TheliaDebugBar', 1, 1, 1, 'TheliaDebugBar\\TheliaDebugBar', NOW(), NOW()),

View File

@@ -20,8 +20,10 @@ CREATE TABLE `category`
`version` INTEGER DEFAULT 0,
`version_created_at` DATETIME,
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
PRIMARY KEY (`id`),
INDEX `idx_parent` (`parent`),
INDEX `idx_parent_position` (`parent`, `position`)
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product
@@ -54,7 +56,7 @@ CREATE TABLE `product`
CONSTRAINT `fk_product_template`
FOREIGN KEY (`template_id`)
REFERENCES `template` (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_category
@@ -83,7 +85,7 @@ CREATE TABLE `product_category`
REFERENCES `category` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- country
@@ -109,7 +111,7 @@ CREATE TABLE `country`
REFERENCES `area` (`id`)
ON UPDATE RESTRICT
ON DELETE SET NULL
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- tax
@@ -125,7 +127,7 @@ CREATE TABLE `tax`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- tax_rule
@@ -140,7 +142,7 @@ CREATE TABLE `tax_rule`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- tax_rule_country
@@ -175,7 +177,7 @@ CREATE TABLE `tax_rule_country`
REFERENCES `country` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- feature
@@ -191,7 +193,7 @@ CREATE TABLE `feature`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- feature_av
@@ -213,7 +215,7 @@ CREATE TABLE `feature_av`
REFERENCES `feature` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- feature_product
@@ -250,7 +252,7 @@ CREATE TABLE `feature_product`
REFERENCES `feature_av` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- feature_template
@@ -277,7 +279,7 @@ CREATE TABLE `feature_template`
CONSTRAINT `fk_feature_template`
FOREIGN KEY (`template_id`)
REFERENCES `template` (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- attribute
@@ -292,7 +294,7 @@ CREATE TABLE `attribute`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- attribute_av
@@ -314,7 +316,7 @@ CREATE TABLE `attribute_av`
REFERENCES `attribute` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- attribute_combination
@@ -348,7 +350,7 @@ CREATE TABLE `attribute_combination`
REFERENCES `product_sale_elements` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_sale_elements
@@ -377,7 +379,7 @@ CREATE TABLE `product_sale_elements`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- attribute_template
@@ -404,7 +406,7 @@ CREATE TABLE `attribute_template`
CONSTRAINT `fk_attribute_template`
FOREIGN KEY (`template_id`)
REFERENCES `template` (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- config
@@ -423,7 +425,7 @@ CREATE TABLE `config`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- customer
@@ -457,7 +459,7 @@ CREATE TABLE `customer`
REFERENCES `customer_title` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- address
@@ -504,7 +506,7 @@ CREATE TABLE `address`
REFERENCES `country` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- customer_title
@@ -520,7 +522,7 @@ CREATE TABLE `customer_title`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- lang
@@ -546,7 +548,7 @@ CREATE TABLE `lang`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder
@@ -566,7 +568,7 @@ CREATE TABLE `folder`
`version_created_at` DATETIME,
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content
@@ -585,7 +587,7 @@ CREATE TABLE `content`
`version_created_at` DATETIME,
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_image
@@ -608,7 +610,7 @@ CREATE TABLE `product_image`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_document
@@ -631,7 +633,7 @@ CREATE TABLE `product_document`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order
@@ -710,7 +712,7 @@ CREATE TABLE `order`
REFERENCES `lang` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- currency
@@ -729,7 +731,7 @@ CREATE TABLE `currency`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_address
@@ -754,7 +756,7 @@ CREATE TABLE `order_address`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_product
@@ -791,7 +793,7 @@ CREATE TABLE `order_product`
REFERENCES `order` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_status
@@ -807,7 +809,7 @@ CREATE TABLE `order_status`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_product_attribute_combination
@@ -836,7 +838,7 @@ CREATE TABLE `order_product_attribute_combination`
REFERENCES `order_product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- module
@@ -856,7 +858,7 @@ CREATE TABLE `module`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- accessory
@@ -885,7 +887,7 @@ CREATE TABLE `accessory`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- area
@@ -901,7 +903,7 @@ CREATE TABLE `area`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- area_delivery_module
@@ -930,7 +932,7 @@ CREATE TABLE `area_delivery_module`
REFERENCES `module` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- profile
@@ -946,7 +948,7 @@ CREATE TABLE `profile`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- resource
@@ -962,7 +964,7 @@ CREATE TABLE `resource`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- admin
@@ -978,6 +980,7 @@ CREATE TABLE `admin`
`lastname` VARCHAR(100) NOT NULL,
`login` VARCHAR(100) NOT NULL,
`password` VARCHAR(128) NOT NULL,
`locale` VARCHAR(45) NOT NULL,
`algo` VARCHAR(128),
`salt` VARCHAR(128),
`remember_me_token` VARCHAR(255),
@@ -992,7 +995,7 @@ CREATE TABLE `admin`
REFERENCES `profile` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- profile_resource
@@ -1020,7 +1023,7 @@ CREATE TABLE `profile_resource`
REFERENCES `resource` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- profile_module
@@ -1048,7 +1051,7 @@ CREATE TABLE `profile_module`
REFERENCES `module` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- message
@@ -1072,7 +1075,7 @@ CREATE TABLE `message`
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- coupon
@@ -1085,7 +1088,7 @@ CREATE TABLE `coupon`
`id` INTEGER NOT NULL AUTO_INCREMENT,
`code` VARCHAR(45) NOT NULL,
`type` VARCHAR(255) NOT NULL,
`serialized_effects` TEXT NOT NULL,
`serialized_effects` LONGTEXT NOT NULL,
`is_enabled` TINYINT(1) NOT NULL,
`expiration_date` DATETIME NOT NULL,
`max_usage` INTEGER NOT NULL,
@@ -1107,7 +1110,7 @@ CREATE TABLE `coupon`
INDEX `idx_is_removing_postage` (`is_removing_postage`),
INDEX `idx_max_usage` (`max_usage`),
INDEX `idx_is_available_on_special_offers` (`is_available_on_special_offers`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- admin_log
@@ -1128,7 +1131,7 @@ CREATE TABLE `admin_log`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_folder
@@ -1157,7 +1160,7 @@ CREATE TABLE `content_folder`
REFERENCES `folder` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- cart
@@ -1202,7 +1205,7 @@ CREATE TABLE `cart`
REFERENCES `currency` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- cart_item
@@ -1242,7 +1245,7 @@ CREATE TABLE `cart_item`
REFERENCES `product_sale_elements` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_price
@@ -1270,7 +1273,7 @@ CREATE TABLE `product_price`
FOREIGN KEY (`currency_id`)
REFERENCES `currency` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_image
@@ -1293,7 +1296,7 @@ CREATE TABLE `category_image`
REFERENCES `category` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder_image
@@ -1316,7 +1319,7 @@ CREATE TABLE `folder_image`
REFERENCES `folder` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_image
@@ -1339,7 +1342,7 @@ CREATE TABLE `content_image`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_document
@@ -1362,7 +1365,7 @@ CREATE TABLE `category_document`
REFERENCES `category` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_document
@@ -1385,7 +1388,7 @@ CREATE TABLE `content_document`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder_document
@@ -1408,7 +1411,7 @@ CREATE TABLE `folder_document`
REFERENCES `folder` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_associated_content
@@ -1437,7 +1440,7 @@ CREATE TABLE `product_associated_content`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_associated_content
@@ -1466,7 +1469,7 @@ CREATE TABLE `category_associated_content`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- rewriting_url
@@ -1493,7 +1496,7 @@ CREATE TABLE `rewriting_url`
REFERENCES `rewriting_url` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- rewriting_argument
@@ -1515,7 +1518,7 @@ CREATE TABLE `rewriting_argument`
REFERENCES `rewriting_url` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- template
@@ -1529,7 +1532,7 @@ CREATE TABLE `template`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- module_image
@@ -1552,7 +1555,7 @@ CREATE TABLE `module_image`
REFERENCES `module` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_product_tax
@@ -1577,7 +1580,7 @@ CREATE TABLE `order_product_tax`
REFERENCES `order_product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- newsletter
@@ -1596,7 +1599,7 @@ CREATE TABLE `newsletter`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `email_UNIQUE` (`email`)
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_coupon
@@ -1628,7 +1631,7 @@ CREATE TABLE `order_coupon`
REFERENCES `order` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_i18n
@@ -1652,7 +1655,7 @@ CREATE TABLE `category_i18n`
FOREIGN KEY (`id`)
REFERENCES `category` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_i18n
@@ -1676,7 +1679,7 @@ CREATE TABLE `product_i18n`
FOREIGN KEY (`id`)
REFERENCES `product` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- country_i18n
@@ -1697,7 +1700,7 @@ CREATE TABLE `country_i18n`
FOREIGN KEY (`id`)
REFERENCES `country` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- tax_i18n
@@ -1716,7 +1719,7 @@ CREATE TABLE `tax_i18n`
FOREIGN KEY (`id`)
REFERENCES `tax` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- tax_rule_i18n
@@ -1735,7 +1738,7 @@ CREATE TABLE `tax_rule_i18n`
FOREIGN KEY (`id`)
REFERENCES `tax_rule` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- feature_i18n
@@ -1756,7 +1759,7 @@ CREATE TABLE `feature_i18n`
FOREIGN KEY (`id`)
REFERENCES `feature` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- feature_av_i18n
@@ -1777,7 +1780,7 @@ CREATE TABLE `feature_av_i18n`
FOREIGN KEY (`id`)
REFERENCES `feature_av` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- attribute_i18n
@@ -1798,7 +1801,7 @@ CREATE TABLE `attribute_i18n`
FOREIGN KEY (`id`)
REFERENCES `attribute` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- attribute_av_i18n
@@ -1819,7 +1822,7 @@ CREATE TABLE `attribute_av_i18n`
FOREIGN KEY (`id`)
REFERENCES `attribute_av` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- config_i18n
@@ -1840,7 +1843,7 @@ CREATE TABLE `config_i18n`
FOREIGN KEY (`id`)
REFERENCES `config` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- customer_title_i18n
@@ -1859,7 +1862,7 @@ CREATE TABLE `customer_title_i18n`
FOREIGN KEY (`id`)
REFERENCES `customer_title` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder_i18n
@@ -1883,7 +1886,7 @@ CREATE TABLE `folder_i18n`
FOREIGN KEY (`id`)
REFERENCES `folder` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_i18n
@@ -1907,7 +1910,7 @@ CREATE TABLE `content_i18n`
FOREIGN KEY (`id`)
REFERENCES `content` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_image_i18n
@@ -1928,7 +1931,7 @@ CREATE TABLE `product_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `product_image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_document_i18n
@@ -1949,7 +1952,7 @@ CREATE TABLE `product_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `product_document` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- currency_i18n
@@ -1967,7 +1970,7 @@ CREATE TABLE `currency_i18n`
FOREIGN KEY (`id`)
REFERENCES `currency` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- order_status_i18n
@@ -1988,7 +1991,7 @@ CREATE TABLE `order_status_i18n`
FOREIGN KEY (`id`)
REFERENCES `order_status` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- module_i18n
@@ -2009,7 +2012,7 @@ CREATE TABLE `module_i18n`
FOREIGN KEY (`id`)
REFERENCES `module` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- profile_i18n
@@ -2030,7 +2033,7 @@ CREATE TABLE `profile_i18n`
FOREIGN KEY (`id`)
REFERENCES `profile` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- resource_i18n
@@ -2051,7 +2054,7 @@ CREATE TABLE `resource_i18n`
FOREIGN KEY (`id`)
REFERENCES `resource` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- message_i18n
@@ -2072,7 +2075,7 @@ CREATE TABLE `message_i18n`
FOREIGN KEY (`id`)
REFERENCES `message` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- coupon_i18n
@@ -2092,7 +2095,7 @@ CREATE TABLE `coupon_i18n`
FOREIGN KEY (`id`)
REFERENCES `coupon` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_image_i18n
@@ -2113,7 +2116,7 @@ CREATE TABLE `category_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `category_image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder_image_i18n
@@ -2134,7 +2137,7 @@ CREATE TABLE `folder_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `folder_image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_image_i18n
@@ -2155,7 +2158,7 @@ CREATE TABLE `content_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `content_image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_document_i18n
@@ -2176,7 +2179,7 @@ CREATE TABLE `category_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `category_document` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_document_i18n
@@ -2197,7 +2200,7 @@ CREATE TABLE `content_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `content_document` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder_document_i18n
@@ -2218,7 +2221,7 @@ CREATE TABLE `folder_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `folder_document` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- template_i18n
@@ -2236,7 +2239,7 @@ CREATE TABLE `template_i18n`
FOREIGN KEY (`id`)
REFERENCES `template` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- module_image_i18n
@@ -2257,7 +2260,7 @@ CREATE TABLE `module_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `module_image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- category_version
@@ -2281,7 +2284,7 @@ CREATE TABLE `category_version`
FOREIGN KEY (`id`)
REFERENCES `category` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- product_version
@@ -2307,7 +2310,7 @@ CREATE TABLE `product_version`
FOREIGN KEY (`id`)
REFERENCES `product` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- folder_version
@@ -2331,7 +2334,7 @@ CREATE TABLE `folder_version`
FOREIGN KEY (`id`)
REFERENCES `folder` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- content_version
@@ -2354,7 +2357,7 @@ CREATE TABLE `content_version`
FOREIGN KEY (`id`)
REFERENCES `content` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- message_version
@@ -2381,7 +2384,7 @@ CREATE TABLE `message_version`
FOREIGN KEY (`id`)
REFERENCES `message` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
-- ---------------------------------------------------------------------
-- coupon_version
@@ -2394,7 +2397,7 @@ CREATE TABLE `coupon_version`
`id` INTEGER NOT NULL,
`code` VARCHAR(45) NOT NULL,
`type` VARCHAR(255) NOT NULL,
`serialized_effects` TEXT NOT NULL,
`serialized_effects` LONGTEXT NOT NULL,
`is_enabled` TINYINT(1) NOT NULL,
`expiration_date` DATETIME NOT NULL,
`max_usage` INTEGER NOT NULL,
@@ -2411,7 +2414,7 @@ CREATE TABLE `coupon_version`
FOREIGN KEY (`id`)
REFERENCES `coupon` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
) ENGINE=InnoDB CHARACTER SET='utf8';
# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -12,4 +12,12 @@ INSERT INTO `module_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `po
UPDATE `config` SET `value`='2.0.0-beta4' WHERE `name`='thelia_version';
UPDATE `config` SET `value`='beta4' WHERE `name`='thelia_extra_version';
-- Preferred locale for admin users
ALTER TABLE `admin` ADD `locale` VARCHAR(45) NOT NULL AFTER `password`;
UPDATE `admin` SET `locale`='en_US';
-- Unknown flag image path
INSERT INTO `config` (`name`, `value`, `secured`, `hidden`, `created_at`, `updated_at`) VALUES
('unknown-flag-path','assets/img/flags/unknown.png', 1, 1, NOW(), NOW());
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<database defaultIdMethod="native" name="thelia">
<vendor type="mysql">
<parameter name="Engine" value="InnoDB"/>
<parameter name="Charset" value="utf8"/>
</vendor>
<table name="category" namespace="Thelia\Model">
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
<column name="parent" type="INTEGER" />
@@ -12,6 +16,13 @@
<column name="meta_title" size="255" type="VARCHAR" />
<column name="meta_description" type="LONGVARCHAR" />
<column name="meta_keywords" type="LONGVARCHAR" />
<index name="idx_parent">
<index-column name="parent" />
</index>
<index name="idx_parent_position">
<index-column name="parent" />
<index-column name="position" />
</index>
<behavior name="i18n">
<parameter name="i18n_columns" value="title, description, chapo, postscriptum, meta_title, meta_description, meta_keywords" />
</behavior>
@@ -774,6 +785,7 @@
<column name="lastname" required="true" size="100" type="VARCHAR" />
<column name="login" required="true" size="100" type="VARCHAR" />
<column name="password" required="true" size="128" type="VARCHAR" />
<column name="locale" required="true" size="45" type="VARCHAR" />
<column name="algo" size="128" type="VARCHAR" />
<column name="salt" size="128" type="VARCHAR" />
<column name="remember_me_token" size="255" type="VARCHAR" />
@@ -853,7 +865,7 @@
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
<column name="code" required="true" size="45" type="VARCHAR" />
<column name="type" required="true" size="255" type="VARCHAR" />
<column name="serialized_effects" required="true" type="LONGVARCHAR" />
<column name="serialized_effects" required="true" type="CLOB" />
<column name="title" required="true" size="255" type="VARCHAR" />
<column name="is_enabled" required="true" type="BOOLEAN" />
<column name="short_description" required="true" type="LONGVARCHAR" />

View File

@@ -2,7 +2,8 @@ echo off
REM @author Guillaume MOREL
REM v0.1
echo [WARN] This script will reset this Thelia2 install
echo [WARN] This script will reset this Thelia2 install, all data will be cleared.
pause
if exist local\config\database.yml (
@@ -40,10 +41,10 @@ if exist local\config\database.yml (
echo [INFO] Admin user thelia2 with password thelia2 successfully created.
echo [INFO] Activating Delivery Module(s)
echo [INFO] Activating Delivery Module
php Thelia module:activate Colissimo
echo "[INFO] Activating Payment Module(s)"
echo [INFO] Activating Payment Module
php Thelia module:activate Cheque
echo [SUCCESS] Reset done

246
templates/backOffice/default/I18n/en_US.php Normal file → Executable file
View File

@@ -4,13 +4,19 @@ return array(
' (default)' => ' (default)',
'&copy; Thelia 2013' => '&copy; Thelia 2013',
'(edit)' => '(edit)',
'14.50' => '14.50',
'<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Check the list</a> of ISO 639-1 codes' => '<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Check the list</a> of ISO 639-1 codes',
'<span id="number_of_generated_combinations">0</span> combinations' => '<span id="number_of_generated_combinations">0</span> combinations',
'<strong>Congratulations</strong>, all text is now translated !' => '<strong>Congratulations</strong>, all text is now translated !',
'<strong>Did not found any text to translate</strong>. It\'s probably normal. If not, please be sure to use Smarty\'s "intl" function in templates, or the Translator::trans() method in PHP files.' => '<strong>Did not found any text to translate</strong>. It\'s probably normal. If not, please be sure to use Smarty\'s "intl" function in templates, or the Translator::trans() method in PHP files.',
'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'A content could be attached to more than one folder. Select here the additional folders for this content.',
'A product could be attached to more than one category. Select here the additional categories for this product.' => 'A product could be attached to more than one category. Select here the additional categories for this product.',
'A short description, used when a summary or an introduction is required' => 'A short description, used when a summary or an introduction is required',
'A short post-description information' => 'A short post-description information',
'Aborted orders' => 'Aborted orders',
'Accessory title' => 'Accessory title',
'Action' => 'Action',
'Actions' => 'Actions',
'Activate this log destination' => 'Activate this log destination',
'Add' => 'Add',
'Add a new Customer' => 'Add a new Customer',
'Add a new address' => 'Add a new address',
@@ -35,6 +41,7 @@ return array(
'Add to all product templates' => 'Add to all product templates',
'Additional Folders' => 'Additional Folders',
'Additional address' => 'Additional address',
'Additional categories' => 'Additional categories',
'Address' => 'Address',
'Administration logs' => 'Administration logs',
'Administration profiles' => 'Administration profiles',
@@ -43,7 +50,6 @@ return array(
'Alpha code 2' => 'Alpha code 2',
'Alpha code 3' => 'Alpha code 3',
'Amount' => 'Amount',
'Amount :' => 'Amount :',
'An error occured' => 'An error occured',
'And' => 'And',
'Application field' => 'Application field',
@@ -62,19 +68,28 @@ return array(
'Average cart' => 'Average cart',
'Back' => 'Back',
'Back-office home' => 'Back-office home',
'Back-office templates' => 'Back-office templates',
'Back-office users' => 'Back-office users',
'Browse' => 'Browse',
'Browse files' => 'Browse files',
'Browse this category' => 'Browse this category',
'Browse this folder' => 'Browse this folder',
'Can\'t be cumulative' => 'Can\'t be cumulative',
'Can\'t load documents, please refresh this page.' => 'Can\'t load documents, please refresh this page.',
'Can\'t load images, please refresh this page.' => 'Can\'t load images, please refresh this page.',
'Can\'t reorder documents, please refresh this page.' => 'Can\'t reorder documents, please refresh this page.',
'Can\'t reorder images, please refresh this page.' => 'Can\'t reorder images, please refresh this page.',
'Cancel' => 'Cancel',
'Cancel changes and revert to original value' => 'Cancel changes and revert to original value',
'Cancel this order' => 'Cancel this order',
'Cart' => 'Cart',
'Cart - Prices in %currency' => 'Cart - Prices in %currency',
'Catalog' => 'Catalog',
'Categories' => 'Categories',
'Categories in %cat' => 'Categories in %cat',
'Category created on %date_create. Last modification: %date_change' => 'Category created on %date_create. Last modification: %date_change',
'Category title' => 'Category title',
'Cellular phone' => 'Cellular phone',
'Cellular phone number' => 'Cellular phone number',
'Change this administrator' => 'Change this administrator',
'Change this attribute' => 'Change this attribute',
'Change this country' => 'Change this country',
@@ -85,12 +100,14 @@ return array(
'Change this product attribute' => 'Change this product attribute',
'Change this product feature' => 'Change this product feature',
'Change this product template' => 'Change this product template',
'Change this profile' => 'Change this profile',
'Change this shipping configuration' => 'Change this shipping configuration',
'Change this shipping zone' => 'Change this shipping zone',
'Change this tax' => 'Change this tax',
'Change this tax rule' => 'Change this tax rule',
'Change this template' => 'Change this template',
'Change this variable' => 'Change this variable',
'Chapo' => 'Chapo',
'Check this box if you want to add this attributes to all product templates' => 'Check this box if you want to add this attributes to all product templates',
'Check this box if you want to add this features to all product templates' => 'Check this box if you want to add this features to all product templates',
'Choose a country' => 'Choose a country',
@@ -105,14 +122,19 @@ return array(
'Combination builder' => 'Combination builder',
'Combination reference' => 'Combination reference',
'Company' => 'Company',
'Condition type :' => 'Condition type :',
'Condition\'s category :' => 'Condition\'s category :',
'Conditions' => 'Conditions',
'Configuration' => 'Configuration',
'Configuration mailing system' => 'Configuration mailing system',
'Configure' => 'Configure',
'Configure this module' => 'Configure this module',
'Confirm' => 'Confirm',
'Confirm changes' => 'Confirm changes',
'Confirmation' => 'Confirmation',
'Content title' => 'Content title',
'Contents in %fold' => 'Contents in %fold',
'Copy source text in input field' => 'Copy source text in input field',
'Countries' => 'Countries',
'Countries that have the same tax rule' => 'Countries that have the same tax rule',
'Country' => 'Country',
@@ -125,6 +147,7 @@ return array(
'Coupons' => 'Coupons',
'Coupons : ' => 'Coupons : ',
'Create' => 'Create',
'Create a customer address' => 'Create a customer address',
'Create a new administrator' => 'Create a new administrator',
'Create a new attribute' => 'Create a new attribute',
'Create a new attribute value' => 'Create a new attribute value',
@@ -178,18 +201,22 @@ return array(
'Customer informations' => 'Customer informations',
'Customers' => 'Customers',
'Customers list' => 'Customers list',
'Cutomer Name' => 'Cutomer Name',
'Dashboard' => 'Dashboard',
'Date & Hour' => 'Date & Hour',
'Date of last order' => 'Date of last order',
'Days before expiration' => 'Days before expiration',
'Deactivate %title module' => 'Deactivate %title module',
'Default' => 'Default',
'Default address' => 'Default address',
'Define here this product\'s accessories' => 'Define here this product\'s accessories',
'Delete' => 'Delete',
'Delete a combination' => 'Delete a combination',
'Delete a module' => 'Delete a module',
'Delete a variable' => 'Delete a variable',
'Delete address' => 'Delete address',
'Delete administrator' => 'Delete administrator',
'Delete also module data' => 'Delete also module data',
'Delete an order' => 'Delete an order',
'Delete attribute' => 'Delete attribute',
'Delete attribute value' => 'Delete attribute value',
@@ -209,6 +236,9 @@ return array(
'Delete tax' => 'Delete tax',
'Delete tax rule' => 'Delete tax rule',
'Delete template' => 'Delete template',
'Delete this accessory' => 'Delete this accessory',
'Delete this administrator' => 'Delete this administrator',
'Delete this attribute' => 'Delete this attribute',
'Delete this category and all its contents' => 'Delete this category and all its contents',
'Delete this combination' => 'Delete this combination',
'Delete this content' => 'Delete this content',
@@ -224,6 +254,7 @@ return array(
'Delete this product attribute' => 'Delete this product attribute',
'Delete this product feature' => 'Delete this product feature',
'Delete this product template' => 'Delete this product template',
'Delete this profile' => 'Delete this profile',
'Delete this shipping configuration' => 'Delete this shipping configuration',
'Delete this tax' => 'Delete this tax',
'Delete this tax rule' => 'Delete this tax rule',
@@ -234,6 +265,7 @@ return array(
'Delivery module' => 'Delivery module',
'Delivery modules' => 'Delivery modules',
'Description' => 'Description',
'Destinations' => 'Destinations',
'Details' => 'Details',
'Disabled coupons' => 'Disabled coupons',
'Discount' => 'Discount',
@@ -267,73 +299,113 @@ return array(
'Do you really want to delete this variable ?' => 'Do you really want to delete this variable ?',
'Do you really want to enable this element ?' => 'Do you really want to enable this element ?',
'Do you really want to remove the content from this folder ?' => 'Do you really want to remove the content from this folder ?',
'Do you really want to remove the product from this category ?' => 'Do you really want to remove the product from this category ?',
'Do you really want to remove this accessory from the product ?' => 'Do you really want to remove this accessory from the product ?',
'Do you really want to remove this attribute from all product templates ? You\'ll loose all product related data for this attribute.' => 'Do you really want to remove this attribute from all product templates ? You\'ll loose all product related data for this attribute.',
'Do you really want to remove this attribute from the template ?' => 'Do you really want to remove this attribute from the template ?',
'Do you really want to remove this country ?' => 'Do you really want to remove this country ?',
'Do you really want to remove this feature from all product templates ? You\'ll loose all product related data for this feature.' => 'Do you really want to remove this feature from all product templates ? You\'ll loose all product related data for this feature.',
'Do you really want to remove this feature from the template ?' => 'Do you really want to remove this feature from the template ?',
'Do you really want to remove this related content ?' => 'Do you really want to remove this related content ?',
'Do you really want to remove this related content from the product ?' => 'Do you really want to remove this related content from the product ?',
'Do you really want to remove this zone ?' => 'Do you really want to remove this zone ?',
'Do you really want to set this coupon available to everyone ?' => 'Do you really want to set this coupon available to everyone ?',
'Do you really want to use this address by default ?' => 'Do you really want to use this address by default ?',
'Document' => 'Document',
'Document informations' => 'Document informations',
'Documents' => 'Documents',
'Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.' => 'Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.',
'Download invoice as PDF' => 'Download invoice as PDF',
'Download purchase order as PDF' => 'Download purchase order as PDF',
'Drop files to upload' => 'Drop files to upload',
'Drop tax here to create a tax group' => 'Drop tax here to create a tax group',
'Drop tax here to delete from group' => 'Drop tax here to delete from group',
'E-mail templates' => 'E-mail templates',
'EAN Code' => 'EAN Code',
'Ecotax is a tax wich add a defined amount (throug a product feature) to the product price.' => 'Ecotax is a tax wich add a defined amount (throug a product feature) to the product price.',
'Edit' => 'Edit',
'Edit a country' => 'Edit a country',
'Edit a currency' => 'Edit a currency',
'Edit a customer' => 'Edit a customer',
'Edit a customer address' => 'Edit a customer address',
'Edit a document' => 'Edit a document',
'Edit a feature' => 'Edit a feature',
'Edit a language' => 'Edit a language',
'Edit a mailing template' => 'Edit a mailing template',
'Edit a module' => 'Edit a module',
'Edit a profile' => 'Edit a profile',
'Edit a shipping configuration' => 'Edit a shipping configuration',
'Edit a shipping zone' => 'Edit a shipping zone',
'Edit a system variable' => 'Edit a system variable',
'Edit a tax' => 'Edit a tax',
'Edit a tax rule' => 'Edit a tax rule',
'Edit a template' => 'Edit a template',
'Edit an attribute' => 'Edit an attribute',
'Edit an image' => 'Edit an image',
'Edit an order' => 'Edit an order',
'Edit attribute "%name"' => 'Edit attribute "%name"',
'Edit category' => 'Edit category',
'Edit category %title' => 'Edit category %title',
'Edit content' => 'Edit content',
'Edit content %title' => 'Edit content %title',
'Edit country "%name"' => 'Edit country "%name"',
'Edit currency "%name"' => 'Edit currency "%name"',
'Edit customer %firstname %lastname' => 'Edit customer %firstname %lastname',
'Edit delivery address' => 'Edit delivery address',
'Edit document "%name"' => 'Edit document "%name"',
'Edit feature "%name"' => 'Edit feature "%name"',
'Edit folder' => 'Edit folder',
'Edit folder %title' => 'Edit folder %title',
'Edit image "%name"' => 'Edit image "%name"',
'Edit information in %lng' => 'Edit information in %lng',
'Edit invoice address' => 'Edit invoice address',
'Edit mailing template "%name"' => 'Edit mailing template "%name"',
'Edit next category' => 'Edit next category',
'Edit next content' => 'Edit next content',
'Edit next folder' => 'Edit next folder',
'Edit next product' => 'Edit next product',
'Edit order address' => 'Edit order address',
'Edit previous category' => 'Edit previous category',
'Edit previous content' => 'Edit previous content',
'Edit previous folder' => 'Edit previous folder',
'Edit previous product' => 'Edit previous product',
'Edit prices in %curr' => 'Edit prices in %curr',
'Edit product' => 'Edit product',
'Edit product %title' => 'Edit product %title',
'Edit shipping configuration %title' => 'Edit shipping configuration %title',
'Edit shipping zone %title' => 'Edit shipping zone %title',
'Edit tax rule taxes' => 'Edit tax rule taxes',
'Edit template "%name"' => 'Edit template "%name"',
'Edit this address' => 'Edit this address',
'Edit this category' => 'Edit this category',
'Edit this content' => 'Edit this content',
'Edit this customer' => 'Edit this customer',
'Edit this folder' => 'Edit this folder',
'Edit this language' => 'Edit this language',
'Edit this module' => 'Edit this module',
'Edit this order' => 'Edit this order',
'Edit this product' => 'Edit this product',
'Edit variable %name' => 'Edit variable %name',
'Editing %cat' => 'Editing %cat',
'Editing %fold' => 'Editing %fold',
'Editing %title' => 'Editing %title',
'Editing attribute "%name"' => 'Editing attribute "%name"',
'Editing country "%name"' => 'Editing country "%name"',
'Editing currency "%name"' => 'Editing currency "%name"',
'Editing customer "%name"' => 'Editing customer "%name"',
'Editing document "%name"' => 'Editing document "%name"',
'Editing feature "%name"' => 'Editing feature "%name"',
'Editing image "%name"' => 'Editing image "%name"',
'Editing mailing template "%name"' => 'Editing mailing template "%name"',
'Editing module' => 'Editing module',
'Editing profile' => 'Editing profile',
'Editing shipping configuration "%name"' => 'Editing shipping configuration "%name"',
'Editing shipping zone "%name"' => 'Editing shipping zone "%name"',
'Editing tax' => 'Editing tax',
'Editing tax rule' => 'Editing tax rule',
'Editing template "%name"' => 'Editing template "%name"',
'Editing variable "%name"' => 'Editing variable "%name"',
'Email address' => 'Email address',
'Email used when you send an email to your customers (Order confirmations, etc).' => 'Email used when you send an email to your customers (Order confirmations, etc).',
'Enable remote SMTP use : ' => 'Enable remote SMTP use : ',
'Enable/Disable' => 'Enable/Disable',
'Enabled coupons' => 'Enabled coupons',
@@ -341,22 +413,33 @@ return array(
'Encryption :' => 'Encryption :',
'Enter here all possible attribute values.' => 'Enter here all possible attribute values.',
'Enter here all possible feature values. To get a free text feature in product forms, don\'t add any value.' => 'Enter here all possible feature values. To get a free text feature in product forms, don\'t add any value.',
'Enter here the attribute name in the default language (%language_name)' => 'Enter here the attribute name in the default language (%language_name)',
'Enter here the category name in the default language (%title)' => 'Enter here the category name in the default language (%title)',
'Enter here the content name in the default language (%title)' => 'Enter here the content name in the default language (%title)',
'Enter here the currency name in the default language (%title)' => 'Enter here the currency name in the default language (%title)',
'Enter here the feature name in the default language (%title)' => 'Enter here the feature name in the default language (%title)',
'Enter here the feature value as free text' => 'Enter here the feature value as free text',
'Enter here the folder name in the default language (%title)' => 'Enter here the folder name in the default language (%title)',
'Enter here the mailing template purpose in the default language (%title)' => 'Enter here the mailing template purpose in the default language (%title)',
'Enter here the product name in the default language (%title)' => 'Enter here the product name in the default language (%title)',
'Enter here the product price in the default currency (%title)' => 'Enter here the product price in the default currency (%title)',
'Enter here the product reference' => 'Enter here the product reference',
'Enter here the product weight, in Kilogrammes' => 'Enter here the product weight, in Kilogrammes',
'Enter here the template name in the default language (%title)' => 'Enter here the template name in the default language (%title)',
'Enter here the value in the current edit language (%language_name)' => 'Enter here the value in the current edit language (%language_name)',
'Enter here the value in the current edit language (%title)' => 'Enter here the value in the current edit language (%title)',
'Enter new accessory position' => 'Enter new accessory position',
'Enter new attribute position' => 'Enter new attribute position',
'Enter new category position' => 'Enter new category position',
'Enter new content position' => 'Enter new content position',
'Enter new currency position' => 'Enter new currency position',
'Enter new feature position' => 'Enter new feature position',
'Enter new folder position' => 'Enter new folder position',
'Enter new module position' => 'Enter new module position',
'Enter new product position' => 'Enter new product position',
'Enter new value position' => 'Enter new value position',
'Enter one or more IP V4 addresses separated by ";". Leave empty to display logs for all IP addresses' => 'Enter one or more IP V4 addresses separated by ";". Leave empty to display logs for all IP addresses',
'Enter one or more file names without path separated by ";". Use "!" before a file name to exclude it. Use "*" to activate logs for all files.' => 'Enter one or more file names without path separated by ";". Use "!" before a file name to exclude it. Use "*" to activate logs for all files.',
'Error' => 'Error',
'Example :' => 'Example :',
'Existing combinations will be deleted. Do you want to continue ?' => 'Existing combinations will be deleted. Do you want to continue ?',
@@ -364,6 +447,7 @@ return array(
'Expiration date :' => 'Expiration date :',
'Failed to get converted prices. Please try again.' => 'Failed to get converted prices. Please try again.',
'Failed to get prices. Please try again.' => 'Failed to get prices. Please try again.',
'Fax number' => 'Fax number',
'Feature Name' => 'Feature Name',
'Feature information' => 'Feature information',
'Feature title' => 'Feature title',
@@ -371,7 +455,11 @@ return array(
'Feature value for this product' => 'Feature value for this product',
'Feature values' => 'Feature values',
'Features' => 'Features',
'File' => 'File',
'File names' => 'File names',
'Files manager' => 'Files manager',
'First Name' => 'First Name',
'First name' => 'First name',
'First orders' => 'First orders',
'FirstName' => 'FirstName',
'Firstname' => 'Firstname',
@@ -382,32 +470,45 @@ return array(
'French 19.6% VAT is a tax which add a 19.6% tax to the product price.' => 'French 19.6% VAT is a tax which add a 19.6% tax to the product price.',
'French 19.6% VAT with ecotax is the applicance of the ecotax (on the product price) then the applicance of the 19.6% tax (on the product price + the ecotax amount).' => 'French 19.6% VAT with ecotax is the applicance of the ecotax (on the product price) then the applicance of the 19.6% tax (on the product price + the ecotax amount).',
'From' => 'From',
'Front-office templates' => 'Front-office templates',
'General' => 'General',
'General configuration' => 'General configuration',
'General description' => 'General description',
'Go to administration home' => 'Go to administration home',
'H:i:s' => 'H:i:s',
'HTML version of this message' => 'HTML version of this message',
'Home' => 'Home',
'Host' => 'Host',
'Host :' => 'Host :',
'ID' => 'ID',
'IP Addresses' => 'IP Addresses',
'ISO 4217 Code' => 'ISO 4217 Code',
'ISO 4217 code' => 'ISO 4217 code',
'ISO 639 Code' => 'ISO 639 Code',
'ISO Code' => 'ISO Code',
'If a translation is missing or incomplete :' => 'If a translation is missing or incomplete :',
'If yes, redirections through Redirect::exec() will be displayed as links' => 'If yes, redirections through Redirect::exec() will be displayed as links',
'Il seems that this string contains a Smarty variable (&#36;). If \'s the case, it cannot be transleted properly.' => 'Il seems that this string contains a Smarty variable (&#36;). If \'s the case, it cannot be transleted properly.',
'Image' => 'Image',
'Image information' => 'Image information',
'Images' => 'Images',
'Impossible to change default country. Please contact your administrator or try later' => 'Impossible to change default country. Please contact your administrator or try later',
'Impossible to change default languages. Please contact your administrator or try later' => 'Impossible to change default languages. Please contact your administrator or try later',
'In order to manges your shop taxes you can manage' => 'In order to manges your shop taxes you can manage',
'In page' => 'In page',
'In pages:' => 'In pages:',
'Install a new module' => 'Install a new module',
'Invoice and Delivery' => 'Invoice and Delivery',
'Invoice date' => 'Invoice date',
'Invoice informations' => 'Invoice informations',
'Invoice reference' => 'Invoice reference',
'Is available on special offers' => 'Is available on special offers',
'Is cumulative' => 'Is cumulative',
'Is disabled' => 'Is disabled',
'Is enabled' => 'Is enabled',
'Is removing postage' => 'Is removing postage',
'Is unlimited' => 'Is unlimited',
'Keep the most important part of your description in the first 150-160 characters.' => 'Keep the most important part of your description in the first 150-160 characters.',
'Kg' => 'Kg',
'Label' => 'Label',
'Language name' => 'Language name',
@@ -415,13 +516,19 @@ return array(
'Languages' => 'Languages',
'Languages &amp; URLs' => 'Languages &amp; URLs',
'Languages management' => 'Languages management',
'Last Name' => 'Last Name',
'Last name' => 'Last name',
'Last order amount' => 'Last order amount',
'LastName' => 'LastName',
'Lastname' => 'Lastname',
'Latest version available' => 'Latest version available',
'Leave empty to keep current password' => 'Leave empty to keep current password',
'Lire la suite' => 'Lire la suite',
'List' => 'List',
'Loading Thelia lastest news...' => 'Loading Thelia lastest news...',
'Locale' => 'Locale',
'Log lines format' => 'Log lines format',
'Log lines header format. You may use the following variables: ' => 'Log lines header format. You may use the following variables: ',
'Login' => 'Login',
'Logout' => 'Logout',
'Long description :' => 'Long description :',
@@ -429,11 +536,20 @@ return array(
'Mailing template name' => 'Mailing template name',
'Mailing template purpose' => 'Mailing template purpose',
'Mailing templates' => 'Mailing templates',
'Make sure it uses keywords found within the page itself.' => 'Make sure it uses keywords found within the page itself.',
'Make sure that your title is clear, and contains many of the keywords within the page itself.' => 'Make sure that your title is clear, and contains many of the keywords within the page itself.',
'Manage module rights' => 'Manage module rights',
'Manage resource rights' => 'Manage resource rights',
'Manage taxes' => 'Manage taxes',
'Manage the tax rule taxes appliance order' => 'Manage the tax rule taxes appliance order',
'Max usage :' => 'Max usage :',
'May be cumulative' => 'May be cumulative',
'Message created on %date_create. Last modification: %date_change' => 'Message created on %date_create. Last modification: %date_change',
'Message level' => 'Message level',
'Messages which have a level greater or equal to the selected level will be added to the log destinations. ' => 'Messages which have a level greater or equal to the selected level will be added to the log destinations. ',
'Module' => 'Module',
'Module access rights' => 'Module access rights',
'Module created on %date_create. Last modification: %date_change' => 'Module created on %date_create. Last modification: %date_change',
'Modules' => 'Modules',
'More information about ISO 4217' => 'More information about ISO 4217',
'NONE' => 'NONE',
@@ -445,7 +561,9 @@ return array(
'No Folders found' => 'No Folders found',
'No area defined with this id' => 'No area defined with this id',
'No available content in this folder' => 'No available content in this folder',
'No available product in this category' => 'No available product in this category',
'No available value for this attribute' => 'No available value for this attribute',
'No categories found' => 'No categories found',
'No country has been created yet. Click the + button to create one.' => 'No country has been created yet. Click the + button to create one.',
'No currency has been created yet. Click the + button to create one.' => 'No currency has been created yet. Click the + button to create one.',
'No folders found' => 'No folders found',
@@ -460,13 +578,22 @@ return array(
'Online' => 'Online',
'Online products' => 'Online products',
'Oops! An Error Occurred' => 'Oops! An Error Occurred',
'Or' => 'Or',
'Order #' => 'Order #',
'Order %ref' => 'Order %ref',
'Order n°' => 'Order n°',
'Order status:' => 'Order status:',
'Ordered products' => 'Ordered products',
'Orders' => 'Orders',
'Originating file line number ' => 'Originating file line number ',
'Originating file name' => 'Originating file name',
'Originating function name ' => 'Originating function name ',
'Other addresses' => 'Other addresses',
'Overall sales' => 'Overall sales',
'PDF templates' => 'PDF templates',
'PDF | Invoice' => 'PDF | Invoice',
'PDF | Purchase order' => 'PDF | Purchase order',
'Page not found' => 'Page not found',
'Parameters' => 'Parameters',
'Password' => 'Password',
'Password :' => 'Password :',
@@ -475,33 +602,48 @@ return array(
'Payment modules' => 'Payment modules',
'Period' => 'Period',
'Phone' => 'Phone',
'Phone number' => 'Phone number',
'Please retry' => 'Please retry',
'Please save your Coupon in oder to affect it some conditions' => 'Please save your Coupon in oder to affect it some conditions',
'Please select a condition category' => 'Please select a condition category',
'Please select a coupon type' => 'Please select a coupon type',
'Please select another condition' => 'Please select another condition',
'Please select items to translate' => 'Please select items to translate',
'Please select the B.O. template to translate' => 'Please select the B.O. template to translate',
'Please select the E-mail template to translate' => 'Please select the E-mail template to translate',
'Please select the F.O. template to translate' => 'Please select the F.O. template to translate',
'Please select the PDF template to translate' => 'Please select the PDF template to translate',
'Please select the module to translate' => 'Please select the module to translate',
'Please wait, loading' => 'Please wait, loading',
'Port' => 'Port',
'Port :' => 'Port :',
'Position' => 'Position',
'Post Scriptum' => 'Post Scriptum',
'Postage' => 'Postage',
'Postscriptum' => 'Postscriptum',
'Preview' => 'Preview',
'Preview category page' => 'Preview category page',
'Preview folder page' => 'Preview folder page',
'Preview product page' => 'Preview product page',
'Previous month sales' => 'Previous month sales',
'Previous year sales' => 'Previous year sales',
'Price' => 'Price',
'Price excl. taxes' => 'Price excl. taxes',
'Price incl. taxes' => 'Price incl. taxes',
'Price<br />w/ taxes (%currency)' => 'Price<br />w/ taxes (%currency)',
'Price<br />w/o taxes (%currency)' => 'Price<br />w/o taxes (%currency)',
'Pricing' => 'Pricing',
'Product' => 'Product',
'Product Attributes' => 'Product Attributes',
'Product EAN Code' => 'Product EAN Code',
'Product Features' => 'Product Features',
'Product accessories' => 'Product accessories',
'Product attributes' => 'Product attributes',
'Product catalog configuration' => 'Product catalog configuration',
'Product created on %date_create. Last modification: %date_change' => 'Product created on %date_create. Last modification: %date_change',
'Product features' => 'Product features',
'Product price' => 'Product price',
'Product price including taxes' => 'Product price including taxes',
'Product templates' => 'Product templates',
'Product title' => 'Product title',
'Product weight' => 'Product weight',
@@ -510,28 +652,41 @@ return array(
'Profil' => 'Profile',
'Profile' => 'Profile',
'Profile code' => 'Profile code',
'Profile created on %date_create. Last modification: %date_change' => 'Profile created on %date_create. Last modification: %date_change',
'Profiles' => 'Profiles',
'Promotion' => 'Promotion',
'Published by OpenStudio' => 'Published by OpenStudio',
'Purpose' => 'Purpose',
'Quantity' => 'Quantity',
'Quickly create combinations using the combination builder' => 'Quickly create combinations using the combination builder',
'Rate' => 'Rate',
'Rate from Euro' => 'Rate from Euro',
'Rate in &euro;' => 'Rate in &euro;',
'Read the documentation of this module' => 'Read the documentation of this module',
'Reference' => 'Reference',
'Registration date' => 'Registration date',
'Related content' => 'Related content',
'Remove an accessory' => 'Remove an accessory',
'Remove associated folder' => 'Remove associated folder',
'Remove attribute' => 'Remove attribute',
'Remove country' => 'Remove country',
'Remove feature' => 'Remove feature',
'Remove from all product templates' => 'Remove from all product templates',
'Remove from category' => 'Remove from category',
'Remove related content' => 'Remove related content',
'Remove selected values' => 'Remove selected values',
'Remove the product from this category' => 'Remove the product from this category',
'Remove this attribute from all product templates' => 'Remove this attribute from all product templates',
'Remove this feature from all product templates' => 'Remove this feature from all product templates',
'Remove zone' => 'Remove zone',
'Resource' => 'Resource',
'Resource access rights' => 'Resource access rights',
'Resources' => 'Resources',
'Rewritten URL' => 'Rewritten URL',
'Rights' => 'Rights',
'SEO' => 'SEO',
'Sale' => 'Sale',
'Sale price incl. taxes' => 'Sale price incl. taxes',
'Sale price<br />w/ taxes (%currency)' => 'Sale price<br />w/ taxes (%currency)',
'Sale price<br />w/o taxes (%currency)' => 'Sale price<br />w/o taxes (%currency)',
'Sales' => 'Sales',
@@ -541,16 +696,24 @@ return array(
'Save and close' => 'Save and close',
'Save chages' => 'Save chages',
'Save changes' => 'Save changes',
'Save this address' => 'Save this address',
'Save this condition' => 'Save this condition',
'Save your modifications' => 'Save your modifications',
'Search' => 'Search',
'Select a category and click (+) to add it to the additional category list' => 'Select a category and click (+) to add it to the additional category list',
'Select a category to get its products' => 'Select a category to get its products',
'Select a category...' => 'Select a category...',
'Select a content and click (+) to add it to this category' => 'Select a content and click (+) to add it to this category',
'Select a content and click (+) to add it to this product' => 'Select a content and click (+) to add it to this product',
'Select a folder and click (+) to add it to the additional folder list' => 'Select a folder and click (+) to add it to the additional folder list',
'Select a folder content...' => 'Select a folder content...',
'Select a folder to get its content' => 'Select a folder to get its content',
'Select a folder...' => 'Select a folder...',
'Select a product and click (+) to add it as an accessory' => 'Select a product and click (+) to add it as an accessory',
'Select a product...' => 'Select a product...',
'Select a tax tule' => 'Select a tax tule',
'Select a value click (+) to add it to the combination' => 'Select a value click (+) to add it to the combination',
'Select an attribute and click (+) to add it to this template' => 'Select an attribute and click (+) to add it to this template',
'Select an attribute and click (+) to view available values' => 'Select an attribute and click (+) to view available values',
'Select an attribute value...' => 'Select an attribute value...',
'Select an attribute...' => 'Select an attribute...',
@@ -558,8 +721,15 @@ return array(
'Select an feature...' => 'Select an feature...',
'Select attribute values to combine. You may enter a default value for some of the fields of the generated combinations.' => 'Select attribute values to combine. You may enter a default value for some of the fields of the generated combinations.',
'Select here the tax applicable to this product' => 'Select here the tax applicable to this product',
'Select the E-mail template you want to translate' => 'Select the E-mail template you want to translate',
'Select the PDF template you want to translate' => 'Select the PDF template you want to translate',
'Select the back-office template you want to translate' => 'Select the back-office template you want to translate',
'Select the front-office template you want to translate' => 'Select the front-office template you want to translate',
'Select the module you want to translate' => 'Select the module you want to translate',
'Select which items you want to translate' => 'Select which items you want to translate',
'Send a mail to this customer' => 'Send a mail to this customer',
'Send files' => 'Send files',
'Sequential number of log line' => 'Sequential number of log line',
'Set as default tax rule' => 'Set as default tax rule',
'Shipping configuration' => 'Shipping configuration',
'Shipping configuration name' => 'Shipping configuration name',
@@ -570,13 +740,31 @@ return array(
'Short description' => 'Short description',
'Short description :' => 'Short description :',
'Show logs' => 'Show logs',
'Some of your translations are not saved. Continue anyway ?' => 'Some of your translations are not saved. Continue anyway ?',
'Sorry, attribute ID=%id was not found.' => 'Sorry, attribute ID=%id was not found.',
'Sorry, country ID=%id was not found.' => 'Sorry, country ID=%id was not found.',
'Sorry, currency ID=%id was not found.' => 'Sorry, currency ID=%id was not found.',
'Sorry, customer ID=%id was not found.' => 'Sorry, customer ID=%id was not found.',
'Sorry, document ID=%id was not found.' => 'Sorry, document ID=%id was not found.',
'Sorry, feature ID=%id was not found.' => 'Sorry, feature ID=%id was not found.',
'Sorry, image ID=%id was not found.' => 'Sorry, image ID=%id was not found.',
'Sorry, message ID=%id was not found.' => 'Sorry, message ID=%id was not found.',
'Sorry, template ID=%id was not found.' => 'Sorry, template ID=%id was not found.',
'Sorry, variable ID=%id was not found.' => 'Sorry, variable ID=%id was not found.',
'Source IP' => 'Source IP',
'Source IP :' => 'Source IP :',
'Status' => 'Status',
'Stock' => 'Stock',
'Store' => 'Store',
'Store Business Identification Number (SIRET, etc).' => 'Store Business Identification Number (SIRET, etc).',
'Store address' => 'Store address',
'Store configuration' => 'Store configuration',
'Street address' => 'Street address',
'Subject' => 'Subject',
'Superadministrator' => 'Superadministrator',
'Symbol' => 'Symbol',
'System Logs' => 'System Logs',
'System Logs configuration' => 'System Logs configuration',
'System logs' => 'System logs',
'System parameters' => 'System parameters',
'System variables' => 'System variables',
@@ -584,15 +772,27 @@ return array(
'Tax created on %date_create. Last modification: %date_change' => 'Tax created on %date_create. Last modification: %date_change',
'Tax rule created on %date_create. Last modification: %date_change' => 'Tax rule created on %date_create. Last modification: %date_change',
'Tax rule taxes will be update for the following countries :' => 'Tax rule taxes will be update for the following countries :',
'Tax rules' => 'Tax rules',
'Tax rules are combination of different taxes.' => 'Tax rules are combination of different taxes.',
'Taxed total' => 'Taxed total',
'Taxes' => 'Taxes',
'Taxes define the amount of money which is added to a bought product.' => 'Taxes define the amount of money which is added to a bought product.',
'Taxes rules' => 'Taxes rules',
'Template name' => 'Template name',
'Template title' => 'Template title',
'Templates' => 'Templates',
'Text version of this message' => 'Text version of this message',
'The HTML TITLE element is the most important element on your web page.' => 'The HTML TITLE element is the most important element on your web page.',
'The default pricing is used when no combination is defined.' => 'The default pricing is used when no combination is defined.',
'The destinations processes logs to display, store or send them. You can select and configure zero, one or more destinations below.' => 'The destinations processes logs to display, store or send them. You can select and configure zero, one or more destinations below.',
'The detailed description.' => 'The detailed description.',
'The mailing template in HTML format.' => 'The mailing template in HTML format.',
'The mailing template in text-only format.' => 'The mailing template in text-only format.',
'The page you\'ve requested was not found. Please check the page address, and try again.' => 'The page you\'ve requested was not found. Please check the page address, and try again.',
'The rate from Euro (Price in Euro * rate = Price in this currency)' => 'The rate from Euro (Price in Euro * rate = Price in this currency)',
'The server returned a "404 Not Found"' => 'The server returned a "404 Not Found"',
'The symbol, such as &#36;, £, &euro;...' => 'The symbol, such as $, £, €...',
'The syntax used is identical to the PHP <a href="http://www.php.net/date" target="_other">date()</a> function' => 'The syntax used is identical to the PHP <a href="http://www.php.net/date" target="_other">date()</a> function',
'Thelia Back Office' => 'Thelia Back Office',
'Thelia Languages' => 'Thelia Languages',
'Thelia Mailing System' => 'Thelia Mailing System',
@@ -604,12 +804,16 @@ return array(
'Thelia Shipping zones' => 'Thelia Shipping zones',
'Thelia System Variables' => 'Thelia System Variables',
'Thelia configuration' => 'Thelia configuration',
'Thelia contributions' => 'Thelia contributions',
'Thelia core' => 'Thelia core',
'Thelia informations' => 'Thelia informations',
'Thelia mailing templates' => 'Thelia mailing templates',
'Thelia product attributes' => 'Thelia product attributes',
'Thelia product features' => 'Thelia product features',
'Thelia product templates' => 'Thelia product templates',
'Thelia support forum' => 'Thelia support forum',
'Thelia system variables' => 'Thelia system variables',
'Thelia, the open source e-commerce solution' => 'Thelia, the open source e-commerce solution',
'There is no documents attached to this %type.' => 'There is no documents attached to this %type.',
'There is no images attached to this %type.' => 'There is no images attached to this %type.',
'They are some administrator which are linked to this administrator. Please edit/remove them before deleting this administrator.' => 'They are some administrator which are linked to this administrator. Please edit/remove them before deleting this administrator.',
@@ -618,19 +822,32 @@ return array(
'This category doesn\'t contains any products. To add a new product, <strong>click the + button</strong> above.' => 'This category doesn\'t contains any products. To add a new product, <strong>click the + button</strong> above.',
'This category has no sub-categories.' => 'This category has no sub-categories.',
'This category has no sub-categories. To create a new one, click the + button above.' => 'This category has no sub-categories. To create a new one, click the + button above.',
'This coupon is disabled, you can enable at the bottom of this form.' => 'This coupon is disabled, you can enable at the bottom of this form.',
'This customer has not defined any delivery address' => 'This customer has not defined any delivery address',
'This folder doesn\'t contains any contents. To add a new content, <strong>click the + button</strong> above.' => 'This folder doesn\'t contains any contents. To add a new content, <strong>click the + button</strong> above.',
'This folder has no sub-folders.' => 'This folder has no sub-folders.',
'This folder has no sub-folders. To create a new one, click the + button above.' => 'This folder has no sub-folders. To create a new one, click the + button above.',
'This is the message purpose, such as \'Order confirmation\'.' => 'This is the message purpose, such as \'Order confirmation\'.',
'This is the subject of the e-mail, such as \'Your order is confirmed\'.' => 'This is the subject of the e-mail, such as \'Your order is confirmed\'.',
'This mailing template could not be changed.' => 'This mailing template could not be changed.',
'This month' => 'This month',
'This product contains no accessories' => 'This product contains no accessories',
'This product contains no contents' => 'This product contains no contents',
'This product doesn\'t belong to any additional category.' => 'This product doesn\'t belong to any additional category.',
'This product doesn\'t belong to any additional folder.' => 'This product doesn\'t belong to any additional folder.',
'This product template does not contains any features' => 'This product template does not contains any features',
'This template contains no attributes' => 'This template contains no attributes',
'This template contains no features' => 'This template contains no features',
'This the unique name of this message. Do not change this value unless you understand what you do.' => 'This the unique name of this message. Do not change this value unless you understand what you do.',
'This variable could not be changed.' => 'This variable could not be changed.',
'This year' => 'This year',
'Timeout' => 'Timeout',
'Timeout :' => 'Timeout :',
'Title' => 'Title',
'Title :' => 'Title :',
'To' => 'To',
'To create a new content, select an existing folder, or create a new one.' => 'To create a new content, select an existing folder, or create a new one.',
'To create a new product, select an existing category, or create a new one.' => 'To create a new product, select an existing category, or create a new one.',
'To remove a value from the combination, select it and click "remove"' => 'To remove a value from the combination, select it and click "remove"',
'Today' => 'Today',
'Top level' => 'Top level',
@@ -642,20 +859,27 @@ return array(
'Total including discount' => 'Total including discount',
'Total without discount' => 'Total without discount',
'Transaction reference' => 'Transaction reference',
'Translation' => 'Translation',
'Translations' => 'Translation',
'Type :' => 'Type :',
'Unit taxed price' => 'Unit taxed price',
'Unit. price' => 'Unit. price',
'Unlimited' => 'Unlimited',
'Update' => 'Update',
'Update a new administrator' => 'Update a new administrator',
'Update an administrator' => 'Update an administrator',
'Update coupon' => 'Update coupon',
'Update rates' => 'Update rates',
'Update tax rule taxes' => 'Update tax rule taxes',
'Update this image' => 'Update this image',
'Usage left' => 'Usage left',
'Use Ctrl+click to select more than one value. You can also <a href="#" class="clear_feature_value" data-id="%id">clear selected values</a>.' => 'Use Ctrl+click to select more than one value. You can also <a href="#" class="clear_feature_value" data-id="%id">clear selected values</a>.',
'Use HTML message defined below' => 'Use HTML message defined below',
'Use Text message defined below' => 'Use Text message defined below',
'Use address by default' => 'Use address by default',
'Use default layout' => 'Use default layout',
'Use the keyword phrase in your URL.' => 'Use the keyword phrase in your URL.',
'Use this address by default' => 'Use this address by default',
'Used in your store front' => 'Used in your store front',
'Username' => 'Username',
'Username :' => 'Username :',
'Using a domain or subdomain for each language' => 'Using a domain or subdomain for each language',
@@ -666,23 +890,33 @@ return array(
'Variable value' => 'Variable value',
'Version %ver' => 'Version %ver',
'View' => 'View',
'View only missing translations' => 'View only missing translations',
'View shop' => 'View shop',
'View site' => 'View site',
'Visibility' => 'Visibility',
'Warning' => 'Warning',
'Weight<br />(Kg)' => 'Weight<br />(Kg)',
'Welcome' => 'Welcome',
'Will be available on special offers' => 'Will be available on special offers',
'Will remove postage' => 'Will remove postage',
'Won\'t be available on special offers' => 'Won\'t be available on special offers',
'Won\'t remove postage' => 'Won\'t remove postage',
'Yes' => 'Yes',
'Yesterday sales' => 'Yesterday sales',
'You can attach here some content to this category' => 'You can attach here some content to this category',
'You can attach here some content to this product' => 'You can attach here some content to this product',
'You can attach this product to more categories in the details tab.' => 'You can attach this product to more categories in the details tab.',
'You can change the default category (%title) in the "General" tab.' => 'You can change the default category (%title) in the "General" tab.',
'You can change the default folder (%title) in the "General" tab.' => 'You can change the default folder (%title) in the "General" tab.',
'You can\'t delete this administrator' => 'You can\'t delete this administrator',
'You can\'t delete this profile' => 'You can\'t delete this profile',
'You don\'t need to use commas or other punctuations.' => 'You don\'t need to use commas or other punctuations.',
'Your current IP address is %ip' => 'Your current IP address is %ip',
'Zip code' => 'Zip code',
'Zones' => 'Zones',
'activate' => 'activate',
'activate %title module' => 'activate %title module',
'activation' => 'activation',
'and' => 'and',
'classic modules' => 'classic modules',
'code' => 'code',
@@ -690,11 +924,13 @@ return array(
'customer ref' => 'customer ref',
'd-m-Y' => 'd-m-Y',
'date form' => 'date form',
'date in yyyy-mm-dd format' => 'date in yyyy-mm-dd format',
'days left' => 'days left',
'deactivate' => 'deactivate',
'deactivation' => 'deactivation',
'en_US' => 'en_US',
'firstname & lastname' => 'firstname & lastname',
'hour in hh:mm:ss format' => 'hour in hh:mm:ss format',
'last order' => 'last order',
'long description' => 'long description',
'max usage' => 'max usage',

1514
templates/backOffice/default/I18n/es_ES.php Normal file → Executable file

File diff suppressed because it is too large Load Diff

553
templates/backOffice/default/I18n/fr_FR.php Normal file → Executable file

File diff suppressed because it is too large Load Diff

0
templates/backOffice/default/I18n/it_IT.php Normal file → Executable file
View File

View File

@@ -67,16 +67,36 @@
<div class="version-info pull-left">{intl l='Version %ver' ver="{$THELIA_VERSION}"}</div>
<div class="clearfix pull-right hidden-xs">
<div class="btn-group pull-right">
<a href="{navigate to="index"}" title="{intl l='View site'}" target="_blank" class="btn btn-default"><span class="glyphicon glyphicon-eye-open"></span> {intl l="View shop"}</a>
<button class="btn btn-default btn-primary"><span class="glyphicon glyphicon-user"></span> {admin attr="firstname"} {admin attr="lastname"}</button>
<button class="btn btn-default btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a class="profile" href="{url path='admin/configuration/administrators'}"><span class="glyphicon glyphicon-edit"></span> {intl l="Profil"}</a></li>
<li><a class="logout" href="{url path='admin/logout'}" title="{intl l='Close administation session'}"><span class="glyphicon glyphicon-off"></span> {intl l="Logout"}</a></li>
</ul>
<div class="button-toolbar pull-righ" role="toolbar">
<div class="btn-group">
<a href="{navigate to="index"}" title="{intl l='View site'}" target="_blank" class="btn btn-default"><span class="glyphicon glyphicon-eye-open"></span> {intl l="View shop"}</a>
<button class="btn btn-default btn-primary"><span class="glyphicon glyphicon-user"></span> {admin attr="firstname"} {admin attr="lastname"}</button>
<button class="btn btn-default btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a class="profile" href="{url path='admin/configuration/administrators'}"><span class="glyphicon glyphicon-edit"></span> {intl l="Profil"}</a></li>
<li><a class="logout" href="{url path='admin/logout'}" title="{intl l='Close administation session'}"><span class="glyphicon glyphicon-off"></span> {intl l="Logout"}</a></li>
</ul>
</div>
<div class="btn-group">
{loop type="lang" name="ui-lang" id="{lang attr='id'}"}
<button class="btn btn-default">
<img src="{image file="assets/img/flags/{$CODE}.png"}" alt="{$TITLE}" /> {$CODE|ucfirst}</a>
</button>
{/loop}
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
{loop type="lang" name="ui-lang"}
<li><a href="{url path="{navigate to="current"}" lang={$CODE}}"><img src="{image file="assets/img/flags/{$CODE}.png"}" alt="{$TITLE}" /> {$CODE|ucfirst}</a></li>
{/loop}
</ul>
</div>
</div>
</div>

View File

@@ -39,6 +39,7 @@
<th>{intl l="Login"}</th>
<th>{intl l="First Name"}</th>
<th>{intl l="Last Name"}</th>
<th>{intl l="Locale"}</th>
<th>{intl l="Profile"}</th>
<th class="col-md-1">{intl l="Actions"}</th>
</tr>
@@ -51,6 +52,7 @@
<td data-field-class="js-login">{$LOGIN}</td>
<td data-field-class="js-firstname">{$FIRSTNAME}</td>
<td data-field-class="js-lastname">{$LASTNAME}</td>
<td data-field-class="js-locale">{$LOCALE}</td>
<td data-field-class="js-profile" data-value="{$PROFILE}">
{if $PROFILE}
{loop type="profile" name="admin-profile" id=$PROFILE}
@@ -149,6 +151,19 @@
</div>
{/form_field}
{form_field form=$form field='locale'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l=$label} : </label>
<select id="{$label_attr.for}" name="{$name}" required="required" data-toggle="selectpicker">
{loop name='lang-admin' type="lang"}
<option value="{$LOCALE}">{$LOCALE}: {$TITLE}</option>
{/loop}
</select>
</div>
{/form_field}
{form_field form=$form field='profile'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l=$label} : </label>
@@ -240,6 +255,19 @@
</div>
{/form_field}
{form_field form=$form field='locale'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l=$label}: </label>
<select id="{$label_attr.for}" name="{$name}" required="required" data-toggle="selectpicker">
{loop name='lang-admin' type="lang"}
<option value="{$LOCALE}" {if $LOCALE == $value}selected="selected"{/if}>{$LOCALE}: {$TITLE}</option>
{/loop}
</select>
</div>
{/form_field}
{form_field form=$form field='profile'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l=$label} : </label>
@@ -265,7 +293,7 @@
file = "includes/generic-create-dialog.html"
dialog_id = "administrator_update_dialog"
dialog_title = {intl l="Update a new administrator"}
dialog_title = {intl l="Update an administrator"}
dialog_body = {$smarty.capture.administrator_update_dialog nofilter}
dialog_ok_label = {intl l="Update"}

View File

@@ -18,6 +18,7 @@
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l={$label}} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{intl l={$label}}" placeholder="{intl l='Company'}">
<span class="help-block">{intl l='<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Check the list</a> of ISO 639-1 codes'}</span>
</div>
{/form_field}
@@ -32,6 +33,7 @@
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l={$label}} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{intl l={$label}}" placeholder="{intl l='Company'}">
<span class="help-block">{intl l='The syntax used is identical to the PHP <a href="http://www.php.net/date" target="_other">date()</a> function'}</span>
</div>
{/form_field}
@@ -39,6 +41,7 @@
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l={$label}} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{intl l={$label}}" placeholder="{intl l='Company'}">
<span class="help-block">{intl l='The syntax used is identical to the PHP <a href="http://www.php.net/date" target="_other">date()</a> function'}</span>
</div>
{/form_field}
@@ -53,7 +56,7 @@
dialog_title = {intl l="Edit a language"}
dialog_body = {$smarty.capture.edit_lang_dialog nofilter}
dialog_ok_label = {intl l="Edit this language"}
dialog_ok_label = {intl l="Save changes"}
dialog_cancel_label = {intl l="Cancel"}
form_action = {url path="/admin/configuration/languages/save/{$lang_id}"}

View File

@@ -198,6 +198,7 @@
{elseloop rel="product-features-av"}
{* Get the free text value *}
{$feature_value=''}
{loop name="free-text-value" exclude_feature_availability="1" type="feature_value" product=$product_id feature=$ID backend_context="1" lang="$edit_language_id"}
{$feature_value=$FREE_TEXT_VALUE}

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Some files were not shown because too many files have changed in this diff Show More