Changeset 3262683
- Timestamp:
- 03/27/2025 09:40:02 AM (12 months ago)
- Location:
- writetext-ai
- Files:
-
- 225 added
- 13 edited
-
tags/2.0.4 (added)
-
tags/2.0.4/CHANGELOG.md (added)
-
tags/2.0.4/assets (added)
-
tags/2.0.4/assets/css (added)
-
tags/2.0.4/assets/css/admin-category.css (added)
-
tags/2.0.4/assets/css/admin-common.css (added)
-
tags/2.0.4/assets/css/admin-installation.css (added)
-
tags/2.0.4/assets/css/admin-installed.css (added)
-
tags/2.0.4/assets/css/admin.css (added)
-
tags/2.0.4/assets/css/tooltipster.bundle.min.css (added)
-
tags/2.0.4/assets/images (added)
-
tags/2.0.4/assets/images/active_check.png (added)
-
tags/2.0.4/assets/images/active_check_black.svg (added)
-
tags/2.0.4/assets/images/arrow-dotted-up-blue.png (added)
-
tags/2.0.4/assets/images/arrow-dotted-up-gray.png (added)
-
tags/2.0.4/assets/images/btn-closePopup.svg (added)
-
tags/2.0.4/assets/images/bulk-check-ico.png (added)
-
tags/2.0.4/assets/images/button_next.png (added)
-
tags/2.0.4/assets/images/calendar-icon.png (added)
-
tags/2.0.4/assets/images/calendar.png (added)
-
tags/2.0.4/assets/images/check_setup.png (added)
-
tags/2.0.4/assets/images/close-icon-black.svg (added)
-
tags/2.0.4/assets/images/close-icon-blue.svg (added)
-
tags/2.0.4/assets/images/close-icon.svg (added)
-
tags/2.0.4/assets/images/close-key-word.png (added)
-
tags/2.0.4/assets/images/eva_diagonal-arrow-right-up-outline.svg (added)
-
tags/2.0.4/assets/images/ic-arrow-head-blue.png (added)
-
tags/2.0.4/assets/images/ic-arrow-head-gray.png (added)
-
tags/2.0.4/assets/images/ic-button-arrow-down.png (added)
-
tags/2.0.4/assets/images/ic-check-white.png (added)
-
tags/2.0.4/assets/images/ic-check.png (added)
-
tags/2.0.4/assets/images/ic-close-grayish.png (added)
-
tags/2.0.4/assets/images/ic-close.png (added)
-
tags/2.0.4/assets/images/ic-dotted-line-blue.png (added)
-
tags/2.0.4/assets/images/ic-dotted-line-gray.png (added)
-
tags/2.0.4/assets/images/ic-down-arrow-red.png (added)
-
tags/2.0.4/assets/images/ic-down-arrow-white.svg (added)
-
tags/2.0.4/assets/images/ic-down-arrow.svg (added)
-
tags/2.0.4/assets/images/ic-failed-notice.png (added)
-
tags/2.0.4/assets/images/ic-filter-triangle-white.png (added)
-
tags/2.0.4/assets/images/ic-filter-triangle.png (added)
-
tags/2.0.4/assets/images/ic-lock-locked.png (added)
-
tags/2.0.4/assets/images/ic-lock-unlocked.png (added)
-
tags/2.0.4/assets/images/ic-pencil-white.png (added)
-
tags/2.0.4/assets/images/ic-pencil.png (added)
-
tags/2.0.4/assets/images/ic-restore.png (added)
-
tags/2.0.4/assets/images/ic-straight-line-blue.png (added)
-
tags/2.0.4/assets/images/ic-trash-white.png (added)
-
tags/2.0.4/assets/images/ic-trash.png (added)
-
tags/2.0.4/assets/images/ic-up-arrow-green.png (added)
-
tags/2.0.4/assets/images/ic-wt-platform-menu-active.svg (added)
-
tags/2.0.4/assets/images/ic-wt-platform-menu.svg (added)
-
tags/2.0.4/assets/images/ic_add.svg (added)
-
tags/2.0.4/assets/images/ic_arrow_down_pop.svg (added)
-
tags/2.0.4/assets/images/ic_arrow_tl_default.svg (added)
-
tags/2.0.4/assets/images/ic_arrow_tl_hover.svg (added)
-
tags/2.0.4/assets/images/ic_baseline-plus.png (added)
-
tags/2.0.4/assets/images/ic_caret_down.png (added)
-
tags/2.0.4/assets/images/ic_check_blue.svg (added)
-
tags/2.0.4/assets/images/ic_check_purple.png (added)
-
tags/2.0.4/assets/images/ic_chev_down.png (added)
-
tags/2.0.4/assets/images/ic_circle_check_blue.svg (added)
-
tags/2.0.4/assets/images/ic_country.svg (added)
-
tags/2.0.4/assets/images/ic_country_selected.svg (added)
-
tags/2.0.4/assets/images/ic_dropdown.svg (added)
-
tags/2.0.4/assets/images/ic_dropdown_blue.svg (added)
-
tags/2.0.4/assets/images/ic_fact_check.svg (added)
-
tags/2.0.4/assets/images/ic_kw-arrow.png (added)
-
tags/2.0.4/assets/images/ic_outline-close.png (added)
-
tags/2.0.4/assets/images/ic_outline-close.svg (added)
-
tags/2.0.4/assets/images/ic_outline-filter-list.svg (added)
-
tags/2.0.4/assets/images/ic_popup_ongoing.svg (added)
-
tags/2.0.4/assets/images/ic_premium.svg (added)
-
tags/2.0.4/assets/images/ic_premium_blue.svg (added)
-
tags/2.0.4/assets/images/ic_rewrite.svg (added)
-
tags/2.0.4/assets/images/ic_round-close.svg (added)
-
tags/2.0.4/assets/images/ic_substract.svg (added)
-
tags/2.0.4/assets/images/ic_thumb.png (added)
-
tags/2.0.4/assets/images/ic_thumbs_down.svg (added)
-
tags/2.0.4/assets/images/ic_thumbs_down_fill.svg (added)
-
tags/2.0.4/assets/images/ic_thumbs_up.svg (added)
-
tags/2.0.4/assets/images/ic_thumbs_up_fill.svg (added)
-
tags/2.0.4/assets/images/ic_transfer.svg (added)
-
tags/2.0.4/assets/images/ic_writetext_menu_wp.svg (added)
-
tags/2.0.4/assets/images/ic_writetext_platform_menu.svg (added)
-
tags/2.0.4/assets/images/icon-park-solid_check-one.svg (added)
-
tags/2.0.4/assets/images/iconamoon_trash.png (added)
-
tags/2.0.4/assets/images/iconamoon_trash_blur.png (added)
-
tags/2.0.4/assets/images/loader.gif (added)
-
tags/2.0.4/assets/images/loader_cursor.gif (added)
-
tags/2.0.4/assets/images/loader_writetext.gif (added)
-
tags/2.0.4/assets/images/logo_writetext.svg (added)
-
tags/2.0.4/assets/images/lucide_wand.svg (added)
-
tags/2.0.4/assets/images/material-symbols_history.svg (added)
-
tags/2.0.4/assets/images/mdi_external-link.svg (added)
-
tags/2.0.4/assets/images/ph_list-magnifying-glass-bold.svg (added)
-
tags/2.0.4/assets/images/ph_star-fill.svg (added)
-
tags/2.0.4/assets/images/ranked-serp-icon.png (added)
-
tags/2.0.4/assets/images/refresh.svg (added)
-
tags/2.0.4/assets/images/serp-link-ico.png (added)
-
tags/2.0.4/assets/images/solid_ranking-star.svg (added)
-
tags/2.0.4/assets/images/sort-ico-1.png (added)
-
tags/2.0.4/assets/images/sort-ico-2.png (added)
-
tags/2.0.4/assets/images/sort-ico-active.png (added)
-
tags/2.0.4/assets/images/spinner-1s-20px-bgwhite.gif (added)
-
tags/2.0.4/assets/images/spinner-1s-20px.gif (added)
-
tags/2.0.4/assets/images/toggle-arrow.png (added)
-
tags/2.0.4/assets/images/tooltip-arrow.svg (added)
-
tags/2.0.4/assets/images/tooltip-icon.png (added)
-
tags/2.0.4/assets/images/v2-banner.png (added)
-
tags/2.0.4/assets/images/warning-icon.png (added)
-
tags/2.0.4/assets/images/warning-icon.svg (added)
-
tags/2.0.4/assets/images/woocommerce-placeholder-150x150.png (added)
-
tags/2.0.4/assets/images/writetext_logo.png (added)
-
tags/2.0.4/assets/images/xbutton.svg (added)
-
tags/2.0.4/assets/js (added)
-
tags/2.0.4/assets/js/admin-category.js (added)
-
tags/2.0.4/assets/js/admin-common-functions.js (added)
-
tags/2.0.4/assets/js/admin-common.js (added)
-
tags/2.0.4/assets/js/admin-feedback.js (added)
-
tags/2.0.4/assets/js/admin-filter.js (added)
-
tags/2.0.4/assets/js/admin-installation.js (added)
-
tags/2.0.4/assets/js/admin-installed.js (added)
-
tags/2.0.4/assets/js/admin-keywords.js (added)
-
tags/2.0.4/assets/js/admin-setting.js (added)
-
tags/2.0.4/assets/js/admin-streaming.js (added)
-
tags/2.0.4/assets/js/signalr.min.js (added)
-
tags/2.0.4/assets/js/tooltipster.bundle.min.js (added)
-
tags/2.0.4/assets/lib (added)
-
tags/2.0.4/assets/lib/images (added)
-
tags/2.0.4/assets/lib/images/ui-bg_flat_0_888888_40x100.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_flat_0_aaaaaa_40x100.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_flat_75_ffffff_40x100.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_glass_25_e1f0f5_1x400.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_glass_55_444444_1x400.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_glass_55_fbf9ee_1x400.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_glass_65_ffffff_1x400.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_glass_75_dadada_1x400.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_glass_75_e6e6e6_1x400.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png (added)
-
tags/2.0.4/assets/lib/images/ui-bg_inset-soft_95_fef1ec_1x100.png (added)
-
tags/2.0.4/assets/lib/images/ui-icons_222222_256x240.png (added)
-
tags/2.0.4/assets/lib/images/ui-icons_309bbf_256x240.png (added)
-
tags/2.0.4/assets/lib/images/ui-icons_454545_256x240.png (added)
-
tags/2.0.4/assets/lib/images/ui-icons_bf3030_256x240.png (added)
-
tags/2.0.4/assets/lib/images/ui-icons_ffffff_256x240.png (added)
-
tags/2.0.4/assets/lib/jquery-ui.css (added)
-
tags/2.0.4/assets/lib/selectize.bootstrap3.min.css (added)
-
tags/2.0.4/assets/lib/selectize.default.css (added)
-
tags/2.0.4/assets/lib/selectize.min.js (added)
-
tags/2.0.4/gnu.org_licenses_gpl-3.0.txt (added)
-
tags/2.0.4/includes (added)
-
tags/2.0.4/includes/class-wtai-api-services.php (added)
-
tags/2.0.4/includes/class-wtai-cron.php (added)
-
tags/2.0.4/includes/class-wtai-global-settings.php (added)
-
tags/2.0.4/includes/class-wtai-init.php (added)
-
tags/2.0.4/includes/class-wtai-installation.php (added)
-
tags/2.0.4/includes/class-wtai-product-category-list-table.php (added)
-
tags/2.0.4/includes/class-wtai-product-category.php (added)
-
tags/2.0.4/includes/class-wtai-product-dashboard.php (added)
-
tags/2.0.4/includes/class-wtai-product-keyword.php (added)
-
tags/2.0.4/includes/class-wtai-product-list-table.php (added)
-
tags/2.0.4/includes/class-wtai-product-single.php (added)
-
tags/2.0.4/includes/functions.php (added)
-
tags/2.0.4/languages (added)
-
tags/2.0.4/languages/writetext-ai.pot (added)
-
tags/2.0.4/readme.txt (added)
-
tags/2.0.4/templates (added)
-
tags/2.0.4/templates/admin (added)
-
tags/2.0.4/templates/admin/bulk-generate-modal.php (added)
-
tags/2.0.4/templates/admin/bulk-keyword-analysis-modal.php (added)
-
tags/2.0.4/templates/admin/category.php (added)
-
tags/2.0.4/templates/admin/dashboard-category.php (added)
-
tags/2.0.4/templates/admin/dashboard.php (added)
-
tags/2.0.4/templates/admin/footer-mobile.php (added)
-
tags/2.0.4/templates/admin/footer.php (added)
-
tags/2.0.4/templates/admin/freemium-badge.php (added)
-
tags/2.0.4/templates/admin/freemium-popup.php (added)
-
tags/2.0.4/templates/admin/generate-feedback.php (added)
-
tags/2.0.4/templates/admin/grid-filter.php (added)
-
tags/2.0.4/templates/admin/install.php (added)
-
tags/2.0.4/templates/admin/intent-tooltip.php (added)
-
tags/2.0.4/templates/admin/metabox (added)
-
tags/2.0.4/templates/admin/metabox/ads.php (added)
-
tags/2.0.4/templates/admin/metabox/category-filter.php (added)
-
tags/2.0.4/templates/admin/metabox/category-image.php (added)
-
tags/2.0.4/templates/admin/metabox/category-product-list-dropdown.php (added)
-
tags/2.0.4/templates/admin/metabox/category-representative-products.php (added)
-
tags/2.0.4/templates/admin/metabox/filter.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-locale.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-optimization-settings.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/cluster-cbp-content-part.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/cluster-cbp-footer-part.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/cluster-cbp-header-part.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/cluster-custom-content-part.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/cluster-custom-footer-part.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/cluster-custom-header-part.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/clusters.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/delete-confirmation.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/error-message.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/keyword-more-data.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/keyword-pool-more-data-single.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/keyword-pool-more-data.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/loader.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/pool.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/trigger-action-options.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword-pipeline/trigger-action.php (added)
-
tags/2.0.4/templates/admin/metabox/keyword.php (added)
-
tags/2.0.4/templates/admin/metabox/keywords-serp.php (added)
-
tags/2.0.4/templates/admin/metabox/popin-history.php (added)
-
tags/2.0.4/templates/admin/metabox/popin-keyword.php (added)
-
tags/2.0.4/templates/admin/metabox/premium-modal.php (added)
-
tags/2.0.4/templates/admin/metabox/premium.php (added)
-
tags/2.0.4/templates/admin/metabox/restart-ko-popup.php (added)
-
tags/2.0.4/templates/admin/post.php (added)
-
tags/2.0.4/templates/admin/settings.php (added)
-
tags/2.0.4/templates/admin/single-edit-progress-bar.php (added)
-
tags/2.0.4/templates/admin/translation-ongoing.php (added)
-
tags/2.0.4/templates/admin/v2-banners (added)
-
tags/2.0.4/templates/admin/v2-banners/free-to-freemium.php (added)
-
tags/2.0.4/templates/admin/v2-banners/free-to-premium.php (added)
-
tags/2.0.4/templates/admin/v2-banners/welcome-v2.php (added)
-
tags/2.0.4/writetext-ai.php (added)
-
trunk/CHANGELOG.md (modified) (1 diff)
-
trunk/assets/js/admin-common.js (modified) (1 diff)
-
trunk/includes/class-wtai-api-services.php (modified) (5 diffs)
-
trunk/includes/class-wtai-init.php (modified) (6 diffs)
-
trunk/includes/class-wtai-installation.php (modified) (2 diffs)
-
trunk/includes/class-wtai-product-category-list-table.php (modified) (1 diff)
-
trunk/includes/class-wtai-product-category.php (modified) (5 diffs)
-
trunk/includes/class-wtai-product-dashboard.php (modified) (7 diffs)
-
trunk/includes/class-wtai-product-list-table.php (modified) (1 diff)
-
trunk/includes/functions.php (modified) (1 diff)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/templates/admin/install.php (modified) (7 diffs)
-
trunk/writetext-ai.php (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
writetext-ai/trunk/CHANGELOG.md
r3261517 r3262683 9 9 The format is based on [Keep a Changelog](http://keepachangelog.com/) 10 10 and this project adheres to [Semantic Versioning](http://semver.org/). 11 12 ## [2.0.4] - 2025-03-27 13 14 ### Changed 15 16 - WooCommerce marketplace compatibility. 11 17 12 18 ## [2.0.3] - 2025-03-25 -
writetext-ai/trunk/assets/js/admin-common.js
r3261517 r3262683 2 2 /* jshint -W117 */ 3 3 4 console.log('WriteText.ai - Version: [2.0. 3] - 2025-03-25 - 1');4 console.log('WriteText.ai - Version: [2.0.4] - 2025-03-27 - 5'); 5 5 6 6 jQuery( document ).ready( function( $ ){ -
writetext-ai/trunk/includes/class-wtai-api-services.php
r3261517 r3262683 574 574 $generated_texts[ $product_id ]['generate_date'] = sprintf( 575 575 /* translators: %1$s: date %2$s time */ 576 __( '%1$s at %2$s' ),576 __( '%1$s at %2$s', 'writetext-ai' ), 577 577 date_i18n( get_option( 'date_format' ), $time ), 578 578 date_i18n( get_option( 'time_format' ), $time ) … … 984 984 985 985 $token = $this->get_web_token(); 986 986 987 if ( ! $token ) { 987 988 return ( $global_style_and_tones && isset( $global_style_and_tones[ $api_type ] ) ) ? $global_style_and_tones[ $api_type ] : array(); … … 1071 1072 1072 1073 $content = $this->get_data_via_api( array(), $settings, $headers, 'GET' ); 1074 1075 $is_doing_installation = defined( 'WTAI_DOING_INSTALLATION' ) && WTAI_DOING_INSTALLATION; 1073 1076 1074 1077 if ( 200 === intval( $content['http_header'] ) ) { … … 1111 1114 1112 1115 if ( isset( $content['headers']['etag'][0] ) ) { 1113 unset( $results[ $api_type . '_defaults' ] ); // Unset the temp default values. 1116 if ( ! $is_doing_installation ) { 1117 unset( $results[ $api_type . '_defaults' ] ); // Unset the temp default values. 1118 } 1114 1119 1115 1120 $content['headers']['etag'][0] = str_replace( '"', '', $content['headers']['etag'][0] ); … … 2340 2345 'Authorization' => 'Bearer ' . $wtai_connect_token, 2341 2346 ); 2347 2342 2348 if ( $settings ) { 2343 2349 $content = $this->get_data_via_api( array(), $settings, $headers, 'GET' ); -
writetext-ai/trunk/includes/class-wtai-init.php
r3250758 r3262683 568 568 if ( $product_attr ) { 569 569 foreach ( $product_attr as $attribute_id => $attr ) { 570 $name = $attr->get_name(); 571 $id = sanitize_title( $name ); 572 if ( ! str_contains( $name, 'pa_' ) ) { 573 $custom_pa[ $product_id ][ $id ] = $name; 570 if ( is_object( $attr ) && method_exists( $attr, 'get_name' ) ) { 571 $name = $attr->get_name(); 572 $id = sanitize_title( $name ); 573 if ( ! str_contains( $name, 'pa_' ) ) { 574 $custom_pa[ $product_id ][ $id ] = $name; 575 } 574 576 } 575 577 } … … 722 724 } 723 725 724 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), $force_check_type ); 726 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), $force_check_type ); 727 725 728 $product_values = apply_filters( 'wtai_global_settings', 'wtai_installation_' . strtolower( $type ) ); 726 729 if ( $form && 'tones' === $type ) { … … 744 747 unset( $lists[ ucfirst( $type ) . '_defaults' ] ); 745 748 } 749 } elseif ( isset( $lists[ ucfirst( $type ) . '_defaults' ] ) ) { 750 unset( $lists[ ucfirst( $type ) . '_defaults' ] ); 746 751 } 747 752 … … 975 980 continue; 976 981 } 977 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), '' ); 982 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), '' ); 983 984 if ( isset( $lists[ ucfirst( $type ) . '_defaults' ] ) ) { 985 unset( $lists[ ucfirst( $type ) . '_defaults' ] ); 986 } 987 978 988 $product_values = apply_filters( 'wtai_global_settings', 'wtai_installation_' . strtolower( $type ) ); 979 989 $html .= '<div class="wtai-product-wrap wtai-product-all-trigger wtai-product-' . $type . '-wrap">'; … … 1072 1082 continue; 1073 1083 } 1074 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), '' ); 1084 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), '' ); 1085 1086 if ( isset( $lists[ ucfirst( $type ) . '_defaults' ] ) ) { 1087 unset( $lists[ ucfirst( $type ) . '_defaults' ] ); 1088 } 1089 1075 1090 $product_values = apply_filters( 'wtai_global_settings', 'wtai_installation_' . strtolower( $type ) ); 1076 1091 $html .= '<div class="wtai-product-wrap wtai-product-' . $type . '-wrap">'; … … 1164 1179 continue; 1165 1180 } 1166 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), '' ); 1181 $lists = apply_filters( 'wtai_generate_text_filters', array(), ucfirst( $type ), '' ); 1182 1183 if ( isset( $lists[ ucfirst( $type ) . '_defaults' ] ) ) { 1184 unset( $lists[ ucfirst( $type ) . '_defaults' ] ); 1185 } 1186 1167 1187 $product_values = apply_filters( 'wtai_global_settings', 'wtai_installation_' . strtolower( $type ) ); 1168 1188 if ( 'form_audience' === $form ) { -
writetext-ai/trunk/includes/class-wtai-installation.php
r3250758 r3262683 280 280 echo wp_json_encode( 281 281 array( 282 'step' => $step,283 'status' => $status,284 'message' => $message,285 'source' => $source,282 'step' => intval( $step ), 283 'status' => intval( $status ), 284 'message' => esc_html( $message ), 285 'source' => esc_html( $source ), 286 286 ) 287 287 ); … … 372 372 ); 373 373 374 $skin = new WP_Ajax_Upgrader_Skin( array( 'api' => $api ) ); 375 $upgrader = new Plugin_Upgrader( $skin ); 376 $install = $upgrader->install( $api->download_link, array( 'clear_update_cache' => true ) ); 374 // Add checking if download link is valid. 375 $download_link = esc_url_raw( $api->download_link ); 376 377 if ( current_user_can( 'install_plugins' ) && filter_var( $download_link, FILTER_VALIDATE_URL ) ) { 378 $skin = new WP_Ajax_Upgrader_Skin( array( 'api' => $api ) ); 379 $upgrader = new Plugin_Upgrader( $skin ); // nosemgrep: audit.php.wp.security.arbitrary-plugin-install // Secuity woo check. 380 $install = $upgrader->install( $download_link, array( 'clear_update_cache' => true ) ); 381 382 if ( is_wp_error( $install ) ) { 383 $return = false; 384 } 385 } else { 386 $install = false; 387 } 377 388 378 389 if ( true !== $install ) { -
writetext-ai/trunk/includes/class-wtai-product-category-list-table.php
r3261517 r3262683 543 543 $t_time = sprintf( 544 544 /* translators: %1$s: date %2$s time */ 545 __( '%1$s at %2$s' ),545 __( '%1$s at %2$s', 'writetext-ai' ), 546 546 date_i18n( get_option( 'date_format' ), $item_value ), 547 547 date_i18n( get_option( 'time_format' ), $item_value ) -
writetext-ai/trunk/includes/class-wtai-product-category.php
r3261517 r3262683 1371 1371 1372 1372 if ( $selected_types && is_array( $selected_types ) ) { 1373 $selected_types = array_filter( $selected_types );1373 $selected_types = wtai_filter_empty_values( $selected_types ); 1374 1374 } 1375 1375 … … 1496 1496 } 1497 1497 1498 $alt_image_error_ids = is_array( $alt_image_error_ids ) ? array_filter( $alt_image_error_ids ) : array();1498 $alt_image_error_ids = is_array( $alt_image_error_ids ) ? wtai_filter_empty_values( $alt_image_error_ids ) : array(); 1499 1499 1500 1500 if ( $error_images || $alt_image_error_ids ) { … … 1690 1690 if ( isset( $_POST['tones'] ) ) { 1691 1691 $values['tones'] = ( false !== strpos( sanitize_text_field( wp_unslash( $_POST['tones'] ) ), ',' ) ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['tones'] ) ) ) : array( sanitize_text_field( wp_unslash( $_POST['tones'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification 1692 $values['tones'] = array_filter( $values['tones'] );1692 $values['tones'] = wtai_filter_empty_values( $values['tones'] ); 1693 1693 } else { 1694 1694 $values['tones'] = apply_filters( 'wtai_global_settings', 'wtai_installation_tones' ); … … 1806 1806 if ( isset( $_POST['altimageserror'] ) ) { 1807 1807 $error_alt_images = ( false !== strpos( sanitize_text_field( wp_unslash( $_POST['altimageserror'] ) ), ',' ) ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['altimageserror'] ) ) ) : array( sanitize_text_field( wp_unslash( $_POST['altimageserror'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification 1808 $error_alt_images = array_filter( $error_alt_images );1808 $error_alt_images = wtai_filter_empty_values( $error_alt_images ); 1809 1809 1810 1810 if ( $error_alt_images ) { … … 1869 1869 $ko_data_intents = isset( $_POST['ko_intents'] ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['ko_intents'] ) ) ) : array(); // phpcs:ignore WordPress.Security.NonceVerification 1870 1870 1871 $ko_data_intents = array_filter( $ko_data_intents );1871 $ko_data_intents = wtai_filter_empty_values( $ko_data_intents ); 1872 1872 if ( ! $ko_data_intents ) { 1873 1873 $ko_data_intents = WTAI_DEFAULT_SEARCH_INTENT; -
writetext-ai/trunk/includes/class-wtai-product-dashboard.php
r3261517 r3262683 740 740 } 741 741 742 if ( defined( 'WTAI_CREDIT_ACCOUNT_DETAILS' ) && WTAI_CREDIT_ACCOUNT_DETAILS['not_accepted_terms'] ) {742 if ( defined( 'WTAI_CREDIT_ACCOUNT_DETAILS' ) && isset( WTAI_CREDIT_ACCOUNT_DETAILS['not_accepted_terms'] ) && WTAI_CREDIT_ACCOUNT_DETAILS['not_accepted_terms'] ) { 743 743 ?> 744 744 <style type="text/css"> … … 2634 2634 2635 2635 if ( $selected_types ) { 2636 $selected_types = array_filter( $selected_types );2637 } 2638 2639 $selected_image_ids = array_filter( $selected_image_ids );2636 $selected_types = wtai_filter_empty_values( $selected_types ); 2637 } 2638 2639 $selected_image_ids = wtai_filter_empty_values( $selected_image_ids ); 2640 2640 2641 2641 if ( $selected_image_ids ) { … … 3253 3253 3254 3254 $tones = isset( $_POST['wtai_installation_tones'] ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['wtai_installation_tones'] ) ) ) : array(); // phpcs:ignore WordPress.Security.NonceVerification 3255 $tones = array_filter( $tones );3255 $tones = wtai_filter_empty_values( $tones ); 3256 3256 3257 3257 wtai_update_user_meta( $current_user_id, 'wtai_tones_options_user_preference', $tones ); … … 3679 3679 3680 3680 if ( $product_attributes ) { 3681 $product_attributes = array_filter( $product_attributes );3681 $product_attributes = wtai_filter_empty_values( $product_attributes ); 3682 3682 $product_attributes = array_values( $product_attributes ); 3683 3683 } … … 4991 4991 if ( isset( $_POST['tones'] ) ) { 4992 4992 $values['tones'] = ( false !== strpos( sanitize_text_field( wp_unslash( $_POST['tones'] ) ), ',' ) ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['tones'] ) ) ) : array( sanitize_text_field( wp_unslash( $_POST['tones'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification 4993 $values['tones'] = array_filter( $values['tones'] );4993 $values['tones'] = wtai_filter_empty_values( $values['tones'] ); 4994 4994 } else { 4995 4995 $values['tones'] = apply_filters( 'wtai_global_settings', 'wtai_installation_tones' ); … … 5186 5186 if ( isset( $_POST['ko_intents'] ) ) { 5187 5187 $ko_data_intents = isset( $_POST['ko_intents'] ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['ko_intents'] ) ) ) : array(); // phpcs:ignore WordPress.Security.NonceVerification 5188 $ko_data_intents = array_filter( $ko_data_intents );5188 $ko_data_intents = wtai_filter_empty_values( $ko_data_intents ); 5189 5189 if ( ! $ko_data_intents ) { 5190 5190 $ko_data_intents = WTAI_DEFAULT_SEARCH_INTENT; … … 5241 5241 if ( isset( $_POST['bulk_search_intent'] ) ) { 5242 5242 $ko_data_intents = isset( $_POST['bulk_search_intent'] ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['bulk_search_intent'] ) ) ) : array(); // phpcs:ignore WordPress.Security.NonceVerification 5243 $ko_data_intents = array_filter( $ko_data_intents );5243 $ko_data_intents = wtai_filter_empty_values( $ko_data_intents ); 5244 5244 if ( ! $ko_data_intents ) { 5245 5245 $ko_data_intents = WTAI_DEFAULT_SEARCH_INTENT; -
writetext-ai/trunk/includes/class-wtai-product-list-table.php
r3261517 r3262683 668 668 // Sanitize and explode the parameter to get an array of product IDs. 669 669 $bulk_product_ids = explode( ',', sanitize_text_field( wp_unslash( $_GET['wtai_bulk_product_ids'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification 670 $bulk_product_ids = array_filter( $bulk_product_ids );670 $bulk_product_ids = wtai_filter_empty_values( $bulk_product_ids ); 671 671 672 672 // Check if 'post__in' is already set in $args. -
writetext-ai/trunk/includes/functions.php
r3261517 r3262683 8167 8167 $product_post->reset(); 8168 8168 } 8169 8170 /** 8171 * Filter empty values from an array. 8172 * 8173 * @param array $filtered_array Filtered array. 8174 */ 8175 function wtai_filter_empty_values( $filtered_array ) { 8176 return array_filter( 8177 $filtered_array, 8178 function ( $array_value ) { 8179 return ! empty( $array_value ); 8180 } 8181 ); 8182 } 8183 -
writetext-ai/trunk/readme.txt
r3261517 r3262683 5 5 Requires at least: 6.0 6 6 Tested up to: 6.7 7 Stable tag: 2.0. 37 Stable tag: 2.0.4 8 8 Requires PHP: 7.4 9 9 License: GPLv3 or later … … 165 165 166 166 == Changelog == 167 168 = 2.0.4 2025-03-27 = 169 170 * Update - WooCommerce marketplace compatibility. 167 171 168 172 = 2.0.3 2025-03-25 = … … 409 413 == Upgrade Notice == 410 414 411 = 2.0. 3=415 = 2.0.4 = 412 416 413 417 Please upgrade, to ensure all plugin features works as expected. -
writetext-ai/trunk/templates/admin/install.php
r3250758 r3262683 235 235 <?php 236 236 $global_rule_fields = apply_filters( 'wtai_global_rule_fields', array() ); 237 $min_output_words = $global_rule_fields['minOutputWords'];238 $max_output_words = $global_rule_fields['maxOutputWords'];237 $min_output_words = isset( $global_rule_fields['minOutputWords'] ) ? $global_rule_fields['minOutputWords'] : 0; 238 $max_output_words = isset( $global_rule_fields['maxOutputWords'] ) ? $global_rule_fields['maxOutputWords'] : 0; 239 239 ?> 240 240 <div class="wtai-product-length-main-wrap" > … … 250 250 <span><?php echo wp_kses_post( __( 'Min', 'writetext-ai' ) ); ?></span> 251 251 <span class="wtai-input-group"> 252 <input type="number" id="wtai-installation-product-description-min" name="wtai_installation_product_description_min" class="wtai-specs-input wtai-min-text" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_description_min'] ) ); ?>" min="<?php echo esc_attr( $ global_rule_fields['minOutputWords']); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_description_min'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>"/>252 <input type="number" id="wtai-installation-product-description-min" name="wtai_installation_product_description_min" class="wtai-specs-input wtai-min-text" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_description_min'] ) ); ?>" min="<?php echo esc_attr( $min_output_words ); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_description_min'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>"/> 253 253 <span class="wtai-plus-minus-wrapper"> 254 254 <span class="dashicons dashicons-plus wtai-txt-plus"></span> … … 260 260 <span class="wtai-text-input-label"><?php echo wp_kses_post( __( 'Max', 'writetext-ai' ) ); ?></span> 261 261 <span class="wtai-input-group"> 262 <input type="number" class="wtai-specs-input wtai-max-text" id="wtai-installation-product-description-max" name="wtai_installation_product_description_max" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_description_max'] ) ); ?>" min="<?php echo esc_attr( $ global_rule_fields['minOutputWords']); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_description_max'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>">262 <input type="number" class="wtai-specs-input wtai-max-text" id="wtai-installation-product-description-max" name="wtai_installation_product_description_max" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_description_max'] ) ); ?>" min="<?php echo esc_attr( $min_output_words ); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_description_max'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>"> 263 263 <span class="wtai-plus-minus-wrapper"> 264 264 <span class="dashicons dashicons-plus wtai-txt-plus"></span> … … 278 278 <span><?php echo wp_kses_post( __( 'Min', 'writetext-ai' ) ); ?></span> 279 279 <span class="wtai-input-group"> 280 <input type="number" id="wtai-installation-product-excerpt-min" class="wtai-specs-input wtai-min-text" name="wtai_installation_product_excerpt_min" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_excerpt_min'] ) ); ?>" min="<?php echo esc_attr( $ global_rule_fields['minOutputWords']); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_excerpt_min'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" />280 <input type="number" id="wtai-installation-product-excerpt-min" class="wtai-specs-input wtai-min-text" name="wtai_installation_product_excerpt_min" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_excerpt_min'] ) ); ?>" min="<?php echo esc_attr( $min_output_words ); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_excerpt_min'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" /> 281 281 <span class="wtai-plus-minus-wrapper"> 282 282 <span class="dashicons dashicons-plus wtai-txt-plus"></span> … … 288 288 <span class="wtai-text-input-label"><?php echo wp_kses_post( __( 'Max', 'writetext-ai' ) ); ?></span> 289 289 <span class="wtai-input-group"> 290 <input type="number" class="wtai-specs-input wtai-max-text" id="wtai-installation-product-excerpt-max" name="wtai_installation_product_excerpt_max" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_excerpt_max'] ) ); ?>" min="<?php echo esc_attr( $ global_rule_fields['minOutputWords']); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_excerpt_max'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" />290 <input type="number" class="wtai-specs-input wtai-max-text" id="wtai-installation-product-excerpt-max" name="wtai_installation_product_excerpt_max" value="<?php echo esc_attr( wp_unslash( $field_text_fields['product_excerpt_max'] ) ); ?>" min="<?php echo esc_attr( $min_output_words ); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['product_excerpt_max'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" /> 291 291 <span class="wtai-plus-minus-wrapper"> 292 292 <span class="dashicons dashicons-plus wtai-txt-plus"></span> … … 306 306 <span><?php echo wp_kses_post( __( 'Min', 'writetext-ai' ) ); ?></span> 307 307 <span class="wtai-input-group"> 308 <input type="number" id="wtai-installation-category-description-min" class="wtai-specs-input wtai-min-text" name="wtai_installation_category_description_min" value="<?php echo esc_attr( wp_unslash( $field_text_fields['category_description_min'] ) ); ?>" min="<?php echo esc_attr( $ global_rule_fields['minOutputWords']); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['category_description_min'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" />308 <input type="number" id="wtai-installation-category-description-min" class="wtai-specs-input wtai-min-text" name="wtai_installation_category_description_min" value="<?php echo esc_attr( wp_unslash( $field_text_fields['category_description_min'] ) ); ?>" min="<?php echo esc_attr( $min_output_words ); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['category_description_min'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" /> 309 309 <span class="wtai-plus-minus-wrapper"> 310 310 <span class="dashicons dashicons-plus wtai-txt-plus"></span> … … 316 316 <span class="wtai-text-input-label"><?php echo wp_kses_post( __( 'Max', 'writetext-ai' ) ); ?></span> 317 317 <span class="wtai-input-group"> 318 <input type="number" class="wtai-specs-input wtai-max-text" id="wtai-installation-category-description-max" name="wtai_installation_category_description_max" value="<?php echo esc_attr( wp_unslash( $field_text_fields['category_description_max'] ) ); ?>" min="<?php echo esc_attr( $ global_rule_fields['minOutputWords']); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['category_description_max'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" />318 <input type="number" class="wtai-specs-input wtai-max-text" id="wtai-installation-category-description-max" name="wtai_installation_category_description_max" value="<?php echo esc_attr( wp_unslash( $field_text_fields['category_description_max'] ) ); ?>" min="<?php echo esc_attr( $min_output_words ); ?>" data-original-value="<?php echo esc_attr( $field_text_fields['category_description_max'] ); ?>" data-mintext="<?php echo esc_attr( $min_output_words ); ?>" data-maxtext="<?php echo esc_attr( $max_output_words ); ?>" /> 319 319 <span class="wtai-plus-minus-wrapper"> 320 320 <span class="dashicons dashicons-plus wtai-txt-plus"></span> -
writetext-ai/trunk/writetext-ai.php
r3261517 r3262683 4 4 * Plugin URI: https://writetext.ai/woocommerce 5 5 * Description: Let AI automatically generate product descriptions and other content from your product data. 6 * Version: 2.0. 36 * Version: 2.0.4 7 7 * Author: 1902 Software 8 8 * Author URI: https://writetext.ai/ … … 52 52 53 53 if ( ! defined( 'WTAI_VERSION' ) ) { 54 define( 'WTAI_VERSION', '2.0. 3' );54 define( 'WTAI_VERSION', '2.0.4' ); 55 55 } 56 56 … … 407 407 'SELECT user_id FROM %1s 408 408 WHERE meta_key LIKE %s 409 OR meta_key LIKE %s 409 410 OR meta_key LIKE %s 410 411 OR meta_key LIKE %s … … 472 473 'wtai_product_list_per_page%', 473 474 'wtai_product_bulk_generate_user_preference%', 475 'wtai_keyword_search_intents%', 474 476 ) 475 477 ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared. … … 507 509 wtai_update_user_meta( $user->user_id, 'wtai_product_list_per_page', '' ); 508 510 wtai_update_user_meta( $user->user_id, 'wtai_product_bulk_generate_user_preference', '' ); 511 wtai_update_user_meta( $user->user_id, 'wtai_keyword_search_intents', '' ); 509 512 510 513 // Reset popup blocker dismiss option. … … 1191 1194 $seo = get_option( 'wtai_installation_source', '' ); 1192 1195 1196 if ( '' === $seo ) { 1197 return array( 1198 'source' => '', 1199 'version' => '', 1200 ); 1201 } 1202 1193 1203 $plugin_lists = wtai_get_list_of_seoplugin(); 1194 $seo_plugin_data = $plugin_lists[ $seo ]; 1195 $plugin_uri = $seo_plugin_data['plugin_uri']; 1204 $seo_plugin_data = isset( $plugin_lists[ $seo ] ) ? $plugin_lists[ $seo ] : ''; 1205 $plugin_uri = isset( $seo_plugin_data['plugin_uri'] ) ? $seo_plugin_data['plugin_uri'] : ''; 1206 1207 if ( '' === $plugin_uri ) { 1208 return array( 1209 'source' => '', 1210 'version' => '', 1211 ); 1212 } 1196 1213 1197 1214 if ( ! function_exists( 'get_plugin_data' ) ) {
Note: See TracChangeset
for help on using the changeset viewer.