SEO SQUIRRLY™ - Version 9.1.19

Version Description

  • 07/08/2019 =
  • Update - Added refresh button for Squirrly SEO Snippet on ajax error
  • Fix - Canonical link verification on Focus Pages
  • Fix - PHP count() warning when the array is empty
  • Fix - The Inner Links count when the links are not absolute
Download this release

Release Info

Developer cifi
Plugin Icon 128x128 SEO SQUIRRLY™
Version 9.1.19
Comparing to
See all releases

Code changes from version 9.1.10 to 9.1.19

Files changed (98) hide show
  1. classes/FrontController.php +2 -2
  2. classes/RemoteController.php +36 -2
  3. classes/helpers/DevKit.php +7 -4
  4. classes/helpers/Sanitize.php +15 -10
  5. classes/helpers/Tools.php +22 -3
  6. config.json +21 -0
  7. config/paths.php +2 -3
  8. controllers/Audits.php +3 -0
  9. controllers/FocusPages.php +26 -23
  10. controllers/Menu.php +57 -29
  11. controllers/Onboarding.php +3 -0
  12. controllers/Post.php +6 -8
  13. controllers/Ranking.php +3 -0
  14. controllers/Research.php +7 -2
  15. controllers/SeoSettings.php +9 -6
  16. controllers/Snippet.php +1 -1
  17. core/BlockFocusPages.php +15 -13
  18. core/BlockJorney.php +18 -4
  19. core/BlockStats.php +4 -0
  20. core/BlockSupport.php +4 -4
  21. languages/squirrly-seo-en_US.mo +0 -0
  22. languages/squirrly-seo-en_US.po +490 -436
  23. models/Assistant.php +12 -1
  24. models/CheckSeo.php +6 -9
  25. models/Compatibility.php +35 -0
  26. models/FocusPages.php +11 -1
  27. models/Frontend.php +51 -60
  28. models/Ico.php +3 -3
  29. models/ImportExport.php +1 -1
  30. models/Snippet.php +30 -25
  31. models/bulkseo/Metas.php +10 -5
  32. models/bulkseo/Opengraph.php +4 -4
  33. models/bulkseo/Twittercard.php +4 -4
  34. models/domain/FocusPage.php +16 -2
  35. models/focuspages/Accuracy.php +10 -5
  36. models/focuspages/Audit.php +7 -2
  37. models/focuspages/Authority.php +14 -0
  38. models/focuspages/Backlinks.php +13 -0
  39. models/focuspages/Clicks.php +5 -0
  40. models/focuspages/Content.php +6 -2
  41. models/focuspages/Ctr.php +5 -0
  42. models/focuspages/Image.php +5 -1
  43. models/focuspages/Impressions.php +5 -0
  44. models/focuspages/Indexability.php +20 -7
  45. models/focuspages/Innerlinks.php +15 -6
  46. models/focuspages/Keyword.php +8 -3
  47. models/focuspages/Length.php +10 -2
  48. models/focuspages/Nofollow.php +19 -4
  49. models/focuspages/Onpage.php +8 -1
  50. models/focuspages/Ranking.php +12 -0
  51. models/focuspages/Snippet.php +5 -0
  52. models/focuspages/Social.php +8 -1
  53. models/focuspages/Strategy.php +5 -0
  54. models/focuspages/Traffic.php +22 -11
  55. models/services/JsonLD.php +20 -6
  56. models/services/OpenGraph.php +82 -3
  57. readme.txt +77 -2
  58. squirrly.php +2 -2
  59. view/Audits/Audits.php +2 -2
  60. view/Blocks/FocusPages.php +2 -0
  61. view/Blocks/Jorney.php +34 -16
  62. view/Blocks/KRFound.php +46 -41
  63. view/Blocks/KRHistory.php +20 -16
  64. view/Blocks/Ranks.php +1 -1
  65. view/Blocks/Snippet.php +2 -2
  66. view/Blocks/Stats.php +22 -20
  67. view/Blocks/Support.php +9 -11
  68. view/Blocks/Toolbar.php +9 -2
  69. view/Dashboard.php +4 -2
  70. view/FocusPages/FocusPageRow.php +19 -10
  71. view/FocusPages/Pagelist.php +6 -0
  72. view/Onboarding/Step2.php +1 -1
  73. view/Onboarding/Step3.php +9 -2
  74. view/Ranking/Rankings.php +16 -14
  75. view/Research/Briefcase.php +5 -9
  76. view/Research/Research.php +1 -0
  77. view/Research/ResearchDetails.php +3 -3
  78. view/SeoSettings/Automation.php +1 -2
  79. view/SeoSettings/Backup.php +2 -2
  80. view/SeoSettings/Bulkseo.php +1 -0
  81. view/SeoSettings/Jsonld.php +26 -0
  82. view/SeoSettings/Metas.php +1 -1
  83. view/assets/css/global.css +21 -2
  84. view/assets/css/global.min.css +1 -1
  85. view/assets/css/jorney.css +1 -1
  86. view/assets/css/jorney.min.css +1 -1
  87. view/assets/css/rankings.css +4 -0
  88. view/assets/css/rankings.min.css +1 -1
  89. view/assets/css/switchery.css +4 -0
  90. view/assets/css/switchery.min.css +1 -1
  91. view/assets/js/global.js +13 -1
  92. view/assets/js/global.min.js +13 -11
  93. view/assets/js/research.js +26 -2
  94. view/assets/js/research.min.js +9 -9
  95. view/assets/js/snippet.js +51 -32
  96. view/assets/js/snippet.min.js +36 -34
  97. view/assets/js/support.js +12 -41
  98. view/assets/js/support.min.js +5 -6
classes/FrontController.php CHANGED
@@ -25,7 +25,7 @@ class SQ_Classes_FrontController {
25
  /* load the model and hooks here for wordpress actions to take efect */
26
  /* create the model and view instances */
27
  $model_classname = str_replace('Controllers', 'Models', $this->name);
28
- if(SQ_Classes_ObjController::getClassPath($model_classname)) {
29
  $this->model = SQ_Classes_ObjController::getClass($model_classname);
30
  }
31
 
@@ -127,6 +127,6 @@ class SQ_Classes_FrontController {
127
  *
128
  * @return void
129
  */
130
- public function hookHead() {}
131
 
132
  }
25
  /* load the model and hooks here for wordpress actions to take efect */
26
  /* create the model and view instances */
27
  $model_classname = str_replace('Controllers', 'Models', $this->name);
28
+ if (SQ_Classes_ObjController::getClassPath($model_classname)) {
29
  $this->model = SQ_Classes_ObjController::getClass($model_classname);
30
  }
31
 
127
  *
128
  * @return void
129
  */
130
+ public function hookHead() { }
131
 
132
  }
