🐐 GOAT Shell
Current path:
tmp
/
👤 Create WP Admin
⬆️
Go up:
✏️ Editing: phpkmnMjj
class-wp-widget-media-video.php 0000644 00000020667 15102442010 0012450 0 ustar 00 <?php /** * Widget API: WP_Widget_Media_Video class * * @package WordPress * @subpackage Widgets * @since 4.8.0 */ /** * Core class that implements a video widget. * * @since 4.8.0 * * @see WP_Widget_Media * @see WP_Widget */ class WP_Widget_Media_Video extends WP_Widget_Media { /** * Constructor. * * @since 4.8.0 */ public function __construct() { parent::__construct( 'media_video', __( 'Video' ), array( 'description' => __( 'Displays a video from the media library or from YouTube, Vimeo, or another provider.' ), 'mime_type' => 'video', ) ); $this->l10n = array_merge( $this->l10n, array( 'no_media_selected' => __( 'No video selected' ), 'add_media' => _x( 'Add Video', 'label for button in the video widget' ), 'replace_media' => _x( 'Replace Video', 'label for button in the video widget; should preferably not be longer than ~13 characters long' ), 'edit_media' => _x( 'Edit Video', 'label for button in the video widget; should preferably not be longer than ~13 characters long' ), 'missing_attachment' => sprintf( /* translators: %s: URL to media library. */ __( 'That video cannot be found. Check your <a href="%s">media library</a> and make sure it was not deleted.' ), esc_url( admin_url( 'upload.php' ) ) ), /* translators: %d: Widget count. */ 'media_library_state_multi' => _n_noop( 'Video Widget (%d)', 'Video Widget (%d)' ), 'media_library_state_single' => __( 'Video Widget' ), /* translators: %s: A list of valid video file extensions. */ 'unsupported_file_type' => sprintf( __( 'Sorry, the video at the supplied URL cannot be loaded. Please check that the URL is for a supported video file (%s) or stream (e.g. YouTube and Vimeo).' ), '<code>.' . implode( '</code>, <code>.', wp_get_video_extensions() ) . '</code>' ), ) ); } /** * Get schema for properties of a widget instance (item). * * @since 4.8.0 * * @see WP_REST_Controller::get_item_schema() * @see WP_REST_Controller::get_additional_fields() * @link https://core.trac.wordpress.org/ticket/35574 * * @return array Schema for properties. */ public function get_instance_schema() { $schema = array( 'preload' => array( 'type' => 'string', 'enum' => array( 'none', 'auto', 'metadata' ), 'default' => 'metadata', 'description' => __( 'Preload' ), 'should_preview_update' => false, ), 'loop' => array( 'type' => 'boolean', 'default' => false, 'description' => __( 'Loop' ), 'should_preview_update' => false, ), 'content' => array( 'type' => 'string', 'default' => '', 'sanitize_callback' => 'wp_kses_post', 'description' => __( 'Tracks (subtitles, captions, descriptions, chapters, or metadata)' ), 'should_preview_update' => false, ), ); foreach ( wp_get_video_extensions() as $video_extension ) { $schema[ $video_extension ] = array( 'type' => 'string', 'default' => '', 'format' => 'uri', /* translators: %s: Video extension. */ 'description' => sprintf( __( 'URL to the %s video source file' ), $video_extension ), ); } return array_merge( $schema, parent::get_instance_schema() ); } /** * Render the media on the frontend. * * @since 4.8.0 * * @param array $instance Widget instance props. */ public function render_media( $instance ) { $instance = array_merge( wp_list_pluck( $this->get_instance_schema(), 'default' ), $instance ); $attachment = null; if ( $this->is_attachment_with_mime_type( $instance['attachment_id'], $this->widget_options['mime_type'] ) ) { $attachment = get_post( $instance['attachment_id'] ); } $src = $instance['url']; if ( $attachment ) { $src = wp_get_attachment_url( $attachment->ID ); } if ( empty( $src ) ) { return; } $youtube_pattern = '#^https?://(?:www\.)?(?:youtube\.com/watch|youtu\.be/)#'; $vimeo_pattern = '#^https?://(.+\.)?vimeo\.com/.*#'; if ( $attachment || preg_match( $youtube_pattern, $src ) || preg_match( $vimeo_pattern, $src ) ) { add_filter( 'wp_video_shortcode', array( $this, 'inject_video_max_width_style' ) ); echo wp_video_shortcode( array_merge( $instance, compact( 'src' ) ), $instance['content'] ); remove_filter( 'wp_video_shortcode', array( $this, 'inject_video_max_width_style' ) ); } else { echo $this->inject_video_max_width_style( wp_oembed_get( $src ) ); } } /** * Inject max-width and remove height for videos too constrained to fit inside sidebars on frontend. * * @since 4.8.0 * * @param string $html Video shortcode HTML output. * @return string HTML Output. */ public function inject_video_max_width_style( $html ) { $html = preg_replace( '/\sheight="\d+"/', '', $html ); $html = preg_replace( '/\swidth="\d+"/', '', $html ); $html = preg_replace( '/(?<=width:)\s*\d+px(?=;?)/', '100%', $html ); return $html; } /** * Enqueue preview scripts. * * These scripts normally are enqueued just-in-time when a video shortcode is used. * In the customizer, however, widgets can be dynamically added and rendered via * selective refresh, and so it is important to unconditionally enqueue them in * case a widget does get added. * * @since 4.8.0 */ public function enqueue_preview_scripts() { /** This filter is documented in wp-includes/media.php */ if ( 'mediaelement' === apply_filters( 'wp_video_shortcode_library', 'mediaelement' ) ) { wp_enqueue_style( 'wp-mediaelement' ); wp_enqueue_script( 'mediaelement-vimeo' ); wp_enqueue_script( 'wp-mediaelement' ); } } /** * Loads the required scripts and styles for the widget control. * * @since 4.8.0 */ public function enqueue_admin_scripts() { parent::enqueue_admin_scripts(); $handle = 'media-video-widget'; wp_enqueue_script( $handle ); $exported_schema = array(); foreach ( $this->get_instance_schema() as $field => $field_schema ) { $exported_schema[ $field ] = wp_array_slice_assoc( $field_schema, array( 'type', 'default', 'enum', 'minimum', 'format', 'media_prop', 'should_preview_update' ) ); } wp_add_inline_script( $handle, sprintf( 'wp.mediaWidgets.modelConstructors[ %s ].prototype.schema = %s;', wp_json_encode( $this->id_base ), wp_json_encode( $exported_schema ) ) ); wp_add_inline_script( $handle, sprintf( ' wp.mediaWidgets.controlConstructors[ %1$s ].prototype.mime_type = %2$s; wp.mediaWidgets.controlConstructors[ %1$s ].prototype.l10n = _.extend( {}, wp.mediaWidgets.controlConstructors[ %1$s ].prototype.l10n, %3$s ); ', wp_json_encode( $this->id_base ), wp_json_encode( $this->widget_options['mime_type'] ), wp_json_encode( $this->l10n ) ) ); } /** * Render form template scripts. * * @since 4.8.0 */ public function render_control_template_scripts() { parent::render_control_template_scripts() ?> <script type="text/html" id="tmpl-wp-media-widget-video-preview"> <# if ( data.error && 'missing_attachment' === data.error ) { #> <?php wp_admin_notice( $this->l10n['missing_attachment'], array( 'type' => 'error', 'additional_classes' => array( 'notice-alt', 'notice-missing-attachment' ), ) ); ?> <# } else if ( data.error && 'unsupported_file_type' === data.error ) { #> <?php wp_admin_notice( $this->l10n['unsupported_file_type'], array( 'type' => 'error', 'additional_classes' => array( 'notice-alt', 'notice-missing-attachment' ), ) ); ?> <# } else if ( data.error ) { #> <?php wp_admin_notice( __( 'Unable to preview media due to an unknown error.' ), array( 'type' => 'error', 'additional_classes' => array( 'notice-alt' ), ) ); ?> <# } else if ( data.is_oembed && data.model.poster ) { #> <a href="{{ data.model.src }}" target="_blank" class="media-widget-video-link"> <img src="{{ data.model.poster }}" /> </a> <# } else if ( data.is_oembed ) { #> <a href="{{ data.model.src }}" target="_blank" class="media-widget-video-link no-poster"> <span class="dashicons dashicons-format-video"></span> </a> <# } else if ( data.model.src ) { #> <?php wp_underscore_video_template(); ?> <# } #> </script> <?php } } error_log 0000644 00000224771 15102442010 0006463 0 ustar 00 [21-Aug-2025 02:30:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [21-Aug-2025 03:56:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [21-Aug-2025 03:56:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [21-Aug-2025 07:20:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [21-Aug-2025 07:21:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [21-Aug-2025 07:28:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [21-Aug-2025 07:28:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [21-Aug-2025 07:28:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [21-Aug-2025 07:28:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [21-Aug-2025 07:28:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [21-Aug-2025 07:28:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [21-Aug-2025 07:29:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [21-Aug-2025 07:29:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [21-Aug-2025 07:29:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [21-Aug-2025 07:29:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [21-Aug-2025 07:29:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [21-Aug-2025 07:29:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [21-Aug-2025 07:30:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [21-Aug-2025 07:30:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [21-Aug-2025 07:30:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [23-Aug-2025 06:11:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [23-Aug-2025 07:41:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [23-Aug-2025 09:39:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [23-Aug-2025 10:24:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [24-Aug-2025 00:13:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [24-Aug-2025 00:13:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [24-Aug-2025 00:13:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [24-Aug-2025 00:13:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [24-Aug-2025 00:13:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [24-Aug-2025 00:13:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [24-Aug-2025 00:13:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [24-Aug-2025 00:13:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [24-Aug-2025 00:13:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [24-Aug-2025 00:14:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [24-Aug-2025 00:14:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [24-Aug-2025 00:14:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [24-Aug-2025 00:14:09 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [24-Aug-2025 00:14:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [24-Aug-2025 00:16:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [24-Aug-2025 09:34:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [11-Oct-2025 07:49:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [25-Oct-2025 08:53:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [27-Oct-2025 17:48:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [27-Oct-2025 17:50:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [27-Oct-2025 17:52:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [27-Oct-2025 17:53:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [27-Oct-2025 17:54:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [27-Oct-2025 17:59:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [27-Oct-2025 18:03:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [27-Oct-2025 18:05:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [27-Oct-2025 18:06:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [27-Oct-2025 18:08:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [27-Oct-2025 18:17:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [27-Oct-2025 18:19:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [27-Oct-2025 18:19:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [27-Oct-2025 18:20:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [27-Oct-2025 18:23:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [27-Oct-2025 18:24:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [27-Oct-2025 18:25:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [27-Oct-2025 18:26:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [27-Oct-2025 18:27:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [27-Oct-2025 18:28:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [27-Oct-2025 18:30:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [27-Oct-2025 18:31:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [27-Oct-2025 18:32:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [27-Oct-2025 18:33:09 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [27-Oct-2025 18:35:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [27-Oct-2025 18:38:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [27-Oct-2025 18:40:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [27-Oct-2025 18:41:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [27-Oct-2025 18:42:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [27-Oct-2025 18:43:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [27-Oct-2025 18:44:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [27-Oct-2025 18:48:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [27-Oct-2025 18:50:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [27-Oct-2025 18:52:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [27-Oct-2025 18:53:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [27-Oct-2025 18:54:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [27-Oct-2025 18:55:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [27-Oct-2025 18:58:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [27-Oct-2025 19:01:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [27-Oct-2025 19:03:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [27-Oct-2025 19:04:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [27-Oct-2025 19:15:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [27-Oct-2025 21:45:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [28-Oct-2025 02:41:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [28-Oct-2025 03:04:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [29-Oct-2025 10:38:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [29-Oct-2025 20:01:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [29-Oct-2025 20:01:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [29-Oct-2025 20:01:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [29-Oct-2025 20:01:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [29-Oct-2025 20:02:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [29-Oct-2025 20:03:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [29-Oct-2025 20:03:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [29-Oct-2025 20:05:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [29-Oct-2025 20:06:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [29-Oct-2025 20:08:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [29-Oct-2025 20:08:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [29-Oct-2025 20:08:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [29-Oct-2025 20:08:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [29-Oct-2025 20:08:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [29-Oct-2025 20:08:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [29-Oct-2025 20:08:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [29-Oct-2025 20:08:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [29-Oct-2025 20:08:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [29-Oct-2025 20:08:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [30-Oct-2025 00:36:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [30-Oct-2025 10:03:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [31-Oct-2025 13:06:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [31-Oct-2025 13:42:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [31-Oct-2025 14:43:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [31-Oct-2025 15:40:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [31-Oct-2025 15:47:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [31-Oct-2025 16:25:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [31-Oct-2025 17:59:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [31-Oct-2025 18:03:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [31-Oct-2025 18:55:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [31-Oct-2025 19:51:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [31-Oct-2025 20:27:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [31-Oct-2025 20:43:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [31-Oct-2025 21:59:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [31-Oct-2025 22:31:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [31-Oct-2025 23:23:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [31-Oct-2025 23:27:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [31-Oct-2025 23:51:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [01-Nov-2025 00:07:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [01-Nov-2025 00:08:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [01-Nov-2025 03:16:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [01-Nov-2025 03:52:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 07:01:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [01-Nov-2025 07:01:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [01-Nov-2025 07:01:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 07:02:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [01-Nov-2025 07:05:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [01-Nov-2025 07:07:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [01-Nov-2025 07:09:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [01-Nov-2025 07:10:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [01-Nov-2025 07:12:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [01-Nov-2025 07:13:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [01-Nov-2025 07:16:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [01-Nov-2025 07:18:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [01-Nov-2025 07:19:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [01-Nov-2025 07:20:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [01-Nov-2025 07:21:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [01-Nov-2025 07:23:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [01-Nov-2025 07:24:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [01-Nov-2025 07:25:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 07:26:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [01-Nov-2025 07:27:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [01-Nov-2025 07:28:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [01-Nov-2025 07:29:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [01-Nov-2025 07:30:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [01-Nov-2025 07:31:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [01-Nov-2025 07:36:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [01-Nov-2025 07:36:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [01-Nov-2025 07:38:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [01-Nov-2025 07:43:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [01-Nov-2025 07:49:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [01-Nov-2025 07:50:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [01-Nov-2025 07:52:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [01-Nov-2025 07:59:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 08:03:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [01-Nov-2025 08:07:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [01-Nov-2025 08:10:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [01-Nov-2025 08:11:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [01-Nov-2025 08:13:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [01-Nov-2025 08:15:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [01-Nov-2025 08:17:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [01-Nov-2025 08:21:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [01-Nov-2025 08:22:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [01-Nov-2025 08:23:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [01-Nov-2025 08:26:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [01-Nov-2025 08:27:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [01-Nov-2025 12:10:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [01-Nov-2025 18:10:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [01-Nov-2025 18:51:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [01-Nov-2025 22:57:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [01-Nov-2025 23:01:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 23:02:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [01-Nov-2025 23:03:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [01-Nov-2025 23:04:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [01-Nov-2025 23:05:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [01-Nov-2025 23:16:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [01-Nov-2025 23:16:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [01-Nov-2025 23:17:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [01-Nov-2025 23:18:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [01-Nov-2025 23:23:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [01-Nov-2025 23:24:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [01-Nov-2025 23:25:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [01-Nov-2025 23:28:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [01-Nov-2025 23:30:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [01-Nov-2025 23:31:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [01-Nov-2025 23:34:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [01-Nov-2025 23:35:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [01-Nov-2025 23:38:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [01-Nov-2025 23:39:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [01-Nov-2025 23:41:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 23:42:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [01-Nov-2025 23:45:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [01-Nov-2025 23:46:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [01-Nov-2025 23:49:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [01-Nov-2025 23:50:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [01-Nov-2025 23:51:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [01-Nov-2025 23:52:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [01-Nov-2025 23:53:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [01-Nov-2025 23:54:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [01-Nov-2025 23:55:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17 [01-Nov-2025 23:56:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [01-Nov-2025 23:57:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [01-Nov-2025 23:58:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [01-Nov-2025 23:59:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [02-Nov-2025 00:00:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [02-Nov-2025 00:01:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [02-Nov-2025 00:02:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [02-Nov-2025 00:03:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [02-Nov-2025 00:10:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [02-Nov-2025 00:30:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [02-Nov-2025 01:39:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [02-Nov-2025 10:47:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [02-Nov-2025 11:19:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 class-wp-widget-pages.php 0000644 00000013130 15102442010 0011347 0 ustar 00 <?php /** * Widget API: WP_Widget_Pages class * * @package WordPress * @subpackage Widgets * @since 4.4.0 */ /** * Core class used to implement a Pages widget. * * @since 2.8.0 * * @see WP_Widget */ class WP_Widget_Pages extends WP_Widget { /** * Sets up a new Pages widget instance. * * @since 2.8.0 */ public function __construct() { $widget_ops = array( 'classname' => 'widget_pages', 'description' => __( 'A list of your site’s Pages.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); parent::__construct( 'pages', __( 'Pages' ), $widget_ops ); } /** * Outputs the content for the current Pages widget instance. * * @since 2.8.0 * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Pages widget instance. */ public function widget( $args, $instance ) { $default_title = __( 'Pages' ); $title = ! empty( $instance['title'] ) ? $instance['title'] : $default_title; /** * Filters the widget title. * * @since 2.6.0 * * @param string $title The widget title. Default 'Pages'. * @param array $instance Array of settings for the current widget. * @param mixed $id_base The widget ID. */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); $sortby = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby']; $exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude']; if ( 'menu_order' === $sortby ) { $sortby = 'menu_order, post_title'; } $output = wp_list_pages( /** * Filters the arguments for the Pages widget. * * @since 2.8.0 * @since 4.9.0 Added the `$instance` parameter. * * @see wp_list_pages() * * @param array $args An array of arguments to retrieve the pages list. * @param array $instance Array of settings for the current widget. */ apply_filters( 'widget_pages_args', array( 'title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude, ), $instance ) ); if ( ! empty( $output ) ) { echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml'; /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */ $format = apply_filters( 'navigation_widgets_format', $format ); if ( 'html5' === $format ) { // The title may be filtered: Strip out HTML and make sure the aria-label is never empty. $title = trim( strip_tags( $title ) ); $aria_label = $title ? $title : $default_title; echo '<nav aria-label="' . esc_attr( $aria_label ) . '">'; } ?> <ul> <?php echo $output; ?> </ul> <?php if ( 'html5' === $format ) { echo '</nav>'; } echo $args['after_widget']; } } /** * Handles updating settings for the current Pages widget instance. * * @since 2.8.0 * * @param array $new_instance New settings for this instance as input by the user via * WP_Widget::form(). * @param array $old_instance Old settings for this instance. * @return array Updated settings to save. */ public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = sanitize_text_field( $new_instance['title'] ); if ( in_array( $new_instance['sortby'], array( 'post_title', 'menu_order', 'ID' ), true ) ) { $instance['sortby'] = $new_instance['sortby']; } else { $instance['sortby'] = 'menu_order'; } $instance['exclude'] = sanitize_text_field( $new_instance['exclude'] ); return $instance; } /** * Outputs the settings form for the Pages widget. * * @since 2.8.0 * * @param array $instance Current settings. */ public function form( $instance ) { // Defaults. $instance = wp_parse_args( (array) $instance, array( 'sortby' => 'post_title', 'title' => '', 'exclude' => '', ) ); ?> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>"><?php _e( 'Sort by:' ); ?></label> <select name="<?php echo esc_attr( $this->get_field_name( 'sortby' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>" class="widefat"> <option value="post_title"<?php selected( $instance['sortby'], 'post_title' ); ?>><?php _e( 'Page title' ); ?></option> <option value="menu_order"<?php selected( $instance['sortby'], 'menu_order' ); ?>><?php _e( 'Page order' ); ?></option> <option value="ID"<?php selected( $instance['sortby'], 'ID' ); ?>><?php _e( 'Page ID' ); ?></option> </select> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>"><?php _e( 'Exclude:' ); ?></label> <input type="text" value="<?php echo esc_attr( $instance['exclude'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'exclude' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>" class="widefat" /> <br /> <small><?php _e( 'Page IDs, separated by commas.' ); ?></small> </p> <?php } } class-wp-widget-tag-cloud.php 0000644 00000015172 15102442010 0012137 0 ustar 00 <?php /** * Widget API: WP_Widget_Tag_Cloud class * * @package WordPress * @subpackage Widgets * @since 4.4.0 */ /** * Core class used to implement a Tag cloud widget. * * @since 2.8.0 * * @see WP_Widget */ class WP_Widget_Tag_Cloud extends WP_Widget { /** * Sets up a new Tag Cloud widget instance. * * @since 2.8.0 */ public function __construct() { $widget_ops = array( 'description' => __( 'A cloud of your most used tags.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); parent::__construct( 'tag_cloud', __( 'Tag Cloud' ), $widget_ops ); } /** * Outputs the content for the current Tag Cloud widget instance. * * @since 2.8.0 * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Tag Cloud widget instance. */ public function widget( $args, $instance ) { $current_taxonomy = $this->_get_current_taxonomy( $instance ); if ( ! empty( $instance['title'] ) ) { $title = $instance['title']; } else { if ( 'post_tag' === $current_taxonomy ) { $title = __( 'Tags' ); } else { $tax = get_taxonomy( $current_taxonomy ); $title = $tax->labels->name; } } $default_title = $title; $show_count = ! empty( $instance['count'] ); $tag_cloud = wp_tag_cloud( /** * Filters the taxonomy used in the Tag Cloud widget. * * @since 2.8.0 * @since 3.0.0 Added taxonomy drop-down. * @since 4.9.0 Added the `$instance` parameter. * * @see wp_tag_cloud() * * @param array $args Args used for the tag cloud widget. * @param array $instance Array of settings for the current widget. */ apply_filters( 'widget_tag_cloud_args', array( 'taxonomy' => $current_taxonomy, 'echo' => false, 'show_count' => $show_count, ), $instance ) ); if ( empty( $tag_cloud ) ) { return; } /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml'; /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */ $format = apply_filters( 'navigation_widgets_format', $format ); if ( 'html5' === $format ) { // The title may be filtered: Strip out HTML and make sure the aria-label is never empty. $title = trim( strip_tags( $title ) ); $aria_label = $title ? $title : $default_title; echo '<nav aria-label="' . esc_attr( $aria_label ) . '">'; } echo '<div class="tagcloud">'; echo $tag_cloud; echo "</div>\n"; if ( 'html5' === $format ) { echo '</nav>'; } echo $args['after_widget']; } /** * Handles updating settings for the current Tag Cloud widget instance. * * @since 2.8.0 * * @param array $new_instance New settings for this instance as input by the user via * WP_Widget::form(). * @param array $old_instance Old settings for this instance. * @return array Settings to save or bool false to cancel saving. */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = sanitize_text_field( $new_instance['title'] ); $instance['count'] = ! empty( $new_instance['count'] ) ? 1 : 0; $instance['taxonomy'] = stripslashes( $new_instance['taxonomy'] ); return $instance; } /** * Outputs the Tag Cloud widget settings form. * * @since 2.8.0 * * @param array $instance Current settings. */ public function form( $instance ) { $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; $count = isset( $instance['count'] ) ? (bool) $instance['count'] : false; ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php $taxonomies = get_taxonomies( array( 'show_tagcloud' => true ), 'object' ); $current_taxonomy = $this->_get_current_taxonomy( $instance ); switch ( count( $taxonomies ) ) { // No tag cloud supporting taxonomies found, display error message. case 0: ?> <input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="" /> <p> <?php _e( 'The tag cloud will not be displayed since there are no taxonomies that support the tag cloud widget.' ); ?> </p> <?php break; // Just a single tag cloud supporting taxonomy found, no need to display a select. case 1: $keys = array_keys( $taxonomies ); $taxonomy = reset( $keys ); ?> <input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="<?php echo esc_attr( $taxonomy ); ?>" /> <?php break; // More than one tag cloud supporting taxonomy found, display a select. default: ?> <p> <label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><?php _e( 'Taxonomy:' ); ?></label> <select class="widefat" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>"> <?php foreach ( $taxonomies as $taxonomy => $tax ) : ?> <option value="<?php echo esc_attr( $taxonomy ); ?>" <?php selected( $taxonomy, $current_taxonomy ); ?>> <?php echo esc_html( $tax->labels->name ); ?> </option> <?php endforeach; ?> </select> </p> <?php } if ( count( $taxonomies ) > 0 ) { ?> <p> <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" <?php checked( $count, true ); ?> /> <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Show tag counts' ); ?></label> </p> <?php } } /** * Retrieves the taxonomy for the current Tag cloud widget instance. * * @since 4.4.0 * * @param array $instance Current settings. * @return string Name of the current taxonomy if set, otherwise 'post_tag'. */ public function _get_current_taxonomy( $instance ) { if ( ! empty( $instance['taxonomy'] ) && taxonomy_exists( $instance['taxonomy'] ) ) { return $instance['taxonomy']; } return 'post_tag'; } } class-wp-widget-block.php 0000644 00000014635 15102442010 0011355 0 ustar 00 <?php /** * Widget API: WP_Widget_Block class * * @package WordPress * @subpackage Widgets * @since 5.8.0 */ /** * Core class used to implement a Block widget. * * @since 5.8.0 * * @see WP_Widget */ class WP_Widget_Block extends WP_Widget { /** * Default instance. * * @since 5.8.0 * @var array */ protected $default_instance = array( 'content' => '', ); /** * Sets up a new Block widget instance. * * @since 5.8.0 */ public function __construct() { $widget_ops = array( 'classname' => 'widget_block', 'description' => __( 'A widget containing a block.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); $control_ops = array( 'width' => 400, 'height' => 350, ); parent::__construct( 'block', __( 'Block' ), $widget_ops, $control_ops ); add_filter( 'is_wide_widget_in_customizer', array( $this, 'set_is_wide_widget_in_customizer' ), 10, 2 ); } /** * Outputs the content for the current Block widget instance. * * @since 5.8.0 * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Block widget instance. */ public function widget( $args, $instance ) { $instance = wp_parse_args( $instance, $this->default_instance ); echo str_replace( 'widget_block', $this->get_dynamic_classname( $instance['content'] ), $args['before_widget'] ); /** * Filters the content of the Block widget before output. * * @since 5.8.0 * * @param string $content The widget content. * @param array $instance Array of settings for the current widget. * @param WP_Widget_Block $widget Current Block widget instance. */ echo apply_filters( 'widget_block_content', $instance['content'], $instance, $this ); echo $args['after_widget']; } /** * Calculates the classname to use in the block widget's container HTML. * * Usually this is set to `$this->widget_options['classname']` by * dynamic_sidebar(). In this case, however, we want to set the classname * dynamically depending on the block contained by this block widget. * * If a block widget contains a block that has an equivalent legacy widget, * we display that legacy widget's class name. This helps with theme * backwards compatibility. * * @since 5.8.0 * * @param string $content The HTML content of the current block widget. * @return string The classname to use in the block widget's container HTML. */ private function get_dynamic_classname( $content ) { $blocks = parse_blocks( $content ); $block_name = isset( $blocks[0] ) ? $blocks[0]['blockName'] : null; switch ( $block_name ) { case 'core/paragraph': $classname = 'widget_block widget_text'; break; case 'core/calendar': $classname = 'widget_block widget_calendar'; break; case 'core/search': $classname = 'widget_block widget_search'; break; case 'core/html': $classname = 'widget_block widget_custom_html'; break; case 'core/archives': $classname = 'widget_block widget_archive'; break; case 'core/latest-posts': $classname = 'widget_block widget_recent_entries'; break; case 'core/latest-comments': $classname = 'widget_block widget_recent_comments'; break; case 'core/tag-cloud': $classname = 'widget_block widget_tag_cloud'; break; case 'core/categories': $classname = 'widget_block widget_categories'; break; case 'core/audio': $classname = 'widget_block widget_media_audio'; break; case 'core/video': $classname = 'widget_block widget_media_video'; break; case 'core/image': $classname = 'widget_block widget_media_image'; break; case 'core/gallery': $classname = 'widget_block widget_media_gallery'; break; case 'core/rss': $classname = 'widget_block widget_rss'; break; default: $classname = 'widget_block'; } /** * The classname used in the block widget's container HTML. * * This can be set according to the name of the block contained by the block widget. * * @since 5.8.0 * * @param string $classname The classname to be used in the block widget's container HTML, * e.g. 'widget_block widget_text'. * @param string $block_name The name of the block contained by the block widget, * e.g. 'core/paragraph'. */ return apply_filters( 'widget_block_dynamic_classname', $classname, $block_name ); } /** * Handles updating settings for the current Block widget instance. * * @since 5.8.0 * @param array $new_instance New settings for this instance as input by the user via * WP_Widget::form(). * @param array $old_instance Old settings for this instance. * @return array Settings to save or bool false to cancel saving. */ public function update( $new_instance, $old_instance ) { $instance = array_merge( $this->default_instance, $old_instance ); if ( current_user_can( 'unfiltered_html' ) ) { $instance['content'] = $new_instance['content']; } else { $instance['content'] = wp_kses_post( $new_instance['content'] ); } return $instance; } /** * Outputs the Block widget settings form. * * @since 5.8.0 * * @see WP_Widget_Custom_HTML::render_control_template_scripts() * * @param array $instance Current instance. */ public function form( $instance ) { $instance = wp_parse_args( (array) $instance, $this->default_instance ); ?> <p> <label for="<?php echo $this->get_field_id( 'content' ); ?>"> <?php /* translators: HTML code of the block, not an option that blocks HTML. */ _e( 'Block HTML:' ); ?> </label> <textarea id="<?php echo $this->get_field_id( 'content' ); ?>" name="<?php echo $this->get_field_name( 'content' ); ?>" rows="6" cols="50" class="widefat code"><?php echo esc_textarea( $instance['content'] ); ?></textarea> </p> <?php } /** * Makes sure no block widget is considered to be wide. * * @since 5.8.0 * * @param bool $is_wide Whether the widget is considered wide. * @param string $widget_id Widget ID. * @return bool Updated `is_wide` value. */ public function set_is_wide_widget_in_customizer( $is_wide, $widget_id ) { if ( str_starts_with( $widget_id, 'block-' ) ) { return false; } return $is_wide; } } class-wp-widget-media.php 0000644 00000036007 15102442010 0011337 0 ustar 00 <?php /** * Widget API: WP_Media_Widget class * * @package WordPress * @subpackage Widgets * @since 4.8.0 */ /** * Core class that implements a media widget. * * @since 4.8.0 * * @see WP_Widget */ abstract class WP_Widget_Media extends WP_Widget { /** * Translation labels. * * @since 4.8.0 * @var array */ public $l10n = array( 'add_to_widget' => '', 'replace_media' => '', 'edit_media' => '', 'media_library_state_multi' => '', 'media_library_state_single' => '', 'missing_attachment' => '', 'no_media_selected' => '', 'add_media' => '', ); /** * Whether or not the widget has been registered yet. * * @since 4.8.1 * @var bool */ protected $registered = false; /** * The default widget description. * * @since 6.0.0 * @var string */ protected static $default_description = ''; /** * The default localized strings used by the widget. * * @since 6.0.0 * @var string[] */ protected static $l10n_defaults = array(); /** * Constructor. * * @since 4.8.0 * * @param string $id_base Base ID for the widget, lowercase and unique. * @param string $name Name for the widget displayed on the configuration page. * @param array $widget_options Optional. Widget options. See wp_register_sidebar_widget() for * information on accepted arguments. Default empty array. * @param array $control_options Optional. Widget control options. See wp_register_widget_control() * for information on accepted arguments. Default empty array. */ public function __construct( $id_base, $name, $widget_options = array(), $control_options = array() ) { $widget_opts = wp_parse_args( $widget_options, array( 'description' => self::get_default_description(), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, 'mime_type' => '', ) ); $control_opts = wp_parse_args( $control_options, array() ); $this->l10n = array_merge( self::get_l10n_defaults(), array_filter( $this->l10n ) ); parent::__construct( $id_base, $name, $widget_opts, $control_opts ); } /** * Add hooks while registering all widget instances of this widget class. * * @since 4.8.0 * * @param int $number Optional. The unique order number of this widget instance * compared to other instances of the same class. Default -1. */ public function _register_one( $number = -1 ) { parent::_register_one( $number ); if ( $this->registered ) { return; } $this->registered = true; /* * Note that the widgets component in the customizer will also do * the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts(). */ add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) ); if ( $this->is_preview() ) { add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_preview_scripts' ) ); } /* * Note that the widgets component in the customizer will also do * the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts(). */ add_action( 'admin_footer-widgets.php', array( $this, 'render_control_template_scripts' ) ); add_filter( 'display_media_states', array( $this, 'display_media_state' ), 10, 2 ); } /** * Get schema for properties of a widget instance (item). * * @since 4.8.0 * * @see WP_REST_Controller::get_item_schema() * @see WP_REST_Controller::get_additional_fields() * @link https://core.trac.wordpress.org/ticket/35574 * * @return array Schema for properties. */ public function get_instance_schema() { $schema = array( 'attachment_id' => array( 'type' => 'integer', 'default' => 0, 'minimum' => 0, 'description' => __( 'Attachment post ID' ), 'media_prop' => 'id', ), 'url' => array( 'type' => 'string', 'default' => '', 'format' => 'uri', 'description' => __( 'URL to the media file' ), ), 'title' => array( 'type' => 'string', 'default' => '', 'sanitize_callback' => 'sanitize_text_field', 'description' => __( 'Title for the widget' ), 'should_preview_update' => false, ), ); /** * Filters the media widget instance schema to add additional properties. * * @since 4.9.0 * * @param array $schema Instance schema. * @param WP_Widget_Media $widget Widget object. */ $schema = apply_filters( "widget_{$this->id_base}_instance_schema", $schema, $this ); return $schema; } /** * Determine if the supplied attachment is for a valid attachment post with the specified MIME type. * * @since 4.8.0 * * @param int|WP_Post $attachment Attachment post ID or object. * @param string $mime_type MIME type. * @return bool Is matching MIME type. */ public function is_attachment_with_mime_type( $attachment, $mime_type ) { if ( empty( $attachment ) ) { return false; } $attachment = get_post( $attachment ); if ( ! $attachment ) { return false; } if ( 'attachment' !== $attachment->post_type ) { return false; } return wp_attachment_is( $mime_type, $attachment ); } /** * Sanitize a token list string, such as used in HTML rel and class attributes. * * @since 4.8.0 * * @link http://w3c.github.io/html/infrastructure.html#space-separated-tokens * @link https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList * @param string|array $tokens List of tokens separated by spaces, or an array of tokens. * @return string Sanitized token string list. */ public function sanitize_token_list( $tokens ) { if ( is_string( $tokens ) ) { $tokens = preg_split( '/\s+/', trim( $tokens ) ); } $tokens = array_map( 'sanitize_html_class', $tokens ); $tokens = array_filter( $tokens ); return implode( ' ', $tokens ); } /** * Displays the widget on the front-end. * * @since 4.8.0 * * @see WP_Widget::widget() * * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget. * @param array $instance Saved setting from the database. */ public function widget( $args, $instance ) { $instance = wp_parse_args( $instance, wp_list_pluck( $this->get_instance_schema(), 'default' ) ); // Short-circuit if no media is selected. if ( ! $this->has_content( $instance ) ) { return; } echo $args['before_widget']; /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } /** * Filters the media widget instance prior to rendering the media. * * @since 4.8.0 * * @param array $instance Instance data. * @param array $args Widget args. * @param WP_Widget_Media $widget Widget object. */ $instance = apply_filters( "widget_{$this->id_base}_instance", $instance, $args, $this ); $this->render_media( $instance ); echo $args['after_widget']; } /** * Sanitizes the widget form values as they are saved. * * @since 4.8.0 * @since 5.9.0 Renamed `$instance` to `$old_instance` to match parent class * for PHP 8 named parameter support. * * @see WP_Widget::update() * @see WP_REST_Request::has_valid_params() * @see WP_REST_Request::sanitize_params() * * @param array $new_instance Values just sent to be saved. * @param array $old_instance Previously saved values from database. * @return array Updated safe values to be saved. */ public function update( $new_instance, $old_instance ) { $schema = $this->get_instance_schema(); foreach ( $schema as $field => $field_schema ) { if ( ! array_key_exists( $field, $new_instance ) ) { continue; } $value = $new_instance[ $field ]; /* * Workaround for rest_validate_value_from_schema() due to the fact that * rest_is_boolean( '' ) === false, while rest_is_boolean( '1' ) is true. */ if ( 'boolean' === $field_schema['type'] && '' === $value ) { $value = false; } if ( true !== rest_validate_value_from_schema( $value, $field_schema, $field ) ) { continue; } $value = rest_sanitize_value_from_schema( $value, $field_schema ); // @codeCoverageIgnoreStart if ( is_wp_error( $value ) ) { continue; // Handle case when rest_sanitize_value_from_schema() ever returns WP_Error as its phpdoc @return tag indicates. } // @codeCoverageIgnoreEnd if ( isset( $field_schema['sanitize_callback'] ) ) { $value = call_user_func( $field_schema['sanitize_callback'], $value ); } if ( is_wp_error( $value ) ) { continue; } $old_instance[ $field ] = $value; } return $old_instance; } /** * Render the media on the frontend. * * @since 4.8.0 * * @param array $instance Widget instance props. */ abstract public function render_media( $instance ); /** * Outputs the settings update form. * * Note that the widget UI itself is rendered with JavaScript via `MediaWidgetControl#render()`. * * @since 4.8.0 * * @see \WP_Widget_Media::render_control_template_scripts() Where the JS template is located. * * @param array $instance Current settings. */ final public function form( $instance ) { $instance_schema = $this->get_instance_schema(); $instance = wp_array_slice_assoc( wp_parse_args( (array) $instance, wp_list_pluck( $instance_schema, 'default' ) ), array_keys( $instance_schema ) ); foreach ( $instance as $name => $value ) : ?> <input type="hidden" data-property="<?php echo esc_attr( $name ); ?>" class="media-widget-instance-property" name="<?php echo esc_attr( $this->get_field_name( $name ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( $name ) ); // Needed specifically by wpWidgets.appendTitle(). ?>" value="<?php echo esc_attr( is_array( $value ) ? implode( ',', $value ) : (string) $value ); ?>" /> <?php endforeach; } /** * Filters the default media display states for items in the Media list table. * * @since 4.8.0 * * @param array $states An array of media states. * @param WP_Post $post The current attachment object. * @return array */ public function display_media_state( $states, $post = null ) { if ( ! $post ) { $post = get_post(); } // Count how many times this attachment is used in widgets. $use_count = 0; foreach ( $this->get_settings() as $instance ) { if ( isset( $instance['attachment_id'] ) && $instance['attachment_id'] === $post->ID ) { ++$use_count; } } if ( 1 === $use_count ) { $states[] = $this->l10n['media_library_state_single']; } elseif ( $use_count > 0 ) { $states[] = sprintf( translate_nooped_plural( $this->l10n['media_library_state_multi'], $use_count ), number_format_i18n( $use_count ) ); } return $states; } /** * Enqueue preview scripts. * * These scripts normally are enqueued just-in-time when a widget is rendered. * In the customizer, however, widgets can be dynamically added and rendered via * selective refresh, and so it is important to unconditionally enqueue them in * case a widget does get added. * * @since 4.8.0 */ public function enqueue_preview_scripts() {} /** * Loads the required scripts and styles for the widget control. * * @since 4.8.0 */ public function enqueue_admin_scripts() { wp_enqueue_media(); wp_enqueue_script( 'media-widgets' ); } /** * Render form template scripts. * * @since 4.8.0 */ public function render_control_template_scripts() { ?> <script type="text/html" id="tmpl-widget-media-<?php echo esc_attr( $this->id_base ); ?>-control"> <# var elementIdPrefix = 'el' + String( Math.random() ) + '_' #> <p> <label for="{{ elementIdPrefix }}title"><?php esc_html_e( 'Title:' ); ?></label> <input id="{{ elementIdPrefix }}title" type="text" class="widefat title"> </p> <div class="media-widget-preview <?php echo esc_attr( $this->id_base ); ?>"> <div class="attachment-media-view"> <button type="button" class="select-media button-add-media not-selected"> <?php echo esc_html( $this->l10n['add_media'] ); ?> </button> </div> </div> <p class="media-widget-buttons"> <button type="button" class="button edit-media selected"> <?php echo esc_html( $this->l10n['edit_media'] ); ?> </button> <?php if ( ! empty( $this->l10n['replace_media'] ) ) : ?> <button type="button" class="button change-media select-media selected"> <?php echo esc_html( $this->l10n['replace_media'] ); ?> </button> <?php endif; ?> </p> <div class="media-widget-fields"> </div> </script> <?php } /** * Resets the cache for the default labels. * * @since 6.0.0 */ public static function reset_default_labels() { self::$default_description = ''; self::$l10n_defaults = array(); } /** * Whether the widget has content to show. * * @since 4.8.0 * * @param array $instance Widget instance props. * @return bool Whether widget has content. */ protected function has_content( $instance ) { return ( $instance['attachment_id'] && 'attachment' === get_post_type( $instance['attachment_id'] ) ) || $instance['url']; } /** * Returns the default description of the widget. * * @since 6.0.0 * * @return string */ protected static function get_default_description() { if ( self::$default_description ) { return self::$default_description; } self::$default_description = __( 'A media item.' ); return self::$default_description; } /** * Returns the default localized strings used by the widget. * * @since 6.0.0 * * @return (string|array)[] */ protected static function get_l10n_defaults() { if ( ! empty( self::$l10n_defaults ) ) { return self::$l10n_defaults; } self::$l10n_defaults = array( 'no_media_selected' => __( 'No media selected' ), 'add_media' => _x( 'Add Media', 'label for button in the media widget' ), 'replace_media' => _x( 'Replace Media', 'label for button in the media widget; should preferably not be longer than ~13 characters long' ), 'edit_media' => _x( 'Edit Media', 'label for button in the media widget; should preferably not be longer than ~13 characters long' ), 'add_to_widget' => __( 'Add to Widget' ), 'missing_attachment' => sprintf( /* translators: %s: URL to media library. */ __( 'That file cannot be found. Check your <a href="%s">media library</a> and make sure it was not deleted.' ), esc_url( admin_url( 'upload.php' ) ) ), /* translators: %d: Widget count. */ 'media_library_state_multi' => _n_noop( 'Media Widget (%d)', 'Media Widget (%d)' ), 'media_library_state_single' => __( 'Media Widget' ), 'unsupported_file_type' => __( 'Looks like this is not the correct kind of file. Please link to an appropriate file instead.' ), ); return self::$l10n_defaults; } } class-wp-widget-search.php 0000644 00000005244 15102442010 0011524 0 ustar 00 <?php /** * Widget API: WP_Widget_Search class * * @package WordPress * @subpackage Widgets * @since 4.4.0 */ /** * Core class used to implement a Search widget. * * @since 2.8.0 * * @see WP_Widget */ class WP_Widget_Search extends WP_Widget { /** * Sets up a new Search widget instance. * * @since 2.8.0 */ public function __construct() { $widget_ops = array( 'classname' => 'widget_search', 'description' => __( 'A search form for your site.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); parent::__construct( 'search', _x( 'Search', 'Search widget' ), $widget_ops ); } /** * Outputs the content for the current Search widget instance. * * @since 2.8.0 * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Search widget instance. */ public function widget( $args, $instance ) { $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } // Use active theme search form if it exists. get_search_form(); echo $args['after_widget']; } /** * Outputs the settings form for the Search widget. * * @since 2.8.0 * * @param array $instance Current settings. */ public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) ); $title = $instance['title']; ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php } /** * Handles updating settings for the current Search widget instance. * * @since 2.8.0 * * @param array $new_instance New settings for this instance as input by the user via * WP_Widget::form(). * @param array $old_instance Old settings for this instance. * @return array Updated settings. */ public function update( $new_instance, $old_instance ) { $instance = $old_instance; $new_instance = wp_parse_args( (array) $new_instance, array( 'title' => '' ) ); $instance['title'] = sanitize_text_field( $new_instance['title'] ); return $instance; } } 14338/class-wp-http-response.php.tar 0000644 00000011000 15102442010 0013043 0 ustar 00 home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-http-response.php 0000644 00000005641 15102420321 0026423 0 ustar 00 <?php /** * HTTP API: WP_HTTP_Response class * * @package WordPress * @subpackage HTTP * @since 4.4.0 */ /** * Core class used to prepare HTTP responses. * * @since 4.4.0 */ #[AllowDynamicProperties] class WP_HTTP_Response { /** * Response data. * * @since 4.4.0 * @var mixed */ public $data; /** * Response headers. * * @since 4.4.0 * @var array */ public $headers; /** * Response status. * * @since 4.4.0 * @var int */ public $status; /** * Constructor. * * @since 4.4.0 * * @param mixed $data Response data. Default null. * @param int $status Optional. HTTP status code. Default 200. * @param array $headers Optional. HTTP header map. Default empty array. */ public function __construct( $data = null, $status = 200, $headers = array() ) { $this->set_data( $data ); $this->set_status( $status ); $this->set_headers( $headers ); } /** * Retrieves headers associated with the response. * * @since 4.4.0 * * @return array Map of header name to header value. */ public function get_headers() { return $this->headers; } /** * Sets all header values. * * @since 4.4.0 * * @param array $headers Map of header name to header value. */ public function set_headers( $headers ) { $this->headers = $headers; } /** * Sets a single HTTP header. * * @since 4.4.0 * * @param string $key Header name. * @param string $value Header value. * @param bool $replace Optional. Whether to replace an existing header of the same name. * Default true. */ public function header( $key, $value, $replace = true ) { if ( $replace || ! isset( $this->headers[ $key ] ) ) { $this->headers[ $key ] = $value; } else { $this->headers[ $key ] .= ', ' . $value; } } /** * Retrieves the HTTP return code for the response. * * @since 4.4.0 * * @return int The 3-digit HTTP status code. */ public function get_status() { return $this->status; } /** * Sets the 3-digit HTTP status code. * * @since 4.4.0 * * @param int $code HTTP status. */ public function set_status( $code ) { $this->status = absint( $code ); } /** * Retrieves the response data. * * @since 4.4.0 * * @return mixed Response data. */ public function get_data() { return $this->data; } /** * Sets the response data. * * @since 4.4.0 * * @param mixed $data Response data. */ public function set_data( $data ) { $this->data = $data; } /** * Retrieves the response data for JSON serialization. * * It is expected that in most implementations, this will return the same as get_data(), * however this may be different if you want to do custom JSON data handling. * * @since 4.4.0 * * @return mixed Any JSON-serializable value. */ public function jsonSerialize() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid return $this->get_data(); } } 14338/ms-settings.php.tar 0000644 00000014000 15102442010 0010761 0 ustar 00 home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ms-settings.php 0000644 00000010145 15102421546 0024343 0 ustar 00 <?php /** * Used to set up and fix common variables and include * the Multisite procedural and class library. * * Allows for some configuration in wp-config.php (see ms-default-constants.php) * * @package WordPress * @subpackage Multisite * @since 3.0.0 */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } /** * Objects representing the current network and current site. * * These may be populated through a custom `sunrise.php`. If not, then this * file will attempt to populate them based on the current request. * * @global WP_Network $current_site The current network. * @global object $current_blog The current site. * @global string $domain Deprecated. The domain of the site found on load. * Use `get_site()->domain` instead. * @global string $path Deprecated. The path of the site found on load. * Use `get_site()->path` instead. * @global int $site_id Deprecated. The ID of the network found on load. * Use `get_current_network_id()` instead. * @global bool $public Deprecated. Whether the site found on load is public. * Use `get_site()->public` instead. * * @since 3.0.0 */ global $current_site, $current_blog, $domain, $path, $site_id, $public; /** WP_Network class */ require_once ABSPATH . WPINC . '/class-wp-network.php'; /** WP_Site class */ require_once ABSPATH . WPINC . '/class-wp-site.php'; /** Multisite loader */ require_once ABSPATH . WPINC . '/ms-load.php'; /** Default Multisite constants */ require_once ABSPATH . WPINC . '/ms-default-constants.php'; if ( defined( 'SUNRISE' ) ) { include_once WP_CONTENT_DIR . '/sunrise.php'; } /** Check for and define SUBDOMAIN_INSTALL and the deprecated VHOST constant. */ ms_subdomain_constants(); // This block will process a request if the current network or current site objects // have not been populated in the global scope through something like `sunrise.php`. if ( ! isset( $current_site ) || ! isset( $current_blog ) ) { $domain = strtolower( stripslashes( $_SERVER['HTTP_HOST'] ) ); if ( str_ends_with( $domain, ':80' ) ) { $domain = substr( $domain, 0, -3 ); $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -3 ); } elseif ( str_ends_with( $domain, ':443' ) ) { $domain = substr( $domain, 0, -4 ); $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -4 ); } $path = stripslashes( $_SERVER['REQUEST_URI'] ); if ( is_admin() ) { $path = preg_replace( '#(.*)/wp-admin/.*#', '$1/', $path ); } list( $path ) = explode( '?', $path ); $bootstrap_result = ms_load_current_site_and_network( $domain, $path, is_subdomain_install() ); if ( true === $bootstrap_result ) { // `$current_blog` and `$current_site are now populated. } elseif ( false === $bootstrap_result ) { ms_not_installed( $domain, $path ); } else { header( 'Location: ' . $bootstrap_result ); exit; } unset( $bootstrap_result ); $blog_id = $current_blog->blog_id; $public = $current_blog->public; if ( empty( $current_blog->site_id ) ) { // This dates to [MU134] and shouldn't be relevant anymore, // but it could be possible for arguments passed to insert_blog() etc. $current_blog->site_id = 1; } $site_id = $current_blog->site_id; wp_load_core_site_options( $site_id ); } $wpdb->set_prefix( $table_prefix, false ); // $table_prefix can be set in sunrise.php. $wpdb->set_blog_id( $current_blog->blog_id, $current_blog->site_id ); $table_prefix = $wpdb->get_blog_prefix(); $_wp_switched_stack = array(); $switched = false; // Need to init cache again after blog_id is set. wp_start_object_cache(); if ( ! $current_site instanceof WP_Network ) { $current_site = new WP_Network( $current_site ); } if ( ! $current_blog instanceof WP_Site ) { $current_blog = new WP_Site( $current_blog ); } // Define upload directory constants. ms_upload_constants(); /** * Fires after the current site and network have been detected and loaded * in multisite's bootstrap. * * @since 4.6.0 */ do_action( 'ms_loaded' ); 14338/latest-posts.php.tar 0000644 00000024000 15102442010 0011147 0 ustar 00 home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/latest-posts.php 0000644 00000020536 15102424342 0026007 0 ustar 00 <?php /** * Server-side rendering of the `core/latest-posts` block. * * @package WordPress */ /** * The excerpt length set by the Latest Posts core block * set at render time and used by the block itself. * * @var int */ global $block_core_latest_posts_excerpt_length; $block_core_latest_posts_excerpt_length = 0; /** * Callback for the excerpt_length filter used by * the Latest Posts block at render time. * * @since 5.4.0 * * @return int Returns the global $block_core_latest_posts_excerpt_length variable * to allow the excerpt_length filter respect the Latest Block setting. */ function block_core_latest_posts_get_excerpt_length() { global $block_core_latest_posts_excerpt_length; return $block_core_latest_posts_excerpt_length; } /** * Renders the `core/latest-posts` block on server. * * @since 5.0.0 * * @param array $attributes The block attributes. * * @return string Returns the post content with latest posts added. */ function render_block_core_latest_posts( $attributes ) { global $post, $block_core_latest_posts_excerpt_length; $args = array( 'posts_per_page' => $attributes['postsToShow'], 'post_status' => 'publish', 'order' => $attributes['order'], 'orderby' => $attributes['orderBy'], 'ignore_sticky_posts' => true, 'no_found_rows' => true, ); $block_core_latest_posts_excerpt_length = $attributes['excerptLength']; add_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 ); if ( ! empty( $attributes['categories'] ) ) { $args['category__in'] = array_column( $attributes['categories'], 'id' ); } if ( isset( $attributes['selectedAuthor'] ) ) { $args['author'] = $attributes['selectedAuthor']; } $query = new WP_Query(); $recent_posts = $query->query( $args ); if ( isset( $attributes['displayFeaturedImage'] ) && $attributes['displayFeaturedImage'] ) { update_post_thumbnail_cache( $query ); } $list_items_markup = ''; foreach ( $recent_posts as $post ) { $post_link = esc_url( get_permalink( $post ) ); $title = get_the_title( $post ); if ( ! $title ) { $title = __( '(no title)' ); } $list_items_markup .= '<li>'; if ( $attributes['displayFeaturedImage'] && has_post_thumbnail( $post ) ) { $image_style = ''; if ( isset( $attributes['featuredImageSizeWidth'] ) ) { $image_style .= sprintf( 'max-width:%spx;', $attributes['featuredImageSizeWidth'] ); } if ( isset( $attributes['featuredImageSizeHeight'] ) ) { $image_style .= sprintf( 'max-height:%spx;', $attributes['featuredImageSizeHeight'] ); } $image_classes = 'wp-block-latest-posts__featured-image'; if ( isset( $attributes['featuredImageAlign'] ) ) { $image_classes .= ' align' . $attributes['featuredImageAlign']; } $featured_image = get_the_post_thumbnail( $post, $attributes['featuredImageSizeSlug'], array( 'style' => esc_attr( $image_style ), ) ); if ( $attributes['addLinkToFeaturedImage'] ) { $featured_image = sprintf( '<a href="%1$s" aria-label="%2$s">%3$s</a>', esc_url( $post_link ), esc_attr( $title ), $featured_image ); } $list_items_markup .= sprintf( '<div class="%1$s">%2$s</div>', esc_attr( $image_classes ), $featured_image ); } $list_items_markup .= sprintf( '<a class="wp-block-latest-posts__post-title" href="%1$s">%2$s</a>', esc_url( $post_link ), $title ); if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) { $author_display_name = get_the_author_meta( 'display_name', $post->post_author ); /* translators: byline. %s: author. */ $byline = sprintf( __( 'by %s' ), $author_display_name ); if ( ! empty( $author_display_name ) ) { $list_items_markup .= sprintf( '<div class="wp-block-latest-posts__post-author">%1$s</div>', $byline ); } } if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) { $list_items_markup .= sprintf( '<time datetime="%1$s" class="wp-block-latest-posts__post-date">%2$s</time>', esc_attr( get_the_date( 'c', $post ) ), get_the_date( '', $post ) ); } if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent'] && isset( $attributes['displayPostContentRadio'] ) && 'excerpt' === $attributes['displayPostContentRadio'] ) { $trimmed_excerpt = get_the_excerpt( $post ); /* * Adds a "Read more" link with screen reader text. * […] is the default excerpt ending from wp_trim_excerpt() in Core. */ if ( str_ends_with( $trimmed_excerpt, ' […]' ) ) { /** This filter is documented in wp-includes/formatting.php */ $excerpt_length = (int) apply_filters( 'excerpt_length', $block_core_latest_posts_excerpt_length ); if ( $excerpt_length <= $block_core_latest_posts_excerpt_length ) { $trimmed_excerpt = substr( $trimmed_excerpt, 0, -11 ); $trimmed_excerpt .= sprintf( /* translators: 1: A URL to a post, 2: Hidden accessibility text: Post title */ __( '… <a class="wp-block-latest-posts__read-more" href="%1$s" rel="noopener noreferrer">Read more<span class="screen-reader-text">: %2$s</span></a>' ), esc_url( $post_link ), esc_html( $title ) ); } } if ( post_password_required( $post ) ) { $trimmed_excerpt = __( 'This content is password protected.' ); } $list_items_markup .= sprintf( '<div class="wp-block-latest-posts__post-excerpt">%1$s</div>', $trimmed_excerpt ); } if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent'] && isset( $attributes['displayPostContentRadio'] ) && 'full_post' === $attributes['displayPostContentRadio'] ) { $post_content = html_entity_decode( $post->post_content, ENT_QUOTES, get_option( 'blog_charset' ) ); if ( post_password_required( $post ) ) { $post_content = __( 'This content is password protected.' ); } $list_items_markup .= sprintf( '<div class="wp-block-latest-posts__post-full-content">%1$s</div>', wp_kses_post( $post_content ) ); } $list_items_markup .= "</li>\n"; } remove_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 ); $classes = array( 'wp-block-latest-posts__list' ); if ( isset( $attributes['postLayout'] ) && 'grid' === $attributes['postLayout'] ) { $classes[] = 'is-grid'; } if ( isset( $attributes['columns'] ) && 'grid' === $attributes['postLayout'] ) { $classes[] = 'columns-' . $attributes['columns']; } if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) { $classes[] = 'has-dates'; } if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) { $classes[] = 'has-author'; } if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { $classes[] = 'has-link-color'; } $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); return sprintf( '<ul %1$s>%2$s</ul>', $wrapper_attributes, $list_items_markup ); } /** * Registers the `core/latest-posts` block on server. * * @since 5.0.0 */ function register_block_core_latest_posts() { register_block_type_from_metadata( __DIR__ . '/latest-posts', array( 'render_callback' => 'render_block_core_latest_posts', ) ); } add_action( 'init', 'register_block_core_latest_posts' ); /** * Handles outdated versions of the `core/latest-posts` block by converting * attribute `categories` from a numeric string to an array with key `id`. * * This is done to accommodate the changes introduced in #20781 that sought to * add support for multiple categories to the block. However, given that this * block is dynamic, the usual provisions for block migration are insufficient, * as they only act when a block is loaded in the editor. * * TODO: Remove when and if the bottom client-side deprecation for this block * is removed. * * @since 5.5.0 * * @param array $block A single parsed block object. * * @return array The migrated block object. */ function block_core_latest_posts_migrate_categories( $block ) { if ( 'core/latest-posts' === $block['blockName'] && ! empty( $block['attrs']['categories'] ) && is_string( $block['attrs']['categories'] ) ) { $block['attrs']['categories'] = array( array( 'id' => absint( $block['attrs']['categories'] ) ), ); } return $block; } add_filter( 'render_block_data', 'block_core_latest_posts_migrate_categories' ); 14338/DB.php.tar 0000644 00000016000 15102442010 0006773 0 ustar 00 home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php 0000644 00000012676 15102433525 0026047 0 ustar 00 <?php /** * SimplePie * * A PHP-Based RSS and Atom Feed Framework. * Takes the hard work out of managing a complete RSS/Atom solution. * * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * * Neither the name of the SimplePie Team nor the names of its contributors may be used * to endorse or promote products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package SimplePie * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue * @author Ryan Parman * @author Sam Sneddon * @author Ryan McCue * @link http://simplepie.org/ SimplePie * @license http://www.opensource.org/licenses/bsd-license.php BSD License */ namespace SimplePie\Cache; /** * Base class for database-based caches * * @package SimplePie * @subpackage Caching * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead */ abstract class DB implements Base { /** * Helper for database conversion * * Converts a given {@see SimplePie} object into data to be stored * * @param \SimplePie\SimplePie $data * @return array First item is the serialized data for storage, second item is the unique ID for this item */ protected static function prepare_simplepie_object_for_cache($data) { $items = $data->get_items(); $items_by_id = []; if (!empty($items)) { foreach ($items as $item) { $items_by_id[$item->get_id()] = $item; } if (count($items_by_id) !== count($items)) { $items_by_id = []; foreach ($items as $item) { $items_by_id[$item->get_id(true)] = $item; } } if (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) { $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0]; } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) { $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0]; } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) { $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0]; } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0])) { $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0]; } else { $channel = null; } if ($channel !== null) { if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry'])) { unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry']); } if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry'])) { unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry']); } if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item'])) { unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item']); } if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item'])) { unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item']); } if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item'])) { unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item']); } } if (isset($data->data['items'])) { unset($data->data['items']); } if (isset($data->data['ordered_items'])) { unset($data->data['ordered_items']); } } return [serialize($data->data), $items_by_id]; } } class_alias('SimplePie\Cache\DB', 'SimplePie_Cache_DB'); 14338/media.tar.gz 0000644 00000006221 15102442010 0007422 0 ustar 00 � �[ \W!Q��"o�T�r� J�^`7@�Э+(j��@�� e��U�`�*(-*��"�V�Z�ںo&^k���j��\�|��%��{���/�HI��<b1ԍ@h�|����Fa(N�A`���(F��R�����ƽz!�|f��7j v�^"?�E��o ֶ3�σ��ϴY�>T�TG�)++kt� �z ���Kc5{P���:kLځ�<�5��{��/:eJP^�>vÍG'O(�\��>���J�����i��my���v3lo|�6H�7��`��MU%ۍFŌ�['�s�F���+���n��k��ҵgf��dR�83������6�D��{� L��]�KV�2�v����}����ǏA��p����9����Rn���I[�=�wy���������D� Z,����(����t�#��?C1���Z�x�p\�,"�Y U(�cccb �ȨŎ8x��C džIRg)�Ґ��R���&�2,$�-2�Y��(��`�Q&�9���� ),qL7�NR�@��X���$��DE�D0TJ ty8��]f"PX�J��3�O���� ,4�$��TߖШޫ�!��;�'"������؇4�U��$$48F�}�g��q��T�m�W�?�ɮ�Q��ҐD�c�C"�9��j�N�k]������ɳE|����#n�վ�ij���~��ͽ�Ԃ+C��ʙ����9d }n+u�)�*4D�+�f)]o9B���*�1mJ�.��,�ަ#s��ڮ�m�[�a�yE_l�Hp�[�7S�w�a���n� �t�O�?A�:�k�C��9}�ǀ��S����gdd�[�.��Դ��wtt��}Ǡ�Z�=l� �h>W�w����p�34����_���Ǜ��)̳�q]����>wS4���\��e-�2��u �� z䐭#� ��3}6��\>���߶�t�o���ڹ�N��]�m(���L��C�z�a�,�ŵ�w�X_��7O!<`=)V>h�9�˷�Z�ܟds���@�p���F�-���QMJp�X���)��O�@�����Z���Ǟ\�'l�9V?��&�(�>KkQy�������|S8$-��y_��?�)�m��U��`�ā ��NF�[�SGޯ߽mhr*$6��-[�\R?�䎯��Z��A�|���7:�vB�#4�On:�e6DH���D� �q.��s�~�|�h����n��5i�%�m[�>�X��ga�g�\?zV�X�y���:֘(�k����2����VVȱ/���+HquQ��u����`Iҵ��ښn��]ep0�oW��Ј��h8�{C��~�B�6�n�X��c�z�@U��}��6s��'���B2���mtk��;G��Rf�fSm�Z��v�~�~%n�Ϫ����^KC�>$�귶��m�E����fý=����mI�� �H�"�u��G5�?�u�_���\I�b&f��h�f�X�``!��F8�0�4狐b� hF��� ��!� ��"��8�!!X��ӂq�xRxt'��bT�-���1 J�S0�O��z��@�tzC��{��$Ek���m�w�c4���h@=��P�\e�N��U6:�q�f�I�b��3���A!��/8������2G����{$[�+|s&#�"!Q�b;�Ii��at��z��\f�&-��ғ�Q䩁;���BTI��>�# �=S�|:��P.@���G��(�,��A�ꋗ9�`�,��ט�,��w���F��`�N�k������1'� :ğ����R��9���}���?�8��LF `��h=� )���������1�����9����V�+�ϒ�0��g��V���%����w�U���o�~r���o��%(B�5�Ϣ�F#��� J�-�������<�x�����h��[F�+��g0�ύv�4�� �45F��9��V٬j�+�P*r���V��L1]��اO��~��r��H� ����gH�7[�7*@��x6�����W�?CѺ��6��?��/��=|��7:&�wϝv/�� ��=}�����*���]������}��+��q�"C�z��� �A�tq��u�:��lz0�]���ݩ-�N�g��ׁ�{X������IB�-�W�����'�sZ=:'�td���|h�Rx��ߓ�?8���i��6�e��T���o.�%��g�>��"��A���V��!�.OR�3n�����$��˪_Y��)�� �Ygp�;���� ��s[fJ�s[?]_߽x6��S��d��t��6�2�����?NII���ޱcGNN��9������kjjjnn�y��Ҵ��@ϵGԹ��ϝ滺Z��*RY�����>�#��I����K2�Tr�b� hV�~,�n��n�}z�t|�E�Z��ʪ2��:���3�TI�6A���٫\�?q������7����- ~� 3ްF�ı�-�Gs�EO�*��0>1�iO�q� -�;f6���3��g@}��!>�B�ʄ�^}�֫vI�����<u���h�f��cٯ�i���hT��4�����փ �-��A|��[6L/SO���8�O��Ge����> �q���0���R�/.���١ ������N������̀�*ƭiQF�!�%�[q�E�|rE��0���=?�P��(�?MP:�� ����C�G|,�[��H�-pG�/Q��cl�f%����U�j��f��K���b]}R/)�6��s�V��5��j:.�v��� �"]V��*�KJ�{%� ���.<:�t���$�"����J��.wq�WU���:���_P:<� ]t�l�b���͇��&|`n_�<���������2�/����╭- �N�ud��!��(7 7�b�^\�@�S?g��pwmTJ���O-4iMl˻��.�pDZ�ʜ������,+WD��;�nv��b_����Q|��q�L���nV��f�;p��ƻ�?�~��q��W̾� + 8<�b_���:���0<�F L 14338/readme.txt.tar 0000644 00000067000 15102442010 0010001 0 ustar 00 home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ID3/readme.txt 0000644 00000063332 15102421633 0023735 0 ustar 00 ///////////////////////////////////////////////////////////////// /// getID3() by James Heinrich <info@getid3.org> // // available at http://getid3.sourceforge.net // // or https://www.getid3.org // // also https://github.com/JamesHeinrich/getID3 // ///////////////////////////////////////////////////////////////// ***************************************************************** ***************************************************************** getID3() is released under multiple licenses. You may choose from the following licenses, and use getID3 according to the terms of the license most suitable to your project. GNU GPL: https://gnu.org/licenses/gpl.html (v3) https://gnu.org/licenses/old-licenses/gpl-2.0.html (v2) https://gnu.org/licenses/old-licenses/gpl-1.0.html (v1) GNU LGPL: https://gnu.org/licenses/lgpl.html (v3) Mozilla MPL: https://www.mozilla.org/MPL/2.0/ (v2) getID3 Commercial License: https://www.getid3.org/#gCL (no longer available, existing licenses remain valid) ***************************************************************** ***************************************************************** Copies of each of the above licenses are included in the 'licenses' directory of the getID3 distribution. +----------------------------------------------+ | If you want to donate, there is a link on | | https://www.getid3.org for PayPal donations. | +----------------------------------------------+ Quick Start =========================================================================== Q: How can I check that getID3() works on my server/files? A: Unzip getID3() to a directory, then access /demos/demo.browse.php Support =========================================================================== Q: I have a question, or I found a bug. What do I do? A: The preferred method of support requests and/or bug reports is the forum at http://support.getid3.org/ Sourceforge Notification =========================================================================== It's highly recommended that you sign up for notification from Sourceforge for when new versions are released. Please visit: http://sourceforge.net/project/showfiles.php?group_id=55859 and click the little "monitor package" icon/link. If you're previously signed up for the mailing list, be aware that it has been discontinued, only the automated Sourceforge notification will be used from now on. What does getID3() do? =========================================================================== Reads & parses (to varying degrees): ¤ tags: * APE (v1 and v2) * ID3v1 (& ID3v1.1) * ID3v2 (v2.4, v2.3, v2.2) * Lyrics3 (v1 & v2) ¤ audio-lossy: * MP3/MP2/MP1 * MPC / Musepack * Ogg (Vorbis, OggFLAC, Speex, Opus) * AAC / MP4 * AC3 * DTS * RealAudio * Speex * DSS * VQF ¤ audio-lossless: * AIFF * AU * Bonk * CD-audio (*.cda) * FLAC * LA (Lossless Audio) * LiteWave * LPAC * MIDI * Monkey's Audio * OptimFROG * RKAU * Shorten * TTA * VOC * WAV (RIFF) * WavPack ¤ audio-video: * ASF: ASF, Windows Media Audio (WMA), Windows Media Video (WMV) * AVI (RIFF) * Flash * Matroska (MKV) * MPEG-1 / MPEG-2 * NSV (Nullsoft Streaming Video) * Quicktime (including MP4) * RealVideo ¤ still image: * BMP * GIF * JPEG * PNG * TIFF * SWF (Flash) * PhotoCD ¤ data: * ISO-9660 CD-ROM image (directory structure) * SZIP (limited support) * ZIP (directory structure) * TAR * CUE Writes: * ID3v1 (& ID3v1.1) * ID3v2 (v2.3 & v2.4) * VorbisComment on OggVorbis * VorbisComment on FLAC (not OggFLAC) * APE v2 * Lyrics3 (delete only) Requirements =========================================================================== * PHP 4.2.0 up to 5.2.x for getID3() 1.7.x (and earlier) * PHP 5.0.5 (or higher) for getID3() 1.8.x (and up) * PHP 5.3.0 (or higher) for getID3() 1.9.17 (and up) * PHP 5.3.0 (or higher) for getID3() 2.0.x (and up) * at least 4MB memory for PHP. 8MB or more is highly recommended. 12MB is required with all modules loaded. Usage =========================================================================== See /demos/demo.basic.php for a very basic use of getID3() with no fancy output, just scanning one file. See structure.txt for the returned data structure. *> For an example of a complete directory-browsing, <* *> file-scanning implementation of getID3(), please run <* *> /demos/demo.browse.php <* See /demos/demo.mysql.php for a sample recursive scanning code that scans every file in a given directory, and all sub-directories, stores the results in a database and allows various analysis / maintenance operations To analyze remote files over HTTP or FTP you need to copy the file locally first before running getID3(). Your code would look something like this: // Copy remote file locally to scan with getID3() $remotefilename = 'http://www.example.com/filename.mp3'; if ($fp_remote = fopen($remotefilename, 'rb')) { $localtempfilename = tempnam('/tmp', 'getID3'); if ($fp_local = fopen($localtempfilename, 'wb')) { while ($buffer = fread($fp_remote, 32768)) { fwrite($fp_local, $buffer); } fclose($fp_local); $remote_headers = array_change_key_case(get_headers($remotefilename, 1), CASE_LOWER); $remote_filesize = (isset($remote_headers['content-length']) ? (is_array($remote_headers['content-length']) ? $remote_headers['content-length'][count($remote_headers['content-length']) - 1] : $remote_headers['content-length']) : null); // Initialize getID3 engine $getID3 = new getID3; $ThisFileInfo = $getID3->analyze($localtempfilename, $remote_filesize, basename($remotefilename)); // Delete temporary file unlink($localtempfilename); } fclose($fp_remote); } Note: since v1.9.9-20150212 it is possible a second and third parameter to $getID3->analyze(), for original filesize and original filename respectively. This permits you to download only a portion of a large remote file but get accurate playtime estimates, assuming the format only requires the beginning of the file for correct format analysis. See /demos/demo.write.php for how to write tags. What does the returned data structure look like? =========================================================================== See structure.txt It is recommended that you look at the output of /demos/demo.browse.php scanning the file(s) you're interested in to confirm what data is actually returned for any particular filetype in general, and your files in particular, as the actual data returned may vary considerably depending on what information is available in the file itself. Notes =========================================================================== getID3() 1.x: If the format parser encounters a critical problem, it will return something in $fileinfo['error'], describing the encountered error. If a less critical error or notice is generated it will appear in $fileinfo['warning']. Both keys may contain more than one warning or error. If something is returned in ['error'] then the file was not correctly parsed and returned data may or may not be correct and/or complete. If something is returned in ['warning'] (and not ['error']) then the data that is returned is OK - usually getID3() is reporting errors in the file that have been worked around due to known bugs in other programs. Some warnings may indicate that the data that is returned is OK but that some data could not be extracted due to errors in the file. getID3() 2.x: See above except errors are thrown (so you will only get one error). Disclaimer =========================================================================== getID3() has been tested on many systems, on many types of files, under many operating systems, and is generally believe to be stable and safe. That being said, there is still the chance there is an undiscovered and/or unfixed bug that may potentially corrupt your file, especially within the writing functions. By using getID3() you agree that it's not my fault if any of your files are corrupted. In fact, I'm not liable for anything :) License =========================================================================== GNU General Public License - see license.txt This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to: Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA. FAQ: Q: Can I use getID3() in my program? Do I need a commercial license? A: You're generally free to use getID3 however you see fit. The only case in which you would require a commercial license is if you're selling your closed-source program that integrates getID3. If you sell your program including a copy of getID3, that's fine as long as you include a copy of the sourcecode when you sell it. Or you can distribute your code without getID3 and say "download it from getid3.sourceforge.net" Why is it called "getID3()" if it does so much more than just that? =========================================================================== v0.1 did in fact just do that. I don't have a copy of code that old, but I could essentially write it today with a one-line function: function getID3($filename) { return unpack('a3TAG/a30title/a30artist/a30album/a4year/a28comment/c1track/c1genreid', substr(file_get_contents($filename), -128)); } Future Plans =========================================================================== https://www.getid3.org/phpBB3/viewforum.php?f=7 * Better support for MP4 container format * Scan for appended ID3v2 tag at end of file per ID3v2.4 specs (Section 5.0) * Support for JPEG-2000 (http://www.morgan-multimedia.com/jpeg2000_overview.htm) * Support for MOD (mod/stm/s3m/it/xm/mtm/ult/669) * Support for ACE (thanks Vince) * Support for Ogg other than Vorbis, Speex and OggFlac (ie. Ogg+Xvid) * Ability to create Xing/LAME VBR header for VBR MP3s that are missing VBR header * Ability to "clean" ID3v2 padding (replace invalid padding with valid padding) * Warn if MP3s change version mid-stream (in full-scan mode) * check for corrupt/broken mid-file MP3 streams in histogram scan * Support for lossless-compression formats (http://www.firstpr.com.au/audiocomp/lossless/#Links) (http://compression.ca/act-sound.html) (http://web.inter.nl.net/users/hvdh/lossless/lossless.htm) * Support for RIFF-INFO chunks * http://lotto.st-andrews.ac.uk/~njh/tag_interchange.html (thanks Nick Humfrey <njhØsurgeradio*co*uk>) * http://abcavi.narod.ru/sof/abcavi/infotags.htm (thanks Kibi) * Better support for Bink video * http://www.hr/josip/DSP/AudioFile2.html * http://www.pcisys.net/~melanson/codecs/ * Detect mp3PRO * Support for PSD * Support for JPC * Support for JP2 * Support for JPX * Support for JB2 * Support for IFF * Support for ICO * Support for ANI * Support for EXE (comments, author, etc) (thanks p*quaedackersØplanet*nl) * Support for DVD-IFO (region, subtitles, aspect ratio, etc) (thanks p*quaedackersØplanet*nl) * More complete support for SWF - parsing encapsulated MP3 and/or JPEG content (thanks n8n8Øyahoo*com) * Support for a2b * Optional scan-through-frames for AVI verification (thanks rockcohenØmassive-interactive*nl) * Support for TTF (thanks infoØbutterflyx*com) * Support for DSS (https://www.getid3.org/phpBB3/viewtopic.php?t=171) * Support for SMAF (http://smaf-yamaha.com/what/demo.html) https://www.getid3.org/phpBB3/viewtopic.php?t=182 * Support for AMR (https://www.getid3.org/phpBB3/viewtopic.php?t=195) * Support for 3gpp (https://www.getid3.org/phpBB3/viewtopic.php?t=195) * Support for ID4 (http://www.wackysoft.cjb.net grizlyY2KØhotmail*com) * Parse XML data returned in Ogg comments * Parse XML data from Quicktime SMIL metafiles (klausrathØmac*com) * ID3v2 genre string creator function * More complete parsing of JPG * Support for all old-style ASF packets * ASF/WMA/WMV tag writing * Parse declared T??? ID3v2 text information frames, where appropriate (thanks Christian Fritz for the idea) * Recognize encoder: http://www.guerillasoft.com/EncSpot2/index.html http://ff123.net/identify.html http://www.hydrogenaudio.org/?act=ST&f=16&t=9414 http://www.hydrogenaudio.org/?showtopic=11785 * Support for other OS/2 bitmap structures: Bitmap Array('BA'), Color Icon('CI'), Color Pointer('CP'), Icon('IC'), Pointer ('PT') http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm * Support for WavPack RAW mode * ASF/WMA/WMV data packet parsing * ID3v2FrameFlagsLookupTagAlter() * ID3v2FrameFlagsLookupFileAlter() * obey ID3v2 tag alter/preserve/discard rules * http://www.geocities.com/SiliconValley/Sector/9654/Softdoc/Illyrium/Aolyr.htm * proper checking for LINK/LNK frame validity in ID3v2 writing * proper checking for ASPI-TLEN frame validity in ID3v2 writing * proper checking for COMR frame validity in ID3v2 writing * http://www.geocities.co.jp/SiliconValley-Oakland/3664/index.html * decode GEOB ID3v2 structure as encoded by RealJukebox, decode NCON ID3v2 structure as encoded by MusicMatch (probably won't happen - the formats are proprietary) Known Bugs/Issues in getID3() that may be fixed eventually =========================================================================== https://www.getid3.org/phpBB3/viewtopic.php?t=25 * Cannot determine bitrate for MPEG video with VBR video data (need documentation) * Interlace/progressive cannot be determined for MPEG video (need documentation) * MIDI playtime is sometimes inaccurate * AAC-RAW mode files cannot be identified * WavPack-RAW mode files cannot be identified * mp4 files report lots of "Unknown QuickTime atom type" (need documentation) * Encrypted ASF/WMA/WMV files warn about "unhandled GUID ASF_Content_Encryption_Object" * Bitrate split between audio and video cannot be calculated for NSV, only the total bitrate. (need documentation) * All Ogg formats (Vorbis, OggFLAC, Speex) are affected by the problem of large VorbisComments spanning multiple Ogg pages, but but only OggVorbis files can be processed with vorbiscomment. * The version of "head" supplied with Mac OS 10.2.8 (maybe other versions too) does only understands a single option (-n) and therefore fails. getID3 ignores this and returns wrong md5_data. Known Bugs/Issues in getID3() that cannot be fixed -------------------------------------------------- https://www.getid3.org/phpBB3/viewtopic.php?t=25 * 32-bit PHP installations only: Files larger than 2GB cannot always be parsed fully by getID3() due to limitations in the 32-bit PHP filesystem functions. NOTE: Since v1.7.8b3 there is partial support for larger-than- 2GB files, most of which will parse OK, as long as no critical data is located beyond the 2GB offset. Known will-work: * all file formats on 64-bit PHP * ZIP (format doesn't support files >2GB) * FLAC (current encoders don't support files >2GB) Known will-not-work: * ID3v1 tags (always located at end-of-file) * Lyrics3 tags (always located at end-of-file) * APE tags (always located at end-of-file) Maybe-will-work: * Quicktime (will work if needed metadata is before 2GB offset, that is if the file has been hinted/optimized for streaming) * RIFF.WAV (should work fine, but gives warnings about not being able to parse all chunks) * RIFF.AVI (playtime will probably be wrong, is only based on "movi" chunk that fits in the first 2GB, should issue error to show that playtime is incorrect. Other data should be mostly correct, assuming that data is constant throughout the file) * PHP <= v5 on Windows cannot read UTF-8 filenames Known Bugs/Issues in other programs ----------------------------------- https://www.getid3.org/phpBB3/viewtopic.php?t=25 * MusicBrainz Picard (at least up to v1.3.2) writes multiple ID3v2.3 genres in non-standard forward-slash separated text rather than parenthesis-numeric+refinement style per the ID3v2.3 specs. Tags written in ID3v2.4 mode are written correctly. (detected and worked around by getID3()) * PZ TagEditor v4.53.408 has been known to insert ID3v2.3 frames into an existing ID3v2.2 tag which, of course, breaks things * Windows Media Player (up to v11) and iTunes (up to v10+) do not correctly handle ID3v2.3 tags with UTF-16BE+BOM encoding (they assume the data is UTF-16LE+BOM and either crash (WMP) or output Asian character set (iTunes) * Winamp (up to v2.80 at least) does not support ID3v2.4 tags, only ID3v2.3 see: http://forums.winamp.com/showthread.php?postid=387524 * Some versions of Helium2 (www.helium2.com) do not write ID3v2.4-compliant Frame Sizes, even though the tag is marked as ID3v2.4) (detected by getID3()) * MP3ext V3.3.17 places a non-compliant padding string at the end of the ID3v2 header. This is supposedly fixed in v3.4b21 but only if you manually add a registry key. This fix is not yet confirmed. (detected by getID3()) * CDex v1.40 (fixed by v1.50b7) writes non-compliant Ogg comment strings, supposed to be in the format "NAME=value" but actually written just "value" (detected by getID3()) * Oggenc 0.9-rc3 flags the encoded file as ABR whether it's actually ABR or VBR. * iTunes (versions "v7.0.0.70" is known-guilty, probably other versions are too) writes ID3v2.3 comment tags using an ID3v2.2 frame name (3-bytes) null-padded to 4 bytes which is not valid for ID3v2.3+ (detected by getID3() since 1.9.12-201603221746) * iTunes (versions "X v2.0.3", "v3.0.1" are known-guilty, probably other versions are too) writes ID3v2.3 comment tags using a frame name 'COM ' which is not valid for ID3v2.3+ (it's an ID3v2.2-style frame name) (detected by getID3()) * MP2enc does not encode mono CBR MP2 files properly (half speed sound and double playtime) * MP2enc does not encode mono VBR MP2 files properly (actually encoded as stereo) * tooLAME does not encode mono VBR MP2 files properly (actually encoded as stereo) * AACenc encodes files in VBR mode (actually ABR) even if CBR is specified * AAC/ADIF - bitrate_mode = cbr for vbr files * LAME 3.90-3.92 prepends one frame of null data (space for the LAME/VBR header, but it never gets written) when encoding in CBR mode with the DLL * Ahead Nero encodes TwinVQF with a DSIZ value (which is supposed to be the filesize in bytes) of "0" for TwinVQF v1.0 and "1" for TwinVQF v2.0 (detected by getID3()) * Ahead Nero encodes TwinVQF files 1 second shorter than they should be * AAC-ADTS files are always actually encoded VBR, even if CBR mode is specified (the CBR-mode switches on the encoder enable ABR mode, not CBR as such, but it's not possible to tell the difference between such ABR files and true VBR) * STREAMINFO.audio_signature in OggFLAC is always null. "The reason it's like that is because there is no seeking support in libOggFLAC yet, so it has no way to go back and write the computed sum after encoding. Seeking support in Ogg FLAC is the #1 item for the next release." - Josh Coalson (FLAC developer) NOTE: getID3() will calculate md5_data in a method similar to other file formats, but that value cannot be compared to the md5_data value from FLAC data in a FLAC file format. * STREAMINFO.audio_signature is not calculated in FLAC v0.3.0 & v0.4.0 - getID3() will calculate md5_data in a method similar to other file formats, but that value cannot be compared to the md5_data value from FLAC v0.5.0+ * RioPort (various versions including 2.0 and 3.11) tags ID3v2 with a WCOM frame that has no data portion * Earlier versions of Coolplayer adds illegal ID3 tags to Ogg Vorbis files, thus making them corrupt. * Meracl ID3 Tag Writer v1.3.4 (and older) incorrectly truncates the last byte of data from an MP3 file when appending a new ID3v1 tag. (detected by getID3()) * Lossless-Audio files encoded with and without the -noseek switch do actually differ internally and therefore cannot match md5_data * iTunes has been known to append a new ID3v1 tag on the end of an existing ID3v1 tag when ID3v2 tag is also present (detected by getID3()) * MediaMonkey may write a blank RGAD ID3v2 frame but put actual replay gain adjustments in a series of user-defined TXXX frames (detected and handled by getID3() since v1.9.2) Reference material: =========================================================================== [www.id3.org material now mirrored at http://id3lib.sourceforge.net/id3/] * http://www.id3.org/id3v2.4.0-structure.txt * http://www.id3.org/id3v2.4.0-frames.txt * http://www.id3.org/id3v2.4.0-changes.txt * http://www.id3.org/id3v2.3.0.txt * http://www.id3.org/id3v2-00.txt * http://www.id3.org/mp3frame.html * http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html <mathewhendry@hotmail.com> * http://www.dv.co.yu/mpgscript/mpeghdr.htm * http://www.mp3-tech.org/programmer/frame_header.html * http://users.belgacom.net/gc247244/extra/tag.html * http://gabriel.mp3-tech.org/mp3infotag.html * http://www.id3.org/iso4217.html * http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT * http://www.xiph.org/ogg/vorbis/doc/framing.html * http://www.xiph.org/ogg/vorbis/doc/v-comment.html * http://leknor.com/code/php/class.ogg.php.txt * http://www.id3.org/iso639-2.html * http://www.id3.org/lyrics3.html * http://www.id3.org/lyrics3200.html * http://www.psc.edu/general/software/packages/ieee/ieee.html * http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html * http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html * http://www.jmcgowan.com/avi.html * http://www.wotsit.org/ * http://www.herdsoft.com/ti/davincie/davp3xo2.htm * http://www.mathdogs.com/vorbis-illuminated/bitstream-appendix.html * "Standard MIDI File Format" by Dustin Caldwell (from www.wotsit.org) * http://midistudio.com/Help/GMSpecs_Patches.htm * http://www.xiph.org/archives/vorbis/200109/0459.html * http://www.replaygain.org/ * http://www.lossless-audio.com/ * http://download.microsoft.com/download/winmediatech40/Doc/1.0/WIN98MeXP/EN-US/ASF_Specification_v.1.0.exe * http://mediaxw.sourceforge.net/files/doc/Active%20Streaming%20Format%20(ASF)%201.0%20Specification.pdf * http://www.uni-jena.de/~pfk/mpp/sv8/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/sv8/) * http://jfaul.de/atl/ * http://www.uni-jena.de/~pfk/mpp/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/) * http://www.libpng.org/pub/png/spec/png-1.2-pdg.html * http://www.real.com/devzone/library/creating/rmsdk/doc/rmff.htm * http://www.fastgraph.com/help/bmp_os2_header_format.html * http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm * http://flac.sourceforge.net/format.html * http://www.research.att.com/projects/mpegaudio/mpeg2.html * http://www.audiocoding.com/wiki/index.php?page=AAC * http://libmpeg.org/mpeg4/doc/w2203tfs.pdf * http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt * http://developer.apple.com/techpubs/quicktime/qtdevdocs/RM/frameset.htm * http://www.nullsoft.com/nsv/ * http://www.wotsit.org/download.asp?f=iso9660 * http://sandbox.mc.edu/~bennet/cs110/tc/tctod.html * http://www.cdroller.com/htm/readdata.html * http://www.speex.org/manual/node10.html * http://www.harmony-central.com/Computer/Programming/aiff-file-format.doc * http://www.faqs.org/rfcs/rfc2361.html * http://ghido.shelter.ro/ * http://www.ebu.ch/tech_t3285.pdf * http://www.sr.se/utveckling/tu/bwf * http://ftp.aessc.org/pub/aes46-2002.pdf * http://cartchunk.org:8080/ * http://www.broadcastpapers.com/radio/cartchunk01.htm * http://www.hr/josip/DSP/AudioFile2.html * http://home.attbi.com/~chris.bagwell/AudioFormats-11.html * http://www.pure-mac.com/extkey.html * http://cesnet.dl.sourceforge.net/sourceforge/bonkenc/bonk-binary-format-0.9.txt * http://www.headbands.com/gspot/ * http://www.openswf.org/spec/SWFfileformat.html * http://j-faul.virtualave.net/ * http://www.btinternet.com/~AnthonyJ/Atari/programming/avr_format.html * http://cui.unige.ch/OSG/info/AudioFormats/ap11.html * http://sswf.sourceforge.net/SWFalexref.html * http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt * http://www-lehre.informatik.uni-osnabrueck.de/~fbstark/diplom/docs/swf/Flash_Uncovered.htm * http://developer.apple.com/quicktime/icefloe/dispatch012.html * http://www.csdn.net/Dev/Format/graphics/PCD.htm * http://tta.iszf.irk.ru/ * http://www.atsc.org/standards/a_52a.pdf * http://www.alanwood.net/unicode/ * http://www.freelists.org/archives/matroska-devel/07-2003/msg00010.html * http://www.its.msstate.edu/net/real/reports/config/tags.stats * http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt * http://brennan.young.net/Comp/LiveStage/things.html * http://www.multiweb.cz/twoinches/MP3inside.htm * http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended * http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/ * http://www.unicode.org/unicode/faq/utf_bom.html * http://tta.corecodec.org/?menu=format * http://www.scvi.net/nsvformat.htm * http://pda.etsi.org/pda/queryform.asp * http://cpansearch.perl.org/src/RGIBSON/Audio-DSS-0.02/lib/Audio/DSS.pm * http://trac.musepack.net/trac/wiki/SV8Specification * http://wyday.com/cuesharp/specification.php * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html * http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header * http://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf * https://fileformats.fandom.com/wiki/Torrent_file 14338/class-IXR-value.php.php.tar.gz 0000644 00000002236 15102442010 0012600 0 ustar 00 � �W�o�F�W�+&:Cr`H!��!��>�V:]Om��B�Yb~ջ&�z��}� T}J�/��3��ά�Ч�:�l��50��)�i@m��� ��%�u�m�0 ��}�1껁�%+��w�L�#���_K��"':���f<>+�Pї_�n�F���z|=��q�z2�`X��(a���O`�ɺ�l����6\�p�H!.�MD� y��@���h0qm�e�31�� H[CgE8�eK��Y��H-T�����À�8�yĮ�n����n�b�?�*m����5���Ԯ u��\�"O� A���R��QbJ���g'��#nw{��]h/']�i��`(�2�i��$�xp���7�@�H�'�!������O�欠kƔ؎@�':��s�H�eJ�Ip����ZvV�Մ��t��4�L.�1���W���ݽ ������ճV�56ϟ1~W��q]MF��smؗf��P�hu�Ũ��N�� k!��L��T|�WA�9�5S���Ғr�b�E��0�ݨ+nⲅp�@�Br��!�!U��G�ҤX��μ�ăG�;"�2�&�%a�f$X"в ��`�zxB��}��f#��O�Jތ�kɻ5�u� �}�Vq,�-���݄�*�#L���|w}�\-������Cw¦����qT��2|�4�G �b# t/�a�؊�X���/�}���֔\*�@=�j��8�;��*- ���������>5?�L�Hn � =�*��J�M��4��t�}�Ȁ)C�70,s�8�([���j�E�8��Lj�C8r��R�(�*R����`���{,���-�)_!�r� �J�����8�-�3�Zq�spQh|R���u392@ K�������z\X�:�E�5�.�bN�ٖ��� �f�B�eN��ñSL��- >->�Z��>TKA� �x\`�}�/i<���\�Y���PcfI�2�.C�����T����$'ﴮ��!�x�r �}8�P����Y�_�'A��C� �G��>&�|ϳ$�<��҇=��ͥU���+&���ȟ���Dt[�gG6��`�#������|�g�f��P��~���ZTOr��s���� �x�6=��^]��]���~�z�����#{ 14338/meta.php.php.tar.gz 0000644 00000025005 15102442010 0010646 0 ustar 00 � �=ks�F��U��J)���8{�r���[_%���^jK�@�p& -k���Ǽ1�����j�0�GO���缘e��2��N~���|�U�l���Y2��g�E��L��q��ח�q1;�X�����2ͪ�YV'���-�{���/�����<x�����/�����?��:��߲������>�߿�lޝ��?�#>��2�Î�I�����!>�v9�y1�Ĥ(E��e����<3���r��`�>.&�mR�Ų?e�0���q-��EV �@8���U�� ����y��bt �|��f�Mvy�m2]fb���@<�o*�ǥ�:��b���94Ʈ���+�w%���yk��3Q%3���IV�b>����KA� $,��H�o���,��Vˑz��g�w�����9�ˏ/�_�U�O/�����w8�&UuHI���4���HҬD��=����8M+��{���I�a�� V@���b�=��lZ����X�#�G�5�����*ɨ�˄6��r���L�k��=��7Q�W�_�k�qz�9��@���6��(���=�3��g��3��e���>��z\�^�h$.�1�Y���'!`MS�35�|^cG{��0O�x�����L?�v�a�����w0ٔ1U7eT�e�\V�q�D_DǪLa-@�'���}-�t�O�b�!q.�9w���!u���f)� ��z'��.�9S$�T�L4}���]1I��ly�� �iaǰ��lQ_*��z�:��ek����U]̗�QVVbX�蒝e%�4����h�{�5C����"��y1�[��i�`ܨ(����r������g2>r����`fa$p�b9Mq<كb��[�lB0��R-I�e����7��9��쉬��y!���,�(<8O�I\�х�¸�[�+#�+��)y.�%p���K�'�$�.K����DJ1���P�p�bg}�;� ��mR�� 9���_��HK�����f������ݡ?�jX�0���#�K�<�����Z!�X��>2c�ƺ#6 ] ϲzȓ�'6T�>�}�?� d!}x$�W9 �0o���l_V�U��X�l@vB��?<�;�:`�� �9����#�����[[�볙u��i���ħ�q�����r~0�����r��Q$���S%���Ĵ�}���^Γ�Y@/$�Y���o`�S3��>p� 2���fDH�h�n�Qn����}�2�/Pb�]��Z�d�K�R��͗@�Nb (`@�o�)�0���a��EU刔z�(��:�Z7�~�T��Ѥ꼒K���uG^!0�W�Z�a�A ����%��7>��o�j�^ ����W|��37��i8b]%g���Ѣ��44Ѯ�t{; �牾���&�vP�Hp�\,���I>�����.n�/�8�� ���n�'4�$���H��8����\}��g,I�~��}�J>��ᓝ��~���+��~x������������O_>z�ħ�8��0<��t��ݘ��_z����6i4t���Q�K0�F�P� �j��`2 9��C��� Z�̡L���4����[p�8��p���Ʊ��F��f++���^W��C�Xc4��ܡ��{�w�r)��� ����6 �#AӍ�O������=5TO�v��g�G$��z��Y��E�>�Ӂ;{�v*�8�3L�iVg��h� �ꭢ�d�uK���Qf-d��3k#M��DHs��ڨ� #�(iM�S�\ U�����������3�����7KG�`�r�� ���U]E?�p3�q�1��(X�έC�cq���Q�.�Vvh\;��o�o�/j��(� �^��j��F�>����Q�B9�����y��L�Ë��-{N�|㾌��v�5�8��#��g��0_��a#s*���1|p��<��j^Kp�Hh�-pDS}�g�a�a��]I��9� BTl��Q�> ��[.Y�-��#P`JN�9T=�Ov���uG�u`]�K��>����i��K�)�������7�7~���w���в��G��l���Q�����M\�M1�[?���$����۸7M6�8�����5���U�:�N��iU��<V��]�X��hv?�ݼ~�������b�n=#�����G�eU��JZ!�he �DZؾ;]9��bjx����!H����Gu�҄�6�K�^y�Q�ݗ�>P����kK�/��/�w ��?#��2�\�}�9Q��ZRx}���������!u�H�bqϖ����#2��c��1l��"a~�*6���J����b�O�w����L�BK�(S��Ğ�k�i'!�/�{�@]W�y�����x��.��t=�v�A7���W��,�-4_��2=��/3�=���P�ZZ�;��A�f�{��s���3c��x�b�Ns��\gL��i�(Ě�.�F"�'�s�o��}�-h��=�����J_�Nh�Z��W��hg�x��w��/9�N�LlV@=��?�E�SN��ɲ$�)�NbS�C����g�3� ��gja��\��})��C��K۔_�0�5�g��-��8u����u\ �W+d���y,fr���#���� ��W��+a��e�Cގ�=!n}��Q�njci�պ�-�a���5j��r)�-�� B��gC���l�8E���S�PN��u�A�Wo�Ϙ�C+z�z%�7I���^�|��@v9��E���E5�>�1�B��>/�j��K�s<�+���B7���^����j�z|t-Ҍ�[y�b��g�"�p��ǣ�{��.:T<���H&Ofe�i�S��cذ���u&��6������_u�?���n��5F-�%y�����6<we�9�Ǒ�|����|�]xN�l�5�s -��kG笜w�Y���Eԭ���0&�,;�<)�"�&�w�7�aoy��h��ˬ�4��-�LvTI8�� A%G��`�+e8b� E}��c�Y+�h��>g��X5��ʁ��U�i'������UF�QK"��b(X*�Z�H{˺$=h�� pi��'}CSt��q�<��l'�[�y\���x7Β��E`�;��@��ٓ�����:����i�1�e�P�5���y?��w���=QJ�J���hs�N��Nm�}�c<��k�o�ݳP��V��+���x˫�vb �g?�`�R�(O�n�h.���L��`� dK#V����#�#XxPᇆ˪��$є�~�j�J����k4�ҹe�����WmL4x\G�Z���Ǣ~[>�����.��F*/e��� 0K�c1_$S$fbx�$�L����3�T�i~6�"P�$ ����=��������C_V�<� �v�N����4>P%S�l��SL�tS6Y�ȩ�t�҃~ß�r���V�]��SUY�̹<�ҳ^����u����P�Nȿ��^m��T�r�ؤ��i���IB���v)�@���jC��ȧzͧ�"�6�,2dnX�g^H�#��H��(m���A�uh�|�O,sgt��]|Kf�,�ϡ�!�q�T��b }�Ϭ,�\��Y��W��A �����4����a|��g5Z�������[�N�!���c�Gm;P�?u�5�wn��}�Tu�Ԙ�(�� ~E>�WREJ}��^����:�� ,! �f�6�.���2?ˁ���D�l�%�^F�$�p�j{[��.-oܦ��q3��h;'Z>ʣ5�)&� Å�F���>iz+o�@�`��0w��\]��Wv={��/#Y����H��j�h����b�Nls� .EB�وſ�m$���:F��{3>��P�fC�C���)'�`M�"�i?���IP˪n��n�3)�s�[��Ⴘ�+��lYC&�jJ+V���M檕����P�XxG��,��@v�+��,����g�s��[5��Q��ɽ�~l�/���$�9������#�#��w���m�3W*��y�*�1}}b7}m�����u>�Ͱ`䬐#��zo>�C�)�̌�-v7��$��F�D�;<�ۈG�3���,Y�S�K�M��cΐ Y҈Ym}��2�)r��[����� �70>�O�0Bb �&ށ���r���z����\BR��*� >YE�����,aO��m٣�"�>ʯ۵h�o�J|�`J�f��SF��"���K�R���eT�OP)5�����V�o��Uyb�3r�|�<�v���y�)���x�Ń��[�b ��>���ۆx�SKN~۩����b�G��WZ��3��)���5b�dòv�݀m���-����F��`bs(��!K���R�$n�8�up���X4u���h�c��,.T��c�SLލfY��o��f#O�*'�� ��u}U[���8�J)��yXn8��-k^��=����M �뭴j����f��;�`���A�f�ui�t���Mh>�+ab�W��C�k���:�1i�M��$XT�7�Հ�}��9�����j3�9��HM���L��t~r�/(k�� � ��Hܻ���]�P�-�L9s��l��ow>������ 6r��`�ж[����P���&mv���yLG�}o��F �����4�uR�\ n�����=,�8~X��# NI��JG�<�f+rw��b:o���z��$�W��'�Ɥt7[�劕?�z:�Q8l~<��Vꕶ�gd�ߋ�� e�6O3%(����'�z���:���^]�V� XW��IZ�X��7 4� l��>�!ʵ�j�M������0WV��D*��ڵ+3���k�3����k��1m[�i���� �GD����cɚӭ����(Gݪ(��hw��P�Y�"@�Nj���5�B�S�R�2�۾'C�A|[��$%&'��"9�{*�x(O�=C�����>�A��M,���p�Uȵ�M�s_��;�,���*�;���HI[��_$;s���(b��� ٱ����a���b@^�� ��[_����'8���~���f���� ��E9Kj}����IyF��j�8!|g�Cs ������tU=ݶZ^�#K��Õ��zw��o^�z�y_CYd�K��i���O��|0�α|Z� ɸ0'iWת���a�}*U�p��0�� �,a9I« K0_-&�p�+D���c6�W�����´#%Oca�Fm�۠�u����~�[�w�+�P<g��3��#2���R������ 6Rz1֮�b�������D�,��ƶ��k,�մ�D�i)[�k� c�<�&P��MG֯%���h>�c ��]��hcG_!p5Mvf��ޔ�qW\�az<G;m���D�"���B�a���ܸ�`�e����m�%�:6;M�6���F6��D���i�\eq� )O�k)>���6H�)�ҩ,��h�� ͜��J+�{~���{�N�i��WA�l������R"d�v�sUfbE��RZ�� T�v8�B� JT7v������@ �mfՍ=�HL �0����H%��UYa�1��KKF3�︇d2t��j��u����MZ�Y�vɗFް���^��ٰ��d�E6=��{w���+�\�ף���;�:���M7���Y�����lu�7@�� �.?�H/vu�7�̵k�m\�ִYi�rt�[xWo�Ɠv�6��"���\���8�J�N9Tۜd�'�b�������>)@9�AjS+���p�H � ︄]�֬gO˿���oeDs��<�1E�������vBA-r)��թ:��w��W9{�[��{�u�3c �mR�H�!�U;�{��!7�1��FR�*��;�ׁ�]�>��k7�}���哧/�_�n[]�?>4?~����cGv9wh�<�;饺����!��}��'zvT^ZY�|o°�,�ـ#���\�q�1��G�%����R�T�M}�f!�C(?�.��7Pס�o��-ݍ�>�C�i�n�4�!!s���0%G�˲D�:8T�*ƺe�M����Vx�"���%�p��sx�o-� ��A��ȭ�M7�7J{7X��"b�|^f��4����i����߳l��G�~z1T:��;�� q���yF�y:5�K�(�t���I(�X��h�&�El*�P)���G�`^�.������������t�ͳ�����;1�&�Z5E/�x8�w*�+� I_5¡_�E儇���]k����e��!�ִB�T٨��$�Q�E�ϒ���?1�-�B���U:�VJ``��:{g�N]ih6Jr�)��W�O����#Ag8�zB��,�����ڽ������I�x8��2�o*��_.t ��G����1h�29#�Vx4q�j�'�t芗n�9[5�~��ۈ�g�{���A��/W&�ULMg�<�����H��S�H˺ Oq�YEJ�"�a�m���"�7w#� �?l�1r�w���I�8Ӗ��M'�q+�^�C���G����^� ���'-'n�P�>�Tj�p�P�f����AeQgx'cCx�<hɅi�{�̚����?�RG6Tt�Ιm��G���W��P����I���m�̕u�d��'���w_ܻ��w|���/߽}�+fz��Z�K��7��X���@|#�aA��ҜsZ�j�bG렛�[am��r3f�6�Wu�A}�����rc���^�z}��L>�6�D�@W�y� �0:���Fڔ�,����^I���<�K���5���Nsm�)1*9K���d��$���ת�nR V�<�����ݺ��[ �7fn8�����5��I%8��{�i*/'���Ѵ���ߕ���sg�)�&{O���O�Dd <����/DZ�� D�`8�Z�i�.�%�j���ȁ8��rȘ�p������wG��=�-TR���B��o�oL�ͻ�V���G�;��~;�_�&~gS̉���ؖnb'�Vz[��-��5�&/;�Ƥd�-!ir�o�G��<����҄6��K;��ԇl:�)��zt�θ��}��LG�a��k�j�����R~�[W~�>4�sM6L�PM�x��܁]�Cb���0�b�פ�9l����L�(3����奣4�|.05_�5c�)U.�E��n�wB���c"e����g��9�腿��p6}E�Y*5��>T��>a����㹆st�#"VVJ��,��^NSzH�,�x ���rR�Q �e� ޜ�w0�����/���7⼮�ׇ�c�� =1���L���a���d�Ⴧ_=�7�}����W"��Z�yɩQ���1.a!�Uo�z?/��m^,+sF/x˩6��Q2~s*f��ϭ�����+�ӔR�{b�!�n��`P�1����f��"���m$Z,T� �(�b�>ޥE���nWx��M���pR_a֛� �]�4fs�Y��}�Q�9MF�t�n��b���;$�]�A$���9U D�����/`���?�5/+�g�U�2e��U���xĊ/��?�lp6P��l �w̻̼)T�i6�F\7H+ֱB ��M!�Y���5$��A�GJͮ��yլ����d��5`�=� �,B���׳�?��6�!@�u�/5R_��E4�~,Η�d~�̀HЗ�M���/VtZes �7��@��M�W�)�S�Y��.N,#_�U9��&Pu���i��(��H�"�[^�g0)��{�݁��sC�!I�*��eV��9?!�.+��fU��ucf�QU��5e)�5쳹�v(�A!6��'⭕h���U�6˚�k����C���b%���\��^o'q�2��� K�k� �� �$}��)���ZF�P���e��w��1-a�f8f��Vm�� �i�Kb��<s���i^� �ipU�e����b��1�I����R��/|9��� �ZgQR��,:�K�o�����_�����eU)j $fX@���x |w�a�${�5��4w�8���]u�� z�b���ݕRX�N5C�&�N�x�B�iھ^1Kz��=Y�Oct�-�|SKR�sH����J���ʏ�n�\�Ґ�j|��*���5U(u��zj�UZ�}3�_�@�$Ƅ�O�?�o�̨��*�DN��H��R7�;��B%Y�Foi};*�/-lIl� 64��o��VEc�RF%ԶV�W'�GW�2��y�^]j�F,�����BX�Xx�>�w�o���w n�L���P}S�s��&��y�_��$�y��\}��`�m�\�=���R� )Z�F~i�J��K�N/�%Kڞ�-� ��eơ�i|����\��y~/�{��{��Y-��le� ���4��K��3f�-h���GC}h�3R� Y�y=#��z�+���ޗ֓F��)4��UK(2-UYĺ�G����n�R{r�;S<�6�R+M�G��lPkR��$Xv�[�B�6�9��c�;�U�-]��bN�1�N4Mڝ(�0��G�^� �np<;�0��;�v��z6We`6 N>����M�͉�B9540S�o��(��A�b/���(Z�*�:�呆��0�r�g։:�T���g��1g�p#bʯ��f-�=�\o^z�͉R��_���geE��0���,��p���~x������>�[�P� ��g"��1�q��t[���2��j��H�)ex3 ��������w=q 8MIu;P��9�f�&�͐��k:\{�5�Y�e!�MS�8�'�U"81��W�S�IB�.���|�����K�����?���.ؖ0� �,����Ѵ/�z�a�6 P��\ϳ�8���?U��T]���~FB3/��t�*�%�s=��6��I���� ���!-��8!��C�=6�Vw��K��V����s�n?%_�kD�������Y%x��pU.��y��{}�e�rԍ&�a�ε�Q��ۚࣾ��7^�W+��e�CX����K�}_��H���+6]��E\[��g���7��Wwd������fH����*yg���GzrZ���ˑ��LeeI��{�7S-��=U�rœ1KT�'BL]Y)[9�At'���*�@��/'�q[u)�~Ջ��=2~>t���� v)�c1���`�d��u:�`E-S#�1d� 2�Aˑ��JŖ���8q%���y��^����:7�)s�B�+���U�UY?�ꫛ��>�g!e`L'�w������ɭ�>�#�D��v������ԕ~M�=u^�x�OΫ �ﻸA#��$fJ�[�A�nR�qK�x�X�<I���օϯ���@L�L��*�/�4���)�Lw mdǬ�Ě�k[=�c���[>�(��1�17�ҒLX�n�S� _��0{f�Ļ�����i�>r[x�J�9k�o��ѯ��Aćǃ��;�=r!���R��U���J_��x�1N�K�幟f���,���(�gDZ�o�HI<d�� zy ���"M 6=*���̤���`� Z��ʞL܁��=7S�5I8W���^�p����@ 2�� XTm4���-}�db��7"�( ]�i����! ��>��_ ���(.�&[�oVH�q|�y���_�͊�ٍ8���M�2L�Ș�/�-����/��[�H*��V>F|R���ebL�u/~`�A4�7��T��a�}���4�"IHvo�J�pC}iM��S�[�|n%�o��̒���۾�^�M����s3��O�۶�� �Xѫ���).���8] G��+ʳ����PPb�yR{�:�F�2��N�q������N���"D��Ro�L��!�M�sd��O���~@JR}6q}��&̡(�ٟ@pP+Tf)�!�%"}�e���)ٳ�O�V�i?i���S� ��f�Ɵ�~�|���X��dX��նy-�Պ����ƺ�SnǕ��e�z~X�jGl�ʒ=���*X� �0�X�0�l�C��?��*��D�|���6�S��rm�N����ӻ��o����x����!�겮���b�x^���?8e���q?�X�Z��WR,���w��oQ�XS�*�&a^���v��g*c�|����^�d�J^�2稹e e�T��E*��2�=�)�؉���tF�Xcq�s��SNy�Z�tLǺ�7Nn�LZ�[kԧf~�PB�j 7�@�&Tӊ%��<�����Pcc�P�ڽ��`͗ߟ�S�o�jx� Io�`Ͳ�6]P��I���?O�w������L]�Z?�=*eX�8������[t�̞N��<X���P��|k��2�tqgTf��'D���ʹ�?�i�YpK�F�>��b� ���At������ɻb^�����F����C<A�W�U��s�gC��S��y�E �K�.����I=�d���h�<�')<J�S4��$Jɠ��.lT��^��u/�p�7��c��3��O4v��@ε� .����q]����Z�xu�ڌ ,K�/{�V��elwZ�kE]���\��nC3��?�n�����/��9�� 14338/plupload.zip 0000644 00001700756 15102442010 0007577 0 ustar 00 PK Yd[\eCF CF license.txtnu �[��� GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. PK Yd[� d��O �O handlers.jsnu �[��� /* global plupload, pluploadL10n, ajaxurl, post_id, wpUploaderInit, deleteUserSetting, setUserSetting, getUserSetting, shortform */ var topWin = window.dialogArguments || opener || parent || top, uploader, uploader_init; // Progress and success handlers for media multi uploads. function fileQueued( fileObj ) { // Get rid of unused form. jQuery( '.media-blank' ).remove(); var items = jQuery( '#media-items' ).children(), postid = post_id || 0; // Collapse a single item. if ( items.length == 1 ) { items.removeClass( 'open' ).find( '.slidetoggle' ).slideUp( 200 ); } // Create a progress bar containing the filename. jQuery( '<div class="media-item">' ) .attr( 'id', 'media-item-' + fileObj.id ) .addClass( 'child-of-' + postid ) .append( jQuery( '<div class="filename original">' ).text( ' ' + fileObj.name ), '<div class="progress"><div class="percent">0%</div><div class="bar"></div></div>' ) .appendTo( jQuery( '#media-items' ) ); // Disable submit. jQuery( '#insert-gallery' ).prop( 'disabled', true ); } function uploadStart() { try { if ( typeof topWin.tb_remove != 'undefined' ) topWin.jQuery( '#TB_overlay' ).unbind( 'click', topWin.tb_remove ); } catch( e ){} return true; } function uploadProgress( up, file ) { var item = jQuery( '#media-item-' + file.id ); jQuery( '.bar', item ).width( ( 200 * file.loaded ) / file.size ); jQuery( '.percent', item ).html( file.percent + '%' ); } // Check to see if a large file failed to upload. function fileUploading( up, file ) { var hundredmb = 100 * 1024 * 1024, max = parseInt( up.settings.max_file_size, 10 ); if ( max > hundredmb && file.size > hundredmb ) { setTimeout( function() { if ( file.status < 3 && file.loaded === 0 ) { // Not uploading. wpFileError( file, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) ); up.stop(); // Stop the whole queue. up.removeFile( file ); up.start(); // Restart the queue. } }, 10000 ); // Wait for 10 seconds for the file to start uploading. } } function updateMediaForm() { var items = jQuery( '#media-items' ).children(); // Just one file, no need for collapsible part. if ( items.length == 1 ) { items.addClass( 'open' ).find( '.slidetoggle' ).show(); jQuery( '.insert-gallery' ).hide(); } else if ( items.length > 1 ) { items.removeClass( 'open' ); // Only show Gallery/Playlist buttons when there are at least two files. jQuery( '.insert-gallery' ).show(); } // Only show Save buttons when there is at least one file. if ( items.not( '.media-blank' ).length > 0 ) jQuery( '.savebutton' ).show(); else jQuery( '.savebutton' ).hide(); } function uploadSuccess( fileObj, serverData ) { var item = jQuery( '#media-item-' + fileObj.id ); // On success serverData should be numeric, // fix bug in html4 runtime returning the serverData wrapped in a <pre> tag. if ( typeof serverData === 'string' ) { serverData = serverData.replace( /^<pre>(\d+)<\/pre>$/, '$1' ); // If async-upload returned an error message, place it in the media item div and return. if ( /media-upload-error|error-div/.test( serverData ) ) { item.html( serverData ); return; } } item.find( '.percent' ).html( pluploadL10n.crunching ); prepareMediaItem( fileObj, serverData ); updateMediaForm(); // Increment the counter. if ( post_id && item.hasClass( 'child-of-' + post_id ) ) { jQuery( '#attachments-count' ).text( 1 * jQuery( '#attachments-count' ).text() + 1 ); } } function setResize( arg ) { if ( arg ) { if ( window.resize_width && window.resize_height ) { uploader.settings.resize = { enabled: true, width: window.resize_width, height: window.resize_height, quality: 100 }; } else { uploader.settings.multipart_params.image_resize = true; } } else { delete( uploader.settings.multipart_params.image_resize ); } } function prepareMediaItem( fileObj, serverData ) { var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery( '#media-item-' + fileObj.id ); if ( f == 2 && shortform > 2 ) f = shortform; try { if ( typeof topWin.tb_remove != 'undefined' ) topWin.jQuery( '#TB_overlay' ).click( topWin.tb_remove ); } catch( e ){} if ( isNaN( serverData ) || !serverData ) { // Old style: Append the HTML returned by the server -- thumbnail and form inputs. item.append( serverData ); prepareMediaItemInit( fileObj ); } else { // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server. item.load( 'async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit( fileObj );updateMediaForm();}); } } function prepareMediaItemInit( fileObj ) { var item = jQuery( '#media-item-' + fileObj.id ); // Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename. jQuery( '.thumbnail', item ).clone().attr( 'class', 'pinkynail toggle' ).prependTo( item ); // Replace the original filename with the new (unique) one assigned during upload. jQuery( '.filename.original', item ).replaceWith( jQuery( '.filename.new', item ) ); // Bind Ajax to the new Delete button. jQuery( 'a.delete', item ).on( 'click', function(){ // Tell the server to delete it. TODO: Handle exceptions. jQuery.ajax({ url: ajaxurl, type: 'post', success: deleteSuccess, error: deleteError, id: fileObj.id, data: { id : this.id.replace(/[^0-9]/g, '' ), action : 'trash-post', _ajax_nonce : this.href.replace(/^.*wpnonce=/,'' ) } }); return false; }); // Bind Ajax to the new Undo button. jQuery( 'a.undo', item ).on( 'click', function(){ // Tell the server to untrash it. TODO: Handle exceptions. jQuery.ajax({ url: ajaxurl, type: 'post', id: fileObj.id, data: { id : this.id.replace(/[^0-9]/g,'' ), action: 'untrash-post', _ajax_nonce: this.href.replace(/^.*wpnonce=/,'' ) }, success: function( ){ var type, item = jQuery( '#media-item-' + fileObj.id ); if ( type = jQuery( '#type-of-' + fileObj.id ).val() ) jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text()-0+1 ); if ( post_id && item.hasClass( 'child-of-'+post_id ) ) jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text()-0+1 ); jQuery( '.filename .trashnotice', item ).remove(); jQuery( '.filename .title', item ).css( 'font-weight','normal' ); jQuery( 'a.undo', item ).addClass( 'hidden' ); jQuery( '.menu_order_input', item ).show(); item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery( this ).css({backgroundColor:''}); } }).removeClass( 'undo' ); } }); return false; }); // Open this item if it says to start open (e.g. to display an error). jQuery( '#media-item-' + fileObj.id + '.startopen' ).removeClass( 'startopen' ).addClass( 'open' ).find( 'slidetoggle' ).fadeIn(); } // Generic error message. function wpQueueError( message ) { jQuery( '#media-upload-error' ).show().html( '<div class="notice notice-error"><p>' + message + '</p></div>' ); } // File-specific error messages. function wpFileError( fileObj, message ) { itemAjaxError( fileObj.id, message ); } function itemAjaxError( id, message ) { var item = jQuery( '#media-item-' + id ), filename = item.find( '.filename' ).text(), last_err = item.data( 'last-err' ); if ( last_err == id ) // Prevent firing an error for the same file twice. return; item.html( '<div class="error-div">' + '<a class="dismiss" href="#">' + pluploadL10n.dismiss + '</a>' + '<strong>' + pluploadL10n.error_uploading.replace( '%s', jQuery.trim( filename )) + '</strong> ' + message + '</div>' ).data( 'last-err', id ); } function deleteSuccess( data ) { var type, id, item; if ( data == '-1' ) return itemAjaxError( this.id, 'You do not have permission. Has your session expired?' ); if ( data == '0' ) return itemAjaxError( this.id, 'Could not be deleted. Has it been deleted already?' ); id = this.id; item = jQuery( '#media-item-' + id ); // Decrement the counters. if ( type = jQuery( '#type-of-' + id ).val() ) jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text() - 1 ); if ( post_id && item.hasClass( 'child-of-'+post_id ) ) jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text() - 1 ); if ( jQuery( 'form.type-form #media-items' ).children().length == 1 && jQuery( '.hidden', '#media-items' ).length > 0 ) { jQuery( '.toggle' ).toggle(); jQuery( '.slidetoggle' ).slideUp( 200 ).siblings().removeClass( 'hidden' ); } // Vanish it. jQuery( '.toggle', item ).toggle(); jQuery( '.slidetoggle', item ).slideUp( 200 ).siblings().removeClass( 'hidden' ); item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass( 'undo' ); jQuery( '.filename:empty', item ).remove(); jQuery( '.filename .title', item ).css( 'font-weight','bold' ); jQuery( '.filename', item ).append( '<span class="trashnotice"> ' + pluploadL10n.deleted + ' </span>' ).siblings( 'a.toggle' ).hide(); jQuery( '.filename', item ).append( jQuery( 'a.undo', item ).removeClass( 'hidden' ) ); jQuery( '.menu_order_input', item ).hide(); return; } function deleteError() { } function uploadComplete() { jQuery( '#insert-gallery' ).prop( 'disabled', false ); } function switchUploader( s ) { if ( s ) { deleteUserSetting( 'uploader' ); jQuery( '.media-upload-form' ).removeClass( 'html-uploader' ); if ( typeof( uploader ) == 'object' ) uploader.refresh(); } else { setUserSetting( 'uploader', '1' ); // 1 == html uploader. jQuery( '.media-upload-form' ).addClass( 'html-uploader' ); } } function uploadError( fileObj, errorCode, message, up ) { var hundredmb = 100 * 1024 * 1024, max; switch ( errorCode ) { case plupload.FAILED: wpFileError( fileObj, pluploadL10n.upload_failed ); break; case plupload.FILE_EXTENSION_ERROR: wpFileExtensionError( up, fileObj, pluploadL10n.invalid_filetype ); break; case plupload.FILE_SIZE_ERROR: uploadSizeError( up, fileObj ); break; case plupload.IMAGE_FORMAT_ERROR: wpFileError( fileObj, pluploadL10n.not_an_image ); break; case plupload.IMAGE_MEMORY_ERROR: wpFileError( fileObj, pluploadL10n.image_memory_exceeded ); break; case plupload.IMAGE_DIMENSIONS_ERROR: wpFileError( fileObj, pluploadL10n.image_dimensions_exceeded ); break; case plupload.GENERIC_ERROR: wpQueueError( pluploadL10n.upload_failed ); break; case plupload.IO_ERROR: max = parseInt( up.settings.filters.max_file_size, 10 ); if ( max > hundredmb && fileObj.size > hundredmb ) { wpFileError( fileObj, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) ); } else { wpQueueError( pluploadL10n.io_error ); } break; case plupload.HTTP_ERROR: wpQueueError( pluploadL10n.http_error ); break; case plupload.INIT_ERROR: jQuery( '.media-upload-form' ).addClass( 'html-uploader' ); break; case plupload.SECURITY_ERROR: wpQueueError( pluploadL10n.security_error ); break; /* case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: case plupload.UPLOAD_ERROR.FILE_CANCELLED: jQuery( '#media-item-' + fileObj.id ).remove(); break;*/ default: wpFileError( fileObj, pluploadL10n.default_error ); } } function uploadSizeError( up, file ) { var message, errorDiv; message = pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name ); // Construct the error div. errorDiv = jQuery( '<div />' ) .attr( { 'id': 'media-item-' + file.id, 'class': 'media-item error' } ) .append( jQuery( '<p />' ) .text( message ) ); // Append the error. jQuery( '#media-items' ).append( errorDiv ); up.removeFile( file ); } function wpFileExtensionError( up, file, message ) { jQuery( '#media-items' ).append( '<div id="media-item-' + file.id + '" class="media-item error"><p>' + message + '</p></div>' ); up.removeFile( file ); } /** * Copies the attachment URL to the clipboard. * * @since 5.8.0 * * @param {MouseEvent} event A click event. * * @return {void} */ function copyAttachmentUploadURLClipboard() { var clipboard = new ClipboardJS( '.copy-attachment-url' ), successTimeout; clipboard.on( 'success', function( event ) { var triggerElement = jQuery( event.trigger ), successElement = jQuery( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) ); // Clear the selection and move focus back to the trigger. event.clearSelection(); // Show success visual feedback. clearTimeout( successTimeout ); successElement.removeClass( 'hidden' ); // Hide success visual feedback after 3 seconds since last success. successTimeout = setTimeout( function() { successElement.addClass( 'hidden' ); }, 3000 ); // Handle success audible feedback. wp.a11y.speak( pluploadL10n.file_url_copied ); } ); } jQuery( document ).ready( function( $ ) { copyAttachmentUploadURLClipboard(); var tryAgainCount = {}; var tryAgain; $( '.media-upload-form' ).on( 'click.uploader', function( e ) { var target = $( e.target ), tr, c; if ( target.is( 'input[type="radio"]' ) ) { // Remember the last used image size and alignment. tr = target.closest( 'tr' ); if ( tr.hasClass( 'align' ) ) setUserSetting( 'align', target.val() ); else if ( tr.hasClass( 'image-size' ) ) setUserSetting( 'imgsize', target.val() ); } else if ( target.is( 'button.button' ) ) { // Remember the last used image link url. c = e.target.className || ''; c = c.match( /url([^ '"]+)/ ); if ( c && c[1] ) { setUserSetting( 'urlbutton', c[1] ); target.siblings( '.urlfield' ).val( target.data( 'link-url' ) ); } } else if ( target.is( 'a.dismiss' ) ) { target.parents( '.media-item' ).fadeOut( 200, function() { $( this ).remove(); } ); } else if ( target.is( '.upload-flash-bypass a' ) || target.is( 'a.uploader-html' ) ) { // Switch uploader to html4. $( '#media-items, p.submit, span.big-file-warning' ).css( 'display', 'none' ); switchUploader( 0 ); e.preventDefault(); } else if ( target.is( '.upload-html-bypass a' ) ) { // Switch uploader to multi-file. $( '#media-items, p.submit, span.big-file-warning' ).css( 'display', '' ); switchUploader( 1 ); e.preventDefault(); } else if ( target.is( 'a.describe-toggle-on' ) ) { // Show. target.parent().addClass( 'open' ); target.siblings( '.slidetoggle' ).fadeIn( 250, function() { var S = $( window ).scrollTop(), H = $( window ).height(), top = $( this ).offset().top, h = $( this ).height(), b, B; if ( H && top && h ) { b = top + h; B = S + H; if ( b > B ) { if ( b - B < top - S ) window.scrollBy( 0, ( b - B ) + 10 ); else window.scrollBy( 0, top - S - 40 ); } } } ); e.preventDefault(); } else if ( target.is( 'a.describe-toggle-off' ) ) { // Hide. target.siblings( '.slidetoggle' ).fadeOut( 250, function() { target.parent().removeClass( 'open' ); } ); e.preventDefault(); } }); // Attempt to create image sub-sizes when an image was uploaded successfully // but the server responded with an HTTP 5xx error. tryAgain = function( up, error ) { var file = error.file; var times; var id; if ( ! error || ! error.responseHeaders ) { wpQueueError( pluploadL10n.http_error_image ); return; } id = error.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i ); if ( id && id[1] ) { id = id[1]; } else { wpQueueError( pluploadL10n.http_error_image ); return; } times = tryAgainCount[ file.id ]; if ( times && times > 4 ) { /* * The file may have been uploaded and attachment post created, * but post-processing and resizing failed... * Do a cleanup then tell the user to scale down the image and upload it again. */ $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: wpUploaderInit.multipart_params._wpnonce, attachment_id: id, _wp_upload_failed_cleanup: true, } }); if ( error.message && ( error.status < 500 || error.status >= 600 ) ) { wpQueueError( error.message ); } else { wpQueueError( pluploadL10n.http_error_image ); } return; } if ( ! times ) { tryAgainCount[ file.id ] = 1; } else { tryAgainCount[ file.id ] = ++times; } // Try to create the missing image sizes. $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: wpUploaderInit.multipart_params._wpnonce, attachment_id: id, _legacy_support: 'true', } }).done( function( response ) { var message; if ( response.success ) { uploadSuccess( file, response.data.id ); } else { if ( response.data && response.data.message ) { message = response.data.message; } wpQueueError( message || pluploadL10n.http_error_image ); } }).fail( function( jqXHR ) { // If another HTTP 5xx error, try try again... if ( jqXHR.status >= 500 && jqXHR.status < 600 ) { tryAgain( up, error ); return; } wpQueueError( pluploadL10n.http_error_image ); }); } // Init and set the uploader. uploader_init = function() { uploader = new plupload.Uploader( wpUploaderInit ); $( '#image_resize' ).on( 'change', function() { var arg = $( this ).prop( 'checked' ); setResize( arg ); if ( arg ) setUserSetting( 'upload_resize', '1' ); else deleteUserSetting( 'upload_resize' ); }); uploader.bind( 'Init', function( up ) { var uploaddiv = $( '#plupload-upload-ui' ); setResize( getUserSetting( 'upload_resize', false ) ); if ( up.features.dragdrop && ! $( document.body ).hasClass( 'mobile' ) ) { uploaddiv.addClass( 'drag-drop' ); $( '#drag-drop-area' ).on( 'dragover.wp-uploader', function() { // dragenter doesn't fire right :( uploaddiv.addClass( 'drag-over' ); }).on( 'dragleave.wp-uploader, drop.wp-uploader', function() { uploaddiv.removeClass( 'drag-over' ); }); } else { uploaddiv.removeClass( 'drag-drop' ); $( '#drag-drop-area' ).off( '.wp-uploader' ); } if ( up.runtime === 'html4' ) { $( '.upload-flash-bypass' ).hide(); } }); uploader.bind( 'postinit', function( up ) { up.refresh(); }); uploader.init(); uploader.bind( 'FilesAdded', function( up, files ) { $( '#media-upload-error' ).empty(); uploadStart(); plupload.each( files, function( file ) { if ( file.type === 'image/heic' && up.settings.heic_upload_error ) { // Show error but do not block uploading. wpQueueError( pluploadL10n.unsupported_image ); } else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) { // Disallow uploading of WebP images if the server cannot edit them. wpQueueError( pluploadL10n.noneditable_image ); up.removeFile( file ); return; } else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) { // Disallow uploading of AVIF images if the server cannot edit them. wpQueueError( pluploadL10n.noneditable_image ); up.removeFile( file ); return; } fileQueued( file ); }); up.refresh(); up.start(); }); uploader.bind( 'UploadFile', function( up, file ) { fileUploading( up, file ); }); uploader.bind( 'UploadProgress', function( up, file ) { uploadProgress( up, file ); }); uploader.bind( 'Error', function( up, error ) { var isImage = error.file && error.file.type && error.file.type.indexOf( 'image/' ) === 0; var status = error && error.status; // If the file is an image and the error is HTTP 5xx try to create sub-sizes again. if ( isImage && status >= 500 && status < 600 ) { tryAgain( up, error ); return; } uploadError( error.file, error.code, error.message, up ); up.refresh(); }); uploader.bind( 'FileUploaded', function( up, file, response ) { uploadSuccess( file, response.response ); }); uploader.bind( 'UploadComplete', function() { uploadComplete(); }); }; if ( typeof( wpUploaderInit ) == 'object' ) { uploader_init(); } }); PK Yd[_�$�AA AA wp-plupload.jsnu �[��� /* global pluploadL10n, plupload, _wpPluploadSettings */ /** * @namespace wp */ window.wp = window.wp || {}; ( function( exports, $ ) { var Uploader; if ( typeof _wpPluploadSettings === 'undefined' ) { return; } /** * A WordPress uploader. * * The Plupload library provides cross-browser uploader UI integration. * This object bridges the Plupload API to integrate uploads into the * WordPress back end and the WordPress media experience. * * @class * @memberOf wp * @alias wp.Uploader * * @param {object} options The options passed to the new plupload instance. * @param {object} options.container The id of uploader container. * @param {object} options.browser The id of button to trigger the file select. * @param {object} options.dropzone The id of file drop target. * @param {object} options.plupload An object of parameters to pass to the plupload instance. * @param {object} options.params An object of parameters to pass to $_POST when uploading the file. * Extends this.plupload.multipart_params under the hood. */ Uploader = function( options ) { var self = this, isIE, // Not used, back-compat. elements = { container: 'container', browser: 'browse_button', dropzone: 'drop_element' }, tryAgainCount = {}, tryAgain, key, error, fileUploaded; this.supports = { upload: Uploader.browser.supported }; this.supported = this.supports.upload; if ( ! this.supported ) { return; } // Arguments to send to pluplad.Uploader(). // Use deep extend to ensure that multipart_params and other objects are cloned. this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults ); this.container = document.body; // Set default container. /* * Extend the instance with options. * * Use deep extend to allow options.plupload to override individual * default plupload keys. */ $.extend( true, this, options ); // Proxy all methods so this always refers to the current instance. for ( key in this ) { if ( typeof this[ key ] === 'function' ) { this[ key ] = $.proxy( this[ key ], this ); } } // Ensure all elements are jQuery elements and have id attributes, // then set the proper plupload arguments to the ids. for ( key in elements ) { if ( ! this[ key ] ) { continue; } this[ key ] = $( this[ key ] ).first(); if ( ! this[ key ].length ) { delete this[ key ]; continue; } if ( ! this[ key ].prop('id') ) { this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ ); } this.plupload[ elements[ key ] ] = this[ key ].prop('id'); } // If the uploader has neither a browse button nor a dropzone, bail. if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) { return; } // Initialize the plupload instance. this.uploader = new plupload.Uploader( this.plupload ); delete this.plupload; // Set default params and remove this.params alias. this.param( this.params || {} ); delete this.params; /** * Attempt to create image sub-sizes when an image was uploaded successfully * but the server responded with HTTP 5xx error. * * @since 5.3.0 * * @param {string} message Error message. * @param {object} data Error data from Plupload. * @param {plupload.File} file File that was uploaded. */ tryAgain = function( message, data, file ) { var times, id; if ( ! data || ! data.responseHeaders ) { error( pluploadL10n.http_error_image, data, file, 'no-retry' ); return; } id = data.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i ); if ( id && id[1] ) { id = id[1]; } else { error( pluploadL10n.http_error_image, data, file, 'no-retry' ); return; } times = tryAgainCount[ file.id ]; if ( times && times > 4 ) { /* * The file may have been uploaded and attachment post created, * but post-processing and resizing failed... * Do a cleanup then tell the user to scale down the image and upload it again. */ $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce, attachment_id: id, _wp_upload_failed_cleanup: true, } }); error( message, data, file, 'no-retry' ); return; } if ( ! times ) { tryAgainCount[ file.id ] = 1; } else { tryAgainCount[ file.id ] = ++times; } // Another request to try to create the missing image sub-sizes. $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce, attachment_id: id, } }).done( function( response ) { if ( response.success ) { fileUploaded( self.uploader, file, response ); } else { if ( response.data && response.data.message ) { message = response.data.message; } error( message, data, file, 'no-retry' ); } }).fail( function( jqXHR ) { // If another HTTP 5xx error, try try again... if ( jqXHR.status >= 500 && jqXHR.status < 600 ) { tryAgain( message, data, file ); return; } error( message, data, file, 'no-retry' ); }); } /** * Custom error callback. * * Add a new error to the errors collection, so other modules can track * and display errors. @see wp.Uploader.errors. * * @param {string} message Error message. * @param {object} data Error data from Plupload. * @param {plupload.File} file File that was uploaded. * @param {string} retry Whether to try again to create image sub-sizes. Passing 'no-retry' will prevent it. */ error = function( message, data, file, retry ) { var isImage = file.type && file.type.indexOf( 'image/' ) === 0, status = data && data.status; // If the file is an image and the error is HTTP 5xx try to create sub-sizes again. if ( retry !== 'no-retry' && isImage && status >= 500 && status < 600 ) { tryAgain( message, data, file ); return; } if ( file.attachment ) { file.attachment.destroy(); } Uploader.errors.unshift({ message: message || pluploadL10n.default_error, data: data, file: file }); self.error( message, data, file ); }; /** * After a file is successfully uploaded, update its model. * * @param {plupload.Uploader} up Uploader instance. * @param {plupload.File} file File that was uploaded. * @param {Object} response Object with response properties. */ fileUploaded = function( up, file, response ) { var complete; // Remove the "uploading" UI elements. _.each( ['file','loaded','size','percent'], function( key ) { file.attachment.unset( key ); } ); file.attachment.set( _.extend( response.data, { uploading: false } ) ); wp.media.model.Attachment.get( response.data.id, file.attachment ); complete = Uploader.queue.all( function( attachment ) { return ! attachment.get( 'uploading' ); }); if ( complete ) { Uploader.queue.reset(); } self.success( file.attachment ); } /** * After the Uploader has been initialized, initialize some behaviors for the dropzone. * * @param {plupload.Uploader} uploader Uploader instance. */ this.uploader.bind( 'init', function( uploader ) { var timer, active, dragdrop, dropzone = self.dropzone; dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile; // Generate drag/drop helper classes. if ( ! dropzone ) { return; } dropzone.toggleClass( 'supports-drag-drop', !! dragdrop ); if ( ! dragdrop ) { return dropzone.unbind('.wp-uploader'); } // 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'. dropzone.on( 'dragover.wp-uploader', function() { if ( timer ) { clearTimeout( timer ); } if ( active ) { return; } dropzone.trigger('dropzone:enter').addClass('drag-over'); active = true; }); dropzone.on('dragleave.wp-uploader, drop.wp-uploader', function() { /* * Using an instant timer prevents the drag-over class * from being quickly removed and re-added when elements * inside the dropzone are repositioned. * * @see https://core.trac.wordpress.org/ticket/21705 */ timer = setTimeout( function() { active = false; dropzone.trigger('dropzone:leave').removeClass('drag-over'); }, 0 ); }); self.ready = true; $(self).trigger( 'uploader:ready' ); }); this.uploader.bind( 'postinit', function( up ) { up.refresh(); self.init(); }); this.uploader.init(); if ( this.browser ) { this.browser.on( 'mouseenter', this.refresh ); } else { this.uploader.disableBrowse( true ); } $( self ).on( 'uploader:ready', function() { $( '.moxie-shim-html5 input[type="file"]' ) .attr( { tabIndex: '-1', 'aria-hidden': 'true' } ); } ); /** * After files were filtered and added to the queue, create a model for each. * * @param {plupload.Uploader} up Uploader instance. * @param {Array} files Array of file objects that were added to queue by the user. */ this.uploader.bind( 'FilesAdded', function( up, files ) { _.each( files, function( file ) { var attributes, image; // Ignore failed uploads. if ( plupload.FAILED === file.status ) { return; } if ( file.type === 'image/heic' && up.settings.heic_upload_error ) { // Show error but do not block uploading. Uploader.errors.unshift({ message: pluploadL10n.unsupported_image, data: {}, file: file }); } else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) { // Disallow uploading of WebP images if the server cannot edit them. error( pluploadL10n.noneditable_image, {}, file, 'no-retry' ); up.removeFile( file ); return; } else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) { // Disallow uploading of AVIF images if the server cannot edit them. error( pluploadL10n.noneditable_image, {}, file, 'no-retry' ); up.removeFile( file ); return; } // Generate attributes for a new `Attachment` model. attributes = _.extend({ file: file, uploading: true, date: new Date(), filename: file.name, menuOrder: 0, uploadedTo: wp.media.model.settings.post.id }, _.pick( file, 'loaded', 'size', 'percent' ) ); // Handle early mime type scanning for images. image = /(?:jpe?g|png|gif)$/i.exec( file.name ); // For images set the model's type and subtype attributes. if ( image ) { attributes.type = 'image'; // `jpeg`, `png` and `gif` are valid subtypes. // `jpg` is not, so map it to `jpeg`. attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0]; } // Create a model for the attachment, and add it to the Upload queue collection // so listeners to the upload queue can track and display upload progress. file.attachment = wp.media.model.Attachment.create( attributes ); Uploader.queue.add( file.attachment ); self.added( file.attachment ); }); up.refresh(); up.start(); }); this.uploader.bind( 'UploadProgress', function( up, file ) { file.attachment.set( _.pick( file, 'loaded', 'percent' ) ); self.progress( file.attachment ); }); /** * After a file is successfully uploaded, update its model. * * @param {plupload.Uploader} up Uploader instance. * @param {plupload.File} file File that was uploaded. * @param {Object} response Object with response properties. * @return {mixed} */ this.uploader.bind( 'FileUploaded', function( up, file, response ) { try { response = JSON.parse( response.response ); } catch ( e ) { return error( pluploadL10n.default_error, e, file ); } if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) { return error( pluploadL10n.default_error, null, file ); } else if ( ! response.success ) { return error( response.data && response.data.message, response.data, file ); } // Success. Update the UI with the new attachment. fileUploaded( up, file, response ); }); /** * When plupload surfaces an error, send it to the error handler. * * @param {plupload.Uploader} up Uploader instance. * @param {Object} pluploadError Contains code, message and sometimes file and other details. */ this.uploader.bind( 'Error', function( up, pluploadError ) { var message = pluploadL10n.default_error, key; // Check for plupload errors. for ( key in Uploader.errorMap ) { if ( pluploadError.code === plupload[ key ] ) { message = Uploader.errorMap[ key ]; if ( typeof message === 'function' ) { message = message( pluploadError.file, pluploadError ); } break; } } error( message, pluploadError, pluploadError.file ); up.refresh(); }); }; // Adds the 'defaults' and 'browser' properties. $.extend( Uploader, _wpPluploadSettings ); Uploader.uuid = 0; // Map Plupload error codes to user friendly error messages. Uploader.errorMap = { 'FAILED': pluploadL10n.upload_failed, 'FILE_EXTENSION_ERROR': pluploadL10n.invalid_filetype, 'IMAGE_FORMAT_ERROR': pluploadL10n.not_an_image, 'IMAGE_MEMORY_ERROR': pluploadL10n.image_memory_exceeded, 'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded, 'GENERIC_ERROR': pluploadL10n.upload_failed, 'IO_ERROR': pluploadL10n.io_error, 'SECURITY_ERROR': pluploadL10n.security_error, 'FILE_SIZE_ERROR': function( file ) { return pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name ); }, 'HTTP_ERROR': function( file ) { if ( file.type && file.type.indexOf( 'image/' ) === 0 ) { return pluploadL10n.http_error_image; } return pluploadL10n.http_error; }, }; $.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{ /** * Acts as a shortcut to extending the uploader's multipart_params object. * * param( key ) * Returns the value of the key. * * param( key, value ) * Sets the value of a key. * * param( map ) * Sets values for a map of data. */ param: function( key, value ) { if ( arguments.length === 1 && typeof key === 'string' ) { return this.uploader.settings.multipart_params[ key ]; } if ( arguments.length > 1 ) { this.uploader.settings.multipart_params[ key ] = value; } else { $.extend( this.uploader.settings.multipart_params, key ); } }, /** * Make a few internal event callbacks available on the wp.Uploader object * to change the Uploader internals if absolutely necessary. */ init: function() {}, error: function() {}, success: function() {}, added: function() {}, progress: function() {}, complete: function() {}, refresh: function() { var node, attached, container, id; if ( this.browser ) { node = this.browser[0]; // Check if the browser node is in the DOM. while ( node ) { if ( node === document.body ) { attached = true; break; } node = node.parentNode; } /* * If the browser node is not attached to the DOM, * use a temporary container to house it, as the browser button shims * require the button to exist in the DOM at all times. */ if ( ! attached ) { id = 'wp-uploader-browser-' + this.uploader.id; container = $( '#' + id ); if ( ! container.length ) { container = $('<div class="wp-uploader-browser" />').css({ position: 'fixed', top: '-1000px', left: '-1000px', height: 0, width: 0 }).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body'); } container.append( this.browser ); } } this.uploader.refresh(); } }); // Create a collection of attachments in the upload queue, // so that other modules can track and display upload progress. Uploader.queue = new wp.media.model.Attachments( [], { query: false }); // Create a collection to collect errors incurred while attempting upload. Uploader.errors = new Backbone.Collection(); exports.Uploader = Uploader; })( wp, jQuery ); PK Yd[��<