Files
2025-06-24 14:14:35 +02:00

146 lines
4.2 KiB
PHP

<?php
/**
* Since 2013 Ovidiu Cimpean.
*
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
*
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
* @copyright Since 2013 Ovidiu Cimpean
* @license Do not edit, modify or copy this file
*
* @version Release: 4
*/
class NewsletterProRSS
{
public $version;
public $iso_lang;
public $link;
public $template;
public $context;
public $xml;
/**
* Don't forget to:.
*
* include the files [our_modules.css, our_modules.js]
* include the files for PrestaShop 1.5 [font-awesome.css, fonts]
*/
public function __construct($link, $version, $iso_lang)
{
$this->context = Context::getContext();
$this->version = $version;
$this->iso_lang = $iso_lang;
$this->link = $link;
}
public function setTemplate($filename)
{
if (!file_exists($filename)) {
throw new Exception('The rss template not exists.');
}
$this->template = $filename;
}
public function getXML()
{
$rss = $this->link.sprintf('?version=%s&lang=%s', $this->version, $this->iso_lang);
return @simplexml_load_file($rss);
}
public function render()
{
$output = '';
if (!isset($this->template)) {
throw new Exception('You need to set the template path before to render the template.');
}
$xml = $this->getXML();
if (!$xml) {
if (isset($this->context->controller)) {
$output = $this->context->controller->module->l('Cannot connect to the RSS.');
} else {
$output = 'Cannot connect to the RSS.';
}
} else {
$items = $xml->channel->item;
// if the links don't match the prestashop website will redirect them to my prestashop accout
$regex = '/^(http:\/\/|https:\/\/)?(www\.)?addons\.prestashop\.com/';
$my_modules = 'http://addons.prestashop.com/en/2_community?contributor=236068';
$replace_description = [];
foreach ($items as $item) {
if (!preg_match($regex, (string) $item->details)) {
$item->details = $my_modules;
}
if (!preg_match($regex, (string) $item->demo)) {
$item->demo = $my_modules;
}
if (!preg_match('/^(http:\/\/|https:\/\/)?(www\.)?youtube\.com/', (string) $item->video)) {
$item->video = $my_modules;
}
if (preg_match('/(?P<link>(http:\/\/|https:\/\/)?(\w+\.){1,}\w+)/', $item->description, $match)) {
$replace_description[] = $match['link'];
}
}
$this->context->smarty->assign([
'items' => $items,
'display_version' => (int) $xml->channel->displayVersion,
'display_rating' => (int) $xml->channel->displayRating,
'display_details' => (int) $xml->channel->displayDetails,
'display_video' => (int) $xml->channel->displayVideo,
'display_demo' => (int) $xml->channel->displayDemo,
'display_price' => (int) $xml->channel->displayPrice,
'display_badge' => (int) $xml->channel->displayBadge,
'display_new' => (int) $xml->channel->displayNew,
'count_new' => $this->countNew($xml->channel),
]);
$output = $this->context->smarty->fetch($this->template);
// filter the undesired urls
if (!empty($replace_description)) {
$output = str_replace($replace_description, '', $output);
}
}
return $output;
}
public function countNew($channel)
{
$count = 0;
$items = $channel->item;
$display_new = (int) $channel->displayNew;
if ($display_new) {
foreach ($items as $item) {
if ((int) $item->displayNew) {
++$count;
}
}
}
return $count;
}
}