first commit

This commit is contained in:
2025-03-12 17:06:23 +01:00
commit 2241f7131f
13185 changed files with 1692479 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
<?php
/**
* SOTESHOP/stProductGroup
*
* Ten plik należy do aplikacji stProductGroup opartej na licencji (Open License SOTE) Otwarta Licencja SOTE.
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stProductGroup
* @subpackage actions
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/open (Open License SOTE) Otwarta Licencja SOTE
* @version $Id: actions.class.php 17601 2012-03-30 11:05:39Z krzysiek $
* @author Krzysztof Bebło <krzysztof.beblo@sote.pl>, Paweł Byszewski <pawel.byszewski@sote.pl>
*/
/**
* Akcje grupy produktów.
*
* @package stProductGroup
* @author Krzysztof Bebło <krzysztof.beblo@sote.pl>, Paweł Byszewski <pawel.byszewski@sote.pl>
*/
class stProductGroupActions extends autostProductGroupActions
{
protected $configGroup;
public function executeDelete()
{
ProductGroupPeer::cleanCache();
parent::executeDelete();
}
public function executeProductAddGroup()
{
try
{
parent::executeProductAddGroup();
}
catch (sfStopException $e)
{
ProductGroupPeer::cleanCache();
throw $e;
}
}
public function executeProductRemoveGroup()
{
try
{
parent::executeProductRemoveGroup();
}
catch (sfStopException $e)
{
ProductGroupPeer::cleanCache();
throw $e;
}
}
public function addProductFiltersCriteria($c)
{
parent::addProductFiltersCriteria($c);
if (isset($this->filters['list_image']) && $this->filters['list_image'] !== '')
{
$c->add(ProductPeer::OPT_IMAGE, null, $this->filters['list_image'] ? Criteria::ISNOTNULL : Criteria::ISNULL);
}
if (isset($this->filters['list_assigned']) && $this->filters['list_assigned'] !== '')
{
$c->addJoin(ProductPeer::ID, sprintf("%s AND %s = %d", ProductGroupHasProductPeer::PRODUCT_ID, ProductGroupHasProductPeer::PRODUCT_GROUP_ID, $this->forward_parameters['product_group_id']), Criteria::LEFT_JOIN);
if ($this->filters['list_assigned'])
{
$c->add(ProductGroupHasProductPeer::ID, null, Criteria::ISNOTNULL);
}
else
{
$c->add(ProductGroupHasProductPeer::ID, null, Criteria::ISNULL);
}
}
}
protected function saveConfig()
{
parent::saveConfig();
stFastCacheManager::clearCache();
}
protected function saveProductGroup($product_group)
{
if (!$this->getRequest()->hasErrors() && $this->hasRequestParameter('product_group[delete_image]'))
{
$currentFile = sfConfig::get('sf_upload_dir') . "/product_group/" . $product_group->getImage();
$product_group->setImage('');
if (is_file($currentFile))
{
unlink($currentFile);
}
}
if (!$this->getRequest()->hasErrors() && $this->hasRequestParameter('product_group[label]'))
{
$product_group->setLabel($this->getRequestParameter('product_group[label]'));
}
parent::saveProductGroup($product_group);
$this->saveProductGroupImage($product_group);
ProductGroupPeer::cleanCache();
stFastCacheManager::clearCache();
}
protected function saveProductGroupImage($product_group)
{
if ($this->getRequest()->getFileError('product_group[image]') == UPLOAD_ERR_OK)
{
$filename = $this->getRequest()->getFileName('product_group[image]');
// dodaj zdjecie
if (!$this->getRequest()->hasErrors() && $this->getRequest()->getFileSize('product_group[image]'))
{
$currentFile = sfConfig::get('sf_upload_dir') . "/product_group/" . $filename;
if (is_file($currentFile))
{
unlink($currentFile);
}
$this->getRequest()->moveFile('product_group[image]', sfConfig::get('sf_upload_dir') . "/product_group/" . $filename);
$product_group->setImage($filename);
}
$product_group->save();
}
}
public function executeFixOptProductGroup()
{
}
protected function addFiltersCriteria($c)
{
$c->add(ProductGroupPeer::FROM_BASKET_VALUE, null, Criteria::ISNULL);
parent::addFiltersCriteria($c);
}
protected function getProductGroupOrCreate($id = 'id')
{
$productGroup = parent::getProductGroupOrCreate($id);
if ($productGroup->getProductGroup() != 'NEW')
{
$this->hideField('new_type');
$this->hideField('new_product_date');
}
return $productGroup;
}
}

