Add index.php file to googlemerchant XML module with redirect headers

This commit introduces a new index.php file in the googlemerchant XML module. The file contains headers to prevent caching and redirects users to the parent directory. This is part of the module's structure to ensure proper access control and user experience.
This commit is contained in:
2026-02-16 22:37:27 +01:00
parent 85dbd5041e
commit 8d14e5d95c
48 changed files with 14455 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
<?php
class Helper {
protected function l($string, $class = 'AdminTab', $addslashes = false, $htmlentities = true)
{
// if the class is extended by a module, use modules/[module_name]/xx.php lang file
$currentClass = get_class($this);
if (Module::getModuleNameFromClass($currentClass))
{
$string = str_replace('\'', '\\\'', $string);
return Module::findTranslation(Module::$classInModule[$currentClass], $string, $currentClass);
}
global $_LANGADM;
if ($class == __CLASS__)
$class = 'AdminTab';
$key = md5(str_replace('\'', '\\\'', $string));
$str = (key_exists(get_class($this).$key, $_LANGADM)) ? $_LANGADM[get_class($this).$key] : ((key_exists($class.$key, $_LANGADM)) ? $_LANGADM[$class.$key] : $string);
$str = $htmlentities ? htmlentities($str, ENT_QUOTES, 'utf-8') : $str;
return str_replace('"', '&quot;', ($addslashes ? addslashes($str) : stripslashes($str)));
}
}

View File

