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,269 @@
<?php
/**
* SOTESHOP/stReview
*
* Ten plik należy do aplikacji stReview opartej na licencji (Professional License 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 stReview
* @subpackage actions
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: actions.class.php 1153 2009-10-07 08:24:35Z pawel $
*/
/**
* stReview actions
*
* @author Paweł Byszewski <pawel.byszewski@sote.pl>, Krzysztof Bebło <krzysztof.beblo@sote.pl>
*
* @package stReview
* @subpackage actions
*/
class stReviewActions extends autostReviewActions
{
/**
* Filtr po kolumnie klient
* Szukanie po imieniu i nazwisku, ale również po mail'u jeśli zawarta jest '@' w wyszukiwaniu
*
* @param Criteria $c
*/
protected function addFiltersCriteria($c)
{
parent::addFiltersCriteria($c);
if (isset($this->filters['filter_client']) && !empty($this->filters['filter_client']))
{
if (strpos($this->filters['filter_client'], '@') !== false)
{
$c->add(sfGuardUserPeer::USERNAME, '%' . $this->filters['filter_client'] . '%', Criteria::LIKE);
}
else
{
$client = explode(" ", $this->filters['filter_client']);
$c->addJoin(UserDataPeer::SF_GUARD_USER_ID, sfGuardUserPeer::ID);
$c->add(UserDataPeer::IS_BILLING, true);
$c->add(UserDataPeer::NAME, '%' . $client[0] . '%', Criteria::LIKE);
if (isset($client[1]) && !empty($client[1]))
{
$c->add(UserDataPeer::SURNAME, '%' . $client[1] . '%', Criteria::LIKE);
}
}
}
if (isset($this->filters['agreement']) && 0 == $this->filters['agreement'])
{
$c->add(ReviewPeer::SKIPPED, true, Criteria::NOT_EQUAL);
}
}
/**
* Filtr po kolumnie wyświetlania recenzji
*
* @param Criteria $criteria
* @param string $status
* @return bool
*/
protected function filterCriteriaByActive($criteria, $status)
{
if (!$status)
{
$criterion = $criteria->getNewCriterion(ReviewPeer::ACTIVE, false);
$criterion->addOr($criteria->getNewCriterion(ReviewPeer::AGREEMENT, false));
$criteria->add($criterion);
}
else
{
$criteria->add(ReviewPeer::ACTIVE, true);
$criteria->add(ReviewPeer::AGREEMENT, true);
}
return true;
}
public function executeReviewAccept()
{
$request = $this->getRequest();
$id = $request->getParameter('id');
$review = ReviewPeer::retrieveByPK($id);
if ($review)
{
$review->setAgreement(true);
$review->save();
}
if ($this->getRequest()->isXmlHttpRequest())
{
return sfView::HEADER_ONLY;
}
return $this->redirect($this->getRequest()->getReferer());
}
public function executeReviewSkip()
{
$request = $this->getRequest();
$id = $request->getParameter('id');
$review = ReviewPeer::retrieveByPK($id);
if ($review)
{
$review->setSkipped(true);
$review->save();
}
if ($this->getRequest()->isXmlHttpRequest())
{
return sfView::HEADER_ONLY;
}
return $this->redirect($this->getRequest()->getReferer());
}
public function executeSendReviewRequest()
{
$order_product = OrderProductPeer::retrieveByPK($this->getRequestParameter('order_product_id'));
$order_product->setSendReview(date("Y-m-d H:i:s"));
$order_product->save();
/**
* @var sfWebRequest
*/
$request = $this->getRequest();
stReview::sendMail($order_product->getOrder()->getSfGuardUser(), $order_product);
if (!$request->isXmlHttpRequest())
{
return $this->redirect('stOrder/edit?id=' . $order_product->getOrderId());
}
$i18n = $this->getContext()->getI18N();
sfLoader::loadHelpers(array('Helper', 'stAdminGenerator'));
return $this->renderJSON(array(
'content' => st_admin_get_icon('envelop', array('class' => 'img_send' . $order_product->getId())) .
st_admin_get_icon('check-circle', array('size' => 15, 'style' => 'margin-left: -11px; margin-bottom: -14px')),
'title' => stReview::getSendTime($order_product->getSendReview()) . '<br>' . $i18n->__('Kliknij aby wysłać ponownie.'),
));
}
public function executeConfig()
{
$context = $this->getContext();
$this->config = stConfig::getInstance($context);
$this->config->setCulture($this->getRequestParameter('culture', stLanguage::getOptLanguage()));
$this->select_options = array();
$c = new Criteria();
$orderStatus = OrderStatusPeer::doSelect($c);
foreach ($orderStatus as $status)
{
$this->select_options[$status->getId()] = $status->getOptName();
}
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$updateConfig = $this->getRequestParameter('config');
$this->config->set('auto_send', $updateConfig['auto_send']);
$this->config->set('description', $updateConfig['description'], true);
$this->config->set('order_status_type', $updateConfig['order_status_type']);
$this->config->set('send_type', $updateConfig['send_type']);
$this->config->set('cron_du_date', $updateConfig['cron_du_date']);
$this->config->set('cron_send', $updateConfig['cron_send']);
if ($updateConfig['cron_send'] == 1)
{
$task = stTaskScheluder::getTask('review_task')->getTask();
$task->setIsActive(true);
$task->save();
}
else
{
$task = stTaskScheluder::getTask('review_task')->getTask();
$task->setIsActive(false);
$task->save();
}
$this->config->save(true);
stTheme::clearSmartyCache();
stFastCacheManager::clearCache();
$this->setFlash('notice', $context->getI18n()->__('Twoje zmiany zostały zapisane', null, 'stAdminGeneratorPlugin'));
$this->redirect('stReview/config?culture=' . $this->getRequestParameter('culture', stLanguage::getOptLanguage()));
}
}
protected function updateReviewFromRequest()
{
if ($this->getRequest()->getFileSize('review[user_picture]'))
{
$currentFile = sfConfig::get('sf_upload_dir') . $this->review->getUserPicture();
$fileName = md5($this->getRequest()->getFileName('review[user_picture]') . time() . rand(0, 99999));
$ext = $this->getRequest()->getFileExtension('review[user_picture]');
if (is_file($currentFile))
{
unlink($currentFile);
}
$this->review->setUserPicture("/review_picture/" . $this->getRequestParameter('culture', stLanguage::getOptLanguage()) . '/' . $fileName . $ext);
$this->getRequest()->moveFile('review[user_picture]', sfConfig::get('sf_upload_dir') . $this->review->getUserPicture());
}
return parent::updateReviewFromRequest();
}
public function executeDeleteImage()
{
$request = $this->getRequest();
$id = $request->getParameter('id');
$review = ReviewPeer::retrieveByPK($id);
if ($review)
{
$review->setUserPicture(null);
$review->save();
}
stFastCacheManager::clearCache();
foreach (glob(sfConfig::get('sf_root_dir') . '/cache/smarty_c/*') as $file)
{
unlink($file);
}
$this->setFlash('notice', 'Zdjęcie zostało usunięte');
$this->redirect('stReview/edit?id=' . $id);
}
public function filterCriteriaByReviewOrderId($c, $value){
if ($value){
$c->add(ReviewPeer::ORDER_ID, null, Criteria::ISNOTNULL);
}elseif($value !== ""){
$c->add(ReviewPeer::ORDER_ID, null, Criteria::ISNULL);
}
return true;
}
}

