*/ /** * Akcje z stPluginQuestionFrontendActions.class.php * * @package stQuestionPlugin * @subpackage actions */ //require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'stPluginQuestionFrontendActions.class.php'; /** * stQuestionFrontend actions. * * @package stQuestionPlugin * @subpackage actions */ class stQuestionFrontendActions extends stActions { public function executeAsk() { $this->smarty = new stSmarty($this->getModuleName()); $this->error = $this->getRequest()->hasErrors(); $this->type = $this->getRequestParameter('type'); $this->product_id = $this->getRequestParameter('product_id'); $config = stConfig::getInstance(sfContext::getInstance(), array( 'ask_price_user_login' => stConfig::BOOL , 'ask_depository_user_login' => stConfig::BOOL), 'stQuestionBackend' ); $config->load(); $this->login_required = false; if ($config->get('ask_price_user_login')==1 and $this->type=='price') { $this->login_required = true; } else { $this->login_required = false; } if ($config->get('ask_depository_user_login')==1 and $this->type=='depository') { $this->login_required = true; } else { $this->login_required = false; } if($this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser')) { $this->user = $this->getUserEmail($this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser')); } else { $this->user = false; } } public function executeSend() { $this->smarty = new stSmarty($this->getModuleName()); $i18n = sfContext::getInstance()->getI18N(); $this->product_id = $this->getRequestParameter('question[product_id]'); $this->product = ProductPeer::retrieveByPK($this->product_id); 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'); } $this->error = $this->getRequest()->hasErrors(); $this->type = $this->getRequestParameter('type'); $this->question = $this->getRequestParameter('question'); $base_question = new Questions(); $base_question->setQuestionStatus(QuestionStatusPeer::retrieveDefaultNewStatus(new Criteria(), $con = null)); $base_question->setType($this->getRequestParameter('type')); $base_question->setEmail($this->question['email']); $base_question->setItemId($this->question['product_id']); $base_question->setItemName($this->product_name); $base_question->setText($this->question['text']); $base_question->save(); $this->id = $base_question->getId(); if ($this->type=='depository') { $this->mail_subject=$i18n->__('Zapytanie o dostępność produktu').': '.$this->product_name.' ('.$i18n->__('zapytanie nr').' '.$this->id.')'; $this->about=$i18n->__('dostępności'); } if ($this->type=='price') { $this->mail_subject=$i18n->__('Zapytanie o cenę produktu').': '.$this->product_name.' ('.$i18n->__('zapytanie nr').' '.$this->id.')'; $this->about=$i18n->__('cenie'); } $mail_config = stConfig::getInstance($this->getContext(), 'stMailAccountBackend'); $mailHtmlHead = stMailer::getHtmlMailDescription(1); $mailHtmlFoot = stMailer::getHtmlMailDescription(2); $htmlMailMessage = stMailTemplate::render('_html', array( 'from' => stXssSafe::clean($this->question['email']), 'product_id' => stXssSafe::clean($this->question['product_id']), 'product_code' => $this->product->getCode(), 'product_name' => $this->product->getName(), 'friendly_url' => $this->product->getFriendlyUrl(), 'product_producer' => $this->product->getProducer(), 'product_category' => $this->product->getCategory(), 'product' => $this->product, 'text' => stXssSafe::clean($this->question['text']), 'id' => $this->id, 'about' => $this->about, 'head' => $mailHtmlHead, 'foot' => $mailHtmlFoot, 'mail_config' => $mail_config, 'smarty' => $this->smarty )); $plainMailMessage = stMailTemplate::render('_plain', array( 'from' => stXssSafe::clean($this->question['email']), 'product_id' => stXssSafe::clean($this->question['product_id']), 'product_code' => $this->product->getCode(), 'product_name' => $this->product->getName(), 'friendly_url' => $this->product->getFriendlyUrl(), 'product_producer' => $this->product->getProducer(), 'product_category' => $this->product->getCategory(), 'product' => $this->product, 'text' => stXssSafe::clean($this->question['text']), '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)->sendToMerchant(); } public function handleErrorSend() { $this->smarty = new stSmarty($this->getModuleName()); $this->product_id = $this->getRequestParameter('question[product_id]'); $this->error = $this->getRequest()->hasErrors(); $this->type = $this->getRequestParameter('type'); $config = stConfig::getInstance(sfContext::getInstance(), array( 'ask_price_user_login' => stConfig::BOOL , 'ask_depository_user_login' => stConfig::BOOL), 'stQuestionBackend' ); $config->load(); $this->login_required = false; $user = new sfBasicSecurityUser(); if ($config->get('ask_price_user_login')==1 and $this->type=='price') { if($this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser')) { $this->user = $this->getUserEmail($this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser')); $this->login_required = true; } else { $this->login_required = false; } } if ($config->get('ask_depository_user_login')==1 and $this->type=='depository') { if($this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser')) { $this->user = $this->getUserEmail($this->getUser()->getAttribute('user_id', null, 'sfGuardSecurityUser')); $this->login_required = true; } else { $this->login_required = false; } } } public function getUserEmail($user_id) { $this->smarty = new stSmarty($this->getModuleName()); $c = new Criteria(); $c->add(sfGuardUserPeer::ID, $user_id); $user = sfGuardUserPeer::doSelectOne($c); return $user; } public function executeQuestionNotFound() { $this->smarty = new stSmarty($this->getModuleName()); } 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->question_type = $this->getRequestParameter('question_type'); $c = new Criteria(); $c->add(ProductPeer::ID, $this->product_id); $product = ProductPeer::doSelectOne($c); if($this->getRequest()->getMethod() == sfRequest::POST) { $question = $this->getRequestParameter('question'); $type = $this->getRequestParameter('question_type'); $this->sendMail($product, $question, $type); $this->close = true; } $this->is_authenticated = $this->getUser()->isAuthenticated(); $this->updateFromRequestShowAddOverlay(); } public function validateShowAddOverlay() { $error_exists = false; if ($this->getRequest()->getMethod() == sfRequest::POST) { $captcha_mod = stConfig::getInstance('stSecurityBackend')->get('captcha_mod'); if($this->getRequestParameter('question[privacy]')!=1 && !$this->getUser()->isAuthenticated()) { $this->getRequest()->setError('error_privacy', 1); $error_exists = true; } if($captcha_mod=="recaptcha3" && sfContext::getInstance()->getUser()->getAttribute('badscore')!=1){ $recaptcha_key = stConfig::getInstance('stSecurityBackend')->get('recaptcha_key'); $recaptcha_secret = stConfig::getInstance('stSecurityBackend')->get('recaptcha_secret'); // Build POST request: $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; $recaptcha_secret = $recaptcha_secret; $recaptcha_response = $this->getRequestParameter('recaptcha_response'); // Make and decode POST request: $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response); $recaptcha = json_decode($recaptcha); if ($recaptcha->score <= 0.5) { // Bad score $captcha_mod=="standart"; $this->getUser()->setAttribute('badscore', true); }else{ $this->getUser()->setAttribute('badscore', false); } } if($captcha_mod=="standart" || sfContext::getInstance()->getUser()->getAttribute('badscore')==1){ $i18n = $this->getContext()->getI18N(); $validator = new stCaptchaGDValidator(); $validator->initialize($this->getContext(), array('captcha_error' => 'Wprowadzono zły numer.')); $captcha = $this->getRequestParameter('captcha'); $hash_code = $this->getRequestParameter('hash_code'); if (!$validator->execute($captcha, $error) && !$this->getUser()->isAuthenticated() && $hash_code=="" && $this->getUser()->getAttribute('captcha_off')!=1) { $this->getRequest()->setError('captcha', $error); $error_exists = true; }else{ $this->getUser()->setAttribute('captcha_off', true); $this->getUser()->setAttribute('badscore', false); } } } 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->question_type = $this->getRequestParameter('question_type'); $this->is_authenticated = $this->getUser()->isAuthenticated(); $this->config = stConfig::getInstance($this->getContext(), 'stSecurityBackend'); $this->updateFromRequestShowAddOverlay(); return sfView::SUCCESS; } protected function updateFromRequestShowAddOverlay() { $question['username'] = $this->getRequestParameter('question[username]', $this->getUser()->isAuthenticated() ? $this->getUser()->getUsername() : false); $question['description'] = $this->getRequestParameter('question[description]'); $question['email'] = $this->getRequestParameter('question[email]'); $this->question = $question; } /** * Obsługuje wysyłanie mail'i */ function SendMail($product, $question, $type) { $this->smarty = new stSmarty($this->getModuleName()); $mail_error = $this->MailWithQuestionToUser($product, $question, $type); return $mail_error; } /** * Wysyła mail z zamówieniem do administratora */ function mailWithQuestionToUser($product, $question, $type) { $this->smarty = new stSmarty($this->getModuleName()); $i18n = sfContext::getInstance()->getI18N(); $base_question = new Questions(); $base_question->setQuestionStatus(QuestionStatusPeer::retrieveDefaultNewStatus(new Criteria(), $con = null)); $base_question->setType($type); $base_question->setEmail($question['username']); $base_question->setItemId($product->getId()); $base_question->setItemName($product->getName()); $base_question->setText($question['description']); $base_question->save(); $this->id = $base_question->getId(); $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'); } if ($type=='depository') { $this->mail_subject=$i18n->__('Zapytanie o dostępność produktu').': '.$this->product_name.' ('.$i18n->__('zapytanie nr').' '.$this->id.')'; $this->about=$i18n->__('dostępności'); $inner_mail_subject = $i18n->__('Zapytanie o dostępność produktu'); } if ($type=='price') { $this->mail_subject=$i18n->__('Zapytanie o cenę produktu').': '.$this->product_name.' ('.$i18n->__('zapytanie nr').' '.$this->id.')'; $this->about=$i18n->__('cenie'); $inner_mail_subject = $i18n->__('Zapytanie o cenę produktu'); } $mail_config = stConfig::getInstance($this->getContext(), 'stMailAccountBackend'); $mailHtmlHead = stMailer::getHtmlMailDescription("header"); $mailHtmlFoot = stMailer::getHtmlMailDescription("footer"); $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(), '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, 'mail_config' => $mail_config, 'mail_subject'=>$inner_mail_subject, '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(), '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(); } }