Submit
Path:
~
/
home
/
bfxleof
/
www
/
wp-content
/
plugins
/
wordpress-seo
/
admin
/
File Content:
class-abstract-plugin-importer.php
<?php /** * This file holds the abstract class for dealing with imports from other plugins. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Plugin_Importer. * * Class with functionality to import meta data from other plugins. */ abstract class WPSEO_Plugin_Importer { /** * Holds the import status object. * * @var WPSEO_Import_Status */ protected $status; /** * The plugin name. * * @var string */ protected $plugin_name; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys; /** * Class constructor. */ public function __construct() {} /** * Returns the string for the plugin we're importing from. * * @return string Plugin name. */ public function get_plugin_name() { return $this->plugin_name; } /** * Imports the settings and post meta data from another SEO plugin. * * @return WPSEO_Import_Status Import status object. */ public function run_import() { $this->status = new WPSEO_Import_Status( 'import', false ); if ( ! $this->detect() ) { return $this->status; } $this->status->set_status( $this->import() ); // Flush the entire cache, as we no longer know what's valid and what's not. wp_cache_flush(); return $this->status; } /** * Handles post meta data to import. * * @return bool Import success status. */ protected function import() { return $this->meta_keys_clone( $this->clone_keys ); } /** * Removes the plugin data from the database. * * @return WPSEO_Import_Status Import status object. */ public function run_cleanup() { $this->status = new WPSEO_Import_Status( 'cleanup', false ); if ( ! $this->detect() ) { return $this->status; } return $this->status->set_status( $this->cleanup() ); } /** * Removes the plugin data from the database. * * @return bool Cleanup status. */ protected function cleanup() { global $wpdb; if ( empty( $this->meta_key ) ) { return true; } $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s", $this->meta_key ) ); $result = $wpdb->__get( 'result' ); if ( ! $result ) { $this->cleanup_error_msg(); } return $result; } /** * Sets the status message for when a cleanup has gone bad. * * @return void */ protected function cleanup_error_msg() { /* translators: %s is replaced with the plugin's name. */ $this->status->set_msg( sprintf( __( 'Cleanup of %s data failed.', 'wordpress-seo' ), $this->plugin_name ) ); } /** * Detects whether an import for this plugin is needed. * * @return WPSEO_Import_Status Import status object. */ public function run_detect() { $this->status = new WPSEO_Import_Status( 'detect', false ); if ( ! $this->detect() ) { return $this->status; } return $this->status->set_status( true ); } /** * Detects whether there is post meta data to import. * * @return bool Boolean indicating whether there is something to import. */ protected function detect() { global $wpdb; $meta_keys = wp_list_pluck( $this->clone_keys, 'old_key' ); $result = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) AS `count` FROM {$wpdb->postmeta} WHERE meta_key IN ( " . implode( ', ', array_fill( 0, count( $meta_keys ), '%s' ) ) . ' )', $meta_keys ) ); if ( $result === '0' ) { return false; } return true; } /** * Helper function to clone meta keys and (optionally) change their values in bulk. * * @param string $old_key The existing meta key. * @param string $new_key The new meta key. * @param array $replace_values An array, keys old value, values new values. * * @return bool Clone status. */ protected function meta_key_clone( $old_key, $new_key, $replace_values = [] ) { global $wpdb; // First we create a temp table with all the values for meta_key. $result = $wpdb->query( $wpdb->prepare( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- This is intentional + temporary. "CREATE TEMPORARY TABLE tmp_meta_table SELECT * FROM {$wpdb->postmeta} WHERE meta_key = %s", $old_key ) ); if ( $result === false ) { $this->set_missing_db_rights_status(); return false; } // Delete all the values in our temp table for posts that already have data for $new_key. $wpdb->query( $wpdb->prepare( "DELETE FROM tmp_meta_table WHERE post_id IN ( SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s )", WPSEO_Meta::$meta_prefix . $new_key ) ); /* * We set meta_id to NULL so on re-insert into the postmeta table, MYSQL can set * new meta_id's and we don't get duplicates. */ $wpdb->query( 'UPDATE tmp_meta_table SET meta_id = NULL' ); // Now we rename the meta_key. $wpdb->query( $wpdb->prepare( 'UPDATE tmp_meta_table SET meta_key = %s', WPSEO_Meta::$meta_prefix . $new_key ) ); $this->meta_key_clone_replace( $replace_values ); // With everything done, we insert all our newly cloned lines into the postmeta table. $wpdb->query( "INSERT INTO {$wpdb->postmeta} SELECT * FROM tmp_meta_table" ); // Now we drop our temporary table. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- This is intentional + a temporary table. $wpdb->query( 'DROP TEMPORARY TABLE IF EXISTS tmp_meta_table' ); return true; } /** * Clones multiple meta keys. * * @param array $clone_keys The keys to clone. * * @return bool Success status. */ protected function meta_keys_clone( $clone_keys ) { foreach ( $clone_keys as $clone_key ) { $result = $this->meta_key_clone( $clone_key['old_key'], $clone_key['new_key'], isset( $clone_key['convert'] ) ? $clone_key['convert'] : [] ); if ( ! $result ) { return false; } } return true; } /** * Sets the import status to false and returns a message about why it failed. */ protected function set_missing_db_rights_status() { $this->status->set_status( false ); /* translators: %s is replaced with Yoast SEO. */ $this->status->set_msg( sprintf( __( 'The %s importer functionality uses temporary database tables. It seems your WordPress install does not have the capability to do this, please consult your hosting provider.', 'wordpress-seo' ), 'Yoast SEO' ) ); } /** * Helper function to search for a key in an array and maybe save it as a meta field. * * @param string $plugin_key The key in the $data array to check. * @param string $yoast_key The identifier we use in our meta settings. * @param array $data The array of data for this post to sift through. * @param int $post_id The post ID. * * @return void */ protected function import_meta_helper( $plugin_key, $yoast_key, $data, $post_id ) { if ( ! empty( $data[ $plugin_key ] ) ) { $this->maybe_save_post_meta( $yoast_key, $data[ $plugin_key ], $post_id ); } } /** * Saves a post meta value if it doesn't already exist. * * @param string $new_key The key to save. * @param mixed $value The value to set the key to. * @param int $post_id The Post to save the meta for. */ protected function maybe_save_post_meta( $new_key, $value, $post_id ) { // Big. Fat. Sigh. Mostly used for _yst_is_cornerstone, but might be useful for other hidden meta's. $key = WPSEO_Meta::$meta_prefix . $new_key; $wpseo_meta = true; if ( substr( $new_key, 0, 1 ) === '_' ) { $key = $new_key; $wpseo_meta = false; } $existing_value = get_post_meta( $post_id, $key, true ); if ( empty( $existing_value ) ) { if ( $wpseo_meta ) { WPSEO_Meta::set_value( $new_key, $value, $post_id ); return; } update_post_meta( $post_id, $new_key, $value ); } } /** * Replaces values in our temporary table according to our settings. * * @param array $replace_values Key value pair of values to replace with other values. * * @return void */ protected function meta_key_clone_replace( $replace_values ) { global $wpdb; // Now we replace values if needed. if ( is_array( $replace_values ) && $replace_values !== [] ) { foreach ( $replace_values as $old_value => $new_value ) { $wpdb->query( $wpdb->prepare( 'UPDATE tmp_meta_table SET meta_value = %s WHERE meta_value = %s', $new_value, $old_value ) ); } } } }
Submit
FILE
FOLDER
Name
Size
Permission
Action
ajax
---
0755
capabilities
---
0755
config-ui
---
0755
endpoints
---
0755
exceptions
---
0755
filters
---
0755
formatter
---
0755
google_search_console
---
0755
import
---
0755
listeners
---
0755
menu
---
0755
metabox
---
0755
notifiers
---
0755
pages
---
0755
roles
---
0755
ryte
---
0755
services
---
0755
statistics
---
0755
taxonomy
---
0755
tracking
---
0755
views
---
0755
watchers
---
0755
.DS_Store
10234 bytes
0644
20200616130143_ReplacePermalinkHashIndex-20260705090100.php
2293 bytes
0644
20200616130143_ReplacePermalinkHashIndex.php
2293 bytes
0644
AjaxController.php
2162 bytes
0644
DownloadConfController-20260706051531.php
945 bytes
0644
DownloadConfController.php
945 bytes
0644
JsonSerializable-20260705095652.php
577 bytes
0644
JsonSerializable-20260705181353.php
577 bytes
0644
JsonSerializable.php
577 bytes
0644
LimitStream.php
4209 bytes
0644
MessageInterface.php
6950 bytes
0644
README.md
2555 bytes
0644
admin-network-it_IT.l10n.php
42133 bytes
0644
admin-settings-changed-listener.php
2403 bytes
0644
ajax.php
9095 bytes
0644
base-20260707183508.php
2793 bytes
0644
base.php
2793 bytes
0644
bing-presenter.php
638 bytes
0644
class-abstract-capability-manager.php
2265 bytes
0644
class-abstract-plugin-importer.php
8466 bytes
0644
class-admin-asset-analysis-worker-location.php
1849 bytes
0644
class-admin-asset-location.php
488 bytes
0644
class-admin-asset-manager-20260623075208.php
17386 bytes
0644
class-admin-asset-manager.php
17386 bytes
0644
class-admin-asset-seo-location.php
2147 bytes
0644
class-admin-asset-yoast-components-l10n.php
1679 bytes
0644
class-admin-media-purge-notification.php
3300 bytes
0644
class-admin-menu-20260623023741.php
4046 bytes
0644
class-admin-utils-20260622095013.php
2147 bytes
0644
class-admin-utils.php
2147 bytes
0644
class-asset.php
4016 bytes
0644
class-bulk-description-editor-list-table.php
2100 bytes
0644
class-bulk-editor-list-table.php
28411 bytes
0644
class-bulk-title-editor-list-table.php
2286 bytes
0644
class-collector.php
984 bytes
0644
class-config-20260622104031.php
5976 bytes
0644
class-endpoint.php
471 bytes
0644
class-expose-shortlinks-20260622052420.php
4996 bytes
0644
class-expose-shortlinks.php
4996 bytes
0644
class-gutenberg-compatibility-20260622104351.php
2510 bytes
0644
class-helpscout-20260623075312.php
6972 bytes
0644
class-helpscout.php
6972 bytes
0644
class-import-detector.php
728 bytes
0644
class-meta-columns.php
22386 bytes
0644
class-metabox-formatter.php
12602 bytes
0644
class-metabox-null-tab-20260705060522.php
425 bytes
0644
class-metabox-null-tab.php
425 bytes
0644
class-my-yoast-proxy.php
5373 bytes
0644
class-option-tab-20260622044109.php
1784 bytes
0644
class-option-tabs-formatter-20260622034247.php
2321 bytes
0644
class-option-tabs-formatter.php
2321 bytes
0644
class-option-tabs.php
2097 bytes
0644
class-paper-presenter.php
3600 bytes
0644
class-plugin-availability-20260622071513.php
8440 bytes
0644
class-plugin-availability.php
8440 bytes
0644
class-plugin-conflict-20260622015355.php
8640 bytes
0644
class-premium-popup.php
2833 bytes
0644
class-premium-upsell-admin-block.php
3631 bytes
0644
class-product-upsell-notice.php
5216 bytes
0644
class-schema-person-upgrade-notification.php
2133 bytes
0644
class-sitemaps-admin-20260703023908.php
3665 bytes
0644
class-sitemaps-admin-20260705122758.php
3665 bytes
0644
class-sitemaps-admin.php
3665 bytes
0644
class-tracking-server-data.php
1989 bytes
0644
class-tracking-settings-data-20260623041512.php
5203 bytes
0644
class-tracking-settings-data.php
5203 bytes
0644
class-wpseo-statistics.php
1443 bytes
0644
class-yoast-columns.php
3281 bytes
0644
class-yoast-dashboard-widget.php
4033 bytes
0644
class-yoast-form-20260622052325.php
31520 bytes
0644
class-yoast-form.php
31520 bytes
0644
class-yoast-notification-20260622071615.php
9611 bytes
0644
class-yoast-notification-center.php
23601 bytes
0644
class-yoast-notification.php
9611 bytes
0644
class-yoast-notifications.php
8784 bytes
0644
class-yoast-plugin-conflict.php
10390 bytes
0644
class.archive.config.php
1364 bytes
0644
class.pack.database.php
30838 bytes
0644
ctrl.package.php
17073 bytes
0644
dashboard-1650-rtl.css
1634 bytes
0644
define.php
4567 bytes
0644
description-presenter-20260623011438.php
1026 bytes
0644
duplicator-20260623154449.php
1781 bytes
0644
duplicator-en_US.mo
582 bytes
0644
duplicator-main-20260623011502.php
26907 bytes
0644
duplicator.php
1781 bytes
0644
elFinderPlugin-20260705182242.php
3331 bytes
0644
elFinderPlugin.php
3331 bytes
0644
elFinderVolumeLocalFileSystem.class-20260623050500-20260705194237.php
48544 bytes
0644
elFinderVolumeLocalFileSystem.class-20260623050500-20260706065003.php
48544 bytes
0644
elFinderVolumeLocalFileSystem.class-20260623050500.php
48544 bytes
0644
elFinderVolumeLocalFileSystem.class.php
48544 bytes
0644
environment-helper.php
596 bytes
0644
exceptions.php
708 bytes
0644
flexible-widget.php
11167 bytes
0644
image-helper.php
10231 bytes
0644
image-presenter.php
2093 bytes
0644
inc.data.php
5121 bytes
0644
inc.validator-20260705162141.php
5401 bytes
0644
inc.validator.php
5401 bytes
0644
index.php
157663 bytes
0644
interface-sitemap-cache-data.php
1208 bytes
0644
loco-20260705162115-20260707054756.php
5626 bytes
0644
loco-20260705162115.php
5626 bytes
0644
loco.php
5626 bytes
0644
loco.xml
657 bytes
0644
manager.php
14659 bytes
0644
meta-fields-presenter.php
1600 bytes
0644
module-20260706041630-20260707074326.php
1297 bytes
0644
module-20260706041630.php
1297 bytes
0644
module.php
1297 bytes
0644
partial-notifications-errors-20260623074505.php
1139 bytes
0644
partial-notifications-errors.php
1139 bytes
0644
quick-edit-handler-1650-20260707001148.js
1848 bytes
0644
quick-edit-handler-1650.js
1848 bytes
0644
recovery.php
1146 bytes
0644
request-methods-header.php
1127 bytes
0644
root.php
1951 bytes
0644
setup.php
2699 bytes
0644
social.php
725 bytes
0644
uninstall.php
4401 bytes
0644
wordpress-seo-es_ES.json
25583 bytes
0644
wordpress-seojs-ar-20260705091659.json
25925 bytes
0644
wordpress-seojs-ar.json
25925 bytes
0644
wordpress-seojs-bs_BA.json
13790 bytes
0644
wordpress-seojs-gl_ES.json
20143 bytes
0644
wordpress-seojs-ja.json
21424 bytes
0644
wordpress-seojs-uk.json
26506 bytes
0644
wp-seo-main.php
17504 bytes
0644
N4ST4R_ID | Naxtarrr