View File

@@ -0,0 +1,113 @@
<?php
/**
* SOTESHOP/stReview
*
* Ten plik należy do aplikacji stReview opartej na licencji (Professional License 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 stReview
* @subpackage actions
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: components.class.php 1153 2009-10-07 08:24:35Z pawel $
*/
/**
* stReview components
*
* @author Paweł Byszewski <pawel.byszewski@sote.pl>, Krzysztof Bebło <krzysztof.beblo@sote.pl>
*
* @package stReview
* @subpackage actions
* @property Order $order
*/
class stReviewComponents extends autostReviewComponents
{
/**
* Wyciąga dane zarejestrowanego klienta
*/
public function executeSfGuardUserIdList()
{
$c = new Criteria();
$c->add(UserDataPeer::SF_GUARD_USER_ID, $this->review->getSfGuardUserId());
$this->user_data = UserDataPeer::doSelectOne($c);
}
/**
* Wyciąga dane admina
*/
public function executeAdminName()
{
$c = new Criteria();
$c->add(UserDataPeer::SF_GUARD_USER_ID, $this->review->getSfGuardUserId());
$this->user_data = UserDataPeer::doSelectOne($c);
}
public function executeReviewStatus()
{
if (!isset($this->order_product) && !isset($this->reviewed_product))
{
return sfView::NONE;
}
if (!isset($this->reviewed_product))
{
$c = new Criteria();
$c->add(ReviewPeer::ORDER_ID, $this->order_product->getOrderId());
$c->add(ReviewPeer::PRODUCT_ID, $this->order_product->getProductId());
$this->reviewed_product = ReviewPeer::doSelectOne($c);
}
}
public function executeReviewListStatus()
{
if ($this->order->isAllegroOrder())
{
return sfView::NONE;
}
$config = stConfig::getInstance('stReview');
if($this->order->getOrderProducts()) {
if ($config -> get("send_type") == 1){
$c = new Criteria();
$c->setLimit(1);
$c->addDescendingOrderByColumn(OrderProductPeer::PRICE);
} elseif ($config -> get("send_type") == 2) {
$c = new Criteria();
$c->setLimit(1);
}
$orderProducts = $this->order->getOrderProducts($c);
$orderProduct = $orderProducts ? $orderProducts[0] : null;
} else {
$orderProduct = null;
}
$c = new Criteria();
$c->add(ReviewPeer::ORDER_ID, $this->order->getId());
if($orderProduct){
$c->add(ReviewPeer::PRODUCT_ID, $orderProduct->getProductId());
}
$this->reviewed_product = ReviewPeer::doSelectOne($c);
$this->order_product = $orderProduct;
}
public function executeLinkToAddReview()
{
$c = new Criteria();
$c->add(ProductPeer::ID, $this->product_id);
$product = ProductPeer::doSelectOne($c);
$hash_code = md5($product->getCreatedAt().$this->product_id);
$this->product = $product;
$this->hash_code = $hash_code;
}
}
?>

View File

@@ -0,0 +1,57 @@
<?php
/**
* SOTESHOP/stReview
*
* Ten plik należy do aplikacji stReview opartej na licencji (Professional License 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 stReview
* @subpackage configs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: config.php 1153 2009-10-07 08:24:35Z pawel $
* @author Paweł Byszewski <pawel.byszewski@sote.pl>
*/
/**
* Dodawanie routingu
*/
stPluginHelper::addRouting('stReview', '/review/:action/*', 'stReview', 'index', 'backend');
stPluginHelper::addRouting('stReviewOrder', '/review_order/:action/*', 'stReviewOrder', 'index', 'backend');
/**
* Dodawanie zakładki do menu
*/
stSocketView::addPartial('stProductMenuEdit', 'stReview/productMenuEdit');
stNotificationConfiguration::addGroup('stReview');
/**
* Pobiera instancję obiektu sfEventDispatcher
*/
$dispatcher = stEventDispatcher::getInstance();
/**
* Dodaje sluchacza dla zdarzenia generator.generate
*/
$dispatcher->connect('stAdminGenerator.generateStProduct', array('stReviewListener', 'generate'));
$dispatcher->connect('autoStProductActions.preSaveReview', array('stReviewListener', 'preSaveProductReview'));
$dispatcher->connect('autostProductActions.postExecuteReviewList', array('stReviewListener', 'postExecuteReviewList'));
$dispatcher->connect('Order.preSave', array('stReviewListener', 'postExecuteOrderSave'));
if (floatval(phpversion()) >= 7.1)
{
stTaskConfiguration::addTask(
'review_task', // unikalne id zadania
'stReviewTask', // klasa zadania
'Wysyłanie wiadomość z prośbą o recenzję', // Nazwa zadania jaka będzie wyświetlana w panelu lub w logach
array(
'time_interval' => stTaskConfiguration::TIME_INTERVAL_6HOURS, // odstęp czasowy
'is_system' => true, // zadanie systemowe nie może być zmieniane przez użytkownika
)
);
}

