| | <?php |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | #[AllowDynamicProperties] |
| | class File_Upload_Upgrader { |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public $package; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public $filename; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public $id = 0; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function __construct( $form, $urlholder ) { |
| |
|
| | if ( empty( $_FILES[ $form ]['name'] ) && empty( $_GET[ $urlholder ] ) ) { |
| | wp_die( __( 'Please select a file' ) ); |
| | } |
| |
|
| | |
| | if ( ! empty( $_FILES ) ) { |
| | $overrides = array( |
| | 'test_form' => false, |
| | 'test_type' => false, |
| | ); |
| | $file = wp_handle_upload( $_FILES[ $form ], $overrides ); |
| |
|
| | if ( isset( $file['error'] ) ) { |
| | wp_die( $file['error'] ); |
| | } |
| |
|
| | if ( 'pluginzip' === $form || 'themezip' === $form ) { |
| | if ( ! wp_zip_file_is_valid( $file['file'] ) ) { |
| | wp_delete_file( $file['file'] ); |
| |
|
| | if ( 'pluginzip' === $form ) { |
| | $plugins_page = sprintf( |
| | '<a href="%s">%s</a>', |
| | self_admin_url( 'plugin-install.php' ), |
| | __( 'Return to the Plugin Installer' ) |
| | ); |
| | wp_die( __( 'Incompatible Archive.' ) . '<br />' . $plugins_page ); |
| | } |
| |
|
| | if ( 'themezip' === $form ) { |
| | $themes_page = sprintf( |
| | '<a href="%s" target="_parent">%s</a>', |
| | self_admin_url( 'theme-install.php' ), |
| | __( 'Return to the Theme Installer' ) |
| | ); |
| | wp_die( __( 'Incompatible Archive.' ) . '<br />' . $themes_page ); |
| | } |
| | } |
| | } |
| |
|
| | $this->filename = $_FILES[ $form ]['name']; |
| | $this->package = $file['file']; |
| |
|
| | |
| | $attachment = array( |
| | 'post_title' => $this->filename, |
| | 'post_content' => $file['url'], |
| | 'post_mime_type' => $file['type'], |
| | 'guid' => $file['url'], |
| | 'context' => 'upgrader', |
| | 'post_status' => 'private', |
| | ); |
| |
|
| | |
| | $this->id = wp_insert_attachment( $attachment, $file['file'] ); |
| |
|
| | |
| | wp_schedule_single_event( time() + 2 * HOUR_IN_SECONDS, 'upgrader_scheduled_cleanup', array( $this->id ) ); |
| |
|
| | } elseif ( is_numeric( $_GET[ $urlholder ] ) ) { |
| | |
| | $this->id = (int) $_GET[ $urlholder ]; |
| | $attachment = get_post( $this->id ); |
| | if ( empty( $attachment ) ) { |
| | wp_die( __( 'Please select a file' ) ); |
| | } |
| |
|
| | $this->filename = $attachment->post_title; |
| | $this->package = get_attached_file( $attachment->ID ); |
| | } else { |
| | |
| | $uploads = wp_upload_dir(); |
| | if ( ! ( $uploads && false === $uploads['error'] ) ) { |
| | wp_die( $uploads['error'] ); |
| | } |
| |
|
| | $this->filename = sanitize_file_name( $_GET[ $urlholder ] ); |
| | $this->package = $uploads['basedir'] . '/' . $this->filename; |
| |
|
| | if ( ! str_starts_with( realpath( $this->package ), realpath( $uploads['basedir'] ) ) ) { |
| | wp_die( __( 'Please select a file' ) ); |
| | } |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function cleanup() { |
| | if ( $this->id ) { |
| | wp_delete_attachment( $this->id ); |
| |
|
| | } elseif ( file_exists( $this->package ) ) { |
| | return @unlink( $this->package ); |
| | } |
| |
|
| | return true; |
| | } |
| | } |
| |
|