Archived
Updates
This commit is contained in:
1 parent
70d2335bba
commit
7428b67da5
1086 files changed
+94145
-59082
No files matched your search
@@ -0,0 +1,183 @@
|
||||
<?php
|
||||
/**
|
||||
* @package WPSEO\Admin\Import
|
||||
*/
|
||||
|
||||
/**
|
||||
* class WPSEO_Import
|
||||
*
|
||||
* Class with functionality to import the WP SEO settings
|
||||
*/
|
||||
class WPSEO_Import {
|
||||
|
||||
/**
|
||||
* Message about the import
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $msg = '';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $file;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $filename;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $old_wpseo_version = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $upload_dir;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
if ( ! $this->handle_upload() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->determine_path();
|
||||
|
||||
if ( ! $this->unzip_file() ) {
|
||||
$this->clean_up();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->parse_options();
|
||||
|
||||
$this->clean_up();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the file upload
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function handle_upload() {
|
||||
$this->file = wp_handle_upload( $_FILES['settings_import_file'] );
|
||||
if ( is_wp_error( $this->file ) ) {
|
||||
$this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . $this->file->get_error_message();
|
||||
|
||||
return false;
|
||||
}
|
||||
elseif ( ! isset( $this->file['file'] ) ) {
|
||||
$this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'Upload failed.', 'wordpress-seo' );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the path to the import file
|
||||
*/
|
||||
private function determine_path() {
|
||||
$this->upload_dir = wp_upload_dir();
|
||||
|
||||
if ( ! defined( 'DIRECTORY_SEPARATOR' ) ) {
|
||||
define( 'DIRECTORY_SEPARATOR', '/' );
|
||||
}
|
||||
$this->path = $this->upload_dir['basedir'] . DIRECTORY_SEPARATOR . 'wpseo-import' . DIRECTORY_SEPARATOR;
|
||||
|
||||
if ( ! isset( $GLOBALS['wp_filesystem'] ) || ! is_object( $GLOBALS['wp_filesystem'] ) ) {
|
||||
WP_Filesystem();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unzip the file
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function unzip_file() {
|
||||
$unzipped = unzip_file( $this->file['file'], $this->path );
|
||||
if ( is_wp_error( $unzipped ) ) {
|
||||
$this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . sprintf( __( 'Unzipping failed with error "%s".', 'wordpress-seo' ), $unzipped->get_error_message() );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->filename = $this->path . 'settings.ini';
|
||||
if ( ! is_file( $this->filename ) || ! is_readable( $this->filename ) ) {
|
||||
$this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'Unzipping failed - file settings.ini not found.', 'wordpress-seo' );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the option file
|
||||
*/
|
||||
private function parse_options() {
|
||||
$options = parse_ini_file( $this->filename, true );
|
||||
|
||||
if ( is_array( $options ) && $options !== array() ) {
|
||||
if ( isset( $options['wpseo']['version'] ) && $options['wpseo']['version'] !== '' ) {
|
||||
$this->old_wpseo_version = $options['wpseo']['version'];
|
||||
}
|
||||
foreach ( $options as $name => $opt_group ) {
|
||||
$this->parse_option_group( $name, $opt_group, $options );
|
||||
}
|
||||
$this->msg = __( 'Settings successfully imported.', 'wordpress-seo' );
|
||||
}
|
||||
else {
|
||||
$this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'No settings found in file.', 'wordpress-seo' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the option group and import it
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $opt_group
|
||||
* @param array $options
|
||||
*/
|
||||
private function parse_option_group( $name, $opt_group, $options ) {
|
||||
if ( $name === 'wpseo_taxonomy_meta' ) {
|
||||
$opt_group = json_decode( urldecode( $opt_group['wpseo_taxonomy_meta'] ), true );
|
||||
}
|
||||
|
||||
// Make sure that the imported options are cleaned/converted on import
|
||||
$option_instance = WPSEO_Options::get_option_instance( $name );
|
||||
if ( is_object( $option_instance ) && method_exists( $option_instance, 'import' ) ) {
|
||||
$option_instance->import( $opt_group, $this->old_wpseo_version, $options );
|
||||
}
|
||||
elseif ( WP_DEBUG === true || ( defined( 'WPSEO_DEBUG' ) && WPSEO_DEBUG === true ) ) {
|
||||
$this->msg = sprintf( __( 'Setting "%s" is no longer used and has been discarded.', 'wordpress-seo' ), $name );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the files
|
||||
*/
|
||||
private function clean_up() {
|
||||
if ( file_exists( $this->filename ) && is_writable( $this->filename ) ) {
|
||||
unlink( $this->filename );
|
||||
}
|
||||
if ( file_exists( $this->file['file'] ) && is_writable( $this->file['file'] ) ) {
|
||||
unlink( $this->file['file'] );
|
||||
}
|
||||
if ( file_exists( $this->path ) && is_writable( $this->path ) ) {
|
||||
rmdir( $this->path );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user