View File

@@ -0,0 +1,85 @@
generator:
class: stAdminGenerator
param:
model_class: Review
theme: simple
head:
package: stReview
documentation:
pl: https://www.sote.pl/docs/recenzje
en: https://www.soteshop.com/docs/reviews
applications: [stProduct, stUser]
list:
use_stylesheet: [backend/stProductList.css]
use_helper: [stProduct/stProduct]
title: Recenzje produktów
mark_as: {field: agreement, filterable: false, auto_update: false}
menu:
display: [_list, config]
fields:
_list: {name: Recenzje produktów, action: stReview/list}
config: {name: Konfiguracja, action: stReview/config}
display: [created_at, _score_star, _product, _description, _order_id, is_pin_review, user_review_verified, _agreement]
actions:
none
object_actions:
_edit: -
_delete: -
fields:
created_at: {name: Utworzona, width: 1%}
score_star: {name: Ocena, width: 1%}
product: {name: Produkt, width: 40%, params: truncate_text=true}
description: {name: Recenzja, width: 60%}
order_id: {name: Zamówienie, width: 1%}
agreement: {name: Publikacja, width: 1%}
is_pin_review: {name: Wyróżniona, width: 1%}
user_review_verified: {name: Zweryfikowana, width: 1%}
filters:
product: {filter_field: Product.name}
sf_guard_user_id_list: {partial: filter_client}
order_id: {partial: filter_list_order_id}
sort: [created_at, desc]
config:
title: Konfiguracja
description: Recenzje produktów.
display: [is_active]
fields:
is_active: {name: Aktywny, checked: false, type: checkbox}
actions:
_save: {name: Zapisz}
edit:
title: Edycja recenzji
description: Recenzje produktów.
display: [created_at, _language, _product_link, agreement, is_pin_review, user_review_verified, _score, description, ~admin_name, _user_picture, user_facebook, user_instagram, user_youtube, user_twitter]
fields:
created_at: {name: Utworzona}
language: {name: Język wpisu}
description: {name: Recenzja, type: textarea_tag, params: size=75x10 rich=false tinymce_options='height:300,width:400,theme:'simple''}
score: {name: Ocena}
agreement: {name: Publikacja}
active: {name: Aktywna}
product_id: {name: Produkt, type: input_tag}
product_link: {name: Produkt}
admin_name: {name: Podpis, type: input_tag, params: size=75}
anonymous: {name: Podpis anonimowego użytkownika}
admin_active: {name: Recenzja od administratora}
score: {name: Ocena}
sf_guard_user_id: {name: Klient}
user_picture: {name: Zdjęcie, type: input_tag, params: size=75}
user_facebook: {name: Facebook, type: input_tag, params: size=75}
user_instagram: {name: Instagram, type: input_tag, params: size=75}
user_youtube: {name: Youtube, type: input_tag, params: size=75}
user_twitter: {name: Twitter, type: input_tag, params: size=75}
user_review_verified: {name: Zweryfikowana zakupem, help: "Recenzja zweryfikowana zakupem." }
is_pin_review: {name: Wyróżnij, help: "Recenzja zostanie przypięta do góry."}
actions:
_list: {name: Lista}
_save: {name: Zapisz}
_save_and_add: {name: Zapisz i dodaj}
_delete: {name: Usuń}

View File

@@ -0,0 +1,69 @@
review_model_class: Review
applications: [stReview]
custom_actions:
list: [review]
edit: [review]
edit:
menu:
display: [review]
fields:
review: {name: Recenzje, action: stProduct/reviewList?product_id=%%id%%}
review_list:
title: Recenzje
forward_parameters: [product_id]
build_options:
related_id: forward_parameters.product_id
display: [created_at, _score_star, _description, is_pin_review, user_review_verified, agreement]
menu: {use: edit.menu}
fields:
created_at: {name: Utworzona, width: 1%}
score_star: {name: Ocena, width: 1%, module: stReview}
description: {name: Recenzja, module: stReview}
agreement: {name: Publikacja, width: 1%, module: stReview}
is_pin_review: {name: Wyróżniona, width: 1%}
user_review_verified: {name: Zweryfikowana, width: 1%}
empty_message: {title: Recencje}
actions:
_create: {name: Dodaj}
object_actions:
_edit: -
_delete: -
filters:
sf_guard_user_id_list: {filter_field: product.name}
status: {filter_field: product.name}
review_edit:
forward_parameters: [product_id]
build_options:
related_id: forward_parameters.product_id
display: [created_at, _language, agreement, is_pin_review, user_review_verified, _score, description, admin_name, _user_picture, user_facebook, user_instagram, user_youtube, user_twitter]
menu: {use: edit.menu}
description: Zarządzanie produktami w sklepie.
title: Edycja recenzji
fields:
created_at: {name: Utworzona, hide_on_create: true}
language: {name: Język wpisu, i18n: stReview}
admin_name: {name: Podpis, type: input_tag, params: size=75}
description: {name: Recenzja, type: textarea_tag, params: size=75x10 rich=false tinymce_options='height:300,width:400,theme:'simple''}
agreement: {name: Publikacja}
active: {name: Aktywna}
score: {name: Ocena, module: stReview}
product_review: {module: stReview}
user_picture: {name: Zdjęcie, type: input_tag, params: size=75}
user_facebook: {name: Facebook, type: input_tag, params: size=75}
user_instagram: {name: Instagram, type: input_tag, params: size=75}
user_youtube: {name: Youtube, type: input_tag, params: size=75}
user_twitter: {name: Twitter, type: input_tag, params: size=75}
user_review_verified: {name: Zweryfikowana zakupem, help: "Recenzja zweryfikowana zakupem." }
is_pin_review: {name: Wyróżnij , help: "Recenzja zostanie przypięta do góry."}
actions:
_list: {name: Lista}
_save: {name: Zapisz}
_save_and_add: {name: Zapisz i dodaj}
_delete: {name: Usuń}

View File

@@ -0,0 +1,5 @@
<?php
class stReviewBreadcrumbsBuilder extends autoStReviewBreadcrumbsBuilder
{
}

View File

