PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.7.1
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.7.1
2.7.1 2.7.2 2.7.0 2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 All 141 releases
← All changes | includes/class-metasync-compatibility-checker.php +35 -29 2.6.23 → 2.7.1 View file →
@@ -205,22 +205,22 @@
205 205 var blockedClass = inconclusive ? 'inconclusive' : (result.blocked ? 'blocked' : 'allowed');
206 206
207 207 html += '<div class="test-result-item ' + statusClass + '">';
208 208 html += '<div class="test-result-header">';
209 - html += '<h4>' + statusIcon + ' ' + result.method + ' Request - ' + blockedStatus + '</h4>';
209 + html += '<h4>' + statusIcon + ' ' + escapeHtml(result.method) + ' Request - ' + blockedStatus + '</h4>';
210 210 html += '<span class="test-status ' + blockedClass + '">' + blockedStatus + '</span>';
211 211 html += '</div>';
212 212
213 213 html += '<div class="test-result-details">';
214 - html += '<p><strong>Response Time:</strong> ' + result.response_time + '</p>';
215 - html += '<p><strong>Status:</strong> ' + result.status + '</p>';
214 + html += '<p><strong>Response Time:</strong> ' + escapeHtml(result.response_time) + '</p>';
215 + html += '<p><strong>Status:</strong> ' + escapeHtml(result.status) + '</p>';
216 216
217 217 if (result.status_code) {
218 - html += '<p><strong>HTTP Status Code:</strong> <span class="status-code">' + result.status_code + '</span></p>';
218 + html += '<p><strong>HTTP Status Code:</strong> <span class="status-code">' + escapeHtml(result.status_code) + '</span></p>';
219 219 }
220 220
221 221 if (result.error) {
222 - html += '<p><strong>Error:</strong> <span class="error-message">' + result.error + '</span></p>';
222 + html += '<p><strong>Error:</strong> <span class="error-message">' + escapeHtml(result.error) + '</span></p>';
223 223 }
224 224
225 225 if (result.body) {
226 226 html += '<p><strong>Response Body:</strong></p>';
@@ -230,9 +230,9 @@
230 230 if (result.headers && Object.keys(result.headers).length > 0) {
231 231 html += '<p><strong>Response Headers:</strong></p>';
232 232 html += '<pre class="response-headers">';
233 233 Object.keys(result.headers).forEach(function(key) {
234 - html += key + ': ' + result.headers[key] + '\n';
234 + html += escapeHtml(key) + ': ' + escapeHtml(result.headers[key]) + '\n';
235 235 });
236 236 html += '</pre>';
237 237 }
238 238
@@ -245,9 +245,9 @@
245 245 html += '<p><strong>Parsed Response:</strong></p>';
246 246 html += '<pre class="parsed-response">' + escapeHtml(JSON.stringify(result.parsed_response, null, 2)) + '</pre>';
247 247 }
248 248
249 - html += '<p><strong>Details:</strong> ' + result.details + '</p>';
249 + html += '<p><strong>Details:</strong> ' + escapeHtml(result.details) + '</p>';
250 250 html += '</div>';
251 251 html += '</div>';
252 252 });
253 253
@@ -262,9 +262,9 @@
262 262 '>': '&gt;',
263 263 '"': '&quot;',
264 264 "'": '&#039;'
265 265 };
266 - return text.replace(/[&<>"']/g, function(m) { return map[m]; });
266 + return String(text).replace(/[&<>"']/g, function(m) { return map[m]; });
267 267 }
268 268
269 269 setTimeout(function() {
270 270 var btnBoth = $('#test-both-requests');
@@ -958,8 +958,9 @@
958 958 ],
959 959 'bricks' => [
960 960 'name' => 'Bricks Builder',
961 961 'plugin_files' => [ 'bricks/bricks.php' ],
962 + 'theme_name' => 'Bricks',
962 963 'supported' => true,
963 964 'version' => '1.11',
964 965 ],
965 966 ];
@@ -1348,39 +1349,44 @@
1348 1349 }
1349 1350
1350 1351 public function get_plugin_logo($plugin_key, $type)
1351 1352 {
1353 + // Compatibility icons are bundled locally; loading images from external
1354 + // servers (wp.org, vendor sites, CDNs) counts as offloaded content and
1355 + // is disallowed for wordpress.org releases.
1356 + $assets = plugins_url('assets/images/compat/', dirname(__DIR__) . '/metasync.php');
1357 +
1352 1358 $logos = [
1353 1359 'page_builder' => [
1354 - 'elementor' => 'https://ps.w.org/elementor/assets/icon-256x256.gif',
1355 - 'gutenberg' => 'https://i0.wp.com/wordpress.org/files/2023/02/wmark.png',
1356 - 'divi' => 'https://www.elegantthemes.com/images/logo.svg',
1357 - 'oxygen' => 'https://oxygenbuilder.com/wp-content/uploads/2021/09/oxygen-logo-icon.png',
1358 - 'bricks' => 'https://bricksbuilder.io/wp-content/uploads/2021/05/bricks-icon.svg',
1360 + 'elementor' => $assets . 'elementor.svg',
1361 + 'gutenberg' => $assets . 'gutenberg.svg',
1362 + 'divi' => $assets . 'divi.svg',
1363 + 'oxygen' => $assets . 'oxygen.svg',
1364 + 'bricks' => $assets . 'bricks.svg',
1359 1365 ],
1360 1366 'theme' => [
1361 - 'astra' => 'https://ps.w.org/astra/assets/icon-128x128.png',
1362 - 'generatepress' => 'https://ps.w.org/generatepress/assets/icon-128x128.png',
1363 - 'oceanwp' => 'https://ps.w.org/ocean-extra/assets/icon-128x128.png',
1364 - 'hello-elementor' => 'https://ps.w.org/hello-elementor/assets/icon-128x128.png',
1365 - 'kadence' => 'https://ps.w.org/kadence-blocks/assets/icon-128x128.png',
1367 + 'astra' => $assets . 'astra.svg',
1368 + 'generatepress' => $assets . 'generatepress.svg',
1369 + 'oceanwp' => $assets . 'oceanwp.svg',
1370 + 'hello-elementor' => $assets . 'hello-elementor.svg',
1371 + 'kadence' => $assets . 'kadence.svg',
1366 1372 ],
1367 1373 'seo' => [
1368 - 'yoast' => 'https://ps.w.org/wordpress-seo/assets/icon-128x128.gif',
1369 - 'rankmath' => 'https://ps.w.org/seo-by-rank-math/assets/icon-128x128.png',
1370 - 'aioseo' => 'https://ps.w.org/all-in-one-seo-pack/assets/icon-128x128.png',
1374 + 'yoast' => $assets . 'yoast.svg',
1375 + 'rankmath' => $assets . 'rankmath.svg',
1376 + 'aioseo' => $assets . 'aioseo.svg',
1371 1377 ],
1372 1378 'cache' => [
1373 - 'wp-rocket' => 'https://ps.w.org/rocket-lazy-load/assets/icon-128x128.png',
1374 - 'litespeed-cache' => 'https://ps.w.org/litespeed-cache/assets/icon-128x128.png',
1375 - 'w3-total-cache' => 'https://ps.w.org/w3-total-cache/assets/icon-128x128.png',
1376 - 'sg-cachepress' => 'https://ps.w.org/sg-cachepress/assets/icon-128x128.png',
1377 - 'hummingbird-performance' => 'https://ps.w.org/hummingbird-performance/assets/icon-128x128.png',
1378 - 'autoptimize' => 'https://ps.w.org/autoptimize/assets/icon-128x128.png',
1379 + 'wp-rocket' => $assets . 'wp-rocket.svg',
1380 + 'litespeed-cache' => $assets . 'litespeed-cache.svg',
1381 + 'w3-total-cache' => $assets . 'w3-total-cache.svg',
1382 + 'sg-cachepress' => $assets . 'sg-cachepress.svg',
1383 + 'hummingbird-performance' => $assets . 'hummingbird-performance.svg',
1384 + 'autoptimize' => $assets . 'autoptimize.svg',
1379 1385 ],
1380 1386 'cdn' => [
1381 - 'cloudflare' => 'https://ps.w.org/cloudflare/assets/icon-128x128.png',
1382 - 'fastly' => 'https://ps.w.org/purgely/assets/icon-128x128.png',
1387 + 'cloudflare' => $assets . 'cloudflare.svg',
1388 + 'fastly' => $assets . 'fastly.svg',
1383 1389 ],
1384 1390 ];
1385 1391
1386 1392 return isset($logos[$type][$plugin_key]) ? $logos[$type][$plugin_key] : '';