View File

@@ -0,0 +1,105 @@
<?php
/**
* SOTESHOP/stProductGroup
*
* Ten plik należy do aplikacji stProductGroup opartej na licencji (Open License SOTE) Otwarta Licencja SOTE.
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stProductGroup
* @subpackage actions
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/open (Open License SOTE) Otwarta Licencja SOTE
* @version $Id: components.class.php 6385 2010-07-13 13:12:38Z krzysiek $
* @author Krzysztof Bebło <krzysztof.beblo@sote.pl>
*/
/**
* Komponenty stProductGroup
*
* @author Krzysztof Bebło <krzysztof.beblo@sote.pl>
*
* @package stProductGroup
* @subpackage actions
*/
class stProductGroupComponents extends autoStProductGroupComponents
{
/**
* Dostarcza tablicę dla wyboru domyślnych wartości grup strony
*/
public function executeDefaultProductGroup()
{
$i18n = sfContext::getInstance()->getI18N();
$configs=array(
0=>"default_product_group.yml",
1=>"user_product_group.yml"
);
foreach ($configs as $config_id => $config_name){
// pobiera wartości domyślne dla grup produktu z pliku konfiguracyjnego
$fileymlRoot = sfConfig::get('sf_app_module_dir'). DIRECTORY_SEPARATOR. 'stProductGroup' . DIRECTORY_SEPARATOR . sfConfig::get('sf_config_dir_name') . DIRECTORY_SEPARATOR . $config_name;
$yml = sfYaml::load($fileymlRoot);
if ($config_id==0){
$default_product_group = $yml['product_group'];
}elseif(isset($yml['product_group'])){
$user_product_group = $yml['product_group'];
}else{
$user_product_group = array();
}
}
foreach ($default_product_group as $system_name=>$name){
$default_product_group[$system_name] = $i18n->__($name);
}
$default_product_group = array_merge($default_product_group,$user_product_group);
$chosen_default_product_group = $this->getChosenDefaultProductGroup($this->getRequestParameter("id"));
$this->default_product_group = (array_diff_key($default_product_group, $chosen_default_product_group));
}
/**
* Pobiera już wybrane wartości domyślne
*
* @param integer id edytowanej strony $id
* @return array tablicę z wybranymi już wcześniej wartościami
*/
private function getChosenDefaultProductGroup($id)
{
$c = new Criteria();
if ($id)
{
$c->add(ProductGroupPeer::ID, $id, Criteria::NOT_EQUAL);
}
$product_groups = ProductGroupPeer::doSelect($c);
$chosen_default_product_group=array();
foreach ($product_groups as $product_group)
{
if($product_group->getProductGroup())
{
if ($product_group->getProductGroup() != 'NONE')
{
array_push($chosen_default_product_group,$product_group->getProductGroup());
}
}
}
$chosen_default_product_group=array_flip($chosen_default_product_group);
return $chosen_default_product_group;
}
}
?>

View File

@@ -0,0 +1,22 @@
<?php
/**
* SOTESHOP/stProductGroup
*
* Ten plik należy do aplikacji stProductGroup opartej na licencji (Open License SOTE) Otwarta Licencja SOTE.
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stProductGroup
* @subpackage configs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/open (Open License SOTE) Otwarta Licencja SOTE
* @version $Id: config.php 445 2009-09-10 10:04:14Z pawel $
* @author Krzysztof Beblo <krzysztof.beblo@sote.pl>
*/
/**
* Dodawanie routingów
*/
stPluginHelper::addRouting('stProductGroup', '/product_group/:action/*', 'stProductGroup', 'list', 'backend');
stPluginHelper::addRouting('stGiftGroup', '/gift_group/:action/*', 'stGiftGroup', 'list', 'backend');

View File

@@ -0,0 +1,7 @@
product_group:
NONE: Brak
PROMOTION: Promocje
SALES: Wyprzedaż
RECOMMEND: Polecamy
MAIN_PAGE: Strona główna
NEW: Nowości

View File

