[+] Classes: Add ObjectModel::hydrateCollection() in order to transform arrays from sql queries return in list of objects
This commit is contained in:
@@ -50,8 +50,8 @@ class AdminCustomers extends AdminTab
|
||||
$genders = array(0 => $this->l('?'));
|
||||
foreach (Gender::getGenders() as $gender)
|
||||
{
|
||||
$genders_icon[$gender['id_gender']] = '../genders/'.$gender['id_gender'].'.jpg';
|
||||
$genders[$gender['id_gender']] = $gender['name'];
|
||||
$genders_icon[$gender->id] = '../genders/'.$gender->id.'.jpg';
|
||||
$genders[$gender->id] = $gender->name;
|
||||
}
|
||||
|
||||
$this->fieldsDisplay = array(
|
||||
@@ -723,8 +723,8 @@ class AdminCustomers extends AdminTab
|
||||
<div class="margin-form">';
|
||||
foreach (Gender::getGenders() as $gender)
|
||||
{
|
||||
echo '<input type="radio" size="33" name="id_gender" id="gender_'.$gender['id_gender'].'" value="'.$gender['id_gender'].'" '.($this->getFieldValue($obj, 'id_gender') == $gender['id_gender'] ? 'checked="checked" ' : '').'/>';
|
||||
echo '<label class="t" for="gender_'.$gender['id_gender'].'"> '.$gender['name'].'</label> ';
|
||||
echo '<input type="radio" size="33" name="id_gender" id="gender_'.$gender->id.'" value="'.$gender->id.'" '.($this->getFieldValue($obj, 'id_gender') == $gender->id ? 'checked="checked" ' : '').'/>';
|
||||
echo '<label class="t" for="gender_'.$gender->id.'"> '.$gender->name.'</label> ';
|
||||
}
|
||||
echo ' <input type="radio" size="33" name="id_gender" id="gender_unknown" value="0" '.(($this->getFieldValue($obj, 'id_gender') == 9 || !$this->getFieldValue($obj, 'id_gender')) ? 'checked="checked" ' : '').'/>
|
||||
<label class="t" for="gender_unknown"> '.$this->l('Unknown').'</label>
|
||||
|
||||
Vendored
+10
-6
@@ -6,7 +6,7 @@
|
||||
'AddressFormatCore' => 'classes/AddressFormat.php',
|
||||
'AddressFormat' => 'override/classes/AddressFormat.php',
|
||||
'AdminControllerCore' => 'classes/AdminController.php',
|
||||
'AdminController' => '',
|
||||
'AdminController' => 'override/classes/AdminController.php',
|
||||
'AdminTabCore' => 'classes/AdminTab.php',
|
||||
'AdminTab' => 'override/classes/AdminTab.php',
|
||||
'AliasCore' => 'classes/Alias.php',
|
||||
@@ -108,6 +108,7 @@
|
||||
'HelpAccess' => 'override/classes/HelpAccess.php',
|
||||
'HelperCore' => 'classes/Helper.php',
|
||||
'Helper' => 'override/classes/Helper.php',
|
||||
'HelperList' => 'classes/HelperList.php',
|
||||
'HookCore' => 'classes/Hook.php',
|
||||
'Hook' => 'override/classes/Hook.php',
|
||||
'ImageCore' => 'classes/Image.php',
|
||||
@@ -192,7 +193,8 @@
|
||||
'RangeWeight' => 'override/classes/RangeWeight.php',
|
||||
'ReferrerCore' => 'classes/Referrer.php',
|
||||
'Referrer' => 'override/classes/Referrer.php',
|
||||
'RequestSql' => 'classes/RequestSql.php',
|
||||
'RequestSqlCore' => 'classes/RequestSql.php',
|
||||
'RequestSql' => 'override/classes/RequestSql.php',
|
||||
'RijndaelCore' => 'classes/Rijndael.php',
|
||||
'Rijndael' => 'override/classes/Rijndael.php',
|
||||
'SceneCore' => 'classes/Scene.php',
|
||||
@@ -289,10 +291,12 @@
|
||||
'WebserviceSpecificManagementSearchCore' => 'classes/webservice/WebserviceSpecificManagementSearch.php',
|
||||
'WebserviceSpecificManagementSearch' => 'override/classes/webservice/WebserviceSpecificManagementSearch.php',
|
||||
'FB' => 'override/classes/fb.php',
|
||||
'AdminAddressesControllerCore' => 'controllers/admin/AdminAddressesController.php',
|
||||
'AdminAddressesController' => '',
|
||||
'AdminHomeControllerCore' => 'controllers/admin/AdminHomeController.php',
|
||||
'AdminHomeController' => '',
|
||||
'AdminHomeController' => 'override/controllers/admin/AdminHomeController.php',
|
||||
'AdminToolsControllerCore' => 'controllers/admin/AdminToolsController.php',
|
||||
'AdminToolsController' => '',
|
||||
'AdminToolsController' => 'override/controllers/admin/AdminToolsController.php',
|
||||
'AddressControllerCore' => 'controllers/front/AddressController.php',
|
||||
'AddressController' => 'override/controllers/front/AddressController.php',
|
||||
'AddressesControllerCore' => 'controllers/front/AddressesController.php',
|
||||
@@ -358,9 +362,9 @@
|
||||
'PdfInvoiceControllerCore' => 'controllers/front/PdfInvoiceController.php',
|
||||
'PdfInvoiceController' => 'override/controllers/front/PdfInvoiceController.php',
|
||||
'PdfOrderReturnControllerCore' => 'controllers/front/PdfOrderReturnController.php',
|
||||
'PdfOrderReturnController' => 'override/controllers/front/pdfOrderReturnController.php',
|
||||
'PdfOrderReturnController' => 'override/controllers/front/PdfOrderReturnController.php',
|
||||
'PdfOrderSlipControllerCore' => 'controllers/front/PdfOrderSlipController.php',
|
||||
'PdfOrderSlipController' => 'override/controllers/front/pdfOrderSlipController.php',
|
||||
'PdfOrderSlipController' => 'override/controllers/front/PdfOrderSlipController.php',
|
||||
'PricesDropControllerCore' => 'controllers/front/PricesDropController.php',
|
||||
'PricesDropController' => 'override/controllers/front/PricesDropController.php',
|
||||
'ProductControllerCore' => 'controllers/front/ProductController.php',
|
||||
|
||||
+4
-2
@@ -77,10 +77,12 @@ class GenderCore extends ObjectModel
|
||||
if (is_null($id_lang))
|
||||
$id_lang = Context::getContext()->language->id;
|
||||
|
||||
$sql = 'SELECT g.id_gender, gl.name
|
||||
$sql = 'SELECT g.*, gl.*
|
||||
FROM '._DB_PREFIX_.'gender g
|
||||
LEFT JOIN '._DB_PREFIX_.'gender_lang gl ON g.id_gender = gl.id_gender AND gl.id_lang = '.(int)$id_lang;
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);
|
||||
$results = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);
|
||||
|
||||
return ObjectModel::hydrateCollection('Gender', $results, $id_lang);
|
||||
}
|
||||
|
||||
public static function getStaticImage($id, $useUnknown = false)
|
||||
|
||||
+112
-6
@@ -31,23 +31,23 @@ abstract class ObjectModelCore
|
||||
public $id;
|
||||
|
||||
/** @var integer lang id */
|
||||
protected $id_lang = NULL;
|
||||
protected $id_lang = null;
|
||||
|
||||
protected $id_shop = NULL;
|
||||
protected $id_shop = null;
|
||||
|
||||
private $getShopFromContext = true;
|
||||
|
||||
/** @var string SQL Table name */
|
||||
protected $table = NULL;
|
||||
protected $table = null;
|
||||
|
||||
/** @var string SQL Table identifier */
|
||||
protected $identifier = NULL;
|
||||
protected $identifier = null;
|
||||
|
||||
/** @var array Required fields for admin panel forms */
|
||||
protected $fieldsRequired = array();
|
||||
|
||||
/** @var fieldsRequiredDatabase */
|
||||
protected static $fieldsRequiredDatabase = NULL;
|
||||
protected static $fieldsRequiredDatabase = null;
|
||||
|
||||
/** @var array Maximum fields size for admin panel forms */
|
||||
protected $fieldsSize = array();
|
||||
@@ -75,7 +75,7 @@ abstract class ObjectModelCore
|
||||
protected static $_cache = array();
|
||||
|
||||
/** @var string path to image directory. Used for image deletion. */
|
||||
protected $image_dir = NULL;
|
||||
protected $image_dir = null;
|
||||
|
||||
/** @var string file type of image files. Used for image deletion. */
|
||||
protected $image_format = 'jpg';
|
||||
@@ -922,4 +922,110 @@ abstract class ObjectModelCore
|
||||
$query->where('`active` = 1');
|
||||
return (bool)Db::getInstance()->getValue($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get object identifier name
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @return string
|
||||
*/
|
||||
public function getIdentifier()
|
||||
{
|
||||
return $this->identifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get list of fields related to language to validate
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @return array
|
||||
*/
|
||||
public function getFieldsValidateLang()
|
||||
{
|
||||
return $this->fieldsValidateLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill an object with given data. Data must be an array with this syntax: array(objProperty => value, objProperty2 => value, etc.)
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @param array $data
|
||||
* @param int $id_lang
|
||||
*/
|
||||
public function hydrate(array $data, $id_lang = null)
|
||||
{
|
||||
$identifier = $this->getIdentifier();
|
||||
if (!array_key_exists($identifier, $data))
|
||||
throw new PrestashopException("Identifier '$identifier' not found for class '".get_class($this)."'");
|
||||
|
||||
$this->id_lang = null;
|
||||
$this->id = $data[$identifier];
|
||||
foreach ($data as $key => $value)
|
||||
if (array_key_exists($key, $this))
|
||||
$this->$key = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill (hydrate) a list of objects in order to get a collection of these objects
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @param string $class Class of objects to hydrate
|
||||
* @param array $datas List of data (multi-dimensional array)
|
||||
* @param int $id_lang
|
||||
* @return array
|
||||
*/
|
||||
public static function hydrateCollection($class, array $datas, $id_lang = null)
|
||||
{
|
||||
if (!class_exists($class))
|
||||
throw new PrestashopException("Class '$class' not found");
|
||||
|
||||
$collection = array();
|
||||
$group_keys = array();
|
||||
$rows = array();
|
||||
$identifier = $fieldsValidateLang = null;
|
||||
foreach ($datas as $row)
|
||||
{
|
||||
// Get class identifier and fieldsValidateLang only the first time
|
||||
if (is_null($identifier))
|
||||
{
|
||||
$obj = new $class;
|
||||
if (!$obj instanceof ObjectModel)
|
||||
throw new PrestashopException("Class '$class' must be an instance of class ObjectModel");
|
||||
$identifier = $obj->getIdentifier();
|
||||
$fieldsValidateLang = $obj->getFieldsValidateLang();
|
||||
}
|
||||
|
||||
// Get primary key
|
||||
if (!array_key_exists($identifier, $row))
|
||||
throw new PrestashopException("Identifier '$identifier' not found for class '$class'");
|
||||
$id = $row[$identifier];
|
||||
|
||||
// Get object common properties
|
||||
if (!isset($rows[$id]))
|
||||
$rows[$id] = $row;
|
||||
|
||||
// Get object lang properties
|
||||
if (isset($row['id_lang']) && !$id_lang)
|
||||
{
|
||||
foreach ($fieldsValidateLang as $field => $validator)
|
||||
{
|
||||
if (!$id_lang)
|
||||
{
|
||||
if (!is_array($rows[$id][$field]))
|
||||
$rows[$id][$field] = array();
|
||||
$rows[$id][$field][$row['id_lang']] = $row[$field];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hydrate objects
|
||||
foreach ($rows as $row)
|
||||
{
|
||||
$obj = new $class;
|
||||
$obj->hydrate($row, $id_lang);
|
||||
$collection[] = $obj;
|
||||
}
|
||||
return $collection;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,15 +107,6 @@ class AddressControllerCore extends FrontController
|
||||
$_POST['firstname'] = $this->context->customer->firstname;
|
||||
$_POST['lastname'] = $this->context->customer->lastname;
|
||||
}
|
||||
|
||||
if ($this->ajax && count($this->errors))
|
||||
{
|
||||
$return = array(
|
||||
'hasError' => !empty($this->errors),
|
||||
'errors' => $this->errors
|
||||
);
|
||||
die(Tools::jsonEncode($return));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -365,5 +356,16 @@ class AddressControllerCore extends FrontController
|
||||
'vat_display' => $vat_display,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
public function displayAjax()
|
||||
{
|
||||
if (count($this->errors))
|
||||
{
|
||||
$return = array(
|
||||
'hasError' => !empty($this->errors),
|
||||
'errors' => $this->errors
|
||||
);
|
||||
die(Tools::jsonEncode($return));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,8 @@ class AddressesControllerCore extends FrontController
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
if (!Validate::isLoadedObject($this->context->customer))
|
||||
die(Tools::displayError('Customer not found'));
|
||||
}
|
||||
|
||||
@@ -26,4 +26,4 @@
|
||||
*/
|
||||
|
||||
require(dirname(__FILE__).'/config/config.inc.php');
|
||||
Dispatcher::getInstance()->dispatch();
|
||||
Dispatcher::getInstance()->dispatch();
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
@@ -39,7 +39,7 @@ class BlockPaymentLogo extends Module
|
||||
$this->need_instance = 0;
|
||||
|
||||
parent::__construct();
|
||||
|
||||
|
||||
$this->displayName = $this->l('Block payment logo');
|
||||
$this->description = $this->l('Adds a block to display all payment logos.');
|
||||
}
|
||||
@@ -55,7 +55,7 @@ class BlockPaymentLogo extends Module
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public function uninstall()
|
||||
{
|
||||
Configuration::deleteByName('PS_PAYMENT_LOGO_CMS_ID');
|
||||
@@ -67,16 +67,16 @@ class BlockPaymentLogo extends Module
|
||||
$html = '
|
||||
<h2>'.$this->l('Payment logo').'</h2>
|
||||
';
|
||||
|
||||
|
||||
if (Tools::isSubmit('submitConfiguration'))
|
||||
if (Validate::isUnsignedInt(Tools::getValue('id_cms')))
|
||||
{
|
||||
Configuration::updateValue('PS_PAYMENT_LOGO_CMS_ID', (int)(Tools::getValue('id_cms')));
|
||||
$html .= $this->displayConfirmation($this->l('Settings are updated'));
|
||||
}
|
||||
|
||||
|
||||
$cmss = CMS::listCms($this->context->language->id);
|
||||
|
||||
|
||||
if (!sizeof($cmss))
|
||||
$html .= $this->displayError($this->l('No CMS page is available'));
|
||||
else
|
||||
@@ -110,8 +110,8 @@ class BlockPaymentLogo extends Module
|
||||
{
|
||||
if (Configuration::get('PS_CATALOG_MODE'))
|
||||
return ;
|
||||
|
||||
|
||||
|
||||
|
||||
if (!Configuration::get('PS_PAYMENT_LOGO_CMS_ID'))
|
||||
return;
|
||||
$cms = new CMS(Configuration::get('PS_PAYMENT_LOGO_CMS_ID'), $this->context->language->id);
|
||||
@@ -120,7 +120,7 @@ class BlockPaymentLogo extends Module
|
||||
$this->context->smarty->assign('cms_payement_logo', $cms);
|
||||
return $this->display(__FILE__, 'blockpaymentlogo.tpl');
|
||||
}
|
||||
|
||||
|
||||
public function hookRightColumn($params)
|
||||
{
|
||||
return $this->hookLeftColumn($params);
|
||||
|
||||
@@ -52,8 +52,8 @@ countries = new Array();
|
||||
<p class="radio required">
|
||||
<span>{l s='Title'}</span>
|
||||
{foreach from=$genders key=k item=gender}
|
||||
<input type="radio" name="id_gender" id="id_gender{$gender.id_gender}" value="{$gender.id_gender}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender.id_gender}checked="checked"{/if} />
|
||||
<label for="id_gender{$gender.id_gender}" class="top">{$gender.name}</label>
|
||||
<input type="radio" name="id_gender" id="id_gender{$gender->id}" value="{$gender->id}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender->id}checked="checked"{/if} />
|
||||
<label for="id_gender{$gender->id}" class="top">{$gender->name}</label>
|
||||
{/foreach}
|
||||
</p>
|
||||
<p class="required text">
|
||||
|
||||
@@ -147,8 +147,8 @@ $(function(){ldelim}
|
||||
<p class="radio required">
|
||||
<span>{l s='Title'}</span>
|
||||
{foreach from=$genders key=k item=gender}
|
||||
<input type="radio" name="id_gender" id="id_gender{$gender.id_gender}" value="{$gender.id_gender}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender.id_gender}checked="checked"{/if} />
|
||||
<label for="id_gender{$gender.id_gender}" class="top">{$gender.name}</label>
|
||||
<input type="radio" name="id_gender" id="id_gender{$gender->id}" value="{$gender->id}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender->id}checked="checked"{/if} />
|
||||
<label for="id_gender{$gender->id}" class="top">{$gender->name}</label>
|
||||
{/foreach}
|
||||
</p>
|
||||
<p class="required text">
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
<p class="radio">
|
||||
<span>{l s='Title'}</span>
|
||||
{foreach from=$genders key=k item=gender}
|
||||
<input type="radio" name="id_gender" id="id_gender{$gender.id_gender}" value="{$gender.id_gender}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender.id_gender}checked="checked"{/if} />
|
||||
<label for="id_gender{$gender.id_gender}" class="top">{$gender.name}</label>
|
||||
<input type="radio" name="id_gender" id="id_gender{$gender->id}" value="{$gender->id}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender->id}checked="checked"{/if} />
|
||||
<label for="id_gender{$gender->id}" class="top">{$gender->name}</label>
|
||||
{/foreach}
|
||||
</p>
|
||||
<p class="required text">
|
||||
|
||||
Reference in New Issue
Block a user