123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <?php
- namespace Dotdigitalgroup\Email\Block;
- use DOMDocument;
- use Magento\Quote\Model\ResourceModel\Quote;
- use XSLTProcessor;
- const FEEFO_URL = 'http://www.feefo.com/feefo/xmlfeed.jsp?';
- /**
- * Feefo block
- *
- * @api
- */
- class Feefo extends \Magento\Framework\View\Element\Template
- {
- /**
- * @var \Dotdigitalgroup\Email\Helper\Data
- */
- public $helper;
- /**
- * @var \Magento\Framework\Pricing\Helper\Data
- */
- public $priceHelper;
- /**
- * @var DOMDocument
- */
- public $domDocument;
- /**
- * @var XSLTProcessor
- */
- public $processor;
-
- /**
- * @var Quote
- */
- private $quoteResource;
-
- /**
- * @var \Dotdigitalgroup\Email\Model\ResourceModel\Review
- */
- private $review;
- /**
- * @var \Magento\Framework\View\Asset\Repository
- */
- private $assetRepository;
- /**
- * @var \Magento\Quote\Model\QuoteFactory
- */
- private $quoteFactory;
- /**
- * Feefo constructor.
- *
- * @param \Magento\Framework\View\Element\Template\Context $context
- * @param XSLTProcessor $processor
- * @param DOMDocument $document
- * @param \Dotdigitalgroup\Email\Helper\Data $helper
- * @param \Magento\Framework\Pricing\Helper\Data $priceHelper
- * @param \Dotdigitalgroup\Email\Model\ResourceModel\Review $review
- * @param Quote $quoteResource
- * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
- * @param array $data
- */
- public function __construct(
- \Magento\Framework\View\Element\Template\Context $context,
- XSLTProcessor $processor,
- DOMDocument $document,
- \Dotdigitalgroup\Email\Helper\Data $helper,
- \Magento\Framework\Pricing\Helper\Data $priceHelper,
- \Dotdigitalgroup\Email\Model\ResourceModel\Review $review,
- \Magento\Quote\Model\ResourceModel\Quote $quoteResource,
- \Magento\Quote\Model\QuoteFactory $quoteFactory,
- array $data = []
- ) {
- $this->helper = $helper;
- $this->domDocument = $document;
- $this->processor = $processor;
- $this->priceHelper = $priceHelper;
- $this->review = $review;
- $this->assetRepository = $context->getAssetRepository();
- $this->quoteFactory = $quoteFactory;
- $this->quoteResource = $quoteResource;
- parent::__construct($context, $data);
- }
- /**
- * Get customer's service score logo and output it.
- *
- * @return array
- */
- public function getServiceScoreLogo()
- {
- $params = $this->getRequest()->getParams();
- if (! isset($params['code']) || ! $this->helper->isCodeValid($params['code'])) {
- $this->helper->log('Feefo no valid code is set');
- return [];
- }
- $url = 'http://www.feefo.com/feefo/feefologo.jsp?logon=';
- $logon = $this->helper->getFeefoLogon();
- $template = '';
- if ($this->helper->getFeefoLogoTemplate()) {
- $template = '&template=' . $this->helper->getFeefoLogoTemplate();
- }
- $fullUrl = $url . $logon . $template;
- $vendorUrl = 'http://www.feefo.com/feefo/viewvendor.jsp?logon='
- . $logon;
- return ['vendorUrl' => $vendorUrl, 'fullUrl' => $fullUrl];
- }
- /**
- * Get quote products to show feefo reviews.
- *
- * @return array
- */
- private function getQuoteProducts()
- {
- $products = [];
- $params = $this->_request->getParams();
- if (! isset($params['quote_id']) || ! isset($params['code']) || ! $this->helper->isCodeValid($params['code'])) {
- $this->helper->log('Feefo no quote id or code is set');
- return $products;
- }
- $quoteId = (int) $params['quote_id'];
- $quoteModel = $this->quoteFactory->create();
- $this->quoteResource->load($quoteModel, $quoteId);
- if (! $quoteModel->getId()) {
- return $products;
- }
- $productCollection = $this->review->getProductCollection($quoteModel);
- foreach ($productCollection as $product) {
- $products[$product->getSku()] = $product->getName();
- }
- return $products;
- }
- /**
- * Get product reviews from feefo.
- *
- * @param bool $check
- *
- * @return array
- */
- public function getProductsReview($check = true)
- {
- $reviews = [];
- $logon = $this->helper->getFeefoLogon();
- $limit = $this->helper->getFeefoReviewsPerProduct();
- $products = $this->getQuoteProducts();
- foreach ($products as $sku => $name) {
- $url = 'http://www.feefo.com/feefo/xmlfeed.jsp?logon=' . $logon
- . '&limit=' . $limit . '&vendorref=' . $sku
- . '&mode=productonly';
- $doc = $this->domDocument;
- $xsl = $this->processor;
- if ($check) {
- $pathToTemplate = $this->getFeefoTemplate('feedback.xsl');
- $doc->load($pathToTemplate);
- } else {
- $pathToTemplate = $this->getFeefoTemplate('feedback-no-th.xsl');
- $doc->load($pathToTemplate);
- }
- $xsl->importStyleSheet($doc);
- $doc->loadXML(file_get_contents($url));
- $productReview = $xsl->transformToXML($doc);
- if (strpos($productReview, '<td') !== false) {
- $reviews[$name] = $xsl->transformToXML($doc);
- }
- $check = false;
- }
- return $reviews;
- }
- /**
- * @param string $template
- *
- * @return string
- */
- private function getFeefoTemplate($template)
- {
- return $this->assetRepository
- ->createAsset('Dotdigitalgroup_Email::feefo/' . $template)
- ->getUrl();
- }
- /**
- * @return string
- */
- public function getCssUrl()
- {
- return $this->assetRepository
- ->createAsset('Dotdigitalgroup_Email::css/feefo.css')
- ->getUrl();
- }
- }
|