@@ -0,0 +1,109 @@
generator:
class: stAdminGenerator
param:
model_class: ProductGroup
product_model_class: Product
theme: simple
custom_actions:
list: [product]
head:
package: stProductGroup
applications: [stProduct]
documentation:
pl: https://www.sote.pl/docs/grupy-produktow
en: https://www.soteshop.com/docs/product_groups
list:
menu:
display: [list]
fields:
list: {name: Grupy, action: stProductGroup/list}
peer_method: doSelectWithI18n
peer_count_method: doCountWithI18n
title: Grupy
description: Zarządzanie grupami produktów, konfiguracja ustawień.
display: [=name]
actions:
_create: {name: Dodaj}
object_actions:
_edit: -
_delete: -
edit:
menu:
display: [product]
fields:
product: {name: Przypisz produkty, action: stProductGroup/productList?product_group_id=%%id%%}
title: Edycja podstawowa
description: Zarządzanie grupami produktów, konfiguracja ustawień.
display:
"NONE": [name, ~default_product_group, _new_type, new_product_date, product_limit, show_header]
"Etykieta": [_image]
fields:
default_product_group: {name: Typ}
image: {name: Etykieta}
new_type: {name: Wybierz sposób wyświetlania nowości, params: disabled=false}
new_product_date: {name: Produkty są w nowościach od, type: input_date_tag, params: disabled=false rich=true withtime=true}
name: {name: Nazwa, type: input_tag, params: size=50, required: true}
product_limit: {name: Ilość produktów wyświetlanych, params: size=3, required: true}
show_header: {name: Pokaż nazwę grupy}
actions:
_list: {name: Lista}
_save: {name: Zapisz}
_save_and_add: {name: Zapisz i dodaj}
_delete: {name: Usuń}
product_list:
use_stylesheet: [backend/stProductList.css]
use_helper: [stProduct/stProduct, stDepository]
forward_parameters: [product_group_id]
filters:
list_image: {partial: filter_list_image, module: stProduct}
display: [list_image, opt_name, code, opt_price_brutto, active, list_stock]
fields:
code: {name: Kod, width: 1%}
opt_name: {name: Nazwa, params: truncate_text=true}
list_image: {name: Zdjęcie, width: 1%, callback: list_product_image}
opt_price_brutto: {name: Cena, width: 1%, callback: list_product_price, label_callback: list_product_price_label}
active: {name: Aktywny, width: 1%, align: center}
list_stock: {name: Magazyn, align: right, width: 1%, i18n: stDepositoryBackend, callback: list_stock, sort_field: product.stock}
build_options:
related_id: forward_parameters.product_group_id
through_class: ProductGroupHasProduct
menu: {use: edit.menu}
title: Przypisz produkty
description: Zarządzanie grupami produktów, konfiguracja ustawień.
object_actions: []
actions: []
config:
title: Konfiguracja
description: Zarządzanie grupami produktów, konfiguracja ustawień.
display:
"NONE": [limitation]
"Produkty w grupie strona główna": [sort_main, sort_asc_desc]
"Etykieta": [label_link, label_count]
fields:
limitation: {name: Ogranicz produkty w grupie do wyświetlanej kategorii, checked: false, type: checkbox}
sort_main:
name: Sortowanie produktów na stronie głównej
type: select
display: [option1, option4]
options:
option1: {name: moja kolejność, value: my_sort}
option4: {name: losowo, value: randomize}
selected: option1
sort_asc_desc:
name: Sortuj
type: select
display: [option1, option2]
options:
option1: {name: rosnąco, value: asc}
option2: {name: malejąco, value: desc}
selected: option1
label_count: {name: Ilość wyświetlanych etykiet na produkcie, params: size=2}
label_link: {name: Link etykiety odsyła do grup produktu, checked: false, type: checkbox}
actions:
_save: {name: Zapisz}

View File

@@ -0,0 +1,2 @@
soap:
is_secure: off

View File

@@ -0,0 +1,2 @@
product_group:
POLECANE: Produkty polecane 1

View File

@@ -0,0 +1,5 @@
<?php
class stProductGroupWebApi extends autoStProductGroupWebApi
{
}

View File

@@ -0,0 +1,5 @@
<?php
class stProductGroupBreadcrumbsBuilder extends autoStProductGroupBreadcrumbsBuilder
{
}

View File

@@ -0,0 +1 @@
<?php echo select_tag('product_group[default_product_group]', options_for_select($default_product_group,$product_group->getProductGroup()));?>