@@ -0,0 +1,40 @@
<?php if ($review->getSfGuardUser()): ?>
<div style="padding-top: 10px;">
<?php if ($review->getUsername()): ?>
<?php echo $review->getUsername() ?>
<?php else: ?>
<?php if ($user_data->getName()!="" || $user_data->getSurname()!=""): ?>
<?php $name = $user_data->getName()." ".$user_data->getSurname(); ?>
<?php else: ?>
<?php $name = $review->getSfGuardUser(); ?>
<?php endif; ?>
<?php echo st_link_to($name,'stUser/edit?id='.$review->getSfGuardUserId()); ?>
<br />
<?php echo $review->getSfGuardUser() ?>
<?php endif; ?>
</div>
<?php else: ?>
<?php if ($review->getUsername() ): ?>
<div style="padding-top: 10px;">
<?php echo $review->getUsername() ?>
</div>
<?php else: ?>
<?php if ($sf_request->hasError('review{admin_name}')): ?>
<?php echo form_error('review{admin_name}', array('class' => 'form-error-msg')) ?>
<?php endif; ?>
<?php $value = object_input_tag($review, 'getAdminName', array (
'control_name' => 'review[admin_name]',
'size' => 75,
)); echo $value ? $value : '&nbsp;' ?>
<?php endif; ?>
<?php endif; ?>

View File

@@ -0,0 +1,23 @@
<div style="text-align: center;">
<?php if ($review->getAgreement()): ?>
<span class="svg-icon svg-icon-check-circle" style="-webkit-mask-image: url(/images/backend/icons/svg/check-circle.svg?v=2); mask-image: url(/images/backend/icons/svg/check-circle.svg?v=2);"></span>
<?php elseif ($review->getSkipped()): ?>
<span class="svg-icon svg-icon-delete-circle" style="background-color: #555; -webkit-mask-image: url(/images/backend/icons/svg/delete-circle.svg?v=2); mask-image: url(/images/backend/icons/svg/delete-circle.svg?v=2);"></span>
<?php else: ?>
<a href="<?php echo st_url_for('stReview/reviewAccept') ?>?id=<?php echo $review->getId() ?>" class="review-update-action">
<span class="svg-icon svg-icon-check-circle" style="-webkit-mask-image: url(/images/backend/icons/svg/check-circle.svg?v=2); mask-image: url(/images/backend/icons/svg/check-circle.svg?v=2);"></span>
</a>
|
<a href="<?php echo st_url_for('stReview/reviewSkip') ?>?id=<?php echo $review->getId() ?>" class="review-update-action">
<span class="svg-icon svg-icon-delete-circle" style="background-color: #555; -webkit-mask-image: url(/images/backend/icons/svg/delete-circle.svg?v=2); mask-image: url(/images/backend/icons/svg/delete-circle.svg?v=2);"></span>
</a>
<?php endif; ?>
</div>
<script type="text/javascript">
jQuery(function($) {
$('.review-update-action').click(function() {
$.preloader.show();
});
});
</script>

View File

@@ -0,0 +1 @@
<span class="tooltip" data-title="<?php echo $review->getDescription(); ?>"><?php echo st_admin_truncate_text($review->getDescription()) ?></span>

View File

@@ -0,0 +1,5 @@
<?php echo st_get_admin_actions_head('style="margin-top: 10px; float: right"') ?>
<?php echo st_get_admin_action('list', __('Lista', null, 'stAdminGeneratorPlugin'), 'stReview/list?id='.$review->getId(), array (
)) ?>
<?php echo st_get_admin_action('save', __('Zapisz', null, 'stAdminGeneratorPlugin'), null, array ('name' => 'save')) ?>
<?php echo st_get_admin_actions_foot() ?>

View File

@@ -0,0 +1 @@
<?php echo input_tag('filters[filter_client]', isset($filters['filter_client']) ? $filters['filter_client'] : '') ?>

View File

@@ -0,0 +1,5 @@
<?php
echo st_admin_yesno_select_tag('filters[order_id]', isset($filters['order_id']) ? $filters['order_id'] : null, ['include_custom' => '---']);
?>

View File

@@ -0,0 +1,13 @@
<?php
$languages = LanguagePeer::doSelect(new Criteria());
$reviewLanguages = array();
foreach ($languages as $language) {
$c = new Criteria();
$c->add(LanguageI18nPeer::CULTURE, sfContext::getInstance()->getUser()->getCulture());
$LanguageI18n = $language->getLanguageI18ns($c);
$reviewLanguages[$language->getOriginalLanguage()] = $LanguageI18n[0]->getName();
}
echo select_tag("review[language]", options_for_select($reviewLanguages, $review->getLanguage()));

View File

@@ -0,0 +1,9 @@
<?php $lang = $review->getLanguage(); ?>
<?php $c = new Criteria(); ?>
<?php $c->add(LanguagePeer::LANGUAGE, $lang); ?>
<?php $language = LanguagePeer::doSelectOne($c); ?>
<?php if($language->getActiveImage()):?>
<?php echo image_tag('/'.sfConfig::get('sf_upload_dir_name')."/stLanguagePlugin/".$language->getActiveImage(), array('style' => 'vertical-align: middle;')); ?>
<?php else:?>
<?php echo $language; ?>
<?php endif;?>

View File

@@ -0,0 +1,2 @@
<?php $url = "https://".$sf_request->getHost()."/".$product->getFriendlyUrl().".html?hash_code=".$hash_code ?>
<?php echo st_admin_get_form_field('url_report', __('Link do recenzji'), $url, 'input_tag', array('readonly' => true, 'size' => 80, 'clipboard' => true)) ?>

View File

@@ -0,0 +1,6 @@
<?php use_helper('stAdminGenerator', 'I18N') ?>
<?php if (!$sf_request->getParameter('product_id')): ?>
<?php echo st_get_admin_actions_head('style="margin-top: 10px; float: right"') ?>
<?php echo st_get_admin_action('create', __('Recenzję można dodać z poziomu produktu'), 'product/list') ?>
<?php echo st_get_admin_actions_foot() ?>
<?php endif; ?>

View File

@@ -0,0 +1 @@
<?php echo list_product_image($review->getProduct()); ?>

