Changeset 3442200
- Timestamp:
- 01/19/2026 04:58:36 AM (2 months ago)
- Location:
- podcast-player
- Files:
-
- 188 added
- 8 edited
-
tags/7.9.14 (added)
-
tags/7.9.14/LICENSE (added)
-
tags/7.9.14/README.txt (added)
-
tags/7.9.14/backend (added)
-
tags/7.9.14/backend/admin (added)
-
tags/7.9.14/backend/admin/admin-icons.svg (added)
-
tags/7.9.14/backend/admin/class-options.php (added)
-
tags/7.9.14/backend/admin/class-shortcodegen.php (added)
-
tags/7.9.14/backend/admin/templates (added)
-
tags/7.9.14/backend/admin/templates/help.php (added)
-
tags/7.9.14/backend/admin/templates/home.php (added)
-
tags/7.9.14/backend/admin/templates/main.php (added)
-
tags/7.9.14/backend/admin/templates/products.php (added)
-
tags/7.9.14/backend/admin/templates/settings.php (added)
-
tags/7.9.14/backend/admin/templates/shortcode.php (added)
-
tags/7.9.14/backend/admin/templates/sidebar.php (added)
-
tags/7.9.14/backend/admin/templates/toolkit (added)
-
tags/7.9.14/backend/admin/templates/toolkit.php (added)
-
tags/7.9.14/backend/admin/templates/toolkit/feed-review.php (added)
-
tags/7.9.14/backend/admin/templates/toolkit/feed-update.php (added)
-
tags/7.9.14/backend/class-register.php (added)
-
tags/7.9.14/backend/css (added)
-
tags/7.9.14/backend/css/admin-options-rtl.css (added)
-
tags/7.9.14/backend/css/admin-options.css (added)
-
tags/7.9.14/backend/css/partials (added)
-
tags/7.9.14/backend/css/podcast-player-admin-rtl.css (added)
-
tags/7.9.14/backend/css/podcast-player-admin.css (added)
-
tags/7.9.14/backend/inc (added)
-
tags/7.9.14/backend/inc/class-background-tasks.php (added)
-
tags/7.9.14/backend/inc/class-block.php (added)
-
tags/7.9.14/backend/inc/class-dashboard-widget.php (added)
-
tags/7.9.14/backend/inc/class-loader.php (added)
-
tags/7.9.14/backend/inc/class-misc.php (added)
-
tags/7.9.14/backend/inc/class-shortcode.php (added)
-
tags/7.9.14/backend/inc/class-widget.php (added)
-
tags/7.9.14/backend/js (added)
-
tags/7.9.14/backend/js/admin-options.build.js (added)
-
tags/7.9.14/backend/js/admin-options.js (added)
-
tags/7.9.14/backend/js/admin.build.js (added)
-
tags/7.9.14/backend/js/admin.js (added)
-
tags/7.9.14/backend/js/blocks.build.js (added)
-
tags/7.9.14/backend/js/blocks.js (added)
-
tags/7.9.14/backend/js/partials (added)
-
tags/7.9.14/backend/js/partials/blocks (added)
-
tags/7.9.14/backend/js/partials/blocks/ecc.js (added)
-
tags/7.9.14/backend/js/partials/blocks/edit.js (added)
-
tags/7.9.14/backend/js/partials/blocks/index.js (added)
-
tags/7.9.14/backend/js/partials/blocks/mcc.js (added)
-
tags/7.9.14/backend/js/partials/options (added)
-
tags/7.9.14/backend/js/partials/options/changeDetect.js (added)
-
tags/7.9.14/backend/js/partials/options/colorpicker.js (added)
-
tags/7.9.14/backend/js/partials/options/dom.js (added)
-
tags/7.9.14/backend/js/partials/options/feededit.js (added)
-
tags/7.9.14/backend/js/partials/options/feedmigrate.js (added)
-
tags/7.9.14/backend/js/partials/options/fetchMethod.js (added)
-
tags/7.9.14/backend/js/partials/options/reviews.js (added)
-
tags/7.9.14/backend/js/partials/options/shortgen.js (added)
-
tags/7.9.14/backend/js/partials/options/variables.js (added)
-
tags/7.9.14/backend/js/partials/widgets (added)
-
tags/7.9.14/backend/js/partials/widgets/changeDetect.js (added)
-
tags/7.9.14/backend/js/partials/widgets/colorpicker.js (added)
-
tags/7.9.14/backend/js/partials/widgets/fetchFilters.js (added)
-
tags/7.9.14/backend/js/partials/widgets/fetchMethod.js (added)
-
tags/7.9.14/backend/js/partials/widgets/imageupload.js (added)
-
tags/7.9.14/backend/js/partials/widgets/variables.js (added)
-
tags/7.9.14/backend/partials (added)
-
tags/7.9.14/backend/partials/pp-notifications.php (added)
-
tags/7.9.14/credits.txt (added)
-
tags/7.9.14/frontend (added)
-
tags/7.9.14/frontend/class-register.php (added)
-
tags/7.9.14/frontend/css (added)
-
tags/7.9.14/frontend/css/podcast-player-editor-rtl.css (added)
-
tags/7.9.14/frontend/css/podcast-player-editor.css (added)
-
tags/7.9.14/frontend/css/podcast-player-public-rtl.css (added)
-
tags/7.9.14/frontend/css/podcast-player-public.css (added)
-
tags/7.9.14/frontend/images (added)
-
tags/7.9.14/frontend/images/icons.svg (added)
-
tags/7.9.14/frontend/inc (added)
-
tags/7.9.14/frontend/inc/class-display.php (added)
-
tags/7.9.14/frontend/inc/class-feed.php (added)
-
tags/7.9.14/frontend/inc/class-general.php (added)
-
tags/7.9.14/frontend/inc/class-icon-loader.php (added)
-
tags/7.9.14/frontend/inc/class-icons-extend.php (added)
-
tags/7.9.14/frontend/inc/class-instance-counter.php (added)
-
tags/7.9.14/frontend/inc/class-loader.php (added)
-
tags/7.9.14/frontend/inc/class-render.php (added)
-
tags/7.9.14/frontend/js (added)
-
tags/7.9.14/frontend/js/mmerrorfix.js (added)
-
tags/7.9.14/frontend/js/partials (added)
-
tags/7.9.14/frontend/js/partials/editor.js (added)
-
tags/7.9.14/frontend/js/partials/header.js (added)
-
tags/7.9.14/frontend/js/partials/load.js (added)
-
tags/7.9.14/frontend/js/partials/main.js (added)
-
tags/7.9.14/frontend/js/partials/media.js (added)
-
tags/7.9.14/frontend/js/partials/mediaelem.js (added)
-
tags/7.9.14/frontend/js/partials/modal.js (added)
-
tags/7.9.14/frontend/js/partials/play.js (added)
-
tags/7.9.14/frontend/js/partials/podcast.js (added)
-
tags/7.9.14/frontend/js/partials/pplib.js (added)
-
tags/7.9.14/frontend/js/partials/search.js (added)
-
tags/7.9.14/frontend/js/partials/variables.js (added)
-
tags/7.9.14/frontend/js/ppeditor.build.js (added)
-
tags/7.9.14/frontend/js/ppeditor.js (added)
-
tags/7.9.14/frontend/js/public.build.js (added)
-
tags/7.9.14/frontend/js/public.js (added)
-
tags/7.9.14/frontend/js/templates (added)
-
tags/7.9.14/frontend/js/templates/audioplayer.js (added)
-
tags/7.9.14/frontend/templates (added)
-
tags/7.9.14/frontend/templates/episode (added)
-
tags/7.9.14/frontend/templates/episode/featured.php (added)
-
tags/7.9.14/frontend/templates/episode/single.php (added)
-
tags/7.9.14/frontend/templates/header (added)
-
tags/7.9.14/frontend/templates/header/image.php (added)
-
tags/7.9.14/frontend/templates/header/menu (added)
-
tags/7.9.14/frontend/templates/header/menu/default-links.php (added)
-
tags/7.9.14/frontend/templates/header/menu/podcast-menu.php (added)
-
tags/7.9.14/frontend/templates/header/subscribe-buttons.php (added)
-
tags/7.9.14/frontend/templates/list (added)
-
tags/7.9.14/frontend/templates/list/entry-modern.php (added)
-
tags/7.9.14/frontend/templates/list/entry.php (added)
-
tags/7.9.14/frontend/templates/list/search-field.php (added)
-
tags/7.9.14/frontend/templates/misc (added)
-
tags/7.9.14/frontend/templates/misc/buttons (added)
-
tags/7.9.14/frontend/templates/misc/buttons/clear-search.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/launch.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/list.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/load-more.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/next.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/playpause.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/pod-menu.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/previous.php (added)
-
tags/7.9.14/frontend/templates/misc/buttons/single-close.php (added)
-
tags/7.9.14/frontend/templates/misc/js (added)
-
tags/7.9.14/frontend/templates/misc/js/addcontrols.php (added)
-
tags/7.9.14/frontend/templates/misc/js/auxmodal.php (added)
-
tags/7.9.14/frontend/templates/misc/js/controls.php (added)
-
tags/7.9.14/frontend/templates/misc/js/vshare.php (added)
-
tags/7.9.14/frontend/templates/subscribe (added)
-
tags/7.9.14/frontend/templates/subscribe/amazon.php (added)
-
tags/7.9.14/frontend/templates/subscribe/apple.php (added)
-
tags/7.9.14/frontend/templates/subscribe/breaker.php (added)
-
tags/7.9.14/frontend/templates/subscribe/bullhorn.php (added)
-
tags/7.9.14/frontend/templates/subscribe/castbox.php (added)
-
tags/7.9.14/frontend/templates/subscribe/castro.php (added)
-
tags/7.9.14/frontend/templates/subscribe/deezer.php (added)
-
tags/7.9.14/frontend/templates/subscribe/external.php (added)
-
tags/7.9.14/frontend/templates/subscribe/google.php (added)
-
tags/7.9.14/frontend/templates/subscribe/iheart.php (added)
-
tags/7.9.14/frontend/templates/subscribe/overcast.php (added)
-
tags/7.9.14/frontend/templates/subscribe/pandora.php (added)
-
tags/7.9.14/frontend/templates/subscribe/playerfm.php (added)
-
tags/7.9.14/frontend/templates/subscribe/pocketcasts.php (added)
-
tags/7.9.14/frontend/templates/subscribe/podbean.php (added)
-
tags/7.9.14/frontend/templates/subscribe/podcastaddict.php (added)
-
tags/7.9.14/frontend/templates/subscribe/podchaser.php (added)
-
tags/7.9.14/frontend/templates/subscribe/radiopublic.php (added)
-
tags/7.9.14/frontend/templates/subscribe/soundcloud.php (added)
-
tags/7.9.14/frontend/templates/subscribe/spotify.php (added)
-
tags/7.9.14/frontend/templates/subscribe/stitcher.php (added)
-
tags/7.9.14/frontend/templates/subscribe/tunein.php (added)
-
tags/7.9.14/frontend/templates/subscribe/youtube.php (added)
-
tags/7.9.14/helper (added)
-
tags/7.9.14/helper/core (added)
-
tags/7.9.14/helper/core/class-background-jobs.php (added)
-
tags/7.9.14/helper/core/class-singleton.php (added)
-
tags/7.9.14/helper/feed (added)
-
tags/7.9.14/helper/feed/class-add-external-link-attr.php (added)
-
tags/7.9.14/helper/feed/class-fetch-feed.php (added)
-
tags/7.9.14/helper/feed/class-get-feed.php (added)
-
tags/7.9.14/helper/feed/class-modify-feed-data.php (added)
-
tags/7.9.14/helper/feed/class-prepare-front-new.php (added)
-
tags/7.9.14/helper/feed/class-prepare-storage.php (added)
-
tags/7.9.14/helper/functions (added)
-
tags/7.9.14/helper/functions/class-country-codes.php (added)
-
tags/7.9.14/helper/functions/class-date-parser.php (added)
-
tags/7.9.14/helper/functions/class-getters.php (added)
-
tags/7.9.14/helper/functions/class-markup.php (added)
-
tags/7.9.14/helper/functions/class-utility.php (added)
-
tags/7.9.14/helper/functions/class-validation.php (added)
-
tags/7.9.14/helper/store (added)
-
tags/7.9.14/helper/store/class-feeddata.php (added)
-
tags/7.9.14/helper/store/class-itemdata.php (added)
-
tags/7.9.14/helper/store/class-storageregister.php (added)
-
tags/7.9.14/helper/store/class-storebase.php (added)
-
tags/7.9.14/helper/store/class-storemanager.php (added)
-
tags/7.9.14/lang (added)
-
tags/7.9.14/lang/podcast-player.pot (added)
-
tags/7.9.14/podcast-player.php (added)
-
trunk/README.txt (modified) (3 diffs)
-
trunk/backend/admin/class-options.php (modified) (1 diff)
-
trunk/backend/class-register.php (modified) (1 diff)
-
trunk/backend/inc/class-background-tasks.php (modified) (5 diffs)
-
trunk/frontend/class-register.php (modified) (1 diff)
-
trunk/frontend/inc/class-feed.php (modified) (1 diff)
-
trunk/helper/core/class-background-jobs.php (modified) (2 diffs)
-
trunk/podcast-player.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
podcast-player/trunk/README.txt
r3418338 r3442200 5 5 Tested up to: 6.9 6 6 Requires PHP: 5.6 7 Stable tag: 7.9.1 37 Stable tag: 7.9.14 8 8 License: GPLv3 or later 9 9 License URI: http://www.gnu.org/licenses/gpl-3.0.html … … 16 16 Watch this introductory video to learn about the podcast player. 17 17 18 [youtube https://www.youtube.com/watch?v= XwA7ZBp1vMM]18 [youtube https://www.youtube.com/watch?v=0FqVN5-Ja0A] 19 19 20 20 Learn More About the Podcast Player Pro … … 107 107 108 108 == Changelog == 109 = 7.9.14 = 110 * Modify: Put hard cap on Image download feature to prevent unwanted image downloads in case of any error. 111 * Bug Fix: Prevent direct file access to critical files. 112 109 113 = 7.9.12 = 110 114 * Add: Added a filter to bypass media verification and allow any media. -
podcast-player/trunk/backend/admin/class-options.php
r3316089 r3442200 11 11 12 12 namespace Podcast_Player\Backend\Admin; 13 14 // Return if called directly. 15 if ( ! defined( 'ABSPATH' ) ) { 16 exit; 17 } 13 18 14 19 use Podcast_Player\Helper\Functions\Getters as Get_Fn; -
podcast-player/trunk/backend/class-register.php
r3306134 r3442200 11 11 12 12 namespace Podcast_Player\Backend; 13 14 // Return if called directly. 15 if ( ! defined( 'ABSPATH' ) ) { 16 exit; 17 } 13 18 14 19 use Podcast_Player\Backend\Inc\Loader; -
podcast-player/trunk/backend/inc/class-background-tasks.php
r3407648 r3442200 27 27 28 28 /** 29 * There are cases where download data is not saved properly due to some error, server settings, 30 * custom codes or conflict with other plugin. These edge cases sometimes cause plugin to 31 * download a large number of images. Let's put a hard cap on that to prevent any issues on user's website. 32 */ 33 const MAX_TOTAL_IMAGE_DOWNLOADS = 1000; 34 35 /** 29 36 * Download episode featured images. 30 37 * … … 40 47 // Skip task and remove it from the queue. 41 48 return array( true, $args['data'] ); 49 } 50 51 // GLOBAL SAFETY STOP 52 if ( $this->image_download_limit_reached() ) { 53 $this->disable_image_downloads(); 54 55 return array( 56 new \WP_Error( 57 'image-limit-reached', 58 esc_html__( 'Global image download limit reached. Image saving disabled.', 'podcast-player' ) 59 ), 60 false 61 ); 42 62 } 43 63 … … 99 119 require_once ABSPATH . 'wp-admin/includes/image.php'; 100 120 foreach ( $pending as $key => $item ) { 121 122 // Hard Stop if download limit has reached. 123 if ( $this->image_download_limit_reached() ) { 124 $this->disable_image_downloads(); 125 return array( 126 new \WP_Error( 127 'image-limit-reached', 128 esc_html__( 'Global image limit reached. Downloads stopped.', 'podcast-player' ) 129 ), 130 false 131 ); 132 } 133 101 134 $image_url = isset( $item['featured'] ) ? $item['featured'] : ''; 102 135 $title = isset( $item['title'] ) ? $item['title'] : ''; … … 128 161 129 162 if ( ! is_wp_error( $attachment_id ) ) { 163 164 // Count successful downloads. 165 $this->increment_image_download_count(); 166 130 167 add_post_meta( $attachment_id, 'pp_featured_key', md5( $image_url ), true ); 168 169 // Let's do post_meta verification to see if data is getting saved correctly. 170 $stored = get_post_meta( $attachment_id, 'pp_featured_key', true ); 171 if ( $stored !== md5( $image_url ) ) { 172 $this->disable_image_downloads(); 173 return array( 174 new \WP_Error( 175 'meta-write-failed', 176 esc_html__( 'Failed to persist image meta. Downloads stopped.', 'podcast-player' ) 177 ), 178 false 179 ); 180 } 181 131 182 $completed[ $key ] = array_merge( $item, array( 'post_id' => $attachment_id ) ); 132 183 } else { … … 256 307 return array( true, $data ); 257 308 } 309 310 /** 311 * Get how many image download operations have been performed successfully. 312 * 313 * @since 7.9.14 314 */ 315 private function get_total_image_download_count() { 316 return (int) get_option( 'pp_total_image_downloads', 0 ); 317 } 318 319 /** 320 * Increase image download operations by one. 321 * 322 * @since 7.9.14 323 */ 324 private function increment_image_download_count() { 325 $count = $this->get_total_image_download_count(); 326 update_option( 'pp_total_image_downloads', $count + 1, false ); 327 } 328 329 /** 330 * Check if image download limit has been reached. 331 * 332 * @since 7.9.14 333 */ 334 private function image_download_limit_reached() { 335 return $this->get_total_image_download_count() >= self::MAX_TOTAL_IMAGE_DOWNLOADS; 336 } 337 338 /** 339 * Disable image download options and reset the counter. 340 * 341 * @since 7.9.14 342 */ 343 private function disable_image_downloads() { 344 $options = get_option( 'pp-common-options', array() ); 345 if ( ! isset( $options['img_save'] ) || 'yes' !== $options['img_save'] ) { 346 return; // already disabled 347 } 348 $options['img_save'] = 'no'; 349 update_option( 'pp-common-options', $options ); 350 delete_option( 'pp_total_image_downloads' ); 351 } 258 352 } -
podcast-player/trunk/frontend/class-register.php
r3274237 r3442200 11 11 12 12 namespace Podcast_Player\Frontend; 13 14 // Return if called directly. 15 if ( ! defined( 'ABSPATH' ) ) { 16 exit; 17 } 13 18 14 19 use Podcast_Player\Helper\Functions\Getters as Get_Fn; -
podcast-player/trunk/frontend/inc/class-feed.php
r3339440 r3442200 362 362 } 363 363 364 // TODO: $item['featured'] contains original image URL, its md5 should not match with $img_src1. Then, why is it there? 364 365 if ( isset( $item['featured_id'] ) && $item['featured_id'] ) { 365 366 $img_src1 = wp_get_attachment_image_src( $item['featured_id'], 'large' ); -
podcast-player/trunk/helper/core/class-background-jobs.php
r3300373 r3442200 14 14 namespace Podcast_Player\Helper\Core; 15 15 16 // Return if called directly. 17 if ( ! defined( 'ABSPATH' ) ) { 18 exit; 19 } 20 16 21 /** 17 22 * Handle background jobs to import episodes, download images and update feeds. … … 125 130 $prev_data = $prev_task['data']; 126 131 $new_data = array_merge( $prev_data, $task_data['data'] ); 132 133 // Limit to 10 images only. 134 if ( 'download_image' === $task_type ) { 135 $new_data = array_slice( $new_data, 0, 10, true ); 136 } 127 137 $queue[ $unique_id ] = array_merge( $prev_task, array( 'data' => $new_data ) ); 128 138 } else { -
podcast-player/trunk/podcast-player.php
r3418338 r3442200 15 15 * Plugin URI: https://easypodcastpro.com 16 16 * Description: Host your podcast episodes anywhere, display them only using podcast feed url. Use custom widget or shortcode to display podcast player anywhere on your site. 17 * Version: 7.9.1 317 * Version: 7.9.14 18 18 * Author: vedathemes 19 19 * Author URI: https://easypodcastpro.com … … 30 30 31 31 // Currently plugin version. 32 define( 'PODCAST_PLAYER_VERSION', '7.9.1 3' );32 define( 'PODCAST_PLAYER_VERSION', '7.9.14' ); 33 33 34 34 // Define plugin constants.
Note: See TracChangeset
for help on using the changeset viewer.