@@ -0,0 +1,240 @@
<?php
class helperForm extends Module {
public function generateForm($fields_form) {
return $this->displayForm($fields_form);
}
public function displayForm($fields_form)
{
global $currentIndex, $cookie;
$html = '';
$allowEmployeeFormLang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
if ($allowEmployeeFormLang && !$cookie->employee_form_lang)
$cookie->employee_form_lang = (int)_PS_LANG_DEFAULT_;
$useLangFromCookie = false;
$this->_languages = Language::getLanguages(false);
if ($allowEmployeeFormLang)
foreach ($this->_languages as $lang)
if ($cookie->employee_form_lang == $lang['id_lang'])
$useLangFromCookie = true;
if (!$useLangFromCookie)
$this->_defaultFormLanguage = (int)(Configuration::get('PS_LANG_DEFAULT'));
else
$this->_defaultFormLanguage = (int)$cookie->employee_form_lang;
$html .= '
<script type="text/javascript">
$(document).ready(function() {
id_language = '.$this->_defaultFormLanguage.';
languages = new Array();';
foreach ($this->_languages as $k => $language)
$html .= '
languages['.$k.'] = {
id_lang: '.(int)$language['id_lang'].',
iso_code: \''.$language['iso_code'].'\',
name: \''.htmlentities($language['name'], ENT_COMPAT, 'UTF-8').'\'
};';
$html .= '
displayFlags(languages, id_language, '.$allowEmployeeFormLang.');
});
</script>';
//definiowanie pól wielojęzykowych
foreach($fields_form as $ff) {
foreach($ff['form']['input'] as $field) {
if($field['lang']) $lang_fields[] = $field['name'];
}
}
if(isset($lang_fields))
$langtags = implode('¤', $lang_fields);
else
$langtags = '';
$html .= '
<form action="'.$this->currentIndex.'&token='.$this->token.'" method="post" enctype="multipart/form-data">
<script type="text/javascript" src="../js/jquery/jquery-colorpicker.js"></script>
';
//TO_DO: hint, desc, suffix, required
foreach($fields_form as $ff) {
$html .= '
<fieldset style="width: 905px;">
<legend>'.$ff['form']['legend']['title'].'</legend>
';
if(isset($ff['form']['input'])) {
foreach($ff['form']['input'] as $field) {
$html .= '
<label'.(($field['type'] == 'hidden') ? ' style="display:none;"' : '').'>'.$field['label'].'</label>
<div class="margin-form"'.(($field['type'] == 'hidden') ? ' style="display:none;"' : '').'>
';
switch($field['type']) {
case 'hidden' : {
$html .= '
<input type="text" size="'.(!empty($field['size']) ? $field['size'] : '').'" name="'.$field['name'].'" value="'.htmlentities($this->fields_value[$field['name']], ENT_COMPAT, 'UTF-8').'" />
';
} break;
case 'radio' : {
foreach($field['values'] as $value) {
$html .= '
<input type="radio" name="'.$field['name'].'" id="'.$field['name'].'_'.$value['id'].'" value="'.$value['value'].'" '.(($this->fields_value[$field['name']] == $value['value']) ? 'checked="checked" ' : '').'/>
';
if($value['label'] == 'Enabled')
$html .= '
<label class="t" for="'.$value['id'].'"> <img src="../img/admin/enabled.gif" alt="'.$value['label'].'" title="'.$value['label'].'" /></label>
';
elseif($value['label'] == 'Disabled')
$html .= '
<label class="t" for="'.$value['id'].'"> <img src="../img/admin/disabled.gif" alt="'.$value['label'].'" title="'.$value['label'].'" /></label>
';
else
$html .= '
<label class="t" for="'.$value['id'].'">'.$value['label'].'</label>
';
}
} break;
case 'checkbox' : {
//todo in future
} break;
case 'select' : {
$html .= '<select name="'.$field['name'].'" id="'.$field['name'].'" style="width:40%">';
foreach($field['options']['query'] as $option) {
$html .= '
<option value="'.$option[$field['options']['id']].'" '.(($this->fields_value[$field['name']] == $option[$field['options']['id']]) ? ' selected="selected"' : '').'>'.$option[$field['options']['name']].'</option>
';
}
$html .= '</select>';
} break;
case 'date' : {
$date_fields[] = $field['name'];
$html .= '
<input name="'.$field['name'].'" id="'.$field['name'].'" type="text" style="text-align: center" value="'.htmlentities($this->fields_value[$field['name']], ENT_COMPAT, 'UTF-8').'"></input>
';
} break;
case 'color' : {
$html .= '
<div>
<input width="20px" type="color" data-hex="true" class="color mColorPickerInput mColorPicker" name="'.$field['name'].'" value="'.htmlentities($this->fields_value[$field['name']], ENT_COMPAT, 'UTF-8').'" />
</div>';
} break;
case 'textarea' : {
if(isset($field['class']) && strpos($field['class'], 'rte') !== false) {
$attrs = 'class="rte" cols="100" rows="10"';
}
else {
$attrs = 'class="'.(!empty($field['class']) ? $field['class'] : '').'" cols="'.(!empty($field['cols']) ? (int)$field['cols'] : 94).'" rows="'.(!empty($field['rows']) ? (int)$field['rows'] : 10).'"';
}
if($field['lang']) {
$html .= '<div class="translatable">';
foreach ($this->_languages as $language) {
$html .= '
<div style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
<textarea '.$attrs.' id="'.$field['name'].'_'.$language['id_lang'].'" name="'.$field['name'].'_'.$language['id_lang'].'">'.htmlentities($this->fields_value[$field['name']][$language['id_lang']], ENT_COMPAT, 'UTF-8').'</textarea>
</div>
';
}
$this->displayFlags($this->_languages, $this->_defaultFormLanguage, $langtags, $field['name']);
$html .= '</div>';
$html .= '
<p class="preference_description" style="clear:both;">'.(isset($field['desc']) ? $field['desc'] : '').'</p>
';
$html .= '<div class="clear"></div>';
}
else {
$html .= '
<div>
<textarea '.$attrs.' name="'.$field['name'].'">'.htmlentities($this->fields_value[$field['name']], ENT_COMPAT, 'UTF-8').'</textarea>
</div>
';
}
} break;
default : { // text
if($field['lang']) {
foreach ($this->_languages as $language)
$html .= '
<div id="'.$field['name'].'_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
<input size="'.(!empty($field['size']) ? (int)$field['size'] : 90).'" maxlength="'.(!empty($field['maxlength']) ? (int)$field['maxlength'] : '').'" type="text" name="'.$field['name'].'_'.$language['id_lang'].'" id="'.$field['name'].'_'.$language['id_lang'].'" value="'.htmlentities($this->fields_value[$field['name']][$language['id_lang']], ENT_COMPAT, 'UTF-8').'" />
</div>';
$this->displayFlags($this->_languages, $this->_defaultFormLanguage, $langtags, $field['name']);
$html .= '<div class="clear"></div>';
}
else {
$html .= '
<input size="'.(!empty($field['size']) ? (int)$field['size'] : 90).'" maxlength="'.(!empty($field['maxlength']) ? (int)$field['maxlength'] : '').'" type="text" name="'.$field['name'].'" id="'.$field['name'].'" value="'.htmlentities($this->fields_value[$field['name']], ENT_COMPAT, 'UTF-8').'" />
';
}
}
}
$html .= '
</div>
<div style="clear:both"></div>
';
}
}
$html .= '
<div class="margin-form">
';
if(isset($ff['form']['buttons'])) {
foreach($ff['form']['buttons'] as $button) {
$html .= '
<a class="button" style="font-size:12px;padding:4px" href="'.$button['href'].'">'.$button['title'].'</a>
';
}
}
if(isset($ff['form']['submit'])) {
$html .= '
<input type="submit" value="'.$ff['form']['submit']['title'].'" name="'.$this->submit_action.'" class="button" />
';
}
$html .= '</div>';
$html .= '
<div class="small"><sup>*</sup> '.$this->l('Required field').'</div>
</fieldset>
';
}
$html .= '
</form>
';
//dołączanie pickera do daty
if(isset($date_fields)) {
include_once('functions.php');
includeDatepicker($date_fields, true);
}
//dołączanie edytora TinyMCE
$iso = Language::getIsoById((int)($cookie->id_lang));
$isoTinyMCE = (file_exists(_PS_ROOT_DIR_.'/js/tiny_mce/langs/'.$iso.'.js') ? $iso : 'en');
$ad = dirname($_SERVER["PHP_SELF"]);
$html .= '
<script type="text/javascript">
var iso = \''.$isoTinyMCE.'\' ;
var pathCSS = \''._THEME_CSS_DIR_.'\' ;
var ad = \''.$ad.'\' ;
</script>
<script type="text/javascript" src="'.__PS_BASE_URI__.'js/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="'.__PS_BASE_URI__.'js/tinymce.inc.js"></script>
';
return $html;
}
}
?>

View File