View File

@@ -0,0 +1,5 @@
<div style="text-align: center;">
<?php if($review->getOrderId()): ?>
<?php echo st_admin_get_icon('check-circle', array('color' => 'success')) ?>
<?php endif; ?>
</div>

View File

@@ -0,0 +1,5 @@
<?php echo st_truncate_text($review->getProduct(), 20); ?>
<?php
if (strlen($review->getProduct()) > 20): ?>
...<a href="#" class="help" data-title="<?php echo $review->getProduct(); ?>" aria-expanded="false"></a>
<?php endif; ?>

View File

@@ -0,0 +1,2 @@
<?php echo input_hidden_tag('review[product_id]', $review->getProductId()) ?>
<?php $value = st_get_partial('product', array('type' => 'edit', 'review' => $review)); echo $value ? $value : '&nbsp;' ?>

View File

@@ -0,0 +1,3 @@
<div style="padding-top: 10px;">
<?php echo st_link_to($review->getProduct(),'stProduct/reviewEdit?product_id='.$review->getProduct()->getId().'&id='.$review->getId()); ?>
</div>

View File

@@ -0,0 +1,5 @@
<?php $product_id = $sf_request->getParameter('product_id'); ?>
<?php $c = new Criteria(); ?>
<?php $c->add(ProductPeer::ID, $forward_parameters['product_id']); ?>
<?php $product = ProductPeer::doSelectOne($c); ?>
<?php echo $product->getName() ?>

View File

@@ -0,0 +1 @@
<?php echo st_get_component('stReview', 'reviewStatus', array('order_product' => $order_product, 'reviewed_product' => $reviewed_product)) ?>

View File

@@ -0,0 +1,69 @@
<?php if ($reviewed_product) : ?>
<a style="text-decoration: none; background: none; padding: 0px; margin: 0px;" href="<?php echo st_url_for('stReview/edit') ?>?id=<?php echo $reviewed_product->getId() ?>" <?php if ($reviewed_product->getDescription() != "") : ?> class="tooltip" title="<?php echo $reviewed_product->getDescription() ?>" <?php endif; ?>>
<?php $i = 1;
while ($i <= $reviewed_product->getScore())
{ ?>
<?php echo st_admin_get_icon('star', array('color' => 'warning')); ?>
<?php $i++;
} ?></a>
<div style="display:inline;">
<?php if ($reviewed_product->getAgreement()) : ?>
<?php echo st_admin_get_icon('check-circle') ?>
<?php elseif ($reviewed_product->getSkipped()) : ?>
<?php echo st_admin_get_icon('delete-circle', array('color' => 'default')) ?>
<?php else : ?>
<a style="text-decoration: none;" href="<?php echo st_url_for('stReview/reviewAccept') ?>?id=<?php echo $reviewed_product->getId() ?>" id="st_review_ajax_<?php echo $order_product->getId() ?>" data-review-action="accept">
<?php echo st_admin_get_icon('check-circle') ?>
</a>
|
<a style="text-decoration: none;" href="<?php echo st_url_for('stReview/reviewSkip') ?>?id=<?php echo $reviewed_product->getId() ?>" id="st_review_ajax_<?php echo $order_product->getId() ?>" data-review-action="skip">
<?php echo st_admin_get_icon('delete-circle', array('color' => 'default')) ?>
</a>
<?php endif; ?>
</div>
<script>
jQuery(function($) {
$('#st_review_ajax_<?php echo $order_product->getId() ?>').click(function() {
var link = $(this);
$.preloader.show();
$.post(link.attr('href'), {}, function() {
if (link.data('review-action') == 'skip') {
link.parent().html('<?php echo st_admin_get_icon('delete-circle', array('color' => 'default')) ?>');
} else if (link.data('review-action') == 'accept') {
link.parent().html('<?php echo st_admin_get_icon('check-circle') ?>');
}
$.preloader.hide();
});
return false;
});
});
</script>
<?php else: ?>
<?php if (!$order_product->getProduct()) : ?>
<?php echo st_admin_get_icon('delete-circle', array('color' => 'default')) ?>
<?php else: ?>
<a style="text-decoration: none; background: none; padding: 0px; margin: 0px;"
href="<?php echo st_url_for('stReview/sendReviewRequest') ?>?order_product_id=<?php echo $order_product->getId() ?>"
id="st_review_ajax_<?php echo $order_product->getId() ?>"
class="tooltip"
title="<?php echo $order_product->getSendReview() != "" ? stReview::getSendTime($order_product->getSendReview()).'<br>'.$i18n->__('Kliknij aby wysłać ponownie.') : __("Kliknij aby wysłać prośbę o recenzję.") ?>">
<?php echo st_admin_get_icon('envelop') ?>
<?php echo $order_product->getSendReview() != "" ? st_admin_get_icon('check-circle', array('size' => 15, 'style' => 'margin-left: -12px; margin-bottom: -13px')) : st_admin_get_icon('arrow-right', array('size' => 12, 'style' => 'margin-left: -11px; margin-bottom: -14px')) ?>
</a>
<script>
jQuery(function($) {
$('#st_review_ajax_<?php echo $order_product->getId() ?>').click(function() {
var link = $(this);
$.preloader.show();
$.post(link.attr('href'), {}, function(response) {
link.data('title', response.title);
link.html(response.content);
$.preloader.hide();
});
return false;
});
});
</script>
<?php endif; ?>
<?php endif; ?>

View File

@@ -0,0 +1 @@
<?php echo select_tag('review[score]', options_for_select(Array('- ', '1', '2', '3', '4', '5'), $review->getScore(), array('id'=>'review[score]'))) ?>

View File

@@ -0,0 +1,4 @@
<?php $i=1; while($i<=$review->getScore()) { ?>
<?php echo st_admin_get_icon('star', array('color' => 'warning')); ?>
<?php $i++; } ?>

View File

@@ -0,0 +1,13 @@
<?php if ($review->getSfGuardUser()): ?>
<?php echo st_link_to($review->getSfGuardUser(),'stUser/edit?id='.$review->getSfGuardUserId()); ?>
<?php else : ?>
<?php if($review->getAdminName()): ?>
<p style="color: red">
<?php echo $review->getAdminName(); ?>
</p>
<?php else: ?>
<p style="color: red">
<?php echo __('Administrator'); ?>
</p>
<?php endif; ?>
<?php endif;?>

