diff --git a/Block/PowerToys/News.php b/Block/PowerToys/News.php new file mode 100644 index 0000000..eca468f --- /dev/null +++ b/Block/PowerToys/News.php @@ -0,0 +1,122 @@ + + * @copyright Copyright (c) 2023 JaJuMa GmbH . All rights reserved. + * @license http://opensource.org/licenses/mit-license.php MIT License + */ +namespace Jajuma\PotNews\Block\PowerToys; +use Jajuma\PowerToys\Block\PowerToys\Dashboard; +use Magento\Framework\View\Element\Template\Context; +use Jajuma\PotNews\Helper\NewsConfig; +use Magento\Store\Model\StoreManagerInterface; +use Magento\Framework\Locale\Resolver; + +class News extends Dashboard +{ + private $newsConfig; + + private $storeManager; + + private $store; + + protected $listNews = []; + + public function __construct( + NewsConfig $newsConfig, + StoreManagerInterface $storeManager, + Resolver $store, + Context $context, + array $data = [] + ) { + $this->newsConfig = $newsConfig; + $this->storeManager = $storeManager; + $this->store = $store; + parent::__construct($context, $data); + } + + public function isEnable(): bool + { + $storeId = $this->storeManager->getStore()->getId(); + return $this->newsConfig->isEnable($storeId); + } + + public function getNews() + { + $urlsFeed = [ + 'https://mage-os.org/feed/', + 'https://www.hyva.io/blog/feed/index/type/latest_posts/store_id/1/', + 'https://www.jajuma.de/en/blog/rss/feed' + ]; + $additionalFeed = $this->newsConfig->getAdditionalFeed(); + if ($additionalFeed) { + $urlsFeed = array_merge($urlsFeed, explode(',', $additionalFeed)); + } + foreach ($urlsFeed as $url) { + $this->getNewsFeedFromUrl(trim($url)); + } + usort($this->listNews, function($a, $b) { + return strtotime($a['pubDate'])-strtotime($b['pubDate']); + }); + + $listNews = array_reverse($this->listNews); + $limitNews = (int) $this->newsConfig->getLimitNews(); + if ($limitNews) { + $listNews = array_slice($listNews, 0, $limitNews); + } + return $listNews; + } + + public function getNewsFeedFromUrl($url) + { + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, 0); + $data = curl_exec($ch); + try { + $doc = new \SimpleXmlElement($data, LIBXML_NOCDATA); + curl_close($ch); + + if(isset($doc->channel)) + { + $this->parseRSS($doc); + } + if(isset($doc->entry)) + { + $this->parseAtom($doc); + } + } catch (\Exception $e) { + + } + } + + public function parseRSS($xml) + { + //$list['title'] = $xml->channel->title->__toString(); + $cnt = count($xml->channel->item); + for($i=0; $i<$cnt; $i++) + { + $item = []; + $item['url'] = $xml->channel->item[$i]->link->__toString(); + $item['title'] = $xml->channel->item[$i]->title->__toString(); + $item['description'] = $xml->channel->item[$i]->description->__toString(); + $item['pubDate'] = $xml->channel->item[$i]->pubDate->__toString(); + $this->listNews []= $item; + } + } + + function parseAtom($xml) + { + //$list['title'] = $xml->author->name->__toString(); + $cnt = count($xml->entry); + for($i=0; $i<$cnt; $i++) + { + $item = []; + $urlAtt = $xml->entry->link[$i]->attributes(); + $item['url'] = $urlAtt['href']; + $item['title'] = $xml->entry->title; + $item['description'] = strip_tags($xml->entry->content); + $item['pubDate'] = $xml->channel->item[$i]->pubDate->__toString(); + $this->listNews []= $item; + } + } +} \ No newline at end of file diff --git a/Helper/NewsConfig.php b/Helper/NewsConfig.php new file mode 100644 index 0000000..026c232 --- /dev/null +++ b/Helper/NewsConfig.php @@ -0,0 +1,52 @@ + + * @copyright Copyright (c) 2023 JaJuMa GmbH . All rights reserved. + * @license http://opensource.org/licenses/mit-license.php MIT License + */ +namespace Jajuma\PotNews\Helper; +use Magento\Store\Model\ScopeInterface; +use Magento\Store\Model\StoreManagerInterface; +use Magento\Framework\App\Helper\AbstractHelper; + +/** + * Class NewsConfig + * @package Jajuma\PotNews\Helper + */ +class NewsConfig extends AbstractHelper +{ + public const NEWS_ENABLED = 'power_toys/news/is_enabled'; + public const NEWS_FEED = 'power_toys/news/feed'; + public const NEWS_LIMIT = 'power_toys/news/limit'; + + /** + * @param null $store + * @return bool + */ + public function isEnable($store = null) + { + return (int) $this->scopeConfig->getValue( + self::NEWS_ENABLED, + ScopeInterface::SCOPE_STORE, + $store + ); + } + + public function getAdditionalFeed($store = null) + { + return $this->scopeConfig->getValue( + self::NEWS_FEED, + ScopeInterface::SCOPE_STORE, + $store + ); + } + + public function getLimitNews($store = null) + { + return $this->scopeConfig->getValue( + self::NEWS_LIMIT, + ScopeInterface::SCOPE_STORE, + $store + ); + } +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..10892ac --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 JaJuMa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d40504d --- /dev/null +++ b/README.md @@ -0,0 +1,194 @@ +# :newspaper: News Power Toy for Magento 2 by [JaJuMa](https://www.jajuma.de/) + + + +News Power Toy for Magento 2 by [JaJuMa](https://www.jajuma.de/en) is a dashboard toy +showing news feeds in your Magento store. + +Compatible with + +
+ + + + + + + + + + + +
Hyvä ThemesMage-OSMagento
+
+ +## Features + +This Dashboard Toy shows: +* News feeds from configurable sources (RSS/Atom Feeds) +* Mage-OS & Hyvä News as default news feeds + +## Screenshots + + + + + + + + + + + +
News Toy
Dark Mode
News Toy
Light Mode
+ + +## Requirements + +
+ + + + + +
:bangbang: This module requires Power Toys for Magento 2
:bangbang: by JaJuMa
+
+ +* Magento Power Toys v1.0.0+ +* Magento v2.4.5+ OR + Mage-OS v1.0.0+ +* Magewire v1.10+ +* Magewire-requirejs v1.1+ + +## Further Info, Extension Description & Manual + +* [Extension Website EN](https://www.jajuma.de/en/jajuma-develop/extensions/power-toys-for-magento-2) +* [Extension Website DE](https://www.jajuma.de/de/jajuma-develop/extensions/power-toys-fuer-magento-2) + +## Demos + +* [Magento Power Toys Demo on Luma Theme](https://www.jajuma.de/en/jajuma-shop/demo-shop-with-magento-2) +* [Magento Power Toys Demo on Hyvä Theme](https://www.jajuma.de/en/jajuma-shop/demo-shop-with-magento-2-and-hyva-themes) +* [Magento Power Toys Demo on Mage-OS](https://www.jajuma.de/en/jajuma-shop/demo-shop-with-mage-os-and-hyva-themes) + +## Installation + +Install via composer as any other Magento extension from Github: +``` +composer require jajuma/pot-news +``` + +## Using News Power Toy For Magento + +After installing this module: +Go to +**JaJuMa -> Power Toys -> Configuration** +and enable & configure News Toy. + +After enabling, see the floating button at left/right edge of your screen +in your Backend & Frontend (while logged in as Admin). +When click on this button, the Power Toys Panel will open +displaying the News Toy. + +* [See Manual for more details](https://www.jajuma.de/media/wysiwyg/jajuma-develop/power-toys-magento/manuals/JaJuMa_News_Power_Toy_Manual_v001.pdf) + + +## License + +The code is licensed under the [MIT License (MIT)](https://github.com/JaJuMa/pot-news/blob/master/LICENSE) + +## :heart: Powered by + +Developing the Power Toys module and the toys was a lot easier and more fun thanks to [Magewire](https://github.com/magewirephp/magewire). +A big shout and Thank You to [Willem Poortman](https://github.com/wpoortman) for creating Magewire + +* :cop: User Experience:
[Shariff Social Share for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/shariff-social-share-buttons-extension-for-magento-2)
+ GDPR compliant and customizable Sharing Buttons + +* :movie_camera: Content Management:
[Video Widget for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/video-widget-gdpr-extension-for-magento-2)
+ Embedding YouTube videos, GDPR compliant with auto preview image & fully responsive + +* :rocket: Performance & UX:
[Page Preload for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/page-preload-extension-for-magento-2)
+ Faster page transitions and subsequent page-loads by preloading / prefetching + +* :chart_with_upwards_trend: Marketing:
[Matomo Analytics for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/honey-spam-anti-spam-extension-for-magento-2)
+ Web Analytics - GDPR Compliant + +* :honey_pot: Site Optimization:
[Honey Spam Anti-Spam for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/honey-spam-anti-spam-extension-for-magento-2)
+ Spam Protection - Reliable & GDPR Compliant + +* :bell: Marketing:
[Customer Registration Reminder & Cleanup for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/customer-registration-reminder-and-cleanup-extension-for-magento-2)
+ Increase Your Customer Engangement & Cleanup your Customer Account Data Automatically + +* :mega: UX & Marketing:
[Category Grid Callouts for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/category-grid-callouts-extension-for-magento-2)
+ Enrich Your Category Grids With Eye-Catching Callouts + +* :thought_balloon: UX & Marketing:
[Customer Satisfaction Feedback for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/category-grid-callouts-extension-for-magento-2)
+ Collect Valuable Feedback From Your Customers & Understand How To Satisfy Your Customers + +* :sparkler: UX:
[Auto Select Options for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/auto-select-options-extension-for-magento-2)
+ Automatically Select Configurable & Custom Options Based On Your Customer's Preferences + +* :left_right_arrow: UX & Performance:
[Back Forward Cache - bfcache for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/back-forward-cache-extension-for-magento-2)
+ Enable bfcache for Magento 2 for improved UX & Core Web Vitals + +* :heavy_division_sign: Accounting:
[Dynamic Shipping Tax Plus for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/proportional-pro-rata-dynamic-shipping-tax-plus-extension-for-magento-2)
+ Dynamic Shipping Tax Calculation incl. pro-rata/proportional tax rates + +* :mag: Search:
[MySQL Search for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/magento-without-elasticsearch-mysql-search-extension-for-magento-2)
+ MySQL Search for Magento 2 without Elasticsearch + +* :bangbang: Performance:
[Preload Critical Resources & Assets](https://www.jajuma.de/en/jajuma-develop/extensions/resource-hints-preload-critical-resources-assets-extension-for-magento-2)
+ Resource Hints for preloading important and critical resources + +* :octocat: Content Management:
[git 4 Page Builder](https://www.jajuma.de/en/jajuma-develop/extensions/git-4-page-builder-extension-for-magento-2)
+ Manage & deploy Magento 2 Page Builder content via git + +* :rocket: Performance:
[Hyvä Inline CSS](https://www.jajuma.de/en/jajuma-develop/extensions/hyva-inline-css-extension-for-magento-with-hyva-themes)
+ Run Magento 2 without CSS file by inline all CSS + +* :man_technologist: :free: Content Management:
[Syntax Highlighter 4 Page Builder](https://www.jajuma.de/en/jajuma-develop/extensions/syntax-highlighter-4-page-builder-extension-for-magento-2)
+ Syntax Highlighting and more for Magento 2 Page Builder + +* :triangular_flag_on_post: :free: UI & UX:
[Awesome Hyvä for Hyvä Themes](https://www.jajuma.de/en/jajuma-develop/extensions/font-awesome-icons-for-hyva-themes-extension)
+ Font Awesome 5 & 6 Icons for your [Hyvä Themes](https://www.jajuma.de/de/jajuma-shop/online-shop-mit-magento-2-und-hyva-themes) Store + +* :triangular_flag_on_post: :free: UI & UX:
[Hyvä Flags for Hyvä Themes](https://www.jajuma.de/en/jajuma-develop/extensions/country-language-flag-icons-for-hyva-themes-extension)
+ Country & Language Flag Icons for your [Hyvä Themes](https://www.jajuma.de/de/jajuma-shop/online-shop-mit-magento-2-und-hyva-themes) Store + +* :ok_man: :free: User Experience:
[Customer Navigation Manager for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/customer-navigation-manager-extension-for-magento-2)
+ Easily manage the links in your Customer Account + +* :heavy_division_sign: :free: Accounting:
[Dynamic Shipping Tax for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/dynamic-shipping-tax-extension-for-magento-2)
+ Dynamic Shipping Tax Calculation + +* :question: :free: Content:
[Hyvä FAQ Widget for Hyvä Themes](https://www.jajuma.de/en/jajuma-develop/extensions/dynamic-shipping-tax-extension-for-magento-2)
+ FAQ Widget for your [Hyvä Themes](https://www.jajuma.de/de/jajuma-shop/online-shop-mit-magento-2-und-hyva-themes) Store + +## Other [Services](https://www.jajuma.de/en/jajuma/company-magento-ecommerce-agency-stuttgart) by [JaJuMa](https://www.jajuma.de/) + +* :shopping: [JaJuMa-Market: Marketplace Software](https://www.jajuma.de/en/jajuma-market)
+ Complete Online Marketplace Software Solution. For Professional Demands. Feature Rich. Flexibly Customizable. + +* :shopping_cart: [JaJuMa-Shop](https://www.jajuma.de/en/jajuma-shop)
+ Customized Magento Shop Solutions. + +* :rocket: [JaJuMa-Shop: Hyvä Magento Shop Development](https://www.jajuma.de/de/jajuma-shop/online-shop-mit-magento-2-und-hyva-themes)
+ Hyvä Magento Shop Development. + +* :orange_book: [JaJuMa-Shop: Magento Handbuch in Deutsch](https://www.jajuma.de/de/jajuma-shop/magento-2-handbuch/)
+ Magento Handbuch in Deutsch. + +* :card_index_dividers: [JaJuMa-PIM](https://www.jajuma.de/en/jajuma-pim)
+ Product Information Management. Simple. Better. + +* :heavy_plus_sign: [JaJuMa-Develop: Magento 2 Extensions](https://www.jajuma.de/en/jajuma-develop/magento-extensions)
+ Individual Solutions For Your Business Case. + +* :paintbrush: [JaJuMa-Design](https://www.jajuma.de/en/jajuma-design)
+ Designs That Inspire. + +* :necktie: [JaJuMa-Consult](https://www.jajuma.de/en/jajuma-consult)
+ We Show You New Perspectives. + +© JaJuMa GmbH | [www.jajuma.de](www.jajuma.de) \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..da15ba0 --- /dev/null +++ b/composer.json @@ -0,0 +1,27 @@ +{ + "name": "jajuma/pot-news", + "description": "News Power Toy for Magento 2 by JaJuMa", + "type": "magento2-module", + "license": "MIT", + "version": "1.0.0", + "authors": [ + { + "email": "info@jajuma.de", + "name": "JaJuMa" + } + ], + "minimum-stability": "dev", + "require": { + "magewirephp/magewire": "^1.10", + "magewirephp/magewire-requirejs": "^1.1", + "jajuma/power-toys": "^1.0" + }, + "autoload": { + "psr-4": { + "Jajuma\\PotNews\\": "" + }, + "files": [ + "registration.php" + ] + } +} diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml new file mode 100644 index 0000000..939103c --- /dev/null +++ b/etc/adminhtml/system.xml @@ -0,0 +1,48 @@ + + + + + + + +
+ + jajuma + Jajuma_PotNews::config_jajuma_powertoy + + + + + Magento\Config\Model\Config\Source\Yesno + + + + + 1 + + + https://mage-os.org/feed/, https://www.hyva.io/blog/feed/index/type/latest_posts/store_id/1/, https://www.jajuma.de/en/blog/rss/feed + ]]> + + + + + + 1 + + + + + +
+
+
\ No newline at end of file diff --git a/etc/config.xml b/etc/config.xml new file mode 100644 index 0000000..2791bfc --- /dev/null +++ b/etc/config.xml @@ -0,0 +1,11 @@ + + + + + + 1 + + + + \ No newline at end of file diff --git a/etc/jajuma_powertoys.xml b/etc/jajuma_powertoys.xml new file mode 100644 index 0000000..527b6ab --- /dev/null +++ b/etc/jajuma_powertoys.xml @@ -0,0 +1,24 @@ + + + + + + + + + true + Jajuma_PotNews::custom_widget/news.phtml + true + 30 + 40 + + + + diff --git a/etc/module.xml b/etc/module.xml new file mode 100644 index 0000000..ab1bb97 --- /dev/null +++ b/etc/module.xml @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/registration.php b/registration.php new file mode 100644 index 0000000..54b9186 --- /dev/null +++ b/registration.php @@ -0,0 +1,10 @@ + + * @copyright Copyright (c) 2023 JaJuMa GmbH . All rights reserved. + * @license http://opensource.org/licenses/mit-license.php MIT License + */ + +use Magento\Framework\Component\ComponentRegistrar; + +ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Jajuma_PotNews', __DIR__); diff --git a/view/base/templates/custom_widget/news.phtml b/view/base/templates/custom_widget/news.phtml new file mode 100644 index 0000000..56e3474 --- /dev/null +++ b/view/base/templates/custom_widget/news.phtml @@ -0,0 +1,97 @@ + + * @copyright Copyright (c) 2023 JaJuMa GmbH . All rights reserved. + * @license http://opensource.org/licenses/mit-license.php MIT License + */ +use Jajuma\PotNews\Block\PowerToys\News; +use Magento\Framework\Escaper; +/** @var News $block */ +/** @var Escaper $escaper */ +$listNews = $block->getNews(); +?> + +
+ 0): ?> + +
+ +
+ +
stripTags(preg_replace('/ diff --git a/view/base/web/images/newsbg.jpg b/view/base/web/images/newsbg.jpg new file mode 100644 index 0000000..d01e772 Binary files /dev/null and b/view/base/web/images/newsbg.jpg differ