Files
2025-03-12 17:06:23 +01:00

256 lines
8.5 KiB
PHP

<?php
/**
* SOTESHOP/smContactFormFrontendPlugin
*
* Ten plik należy do aplikacji stInvoicePlugin 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 smContactFormFrontendPlugin
* @subpackage actions
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: actions.class.php 2285 2009-07-23 12:50:05Z bartek $
* @author Bartosz Alejski <bartosz.alejski@sote.pl>
*/
/**
* Klasa smContactFormFrontendActions.
*
* @package smProductOnFirstPagePlugin
* @subpackage actions
*/
class stAvailabilityFrontendActions extends sfActions
{
public function executeShowAddOverlay()
{
if(!$this->getRequest()->isXmlHttpRequest()){
$this->getResponse()->setStatusCode(404);
$this->getResponse()->setHttpHeader('Status', '404 Not Found');
return $this->forward('stErrorFrontend', 'error404');
}
$this->smarty = new stSmarty($this->getModuleName());
$this->config = stConfig::getInstance($this->getContext(), 'stSecurityBackend');
$this->product_id = $this->getRequestParameter('product_id');
$this->st_product_options = $this->getRequestParameter('st_product_options');
$c = new Criteria();
$c->add(ProductPeer::ID, $this->product_id);
$products = ProductPeer::doSelectWithI18n($c);
foreach ($products as $prod):
$product = $prod;
endforeach;
$options = ProductOptionsValuePeer::retrieveByPKs($this->st_product_options);
foreach ($options as $option)
{
$option_name .= $option->getValue()." ";
}
$this->option_name = $option_name;
if($this->getRequest()->getMethod() == sfRequest::POST)
{
$question = $this->getRequestParameter('question');
$this->sendMail($product, $question, $this->getRequestParameter('option_name'));
$this->close = true;
}
$this->product = $product;
$this->is_authenticated = $this->getUser()->isAuthenticated();
$this->updateFromRequestShowAddOverlay();
}
public function validateShowAddOverlay()
{
$error_exists = false;
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
if($this->getRequestParameter('question[privacy]')!=1 && !$this->getUser()->isAuthenticated())
{
$this->getRequest()->setError('error_privacy', 1);
$error_exists = true;
}
else
{
$i18n = $this->getContext()->getI18N();
$validator = new stCaptchaGDValidator();
$validator->initialize($this->getContext(), array('captcha_error' => 'Wprowadzono zły numer.'));
$captcha = $this->getRequestParameter('captcha');
if (!$validator->execute($captcha, $error) && !$this->getUser()->isAuthenticated())
{
$this->getRequest()->setError('captcha', $error);
$error_exists = true;
}
}
}
return !$error_exists;
}
/**
* Uchwyt do walidatora tworzenia konta.
*
* @return string
*/
public function handleErrorShowAddOverlay()
{
$this->smarty = new stSmarty($this->getModuleName());
$this->product_id = $this->getRequestParameter('product_id');
$this->option_name = $this->getRequestParameter('option_name');
$c = new Criteria();
$c->add(ProductPeer::ID, $this->product_id);
$this->product = ProductPeer::doSelectOne($c);
$this->is_authenticated = $this->getUser()->isAuthenticated();
$this->config = stConfig::getInstance($this->getContext(), 'stSecurityBackend');
$this->updateFromRequestShowAddOverlay();
return sfView::SUCCESS;
}
protected function updateFromRequestShowAddOverlay()
{
$i18n = $this->getContext()->getI18N();
$question['username'] = $this->getRequestParameter('question[username]', $this->getUser()->isAuthenticated() ? $this->getUser()->getUsername() : false);
$question['description'] = $this->getRequestParameter('question[description]', $this->getRequestParameter('question[description]')=="" ? $i18n->__('Proszę o przesłanie informacji o ponownej dostępności produktu w ofercie.') : false);
$question['email'] = $this->getRequestParameter('question[email]');
$this->question = $question;
}
/**
* Obsługuje wysyłanie mail'i
*/
function sendMail($product, $question, $option_name)
{
$this->smarty = new stSmarty($this->getModuleName());
$mail_error = $this->MailWithQuestionToUser($product, $question, $option_name);
return $mail_error;
}
/**
* Wysyła mail z zamówieniem do administratora
*/
function mailWithQuestionToUser($product, $question, $option_name)
{
$this->smarty = new stSmarty($this->getModuleName());
$i18n = sfContext::getInstance()->getI18N();
$this->product = $product;
if ($this->product)
{
$this->product_code = $this->product->getCode();
$this->product_name = $this->product->getName();
$this->product_producer = $this->product->getProducer();
$this->product_category = $this->product->getCategory();
$this->friendly_url = $this->product->getFriendlyUrl();
} else {
$this->redirect('question/questionNotFound');
}
$base_question = new Questions();
$base_question->setQuestionStatus(QuestionStatusPeer::retrieveDefaultNewStatus(new Criteria(), $con = null));
$base_question->setType("depository");
$base_question->setEmail($question['username']);
$base_question->setItemId($product->getId());
$base_question->setItemName($product->getName());
$base_question->setText($product->getName()." ".$option_name." - ".$question['description']);
$base_question->save();
$this->mail_subject=$i18n->__('Zapytanie o dostępność produktu').': '.$this->product_name." ".$option_name;
$mailHtmlHead = stMailer::getHtmlMailDescription(1);
$mailHtmlFoot = stMailer::getHtmlMailDescription(2);
$htmlMailMessage = stMailTemplate::render('_html', array(
'from' => stXssSafe::clean($question['username']),
'product_id' => stXssSafe::clean($product->getId()),
'product_code' => $this->product->getCode(),
'product_name' => $this->product->getName()." ".$option_name,
'friendly_url' => $this->product->getFriendlyUrl(),
'product_producer' => $this->product->getProducer(),
'product_category' => $this->product->getCategory(),
'product' => $this->product,
'text' => stXssSafe::clean($question['description']),
'id' => $this->id,
'about' => $this->about,
'head' => $mailHtmlHead,
'foot' => $mailHtmlFoot,
'smarty' => $this->smarty
));
$plainMailMessage = stMailTemplate::render('_plain', array(
'from' => stXssSafe::clean($question['username']),
'product_id' => stXssSafe::clean($product->getId()),
'product_code' => $this->product->getCode(),
'product_name' => $this->product->getName()." ".$option_name,
'friendly_url' => $this->product->getFriendlyUrl(),
'product_producer' => $this->product->getProducer(),
'product_category' => $this->product->getCategory(),
'product' => $this->product,
'text' => stXssSafe::clean($question['description']),
'id' => $this->id,
'about' => $this->about,
'head' => $mailHtmlHead,
'foot' => $mailHtmlFoot,
'smarty' => $this->smarty
));
$mail = stMailer::getInstance();
$mail->setSubject($this->mail_subject)->setHtmlMessage($htmlMailMessage)->setPlainMessage($plainMailMessage)->setReplyTo($question['username'])->sendToMerchant();
}
}