View File

@@ -0,0 +1,13 @@
<?php if ($review->getSfGuardUser()): ?>
<?php echo link_to($review->getSfGuardUser(),'stUser/edit?id='.$review->getSfGuardUserId()); ?>
<?php else : ?>
<?php if($review->getAdminName()): ?>
<p style="color: red">
<?php echo $review->getAdminName(); ?>
</p>
<?php else: ?>
<p style="color: red">
<?php echo __('Administrator'); ?>
</p>
<?php endif; ?>
<?php endif;?>

View File

@@ -0,0 +1,6 @@
<?php echo input_file_tag("review[user_picture]", ""); ?><br/>
<?php if ($review->getUserPicture()!=""): ?>
<img src="/uploads<?php echo $review->getUserPicture(); ?>" alt="" style="width: 60px; height: 60px; margin-top: 10px; margin-bottom: 10px; border-radius: 50%;" ><br/>
<?php echo link_to(__('Usuń zdjęcie'),'stReview/deleteImage?id='.$review->getId())?>
<br class="st_clear_all">
<?php endif; ?>

View File

@@ -0,0 +1,126 @@
<?php use_helper('I18N', 'stAdminGenerator', 'stJQueryTools', 'stPrice'); ?>
<?php st_include_partial('stReview/header', array('title' => __('Konfiguracja'), 'culture' => $config -> getCulture(), 'route' => 'stReview/config')); ?>
<?php st_include_partial('stAdminGenerator/message'); ?>
<?php st_view_slot_start('application-menu') ?>
<?php st_include_component('stReview', 'listMenu') ?>
<?php st_view_slot_end() ?>
<?php echo form_tag('stReview/config?culture=' . $config -> getCulture(), array('id' => 'sf_admin_config_form', 'name' => 'sf_admin_config_form', 'class' => 'admin_form')); ?>
<fieldset>
<h2><?php echo __('Ustawienie wysyłania maili') ?></h2>
<div class="content">
<?php echo st_admin_get_form_field('config[auto_send]', __('Wysyłaj przy zmianie statusu'), 1, 'checkbox_tag', array('checked' => $config->get('auto_send'), 'help' => __('Wiadomości będą automatycznie wysyłane po zmianie statusu zamówienia.', null, 'stReview'))) ?>
<div class="form-row">
<?php echo label_for('config[order_status_type]', __('Dla statusu zamówienia'), ''); ?>
<div class="field">
<?php echo select_tag('config[order_status_type]', options_for_select($select_options, $config->get("order_status_type")), array('class' => 'support')) ?>
<br class="st_clear_all" />
</div>
</div>
<div class="form-row">
<?php echo st_admin_get_form_field('config[cron_send]', __('Wysyłaj z opóźnieniem'), 1, 'checkbox_tag', array('checked' => $config->get('cron_send'), 'help' => __('Wiadomości będą automatycznie wysyłane korzystając z harmonogramu zadań.'))) ?>
</div>
<div class="form-row">
<label for="config_send_type"><?php echo __('Wysyłaj po'); ?><a class="help" title="<?php echo __('Wiadomość zostanie wysłana po X dniach od zmiany statusu zamówienia.') ?>" href="#"></a></label>
<div class="field">
<select class="support" id="config_cron_du_date" name="config[cron_du_date]">
<option value="3" <?php if($config -> get('cron_du_date')==3): ?> selected="selected" <?php endif; ?>><?php echo __('3 dniach'); ?></option>
<option value="7" <?php if($config -> get('cron_du_date')==7): ?> selected="selected" <?php endif; ?>><?php echo __('7 dniach'); ?></option>
<option value="21" <?php if($config -> get('cron_du_date')==21): ?> selected="selected" <?php endif; ?>><?php echo __('21 dniach'); ?></option>
</select>
<br class="st_clear_all">
</div>
</div>
<div class="form-row">
<label for="config_send_type"><?php echo __('Wysyłaj dla'); ?><a class="help" title="<?php echo __('W przypadku większej ilości produktów w zamówieniu, automatyczna prośba o recenzę będzie wysyłana do jednego produktu.') ?>" href="#"></a></label>
<div class="field">
<select class="support" id="config_send_type" name="config[send_type]">
<option value="1" <?php if($config -> get('send_type')==1): ?> selected="selected" <?php endif; ?>><?php echo __('Dla najdroższego produktu'); ?></option>
<option value="2" <?php if($config -> get('send_type')==2): ?> selected="selected" <?php endif; ?>><?php echo __('Dla pierwszego'); ?></option>
</select>
<br class="st_clear_all">
</div>
</div>
<div class="form-row">
<?php echo label_for('config[description]', __('Treść wiadomości'), ''); ?>
<div class="field">
<?php echo textarea_tag('config[description]', $config -> get('description', null, true), array('size' => '100x3')); ?>
<br class="st_clear_all" />
</div>
</div>
</div>
</fieldset>
<?php echo st_get_admin_actions_head('style="margin-top: 10px; float: right"'); ?>
<?php echo st_get_admin_action('save', __('Zapisz', null, 'stAdminGeneratorPlugin'), null, array('name' => 'save')); ?>
<?php echo st_get_admin_actions_foot(); ?>
</form>
<?php echo st_get_admin_foot(); ?>
<script type="text/javascript">
jQuery(function($) {
checkActive();
$('#config_auto_send').change(function() {
checkActive();
});
$('#config_cron_send').change(function() {
checkActive();
});
function checkActive()
{
if ($('#config_auto_send').attr('checked')) {
$( "#config_order_status_type" ).prop( "disabled", false );
$( "#config_order_status_type" ).trigger("chosen:updated");
$( "#config_cron_send" ).prop( "disabled", false );
$( "#config_cron_du_date" ).prop( "disabled", false );
$( "#config_cron_du_date" ).trigger("chosen:updated");
if ($('#config_cron_send').attr('checked') && $('#config_auto_send').attr('checked')) {
$( "#config_cron_du_date" ).prop( "disabled", false );
} else {
$( "#config_cron_du_date" ).prop( "disabled", true );
}
$( "#config_cron_du_date" ).trigger("chosen:updated");
} else {
$( "#config_order_status_type" ).prop( "disabled", true );
$( "#config_order_status_type" ).trigger("chosen:updated");
$( "#config_cron_send" ).prop( "disabled", true );
if ($('#config_cron_send').attr('checked') && $('#config_auto_send').attr('checked')) {
$( "#config_cron_du_date" ).prop( "disabled", false );
} else {
$( "#config_cron_du_date" ).prop( "disabled", true );
}
$( "#config_cron_du_date" ).trigger("chosen:updated");
}
}
});
</script>

