Completed
Pull Request — develop (#1707)
by
unknown
01:29
created
src/classes/content/wordpress/class-abstract-wordpress-content-service.php 1 patch
Indentation   +120 added lines, -120 removed lines patch added patch discarded remove patch
@@ -11,143 +11,143 @@
 block discarded – undo
11 11
 // phpcs:ignore WordPress.WP.CapitalPDangit.MisspelledClassName
12 12
 abstract class Abstract_Wordpress_Content_Service implements Content_Service {
13 13
 
14
-	protected function __construct() {
14
+    protected function __construct() {
15 15
 
16
-	}
16
+    }
17 17
 
18
-	protected function get_dataset_uri() {
19
-		return trailingslashit( Wordlift_Configuration_Service::get_instance()->get_dataset_uri() );
20
-	}
18
+    protected function get_dataset_uri() {
19
+        return trailingslashit( Wordlift_Configuration_Service::get_instance()->get_dataset_uri() );
20
+    }
21 21
 
22
-	protected function is_absolute( $uri ) {
23
-		return 1 === preg_match( '@^https?://@', $uri );
24
-	}
22
+    protected function is_absolute( $uri ) {
23
+        return 1 === preg_match( '@^https?://@', $uri );
24
+    }
25 25
 
26
-	protected function is_internal( $uri ) {
27
-		$dataset_uri = $this->get_dataset_uri();
26
+    protected function is_internal( $uri ) {
27
+        $dataset_uri = $this->get_dataset_uri();
28 28
 
29
-		return ! empty( $dataset_uri ) && 0 === strpos( $uri, $dataset_uri );
30
-	}
29
+        return ! empty( $dataset_uri ) && 0 === strpos( $uri, $dataset_uri );
30
+    }
31 31
 
32
-	protected function make_absolute( $uri ) {
33
-		Assertions::not_empty( $this->get_dataset_uri(), '`dataset_uri` cannot be empty.' );
32
+    protected function make_absolute( $uri ) {
33
+        Assertions::not_empty( $this->get_dataset_uri(), '`dataset_uri` cannot be empty.' );
34 34
 
35
-		if ( 1 !== preg_match( '@^https?://@', $uri ) ) {
36
-			return $this->get_dataset_uri() . $uri;
37
-		}
35
+        if ( 1 !== preg_match( '@^https?://@', $uri ) ) {
36
+            return $this->get_dataset_uri() . $uri;
37
+        }
38 38
 
39
-		return $uri;
40
-	}
39
+        return $uri;
40
+    }
41 41
 
42
-	protected function make_relative( $uri ) {
43
-		$dataset_uri = $this->get_dataset_uri();
44
-		if ( 0 === strpos( $uri, $dataset_uri ) ) {
45
-			return substr( $uri, strlen( $dataset_uri ) );
46
-		}
42
+    protected function make_relative( $uri ) {
43
+        $dataset_uri = $this->get_dataset_uri();
44
+        if ( 0 === strpos( $uri, $dataset_uri ) ) {
45
+            return substr( $uri, strlen( $dataset_uri ) );
46
+        }
47 47
 
48
-		return $uri;
49
-	}
48
+        return $uri;
49
+    }
50 50
 
51
-	/**
52
-	 * @param Wordpress_Content_Id $content_id
53
-	 *
54
-	 * @return string|null
55
-	 */
56
-	public function get_about_jsonld( $content_id ) {
57
-		global $wpdb;
51
+    /**
52
+     * @param Wordpress_Content_Id $content_id
53
+     *
54
+     * @return string|null
55
+     */
56
+    public function get_about_jsonld( $content_id ) {
57
+        global $wpdb;
58 58
 
59
-		return $wpdb->get_var(
60
-			$wpdb->prepare(
61
-				"
59
+        return $wpdb->get_var(
60
+            $wpdb->prepare(
61
+                "
62 62
 			SELECT about_jsonld FROM {$wpdb->prefix}wl_entities
63 63
 			WHERE content_id = %d AND content_type = %d
64 64
 			",
65
-				$content_id->get_id(),
66
-				$content_id->get_type()
67
-			)
68
-		);
69
-	}
70
-
71
-	/**
72
-	 * @param Wordpress_Content_Id $content_id
73
-	 * @param string $value
74
-	 *
75
-	 * @throws Exception If the 'match_name' column does not exist in the database table.
76
-	 */
77
-	public function set_about_jsonld( $content_id, $value ) {
78
-		global $wpdb;
79
-
80
-		// Cleanup value.
81
-		$value      = ( is_string( $value ) && strlen( $value ) > 2 ) ? $value : null;
82
-		$match_name = "NULL";
83
-
84
-		if ( $value ) {
85
-			// Check if the 'match_name' column exists in the database table
86
-			$columns = $wpdb->get_col_info( 'name', 0 );
87
-			if ( in_array( 'match_name', $columns ) ) {
88
-				$match_name = $this->get_match_name( $value );
89
-			}
90
-		}
91
-
92
-		// This `hack` is necessary to ensure the entity exists in the entities table, but we
93
-		// should revise how this works really.
94
-		//
95
-		// This is currently needed because rel_uri is required in the table.
96
-		switch ( $content_id->get_type() ) {
97
-			case Object_Type_Enum::POST:
98
-				Wordpress_Dataset_Content_Service_Hooks::insert_post( $content_id->get_id() );
99
-				break;
100
-			case Object_Type_Enum::TERM:
101
-				Wordpress_Dataset_Content_Service_Hooks::created_term( $content_id->get_id() );
102
-				break;
103
-			case Object_Type_Enum::USER:
104
-				Wordpress_Dataset_Content_Service_Hooks::user_register( $content_id->get_id() );
105
-				break;
106
-		}
107
-
108
-		/**
109
-		 * As of May 16 2023, $wpdb:prepare doesnt support null
110
-		 * values in about_jsonld, this results in NULL values being populated
111
-		 * as `null` if we directly pass it to the prepare function(). So its necessary
112
-		 * to make the query conditional based on the $value
113
-		 */
114
-		if ( null === $value ) {
115
-			return $wpdb->query(
116
-				$wpdb->prepare(
117
-					"UPDATE {$wpdb->prefix}wl_entities
65
+                $content_id->get_id(),
66
+                $content_id->get_type()
67
+            )
68
+        );
69
+    }
70
+
71
+    /**
72
+     * @param Wordpress_Content_Id $content_id
73
+     * @param string $value
74
+     *
75
+     * @throws Exception If the 'match_name' column does not exist in the database table.
76
+     */
77
+    public function set_about_jsonld( $content_id, $value ) {
78
+        global $wpdb;
79
+
80
+        // Cleanup value.
81
+        $value      = ( is_string( $value ) && strlen( $value ) > 2 ) ? $value : null;
82
+        $match_name = "NULL";
83
+
84
+        if ( $value ) {
85
+            // Check if the 'match_name' column exists in the database table
86
+            $columns = $wpdb->get_col_info( 'name', 0 );
87
+            if ( in_array( 'match_name', $columns ) ) {
88
+                $match_name = $this->get_match_name( $value );
89
+            }
90
+        }
91
+
92
+        // This `hack` is necessary to ensure the entity exists in the entities table, but we
93
+        // should revise how this works really.
94
+        //
95
+        // This is currently needed because rel_uri is required in the table.
96
+        switch ( $content_id->get_type() ) {
97
+            case Object_Type_Enum::POST:
98
+                Wordpress_Dataset_Content_Service_Hooks::insert_post( $content_id->get_id() );
99
+                break;
100
+            case Object_Type_Enum::TERM:
101
+                Wordpress_Dataset_Content_Service_Hooks::created_term( $content_id->get_id() );
102
+                break;
103
+            case Object_Type_Enum::USER:
104
+                Wordpress_Dataset_Content_Service_Hooks::user_register( $content_id->get_id() );
105
+                break;
106
+        }
107
+
108
+        /**
109
+         * As of May 16 2023, $wpdb:prepare doesnt support null
110
+         * values in about_jsonld, this results in NULL values being populated
111
+         * as `null` if we directly pass it to the prepare function(). So its necessary
112
+         * to make the query conditional based on the $value
113
+         */
114
+        if ( null === $value ) {
115
+            return $wpdb->query(
116
+                $wpdb->prepare(
117
+                    "UPDATE {$wpdb->prefix}wl_entities
118 118
 					SET about_jsonld = NULL, match_name = %s
119 119
 					WHERE content_id = %d AND content_type = %d",
120
-					$match_name,
121
-					$content_id->get_id(),
122
-					$content_id->get_type()
123
-				)
124
-			);
125
-		}
126
-
127
-		return $wpdb->query(
128
-			$wpdb->prepare(
129
-				"UPDATE {$wpdb->prefix}wl_entities
120
+                    $match_name,
121
+                    $content_id->get_id(),
122
+                    $content_id->get_type()
123
+                )
124
+            );
125
+        }
126
+
127
+        return $wpdb->query(
128
+            $wpdb->prepare(
129
+                "UPDATE {$wpdb->prefix}wl_entities
130 130
 				SET about_jsonld = %s, match_name = %s
131 131
 				WHERE content_id = %d AND content_type = %d",
132
-				$value,
133
-				$match_name,
134
-				$content_id->get_id(),
135
-				$content_id->get_type()
136
-			)
137
-		);
138
-	}
139
-
140
-	/**
141
-	 * @param $jsonld
142
-	 *
143
-	 * @return mixed|null
144
-	 */
145
-	public function get_match_name( $jsonld ) {
146
-		$data = json_decode( $jsonld, true );
147
-		if ( ! $data || ! array_key_exists( 'name', $data ) ) {
148
-			return "NULL";
149
-		}
150
-
151
-		return $data['name'];
152
-	}
132
+                $value,
133
+                $match_name,
134
+                $content_id->get_id(),
135
+                $content_id->get_type()
136
+            )
137
+        );
138
+    }
139
+
140
+    /**
141
+     * @param $jsonld
142
+     *
143
+     * @return mixed|null
144
+     */
145
+    public function get_match_name( $jsonld ) {
146
+        $data = json_decode( $jsonld, true );
147
+        if ( ! $data || ! array_key_exists( 'name', $data ) ) {
148
+            return "NULL";
149
+        }
150
+
151
+        return $data['name'];
152
+    }
153 153
 }
Please login to merge, or discard this patch.
src/install/class-wordlift-install-service.php 1 patch
Indentation   +193 added lines, -193 removed lines patch added patch discarded remove patch
@@ -18,201 +18,201 @@
 block discarded – undo
18 18
  */
19 19
 class Wordlift_Install_Service {
20 20
 
21
-	/**
22
-	 * A {@link Wordlift_Log_Service} instance.
23
-	 *
24
-	 * @since  3.18.0
25
-	 * @access private
26
-	 * @var \Wordlift_Log_Service $log A {@link Wordlift_Log_Service} instance.
27
-	 */
28
-	private $log;
29
-
30
-	/**
31
-	 * The singleton instance.
32
-	 *
33
-	 * @since  3.18.0
34
-	 * @access private
35
-	 * @var \Wordlift_Install_Service $instance A {@link Wordlift_Install_Service} instance.
36
-	 */
37
-	private static $instance;
38
-
39
-	/**
40
-	 * @var array
41
-	 */
42
-	private $installs;
43
-
44
-	/**
45
-	 * Wordlift_Install_Service constructor.
46
-	 *
47
-	 * @since 3.18.0
48
-	 */
49
-	public function __construct() {
50
-
51
-		/** Installs. */
52
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install.php';
53
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-1-0-0.php';
54
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-10-0.php';
55
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-12-0.php';
56
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-14-0.php';
57
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-15-0.php';
58
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-18-0.php';
59
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-18-3.php';
60
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-19-5.php';
61
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-20-0.php';
62
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-23-4.php';
63
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-24-2.php';
64
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-all-entity-types.php';
65
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-package-type.php';
66
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-25-0.php';
67
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-27-0.php';
68
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-27-1.php';
69
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-28-0.php';
70
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-32-0.php';
71
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-33-9.php';
72
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-36-0.php';
73
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-38-5.php';
74
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-39-1.php';
75
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-40-1.php';
76
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-40-2.php';
77
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-41-0.php';
78
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-42-0.php';
79
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-44-1.php';
80
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-44-4.php';
81
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-45-0.php';
82
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-45-1.php';
83
-		require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-50-1.php';
84
-
85
-		// Get the install services.
86
-		$this->installs = array(
87
-			new Wordlift_Install_1_0_0(),
88
-			new Wordlift_Install_3_10_0(),
89
-			new Wordlift_Install_3_12_0(),
90
-			new Wordlift_Install_3_14_0(),
91
-			new Wordlift_Install_3_15_0(),
92
-			new Wordlift_Install_3_18_0(),
93
-			new Wordlift_Install_3_18_3(),
94
-			new Wordlift_Install_3_19_5(),
95
-			new Wordlift_Install_3_20_0(),
96
-
97
-			/*
21
+    /**
22
+     * A {@link Wordlift_Log_Service} instance.
23
+     *
24
+     * @since  3.18.0
25
+     * @access private
26
+     * @var \Wordlift_Log_Service $log A {@link Wordlift_Log_Service} instance.
27
+     */
28
+    private $log;
29
+
30
+    /**
31
+     * The singleton instance.
32
+     *
33
+     * @since  3.18.0
34
+     * @access private
35
+     * @var \Wordlift_Install_Service $instance A {@link Wordlift_Install_Service} instance.
36
+     */
37
+    private static $instance;
38
+
39
+    /**
40
+     * @var array
41
+     */
42
+    private $installs;
43
+
44
+    /**
45
+     * Wordlift_Install_Service constructor.
46
+     *
47
+     * @since 3.18.0
48
+     */
49
+    public function __construct() {
50
+
51
+        /** Installs. */
52
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install.php';
53
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-1-0-0.php';
54
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-10-0.php';
55
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-12-0.php';
56
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-14-0.php';
57
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-15-0.php';
58
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-18-0.php';
59
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-18-3.php';
60
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-19-5.php';
61
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-20-0.php';
62
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-23-4.php';
63
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-24-2.php';
64
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-all-entity-types.php';
65
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-package-type.php';
66
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-25-0.php';
67
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-27-0.php';
68
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-27-1.php';
69
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-28-0.php';
70
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-32-0.php';
71
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-33-9.php';
72
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-36-0.php';
73
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-38-5.php';
74
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-39-1.php';
75
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-40-1.php';
76
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-40-2.php';
77
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-41-0.php';
78
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-42-0.php';
79
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-44-1.php';
80
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-44-4.php';
81
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-45-0.php';
82
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-45-1.php';
83
+        require_once plugin_dir_path( __DIR__ ) . 'install/class-wordlift-install-3-50-1.php';
84
+
85
+        // Get the install services.
86
+        $this->installs = array(
87
+            new Wordlift_Install_1_0_0(),
88
+            new Wordlift_Install_3_10_0(),
89
+            new Wordlift_Install_3_12_0(),
90
+            new Wordlift_Install_3_14_0(),
91
+            new Wordlift_Install_3_15_0(),
92
+            new Wordlift_Install_3_18_0(),
93
+            new Wordlift_Install_3_18_3(),
94
+            new Wordlift_Install_3_19_5(),
95
+            new Wordlift_Install_3_20_0(),
96
+
97
+            /*
98 98
 			 * This should be enabled with #852.
99 99
 			 */
100
-			new Wordlift_Install_Package_Type(),
101
-			new Wordlift_Install_3_23_4(),
102
-			new Wordlift_Install_3_24_2(),
103
-			new Wordlift_Install_3_25_0(),
104
-			new Wordlift_Install_3_27_0(),
105
-			new Wordlift_Install_3_27_1(),
106
-			new Wordlift_Install_3_28_0(),
107
-			// Add column to represent term
108
-			new Wordlift_Install_3_32_0(),
109
-			// Add the entities table.
110
-			new Wordlift_Install_3_33_9(),
111
-			// When woocommerce extension installed, acf4so should be installed automatically.
112
-			new Wordlift_Install_3_36_0(),
113
-
114
-			new Wordlift_Install_3_38_5(),
115
-			new Wordlift_Install_3_39_1(),
116
-
117
-			// See #1621.
118
-			new Wordlift_Install_3_40_1(),
119
-
120
-			// @link https://github.com/insideout10/wordlift-plugin/issues/1627
121
-			new Wordlift_Install_3_40_2(),
122
-
123
-			new Wordlift_Install_3_41_0(),
124
-			new Wordlift_Install_3_42_0(),
125
-
126
-			new Wordlift_Install_3_44_1(),
127
-			new Wordlift_Install_3_44_4(),
128
-
129
-			new Wordlift_Install_3_45_0(),
130
-			new Wordlift_Install_3_45_1(),
131
-
132
-			new Wordlift_Install_3_50_1(),
133
-		);
134
-		self::$instance = $this;
135
-
136
-		$this->log = Wordlift_Log_Service::get_logger( get_class() );
137
-
138
-		add_action( 'init', array( $this, 'install' ) );
139
-
140
-	}
141
-
142
-	/**
143
-	 * Get the singleton instance.
144
-	 *
145
-	 * @since 3.18.0
146
-	 */
147
-	public static function get_instance() {
148
-
149
-		return self::$instance;
150
-	}
151
-
152
-	/**
153
-	 * Loop thought all versions and install the updates.
154
-	 *
155
-	 * @return void
156
-	 * @since 3.18.0
157
-	 *
158
-	 * @since 3.20.0 use a transient to avoid concurrent installation calls.
159
-	 */
160
-	public function install() {
161
-
162
-		$version = null;
163
-
164
-		if ( $this->install_required() && false === get_transient( '_wl_installing' ) ) {
165
-			set_transient( '_wl_installing', true, 5 * MINUTE_IN_SECONDS );
166
-			/** @var Wordlift_Install $install */
167
-			foreach ( $this->installs as $install ) {
168
-				// Get the install version.
169
-				$version = $install->get_version();
170
-
171
-				if ( version_compare( $version, $this->get_current_version(), '>' )
172
-				     || $install->must_install() ) {
173
-					$class_name = get_class( $install );
174
-
175
-					$this->log->info( "Current version is {$this->get_current_version()}, installing $class_name..." );
176
-					// Install version.
177
-					$install->install();
178
-
179
-					$this->log->info( "$class_name installed." );
180
-
181
-					// Bump the version.
182
-					update_option( 'wl_db_version', $version );
183
-				}
184
-			}
185
-
186
-			// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
187
-			@delete_transient( '_wl_installing' );
188
-
189
-		}
190
-
191
-	}
192
-
193
-	private function install_required() {
194
-
195
-		/** @var Wordlift_Install $install */
196
-		foreach ( $this->installs as $install ) {
197
-			// Get the install version.
198
-			$version = $install->get_version();
199
-
200
-			if ( version_compare( $version, $this->get_current_version(), '>' )
201
-			     || $install->must_install() ) {
202
-				return true;
203
-			}
204
-		}
205
-
206
-		return false;
207
-	}
100
+            new Wordlift_Install_Package_Type(),
101
+            new Wordlift_Install_3_23_4(),
102
+            new Wordlift_Install_3_24_2(),
103
+            new Wordlift_Install_3_25_0(),
104
+            new Wordlift_Install_3_27_0(),
105
+            new Wordlift_Install_3_27_1(),
106
+            new Wordlift_Install_3_28_0(),
107
+            // Add column to represent term
108
+            new Wordlift_Install_3_32_0(),
109
+            // Add the entities table.
110
+            new Wordlift_Install_3_33_9(),
111
+            // When woocommerce extension installed, acf4so should be installed automatically.
112
+            new Wordlift_Install_3_36_0(),
113
+
114
+            new Wordlift_Install_3_38_5(),
115
+            new Wordlift_Install_3_39_1(),
116
+
117
+            // See #1621.
118
+            new Wordlift_Install_3_40_1(),
119
+
120
+            // @link https://github.com/insideout10/wordlift-plugin/issues/1627
121
+            new Wordlift_Install_3_40_2(),
122
+
123
+            new Wordlift_Install_3_41_0(),
124
+            new Wordlift_Install_3_42_0(),
125
+
126
+            new Wordlift_Install_3_44_1(),
127
+            new Wordlift_Install_3_44_4(),
128
+
129
+            new Wordlift_Install_3_45_0(),
130
+            new Wordlift_Install_3_45_1(),
131
+
132
+            new Wordlift_Install_3_50_1(),
133
+        );
134
+        self::$instance = $this;
135
+
136
+        $this->log = Wordlift_Log_Service::get_logger( get_class() );
137
+
138
+        add_action( 'init', array( $this, 'install' ) );
139
+
140
+    }
141
+
142
+    /**
143
+     * Get the singleton instance.
144
+     *
145
+     * @since 3.18.0
146
+     */
147
+    public static function get_instance() {
148
+
149
+        return self::$instance;
150
+    }
151
+
152
+    /**
153
+     * Loop thought all versions and install the updates.
154
+     *
155
+     * @return void
156
+     * @since 3.18.0
157
+     *
158
+     * @since 3.20.0 use a transient to avoid concurrent installation calls.
159
+     */
160
+    public function install() {
161
+
162
+        $version = null;
163
+
164
+        if ( $this->install_required() && false === get_transient( '_wl_installing' ) ) {
165
+            set_transient( '_wl_installing', true, 5 * MINUTE_IN_SECONDS );
166
+            /** @var Wordlift_Install $install */
167
+            foreach ( $this->installs as $install ) {
168
+                // Get the install version.
169
+                $version = $install->get_version();
170
+
171
+                if ( version_compare( $version, $this->get_current_version(), '>' )
172
+                     || $install->must_install() ) {
173
+                    $class_name = get_class( $install );
174
+
175
+                    $this->log->info( "Current version is {$this->get_current_version()}, installing $class_name..." );
176
+                    // Install version.
177
+                    $install->install();
178
+
179
+                    $this->log->info( "$class_name installed." );
180
+
181
+                    // Bump the version.
182
+                    update_option( 'wl_db_version', $version );
183
+                }
184
+            }
185
+
186
+            // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
187
+            @delete_transient( '_wl_installing' );
188
+
189
+        }
190
+
191
+    }
192
+
193
+    private function install_required() {
194
+
195
+        /** @var Wordlift_Install $install */
196
+        foreach ( $this->installs as $install ) {
197
+            // Get the install version.
198
+            $version = $install->get_version();
199
+
200
+            if ( version_compare( $version, $this->get_current_version(), '>' )
201
+                 || $install->must_install() ) {
202
+                return true;
203
+            }
204
+        }
205
+
206
+        return false;
207
+    }
208 208
 
209
-	/**
210
-	 * Retrieve the current db version.
211
-	 *
212
-	 * @return type
213
-	 */
214
-	private function get_current_version() {
215
-		return get_option( 'wl_db_version', '0.0.0' );
216
-	}
209
+    /**
210
+     * Retrieve the current db version.
211
+     *
212
+     * @return type
213
+     */
214
+    private function get_current_version() {
215
+        return get_option( 'wl_db_version', '0.0.0' );
216
+    }
217 217
 
218 218
 }
Please login to merge, or discard this patch.
src/modules/dashboard/includes/Term_Entity_Match/Term_Query.php 1 patch
Indentation   +167 added lines, -167 removed lines patch added patch discarded remove patch
@@ -7,52 +7,52 @@  discard block
 block discarded – undo
7 7
 use WP_REST_Request;
8 8
 
9 9
 class Term_Query {
10
-	/**
11
-	 * @var WP_REST_Request
12
-	 */
13
-	private $request;
14
-	/**
15
-	 * @var mixed
16
-	 */
17
-	private $position;
18
-	/**
19
-	 * @var mixed
20
-	 */
21
-	private $element;
22
-	/**
23
-	 * @var mixed
24
-	 */
25
-	private $direction;
26
-
27
-	private $sort;
28
-
29
-	private $sortby;
30
-	/**
31
-	 * @var mixed
32
-	 */
33
-	private $limit;
34
-
35
-	/** @var Cursor_Sort $cursor_sort */
36
-	private $cursor_sort;
37
-
38
-	/**
39
-	 * @param WP_REST_Request $request
40
-	 * @param Cursor $cursor
41
-	 */
42
-	public function __construct( $request, $cursor, $cursor_sort, $limit ) {
43
-		global $wpdb;
44
-
45
-		$this->request     = $request;
46
-		$this->position    = $cursor->get_position();
47
-		$this->element     = $cursor->get_element();
48
-		$this->direction   = $cursor->get_direction();
49
-		$this->limit       = $limit;
50
-		$this->cursor_sort = $cursor_sort;
51
-
52
-		$this->set_sort();
53
-
54
-		// the `term_name` is required for sort.
55
-		$this->sql = "
10
+    /**
11
+     * @var WP_REST_Request
12
+     */
13
+    private $request;
14
+    /**
15
+     * @var mixed
16
+     */
17
+    private $position;
18
+    /**
19
+     * @var mixed
20
+     */
21
+    private $element;
22
+    /**
23
+     * @var mixed
24
+     */
25
+    private $direction;
26
+
27
+    private $sort;
28
+
29
+    private $sortby;
30
+    /**
31
+     * @var mixed
32
+     */
33
+    private $limit;
34
+
35
+    /** @var Cursor_Sort $cursor_sort */
36
+    private $cursor_sort;
37
+
38
+    /**
39
+     * @param WP_REST_Request $request
40
+     * @param Cursor $cursor
41
+     */
42
+    public function __construct( $request, $cursor, $cursor_sort, $limit ) {
43
+        global $wpdb;
44
+
45
+        $this->request     = $request;
46
+        $this->position    = $cursor->get_position();
47
+        $this->element     = $cursor->get_element();
48
+        $this->direction   = $cursor->get_direction();
49
+        $this->limit       = $limit;
50
+        $this->cursor_sort = $cursor_sort;
51
+
52
+        $this->set_sort();
53
+
54
+        // the `term_name` is required for sort.
55
+        $this->sql = "
56 56
 			SELECT t.term_id as id,
57 57
 				e.about_jsonld as match_jsonld,
58 58
 				t.name,
@@ -74,125 +74,125 @@  discard block
 block discarded – undo
74 74
 			WHERE 1=1
75 75
 		";
76 76
 
77
-		$this->cursor();
78
-		$this->has_match();
79
-		$this->term_contains();
80
-		$this->taxonomies();
81
-		$this->sort();
82
-		$this->limit();
83
-
84
-	}
85
-
86
-	public function get_results() {
87
-		global $wpdb;
88
-
89
-		// The `sql` is prepared in each delegated function in this class.
90
-		// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
91
-		$items = $wpdb->get_results( $this->sql );
92
-
93
-		$sort = ( $this->sort === 'ASC' ? SORT_ASC : SORT_DESC );
94
-		array_multisort( array_column( $items, $this->cursor_sort->get_sort_property() ), $sort, $items );
95
-
96
-		return $items;
97
-	}
98
-
99
-	private function post_types() {
100
-		$post_types = $this->request->has_param( 'post_types' )
101
-			? (array) $this->request->get_param( 'post_types' )
102
-			: array( 'post', 'page' );
103
-		$value      = array_map( 'esc_sql', $post_types );
104
-		$this->sql  .= " AND p.post_type IN ( '" . implode( "', '", $value ) . "' )";
105
-	}
106
-
107
-	private function limit() {
108
-		$value     = is_numeric( $this->limit ) ? $this->limit : 10;
109
-		$this->sql .= ' LIMIT ' . esc_sql( $value );
110
-	}
111
-
112
-	private function has_match() {
113
-		if ( ! $this->request->has_param( 'has_match' ) ) {
114
-			return;
115
-		}
116
-
117
-		$value = (bool) $this->request->get_param( 'has_match' );
118
-
119
-		if ( $value ) {
120
-			$this->sql .= ' AND e.about_jsonld IS NOT NULL';
121
-		} else {
122
-			$this->sql .= ' AND e.about_jsonld IS NULL';
123
-		}
124
-	}
125
-
126
-	private function sort() {
127
-		switch ( $this->direction . '$' . $this->sort ) {
128
-			case 'ASCENDING$ASC':
129
-			case 'DESCENDING$DESC':
130
-				$sort = 'ASC';
131
-				break;
132
-			case 'ASCENDING$DESC':
133
-			case 'DESCENDING$ASC':
134
-				$sort = 'DESC';
135
-				break;
136
-		}
137
-
138
-		$this->sql .= ' ORDER BY t.' . $this->sortby . ' ' . $sort;
139
-	}
140
-
141
-	private function cursor() {
142
-		if ( ! isset( $this->position ) ) {
143
-			return;
144
-		}
145
-
146
-		switch ( $this->direction . '$' . $this->sort ) {
147
-			case 'ASCENDING$ASC':
148
-			case 'DESCENDING$DESC':
149
-				$condition = '>';
150
-				break;
151
-			case 'ASCENDING$DESC':
152
-			case 'DESCENDING$ASC':
153
-				$condition = '<';
154
-				break;
155
-		}
156
-
157
-		$condition .= ( $this->element === 'INCLUDED' ? '=' : '' );
158
-		global $wpdb;
159
-		// We control the vars in this method.
160
-		// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
161
-		$this->sql .= $wpdb->prepare( ' AND t.' . esc_sql( $this->sortby ) . ' ' . $condition . ' %s', $this->position );
162
-	}
163
-
164
-	private function set_sort() {
165
-		$sortby_to_col = array(
166
-			// sort param  col
167
-			'term_name'   => 'name',
168
-			'entity_name' => 'match_name',
169
-			'occurrences' => 'occurrences',
170
-		);
171
-
172
-		$value = $this->request->has_param( 'sort' )
173
-			? $this->request->get_param( 'sort' )
174
-			: '+term_name';
175
-
176
-		$sortby       = substr( $value, 1 );
177
-		$this->sortby = isset( $sortby_to_col[ $sortby ] ) ? $sortby_to_col[ $sortby ] : $sortby;
178
-		$this->sort   = substr( $value, 0, 1 ) === '+' ? 'ASC' : 'DESC';
179
-	}
180
-
181
-	private function term_contains() {
182
-		if ( ! $this->request->has_param( 'term_contains' ) ) {
183
-			return;
184
-		}
185
-
186
-		global $wpdb;
187
-		$value     = $this->request->get_param( 'term_contains' );
188
-		$this->sql .= $wpdb->prepare( ' and t.name LIKE %s', '%' . esc_sql( $value ) . '%' );
189
-	}
190
-
191
-	private function taxonomies() {
192
-		$taxonomies = $this->request->has_param( 'taxonomies' )
193
-			? (array) $this->request->get_param( 'taxonomies' )
194
-			: array( 'post_tag', 'category' );
195
-		$value      = array_map( 'esc_sql', $taxonomies );
196
-		$this->sql  .= " AND tt.taxonomy IN ( '" . implode( "', '", $value ) . "' )";
197
-	}
77
+        $this->cursor();
78
+        $this->has_match();
79
+        $this->term_contains();
80
+        $this->taxonomies();
81
+        $this->sort();
82
+        $this->limit();
83
+
84
+    }
85
+
86
+    public function get_results() {
87
+        global $wpdb;
88
+
89
+        // The `sql` is prepared in each delegated function in this class.
90
+        // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
91
+        $items = $wpdb->get_results( $this->sql );
92
+
93
+        $sort = ( $this->sort === 'ASC' ? SORT_ASC : SORT_DESC );
94
+        array_multisort( array_column( $items, $this->cursor_sort->get_sort_property() ), $sort, $items );
95
+
96
+        return $items;
97
+    }
98
+
99
+    private function post_types() {
100
+        $post_types = $this->request->has_param( 'post_types' )
101
+            ? (array) $this->request->get_param( 'post_types' )
102
+            : array( 'post', 'page' );
103
+        $value      = array_map( 'esc_sql', $post_types );
104
+        $this->sql  .= " AND p.post_type IN ( '" . implode( "', '", $value ) . "' )";
105
+    }
106
+
107
+    private function limit() {
108
+        $value     = is_numeric( $this->limit ) ? $this->limit : 10;
109
+        $this->sql .= ' LIMIT ' . esc_sql( $value );
110
+    }
111
+
112
+    private function has_match() {
113
+        if ( ! $this->request->has_param( 'has_match' ) ) {
114
+            return;
115
+        }
116
+
117
+        $value = (bool) $this->request->get_param( 'has_match' );
118
+
119
+        if ( $value ) {
120
+            $this->sql .= ' AND e.about_jsonld IS NOT NULL';
121
+        } else {
122
+            $this->sql .= ' AND e.about_jsonld IS NULL';
123
+        }
124
+    }
125
+
126
+    private function sort() {
127
+        switch ( $this->direction . '$' . $this->sort ) {
128
+            case 'ASCENDING$ASC':
129
+            case 'DESCENDING$DESC':
130
+                $sort = 'ASC';
131
+                break;
132
+            case 'ASCENDING$DESC':
133
+            case 'DESCENDING$ASC':
134
+                $sort = 'DESC';
135
+                break;
136
+        }
137
+
138
+        $this->sql .= ' ORDER BY t.' . $this->sortby . ' ' . $sort;
139
+    }
140
+
141
+    private function cursor() {
142
+        if ( ! isset( $this->position ) ) {
143
+            return;
144
+        }
145
+
146
+        switch ( $this->direction . '$' . $this->sort ) {
147
+            case 'ASCENDING$ASC':
148
+            case 'DESCENDING$DESC':
149
+                $condition = '>';
150
+                break;
151
+            case 'ASCENDING$DESC':
152
+            case 'DESCENDING$ASC':
153
+                $condition = '<';
154
+                break;
155
+        }
156
+
157
+        $condition .= ( $this->element === 'INCLUDED' ? '=' : '' );
158
+        global $wpdb;
159
+        // We control the vars in this method.
160
+        // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
161
+        $this->sql .= $wpdb->prepare( ' AND t.' . esc_sql( $this->sortby ) . ' ' . $condition . ' %s', $this->position );
162
+    }
163
+
164
+    private function set_sort() {
165
+        $sortby_to_col = array(
166
+            // sort param  col
167
+            'term_name'   => 'name',
168
+            'entity_name' => 'match_name',
169
+            'occurrences' => 'occurrences',
170
+        );
171
+
172
+        $value = $this->request->has_param( 'sort' )
173
+            ? $this->request->get_param( 'sort' )
174
+            : '+term_name';
175
+
176
+        $sortby       = substr( $value, 1 );
177
+        $this->sortby = isset( $sortby_to_col[ $sortby ] ) ? $sortby_to_col[ $sortby ] : $sortby;
178
+        $this->sort   = substr( $value, 0, 1 ) === '+' ? 'ASC' : 'DESC';
179
+    }
180
+
181
+    private function term_contains() {
182
+        if ( ! $this->request->has_param( 'term_contains' ) ) {
183
+            return;
184
+        }
185
+
186
+        global $wpdb;
187
+        $value     = $this->request->get_param( 'term_contains' );
188
+        $this->sql .= $wpdb->prepare( ' and t.name LIKE %s', '%' . esc_sql( $value ) . '%' );
189
+    }
190
+
191
+    private function taxonomies() {
192
+        $taxonomies = $this->request->has_param( 'taxonomies' )
193
+            ? (array) $this->request->get_param( 'taxonomies' )
194
+            : array( 'post_tag', 'category' );
195
+        $value      = array_map( 'esc_sql', $taxonomies );
196
+        $this->sql  .= " AND tt.taxonomy IN ( '" . implode( "', '", $value ) . "' )";
197
+    }
198 198
 }
Please login to merge, or discard this patch.