From 8151cf862850e08cf5bc6d6b8699eb4edf184c71 Mon Sep 17 00:00:00 2001 From: girishpanchal30 Date: Thu, 29 Aug 2024 11:40:30 +0530 Subject: [PATCH] Add modify links action --- css/settings.css | 9 ++- includes/admin/feedzy-rss-feeds-actions.php | 44 ++++++++++++ js/ActionPopup/SortableItem.js | 80 ++++++++++++++++++++- js/ActionPopup/action-popup.js | 42 ++++++----- 4 files changed, 154 insertions(+), 21 deletions(-) diff --git a/css/settings.css b/css/settings.css index 6c90d49c..d52896b6 100644 --- a/css/settings.css +++ b/css/settings.css @@ -1719,6 +1719,7 @@ span.error-message .components-external-link .components-visually-hidden{ margin-left: auto; padding: 0; height: auto; + box-shadow: none !important; } .fz-action-btn button { display: flex; @@ -1765,7 +1766,7 @@ span.error-message .components-external-link .components-visually-hidden{ position: relative; } .popover-action-list{ - width: 250px; + width: 270px; position: absolute; left: 100%; bottom: 0; @@ -2020,7 +2021,8 @@ li.draggable-item .components-panel__body-toggle.components-button{ .fz-action-panel .fz-chat-cpt-action .components-notice { width: 100%; } -.fz-action-panel .fz-chat-cpt-action .components-panel__row { +.fz-action-panel .fz-chat-cpt-action .components-panel__row, +.fz-action-panel .fz-modify-links .components-panel__row { display: block; } .fz-action-panel .fz-upgrade-notice { @@ -2090,7 +2092,8 @@ li.draggable-item .components-panel__body-toggle.components-button{ cursor: not-allowed !important; } -.fz-action-panel .fz-chat-cpt-action .fz-notice-wrap { +.fz-action-panel .fz-chat-cpt-action .fz-notice-wrap, +.fz-action-panel .fz-modify-links .fz-notice-wrap { padding: 0; } diff --git a/includes/admin/feedzy-rss-feeds-actions.php b/includes/admin/feedzy-rss-feeds-actions.php index a6e8401e..de7950a4 100644 --- a/includes/admin/feedzy-rss-feeds-actions.php +++ b/includes/admin/feedzy-rss-feeds-actions.php @@ -313,6 +313,8 @@ public function action_process() { return $this->summarize_content(); case 'fz_image': return $this->generate_image(); + case 'modify_links': + return $this->modify_links(); default: return $this->default_content(); } @@ -505,5 +507,47 @@ private function generate_image() { $openai = new \Feedzy_Rss_Feeds_Pro_Openai(); return $openai->call_api( $this->settings, $prompt, 'image', array() ); } + + /** + * Modify links. + * + * @return string Item content. + */ + private function modify_links() { + $content = call_user_func( array( $this, $this->current_job->tag ) ); + // Returns item content because it has no HTML tags + if ( $content === wp_strip_all_tags( $content ) ) { + return $content; + } + // Pro version is required to perform this action. + if ( ! feedzy_is_pro() ) { + return $content; + } + + $dom = new DOMDocument(); + libxml_use_internal_errors( true ); + $dom->loadHTML( $content ); + $xpath = new DOMXPath( $dom ); + libxml_clear_errors(); + // Get all anchors tags. + $nodes = $xpath->query( '//a' ); + + if ( ! empty( $this->current_job->data->remove_links ) ) { + foreach ( $nodes as $node ) { + if ( ! empty( $this->current_job->data->remove_links ) ) { + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $node->parentNode->removeChild( $node ); + continue; + } + if ( ! empty( $this->current_job->data->target ) ) { + $node->setAttribute( 'target', $this->current_job->data->target ); + } + if ( ! empty( $this->current_job->data->follow ) && 'yes' === $this->current_job->data->follow ) { + $node->setAttribute( 'rel', 'nofollow' ); + } + } + } + return $dom->saveHTML(); + } } } diff --git a/js/ActionPopup/SortableItem.js b/js/ActionPopup/SortableItem.js index 511b6860..ff65010e 100644 --- a/js/ActionPopup/SortableItem.js +++ b/js/ActionPopup/SortableItem.js @@ -25,7 +25,8 @@ import { Popover, ItemGroup, Item, - ToggleControl + ToggleControl, + SelectControl } from '@wordpress/components'; const DragHandle = sortableHandle(() => ); @@ -297,6 +298,83 @@ const SortableItem = ({ propRef, loopIndex, item }) => { ); } + + if ( 'modify_links' === item.id ) { + return( +
  • +
    + + + + + propRef.onChangeHandler( { 'index': loopIndex, 'remove_links': currentValue ?? '' } ) } + disabled={!feedzyData.isPro} + /> + + { true !== item.data.remove_links && + + propRef.onChangeHandler( { 'index': loopIndex, 'target': currentValue ?? '' } ) } + disabled={!feedzyData.isPro} + /> + + } + { true !== item.data.remove_links && + + propRef.onChangeHandler( { 'index': loopIndex, 'follow': currentValue ?? '' } ) } + options={[ + { + label: __('Default', 'feedzy-rss-feeds'), + value: '', + }, + { + label: __('No', 'feedzy-rss-feeds'), + value: 'no', + }, + { + label: __('Yes', 'feedzy-rss-feeds'), + value: 'yes', + }, + ]} + disabled={!feedzyData.isPro} + /> + + } + + +
    +
    + +
    +
  • + ); + } } export default SortableElement(SortableItem); diff --git a/js/ActionPopup/action-popup.js b/js/ActionPopup/action-popup.js index 77817d28..d96aef4a 100644 --- a/js/ActionPopup/action-popup.js +++ b/js/ActionPopup/action-popup.js @@ -31,7 +31,6 @@ import { const ActionModal = () => { // useRef const userRef = useRef(null); - const feedzyImportRef = useRef(null); // State const [ isOpen, setOpen ] = useState(false); const [ isHideMsg, setHideMeg ] = useState(false); @@ -288,62 +287,71 @@ const ActionModal = () => { { 'item_image' === shortCode ? ([ feedzyData.isPro && ( feedzyData.isBusinessPlan || feedzyData.isAgencyPlan ) ? ( -
  • addAction('fz_image') }>{__( 'Generate with ChatGPT', 'feedzy-rss-feeds' )}
  • +
  • addAction('fz_image') }>{__( 'Generate with ChatGPT', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('fz_image') }>{__( 'Generate with ChatGPT', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('fz_image') }>{__( 'Generate with ChatGPT', 'feedzy-rss-feeds' )} PRO
  • )] ) : ([ -
  • addAction('trim') }>{__( 'Trim Content', 'feedzy-rss-feeds' )}
  • , +
  • addAction('trim') }>{__( 'Trim Content', 'feedzy-rss-feeds' )}
  • , ( feedzyData.isPro && feedzyData.isAgencyPlan ? ( -
  • addAction('fz_translate') }>{__( 'Translate with Feedzy', 'feedzy-rss-feeds' )}
  • +
  • addAction('fz_translate') }>{__( 'Translate with Feedzy', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('fz_translate') }>{__( 'Translate with Feedzy', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('fz_translate') }>{__( 'Translate with Feedzy', 'feedzy-rss-feeds' )} PRO
  • + ) + ), +
  • addAction('search_replace') }>{__( 'Search / Replace', 'feedzy-rss-feeds' )}
  • , + ( + 'item_categories' !== shortCode && ( + feedzyData.isPro ? ( +
  • addAction('modify_links') }>{__( 'Modify Links', 'feedzy-rss-feeds' )}
  • + ) : ( +
  • addAction('modify_links') }>{__( 'Modify Links', 'feedzy-rss-feeds' )} PRO
  • + ) ) ), -
  • addAction('search_replace') }>{__( 'Search / Replace', 'feedzy-rss-feeds' )}
  • , ( 'item_categories' !== shortCode && ( feedzyData.isPro && ( feedzyData.isBusinessPlan || feedzyData.isAgencyPlan ) ? ( -
  • addAction('fz_paraphrase') }>{__( 'Paraphrase with Feedzy', 'feedzy-rss-feeds' )}
  • +
  • addAction('fz_paraphrase') }>{__( 'Paraphrase with Feedzy', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('fz_paraphrase') }>{__( 'Paraphrase with Feedzy', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('fz_paraphrase') }>{__( 'Paraphrase with Feedzy', 'feedzy-rss-feeds' )} PRO
  • ) ) ), ( 'item_categories' !== shortCode && ( feedzyData.isPro && feedzyData.isAgencyPlan ? ( -
  • addAction('spinnerchief') }>{__( 'Spin using SpinnerChief', 'feedzy-rss-feeds' )}
  • +
  • addAction('spinnerchief') }>{__( 'Spin using SpinnerChief', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('spinnerchief') }>{__( 'Spin using SpinnerChief', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('spinnerchief') }>{__( 'Spin using SpinnerChief', 'feedzy-rss-feeds' )} PRO
  • ) ) ), ( 'item_categories' !== shortCode && ( feedzyData.isPro && feedzyData.isAgencyPlan ? ( -
  • addAction('wordAI') }>{__( 'Spin using WordAI', 'feedzy-rss-feeds' )}
  • +
  • addAction('wordAI') }>{__( 'Spin using WordAI', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('wordAI') }>{__( 'Spin using WordAI', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('wordAI') }>{__( 'Spin using WordAI', 'feedzy-rss-feeds' )} PRO
  • ) ) ), ( 'item_categories' !== shortCode && ( feedzyData.isPro && ( feedzyData.isBusinessPlan || feedzyData.isAgencyPlan ) ? ( -
  • addAction('chat_gpt_rewrite') }>{__( 'Paraphrase with ChatGPT', 'feedzy-rss-feeds' )}
  • +
  • addAction('chat_gpt_rewrite') }>{__( 'Paraphrase with ChatGPT', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('chat_gpt_rewrite') }>{__( 'Paraphrase with ChatGPT', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('chat_gpt_rewrite') }>{__( 'Paraphrase with ChatGPT', 'feedzy-rss-feeds' )} PRO
  • ) ) ), ( 'item_categories' !== shortCode && ( feedzyData.isPro && ( feedzyData.isBusinessPlan || feedzyData.isAgencyPlan ) ? ( -
  • addAction('fz_summarize') }>{__( 'Summarize with ChatGPT', 'feedzy-rss-feeds' )}
  • +
  • addAction('fz_summarize') }>{__( 'Summarize with ChatGPT', 'feedzy-rss-feeds' )}
  • ) : ( -
  • addAction('fz_summarize') }>{__( 'Summarize with ChatGPT', 'feedzy-rss-feeds' )} PRO
  • +
  • addAction('fz_summarize') }>{__( 'Summarize with ChatGPT', 'feedzy-rss-feeds' )} PRO
  • ) ) )