@@ -0,0 +1,449 @@
<?php
class helperList extends Module{
public $fields_list;
public $fields_values;
private $_html = '';
public function generateList($fields_values, $fields_list) {
$this->_list = $fields_values;
$this->_listTotal = $this->listTotal;
$this->_pagination = array(5,10,20,50,100);
$this->view = isset($this->actions) && in_array('view', $this->actions);
$this->edit = isset($this->actions) && in_array('edit', $this->actions);
$this->delete = isset($this->actions) && in_array('delete', $this->actions);
$this->duplicate = isset($this->actions) && in_array('duplicate', $this->actions);
$this->fieldsDisplay = $fields_list;
$this->identifiersDnd = array();
$this->displayList();
return $this->_html;
}
public function displayTop() {
//do nothing
}
public function displayList() {
$this->displayTop();
if (isset($this->toolbar_btn)) {
$this->_html .= '<br />';
foreach($this->toolbar_btn as $toolbar_btn) {
$this->_html .= '<a href="'.$toolbar_btn['href'].'"><img src="../img/admin/add.gif" border="0" /> '.$toolbar_btn['desc'].'</a> &nbsp;&nbsp;&nbsp; ';
}
$this->_html .= '<br /><br />';
}
/* Append when we get a syntax error in SQL query */
if ($this->_list === false) {
$this->displayWarning($this->l('Bad SQL query').'<br />'.htmlspecialchars($this->_list_error));
return false;
}
/* Display list header (filtering, pagination and column names) */
$this->displayListHeader();
if (!sizeof($this->_list)) {
$this->_html .= '<tr><td class="center" colspan="'.(sizeof($this->fieldsDisplay) + 2).'">'.$this->l('No items found').'</td></tr>';
}
/* Show the content of the table */
$this->displayListContent();
/* Close list table and submit button */
$this->displayListFooter();
}
public function displayListHeader($token = null) {
global $context;
$isCms = false;
if (preg_match('/cms/Ui', $this->identifier))
$isCms = true;
$id_cat = Tools::getValue('id_'.($isCms ? 'cms_' : '').'category');
if (!isset($token) OR empty($token))
$token = $this->token;
/* Determine total page number */
//$totalPages = ceil($this->_listTotal / Tools::getValue('pagination', (isset($context->cookie->{$this->table.'_pagination'}) ? $context->cookie->{$this->table.'_pagination'} : $this->_pagination[0])));
//if (!$totalPages) $totalPages = 1;
$totalPages = 1;
$this->_html .= '<a name="'.$this->table.'">&nbsp;</a>';
$this->_html .= '<form method="post" action="'.$this->currentIndex;
if (Tools::getIsset($this->identifier))
$this->_html .= '&'.$this->identifier.'='.(int)(Tools::getValue($this->identifier));
$this->_html .= '&token='.$token;
if (Tools::getIsset($this->table.'Orderby'))
$this->_html .= '&'.$this->table.'Orderby='.urlencode($this->_orderBy).'&'.$this->table.'Orderway='.urlencode(strtolower($this->_orderWay));
$this->_html .= '#'.$this->table.'" class="form">
<input type="hidden" id="submitFilter'.$this->table.'" name="submitFilter'.$this->table.'" value="0">
<table style="width:100%;">
<tr>
<td style="vertical-align: bottom;">';
if ($this->listTotal) {
$this->_html .= '<span style="float: left;">';
/* Determine current page number */
$page = (int)(Tools::getValue('submitFilter'.$this->table));
if (!$page) $page = 1;
if ($page > 1) {
$this->_html .= '
<input type="image" src="../img/admin/list-prev2.gif" onclick="getE(\'submitFilter'.$this->table.'\').value=1"/>
&nbsp;
<input type="image" src="../img/admin/list-prev.gif" onclick="getE(\'submitFilter'.$this->table.'\').value='.($page - 1).'"/>
';
}
$this->_html .= $this->l('Page').' <b>'.$page.'</b> / '.$totalPages;
if ($page < $totalPages) {
$this->_html .= '
<input type="image" src="../img/admin/list-next.gif" onclick="getE(\'submitFilter'.$this->table.'\').value='.($page + 1).'"/>
&nbsp;
<input type="image" src="../img/admin/list-next2.gif" onclick="getE(\'submitFilter'.$this->table.'\').value='.$totalPages.'"/>
';
}
$this->_html .= '
| '.$this->l('Display').'
<select name="pagination">
';
/* Choose number of results per page */
$selectedPagination = Tools::getValue('pagination', (isset($context->cookie->{$this->table.'_pagination'}) ? $context->cookie->{$this->table.'_pagination'} : null));
foreach ($this->_pagination as $value) {
$this->_html .= '<option value="'.(int)($value).'"'.($selectedPagination == $value ? ' selected="selected"' : (($selectedPagination == null && $value == $this->_pagination[1]) ? ' selected="selected2"' : '')).'>'.(int)($value).'</option>';
}
$this->_html .= '
</select>
/ '.(int)($this->_listTotal).' '.$this->l('result(s)').'
</span>
';
}
$this->_html .='
<span style="float: right;">
<input type="submit" name="submitReset'.$this->table.'" value="'.$this->l('Reset').'" class="button" />
<input type="submit" id="submitFilterButton_'.$this->table.'" name="submitFilter" value="'.$this->l('Filter').'" class="button" />
</span>
<span class="clear"></span>
</td>
</tr>
<tr>
<td>';
/* Display column names and arrows for ordering (ASC, DESC) */
if (array_key_exists($this->identifier,$this->identifiersDnd) AND $this->_orderBy == 'position') {
$this->_html .= '
<script type="text/javascript" src="../js/jquery/jquery.tablednd_0_5.js"></script>
<script type="text/javascript">
var token = \''.($token != null ? $token : $this->token).'\';
var come_from = \''.$this->table.'\';
var alternate = \''.($this->_orderWay == 'DESC' ? '1' : '0' ).'\';
</script>
<script type="text/javascript" src="../js/admin-dnd.js"></script>
';
}
$this->_html .= '<table'.(array_key_exists($this->identifier,$this->identifiersDnd) ? ' id="'.(((int)(Tools::getValue($this->identifiersDnd[$this->identifier], 1))) ? substr($this->identifier,3,strlen($this->identifier)) : '').'"' : '' ).' class="table'.((array_key_exists($this->identifier,$this->identifiersDnd) AND ($this->_listTotal >= 2 && $this->_orderBy != 'position 'AND $this->_orderWay != 'DESC')) ? ' tableDnD' : '' ).'" cellpadding="0" cellspacing="0" style="width:100%;">
<thead>
<tr class="nodrag nodrop">
<th>';
if ($this->delete)
$this->_html .= '<input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, \''.$this->table.'Box[]\', this.checked)" />';
$this->_html .= '</th>';
foreach ($this->fieldsDisplay as $key => $params) {
$this->_html .= ' <th '.(isset($params['widthColumn']) ? 'style="width: '.$params['widthColumn'].'px"' : '').'>'.$params['title'];
if (!isset($params['orderby']) OR $params['orderby']) {
// Cleaning links
if (Tools::getValue($this->table.'Orderby') && Tools::getValue($this->table.'Orderway'))
$this->currentIndex = preg_replace('/&'.$this->table.'Orderby=([a-z _]*)&'.$this->table.'Orderway=([a-z]*)/i', '', $this->currentIndex);
if ($this->_listTotal >= 2) {
$this->_html .= '
<br />
<a href="'.$this->currentIndex.'&'.$this->identifier.'='.(int)$id_cat.'&'.$this->table.'Orderby='.urlencode($key).'&'.$this->table.'Orderway=desc&token='.$token.'"><img border="0" src="../img/admin/down'.((isset($this->_orderBy) && ($key == $this->_orderBy) && ($this->_orderWay == 'DESC')) ? '_d' : '').'.gif" /></a>
<a href="'.$this->currentIndex.'&'.$this->identifier.'='.(int)$id_cat.'&'.$this->table.'Orderby='.urlencode($key).'&'.$this->table.'Orderway=asc&token='.$token.'"><img border="0" src="../img/admin/up'.((isset($this->_orderBy) && ($key == $this->_orderBy) && ($this->_orderWay == 'ASC')) ? '_d' : '').'.gif" /></a>
';
}
}
$this->_html .= '</th>';
}
/* Check if object can be modified, deleted or detailed */
if ($this->edit OR $this->delete OR ($this->view AND $this->view !== 'noActionColumn'))
$this->_html .= '<th style="width: 52px">'.$this->l('Actions').'</th>';
$this->_html .= '</tr>
<tr class="nodrag nodrop" style="height: 35px;">
<td class="center">';
if ($this->delete)
$this->_html .= '--';
$this->_html .= '</td>';
/* Javascript hack in order to catch ENTER keypress event */
$keyPress = 'onkeypress="formSubmit(event, \'submitFilterButton_'.$this->table.'\');"';
/* Filters (input, select, date or bool) */
foreach ($this->fieldsDisplay as $key => $params) {
$width = (isset($params['width']) ? ' style="width: '.(int)($params['width']).'px;"' : '');
$this->_html .= '<td'.(isset($params['align']) ? ' class="'.$params['align'].'"' : '').'>';
if (!isset($params['type']))
$params['type'] = 'text';
$value = Tools::getValue($this->table.'Filter_'.(array_key_exists('filter_key', $params) ? $params['filter_key'] : $key));
if (isset($params['search']) AND !$params['search'])
{
$this->_html .= '--</td>';
continue;
}
switch ($params['type'])
{
case 'bool':
$this->_html .= '
<select name="'.$this->table.'Filter_'.$key.'">
<option value="">--</option>
<option value="1"'.($value == 1 ? ' selected="selected"' : '').'>'.$this->l('Yes').'</option>
<option value="0"'.(($value == 0 AND $value != '') ? ' selected="selected"' : '').'>'.$this->l('No').'</option>
</select>';
break;
case 'date':
case 'datetime':
if (is_string($value))
$value = unserialize($value);
if (!Validate::isCleanHtml($value[0]) OR !Validate::isCleanHtml($value[1]))
$value = '';
$name = $this->table.'Filter_'.(isset($params['filter_key']) ? $params['filter_key'] : $key);
$nameId = str_replace('!', '__', $name);
includeDatepicker(array($nameId.'_0', $nameId.'_1'));
$this->_html .= $this->l('From').' <input style="width:90%;" type="text" id="'.$nameId.'_0" name="'.$name.'[0]" value="'.(isset($value[0]) ? $value[0] : '').'"'.$width.' '.$keyPress.' /><br />
'.$this->l('To').' <input style="width:90%;" type="text" id="'.$nameId.'_1" name="'.$name.'[1]" value="'.(isset($value[1]) ? $value[1] : '').'"'.$width.' '.$keyPress.' />';
break;
case 'select':
if (isset($params['filter_key']))
{
$this->_html .= '<select onchange="$(\'#submitFilter'.$this->table.'\').focus();$(\'#submitFilter'.$this->table.'\').click();" name="'.$this->table.'Filter_'.$params['filter_key'].'" '.(isset($params['width']) ? 'style="width: '.$params['width'].'px"' : '').'>
<option value=""'.(($value == 0 AND $value != '') ? ' selected="selected"' : '').'>--</option>';
if (isset($params['select']) AND is_array($params['select']))
foreach ($params['select'] as $optionValue => $optionDisplay)
$this->_html .= '<option value="'.$optionValue.'"'.((isset($_POST[$this->table.'Filter_'.$params['filter_key']]) AND Tools::getValue($this->table.'Filter_'.$params['filter_key']) == $optionValue AND Tools::getValue($this->table.'Filter_'.$params['filter_key']) != '') ? ' selected="selected"' : '').'>'.$optionDisplay.'</option>';
$this->_html .= '</select>';
break;
}
break;
case 'text':
default:
if (!Validate::isCleanHtml($value))
$value = '';
$this->_html .= '<input style="width:90%;" type="text" name="'.$this->table.'Filter_'.(isset($params['filter_key']) ? $params['filter_key'] : $key).'" value="'.htmlentities($value, ENT_COMPAT, 'UTF-8').'"'.$width.' '.$keyPress.' />';
}
$this->_html .= '</td>';
}
if ($this->edit OR $this->delete OR ($this->view AND $this->view !== 'noActionColumn'))
$this->_html .= '<td class="center">--</td>';
$this->_html .= '</tr>
</thead>';
}
public function displayListContent($token = null) {
global $cookie;
$currency = new Currency((int)Configuration::get('PS_CURRENCY_DEFAULT'));
$id_category = 1; // default categ
$irow = 0;
if ($this->_list AND isset($this->fieldsDisplay['position']))
{
$positions = array_map(create_function('$elem', 'return (int)($elem[\'position\']);'), $this->_list);
sort($positions);
}
if ($this->_list)
{
$isCms = false;
if (preg_match('/cms/Ui', $this->identifier))
$isCms = true;
$keyToGet = 'id_'.($isCms ? 'cms_' : '').'category'.(in_array($this->identifier, array('id_category', 'id_cms_category')) ? '_parent' : '');
foreach ($this->_list as $tr)
{
$id = $tr[$this->identifier];
$this->_html .= '<tr'.(array_key_exists($this->identifier,$this->identifiersDnd) ? ' id="tr_'.(($id_category = (int)(Tools::getValue('id_'.($isCms ? 'cms_' : '').'category', '1'))) ? $id_category : '').'_'.$id.'_'.$tr['position'].'"' : '').($irow++ % 2 ? ' class="alt_row"' : '').' '.((isset($tr['color']) AND $this->colorOnBackground) ? 'style="background-color: '.$tr['color'].'"' : '').'>
<td class="center">';
if ($this->delete AND (!isset($this->_listSkipDelete) OR !in_array($id, $this->_listSkipDelete)))
$this->_html .= '<input type="checkbox" name="'.$this->table.'Box[]" value="'.$id.'" class="noborder" />';
$this->_html .= '</td>';
foreach ($this->fieldsDisplay as $key => $params)
{
$tmp = explode('!', $key);
$key = isset($tmp[1]) ? $tmp[1] : $tmp[0];
$this->_html .= '
<td '.(isset($params['position']) ? ' id="td_'.(isset($id_category) AND $id_category ? $id_category : 0).'_'.$id.'"' : '').' class="'.((!isset($this->no_link) OR !$this->no_link) ? 'pointer' : '').((isset($params['position']) AND $this->_orderBy == 'position')? ' dragHandle' : ''). (isset($params['align']) ? ' '.$params['align'] : ''). (isset($params['class']) ? ' '.$params['class'] : '').'" ';
if (!isset($params['position']) AND (!isset($this->no_link) OR !$this->no_link))
$this->_html .= ' onclick="document.location = \''.$this->currentIndex.'&'.$this->identifier.'='.$id.($this->view? '&view' : '&update').$this->table.'&token='.($token != null ? $token : $this->token).'\'">'.(isset($params['prefix']) ? $params['prefix'] : '');
else
$this->_html .= '>';
if (isset($params['active']) AND isset($tr[$key]))
$this->_displayEnableLink($token, $id, $tr[$key], $params['active'], Tools::getValue('id_category'), Tools::getValue('id_product'));
elseif (isset($params['activeVisu']) AND isset($tr[$key]))
$this->_html .= '<img src="../img/admin/'.($tr[$key] ? 'enabled.gif' : 'disabled.gif').'"
alt="'.($tr[$key] ? $this->l('Enabled') : $this->l('Disabled')).'" title="'.($tr[$key] ? $this->l('Enabled') : $this->l('Disabled')).'" />';
elseif (isset($params['position']))
{
if ($this->_orderBy == 'position' AND $this->_orderWay != 'DESC')
{
$this->_html .= '<a'.(!($tr[$key] != $positions[sizeof($positions) - 1]) ? ' style="display: none;"' : '').' href="'.$this->currentIndex.
'&'.$keyToGet.'='.(int)($id_category).'&'.$this->identifiersDnd[$this->identifier].'='.$id.'
&way=1&position='.(int)($tr['position'] + 1).'&token='.($token != null ? $token : $this->token).'">
<img src="../img/admin/'.($this->_orderWay == 'ASC' ? 'down' : 'up').'.gif"
alt="'.$this->l('Down').'" title="'.$this->l('Down').'" /></a>';
$this->_html .= '<a'.(!($tr[$key] != $positions[0]) ? ' style="display: none;"' : '').' href="'.$this->currentIndex.
'&'.$keyToGet.'='.(int)($id_category).'&'.$this->identifiersDnd[$this->identifier].'='.$id.'
&way=0&position='.(int)($tr['position'] - 1).'&token='.($token != null ? $token : $this->token).'">
<img src="../img/admin/'.($this->_orderWay == 'ASC' ? 'up' : 'down').'.gif"
alt="'.$this->l('Up').'" title="'.$this->l('Up').'" /></a>'; }
else
$this->_html .= (int)($tr[$key] + 1);
}
elseif (isset($params['image']))
{
// item_id is the product id in a product image context, else it is the image id.
$item_id = isset($params['image_id']) ? $tr[$params['image_id']] : $id;
// If it's a product image
if (isset($tr['id_image']))
{
$image = new Image((int)$tr['id_image']);
$path_to_image = _PS_IMG_DIR_.$params['image'].'/'.$image->getExistingImgPath().'.'.$this->imageType;
}else
$path_to_image = _PS_IMG_DIR_.$params['image'].'/'.$item_id.(isset($tr['id_image']) ? '-'.(int)($tr['id_image']) : '').'.'.$this->imageType;
$this->_html .= cacheImage($path_to_image, $this->table.'_mini_'.$item_id.'.'.$this->imageType, 45, $this->imageType);
}
elseif (isset($params['icon']) AND (isset($params['icon'][$tr[$key]]) OR isset($params['icon']['default'])))
$this->_html .= '<img src="../img/admin/'.(isset($params['icon'][$tr[$key]]) ? $params['icon'][$tr[$key]] : $params['icon']['default'].'" alt="'.$tr[$key]).'" title="'.$tr[$key].'" />';
elseif (isset($params['price']))
$this->_html .= Tools::displayPrice($tr[$key], (isset($params['currency']) ? Currency::getCurrencyInstance((int)($tr['id_currency'])) : $currency), false);
elseif (isset($params['float']))
$this->_html .= rtrim(rtrim($tr[$key], '0'), '.');
elseif (isset($params['type']) AND $params['type'] == 'date')
$this->_html .= $tr[$key];
//$this->_html .= Tools::displayDate($tr[$key], (int)$cookie->id_lang);
elseif (isset($params['type']) AND $params['type'] == 'datetime')
$this->_html .= Tools::displayDate($tr[$key], (int)$cookie->id_lang, true);
elseif (isset($params['type']) AND $params['type'] == 'editable') {
// google merchant fix
if ($key == 'google_name') {
$languages = Language::getLanguages();
foreach ($languages as $language) {
$fieldName = $key . '_' . $tr['id'] . '_' . $language['id_lang'];
$googleName = 'google_name_' . $language['id_lang'];
$this->_html .= '<div class="translatable-field lang-' . $language['id_lang'] . ' clearfix">';
$this->_html .= '<div class="tf tf-input">';
$this->_html .= '<input type="text" id="' . $fieldName . '" name="' . $fieldName . '" class="' . $key . '" data-lang="'.$language['id_lang'].'" value="' . (isset($tr[$googleName]) ? $tr[$googleName] : '') . '" size="' . (isset($params['size']) ? $params['size'] : '') . '">';
$this->_html .= '</div>';
$this->_html .= '<div class="tf tf-list">';
$this->_html .= '<button type="button" data-toggle="dropdown" tabindex="-1">' . $language['iso_code'] . '<span class="caret"></span></button>';
foreach ($languages as $language) {
$this->_html .= '<a href="javascript:hideOtherLanguage(' . $language['id_lang'] . ');">';
$this->_html .= '<img class="language_current pointer" src="../img/l/' . $language['id_lang'] . '.jpg" alt="' . $language['name'] . '">';
$this->_html .= '</a>';
}
$this->_html .= '</div>';
$this->_html .= '</div>';
}
}
else {
$this->_html .= '<input type="text" size="' . (isset($params['size']) ? $params['size'] : '') . '" name="'.$key.'_'.$tr['id'].'" value="'.$tr[$key].'" class="'.$key.'" />';
}
}
elseif (isset($tr[$key]))
{
$echo = ($key == 'price' ? round($tr[$key], 2) : isset($params['maxlength']) ? Tools::substr($tr[$key], 0, $params['maxlength']).'...' : $tr[$key]);
$this->_html .= isset($params['callback']) ? call_user_func_array(array($this->className, $params['callback']), array($echo, $tr)) : $echo;
}
else
$this->_html .= '--';
$this->_html .= (isset($params['suffix']) ? $params['suffix'] : '').
'</td>';
}
if ($this->edit OR $this->delete OR ($this->view AND $this->view !== 'noActionColumn')) {
$this->_html .= '<td class="center" style="white-space: nowrap;">';
if ($this->view)
$this->_displayViewLink($token, $id);
if ($this->edit)
$this->_displayEditLink($token, $id);
if ($this->delete)
$this->_displayDeleteLink($token, $id);
if ($this->duplicate)
$this->_displayDuplicate($token, $id);
$this->_html .= '</td>';
}
$this->_html .= '</tr>';
}
}
}
public function displayListFooter($token = null) {
$this->_html .= '</table>';
if ($this->delete)
$this->_html .= '<p><input type="submit" class="button" name="submitDel'.$this->table.'" value="'.$this->l('Delete selection').'" onclick="return confirm(\''.$this->l('Delete selected items?', __CLASS__, true, false).'\');" /></p>';
$this->_html .= '
</td>
</tr>
</table>
<input type="hidden" name="token" value="'.($token ? $token : $this->token).'" />
</form>
<script>
var default_language = ' . (int)Configuration::get('PS_LANG_DEFAULT') . ';
hideOtherLanguage(default_language);
</script>';
if (isset($this->_includeTab) && count($this->_includeTab))
$this->_html .= '<br /><br />';
}
protected function _displayEnableLink($token, $id, $value, $active, $id_category = null, $id_product = null) {
$this->_html .= '
<a href="'.$this->currentIndex.'&'.$this->identifier.'='.$id.'&'.$active.$this->table.
(((int)$id_category && (int)$id_product) ? '&id_category='.$id_category : '').'&token='.($token ? $token : $this->token).'">
<img src="../img/admin/'.($value ? 'enabled.gif' : 'disabled.gif').'" alt="'.($value ? $this->l('Enabled') : $this->l('Disabled')).'" title="'.($value ? $this->l('Enabled') : $this->l('Disabled')).'" />
</a>
';
}
protected function _displayDuplicate($token = null, $id) {
$_cacheLang['Duplicate'] = $this->l('Duplicate');
$duplicate = $this->currentIndex.'&'.$this->identifier.'='.$id.'&duplicate'.$this->table;
$this->_html .= '
<a class="pointer" onclick="document.location = \''.$duplicate.'&token='.($token ? $token : $this->token).'\';">
<img src="../img/admin/duplicate.png" alt="'.$_cacheLang['Duplicate'].'" title="'.$_cacheLang['Duplicate'].'" />
</a>
';
}
protected function _displayViewLink($token = null, $id) {
$_cacheLang['View'] = $this->l('View');
$this->_html .= '
<a href="'.$this->currentIndex.'&'.$this->identifier.'='.$id.'&view'.$this->table.'&token='.($token ? $token : $this->token).'">
<img src="../img/admin/details.gif" alt="'.$_cacheLang['View'].'" title="'.$_cacheLang['View'].'" />
</a>
';
}
protected function _displayEditLink($token = null, $id) {
$_cacheLang['Edit'] = $this->l('Edit');
$this->_html .= '
<a href="'.$this->currentIndex.'&'.$this->identifier.'='.$id.'&update'.$this->table.'&token='.($token ? $token : $this->token).'">
<img src="../img/admin/edit.gif" alt="" title="'.$_cacheLang['Edit'].'" />
</a>
';
}
protected function _displayDeleteLink($token = null, $id) {
$_cacheLang['Delete'] = $this->l('Delete');
$_cacheLang['DeleteItem'] = $this->l('Delete item #', __CLASS__, true, false);
$this->_html .= '
<a href="'.$this->currentIndex.'&'.$this->identifier.'='.$id.'&delete'.$this->table.'&token='.($token ? $token : $this->token).'" onclick="return confirm(\''.$_cacheLang['DeleteItem'].$id.' ?'.
(isset($this->specificConfirmDelete) ? '\r'.$this->specificConfirmDelete : '').'\');">
<img src="../img/admin/delete.gif" alt="'.$_cacheLang['Delete'].'" title="'.$_cacheLang['Delete'].'" />
</a>
';
}
}
?>

View File

@@ -0,0 +1,192 @@
<?php
class HelperOptions {
/**
* Display flags in forms for translations
*
* @param array $languages All languages available
* @param int $default_language Default language id
* @param string $ids Multilingual div ids in form
* @param string $id Current div id]
* @param bool $return define the return way : false for a display, true for a return
* @param bool $use_vars_instead_of_ids use an js vars instead of ids seperate by "¤"
*/
public function displayFlags($languages, $default_language, $ids, $id, $return = false, $use_vars_instead_of_ids = false)
{
if (count($languages) == 1) {
return false;
}
$output = '
<div class="displayed_flag">
<img src="../img/l/'.$default_language.'.jpg" class="pointer" id="language_current_'.$id.'" onclick="toggleLanguageFlags(this);" alt="" />
</div>
<div id="languages_'.$id.'" class="language_flags">
Wybierz język<br /><br />';
foreach ($languages as $language) {
if ($use_vars_instead_of_ids) {
$output .= '<img src="../img/l/'.(int)($language['id_lang']).'.jpg" class="pointer" alt="'.$language['name'].'" title="'.$language['name'].'" onclick="changeLanguage(\''.$id.'\', '.$ids.', '.$language['id_lang'].', \''.$language['iso_code'].'\');" /> ';
} else {
$output .= '<img src="../img/l/'.(int)($language['id_lang']).'.jpg" class="pointer" alt="'.$language['name'].'" title="'.$language['name'].'" onclick="changeLanguage(\''.$id.'\', \''.$ids.'\', '.$language['id_lang'].', \''.$language['iso_code'].'\');" /> ';
}
}
$output .= '</div>';
if ($return) {
return $output;
}
echo $output;
}
public function generateOptions($fields_options) {
return $this->displayOptionsList($fields_options);
}
public function displayOptionsList($fields_options) {
global $currentIndex, $cookie, $tab;
$html = '';
$this->_fieldsOptions = $fields_options;
if (!isset($this->_fieldsOptions) || !count($this->_fieldsOptions))
return false;
$defaultLanguage = (int)(Configuration::get('PS_LANG_DEFAULT'));
$this->_languages = Language::getLanguages(false);
$tabAdmin = Tab::getTab((int)$cookie->id_lang, Tab::getIdFromClassName($tab));
$html .= '
<script type="text/javascript">
id_language = Number('.$defaultLanguage.');
</script>
<form action="'.$this->currentIndex.'&token='.$this->token.'" method="post">';
foreach ($this->_fieldsOptions as $key_fieldset => $fieldset) {
$html .= '<fieldset>';
$html .= (isset($fieldset['title']) ? '<legend><img src="'.(!empty($tabAdmin['module']) && file_exists($_SERVER['DOCUMENT_ROOT']._MODULE_DIR_.$tabAdmin['module'].'/'.$tabAdmin['class_name'].'.gif') ? _MODULE_DIR_.$tabAdmin['module'].'/' : '../img/t/').$tabAdmin['class_name'].'.gif" />'.$fieldset['title'].'</legend>' : '');
foreach ($fieldset['fields'] as $key => $field) {
$val = Tools::getValue($key, Configuration::get($key));
if ($field['type'] != 'textLang')
if (!Validate::isCleanHtml($val))
$val = Configuration::get($key);
$html .= '
<label>'.$field['title'].' </label>
<div class="margin-form">';
switch ($field['type']) {
case 'select':
$html .= '<select name="'.$key.'">';
foreach ($field['list'] as $value)
$html .= '<option value="'.(isset($field['cast']) ? $field['cast']($value[$field['identifier']]) : $value[$field['identifier']]).'"'.($val == $value[$field['identifier']] ? ' selected="selected"' : '').'>'.$value['name'].'</option>';
$html .= '</select>';
break;
case 'bool':
$html .= '<label class="t" for="'.$key.'_on"><img src="../img/admin/enabled.gif" alt="tak" title="tak" /></label>
<input type="radio" name="'.$key.'" id="'.$key.'_on" value="1"'.($val ? ' checked="checked"' : '').' />
<label class="t" for="'.$key.'_on"> tak </label>
<label class="t" for="'.$key.'_off"><img src="../img/admin/disabled.gif" alt="nie" title="nie" style="margin-left: 10px;" /></label>
<input type="radio" name="'.$key.'" id="'.$key.'_off" value="0" '.(!$val ? 'checked="checked"' : '').'/>
<label class="t" for="'.$key.'_off"> nie </label>';
break;
case 'radio' : {
foreach($field['choices'] as $id => $value) {
$html .= '
<input type="radio" name="'.$key.'" id="'.$key.'_'.$id.'" value="'.$id.'" '.(($val == $id) ? 'checked="checked" ' : '').'/>
';
$html .= '
<label class="t" for="'.$key.'_'.$id.'">'.$value.'</label>
';
}
} break;
case 'color' : {
$html .= '
<div>
<input width="20px" type="color" data-hex="true" class="color mColorPickerInput mColorPicker" name="'.$field['name'].'" value="'.htmlentities($val, ENT_COMPAT, 'UTF-8').'" />
</div>';
} break;
case 'textLang':
foreach ($this->_languages as $language){
$val = Tools::getValue($key.'_'.$language['id_lang'], Configuration::get($key, $language['id_lang']));
if (!Validate::isCleanHtml($val))
$val = Configuration::get($key);
$html .= '
<div id="'.$key.'_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $defaultLanguage ? 'block' : 'none').'; float: left;">
<input size="'.$field['size'].'" type="text" name="'.$key.'_'.(int)$language['id_lang'].'" value="'.$val.'" />
</div>';
}
$this->displayFlags($this->_languages, $defaultLanguage, $key, $key);
$html .= '<br style="clear:both">';
break;
case 'textareaLang':
foreach ($this->_languages as $language)
{
$val = Configuration::get($key, $language['id_lang']);
$html .= '
<div id="'.$key.'_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $defaultLanguage ? 'block' : 'none').'; float: left;">
<textarea rows="'.(int)($field['rows']).'" cols="'.(int)($field['cols']).'" name="'.$key.'_'.$language['id_lang'].'">'.str_replace('\r\n', "\n", $val).'</textarea>
</div>';
}
$this->displayFlags($this->_languages, $defaultLanguage, $key, $key);
$html .= '<br style="clear:both">';
break;
case 'textarea' :
$html .= '<textarea rows="'.(int)($field['rows']).'" cols="'.(int)($field['cols']).'" name="'.$key.'">'.str_replace('\r\n', "\n", $val).'</textarea>';
break;
case 'checkboxmultiple' :
if(isset($val))
$checked_values = explode(',', $val);
else
$checked_values = array();
foreach($field['choices'] AS $k => $v) {
$html .= '
<p class="checkbox">
<label for="'.$key.$k.'_on" style="float:none;text-align:left;">
<input type="checkbox" name="'.$key.'[]" id="'.$key.$k.'_on" value="'.$k.'"'.(in_array($k, $checked_values) ? ' checked="checked"' : '').' '.(isset($field['js'][$k]) ? $field['js'][$k] : '').'/>
'.$v.'
</label>
</p>';
}
break;
case 'text':
default:
$html .= '<input type="text" name="'.$key.'" value="'.$val.'" size="'.$field['size'].'" />'.(isset($field['suffix']) ? $field['suffix'] : '');
}
if (isset($field['required']) AND $field['required'])
$html .= ' <sup>*</sup>';
$html .= (isset($field['desc']) ? '<p>'.$field['desc'].'</p>' : '');
$html .= '</div>';
}
if(isset($fieldset['submit'])) {
$html .=
'<div class="margin-form">
<input type="hidden" value="Zapisz" name="'.$fieldset['submit']['name'].'"/>
<input type="submit" value="Zapisz" name="'.$fieldset['submit']['name'].'" class="button" />
</div>';
}
$html .= '</fieldset>';
}
$html .= '
<input type="hidden" name="token" value="'.$this->token.'" />
</form>
<br>
';
return $html;
}
}
?>

View File

@@ -0,0 +1,36 @@
<?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: 7233 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;