View File

@@ -0,0 +1,326 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<head style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<meta name="viewport" content="width=device-width" style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<title style="margin: 0;padding: 0;font-family: Arial, sans-serif;">ZURBemails</title>
<style style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
/* -------------------------------------
GLOBAL
------------------------------------- */
* {
margin:0;
padding:0;
}
* { font-family: Arial, sans-serif; }
img {
max-width: 100%;
}
.collapse {
margin:0;
padding:0;
}
body {
-webkit-font-smoothing:antialiased;
-webkit-text-size-adjust:none;
width: 100%!important;
height: 100%;
}
/* -------------------------------------
ELEMENTS
------------------------------------- */
a { color: #2BA6CB;}
.btn {
text-decoration:none;
color: #FFF;
background-color: #666;
padding:10px 16px;
font-weight:bold;
margin-right:10px;
text-align:center;
cursor:pointer;
display: inline-block;
}
p.callout {
padding:15px;
background-color:#ECF8FF;
margin-bottom: 15px;
}
.callout a {
font-weight:bold;
color: #2BA6CB;
}
table.social {
background-color: #ebebeb;
}
.social .soc-btn {
padding: 3px 7px;
font-size:12px;
margin-bottom:10px;
text-decoration:none;
color: #FFF;font-weight:bold;
display:block;
text-align:center;
}
a.fb { background-color: #3B5998!important; }
a.tw { background-color: #1daced!important; }
a.gp { background-color: #DB4A39!important; }
a.ms { background-color: #000!important; }
.sidebar .soc-btn {
display:block;
width:100%;
}
/* -------------------------------------
HEADER
------------------------------------- */
table.head-wrap { width: 100%;}
.header.container table td.logo { padding: 15px; }
.header.container table td.label { padding: 15px; padding-left:0px;}
/* -------------------------------------
BODY
------------------------------------- */
table.body-wrap { width: 100%;}
/* -------------------------------------
FOOTER
------------------------------------- */
table.footer-wrap { width: 100%; clear:both!important;
}
.footer-wrap .container td.content p { border-top: 1px solid rgb(215,215,215); padding-top:15px;}
.footer-wrap .container td.content p {
font-size:10px;
font-weight: bold;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,h2,h3,h4,h5,h6 {
font-family: Arial, sans-serif; line-height: 1.1; margin-bottom:15px; color:#000;
}
h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { font-size: 60%; color: #6f6f6f; line-height: 0; text-transform: none; }
h1 { font-weight:200; font-size: 44px;}
h2 { font-weight:200; font-size: 37px;}
h3 { font-weight:500; font-size: 27px;}
h4 { font-weight:500; font-size: 23px;}
h5 { font-weight:900; font-size: 17px;}
h6 { font-weight:900; font-size: 14px; text-transform: uppercase; color:#444;}
.collapse { margin:0!important;}
p, ul {
margin-bottom: 10px;
font-weight: normal;
font-size:12px;
line-height:1.6;
}
p.lead { font-size:17px; }
p.last { margin-bottom:0px;}
ul li {
margin-left:5px;
list-style-position: inside;
}
/* -------------------------------------
SIDEBAR
------------------------------------- */
ul.sidebar {
background:#ebebeb;
display:block;
list-style-type: none;
}
ul.sidebar li { display: block; margin:0;}
ul.sidebar li a {
text-decoration:none;
color: #666;
padding:10px 16px;
/* font-weight:bold; */
margin-right:10px;
/* text-align:center; */
cursor:pointer;
border-bottom: 1px solid #777777;
border-top: 1px solid #FFFFFF;
display:block;
margin:0;
}
ul.sidebar li a.last { border-bottom-width:0px;}
ul.sidebar li a h1,ul.sidebar li a h2,ul.sidebar li a h3,ul.sidebar li a h4,ul.sidebar li a h5,ul.sidebar li a h6,ul.sidebar li a p { margin-bottom:0!important;}
/* ---------------------------------------------------
RESPONSIVENESS
Nuke it from orbit. It's the only way to be sure.
------------------------------------------------------ */
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */
.container {
display:block!important;
max-width:600px!important;
margin:0 auto!important; /* makes it centered */
clear:both!important;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
padding:15px;
max-width:600px;
margin:0 auto;
display:block;
}
/* Let's make sure tables in the content area are 100% wide */
.content table { width: 100%; }
/* Odds and ends */
.column {
width: 300px;
float:left;
}
.social .column tr td { padding: 15px; }
.user_data .column tr td { padding-bottom: 15px; }
.column-wrap {
padding:0!important;
margin:0 auto;
max-width:600px!important;
}
.column table { width:100%;}
.social .column {
width: 280px;
min-width: 279px;
float:left;
}
.user_data .column {
width: 280px;
min-width: 279px;
float:left;
}
/* Be sure to place a .clear element after each set of columns, just to be safe */
.clear { display: block; clear: both; }
/* -------------------------------------------
PHONE
For clients that support media queries.
Nothing fancy.
-------------------------------------------- */
@media only screen and (max-width: 600px) {
a[class="btn"] { display:block!important; margin-bottom:10px!important; background-image:none!important; margin-right:0!important;}
div[class="column"] { width: auto!important; float:none!important;}
table.social div[class="column"] {
width:auto!important;
}
}
</style>
</head>
<body bgcolor="#FFFFFF" style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;-webkit-font-smoothing: antialiased;-webkit-text-size-adjust: none;height: 100%;width: 100%!important;">
<?php use_helper('Date','stUrl','stProductImage') ?>
<!-- HEADER -->
<table class="head-wrap" bgcolor="#<?php echo $mail_config->get('bg_header_color'); ?>" style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;width: 100%;">
<tr style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;">
<td style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;"></td>
<td class="header container" style="margin: 0 auto!important;padding: 0;font-family: Arial, sans-serif;font-size: 12px;display: block!important;max-width: 600px!important;clear: both!important;">
<div class="content" style="margin: 0 auto;padding: 15px;font-family: Arial, sans-serif;font-size: 12px;max-width: 600px;display: block;">
<table bgcolor="#<?php echo $mail_config->get('bg_header_color'); ?>" style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;width: 100%;">
<tr style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;">
<td style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;"><?php if ($mail_config->get('logo')!=""): ?><img src="http://<?php echo $sf_request->getHost(); ?>/uploads<?php echo $mail_config->get('logo'); ?>?version=1" style="margin: 0;padding: 0;font-family: Arial, sans-serif;font-size: 12px;max-width: 100%; max-height: 50px;"><?php endif; ?></td>
<td align="right" style="margin: 0;padding: 0;font-family: Arial, sans-serif;"><h6 class="collapse" style="margin: 0!important;padding: 0;font-family: &quot;helveticaneue-light&quot: ;, &quot: ;helvetica neue light&quot: ;helvetica neue&quot: ;, helvetica, arial, &quot: ;lucida grande&quot: ;, sans-serif: ;line-height: 1.1;margin-bottom: 15px;color: #444;font-weight: 900;font-size: 14px;text-transform: uppercase;"><?php echo date('d-m-Y H:i'); ?></h6></td>
</tr>
</table>
</div>
</td>
<td style="margin: 0;padding: 0;font-family: Arial, sans-serif;"></td>
</tr>
</table><!-- /HEADER -->
<!-- BODY -->
<table class="body-wrap" cellpadding="0" cellspacing="0" style="margin: 0;padding: 0;font-family: Arial, sans-serif;width: 100%;">
<tr style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<td style="margin: 0;padding: 0;font-family: Arial, sans-serif;"></td>
<td class="container" bgcolor="#FFFFFF" style="margin: 0 auto!important;padding: 0;font-family: Arial, sans-serif;display: block!important;max-width: 600px!important;clear: both!important;">
<div class="content" style="margin: 0 auto;padding: 15px;font-family: Arial, sans-serif;max-width: 600px;display: block;">
<table cellpadding="0" cellspacing="0" style="margin: 0;padding: 0;font-family: Arial, sans-serif;width: 100%;">
<tr style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<td style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<p style="font-size: 12px;margin: 0;padding: 0;font-family: Arial, sans-serif;margin-bottom: 10px;font-weight: normal;line-height: 1.6;"><?php echo $user_head; ?></p>
<div style="min-height:200px; margin-bottom: 10px;">
<div style="float:left; margin: 20px 0px 10px 10px; width:210px;"><img width="200" alt="<?php echo $product->getName(); ?>" src="<?php echo st_product_image_path($product, 'small', true, false, true) ?>" border="0" /></div>
<div style="float:left; margin: 20px 0px 10px 10px; width:340px;">
<p style="text-align:center; font-size: 12px;margin: 0;padding: 0;font-family: Arial, sans-serif;margin-bottom: 10px;font-weight: normal;line-height: 1.6;"><?php echo $config -> get('description', null, true) ?></p>
<p style="text-align:center; font-size: 16px;margin: 0;padding: 0;font-family: Arial, sans-serif;margin-bottom: 10px;font-weight: normal;line-height: 1.6;"><?php echo $product->getName(); ?></p>
<p class="callout" style="text-align: center;margin: 0;padding: 15px;font-family: Arial, sans-serif;font-size: 12px;margin-bottom: 15px;font-weight: normal;line-height: 1.6;background-color: #<?php echo $mail_config->get('bg_action_color'); ?>;">
<a style="color:#<?php echo $mail_config->get('bg_action_link_color'); ?>; font-size:12px;" href="http://<?php echo $sf_request->getHost(); ?>/<?php echo $product->getFriendlyUrl(); ?>.html?hash_code=<?php echo $hash; ?>" target="_blank"><?php echo __("Dodaj opinię", null,"stReview") ?></a>
</p>
</div>
</div>
<div style="clear: both;"></div>
<p class="callout" style="text-align: center;margin: 0;padding: 15px;font-family: Arial, sans-serif;font-size: 12px;margin-bottom: 15px;font-weight: normal;line-height: 1.6;background-color: #DFF0D8;">
<span style="font-size:12px; color:#468847;"><?php echo __('Dziękujemy !', null,"stReview") ?></span>
</p>
<p style="font-size:12px; color:#ccc; text-align: center;">
<i><?php echo __('Ta wiadomość została wysłana ze sklepu internetowego', null,"stReview"); ?></i> <a style="font-size:12px; color:#ccc;" href="http://<?php echo $sf_request->getHost(); ?>/<?php echo $product->getFriendlyUrl(); ?>.html?hash_code=<?php echo $hash; ?>" target="_blank">http://<?php echo $sf_request->getHost(); ?></b>
</p>
<!-- social & contact -->
<table class="social" width="100%" style="margin: 0;padding: 0;font-family: Arial, sans-serif;background-color: #<?php echo $mail_config->get('bg_footer_color'); ?>;width: 100%;">
<tr style="margin: 0;padding: 0;font-family: Arial, sans-serif;">
<td style="font-size: 12px;margin: 0;padding: 0;font-family: Arial, sans-serif;">
<?php echo $user_foot; ?>
</td>
</tr>
</table><!-- /social & contact -->
</td>
</tr>
</table>
</div><!-- /content -->
</td>
<td style="margin: 0;padding: 0;font-family: Arial, sans-serif;"></td>
</tr>
</table><!-- /BODY -->
</body>
</html>

View File

@@ -0,0 +1,8 @@
fields:
review{score}:
sfNumberValidator:
nan_error: Podaj ocenę produktu
min: 1
min_error: Minimalna ocena wynosi 1
max: 5
max_error: Maksymalna ocena wynosi 5