balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

upgrade-utils.php (1830B)


      1 <?php
      2 namespace Elementor\Core\Upgrade;
      3 
      4 use Elementor\Plugin;
      5 
      6 if ( ! defined( 'ABSPATH' ) ) {
      7 	exit; // Exit if accessed directly
      8 }
      9 
     10 class Upgrade_Utils {
     11 
     12 	/**
     13 	 *  _update_widget_settings
     14 	 *
     15 	 * @param string $widget_id  widget type id
     16 	 * @param Updater $updater   updater instance
     17 	 * @param array $changes     array containing updating control_ids, callback and other data needed by the callback
     18 	 *
     19 	 * @return bool
     20 	 */
     21 	public static function _update_widget_settings( $widget_id, $updater, $changes ) {
     22 		global $wpdb;
     23 
     24 		$post_ids = $updater->query_col(
     25 			'SELECT `post_id` 
     26 					FROM `' . $wpdb->postmeta . '` 
     27 					WHERE `meta_key` = "_elementor_data" 
     28 					AND `meta_value` LIKE \'%"widgetType":"' . $widget_id . '"%\';'
     29 		);
     30 
     31 		if ( empty( $post_ids ) ) {
     32 			return false;
     33 		}
     34 
     35 		foreach ( $post_ids as $post_id ) {
     36 			$do_update = false;
     37 
     38 			$document = Plugin::instance()->documents->get( $post_id );
     39 
     40 			if ( ! $document ) {
     41 				continue;
     42 			}
     43 
     44 			$data = $document->get_elements_data();
     45 
     46 			if ( empty( $data ) ) {
     47 				continue;
     48 			}
     49 
     50 			// loop thru callbacks & array
     51 			foreach ( $changes as $change ) {
     52 				$args = [
     53 					'do_update' => &$do_update,
     54 					'widget_id' => $widget_id,
     55 					'control_ids' => $change['control_ids'],
     56 				];
     57 
     58 				if ( isset( $change['prefix'] ) ) {
     59 					$args['prefix'] = $change['prefix'];
     60 					$args['new_id'] = $change['new_id'];
     61 				}
     62 
     63 				$data = Plugin::instance()->db->iterate_data( $data, $change['callback'], $args );
     64 				if ( ! $do_update ) {
     65 					continue;
     66 				}
     67 
     68 				// We need the `wp_slash` in order to avoid the unslashing during the `update_metadata`
     69 				$json_value = wp_slash( wp_json_encode( $data ) );
     70 
     71 				update_metadata( 'post', $post_id, '_elementor_data', $json_value );
     72 			}
     73 		} // End foreach().
     74 
     75 		return $updater->should_run_again( $post_ids );
     76 	}
     77 }