// Merge -> revision 8952

git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@8957 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
rMalie
2011-10-03 09:14:01 +00:00
parent f1e265fad4
commit ef17d0b7da
44 changed files with 622 additions and 366 deletions
+5 -2
View File
@@ -535,8 +535,11 @@ if (Tools::isSubmit('loadImportMatchs'))
if (Tools::isSubmit('toggleScreencast'))
{
$context->employee->show_screencast = (int)(!(bool)$context->employee->show_screencast);
$context->employee->save();
if (Validate::isLoadedObject($context->employee))
{
$context->employee->bo_show_screencast = !$context->employee->bo_show_screencast;
$context->employee->update();
}
}
if (Tools::isSubmit('helpAccess'))
+1 -1
View File
@@ -43,5 +43,5 @@ $smtpPort = $_GET['smtpPort'];
$smtpEncryption = $_GET['smtpEnc'];
$result = Mail::sendMailTest(Tools::htmlentitiesUTF8($smtpChecked), Tools::htmlentitiesUTF8($smtpServer), Tools::htmlentitiesUTF8($content), Tools::htmlentitiesUTF8($subject), Tools::htmlentitiesUTF8($type), Tools::htmlentitiesUTF8($to), Tools::htmlentitiesUTF8($from), Tools::htmlentitiesUTF8($smtpLogin), Tools::htmlentitiesUTF8($smtpPassword), Tools::htmlentitiesUTF8($smtpPort), Tools::htmlentitiesUTF8($smtpEncryption));
die($result ? 'ok' : 'fail');
die($result === true ? 'ok' : $result);
+7 -10
View File
@@ -167,9 +167,9 @@ class AdminCarts extends AdminTab
SELECT id_image
FROM '._DB_PREFIX_.'image
WHERE id_product = '.(int)($product['id_product']).' AND cover = 1');
$productObj = new Product($product['id_product']);
/* Customization display */
$this->displayCustomizedDatas($customizedDatas, $product, $currency, $image, $tokenCatalog, $stock);
if ($product['cart_quantity'] > $product['customizationQuantityTotal'])
@@ -257,10 +257,7 @@ class AdminCarts extends AdminTab
if (is_array($customizedDatas) AND isset($customizedDatas[(int)($product['id_product'])][(int)($product['id_product_attribute'])]))
{
if (isset($image['id_image']))
$image = new Image($image['id_image']);
else
$image = new Image();
if ($image = new Image($image['id_image']))
echo '
<tr>
<td align="center">'.($image->id ? cacheImage(_PS_IMG_DIR_.'p/'.$image->getExistingImgPath().'.jpg',
@@ -319,17 +316,17 @@ class AdminCarts extends AdminTab
$this->displayList();
}
}
protected function _displayDeleteLink($token = NULL, $id)
{
{
foreach ($this->_list as $cart)
if ($id == $cart['id_cart'])
if ($cart['id_order'])
return;
$_cacheLang['Delete'] = $this->l('Delete', __CLASS__, true, false);
$_cacheLang['DeleteItem'] = $this->l('Delete item #', __CLASS__, true, false).$id.' ?)';
echo '
<a href="'.self::$currentIndex.'&'.$this->identifier.'='.$id.'&delete'.$this->table.'&token='.($token != null ? $token : $this->token).'" onclick="return confirm(\''.$_cacheLang['DeleteItem'].'\');">
<img src="../img/admin/delete.gif" alt="'.$_cacheLang['Delete'].'" title="'.$_cacheLang['Delete'].'" /></a>
+8
View File
@@ -152,6 +152,14 @@ class AdminEmployees extends AdminTab
<input type="radio" name="bo_uimode" id="uimode_off" value="click" '.($this->getFieldValue($obj, 'bo_uimode') == 'click' ? 'checked="checked" ' : '').'/>
<label class="t" for="uimode_off">'.$this->l('Click on tabs').'</label>
</div><div class="clear">&nbsp;</div>
<label>'.$this->l('Show screencast:').' </label>
<div class="margin-form">
<input type="radio" name="bo_show_screencast" id="bo_show_screencast_on" value="1" '.($this->getFieldValue($obj, 'bo_show_screencast') ? 'checked="checked" ' : '').'/>
<label class="t" for="active_on"> <img src="../img/admin/enabled.gif" alt="'.$this->l('Enabled').'" title="'.$this->l('Enabled').'" /></label>
<input type="radio" name="bo_show_screencast" id="bo_show_screencast_off" value="0" '.(!$this->getFieldValue($obj, 'bo_show_screencast') ? 'checked="checked" ' : '').'/>
<label class="t" for="active_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Disabled').'" title="'.$this->l('Disabled').'" /></label>
<p>'.$this->l('Show the welcome video on the dashbord of the back office').'</p>
</div>
<label>'.$this->l('Status:').' </label>
<div class="margin-form">
<input type="radio" name="active" id="active_on" value="1" '.($this->getFieldValue($obj, 'active') ? 'checked="checked" ' : '').'/>
+9 -2
View File
@@ -101,6 +101,9 @@ class AdminImport extends AdminTab
'image_position' => array('label' => $this->l('Image position'),
'help' => $this->l('Position of the product image to use for this combination. If you use this field, leave image URL empty.')),
'image_url' => array('label' => $this->l('Image URL')),
'delete_existing_images' => array(
'label' => $this->l('Delete existing images (0 = no, 1 = yes)'),
'help' => $this->l('If you do not specify this column and you specify the column images, all images of the product will be replaced by those specified in the import file')),
);
self::$default_values = array(
@@ -475,8 +478,7 @@ class AdminImport extends AdminTab
$path = _PS_CAT_IMG_DIR_.(int)($id_entity);
break;
}
if (copy(trim($url), $tmpfile))
if (copy(str_replace(' ', '%20', trim($url)), $tmpfile))
{
imageResize($tmpfile, $path.'.jpg');
$imagesTypes = ImageType::getImagesTypes($entity);
@@ -938,6 +940,11 @@ class AdminImport extends AdminTab
$product = new Product((int)($info['id_product']), false, $defaultLanguage);
$id_image = null;
//delete existing images if "delete_existing_images" is set to 1
if (array_key_exists('delete_existing_images', $info) && $info['delete_existing_images'])
$product->deleteImages();
elseif (array_key_exists('image_url', $info))
$product->deleteImages();
if (isset($info['image_url']) && $info['image_url'])
{
+1
View File
@@ -446,6 +446,7 @@ class AdminPerformance extends AdminTab
</select>
</div>
<div id="directory_depth">
<div class="warn">'.$this->l('The system CacheFS should be used only when the infrastructure contain only one front-end server. Ask your hosting company if you don\'t know.').'</div>
<label>'.$this->l('Directory depth:').' </label>
<div class="margin-form">
<input type="text" name="ps_cache_fs_directory_depth" value="'.($depth ? $depth : 1).'" />
+44 -90
View File
@@ -1,6 +1,6 @@
<?php
/*
* 2007-2011 PrestaShop
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
@@ -34,21 +34,21 @@ class AdminScenes extends AdminTab
$this->lang = true;
$this->edit = true;
$this->delete = true;
$this->fieldImageSettings = array(
array('name' => 'image', 'dir' => 'scenes'),
array('name' => 'thumb', 'dir' => 'scenes/thumbs')
);
$this->fieldsDisplay = array(
'id_scene' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
'name' => array('title' => $this->l('Image Maps'), 'width' => 150, 'filter_key' => 'b!name'),
'active' => array('title' => $this->l('Activated'), 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false)
);
parent::__construct();
}
public function afterImageUpload()
{
/* Generate image with differents size */
@@ -73,64 +73,17 @@ class AdminScenes extends AdminTab
}
return true;
}
/**
* Build a categories tree
*
* @param array $indexedCategories Array with categories where product is indexed (in order to check checkbox)
* @param array $categories Categories to list
* @param array $current Current category
* @param integer $id_category Current category id
*/
public function recurseCategoryForInclude($indexedCategories, $categories, $current, $id_category = 1, $id_category_default = NULL, $has_suite = array())
{
global $done;
static $irow;
$id_obj = (int)(Tools::getValue($this->id));
if (!isset($done[$current['infos']['id_parent']]))
$done[$current['infos']['id_parent']] = 0;
$done[$current['infos']['id_parent']] += 1;
$todo = sizeof($categories[$current['infos']['id_parent']]);
$doneC = $done[$current['infos']['id_parent']];
$level = $current['infos']['level_depth'] + 1;
echo '
<tr class="'.($irow++ % 2 ? 'alt_row' : '').'">
<td>
<input type="checkbox" name="categories[]" class="categoryBox'.($id_category_default == $id_category ? ' id_category_default' : '').'" id="categoryBox_'.$id_category.'" value="'.$id_category.'"'.((in_array($id_category, $indexedCategories) OR ((int)(Tools::getValue('id_category')) == $id_category AND !(int)($id_obj))) ? ' checked="checked"' : '').' />
</td>
<td>
'.$id_category.'
</td>
<td>';
for ($i = 2; $i < $level; $i++)
echo '<img src="../img/admin/lvl_'.$has_suite[$i - 2].'.gif" alt="" style="vertical-align: middle;"/>';
echo '<img src="../img/admin/'.($level == 1 ? 'lv1.gif' : 'lv2_'.($todo == $doneC ? 'f' : 'b').'.gif').'" alt="" style="vertical-align: middle;"/> &nbsp;
<label for="categoryBox_'.$id_category.'" class="t">'.stripslashes($current['infos']['name']).'</label></td>
</tr>';
if ($level > 1)
$has_suite[] = ($todo == $doneC ? 0 : 1);
if (isset($categories[$id_category]))
foreach ($categories[$id_category] AS $key => $row)
if ($key != 'infos')
$this->recurseCategoryForInclude($indexedCategories, $categories, $categories[$id_category][$key], $key, $id_category_default, $has_suite);
}
public function displayForm($isMainTab = true)
{
parent::displayForm();
if (!($obj = $this->loadObject(true)))
return;
$langtags = 'name';
$active = $this->getFieldValue($obj, 'active');
echo '
<script type="text/javascript">';
echo 'startingData = new Array();'."\n";
@@ -139,7 +92,7 @@ class AdminScenes extends AdminTab
$productObj = new Product($product['id_product'], true, $this->context->language->id);
echo 'startingData['.$key.'] = new Array(\''.$productObj->name.'\', '.$product['id_product'].', '.$product['x_axis'].', '.$product['y_axis'].', '.$product['zone_width'].', '.$product['zone_height'].');';
}
echo
'</script>
<form id="scenesForm" action="'.self::$currentIndex.'&submitAdd'.$this->table.'=1&token='.$this->token.'" method="post" enctype="multipart/form-data">
@@ -151,7 +104,7 @@ class AdminScenes extends AdminTab
'.$this->l('When a customer hovers over the image with the mouse, a pop-up appears displaying a brief description of the product. The customer can then click to open the product\'s full product page. To achieve this, please define the \'mapping zone\' that, when hovered over, will display the pop-up. Left-click with your mouse to draw the four-sided mapping zone, then release. Then, begin typing the name of the associated product. A list of products appears. Click the appropriate product, then click OK. Repeat these steps for each mapping zone you wish to create. When you have finished mapping zones, click Save Image Map.').'
</div>
';
echo '<label>'.$this->l('Image map name:').' </label>
<div class="margin-form">';
foreach ($this->_languages as $language)
@@ -162,8 +115,8 @@ class AdminScenes extends AdminTab
$this->displayFlags($this->_languages, $this->_defaultFormLanguage, $langtags, 'name');
echo ' <div class="clear"></div>
</div>';
echo '<label>'.$this->l('Status:').' </label>
<div class="margin-form">
<input type="radio" name="active" id="active_on" value="1" '.((!$obj->id OR Tools::getValue('active', $obj->active)) ? 'checked="checked" ' : '').'/>
@@ -172,8 +125,8 @@ class AdminScenes extends AdminTab
<label class="t" for="active_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Deactivated').'" title="'.$this->l('Deactivated').'" /></label>
<p>'.$this->l('Activate or deactivate the image map').'</p>
</div>';
$sceneImageTypes = ImageType::getImagesTypes('scenes');
$largeSceneImageType = NULL;
$thumbSceneImageType = NULL;
@@ -184,14 +137,14 @@ class AdminScenes extends AdminTab
if ($sceneImageType['name'] == 'thumb_scene')
$thumbSceneImageType = $sceneImageType;
}
echo '<label>'.$this->l('Image to be mapped:').' </label>
<div class="margin-form">
<input type="hidden" id="stay_here" name="stay_here" value="" />
<input type="file" name="image" id="image_input" /> <input type="button" value="'.$this->l('Upload image').'" onclick="{$(\'#stay_here\').val(\'true\');$(\'#scenesForm\').submit();}" class="button" /><br/>
<p>'.$this->l('Format:').' JPG, GIF, PNG. '.$this->l('File size:').' '.(Tools::getMaxUploadSize() / 1024).''.$this->l('KB max.').' '.$this->l('If larger than the image size setting, the image will be reduced to ').' '.$largeSceneImageType['width'].'x'.$largeSceneImageType['height'].'px '.$this->l('(width x height). If smaller than the image-size setting, a white background will be added in order to achieve the correct image size.').'.<br />'.$this->l('Note: To change image dimensions, please change the \'large_scene\' image type settings to the desired size (in Back Office > Preferences > Images).').'</p>';
if ($obj->id && file_exists(_PS_SCENE_IMG_DIR_.$obj->id.'-large_scene.jpg'))
{
echo '<img id="large_scene_image" style="clear:both;border:1px solid black;" alt="" src="'._THEME_SCENE_DIR_.$obj->id.'-large_scene.jpg" /><br />';
@@ -223,29 +176,23 @@ class AdminScenes extends AdminTab
echo '</div>
';
echo '<label>'.$this->l('Category:').' </label>
<div class="margin-form">
<div style="overflow: auto; max-height: 300px; padding-top: 0.6em;" id="categoryList">
<table cellspacing="0" cellpadding="0" class="table" style="width: 600px;">
<tr>
<th><input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, \'categories[]\', this.checked)" /></th>
<th>'.$this->l('ID').'</th>
<th>'.$this->l('Image map name:').'</th>
</tr>';
$categories = Category::getCategories($this->context->language->id, false);
$done = array();
$index = array();
if (Tools::isSubmit('categories'))
foreach (Tools::getValue('categories') AS $k => $row)
$index[] = $row;
elseif ($obj->id)
foreach (Scene::getIndexedCategories($obj->id) AS $k => $row)
$index[] = $row['id_category'];
$this->recurseCategoryForInclude($index, $categories, $categories[0][1], 1, null);
echo '</table>
<p style="padding:0px; margin:0px 0px 10px 0px;">'.$this->l('Mark all checkbox(es) of the categories for which the image map is to appear.').'<sup> *</sup></p>
</div>
</div>';
$selectedCat = array();
if (Tools::isSubmit('categories'))
foreach (Tools::getValue('categories') as $k => $row)
$selectedCat[] = $row;
else if ($obj->id)
foreach (Scene::getIndexedCategories($obj->id) as $k => $row)
$selectedCat[] = $row['id_category'];
$trads = array(
'Home' => $this->l('Home'),
'selected' => $this->l('selected'),
'Collapse All' => $this->l('Collapse All'),
'Expand All' => $this->l('Expand All'),
'Check All' => $this->l('Check All'),
'Uncheck All' => $this->l('Uncheck All')
);
if (Shop::isMultiShopActivated())
{
echo '<label>'.$this->l('Shop association:').'</label><div class="margin-form">';
@@ -253,9 +200,16 @@ class AdminScenes extends AdminTab
echo '</div>';
}
echo '
<label>'.$this->l('Categories:').'</label>
<div class="margin-form">
';
echo Helper::renderAdminCategorieTree($trads, $selectedCat, 'categories');
echo '
</div>
<div id="save_scene" class="margin-form" '.(($obj->id && file_exists(_PS_SCENE_IMG_DIR_.$obj->id.'-large_scene.jpg')) ? '' : 'style="display:none;"') .'>
<input type="submit" name="save_image_map" value="'.$this->l('Save Image Map(s)').'" class="button" />
</div>';
</div>
';
}
else
{
@@ -267,7 +221,7 @@ class AdminScenes extends AdminTab
$this->displayAssoShop();
echo '</div>';
}
}
echo '
<div class="small"><sup>*</sup> '.$this->l('Required field').'</div>
@@ -275,7 +229,7 @@ class AdminScenes extends AdminTab
</form>
';
}
public function postProcess()
{
if (Tools::isSubmit('save_image_map'))
+4 -4
View File
@@ -9,7 +9,7 @@
<p>{l s ='To receive PrestaShop update warnings, you need to activate the <b>allow_url_fopen</b> command in your <b>php.ini</b> config file.'} [<a href="http://www.php.net/manual/'.$isoUser.'/ref.filesystem.php">{l s ='more info'}</a>]</p>
<p>{l s ='If you don\'t know how to do that, please contact your host administrator !'}</p><br />
{/if}
{if $show_screencast}
{if $employee->bo_show_screencast}
<div id="adminpresentation">
<iframe src="{$protocol}://screencasts.prestashop.com/screencast.php?iso_lang={$isoUser}" style="border:none;width:100%;height:420px;" scrolling="no"></iframe>
<div id="footer_iframe_home">
@@ -76,7 +76,7 @@ $(document).ready(function() {
$('#adminpresentation').fadeIn('slow');
else
$('#adminpresentation').fadeOut('slow');
$('#partner_preactivation').fadeOut('slow', function() {
if (json.partner_preactivation != 'NOK')
$('#partner_preactivation').html(json.partner_preactivation);
@@ -84,7 +84,7 @@ $(document).ready(function() {
$('#partner_preactivation').html('');
$('#partner_preactivation').fadeIn('slow');
});
$('#discover_prestashop').fadeOut('slow', function() {
if (json.discover_prestashop != 'NOK')
$('#discover_prestashop').html(json.discover_prestashop);
@@ -96,7 +96,7 @@ $(document).ready(function() {
error: function(XMLHttpRequest, textStatus, errorThrown)
{
$('#adminpresentation').fadeOut('slow');
$('#partner_preactivation').fadeOut('slow');
$('#partner_preactivation').fadeOut('slow');
$('#discover_prestashop').fadeOut('slow');
}
});
+2
View File
@@ -298,6 +298,8 @@
'AdminAddressesController' => '',
'AdminHomeControllerCore' => 'controllers/admin/AdminHomeController.php',
'AdminHomeController' => 'override/controllers/admin/AdminHomeController.php',
'AdminRequestSqlControllerCore' => 'controllers/admin/AdminRequestSqlController.php',
'AdminRequestSqlController' => '',
'AdminToolsControllerCore' => 'controllers/admin/AdminToolsController.php',
'AdminToolsController' => 'override/controllers/admin/AdminToolsController.php',
'AdminTrackingController' => 'controllers/admin/AdminTrackingController.php',
+3 -3
View File
@@ -828,7 +828,7 @@ abstract class AdminTabCore
$type = (array_key_exists('filter_type', $field) ? $field['filter_type'] : (array_key_exists('type', $field) ? $field['type'] : false));
if (($type == 'date' OR $type == 'datetime') AND is_string($value))
$value = unserialize($value);
$key = isset($tmpTab[1]) ? $tmpTab[0].'.'.$tmpTab[1] : $tmpTab[0];
$key = isset($tmpTab[1]) ? $tmpTab[0].'.`'.bqSQL($tmpTab[1]).'`' : '`'.bqSQL($tmpTab[0]).'`';
if (array_key_exists('tmpTableFilter', $field))
$sqlFilter = & $this->_tmpTableFilter;
elseif (array_key_exists('havingFilter', $field))
@@ -844,7 +844,7 @@ abstract class AdminTabCore
if (!Validate::isDate($value[0]))
$this->_errors[] = Tools::displayError('\'from:\' date format is invalid (YYYY-MM-DD)');
else
$sqlFilter .= ' AND '.bqSQL($key).' >= \''.pSQL(Tools::dateFrom($value[0])).'\'';
$sqlFilter .= ' AND '.$key.' >= \''.pSQL(Tools::dateFrom($value[0])).'\'';
}
if (isset($value[1]) AND !empty($value[1]))
@@ -852,7 +852,7 @@ abstract class AdminTabCore
if (!Validate::isDate($value[1]))
$this->_errors[] = Tools::displayError('\'to:\' date format is invalid (YYYY-MM-DD)');
else
$sqlFilter .= ' AND '.bqSQL($key).' <= \''.pSQL(Tools::dateTo($value[1])).'\'';
$sqlFilter .= ' AND '.$key.' <= \''.pSQL(Tools::dateTo($value[1])).'\'';
}
}
else
+1 -1
View File
@@ -29,7 +29,7 @@ abstract class CacheCore
{
/** @var Cache */
protected static $_instance;
protected $_keysCached;
protected $_keysCached = array();
protected $_tablesCached = array();
protected $_blackList = array('cart',
'cart_discount',
+7 -5
View File
@@ -98,15 +98,17 @@ class CacheFSCore extends Cache {
public function setQuery($query, $result)
{
$md5_query = md5($query);
if (isset($this->_keysCached[$md5_query]))
return true;
if ($this->isBlacklist($query))
return true;
$this->_setKeys();
if (isset($this->_keysCached[$md5_query]))
return true;
$key = $this->set($md5_query, $result);
if (preg_match_all('/('._DB_PREFIX_.'[a-z_-]*)`?.*/i', $query, $res))
foreach($res[1] AS $table)
if(!isset($this->_tablesCached[$table][$key]))
$this->_tablesCached[$table][$key] = true;
$this->_writeKeys();
}
public function delete($key, $timeout = 0)
@@ -126,7 +128,7 @@ class CacheFSCore extends Cache {
public function deleteQuery($query)
{
$this->_setKeys();
if (preg_match_all('/('._DB_PREFIX_.'[a-z_-]*)`?.*/i', $query, $res))
foreach ($res[1] AS $table)
if (isset($this->_tablesCached[$table]))
@@ -138,15 +140,15 @@ class CacheFSCore extends Cache {
}
unset($this->_tablesCached[$table]);
}
$this->_writeKeys();
}
public function flush()
{
}
public function __destruct()
private function _writeKeys()
{
parent::__destruct();
@file_put_contents($this->getPath().'keysCached', serialize($this->_keysCached));
@file_put_contents($this->getPath().'tablesCached', serialize($this->_tablesCached));
+2 -2
View File
@@ -1288,12 +1288,12 @@ class CartCore extends ObjectModel
if (isset($configuration['PS_SHIPPING_HANDLING']) AND $carrier->shipping_handling)
$shipping_cost += (float)($configuration['PS_SHIPPING_HANDLING']);
$shipping_cost = Tools::convertPrice($shipping_cost, Currency::getCurrencyInstance((int)($this->id_currency)));
// Additional Shipping Cost per product
foreach($products AS $product)
$shipping_cost += $product['additional_shipping_cost'] * $product['cart_quantity'];
$shipping_cost = Tools::convertPrice($shipping_cost, Currency::getCurrencyInstance((int)($this->id_currency)));
//get external shipping cost from module
if ($carrier->shipping_external)
{
+50 -46
View File
@@ -1,6 +1,6 @@
<?php
/*
* 2007-2011 PrestaShop
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
@@ -28,54 +28,57 @@
class EmployeeCore extends ObjectModel
{
public $id;
/** @var string Determine employee profile */
public $id_profile;
/** @var string employee language */
public $id_lang;
/** @var string Lastname */
public $lastname;
/** @var string Firstname */
public $firstname;
/** @var string e-mail */
public $email;
/** @var string Password */
public $passwd;
/** @var datetime Password */
public $last_passwd_gen;
public $stats_date_from;
public $stats_date_to;
/** @var string Display back office background in the specified color */
public $bo_color;
/** @var string employee's chosen theme */
public $bo_theme;
/** @var string / enum hover or click mode */
public $bo_uimode;
/** @var bool, true */
public $bo_show_screencast;
/** @var boolean Status */
public $active = 1;
/** @var boolean show screencast */
public $show_screencast = 1;
public $remote_addr;
protected $fieldsRequired = array('lastname', 'firstname', 'email', 'passwd', 'id_profile', 'id_lang');
protected $fieldsSize = array('lastname' => 32, 'firstname' => 32, 'email' => 128, 'passwd' => 32, 'bo_color' => 32, 'bo_theme' => 32);
protected $fieldsValidate = array('lastname' => 'isName', 'firstname' => 'isName', 'email' => 'isEmail', 'id_lang' => 'isUnsignedInt',
'passwd' => 'isPasswdAdmin', 'active' => 'isBool', 'id_profile' => 'isInt', 'bo_color' => 'isColor', 'bo_theme' => 'isGenericName',
'bo_uimode' => 'isGenericName', 'show_screencast' => 'isBool');
protected $fieldsValidate = array('lastname' => 'isName', 'firstname' => 'isName', 'email' => 'isEmail', 'id_lang' => 'isUnsignedInt',
'passwd' => 'isPasswdAdmin', 'active' => 'isBool', 'id_profile' => 'isInt', 'bo_color' => 'isColor', 'bo_theme' => 'isGenericName',
'bo_uimode' => 'isGenericName', 'show_screencast' => 'isBool', 'bo_show_screencast' => 'isBool');
protected $table = 'employee';
protected $identifier = 'id_employee';
@@ -88,12 +91,12 @@ class EmployeeCore extends ObjectModel
'passwd' => array('setter' => 'setWsPasswd'),
),
);
public function getFields()
{
$this->validateFields();
$fields['id_profile'] = (int)$this->id_profile;
$fields['id_lang'] = (int)$this->id_lang;
$fields['lastname'] = pSQL($this->lastname);
@@ -101,21 +104,22 @@ class EmployeeCore extends ObjectModel
$fields['email'] = pSQL($this->email);
$fields['passwd'] = pSQL($this->passwd);
$fields['last_passwd_gen'] = pSQL($this->last_passwd_gen);
if (empty($this->stats_date_from))
$this->stats_date_from = date('Y-m-d 00:00:00');
$fields['stats_date_from'] = pSQL($this->stats_date_from);
if (empty($this->stats_date_to))
$this->stats_date_to = date('Y-m-d 23:59:59');
$fields['stats_date_to'] = pSQL($this->stats_date_to);
$fields['bo_color'] = pSQL($this->bo_color);
$fields['bo_theme'] = pSQL($this->bo_theme);
$fields['bo_uimode'] = pSQL($this->bo_uimode);
$fields['bo_show_screencast'] = (int)$this->bo_show_screencast;
$fields['active'] = (int)$this->active;
$fields['show_screencast'] = (int)$this->show_screencast;
return $fields;
}
@@ -124,10 +128,10 @@ class EmployeeCore extends ObjectModel
$this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_BACK').'minutes'));
return parent::add($autodate, $nullValues);
}
/**
* Return employee instance from its e-mail (optionnaly check password)
*
*
* @param string $email e-mail
* @param string $passwd Password is also checked if specified
* @return Employee instance
@@ -138,7 +142,7 @@ class EmployeeCore extends ObjectModel
die(Tools::displayError());
$result = Db::getInstance()->getRow('
SELECT *
SELECT *
FROM `'._DB_PREFIX_.'employee`
WHERE `active` = 1
AND `email` = \''.pSQL($email).'\'
@@ -152,12 +156,12 @@ class EmployeeCore extends ObjectModel
$this->{$key} = $value;
return $this;
}
public static function employeeExists($email)
{
if (!Validate::isEmail($email))
die (Tools::displayError());
return (bool)Db::getInstance()->getValue('
SELECT `id_employee`
FROM `'._DB_PREFIX_.'employee`
@@ -166,7 +170,7 @@ class EmployeeCore extends ObjectModel
/**
* Check if employee password is the right one
*
*
* @param string $passwd Password
* @return boolean result
*/
@@ -174,7 +178,7 @@ class EmployeeCore extends ObjectModel
{
if (!Validate::isUnsignedId($id_employee) OR !Validate::isPasswd($passwd, 8))
die (Tools::displayError());
return Db::getInstance()->getValue('
SELECT `id_employee`
FROM `'._DB_PREFIX_.'employee`
@@ -182,24 +186,24 @@ class EmployeeCore extends ObjectModel
AND `passwd` = \''.pSQL($passwd).'\'
AND active = 1');
}
public static function countProfile($id_profile, $activeOnly = false)
{
return Db::getInstance()->getValue('
SELECT COUNT(*)
FROM `'._DB_PREFIX_.'employee`
FROM `'._DB_PREFIX_.'employee`
WHERE `id_profile` = '.(int)$id_profile.'
'.($activeOnly ? ' AND `active` = 1' : ''));
}
public function isLastAdmin()
{
return ($this->id_profile == _PS_ADMIN_PROFILE_
AND Employee::countProfile($this->id_profile, true) == 1
AND $this->active
return ($this->id_profile == _PS_ADMIN_PROFILE_
&& Employee::countProfile($this->id_profile, true) == 1
&& $this->active
);
}
public function setWsPasswd($passwd)
{
if ($this->id != 0)
@@ -211,7 +215,7 @@ class EmployeeCore extends ObjectModel
$this->passwd = Tools::encrypt($passwd);
return true;
}
/**
* Check employee informations saved into cookie and return employee validity
*
@@ -221,12 +225,12 @@ class EmployeeCore extends ObjectModel
{
/* Employee is valid only if it can be load and if cookie password is the same as database one */
return ($this->id
AND Validate::isUnsignedId($this->id)
AND Employee::checkPassword($this->id, $this->passwd)
AND (!isset($this->remote_addr) OR $this->remote_addr == ip2long(Tools::getRemoteAddr()) OR !Configuration::get('PS_COOKIE_CHECKIP'))
&& Validate::isUnsignedId($this->id)
&& Employee::checkPassword($this->id, $this->passwd)
&& (!isset($this->remote_addr) || $this->remote_addr == ip2long(Tools::getRemoteAddr()) || !Configuration::get('PS_COOKIE_CHECKIP'))
);
}
/**
* Logout
*/
+5 -2
View File
@@ -94,6 +94,7 @@ class MCachedCore extends Cache
if ($this->isBlacklist($query))
return true;
$md5_query = md5($query);
$this->_setKeys();
if (isset($this->_keysCached[$md5_query]))
return true;
$key = $this->set($md5_query, $result);
@@ -101,6 +102,7 @@ class MCachedCore extends Cache
foreach($res[1] AS $table)
if(!isset($this->_tablesCached[$table][$key]))
$this->_tablesCached[$table][$key] = true;
$this->_writeKeys();
}
public function delete($key, $timeout = 0)
@@ -115,6 +117,7 @@ class MCachedCore extends Cache
{
if (!$this->_isConnected)
return false;
$this->_setKeys();
if (preg_match_all('/('._DB_PREFIX_.'[a-z_-]*)`?.*/i', $query, $res))
foreach ($res[1] AS $table)
if (isset($this->_tablesCached[$table]))
@@ -126,6 +129,7 @@ class MCachedCore extends Cache
}
unset($this->_tablesCached[$table]);
}
$this->_writeKeys();
}
protected function close()
@@ -144,9 +148,8 @@ class MCachedCore extends Cache
return false;
}
public function __destruct()
private function _writeKeys()
{
parent::__destruct();
if (!$this->_isConnected)
return false;
$this->_memcacheObj->set('keysCached', $this->_keysCached, 0, 0);
+9 -6
View File
@@ -190,12 +190,11 @@ class MailCore
public static function sendMailTest($smtpChecked, $smtpServer, $content, $subject, $type, $to, $from, $smtpLogin, $smtpPassword, $smtpPort = 25, $smtpEncryption)
{
$swift = NULL;
$result = NULL;
$result = false;
try
{
if($smtpChecked)
{
$smtp = new Swift_Connection_SMTP($smtpServer, $smtpPort, ($smtpEncryption == "off") ? Swift_Connection_SMTP::ENC_OFF : (($smtpEncryption == "tls") ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_SSL));
$smtp->setUsername($smtpLogin);
$smtp->setpassword($smtpPassword);
@@ -209,13 +208,17 @@ class MailCore
if ($swift->send($message, $to, $from))
$result = true;
else
$result = 999;
$swift->disconnect();
}
catch (Swift_Connection_Exception $e) { $result = $e->getCode(); }
catch (Swift_Message_MimeException $e) { $result = $e->getCode(); }
catch (Swift_ConnectionException $e)
{
$result = $e->getMessage();
}
catch (Swift_Message_MimeException $e)
{
$result = $e->getMessage();
}
return $result;
}
+15 -3
View File
@@ -637,12 +637,24 @@ abstract class ModuleCore
if (!$useConfig OR !$xml_exist OR (isset($xml_module->need_instance) AND (int)$xml_module->need_instance == 1) OR $needNewConfigFile)
{
// If class already exists, don't include the file
if (!class_exists($module, false))
{
$filepath = _PS_MODULE_DIR_.$module.'/'.$module.'.php';
$file = trim(file_get_contents(_PS_MODULE_DIR_.$module.'/'.$module.'.php'));
if (substr($file, 0, 5) == '<?php')
$file = substr($file, 5);
if (substr($file, -2) == '?>')
$file = substr($file, 0, -2);
if (class_exists($module, false) OR eval($file) !== false)
// if (false) is a trick to not load the class with "eval".
// this way require_once will works correctly
if (eval('if (false){ '.$file.' }') !== false)
require_once( _PS_MODULE_DIR_.$module.'/'.$module.'.php' );
else
$errors[] = sprintf(Tools::displayError('%1$s (parse error in %2$s)'), $module, substr($filepath, strlen(_PS_ROOT_DIR_)));
}
if (class_exists($module,false))
{
$moduleList[$moduleListCursor++] = new $module;
if (!$xml_exist OR $needNewConfigFile)
@@ -654,7 +666,7 @@ abstract class ModuleCore
}
}
else
$errors[] = $module;
$errors[] = sprintf(Tools::displayError('%1$s (class missing in %2$s)'), $module, substr($filepath, strlen(_PS_ROOT_DIR_)));
}
}
@@ -679,7 +691,7 @@ abstract class ModuleCore
if ($errors)
{
echo '<div class="alert error"><h3>'.Tools::displayError('Parse error(s) in module(s)').'</h3><ol>';
echo '<div class="alert error"><h3>'.Tools::displayError('The following module(s) couldn\'t be loaded').':</h3><ol>';
foreach ($errors AS $error)
echo '<li>'.$error.'</li>';
echo '</ol></div>';
+107 -100
View File
@@ -173,7 +173,6 @@ class SearchCore
{
$word = str_replace('%', '\\%', $word);
$word = str_replace('_', '\\_', $word);
$intersectArray[] = 'SELECT si.id_product
FROM '._DB_PREFIX_.'search_word sw
LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word
@@ -337,6 +336,20 @@ class SearchCore
return $features;
}
protected static function getProductsToIndex($nbLanguages, $limit = 50)
{
// Adjust the limit to get only "whole" products, in every languages (and at least one)
$limit = min(1, round($limit / $nbLanguages) * $nbLanguages);
return Db::getInstance()->ExecuteS('
SELECT p.id_product, pl.id_lang, pl.name pname, p.reference, p.ean13, p.upc, pl.description_short, pl.description, cl.name cname, m.name mname
FROM '._DB_PREFIX_.'product p
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON p.id_product = pl.id_product
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default AND pl.id_lang = cl.id_lang)
LEFT JOIN '._DB_PREFIX_.'manufacturer m ON m.id_manufacturer = p.id_manufacturer
WHERE p.indexed = 0
LIMIT '.(int)$limit);
}
public static function indexation($full = false, $id_product = false)
{
$db = Db::getInstance();
@@ -399,15 +412,6 @@ class SearchCore
'features' => Configuration::get('PS_SEARCH_WEIGHT_FEATURE')
);
// All the product not yet indexed are retrieved
$sql = 'SELECT p.id_product, pl.id_lang, pl.name pname, p.reference, p.ean13, p.upc, pl.description_short, pl.description, cl.name cname, m.name mname, pl.id_shop
FROM '._DB_PREFIX_.'product p
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON p.id_product = pl.id_product
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default AND pl.id_lang = cl.id_lang AND pl.id_shop = cl.id_shop)
LEFT JOIN '._DB_PREFIX_.'manufacturer m ON m.id_manufacturer = p.id_manufacturer
WHERE p.indexed = 0';
$products = $db->ExecuteS($sql, false);
// Those are kind of global variables required to save the processed data in the database every X occurences, in order to avoid overloading MySQL
$countWords = 0;
$countProducts = 0;
@@ -427,107 +431,110 @@ class SearchCore
$wordIdsByWord[$wordId['id_shop']][$wordId['id_lang']]['_'.$wordId['word']] = (int)$wordId['id_word'];
}
// Now each non-indexed product is processed one by one, langage by langage
while ($product = $db->nextRow($products))
{
$product['tags'] = Search::getTags($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['attributes'] = Search::getAttributes($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['features'] = Search::getFeatures($db, (int)$product['id_product'], (int)$product['id_lang']);
// Data must be cleaned of html, bad characters, spaces and anything, then if the resulting words are long enough, they're added to the array
$pArray = array();
foreach ($product AS $key => $value)
if (strncmp($key, 'id_', 3))
{
$words = explode(' ', Search::sanitize($value, (int)$product['id_lang'], true));
foreach ($words AS $word)
if (!empty($word))
{
$word = Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH);
// Remove accents
$word = Tools::replaceAccentedChars($word);
// Retrieve the number of languages
$nbLanguages = Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'lang');
if (!isset($pArray[$word]))
$pArray[$word] = 0;
$pArray[$word] += $weightArray[$key];
}
}
// If we find words that need to be indexed, they're added to the word table in the database
if (sizeof($pArray))
// Products are processed 50 by 50 in order to avoid overloading MySQL
while ($products = Search::getProductsToIndex($nbLanguages, 50) AND count($products) > 0)
{
// Now each non-indexed product is processed one by one, langage by langage
foreach ($products as $product)
{
$list = '';
foreach ($pArray AS $word => $weight)
$list .= '\''.$word.'\',';
$list = rtrim($list, ',');
$product['tags'] = Search::getTags($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['attributes'] = Search::getAttributes($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['features'] = Search::getFeatures($db, (int)$product['id_product'], (int)$product['id_lang']);
$queryArray = array();
$queryArray2 = array();
foreach ($pArray AS $word => $weight)
if ($weight AND !isset($wordIdsByWord['_'.$word]))
// Data must be cleaned of html, bad characters, spaces and anything, then if the resulting words are long enough, they're added to the array
$pArray = array();
foreach ($product AS $key => $value)
if (strncmp($key, 'id_', 3))
{
$queryArray[$word] = '('.(int)$product['id_lang'].', '.(int)$product['id_shop'].', \''.pSQL($word).'\')';
$queryArray2[] = '\''.pSQL($word).'\'';
$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word] = 0;
$words = explode(' ', Search::sanitize($value, (int)$product['id_lang'], true));
foreach ($words AS $word)
if (!empty($word))
{
$word = Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH);
// Remove accents
$word = Tools::replaceAccentedChars($word);
if (!isset($pArray[$word]))
$pArray[$word] = 0;
$pArray[$word] += $weightArray[$key];
}
}
$existingWords = $db->ExecuteS('
SELECT word FROM '._DB_PREFIX_.'search_word
WHERE word IN ('.implode(',', $queryArray2).')
AND id_lang = '.(int)$product['id_lang'].' GROUP BY word');
if($existingWords)
foreach($existingWords as $data)
unset($queryArray[Tools::replaceAccentedChars($data['word'])]);
if (count($queryArray))
// If we find words that need to be indexed, they're added to the word table in the database
if (count($pArray))
{
// The words are inserted...
$db->Execute('
INSERT IGNORE INTO '._DB_PREFIX_.'search_word (id_lang, id_shop, word)
VALUES '.implode(',',$queryArray));
}
if (count($queryArray2))
{
// ...then their IDs are retrieved and added to the cache
$addedWords = $db->ExecuteS('
SELECT sw.id_word, sw.word
FROM '._DB_PREFIX_.'search_word sw
WHERE sw.word IN ('.implode(',', $queryArray2).')
AND sw.id_lang = '.(int)$product['id_lang'].'
AND sw.id_shop = '.(int)$product['id_shop'].'
LIMIT '.count($queryArray2));
// replace accents from the retrieved words so that words without accents or with differents accents can still be linked
foreach ($addedWords AS $wordId)
$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.Tools::replaceAccentedChars($wordId['word'])] = (int)$wordId['id_word'];
$list = '';
foreach ($pArray AS $word => $weight)
$list .= '\''.$word.'\',';
$list = rtrim($list, ',');
$queryArray = array();
$queryArray2 = array();
foreach ($pArray AS $word => $weight)
if ($weight AND !isset($wordIdsByWord['_'.$word]))
{
$queryArray[$word] = '('.(int)$product['id_lang'].', '.(int)$product['id_shop'].', \''.pSQL($word).'\')';
$queryArray2[] = '\''.pSQL($word).'\'';
$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word] = 0;
}
$existingWords = $db->ExecuteS('
SELECT word FROM '._DB_PREFIX_.'search_word
WHERE word IN ('.implode(',', $queryArray2).')
AND id_lang = '.(int)$product['id_lang'].' GROUP BY word');
if($existingWords)
foreach($existingWords as $data)
unset($queryArray[Tools::replaceAccentedChars($data['word'])]);
if (count($queryArray))
{
// The words are inserted...
$db->Execute('
INSERT IGNORE INTO '._DB_PREFIX_.'search_word (id_lang, id_shop, word)
VALUES '.implode(',',$queryArray));
}
if (count($queryArray2))
{
// ...then their IDs are retrieved and added to the cache
$addedWords = $db->ExecuteS('
SELECT sw.id_word, sw.word
FROM '._DB_PREFIX_.'search_word sw
WHERE sw.word IN ('.implode(',', $queryArray2).')
AND sw.id_lang = '.(int)$product['id_lang'].'
AND sw.id_shop = '.(int)$product['id_shop'].'
LIMIT '.count($queryArray2));
// replace accents from the retrieved words so that words without accents or with differents accents can still be linked
foreach ($addedWords AS $wordId)
$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.Tools::replaceAccentedChars($wordId['word'])] = (int)$wordId['id_word'];
}
}
}
foreach ($pArray AS $word => $weight)
{
if (!$weight)
continue;
if (!isset($wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word]))
continue;
if (!$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word])
continue;
$queryArray3[] = '('.(int)$product['id_product'].','.(int)$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word].','.(int)$weight.')';
// Force save every 200 words in order to avoid overloading MySQL
if (++$countWords % 200 == 0)
Search::saveIndex($queryArray3);
}
foreach ($pArray AS $word => $weight)
{
if (!$weight)
continue;
if (!isset($wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word]))
continue;
if (!$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word])
continue;
$queryArray3[] = '('.(int)$product['id_product'].','.(int)$wordIdsByWord[$product['id_shop']][$product['id_lang']]['_'.$word].','.(int)$weight.')';
// Force save every 200 words in order to avoid overloading MySQL
if (++$countWords % 200 == 0)
Search::saveIndex($queryArray3);
}
if (!in_array($product['id_product'], $productsArray))
$productsArray[] = (int)$product['id_product'];
if (!in_array($product['id_product'], $productsArray))
$productsArray[] = (int)$product['id_product'];
}
Search::setProductsAsIndexed($productsArray);
// Force save every 50 products in order to avoid overloading MySQL
if (++$countProducts % 50 == 0)
Search::setProductsAsIndexed($productsArray);
}
// One last save is done at the end in order to save what's left
Search::saveIndex($queryArray3);
Search::setProductsAsIndexed($productsArray);
// One last save is done at the end in order to save what's left
Search::saveIndex($queryArray3);
}
// If it has been deleted, the index is created again once the indexation is done
if (!$dropIndex)
+35 -12
View File
@@ -165,18 +165,37 @@ class UpgraderCore
}
return $this->changed_files;
}
/** populate $this->changed_files with $path
* in sub arrays mail, translation and core items
* @param string $path filepath to add, relative to _PS_ROOT_DIR_
*/
protected function addChangedFile($path)
{
$this->version_is_modified = true;
$this->changed_files[] = $path;
//array_unique($this->changed_files);
if (strpos($path, 'mails/') !== false)
$this->changed_files['mail'][] = $path;
else if (
strpos($path, '/en.php') !== false
|| strpos($path, '/fr.php') !== false
|| strpos($path, '/es.php') !== false
|| strpos($path, '/it.php') !== false
|| strpos($path, '/de.php') !== false
|| strpos($path, 'translations/') !== false
)
$this->changed_files['translation'][] = $path;
else
$this->changed_files['core'][] = $path;
}
/** populate $this->missing_files with $path
* @param string $path filepath to add, relative to _PS_ROOT_DIR_
*/
protected function addMissingFile($path)
{
$this->version_is_modified = true;
$this->missing_files[] = $path;
//array_unique($this->missingFile);
}
protected function browseXmlAndCompare($node, &$current_path = array(), $level = 1)
@@ -190,18 +209,22 @@ class UpgraderCore
}
else if (is_object($child) && $child->getName() == 'md5file')
{
$path = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR;
// We will store only relative path.
// absolute path is only used for file_exists and compare
$relative_path = '';
for ($i = 1; $i < $level; $i++)
$path .= $current_path[$i].'/';
$path .= (string)$child['name'];
$path = str_replace('ps_root_dir',_PS_ROOT_DIR_,$path);
$relative_path .= $current_path[$i].'/';
$relative_path .= (string)$child['name'];
$fullpath = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR . $relative_path;
$fullpath = str_replace('ps_root_dir', _PS_ROOT_DIR_, $fullpath);
// replace default admin dir by current one
$path = str_replace(_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_, $path);
if(!file_exists($path))
$this->addMissingFile($path);
else if (!$this->compareChecksum($path, (string)$child))
$this->addChangedFile($path);
$fullpath = str_replace(_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_, $fullpath);
if (!file_exists($fullpath))
$this->addMissingFile($relative_path);
else if (!$this->compareChecksum($fullpath, (string)$child))
$this->addChangedFile($relative_path);
// else, file is original (and ok)
}
}
+5 -2
View File
@@ -56,6 +56,7 @@ if (!file_exists(dirname(__FILE__).'/settings.inc.php'))
exit;
}
require_once(dirname(__FILE__).'/settings.inc.php');
require_once(dirname(__FILE__).'/autoload.php');
/* Redefine REQUEST_URI if empty (on some webservers...) */
if (!isset($_SERVER['REQUEST_URI']) OR empty($_SERVER['REQUEST_URI']))
@@ -70,8 +71,10 @@ if (!isset($_SERVER['REQUEST_URI']) OR empty($_SERVER['REQUEST_URI']))
}
}
/* Autoload */
require_once(dirname(__FILE__).'/autoload.php');
// Trying to redefine HTTP_HOST if empty (on some webservers...)
if (!isset($_SERVER['HTTP_HOST']) || empty($_SERVER['HTTP_HOST']))
$_SERVER['HTTP_HOST'] = @getenv('HTTP_HOST');
if (!defined('_PS_MAGIC_QUOTES_GPC_'))
define('_PS_MAGIC_QUOTES_GPC_', get_magic_quotes_gpc());
+1
View File
@@ -629,6 +629,7 @@ CREATE TABLE `PREFIX_employee` (
`bo_color` varchar(32) default NULL,
`bo_theme` varchar(32) default NULL,
`bo_uimode` ENUM('hover','click') default 'click',
`bo_show_screencast` tinyint(1) NOT NULL default '1',
`active` tinyint(1) unsigned NOT NULL default '0',
`show_screencast` tinyint(1) unsigned NOT NULL default '1',
`id_last_order` tinyint(1) unsigned NOT NULL default '0',
+1
View File
@@ -36,3 +36,4 @@ INSERT INTO `PREFIX_hook` (`name`, `title`, `description`, `position`, `live_edi
('afterDeleteAttribute', 'On deleting attribute feature value', 'On deleting attribute feature value', 0, 0),
('afterSaveAttribute', 'On saving attribute feature value', 'On saving attribute feature value', 0, 0);
ALTER TABLE `PREFIX_employee` ADD `bo_show_screencast` TINYINT(1) NOT NULL DEFAULT '1' AFTER `bo_uimode`;
+1 -1
View File
@@ -235,7 +235,7 @@ if (isFormValid())
$sqlParams[] = "INSERT INTO "._DB_PREFIX_."configuration (name, value, date_add, date_upd) VALUES ('PS_MAIL_SMTP_ENCRYPTION', '".pSQL($_GET['smtpEnc'])."', NOW(), NOW())";
$sqlParams[] = "INSERT INTO "._DB_PREFIX_."configuration (name, value, date_add, date_upd) VALUES ('PS_MAIL_SMTP_PORT', '".pSQL($_GET['smtpPort'])."', NOW(), NOW())";
}
$sqlParams[] = 'INSERT INTO '._DB_PREFIX_.'employee (id_employee, lastname, firstname, email, passwd, last_passwd_gen, bo_theme, active, id_profile, id_lang) VALUES (NULL, \''.pSQL(ToolsInstall::ucfirst($_GET['infosName'])).'\', \''.pSQL(ToolsInstall::ucfirst($_GET['infosFirstname'])).'\', \''.pSQL($_GET['infosEmail']).'\', \''.md5(pSQL(_COOKIE_KEY_.$_GET['infosPassword'])).'\', \''.date('Y-m-d h:i:s', strtotime('-360 minutes')).'\', \'oldschool\', 1, 1, (SELECT `value` FROM `'._DB_PREFIX_.'configuration` WHERE `name` = \'PS_LANG_DEFAULT\' LIMIT 1))';
$sqlParams[] = 'INSERT INTO '._DB_PREFIX_.'employee (id_employee, lastname, firstname, email, passwd, last_passwd_gen, bo_theme, active, id_profile, id_lang, bo_show_screencast) VALUES (NULL, \''.pSQL(ToolsInstall::ucfirst($_GET['infosName'])).'\', \''.pSQL(ToolsInstall::ucfirst($_GET['infosFirstname'])).'\', \''.pSQL($_GET['infosEmail']).'\', \''.md5(pSQL(_COOKIE_KEY_.$_GET['infosPassword'])).'\', \''.date('Y-m-d h:i:s', strtotime('-360 minutes')).'\', \'oldschool\', 1, 1, (SELECT `value` FROM `'._DB_PREFIX_.'configuration` WHERE `name` = \'PS_LANG_DEFAULT\' LIMIT 1), 1)';
$sqlParams[] = 'INSERT INTO '._DB_PREFIX_.'contact (id_contact, email, customer_service) VALUES (NULL, \''.pSQL($_GET['infosEmail']).'\', 1), (NULL, \''.pSQL($_GET['infosEmail']).'\', 1)';
if (function_exists('mcrypt_encrypt'))
+1 -1
View File
@@ -71,7 +71,7 @@ function verifyMail(testMsg, testSubject)
else
{
mailIsOk = false;
$("#mailResultCheck").addClass("fail").removeClass("ok").removeClass('userInfos').html(textSendError);
$("#mailResultCheck").addClass("fail").removeClass("ok").removeClass('userInfos').html(textSendError + '<br />' + ret);
}
}
}
+1 -3
View File
@@ -140,9 +140,7 @@ function writeBookmarkLink(url, title, text, img)
function writeBookmarkLinkObject(url, title, insert)
{
if (window.navigator.userAgent.indexOf('Chrome') != -1)
return ('');
else if (window.sidebar || window.external)
if (window.sidebar || window.external)
return ('<a href="javascript:addBookmark(\'' + escape(url) + '\', \'' + escape(title) + '\')">' + insert + '</a>');
else if (window.opera && window.print)
return ('<a rel="sidebar" href="' + escape(url) + '" title="' + escape(title) + '">' + insert + '</a>');
+27 -9
View File
@@ -24,6 +24,7 @@
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if(!defined('_PS_ADMIN_DIR_'))
define('_PS_ADMIN_DIR_', _PS_ADMIN_DIR_);
if(!defined('_PS_USE_SQL_SLAVE_'))
@@ -480,10 +481,11 @@ $this->standalone = true;
else
{
// echo '<img src="'.$originalCore.'" /> '.
$this->nextParams['msg'] = ($testOrigCore?$this->l('Core files are ok'):sprintf($this->l('%s core files have been modified'), sizeof($changedFileList)));
$this->nextParams['msg'] = ($testOrigCore?$this->l('Core files are ok'):sprintf($this->l('%1$s core files have been modified (%2$s total)'), count($changedFileList['core']), count(array_merge($changedFileList['core'], $changedFileList['mail'], $changedFileList['translation']))));
}
$this->nextParams['result'] = $changedFileList;
}
public function ajaxProcessUpgradeNow()
{
$this->nextDesc = $this->l('Starting upgrade ...');
@@ -1727,6 +1729,9 @@ echo '</script>';
#dbResultCheck{ padding-left:20px;}
#checkPrestaShopFilesVersion{margin-bottom:20px;}
#changedList ul{list-style-type:circle}
.changedFileList {margin-left:20px; padding-left:5px;}
.changedNotice li{color:lightgrey;}
.changedImportant li{color:red;font-weight:bold}
</style>';
$this->displayWarning($this->l('This function is experimental. It\'s highly recommended to make a backup of your files and database before starting the upgrade process.'));
@@ -1870,7 +1875,7 @@ function handleXMLResult(xmlRet, previousParams)
switch(previousParams.upgradeDbStep)
{
case 0: // getVersionFromDb
result = "ok";
resGlobal.result = "ok";
break;
case 1: // getVersionFromDb
result = resGlobal.result;
@@ -2134,6 +2139,19 @@ function handleError(res)
}
';
// ajax to check md5 files
$js .= 'function addModifiedFileList(title, fileList, css_class)
{
subList = $("<ul class=\"changedFileList "+css_class+"\"></ul>");
$(fileList).each(function(k,v){
$(subList).append("<li>"+v+"</li>");
});
$("#changedList").append("<h3><a class=\"toggleSublist\">"+title+"</a></h3>");
$("#changedList").append(subList);
$("#cchangedList").append("<br/>");
}';
$js.= '$(document).ready(function(){
$.ajax({
type:"POST",
@@ -2155,16 +2173,15 @@ $js.= '$(document).ready(function(){
$("#checkPrestaShopFilesVersion").prepend("<img src=\"../img/admin/warning.gif\" /> ");
else
{
$("#checkPrestaShopFilesVersion").prepend(answer.status);
$("#checkPrestaShopFilesVersion").prepend("<img src=\"../img/admin/warning.gif\" /> ");
$("#checkPrestaShopFilesVersion").append("<a id=\"toggleChangedList\" class=\"button\" href=\"\">'.$this->l('See or hide the list').'</a><br/>");
$("#checkPrestaShopFilesVersion").append("<div id=\"changedList\" style=\"display:none \">");
$("#changedList").html("<ul>");
$(answer.result).each(function(k,v){
$("#changedList ul").append("<li>"+v+"</li>");
});
$("#checkPrestaShopFilesVersion").append("<div id=\"changedList\" style=\"display:none \"><br/>");
addModifiedFileList("'.$this->l('Core files').'", answer.result.core, "changedImportant");
addModifiedFileList("'.$this->l('Mail files').'", answer.result.mail, "changedNotice");
addModifiedFileList("'.$this->l('Translation files').'", answer.result.translation, "changedNotice");
$("#toggleChangedList").bind("click",function(e){e.preventDefault();$("#changedList").toggle();});
$(".toggleSublist").live("click",function(e){e.preventDefault();$(this).parent().next().toggle();});
}
}
,
@@ -2183,6 +2200,7 @@ $("#toggleChangedList").bind("click",function(e){e.preventDefault();$("#changedL
});';
return $js;
}
private function _cleanUp($path)
{
// as we need theses files for restore operation, we can't remove them.
+35 -12
View File
@@ -165,18 +165,37 @@ class UpgraderCore
}
return $this->changed_files;
}
/** populate $this->changed_files with $path
* in sub arrays mail, translation and core items
* @param string $path filepath to add, relative to _PS_ROOT_DIR_
*/
protected function addChangedFile($path)
{
$this->version_is_modified = true;
$this->changed_files[] = $path;
//array_unique($this->changed_files);
if (strpos($path, 'mails/') !== false)
$this->changed_files['mail'][] = $path;
else if (
strpos($path, '/en.php') !== false
|| strpos($path, '/fr.php') !== false
|| strpos($path, '/es.php') !== false
|| strpos($path, '/it.php') !== false
|| strpos($path, '/de.php') !== false
|| strpos($path, 'translations/') !== false
)
$this->changed_files['translation'][] = $path;
else
$this->changed_files['core'][] = $path;
}
/** populate $this->missing_files with $path
* @param string $path filepath to add, relative to _PS_ROOT_DIR_
*/
protected function addMissingFile($path)
{
$this->version_is_modified = true;
$this->missing_files[] = $path;
//array_unique($this->missingFile);
}
protected function browseXmlAndCompare($node, &$current_path = array(), $level = 1)
@@ -190,18 +209,22 @@ class UpgraderCore
}
else if (is_object($child) && $child->getName() == 'md5file')
{
$path = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR;
// We will store only relative path.
// absolute path is only used for file_exists and compare
$relative_path = '';
for ($i = 1; $i < $level; $i++)
$path .= $current_path[$i].'/';
$path .= (string)$child['name'];
$path = str_replace('ps_root_dir',_PS_ROOT_DIR_,$path);
$relative_path .= $current_path[$i].'/';
$relative_path .= (string)$child['name'];
$fullpath = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR . $relative_path;
$fullpath = str_replace('ps_root_dir', _PS_ROOT_DIR_, $fullpath);
// replace default admin dir by current one
$path = str_replace(_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_, $path);
if(!file_exists($path))
$this->addMissingFile($path);
else if (!$this->compareChecksum($path, (string)$child))
$this->addChangedFile($path);
$fullpath = str_replace(_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_, $fullpath);
if (!file_exists($fullpath))
$this->addMissingFile($relative_path);
else if (!$this->compareChecksum($fullpath, (string)$child))
$this->addChangedFile($relative_path);
// else, file is original (and ok)
}
}
+42 -17
View File
@@ -1,8 +1,33 @@
<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2011 PrestaShop SA
* @version Release: $Revision$
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class Autoupgrade extends Module
{
function __construct()
public function __construct()
{
$this->name = 'autoupgrade';
$this->tab = 'administration';
@@ -25,15 +50,16 @@ class Autoupgrade extends Module
$this->description = $this->l('Provides an automated method to upgrade your shop to the last PrestaShop version');
}
function install()
public function install()
{
$res = true;
// before adding AdminSelfUpgrade, we should remove AdminUpgrade
$idTab = Tab::getIdFromClassName('AdminUpgrade');
$idTab = Tab::getIdFromClassName('AdminUpgrade');
if ($idTab)
{
if ($idTab)
{
$tab = new Tab($idTab);
$res &= $tab->delete();
}
@@ -46,17 +72,17 @@ class Autoupgrade extends Module
$tab->class_name = 'AdminSelfUpgrade';
$tab->module = 'autoupgrade';
$tab->id_parent = 9;
$tab->name = array_fill(1,sizeof(Language::getLanguages(false)), 'Upgrade');
$tab->name = array_fill(1, sizeof(Language::getLanguages(false)), 'Upgrade');
$res &= $tab->save();
}
else
$tab = new Tab($idTab);
Configuration::updateValue('PS_AUTOUPDATE_MODULE_IDTAB',$tab->id);
Configuration::updateValue('PS_AUTOUPDATE_MODULE_IDTAB',$tab->id);
$autoupgradeDir = _PS_ADMIN_DIR_.DIRECTORY_SEPARATOR.'autoupgrade';
if(!file_exists($autoupgradeDir))
if (!file_exists($autoupgradeDir))
$res &= @mkdir($autoupgradeDir);
if(file_exists($autoupgradeDir.DIRECTORY_SEPARATOR.'ajax-upgradetab.php'))
if (file_exists($autoupgradeDir.DIRECTORY_SEPARATOR.'ajax-upgradetab.php'))
$res &= unlink($autoupgradeDir.DIRECTORY_SEPARATOR.'ajax-upgradetab.php');
if (!defined('_PS_MODULE_DIR_'))
{
@@ -67,36 +93,35 @@ class Autoupgrade extends Module
$res &= copy(_PS_MODULE_DIR_.'autoupgrade/logo.gif',_PS_ROOT_DIR_. DIRECTORY_SEPARATOR . 'img/t/AdminSelfUpgrade.gif');
if (!$res
OR !Tab::getIdFromClassName('AdminSelfUpgrade')
OR !parent::install()
|| !Tab::getIdFromClassName('AdminSelfUpgrade')
|| !parent::install()
)
return false;
return true;
}
public function uninstall()
{
$idtab = Configuration::get('PS_AUTOUPDATE_MODULE_IDTAB');
$tab = new Tab($idtab,1);
$res = $tab->delete();
if(file_exists(_PS_ADMIN_DIR_.DIRECTORY_SEPARATOR.'tabs'.'AdminUpgrade.php'))
if (file_exists(_PS_ADMIN_DIR_.DIRECTORY_SEPARATOR.'tabs'.'AdminUpgrade.php'))
{
// Should we create the correct AdminUpgrade tab (not the module)
if($idOldTab = Tab::getIdFromClassName('AdminUpgrade'))
{
$tab = new Tab($idOldTab);
$res &= $tab->delete();
}
}
$res &= unlink(_PS_ADMIN_DIR_.DIRECTORY_SEPARATOR.'tabs'.'AdminUpgrade.php');
}
if (file_exists(_PS_ADMIN_DIR_.DIRECTORY_SEPARATOR.'autoupgrade'.DIRECTORY_SEPARATOR.'ajax-upgradetab.php'))
$res &= @unlink(_PS_ADMIN_DIR_.DIRECTORY_SEPARATOR.'autoupgrade'.DIRECTORY_SEPARATOR.'ajax-upgradetab.php');
if (!$res OR !parent::uninstall())
if (!$res || !parent::uninstall())
return false;
return true;
}
}
}
+3 -3
View File
@@ -116,13 +116,13 @@ class CarrierCompare extends Module
if (!Validate::isInt($id_state))
$errors[] = $this->l('Invalid state ID');
if ($id_state != 0 && !Validate::isLoadedObject(new State($id_state)))
$errors[] = $this->l('Invalid state ID');
$errors[] = $this->l('Please select a state');
if (!Validate::isInt($id_country) || !Validate::isLoadedObject(new Country($id_country)))
$errors[] = $this->l('Invalid country ID');
$errors[] = $this->l('Please select a country');
if (!$this->checkZipcode($zipcode, $id_country))
$errors[] = $this->l('Please use a valid zip/postal code depending on your country selection');
if (!Validate::isInt($id_carrier) || !Validate::isLoadedObject(new Carrier($id_carrier)))
$errors[] = $this->l('Invalid carrier ID');
$errors[] = $this->l('Please select a carrier');
if (sizeof($errors))
return $errors;
+2 -1
View File
@@ -2,10 +2,11 @@
<module>
<name>ebay</name>
<displayName><![CDATA[eBay]]></displayName>
<version><![CDATA[1.2.8]]></version>
<version><![CDATA[1.3]]></version>
<description><![CDATA[Open your shop on the eBay market place !]]></description>
<author><![CDATA[PrestaShop]]></author>
<tab><![CDATA[market_place]]></tab>
<confirmUninstall>Are you sure you want uninstall this module ? All your configuration will be lost.</confirmUninstall>
<is_configurable>1</is_configurable>
<need_instance>1</need_instance>
<limited_countries></limited_countries>
+2 -2
View File
@@ -1163,8 +1163,8 @@ class eBayRequest
'status' => (string)$order->CheckoutStatus->Status,
'date' => substr((string)$order->CreatedTime, 0, 10).' '.substr((string)$order->CreatedTime, 11, 8),
'name' => (string)$order->ShippingAddress->Name,
'firstname' => trim($name[0]),
'familyname' => (isset($name[1]) ? trim($name[1]) : trim($name[0])),
'firstname' => substr(trim($name[0]), 0, 32),
'familyname' => (isset($name[1]) ? substr(trim($name[1]), 0, 32) : substr(trim($name[0]), 0, 32)),
'address1' => (string)$order->ShippingAddress->Street1,
'address2' => (string)$order->ShippingAddress->Street2,
'city' => (string)$order->ShippingAddress->CityName,
+6 -1
View File
@@ -59,7 +59,7 @@ class Ebay extends Module
{
$this->name = 'ebay';
$this->tab = 'market_place';
$this->version = '1.2.8';
$this->version = '1.3';
$this->author = 'PrestaShop';
parent::__construct ();
$this->displayName = $this->l('eBay');
@@ -113,6 +113,9 @@ class Ebay extends Module
// Loading Shipping Method
$this->loadShippingMethod();
// Warning uninstall
$this->confirmUninstall = $this->l('Are you sure you want uninstall this module ? All your configuration will be lost.');
}
}
@@ -434,6 +437,8 @@ class Ebay extends Module
$cartAdd->id_carrier = 1;
$cartAdd->id_lang = $this->id_lang;
$cartAdd->id_currency = Currency::getIdByIsoCode('EUR');
$cartAdd->recyclable = 0;
$cartAdd->gift = 0;
$cartAdd->add();
foreach ($order['product_list'] as $product)
if ($cartAdd->updateQty((int)($product['quantity']), (int)($product['id_product']), ((isset($product['id_product_attribute']) && $product['id_product_attribute'] > 0) ? $product['id_product_attribute'] : NULL)))
+1
View File
@@ -9,6 +9,7 @@ $_MODULE['<{ebay}prestashop>ebay_8acabcc788c316f92b7850c76265b49b'] = 'Vous deve
$_MODULE['<{ebay}prestashop>ebay_d591cbc447d01e5a6165096ebfdf804e'] = 'Vous devez activer l\'extension cURL sur votre serveur si vous désirez utiliser ce module.';
$_MODULE['<{ebay}prestashop>ebay_1b18bd5d9d85f4f667614345ee20e3b2'] = 'Vous devez activer l\'option allow_url_fopen sur votre serveur si vous désirez utiliser ce module.';
$_MODULE['<{ebay}prestashop>ebay_8e64bc164aee46723ed2d70273c6f8ab'] = 'Vous devez enregistrer le module sur eBay';
$_MODULE['<{ebay}prestashop>ebay_55798d71e1cce07f08e25d9a4da60f4a'] = 'Etes-vous sûr de vouloir désinstaller ce module? Toute votre configuration sera perdue.';
$_MODULE['<{ebay}prestashop>ebay_5f8d9c30e0606a91c5d7b6e1bf1217ac'] = 'N\'a pas pu ajouté les produits au panier (peut être votre stock est il à 0)';
$_MODULE['<{ebay}prestashop>ebay_25fff46a6fe5b9512e2f4054f4ff6060'] = 'N\'a pas pu trouvé les produits dans votre catalogue';
$_MODULE['<{ebay}prestashop>ebay_eaa0d1591e6369a298dcd6cb1a8eba8a'] = 'E-mail invalide';
@@ -63,7 +63,7 @@ class MRManagement extends MondialRelay
SET `id_method` = '.(int)$this->_params['id_mr_method'].', ';
if (is_array($this->_params['relayPointInfo']))
foreach($this->_params['relayPointInfo'] as $nameKey => $value)
$query .= '`MR_Selected_'.$nameKey.'` = "'.$value.'", ';
$query .= '`MR_Selected_'.pSQL($nameKey).'` = "'.pSQL($value).'", ';
else // Clean the existing relay point data
$query .= '
MR_Selected_Num = NULL,
@@ -82,14 +82,14 @@ class MRManagement extends MondialRelay
(`id_customer`, `id_method`, `id_cart`, ';
if (is_array($this->_params['relayPointInfo']))
foreach($this->_params['relayPointInfo'] as $nameKey => $value)
$query .= '`MR_Selected_'.$nameKey.'`, ';
$query .= '`MR_Selected_'.pSQL($nameKey).'`, ';
$query = rtrim($query, ', ').') VALUES (
'.$this->_params['id_customer'].',
'.$this->_params['id_mr_method'].',
'.$this->_params['id_cart'].', ';
if (is_array($this->_params['relayPointInfo']))
foreach($this->_params['relayPointInfo'] as $nameKey => $value)
$query .= '"'.$value.'", ';
$query .= '"'.pSQL($value).'", ';
$query = rtrim($query, ', ').')';
}
Db::getInstance()->Execute($query);
+6 -4
View File
@@ -922,12 +922,14 @@ class MondialRelay extends Module
<fieldset class="PS_MRFormStyle">
<legend>
<img src="../modules/mondialrelay/images/logo.gif" />'.$this->l('Advanced Settings'). ' -
<a href="javascript:void(0);" id="PS_MRDisplayPersonalizedOptions"><font style="color:#00b511;">'.$this->l('Click to display / hide the options').'</font> </a>'.
<a href="javascript:void(0);" id="PS_MRDisplayPersonalizedOptions">
<font style="color:#00b511;">'.$this->l('Click to display / hide the options').'</font>
</a>'.
'</legend>
<div id="PS_MRAdvancedSettings">
<p>
'.$this->l('URL Cron Task:').' '.Tools::getHttpHost(true, true)
._MODULE_DIR_.$this->name.'/cron.php?secure_key='.
<p>'.
$this->l('URL Cron Task:').' '.Tools::getHttpHost(true, true).
_MODULE_DIR_.$this->name.'/cron.php?secure_key='.
Configuration::get('MONDIAL_RELAY_SECURE_KEY').
'</p>
</div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

+1
View File
@@ -96,6 +96,7 @@ class Ogone extends PaymentModule
<li><a href="../modules/'.$this->name.'/docs/en2.png">'.$this->l('See the screenshot for step').' 2</a></li>
<li><a href="../modules/'.$this->name.'/docs/en3.png">'.$this->l('See the screenshot for step').' 3</a></li>
<li><a href="../modules/'.$this->name.'/docs/en4.png">'.$this->l('See the screenshot for step').' 4</a></li>
<li><a href="../modules/'.$this->name.'/docs/en5.png">'.$this->l('See the screenshot for step').' 5</a></li>
</ol>
</li>
</ol>
+3 -3
View File
@@ -297,10 +297,10 @@ abstract class PSCPrepaidServices extends PaymentModule
foreach ($this->_getAllowedCurrencies() AS $currency)
{
$mid = Configuration::get($this->prefix.'MERCHANT_ID_'.$currency['iso_code']);
$certificateExiste = '';
$certificate = '';
$passwordExist = '';
if (file_exists($this->certificat_dir.$mid.'.pem'))
$certificateExiste = '<div style="color:#00b511; text-align:center;">'.$this->l('A certificate has been found for this configuration').' : '.$mid.'.pem'.'</div><br />';
$certificate = '<div style="color:#00b511; text-align:center;">'.$this->l('A certificate has been found for this configuration').' : '.$mid.'.pem'.'</div><br />';
if (Configuration::get($this->prefix.'KEYRING_PW_'.$currency['iso_code']))
$passwordExist = '<div style="color:#00b511; text-align:center;">'.$this->l('A password has already been saved');
@@ -317,7 +317,7 @@ abstract class PSCPrepaidServices extends PaymentModule
<div class="margin-form">
<input type="file" name="ct_keyring_certificate_'.$currency['iso_code'].'" />
</div>
'.$certificateExiste.'
'.$certificate.'
<label>'.$this->getL('keyring_pw').'</label>
<div class="margin-form">
<input type="password" name="ct_keyring_pw_'.$currency['iso_code'].'" value=""/>
+13 -10
View File
@@ -6,21 +6,24 @@
</head>
<body>
<table style="font-family: Verdana,sans-serif; font-size: 11px; color: #374953; width: 550px;">
<tbody>
<tr>
<td align="left"><a title="{shop_name}" href="{shop_url}"><img style="border: none;" src="{shop_logo}" alt="{shop_name}" /></a></td>
<td align="left">
<a href="{shop_url}" title="{shop_name}"><img alt="{shop_name}" src="{shop_logo}" style="border:none;" ></a>
</td>
</tr>
<tr>
<td align="left">Danke, dass Sie bei {shop_name} eingekauft haben. Waren Sie mit Ihrem Einkauf und unserem Service zufrieden? Hier können Sie {shop_name} bewerten, wir freuen uns auf Ihr Feedback.
<td align="left">
Danke, dass Sie bei {shop_name} eingekauft haben. Waren Sie mit Ihrem Einkauf und unserem Service zufrieden? Hier können Sie {shop_name} bewerten, wir freuen uns auf Ihr Feedback.
<br /><br />
<center><a href="{rating_url}"><img border="0" src="{button_url}/apply_en.gif" alt="Wir freuen uns auf Ihr Feedback" /></a></center>
</td>
</tr>
<tr><td>&nbsp;</td></tr>
<tr>
<td>&nbsp;</td>
<td align="center" style="font-size:10px; border-top: 1px solid #D9DADE;">
<a href="{shop_url}" style="color:#DB3484; font-weight:bold; text-decoration:none;">{shop_name}</a> powered with <a href="http://www.prestashop.com/" style="text-decoration:none; color:#374953;">PrestaShop™</a>
</td>
</tr>
<tr>
<td style="font-size: 10px; border-top: 1px solid #D9DADE;" align="center"><a style="color: #db3484; font-weight: bold; text-decoration: none;" href="{shop_url}">{shop_name}</a> powered with <a style="text-decoration: none; color: #374953;" href="http://www.prestashop.com/">PrestaShop&trade;</a></td>
</tr>
</tbody>
</table>
</body>
</html>
</html>
@@ -13,7 +13,7 @@
</tr>
<tr>
<td align="left">
Merci pour votre achat chez {shop_name}. Etes vous satisfait du service chez {shop_name}? Vous pouvez donner votre avis et nous évaluer.
Merci pour votre achat chez {shop_name}. Etes-vous satisfait du service chez {shop_name}? Vous pouvez donner votre avis et nous évaluer.
<br /><br />
<center><a href="{rating_url}"><img border="0" src="{button_url}/apply_fr.gif" alt="Evaluez nous" /></a></center>
</td>
@@ -1,3 +1,3 @@
Merci pour votre achat chez {shop_name}. Etes vous satisfait du service chez {shop_name}? Vous pouvez donner votre avis et nous évaluer sur {rating_url}
Merci pour votre achat chez {shop_name}. Etes-vous satisfait du service chez {shop_name}? Vous pouvez donner votre avis et nous évaluer sur {rating_url}
{shop_url} réalisé par PrestaShop™
+151 -3
View File
@@ -881,9 +881,11 @@ $_LANGADM['AdminEmployeesa9e4402481bd9b8e36752bf731f67eb6'] = 'Thème :';
$_LANGADM['AdminEmployeese4b41fb20213ac1461a81cb0c310bd97'] = 'Mode d\'interface';
$_LANGADM['AdminEmployeesf177aa999000021a3901ac78a2728b59'] = 'Affichage au survol';
$_LANGADM['AdminEmployeesd4e0f6342c209912053fec10be72c94b'] = 'Affichage au clic';
$_LANGADM['AdminEmployees24a23d787190f2c4812ff9ab11847a72'] = 'Statut :';
$_LANGADM['AdminEmployees79f79257476673a2aea1b2a41adf3384'] = 'Afficher le screencast:';
$_LANGADM['AdminEmployees00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Activé';
$_LANGADM['AdminEmployeesb9f5c797ebbf55adccdd8539a65a0241'] = 'Désactivé';
$_LANGADM['AdminEmployees4d1f8c97363b784de6d8924bc655cab6'] = 'Afficher la vidéo de présentation sur le tableau de bord du panneau d\'administration';
$_LANGADM['AdminEmployees24a23d787190f2c4812ff9ab11847a72'] = 'Statut :';
$_LANGADM['AdminEmployees41bc9496fbde8565bd5fc699e513fbd9'] = 'Autoriser cet employé à se connecter au Back Office';
$_LANGADM['AdminEmployees9fbf3617c6172a75648e9ac0a864bb56'] = 'Profil :';
$_LANGADM['AdminEmployees7bc873cba11f035df692c3549366c722'] = '-- Choisissez --';
@@ -2552,8 +2554,13 @@ $_LANGADM['AdminScenesc820e0c1d4ae16db218626f49e7916b1'] = 'Ko max.';
$_LANGADM['AdminScenes0b24516ee8c68a18020951583bc3b8ab'] = 'Automatiquement redimensionné à';
$_LANGADM['AdminScenes8a5c9824486e8c1f74cb4c4ec8f9e465'] = '(hauteur x largeur)';
$_LANGADM['AdminScenesa5394858079fa378684b20a1abc0e9be'] = 'Note : Pour changer la dimension de base des images de scènes, veuillez modifier le paramètre \'large_scene\' avec les dimensions souhaitées (dans le Back office : Onglet \'Préférences\' > Onglet \'Image\').';
$_LANGADM['AdminScenes56a8a9eb05f9014da51a4f9b57322ac7'] = 'Catégorie(s) :';
$_LANGADM['AdminScenes19f2cd1d239a894f67d4ac73058af014'] = 'Cochez les cases des catégories dans lesquelles la scène doit apparaître.';
$_LANGADM['AdminScenes8cf04a9734132302f96da8e113e80ce5'] = 'Accueil';
$_LANGADM['AdminScenesef7de3f485174ff47f061ad27d83d0ee'] = 'selectionée(s)';
$_LANGADM['AdminScenesb56c3bda503a8dc4be356edb0cc31793'] = 'Tout replier';
$_LANGADM['AdminScenes5ffd7a335dd836b3373f5ec570a58bdc'] = 'Tout étendre';
$_LANGADM['AdminScenes5e9df908eafa83cb51c0a3720e8348c7'] = 'Tout cocher';
$_LANGADM['AdminScenes9747d23c8cc358c5ef78c51e59cd6817'] = 'Tout décocher';
$_LANGADM['AdminScenes8c38776925f7cf41c090646a43157024'] = 'Catégories :';
$_LANGADM['AdminScenesf16b5952df8d25ea30b25ff95ee8fedf'] = 'Boutiques associées';
$_LANGADM['AdminScenesdf41d831253828e9852a25c72393fde8'] = 'Enregistrez la scène';
$_LANGADM['AdminScenesf5dae0e1b3d4bc66fadd2840b4f79227'] = 'Veuillez ajouter une image pour continuer';
@@ -3073,6 +3080,147 @@ $_LANGADM['AdminTranslations52d83d7ed502b33d300a8c0af2c5b455'] = 'Liste des them
$_LANGADM['AdminTranslationsc21f969b5f03d33d43e04f8f136e7682'] = 'defaut';
$_LANGADM['AdminTranslationsa9e4402481bd9b8e36752bf731f67eb6'] = 'Thème';
$_LANGADM['AdminTranslations53b3cae42737979c884275593a01f468'] = 'Module :';
$_LANGADM['AdminUpgrade875b8a59022d232837491c0fdfacb4ab'] = 'Ne pas sauver les images';
$_LANGADM['AdminUpgradea8d6c6734da0083021561b23f2fa88cc'] = 'Vous pouvez exclure le dossier image de la sauvegarde si vous l\'avez déjà sauvegardé d\'une autre manière (non recommandé)';
$_LANGADM['AdminUpgradeaf98608eaedd4ba7ffd47a0204e84b23'] = 'Conserver le thème \"prestashop\" actuel';
$_LANGADM['AdminUpgrade4ea56ca1a757e426911ff20889c0e93c'] = 'Si vous avez personnalisé le thème par défaut de PrestaShop, vous pouvez le protéger de la mise à niveau (non recommandé)';
$_LANGADM['AdminUpgrade8413c63a6ef3717a974094785fd0b588'] = 'Garder les traductions';
$_LANGADM['AdminUpgrade51bbcf7afb0f8d35501d0a7b28979b06'] = 'Si \"oui\", vous conserverez toutes vos traductions';
$_LANGADM['AdminUpgrade8c8194a465f0163a6724907755ac1b82'] = 'Mode manuel';
$_LANGADM['AdminUpgradedd9dbd4916653d683244119a067ca467'] = 'Choisissze \"oui\" si vous voulez vous ';
$_LANGADM['AdminUpgradee7b6d601ff4e9069e726927e211274ea'] = 'Utiliser Subversion';
$_LANGADM['AdminUpgradea15b09729294cf7fea1096f970a0fed4'] = 'Choisissez \"oui\" si vous voulez utiliser une version non stable au lieu de l';
$_LANGADM['AdminUpgrade36be1130454bc8c4e0a41d36fa062a8b'] = 'Impossible de créer le répertoire %s';
$_LANGADM['AdminUpgradee21a52b9631b01c3f1821795b8de451c'] = 'Processus de mise à niveau terminé. Félicitations! Vous pouvez maintenant réactive de votre boutique.';
$_LANGADM['AdminUpgrade7b2f224649ef2ad10a2d73595d67a876'] = 'Démarrage mise à niveau ...';
$_LANGADM['AdminUpgrade6824d57b7af37f605bd97d34defc3761'] = 'Exportation svn terminée. Suppression des fichiers exemples...';
$_LANGADM['AdminUpgradef70307d8297e48a8783d41e6f3313d51'] = 'Erreur lors de l\'export SVN';
$_LANGADM['AdminUpgrade4eecd9c195e46c054ef7da6d9d1a738b'] = 'Extraction terminée. Suppression des fichiers exemples...';
$_LANGADM['AdminUpgrade0929f38eaac3ca38801f08b7269574e0'] = 'Impossible d\'extraire %1$s dans %2$s ...';
$_LANGADM['AdminUpgrade6b2d0404b7faba0e791e15a52586a149'] = 'Basculer vers svn checkout (useSvn activé)';
$_LANGADM['AdminUpgradef0e38ac0c558a7f216ae98382b9e58f5'] = 'Site désactivé. Téléchargement en cours (peut prendre ';
$_LANGADM['AdminUpgrade4f7c02592a962e40a920f32f3a24f2df'] = 'filesToUpgrade n\'est pas un tableau';
$_LANGADM['AdminUpgrade3f10faa8b44a7175ae8fc5dcb8dec5de'] = 'Tous les fichiers ont été mis à jour. Mise à jour de la base de données en cours.';
$_LANGADM['AdminUpgrade1ad932e3b85eb2907a817cd3e3e6907e'] = 'Erreur pour la mise à jour de %s';
$_LANGADM['AdminUpgrade078a325fbcc1dbd50bd9f969ce954965'] = 'encore %2$s fichiers à mettre à jour.';
$_LANGADM['AdminUpgrade62740df131433ec9d45bf1810eefb19b'] = 'erreur pendant la mise à jour de la base de données.';
$_LANGADM['AdminUpgrade9a2f2cf276ea9f79b31a815897c0e3e6'] = '%s ignoré.';
$_LANGADM['AdminUpgrade63ded4905ba41ac4bf00373df2739576'] = 'création du répertoire %2$s. encore %3$s fichiers à mettre à jour.';
$_LANGADM['AdminUpgrade11978affb3b0dbb16c50d571fd05de6d'] = 'erreur lors de la création du répertoire %s';
$_LANGADM['AdminUpgrade1b854285afc1988b6f83414fde5943ab'] = '%1$s copié dans %2$s. encore %3$s fichiers à mettre à jour.';
$_LANGADM['AdminUpgrade0e06ce0972ad338e1d96e8589dc21b9c'] = 'erreur lors de la copie de %1$s vers %2$s';
$_LANGADM['AdminUpgrade0511620a3a1d6036d3fbe47b131d7c4b'] = 'Fichiers restorés. Restauration de la base de données.';
$_LANGADM['AdminUpgrade791403f158965a3e19f8627c7b744126'] = 'Base de données restaurée.';
$_LANGADM['AdminUpgrade5f7f50973696d0a42c1efcc07f7820a0'] = 'Votre site est maintenant restauré.';
$_LANGADM['AdminUpgrade28517b8a291c50d80aa53a078407065b'] = 'Répertoire racine nettoyée.';
$_LANGADM['AdminUpgradebb71892737d721949538d6e1c4d3d22d'] = 'Fichiers restaurés. Sauvegarde de la base de données non trouvée. Restauration terminée.';
$_LANGADM['AdminUpgradecb7dce5f6a1934d54c0d3335c7ffe841'] = 'Fichiers restaurés.';
$_LANGADM['AdminUpgrade8efc36d230f76fbfd9e4d758964e9414'] = 'impossible d\'extraire %1$ s dans%2$s.';
$_LANGADM['AdminUpgraded7624db09c15d46cd37d7709ae05e44b'] = 'aucune sauvegarde trouvée. Il n\'y a rien à restaurer.';
$_LANGADM['AdminUpgrade09a362e2dd3800f8fbc55d3446513f65'] = 'Rien à restaurer (aucune requête trouvée)';
$_LANGADM['AdminUpgrade66c4cbfb21f294b233692b67356db647'] = 'Base de données sauvegardée dans %s. Mise à jour des fichiers ...';
$_LANGADM['AdminUpgrade48f95ff09327408a578e91655ed872a1'] = '%s fichiers à sauvegarder.';
$_LANGADM['AdminUpgrade70960f2aa87d307170d3a1bc3e06d904'] = 'sauvegarde des fichiers initilialisée dans %s';
$_LANGADM['AdminUpgrade8cf728d701c50a59ef78b7c55fc27cd4'] = 'Les fichiers de sauvegarde en cours. Encore %s ...';
$_LANGADM['AdminUpgrade15b353ca964fe816547e67e1508ff85d'] = 'Fichiers sauvegardés. Sauvegarde de la base de données ...';
$_LANGADM['AdminUpgradea25c4f085558c5f6e519e56257af531f'] = 'tous les fichiers ont été ajoutés à l\'archive.';
$_LANGADM['AdminUpgrade91f805cf850500bda66426aea042602f'] = '%1$ s ajouté à l\'archive. Encore %2$.';
$_LANGADM['AdminUpgradef79479c0de75d568def0afdc1e5de04e'] = 'Erreur lorsque vous essayez d\'ajouter %1$s à l\'archive %2$s.';
$_LANGADM['AdminUpgradeb9a2db69065827812dd4b7a7f9ffc0b1'] = 'impossible d\'ouvrir l\'archive';
$_LANGADM['AdminUpgrade2589a25910cd3d7fab7e45361c4cb39d'] = '%1$s supprimé. reste %2$s ';
$_LANGADM['AdminUpgraded82eef1ba081c54686767c555670c0fe'] = 'erreur lors de la suppression de %1$s, reste encore %2$s ';
$_LANGADM['AdminUpgrade344c592d141604c614c219fad3fa0dae'] = '%1$s fichiers exemple à supprimer';
$_LANGADM['AdminUpgrade0baf8c94d1d03d1621c17cd6eabf7b9f'] = 'Tous les exemples de fichiers supprimés. Sauvegarde des fichiers en cours...';
$_LANGADM['AdminUpgrade84e31682487d5a0937f9184ebcf594ba'] = 'copie de travail déjà %s à jour. exportation vers le répertoire latest';
$_LANGADM['AdminUpgrade8f4c8c87daa3bc0311cfb61b7d36e27b'] = 'Erreur d\'extraction du SVN';
$_LANGADM['AdminUpgrade0e81132066d433d212e237678e1193a3'] = 'non authorisé à utiliser SVN';
$_LANGADM['AdminUpgradeb0d51f91a1118b7c39ee1835cc6c926a'] = 'Téléchargement terminé. Extraction ...';
$_LANGADM['AdminUpgrade0c0db54fe8212c1a7215005fef75d7dd'] = 'Erreur pendant le téléchargement';
$_LANGADM['AdminUpgrade93120c07d8c5cee44042627cd493e0e0'] = 'vous avez besoin allow_url_fopen pour le téléchargement automatique. Vous pouvez également placer le fichier manuellement dans %s';
$_LANGADM['AdminUpgrade3bb38e7d0bfd5a02f7c06cae446fee86'] = 'l\'action %s ignorée';
$_LANGADM['AdminUpgrade19f823c6453c2b1ffd09cb715214813d'] = 'Champs requis';
$_LANGADM['AdminUpgrade760c4026bc5a0bd5378e6efc3f1370b4'] = 'Trop long !';
$_LANGADM['AdminUpgrade4f2e28904946a09d8c7f36dd3ee72457'] = 'Les champs sont différents !';
$_LANGADM['AdminUpgrade43b01d1a6c5065545c65f42003b0ab5c'] = 'Adresse incorrecte !';
$_LANGADM['AdminUpgrade2e170dfd78c2171a25605ececc0950a4'] = 'Impossible d\'envoyer l\'email !';
$_LANGADM['AdminUpgrade6deee80e4bdb8894331994116818558e'] = 'Erreur à la création du fichier de configuration, si le fichier /config/settings.inc.php existe, veuillez lui donner les droits publics d\'écriture; sinon veuillez créer un fichier settings.inc.php dans le répertoire de configuration (/config/)';
$_LANGADM['AdminUpgradeaa946cb00b1c23ff6553b6f9e05da151'] = 'Le fichier de paramètres n\'a pu être écrit, veuillez créer un fichier nommé settings.inc.php dans votre répertoire de configuration.';
$_LANGADM['AdminUpgradee930e2474c664a3a7e89ecfb8793694b'] = 'Impossible d\'envoyer le fichier !';
$_LANGADM['AdminUpgrade774fc7a0f56391abc5d8856f2436ca07'] = 'L\'intégrité des données n\'est pas validée.';
$_LANGADM['AdminUpgrade8fd007bf08e0717537825a3e91cb4fcc'] = 'Impossible de lire le contenu d\'un des fichiers *.sql.';
$_LANGADM['AdminUpgradec71e825f6873f64b91efc26313614eab'] = 'Impossible d\'accéder au contenu d\'un des fichiers *.sql.';
$_LANGADM['AdminUpgrade3d5c8f1d29b1a1dc4ea0673122e0d277'] = 'Erreur lors de l\'insertion dans la base :';
$_LANGADM['AdminUpgrade17e1581d01152347bfaacd153b961379'] = 'Mot de passe incorrect (chaîne alpha-numérique d\'au moins 8 caractères)';
$_LANGADM['AdminUpgrade9b9f3b2f8a4dffcad9188c8fc4b468c8'] = 'Une base de données PrestaShop existe déjà avec ce préfixe, vous devez la supprimer manuellement ou changer son préfixe.';
$_LANGADM['AdminUpgradebc5e1163a15106f9e941a7603124709d'] = 'Ce n\'est pas un nom valide.';
$_LANGADM['AdminUpgradea9d82945b8603f0c8807958d7db9a24d'] = 'Ce n\'est pas une image valide.';
$_LANGADM['AdminUpgradeb37eef07b764ea58eec9afe624e20a40'] = 'Erreur lors de la création du fichier /config/settings.inc.php.';
$_LANGADM['AdminUpgrade3d9f514d46849760ef1b1412e314fd99'] = 'Erreur :';
$_LANGADM['AdminUpgrade504053ab4c6d648edf11624f1bea4bb4'] = 'Cette base de données PrestaShop existe déjà, merci de revalider vos informations d\'authentification à la base de données.';
$_LANGADM['AdminUpgraded7a99f61bb284d096ea4f221784af85a'] = 'Une erreur est survenue lors du redimensionnement de l\'image.';
$_LANGADM['AdminUpgrade428c933bafbf262d693fbf1c22c03e5d'] = 'La base de données a été trouvée !';
$_LANGADM['AdminUpgrade76bd190129b7aefb90fdf42f09ec3ec7'] = 'Le serveur de bases de données est disponible mais la base de données n\'a pas été trouvée';
$_LANGADM['AdminUpgrade045f4b5c3f990e5a26e2837495d68259'] = 'Le serveur de bases de données n\'a pas été trouvé, merci de vérifier vos identifiants ou le nom du serveur.';
$_LANGADM['AdminUpgrade757fc72e8d69106dd2cf9da22cc7adb1'] = 'Une erreur est survenue lors de l\'envoi de l\'email, merci de vérifier vos paramètres.';
$_LANGADM['AdminUpgraded18ad19290b3bfc3cd0d7badbb6cb6a3'] = 'Impossible d\'écrire l\'image /img/logo.jpg. Si celle-ci existe déjà, merci de la supprimer manuellement.';
$_LANGADM['AdminUpgrade2368e33e3e01d53abb9b60061ab83903'] = 'Le fichier envoyé dépasse la taille maximum autorisée.';
$_LANGADM['AdminUpgradea10ef376d9f4c877ac86d8e4350116bf'] = 'Le fichier envoyé dépasse la taille maximum autorisée.';
$_LANGADM['AdminUpgradef8fe8cba1625eaf8e5c253b041d57dbd'] = 'Le fichier a été envoyé partiellement.';
$_LANGADM['AdminUpgrade8c9067e52e4440d8a20e74fdc745b0c6'] = 'Aucun fichier n\'a été envoyé';
$_LANGADM['AdminUpgrade2384d693d9af53b4727c092af7570a19'] = 'Il manque le dossier temporaire de réception de vos envois de fichiers. Merci de consulter votre administrateur système.';
$_LANGADM['AdminUpgradef5985b2c059d5cc36968baab7585baba'] = 'Impossible d\'écrire le fichier sur le disque';
$_LANGADM['AdminUpgrade9e54dfe54e03b0010c1fe70bd65cd5e6'] = 'Envoi de fichier interrompu à cause de l\'extension incorrecte';
$_LANGADM['AdminUpgrade32af3a59b50e98d254d6c03c5b320a94'] = 'Impossible de convertir les données de votre base de données en utf-8.';
$_LANGADM['AdminUpgrade989a45a4ca01ee222f4370172bf8850d'] = 'Nom de boutique invalide';
$_LANGADM['AdminUpgrade68499acecfba9d3bf0ca8711f300d3ed'] = 'Votre prénom contient des caractères invalides';
$_LANGADM['AdminUpgrade2399cf4ca7b49f2706f6e147a32efa78'] = 'Votre nom contient des caractères invalides';
$_LANGADM['AdminUpgrade7d72600fcff52fb3a2d2f73572117311'] = 'Votre serveur de base de données ne supporte pas le jeu de caractère utf-8.';
$_LANGADM['AdminUpgrade5b9bbadcf96f15e7f112c13a9e5f076e'] = 'Le support de ce moteur de base de donnée n\'est pas supporté, veuillez en choisir un autre tel que MyISAM';
$_LANGADM['AdminUpgrade24b481455c1b72b0c2539e7d516b9582'] = 'Le fichier /img/logo.jpg n\'a pas les droits d\'écriture, merci d\'effectuer un CHMOD 755 ou 777 sur ce fichier';
$_LANGADM['AdminUpgrade5746b74663148afffd1350c97d4fcdfe'] = 'Champ mode catalog invalide';
$_LANGADM['AdminUpgrade9e5459c4deb20b7842ac01e97390b334'] = 'Erreur inconnue.';
$_LANGADM['AdminUpgradedafe44b99256a7783bc37f4f949da373'] = 'Cet installeur est trop vieux.';
$_LANGADM['AdminUpgrade37ce0f29c7377c827e7247fe5645a782'] = 'Vous êtes déjà en possession de la version %s';
$_LANGADM['AdminUpgrade89928a14f2090aec4fd7aff9ea983f95'] = 'Pas de version antérieur détectée. Avez-vous supprimé ou renommé le fichier settings.inc.php du dossier config ?';
$_LANGADM['AdminUpgrade5276a8cbd9e3e467396089b267564f51'] = 'Le fichier config/settings.inc.php n\'a pas été trouvé. L\'avez-vous supprimé ou renommé ?';
$_LANGADM['AdminUpgrade24784d9e80638781b74c017b33d8ca0c'] = 'Impossible de trouver un des fichiers de mise à jour SQL. Merci de vérifier que le dossier /install/sql/upgrade n\'est pas vide.';
$_LANGADM['AdminUpgrade580e4b216e324f675f0237cdb34b6c2d'] = 'Pas de mise à jour disponible';
$_LANGADM['AdminUpgradef15e7e7292b0c72894cf45a893e0d497'] = 'Erreur lors de l\'ouverture du fichier SQL';
$_LANGADM['AdminUpgradeb8286438fbb6c7df9129fadc5316c19f'] = 'Erreur lors de l\'insertion dans la base de données';
$_LANGADM['AdminUpgrade229ee8046cafc09ddaf46fb9db710e91'] = 'Malheureusement,';
$_LANGADM['AdminUpgradee805a556799b7cef40e9760c81d99218'] = 'erreurs SQL sont apparues.';
$_LANGADM['AdminUpgrade5627353fd6ac678497af3ece05087068'] = 'Le fichier config/defines.inc.php n\'a pas été trouvé. Ou est-il passé ?';
$_LANGADM['AdminUpgrade446c9e952debe114c86bbd9e5eea7d61'] = 'Restaurer';
$_LANGADM['AdminUpgrade4879913b16fa23f723f70a5067bda8d4'] = 'Aucune restauration disponible';
$_LANGADM['AdminUpgradefff66e9b3d962fa319c8068b5c1997cd'] = 'restaurer';
$_LANGADM['AdminUpgradeebdabc2d40aa563aabbb3ee57915a7a9'] = 'cliquer pour restaurer %s';
$_LANGADM['AdminUpgradee9c57c7fbc335e66282a32617b01b9be'] = 'Votre configuration actuelle';
$_LANGADM['AdminUpgrade2fc4ab825ce2ce9476e8a1c2211ac9b8'] = 'Dossier racine';
$_LANGADM['AdminUpgrade8786f48d9cf9618cd2f5c37312ab7e50'] = 'Statut du dossier racine';
$_LANGADM['AdminUpgraded16d80ca66261afba43f5736f6cec7e6'] = 'droits complets en écriture';
$_LANGADM['AdminUpgrade039552aa1d74b68f01a73821f3078158'] = 'pas de droits d\'écriture récursif';
$_LANGADM['AdminUpgrade31a962ffeb06a6cc6d58ef3ba5fae2b7'] = 'Autoupgrade autorisé';
$_LANGADM['AdminUpgrade9c30a74657158984997cca4930d6075b'] = 'Cette version autorise la mise à jour automatique';
$_LANGADM['AdminUpgradeaf566be1636d11ecc8ddb728a15520b8'] = 'Cette version n\'autorise pas la mise à jour automatique';
$_LANGADM['AdminUpgrade94af5df6182efd3591d0ccccaa04bd5c'] = 'Limite de temps PHP';
$_LANGADM['AdminUpgrade075ae3d2fc31640504f814f60e5ef713'] = 'désactivée';
$_LANGADM['AdminUpgrade783e8e29e6a8c3e22baa58a19420eb4f'] = 'secondes';
$_LANGADM['AdminUpgrade342299aeb786a06533ba00d9a04794dd'] = 'Modifiez vos options';
$_LANGADM['AdminUpgrade06933067aafd48425d67bcb01bba5cb6'] = 'Mettre à jour';
$_LANGADM['AdminUpgrade5d8b77b69c92370ec4e175a638019ca7'] = 'La version actuelle de votre boutique est : %s';
$_LANGADM['AdminUpgrade80e3d093272bc011b6bc661e408c7423'] = 'La dernière version est %1$s (%2$s)';
$_LANGADM['AdminUpgradeb47ba7568788e46dbc7fe81e525db863'] = 'La dernière version de prestashop disponible est:';
$_LANGADM['AdminUpgradec97dcfb0df6daa46292a0def8a567822'] = 'Sauvegardez la base de données, les fichiers de sauvegarde et faire la mise en un clic pardi !';
$_LANGADM['AdminUpgradea60ab62ed99ef0358b2efae592be0cdd'] = 'Mettre à jour PrestaShop Maintenant !';
$_LANGADM['AdminUpgrade48c7c41b72e1d678923ce3571aa65b2d'] = 'Etape';
$_LANGADM['AdminUpgradeeeb5a49c38d2d8c2baa51ed09beccf88'] = 'Etape de mise à jour';
$_LANGADM['AdminUpgradec5d769685704e7ddcd70e74a6ebe50b7'] = 'Votre configuration actuelle n\'autorise pas la mise à jour.';
$_LANGADM['AdminUpgrade6b3930a184368a458be6e4429f409877'] = 'Mise à jour terminée. Vérifiez votre boutique (essayez de faire une commande, vérifier le thème)';
$_LANGADM['AdminUpgrade91195bbbacc2147a736c849c46368ed8'] = 'Voulez vous restaurer votre boutique';
$_LANGADM['AdminUpgradea498f9476a893d51ee02b3601678d318'] = 'Cliquez pour restaurer la base de donnée';
$_LANGADM['AdminUpgradef34d5debb2bba76aa3e077937a07e373'] = 'Cliquez pour restaurer les fichiers';
$_LANGADM['AdminUpgrade60283aa37e2063b2ada2f99216e1332a'] = 'Votre serveur ne peut pas télécharger le fichier. S\'il vous plaît le télécharger d\'abord par ftp dans votre répertoire admin/autoupgrade';
$_LANGADM['AdminUpgrade6ef7ebe46f6d16cdbf9e2169e3dd048e'] = 'Allez manuellement au bouton restaurer';
$_LANGADM['AdminWebservice897356954c2cd3d41b221e3f24f99bba'] = 'Clé';
$_LANGADM['AdminWebservice00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Activé';
$_LANGADM['AdminWebservice52699c78843b98f98620186a59b0a3fa'] = 'Description de la clé';