classes/RemoteController.php CHANGED
@@ -100,7 +100,11 @@ class SQ_Classes_RemoteController {
100
  * @return string
101
  */
102
  public static function getMySquirrlyLink($path) {
103
- return _SQ_DASH_URL_ . 'login/?token=' . SQ_Classes_Helpers_Tools::getOption('sq_api') . '&user_url=' . get_bloginfo('url') . '&redirect_to=' . _SQ_DASH_URL_ . 'user/' . $path;
 
 
 
 
104
  }
105
 
106
  /**
@@ -139,7 +143,7 @@ class SQ_Classes_RemoteController {
139
  }
140
 
141
  if (is_wp_error($response)) {
142
- //SQ_Classes_Error::setError($response->get_error_message(), 'sq_error');
143
  return false;
144
  }
145
 
@@ -209,6 +213,10 @@ class SQ_Classes_RemoteController {
209
  $json = json_decode(self::apiCall('api/user/checkin', $args));
210
 
211
  if (isset($json->error) && $json->error <> '') {
 
 
 
 
212
  return (new WP_Error('api_error', $json->error));
213
  }
214
 
@@ -240,6 +248,10 @@ class SQ_Classes_RemoteController {
240
  if ($json = json_decode(self::apiCall('api/user/stats', $args))) {
241
 
242
  if (isset($json->error) && $json->error <> '') {
 
 
 
 
243
  return (new WP_Error('api_error', $json->error));
244
  }
245
 
@@ -377,6 +389,10 @@ class SQ_Classes_RemoteController {
377
  $json = json_decode(self::apiCall('api/briefcase/stats', $args));
378
 
379
  if (isset($json->error) && $json->error <> '') {
 
 
 
 
380
  return (new WP_Error('api_error', $json->error));
381
  }
382
 
@@ -911,6 +927,24 @@ class SQ_Classes_RemoteController {
911
 
912
 
913
  /******************** OTHERS *****************************/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
914
 
915
  public static function saveSettings($args) {
916
  self::$apiversion = 1; //api v1
100
  * @return string
101
  */
102
  public static function getMySquirrlyLink($path) {
103
+ if (SQ_Classes_Helpers_Tools::getMenuVisible('show_panel')) {
104
+ return _SQ_DASH_URL_ . 'login/?token=' . SQ_Classes_Helpers_Tools::getOption('sq_api') . '&user_url=' . get_bloginfo('url') . '&redirect_to=' . _SQ_DASH_URL_ . 'user/' . $path;
105
+ } else {
106
+ return _SQ_DASH_URL_;
107
+ }
108
  }
109
 
110
  /**
143
  }
144
 
145
  if (is_wp_error($response)) {
146
+ SQ_Classes_Error::setError($response->get_error_message(), 'sq_error');
147
  return false;
148
  }
149
 
213
  $json = json_decode(self::apiCall('api/user/checkin', $args));
214
 
215
  if (isset($json->error) && $json->error <> '') {
216
+ if($json->error == 'invalid_token'){
217
+ SQ_Classes_Helpers_Tools::saveOptions('sq_api',false);
218
+ }
219
+
220
  return (new WP_Error('api_error', $json->error));
221
  }
222
 
248
  if ($json = json_decode(self::apiCall('api/user/stats', $args))) {
249
 
250
  if (isset($json->error) && $json->error <> '') {
251
+ if($json->error == 'invalid_token'){
252
+ SQ_Classes_Helpers_Tools::saveOptions('sq_api',false);
253
+ }
254
+
255
  return (new WP_Error('api_error', $json->error));
256
  }
257
 
389
  $json = json_decode(self::apiCall('api/briefcase/stats', $args));
390
 
391
  if (isset($json->error) && $json->error <> '') {
392
+ if($json->error == 'invalid_token'){
393
+ SQ_Classes_Helpers_Tools::saveOptions('sq_api',false);
394
+ }
395
+
396
  return (new WP_Error('api_error', $json->error));
397
  }
398
 
927
 
928
 
929
  /******************** OTHERS *****************************/
930
+ public static function crawlURL($args = array()) {
931
+ self::$apiversion = 2; //api v2
932
+ self::$apimethod = 'get'; //post call
933
+
934
+
935
+ if ($json = json_decode(self::apiCall('api/url/crawl', $args, array('timeout' => 60)))) {
936
+
937
+ if (isset($json->error) && $json->error <> '') {
938
+ return (new WP_Error('api_error', $json->error));
939
+ }
940
+
941
+ if (isset($json->data)) {
942
+ return $json->data;
943
+ }
944
+ }
945
+
946
+ return false;
947
+ }
948
 
949
  public static function saveSettings($args) {
950
  self::$apiversion = 1; //api v1
classes/helpers/DevKit.php CHANGED
@@ -12,7 +12,7 @@ class SQ_Classes_Helpers_DevKit {
12
  $data = get_plugin_data(_SQ_ROOT_DIR_ . 'squirrly.php');
13
  if (isset($data['Name'])) {
14
  self::$plugin['name'] = $data['Name'];
15
- add_filter('pre_kses', array('SQ_Classes_Helpers_Tools', 'changeString'), 1, 1);
16
  }
17
  }
18
  }
@@ -24,8 +24,8 @@ class SQ_Classes_Helpers_DevKit {
24
  *
25
  * @return bool
26
  */
27
- public static function updatePluginData() {
28
- $package_file = _SQ_ROOT_DIR_ . '/package.json';
29
  if (!file_exists($package_file)) {
30
  return false;
31
  }
@@ -36,14 +36,17 @@ class SQ_Classes_Helpers_DevKit {
36
  self::$package = $config['package'];
37
 
38
  if (isset(self::$package['settings']) && !empty(SQ_Classes_Helpers_Tools::$options)) {
39
- SQ_Classes_Helpers_Tools::$options = @array_merge(SQ_Classes_Helpers_Tools::$options, self::$package['settings']);
40
 
41
  if (isset(self::$package['name']) && self::$package['name'] <> '') {
42
  SQ_Classes_Helpers_Tools::$options['sq_name'] = self::$package['name'] . ' - Squirrly Special';
43
  }
44
 
45
  SQ_Classes_Helpers_Tools::saveOptions();
 
 
46
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
 
47
  }
48
  }
49
 
12
  $data = get_plugin_data(_SQ_ROOT_DIR_ . 'squirrly.php');
13
  if (isset($data['Name'])) {
14
  self::$plugin['name'] = $data['Name'];
15
+ add_filter('pre_kses', array($this, 'changeString'), 1, 1);
16
  }
17
  }
18
  }
24
  *
25
  * @return bool
26
  */
27
+ public function updatePluginData() {
28
+ $package_file = _SQ_ROOT_DIR_ . 'package.json';
29
  if (!file_exists($package_file)) {
30
  return false;
31
  }
36
  self::$package = $config['package'];
37
 
38
  if (isset(self::$package['settings']) && !empty(SQ_Classes_Helpers_Tools::$options)) {
39
+ SQ_Classes_Helpers_Tools::$options = @array_replace_recursive(SQ_Classes_Helpers_Tools::$options, self::$package['settings']);
40
 
41
  if (isset(self::$package['name']) && self::$package['name'] <> '') {
42
  SQ_Classes_Helpers_Tools::$options['sq_name'] = self::$package['name'] . ' - Squirrly Special';
43
  }
44
 
45
  SQ_Classes_Helpers_Tools::saveOptions();
46
+ @unlink($package_file);
47
+
48
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
49
+ exit();
50
  }
51
  }
52
 
classes/helpers/Sanitize.php CHANGED
@@ -72,13 +72,17 @@ class SQ_Classes_Helpers_Sanitize {
72
  * @return bool|mixed|null|string|string[]
73
  */
74
  public static function truncate($text, $min = 100, $max = 110) {
75
- if ($text <> '' && strlen($text) > $max) {
 
 
 
 
76
  if (function_exists('strip_tags')) {
77
  $text = strip_tags($text);
78
  }
 
79
  $text = str_replace(']]>', ']]&gt;', $text);
80
  $text = @preg_replace('/\[(.+?)\]/is', '', $text);
81
- $text = strip_tags($text);
82
 
83
  if ($max < strlen($text)) {
84
  while ($text[$max] != ' ' && $max > $min) {
@@ -91,6 +95,7 @@ class SQ_Classes_Helpers_Sanitize {
91
 
92
  return $text;
93
  }
 
94
  /**
95
  * Check the google code saved at settings
96
  *
@@ -272,7 +277,7 @@ class SQ_Classes_Helpers_Sanitize {
272
  * @return string
273
  */
274
  public static function checkTwitterAccount($account) {
275
- if ($account <> '' && strpos($account, 'twitter.') === false) {
276
  $account = 'https://twitter.com/' . $account;
277
  }
278
 
@@ -286,7 +291,7 @@ class SQ_Classes_Helpers_Sanitize {
286
  * @return string
287
  */
288
  public static function checkTwitterAccountName($account) {
289
- if ($account <> '' && strpos($account, 'twitter.') !== false) {
290
  $account = parse_url($account, PHP_URL_PATH);
291
  if ($account <> '') {
292
  $account = str_replace('/', '', $account);
@@ -306,7 +311,7 @@ class SQ_Classes_Helpers_Sanitize {
306
  * @return string
307
  */
308
  public static function checkGoogleAccount($account) {
309
- if ($account <> '' && strpos($account, 'google.') === false) {
310
  $account = 'https://plus.google.com/' . $account;
311
  }
312
  return str_replace(" ", "+", $account);
@@ -319,7 +324,7 @@ class SQ_Classes_Helpers_Sanitize {
319
  * @return string
320
  */
321
  public static function checkLinkeinAccount($account) {
322
- if ($account <> '' && strpos($account, 'linkedin.') === false) {
323
  $account = 'https://www.linkedin.com/in/' . $account;
324
  }
325
  return $account;
@@ -332,7 +337,7 @@ class SQ_Classes_Helpers_Sanitize {
332
  * @return string
333
  */
334
  public static function checkFacebookAccount($account) {
335
- if ($account <> '' && strpos($account, 'facebook.com') === false) {
336
  $account = 'https://www.facebook.com/' . $account;
337
  }
338
  return $account;
@@ -344,7 +349,7 @@ class SQ_Classes_Helpers_Sanitize {
344
  * @return string
345
  */
346
  public static function checkPinterestAccount($account) {
347
- if ($account <> '' && strpos($account, 'pinterest.com') === false) {
348
  $account = 'https://www.pinterest.com/' . $account;
349
  }
350
  return $account;
@@ -357,7 +362,7 @@ class SQ_Classes_Helpers_Sanitize {
357
  * @return string
358
  */
359
  public static function checkInstagramAccount($account) {
360
- if ($account <> '' && strpos($account, 'instagram.com') === false) {
361
  $account = 'https://www.instagram.com/' . $account;
362
  }
363
  return $account;
@@ -370,7 +375,7 @@ class SQ_Classes_Helpers_Sanitize {
370
  * @return string
371
  */
372
  public static function checkYoutubeAccount($account) {
373
- if ($account <> '' && strpos($account, 'youtube.com') === false) {
374
  if (strpos($account, 'user/') === false && strpos($account, 'channel/') === false) {
375
  $account = 'https://www.youtube.com/channel/' . $account;
376
  }
72
  * @return bool|mixed|null|string|string[]
73
  */
74
  public static function truncate($text, $min = 100, $max = 110) {
75
+ //make sure they are values
76
+ $max = (int)$max;
77
+ $min = (int)$min;
78
+
79
+ if ($max > 0 && $text <> '' && strlen($text) > $max) {
80
  if (function_exists('strip_tags')) {
81
  $text = strip_tags($text);
82
  }
83
+
84
  $text = str_replace(']]>', ']]&gt;', $text);
85
  $text = @preg_replace('/\[(.+?)\]/is', '', $text);
 
86
 
87
  if ($max < strlen($text)) {
88
  while ($text[$max] != ' ' && $max > $min) {
95
 
96
  return $text;
97
  }
98
+
99
  /**
100
  * Check the google code saved at settings
101
  *
277
  * @return string
278
  */
279
  public static function checkTwitterAccount($account) {
280
+ if ($account <> '' && strpos($account, '//') === false) {
281
  $account = 'https://twitter.com/' . $account;
282
  }
283
 
291
  * @return string
292
  */
293
  public static function checkTwitterAccountName($account) {
294
+ if ($account <> '' && strpos($account, '//') !== false) {
295
  $account = parse_url($account, PHP_URL_PATH);
296
  if ($account <> '') {
297
  $account = str_replace('/', '', $account);
311
  * @return string
312
  */
313
  public static function checkGoogleAccount($account) {
314
+ if ($account <> '' && strpos($account, '//') === false) {
315
  $account = 'https://plus.google.com/' . $account;
316
  }
317
  return str_replace(" ", "+", $account);
324
  * @return string
325
  */
326
  public static function checkLinkeinAccount($account) {
327
+ if ($account <> '' && strpos($account, '//') === false) {
328
  $account = 'https://www.linkedin.com/in/' . $account;
329
  }
330
  return $account;
337
  * @return string
338
  */
339
  public static function checkFacebookAccount($account) {
340
+ if ($account <> '' && strpos($account, '//') === false) {
341
  $account = 'https://www.facebook.com/' . $account;
342
  }
343
  return $account;
349
  * @return string
350
  */
351
  public static function checkPinterestAccount($account) {
352
+ if ($account <> '' && strpos($account, '//') === false) {
353
  $account = 'https://www.pinterest.com/' . $account;
354
  }
355
  return $account;
362
  * @return string
363
  */
364
  public static function checkInstagramAccount($account) {
365
+ if ($account <> '' && strpos($account, '//') === false) {
366
  $account = 'https://www.instagram.com/' . $account;
367
  }
368
  return $account;
375
  * @return string
376
  */
377
  public static function checkYoutubeAccount($account) {
378
+ if ($account <> '' && strpos($account, '//') === false) {
379
  if (strpos($account, 'user/') === false && strpos($account, 'channel/') === false) {
380
  $account = 'https://www.youtube.com/channel/' . $account;
381
  }
classes/helpers/Tools.php CHANGED
@@ -66,8 +66,6 @@ class SQ_Classes_Helpers_Tools {
66
  add_filter("plugin_row_meta", array($this, 'hookExtraLinks'), 10, 4);
67
  //add setting link in plugin
68
  add_filter('plugin_action_links', array($this, 'hookActionlink'), 5, 2);
69
- //load the DevKit
70
- SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_DevKit');
71
  }
72
 
73
  /**
@@ -130,6 +128,7 @@ class SQ_Classes_Helpers_Tools {
130
  'sq_support_email' => '',
131
  'sq_audit_email' => '',
132
  'sq_seojourney' => 0,
 
133
  'sq_onboarding' => 0,
134
 
135
  //Settings Assistant
@@ -147,6 +146,8 @@ class SQ_Classes_Helpers_Tools {
147
  //JsonLD
148
  'sq_auto_jsonld' => 1,
149
  'sq_jsonld_type' => 'Organization',
 
 
150
  'sq_jsonld' => array(
151
  'Organization' => array(
152
  'name' => '',
@@ -212,7 +213,6 @@ class SQ_Classes_Helpers_Tools {
212
  'sq_auto_dublincore' => 1,
213
  'sq_auto_feed' => 0,
214
  'sq_auto_noindex' => 1,
215
- 'sq_exclude_post_types' => array(),
216
  'sq_use_frontend' => 1,
217
  'sq_attachment_redirect' => 0,
218
  'sq_metas' => array(
@@ -250,6 +250,8 @@ class SQ_Classes_Helpers_Tools {
250
  'show_panel' => 1,
251
  'show_tutorial' => 1,
252
  'show_audit' => 1,
 
 
253
  'show_ads' => 1,
254
  ),
255
 
@@ -655,6 +657,23 @@ class SQ_Classes_Helpers_Tools {
655
  return apply_filters('sq_option_' . $key, self::$options[$key]);
656
  }
657
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
658
  /**
659
  * Save the Options in user option table in DB
660
  *
66
  add_filter("plugin_row_meta", array($this, 'hookExtraLinks'), 10, 4);
67
  //add setting link in plugin
68
  add_filter('plugin_action_links', array($this, 'hookActionlink'), 5, 2);
 
 
69
  }
70
 
71
  /**
128
  'sq_support_email' => '',
129
  'sq_audit_email' => '',
130
  'sq_seojourney' => 0,
131
+ 'sq_seojourney_congrats' => 1,
132
  'sq_onboarding' => 0,
133
 
134
  //Settings Assistant
146
  //JsonLD
147
  'sq_auto_jsonld' => 1,
148
  'sq_jsonld_type' => 'Organization',
149
+ 'sq_jsonld_breadcrumbs' => 1,
150
+ 'sq_jsonld_clearcode' => 0,
151
  'sq_jsonld' => array(
152
  'Organization' => array(
153
  'name' => '',
213
  'sq_auto_dublincore' => 1,
214
  'sq_auto_feed' => 0,
215
  'sq_auto_noindex' => 1,
 
216
  'sq_use_frontend' => 1,
217
  'sq_attachment_redirect' => 0,
218
  'sq_metas' => array(
250
  'show_panel' => 1,
251
  'show_tutorial' => 1,
252
  'show_audit' => 1,
253
+ 'show_rankings' => 1,
254
+ 'show_focuspages' => 1,
255
  'show_ads' => 1,
256
  ),
257
 
657
  return apply_filters('sq_option_' . $key, self::$options[$key]);
658
  }
659
 
660
+ /**
661
+ * Get the option from database
662
+ * @param $key
663
+ * @return mixed
664
+ */
665
+ public static function getMenuVisible($key) {
666
+ if (!isset(self::$options['menu'][$key])) {
667
+ self::$options = self::getOptions();
668
+
669
+ if (!isset(self::$options['menu'][$key])) {
670
+ self::$options['menu'][$key] = false;
671
+ }
672
+ }
673
+
674
+ return self::$options['menu'][$key];
675
+ }
676
+
677
  /**
678
  * Save the Options in user option table in DB
679
  *
config.json CHANGED
@@ -189,8 +189,29 @@
189
  },
190
  "admin": "1",
191
  "active": "1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  }
193
 
 
194
  ]
195
  }
196
  }
189
  },
190
  "admin": "1",
191
  "active": "1"
192
+ },
193
+ {
194
+ "name": "SQ_Core_BlockJorney",
195
+ "actions": {
196
+ "action": [
197
+ "sq_journey_close"
198
+ ]
199
+ },
200
+ "admin": "1",
201
+ "active": "1"
202
+ },
203
+ {
204
+ "name": "SQ_Core_BlockSupport",
205
+ "actions": {
206
+ "action": [
207
+ "sq_feedback"
208
+ ]
209
+ },
210
+ "admin": "1",
211
+ "active": "1"
212
  }
213
 
214
+
215
  ]
216
  }
217
  }
config/paths.php CHANGED
@@ -7,15 +7,14 @@ define('_SQ_NAMESPACE_', 'SQ');
7
  define('_SQ_DB_', 'QSS');
8
  define('_SQ_PLUGIN_NAME_', 'squirrly-seo'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
9
 
10
- $scheme = (((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") || (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN)) ? 'https:' : 'http:'); //CHECK IF SCURE
11
  defined('SQ_URI') || define('SQ_URI', 'wp500');
12
  defined('_SQ_DASH_URL_') || define('_SQ_DASH_URL_', 'https://my.squirrly.co/');
13
  defined('_SQ_API_URL_') || define('_SQ_API_URL_', $scheme . '//api.squirrly.co/sq/');
14
- defined('_SQ_APIKR_URL_') || define('_SQ_APIKR_URL_', $scheme . '//kr.squirrly.co/sq/');
15
  defined('_SQ_APIV2_URL_') || define('_SQ_APIV2_URL_', $scheme . '//api.squirrly.co/v2/');
16
  define('_SQ_SITE_HOST_', @parse_url(home_url(), PHP_URL_HOST));
17
 
18
- define('_SQ_SUPPORT_EMAIL_', 'support@squirrly.co');
19
  defined('_SQ_STATIC_API_URL_') || define('_SQ_STATIC_API_URL_', '//storage.googleapis.com/squirrly/');
20
  defined('_SQ_SUPPORT_EMAIL_URL_') || define('_SQ_SUPPORT_EMAIL_URL_', 'http://plugin.squirrly.co/contact/');
21
  defined('_SQ_SUPPORT_FACEBOOK_URL_') || define('_SQ_SUPPORT_FACEBOOK_URL_', 'https://www.facebook.com/Squirrly.co');
7
  define('_SQ_DB_', 'QSS');
8
  define('_SQ_PLUGIN_NAME_', 'squirrly-seo'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
9
 
10
+ $scheme = (((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") || (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN) || (function_exists('is_ssl') && is_ssl())) ? 'https:' : 'http:'); //CHECK IF SCURE
11
  defined('SQ_URI') || define('SQ_URI', 'wp500');
12
  defined('_SQ_DASH_URL_') || define('_SQ_DASH_URL_', 'https://my.squirrly.co/');
13
  defined('_SQ_API_URL_') || define('_SQ_API_URL_', $scheme . '//api.squirrly.co/sq/');
 
14
  defined('_SQ_APIV2_URL_') || define('_SQ_APIV2_URL_', $scheme . '//api.squirrly.co/v2/');
15
  define('_SQ_SITE_HOST_', @parse_url(home_url(), PHP_URL_HOST));
16
 
17
+ define('_SQ_SUPPORT_EMAIL_', 'https://go.bucketforms.com/ds/fc7b9084');
18
  defined('_SQ_STATIC_API_URL_') || define('_SQ_STATIC_API_URL_', '//storage.googleapis.com/squirrly/');
19
  defined('_SQ_SUPPORT_EMAIL_URL_') || define('_SQ_SUPPORT_EMAIL_URL_', 'http://plugin.squirrly.co/contact/');
20
  defined('_SQ_SUPPORT_FACEBOOK_URL_') || define('_SQ_SUPPORT_FACEBOOK_URL_', 'https://www.facebook.com/Squirrly.co');
controllers/Audits.php CHANGED
@@ -9,6 +9,9 @@ class SQ_Controllers_Audits extends SQ_Classes_FrontController {
9
  public $limit = 10;
10
 
11
  function init() {
 
 
 
12
  //Checkin to API V2
13
  SQ_Classes_RemoteController::checkin();
14
 
9
  public $limit = 10;
10
 
11
  function init() {
12
+ //Clear the Scripts and Styles from other plugins
13
+ SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
14
+
15
  //Checkin to API V2
16
  SQ_Classes_RemoteController::checkin();
17
 
controllers/FocusPages.php CHANGED
@@ -16,10 +16,12 @@ class SQ_Controllers_FocusPages extends SQ_Classes_FrontController {
16
  * @return mixed|void
17
  */
18
  function init() {
 
 
 
19
  //Checkin to API V2
20
  $this->checkin = SQ_Classes_RemoteController::checkin();
21
 
22
-
23
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'pagelist');
24
 
25
 
@@ -134,37 +136,38 @@ class SQ_Controllers_FocusPages extends SQ_Classes_FrontController {
134
  //Get the audits for the focus pages
135
  $audits = SQ_Classes_RemoteController::getFocusAudits();
136
 
137
- foreach ($focuspages as $focuspage) {
138
- //Add the audit data if exists
139
- if (!empty($audits)) {
140
- foreach ($audits as $audit) {
141
- if ($focuspage->user_post_id == $audit->user_post_id) {
142
- $focuspage->audit = json_decode($audit->audit);
 
 
143
  }
144
  }
145
- }
146
 
147
- /** @var SQ_Models_Domain_FocusPage $focuspage */
148
- $focuspage = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_FocusPage', $focuspage);
149
- //set the connection info with GSC and GA
150
- $focuspage->audit->sq_analytics_gsc_connected = (isset($this->checkin->connection_gsc) ? $this->checkin->connection_gsc : 0);
151
- $focuspage->audit->sq_analytics_google_connected = (isset($this->checkin->connection_ga) ? $this->checkin->connection_ga : 0);
152
 
153
- SQ_Debug::dump($focuspage, $focuspage->audit);
154
 
155
- //If there is a local page, then show focus
156
- if ($focuspage->getWppost()) {
157
- $this->focuspages[] = SQ_Classes_ObjController::getClass('SQ_Models_FocusPages')->parseFocusPage($focuspage, $labels)->getFocusPage();
158
- } elseif ($focuspage->user_post_id) {
159
- SQ_Classes_Error::setError(__('Focus Page does not exist or was deleted from your website.', _SQ_PLUGIN_NAME_));
160
- SQ_Classes_RemoteController::deleteFocusPage(array('user_post_id' => $focuspage->user_post_id));
 
161
  }
162
  }
163
-
164
  }
165
  }
166
  //Get the labels for view use
167
- if (!empty($labels) || count($this->focuspages) > 1) {
168
  $this->labels = SQ_Classes_ObjController::getClass('SQ_Models_FocusPages')->getLabels();
169
  }
170
  }
@@ -188,7 +191,7 @@ class SQ_Controllers_FocusPages extends SQ_Classes_FrontController {
188
  $post_id = SQ_Classes_Helpers_Tools::getValue('id', false);
189
  if ($post_id) {
190
  if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($post_id)) {
191
- if ($post->post_status == 'publish') {
192
  $args = array();
193
  $args['post_id'] = $post->ID;
194
  $args['permalink'] = $post->url;
16
  * @return mixed|void
17
  */
18
  function init() {
19
+ //Clear the Scripts and Styles from other plugins
20
+ SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
21
+
22
  //Checkin to API V2
23
  $this->checkin = SQ_Classes_RemoteController::checkin();
24
 
 
25
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'pagelist');
26
 
27
 
136
  //Get the audits for the focus pages
137
  $audits = SQ_Classes_RemoteController::getFocusAudits();
138
 
139
+ if(!empty($focuspages)) {
140
+ foreach ($focuspages as $focuspage) {
141
+ //Add the audit data if exists
142
+ if (isset($focuspage->user_post_id) && !empty($audits)) {
143
+ foreach ($audits as $audit) {
144
+ if ($focuspage->user_post_id == $audit->user_post_id) {
145
+ $focuspage->audit = json_decode($audit->audit);
146
+ }
147
  }
148
  }
 
149
 
150
+ /** @var SQ_Models_Domain_FocusPage $focuspage */
151
+ $focuspage = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_FocusPage', $focuspage);
152
+ //set the connection info with GSC and GA
153
+ $focuspage->audit->sq_analytics_gsc_connected = (isset($this->checkin->connection_gsc) ? $this->checkin->connection_gsc : 0);
154
+ $focuspage->audit->sq_analytics_google_connected = (isset($this->checkin->connection_ga) ? $this->checkin->connection_ga : 0);
155
 
156
+ SQ_Debug::dump($focuspage, $focuspage->audit);
157
 
158
+ //If there is a local page, then show focus
159
+ if ($focuspage->getWppost()) {
160
+ $this->focuspages[] = SQ_Classes_ObjController::getClass('SQ_Models_FocusPages')->parseFocusPage($focuspage, $labels)->getFocusPage();
161
+ } elseif ($focuspage->user_post_id) {
162
+ SQ_Classes_Error::setError(__('Focus Page does not exist or was deleted from your website.', _SQ_PLUGIN_NAME_));
163
+ SQ_Classes_RemoteController::deleteFocusPage(array('user_post_id' => $focuspage->user_post_id));
164
+ }
165
  }
166
  }
 
167
  }
168
  }
169
  //Get the labels for view use
170
+ if (!empty($labels) || count((array)$this->focuspages) > 1) {
171
  $this->labels = SQ_Classes_ObjController::getClass('SQ_Models_FocusPages')->getLabels();
172
  }
173
  }
191
  $post_id = SQ_Classes_Helpers_Tools::getValue('id', false);
192
  if ($post_id) {
193
  if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($post_id)) {
194
+ if ($post->post_status == 'publish' && $post->ID == $post_id) {
195
  $args = array();
196
  $args['post_id'] = $post->ID;
197
  $args['permalink'] = $post->url;
controllers/Menu.php CHANGED
@@ -10,9 +10,19 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
10
 
11
  public function __construct() {
12
  parent::__construct();
13
- add_action('admin_bar_menu', array($this, 'hookTopmenuDashboard'), 10);
14
- add_action('admin_bar_menu', array($this, 'hookTopmenuSquirrly'), 91);
15
- add_action('do_meta_boxes', array($this, 'addMetabox'));
 
 
 
 
 
 
 
 
 
 
16
 
17
  }
18
 
@@ -20,28 +30,31 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
20
  * Hook the Admin load
21
  */
22
  public function hookInit() {
23
-
24
  //in case the token is not set
25
  if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') {
26
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
27
  if (in_array(SQ_Classes_Helpers_Tools::getValue('page'), $this->sq_pages)) {
28
-
29
  wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
30
  exit();
31
  }
32
  }
33
  } elseif (SQ_Classes_Helpers_Tools::getIsset('page')) {
34
- if (in_array(SQ_Classes_Helpers_Tools::getValue('page'), $this->sq_pages) || SQ_Classes_Helpers_Tools::getValue('page') === 'sq_dashboard') {
35
- //redirect users to onboarding if necessary
36
- if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
37
- if (SQ_Classes_Helpers_Tools::getValue('page') !== 'sq_onboarding') {
38
- wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step1'));
39
- die();
 
 
 
40
  }
41
  }
42
  }
43
  }
44
 
 
45
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
46
  if (SQ_Classes_Helpers_Tools::getValue('page') == 'sq_help') {
47
  wp_redirect(_SQ_HOWTO_URL_);
@@ -49,17 +62,18 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
49
  }
50
  }
51
 
 
52
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
53
- if(current_user_can('sq_manage_settings')) {
54
  if (SQ_Classes_Helpers_Tools::getValue('page') == 'sq_account') {
55
  wp_redirect(SQ_Classes_RemoteController::getMySquirrlyLink('account'));
56
  exit();
57
  }
58
  }
59
  }
 
60
  /* add the plugin menu in admin */
61
  if (current_user_can('manage_options')) {
62
-
63
  try {
64
  //check if activated
65
  if (get_transient('sq_activate') == 1) {
@@ -85,17 +99,16 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
85
  SQ_Classes_Error::setMessage(sprintf(__("An error occurred during activation. If this error persists, please contact us at: %s", _SQ_PLUGIN_NAME_), _SQ_SUPPORT_EMAIL_));
86
  }
87
 
88
- //This option is use for custom Package details
89
- SQ_Classes_Helpers_DevKit::updatePluginData(); //update text in case of devkit
90
 
91
  }
92
 
93
  //activate the cron job if not exists
94
- if (!wp_get_schedule('sq_cron_process')) {
95
  wp_schedule_event(time(), 'hourly', 'sq_cron_process');
96
  }
97
 
98
-
99
  //Add Squirrly SEO in Posts list
100
  SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList')->init();
101
 
@@ -151,6 +164,14 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
151
  $mainmenu = $this->model->getMainMenu();
152
  if (!empty($mainmenu)) {
153
  foreach ($mainmenu as $menuid => $item) {
 
 
 
 
 
 
 
 
154
  //make sure the user has the capabilities
155
  if (current_user_can($item['capability'])) {
156
  $wp_admin_bar->add_node(array(
@@ -163,7 +184,7 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
163
  if (!empty($tabs)) {
164
  foreach ($tabs as $id => $tab) {
165
  $array_id = explode('/', $id);
166
- if (count($array_id) == 2) {
167
  $wp_admin_bar->add_node(array(
168
  'id' => $menuid . str_replace('/', '_', $id),
169
  'title' => $tab['title'],
@@ -233,7 +254,6 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
233
  public function hookMenu() {
234
 
235
  $this->post_type = SQ_Classes_Helpers_Tools::getOption('sq_post_types');
236
- $menu = SQ_Classes_Helpers_Tools::getOption('menu');
237
 
238
  //Push the Analytics Check
239
  if (strpos($_SERVER['REQUEST_URI'], '?page=sq_dashboard') !== false) {
@@ -264,6 +284,14 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
264
 
265
  $mainmenu = $this->model->getMainMenu();
266
  foreach ($mainmenu as $name => $item) {
 
 
 
 
 
 
 
 
267
  $this->model->addSubmenu(array($item['parent'],
268
  $item['description'],
269
  $item['title'],
@@ -275,14 +303,16 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
275
  }
276
 
277
  //show account only for Admins
278
- if(current_user_can('sq_manage_settings')) {
279
- $this->model->addSubmenu(array('sq_dashboard',
280
- __('Squirrly Account Info', _SQ_PLUGIN_NAME_),
281
- __('Account Info', _SQ_PLUGIN_NAME_),
282
- 'edit_posts',
283
- 'sq_account',
284
- array(SQ_Classes_ObjController::getClass('SQ_Controllers_Account'), 'init')
285
- ));
 
 
286
  }
287
 
288
  $this->model->addSubmenu(array('sq_dashboard',
@@ -294,7 +324,6 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
294
  ));
295
 
296
 
297
-
298
  }
299
 
300
  /**
@@ -350,7 +379,6 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
350
  public function hookHead() {
351
  global $sq_fullscreen;
352
 
353
-
354
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
355
  if (in_array(SQ_Classes_Helpers_Tools::getValue('page', ''), $this->sq_pages)) {
356
  $sq_fullscreen = true;
10
 
11
  public function __construct() {
12
  parent::__construct();
13
+
14
+ if (!is_network_admin()) {
15
+ add_action('admin_bar_menu', array($this, 'hookTopmenuDashboard'), 10);
16
+ add_action('admin_bar_menu', array($this, 'hookTopmenuSquirrly'), 91);
17
+ add_action('do_meta_boxes', array($this, 'addMetabox'));
18
+
19
+ //run compatibility check on Squirrly settings
20
+ if (SQ_Classes_Helpers_Tools::getIsset('page')) {
21
+ if (in_array(SQ_Classes_Helpers_Tools::getValue('page', ''), $this->sq_pages)) {
22
+ add_action('admin_enqueue_scripts', array(SQ_Classes_ObjController::getClass('SQ_Models_Compatibility'), 'fixEnqueueErrors'), PHP_INT_MAX);
23
+ }
24
+ }
25
+ }
26
 
27
  }
28
 
30
  * Hook the Admin load
31
  */
32
  public function hookInit() {
 
33
  //in case the token is not set
34
  if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') {
35
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
36
  if (in_array(SQ_Classes_Helpers_Tools::getValue('page'), $this->sq_pages)) {
37
+ //redirect to dashboard to login
38
  wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
39
  exit();
40
  }
41
  }
42
  } elseif (SQ_Classes_Helpers_Tools::getIsset('page')) {
43
+ //check if onboarding should load
44
+ if (SQ_Classes_Helpers_Tools::getMenuVisible('show_tutorial')) {
45
+ if (in_array(SQ_Classes_Helpers_Tools::getValue('page'), $this->sq_pages) || SQ_Classes_Helpers_Tools::getValue('page') === 'sq_dashboard') {
46
+ //redirect users to onboarding if necessary
47
+ if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
48
+ if (SQ_Classes_Helpers_Tools::getValue('page') !== 'sq_onboarding') {
49
+ wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step1'));
50
+ die();
51
+ }
52
  }
53
  }
54
  }
55
  }
56
 
57
+ //Check if help page is selected
58
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
59
  if (SQ_Classes_Helpers_Tools::getValue('page') == 'sq_help') {
60
  wp_redirect(_SQ_HOWTO_URL_);
62
  }
63
  }
64
 
65
+ //Check if account page is selected
66
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
67
+ if (current_user_can('sq_manage_settings')) {
68
  if (SQ_Classes_Helpers_Tools::getValue('page') == 'sq_account') {
69
  wp_redirect(SQ_Classes_RemoteController::getMySquirrlyLink('account'));
70
  exit();
71
  }
72
  }
73
  }
74
+
75
  /* add the plugin menu in admin */
76
  if (current_user_can('manage_options')) {
 
77
  try {
78
  //check if activated
79
  if (get_transient('sq_activate') == 1) {
99
  SQ_Classes_Error::setMessage(sprintf(__("An error occurred during activation. If this error persists, please contact us at: %s", _SQ_PLUGIN_NAME_), _SQ_SUPPORT_EMAIL_));
100
  }
101
 
102
+ //This option is use for custom Package installs
103
+ SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_DevKit')->updatePluginData(); //update text in case of devkit
104
 
105
  }
106
 
107
  //activate the cron job if not exists
108
+ if (!wp_next_scheduled('sq_cron_process')) {
109
  wp_schedule_event(time(), 'hourly', 'sq_cron_process');
110
  }
111
 
 
112
  //Add Squirrly SEO in Posts list
113
  SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList')->init();
114
 
164
  $mainmenu = $this->model->getMainMenu();
165
  if (!empty($mainmenu)) {
166
  foreach ($mainmenu as $menuid => $item) {
167
+ if ($menuid == 'sq_audits' && !SQ_Classes_Helpers_Tools::getMenuVisible('show_audit')) {
168
+ continue;
169
+ } elseif ($menuid == 'sq_rankings' && !SQ_Classes_Helpers_Tools::getMenuVisible('show_rankings')) {
170
+ continue;
171
+ } elseif ($menuid == 'sq_focuspages' && !SQ_Classes_Helpers_Tools::getMenuVisible('show_focuspages')) {
172
+ continue;
173
+ }
174
+
175
  //make sure the user has the capabilities
176
  if (current_user_can($item['capability'])) {
177
  $wp_admin_bar->add_node(array(
184
  if (!empty($tabs)) {
185
  foreach ($tabs as $id => $tab) {
186
  $array_id = explode('/', $id);
187
+ if (count((array)$array_id) == 2) {
188
  $wp_admin_bar->add_node(array(
189
  'id' => $menuid . str_replace('/', '_', $id),
190
  'title' => $tab['title'],
254
  public function hookMenu() {
255
 
256
  $this->post_type = SQ_Classes_Helpers_Tools::getOption('sq_post_types');
 
257
 
258
  //Push the Analytics Check
259
  if (strpos($_SERVER['REQUEST_URI'], '?page=sq_dashboard') !== false) {
284
 
285
  $mainmenu = $this->model->getMainMenu();
286
  foreach ($mainmenu as $name => $item) {
287
+ if ($name == 'sq_audits' && !SQ_Classes_Helpers_Tools::getMenuVisible('show_audit')) {
288
+ continue;
289
+ } elseif ($name == 'sq_rankings' && !SQ_Classes_Helpers_Tools::getMenuVisible('show_rankings')) {
290
+ continue;
291
+ } elseif ($name == 'sq_focuspages' && !SQ_Classes_Helpers_Tools::getMenuVisible('show_focuspages')) {
292
+ continue;
293
+ }
294
+
295
  $this->model->addSubmenu(array($item['parent'],
296
  $item['description'],
297
  $item['title'],
303
  }
304
 
305
  //show account only for Admins
306
+ if (current_user_can('sq_manage_settings')) {
307
+ if (SQ_Classes_Helpers_Tools::getMenuVisible('show_account_info')) {
308
+ $this->model->addSubmenu(array('sq_dashboard',
309
+ __('Squirrly Account Info', _SQ_PLUGIN_NAME_),
310
+ __('Account Info', _SQ_PLUGIN_NAME_),
311
+ 'edit_posts',
312
+ 'sq_account',
313
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_Account'), 'init')
314
+ ));
315
+ }
316
  }
317
 
318
  $this->model->addSubmenu(array('sq_dashboard',
324
  ));
325
 
326
 
 
327
  }
328
 
329
  /**
379
  public function hookHead() {
380
  global $sq_fullscreen;
381
 
 
382
  if (SQ_Classes_Helpers_Tools::getIsset('page')) {
383
  if (in_array(SQ_Classes_Helpers_Tools::getValue('page', ''), $this->sq_pages)) {
384
  $sq_fullscreen = true;
controllers/Onboarding.php CHANGED
@@ -10,6 +10,9 @@ class SQ_Controllers_Onboarding extends SQ_Classes_FrontController {
10
  * @return mixed|void
11
  */
12
  public function init() {
 
 
 
13
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'step1');
14
 
15
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
10
  * @return mixed|void
11
  */
12
  public function init() {
13
+ //Clear the Scripts and Styles from other plugins
14
+ SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
15
+
16
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'step1');
17
 
18
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
controllers/Post.php CHANGED
@@ -83,16 +83,14 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
83
  @preg_match_all('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', stripslashes($post_data['post_content']), $out);
84
 
85
  if (!empty($out)) {
86
- if (!is_array($out[1]) || count($out[1]) == 0)
87
  return $post_data;
88
 
89
  if (get_bloginfo('wpurl') <> '') {
90
- $domain = parse_url(get_bloginfo('wpurl'));
91
 
92
  foreach ($out[1] as $row) {
93
- if (strpos($row, '//') !== false &&
94
- strpos($row, $domain['host']) === false
95
- ) {
96
  if (!in_array($row, $urls)) {
97
  $urls[] = $row;
98
  }
@@ -102,7 +100,7 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
102
  }
103
  }
104
 
105
- if (!is_array($urls) || (is_array($urls) && count($urls) == 0)) {
106
  return $post_data;
107
  }
108
 
@@ -161,7 +159,7 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
161
 
162
  $seo = SQ_Classes_Helpers_Tools::getValue('sq_seo', '');
163
 
164
- if (is_array($seo) && count($seo) > 0)
165
  $args['seo'] = implode(',', $seo);
166
 
167
  $args['keyword'] = SQ_Classes_Helpers_Tools::getValue('sq_keyword', '');
@@ -187,7 +185,7 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
187
  wp_schedule_single_event(time(), 'sq_cron_process_single');
188
 
189
  //If the queue is too big ... means that the cron is not working
190
- if (count($process) > 5) SQ_Classes_Helpers_Tools::saveOptions('sq_force_savepost', 1);
191
  }
192
  }
193
 
83
  @preg_match_all('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', stripslashes($post_data['post_content']), $out);
84
 
85
  if (!empty($out)) {
86
+ if (!is_array($out[1]) || count((array)$out[1]) == 0)
87
  return $post_data;
88
 
89
  if (get_bloginfo('wpurl') <> '') {
90
+ $domain = parse_url(home_url(), PHP_URL_HOST);
91
 
92
  foreach ($out[1] as $row) {
93
+ if (strpos($row, '//') !== false && strpos($row, $domain) === false) {
 
 
94
  if (!in_array($row, $urls)) {
95
  $urls[] = $row;
96
  }
100
  }
101
  }
102
 
103
+ if (!is_array($urls) || (is_array($urls) && count((array)$urls) == 0)) {
104
  return $post_data;
105
  }
106
 
159
 
160
  $seo = SQ_Classes_Helpers_Tools::getValue('sq_seo', '');
161
 
162
+ if (is_array($seo) && count((array)$seo) > 0)
163
  $args['seo'] = implode(',', $seo);
164
 
165
  $args['keyword'] = SQ_Classes_Helpers_Tools::getValue('sq_keyword', '');
185
  wp_schedule_single_event(time(), 'sq_cron_process_single');
186
 
187
  //If the queue is too big ... means that the cron is not working
188
+ if (count((array)$process) > 5) SQ_Classes_Helpers_Tools::saveOptions('sq_force_savepost', 1);
189
  }
190
  }
191
 
controllers/Ranking.php CHANGED
@@ -9,6 +9,9 @@ class SQ_Controllers_Ranking extends SQ_Classes_FrontController {
9
 
10
 
11
  function init() {
 
 
 
12
  //Checkin to API V2
13
  $this->checkin = SQ_Classes_RemoteController::checkin();
14
 
9
 
10
 
11
  function init() {
12
+ //Clear the Scripts and Styles from other plugins
13
+ SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
14
+
15
  //Checkin to API V2
16
  $this->checkin = SQ_Classes_RemoteController::checkin();
17
 
controllers/Research.php CHANGED
@@ -16,6 +16,9 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
16
  public $user;
17
 
18
  function init() {
 
 
 
19
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'research');
20
 
21
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
@@ -278,7 +281,7 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
278
 
279
  SQ_Classes_Helpers_Tools::setHeader('json');
280
 
281
- $name = (string)SQ_Classes_Helpers_Tools::getValue('name', 0);
282
  $color = (string)SQ_Classes_Helpers_Tools::getValue('color', '#ffffff');
283
 
284
  if ($name <> '' && $color <> '') {
@@ -441,7 +444,7 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
441
  $num = 0;
442
  $fp = fopen($_FILES['sq_upload_file']['tmp_name'], 'rb');
443
  while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
444
- $num = count($data);
445
  for ($c = 0; $c < $num; $c++) {
446
  if (is_string($data[$c]) && $data[$c] <> '') {
447
  $args = array();
@@ -515,6 +518,8 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
515
 
516
  exit();
517
  case 'sq_ajax_research_process':
 
 
518
  SQ_Classes_Helpers_Tools::setHeader('json');
519
  $keywords = SQ_Classes_Helpers_Tools::getValue('keywords', false);
520
  $country = SQ_Classes_Helpers_Tools::getValue('country', 'com');
16
  public $user;
17
 
18
  function init() {
19
+ //Clear the Scripts and Styles from other plugins
20
+ SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
21
+
22
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'research');
23
 
24
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
281
 
282
  SQ_Classes_Helpers_Tools::setHeader('json');
283
 
284
+ $name = (string)SQ_Classes_Helpers_Tools::getValue('name', '');
285
  $color = (string)SQ_Classes_Helpers_Tools::getValue('color', '#ffffff');
286
 
287
  if ($name <> '' && $color <> '') {
444
  $num = 0;
445
  $fp = fopen($_FILES['sq_upload_file']['tmp_name'], 'rb');
446
  while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
447
+ $num = count((array)$data);
448
  for ($c = 0; $c < $num; $c++) {
449
  if (is_string($data[$c]) && $data[$c] <> '') {
450
  $args = array();
518
 
519
  exit();
520
  case 'sq_ajax_research_process':
521
+ @ini_set("max_execution_time", 300);
522
+
523
  SQ_Classes_Helpers_Tools::setHeader('json');
524
  $keywords = SQ_Classes_Helpers_Tools::getValue('keywords', false);
525
  $country = SQ_Classes_Helpers_Tools::getValue('country', 'com');
controllers/SeoSettings.php CHANGED
@@ -5,6 +5,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
5
  public $pages = array();
6
 
7
  function init() {
 
 
 
8
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'bulkseo');
9
 
10
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
@@ -49,11 +52,11 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
49
  $paged = SQ_Classes_Helpers_Tools::getValue('spage', 1);
50
  $post_id = SQ_Classes_Helpers_Tools::getValue('sid', false);
51
  $post_type = SQ_Classes_Helpers_Tools::getValue('stype', 'post');
52
- $post_per_page = SQ_Classes_Helpers_Tools::getValue('cnt', 20);
53
  $post_status = SQ_Classes_Helpers_Tools::getValue('sstatus', '');
54
 
55
  if ($search <> '') {
56
- $post_per_page = -1;
57
  } else {
58
  $patterns = SQ_Classes_Helpers_Tools::getOption('patterns');
59
  if (!isset($patterns[$post_type])) {
@@ -95,7 +98,6 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
95
  'order' => 'DESC',
96
  );
97
 
98
-
99
  //If post id is set in URL
100
  if ($post_id) {
101
  $query['post__in'] = explode(',', $post_id);
@@ -108,6 +110,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
108
 
109
  $wp_query = new WP_Query($query);
110
  $posts = $wp_query->get_posts();
 
111
 
112
  if (!empty($posts)) {
113
  foreach ($posts as $post) {
@@ -209,7 +212,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
209
  }
210
 
211
 
212
- if (!empty($labels) || count($this->pages) > 1) {
213
  //Get the labels for view use
214
  $this->labels = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->getLabels();
215
  }
@@ -604,7 +607,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
604
  maybe_serialize($metas),
605
  gmdate('Y-m-d H:i:s'));
606
  }
607
- SQ_Classes_Error::setMessage(sprintf(__('%s SEO records were imported successfuly! You can now deactivate the %s plugin', _SQ_PLUGIN_NAME_), count($seo), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
608
  }
609
  }
610
  break;
@@ -642,7 +645,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
642
  maybe_serialize($metas),
643
  gmdate('Y-m-d H:i:s'));
644
  }
645
- SQ_Classes_Error::setMessage(sprintf(__('%s SEO records were imported successfuly! You can now deactivate the %s plugin', _SQ_PLUGIN_NAME_), count($seo), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
646
  } else {
647
  SQ_Classes_Error::setMessage(sprintf(__('There are no SEO records with this plugin. You can now deactivate the %s plugin', _SQ_PLUGIN_NAME_), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
648
 
5
  public $pages = array();
6
 
7
  function init() {
8
+ //Clear the Scripts and Styles from other plugins
9
+ SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
10
+
11
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'bulkseo');
12
 
13
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
52
  $paged = SQ_Classes_Helpers_Tools::getValue('spage', 1);
53
  $post_id = SQ_Classes_Helpers_Tools::getValue('sid', false);
54
  $post_type = SQ_Classes_Helpers_Tools::getValue('stype', 'post');
55
+ $post_per_page = SQ_Classes_Helpers_Tools::getValue('cnt', 10);
56
  $post_status = SQ_Classes_Helpers_Tools::getValue('sstatus', '');
57
 
58
  if ($search <> '') {
59
+ $post_per_page = 50;
60
  } else {
61
  $patterns = SQ_Classes_Helpers_Tools::getOption('patterns');
62
  if (!isset($patterns[$post_type])) {
98
  'order' => 'DESC',
99
  );
100
 
 
101
  //If post id is set in URL
102
  if ($post_id) {
103
  $query['post__in'] = explode(',', $post_id);
110
 
111
  $wp_query = new WP_Query($query);
112
  $posts = $wp_query->get_posts();
113
+ $wp_query->is_paged = false; //remove pagination
114
 
115
  if (!empty($posts)) {
116
  foreach ($posts as $post) {
212
  }
213
 
214
 
215
+ if (!empty($labels) || count((array)$this->pages) > 1) {
216
  //Get the labels for view use
217
  $this->labels = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->getLabels();
218
  }
607
  maybe_serialize($metas),
608
  gmdate('Y-m-d H:i:s'));
609
  }
610
+ SQ_Classes_Error::setMessage(sprintf(__('%s SEO records were imported successfuly! You can now deactivate the %s plugin', _SQ_PLUGIN_NAME_), count((array)$seo), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
611
  }
612
  }
613
  break;
645
  maybe_serialize($metas),
646
  gmdate('Y-m-d H:i:s'));
647
  }
648
+ SQ_Classes_Error::setMessage(sprintf(__('%s SEO records were imported successfuly! You can now deactivate the %s plugin', _SQ_PLUGIN_NAME_), count((array)$seo), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
649
  } else {
650
  SQ_Classes_Error::setMessage(sprintf(__('There are no SEO records with this plugin. You can now deactivate the %s plugin', _SQ_PLUGIN_NAME_), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
651
 
controllers/Snippet.php CHANGED
@@ -179,7 +179,6 @@ class SQ_Controllers_Snippet extends SQ_Classes_FrontController {
179
  if ($this->post = $this->model->getCurrentSnippet($post_id, $term_id, $taxonomy, $post_type)) {
180
  $json['html'] = $this->getView('Blocks/Snippet');
181
  }
182
-
183
  if (SQ_Classes_Helpers_Tools::isAjax()) {
184
  SQ_Classes_Helpers_Tools::setHeader('json');
185
 
@@ -201,6 +200,7 @@ class SQ_Controllers_Snippet extends SQ_Classes_FrontController {
201
  $post_type = SQ_Classes_Helpers_Tools::getValue('post_type', 'post');
202
 
203
  if ($this->post = $this->model->getCurrentSnippet($post_id, $term_id, $taxonomy, $post_type)) {
 
204
  $json['html'] = $this->getView('Blocks/Snippet');
205
  }
206
 
179
  if ($this->post = $this->model->getCurrentSnippet($post_id, $term_id, $taxonomy, $post_type)) {
180
  $json['html'] = $this->getView('Blocks/Snippet');
181
  }
 
182
  if (SQ_Classes_Helpers_Tools::isAjax()) {
183
  SQ_Classes_Helpers_Tools::setHeader('json');
184
 
200
  $post_type = SQ_Classes_Helpers_Tools::getValue('post_type', 'post');
201
 
202
  if ($this->post = $this->model->getCurrentSnippet($post_id, $term_id, $taxonomy, $post_type)) {
203
+ SQ_Debug::dump($this->post);
204
  $json['html'] = $this->getView('Blocks/Snippet');
205
  }
206
 
core/BlockFocusPages.php CHANGED
@@ -8,24 +8,26 @@ class SQ_Core_BlockFocusPages extends SQ_Classes_BlockController {
8
  //Get the audits for the focus pages
9
  $audits = SQ_Classes_RemoteController::getFocusAudits();
10
 
11
- foreach ($focuspages as $focuspage) {
12
- //Add the audit data if exists
13
- if (!empty($audits)) {
14
- foreach ($audits as $audit) {
15
- if ($focuspage->user_post_id == $audit->user_post_id) {
16
- $audit = json_decode($audit->audit);
17
- if (isset($audit->properties) && isset($audit->properties->created_at->date)) {
18
- $focuspage->audit_datetime = date(get_option('date_format') . ' ' . get_option('time_format'), strtotime($audit->properties->created_at->date));
19
- } else {
20
- $focuspage->audit_datetime = __('Audit in progress', _SQ_PLUGIN_NAME_);
 
 
21
  }
22
  }
23
  }
24
- }
25
 
26
- /** @var SQ_Models_Domain_FocusPage $focuspage */
27
- $this->focuspages[] = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_FocusPage', $focuspage);
28
 
 
29
  }
30
  }
31
  echo $this->getView('Blocks/FocusPages');
8
  //Get the audits for the focus pages
9
  $audits = SQ_Classes_RemoteController::getFocusAudits();
10
 
11
+ if(!empty($focuspages)) {
12
+ foreach ($focuspages as $focuspage) {
13
+ //Add the audit data if exists
14
+ if (isset($focuspage->user_post_id) && !empty($audits)) {
15
+ foreach ($audits as $audit) {
16
+ if ($focuspage->user_post_id == $audit->user_post_id) {
17
+ $audit = json_decode($audit->audit);
18
+ if (isset($audit->properties) && isset($audit->properties->created_at->date)) {
19
+ $focuspage->audit_datetime = date(get_option('date_format') . ' ' . get_option('time_format'), strtotime($audit->properties->created_at->date));
20
+ } else {
21
+ $focuspage->audit_datetime = __('Audit in progress', _SQ_PLUGIN_NAME_);
22
+ }
23
  }
24
  }
25
  }
 
26
 
27
+ /** @var SQ_Models_Domain_FocusPage $focuspage */
28
+ $this->focuspages[] = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_FocusPage', $focuspage);
29
 
30
+ }
31
  }
32
  }
33
  echo $this->getView('Blocks/FocusPages');
core/BlockJorney.php CHANGED
@@ -16,6 +16,10 @@ class SQ_Core_BlockJorney extends SQ_Classes_BlockController {
16
  return false;
17
  }
18
 
 
 
 
 
19
  $days = 1;
20
  $seconds = strtotime(date('Y-m-d')) - strtotime($seojorney);
21
 
@@ -24,10 +28,6 @@ class SQ_Core_BlockJorney extends SQ_Classes_BlockController {
24
  $days = (int)$days + 1;
25
  }
26
 
27
- if ($days > 14) {
28
- return false;
29
- }
30
-
31
  $this->days = $days;
32
  echo $this->getView('Blocks/Jorney');
33
  }
@@ -35,4 +35,18 @@ class SQ_Core_BlockJorney extends SQ_Classes_BlockController {
35
  public function getJourneyDays() {
36
  return $this->days;
37
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
16
  return false;
17
  }
18
 
19
+ if (!SQ_Classes_Helpers_Tools::getOption('sq_seojourney_congrats')) {
20
+ return false;
21
+ }
22
+
23
  $days = 1;
24
  $seconds = strtotime(date('Y-m-d')) - strtotime($seojorney);
25
 
28
  $days = (int)$days + 1;
29
  }
30
 
 
 
 
 
31
  $this->days = $days;
32
  echo $this->getView('Blocks/Jorney');
33
  }
35
  public function getJourneyDays() {
36
  return $this->days;
37
  }
38
+
39
+ /**
40
+ * 14 days journey action
41
+ */
42
+ public function action() {
43
+ parent::action();
44
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
45
+ //login action
46
+ case 'sq_journey_close':
47
+ SQ_Classes_Helpers_Tools::saveOptions('sq_seojourney_congrats', 0);
48
+ break;
49
+
50
+ }
51
+ }
52
  }
core/BlockStats.php CHANGED
@@ -14,6 +14,10 @@ class SQ_Core_BlockStats extends SQ_Classes_BlockController {
14
  function hookGetContent() {
15
  //get the stats from Dashboard
16
  $this->stats = SQ_Classes_RemoteController::getStats();
 
 
 
 
17
  }
18
 
19
 
14
  function hookGetContent() {
15
  //get the stats from Dashboard
16
  $this->stats = SQ_Classes_RemoteController::getStats();
17
+
18
+ if(is_wp_error($this->stats)){
19
+ $this->stats = array();
20
+ }
21
  }
22
 
23
 
core/BlockSupport.php CHANGED
@@ -2,11 +2,12 @@
2
 
3
  class SQ_Core_BlockSupport extends SQ_Classes_BlockController {
4
 
5
- public function init(){
6
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('support');
7
 
8
  echo $this->getView('Blocks/Support');
9
  }
 
10
  /**
11
  * Called when Post action is triggered
12
  *
@@ -26,10 +27,9 @@ class SQ_Core_BlockSupport extends SQ_Classes_BlockController {
26
  $from = $current_user->user_email;
27
  }
28
  $subject = __('Plugin Feedback', _SQ_PLUGIN_NAME_);
29
- $face = SQ_Classes_Helpers_Tools::getValue('feedback');
30
- $message = SQ_Classes_Helpers_Tools::getValue('message');
31
 
32
- if ($message <> '' || (int)$face > 0) {
33
  switch ($face) {
34
  case 1:
35
  $face = 'Angry';
2
 
3
  class SQ_Core_BlockSupport extends SQ_Classes_BlockController {
4
 
5
+ public function init() {
6
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('support');
7
 
8
  echo $this->getView('Blocks/Support');
9
  }
10
+
11
  /**
12
  * Called when Post action is triggered
13
  *
27
  $from = $current_user->user_email;
28
  }
29
  $subject = __('Plugin Feedback', _SQ_PLUGIN_NAME_);
30
+ $face = SQ_Classes_Helpers_Tools::getValue('feedback', false);
 
31
 
32
+ if ($face) {
33
  switch ($face) {
34
  case 1:
35
  $face = 'Angry';
languages/squirrly-seo-en_US.mo CHANGED
Binary file
languages/squirrly-seo-en_US.po CHANGED
@@ -1,8 +1,8 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: \n"
4
- "POT-Creation-Date: 2019-04-19 11:02+0300\n"
5
- "PO-Revision-Date: 2019-04-19 11:02+0300\n"
6
  "Last-Translator: \n"
7
  "Language-Team: \n"
8
  "Language: en_US\n"
@@ -19,244 +19,244 @@ msgstr ""
19
  msgid "Don't bother me!"
20
  msgstr ""
21
 
22
- #: classes/RemoteController.php:264
23
  msgid "Articles optimized so far"
24
  msgstr ""
25
 
26
- #: classes/RemoteController.php:266 classes/RemoteController.php:273
27
  msgid "add post"
28
  msgstr ""
29
 
30
- #: classes/RemoteController.php:271
31
  msgid "Average optimization"
32
  msgstr ""
33
 
34
- #: classes/RemoteController.php:278
35
  msgid "All Keyword Researches performed for all websites"
36
  msgstr ""
37
 
38
- #: classes/RemoteController.php:280
39
  msgid "do research"
40
  msgstr ""
41
 
42
- #: classes/RemoteController.php:285
43
  msgid "Keywords stored in Squirrly Briefcase"
44
  msgstr ""
45
 
46
- #: classes/RemoteController.php:287
47
  msgid "add keyword"
48
  msgstr ""
49
 
50
- #: classes/RemoteController.php:292
51
  msgid "Pages ranking in top 100 Google"
52
  msgstr ""
53
 
54
- #: classes/RemoteController.php:294
55
  msgid "see rankings"
56
  msgstr ""
57
 
58
- #: classes/RemoteController.php:299
59
  msgid "SEO Audits"
60
  msgstr ""
61
 
62
- #: classes/RemoteController.php:301
63
  msgid "see audits"
64
  msgstr ""
65
 
66
- #: classes/RemoteController.php:948
67
  msgid "Recent discussions:"
68
  msgstr ""
69
 
70
- #: classes/RemoteController.php:948
71
  msgid "SEO Search Volume:"
72
  msgstr ""
73
 
74
- #: classes/RemoteController.php:948
75
  msgid "Competition:"
76
  msgstr ""
77
 
78
- #: classes/RemoteController.php:948
79
  msgid "Trend:"
80
  msgstr ""
81
 
82
- #: classes/RemoteController.php:949
83
  msgid "Keyword:"
84
  msgstr ""
85
 
86
- #: classes/RemoteController.php:950
87
  msgid "date"
88
  msgstr ""
89
 
90
- #: classes/RemoteController.php:951 controllers/CheckSeo.php:105
91
  #: controllers/Patterns.php:15 controllers/Research.php:292
92
  #: controllers/Research.php:324 controllers/Research.php:380
93
  msgid "Saved!"
94
  msgstr ""
95
 
96
- #: classes/RemoteController.php:952
97
  msgid "Read it!"
98
  msgstr ""
99
 
100
- #: classes/RemoteController.php:953
101
  msgid "Insert it!"
102
  msgstr ""
103
 
104
- #: classes/RemoteController.php:954
105
  msgid "Reference"
106
  msgstr ""
107
 
108
- #: classes/RemoteController.php:955
109
  msgid "Insert as box"
110
  msgstr ""
111
 
112
- #: classes/RemoteController.php:956
113
  msgid "Insert Link"
114
  msgstr ""
115
 
116
- #: classes/RemoteController.php:957
117
  msgid "Not relevant?"
118
  msgstr ""
119
 
120
- #: classes/RemoteController.php:958
121
  msgid "Insert in your article"
122
  msgstr ""
123
 
124
- #: classes/RemoteController.php:959
125
  msgid ":( An error occurred while processing your request. Please try again"
126
  msgstr ""
127
 
128
- #: classes/RemoteController.php:960
129
  msgid "Keyword Research takes too long to get the results. Click to try again"
130
  msgstr ""
131
 
132
- #: classes/RemoteController.php:961
133
  msgid "No results found!"
134
  msgstr ""
135
 
136
- #: classes/RemoteController.php:962
137
  msgid "Enter one more word to find relevant results"
138
  msgstr ""
139
 
140
- #: classes/RemoteController.php:963
141
  #, fuzzy
142
  #| msgid "Takes too long to check this keyword ..."
143
  msgid "It's taking too long to check this keyword"
144
  msgstr "It’s taking too long to check this keyword"
145
 
146
- #: classes/RemoteController.php:964
147
  msgid "Do a research!"
148
  msgstr ""
149
 
150
- #: classes/RemoteController.php:965
151
  msgid "Do more research!"
152
  msgstr ""
153
 
154
- #: classes/RemoteController.php:966
155
  #, php-format
156
  msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
157
  msgstr ""
158
 
159
- #: classes/RemoteController.php:967
160
  msgid "Has creative commons attributes"
161
  msgstr ""
162
 
163
- #: classes/RemoteController.php:968
164
  msgid "No known copyright restrictions"
165
  msgstr ""
166
 
167
- #: classes/RemoteController.php:969
168
  msgid ""
169
  "You haven`t used Squirrly SEO to optimize your article. Do you want to "
170
  "optimize for a keyword before publishing?"
171
  msgstr ""
172
 
173
- #: classes/RemoteController.php:970
174
  msgid "Keyword Research limit exceeded"
175
  msgstr ""
176
 
177
- #: classes/RemoteController.php:971
178
  msgid "Your Subscription has Expired"
179
  msgstr ""
180
 
181
- #: classes/RemoteController.php:972
182
  msgid "Add 20 Keyword Researches"
183
  msgstr ""
184
 
185
- #: classes/RemoteController.php:973
186
  msgid "There are no keywords saved in briefcase yet"
187
  msgstr ""
188
 
189
- #: classes/RemoteController.php:974
190
  #, php-format
191
  msgid "Congratulations! Your article is 100% optimized!"
192
  msgstr ""
193
 
194
- #: classes/RemoteController.php:975
195
  #, php-format
196
  msgid "appears too many times. Try to remove %s of them"
197
  msgstr ""
198
 
199
- #: classes/RemoteController.php:976
200
  #, php-format
201
  msgid "write %s more words"
202
  msgstr ""
203
 
204
- #: classes/RemoteController.php:977
205
  #, php-format
206
  msgid "Add the keyword in the %s of your article"
207
  msgstr ""
208
 
209
- #: classes/RemoteController.php:978
210
  msgid "Click to keep the highlight on"
211
  msgstr ""
212
 
213
- #: classes/RemoteController.php:979
214
  msgid "introduction"
215
  msgstr ""
216
 
217
- #: classes/RemoteController.php:980
218
  #, php-format
219
  msgid "Write more words after the %s keyword"
220
  msgstr ""
221
 
222
- #: classes/RemoteController.php:981
223
  msgid "or use synonyms"
224
  msgstr ""
225
 
226
- #: classes/RemoteController.php:982
227
  #, php-format
228
  msgid "add %s more word(s)"
229
  msgstr ""
230
 
231
- #: classes/RemoteController.php:983
232
  #, php-format
233
  msgid "or remove %s word(s)"
234
  msgstr ""
235
 
236
- #: classes/RemoteController.php:984
237
  #, php-format
238
  msgid "add %s more keyword(s)"
239
  msgstr ""
240
 
241
- #: classes/RemoteController.php:985
242
  #, php-format
243
  msgid "write %s more words to start calculating"
244
  msgstr ""
245
 
246
- #: classes/RemoteController.php:986 view/Research/Research.php:42
247
  msgid "Add to Briefcase"
248
  msgstr ""
249
 
250
- #: classes/RemoteController.php:987
251
  msgid "Add Keyword to Briefcase"
252
  msgstr ""
253
 
254
- #: classes/RemoteController.php:988 view/Blocks/KRFound.php:78
255
  msgid "Use Keyword"
256
  msgstr ""
257
 
258
- #: classes/RemoteController.php:989 view/Blocks/Snippet.php:146
259
- #: view/Blocks/Snippet.php:518 view/Blocks/Snippet.php:774
260
  msgid "Auto Draft"
261
  msgstr ""
262
 
@@ -296,59 +296,59 @@ msgstr "The code for Facebook Pixel must only contain numbers."
296
  msgid "The code for Facebook App must only contain numbers."
297
  msgstr "The code for Facebook App must only contain numbers."
298
 
299
- #: classes/helpers/Tools.php:82
300
  msgid "Getting started"
301
  msgstr ""
302
 
303
- #: classes/helpers/Tools.php:107
304
  msgid "Documentation"
305
  msgstr ""
306
 
307
- #: classes/helpers/Tools.php:108
308
  msgid "Leave a review"
309
  msgstr ""
310
 
311
- #: classes/helpers/Tools.php:386
312
  msgid "Format"
313
  msgstr ""
314
 
315
- #: classes/helpers/Tools.php:403 classes/helpers/Tools.php:437
316
  msgid "Category"
317
  msgstr ""
318
 
319
- #: classes/helpers/Tools.php:420 classes/helpers/Tools.php:454
320
  msgid "Tag"
321
  msgstr ""
322
 
323
- #: classes/helpers/Tools.php:471
324
  msgid "Shipping Option"
325
  msgstr ""
326
 
327
- #: classes/helpers/Tools.php:488
328
  msgid "Author at"
329
  msgstr ""
330
 
331
- #: classes/helpers/Tools.php:556
332
  msgid "Are you looking for"
333
  msgstr ""
334
 
335
- #: classes/helpers/Tools.php:557
336
  msgid "These are the results for"
337
  msgstr ""
338
 
339
- #: classes/helpers/Tools.php:557
340
  msgid "that you can find on our website."
341
  msgstr ""
342
 
343
- #: classes/helpers/Tools.php:590
344
  msgid "Page not found"
345
  msgstr ""
346
 
347
- #: classes/helpers/Tools.php:591
348
  msgid "This page could not be found on our website."
349
  msgstr ""
350
 
351
- #: classes/helpers/Tools.php:874 classes/helpers/Tools.php:885
352
  #, fuzzy, php-format
353
  #| msgid ""
354
  #| "Good news, %s is integrated in Squirrly SEO now and you don't have to run "
@@ -484,12 +484,12 @@ msgid "No keyword found."
484
  msgstr ""
485
 
486
  #: controllers/Assistant.php:95 controllers/Assistant.php:122
487
- #: controllers/Audits.php:80 controllers/Ranking.php:113
488
- #: controllers/SeoSettings.php:285 controllers/SeoSettings.php:302
489
- #: controllers/SeoSettings.php:322 controllers/SeoSettings.php:359
490
- #: controllers/SeoSettings.php:385 controllers/SeoSettings.php:413
491
- #: controllers/SeoSettings.php:664 controllers/SeoSettings.php:700
492
- #: controllers/SeoSettings.php:737
493
  msgid "Saved"
494
  msgstr ""
495
 
@@ -500,11 +500,11 @@ msgstr ""
500
  #: controllers/Research.php:213 controllers/Research.php:273
501
  #: controllers/Research.php:304 controllers/Research.php:332
502
  #: controllers/Research.php:357 controllers/Research.php:388
503
- #: controllers/Research.php:411 controllers/Research.php:469
504
- #: controllers/SeoSettings.php:479 controllers/SeoSettings.php:651
505
- #: controllers/SeoSettings.php:677 controllers/SeoSettings.php:715
506
- #: controllers/SeoSettings.php:752 controllers/SeoSettings.php:790
507
- #: controllers/Snippet.php:143
508
  msgid "You do not have permission to perform this action"
509
  msgstr ""
510
 
@@ -512,7 +512,7 @@ msgstr ""
512
  msgid "Error: Could not save the data."
513
  msgstr ""
514
 
515
- #: controllers/Audits.php:82
516
  msgid "Not a valid email address"
517
  msgstr ""
518
 
@@ -532,103 +532,103 @@ msgstr ""
532
  msgid "Saved! This task will be ignored in the future."
533
  msgstr ""
534
 
535
- #: controllers/FocusPages.php:159
536
  #, fuzzy
537
  #| msgid "Focus Page does not exists or was deleted from your website."
538
  msgid "Focus Page does not exist or was deleted from your website."
539
  msgstr "Focus Page does not exist or was deleted from your website."
540
 
541
- #: controllers/FocusPages.php:197
542
  msgid "Focus page is added. The audit may take a while so please be patient."
543
  msgstr ""
544
 
545
- #: controllers/FocusPages.php:200
546
  msgid "You reached the maximum number of focus pages for your account."
547
  msgstr ""
548
 
549
- #: controllers/FocusPages.php:203
550
  msgid "Error! Could not add the focus page."
551
  msgstr ""
552
 
553
- #: controllers/FocusPages.php:206 controllers/FocusPages.php:238
554
  msgid "Error! This focus page is not public."
555
  msgstr ""
556
 
557
- #: controllers/FocusPages.php:209 controllers/FocusPages.php:241
558
  msgid "Error! Could not find the focus page in your website."
559
  msgstr ""
560
 
561
- #: controllers/FocusPages.php:229
562
  msgid "Focus page sent for recheck. It may take a while so please be patient."
563
  msgstr ""
564
 
565
- #: controllers/FocusPages.php:232
566
  #, fuzzy
567
  #| msgid "Too many requests, please wait 5 minutes."
568
  msgid "You've made too many requests, please wait a few minutes."
569
  msgstr "You've made too many requests, please wait a few minutes. "
570
 
571
- #: controllers/FocusPages.php:235
572
  msgid "Error! Could not refresh the focus page."
573
  msgstr ""
574
 
575
- #: controllers/FocusPages.php:252
576
  msgid "The focus page is deleted"
577
  msgstr ""
578
 
579
- #: controllers/FocusPages.php:254 controllers/Ranking.php:151
580
  #: controllers/Research.php:180 controllers/Research.php:183
581
  #: controllers/Research.php:207 controllers/Research.php:326
582
- #: controllers/Research.php:351 controllers/Research.php:514
583
- #: controllers/Research.php:559 controllers/Research.php:583
584
  msgid "Invalid params!"
585
  msgstr ""
586
 
587
- #: controllers/Menu.php:83
588
  #, php-format
589
  msgid ""
590
  "An error occurred during activation. If this error persists, please contact "
591
  "us at: %s"
592
  msgstr ""
593
 
594
- #: controllers/Menu.php:120 models/Menu.php:123
595
  msgid "Dashboard"
596
  msgstr ""
597
 
598
- #: controllers/Menu.php:144 controllers/Menu.php:248
599
  #: view/Blocks/SLASearch.php:7
600
  msgid "Squirrly SEO"
601
  msgstr ""
602
 
603
- #: controllers/Menu.php:200
604
  msgid "SEO Snippet"
605
  msgstr ""
606
 
607
- #: controllers/Menu.php:209 controllers/Snippet.php:114
608
  msgid "Custom SEO"
609
  msgstr ""
610
 
611
- #: controllers/Menu.php:256
612
  msgid "Squirrly Onboarding"
613
  msgstr ""
614
 
615
- #: controllers/Menu.php:257
616
  msgid "Onboarding"
617
  msgstr ""
618
 
619
- #: controllers/Menu.php:276
620
  msgid "Squirrly Account Info"
621
  msgstr ""
622
 
623
- #: controllers/Menu.php:277
624
  msgid "Account Info"
625
  msgstr ""
626
 
627
- #: controllers/Menu.php:284
628
  msgid "Squirrly How To & Support"
629
  msgstr ""
630
 
631
- #: controllers/Menu.php:285
632
  msgid "Help & Support"
633
  msgstr ""
634
 
@@ -720,102 +720,106 @@ msgstr ""
720
  msgid "Invalid Label or Color!"
721
  msgstr ""
722
 
723
- #: controllers/Research.php:432 controllers/Research.php:453
724
- #: controllers/SeoSettings.php:524
725
  msgid "Great! The backup is restored."
726
  msgstr ""
727
 
728
- #: controllers/Research.php:456 controllers/Research.php:460
729
- #: controllers/SeoSettings.php:526 controllers/SeoSettings.php:529
730
- #: controllers/SeoSettings.php:573 controllers/SeoSettings.php:576
731
  msgid "Error! The backup is not valid."
732
  msgstr ""
733
 
734
- #: controllers/Research.php:463 controllers/SeoSettings.php:532
735
- #: controllers/SeoSettings.php:579
736
  #, fuzzy
737
  #| msgid "Error! You have to enter a previous saved backup file."
738
  msgid "Error! You have to enter a previously saved backup file."
739
  msgstr "Error! You have to enter a previously saved backup file."
740
 
741
- #: controllers/Research.php:484
742
  #, fuzzy
743
  #| msgid "Could not add the keyword to Serp Check. Please try again."
744
  msgid "Could not add the keyword to SERP Check. Please try again."
745
  msgstr "Could not add the keyword to SERP Check. Please try again."
746
 
747
- #: controllers/Research.php:486
748
  #, fuzzy
749
  #| msgid "The keyword is added to Serp Check."
750
  msgid "The keyword is added to SERP Check."
751
  msgstr "The keyword is added to SERP Check."
752
 
753
- #: controllers/Research.php:489
754
  msgid "Invalid parameters."
755
  msgstr ""
756
 
757
- #: controllers/SeoSettings.php:457
758
  msgid "Google Analytics account is disconnected."
759
  msgstr ""
760
 
761
- #: controllers/SeoSettings.php:459 controllers/SeoSettings.php:473
762
  msgid "Error! Could not disconnect the account."
763
  msgstr ""
764
 
765
- #: controllers/SeoSettings.php:471
766
  msgid "Google Search Console account is disconnected."
767
  msgstr ""
768
 
769
- #: controllers/SeoSettings.php:570
770
  msgid "Great! The SEO backup is restored."
771
  msgstr ""
772
 
773
- #: controllers/SeoSettings.php:587
774
  msgid "Settings imported successfuly!"
775
  msgstr ""
776
 
777
- #: controllers/SeoSettings.php:600 controllers/SeoSettings.php:638
778
  #, php-format
779
  msgid ""
780
  "%s SEO records were imported successfuly! You can now deactivate the %s "
781
  "plugin"
782
  msgstr ""
783
 
784
- #: controllers/SeoSettings.php:613
785
  msgid "All the Plugin settings were imported successfuly!"
786
  msgstr ""
787
 
788
- #: controllers/SeoSettings.php:615
789
  msgid "No settings found for this plugin/theme."
790
  msgstr ""
791
 
792
- #: controllers/SeoSettings.php:640
793
  #, php-format
794
  msgid ""
795
  "There are no SEO records with this plugin. You can now deactivate the %s "
796
  "plugin"
797
  msgstr ""
798
 
799
- #: controllers/SeoSettings.php:666
800
  msgid "Could not save the changes"
801
  msgstr ""
802
 
803
- #: controllers/SeoSettings.php:708 controllers/SeoSettings.php:745
804
  msgid "Could not add the post type"
805
  msgstr ""
806
 
807
- #: controllers/Snippet.php:66
808
  msgid "Squirrly SEO Snippet"
809
  msgstr ""
810
 
811
- #: controllers/Snippet.php:161
812
  msgid "Could not save the data"
813
  msgstr ""
814
 
815
- #: core/BlockFocusPages.php:20 models/FocusPages.php:102
816
  msgid "Audit in progress"
817
  msgstr ""
818
 
 
 
 
 
819
  #: core/BlockSupport.php:28
820
  msgid "Plugin Feedback"
821
  msgstr ""
@@ -955,8 +959,8 @@ msgid ""
955
  "you'll find out what you need to do to complete the task and turn it Green."
956
  msgstr ""
957
 
958
- #: models/Assistant.php:109 view/Blocks/Jorney.php:29
959
- #: view/Blocks/KRHistory.php:43 view/Research/History.php:55
960
  msgid "Do Keyword Research"
961
  msgstr ""
962
 
@@ -1064,7 +1068,7 @@ msgid ""
1064
  "sure you click on SAVE settings after you switch anything on or off."
1065
  msgstr ""
1066
 
1067
- #: models/Assistant.php:148 view/Blocks/Snippet.php:385
1068
  #: view/SeoSettings/Jsonld.php:28
1069
  #, fuzzy
1070
  #| msgid "Activate Json-LD"
@@ -1104,7 +1108,7 @@ msgstr ""
1104
  "Then, at URL-level you will be able to add custom JSON-LD if you're an "
1105
  "advanced user."
1106
 
1107
- #: models/Assistant.php:153 view/Blocks/Snippet.php:488
1108
  #: view/SeoSettings/Automation.php:323 view/SeoSettings/Social.php:52
1109
  msgid "Activate Open Graph"
1110
  msgstr ""
@@ -1119,7 +1123,7 @@ msgid ""
1119
  "your site."
1120
  msgstr ""
1121
 
1122
- #: models/Assistant.php:158 view/Blocks/Snippet.php:742
1123
  #: view/SeoSettings/Automation.php:350 view/SeoSettings/Social.php:275
1124
  msgid "Activate Twitter Card"
1125
  msgstr ""
@@ -1323,7 +1327,7 @@ msgid ""
1323
  "those tasks and turning elements to green you'll complete this task."
1324
  msgstr ""
1325
 
1326
- #: models/Assistant.php:277
1327
  #, fuzzy
1328
  #| msgid "You choosed to ignore this task. Click to activate it."
1329
  msgid "You chose to ignore this task. Click to activate it."
@@ -1333,15 +1337,15 @@ msgstr "You chose to ignore this task. Click to activate it."
1333
  msgid "METAs"
1334
  msgstr ""
1335
 
1336
- #: models/BulkSeo.php:18 view/Blocks/Snippet.php:98
1337
  msgid "Open Graph"
1338
  msgstr ""
1339
 
1340
- #: models/BulkSeo.php:19 view/Blocks/Snippet.php:101
1341
  msgid "Twitter Card"
1342
  msgstr ""
1343
 
1344
- #: models/BulkSeo.php:20 models/FocusPages.php:20 view/Blocks/Snippet.php:110
1345
  msgid "Visibility"
1346
  msgstr ""
1347
 
@@ -1469,7 +1473,7 @@ msgid ""
1469
  msgstr ""
1470
 
1471
  #: models/CheckSeo.php:56 models/CheckSeo.php:57
1472
- #: models/bulkseo/Visibility.php:104 view/Blocks/Snippet.php:1077
1473
  msgid "Discourage search engines from indexing this site"
1474
  msgstr ""
1475
 
@@ -1517,8 +1521,8 @@ msgstr ""
1517
  msgid "Change the Tagline with your Brand or the Store name from %s"
1518
  msgstr ""
1519
 
1520
- #: models/CheckSeo.php:69 models/Menu.php:229 models/Menu.php:263
1521
- #: models/Menu.php:283
1522
  msgid "Settings"
1523
  msgstr ""
1524
 
@@ -1542,11 +1546,11 @@ msgstr ""
1542
  msgid "Activate AMP tracking in %s Squirrly > SEO Settings > Tracking Tools%s "
1543
  msgstr ""
1544
 
1545
- #: models/CheckSeo.php:143
1546
  msgid "Could not verify the frontend."
1547
  msgstr ""
1548
 
1549
- #: models/CheckSeo.php:447
1550
  msgid "Just another WordPress site"
1551
  msgstr ""
1552
 
@@ -1557,7 +1561,7 @@ msgstr ""
1557
  #: models/focuspages/Keyword.php:82 models/focuspages/Snippet.php:124
1558
  #: models/focuspages/Strategy.php:88 view/Blocks/KRFound.php:15
1559
  #: view/Blocks/KRHistory.php:15 view/Ranking/Gscsync.php:29
1560
- #: view/Ranking/Rankings.php:145 view/Ranking/Rankings.php:174
1561
  #: view/Research/Briefcase.php:66 view/Research/Briefcase.php:106
1562
  #: view/Research/History.php:25 view/Research/HistoryDetails.php:7
1563
  #: view/Research/Research.php:158 view/Research/Suggested.php:24
@@ -1625,12 +1629,12 @@ msgid "CTR"
1625
  msgstr ""
1626
 
1627
  #: models/FocusPages.php:37 view/Ranking/Gscsync.php:31
1628
- #: view/Ranking/Rankings.php:188
1629
  msgid "Impressions"
1630
  msgstr ""
1631
 
1632
  #: models/FocusPages.php:38 view/Ranking/Gscsync.php:30
1633
- #: view/Ranking/Rankings.php:194
1634
  msgid "Clicks"
1635
  msgstr ""
1636
 
@@ -1663,7 +1667,7 @@ msgstr ""
1663
  msgid "The favicon has been updated."
1664
  msgstr ""
1665
 
1666
- #: models/Menu.php:123 models/Menu.php:361
1667
  msgid "First Step"
1668
  msgstr ""
1669
 
@@ -1695,7 +1699,7 @@ msgstr ""
1695
  msgid " SEO Settings"
1696
  msgstr ""
1697
 
1698
- #: models/Menu.php:155 models/Menu.php:237 view/Blocks/FocusPages.php:6
1699
  #: view/FocusPages/Pagelist.php:19
1700
  msgid "Focus Pages"
1701
  msgstr ""
@@ -1712,7 +1716,7 @@ msgstr ""
1712
  msgid " SEO Audit"
1713
  msgstr ""
1714
 
1715
- #: models/Menu.php:171 models/Menu.php:271
1716
  msgid "Rankings"
1717
  msgstr ""
1718
 
@@ -1720,215 +1724,217 @@ msgstr ""
1720
  msgid " Rankings"
1721
  msgstr ""
1722
 
1723
- #: models/Menu.php:191
1724
  msgid "Find Keywords"
1725
  msgstr ""
1726
 
1727
- #: models/Menu.php:192
1728
  msgid "do a keyword research"
1729
  msgstr ""
1730
 
1731
- #: models/Menu.php:197 view/Research/Briefcase.php:14
1732
  msgid "Briefcase"
1733
  msgstr ""
1734
 
1735
- #: models/Menu.php:198
1736
  msgid "save the best Keywords"
1737
  msgstr ""
1738
 
1739
- #: models/Menu.php:203 view/Research/Briefcase.php:24
1740
  msgid "Labels"
1741
  msgstr ""
1742
 
1743
- #: models/Menu.php:204
1744
  msgid "group keywords"
1745
  msgstr ""
1746
 
1747
- #: models/Menu.php:209 view/Research/Suggested.php:13
1748
  msgid "Suggested"
1749
  msgstr ""
1750
 
1751
- #: models/Menu.php:210
1752
  msgid "better keywords found"
1753
  msgstr ""
1754
 
1755
- #: models/Menu.php:215 view/Research/History.php:14
1756
  msgid "History"
1757
  msgstr ""
1758
 
1759
- #: models/Menu.php:216
1760
  msgid "keyword research history"
1761
  msgstr ""
1762
 
1763
- #: models/Menu.php:223
1764
  msgid "Optimize Posts"
1765
  msgstr ""
1766
 
1767
- #: models/Menu.php:224
1768
  #, fuzzy
1769
  #| msgid "use live assistant"
1770
  msgid "use the Live Assistant"
1771
  msgstr "use the Live Assistant"
1772
 
1773
- #: models/Menu.php:230
1774
  msgid "live assistant setup"
1775
  msgstr ""
1776
 
1777
- #: models/Menu.php:238
1778
  msgid "all my focus pages"
1779
  msgstr ""
1780
 
1781
- #: models/Menu.php:249
1782
  msgid "Add New Page"
1783
  msgstr ""
1784
 
1785
- #: models/Menu.php:250
1786
  msgid "add page in focus pages"
1787
  msgstr ""
1788
 
1789
- #: models/Menu.php:257 view/Blocks/Toolbar.php:25
1790
  msgid "Overview"
1791
  msgstr ""
1792
 
1793
- #: models/Menu.php:258
1794
  #, fuzzy
1795
  #| msgid "See all the seo audits"
1796
  msgid "See all the SEO audits"
1797
  msgstr "See all the SEO audits"
1798
 
1799
- #: models/Menu.php:264
1800
  msgid "Audit settings"
1801
  msgstr ""
1802
 
1803
- #: models/Menu.php:272
1804
  msgid "See Google ranking"
1805
  msgstr ""
1806
 
1807
- #: models/Menu.php:277
1808
  msgid "Add Keywords"
1809
  msgstr ""
1810
 
1811
- #: models/Menu.php:278
1812
  msgid "Add briefcase keywords"
1813
  msgstr ""
1814
 
1815
- #: models/Menu.php:284
1816
  msgid "Ranking settings"
1817
  msgstr ""
1818
 
1819
- #: models/Menu.php:293 view/SeoSettings/Bulkseo.php:24
1820
  msgid "Bulk SEO"
1821
  msgstr ""
1822
 
1823
- #: models/Menu.php:294
1824
  msgid "optimize all pages"
1825
  msgstr ""
1826
 
1827
- #: models/Menu.php:299 view/SeoSettings/Metas.php:24
1828
  msgid "SEO Metas"
1829
  msgstr ""
1830
 
1831
- #: models/Menu.php:300
1832
  msgid "required on-page metas"
1833
  msgstr ""
1834
 
1835
- #: models/Menu.php:305
1836
- msgid "Json LD"
1837
- msgstr "JSON LD"
 
 
1838
 
1839
- #: models/Menu.php:306
1840
  msgid "google structured data"
1841
  msgstr ""
1842
 
1843
- #: models/Menu.php:311 view/SeoSettings/Social.php:23
1844
  msgid "Social Media"
1845
  msgstr ""
1846
 
1847
- #: models/Menu.php:312
1848
  msgid "social share options"
1849
  msgstr ""
1850
 
1851
- #: models/Menu.php:317
1852
  msgid "Automation"
1853
  msgstr ""
1854
 
1855
- #: models/Menu.php:318
1856
  msgid "patterns & automation"
1857
  msgstr ""
1858
 
1859
- #: models/Menu.php:323 view/SeoSettings/Tracking.php:23
1860
  msgid "Tracking Tools"
1861
  msgstr ""
1862
 
1863
- #: models/Menu.php:324
1864
  msgid "google analytics, pixel, etc."
1865
  msgstr ""
1866
 
1867
- #: models/Menu.php:329
1868
  msgid "Connection"
1869
  msgstr ""
1870
 
1871
- #: models/Menu.php:330
1872
  msgid "webmaster tools"
1873
  msgstr ""
1874
 
1875
- #: models/Menu.php:335 view/SeoSettings/Sitemap.php:24
1876
  msgid "Sitemap XML"
1877
  msgstr ""
1878
 
1879
- #: models/Menu.php:336
1880
  msgid "setup the sitemap"
1881
  msgstr ""
1882
 
1883
- #: models/Menu.php:341
1884
  msgid "Robots.txt"
1885
  msgstr ""
1886
 
1887
- #: models/Menu.php:342
1888
  msgid "search engine filters"
1889
  msgstr ""
1890
 
1891
- #: models/Menu.php:347
1892
  msgid "Favicon"
1893
  msgstr ""
1894
 
1895
- #: models/Menu.php:348
1896
  msgid "add website icon"
1897
  msgstr ""
1898
 
1899
- #: models/Menu.php:353
1900
  msgid "Import/Export"
1901
  msgstr ""
1902
 
1903
- #: models/Menu.php:354
1904
  msgid "import & export SEO"
1905
  msgstr ""
1906
 
1907
- #: models/Menu.php:362
1908
  msgid "all the SEO features"
1909
  msgstr ""
1910
 
1911
- #: models/Menu.php:367
1912
  msgid "14 days jorney"
1913
  msgstr ""
1914
 
1915
- #: models/Menu.php:368
1916
  msgid "sign up for better ranking"
1917
  msgstr ""
1918
 
1919
- #: models/Menu.php:373 view/Onboarding/Step3.php:51
1920
  msgid "Import"
1921
  msgstr ""
1922
 
1923
- #: models/Menu.php:374
1924
  msgid "import settings and SEO"
1925
  msgstr ""
1926
 
1927
- #: models/Menu.php:379
1928
  msgid "Final Step"
1929
  msgstr ""
1930
 
1931
- #: models/Menu.php:380
1932
  msgid "start using Squirrly SEO"
1933
  msgstr ""
1934
 
@@ -2010,7 +2016,7 @@ msgstr ""
2010
  msgid "Can't get snippet data"
2011
  msgstr ""
2012
 
2013
- #: models/PostsList.php:55 models/PostsList.php:80 view/Blocks/Snippet.php:143
2014
  msgid "Edit Snippet"
2015
  msgstr ""
2016
 
@@ -2026,7 +2032,7 @@ msgstr ""
2026
  msgid "You don't have enough pemission to edit this article"
2027
  msgstr ""
2028
 
2029
- #: models/Snippet.php:117 view/Blocks/Snippet.php:1227
2030
  msgid "Couldn't find the page"
2031
  msgstr ""
2032
 
@@ -2042,20 +2048,16 @@ msgstr ""
2042
  msgid "Not enough data to process this task"
2043
  msgstr ""
2044
 
2045
- #: models/abstract/Assistant.php:164 view/Blocks/Snippet.php:319
2046
  msgid "Current"
2047
  msgstr ""
2048
 
2049
- #: models/abstract/Assistant.php:178
2050
- msgid "You choosed to ignore this task. Click to activate it."
2051
- msgstr "You chose to ignore this task. Click to activate it."
2052
-
2053
  #: models/bulkseo/Metas.php:56
2054
  msgid "Title not empty"
2055
  msgstr ""
2056
 
2057
- #: models/bulkseo/Metas.php:57 view/Blocks/Snippet.php:197
2058
- #: view/Blocks/Snippet.php:595 view/Blocks/Snippet.php:850
2059
  msgid "Current Title"
2060
  msgstr ""
2061
 
@@ -2126,8 +2128,8 @@ msgstr ""
2126
  msgid "Description not empty"
2127
  msgstr ""
2128
 
2129
- #: models/bulkseo/Metas.php:75 view/Blocks/Snippet.php:249
2130
- #: view/Blocks/Snippet.php:639 view/Blocks/Snippet.php:894
2131
  msgid "Current Description"
2132
  msgstr ""
2133
 
@@ -2521,7 +2523,7 @@ msgid ""
2521
  "visibility settings."
2522
  msgstr ""
2523
 
2524
- #: models/bulkseo/Visibility.php:31 view/Blocks/Snippet.php:1146
2525
  msgid "Send Authority to this page"
2526
  msgstr ""
2527
 
@@ -2825,7 +2827,7 @@ msgstr ""
2825
  #: models/focuspages/Ctr.php:71 models/focuspages/Image.php:81
2826
  #: models/focuspages/Impressions.php:60 models/focuspages/Impressions.php:71
2827
  #: models/focuspages/Keyword.php:83 models/focuspages/Keyword.php:95
2828
- #: models/focuspages/Strategy.php:99 view/Research/Briefcase.php:239
2829
  msgid "Do a research"
2830
  msgstr ""
2831
 
@@ -3065,7 +3067,7 @@ msgid ""
3065
  "Search Console API to send Google the request on your behalf."
3066
  msgstr ""
3067
 
3068
- #: models/focuspages/Indexability.php:67 view/Blocks/Snippet.php:308
3069
  msgid "Canonical link"
3070
  msgstr ""
3071
 
@@ -3337,10 +3339,10 @@ msgid "Nofollow on external links"
3337
  msgstr ""
3338
 
3339
  #: models/focuspages/Snippet.php:69 models/focuspages/Snippet.php:180
3340
- #: models/focuspages/Snippet.php:202 view/Blocks/Snippet.php:181
3341
- #: view/Blocks/Snippet.php:579 view/Blocks/Snippet.php:834
3342
  #: view/FocusPages/Addpage.php:50 view/SeoSettings/Automation.php:86
3343
- #: view/SeoSettings/Bulkseo.php:139 view/SeoSettings/Metas.php:159
3344
  msgid "Title"
3345
  msgstr ""
3346
 
@@ -3358,8 +3360,8 @@ msgid ""
3358
  msgstr ""
3359
 
3360
  #: models/focuspages/Snippet.php:75 models/focuspages/Snippet.php:181
3361
- #: models/focuspages/Snippet.php:203 view/Blocks/Snippet.php:622
3362
- #: view/Blocks/Snippet.php:877 view/SeoSettings/Automation.php:95
3363
  #: view/SeoSettings/Metas.php:168
3364
  msgid "Description"
3365
  msgstr ""
@@ -3848,7 +3850,7 @@ msgstr ""
3848
 
3849
  #: view/Audits/Audits.php:115 view/Audits/Audits.php:157
3850
  #: view/Blocks/Audits.php:21 view/Blocks/KRHistory.php:17
3851
- #: view/Ranking/Rankings.php:229 view/Research/History.php:27
3852
  msgid "Date"
3853
  msgstr ""
3854
 
@@ -3970,39 +3972,51 @@ msgstr ""
3970
  msgid "Permalink"
3971
  msgstr ""
3972
 
3973
- #: view/Blocks/FocusPages.php:17 view/FocusPages/FocusPageRow.php:36
3974
  msgid "Last audited"
3975
  msgstr ""
3976
 
3977
- #: view/Blocks/FocusPages.php:52
3978
  msgid "Check Focus Page"
3979
  msgstr ""
3980
 
3981
- #: view/Blocks/FocusPages.php:64 view/FocusPages/Pagelist.php:111
3982
  msgid "To get started with managing the focus pages"
3983
  msgstr ""
3984
 
3985
- #: view/Blocks/FocusPages.php:68 view/FocusPages/Pagelist.php:115
3986
  msgid "Add new page"
3987
  msgstr ""
3988
 
3989
- #: view/Blocks/FocusPages.php:74 view/FocusPages/Pagelist.php:121
3990
  msgid "Then set a page as focus"
3991
  msgstr ""
3992
 
3993
- #: view/Blocks/Jorney.php:9
 
 
 
 
3994
  msgid "Your 14 Days Journey To Better Ranking"
3995
  msgstr ""
3996
 
3997
- #: view/Blocks/Jorney.php:16 view/Blocks/Jorney.php:22
3998
  msgid "Day"
3999
  msgstr ""
4000
 
4001
- #: view/Blocks/Jorney.php:22
 
 
 
 
 
 
 
 
4002
  msgid "Open the SEO recipe for today"
4003
  msgstr ""
4004
 
4005
- #: view/Blocks/Jorney.php:26 view/FocusPages/Addpage.php:19
4006
  msgid "Add a page in Focus Pages"
4007
  msgstr ""
4008
 
@@ -4011,7 +4025,7 @@ msgid "Suggested Keywords"
4011
  msgstr ""
4012
 
4013
  #: view/Blocks/KRFound.php:16 view/Blocks/KRHistory.php:16
4014
- #: view/Ranking/Rankings.php:221 view/Research/Briefcase.php:114
4015
  #: view/Research/History.php:26 view/Research/Research.php:159
4016
  #: view/Research/Suggested.php:25
4017
  msgid "Country"
@@ -4024,7 +4038,7 @@ msgid "Co"
4024
  msgstr ""
4025
 
4026
  #: view/Blocks/KRFound.php:18 view/Blocks/KRFound.php:19
4027
- #: view/Blocks/KRFound.php:59 view/Research/Briefcase.php:119
4028
  #: view/Research/HistoryDetails.php:16 view/Research/HistoryDetails.php:18
4029
  #: view/Research/Research.php:161 view/Research/Research.php:162
4030
  #: view/Research/Suggested.php:27 view/Research/Suggested.php:28
@@ -4032,7 +4046,7 @@ msgstr ""
4032
  msgid "Competition"
4033
  msgstr ""
4034
 
4035
- #: view/Blocks/KRFound.php:22 view/Blocks/KRFound.php:64
4036
  #: view/Research/HistoryDetails.php:12 view/Research/Research.php:165
4037
  #: view/Research/Suggested.php:31 view/Research/Suggested.php:82
4038
  msgid "SEO Search Volume"
@@ -4043,7 +4057,7 @@ msgstr ""
4043
  msgid "SV"
4044
  msgstr ""
4045
 
4046
- #: view/Blocks/KRFound.php:26 view/Blocks/KRFound.php:69
4047
  #: view/Research/Briefcase.php:131 view/Research/HistoryDetails.php:8
4048
  #: view/Research/Research.php:169 view/Research/Suggested.php:35
4049
  #: view/Research/Suggested.php:87
@@ -4056,37 +4070,37 @@ msgid "Discussion"
4056
  msgstr ""
4057
 
4058
  #: view/Blocks/KRFound.php:30 view/Blocks/KRFound.php:31
4059
- #: view/Blocks/KRFound.php:74 view/Research/Briefcase.php:137
4060
  #: view/Research/HistoryDetails.php:20 view/Research/Research.php:173
4061
  #: view/Research/Suggested.php:39
4062
  msgid "Trending"
4063
  msgstr ""
4064
 
4065
- #: view/Blocks/KRFound.php:59 view/Blocks/KRFound.php:64
4066
- #: view/Blocks/KRFound.php:69 view/Blocks/KRFound.php:74
4067
  #: view/Research/Briefcase.php:120 view/Research/Briefcase.php:126
4068
  #: view/Research/Briefcase.php:132 view/Research/Suggested.php:77
4069
  #: view/Research/Suggested.php:82 view/Research/Suggested.php:87
4070
  msgid "-"
4071
  msgstr ""
4072
 
4073
- #: view/Blocks/KRFound.php:91 view/Research/Suggested.php:149
4074
  #, fuzzy
4075
  #| msgid "We check once a week all the keywords from your briefcase"
4076
  msgid "Once a week, Squirrly checks all the keywords from your briefcase."
4077
  msgstr "Once a week, Squirrly checks all the keywords from your briefcase."
4078
 
4079
- #: view/Blocks/KRFound.php:92 view/Research/Suggested.php:150
4080
  #, fuzzy
4081
  #| msgid "If we find better keywords, they will be listed here"
4082
  msgid "If it finds better keywords, they will be listed here"
4083
  msgstr "If it finds better keywords, they will be listed here"
4084
 
4085
- #: view/Blocks/KRFound.php:93 view/Research/Suggested.php:151
4086
  msgid "Until then, add keywords in Briefcase"
4087
  msgstr ""
4088
 
4089
- #: view/Blocks/KRFound.php:97 view/Blocks/SLASearch.php:22
4090
  #: view/Ranking/Gscsync.php:103 view/Research/Suggested.php:155
4091
  msgid "Go to Briefcase"
4092
  msgstr ""
@@ -4099,7 +4113,7 @@ msgstr ""
4099
  msgid "See Research History"
4100
  msgstr ""
4101
 
4102
- #: view/Blocks/KRHistory.php:39 view/Research/History.php:51
4103
  msgid "See your research results and compare them over time"
4104
  msgstr ""
4105
 
@@ -4178,15 +4192,15 @@ msgstr ""
4178
  msgid "keywords found"
4179
  msgstr ""
4180
 
4181
- #: view/Blocks/Ranks.php:121 view/Ranking/Rankings.php:345
4182
  msgid "To see how your website is ranking on Google"
4183
  msgstr ""
4184
 
4185
- #: view/Blocks/Ranks.php:125 view/Ranking/Rankings.php:349
4186
  msgid "Add keywords in Briefcase"
4187
  msgstr ""
4188
 
4189
- #: view/Blocks/Ranks.php:131 view/Ranking/Rankings.php:355
4190
  msgid "Then send keywords to Rank Checker"
4191
  msgstr ""
4192
 
@@ -4316,153 +4330,153 @@ msgstr ""
4316
  msgid "Split Window"
4317
  msgstr ""
4318
 
4319
- #: view/Blocks/Snippet.php:90
4320
  msgid "Meta Tags"
4321
  msgstr ""
4322
 
4323
- #: view/Blocks/Snippet.php:94
4324
  msgid "JSON-LD"
4325
  msgstr ""
4326
 
4327
- #: view/Blocks/Snippet.php:105
4328
  msgid "Tracking"
4329
  msgstr ""
4330
 
4331
- #: view/Blocks/Snippet.php:121 view/Blocks/Snippet.php:480
4332
- #: view/Blocks/Snippet.php:734
4333
  #, php-format
4334
  msgid ""
4335
  "Post Type (%s) was excluded from %sSquirrly > SEO Settings%s. Squirrly SEO "
4336
  "will not load for this post type on the frontend"
4337
  msgstr ""
4338
 
4339
- #: view/Blocks/Snippet.php:129 view/SeoSettings/Automation.php:132
4340
  #: view/SeoSettings/Automation.php:159 view/SeoSettings/Automation.php:221
4341
  msgid "Activate Metas"
4342
  msgstr ""
4343
 
4344
- #: view/Blocks/Snippet.php:138
4345
  msgid "How this page will appear on Search Engines"