View File

@@ -0,0 +1,4 @@
<?php echo select_tag('filters[list_assigned]', options_for_select(array(1 => __('tak'), 0 => __('nie')), isset($filters['list_assigned']) ? $filters['list_assigned'] : null, array (
'include_custom' => __("---"),
)), array (
)) ?>

View File

@@ -0,0 +1,144 @@
<?php use_stylesheet('backend/stProductGroup.css');?>
<script type="text/javascript">
document.getElementById('product_group_default_product_group').onchange = function(){
if (this.value == 'NEW') {
<?php if ($product_group->getCulture()=="pl_PL"):?>
document.getElementById('sote_labels_pl').style.display = "block";
document.getElementById('sote_labels_en').style.display = "none";
<?php elseif($product_group->getCulture()=="en_US"):?>
document.getElementById('sote_labels_pl').style.display = "none";
document.getElementById('sote_labels_en').style.display = "block";
<?php endif;?>
} else {
document.getElementById('sote_labels_pl').style.display = "none";
document.getElementById('sote_labels_en').style.display = "none";
document.getElementById('product_group_label_none').checked=true;
}
};
</script>
<?php
if ($product_group->getProductGroup() == "NEW")
{
if ($product_group->getCulture()=="pl_PL")
{
$display_labels_en = "display:none";
$display_labels_pl = "display:block";
}
elseif($product_group->getCulture()=="en_US")
{
$display_labels_en = "display:block";
$display_labels_pl = "display:none";
}else{
$display_labels_en = "display:none";
$display_labels_pl = "display:none";
}
}else{
$display_labels_en = "display:none";
$display_labels_pl = "display:none";
}
?>
<div class="pg_none">
<?php if (!$product_group->getLabel() || $product_group->getLabel()=='none'):?>
<?php echo radiobutton_tag('product_group[label]', 'none', true) ?><?php echo __('Brak');?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'none', false) ?><?php echo __('Brak');?>
<?php endif;?>
</div>
<div id="sote_labels_pl" class="pg_star" style="<?php echo $display_labels_pl;?>">
<?php if ($product_group->getLabel()=='new_blue_pl.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_blue_pl.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_blue_pl.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_blue_pl.png" width="90" height="25" alt="" />
<?php if ($product_group->getLabel()=='new_green_pl.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_green_pl.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_green_pl.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_green_pl.png" width="90" height="25" alt="" />
<?php if ($product_group->getLabel()=='new_red_pl.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_red_pl.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_red_pl.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_red_pl.png" width="90" height="25" alt="" />
<?php if ($product_group->getLabel()=='new_yellow_pl.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_yellow_pl.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_yellow_pl.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_yellow_pl.png" width="90" height="25" alt="" />
</div>
<div id="sote_labels_en" class="pg_star" style="<?php echo $display_labels_en;?>">
<?php if ($product_group->getLabel()=='new_blue_en.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_blue_en.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_blue_en.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_blue_en.png" width="75" height="25" alt="" />
<?php if ($product_group->getLabel()=='new_green_en.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_green_en.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_green_en.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_green_en.png" width="75" height="25" alt="" />
<?php if ($product_group->getLabel()=='new_red_en.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_red_en.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_red_en.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_red_en.png" width="75" height="25" alt="" />
<?php if ($product_group->getLabel()=='new_yellow_en.png'):?>
<?php echo radiobutton_tag('product_group[label]', 'new_yellow_en.png', true) ?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'new_yellow_en.png', false) ?>
<?php endif;?>
<img src="/uploads/product_group/new_yellow_en.png" width="75" height="25" alt="" />
</div>
<div class="pg_my_image">
<div class="desc_label">
<?php if ($product_group->getLabel()=='my_image'):?>
<?php echo radiobutton_tag('product_group[label]', 'my_image', true) ?><?php echo __('Własny obrazek');?>
<?php else: ?>
<?php echo radiobutton_tag('product_group[label]', 'my_image', false) ?><?php echo __('Własny obrazek');?>
<?php endif;?>
</div>
<?php if ($product_group->getImage()): ?>
<div>
<img src="/uploads/product_group/<?php echo $product_group->getImage();?>" />
</div>
<div class="clear" /></div>
<?php endif; ?>
</div>
<div style="clear: both;" /></div>
<div style="padding-top: 5px;"><?php echo input_file_tag('product_group[image]') ?></div>
<?php if ($product_group->getImage()): ?>
<p><?php echo checkbox_tag('product_group[delete_image]', 1, false) ?> <?php echo __('usuń obrazek') ?></p>
<script type="text/javascript">
$('product_group_delete_image').observe('click', function ()
{
var product_group_image = $('product_group_image');
product_group_image[this.checked ? 'disable' : 'enable']();
});
</script>
<?php endif; ?>

View File

@@ -0,0 +1,10 @@
<?php
$c = new Criteria();
$c->add(ProductGroupHasProductPeer::PRODUCT_GROUP_ID, $forward_parameters['product_group_id']);
$c->add(ProductGroupHasProductPeer::PRODUCT_ID, $product->getId());
if (ProductGroupHasProductPeer::doCount($c)):
?>
<?php echo image_tag(sfConfig::get('sf_admin_web_dir').'/images/tick.png') ?>
<?php else: ?>
-
<?php endif ?>

View File

@@ -0,0 +1,14 @@
<?php
/**
* Szablon dla partial'a _list_price
*
* @package stProduct
* @author Marcin Butlak <marcin.butlak@sote.pl>
* @copyright SOTE
* @license SOTE
* @version $Id: _list_price.php 617 2009-04-09 13:02:31Z michal $
*/
?>
<?php use_helper('stCurrency') ?>
<?php echo st_back_price($product->getPriceBrutto(), true,true); ?>

View File

@@ -0,0 +1,21 @@
<?php
/**
* @var ProductGroup $product_group
*/
echo select_tag($name, options_for_select([
'manual' => __('przypisane produkty'),
'date' => __('po dacie dodania')
], $product_group->getNewType()));
?>
<script>
jQuery(function($) {
$('#<?php echo get_id_from_name($name) ?>').change(function() {
if ($(this).val() != 'date') {
$('.row_new_product_date').hide();
} else {
$('.row_new_product_date').show();
}
}).change();
});
</script>

View File

@@ -0,0 +1,15 @@
<?php $product_group = $product_group_has_positioning->getProductGroup();?>
<?php echo input_tag('product_group_has_positioning[product_group_url]', $product_group->getFriendlyUrl(), array('size' => '40')) ?>
<?php list($culture) = explode('_', $product_group->getCulture()); ?>
<p>
<?php echo st_link_to(null, 'stProduct/frontendGroupList?url=' . $product_group->getFriendlyUrl(), array(
'absolute' => true,
'for_app' => 'frontend',
'for_lang' => $culture,
'no_script_name' => true,
'class' => 'st_admin_external_link',
'target' => '_blank')) ?>
</p>

View File

@@ -0,0 +1,3 @@
<?php use_helper('stProgressBar'); ?>
<?php echo progress_bar('stProductGroup_optimize', 'stProductGroupOptimize', 'updateOptimize', ProductGroupHasProductPeer::doCount(new Criteria())); ?>

View File

@@ -0,0 +1,17 @@
fields:
product_group{name}:
required:
msg: Podaj nazwę grupy
product_group{product_limit}:
required:
msg: Podaj liczbę wyświetlanych produktów w grupie
sfNumberValidator:
max: 36
max_error: Nie możesz wyświetlić w grupach więcej niż 36 produktów.
type: integer
type_error: Podaj liczbę całkowitą
nan_error: Podaj liczbę całkowitą
product_group{image}:
file: True
stAssetFileValidator:
mime_types: "@web_images"

View File

@@ -0,0 +1,18 @@
fields:
product_group_has_positioning{title}:
sfStringValidator:
max: 255
max_error: Tytuł strony jest niepoprawny. Maksymalna długość to 255 znaków.
product_group_has_positioning{keywords}:
sfStringValidator:
max: 255
max_error: Słowa kluczowe są niepoprawne. Maksymalna długość to 255 znaków.
product_group_has_positioning{description}:
sfStringValidator:
max: 65000
max_error: Opis strony jest niepoprawny. Maksymalna długość to 65000 znaków.
product_group_has_positioning{product_group_url}:
required:
msg: Wprowadź nazwę dla przyjaznego linku
stPropelSeoUrlValidator:
auto_fillin_field: "product_group_has_positioning[product_group_url]"