%PDF- %PDF-
Direktori : /var/www/html/buggydubrovnik.com/wp-content/plugins/redirection/models/ |
Current File : /var/www/html/buggydubrovnik.com/wp-content/plugins/redirection/models/importer.php |
<?php class Red_Plugin_Importer { public static function get_plugins() { $results = array(); $importers = array( 'wp-simple-redirect', 'seo-redirection', 'safe-redirect-manager', 'wordpress-old-slugs', 'rank-math', 'quick-redirects', 'pretty-links', ); foreach ( $importers as $importer ) { $importer = self::get_importer( $importer ); $results[] = $importer->get_data(); } return array_values( array_filter( $results ) ); } public static function get_importer( $id ) { if ( $id === 'wp-simple-redirect' ) { return new Red_Simple301_Importer(); } if ( $id === 'seo-redirection' ) { return new Red_SeoRedirection_Importer(); } if ( $id === 'safe-redirect-manager' ) { return new Red_SafeRedirectManager_Importer(); } if ( $id === 'wordpress-old-slugs' ) { return new Red_WordPressOldSlug_Importer(); } if ( $id === 'rank-math' ) { return new Red_RankMath_Importer(); } if ( $id === 'quick-redirects' ) { return new Red_QuickRedirect_Importer(); } if ( $id === 'pretty-links' ) { return new Red_PrettyLinks_Importer(); } return false; } public static function import( $plugin, $group_id ) { $importer = self::get_importer( $plugin ); if ( $importer ) { return $importer->import_plugin( $group_id ); } return 0; } } class Red_PrettyLinks_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { global $wpdb; $count = 0; $redirects = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}prli_links" ); foreach ( $redirects as $redirect ) { $created = $this->create_for_item( $group_id, $redirect ); if ( $created ) { $count++; } } return $count; } private function create_for_item( $group_id, $link ) { $item = array( 'url' => '/' . $link->slug, 'action_data' => array( 'url' => $link->url ), 'regex' => false, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'title' => $link->name, 'action_code' => $link->redirect_type, ); return Red_Item::create( $item ); } public function get_data() { $data = get_option( 'prli_db_version' ); if ( $data ) { global $wpdb; return [ 'id' => 'pretty-links', 'name' => 'PrettyLinks', 'total' => $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}prli_links" ), ]; } return false; } } class Red_QuickRedirect_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { $redirects = get_option( 'quickppr_redirects' ); $count = 0; foreach ( $redirects as $source => $target ) { $item = $this->create_for_item( $group_id, $source, $target ); if ( $item ) { $count++; } } return $count; } private function create_for_item( $group_id, $source, $target ) { $item = array( 'url' => $source, 'action_data' => array( 'url' => $target ), 'regex' => false, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'action_code' => 301, ); return Red_Item::create( $item ); } public function get_data() { $data = get_option( 'quickppr_redirects' ); if ( $data ) { return array( 'id' => 'quick-redirects', 'name' => 'Quick Page/Post Redirects', 'total' => count( $data ), ); } return false; } } class Red_RankMath_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { global $wpdb; $count = 0; $redirects = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}rank_math_redirections" ); foreach ( $redirects as $redirect ) { $created = $this->create_for_item( $group_id, $redirect ); $count += $created; } return $count; } private function create_for_item( $group_id, $redirect ) { // phpcs:ignore $sources = unserialize( $redirect->sources ); $items = []; foreach ( $sources as $source ) { $url = $source['pattern']; if ( substr( $url, 0, 1 ) !== '/' ) { $url = '/' . $url; } $data = array( 'url' => $url, 'action_data' => array( 'url' => str_replace( '\\\\', '\\', $redirect->url_to ) ), 'regex' => $source['comparison'] === 'regex' ? true : false, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'action_code' => $redirect->header_code, ); $items[] = Red_Item::create( $data ); } return count( $items ); } public function get_data() { global $wpdb; if ( defined( 'REDIRECTION_TESTS' ) && REDIRECTION_TESTS ) { return 0; } if ( ! function_exists( 'is_plugin_active' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $total = 0; if ( is_plugin_active( 'seo-by-rank-math/rank-math.php' ) ) { $total = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}rank_math_redirections" ); } if ( $total ) { return array( 'id' => 'rank-math', 'name' => 'RankMath', 'total' => intval( $total, 10 ), ); } return 0; } } class Red_Simple301_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { $redirects = get_option( '301_redirects' ); $count = 0; foreach ( $redirects as $source => $target ) { $item = $this->create_for_item( $group_id, $source, $target ); if ( $item ) { $count++; } } return $count; } private function create_for_item( $group_id, $source, $target ) { $item = array( 'url' => str_replace( '*', '(.*?)', $source ), 'action_data' => array( 'url' => str_replace( '*', '$1', trim( $target ) ) ), 'regex' => strpos( $source, '*' ) === false ? false : true, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'action_code' => 301, ); return Red_Item::create( $item ); } public function get_data() { $data = get_option( '301_redirects' ); if ( $data ) { return array( 'id' => 'wp-simple-redirect', 'name' => 'Simple 301 Redirects', 'total' => count( $data ), ); } return false; } } class Red_WordPressOldSlug_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { global $wpdb; $count = 0; $redirects = $wpdb->get_results( "SELECT {$wpdb->prefix}postmeta.* FROM {$wpdb->prefix}postmeta INNER JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}posts.ID={$wpdb->prefix}postmeta.post_id " . "WHERE {$wpdb->prefix}postmeta.meta_key = '_wp_old_slug' AND {$wpdb->prefix}postmeta.meta_value != '' AND {$wpdb->prefix}posts.post_status='publish' AND {$wpdb->prefix}posts.post_type IN ('page', 'post')" ); foreach ( $redirects as $redirect ) { $item = $this->create_for_item( $group_id, $redirect ); if ( $item ) { $count++; } } return $count; } private function create_for_item( $group_id, $redirect ) { $new = get_permalink( $redirect->post_id ); if ( is_wp_error( $new ) ) { return false; } $new_path = wp_parse_url( $new, PHP_URL_PATH ); $old = rtrim( dirname( $new_path ), '/' ) . '/' . rtrim( $redirect->meta_value, '/' ) . '/'; $old = str_replace( '\\', '', $old ); $old = str_replace( '//', '/', $old ); $data = array( 'url' => $old, 'action_data' => array( 'url' => $new ), 'regex' => false, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'action_code' => 301, ); return Red_Item::create( $data ); } public function get_data() { global $wpdb; $total = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}postmeta INNER JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}posts.ID={$wpdb->prefix}postmeta.post_id WHERE {$wpdb->prefix}postmeta.meta_key = '_wp_old_slug' AND {$wpdb->prefix}postmeta.meta_value != '' AND {$wpdb->prefix}posts.post_status='publish' AND {$wpdb->prefix}posts.post_type IN ('page', 'post')" ); if ( $total ) { return array( 'id' => 'wordpress-old-slugs', 'name' => __( 'Default WordPress "old slugs"', 'redirection' ), 'total' => intval( $total, 10 ), ); } return false; } } class Red_SeoRedirection_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { global $wpdb; if ( defined( 'REDIRECTION_TESTS' ) && REDIRECTION_TESTS ) { return 0; } $count = 0; $redirects = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}WP_SEO_Redirection" ); foreach ( $redirects as $redirect ) { $item = $this->create_for_item( $group_id, $redirect ); if ( $item ) { $count++; } } return $count; } private function create_for_item( $group_id, $seo ) { if ( intval( $seo->enabled, 10 ) === 0 ) { return false; } $data = array( 'url' => $seo->regex ? $seo->regex : $seo->redirect_from, 'action_data' => array( 'url' => $seo->redirect_to ), 'regex' => $seo->regex ? true : false, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'action_code' => intval( $seo->redirect_type, 10 ), ); return Red_Item::create( $data ); } public function get_data() { global $wpdb; $plugins = get_option( 'active_plugins', array() ); $found = false; foreach ( $plugins as $plugin ) { if ( strpos( $plugin, 'seo-redirection.php' ) !== false ) { $found = true; break; } } if ( $found ) { $total = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}WP_SEO_Redirection" ); return array( 'id' => 'seo-redirection', 'name' => 'SEO Redirection', 'total' => $total, ); } return false; } } class Red_SafeRedirectManager_Importer extends Red_Plugin_Importer { public function import_plugin( $group_id ) { global $wpdb; $count = 0; $redirects = $wpdb->get_results( "SELECT {$wpdb->prefix}postmeta.* FROM {$wpdb->prefix}postmeta INNER JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}posts.ID={$wpdb->prefix}postmeta.post_id WHERE {$wpdb->prefix}postmeta.meta_key LIKE '_redirect_rule_%' AND {$wpdb->prefix}posts.post_status='publish'" ); // Group them by post ID $by_post = array(); foreach ( $redirects as $redirect ) { if ( ! isset( $by_post[ $redirect->post_id ] ) ) { $by_post[ $redirect->post_id ] = array(); } $by_post[ $redirect->post_id ][ str_replace( '_redirect_rule_', '', $redirect->meta_key ) ] = $redirect->meta_value; } // Now go through the redirects foreach ( $by_post as $post ) { $item = $this->create_for_item( $group_id, $post ); if ( $item ) { $count++; } } return $count; } private function create_for_item( $group_id, $post ) { $regex = false; $source = $post['from']; if ( strpos( $post['from'], '*' ) !== false ) { $regex = true; $source = str_replace( '*', '.*', $source ); } elseif ( isset( $post['from_regex'] ) && $post['from_regex'] === '1' ) { $regex = true; } $data = array( 'url' => $source, 'action_data' => array( 'url' => $post['to'] ), 'regex' => $regex, 'group_id' => $group_id, 'match_type' => 'url', 'action_type' => 'url', 'action_code' => intval( $post['status_code'], 10 ), ); return Red_Item::create( $data ); } public function get_data() { global $wpdb; $total = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}postmeta INNER JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}posts.ID={$wpdb->prefix}postmeta.post_id WHERE {$wpdb->prefix}postmeta.meta_key = '_redirect_rule_from' AND {$wpdb->prefix}posts.post_status='publish'" ); if ( $total ) { return array( 'id' => 'safe-redirect-manager', 'name' => 'Safe Redirect Manager', 'total' => intval( $total, 10 ), ); } return false; } }