From 3dd31902b63a7c2953187b4bcf6927759001552c Mon Sep 17 00:00:00 2001 From: Oli J Date: Mon, 27 Nov 2023 14:59:29 +0700 Subject: [PATCH] Initial commit --- Block/QuickAction.php | 40 +++++ Helper/Config.php | 57 +++++++ LICENSE | 21 +++ Magewire/QuickAction.php | 104 ++++++++++++ README.md | 225 +++++++++++++++++++++++++ composer.json | 27 +++ etc/adminhtml/system.xml | 35 ++++ etc/config.xml | 12 ++ etc/jajuma_powertoys.xml | 14 ++ etc/module.xml | 8 + registration.php | 14 ++ view/base/templates/quick_action.phtml | 112 ++++++++++++ 12 files changed, 669 insertions(+) create mode 100644 Block/QuickAction.php create mode 100755 Helper/Config.php create mode 100644 LICENSE create mode 100644 Magewire/QuickAction.php create mode 100644 README.md create mode 100644 composer.json create mode 100644 etc/adminhtml/system.xml create mode 100644 etc/config.xml create mode 100644 etc/jajuma_powertoys.xml create mode 100644 etc/module.xml create mode 100644 registration.php create mode 100644 view/base/templates/quick_action.phtml diff --git a/Block/QuickAction.php b/Block/QuickAction.php new file mode 100644 index 0000000..f5c4a50 --- /dev/null +++ b/Block/QuickAction.php @@ -0,0 +1,40 @@ +helperConfig = $helperConfig; + } + + /** + * Is enable + * + * @return bool + */ + public function isEnable(): bool + { + return $this->helperConfig->isEnable(); + } +} diff --git a/Helper/Config.php b/Helper/Config.php new file mode 100755 index 0000000..0cd11dd --- /dev/null +++ b/Helper/Config.php @@ -0,0 +1,57 @@ +scopeConfig->isSetFlag(self::XML_PATH_ENABLE); + } + + /** + * Get api key + * + * @return mixed + */ + public function getApiKey() + { + return $this->scopeConfig->getValue(self::XML_PATH_API_KEY); + } + + /** + * Get base url + * + * @return mixed + */ + public function getBaseUrl() + { + return $this->scopeConfig->getValue(self::XML_PATH_BASE_URL); + } + + /** + * Get model + * + * @return mixed + */ + public function getModel() + { + return $this->scopeConfig->getValue(self::XML_PATH_MODEL); + } +} 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/Magewire/QuickAction.php b/Magewire/QuickAction.php new file mode 100644 index 0000000..a3f5e01 --- /dev/null +++ b/Magewire/QuickAction.php @@ -0,0 +1,104 @@ +helperConfig = $helperConfig; + $this->jsonSerialize = $jsonSerialize; + } + + /** + * Request api + * + * @return void + */ + public function requestApi($request) + { + $requestMessage = ''; + if (is_array($request)) { + if (!empty($request['request_message'])) { + $requestMessage = $request['request_message']; + } + } else { + $requestMessage = $request; + } + + if (empty($requestMessage)) { + $message = 'Chat GPT returned an error or timed out. Please try again later!'; + $this->dispatchBrowserEvent('finish-request-chat-gpt-api', ['message' => nl2br($message)]); + return; + } + + $apiKey = $this->helperConfig->getApiKey(); + $baseUrl = $this->helperConfig->getBaseUrl(); + $model = $this->helperConfig->getModel(); + + $data = [ + 'model' => $model, + 'messages' => [ + [ + 'role' => 'user', + 'content' => $requestMessage + ] + ], + 'temperature' => 0 + ]; + + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $baseUrl); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, $this->jsonSerialize->serialize($data)); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Authorization: Bearer ' . $apiKey + )); + + $response = curl_exec($curl); + curl_close($curl); + + if (!$response) { + $message = 'Chat GPT returned an error or timed out. Please try again later!'; + $this->dispatchBrowserEvent('finish-request-chat-gpt-api', ['message' => nl2br($message)]); + return; + } + + $result = json_decode($response, true); + if (!empty($result['error'])) { + $message = $result['error']['message']; + $this->dispatchBrowserEvent('finish-request-chat-gpt-api', ['message' => $message]); + return; + } + + $message = $result['choices'][0]['message']['content']; + $this->dispatchBrowserEvent('finish-request-chat-gpt-api', ['message' => nl2br($message)]); + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..7a46fbd --- /dev/null +++ b/README.md @@ -0,0 +1,225 @@ +# :speech_balloon: Chat GPT Power Toy for Magento 2 by [JaJuMa](https://www.jajuma.de/) + + + +ChatGPT Power Toy for Magento 2 by [JaJuMa](https://www.jajuma.de/en) is a quick action toy +that allows using ChatGPT from Magento backend. + +Compatible with + +
+ + + + + + + + + + + +
Hyvä ThemesMage-OSMagento
+
+ +## Features + +This Quick Action Power Toy provides: +* ChatGPT chats from Magento backend + +## Screenshots + + + + + + + + + + + + + + + + + + + +
ChatGPT Toy
Dark Mode
ChatGPT Toy
Light Mode
Chat Popup
Dark Mode
Chat Popup
Light Mode
+ + +## Requirements + +
+ + + + + +
:bangbang: This module requires Power Toys for Magento 2
:bangbang: by JaJuMa
+
+ +* ChatGPT API Key +* 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-chat-gpt +``` + +## Using ChatGPT Power Toy For Magento + +After installing this module: +Go to +**JaJuMa -> Power Toys -> Configuration** +and enable & configure ChatGPT Toy. + +To get a Chat GPT API Key, please register for OpenAI here: +https://platform.openai.com/ +and create your API Key here: +https://platform.openai.com/api-keys + +Please find valid API endpoints here: +https://platform.openai.com/docs/guides/text-generation + +Please find available models here: +https://platform.openai.com/docs/models/overview + +After configure and enabling, see the floating button at left/right edge of your screen +in your Backend and Frontend (while logged in as Admin). +When click on this button, the Power Toys Panel will open +displaying the ChatGPT Toy. +A click on ChatGPT Toy will open the ChatGPT chat popup - Happy Chatting! + +* [See Manual for more details](https://www.jajuma.de/media/wysiwyg/jajuma-develop/power-toys-magento/manuals/JaJuMa_Chat_GPT_Power_Toy_Manual_v001.pdf) + + +## License + +The code is licensed under the [MIT License (MIT)](https://github.com/JaJuMa/pot-chat-gpt/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 + +## Other [Magento 2 Extensions](ttps://www.jajuma.de/en/jajuma-develop/magento-extensions) by [JaJuMa](https://www.jajuma.de/) + +* :framed_picture: Performance & UX:
[Ultimate Image Optimizer for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/ultimate-image-optimizer-extension-for-magento-2)
+ AVIF & WebP Images, Lazy Loading, High-Resolution / Retina images + +* :framed_picture: Performance & UX:
[WebP Optimized Images for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/webp-optimized-images-extension-for-magento-2#portfolio-content)
+ The #1 WebP Images Solution for Magento 2 + +* :see_no_evil: SEO:
[PRG Pattern Link Masking for Magento 2](https://www.jajuma.de/en/jajuma-develop/extensions/prg-pattern-link-masking-for-magento-2)
+ Link Masking for Layered Navigation + +* :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..ba2b13a --- /dev/null +++ b/composer.json @@ -0,0 +1,27 @@ +{ + "name": "jajuma/pot-chat-gpt", + "description": "Chat GPT 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\\PotChatGpt\\": "" + }, + "files": [ + "registration.php" + ] + } +} diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml new file mode 100644 index 0000000..31c392e --- /dev/null +++ b/etc/adminhtml/system.xml @@ -0,0 +1,35 @@ + + + +
+ + + + + Magento\Config\Model\Config\Source\Yesno + + + + + + https://platform.openai.com/
+ and create your API Key here:
+ https://platform.openai.com/api-keys]]> +
+
+ + + + https://platform.openai.com/docs/guides/text-generation]]> + + + + + + https://platform.openai.com/docs/models/overview]]> + + +
+
+
+
diff --git a/etc/config.xml b/etc/config.xml new file mode 100644 index 0000000..664e488 --- /dev/null +++ b/etc/config.xml @@ -0,0 +1,12 @@ + + + + + + 1 + https://api.openai.com/v1/chat/completions + gpt-3.5-turbo + + + + diff --git a/etc/jajuma_powertoys.xml b/etc/jajuma_powertoys.xml new file mode 100644 index 0000000..f0fcf86 --- /dev/null +++ b/etc/jajuma_powertoys.xml @@ -0,0 +1,14 @@ + + + + + + true + Jajuma_PotChatGpt::quick_action.phtml + Jajuma_PowerToys::svg/heroicons/outline/chat.svg + Jajuma\PotChatGpt\Magewire\QuickAction + false + 30 + + + diff --git a/etc/module.xml b/etc/module.xml new file mode 100644 index 0000000..b49a94b --- /dev/null +++ b/etc/module.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/registration.php b/registration.php new file mode 100644 index 0000000..a2dbf45 --- /dev/null +++ b/registration.php @@ -0,0 +1,14 @@ + + * @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_PotChatGpt', + __DIR__ +); diff --git a/view/base/templates/quick_action.phtml b/view/base/templates/quick_action.phtml new file mode 100644 index 0000000..abc79c0 --- /dev/null +++ b/view/base/templates/quick_action.phtml @@ -0,0 +1,112 @@ +getMagewire(); +?> + +