SEO SQUIRRLY™ - Version 9.1.10

Version Description

  • 04/19/2019 =
  • Update - Ranking details in Squirrly SEO Rankings
  • Update - Messages in Focus Pages when the page is not optimized for a keyword
  • Update - Added the 14 Days Journey in case the user didn't start it
  • Update - Facebook reactions count for Focus Pages and Audit
  • Update - Focus Pages floating header if more Focus Pages were added
  • Fix - Show the Live Assistant message when the user is not logged in to Squirrly
  • Fix - Layout fix for Bulk Seo and Show All Button
  • Fix - Show the Squirrly Snippet in Tags and custom tags
  • Fix - Changed the description height in Squirrly SEO Snippet
  • Fix - Show Squirrly Menu for Editors and Authors
  • Fix - Update caps and roles for author and editors in Research section
  • Fix - Don't show send keyword to Rankings if the keyword is already sent
  • Fix - Show impressions column in the GSG Sync page
  • Fix - Import keywords in Squirrly Briefcase from old Squirrly Briefcase backups
  • Fix - The Keyword Research algorithm
Download this release

Release Info

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

Code changes from version 8.4.07 to 9.1.10

Files changed (79) hide show
  1. classes/{Action.php → ActionController.php} +33 -98
  2. classes/BlockController.php +23 -39
  3. classes/DisplayController.php +52 -35
  4. classes/Error.php +55 -31
  5. classes/FrontController.php +29 -51
  6. classes/HookController.php +3 -1
  7. classes/ObjController.php +82 -119
  8. classes/Ranking.php +0 -336
  9. classes/RemoteController.php +1021 -0
  10. classes/Tools.php +0 -1666
  11. classes/helpers/DevKit.php +80 -0
  12. classes/helpers/Sanitize.php +430 -0
  13. classes/helpers/Tools.php +1020 -0
  14. config.json +196 -0
  15. config/config.php +19 -40
  16. config/paths.php +21 -14
  17. controllers/Account.php +11 -0
  18. controllers/Api.php +0 -76
  19. controllers/Assistant.php +137 -0
  20. controllers/Audits.php +89 -0
  21. controllers/CheckSeo.php +114 -0
  22. controllers/Cron.php +22 -12
  23. controllers/Dashboard.php +33 -0
  24. controllers/Feed.php +0 -83
  25. controllers/FocusPages.php +261 -0
  26. controllers/FrontMenu.php +0 -104
  27. controllers/Frontend.php +70 -47
  28. controllers/Help.php +12 -0
  29. controllers/Menu.php +198 -420
  30. controllers/Onboarding.php +62 -0
  31. controllers/Patterns.php +144 -0
  32. controllers/Post.php +148 -74
  33. controllers/PostsList.php +100 -281
  34. controllers/Ranking.php +192 -0
  35. controllers/Research.php +588 -0
  36. controllers/SeoSettings.php +811 -0
  37. controllers/SerpChecker.php +0 -414
  38. controllers/Sitemaps.php +30 -20
  39. controllers/Snippet.php +247 -0
  40. core/BlockAccount.php +0 -12
  41. core/BlockAffiliate.php +0 -47
  42. core/BlockAnalytics.php +0 -9
  43. core/BlockAssistant.php +8 -0
  44. core/BlockAudit.php +0 -19
  45. core/BlockAudits.php +43 -0
  46. core/BlockBriefcaseKeywords.php +0 -329
  47. core/BlockCopyright.php +0 -11
  48. core/BlockCustomerService.php +0 -11
  49. core/BlockDashboard.php +0 -12
  50. core/BlockFocusPages.php +63 -0
  51. core/BlockHelp.php +0 -8
  52. core/BlockImport.php +0 -69
  53. core/BlockJorney.php +38 -0
  54. core/BlockKRFound.php +15 -0
  55. core/BlockKRHistory.php +15 -0
  56. core/BlockKeywordResearch.php +0 -12
  57. core/BlockLiveAssistant.php +0 -11
  58. core/BlockPatterns.php +0 -61
  59. core/BlockPostsAnalytics.php +0 -68
  60. core/BlockRanks.php +62 -0
  61. core/BlockSEOIssues.php +13 -0
  62. core/BlockSerpKeywords.php +0 -137
  63. core/BlockSettings.php +0 -92
  64. core/BlockSettingsSeo.php +0 -585
  65. core/BlockStats.php +20 -0
  66. core/BlockSupport.php +11 -47
  67. core/BlockToolbar.php +8 -1
  68. core/Blocklogin.php +76 -88
  69. core/Blockresearch.php +0 -8
  70. core/Blocksearch.php +0 -41
  71. core/Blockseo.php +0 -20
  72. core/Loading.php +0 -102
  73. core/config.json +0 -225
  74. debug/index.php +230 -0
  75. demo.json +8 -0
  76. languages/squirrly-seo-cs_CZ.mo +0 -0
  77. languages/squirrly-seo-cs_CZ.po +5013 -2205
  78. languages/squirrly-seo-de_DE.mo +0 -0
  79. languages/squirrly-seo-de_DE.po +3992 -940
classes/{Action.php → ActionController.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Set the ajax action and call for wordpress
5
  */
6
- class SQ_Classes_Action extends SQ_Classes_FrontController {
7
 
8
  /** @var array with all form and ajax actions */
9
  var $actions = array();
@@ -11,22 +11,15 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
11
  /** @var array from core config */
12
  private static $config;
13
 
14
-
15
- public function _isAjax() {
16
- return (defined('DOING_AJAX') && DOING_AJAX);
17
- }
18
-
19
  /**
20
  * The hookAjax is loaded as custom hook in hookController class
21
  *
22
  * @return void
23
  */
24
  public function hookInit() {
25
-
26
  /* Only if ajax */
27
- if ($this->_isAjax()) {
28
- $this->actions = array();
29
- $this->getActions(((isset($_GET['action']) ? $_GET['action'] : (isset($_POST['action']) ? $_POST['action'] : ''))));
30
  }
31
  }
32
 
@@ -37,9 +30,8 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
37
  */
38
  public function hookMenu() {
39
  /* Only if post */
40
- if (!$this->_isAjax()) {
41
- $this->actions = array();
42
- $this->getActions(((isset($_GET['action']) ? $_GET['action'] : (isset($_POST['action']) ? $_POST['action'] : ''))));
43
  }
44
  }
45
 
@@ -50,7 +42,6 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
50
  * @return void
51
  */
52
  public function hookHead() {
53
-
54
  echo '<script type="text/javascript" src="https://www.google.com/jsapi"></script>
55
  <script type="text/javascript">
56
  var sqQuery = {
@@ -64,7 +55,7 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
64
  }
65
 
66
  public function hookFronthead() {
67
- if (is_user_logged_in()) {
68
  echo '<script type="text/javascript">
69
  var sqQuery = {
70
  "adminurl": "' . admin_url() . '",
@@ -78,14 +69,21 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
78
  /**
79
  * Get all actions from config.json in core directory and add them in the WP
80
  *
81
- * @return void
82
  */
83
- public function getActions($cur_action) {
 
 
 
 
 
 
 
 
84
  //Let only the logged users to access the actions
85
- if (is_admin() || is_network_admin()) {
86
  /* if config allready in cache */
87
  if (!isset(self::$config)) {
88
- $config_file = _SQ_CORE_DIR_ . 'config.json';
89
  if (!file_exists($config_file)) {
90
  return;
91
  }
@@ -99,21 +97,20 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
99
  if (isset($block['active']) && $block['active'] == 1) {
100
  /* if there is a single action */
101
  if (isset($block['actions']['action']))
102
- if (isset($block['admin']) &&
103
- (($block['admin'] == 1 && is_user_logged_in()) ||
104
- $block['admin'] == 0)
105
- ) {
106
  /* if there are more actions for the current block */
107
  if (!is_array($block['actions']['action'])) {
108
  /* add the action in the actions array */
109
- if ($block['actions']['action'] == $cur_action)
110
  $this->actions[] = array('class' => $block['name']);
 
111
  } else {
112
  /* if there are more actions for the current block */
113
  foreach ($block['actions']['action'] as $action) {
114
  /* add the actions in the actions array */
115
- if ($action == $cur_action)
116
  $this->actions[] = array('class' => $block['name']);
 
117
  }
118
  }
119
  }
@@ -121,82 +118,20 @@ class SQ_Classes_Action extends SQ_Classes_FrontController {
121
  }
122
  }
123
 
124
-
125
- /* add the actions in WP */
126
- foreach ($this->actions as $actions) {
127
- SQ_Classes_ObjController::getClass($actions['class'])->action();
128
- }
129
- }
130
-
131
- }
132
-
133
- /**
134
- * Call the Squirrly Cloud Server
135
- * @param string $module
136
- * @param array $args
137
- * @return json | string
138
- */
139
- public static function apiCall($module, $args = array(), $timeout = 10) {
140
- $parameters = "";
141
- $scheme = "http:";
142
-
143
- if (SQ_Classes_Tools::getOption('sq_api') == '' && $module <> 'sq/login' && $module <> 'sq/register') {
144
- return false;
145
- }
146
-
147
- $extra = array(
148
- 'user_url' => home_url(),
149
- 'lang' => (defined('WPLANG') ? WPLANG : 'en_US'),
150
- 'versq' => SQ_VERSION_ID,
151
- 'verwp' => WP_VERSION_ID,
152
- 'verphp' => PHP_VERSION_ID,
153
- 'token' => SQ_Classes_Tools::getOption('sq_api'));
154
-
155
-
156
- if (is_array($args)) {
157
- $args = array_merge($args, $extra);
158
- } else {
159
- $args = $extra;
160
- }
161
-
162
- foreach ($args as $key => $value) {
163
- if ($value <> '') {
164
- $parameters .= ($parameters == "" ? "" : "&") . $key . "=" . urlencode($value);
165
- }
166
- }
167
-
168
- /* If the call is for login on register then use base64 is exists */
169
- if ($module == 'sq/login' || $module == 'sq/register') {
170
- if (function_exists('base64_encode')) {
171
- $parameters = 'q=' . base64_encode($parameters);
172
  }
173
  }
174
 
175
- if ($module <> "") {
176
- $module .= "/";
177
- }
178
- //call it with http to prevent curl issues with ssls
179
- $url = self::cleanUrl($scheme . _SQ_API_URL_ . $module . "?" . $parameters);
180
- try {
181
- //echo $url;exit();
182
- return SQ_Classes_Tools::sq_remote_get($url, array(), array('timeout' => $timeout));
183
- } catch (Exception $e) {
184
- return '';
185
- }
186
-
187
- }
188
-
189
- /**
190
- * Clear the url before the call
191
- * @param string $url
192
- * @return string
193
- */
194
- private static function cleanUrl($url) {
195
- return str_replace(array(' '), array('+'), $url);
196
- }
197
-
198
- public static function apiSaveSettings() {
199
- self::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
200
  }
201
 
202
  }
3
  /**
4
  * Set the ajax action and call for wordpress
5
  */
6
+ class SQ_Classes_ActionController extends SQ_Classes_FrontController {
7
 
8
  /** @var array with all form and ajax actions */
9
  var $actions = array();
11
  /** @var array from core config */
12
  private static $config;
13
 
 
 
 
 
 
14
  /**
15
  * The hookAjax is loaded as custom hook in hookController class
16
  *
17
  * @return void
18
  */
19
  public function hookInit() {
 
20
  /* Only if ajax */
21
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
22
+ $this->getActions();
 
23
  }
24
  }
25
 
30
  */
31
  public function hookMenu() {
32
  /* Only if post */
33
+ if (!SQ_Classes_Helpers_Tools::isAjax()) {
34
+ $this->getActions();
 
35
  }
36
  }
37
 
42
  * @return void
43
  */
44
  public function hookHead() {
 
45
  echo '<script type="text/javascript" src="https://www.google.com/jsapi"></script>
46
  <script type="text/javascript">
47
  var sqQuery = {
55
  }
56
 
57
  public function hookFronthead() {
58
+ if (SQ_Classes_Helpers_Tools::isFrontAdmin()) {
59
  echo '<script type="text/javascript">
60
  var sqQuery = {
61
  "adminurl": "' . admin_url() . '",
69
  /**
70
  * Get all actions from config.json in core directory and add them in the WP
71
  *
 
72
  */
73
+ public function getActions() {
74
+ $this->actions = array();
75
+ $cur_action = SQ_Classes_Helpers_Tools::getValue('action', false);
76
+ $sq_nonce = SQ_Classes_Helpers_Tools::getValue('sq_nonce', false);
77
+
78
+ if (!function_exists('is_user_logged_in')) {
79
+ return;
80
+ }
81
+
82
  //Let only the logged users to access the actions
83
+ if ($cur_action <> '' && $sq_nonce <> '' && is_admin()) {
84
  /* if config allready in cache */
85
  if (!isset(self::$config)) {
86
+ $config_file = _SQ_ROOT_DIR_ . 'config.json';
87
  if (!file_exists($config_file)) {
88
  return;
89
  }
97
  if (isset($block['active']) && $block['active'] == 1) {
98
  /* if there is a single action */
99
  if (isset($block['actions']['action']))
100
+ if (isset($block['admin']) && (($block['admin'] == 1 && is_user_logged_in()) || $block['admin'] == 0)) {
 
 
 
101
  /* if there are more actions for the current block */
102
  if (!is_array($block['actions']['action'])) {
103
  /* add the action in the actions array */
104
+ if ($block['actions']['action'] == $cur_action) {
105
  $this->actions[] = array('class' => $block['name']);
106
+ }
107
  } else {
108
  /* if there are more actions for the current block */
109
  foreach ($block['actions']['action'] as $action) {
110
  /* add the actions in the actions array */
111
+ if ($action == $cur_action) {
112
  $this->actions[] = array('class' => $block['name']);
113
+ }
114
  }
115
  }
116
  }
118
  }
119
  }
120
 
121
+ if (!empty($this->actions)) {
122
+ /* add the actions in WP */
123
+ foreach ($this->actions as $actions) {
124
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
125
+ check_ajax_referer(_SQ_NONCE_ID_, 'sq_nonce');
126
+ add_action('wp_ajax_' . $cur_action, array(SQ_Classes_ObjController::getClass($actions['class']), 'action'));
127
+ } else {
128
+ check_admin_referer($cur_action, 'sq_nonce');
129
+ SQ_Classes_ObjController::getClass($actions['class'])->action();
130
+ }
131
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  }
133
  }
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  }
136
 
137
  }
classes/BlockController.php CHANGED
@@ -15,7 +15,7 @@ class SQ_Classes_BlockController {
15
  /** @var object of the view class */
16
  protected $view;
17
 
18
- /** @var name of the class */
19
  private $name;
20
 
21
  public function __construct() {
@@ -23,69 +23,63 @@ class SQ_Classes_BlockController {
23
  $this->name = get_class($this);
24
 
25
  /* create the model and view instances */
26
- $this->model = SQ_Classes_ObjController::getClass(str_replace('Core', 'Models', $this->name));
 
 
 
27
  }
28
 
29
  /**
30
  * load sequence of classes
 
31
  *
32
  * @return mixed
33
  */
34
  public function init() {
35
  /* check if there is a hook defined in the block class */
36
  SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setBlockHooks($this);
 
 
37
 
38
  if ($this->flush) {
39
- $this->hookHead();
40
- echo $this->getView();
 
41
  } else {
42
- return $this->getView();
43
  }
44
- }
45
 
 
 
46
 
47
  /**
48
  * Get the block view
49
  *
50
- * @param null $view
51
  * @return mixed
52
  */
53
- public function getView($view = null) {
54
- if (!isset($view)) {
55
- if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
56
- $view = $class['name'];
57
- }
58
- }
59
-
60
- if (isset($view)) {
61
- $this->view = SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController');
62
- return $this->view->getView($view, $this);
63
- }
64
-
65
- return '';
66
  }
67
 
68
-
69
  /**
70
  * Called as menu callback to show the block
71
  *
72
  */
73
  public function show() {
74
  $this->flush = true;
 
75
  echo $this->init();
76
  }
77
 
78
-
79
  public function preloadSettings() {
80
- if(SQ_Classes_Tools::getOption('sq_api') <> '') {
81
  echo '<script type="text/javascript">
82
  var __blog_url = "' . get_bloginfo('url') . '";
83
- var __token = "' . SQ_Classes_Tools::getOption('sq_api') . '";
84
  var __language = "' . get_bloginfo('language') . '";
85
  var __api_url = "' . _SQ_API_URL_ . '";
86
- jQuery(document).ready(function () {
87
- jQuery.sq_getHelp("' . str_replace(array("sq_core_block", "sq_controller_block_"), "", strtolower($this->name)) . '", "content");
88
- });
89
  </script>';
90
  }
91
  }
@@ -94,23 +88,13 @@ class SQ_Classes_BlockController {
94
  * This function is called from Ajax class as a wp_ajax_action
95
  *
96
  */
97
- protected function action() {
98
- // check to see if the submitted nonce matches with the
99
- // generated nonce we created
100
- if (function_exists('wp_verify_nonce'))
101
- if (!wp_verify_nonce(SQ_Classes_Tools::getValue('nonce'), _SQ_NONCE_ID_))
102
- die('Invalid request!');
103
- }
104
 
105
  /**
106
  * This function will load the media in the header for each class
107
  *
108
  * @return void
109
  */
110
- protected function hookHead() {
111
- if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
112
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($class['name']);
113
- }
114
- }
115
 
116
  }
15
  /** @var object of the view class */
16
  protected $view;
17
 
18
+ /** @var string name of the class */
19
  private $name;
20
 
21
  public function __construct() {
23
  $this->name = get_class($this);
24
 
25
  /* create the model and view instances */
26
+ $model_classname = str_replace('Core', 'Models', $this->name);
27
+ if(SQ_Classes_ObjController::getClassPath($model_classname)) {
28
+ $this->model = SQ_Classes_ObjController::getClass($model_classname);
29
+ }
30
  }
31
 
32
  /**
33
  * load sequence of classes
34
+ * Function called usualy when the controller is loaded in WP
35
  *
36
  * @return mixed
37
  */
38
  public function init() {
39
  /* check if there is a hook defined in the block class */
40
  SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setBlockHooks($this);
41
+ //get the class path
42
+ $class = SQ_Classes_ObjController::getClassPath($this->name);
43
 
44
  if ($this->flush) {
45
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($class['name']);
46
+
47
+ echo $this->getView($class['name']);
48
  } else {
49
+ return $this->getView($class['name']);
50
  }
 
51
 
52
+ return '';
53
+ }
54
 
55
  /**
56
  * Get the block view
57
  *
58
+ * @param string $view Class name
59
  * @return mixed
60
  */
61
+ public function getView($view) {
62
+ return SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->getView($view, $this);
 
 
 
 
 
 
 
 
 
 
 
63
  }
64
 
 
65
  /**
66
  * Called as menu callback to show the block
67
  *
68
  */
69
  public function show() {
70
  $this->flush = true;
71
+
72
  echo $this->init();
73
  }
74
 
 
75
  public function preloadSettings() {
76
+ if (SQ_Classes_Helpers_Tools::getOption('sq_api') <> '') {
77
  echo '<script type="text/javascript">
78
  var __blog_url = "' . get_bloginfo('url') . '";
79
+ var __token = "' . SQ_Classes_Helpers_Tools::getOption('sq_api') . '";
80
  var __language = "' . get_bloginfo('language') . '";
81
  var __api_url = "' . _SQ_API_URL_ . '";
82
+ var __apiv2_url = "' . _SQ_APIV2_URL_ . '";
 
 
83
  </script>';
84
  }
85
  }
88
  * This function is called from Ajax class as a wp_ajax_action
89
  *
90
  */
91
+ protected function action() { }
 
 
 
 
 
 
92
 
93
  /**
94
  * This function will load the media in the header for each class
95
  *
96
  * @return void
97
  */
98
+ protected function hookHead() { }
 
 
 
 
99
 
100
  }
classes/DisplayController.php CHANGED
@@ -7,68 +7,69 @@ class SQ_Classes_DisplayController {
7
 
8
  private static $cache;
9
 
10
- public function init() {
11
- /* Load the global CSS file */
12
- self::loadMedia('global');
13
- }
14
-
15
  /**
16
  * echo the css link from theme css directory
17
  *
18
  * @param string $uri The name of the css file or the entire uri path of the css file
19
  * @param string $params : trigger, media
20
  *
21
- * @return string
22
  */
23
- public static function loadMedia($uri = '', $params = array('trigger' => false, 'media' => 'all')) {
24
- if (SQ_Classes_ObjController::getClass('SQ_Classes_Action')->_isAjax()) {
25
  return;
26
  }
27
 
 
 
 
 
 
 
 
28
  $css_uri = '';
29
  $js_uri = '';
30
 
31
- if (!isset($params['media'])) {
32
- $params['media'] = 'all';
33
- }
34
-
35
  if (isset(self::$cache[$uri]))
36
  return;
 
37
  self::$cache[$uri] = true;
38
 
39
  /* if is a custom css file */
40
  if (strpos($uri, '//') === false) {
41
- if (strpos($uri, '.') !== false) {
42
- $name = strtolower(_SQ_NAMESPACE_ . substr($uri, 0, strpos($uri, '.')));
43
- } else {
44
- $name = strtolower(_SQ_NAMESPACE_ . $uri);
45
- }
46
- if (strpos($uri, '.css') !== false && file_exists(_SQ_THEME_DIR_ . 'css/' . strtolower($uri))) {
47
- $css_uri = _SQ_THEME_URL_ . 'css/' . strtolower($uri);
48
  }
49
- if (strpos($uri, '.js') !== false && file_exists(_SQ_THEME_DIR_ . 'js/' . strtolower($uri))) {
50
- $js_uri = _SQ_THEME_URL_ . 'js/' . strtolower($uri);
51
  }
52
 
53
- if (file_exists(_SQ_THEME_DIR_ . 'css/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.css')) {
54
- $css_uri = _SQ_THEME_URL_ . 'css/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.css';
55
  }
56
- if (file_exists(_SQ_THEME_DIR_ . 'js/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.js')) {
57
- $js_uri = _SQ_THEME_URL_ . 'js/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.js';
58
  }
 
59
  } else {
60
- $name = strtolower(basename($uri));
61
- if (strpos($uri, '.css') !== FALSE)
 
 
62
  $css_uri = $uri;
63
- elseif (strpos($uri, '.js') !== FALSE) {
64
  $js_uri = $uri;
65
  }
 
66
  }
67
 
68
 
69
  if ($css_uri <> '') {
70
  if (!wp_style_is($name)) {
71
- wp_enqueue_style($name, $css_uri, null, SQ_VERSION_ID, $params['media']);
 
72
  if (is_admin() || (isset($params['trigger']) && $params['trigger'] === true)) { //load CSS for admin or on triggered
73
  wp_print_styles(array($name));
74
  }
@@ -79,7 +80,14 @@ class SQ_Classes_DisplayController {
79
 
80
  if ($js_uri <> '') {
81
  if (!wp_script_is($name)) {
82
- wp_enqueue_script($name, $js_uri, null, SQ_VERSION_ID);
 
 
 
 
 
 
 
83
  if (is_admin() || isset($params['trigger']) && $params['trigger'] === true) {
84
  wp_print_scripts(array($name));
85
  }
@@ -97,12 +105,21 @@ class SQ_Classes_DisplayController {
97
  * @return bool|string
98
  */
99
  public function getView($block, $view) {
100
- if (file_exists(_SQ_THEME_DIR_ . $block . '.php')) {
101
- ob_start();
102
- include(_SQ_THEME_DIR_ . $block . '.php');
103
- return ob_get_clean();
104
- }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  return false;
107
  }
 
108
  }
7
 
8
  private static $cache;
9
 
 
 
 
 
 
10
  /**
11
  * echo the css link from theme css directory
12
  *
13
  * @param string $uri The name of the css file or the entire uri path of the css file
14
  * @param string $params : trigger, media
15
  *
16
+ * @return void
17
  */
18
+ public static function loadMedia($uri = '', $params = array()) {
19
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
20
  return;
21
  }
22
 
23
+ if (empty($params)) {
24
+ $params = array(
25
+ 'trigger' => false,
26
+ 'media' => 'all'
27
+ );
28
+ }
29
+
30
  $css_uri = '';
31
  $js_uri = '';
32
 
 
 
 
 
33
  if (isset(self::$cache[$uri]))
34
  return;
35
+
36
  self::$cache[$uri] = true;
37
 
38
  /* if is a custom css file */
39
  if (strpos($uri, '//') === false) {
40
+ $name = substr(md5($uri), 0, 10);
41
+
42
+ if (strpos($uri, '.css') !== false && file_exists(_SQ_ASSETS_DIR_ . 'css/' . strtolower($uri))) {
43
+ $css_uri = _SQ_ASSETS_URL_ . 'css/' . strtolower($uri);
 
 
 
44
  }
45
+ if (file_exists(_SQ_ASSETS_DIR_ . 'css/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.css')) {
46
+ $css_uri = _SQ_ASSETS_URL_ . 'css/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.css';
47
  }
48
 
49
+ if (strpos($uri, '.js') !== false && file_exists(_SQ_ASSETS_DIR_ . 'js/' . strtolower($uri))) {
50
+ $js_uri = _SQ_ASSETS_URL_ . 'js/' . strtolower($uri);
51
  }
52
+ if (file_exists(_SQ_ASSETS_DIR_ . 'js/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.js')) {
53
+ $js_uri = _SQ_ASSETS_URL_ . 'js/' . strtolower($uri) . (SQ_DEBUG ? '' : '.min') . '.js';
54
  }
55
+
56
  } else {
57
+
58
+ $name = substr(md5($uri), 0, 10);
59
+
60
+ if (strpos($uri, '.css') !== FALSE) {
61
  $css_uri = $uri;
62
+ } elseif (strpos($uri, '.js') !== FALSE) {
63
  $js_uri = $uri;
64
  }
65
+
66
  }
67
 
68
 
69
  if ($css_uri <> '') {
70
  if (!wp_style_is($name)) {
71
+ wp_enqueue_style($name, $css_uri, null, SQ_VERSION, $params['media']);
72
+
73
  if (is_admin() || (isset($params['trigger']) && $params['trigger'] === true)) { //load CSS for admin or on triggered
74
  wp_print_styles(array($name));
75
  }
80
 
81
  if ($js_uri <> '') {
82
  if (!wp_script_is($name)) {
83
+
84
+ if (!wp_script_is('jquery')) {
85
+ wp_enqueue_script('jquery');
86
+ wp_print_scripts(array('jquery'));
87
+ }
88
+
89
+ wp_enqueue_script($name, $js_uri, null, SQ_VERSION);
90
+
91
  if (is_admin() || isset($params['trigger']) && $params['trigger'] === true) {
92
  wp_print_scripts(array($name));
93
  }
105
  * @return bool|string
106
  */
107
  public function getView($block, $view) {
 
 
 
 
 
108
 
109
+ try {
110
+ $file = _SQ_THEME_DIR_ . $block . '.php';
111
+
112
+ if (file_exists($file)) {
113
+
114
+ ob_start();
115
+ include($file);
116
+ return ob_get_clean();
117
+ }
118
+
119
+ } catch (Exception $e) {
120
+ SQ_Debug::dump($file, $e->getMessage(), $e->getFile(), $e->getLine());
121
+ }
122
  return false;
123
  }
124
+
125
  }
classes/Error.php CHANGED
@@ -1,49 +1,51 @@
1
  <?php
2
 
 
 
3
  class SQ_Classes_Error extends SQ_Classes_FrontController {
4
 
5
  /** @var array */
6
- private static $errors, $switch_off;
 
7
 
8
- /**
9
- * The error controller for Squirrly
10
- */
11
  public function __construct() {
12
  parent::__construct();
13
 
14
- /* Verify dependences */
15
- if (!function_exists('get_class')) {
16
- self::setError(__('Function get_class does not exists! Is required for Squirrly to work properly.', _SQ_PLUGIN_NAME_));
17
- }
18
- if (!function_exists('file_exists')) {
19
- self::setError(__('Function file_exists does not exists! Is required for Squirrly to work properly.', _SQ_PLUGIN_NAME_));
20
- }
21
-
22
- if (!defined('ABSPATH'))
23
- self::setError(__('The home directory is not set!', _SQ_PLUGIN_NAME_), 'fatal');
24
 
25
- /* Check the PHP version */
26
- if (PHP_VERSION_ID < 5000) {
27
- self::setError(__('The PHP version has to be greater then 4.0', _SQ_PLUGIN_NAME_), 'fatal');
 
 
 
 
28
  }
 
29
  }
30
 
31
  /**
32
  * Show the error in wrodpress
33
  *
34
  * @param string $error
35
- * @param boolean $stop
36
- *
37
- * @return void;
38
  */
39
  public static function setError($error = '', $type = 'notice', $id = '') {
40
- self::$errors[] = array('id' => $id,
 
41
  'type' => $type,
42
  'text' => $error);
43
  }
44
 
 
 
 
 
45
  public static function setMessage($message = '', $id = '') {
46
- self::$errors[] = array('id' => $id,
 
47
  'type' => 'success',
48
  'text' => $message);
49
  }
@@ -51,7 +53,7 @@ class SQ_Classes_Error extends SQ_Classes_FrontController {
51
  /**
52
  * This hook will show the error in WP header
53
  */
54
- function hookNotices() {
55
  if (is_array(self::$errors))
56
  foreach (self::$errors as $error) {
57
 
@@ -62,29 +64,29 @@ class SQ_Classes_Error extends SQ_Classes_FrontController {
62
  break;
63
  case 'settings':
64
  /* switch off option for notifications */
65
- self::showError("<span class='sq_notice_author'>" . _SQ_PLUGIN_NAME_ . "</span> " . $error['text'] . " ", $error['id']);
66
  break;
67
 
68
  case 'helpnotice':
69
- if (!SQ_Classes_Tools::getOption('ignore_warn')) {
70
  self::$switch_off = "<a href=\"javascript:void(0);\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_warnings_off', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'}, function() {jQuery('#sq_ignore_warn').attr('checked', true); jQuery('.sq_message').hide(); jQuery('#toplevel_page_squirrly .awaiting-mod').fadeOut('slow'); });\" >" . __("Don't bother me!", _SQ_PLUGIN_NAME_) . "</a>";
71
- self::showError("<span class='sq_notice_author'>" . _SQ_PLUGIN_NAME_ . "</span> " . $error['text'] . " " . self::$switch_off, $error['id'], 'sq_helpnotice');
72
  }
73
  break;
74
 
75
  case 'success':
76
- self::showError("<span class='sq_notice_author'>" . _SQ_PLUGIN_NAME_ . "</span> " . $error['text'] . " ", $error['id'], 'sq_success');
77
  break;
78
 
79
  case 'trial':
80
- if (SQ_Classes_Tools::getOption('sq_google_alert_trial')) {
81
  self::$switch_off = "<a href=\"javascript:void(0);\" style=\"font-size: 12px;float:right;margin-right: 5px;color: #ddd;\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_google_alert_trial', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'}, function() {jQuery('.sq_message').fadeOut('slow');});\" >" . __("Don't bother me!", _SQ_PLUGIN_NAME_) . "</a>";
82
- self::showError("<span class='sq_notice_author'>" . _SQ_PLUGIN_NAME_ . "</span> " . $error['text'] . " " . self::$switch_off, $error['id'], 'sq_success');
83
  }
84
  break;
85
  default:
86
 
87
- self::showError("<span class='sq_notice_author'>" . _SQ_PLUGIN_NAME_ . "</span> " . $error['text'], $error['id']);
88
  }
89
  }
90
  self::$errors = array();
@@ -93,10 +95,31 @@ class SQ_Classes_Error extends SQ_Classes_FrontController {
93
  /**
94
  * Show the notices to WP
95
  *
 
 
96
  * @return string
97
  */
98
- public static function showError($message, $id = '', $type = 'sq_error') {
 
 
 
 
 
 
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  if (file_exists(_SQ_THEME_DIR_ . 'Notices.php')) {
101
  include(_SQ_THEME_DIR_ . 'Notices.php');
102
  } else {
@@ -104,4 +127,5 @@ class SQ_Classes_Error extends SQ_Classes_FrontController {
104
  }
105
  }
106
 
 
107
  }
1
  <?php
2
 
3
+ defined('ABSPATH') || exit;
4
+
5
  class SQ_Classes_Error extends SQ_Classes_FrontController {
6
 
7
  /** @var array */
8
+ private static $errors = array();
9
+ private static $switch_off = array();
10
 
 
 
 
11
  public function __construct() {
12
  parent::__construct();
13
 
14
+ add_action('sq_notices', array('SQ_Classes_Error', 'hookNotices'));
15
+ }
 
 
 
 
 
 
 
 
16
 
17
+ /**
18
+ * Get the error message
19
+ * @return int
20
+ */
21
+ public static function getError() {
22
+ if (count(self::$errors) > 0) {
23
+ return self::$errors[0]['text'];
24
  }
25
+ return false;
26
  }
27
 
28
  /**
29
  * Show the error in wrodpress
30
  *
31
  * @param string $error
32
+ * @param string $type
33
+ * @param string $id
 
34
  */
35
  public static function setError($error = '', $type = 'notice', $id = '') {
36
+ self::$errors[] = array(
37
+ 'id' => $id,
38
  'type' => $type,
39
  'text' => $error);
40
  }
41
 
42
+ public static function isError() {
43
+ return (count(self::$errors) > 0);
44
+ }
45
+
46
  public static function setMessage($message = '', $id = '') {
47
+ self::$errors[] = array(
48
+ 'id' => $id,
49
  'type' => 'success',
50
  'text' => $message);
51
  }
53
  /**
54
  * This hook will show the error in WP header
55
  */
56
+ public static function hookNotices() {
57
  if (is_array(self::$errors))
58
  foreach (self::$errors as $error) {
59
 
64
  break;
65
  case 'settings':
66
  /* switch off option for notifications */
67
+ self::showError($error['text'] . " ", $error['id']);
68
  break;
69
 
70
  case 'helpnotice':
71
+ if (!SQ_Classes_Helpers_Tools::getOption('ignore_warn')) {
72
  self::$switch_off = "<a href=\"javascript:void(0);\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_warnings_off', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'}, function() {jQuery('#sq_ignore_warn').attr('checked', true); jQuery('.sq_message').hide(); jQuery('#toplevel_page_squirrly .awaiting-mod').fadeOut('slow'); });\" >" . __("Don't bother me!", _SQ_PLUGIN_NAME_) . "</a>";
73
+ self::showError($error['text'] . " " . self::$switch_off, $error['id'], 'sq_helpnotice');
74
  }
75
  break;
76
 
77
  case 'success':
78
+ self::showError($error['text'] . " ", $error['id'], 'sq_success');
79
  break;
80
 
81
  case 'trial':
82
+ if (SQ_Classes_Helpers_Tools::getOption('sq_google_alert_trial')) {
83
  self::$switch_off = "<a href=\"javascript:void(0);\" style=\"font-size: 12px;float:right;margin-right: 5px;color: #ddd;\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_google_alert_trial', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'}, function() {jQuery('.sq_message').fadeOut('slow');});\" >" . __("Don't bother me!", _SQ_PLUGIN_NAME_) . "</a>";
84
+ self::showError($error['text'] . " " . self::$switch_off, $error['id'], 'sq_success');
85
  }
86
  break;
87
  default:
88
 
89
+ self::showError($error['text'], $error['id']);
90
  }
91
  }
92
  self::$errors = array();
95
  /**
96
  * Show the notices to WP
97
  *
98
+ * @param $message
99
+ * @param string $type
100
  * @return string
101
  */
102
+ public static function showNotices($message, $type = 'sq_notices') {
103
+ if (file_exists(_SQ_THEME_DIR_ . 'Notices.php')) {
104
+ ob_start();
105
+ include(_SQ_THEME_DIR_ . 'Notices.php');
106
+ $message = ob_get_contents();
107
+ ob_end_clean();
108
+ }
109
 
110
+ return $message;
111
+ }
112
+
113
+ /**
114
+ * Show the notices to WP
115
+ *
116
+ * @param $message
117
+ * @param string $id
118
+ * @param string $type
119
+ *
120
+ * return void
121
+ */
122
+ public static function showError($message, $id = '', $type = 'sq_error') {
123
  if (file_exists(_SQ_THEME_DIR_ . 'Notices.php')) {
124
  include(_SQ_THEME_DIR_ . 'Notices.php');
125
  } else {
127
  }
128
  }
129
 
130
+
131
  }
classes/FrontController.php CHANGED
@@ -12,40 +12,38 @@ class SQ_Classes_FrontController {
12
  /** @var boolean */
13
  public $flush = true;
14
 
15
- /** @var object of the view class */
16
- public $view;
17
-
18
  /** @var name of the class */
19
  private $name;
20
 
21
  public function __construct() {
22
- /* Load error class */
23
  SQ_Classes_ObjController::getClass('SQ_Classes_Error');
24
- /* Load Tools */
25
- SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
26
 
27
  /* get the name of the current class */
28
  $this->name = get_class($this);
29
 
30
  /* load the model and hooks here for wordpress actions to take efect */
31
  /* create the model and view instances */
32
- $this->model = SQ_Classes_ObjController::getClass(str_replace('Controllers', 'Models', $this->name));
 
 
 
33
 
34
  //IMPORTANT TO LOAD HOOKS HERE
35
  /* check if there is a hook defined in the controller clients class */
36
  SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
37
 
38
  /* Load the Submit Actions Handler */
39
- SQ_Classes_ObjController::getClass('SQ_Classes_Action');
40
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController');
41
 
42
- //abstract classes
43
  SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Domain');
44
  SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Models');
45
  SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Seo');
46
  }
47
 
48
- public function getClass(){
49
  return $this->name;
50
  }
51
 
@@ -56,35 +54,27 @@ class SQ_Classes_FrontController {
56
  * @return mixed
57
  */
58
  public function init() {
59
- /* load the blocks for this controller */
60
- SQ_Classes_ObjController::getClass('SQ_Classes_ObjController')->getBlocks($this->name);
61
 
62
  if ($this->flush) {
63
- echo $this->getView();
 
 
64
  } else {
65
- return $this->getView();
66
  }
 
 
67
  }
68
 
69
  /**
70
  * Get the block view
71
  *
72
- * @param null $view
73
  * @return mixed
74
  */
75
- public function getView($view = null) {
76
- if (!isset($view)) {
77
- if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
78
- $view = $class['name'];
79
- }
80
- }
81
-
82
- if (isset($view)) {
83
- $this->view = SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController');
84
- return $this->view->getView($view, $this);
85
- }
86
-
87
- return '';
88
  }
89
 
90
  /**
@@ -93,6 +83,7 @@ class SQ_Classes_FrontController {
93
  */
94
  public function show() {
95
  $this->flush = true;
 
96
  echo $this->init();
97
  }
98
 
@@ -103,8 +94,14 @@ class SQ_Classes_FrontController {
103
  * @return void
104
  */
105
  public function runAdmin() {
106
- /* show the admin menu and post actions */
 
 
 
 
107
  SQ_Classes_ObjController::getClass('SQ_Controllers_Menu');
 
 
108
  }
109
 
110
  /**
@@ -115,10 +112,7 @@ class SQ_Classes_FrontController {
115
  SQ_Classes_ObjController::getClass('SQ_Controllers_Frontend');
116
 
117
  /* show the topbar admin menu and post actions */
118
- SQ_Classes_ObjController::getClass('SQ_Controllers_Menu');
119
-
120
- /* call the API for save posts */
121
- SQ_Classes_ObjController::getClass('SQ_Controllers_Api');
122
 
123
  }
124
 
@@ -126,29 +120,13 @@ class SQ_Classes_FrontController {
126
  * first function call for any class
127
  *
128
  */
129
- protected function action() {
130
-
131
- // check to see if the submitted nonce matches with the
132
- // generated nonce we created
133
- if (function_exists('wp_verify_nonce'))
134
- if (!wp_verify_nonce(SQ_Classes_Tools::getValue('nonce'), _SQ_NONCE_ID_))
135
- die('Invalid request!');
136
- }
137
 
138
  /**
139
  * This function will load the media in the header for each class
140
  *
141
  * @return void
142
  */
143
- public function hookHead() {
144
- if (!is_admin()) {
145
- return;
146
- }
147
-
148
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->init();
149
- if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
150
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($class['name']);
151
- }
152
- }
153
 
154
  }
12
  /** @var boolean */
13
  public $flush = true;
14
 
 
 
 
15
  /** @var name of the class */
16
  private $name;
17
 
18
  public function __construct() {
19
+ // Load error class
20
  SQ_Classes_ObjController::getClass('SQ_Classes_Error');
 
 
21
 
22
  /* get the name of the current class */
23
  $this->name = get_class($this);
24
 
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
 
32
  //IMPORTANT TO LOAD HOOKS HERE
33
  /* check if there is a hook defined in the controller clients class */
34
  SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
35
 
36
  /* Load the Submit Actions Handler */
37
+ SQ_Classes_ObjController::getClass('SQ_Classes_ActionController');
38
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController');
39
 
40
+ // load the abstract classes
41
  SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Domain');
42
  SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Models');
43
  SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Seo');
44
  }
45
 
46
+ public function getClass() {
47
  return $this->name;
48
  }
49
 
54
  * @return mixed
55
  */
56
  public function init() {
57
+ $class = SQ_Classes_ObjController::getClassPath($this->name);
 
58
 
59
  if ($this->flush) {
60
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($class['name']);
61
+
62
+ echo $this->getView($class['name']);
63
  } else {
64
+ return $this->getView($class['name']);
65
  }
66
+
67
+ return '';
68
  }
69
 
70
  /**
71
  * Get the block view
72
  *
73
+ * @param string $view Class name
74
  * @return mixed
75
  */
76
+ public function getView($view) {
77
+ return SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->getView($view, $this);
 
 
 
 
 
 
 
 
 
 
 
78
  }
79
 
80
  /**
83
  */
84
  public function show() {
85
  $this->flush = true;
86
+
87
  echo $this->init();
88
  }
89
 
94
  * @return void
95
  */
96
  public function runAdmin() {
97
+ // load the remote controller in admin
98
+ SQ_Classes_ObjController::getClass('SQ_Classes_RemoteController');
99
+ SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Assistant');
100
+
101
+ // show the admin menu and post actions
102
  SQ_Classes_ObjController::getClass('SQ_Controllers_Menu');
103
+ SQ_Classes_ObjController::getClass('SQ_Models_RoleManager');
104
+
105
  }
106
 
107
  /**
112
  SQ_Classes_ObjController::getClass('SQ_Controllers_Frontend');
113
 
114
  /* show the topbar admin menu and post actions */
115
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet');
 
 
 
116
 
117
  }
118
 
120
  * first function call for any class
121
  *
122
  */
123
+ protected function action() { }
 
 
 
 
 
 
 
124
 
125
  /**
126
  * This function will load the media in the header for each class
127
  *
128
  * @return void
129
  */
130
+ public function hookHead() {}
 
 
 
 
 
 
 
 
 
131
 
132
  }
classes/HookController.php CHANGED
@@ -104,8 +104,10 @@ class SQ_Classes_HookController {
104
 
105
  /* for each admin action check if is defined in class and call it */
106
  foreach ($this->block_hooks as $hook => $value)
107
- if (is_callable(array($instance, 'hook' . ucfirst($hook))))
 
108
  call_user_func_array(array($instance, 'hook' . ucfirst($hook)), $param_arr);
 
109
  }
110
 
111
  }
104
 
105
  /* for each admin action check if is defined in class and call it */
106
  foreach ($this->block_hooks as $hook => $value)
107
+ if (is_callable(array($instance, 'hook' . ucfirst($hook)))){
108
+ //call the WP add_action function
109
  call_user_func_array(array($instance, 'hook' . ucfirst($hook)), $param_arr);
110
+ }
111
  }
112
 
113
  }
classes/ObjController.php CHANGED
@@ -8,32 +8,34 @@ class SQ_Classes_ObjController {
8
  /** @var array of instances */
9
  public static $instances;
10
 
11
- /** @var array from core config */
12
- private static $config;
13
-
14
-
 
15
  public static function getClass($className, $args = array()) {
16
 
17
  if ($class = self::getClassPath($className)) {
18
  if (!isset(self::$instances[$className])) {
19
  /* check if class is already defined */
20
  if (!class_exists($className) || $className == get_class()) {
21
- self::includeClass($class['dir'], $class['name']);
22
-
23
- //check if abstract
24
- $check = new ReflectionClass($className);
25
- $abstract = $check->isAbstract();
26
- if (!$abstract) {
27
- self::$instances[$className] = new $className();
28
- if (!empty($args)) {
29
- call_user_func_array(array(self::$instances[$className], '__construct'), $args);
 
 
 
 
 
30
  }
31
- return self::$instances[$className];
32
- } else {
33
- self::$instances[$className] = true;
34
  }
35
- } else {
36
-
37
  }
38
  } else
39
  return self::$instances[$className];
@@ -41,30 +43,74 @@ class SQ_Classes_ObjController {
41
  return false;
42
  }
43
 
44
- private static function includeClass($classDir, $className) {
45
-
46
- if (file_exists($classDir . $className . '.php'))
 
 
 
 
 
 
 
47
  try {
48
- include_once($classDir . $className . '.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  } catch (Exception $e) {
50
- throw new Exception('Controller Error: ' . $e->getMessage());
51
  }
 
 
 
52
  }
53
 
54
- public static function getDomain($className, $args = array()) {
55
- if ($class = self::getClassPath($className)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
- /* check if class is already defined */
58
- // if (!isset(self::$instances[$className])) {
59
- //
60
- // self::$instances[$className] = new $className($args);
61
- // return self::$instances[$className];
62
- // }else
63
- // return self::$instances[$className];
64
- self::includeClass($class['dir'], $class['name']);
65
- return new $className($args);
 
 
 
 
66
  }
67
- throw new Exception('Could not create domain: ' . $className);
 
68
  }
69
 
70
 
@@ -104,7 +150,7 @@ class SQ_Classes_ObjController {
104
  for ($i = 1; $i < sizeof($path) - 1; $i++)
105
  $dir .= strtolower($path[$i]) . '/';
106
 
107
- $class = array('dir' => _SQ_ROOT_DIR_ . '/' . $dir,
108
  'name' => $path[sizeof($path) - 1]);
109
 
110
  if (file_exists($class['dir'] . $class['name'] . '.php')) {
@@ -114,87 +160,4 @@ class SQ_Classes_ObjController {
114
  return false;
115
  }
116
 
117
-
118
- /**
119
- * Deprecated since 8.0.2
120
- * Get the instance of the specified class
121
- *
122
- * @param string $className
123
- * @param bool $core TRUE is the class is a core class or FALSE if it is from classes directory
124
- *
125
- * @return bool|object of the class
126
- */
127
- public static function getController($className, $core = true) {
128
- if (strpos($className, 'Controllers') === false) {
129
- $className = _SQ_NAMESPACE_ . '_Controllers_' . str_replace(_SQ_NAMESPACE_ . '_', '', $className);
130
- }
131
- return self::getClass($className);
132
- }
133
-
134
- /**
135
- * Deprecated since 8.0.2
136
- * Get the instance of the specified model class
137
- *
138
- * @param string $className
139
- *
140
- * @return bool|object of the class
141
- */
142
- public static function getModel($className) {
143
- if (strpos($className, 'Model') === false) {
144
- $className = _SQ_NAMESPACE_ . '_Models_' . str_replace(_SQ_NAMESPACE_ . '_', '', $className);
145
- }
146
- return self::getClass($className);
147
- }
148
-
149
- /**
150
- * Get the instance of the specified block from core directory
151
- *
152
- * @param string $className
153
- *
154
- * @return bool|object of the class
155
- */
156
- public static function getBlock($className) {
157
- if (strpos($className, 'Core') === false) {
158
- $className = _SQ_NAMESPACE_ . '_Core_' . str_replace(_SQ_NAMESPACE_ . '_', '', $className);
159
- }
160
- return self::getClass($className);
161
- }
162
-
163
- /**
164
- * Get all core classes from config.json in core directory
165
- * eg.SQ_Controllers_Post
166
- * @param string $for
167
- */
168
- public function getBlocks($for) {
169
- /* if config allready in cache */
170
- if (!isset(self::$config)) {
171
- $config_file = _SQ_CORE_DIR_ . 'config.json';
172
- if (!file_exists($config_file))
173
- return;
174
-
175
- /* load configuration blocks data from core config files */
176
- self::$config = json_decode(file_get_contents($config_file), 1);;
177
- }
178
- //print_r(self::$config);
179
- if (is_array(self::$config))
180
- foreach (self::$config['blocks']['block'] as $block) {
181
- if ($block['active'] == 1)
182
- if (isset($block['controllers']['controller']))
183
- if (!is_array($block['controllers']['controller'])) {
184
- /* if the block should load for the current controller */
185
- if ($for == $block['controllers']['controller']) {
186
- SQ_Classes_ObjController::getClass($block['name'])->init();
187
- }
188
- } else {
189
- foreach ($block['controllers']['controller'] as $controller) {
190
- /* if the block should load for the current controller */
191
- if ($for == $controller) {
192
- SQ_Classes_ObjController::getClass($block['name'])->init();
193
- }
194
- }
195
- }
196
- }
197
-
198
- }
199
-
200
  }
8
  /** @var array of instances */
9
  public static $instances;
10
 
11
+ /**
12
+ * @param $className
13
+ * @param array $args
14
+ * @return bool|mixed
15
+ */
16
  public static function getClass($className, $args = array()) {
17
 
18
  if ($class = self::getClassPath($className)) {
19
  if (!isset(self::$instances[$className])) {
20
  /* check if class is already defined */
21
  if (!class_exists($className) || $className == get_class()) {
22
+ try {
23
+ self::includeClass($class['dir'], $class['name']);
24
+
25
+ //check if abstract
26
+ $check = new ReflectionClass($className);
27
+ $abstract = $check->isAbstract();
28
+ if (!$abstract) {
29
+ self::$instances[$className] = new $className();
30
+ if (!empty($args)) {
31
+ call_user_func_array(array(self::$instances[$className], '__construct'), $args);
32
+ }
33
+ return self::$instances[$className];
34
+ } else {
35
+ self::$instances[$className] = true;
36
  }
37
+ } catch (Exception $e) {
 
 
38
  }
 
 
39
  }
40
  } else
41
  return self::$instances[$className];
43
  return false;
44
  }
45
 
46
+ /**
47
+ * Get a new instance of the class
48
+ * @param $className
49
+ * @param array $args
50
+ * @return bool|mixed
51
+ */
52
+ public static function getNewClass($className, $args = array()) {
53
+ $instance = false;
54
+ if ($class = self::getClassPath($className)) {
55
+ /* check if class is already defined */
56
  try {
57
+ if (!class_exists($className) || $className == get_class()) {
58
+ self::includeClass($class['dir'], $class['name']);
59
+ }
60
+
61
+ //check if abstract
62
+ $check = new ReflectionClass($className);
63
+ $abstract = $check->isAbstract();
64
+ if (!$abstract) {
65
+ $instance = new $className();
66
+
67
+ if (!empty($args)) {
68
+ call_user_func_array(array($instance, '__construct'), $args);
69
+ }
70
+ return $instance;
71
+ } else {
72
+ $instance = true;
73
+ }
74
  } catch (Exception $e) {
75
+ SQ_Debug::dump($e->getMessage());
76
  }
77
+
78
+ }
79
+ return $instance;
80
  }
81
 
82
+ /**
83
+ * @param $classDir
84
+ * @param $className
85
+ * @throws Exception
86
+ */
87
+ private static function includeClass($classDir, $className) {
88
+ $file = $classDir . $className . '.php';
89
+ try {
90
+ if (file_exists($file)) {
91
+ include_once($file);
92
+ }
93
+ } catch (Exception $e) {
94
+ throw new Exception('Controller Error: ' . $e->getMessage());
95
+ }
96
+ }
97
 
98
+ /**
99
+ * @param $className
100
+ * @param array $args
101
+ * @return stdClass
102
+ */
103
+ public static function getDomain($className, $args = array()) {
104
+ try {
105
+ if ($class = self::getClassPath($className)) {
106
+ self::includeClass($class['dir'], $class['name']);
107
+ return new $className($args);
108
+ }
109
+ } catch (Exception $e) {
110
+ SQ_Debug::dump($e->getMessage());
111
  }
112
+
113
+ return new stdClass();
114
  }
115
 
116
 
150
  for ($i = 1; $i < sizeof($path) - 1; $i++)
151
  $dir .= strtolower($path[$i]) . '/';
152
 
153
+ $class = array('dir' => _SQ_ROOT_DIR_ . $dir,
154
  'name' => $path[sizeof($path) - 1]);
155
 
156
  if (file_exists($class['dir'] . $class['name'] . '.php')) {
160
  return false;
161
  }
162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
classes/Ranking.php DELETED
@@ -1,336 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class for Google Ranking Record
5
- */
6
- class SQ_Classes_Ranking extends SQ_Classes_FrontController {
7
- private $keyword;
8
- private $post_id;
9
- private $error;
10
-
11
- //--
12
- public function getCountry() {
13
- if (SQ_Classes_Tools::getOption('sq_google_country') <> '') {
14
- return SQ_Classes_Tools::getOption('sq_google_country');
15
- }
16
- return 'com';
17
- }
18
-
19
- public function getRefererCountry() {
20
- $convert_refc = array('com' => 'us', '.off.ai' => 'ai', 'com.ag' => 'ag', 'com.ar' => 'ar', 'com.au' => 'au', 'com.br' => 'br', 'com.co' => 'co', 'co.cr' => 'cr', 'com.cu' => 'cu', 'com.do' => 'do', 'com.ec' => 'ec', 'com.sv' => 'sv', 'com.fj' => 'fj', 'com.gi' => 'gi', 'com.gr' => 'gr', 'com.hk' => 'hk', 'co.hu' => 'hu', 'co.in' => 'in', 'co.im' => 'im', 'co.il' => 'il', 'com.jm' => 'jm', 'co.jp' => 'jp', 'co.je' => 'je', 'co.kr' => 'kr', 'co.ls' => 'ls', 'com.my' => 'my', 'com.mt' => 'mt', 'com.mx' => 'mx', 'com.na' => 'na', 'com.np' => 'np', 'com.ni' => 'ni', 'com.nf' => 'nf', 'com.pk' => 'pk', 'com.pa' => 'pa', 'com.py' => 'py', 'com.pe' => 'pe', 'com.ph' => 'ph', 'com.pr' => 'pr', 'com.sg' => 'sg', 'co.za' => 'za', 'com.tw' => 'tw', 'com.th' => 'th', 'com.tr' => 'tr', 'com.ua' => 'ua', 'com.uk' => 'uk', 'com.uy' => 'uy',);
21
- $country = $this->getCountry();
22
- if (array_key_exists($country, $convert_refc)) {
23
- return $convert_refc[$country];
24
- }
25
- return $country;
26
- }
27
-
28
- /**
29
- * Get the google language from settings
30
- * @return string
31
- */
32
- public function getLanguage() {
33
- if (SQ_Classes_Tools::getOption('sq_google_language') <> '') {
34
- return SQ_Classes_Tools::getOption('sq_google_language');
35
- }
36
- return 'en';
37
- }
38
-
39
- /**
40
- * Set the Post id
41
- * @return type
42
- */
43
- public function setPost($post_id) {
44
- $this->post_id = $post_id;
45
- }
46
-
47
- /**
48
- * Get the current keyword
49
- * @param type $keyword
50
- */
51
- public function setKeyword($keyword) {
52
- $this->keyword = str_replace(" ", "+", urlencode(strtolower($keyword)));
53
- }
54
-
55
- /**
56
- * Process Ranking on brief request
57
- * @param type $return
58
- */
59
- public function processRanking($post_id, $keyword) {
60
- $this->setPost($post_id);
61
- $this->setKeyword(trim($keyword));
62
-
63
- if (isset($this->keyword) && $this->keyword <> '') {
64
- return $this->getGoogleRank();
65
- }
66
- return false;
67
- }
68
-
69
- /**
70
- * Call google to get the keyword position
71
- *
72
- * @param integer $post_id
73
- * @param string $keyword
74
- * @param string $country : com | country extension
75
- * @param string $language : en | local language
76
- * @return boolean|int
77
- */
78
- public function getGoogleRank() {
79
-
80
- @ini_set('open_basedir', null);
81
- $this->error = '';
82
-
83
- if (trim($this->keyword) == '') {
84
- $this->error = 'no keyword for post_id:' . $this->post_id;
85
- return false;
86
- }
87
-
88
- if (!function_exists('preg_match_all')) {
89
- return false;
90
- }
91
-
92
- $arg = array('timeout' => 10);
93
- $arg['as_q'] = str_replace(" ", "+", strtolower(trim($this->keyword)));
94
- $arg['hl'] = $this->getLanguage();
95
- //$arg['gl'] = $this->getRefererCountry();
96
-
97
- if (SQ_Classes_Tools::getOption('sq_google_country_strict')) {
98
- $arg['cr'] = 'country' . strtoupper($this->getRefererCountry());
99
- }
100
- $arg['start'] = '0';
101
- $arg['num'] = '100';
102
-
103
- $arg['safe'] = 'active';
104
- $arg['pws'] = '0';
105
- $arg['as_epq'] = '';
106
- $arg['as_oq'] = '';
107
- $arg['as_nlo'] = '';
108
- $arg['as_nhi'] = '';
109
- $arg['as_qdr'] = 'all';
110
- $arg['as_sitesearch'] = '';
111
- $arg['as_occt'] = 'any';
112
- $arg['tbs'] = '';
113
- $arg['as_filetype'] = '';
114
- $arg['as_rights'] = '';
115
-
116
- $country = $this->getCountry();
117
-
118
- if ($country == '' || $arg['hl'] == '') {
119
- $this->error = 'no country (' . $country . ')';
120
- return false;
121
- }
122
-
123
- $user_agents = array(
124
- 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
125
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36',
126
- 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
127
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
128
- 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36',
129
- 'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
130
- 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
131
- 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36',
132
- 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36',
133
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36',
134
- 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36',
135
- 'Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36',
136
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36',
137
- 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36',
138
- 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
139
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36',
140
- 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36',
141
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A',
142
- 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25',
143
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
144
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10',
145
- 'Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3',
146
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
147
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
148
- 'Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27',
149
- 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201',
150
- 'Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:2.0b4) Gecko/20100818',
151
- 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a3pre) Gecko/20070330',
152
- 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.2a1pre) Gecko',
153
- 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3) Gecko/20100401 Lightningquail/3.6.3',
154
- 'Mozilla/5.0 (X11; ; Linux i686; rv:1.9.2.20) Gecko/20110805',
155
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13; ) Gecko/20101203',
156
- 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b3) Gecko/20090305',
157
- 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.0.9) Gecko/2009040821',
158
- 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.8) Gecko/2009032711',
159
- 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803',
160
- 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.7) Gecko/2009021910 MEGAUPLOAD 1.0',
161
- 'Mozilla/5.0 (Windows; U; BeOS; en-US; rv:1.9.0.7) Gecko/2009021910',
162
- 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070321',
163
- 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Mozilla/4.8 [en] (Windows NT 5.1; U)',
164
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; nl-NL; rv:1.8.1.3) Gecko/20080722',
165
- 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko',
166
- 'Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
167
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)',
168
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
169
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
170
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',
171
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)',
172
- 'Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)',
173
- 'Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)',
174
- 'Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',
175
- 'Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)',
176
- 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))',
177
- 'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)',
178
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)',
179
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)',
180
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7',
181
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)',
182
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0',
183
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)',
184
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)',
185
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)',
186
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205',
187
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)',
188
- 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
189
- 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4322)',
190
- 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)',
191
- 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; .NET CLR 2.0.34861; .NET CLR 3.0.3746.3218; .NET CLR 3.5.33652; msn OptimizedIE8;ENUS)',
192
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)',
193
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)',
194
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8',
195
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)',
196
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)',
197
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)',
198
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)',
199
- 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; msn OptimizedIE8;ZHCN)',
200
-
201
- );
202
-
203
- $option = array();
204
- $option['User-Agent'] = $user_agents[mt_rand(0, count($user_agents) - 1)];
205
- $option['followlocation'] = true;
206
- //Grab the remote informations from google
207
- $response = utf8_decode(SQ_Classes_Tools::sq_remote_get("https://www.google.$country/search", $arg, $option));
208
-
209
- //Check the values for block IP
210
- if (strpos($response, "</h3>") === false) {
211
- set_transient('google_blocked', time(), 3600);
212
- return -2; //return error
213
- }
214
-
215
- //Get the permalink of the current post
216
- $permalink = get_permalink($this->post_id);
217
- if ($permalink == '') {
218
- $this->error = 'no permalink for post_id:' . $this->post_id;
219
- return false;
220
- }
221
-
222
- preg_match_all('/<h3.*?><a href="(.*?)".*?<\/h3>/is', $response, $matches);
223
-
224
- if (!empty($matches[1])) {
225
- $pos = -1;
226
- foreach ($matches[1] as $index => $url) {
227
- if (strpos($url, rtrim(str_replace(array('https:', 'http:'), array('', ''), $permalink), '/')) !== false) {
228
- $pos = $index + 1;
229
- break;
230
- }
231
- }
232
- return $pos;
233
- }
234
- $this->error = 'no results returned by google';
235
- return false;
236
- }
237
-
238
- /**
239
- * Do google rank with cron
240
- * @global type $wpdb
241
- */
242
- public function processCron() {
243
- global $wpdb;
244
-
245
- if (get_transient('google_blocked') !== false || SQ_Classes_Tools::getOption('sq_google_ranksperhour') == 0) {
246
- return;
247
- }
248
-
249
- set_time_limit(3000);
250
- /* Load the Submit Actions Handler */
251
- SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
252
- SQ_Classes_ObjController::getClass('SQ_Classes_Action');
253
-
254
- //check 20 keyword at one time
255
- $sql = "SELECT `post_id`, `meta_value`
256
- FROM `" . $wpdb->postmeta . "`
257
- WHERE (`meta_key` = '_sq_post_keyword')
258
- ORDER BY `post_id` DESC";
259
-
260
- if ($rows = $wpdb->get_results($sql)) {
261
- $count = 0;
262
- foreach ($rows as $row) {
263
- if ($count > SQ_Classes_Tools::getOption('sq_google_ranksperhour')) {
264
- break; //check only 10 keywords at the time
265
- }
266
- if ($row->meta_value <> '') {
267
- $json = json_decode($row->meta_value);
268
- //If keyword is set and no rank or last check is 2 days ago
269
- if (isset($json->keyword) && $json->keyword <> '' &&
270
- (!isset($json->rank) ||
271
- (isset($json->update) && (time() - $json->update > (60 * 60 * 24 * 2))) || //if indexed then check every 2 days
272
- (isset($json->update) && isset($json->rank) && $json->rank == -1 && (time() - $json->update > (60 * 60 * 24))) //if not indexed than check often
273
- )
274
- ) {
275
-
276
- $rank = $this->processRanking($row->post_id, $json->keyword);
277
-
278
- //if there is a success response than save it
279
- if (isset($rank) && $rank >= -1) {
280
- $json->rank = $rank;
281
- $json->country = $this->getCountry();
282
- $json->language = $this->getLanguage();
283
- SQ_Classes_ObjController::getClass('SQ_Models_Post')->saveKeyword($row->post_id, $json);
284
- }
285
- set_transient('sq_rank' . $row->post_id, $rank, (60 * 60 * 24));
286
- //if rank proccess has no error
287
-
288
- $args = array();
289
- $args['post_id'] = $row->post_id;
290
- $args['rank'] = (string)$rank;
291
- $args['error'] = $this->error;
292
- $args['country'] = $this->getCountry();
293
- $args['language'] = $this->getLanguage();
294
-
295
- SQ_Classes_Action::apiCall('sq/user-analytics/saveserp', $args);
296
-
297
- $count++;
298
- sleep(mt_rand(20, 40));
299
- }
300
- }
301
- }
302
- }
303
- }
304
-
305
- /**
306
- * Get keyword from earlier version
307
- *
308
- */
309
- public function getKeywordHistory() {
310
- global $wpdb;
311
- //Check if ranks is saved in database
312
- $sql = "SELECT a.`global_rank`, a.`keyword`, a.`post_id`
313
- FROM `sq_analytics` as a
314
- INNER JOIN (SELECT MAX(`id`) as id FROM `sq_analytics` WHERE `keyword` <> '' GROUP BY `post_id`) as a1 ON a1.id = a.id ";
315
-
316
- if ($rows = $wpdb->get_results($sql)) {
317
- foreach ($rows as $values) {
318
- if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($values->post_id)) {
319
- $json->keyword = urldecode($values->keyword);
320
- if ($values->global_rank > 0) {
321
- $json->rank = $values->global_rank;
322
- }
323
- SQ_Classes_ObjController::getClass('SQ_Models_Post')->saveKeyword($values->post_id, $json);
324
- } else {
325
- $args = array();
326
- $args['keyword'] = urldecode($values->keyword);
327
- if ($values->global_rank > 0) {
328
- $json->rank = $values->global_rank;
329
- }
330
- SQ_Classes_ObjController::getClass('SQ_Models_Post')->saveKeyword($values->post_id, json_decode(json_encode($args)));
331
- }
332
- }
333
- }
334
- }
335
-
336
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/RemoteController.php ADDED
@@ -0,0 +1,1021 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Classes_RemoteController {
4
+
5
+ public static $cache = array();
6
+ public static $apiversion = 1;
7
+ public static $apimethod = 'get';
8
+
9
+ /**
10
+ * Call the Squirrly Cloud Server
11
+ * @param string $module
12
+ * @param array $params
13
+ * @param array $options
14
+ * @return string
15
+ */
16
+ public static function apiCall($module, $params = array(), $options = array()) {
17
+ $parameters = "";
18
+
19
+ if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '' && $module <> 'login' && $module <> 'register') {
20
+ return false;
21
+ }
22
+
23
+ //predefined args
24
+ $args = array(
25
+ 'user_url' => get_bloginfo('url'),
26
+ 'lang' => get_bloginfo('language'),
27
+ 'token' => SQ_Classes_Helpers_Tools::getOption('sq_api'),
28
+ 'versq' => (int)str_replace('.', '', SQ_VERSION)
29
+ );
30
+
31
+ //predefined options
32
+ $options = array_merge(
33
+ array(
34
+ 'method' => self::$apimethod,
35
+ 'sslverify' => false,
36
+ 'timeout' => 10,
37
+ 'headers' => array(
38
+ 'USER-TOKEN' => SQ_Classes_Helpers_Tools::getOption('sq_api'),
39
+ 'USER-URL' => get_bloginfo('url'),
40
+ 'LANG' => get_bloginfo('language'),
41
+ 'VERSQ' => (int)str_replace('.', '', SQ_VERSION)
42
+ )
43
+ ),
44
+ $options);
45
+
46
+ try {
47
+ $args = array_merge($args, $params);
48
+
49
+ foreach ($args as $key => $value) {
50
+ if ($value <> '') {
51
+ $parameters .= ($parameters == "" ? "" : "&") . $key . "=" . urlencode($value);
52
+ }
53
+ }
54
+
55
+ //call it with http to prevent curl issues with ssls
56
+ $url = self::cleanUrl(((self::$apiversion == 1) ? _SQ_API_URL_ : _SQ_APIV2_URL_) . $module . "?" . $parameters);
57
+
58
+ //echo $url .'<br/>';
59
+ if (!isset(self::$cache[md5($url)])) {
60
+ if ($options['method'] == 'post') {
61
+ $options['body'] = $args;
62
+ }
63
+
64
+ self::$cache[md5($url)] = self::sq_wpcall($url, $options);
65
+ }
66
+
67
+ return self::$cache[md5($url)];
68
+
69
+
70
+ } catch (Exception $e) {
71
+ return '';
72
+ }
73
+
74
+ }
75
+
76
+ /**
77
+ * Clear the url before the call
78
+ * @param string $url
79
+ * @return string
80
+ */
81
+ private static function cleanUrl($url) {
82
+ return str_replace(array(' '), array('+'), $url);
83
+ }
84
+
85
+ public static function generatePassword($length = 12) {
86
+ $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
87
+
88
+ $password = '';
89
+ for ($i = 0; $i < $length; $i++) {
90
+ $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
91
+ }
92
+
93
+ return $password;
94
+ }
95
+
96
+ /**
97
+ * Get My Squirrly Link
98
+ *
99
+ * @param $path
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
+ /**
107
+ * Get API Link
108
+ *
109
+ * @param string $path
110
+ * @param integer $version
111
+ * @return string
112
+ */
113
+ public static function getApiLink($path) {
114
+ return _SQ_APIV2_URL_ . $path . '?token=' . SQ_Classes_Helpers_Tools::getOption('sq_api') . '&url=' . get_bloginfo('url');
115
+ }
116
+
117
+ /**
118
+ * Use the WP remote call
119
+ *
120
+ * @param $url
121
+ * @param $options
122
+ * @return array|bool|string|WP_Error
123
+ */
124
+ public static function sq_wpcall($url, $options) {
125
+ $method = $options['method'];
126
+
127
+ switch ($method) {
128
+ case 'get':
129
+ unset($options['method']);
130
+ $response = wp_remote_get($url, $options);
131
+ break;
132
+ case 'post':
133
+ unset($options['method']);
134
+ $response = wp_remote_post($url, $options);
135
+ break;
136
+ default:
137
+ $response = wp_remote_request($url, $options);
138
+ break;
139
+ }
140
+
141
+ if (is_wp_error($response)) {
142
+ //SQ_Classes_Error::setError($response->get_error_message(), 'sq_error');
143
+ return false;
144
+ }
145
+
146
+ $response = self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body
147
+ SQ_Debug::dump('wp_remote_get', $method, $url, $options, $response); //output debug
148
+ return $response;
149
+ }
150
+
151
+ /**
152
+ * Get the Json from responce if any
153
+ * @param string $response
154
+ * @return string
155
+ */
156
+ private static function cleanResponce($response) {
157
+ return trim($response, '()');
158
+ }
159
+
160
+ /********************** API CALLs ******************************/
161
+ /**
162
+ * Login user to API
163
+ *
164
+ * @param array $args
165
+ * @return bool|WP_Error
166
+ */
167
+ public static function login($args = array()) {
168
+ self::$apiversion = 1; //api v2
169
+ self::$apimethod = 'get'; //call method
170
+
171
+ $json = json_decode(self::apiCall('login', $args));
172
+
173
+ if (isset($json->error) && $json->error <> '') {
174
+ return (new WP_Error('api_error', $json->error));
175
+ }
176
+
177
+ return $json;
178
+ }
179
+
180
+ /**
181
+ * Register user to API
182
+ *
183
+ * @param array $args
184
+ * @return bool|WP_Error
185
+ */
186
+ public static function register($args = array()) {
187
+ self::$apiversion = 1; //api v2
188
+ self::$apimethod = 'get'; //call method
189
+
190
+ $json = json_decode(self::apiCall('register', $args));
191
+
192
+ if (isset($json->error) && $json->error <> '') {
193
+ return (new WP_Error('api_error', $json->error));
194
+ }
195
+
196
+ return $json;
197
+ }
198
+
199
+ /**
200
+ * Checkin on API v2
201
+ *
202
+ * @param array $args
203
+ * @return bool|WP_Error
204
+ */
205
+ public static function checkin($args = array()) {
206
+ self::$apiversion = 2; //api v2
207
+ self::$apimethod = 'get'; //call method
208
+
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
+
215
+ if (isset($json->data)) {
216
+ //Save the connections into database
217
+ if (isset($json->data->connection_gsc) && isset($json->data->connection_ga)) {
218
+ $connect = SQ_Classes_Helpers_Tools::getOption('connect');
219
+ $connect['google_analytics'] = $json->data->connection_ga;
220
+ $connect['google_search_console'] = $json->data->connection_gsc;
221
+ SQ_Debug::dump($connect);
222
+ SQ_Classes_Helpers_Tools::saveOptions('connect', $connect);
223
+ }
224
+
225
+ return $json->data;
226
+ }
227
+
228
+ return false;
229
+ }
230
+
231
+ /**
232
+ * Get the API stats for this blog
233
+ * @return array
234
+ */
235
+ public static function getStats() {
236
+ self::$apiversion = 2; //api v2
237
+ self::$apimethod = 'get'; //call method
238
+
239
+ $args = $stats = array();
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
+
246
+ if (!isset($json->data)) {
247
+ return (new WP_Error('api_error', 'no_data'));
248
+ }
249
+
250
+ $data = $json->data;
251
+
252
+ if (isset($data->optimized_articles) && isset($data->average_optimization) && isset($data->kr_research) && isset($data->kr_in_briefcase)
253
+ && isset($data->ranked_top) && isset($data->audits_made)) {
254
+
255
+ //do not show stats if not optimization is made
256
+ if ($data->optimized_articles == 0 && $data->kr_research == 0) {
257
+ return false;
258
+ }
259
+
260
+ //Get last month articles
261
+ $stats['all_articles'] = array();
262
+ $stats['all_articles']['value'] = ((int)$data->optimized_articles);
263
+ $stats['all_articles']['text'] = __('Articles optimized so far', _SQ_PLUGIN_NAME_);
264
+ $stats['all_articles']['link'] = SQ_Classes_Helpers_Tools::getAdminUrl('post-new.php');
265
+ $stats['all_articles']['linktext'] = __('add post', _SQ_PLUGIN_NAME_);
266
+
267
+ //Get last month articles
268
+ $stats['avg_articles'] = array();
269
+ $stats['avg_articles']['value'] = ((int)$data->average_optimization);
270
+ $stats['avg_articles']['text'] = __('Average optimization', _SQ_PLUGIN_NAME_);
271
+ $stats['avg_articles']['link'] = SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant');
272
+ $stats['avg_articles']['linktext'] = __('add post', _SQ_PLUGIN_NAME_);
273
+
274
+ //Get all keyword researched
275
+ $stats['all_researches'] = array();
276
+ $stats['all_researches']['value'] = (int)$data->kr_research;
277
+ $stats['all_researches']['text'] = __('All Keyword Researches performed for all websites', _SQ_PLUGIN_NAME_);
278
+ $stats['all_researches']['link'] = SQ_Classes_Helpers_Tools::getAdminUrl('sq_research');
279
+ $stats['all_researches']['linktext'] = __('do research', _SQ_PLUGIN_NAME_);
280
+
281
+ //Get all keywords from briefcase
282
+ $stats['all_briefcase'] = array();
283
+ $stats['all_briefcase']['value'] = (int)$data->kr_in_briefcase;
284
+ $stats['all_briefcase']['text'] = __('Keywords stored in Squirrly Briefcase', _SQ_PLUGIN_NAME_);
285
+ $stats['all_briefcase']['link'] = SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'briefcase');
286
+ $stats['all_briefcase']['linktext'] = __('add keyword', _SQ_PLUGIN_NAME_);
287
+
288
+ //Get the top 100 ranking
289
+ $stats['top_ranking'] = array();
290
+ $stats['top_ranking']['value'] = (int)$data->ranked_top;
291
+ $stats['top_ranking']['text'] = __('Pages ranking in top 100 Google', _SQ_PLUGIN_NAME_);
292
+ $stats['top_ranking']['link'] = SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings');
293
+ $stats['top_ranking']['linktext'] = __('see rankings', _SQ_PLUGIN_NAME_);
294
+
295
+ //Get last month audits
296
+ $stats['lm_audit'] = array();
297
+ $stats['lm_audit']['value'] = (int)$data->audits_made;
298
+ $stats['lm_audit']['text'] = __('SEO Audits', _SQ_PLUGIN_NAME_);
299
+ $stats['lm_audit']['link'] = SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits');
300
+ $stats['lm_audit']['linktext'] = __('see audits', _SQ_PLUGIN_NAME_);
301
+ }
302
+ }
303
+
304
+ return $stats;
305
+ }
306
+
307
+
308
+ /**
309
+ * Get audits from API
310
+ * @param array $args
311
+ * @return array|bool
312
+ */
313
+ public static function getBlogAudits($args = array()) {
314
+ self::$apiversion = 1; //api v1
315
+ self::$apimethod = 'get'; //call method
316
+
317
+ $json = json_decode(self::apiCall('audit/get-blog-audits', $args));
318
+
319
+ if (isset($json->audits)) {
320
+ return $json->audits;
321
+ }
322
+
323
+ return false;
324
+ }
325
+
326
+ /******************************** BRIEFCASE *********************/
327
+ public static function getBriefcase($args = array()) {
328
+ self::$apiversion = 2; //api v1
329
+ self::$apimethod = 'get'; //call method
330
+
331
+ $json = json_decode(self::apiCall('api/briefcase/get', $args));
332
+
333
+ if (isset($json->error) && $json->error <> '') {
334
+ return (new WP_Error('api_error', $json->error));
335
+ }
336
+
337
+ if (isset($json->data)) {
338
+ return $json->data;
339
+ }
340
+
341
+ return false;
342
+ }
343
+
344
+ public static function addBriefcaseKeyword($args = array()) {
345
+ self::$apiversion = 2; //api v1
346
+ self::$apimethod = 'post'; //call method
347
+
348
+ $json = json_decode(self::apiCall('api/briefcase/add', $args));
349
+
350
+ if (isset($json->error) && $json->error <> '') {
351
+ return (new WP_Error('api_error', $json->error));
352
+ }
353
+
354
+ if (isset($json->data)) {
355
+ return $json->data;
356
+ }
357
+
358
+
359
+ return false;
360
+ }
361
+
362
+ public static function removeBriefcaseKeyword($args = array()) {
363
+ self::$apiversion = 2; //api v1
364
+ self::$apimethod = 'post'; //call method
365
+
366
+ if ($json = json_decode(self::apiCall('api/briefcase/hide', $args))) {
367
+ return $json;
368
+ }
369
+
370
+ return false;
371
+ }
372
+
373
+ public static function getBriefcaseStats($args = array()) {
374
+ self::$apiversion = 2; //api v2
375
+ self::$apimethod = 'get'; //call method
376
+
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
+
383
+ if (isset($json->data)) {
384
+ return $json->data;
385
+ }
386
+
387
+ return false;
388
+ }
389
+
390
+ public static function saveBriefcaseKeywordLabel($args = array()) {
391
+ self::$apiversion = 2; //api v1
392
+ self::$apimethod = 'post'; //call method
393
+
394
+ $json = json_decode(self::apiCall('api/briefcase/label/keyword', $args));
395
+
396
+ if (isset($json->error) && $json->error <> '') {
397
+ return (new WP_Error('api_error', $json->error));
398
+ }
399
+
400
+ if (isset($json->data)) {
401
+ return $json->data;
402
+ }
403
+
404
+ return false;
405
+ }
406
+
407
+
408
+ public static function addBriefcaseLabel($args = array()) {
409
+ self::$apiversion = 2; //api v1
410
+ self::$apimethod = 'post'; //call method
411
+
412
+ $json = json_decode(self::apiCall('api/briefcase/label/add', $args));
413
+
414
+ if (isset($json->error) && $json->error <> '') {
415
+ return (new WP_Error('api_error', $json->error));
416
+ }
417
+
418
+ if (isset($json->data)) {
419
+ return $json->data;
420
+ }
421
+
422
+ return false;
423
+ }
424
+
425
+ public static function saveBriefcaseLabel($args = array()) {
426
+ self::$apiversion = 2; //api v1
427
+ self::$apimethod = 'post'; //call method
428
+
429
+ $json = json_decode(self::apiCall('api/briefcase/label/save', $args));
430
+
431
+ if (isset($json->error) && $json->error <> '') {
432
+ return (new WP_Error('api_error', $json->error));
433
+ }
434
+
435
+ if (isset($json->data)) {
436
+ return $json->data;
437
+ }
438
+
439
+ return false;
440
+ }
441
+
442
+ public static function removeBriefcaseLabel($args = array()) {
443
+ self::$apiversion = 2; //api v1
444
+ self::$apimethod = 'post'; //call method
445
+
446
+ $json = json_decode(self::apiCall('api/briefcase/label/delete', $args));
447
+
448
+ if (isset($json->error) && $json->error <> '') {
449
+ return (new WP_Error('api_error', $json->error));
450
+ }
451
+
452
+ if (isset($json->data)) {
453
+ return $json->data;
454
+ }
455
+
456
+ return false;
457
+ }
458
+
459
+ /******************************** KEYWORD RESEARCH ****************/
460
+
461
+ public static function getKROthers($args = array()) {
462
+ self::$apiversion = 1; //api v1
463
+ self::$apimethod = 'get'; //call method
464
+
465
+ if ($json = json_decode(self::apiCall('kr/other', $args))) {
466
+
467
+ if (isset($json->error) && $json->error <> '') {
468
+ return (new WP_Error('api_error', $json->error));
469
+ }
470
+
471
+ return $json;
472
+ }
473
+
474
+ return false;
475
+ }
476
+
477
+ /**
478
+ * Get Keyword Research Suggestion
479
+ *
480
+ * @param array $args
481
+ * @return array|bool|mixed|object|WP_Error
482
+ */
483
+ public static function getKRSuggestion($args = array()) {
484
+ self::$apiversion = 1; //api v1
485
+ self::$apimethod = 'get'; //call method
486
+
487
+ if ($json = json_decode(self::apiCall('kr/suggestion', $args, array('timeout' => 300)))) {
488
+
489
+ if (isset($json->error) && $json->error <> '') {
490
+ return (new WP_Error('api_error', $json->error));
491
+ }
492
+
493
+ return $json;
494
+ }
495
+
496
+ return false;
497
+ }
498
+
499
+ /**
500
+ * Get Keyword Research History
501
+ * @param array $args
502
+ * @return array|bool|mixed|object|WP_Error
503
+ */
504
+ public static function getKRHistory($args = array()) {
505
+ self::$apiversion = 1; //api v1
506
+ self::$apimethod = 'get'; //call method
507
+
508
+ $json = json_decode(self::apiCall('kr/history/json/1', $args));
509
+
510
+ if (isset($json->error) && $json->error <> '') {
511
+ return (new WP_Error('api_error', $json->error));
512
+ }
513
+
514
+ if (isset($json->json)) {
515
+ return $json->json;
516
+ }
517
+
518
+ return false;
519
+ }
520
+
521
+ /**
522
+ * Get the Kr Found by API
523
+ * @param array $args
524
+ * @return bool|WP_Error
525
+ */
526
+ public static function getKrFound($args = array()) {
527
+ self::$apiversion = 1; //api v1
528
+ self::$apimethod = 'get'; //call method
529
+
530
+ $json = json_decode(self::apiCall('kr/found', $args));
531
+
532
+ if (isset($json->error) && $json->error <> '') {
533
+ return (new WP_Error('api_error', $json->error));
534
+ }
535
+
536
+ if (isset($json->json)) {
537
+ return $json->json;
538
+ }
539
+
540
+ return false;
541
+ }
542
+
543
+ /**
544
+ * Get KR Countries
545
+ * @param array $args
546
+ * @return bool|WP_Error
547
+ */
548
+ public static function getKrCountries($args = array()) {
549
+ self::$apiversion = 1; //api v1
550
+ self::$apimethod = 'get'; //call method
551
+
552
+ $args['json'] = true;
553
+ $json = json_decode(self::apiCall('kr/countries', $args));
554
+
555
+ if (isset($json->error) && $json->error <> '') {
556
+ return (new WP_Error('api_error', $json->error));
557
+ }
558
+
559
+ if (isset($json->json)) {
560
+ return $json->json;
561
+ }
562
+
563
+ return false;
564
+ }
565
+
566
+ /******************** WP Posts ***************************/
567
+ /**
568
+ * Save the post status on API
569
+ * @param array $args
570
+ * @return bool
571
+ */
572
+ public static function savePost($args = array()) {
573
+ self::$apiversion = 1; //api v1
574
+ self::$apimethod = 'get'; //call method
575
+
576
+ return json_decode(self::apiCall('seo/post', $args));
577
+
578
+ }
579
+
580
+ /**
581
+ * Get the post optimization
582
+ *
583
+ * @param array $args
584
+ * @return array|mixed|object
585
+ */
586
+ public static function getPostOptimization($args = array()) {
587
+ self::$apiversion = 1; //api v1
588
+
589
+ return json_decode(self::apiCall('seo/get-optimization', $args));
590
+ }
591
+
592
+ /**
593
+ * Update the post status on API
594
+ * @param array $args
595
+ * @return bool
596
+ */
597
+ public static function updatePost($args = array()) {
598
+ self::$apiversion = 1; //api v1
599
+ self::$apimethod = 'get'; //call method
600
+
601
+ return json_decode(self::apiCall('seo/update', $args));
602
+
603
+ }
604
+
605
+ /******************** RANKINGS ***************************/
606
+
607
+ /**
608
+ * Add a keyword in Rank Checker
609
+ * @param array $args
610
+ * @return bool|WP_Error
611
+ */
612
+ public static function addSerpKeyword($args = array()) {
613
+ self::$apiversion = 2; //api v2
614
+ self::$apimethod = 'post'; //call method
615
+
616
+ $json = json_decode(self::apiCall('api/briefcase/serp', $args));
617
+
618
+ if (isset($json->error) && $json->error <> '') {
619
+ return (new WP_Error('api_error', $json->error));
620
+ }
621
+
622
+ if (isset($json->data)) {
623
+ return $json->data;
624
+ }
625
+
626
+ return false;
627
+ }
628
+
629
+ /**
630
+ * Delete a keyword from Rank Checker
631
+ * @param array $args
632
+ * @return bool|WP_Error
633
+ */
634
+ public static function deleteSerpKeyword($args = array()) {
635
+ self::$apiversion = 2; //api v2
636
+ self::$apimethod = 'post'; //call method
637
+
638
+ $json = json_decode(self::apiCall('api/briefcase/serp-delete', $args));
639
+
640
+ if (isset($json->error) && $json->error <> '') {
641
+ return (new WP_Error('api_error', $json->error));
642
+ }
643
+
644
+ if (isset($json->data)) {
645
+ return $json->data;
646
+ }
647
+
648
+ return false;
649
+ }
650
+
651
+ /**
652
+ * Get the Ranks for this blog
653
+ * @param array $args
654
+ * @return bool|WP_Error
655
+ */
656
+ public static function getRanksStats($args = array()) {
657
+ self::$apiversion = 2; //api v2
658
+ self::$apimethod = 'get'; //call method
659
+
660
+ $json = json_decode(self::apiCall('api/serp/stats', $args));
661
+
662
+ if (isset($json->error) && $json->error <> '') {
663
+ return (new WP_Error('api_error', $json->error));
664
+ }
665
+
666
+ if (isset($json->data)) {
667
+ return $json->data;
668
+ }
669
+ return false;
670
+ }
671
+
672
+ /**
673
+ * Get the Ranks for this blog
674
+ * @param array $args
675
+ * @return bool|WP_Error
676
+ */
677
+ public static function getRanks($args = array()) {
678
+ self::$apiversion = 2; //api v2
679
+ self::$apimethod = 'get'; //call method
680
+
681
+ $json = json_decode(self::apiCall('api/serp/get-ranks', $args));
682
+
683
+ if (isset($json->error) && $json->error <> '') {
684
+ return (new WP_Error('api_error', $json->error));
685
+ }
686
+
687
+ if (isset($json->data)) {
688
+ return $json->data;
689
+ }
690
+ return false;
691
+ }
692
+
693
+ /**
694
+ * Refresh the rank for a page/post
695
+ *
696
+ * @param array $args
697
+ * @return bool|WP_Error
698
+ */
699
+ public static function checkPostRank($args = array()) {
700
+ self::$apiversion = 2; //api v2
701
+ self::$apimethod = 'get'; //call method
702
+
703
+ $json = json_decode(self::apiCall('api/serp/refresh', $args));
704
+
705
+ if (isset($json->error) && $json->error <> '') {
706
+ return (new WP_Error('api_error', $json->error));
707
+ }
708
+
709
+ if (isset($json->data)) {
710
+ return $json->data;
711
+ }
712
+
713
+ return true;
714
+ }
715
+
716
+ /******************** FOCUS PAGES ***********************/
717
+
718
+ /**
719
+ * Get all focus pages and add them in the SQ_Models_Domain_FocusPage object
720
+ * Add the audit data for each focus page
721
+ * @param array $args
722
+ * @return SQ_Models_Domain_FocusPage|WP_Error|false
723
+ */
724
+ public static function getFocusPages($args = array()) {
725
+ self::$apiversion = 2; //api v2
726
+ self::$apimethod = 'get'; //call method
727
+
728
+ $json = json_decode(self::apiCall('api/posts/focus', $args));
729
+
730
+ if (isset($json->error) && $json->error <> '') {
731
+ return (new WP_Error('api_error', $json->error));
732
+ }
733
+
734
+ if (isset($json->data)) {
735
+ return $json->data;
736
+ }
737
+ return false;
738
+ }
739
+
740
+ /**
741
+ * Get the focus page audit
742
+ *
743
+ * @param array $args
744
+ * @return bool|WP_Error
745
+ */
746
+ public static function getFocusAudits($args = array()) {
747
+ self::$apiversion = 2; //api v2
748
+ self::$apimethod = 'get'; //call method
749
+
750
+ $json = json_decode(self::apiCall('api/audits/focus', $args));
751
+
752
+ if (isset($json->error) && $json->error <> '') {
753
+ return (new WP_Error('api_error', $json->error));
754
+ }
755
+
756
+ if (isset($json->data) && !empty($json->data)) {
757
+ return $json->data;
758
+ }
759
+ return false;
760
+ }
761
+
762
+ /**
763
+ * Get the audit for a specific page
764
+ * @param array $args
765
+ * @return array|bool|mixed|object|WP_Error
766
+ */
767
+ public static function getSeoAudit($args = array()) {
768
+ self::$apiversion = 2; //api v2
769
+ self::$apimethod = 'get'; //call method
770
+
771
+ if ($json_audit = json_decode(self::apiCall('api/audits/old', $args))) {
772
+
773
+ if (isset($json_audit->error) && $json_audit->error <> '') {
774
+ return (new WP_Error($json_audit->error));
775
+ }
776
+
777
+ if (isset($json_audit->data)) {
778
+ return json_decode(json_encode($json_audit->data));
779
+ }
780
+ }
781
+
782
+ return false;
783
+ }
784
+
785
+ /**
786
+ * Add Focus Page
787
+ * @param array $args
788
+ * @return bool|WP_Error
789
+ */
790
+ public static function addFocusPage($args = array()) {
791
+ self::$apiversion = 2; //api v2
792
+ self::$apimethod = 'post'; //post call
793
+
794
+ if ($json = json_decode(self::apiCall('api/posts/set-focus', $args))) {
795
+
796
+ if (isset($json->error) && $json->error <> '') {
797
+ return (new WP_Error('api_error', $json->error));
798
+ }
799
+
800
+ if (isset($json->data)) {
801
+ return $json->data;
802
+ }
803
+ }
804
+ return false;
805
+ }
806
+
807
+ public static function updateFocusPage($args = array()) {
808
+ self::$apiversion = 2; //api v2
809
+ self::$apimethod = 'post'; //post call
810
+
811
+ if ($json = json_decode(self::apiCall('api/posts/update-focus', $args))) {
812
+ if (isset($json->error) && $json->error <> '') {
813
+ return (new WP_Error('api_error', $json->error));
814
+ }
815
+
816
+ if (isset($json->data)) {
817
+ return $json->data;
818
+ }
819
+ }
820
+ return false;
821
+ }
822
+
823
+ /**
824
+ * Delete the Focus Page
825
+ * @param array $args
826
+ * @return bool|WP_Error
827
+ */
828
+ public static function deleteFocusPage($args = array()) {
829
+ self::$apiversion = 2; //api v2
830
+ self::$apimethod = 'post'; //post call
831
+
832
+ if (isset($args['user_post_id']) && $args['user_post_id'] > 0) {
833
+ if ($json = json_decode(self::apiCall('api/posts/remove-focus/' . $args['user_post_id']))) {
834
+
835
+ if (isset($json->error) && $json->error <> '') {
836
+ return (new WP_Error('api_error', $json->error));
837
+ }
838
+
839
+ if (isset($json->data)) {
840
+ return $json->data;
841
+ }
842
+ }
843
+ }
844
+ return false;
845
+ }
846
+
847
+ /**************************************** CONNECTIONS */
848
+ /**
849
+ * Disconnect Google Analytics account
850
+ * @param array $args
851
+ * @return bool|WP_Error
852
+ */
853
+ public static function revokeGaConnection($args = array()) {
854
+ self::$apiversion = 2; //api v2
855
+ self::$apimethod = 'get'; //post call
856
+
857
+ if ($json = json_decode(self::apiCall('api/ga/revoke'))) {
858
+ if (isset($json->error) && $json->error <> '') {
859
+ return (new WP_Error('api_error', $json->error));
860
+ }
861
+
862
+ if (isset($json->data)) {
863
+ return $json->data;
864
+ }
865
+ }
866
+
867
+ return false;
868
+ }
869
+
870
+
871
+ /**
872
+ * Disconnect Google Search Console account
873
+ * @param array $args
874
+ * @return bool|WP_Error
875
+ */
876
+ public static function revokeGscConnection($args = array()) {
877
+ self::$apiversion = 2; //api v2
878
+ self::$apimethod = 'get'; //post call
879
+
880
+ if ($json = json_decode(self::apiCall('api/gsc/revoke'))) {
881
+ if (isset($json->error) && $json->error <> '') {
882
+ return (new WP_Error('api_error', $json->error));
883
+ }
884
+
885
+ if (isset($json->data)) {
886
+ return $json->data;
887
+ }
888
+ }
889
+
890
+ return false;
891
+ }
892
+
893
+ public static function syncGSC($args = array()) {
894
+ self::$apiversion = 2; //api v2
895
+ self::$apimethod = 'get'; //post call
896
+
897
+
898
+ if ($json = json_decode(self::apiCall('api/gsc/sync/kr', $args))) {
899
+
900
+ if (isset($json->error) && $json->error <> '') {
901
+ return (new WP_Error('api_error', $json->error));
902
+ }
903
+
904
+ if (isset($json->data)) {
905
+ return $json->data;
906
+ }
907
+ }
908
+
909
+ return false;
910
+ }
911
+
912
+
913
+ /******************** OTHERS *****************************/
914
+
915
+ public static function saveSettings($args) {
916
+ self::$apiversion = 1; //api v1
917
+ self::$apimethod = 'get'; //call method
918
+
919
+ self::apiCall('user/settings', array('settings' => json_encode($args)));
920
+ }
921
+
922
+ /**
923
+ * Load the JS for API
924
+ */
925
+ public static function loadJsVars() {
926
+ global $post;
927
+ $sq_postID = (isset($post->ID) ? $post->ID : 0);
928
+
929
+ echo '<script>
930
+ var SQ_DEBUG = ' . (int)SQ_DEBUG . ';
931
+ (function($){
932
+ $.sq_config = {
933
+ sq_use: ' . (int)SQ_Classes_Helpers_Tools::getOption('sq_use') . ',
934
+ sq_version: "' . SQ_VERSION . '",
935
+ token: "' . SQ_Classes_Helpers_Tools::getOption('sq_api') . '",
936
+ sq_baseurl: "' . _SQ_STATIC_API_URL_ . '",
937
+ sq_uri: "' . SQ_URI . '",
938
+ sq_apiurl: "' . str_replace('/sq', '', _SQ_API_URL_) . '",
939
+ user_url: "' . get_bloginfo('url') . '",
940
+ language: "' . get_bloginfo('language') . '",
941
+ sq_keywordtag: ' . (int)SQ_Classes_Helpers_Tools::getOption('sq_keywordtag') . ',
942
+ sq_seoversion: "' . ((int)SQ_Classes_Helpers_Tools::getOption('sq_sla') + 1) . '",
943
+ keyword_information: ' . (int)SQ_Classes_Helpers_Tools::getOption('sq_keyword_information') . ',
944
+ frontend_css: "' . _SQ_ASSETS_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css",
945
+ postID: "' . $sq_postID . '",
946
+ prevNonce: "' . wp_create_nonce('post_preview_' . $sq_postID) . '",
947
+ __infotext: ["' . __('Recent discussions:', _SQ_PLUGIN_NAME_) . '", "' . __('SEO Search Volume:', _SQ_PLUGIN_NAME_) . '", "' . __('Competition:', _SQ_PLUGIN_NAME_) . '", "' . __('Trend:', _SQ_PLUGIN_NAME_) . '"],
948
+ __keyword: "' . __('Keyword:', _SQ_PLUGIN_NAME_) . '",
949
+ __date: "' . __('date', _SQ_PLUGIN_NAME_) . '",
950
+ __saved: "' . __('Saved!', _SQ_PLUGIN_NAME_) . '",
951
+ __readit: "' . __('Read it!', _SQ_PLUGIN_NAME_) . '",
952
+ __insertit: "' . __('Insert it!', _SQ_PLUGIN_NAME_) . '",
953
+ __reference: "' . __('Reference', _SQ_PLUGIN_NAME_) . '",
954
+ __insertasbox: "' . __('Insert as box', _SQ_PLUGIN_NAME_) . '",
955
+ __addlink: "' . __('Insert Link', _SQ_PLUGIN_NAME_) . '",
956
+ __notrelevant: "' . __('Not relevant?', _SQ_PLUGIN_NAME_) . '",
957
+ __insertparagraph: "' . __('Insert in your article', _SQ_PLUGIN_NAME_) . '",
958
+ __ajaxerror: "' . __(':( An error occurred while processing your request. Please try again', _SQ_PLUGIN_NAME_) . '",
959
+ __krerror: "' . __('Keyword Research takes too long to get the results. Click to try again', _SQ_PLUGIN_NAME_) . '",
960
+ __nofound: "' . __('No results found!', _SQ_PLUGIN_NAME_) . '",
961
+ __morewords: "' . __('Enter one more word to find relevant results', _SQ_PLUGIN_NAME_) . '",
962
+ __toolong: "' . __("It's taking too long to check this keyword", _SQ_PLUGIN_NAME_) . '",
963
+ __doresearch: "' . __('Do a research!', _SQ_PLUGIN_NAME_) . '",
964
+ __morekeywords: "' . __('Do more research!', _SQ_PLUGIN_NAME_) . '",
965
+ __sq_photo_copyright: "' . __('[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]', _SQ_PLUGIN_NAME_) . '",
966
+ __has_attributes: "' . __('Has creative commons attributes', _SQ_PLUGIN_NAME_) . '",
967
+ __no_attributes: "' . __('No known copyright restrictions', _SQ_PLUGIN_NAME_) . '",
968
+ __noopt: "' . __('You haven`t used Squirrly SEO to optimize your article. Do you want to optimize for a keyword before publishing?', _SQ_PLUGIN_NAME_) . '",
969
+ __limit_exceeded: "' . __('Keyword Research limit exceeded', _SQ_PLUGIN_NAME_) . '",
970
+ __subscription_expired: "' . __('Your Subscription has Expired', _SQ_PLUGIN_NAME_) . '",
971
+ __add_keywords: "' . __('Add 20 Keyword Researches', _SQ_PLUGIN_NAME_) . '",
972
+ __no_briefcase: "' . __('There are no keywords saved in briefcase yet', _SQ_PLUGIN_NAME_) . '",
973
+ __fulloptimized: "' . __('Congratulations! Your article is 100% optimized!', _SQ_PLUGIN_NAME_) . '",
974
+ __toomanytimes: "' . __('appears too many times. Try to remove %s of them', _SQ_PLUGIN_NAME_) . '",
975
+ __writemorewords: "' . __('write %s more words', _SQ_PLUGIN_NAME_) . '",
976
+ __keywordinintroduction: "' . __('Add the keyword in the %s of your article', _SQ_PLUGIN_NAME_) . '",
977
+ __clicktohighlight: "' . __('Click to keep the highlight on', _SQ_PLUGIN_NAME_) . '",
978
+ __introduction: "' . __('introduction', _SQ_PLUGIN_NAME_) . '",
979
+ __morewordsafter: "' . __('Write more words after the %s keyword', _SQ_PLUGIN_NAME_) . '",
980
+ __orusesynonyms: "' . __('or use synonyms', _SQ_PLUGIN_NAME_) . '",
981
+ __addmorewords: "' . __('add %s more word(s)', _SQ_PLUGIN_NAME_) . '",
982
+ __removewords: "' . __('or remove %s word(s)', _SQ_PLUGIN_NAME_) . '",
983
+ __addmorekeywords: "' . __('add %s more keyword(s)', _SQ_PLUGIN_NAME_) . '",
984
+ __addminimumwords: "' . __('write %s more words to start calculating', _SQ_PLUGIN_NAME_) . '",
985
+ __add_to_briefcase: "' . __('Add to Briefcase', _SQ_PLUGIN_NAME_) . '",
986
+ __add_keyword_briefcase: "' . __('Add Keyword to Briefcase', _SQ_PLUGIN_NAME_) . '",
987
+ __usekeyword: "' . __('Use Keyword', _SQ_PLUGIN_NAME_) . '",
988
+ __new_post_title: "' . __('Auto Draft') . '"
989
+ };
990
+
991
+
992
+ if (typeof sq_script === "undefined"){
993
+ var sq_script = document.createElement(\'script\');
994
+ sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/squirrly' . (SQ_DEBUG ? '' : '.min') . '.js?ver=' . SQ_VERSION . '";
995
+ var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
996
+ site_head.insertBefore(sq_script, site_head.firstChild);
997
+ }
998
+
999
+ window.onerror = function(){
1000
+ $.sq_config.sq_windowerror = true;
1001
+ };
1002
+
1003
+ //for older version return
1004
+ window.params = [];
1005
+
1006
+ $(document).ready(function() {
1007
+ $("#sq_preloading").html("");
1008
+ });
1009
+ })(jQuery);
1010
+ </script>';
1011
+
1012
+ }
1013
+
1014
+ public static function versionOne() {
1015
+ return 1;
1016
+ }
1017
+
1018
+ public static function versionTwo() {
1019
+ return 2;
1020
+ }
1021
+ }
classes/Tools.php DELETED
@@ -1,1666 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Handles the parameters and url
5
- *
6
- * @author Squirrly
7
- */
8
- class SQ_Classes_Tools extends SQ_Classes_FrontController {
9
-
10
- /** @var array Options, User Metas, Package and Plugin details */
11
- public static $options, $usermeta, $package, $plugin = array();
12
- /** @var integer Count the errors in site */
13
- static $errors_count;
14
-
15
- /** @var array */
16
- private static $debug;
17
- private static $source_code;
18
- public static $is_ajax = null;
19
-
20
- public function __construct() {
21
- self::$options = $this->getOptions();
22
-
23
- $maxmemory = self::getMaxMemory();
24
- if ($maxmemory && $maxmemory < 60) {
25
- @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
26
- }
27
-
28
- SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
29
- $this->checkDebug(); //dev mode
30
- }
31
-
32
- public static function getMaxMemory() {
33
- try {
34
- $memory_limit = @ini_get('memory_limit');
35
- if ((int)$memory_limit > 0) {
36
- if (preg_match('/^(\d+)(.)$/', $memory_limit, $matches)) {
37
- if ($matches[2] == 'G') {
38
- $memory_limit = $matches[1] * 1024 * 1024 * 1024; // nnnM -> nnn MB
39
- } elseif ($matches[2] == 'M') {
40
- $memory_limit = $matches[1] * 1024 * 1024; // nnnM -> nnn MB
41
- } elseif ($matches[2] == 'K') {
42
- $memory_limit = $matches[1] * 1024; // nnnK -> nnn KB
43
- }
44
- }
45
-
46
- if ((int)$memory_limit > 0) {
47
- return number_format($memory_limit / 1024 / 1024, 0, '', '');
48
- }
49
- }
50
- } catch (Exception $e) {
51
- }
52
-
53
- return false;
54
-
55
- }
56
-
57
- public static function getUsedMemory() {
58
- return number_format(memory_get_usage() / 1024 / 1024, 0);
59
- }
60
-
61
- /**
62
- * This hook will save the current version in database
63
- *
64
- * @return void
65
- */
66
- function hookInit() {
67
- $this->loadMultilanguage();
68
- add_filter("plugin_row_meta", array($this, 'hookExtraLinks'), 10, 4);
69
- //add setting link in plugin
70
- add_filter('plugin_action_links', array($this, 'hookActionlink'), 5, 2);
71
-
72
- if (self::getOption('sq_name') <> '') {
73
- if (isset($_SERVER['REQUEST_URI']) && function_exists('get_plugin_data')) {
74
- if (strpos($_SERVER['REQUEST_URI'], '/plugins.php') !== false) {
75
- $data = get_plugin_data(_SQ_ROOT_DIR_ . '/squirrly.php');
76
- if (isset($data['Name'])) {
77
- self::$plugin['name'] = $data['Name'];
78
- add_filter('pre_kses', array('SQ_Classes_Tools', 'changeString'), 1, 1);
79
- }
80
- }
81
- }
82
- }
83
- }
84
-
85
- /**
86
- * Check if Dev Kit is installed
87
- * @return mixed|false
88
- */
89
- public static function updatePluginData() {
90
- $package_file = _SQ_ROOT_DIR_ . '/package.json';
91
- if (!file_exists($package_file)) {
92
- return false;
93
- }
94
-
95
- /* load configuration blocks data from core config files */
96
- $config = json_decode(file_get_contents($package_file), 1);
97
- if (isset($config['package'])) {
98
- self::$package = $config['package'];
99
-
100
- if (isset(self::$package['settings']) && !empty(self::$options)) {
101
- self::$options = @array_merge(self::$options, self::$package['settings']);
102
-
103
- if (isset(self::$package['name']) && self::$package['name'] <> '') {
104
- self::$options['sq_name'] = self::$package['name'] . ' - Squirrly Special';
105
- }
106
-
107
- self::saveOptions();
108
- wp_redirect(admin_url('admin.php?page=sq_dashboard'));
109
- }
110
- }
111
-
112
-
113
- //remove the package after activation
114
- @unlink($package_file);
115
- }
116
-
117
- public static function changeString($string) {
118
- if (isset(self::$plugin['name']) && self::getOption('sq_name') <> '') {
119
- return str_replace(self::$plugin['name'], self::getOption('sq_name'), $string);
120
- }
121
- return $string;
122
- }
123
-
124
- /**
125
- * Add a link to settings in the plugin list
126
- *
127
- * @param array $links
128
- * @param type $file
129
- * @return array
130
- */
131
- public function hookActionlink($links, $file) {
132
- if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
133
- $link = '<a href="' . admin_url('admin.php?page=sq_dashboard') . '">' . __('Getting started', _SQ_PLUGIN_NAME_) . '</a>';
134
- array_unshift($links, $link);
135
- }
136
-
137
- return $links;
138
- }
139
-
140
- /**
141
- * Adds extra links to plugin page
142
- */
143
- public function hookExtraLinks($meta, $file, $data, $status) {
144
- if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
145
- echo '<style>
146
- .ml-stars{display:inline-block;color:#ffb900;position:relative;top:3px}
147
- .ml-stars svg{fill:#ffb900}
148
- .ml-stars svg:hover{fill:#ffb900}
149
- .ml-stars svg:hover ~ svg{fill:none}
150
- </style>';
151
-
152
- $meta[] = "<a href='https://howto.squirrly.co/wordpress-seo/' target='_blank'>" . __('Documentation', _SQ_PLUGIN_NAME_) . "</a>";
153
- $meta[] = "<a href='https://wordpress.org/support/plugin/squirrly-seo/reviews/#new-post' target='_blank' title='" . __('Leave a review', _SQ_PLUGIN_NAME_) . "'><i class='ml-stars'><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg></i></a>";
154
- }
155
- return $meta;
156
- }
157
-
158
-
159
- public static function getToken() {
160
- if (get_transient('sq_token')) {
161
- $token = get_transient('sq_token');
162
- } else {
163
- $token = md5(self::generatePassword(32));
164
- set_transient('sq_token', md5($token));
165
- }
166
-
167
- return $token;
168
- }
169
-
170
- /**
171
- * Load the Options from user option table in DB
172
- *
173
- * @return array
174
- */
175
- public static function getOptions($action = '') {
176
- $default = array(
177
- 'sq_ver' => 0,
178
- 'sq_api' => '',
179
- 'sq_logo' => _SQ_THEME_URL_ . 'img/settings/menu_icon_16.png',
180
- 'sq_name' => '',
181
- 'sq_checkedissues' => 0,
182
- 'sq_areissues' => 0,
183
- 'sq_use' => 1,
184
- 'sq_use_frontend' => 1,
185
- 'sq_laterload' => 0,
186
- 'sq_post_types' => array(
187
- 'post', 'page', 'product', 'shopp_page_shopp-products'
188
- ),
189
- 'sq_exclude_post_types' => array(),
190
- 'sq_support_email' => '',
191
- // --
192
- 'sq_auto_canonical' => 1,
193
- 'sq_auto_sitemap' => 0,
194
- 'sq_auto_feed' => 0,
195
- 'sq_auto_noindex' => 1,
196
- 'sq_auto_jsonld' => 0,
197
- 'sq_auto_amp' => 0,
198
- 'sq_jsonld_type' => 'Organization',
199
- 'sq_jsonld' => array(
200
- 'Organization' => array(
201
- 'name' => '',
202
- 'logo' => '',
203
- 'telephone' => '',
204
- 'contactType' => '',
205
- 'description' => ''
206
- ),
207
- 'Person' => array(
208
- 'name' => '',
209
- 'logo' => '',
210
- 'telephone' => '',
211
- 'jobTitle' => '',
212
- 'description' => ''
213
- )),
214
- 'sq_sitemap_ping' => 0,
215
- 'sq_sitemap_show' => array(
216
- 'images' => 1,
217
- 'videos' => 0,
218
- ),
219
- 'sq_sitemap_perpage' => 200,
220
- 'sq_sitemap_frequency' => 'weekly',
221
- 'sq_sitemap_combinelangs' => 1,
222
- 'sq_sitemap' => array(
223
- 'sitemap' => array('sitemap.xml', 1),
224
- 'sitemap-home' => array('sitemap-home.xml', 1),
225
- 'sitemap-news' => array('sitemap-news.xml', 0),
226
- 'sitemap-product' => array('sitemap-product.xml', 1),
227
- 'sitemap-post' => array('sitemap-posts.xml', 1),
228
- 'sitemap-page' => array('sitemap-pages.xml', 1),
229
- 'sitemap-category' => array('sitemap-categories.xml', 1),
230
- 'sitemap-post_tag' => array('sitemap-tags.xml', 1),
231
- 'sitemap-archive' => array('sitemap-archives.xml', 1),
232
- 'sitemap-author' => array('sitemap-authors.xml', 0),
233
- 'sitemap-custom-tax' => array('sitemap-custom-taxonomies.xml', 0),
234
- 'sitemap-custom-post' => array('sitemap-custom-posts.xml', 0),
235
- 'sitemap-attachment' => array('sitemap-attachment.xml', 0),
236
- ),
237
- 'sq_auto_robots' => 1,
238
- 'sq_robots_permission' => array(
239
- 'User-agent: *',
240
- 'Disallow: */trackback/',
241
- 'Disallow: */xmlrpc.php',
242
- 'Disallow: /wp-*.php',
243
- 'Disallow: /cgi-bin/',
244
- 'Disallow: /wp-admin/',
245
- 'Allow: */wp-content/uploads/',),
246
- 'sq_auto_meta' => 1,
247
- 'sq_auto_favicon' => 0,
248
- 'favicon' => '',
249
- 'sq_auto_twitter' => 0,
250
- 'sq_auto_facebook' => 0,
251
- 'sq_og_locale' => 'en_US',
252
- // --
253
- 'sq_auto_title' => 1,
254
- 'sq_auto_description' => 1,
255
- 'sq_auto_keywords' => 1,
256
- // --
257
- 'active_help' => '',
258
- 'ignore_warn' => 0,
259
- 'sq_copyright_agreement' => 0,
260
- 'sq_keyword_help' => 1,
261
- 'sq_keyword_information' => 0,
262
- 'sq_url_fix' => 1,
263
- 'sq_img_licence' => 1,
264
- //Ranking Option
265
- 'sq_google_country' => 'com',
266
- 'sq_google_language' => 'en',
267
- 'sq_google_country_strict' => 0,
268
- 'sq_google_ranksperhour' => 0,
269
- 'sq_google_serpsperhour' => 50,
270
- 'sq_google_last_checked' => 0,
271
- 'sq_google_last_info' => 0,
272
- 'sq_google_show_ignored' => 0,
273
- 'sq_google_serp_active' => 0,
274
- 'sq_google_serp_trial' => 0,
275
- 'sq_google_alert_trial' => 1,
276
- // --
277
- 'sq_affiliate_link' => '',
278
- 'sq_sla' => 1,
279
- 'sq_keywordtag' => 1,
280
- 'sq_local_images' => 1,
281
- 'sq_force_savepost' => 0,
282
- //--
283
- 'sq_dashboard' => 0,
284
- 'sq_analytics' => 0,
285
- 'sq_analytics_google_js' => 'analytics',
286
- 'menu' => array(
287
- 'show_account_info' => 1,
288
- 'show_affiliate' => 1,
289
- 'show_panel' => 1,
290
- 'show_tutorial' => 1,
291
- 'show_audit' => 1,
292
- 'show_ads' => 1,
293
- ),
294
- 'sq_metas' => array(
295
- 'title_maxlength' => 75,
296
- 'description_maxlength' => 320,
297
- 'og_title_maxlength' => 75,
298
- 'og_description_maxlength' => 110,
299
- 'tw_title_maxlength' => 75,
300
- 'tw_description_maxlength' => 280,
301
- 'jsonld_title_maxlength' => 75,
302
- 'jsonld_description_maxlength' => 110,
303
- ),
304
- 'socials' => array(
305
- 'fb_admins' => array(),
306
- 'fbconnectkey' => "",
307
- 'fbadminapp' => "",
308
-
309
- 'facebook_site' => "",
310
- 'twitter_site' => "",
311
- 'twitter' => "",
312
- 'instagram_url' => "",
313
- 'linkedin_url' => "",
314
- 'myspace_url' => "",
315
- 'pinterest_url' => "",
316
- 'youtube_url' => "",
317
- 'twitter_card_type' => "summary",
318
- 'plus_publisher' => ""
319
- ),
320
- 'codes' => array(
321
- 'google_wt' => "",
322
- 'google_analytics' => "",
323
- 'facebook_pixel' => "",
324
-
325
- 'bing_wt' => "",
326
- 'pinterest_verify' => "",
327
- 'alexa_verify' => "",
328
- ),
329
- 'sq_auto_pattern' => 1,
330
- 'patterns' => array(
331
- 'home' => array(
332
- 'sep' => '|',
333
- 'title' => '{{sitename}} {{page}} {{sep}} {{sitedesc}}',
334
- 'description' => '{{excerpt}} {{page}} {{sep}} {{sitename}}',
335
- 'noindex' => 0,
336
- 'nofollow' => 0,
337
- 'disable' => 0,
338
- ),
339
- 'post' => array(
340
- 'sep' => '|',
341
- 'title' => '{{title}} {{page}}',
342
- 'description' => '{{excerpt}}',
343
- 'noindex' => 0,
344
- 'nofollow' => 0,
345
- 'disable' => 0,
346
- ),
347
- 'page' => array(
348
- 'sep' => '|',
349
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
350
- 'description' => '{{excerpt}}',
351
- 'noindex' => 0,
352
- 'nofollow' => 0,
353
- 'disable' => 0,
354
- ),
355
- 'category' => array(
356
- 'sep' => '|',
357
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
358
- 'description' => '{{category_description}}',
359
- 'noindex' => 0,
360
- 'nofollow' => 0,
361
- 'disable' => 0,
362
- ),
363
- 'tag' => array(
364
- 'sep' => '|',
365
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
366
- 'description' => '{{excerpt}}',
367
- 'noindex' => 0,
368
- 'nofollow' => 0,
369
- 'disable' => 0,
370
- ),
371
- 'tax-post_format' => array(
372
- 'sep' => '|',
373
- 'title' => '{{term_title}} ' . __('Format', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
374
- 'description' => '{{excerpt}}',
375
- 'noindex' => 0,
376
- 'nofollow' => 0,
377
- 'disable' => 0,
378
- ),
379
- 'tax-category' => array(
380
- 'sep' => '|',
381
- 'title' => '{{term_title}} ' . __('Category', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
382
- 'description' => '{{excerpt}}',
383
- 'noindex' => 0,
384
- 'nofollow' => 0,
385
- 'disable' => 0,
386
- ),
387
- 'tax-post_tag' => array(
388
- 'sep' => '|',
389
- 'title' => '{{term_title}} ' . __('Tag', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
390
- 'description' => '{{excerpt}}',
391
- 'noindex' => 0,
392
- 'nofollow' => 0,
393
- 'disable' => 0,
394
- ),
395
- 'tax-product_cat' => array(
396
- 'sep' => '|',
397
- 'title' => '{{term_title}} ' . __('Category', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
398
- 'description' => '{{excerpt}}',
399
- 'noindex' => 0,
400
- 'nofollow' => 0,
401
- 'disable' => 0,
402
- ),
403
- 'tax-product_tag' => array(
404
- 'sep' => '|',
405
- 'title' => '{{term_title}} ' . __('Tag', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
406
- 'description' => '{{excerpt}}',
407
- 'noindex' => 0,
408
- 'nofollow' => 0,
409
- 'disable' => 0,
410
- ),
411
- 'tax-product_shipping_class' => array(
412
- 'sep' => '|',
413
- 'title' => '{{term_title}} ' . __('Shipping Option', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
414
- 'description' => '{{excerpt}}',
415
- 'noindex' => 0,
416
- 'nofollow' => 0,
417
- 'disable' => 0,
418
- ),
419
- 'profile' => array(
420
- 'sep' => '|',
421
- 'title' => '{{name}}, ' . __('Author at', _SQ_PLUGIN_NAME_) . ' {{sitename}} {{page}}',
422
- 'description' => '{{excerpt}}',
423
- 'noindex' => 0,
424
- 'nofollow' => 0,
425
- 'disable' => 0,
426
- ),
427
- 'shop' => array(
428
- 'sep' => '|',
429
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
430
- 'description' => '{{excerpt}}',
431
- 'noindex' => 0,
432
- 'nofollow' => 0,
433
- 'disable' => 0,
434
- ),
435
- 'product' => array(
436
- 'sep' => '|',
437
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
438
- 'description' => '{{excerpt}}',
439
- 'noindex' => 0,
440
- 'nofollow' => 0,
441
- 'disable' => 0,
442
- ),
443
- 'archive' => array(
444
- 'sep' => '|',
445
- 'title' => '{{date}} {{page}} {{sep}} {{sitename}}',
446
- 'description' => '{{excerpt}}',
447
- 'noindex' => 0,
448
- 'nofollow' => 0,
449
- 'disable' => 0,
450
- ),
451
- 'search' => array(
452
- 'sep' => '|',
453
- 'title' => __('You searched for', _SQ_PLUGIN_NAME_) . ' {{searchphrase}} {{page}} {{sep}} {{sitename}}',
454
- 'description' => '{{excerpt}}',
455
- 'noindex' => 1,
456
- 'nofollow' => 0,
457
- 'disable' => 0,
458
- ),
459
- 'attachment' => array(
460
- 'sep' => '|',
461
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
462
- 'description' => '{{excerpt}}',
463
- 'noindex' => 0,
464
- 'nofollow' => 0,
465
- 'disable' => 0,
466
- ),
467
- '404' => array(
468
- 'sep' => '|',
469
- 'title' => __('Page not found', _SQ_PLUGIN_NAME_) . ' {{sep}} {{sitename}}',
470
- 'description' => '{{excerpt}}',
471
- 'noindex' => 1,
472
- 'nofollow' => 1,
473
- 'disable' => 0,
474
- ),
475
- 'custom' => array(
476
- 'sep' => '|',
477
- 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
478
- 'description' => '{{excerpt}}',
479
- 'noindex' => 0,
480
- 'nofollow' => 0,
481
- 'disable' => 0,
482
- ),
483
- )
484
- );
485
- $options = json_decode(get_option(SQ_OPTION), true);
486
-
487
- if ($action == 'reset') {
488
- $init['sq_ver'] = $options['sq_ver'];
489
- $init['sq_api'] = $options['sq_api'];
490
- return $init;
491
- }
492
-
493
- if (is_array($options)) {
494
- $options = @array_merge($default, $options);
495
- return $options;
496
- }
497
-
498
- return $default;
499
- }
500
-
501
- /**
502
- * Get the option from database
503
- * @param $key
504
- * @return mixed
505
- */
506
- public static function getOption($key) {
507
- if (!isset(self::$options[$key])) {
508
- self::$options = self::getOptions();
509
-
510
- if (!isset(self::$options[$key])) {
511
- self::$options[$key] = false;
512
- }
513
- }
514
-
515
- return apply_filters('sq_option_' . $key, self::$options[$key]);
516
- }
517
-
518
- //Get the package info in case of custom details
519
- public static function getPackageInfo($key) {
520
- if (isset(self::$package[$key])) {
521
- return self::$package[$key];
522
- }
523
-
524
- return false;
525
- }
526
-
527
- /**
528
- * Get user metas
529
- * @param null $user_id
530
- * @return array|mixed
531
- */
532
- public static function getUserMetas($user_id = null) {
533
- if (!isset($user_id)) {
534
- $user_id = get_current_user_id();
535
- }
536
-
537
- $default = array('sq_auto_sticky' => 0,);
538
-
539
- $usermeta = get_user_meta($user_id);
540
- $usermetatmp = array();
541
- if (is_array($usermeta)) foreach ($usermeta as $key => $values) {
542
- $usermetatmp[$key] = $values[0];
543
- }
544
- $usermeta = $usermetatmp;
545
-
546
- if (is_array($usermeta)) {
547
- $usermeta = @array_merge($default, $usermeta);
548
- } else {
549
- $usermeta = $default;
550
- }
551
- self::$usermeta = $usermeta;
552
- return $usermeta;
553
- }
554
-
555
- /**
556
- * Get use meta
557
- * @param $value
558
- * @return bool
559
- */
560
- public static function getUserMeta($value) {
561
- if (!isset(self::$usermeta[$value])) {
562
- self::getUserMetas();
563
- }
564
-
565
- if (isset(self::$usermeta[$value])) {
566
- return apply_filters('sq_usermeta_' . $value, self::$usermeta[$value]);
567
- }
568
-
569
- return false;
570
- }
571
-
572
- /**
573
- * Save user meta
574
- * @param $key
575
- * @param $value
576
- * @param null $user_id
577
- */
578
- public static function saveUserMeta($key, $value, $user_id = null) {
579
- if (!isset($user_id)) {
580
- $user_id = get_current_user_id();
581
- }
582
- self::$usermeta[$key] = $value;
583
- update_user_meta($user_id, $key, $value);
584
- }
585
-
586
- /**
587
- * Delete User meta
588
- * @param $key
589
- * @param null $user_id
590
- */
591
- public static function deleteUserMeta($key, $user_id = null) {
592
- if (!isset($user_id)) {
593
- $user_id = get_current_user_id();
594
- }
595
- unset(self::$usermeta[$key]);
596
- delete_user_meta($user_id, $key);
597
- }
598
-
599
- /**
600
- * Send completed tasks from tutorial
601
- * @return array
602
- */
603
- public static function getBriefOptions() {
604
- $jsonld = self::getOption('sq_jsonld');
605
- $socials = self::getOption('socials');
606
- $codes = self::getOption('codes');
607
-
608
- return array(
609
- 'sq_version' => SQ_VERSION_ID,
610
- 'sq_use' => self::getOption('sq_use'),
611
- 'sq_token' => self::getToken(),
612
- 'sq_rest' => (function_exists('rest_get_url_prefix') ? rest_get_url_prefix() : ''),
613
- 'sq_checkedissues' => self::getOption('sq_checkedissues'),
614
- 'sq_areissues' => self::getOption('sq_areissues'),
615
- 'sq_auto_canonical' => self::getOption('sq_auto_canonical'),
616
- 'sq_auto_meta' => self::getOption('sq_auto_meta'),
617
- 'sq_auto_sitemap' => self::getOption('sq_auto_sitemap'),
618
- 'sq_auto_jsonld' => (self::getOption('sq_auto_jsonld') && ($jsonld['Organization']['name'] <> '' || $jsonld['Person']['name'] <> '')),
619
- 'sq_sitemap_ping' => SQ_Classes_Tools::getOption('sq_sitemap_ping'),
620
- 'sq_auto_robots' => SQ_Classes_Tools::getOption('sq_auto_robots'),
621
- 'sq_auto_favicon' => (SQ_Classes_Tools::getOption('sq_auto_favicon') && SQ_Classes_Tools::getOption('favicon') <> ''),
622
- 'sq_auto_twitter' => SQ_Classes_Tools::getOption('sq_auto_twitter'),
623
- 'sq_auto_facebook' => SQ_Classes_Tools::getOption('sq_auto_facebook'),
624
- 'sq_auto_seo' => 1,
625
- 'sq_auto_title' => (int)(SQ_Classes_Tools::getOption('sq_auto_title') == 1),
626
- 'sq_auto_description' => (int)(SQ_Classes_Tools::getOption('sq_auto_description') == 1),
627
- 'sq_auto_keywords' => (int)(SQ_Classes_Tools::getOption('sq_auto_keywords') == 1),
628
- 'sq_auto_noindex' => (int)(SQ_Classes_Tools::getOption('sq_auto_noindex') == 1),
629
- 'sq_google_wt' => (int)($codes['google_wt'] <> ''),
630
- 'sq_google_analytics' => (int)($codes['google_analytics'] <> ''),
631
- 'sq_google_serpsperhour' => (int)SQ_Classes_Tools::getOption('sq_google_serpsperhour'),
632
- 'sq_facebook_insights' => (int)(!empty($socials['sq_facebook_insights'])),
633
- 'sq_bing_wt' => (int)($codes['bing_wt'] <> ''),
634
- 'sq_pinterest' => (int)($codes['pinterest_verify'] <> ''),
635
- 'sq_alexa' => (int)($codes['alexa_verify'] <> ''),
636
- 'sq_keyword_help' => SQ_Classes_Tools::getOption('sq_keyword_help'),
637
- 'sq_keyword_information' => SQ_Classes_Tools::getOption('sq_keyword_information'),
638
- 'sq_google_language' => SQ_Classes_Tools::getOption('sq_google_language'),
639
- 'sq_google_country' => SQ_Classes_Tools::getOption('sq_google_country'),
640
- 'sq_google_country_strict' => SQ_Classes_Tools::getOption('sq_google_country_strict'),
641
- 'sq_keywordtag' => SQ_Classes_Tools::getOption('sq_keywordtag'),
642
- 'sq_local_images' => SQ_Classes_Tools::getOption('sq_local_images'),
643
- );
644
-
645
- }
646
-
647
- /**
648
- * Save the Options in user option table in DB
649
- *
650
- * @return void
651
- */
652
- public static function saveOptions($key = null, $value = '') {
653
- if (isset($key)) {
654
- self::$options[$key] = $value;
655
- }
656
-
657
- update_option(SQ_OPTION, json_encode(self::$options));
658
- }
659
-
660
- /**
661
- * Set the header type
662
- * @param string $type
663
- */
664
- public static function setHeader($type) {
665
- if (SQ_Classes_Tools::getValue('sq_debug') == 'on') {
666
- if (self::isAjax()) {
667
- header("Content-type: text/html");
668
- }
669
- return;
670
- }
671
-
672
- switch ($type) {
673
- case 'json':
674
- header('Content-Type: application/json');
675
- break;
676
- case 'ico':
677
- header('Content-Type: image/x-icon');
678
- break;
679
- case 'png':
680
- header('Content-Type: image/png');
681
- break;
682
- case'text':
683
- header("Content-type: text/plain");
684
- break;
685
- case'html':
686
- header("Content-type: text/html");
687
- break;
688
- }
689
- }
690
-
691
- /**
692
- * Get a value from $_POST / $_GET
693
- * if unavailable, take a default value
694
- *
695
- * @param string $key Value key
696
- * @param mixed $defaultValue (optional)
697
- * @param bool $htmlcode
698
- * @param bool $keep_newlines
699
- * @return mixed Value
700
- */
701
- public static function getValue($key, $defaultValue = false, $htmlcode = false, $keep_newlines = false) {
702
- if (!isset($key) OR empty($key) OR !is_string($key))
703
- return false;
704
- $ret = (isset($_POST[$key]) ? (is_string($_POST[$key]) ? rawurldecode($_POST[$key]) : $_POST[$key]) : (isset($_GET[$key]) ? (is_string($_GET[$key]) ? rawurldecode($_GET[$key]) : $_GET[$key]) : $defaultValue));
705
-
706
- if (is_string($ret) === true && $htmlcode === false) {
707
- if ($keep_newlines && function_exists('sanitize_textarea_field')) {
708
- $ret = sanitize_textarea_field($ret);
709
- } else {
710
- $ret = sanitize_text_field($ret);
711
- }
712
- }
713
-
714
- return !is_string($ret) ? $ret : stripslashes($ret);
715
- }
716
-
717
- /**
718
- * Check if the parameter is set
719
- *
720
- * @param string $key
721
- * @return boolean
722
- */
723
- public static function getIsset($key) {
724
- if (!isset($key) OR empty($key) OR !is_string($key))
725
- return false;
726
- return isset($_POST[$key]) ? true : (isset($_GET[$key]) ? true : false);
727
- }
728
-
729
- /**
730
- * Show the notices to WP
731
- *
732
- * @return string
733
- */
734
- public static function showNotices($message, $type = 'sq_notices') {
735
- if (file_exists(_SQ_THEME_DIR_ . 'Notices.php')) {
736
- ob_start();
737
- include(_SQ_THEME_DIR_ . 'Notices.php');
738
- $message = ob_get_contents();
739
- ob_end_clean();
740
- }
741
-
742
- return $message;
743
- }
744
-
745
- /**
746
- * Load the multilanguage support from .mo
747
- */
748
- private function loadMultilanguage() {
749
- if (!defined('WP_PLUGIN_DIR')) {
750
- load_plugin_textdomain(_SQ_PLUGIN_NAME_, _SQ_PLUGIN_NAME_ . '/languages/');
751
- } else {
752
- load_plugin_textdomain(_SQ_PLUGIN_NAME_, null, _SQ_PLUGIN_NAME_ . '/languages/');
753
- }
754
- }
755
-
756
- /**
757
- * Connect remote with CURL if exists
758
- */
759
- public static function sq_remote_get($url, $param = array(), $options = array()) {
760
- $parameters = '';
761
- $cookies = array();
762
- $cookie_string = '';
763
-
764
- $url_domain = parse_url($url);
765
- if (isset($url_domain['host'])) {
766
- $url_domain = $url_domain['host'];
767
- } else {
768
- $url_domain = '';
769
- }
770
-
771
- if (isset($param)) {
772
- foreach ($param as $key => $value) {
773
- if (isset($key) && $key <> '' && $key <> 'timeout') {
774
- $parameters .= ($parameters == "" ? "" : "&") . $key . "=" . $value;
775
- }
776
- }
777
- }
778
-
779
- if ($parameters <> '') {
780
- $url .= ((strpos($url, "?") === false) ? "?" : "&") . $parameters;
781
- }
782
-
783
- //send the cookie for preview
784
- $server_domain = '';
785
- if (isset($_SERVER['HTTP_HOST'])) {
786
- $server_domain = $_SERVER['HTTP_HOST'];
787
- } elseif (isset($_SERVER['SERVER_NAME'])) {
788
- $server_domain = $_SERVER['SERVER_NAME'];
789
- }
790
-
791
- if ($url_domain == $server_domain && strpos($url, 'preview=true') !== false) {
792
- foreach ($_COOKIE as $name => $value) {
793
- if (strpos($name, 'wordpress') !== false || strpos($name, 'wp') !== false || strpos($name, 'slimstat') !== false || strpos($name, 'sforum') !== false) {
794
- $cookies[] = new WP_Http_Cookie(array('name' => $name, 'value' => $value));
795
- $cookie_string .= "$name=$value;";
796
- }
797
- }
798
- }
799
-
800
- $options['timeout'] = (isset($options['timeout'])) ? $options['timeout'] : 30;
801
- if (!isset($options['cookie_string'])) {
802
- $options['cookies'] = $cookies;
803
- $options['cookie_string'] = $cookie_string;
804
- }
805
- $options['sslverify'] = false;
806
-
807
-
808
- if (function_exists('curl_init') && !ini_get('open_basedir')) {
809
- $response = self::sq_curl($url, $options, 'get');
810
- } else {
811
- if (!$response = self::sq_wpcall($url, $options, 'get')) {
812
- return false;
813
- }
814
- }
815
-
816
- return $response;
817
- }
818
-
819
- /**
820
- * Connect remote with CURL if exists
821
- */
822
- public static function sq_remote_post($url, $param = array(), $options = array()) {
823
- $parameters = '';
824
- $cookies = array();
825
- $cookie_string = '';
826
-
827
- $url_domain = parse_url($url);
828
- if (isset($url_domain['host'])) {
829
- $url_domain = $url_domain['host'];
830
- } else {
831
- $url_domain = '';
832
- }
833
-
834
- if (isset($param)) {
835
- foreach ($param as $key => $value) {
836
- if (isset($key) && $key <> '' && $key <> 'timeout') {
837
- $parameters .= ($parameters == "" ? "" : "&") . $key . "=" . $value;
838
- }
839
- }
840
- }
841
-
842
- if ($parameters <> '') {
843
- $url .= ((strpos($url, "?") === false) ? "?" : "&") . $parameters;
844
- }
845
-
846
- //send the cookie for preview
847
- $server_domain = '';
848
- if (isset($_SERVER['HTTP_HOST'])) {
849
- $server_domain = $_SERVER['HTTP_HOST'];
850
- } elseif (isset($_SERVER['SERVER_NAME'])) {
851
- $server_domain = $_SERVER['SERVER_NAME'];
852
- }
853
-
854
- if ($url_domain == $server_domain && strpos($url, 'preview=true') !== false) {
855
- foreach ($_COOKIE as $name => $value) {
856
- $cookies[] = new WP_Http_Cookie(array('name' => $name, 'value' => $value));
857
- $cookie_string .= "$name=$value;";
858
- }
859
- }
860
-
861
- $options['timeout'] = (isset($options['timeout'])) ? $options['timeout'] : 30;
862
- if (!isset($options['cookie_string'])) {
863
- $options['cookies'] = $cookies;
864
- $options['cookie_string'] = $cookie_string;
865
- }
866
- $options['sslverify'] = false;
867
-
868
- if (function_exists('curl_init') && !ini_get('open_basedir')) {
869
- $response = self::sq_curl($url, $options, 'post');
870
- } else {
871
- if (!$response = self::sq_wpcall($url, $options, 'post')) {
872
- return false;
873
- }
874
- }
875
-
876
-
877
- return $response;
878
- }
879
-
880
- /**
881
- * Call remote UR with CURL
882
- * @param string $url
883
- * @param array $param
884
- * @return string
885
- */
886
- private static function sq_curl($url, $options, $method = 'get') {
887
-
888
- $ch = curl_init();
889
- curl_setopt($ch, CURLOPT_URL, $url);
890
- curl_setopt($ch, CURLOPT_HEADER, false);
891
- //--
892
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
893
-
894
- //--
895
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
896
- curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
897
-
898
- if ($method == 'post') {
899
- curl_setopt($ch, CURLOPT_POST, 1);
900
- }
901
-
902
- if (isset($options['sslverify'])) {
903
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
904
- } else {
905
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
906
- }
907
-
908
- if (isset($options['followlocation'])) {
909
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
910
- curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
911
- }
912
-
913
- if ($options['cookie_string'] <> '') {
914
- curl_setopt($ch, CURLOPT_COOKIE, $options['cookie_string']);
915
- }
916
-
917
- if (isset($options['User-Agent']) && $options['User-Agent'] <> '') {
918
- curl_setopt($ch, CURLOPT_USERAGENT, $options['User-Agent']);
919
- }
920
- $response = curl_exec($ch);
921
- $response = self::cleanResponce($response);
922
-
923
- self::dump('CURL', $method, $url, $options, $ch, $response); //output debug
924
-
925
- if (curl_errno($ch) == 1 || $response === false) { //if protocol not supported
926
- if (curl_errno($ch)) {
927
- self::dump(curl_getinfo($ch), curl_errno($ch), curl_error($ch));
928
- }
929
- curl_close($ch);
930
- $response = self::sq_wpcall($url, $options); //use the wordpress call
931
- } else {
932
- curl_close($ch);
933
- }
934
-
935
- return $response;
936
- }
937
-
938
- /**
939
- * Use the WP remote call
940
- * @param string $url
941
- * @param array $param
942
- * @return string
943
- */
944
- private static function sq_wpcall($url, $options, $method = 'get') {
945
- if ($method == 'post') {
946
- $response = wp_remote_post($url, $options);
947
- } else {
948
- $response = wp_remote_get($url, $options);
949
- }
950
- if (is_wp_error($response)) {
951
- self::dump($response);
952
- return false;
953
- }
954
-
955
- $response = self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body
956
- self::dump('wp_remote_get', $method, $url, $options, $response); //output debug
957
- return $response;
958
- }
959
-
960
- /**
961
- * Connect remote with CURL if exists
962
- */
963
- public static function sq_remote_head($url) {
964
- $response = array();
965
-
966
- if (function_exists('curl_exec')) {
967
- $ch = curl_init($url);
968
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
969
- curl_setopt($ch, CURLOPT_TIMEOUT, 30);
970
- curl_exec($ch);
971
-
972
- $response['headers']['content-type'] = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
973
- $response['response']['code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
974
- curl_close($ch);
975
-
976
- return $response;
977
- } else {
978
- return wp_remote_head($url, array('timeout' => 30));
979
- }
980
-
981
- return false;
982
- }
983
-
984
- /**
985
- * Get the Json from responce if any
986
- * @param string $response
987
- * @return string
988
- */
989
- private static function cleanResponce($response) {
990
- return trim($response, '()');
991
- }
992
-
993
- /**
994
- * Check for SEO blog bad settings
995
- */
996
- public static function checkErrorSettings($count_only = false) {
997
- if (current_user_can('manage_options')) {
998
-
999
- $fixit = "<a href=\"javascript:void(0);\" onclick=\"%sjQuery(this).closest('div').fadeOut('slow'); if(parseInt(jQuery('.sq_count').html())>0) { var notif = (parseInt(jQuery('.sq_count').html()) - 1); if (notif > 0) {jQuery('.sq_count').html(notif); }else{ jQuery('.sq_count').html(notif); jQuery('.sq_count').hide(); } } jQuery.post(ajaxurl, { action: '%s', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'});\" >" . __("Fix it for me!", _SQ_PLUGIN_NAME_) . "</a>";
1000
-
1001
- /* IF SEO INDEX IS OFF */
1002
- if (self::getAutoSeoSquirrly()) {
1003
- self::$errors_count++;
1004
- if (!$count_only) {
1005
- SQ_Classes_Error::setError(__('Activate the Squirrly SEO for your blog (recommended)', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_use_on').trigger('click');", "sq_fixautoseo") . "", 'settings', 'sq_fix_auto');
1006
- }
1007
- }
1008
-
1009
- //check only when in seo settings
1010
- self::$source_code = self::sq_remote_get(get_bloginfo('url'), array(), array('timeout' => 5, 'followlocation' => true));
1011
- if (self::$source_code <> '') {
1012
- /* IF TITLE DUPLICATES */
1013
- if (self::getDuplicateTitle()) {
1014
- self::$errors_count++;
1015
- if (!$count_only) {
1016
- SQ_Classes_Error::setError(__('You have META Title Duplicates. Disable the Squirrly Title Optimization or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_title0').attr('checked', true); jQuery('#sq_automatically').attr('checked', true);", "sq_fix_titleduplicate") . "", 'settings', 'sq_fix_descduplicate');
1017
- }
1018
- }
1019
-
1020
- /* IF DESCRIPTION DUPLICATES */
1021
- if (self::getDuplicateDescription()) {
1022
- self::$errors_count++;
1023
- if (!$count_only) {
1024
- SQ_Classes_Error::setError(__('You have META Description Duplicates. Disable the Squirrly Description Optimization or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_description0').attr('checked', true); jQuery('#sq_automatically').attr('checked', true);", "sq_fix_descduplicate") . "", 'settings', 'sq_fix_descduplicate');
1025
- }
1026
- }
1027
-
1028
- /* IF OG DUPLICATES */
1029
- if (self::getDuplicateOG()) {
1030
- self::$errors_count++;
1031
- if (!$count_only) {
1032
- SQ_Classes_Error::setError(__('You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_facebook0').attr('checked', true);", "sq_fix_ogduplicate") . "", 'settings', 'sq_fix_ogduplicate');
1033
- }
1034
- }
1035
-
1036
- /* IF TWITTER CARD DUPLICATES */
1037
- if (self::getDuplicateTC()) {
1038
- self::$errors_count++;
1039
- if (!$count_only) {
1040
- SQ_Classes_Error::setError(__('You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_twitter0').attr('checked', true);", "sq_fix_tcduplicate") . "", 'settings', 'sq_fix_tcduplicate');
1041
- }
1042
- }
1043
- }
1044
-
1045
- /* IF SEO INDEX IS OFF */
1046
- if (self::getPrivateBlog()) {
1047
- self::$errors_count++;
1048
- if (!$count_only) {
1049
- SQ_Classes_Error::setError(__('You\'re blocking google from indexing your site!', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_google_index1').attr('checked',true);", "sq_fixprivate") . "", 'settings', 'sq_fix_private');
1050
- }
1051
- }
1052
-
1053
- if (self::getBadLinkStructure()) {
1054
- self::$errors_count++;
1055
- if (!$count_only) {
1056
- SQ_Classes_Error::setError(__('It is highly recommended that you include the %postname% variable in the permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ in Custom Structure', _SQ_PLUGIN_NAME_) . " <br /> ", 'settings');
1057
- }
1058
- }
1059
-
1060
- if (self::getDefaultTagline()) {
1061
- self::$errors_count++;
1062
- if (!$count_only) {
1063
- SQ_Classes_Error::setError(__('It is highly recommended to change or remove the default Wordpress Tagline. <br />Go to Settings > General > Tagline', _SQ_PLUGIN_NAME_) . " <br /> ", 'settings');
1064
- }
1065
- }
1066
-
1067
- if (self::$errors_count == 0) {
1068
- self::saveOptions('sq_areissues', 0);
1069
- SQ_Classes_Error::setError(__('Great! We didn\'t find any issue in your site.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
1070
- } else {
1071
- self::saveOptions('sq_areissues', 1);
1072
- }
1073
- }
1074
- }
1075
-
1076
- /**
1077
- * Check if the automatically seo si active
1078
- * @return bool
1079
- */
1080
- private static function getAutoSeoSquirrly() {
1081
- return (!self::getOption('sq_use'));
1082
- }
1083
-
1084
- /**
1085
- * Check for META duplicates
1086
- * @return boolean
1087
- */
1088
- private static function getDuplicateOG() {
1089
- if (!function_exists('preg_match_all')) {
1090
- return false;
1091
- }
1092
-
1093
- if (self::getOption('sq_use') && self::getOption('sq_auto_facebook')) {
1094
-
1095
- if (self::$source_code <> '') {
1096
- preg_match_all("/<meta[\s+]property=[\"|\']og:url[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
1097
- if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1098
- return (sizeof($out[0]) > 1);
1099
- }
1100
- }
1101
- }
1102
-
1103
- return false;
1104
- }
1105
-
1106
- /**
1107
- * Check for META duplicates
1108
- * @return boolean
1109
- */
1110
- private static function getDuplicateTC() {
1111
- if (!function_exists('preg_match_all')) {
1112
- return false;
1113
- }
1114
-
1115
- if (self::getOption('sq_use') && self::getOption('sq_auto_twitter')) {
1116
-
1117
- if (self::$source_code <> '') {
1118
- preg_match_all("/<meta[\s+]name=[\"|\']twitter:card[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
1119
- if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1120
- return (sizeof($out[0]) > 1);
1121
- }
1122
- }
1123
- }
1124
-
1125
- return false;
1126
- }
1127
-
1128
- /**
1129
- * Check for META duplicates
1130
- * @return boolean
1131
- */
1132
- private static function getDuplicateDescription() {
1133
- if (!function_exists('preg_match_all')) {
1134
- return false;
1135
- }
1136
- $total = 0;
1137
-
1138
- if (self::getOption('sq_use') && self::$options['sq_auto_description'] == 1) {
1139
- if (self::$source_code <> '') {
1140
- preg_match_all("/<meta[^>]*name=[\"|\']description[\"|\'][^>]*content=[\"]([^\"]*)[\"][^>]*>/i", self::$source_code, $out);
1141
- if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1142
- $total += sizeof($out[0]);
1143
- }
1144
- preg_match_all("/<meta[^>]*content=[\"]([^\"]*)[\"][^>]*name=[\"|\']description[\"|\'][^>]*>/i", self::$source_code, $out);
1145
- if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1146
- $total += sizeof($out[0]);
1147
- }
1148
- }
1149
- }
1150
-
1151
- return ($total > 1);
1152
- }
1153
-
1154
- /**
1155
- * Check for META duplicates
1156
- * @return boolean
1157
- */
1158
- private static function getDuplicateTitle() {
1159
- if (!function_exists('preg_match_all')) {
1160
- return false;
1161
- }
1162
- $total = 0;
1163
-
1164
- if (self::getOption('sq_use') && self::$options['sq_auto_title'] == 1) {
1165
- if (self::$source_code <> '') {
1166
- preg_match_all("/<title[^>]*>(.*)?<\/title>/i", self::$source_code, $out);
1167
-
1168
- if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1169
- $total += sizeof($out[0]);
1170
- }
1171
- preg_match_all("/<meta[^>]*name=[\"|\']title[\"|\'][^>]*content=[\"|\']([^>\"]*)[\"|\'][^>]*>/i", self::$source_code, $out);
1172
- if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1173
- $total += sizeof($out[0]);
1174
- }
1175
- }
1176
- }
1177
-
1178
- return ($total > 1);
1179
- }
1180
-
1181
- /**
1182
- * Check if the blog is in private mode
1183
- * @return bool
1184
- */
1185
- public static function getPrivateBlog() {
1186
- return ((int)get_option('blog_public') == 0);
1187
- }
1188
-
1189
- /**
1190
- * Check if the blog has a bad link structure
1191
- * @return bool
1192
- */
1193
- private static function getBadLinkStructure() {
1194
- global $wp_rewrite;
1195
- if (function_exists('apache_get_modules')) {
1196
- //Check if mod_rewrite is installed in apache
1197
- if (!in_array('mod_rewrite', apache_get_modules()))
1198
- return false;
1199
- }
1200
-
1201
- $home_path = get_home_path();
1202
- $htaccess_file = $home_path . '.htaccess';
1203
-
1204
- if ((!file_exists($htaccess_file) && @is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks()) || @is_writable($htaccess_file)) {
1205
- $link = get_option('permalink_structure');
1206
- if ($link == '')
1207
- return true;
1208
- }
1209
- }
1210
-
1211
- private static function getDefaultTagline() {
1212
- $blog_description = get_bloginfo('description');
1213
- $default_blog_description = 'Just another WordPress site';
1214
- $translated_blog_description = __('Just another WordPress site');
1215
- return $translated_blog_description === $blog_description || $default_blog_description === $blog_description;
1216
- }
1217
-
1218
- /**
1219
- * Support for i18n with wpml, polyglot or qtrans
1220
- *
1221
- * @param string $in
1222
- * @return string $in localized
1223
- */
1224
- public static function i18n($in) {
1225
- if (function_exists('langswitch_filter_langs_with_message')) {
1226
- $in = langswitch_filter_langs_with_message($in);
1227
- }
1228
- if (function_exists('polyglot_filter')) {
1229
- $in = polyglot_filter($in);
1230
- }
1231
- if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) {
1232
- $in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($in);
1233
- }
1234
- $in = apply_filters('localization', $in);
1235
- return $in;
1236
- }
1237
-
1238
- /**
1239
- * Convert integer on the locale format.
1240
- *
1241
- * @param int $number The number to convert based on locale.
1242
- * @param int $decimals Precision of the number of decimal places.
1243
- * @return string Converted number in string format.
1244
- */
1245
- public static function i18n_number_format($number, $decimals = 0) {
1246
- global $wp_locale;
1247
- $formatted = number_format($number, absint($decimals), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep']);
1248
- return apply_filters('number_format_i18n', $formatted);
1249
- }
1250
-
1251
- public static function clearTitle($title) {
1252
- if ($title <> '') {
1253
- $title = str_replace(array("\n", "&nbsp;"), " ", $title);
1254
-
1255
- $title = self::i18n(trim(esc_html(ent2ncr(strip_tags($title)))));
1256
-
1257
- $title = preg_replace('/\s{2,}/', ' ', $title);
1258
- }
1259
- return $title;
1260
- }
1261
-
1262
- public static function clearDescription($description) {
1263
- if ($description <> '') {
1264
- if (function_exists('preg_replace')) {
1265
- $search = array("'<script[^>]*?>.*?<\/script>'si", // strip out javascript
1266
- "/<form.*?<\/form>/si",
1267
- "/<iframe.*?<\/iframe>/si",
1268
- );
1269
- $description = preg_replace($search, "", $description);
1270
- $search = array(
1271
- "/[\n\r]/si",
1272
- "/&nbsp;/si",
1273
- "/\s{2,}/",
1274
- );
1275
- $description = preg_replace($search, " ", $description);
1276
- }
1277
-
1278
- $description = self::i18n(trim(esc_html(ent2ncr(strip_tags($description)))));
1279
- }
1280
-
1281
- return $description;
1282
- }
1283
-
1284
- public static function clearKeywords($keywords) {
1285
- return self::clearTitle($keywords);
1286
- }
1287
-
1288
- public static function getBrowserInfo() {
1289
- $ub = '';
1290
- $u_agent = $_SERVER['HTTP_USER_AGENT'];
1291
- $bname = 'Unknown';
1292
- $platform = 'Unknown';
1293
- $version = "";
1294
- if (!function_exists('preg_match'))
1295
- return false;
1296
-
1297
- //First get the platform?
1298
- if (preg_match('/linux/i', $u_agent)) {
1299
- $platform = 'linux';
1300
- } elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
1301
- $platform = 'mac';
1302
- } elseif (preg_match('/windows|win32/i', $u_agent)) {
1303
- $platform = 'windows';
1304
- }
1305
-
1306
- // Next get the name of the useragent yes seperately and for good reason
1307
- if (preg_match('/MSIE/i', $u_agent) && !preg_match('/Opera/i', $u_agent)) {
1308
- $bname = 'IE';
1309
- $ub = "MSIE";
1310
- } elseif (preg_match('/Firefox/i', $u_agent)) {
1311
- $bname = 'Mozilla Firefox';
1312
- $ub = "Firefox";
1313
- } elseif (preg_match('/Chrome/i', $u_agent)) {
1314
- $bname = 'Google Chrome';
1315
- $ub = "Chrome";
1316
- } elseif (preg_match('/Safari/i', $u_agent)) {
1317
- $bname = 'Apple Safari';
1318
- $ub = "Safari";
1319
- } elseif (preg_match('/Opera/i', $u_agent)) {
1320
- $bname = 'Opera';
1321
- $ub = "Opera";
1322
- } elseif (preg_match('/Netscape/i', $u_agent)) {
1323
- $bname = 'Netscape';
1324
- $ub = "Netscape";
1325
- }
1326
-
1327
- // finally get the correct version number
1328
- $known = array('Version', $ub, 'other');
1329
- $pattern = '#(?' . join('|', $known) . ')[/ ]+(?[0-9.|a-zA-Z.]*)#';
1330
-
1331
- if (strpos($u_agent, 'MSIE 7.0;') !== false) {
1332
- $version = 7.0;
1333
- }
1334
-
1335
- if ($version == null || $version == "") {
1336
- $version = "0";
1337
- }
1338
-
1339
- return array(
1340
- 'userAgent' => $u_agent,
1341
- 'name' => $bname,
1342
- 'version' => $version,
1343
- 'platform' => $platform,
1344
- 'pattern' => $pattern
1345
- );
1346
- }
1347
-
1348
- /**
1349
- *
1350
- * @param string $url
1351
- * @return array | false
1352
- */
1353
- public static function getSnippet($url) {
1354
- if ($url == '' || !function_exists('preg_match')) {
1355
- return false;
1356
- }
1357
-
1358
-
1359
- $post_id = 0;
1360
- $snippet = array();
1361
-
1362
- if ($post_id == 0) {
1363
- $post_id = url_to_postid($url);
1364
- } elseif ($url == get_bloginfo('url')) {
1365
- if (!$post_id = get_option('page_on_front'))
1366
- ($post_id = get_option('page_for_posts'));
1367
- }
1368
-
1369
-
1370
- if ($post_id > 0) {
1371
- if ($post = SQ_Classes_ObjController::getClass('SQ_Controllers_Menu')->setPostByID($post_id)) {
1372
- $snippet['title'] = (self::getOption('sq_auto_title') ? $post->sq->title : $post->post_title);
1373
- $snippet['description'] = (self::getOption('sq_auto_description') ? $post->sq->description : $post->post_excerpt);
1374
- $snippet['url'] = $url;
1375
- }
1376
- } elseif ($url == home_url()) {
1377
- $post = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Post');
1378
- $post->debug = 'isHomePage';
1379
- $post->post_type = 'home';
1380
- $post->hash = md5('wp_homepage');
1381
- $post->url = home_url();
1382
-
1383
- $post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost($post)->getPost();
1384
- $snippet['title'] = (self::getOption('sq_auto_title') ? $post->sq->title : get_bloginfo('name'));
1385
- $snippet['description'] = (self::getOption('sq_auto_description') ? $post->sq->description : get_bloginfo('description'));
1386
- $snippet['url'] = $url;
1387
- } else {
1388
- $length = array('title' => 66,
1389
- 'description' => 240,
1390
- 'url' => 45);
1391
-
1392
- self::$source_code = self::sq_remote_get($url, array(), array('timeout' => 10, 'followlocation' => true));
1393
-
1394
- $title_regex = "/<title[^>]*>([^<>]*)<\/title>/si";
1395
- preg_match($title_regex, self::$source_code, $title);
1396
-
1397
- if (is_array($title) && count($title) > 0) {
1398
- $snippet['title'] = $title[1];
1399
- $snippet['title'] = self::i18n(trim(strip_tags($snippet['title'])));
1400
- }
1401
-
1402
- $description_regex = '/<meta[^>]*(name|property)=["\']description["\'][^>]*content="([^"<>]+)"[^<>]*>/si';
1403
- preg_match($description_regex, self::$source_code, $description);
1404
- if (is_array($description) && count($description) > 0) {
1405
- $snippet['description'] = self::i18n(trim(strip_tags($description[2])));
1406
-
1407
- if (strlen($snippet['description']) > $length['description'])
1408
- $snippet['description'] = substr($snippet['description'], 0, ($length['description'] - 1)) . '...';
1409
- }
1410
-
1411
- $snippet['url'] = urldecode($url);
1412
- if (strlen($snippet['url']) > $length['url'])
1413
- $snippet['url'] = substr($snippet['url'], 0, ($length['url'] - 1)) . '...';
1414
-
1415
- }
1416
-
1417
- return $snippet;
1418
-
1419
- }
1420
-
1421
- /**
1422
- * Check if debug is called
1423
- */
1424
- private function checkDebug() {
1425
- //if debug is called
1426
- if (SQ_DEBUG && self::getIsset('sq_debug')) {
1427
- if (self::getValue('sq_debug') === 'on') {
1428
- if (function_exists('register_shutdown_function')) {
1429
- register_shutdown_function(array($this, 'showDebug'));
1430
- }
1431
- }
1432
- }
1433
- }
1434
-
1435
- /**
1436
- * Store the debug for a later view
1437
- */
1438
- public static function dump() {
1439
- if (self::getValue('sq_debug') !== 'on') {
1440
- return;
1441
- }
1442
-
1443
- $output = '';
1444
- $callee = array('file' => '', 'line' => '');
1445
- if (function_exists('func_get_args')) {
1446
- $arguments = func_get_args();
1447
- $total_arguments = count($arguments);
1448
- } else
1449
- $arguments = array();
1450
-
1451
-
1452
- $run_time = number_format(microtime(true) - REQUEST_TIME, 3);
1453
- if (function_exists('debug_backtrace'))
1454
- list($callee) = debug_backtrace();
1455
-
1456
- $output .= '<fieldset style="background: #FFFFFF; border: 1px #CCCCCC solid; padding: 5px; font-size: 9pt; margin: 0;">';
1457
- $output .= '<legend style="background: #EEEEEE; padding: 2px; font-size: 8pt;">' . $callee['file'] . ' Time: ' . $run_time . ' @ line: ' . $callee['line']
1458
- . '</legend><pre style="margin: 0; font-size: 8pt; text-align: left;">';
1459
-
1460
- $i = 0;
1461
- foreach ($arguments as $argument) {
1462
- if (count($arguments) > 1)
1463
- $output .= "\n" . '<strong>#' . (++$i) . ' of ' . $total_arguments . '</strong>: ';
1464
-
1465
- // if argument is boolean, false value does not display, so ...
1466
- if (is_bool($argument))
1467
- $argument = ($argument) ? 'TRUE' : 'FALSE';
1468
- else
1469
- if (is_object($argument) && function_exists('array_reverse') && function_exists('class_parents'))
1470
- $output .= implode("\n" . '|' . "\n", array_reverse(class_parents($argument))) . "\n" . '|' . "\n";
1471
-
1472
- $output .= htmlspecialchars(print_r($argument, TRUE))
1473
- . ((is_object($argument) && function_exists('spl_object_hash')) ? spl_object_hash($argument) : '');
1474
- }
1475
- $output .= "</pre>";
1476
- $output .= "</fieldset>";
1477
-
1478
- self::$debug[] = $output;
1479
- }
1480
-
1481
- /**
1482
- * Add Memory Debug in the footer
1483
- */
1484
- public function hookFooter() {
1485
- if (self::getValue('sq_debug') === 'on') {
1486
- self::dump(self::getMaxMemory(), self::getUsedMemory());
1487
- }
1488
- }
1489
-
1490
- /**
1491
- * Show the debug dump
1492
- */
1493
- public static function showDebug() {
1494
- echo "Debug result: <br />" . '<div id="wpcontent">' . @implode('<br />', self::$debug) . '</div>';
1495
- }
1496
-
1497
- public static function generatePassword($length = 12) {
1498
- $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
1499
-
1500
- $password = '';
1501
- for ($i = 0; $i < $length; $i++) {
1502
- $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
1503
- }
1504
-
1505
- return $password;
1506
- }
1507
-
1508
- public function sq_activate() {
1509
- set_transient('sq_activate', true);
1510
- set_transient('sq_rewrite', true);
1511
- set_transient('sq_import', true);
1512
- }
1513
-
1514
- public function sq_deactivate() {
1515
- try {
1516
- //clear the cron job
1517
- wp_clear_scheduled_hook('sq_processCron');
1518
-
1519
- $args = array();
1520
- $args['type'] = 'deact';
1521
- SQ_Classes_Action::apiCall('sq/user/log', $args, 5);
1522
-
1523
- remove_filter('rewrite_rules_array', array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettingsSeo'), 'rewrite_rules'));
1524
- } catch (Exception $e) {
1525
-
1526
- }
1527
- }
1528
-
1529
- public static function emptyCache($post_id = null) {
1530
- if (function_exists('w3tc_pgcache_flush')) {
1531
- w3tc_pgcache_flush();
1532
- }
1533
- if (function_exists('wp_cache_clear_cache')) {
1534
- wp_cache_clear_cache();
1535
- }
1536
- if (function_exists('wp_cache_post_edit') && isset($post_id)) {
1537
- wp_cache_post_edit($post_id);
1538
- }
1539
-
1540
- if (class_exists("WpFastestCache")) {
1541
- $wpfc = new WpFastestCache();
1542
- $wpfc->deleteCache();
1543
- }
1544
- }
1545
-
1546
- public static function checkUpgrade() {
1547
- if (self::getOption('sq_ver') == 0 || self::getOption('sq_ver') < SQ_VERSION_ID) {
1548
- if (self::getOption('sq_ver') < 8200) {
1549
- //Delete the old versions table
1550
- global $wpdb;
1551
- $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_title' WHERE `meta_key` = 'sq_fp_title'");
1552
- $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_description' WHERE `meta_key` = 'sq_fp_description'");
1553
- $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_ogimage' WHERE `meta_key` = 'sq_fp_ogimage'");
1554
- $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_keywords' WHERE `meta_key` = 'sq_fp_keywords'");
1555
- $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_post_keyword' WHERE `meta_key` = 'sq_post_keyword'");
1556
-
1557
- self::createTable();
1558
-
1559
- //Import the SEO from the old format to the new format
1560
- $seo = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSeo('squirrly-seo');
1561
- if (!empty($seo)) {
1562
- foreach ($seo as $sq_hash => $metas) {
1563
- SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
1564
- (isset($metas['url']) ? $metas['url'] : ''),
1565
- $sq_hash,
1566
- (int)$metas['post_id'],
1567
- maybe_serialize($metas),
1568
- gmdate('Y-m-d H:i:s'));
1569
- }
1570
- }
1571
-
1572
- //Import the settings from the old format to the new format
1573
- SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSettings('squirrly-seo');
1574
- }
1575
-
1576
-
1577
- self::saveOptions('sq_ver', SQ_VERSION_ID);
1578
-
1579
- self::getOptions();
1580
- }
1581
- }
1582
-
1583
- public static function isAjax() {
1584
- if (isset(self::$is_ajax)) {
1585
- return self::$is_ajax;
1586
- }
1587
-
1588
- self::$is_ajax = false;
1589
-
1590
- if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
1591
- self::$is_ajax = true;
1592
- } else {
1593
- $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
1594
- if ($url && (strpos($url, str_replace(get_bloginfo('url'), '', admin_url('admin-ajax.php', 'relative'))) !== false)) {
1595
- self::$is_ajax = true;
1596
- }
1597
- }
1598
- return self::$is_ajax;
1599
- }
1600
-
1601
- public static function isPluginInstalled($name) {
1602
- switch ($name) {
1603
- case 'instapage':
1604
- return defined('INSTAPAGE_PLUGIN_PATH');
1605
- break;
1606
- case 'quick-seo':
1607
- return defined('QSS_VERSION') && defined('_QSS_ROOT_DIR_');
1608
- break;
1609
- case 'premium-seo-pack':
1610
- return defined('PSP_VERSION') && defined('_PSP_ROOT_DIR_');
1611
- break;
1612
- }
1613
- }
1614
-
1615
- public static function isFrontAdmin() {
1616
- return (!is_admin() && is_user_logged_in());
1617
- }
1618
-
1619
- public static function createTable() {
1620
- global $wpdb;
1621
- $sq_table_query = 'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . strtolower(_SQ_DB_) . ' (
1622
- `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
1623
- `blog_id` INT(10) NOT NULL,
1624
- `post_id` bigint(20) NOT NULL DEFAULT 0 ,
1625
- `URL` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
1626
- `url_hash` VARCHAR(32) NOT NULL,
1627
- `seo` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
1628
- `date_time` DATETIME NOT NULL,
1629
- PRIMARY KEY(id),
1630
- UNIQUE url_hash(url_hash) USING BTREE,
1631
- INDEX post_id(post_id) USING BTREE,
1632
- INDEX blog_id_url_hash(blog_id, url_hash) USING BTREE
1633
- ) CHARACTER SET utf8 COLLATE utf8_general_ci';
1634
-
1635
- if (file_exists(ABSPATH . 'wp-admin/includes/upgrade.php')) {
1636
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
1637
- if (function_exists('dbDelta')) {
1638
- dbDelta($sq_table_query, true);
1639
- $count = $wpdb->get_row("SELECT count(*) as count
1640
- FROM information_schema.columns
1641
- WHERE table_name = '" . $wpdb->prefix . strtolower(_SQ_DB_) . "'
1642
- AND column_name = 'post_id';");
1643
-
1644
- if ($count->count == 0) {
1645
- $wpdb->query("ALTER TABLE " . $wpdb->prefix . strtolower(_SQ_DB_) . " ADD COLUMN `post_id` bigint(20) NOT NULL DEFAULT 0");
1646
- }
1647
- }
1648
- }
1649
- }
1650
-
1651
- public static function getBusinessLink() {
1652
- if (!self::getOption('sq_google_serp_active')) {
1653
- return _SQ_DASH_URL_ . 'login/?token=' . self::getToken() . '&redirect_to=' . _SQ_DASH_URL_ . 'user/plans?pid=31';
1654
- } else {
1655
- return admin_url('admin.php?page=sq_posts');
1656
- }
1657
-
1658
- }
1659
-
1660
- public static function isGutenberg() {
1661
- if (function_exists('is_gutenberg_page')) {
1662
- return @is_gutenberg_page();
1663
- }
1664
- return false;
1665
- }
1666
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/helpers/DevKit.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Classes_Helpers_DevKit {
4
+
5
+ public static $plugin;
6
+ public static $package;
7
+
8
+ public function __construct() {
9
+ if (SQ_Classes_Helpers_Tools::getOption('sq_name') <> '') {
10
+ if (isset($_SERVER['REQUEST_URI']) && function_exists('get_plugin_data')) {
11
+ if (strpos($_SERVER['REQUEST_URI'], '/plugins.php') !== false) {
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
+ }
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Check if Dev Kit is installed
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
+ }
32
+
33
+ /* load configuration blocks data from core config files */
34
+ $config = json_decode(file_get_contents($package_file), 1);
35
+ if (isset($config['package'])) {
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
+
50
+
51
+ //remove the package after activation
52
+ @unlink($package_file);
53
+
54
+ return true;
55
+ }
56
+
57
+
58
+ /**
59
+ * Change the plugin name
60
+ * @param $string
61
+ * @return mixed
62
+ */
63
+ public function changeString($string) {
64
+ if (isset(self::$plugin['name']) && SQ_Classes_Helpers_Tools::getOption('sq_name') <> '') {
65
+ return str_replace(self::$plugin['name'], SQ_Classes_Helpers_Tools::getOption('sq_name'), $string);
66
+ }
67
+ return $string;
68
+ }
69
+
70
+
71
+ //Get the package info in case of custom details
72
+ public function getPackageInfo($key) {
73
+ if (isset(self::$package[$key])) {
74
+ return self::$package[$key];
75
+ }
76
+
77
+ return false;
78
+ }
79
+
80
+ }
classes/helpers/Sanitize.php ADDED
@@ -0,0 +1,430 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Classes_Helpers_Sanitize {
4
+ /**
5
+ * Clear the title string
6
+ * @param $title
7
+ * @return mixed|null|string|string[]
8
+ */
9
+ public static function clearTitle($title) {
10
+ if ($title <> '') {
11
+ if (function_exists('preg_replace')) {
12
+ $search = array(
13
+ "/[\n\r]/si",
14
+ "/[\n]/si",
15
+ "/&nbsp;/si",
16
+ "/\[[^\]]+\]/si",
17
+ "/\s{2,}/",
18
+ );
19
+ $title = preg_replace($search, " ", $title);
20
+ }
21
+
22
+ $title = SQ_Classes_Helpers_Sanitize::i18n(trim(esc_html(ent2ncr(strip_tags($title)))));
23
+
24
+ }
25
+ return $title;
26
+ }
27
+
28
+ /**
29
+ * Clear description
30
+ * @param $description
31
+ * @return null|string|string[]
32
+ */
33
+ public static function clearDescription($description) {
34
+ if ($description <> '') {
35
+ if (function_exists('preg_replace')) {
36
+ $search = array("'<script[^>]*?>.*?<\/script>'si", // strip out javascript
37
+ "/<form.*?<\/form>/si",
38
+ "/<iframe.*?<\/iframe>/si",
39
+ );
40
+ $description = preg_replace($search, "", $description);
41
+ $search = array(
42
+ "/[\n\r]/si",
43
+ "/[\n]/si",
44
+ "/&nbsp;/si",
45
+ "/\[[^\]]+\]/si",
46
+ "/\s{2,}/",
47
+ );
48
+ $description = preg_replace($search, " ", $description);
49
+ }
50
+
51
+ $description = SQ_Classes_Helpers_Sanitize::i18n(trim(esc_html(ent2ncr(strip_tags($description)))));
52
+ }
53
+
54
+ return $description;
55
+ }
56
+
57
+ /**
58
+ * Clear the keywords
59
+ * @param $keywords
60
+ * @return mixed|null|string|string[]
61
+ */
62
+ public static function clearKeywords($keywords) {
63
+ return self::clearTitle($keywords);
64
+ }
65
+
66
+ /**
67
+ * Truncate the text
68
+ *
69
+ * @param $text
70
+ * @param int $min
71
+ * @param int $max
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) {
85
+ $max--;
86
+ }
87
+ }
88
+ $text = substr($text, 0, $max);
89
+ return trim(stripcslashes($text));
90
+ }
91
+
92
+ return $text;
93
+ }
94
+ /**
95
+ * Check the google code saved at settings
96
+ *
97
+ * @param string $code
98
+ * @return string
99
+ */
100
+ public static function checkGoogleWTCode($code) {
101
+ if ($code <> '') {
102
+ $code = stripslashes($code);
103
+ if (strpos($code, 'content') !== false) {
104
+ @preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
105
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
106
+ }
107
+ if (strpos($code, '"') !== false) {
108
+ @preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
109
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
110
+ }
111
+
112
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Google Webmaster Tool is incorrect.", _SQ_PLUGIN_NAME_));
113
+ }
114
+ return $code;
115
+ }
116
+
117
+ /**
118
+ * Check the google code saved at settings
119
+ *
120
+ * @param string $code
121
+ * @return string
122
+ */
123
+ public static function checkGoogleAnalyticsCode($code) {
124
+ //echo $code;
125
+ if ($code <> '') {
126
+ $code = stripslashes($code);
127
+
128
+ if (strpos($code, 'GoogleAnalyticsObject') !== false) {
129
+ preg_match('/ga\(\'create\',[^\'"]*[\'"]([^\'"]+)[\'"],/i', $code, $result);
130
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
131
+ }
132
+
133
+ if (strpos($code, '"') !== false) {
134
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
135
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
136
+ }
137
+
138
+ if (strpos($code, 'UA-') === false) {
139
+ $code = '';
140
+ SQ_Classes_Error::setError(__("The code for Google Analytics is incorrect.", _SQ_PLUGIN_NAME_));
141
+ }
142
+ }
143
+ return trim($code);
144
+ }
145
+
146
+ /**
147
+ * Check the Facebook code saved at settings
148
+ *
149
+ * @param string $code
150
+ * @return string
151
+ */
152
+ public static function checkFavebookAdminCode($code) {
153
+ $id = '';
154
+ if ($code <> '') {
155
+ $code = trim($code);
156
+ if (strpos($code, '"') !== false) {
157
+ preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
158
+ if (isset($result[1]) && !empty($result[1])) {
159
+ $id = $result[1];
160
+ }
161
+ }
162
+
163
+ if (strpos($code, 'facebook.com/') !== false) {
164
+ preg_match('/facebook.com\/([^\/]+)/i', $code, $result);
165
+ if (isset($result[1]) && !empty($result[1])) {
166
+ if (is_string($result[1])) {
167
+ $response = SQ_Classes_RemoteController::apiCall('seo/facebook-id', array('profile' => $result[1]));
168
+ if ($response && $json = json_decode($response)) {
169
+ $id = $json->code;
170
+ }
171
+ } elseif (is_numeric($result[1])) {
172
+ $id = $result[1];
173
+ }
174
+ }
175
+ } else {
176
+ if (is_string($code)) {
177
+ $response = SQ_Classes_RemoteController::apiCall('seo/facebook-id', array('profile' => $code));
178
+ if ($response && $json = json_decode($response)) {
179
+ $id = $json->code;
180
+ }
181
+ } elseif (is_numeric($code)) {
182
+ $id = $code;
183
+ }
184
+ }
185
+
186
+ if ($id == '') {
187
+ SQ_Classes_Error::setError(__("The code for Facebook is incorrect.", _SQ_PLUGIN_NAME_));
188
+ }
189
+ }
190
+ return $id;
191
+ }
192
+
193
+ /**
194
+ * Check the Pinterest code saved at settings
195
+ *
196
+ * @param string $code
197
+ * @return string
198
+ */
199
+ public static function checkPinterestCode($code) {
200
+ if ($code <> '') {
201
+ $code = stripslashes($code);
202
+
203
+ if (strpos($code, 'content') !== false) {
204
+ preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
205
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
206
+ }
207
+
208
+ if (strpos($code, '"') !== false) {
209
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
210
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
211
+ }
212
+
213
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Pinterest is incorrect.", _SQ_PLUGIN_NAME_));
214
+ }
215
+ return $code;
216
+ }
217
+
218
+ /**
219
+ * Check the Bing code saved at settings
220
+ *
221
+ * @return string
222
+ */
223
+ public static function checkBingWTCode($code) {
224
+ if ($code <> '') {
225
+ $code = stripslashes($code);
226
+
227
+
228
+ if (strpos($code, 'content') !== false) {
229
+ preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
230
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
231
+ }
232
+
233
+ if (strpos($code, '"') !== false) {
234
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
235
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
236
+ }
237
+
238
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Bing is incorrect.", _SQ_PLUGIN_NAME_));
239
+ }
240
+ return $code;
241
+ }
242
+
243
+ /**
244
+ * Check the Alexa code saved at settings
245
+ *
246
+ * @return string
247
+ */
248
+ public static function checkAlexaCode($code) {
249
+ if ($code <> '') {
250
+ $code = stripslashes($code);
251
+
252
+
253
+ if (strpos($code, 'content') !== false) {
254
+ preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
255
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
256
+ }
257
+
258
+ if (strpos($code, '"') !== false) {
259
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
260
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
261
+ }
262
+
263
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Alexa is incorrect.", _SQ_PLUGIN_NAME_));
264
+ }
265
+ return $code;
266
+ }
267
+
268
+ /**
269
+ * Check the twitter account
270
+ *
271
+ * @param string $account
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
+
279
+ return $account;
280
+ }
281
+
282
+ /**
283
+ * Check the twitter account
284
+ *
285
+ * @param string $account
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);
293
+ }
294
+ if (strpos($account, '@') == false) {
295
+ $account = '@' . $account;
296
+ }
297
+ }
298
+
299
+ return $account;
300
+ }
301
+
302
+ /**
303
+ * Check the google + account
304
+ *
305
+ * @param string $account
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);
313
+ }
314
+
315
+ /**
316
+ * Check the google + account
317
+ *
318
+ * @param string $account
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;
326
+ }
327
+
328
+ /**
329
+ * Check the facebook account
330
+ *
331
+ * @param string $account
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;
339
+ }
340
+
341
+ /**
342
+ * Check the Pinterest account
343
+ * @param $account
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;
351
+ }
352
+
353
+ /**
354
+ * Check the Instagram
355
+ *
356
+ * @param $account
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;
364
+ }
365
+
366
+ /**
367
+ * Check the Youtube account
368
+ *
369
+ * @param $account
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
+ }
377
+ }
378
+ return $account;
379
+ }
380
+
381
+ /**
382
+ * Check the Facebook Pixel code
383
+ *
384
+ * @return string
385
+ */
386
+ public static function checkFacebookPixel($code) {
387
+ if ($code <> '') {
388
+ if ((int)$code == 0) {
389
+ SQ_Classes_Error::setError(__("The code for Facebook Pixel must only contain numbers.", _SQ_PLUGIN_NAME_));
390
+ $code = '';
391
+ }
392
+ }
393
+ return $code;
394
+ }
395
+
396
+ /**
397
+ * Check the Facebook App code
398
+ *
399
+ * @return string
400
+ */
401
+ public static function checkFacebookApp($code) {
402
+ if ($code <> '') {
403
+ if ((int)$code == 0) {
404
+ SQ_Classes_Error::setError(__("The code for Facebook App must only contain numbers.", _SQ_PLUGIN_NAME_));
405
+ $code = '';
406
+ }
407
+ }
408
+ return $code;
409
+ }
410
+
411
+ /**
412
+ * Support for i18n with wpml, polyglot or qtrans
413
+ *
414
+ * @param string $in
415
+ * @return string $in localized
416
+ */
417
+ public static function i18n($in) {
418
+ if (function_exists('langswitch_filter_langs_with_message')) {
419
+ $in = langswitch_filter_langs_with_message($in);
420
+ }
421
+ if (function_exists('polyglot_filter')) {
422
+ $in = polyglot_filter($in);
423
+ }
424
+ if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) {
425
+ $in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($in);
426
+ }
427
+ $in = apply_filters('localization', $in);
428
+ return $in;
429
+ }
430
+ }
classes/helpers/Tools.php ADDED
@@ -0,0 +1,1020 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Handles the parameters and url
5
+ *
6
+ * @author Squirrly
7
+ */
8
+ class SQ_Classes_Helpers_Tools {
9
+
10
+ /** @var array Options, User Metas, Package and Plugin details */
11
+ public static $options, $usermeta = array();
12
+
13
+ public function __construct() {
14
+ self::$options = $this->getOptions();
15
+
16
+ $maxmemory = self::getMaxMemory();
17
+ if ($maxmemory && $maxmemory < 60) {
18
+ @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
19
+ }
20
+
21
+ SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
22
+ }
23
+
24
+ public static function getMaxMemory() {
25
+ try {
26
+ $memory_limit = @ini_get('memory_limit');
27
+ if ((int)$memory_limit > 0) {
28
+ if (preg_match('/^(\d+)(.)$/', $memory_limit, $matches)) {
29
+ if ($matches[2] == 'G') {
30
+ $memory_limit = $matches[1] * 1024 * 1024 * 1024; // nnnM -> nnn MB
31
+ } elseif ($matches[2] == 'M') {
32
+ $memory_limit = $matches[1] * 1024 * 1024; // nnnM -> nnn MB
33
+ } elseif ($matches[2] == 'K') {
34
+ $memory_limit = $matches[1] * 1024; // nnnK -> nnn KB
35
+ }
36
+ }
37
+
38
+ if ((int)$memory_limit > 0) {
39
+ return number_format($memory_limit / 1024 / 1024, 0, '', '');
40
+ }
41
+ }
42
+ } catch (Exception $e) {
43
+ }
44
+
45
+ return false;
46
+
47
+ }
48
+
49
+ public static function getUsedMemory() {
50
+ return number_format(memory_get_usage() / 1024 / 1024, 0);
51
+ }
52
+
53
+ public static function isAjax() {
54
+ return (defined('DOING_AJAX') && DOING_AJAX);
55
+ }
56
+
57
+ /**
58
+ * This hook will save the current version in database
59
+ *
60
+ * @return void
61
+ */
62
+ function hookInit() {
63
+ //Load the languages pack
64
+ $this->loadMultilanguage();
65
+ //add extra links to the plugin in the Plugins list
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
+ /**
74
+ * Add a link to settings in the plugin list
75
+ *
76
+ * @param array $links
77
+ * @param string $file
78
+ * @return array
79
+ */
80
+ public function hookActionlink($links, $file) {
81
+ if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
82
+ $link = '<a href="' . self::getAdminUrl('sq_dashboard') . '">' . __('Getting started', _SQ_PLUGIN_NAME_) . '</a>';
83
+ array_unshift($links, $link);
84
+ }
85
+
86
+ return $links;
87
+ }
88
+
89
+ /**
90
+ * Adds extra links to plugin page
91
+ *
92
+ * @param $meta
93
+ * @param $file
94
+ * @param $data
95
+ * @param $status
96
+ * @return array
97
+ */
98
+ public function hookExtraLinks($meta, $file, $data = null, $status = null) {
99
+ if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
100
+ echo '<style>
101
+ .ml-stars{display:inline-block;color:#ffb900;position:relative;top:3px}
102
+ .ml-stars svg{fill:#ffb900}
103
+ .ml-stars svg:hover{fill:#ffb900}
104
+ .ml-stars svg:hover ~ svg{fill:none}
105
+ </style>';
106
+
107
+ $meta[] = "<a href='https://howto.squirrly.co/wordpress-seo/' target='_blank'>" . __('Documentation', _SQ_PLUGIN_NAME_) . "</a>";
108
+ $meta[] = "<a href='https://wordpress.org/support/plugin/squirrly-seo/reviews/#new-post' target='_blank' title='" . __('Leave a review', _SQ_PLUGIN_NAME_) . "'><i class='ml-stars'><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg></i></a>";
109
+ }
110
+ return $meta;
111
+ }
112
+
113
+ /**
114
+ * Load the Options from user option table in DB
115
+ *
116
+ * @param string $action
117
+ * @return array|mixed|object
118
+ */
119
+ public static function getOptions($action = '') {
120
+ $default = array(
121
+ //Global settings
122
+ 'sq_ver' => 0,
123
+ 'sq_api' => '',
124
+ 'sq_logo' => _SQ_THEME_URL_ . 'img/settings/menu_icon_16.png',
125
+ 'sq_name' => '',
126
+ 'sq_checkedissues' => 0,
127
+ 'sq_areissues' => 0,
128
+ 'sq_seoexpert' => 1, //the user is an SEO expert
129
+ 'sq_laterload' => 0,
130
+ 'sq_support_email' => '',
131
+ 'sq_audit_email' => '',
132
+ 'sq_seojourney' => 0,
133
+ 'sq_onboarding' => 0,
134
+
135
+ //Settings Assistant
136
+ 'sq_assistant' => 1,
137
+
138
+ //Live Assistant
139
+ 'sq_sla' => 1,
140
+ 'sq_sla_exclude_post_types' => array(),
141
+ 'sq_keyword_information' => 0,
142
+ 'sq_keyword_help' => 1,
143
+ 'sq_local_images' => 1,
144
+ 'sq_force_savepost' => 0,
145
+ 'sq_img_licence' => 1,
146
+
147
+ //JsonLD
148
+ 'sq_auto_jsonld' => 1,
149
+ 'sq_jsonld_type' => 'Organization',
150
+ 'sq_jsonld' => array(
151
+ 'Organization' => array(
152
+ 'name' => '',
153
+ 'logo' => '',
154
+ 'telephone' => '',
155
+ 'contactType' => '',
156
+ 'description' => ''
157
+ ),
158
+ 'Person' => array(
159
+ 'name' => '',
160
+ 'logo' => '',
161
+ 'telephone' => '',
162
+ 'jobTitle' => '',
163
+ 'description' => ''
164
+ )),
165
+
166
+ //Sitemap
167
+ 'sq_auto_sitemap' => 0,
168
+ 'sq_sitemap_ping' => 0,
169
+ 'sq_sitemap_show' => array(
170
+ 'images' => 1,
171
+ 'videos' => 0,
172
+ ),
173
+ 'sq_sitemap_perpage' => 200,
174
+ 'sq_sitemap_frequency' => 'weekly',
175
+ 'sq_url_fix' => 1,
176
+ 'sq_sitemap_combinelangs' => 1,
177
+ 'sq_sitemap' => array(
178
+ 'sitemap' => array('sitemap.xml', 1),
179
+ 'sitemap-home' => array('sitemap-home.xml', 1),
180
+ 'sitemap-news' => array('sitemap-news.xml', 0),
181
+ 'sitemap-product' => array('sitemap-product.xml', 1),
182
+ 'sitemap-post' => array('sitemap-posts.xml', 1),
183
+ 'sitemap-page' => array('sitemap-pages.xml', 1),
184
+ 'sitemap-category' => array('sitemap-categories.xml', 1),
185
+ 'sitemap-post_tag' => array('sitemap-tags.xml', 1),
186
+ 'sitemap-archive' => array('sitemap-archives.xml', 1),
187
+ 'sitemap-author' => array('sitemap-authors.xml', 0),
188
+ 'sitemap-custom-tax' => array('sitemap-custom-taxonomies.xml', 0),
189
+ 'sitemap-custom-post' => array('sitemap-custom-posts.xml', 0),
190
+ 'sitemap-attachment' => array('sitemap-attachment.xml', 0),
191
+ ),
192
+
193
+ //Robots
194
+ 'sq_auto_robots' => 1,
195
+ 'sq_robots_permission' => array(
196
+ 'User-agent: *',
197
+ 'Disallow: */trackback/',
198
+ 'Disallow: */xmlrpc.php',
199
+ 'Disallow: /wp-*.php',
200
+ 'Disallow: /cgi-bin/',
201
+ 'Disallow: /wp-admin/',
202
+ 'Allow: */wp-content/uploads/',),
203
+
204
+ //Metas
205
+ 'sq_use' => 1,
206
+ 'sq_auto_metas' => 1,
207
+ 'sq_auto_title' => 1,
208
+ 'sq_auto_description' => 1,
209
+ 'sq_auto_keywords' => 1,
210
+ 'sq_keywordtag' => 0,
211
+ 'sq_auto_canonical' => 1,
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(
219
+ 'title_maxlength' => 75,
220
+ 'description_maxlength' => 320,
221
+ 'og_title_maxlength' => 75,
222
+ 'og_description_maxlength' => 110,
223
+ 'tw_title_maxlength' => 75,
224
+ 'tw_description_maxlength' => 280,
225
+ 'jsonld_title_maxlength' => 75,
226
+ 'jsonld_description_maxlength' => 110,
227
+ ),
228
+
229
+ //favicon
230
+ 'sq_auto_favicon' => 0,
231
+ 'sq_favicon_apple' => 1,
232
+ 'favicon' => '',
233
+
234
+ //Ranking Option
235
+ 'sq_google_country' => 'com',
236
+ 'sq_google_language' => 'en',
237
+ 'sq_google_serpsperhour' => 500,
238
+ 'connect' => array(
239
+ 'google_analytics' => 0,
240
+ 'google_search_console' => 0,
241
+ ),
242
+
243
+ //pages visited
244
+ 'sq_dashboard' => 0,
245
+ 'sq_analytics' => 0,
246
+
247
+ //menu restrictions
248
+ 'menu' => array(
249
+ 'show_account_info' => 1,
250
+ 'show_panel' => 1,
251
+ 'show_tutorial' => 1,
252
+ 'show_audit' => 1,
253
+ 'show_ads' => 1,
254
+ ),
255
+
256
+ //socials
257
+ 'sq_auto_social' => 1,
258
+ 'sq_auto_facebook' => 1,
259
+ 'sq_auto_twitter' => 1,
260
+ 'sq_og_locale' => 'en_US',
261
+
262
+ 'socials' => array(
263
+ 'fb_admins' => array(),
264
+ 'fbconnectkey' => "",
265
+ 'fbadminapp' => "",
266
+
267
+ 'facebook_site' => "",
268
+ 'twitter_site' => "",
269
+ 'twitter' => "",
270
+ 'instagram_url' => "",
271
+ 'linkedin_url' => "",
272
+ 'myspace_url' => "",
273
+ 'pinterest_url' => "",
274
+ 'youtube_url' => "",
275
+ 'twitter_card_type' => "summary",
276
+ 'plus_publisher' => ""
277
+ ),
278
+
279
+ //Webmasters and Tracking
280
+ 'sq_auto_amp' => 0,
281
+ 'sq_auto_tracking' => 1,
282
+ 'sq_tracking_logged_users' => 1,
283
+ 'sq_auto_webmasters' => 1,
284
+ 'sq_analytics_google_js' => 'analytics',
285
+ 'codes' => array(
286
+ 'google_wt' => "",
287
+ 'google_analytics' => "",
288
+ 'facebook_pixel' => "",
289
+
290
+ 'bing_wt' => "",
291
+ 'pinterest_verify' => "",
292
+ 'alexa_verify' => "",
293
+ ),
294
+
295
+ //Patterns
296
+ 'sq_auto_pattern' => 1,
297
+ 'patterns' => array(
298
+ 'home' => array(
299
+ 'protected' => 1,
300
+ 'sep' => '|',
301
+ 'title' => '{{sitename}} {{page}} {{sep}} {{sitedesc}}',
302
+ 'description' => '{{excerpt}} {{page}} {{sep}} {{sitename}}',
303
+ 'noindex' => 0,
304
+ 'nofollow' => 0,
305
+ 'og_type' => 'website',
306
+ 'do_metas' => 1,
307
+ 'do_sitemap' => 1,
308
+ 'do_jsonld' => 1,
309
+ 'do_pattern' => 1,
310
+ 'do_og' => 1,
311
+ 'do_twc' => 1,
312
+ 'do_analytics' => 1,
313
+ 'do_fpixel' => 1,
314
+ ),
315
+ 'post' => array(
316
+ 'protected' => 1,
317
+ 'sep' => '|',
318
+ 'title' => '{{title}} {{page}}',
319
+ 'description' => '{{excerpt}}',
320
+ 'noindex' => 0,
321
+ 'nofollow' => 0,
322
+ 'og_type' => 'article',
323
+ 'do_metas' => 1,
324
+ 'do_sitemap' => 1,
325
+ 'do_jsonld' => 1,
326
+ 'do_pattern' => 1,
327
+ 'do_og' => 1,
328
+ 'do_twc' => 1,
329
+ 'do_analytics' => 1,
330
+ 'do_fpixel' => 1,
331
+ ),
332
+ 'page' => array(
333
+ 'protected' => 1,
334
+ 'sep' => '|',
335
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
336
+ 'description' => '{{excerpt}}',
337
+ 'noindex' => 0,
338
+ 'nofollow' => 0,
339
+ 'og_type' => 'website',
340
+ 'do_metas' => 1,
341
+ 'do_sitemap' => 1,
342
+ 'do_jsonld' => 1,
343
+ 'do_pattern' => 1,
344
+ 'do_og' => 1,
345
+ 'do_twc' => 1,
346
+ 'do_analytics' => 1,
347
+ 'do_fpixel' => 1,
348
+ ),
349
+ 'category' => array(
350
+ 'protected' => 1,
351
+ 'sep' => '|',
352
+ 'title' => '{{category}} {{page}} {{sep}} {{sitename}}',
353
+ 'description' => '{{category_description}}',
354
+ 'noindex' => 0,
355
+ 'nofollow' => 0,
356
+ 'og_type' => 'website',
357
+ 'do_metas' => 1,
358
+ 'do_sitemap' => 1,
359
+ 'do_jsonld' => 0,
360
+ 'do_pattern' => 1,
361
+ 'do_og' => 1,
362
+ 'do_twc' => 1,
363
+ 'do_analytics' => 1,
364
+ 'do_fpixel' => 1,
365
+ ),
366
+ 'tag' => array(
367
+ 'protected' => 1,
368
+ 'sep' => '|',
369
+ 'title' => '{{tag}} {{page}} {{sep}} {{sitename}}',
370
+ 'description' => '{{excerpt}}',
371
+ 'noindex' => 0,
372
+ 'nofollow' => 0,
373
+ 'og_type' => 'website',
374
+ 'do_metas' => 1,
375
+ 'do_sitemap' => 1,
376
+ 'do_jsonld' => 0,
377
+ 'do_pattern' => 1,
378
+ 'do_og' => 1,
379
+ 'do_twc' => 1,
380
+ 'do_analytics' => 1,
381
+ 'do_fpixel' => 1,
382
+ ),
383
+ 'tax-post_format' => array(
384
+ 'protected' => 1,
385
+ 'sep' => '|',
386
+ 'title' => '{{term_title}} ' . __('Format', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
387
+ 'description' => '{{excerpt}}',
388
+ 'noindex' => 0,
389
+ 'nofollow' => 0,
390
+ 'og_type' => 'website',
391
+ 'do_metas' => 1,
392
+ 'do_sitemap' => 1,
393
+ 'do_jsonld' => 1,
394
+ 'do_pattern' => 1,
395
+ 'do_og' => 1,
396
+ 'do_twc' => 1,
397
+ 'do_analytics' => 1,
398
+ 'do_fpixel' => 1,
399
+ ),
400
+ 'tax-category' => array(
401
+ 'protected' => 1,
402
+ 'sep' => '|',
403
+ 'title' => '{{term_title}} ' . __('Category', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
404
+ 'description' => '{{excerpt}}',
405
+ 'noindex' => 0,
406
+ 'nofollow' => 0,
407
+ 'og_type' => 'website',
408
+ 'do_metas' => 1,
409
+ 'do_sitemap' => 1,
410
+ 'do_jsonld' => 1,
411
+ 'do_pattern' => 1,
412
+ 'do_og' => 1,
413
+ 'do_twc' => 1,
414
+ 'do_analytics' => 1,
415
+ 'do_fpixel' => 1,
416
+ ),
417
+ 'tax-post_tag' => array(
418
+ 'protected' => 1,
419
+ 'sep' => '|',
420
+ 'title' => '{{term_title}} ' . __('Tag', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
421
+ 'description' => '{{excerpt}}',
422
+ 'noindex' => 0,
423
+ 'nofollow' => 0,
424
+ 'og_type' => 'website',
425
+ 'do_metas' => 1,
426
+ 'do_sitemap' => 1,
427
+ 'do_jsonld' => 1,
428
+ 'do_pattern' => 1,
429
+ 'do_og' => 1,
430
+ 'do_twc' => 1,
431
+ 'do_analytics' => 1,
432
+ 'do_fpixel' => 1,
433
+ ),
434
+ 'tax-product_cat' => array(
435
+ 'protected' => 1,
436
+ 'sep' => '|',
437
+ 'title' => '{{term_title}} ' . __('Category', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
438
+ 'description' => '{{excerpt}}',
439
+ 'noindex' => 0,
440
+ 'nofollow' => 0,
441
+ 'og_type' => 'website',
442
+ 'do_metas' => 1,
443
+ 'do_sitemap' => 1,
444
+ 'do_jsonld' => 1,
445
+ 'do_pattern' => 1,
446
+ 'do_og' => 1,
447
+ 'do_twc' => 1,
448
+ 'do_analytics' => 1,
449
+ 'do_fpixel' => 1,
450
+ ),
451
+ 'tax-product_tag' => array(
452
+ 'protected' => 1,
453
+ 'sep' => '|',
454
+ 'title' => '{{term_title}} ' . __('Tag', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
455
+ 'description' => '{{excerpt}}',
456
+ 'noindex' => 0,
457
+ 'nofollow' => 0,
458
+ 'og_type' => 'website',
459
+ 'do_metas' => 1,
460
+ 'do_sitemap' => 1,
461
+ 'do_jsonld' => 1,
462
+ 'do_pattern' => 1,
463
+ 'do_og' => 1,
464
+ 'do_twc' => 1,
465
+ 'do_analytics' => 1,
466
+ 'do_fpixel' => 1,
467
+ ),
468
+ 'tax-product_shipping_class' => array(
469
+ 'protected' => 1,
470
+ 'sep' => '|',
471
+ 'title' => '{{term_title}} ' . __('Shipping Option', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
472
+ 'description' => '{{excerpt}}',
473
+ 'noindex' => 0,
474
+ 'nofollow' => 0,
475
+ 'og_type' => 'website',
476
+ 'do_metas' => 1,
477
+ 'do_sitemap' => 1,
478
+ 'do_jsonld' => 1,
479
+ 'do_pattern' => 1,
480
+ 'do_og' => 1,
481
+ 'do_twc' => 1,
482
+ 'do_analytics' => 1,
483
+ 'do_fpixel' => 1,
484
+ ),
485
+ 'profile' => array(
486
+ 'protected' => 1,
487
+ 'sep' => '|',
488
+ 'title' => '{{name}}, ' . __('Author at', _SQ_PLUGIN_NAME_) . ' {{sitename}} {{page}}',
489
+ 'description' => '{{excerpt}}',
490
+ 'noindex' => 0,
491
+ 'nofollow' => 0,
492
+ 'og_type' => 'profile',
493
+ 'do_metas' => 1,
494
+ 'do_sitemap' => 1,
495
+ 'do_jsonld' => 1,
496
+ 'do_pattern' => 1,
497
+ 'do_og' => 1,
498
+ 'do_twc' => 1,
499
+ 'do_analytics' => 1,
500
+ 'do_fpixel' => 1,
501
+ ),
502
+ 'shop' => array(
503
+ 'protected' => 1,
504
+ 'sep' => '|',
505
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
506
+ 'description' => '{{excerpt}}',
507
+ 'noindex' => 0,
508
+ 'nofollow' => 0,
509
+ 'og_type' => 'website',
510
+ 'do_metas' => 1,
511
+ 'do_sitemap' => 1,
512
+ 'do_jsonld' => 1,
513
+ 'do_pattern' => 1,
514
+ 'do_og' => 1,
515
+ 'do_twc' => 1,
516
+ 'do_analytics' => 1,
517
+ 'do_fpixel' => 1,
518
+ ),
519
+ 'product' => array(
520
+ 'protected' => 1,
521
+ 'sep' => '|',
522
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
523
+ 'description' => '{{excerpt}}',
524
+ 'noindex' => 0,
525
+ 'nofollow' => 0,
526
+ 'og_type' => 'product',
527
+ 'do_metas' => 1,
528
+ 'do_sitemap' => 1,
529
+ 'do_jsonld' => 1,
530
+ 'do_pattern' => 1,
531
+ 'do_og' => 1,
532
+ 'do_twc' => 1,
533
+ 'do_analytics' => 1,
534
+ 'do_fpixel' => 1,
535
+ ),
536
+ 'archive' => array(
537
+ 'protected' => 1,
538
+ 'sep' => '|',
539
+ 'title' => '{{date}} {{page}} {{sep}} {{sitename}}',
540
+ 'description' => '{{excerpt}}',
541
+ 'noindex' => 0,
542
+ 'nofollow' => 0,
543
+ 'og_type' => 'website',
544
+ 'do_metas' => 1,
545
+ 'do_sitemap' => 1,
546
+ 'do_jsonld' => 1,
547
+ 'do_pattern' => 1,
548
+ 'do_og' => 1,
549
+ 'do_twc' => 1,
550
+ 'do_analytics' => 1,
551
+ 'do_fpixel' => 1,
552
+ ),
553
+ 'search' => array(
554
+ 'protected' => 1,
555
+ 'sep' => '|',
556
+ 'title' => __('Are you looking for', _SQ_PLUGIN_NAME_) . ' {{searchphrase}}? {{page}} {{sep}} {{sitename}}',
557
+ 'description' => __('These are the results for', _SQ_PLUGIN_NAME_) . ' {{searchphrase}} ' . __('that you can find on our website.', _SQ_PLUGIN_NAME_) . ' {{excerpt}}',
558
+ 'noindex' => 1,
559
+ 'nofollow' => 0,
560
+ 'og_type' => 'website',
561
+ 'do_metas' => 1,
562
+ 'do_sitemap' => 0,
563
+ 'do_jsonld' => 1,
564
+ 'do_pattern' => 1,
565
+ 'do_og' => 1,
566
+ 'do_twc' => 1,
567
+ 'do_analytics' => 1,
568
+ 'do_fpixel' => 1,
569
+ ),
570
+ 'attachment' => array(
571
+ 'protected' => 1,
572
+ 'sep' => '|',
573
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
574
+ 'description' => '{{excerpt}}',
575
+ 'noindex' => 0,
576
+ 'nofollow' => 0,
577
+ 'og_type' => 'website',
578
+ 'do_metas' => 1,
579
+ 'do_sitemap' => 1,
580
+ 'do_jsonld' => 1,
581
+ 'do_pattern' => 1,
582
+ 'do_og' => 1,
583
+ 'do_twc' => 1,
584
+ 'do_analytics' => 1,
585
+ 'do_fpixel' => 1,
586
+ ),
587
+ '404' => array(
588
+ 'protected' => 1,
589
+ 'sep' => '|',
590
+ 'title' => __('Page not found', _SQ_PLUGIN_NAME_) . ' {{sep}} {{sitename}}',
591
+ 'description' => __('This page could not be found on our website.', _SQ_PLUGIN_NAME_) . ' {{excerpt}}',
592
+ 'noindex' => 1,
593
+ 'nofollow' => 1,
594
+ 'og_type' => 'website',
595
+ 'do_metas' => 1,
596
+ 'do_sitemap' => 0,
597
+ 'do_jsonld' => 0,
598
+ 'do_pattern' => 1,
599
+ 'do_og' => 0,
600
+ 'do_twc' => 0,
601
+ 'do_analytics' => 1,
602
+ 'do_fpixel' => 1,
603
+ ),
604
+ 'custom' => array(
605
+ 'protected' => 1,
606
+ 'sep' => '|',
607
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
608
+ 'description' => '{{excerpt}}',
609
+ 'noindex' => 0,
610
+ 'nofollow' => 0,
611
+ 'og_type' => 'website',
612
+ 'do_metas' => 1,
613
+ 'do_sitemap' => 1,
614
+ 'do_jsonld' => 1,
615
+ 'do_pattern' => 1,
616
+ 'do_og' => 1,
617
+ 'do_twc' => 1,
618
+ 'do_analytics' => 1,
619
+ 'do_fpixel' => 1,
620
+ ),
621
+ )
622
+
623
+ );
624
+ $options = json_decode(get_option(SQ_OPTION), true);
625
+
626
+ if ($action == 'reset') {
627
+ $init['sq_ver'] = $options['sq_ver'];
628
+ $init['sq_api'] = $options['sq_api'];
629
+ return $init;
630
+ }
631
+
632
+ if (is_array($options)) {
633
+ //$options['patterns'] = @array_replace_recursive($default['patterns'], $options['patterns']);
634
+ $options = @array_replace_recursive($default, $options);
635
+ return $options;
636
+ }
637
+
638
+ return $default;
639
+ }
640
+
641
+ /**
642
+ * Get the option from database
643
+ * @param $key
644
+ * @return mixed
645
+ */
646
+ public static function getOption($key) {
647
+ if (!isset(self::$options[$key])) {
648
+ self::$options = self::getOptions();
649
+
650
+ if (!isset(self::$options[$key])) {
651
+ self::$options[$key] = false;
652
+ }
653
+ }
654
+
655
+ return apply_filters('sq_option_' . $key, self::$options[$key]);
656
+ }
657
+
658
+ /**
659
+ * Save the Options in user option table in DB
660
+ *
661
+ * @param null $key
662
+ * @param string $value
663
+ */
664
+ public static function saveOptions($key = null, $value = '') {
665
+ if (isset($key)) {
666
+ self::$options[$key] = $value;
667
+ }
668
+
669
+ update_option(SQ_OPTION, json_encode(self::$options));
670
+ }
671
+
672
+ /**
673
+ * Get user metas
674
+ * @param null $user_id
675
+ * @return array|mixed
676
+ */
677
+ public static function getUserMetas($user_id = null) {
678
+ if (!isset($user_id)) {
679
+ $user_id = get_current_user_id();
680
+ }
681
+
682
+ $default = array('sq_auto_sticky' => 0,);
683
+
684
+ $usermeta = get_user_meta($user_id);
685
+ $usermetatmp = array();
686
+ if (is_array($usermeta)) foreach ($usermeta as $key => $values) {
687
+ $usermetatmp[$key] = $values[0];
688
+ }
689
+ $usermeta = $usermetatmp;
690
+
691
+ if (is_array($usermeta)) {
692
+ $usermeta = @array_merge($default, $usermeta);
693
+ } else {
694
+ $usermeta = $default;
695
+ }
696
+ self::$usermeta = $usermeta;
697
+ return $usermeta;
698
+ }
699
+
700
+ /**
701
+ * Get use meta
702
+ * @param $value
703
+ * @return bool
704
+ */
705
+ public static function getUserMeta($value) {
706
+ if (!isset(self::$usermeta[$value])) {
707
+ self::getUserMetas();
708
+ }
709
+
710
+ if (isset(self::$usermeta[$value])) {
711
+ return apply_filters('sq_usermeta_' . $value, self::$usermeta[$value]);
712
+ }
713
+
714
+ return false;
715
+ }
716
+
717
+ /**
718
+ * Save user meta
719
+ * @param $key
720
+ * @param $value
721
+ * @param null $user_id
722
+ */
723
+ public static function saveUserMeta($key, $value, $user_id = null) {
724
+ if (!isset($user_id)) {
725
+ $user_id = get_current_user_id();
726
+ }
727
+ self::$usermeta[$key] = $value;
728
+ update_user_meta($user_id, $key, $value);
729
+ }
730
+
731
+ /**
732
+ * Delete User meta
733
+ * @param $key
734
+ * @param null $user_id
735
+ */
736
+ public static function deleteUserMeta($key, $user_id = null) {
737
+ if (!isset($user_id)) {
738
+ $user_id = get_current_user_id();
739
+ }
740
+ unset(self::$usermeta[$key]);
741
+ delete_user_meta($user_id, $key);
742
+ }
743
+
744
+ /**
745
+ * Set the header type
746
+ * @param string $type
747
+ */
748
+ public static function setHeader($type) {
749
+ if (self::getValue('sq_debug') == 'on') {
750
+ return;
751
+ }
752
+
753
+ switch ($type) {
754
+ case 'json':
755
+ header('Content-Type: application/json');
756
+ break;
757
+ case 'ico':
758
+ header('Content-Type: image/x-icon');
759
+ break;
760
+ case 'png':
761
+ header('Content-Type: image/png');
762
+ break;
763
+ case'text':
764
+ header("Content-type: text/plain");
765
+ break;
766
+ case'html':
767
+ header("Content-type: text/html");
768
+ break;
769
+ }
770
+ }
771
+
772
+ /**
773
+ * Get a value from $_POST / $_GET
774
+ * if unavailable, take a default value
775
+ *
776
+ * @param string $key Value key
777
+ * @param mixed $defaultValue (optional)
778
+ * @param bool $htmlcode
779
+ * @param bool $keep_newlines
780
+ * @return mixed Value
781
+ */
782
+ public static function getValue($key, $defaultValue = false, $keep_newlines = false) {
783
+ if (!isset($key) || (isset($key) && $key == '')) {
784
+ return $defaultValue;
785
+ }
786
+
787
+ if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
788
+ $ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : ''));
789
+ } else {
790
+ $ret = (isset($_GET[$key]) ? $_GET[$key] : '');
791
+ }
792
+
793
+ if (is_array($ret)) {
794
+ if (!empty($ret)) {
795
+ foreach ($ret as &$row) {
796
+ if (!is_array($row)) {
797
+ $row = sanitize_text_field($row);
798
+ }
799
+ }
800
+ }
801
+ } elseif (is_string($ret) && $ret <> '') {
802
+ if ($keep_newlines && function_exists('sanitize_textarea_field')) {
803
+ $ret = sanitize_textarea_field($ret);
804
+ } else {
805
+ $ret = sanitize_text_field($ret);
806
+ }
807
+ }
808
+
809
+ if (!$ret) {
810
+ return $defaultValue;
811
+ } else {
812
+ return wp_unslash($ret);
813
+ }
814
+
815
+ }
816
+
817
+ /**
818
+ * Check if the parameter is set
819
+ *
820
+ * @param string $key
821
+ * @return boolean
822
+ */
823
+ public static function getIsset($key) {
824
+ return (isset($_GET[$key]) || isset($_POST[$key]));
825
+ }
826
+
827
+ /**
828
+ * Load the multilanguage support from .mo
829
+ */
830
+ private function loadMultilanguage() {
831
+ if (!defined('WP_PLUGIN_DIR')) {
832
+ load_plugin_textdomain(_SQ_PLUGIN_NAME_, _SQ_PLUGIN_NAME_ . '/languages/');
833
+ } else {
834
+ load_plugin_textdomain(_SQ_PLUGIN_NAME_, null, _SQ_PLUGIN_NAME_ . '/languages/');
835
+ }
836
+ }
837
+
838
+
839
+ /**
840
+ * Hook the activate process
841
+ */
842
+ public function sq_activate() {
843
+ set_transient('sq_activate', true);
844
+ set_transient('sq_rewrite', true);
845
+ set_transient('sq_import', true);
846
+ SQ_Classes_ObjController::getClass('SQ_Models_RoleManager')->addSQRoles();
847
+ }
848
+
849
+ /**
850
+ * Hook the deactivate process
851
+ */
852
+ public function sq_deactivate() {
853
+ SQ_Classes_ObjController::getClass('SQ_Models_RoleManager')->removeSQCaps();
854
+ SQ_Classes_ObjController::getClass('SQ_Models_RoleManager')->removeSQRoles();
855
+ }
856
+
857
+ /**
858
+ * Triggered when an update is made
859
+ */
860
+ public static function checkUpgrade() {
861
+ if (self::getOption('sq_ver') == 0 || self::getOption('sq_ver') < (int)str_replace('.', '', SQ_VERSION)) {
862
+ self::saveOptions('sq_ver', (int)str_replace('.', '', SQ_VERSION));
863
+
864
+ self::getOptions();
865
+ }
866
+
867
+ //Deactivate the QuickSEO plugin
868
+ if (self::isPluginInstalled('quick-seo') && defined('_QSS_ROOT_DIR_')) {
869
+ $quickSEO = _QSS_ROOT_DIR_ . '/index.php';
870
+ if (is_plugin_active(plugin_basename($quickSEO))) {
871
+ delete_transient('qss_activate');
872
+
873
+ deactivate_plugins(plugin_basename($quickSEO), true);
874
+ SQ_Classes_Error::setMessage(sprintf(__("Good news, %s is integrated in Squirrly SEO now and you no longer have to run 2 different plugins.", _SQ_PLUGIN_NAME_), _QSS_PLUGIN_NAME_));
875
+ }
876
+
877
+ }
878
+
879
+ //Deactivate the Premium SEO Pack plugin
880
+ if (self::isPluginInstalled('premium-seo-pack') && defined('_PSP_ROOT_DIR_')) {
881
+ $phpSEO = _PSP_ROOT_DIR_ . '/index.php';
882
+ if (is_plugin_active(plugin_basename($phpSEO))) {
883
+ delete_transient('psp_activate');
884
+ deactivate_plugins(plugin_basename($phpSEO), true);
885
+ SQ_Classes_Error::setMessage(sprintf(__("Good news, %s is integrated in Squirrly SEO now and you no longer have to run 2 different plugins.", _SQ_PLUGIN_NAME_), _PSP_PLUGIN_NAME_));
886
+
887
+ }
888
+ }
889
+ }
890
+
891
+ /**
892
+ * Empty the cache from other plugins
893
+ * @param null $post_id
894
+ */
895
+ public static function emptyCache($post_id = null) {
896
+ if (function_exists('w3tc_pgcache_flush')) {
897
+ w3tc_pgcache_flush();
898
+ }
899
+
900
+ if (function_exists('w3tc_minify_flush')) {
901
+ w3tc_minify_flush();
902
+ }
903
+ if (function_exists('w3tc_dbcache_flush')) {
904
+ w3tc_dbcache_flush();
905
+ }
906
+ if (function_exists('w3tc_objectcache_flush')) {
907
+ w3tc_objectcache_flush();
908
+ }
909
+
910
+ if (function_exists('wp_cache_clear_cache')) {
911
+ wp_cache_clear_cache();
912
+ }
913
+
914
+ if (function_exists('rocket_clean_domain')) {
915
+ // Remove all cache files
916
+ rocket_clean_domain();
917
+ }
918
+
919
+ if (function_exists('opcache_reset')) {
920
+ // Remove all opcache if enabled
921
+ opcache_reset();
922
+ }
923
+
924
+ if (function_exists('apc_clear_cache')) {
925
+ // Remove all apc if enabled
926
+ apc_clear_cache();
927
+ }
928
+
929
+ if (class_exists('Cache_Enabler_Disk') && method_exists('Cache_Enabler_Disk', 'clear_cache')) {
930
+ // clear disk cache
931
+ Cache_Enabler_Disk::clear_cache();
932
+ }
933
+
934
+ //Clear the fastest cache
935
+ global $wp_fastest_cache;
936
+ if (isset($wp_fastest_cache) && method_exists($wp_fastest_cache, 'deleteCache')) {
937
+ $wp_fastest_cache->deleteCache();
938
+ }
939
+ }
940
+
941
+
942
+ /**
943
+ * Check if a plugin is installed
944
+ * @param $name
945
+ * @return bool
946
+ */
947
+ public static function isPluginInstalled($name) {
948
+ switch ($name) {
949
+ case 'instapage':
950
+ return defined('INSTAPAGE_PLUGIN_PATH');
951
+ case 'quick-seo':
952
+ return defined('QSS_VERSION') && defined('_QSS_ROOT_DIR_');
953
+ case 'premium-seo-pack':
954
+ return defined('PSP_VERSION') && defined('_PSP_ROOT_DIR_');
955
+ default:
956
+ $plugins = (array)get_option('active_plugins', array());
957
+
958
+ if (is_multisite()) {
959
+ $plugins = array_merge(array_values($plugins), array_keys(get_site_option('active_sitewide_plugins')));
960
+ }
961
+
962
+ return in_array($name, $plugins, true);
963
+
964
+ }
965
+ }
966
+
967
+ /**
968
+ * Check if frontend and user is logged in
969
+ * @return bool
970
+ */
971
+ public static function isFrontAdmin() {
972
+ return (!is_admin() && is_user_logged_in());
973
+ }
974
+
975
+ /**
976
+ * Check if user is in dashboard
977
+ * @return bool
978
+ */
979
+ public static function isBackedAdmin() {
980
+ return (is_admin() || is_network_admin());
981
+ }
982
+
983
+ /**
984
+ * Check if the current website is an E-commerce website
985
+ * @return bool
986
+ */
987
+ public static function isEcommerce() {
988
+ $products = array('product', 'wpsc-product');
989
+ $post_types = get_post_types(array('public' => true));
990
+
991
+ foreach ($products as $type) {
992
+ if (in_array($type, array_keys($post_types))) {
993
+ return true;
994
+ }
995
+ }
996
+
997
+ return false;
998
+ }
999
+
1000
+ /**
1001
+ * Get the admin url for the specific age
1002
+ *
1003
+ * @param $page
1004
+ * @param null $tab
1005
+ * @return string
1006
+ */
1007
+ public static function getAdminUrl($page, $tab = null) {
1008
+ if (strpos($page, '.php')) {
1009
+ $url = admin_url($page);
1010
+ } else {
1011
+ $url = admin_url('admin.php?page=' . $page);
1012
+ }
1013
+ if (isset($tab) && $tab <> '') {
1014
+ $url .= '&tab=' . $tab;
1015
+ }
1016
+
1017
+ return $url;
1018
+ }
1019
+
1020
+ }
config.json ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "blocks": {
3
+ "block": [
4
+ {
5
+ "name": "SQ_Core_Blocklogin",
6
+ "description": "Connection Block",
7
+ "actions": {
8
+ "action": [
9
+ "sq_login",
10
+ "sq_register"
11
+ ]
12
+ },
13
+ "active": "1",
14
+ "admin": "1"
15
+ },
16
+ {
17
+ "name": "SQ_Controllers_FocusPages",
18
+ "description": "Focus Pages Controller",
19
+ "actions": {
20
+ "action": [
21
+ "sq_focuspages_addnew",
22
+ "sq_focuspages_update",
23
+ "sq_focuspages_delete"
24
+ ]
25
+ },
26
+ "active": "1",
27
+ "admin": "1"
28
+ },
29
+
30
+ {
31
+ "name": "SQ_Controllers_PostsList",
32
+ "description": "Posts List Page",
33
+ "actions": {
34
+ "action": [
35
+ "inline-save",
36
+ "sq_ajax_postslist"
37
+ ]
38
+ },
39
+ "active": "1",
40
+ "admin": "1"
41
+ },
42
+ {
43
+ "name": "SQ_Controllers_Post",
44
+ "description": "Post Page",
45
+ "actions": {
46
+ "action": [
47
+ "sq_save_ogimage",
48
+ "sq_get_keyword",
49
+ "sq_create_demo",
50
+ "sq_ajax_type_click",
51
+ "sq_ajax_search_blog"
52
+ ]
53
+ },
54
+ "active": "1",
55
+ "admin": "1"
56
+ },
57
+ {
58
+ "name": "SQ_Controllers_Snippet",
59
+ "description": "Snippet Page",
60
+ "actions": {
61
+ "action": [
62
+ "sq_saveseo",
63
+ "sq_getsnippet",
64
+ "sq_previewsnippet"
65
+ ]
66
+ },
67
+ "active": "1",
68
+ "admin": "1"
69
+ },
70
+ {
71
+ "name": "SQ_Controllers_Patterns",
72
+ "description": "Patterns Class",
73
+ "actions": {
74
+ "action": [
75
+ "sq_getpatterns"
76
+ ]
77
+ },
78
+ "active": "1",
79
+ "admin": "0"
80
+ },
81
+ {
82
+ "name": "SQ_Controllers_SeoSettings",
83
+ "actions": {
84
+ "action": [
85
+ "sq_seosettings_automation",
86
+ "sq_seosettings_bulkseo",
87
+ "sq_seosettings_jsonld",
88
+ "sq_seosettings_metas",
89
+ "sq_seosettings_social",
90
+ "sq_seosettings_tracking",
91
+ "sq_seosettings_webmaster",
92
+ "sq_seosettings_sitemap",
93
+ "sq_seosettings_robots",
94
+ "sq_seosettings_favicon",
95
+ "sq_seosettings_backupsettings",
96
+ "sq_seosettings_backupseo",
97
+ "sq_seosettings_restoresettings",
98
+ "sq_seosettings_restoreseo",
99
+ "sq_seosettings_importsettings",
100
+ "sq_seosettings_importseo",
101
+ "sq_seosettings_importall",
102
+ "sq_seosettings_ga_revoke",
103
+ "sq_seosettings_gsc_revoke",
104
+ "sq_ajax_seosettings_save",
105
+ "sq_ajax_automation_addpostype",
106
+ "sq_ajax_automation_deletepostype",
107
+ "sq_ajax_assistant_bulkseo",
108
+ "sq_ajax_sla_sticky"
109
+ ]
110
+ },
111
+ "admin": "1",
112
+ "active": "1"
113
+ },
114
+ {
115
+ "name": "SQ_Controllers_Research",
116
+ "actions": {
117
+ "action": [
118
+ "sq_briefcase_addlabel",
119
+ "sq_briefcase_editlabel",
120
+ "sq_briefcase_keywordlabel",
121
+ "sq_briefcase_article",
122
+ "sq_briefcase_doresearch",
123
+ "sq_briefcase_addkeyword",
124
+ "sq_briefcase_deletekeyword",
125
+ "sq_briefcase_deletelabel",
126
+ "sq_briefcase_backup",
127
+ "sq_briefcase_restore",
128
+ "sq_ajax_briefcase_doserp",
129
+ "sq_ajax_research_others",
130
+ "sq_ajax_research_process",
131
+ "sq_ajax_research_history"
132
+ ]
133
+ },
134
+ "admin": "1",
135
+ "active": "1"
136
+ },
137
+ {
138
+ "name": "SQ_Controllers_Audits",
139
+ "actions": {
140
+ "action": [
141
+ "sq_audits_settings"
142
+ ]
143
+ },
144
+ "admin": "1",
145
+ "active": "1"
146
+ },
147
+ {
148
+ "name": "SQ_Controllers_Ranking",
149
+ "actions": {
150
+ "action": [
151
+ "sq_ranking_settings",
152
+ "sq_serp_refresh_post",
153
+ "sq_serp_delete_keyword"
154
+ ]
155
+ },
156
+ "admin": "1",
157
+ "active": "1"
158
+ },
159
+ {
160
+ "name": "SQ_Controllers_Assistant",
161
+ "actions": {
162
+ "action": [
163
+ "sq_settings_assistant",
164
+ "sq_ajax_assistant"
165
+ ]
166
+ },
167
+ "admin": "1",
168
+ "active": "1"
169
+ },
170
+ {
171
+ "name": "SQ_Controllers_CheckSeo",
172
+ "actions": {
173
+ "action": [
174
+ "sq_checkseo",
175
+ "sq_fixsettings",
176
+ "sq_ignoretask",
177
+ "sq_resetignored"
178
+ ]
179
+ },
180
+ "admin": "1",
181
+ "active": "1"
182
+ },
183
+ {
184
+ "name": "SQ_Controllers_Onboarding",
185
+ "actions": {
186
+ "action": [
187
+ "sq_onboarding_commitment"
188
+ ]
189
+ },
190
+ "admin": "1",
191
+ "active": "1"
192
+ }
193
+
194
+ ]
195
+ }
196
+ }
config/config.php CHANGED
@@ -3,7 +3,6 @@
3
  /**
4
  * The configuration file
5
  */
6
- define('_SQ_SUPPORT_EMAIL_', 'support@squirrly.co');
7
  if (!defined('_SQ_NONCE_ID_')) {
8
  if (defined('NONCE_KEY')) {
9
  define('_SQ_NONCE_ID_', NONCE_KEY);
@@ -11,62 +10,53 @@ if (!defined('_SQ_NONCE_ID_')) {
11
  define('_SQ_NONCE_ID_', md5(date('Y-d')));
12
  }
13
  }
14
- defined('SQ_DEBUG') || define('SQ_DEBUG', 0);
15
- define('_SQ_MOBILE_ICON_SIZES', '76,120,152');
16
- define('REQUEST_TIME', microtime(true));
17
-
18
-
19
- if (!defined('PHP_VERSION_ID')) {
20
- $version = explode('.', PHP_VERSION);
21
- define('PHP_VERSION_ID', ((int)@$version[0] * 1000 + (int)@$version[1] * 100 + ((isset($version[2])) ? ((int)$version[2] * 10) : 0)));
22
- }
23
- if (!defined('WP_VERSION_ID') && isset($wp_version)) {
24
- $version = explode('.', $wp_version);
25
- define('WP_VERSION_ID', ((int)@$version[0] * 1000 + (int)@$version[1] * 100 + ((isset($version[2])) ? ((int)$version[2] * 10) : 0)));
26
- }
27
- if (!defined('WP_VERSION_ID'))
28
- define('WP_VERSION_ID', '3000');
29
 
30
- if (!defined('SQ_VERSION_ID')) {
31
- define('SQ_VERSION_ID', (int)number_format(str_replace('.', '', SQ_VERSION), 0, '', ''));
32
- }
33
 
 
 
 
34
 
35
  /* No path file? error ... */
36
  require_once(dirname(__FILE__) . '/paths.php');
37
 
38
  /* Define the record name in the Option and UserMeta tables */
39
  define('SQ_OPTION', 'sq_options');
40
-
41
 
42
  define('SQ_ALL_PATTERNS', json_encode(array(
43
- '{{date}}' => __("Displays the date of the post/page once it's published", _SQ_PLUGIN_NAME_),
44
- '{{title}}' => __("Adds the title of the post/page once it’s published", _SQ_PLUGIN_NAME_),
 
 
 
45
  '{{page}}' => __("Displays the number of the current page (i.e. 1 of 6)", _SQ_PLUGIN_NAME_),
46
- '{{parent_title}}' => __('Adds the title of a page\'s parent page', _SQ_PLUGIN_NAME_),
47
  '{{sitename}}' => __("Adds the site's name to the post description", _SQ_PLUGIN_NAME_),
48
  '{{sitedesc}}' => __("Adds the tagline/description of your site", _SQ_PLUGIN_NAME_),
49
- '{{excerpt}}' => __("Will display an excerpt from the post/page (if not customized, the excerpt will be auto-generated)", _SQ_PLUGIN_NAME_),
50
- '{{excerpt_only}}' => __("Will display an excerpt from the post/page (no auto-generation)", _SQ_PLUGIN_NAME_),
51
- '{{tag}}' => __("Adds the current tag(s) to the post description", _SQ_PLUGIN_NAME_),
52
  '{{category}}' => __("Adds the post category (several categories will be comma-separated)", _SQ_PLUGIN_NAME_),
53
  '{{primary_category}}' => __("Adds the primary category of the post/page", _SQ_PLUGIN_NAME_),
54
  '{{category_description}}' => __("Adds the category description to the post description", _SQ_PLUGIN_NAME_),
 
55
  '{{tag_description}}' => __("Adds the tag description", _SQ_PLUGIN_NAME_),
56
- '{{term_description}}' => __("Adds the term description", _SQ_PLUGIN_NAME_),
57
  '{{term_title}}' => __("Adds the term name", _SQ_PLUGIN_NAME_),
 
58
  '{{searchphrase}}' => __("Displays the search phrase (if it appears in the post)", _SQ_PLUGIN_NAME_),
59
- '{{sep}}' => __("Places a separator between the elements of the post description", _SQ_PLUGIN_NAME_),
60
  '{{modified}}' => __("Replaces the publication date of a post/page with the modified one", _SQ_PLUGIN_NAME_),
61
  '{{name}}' => __("Displays the author's nicename", _SQ_PLUGIN_NAME_),
62
  '{{user_description}}' => __("Adds the author's biographical info to the post description", _SQ_PLUGIN_NAME_),
63
  '{{currentdate}}' => __("Displays the current date", _SQ_PLUGIN_NAME_),
64
- '{{keyword}}' => __("Adds the post's keyword to the post description", _SQ_PLUGIN_NAME_),
65
  '{{currentday}}' => __("Adds the current day", _SQ_PLUGIN_NAME_),
66
  '{{currentmonth}}' => __("Adds the current month", _SQ_PLUGIN_NAME_),
67
  '{{currentyear}}' => __("Adds the current year", _SQ_PLUGIN_NAME_),
 
 
 
 
 
68
  )));
69
 
 
70
 
71
  define('SQ_ALL_SEP', json_encode(array(
72
  'sc-dash' => '-',
@@ -83,14 +73,3 @@ define('SQ_ALL_SEP', json_encode(array(
83
  'sc-lt' => '&lt;',
84
  'sc-gt' => '&gt;',
85
  )));
86
-
87
- define('SQ_ALL_JSONLD_TYPES', json_encode(array(
88
- 'home' => 'website',
89
- 'profile' => 'profile',
90
- 'post' => 'article',
91
- 'page' => 'website',
92
- 'book' => 'book',
93
- 'music' => 'music',
94
- 'product' => 'product',
95
- 'video' => 'video'
96
- )));
3
  /**
4
  * The configuration file
5
  */
 
6
  if (!defined('_SQ_NONCE_ID_')) {
7
  if (defined('NONCE_KEY')) {
8
  define('_SQ_NONCE_ID_', NONCE_KEY);
10
  define('_SQ_NONCE_ID_', md5(date('Y-d')));
11
  }
12
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
+ define('_SQ_MOBILE_ICON_SIZES', '76,120,152');
 
 
15
 
16
+ define('SQ_ONBOARDING', '9.0.0');
17
+ defined('SQ_DEBUG') || define('SQ_DEBUG', 0);
18
+ define('SQ_REQUEST_TIME', microtime(true));
19
 
20
  /* No path file? error ... */
21
  require_once(dirname(__FILE__) . '/paths.php');
22
 
23
  /* Define the record name in the Option and UserMeta tables */
24
  define('SQ_OPTION', 'sq_options');
25
+ define('SQ_TASKS', 'sq_tasks');
26
 
27
  define('SQ_ALL_PATTERNS', json_encode(array(
28
+ '{{sep}}' => __("Places a separator between the elements of the post description", _SQ_PLUGIN_NAME_),
29
+ '{{title}}' => __("Adds the title of the post/page/term once it’s published", _SQ_PLUGIN_NAME_),
30
+ '{{excerpt}}' => __("Will display an excerpt from the post/page/term (if not customized, the excerpt will be auto-generated)", _SQ_PLUGIN_NAME_),
31
+ '{{excerpt_only}}' => __("Will display an excerpt from the post/page (no auto-generation)", _SQ_PLUGIN_NAME_),
32
+ '{{keyword}}' => __("Adds the post's keyword to the post description", _SQ_PLUGIN_NAME_),
33
  '{{page}}' => __("Displays the number of the current page (i.e. 1 of 6)", _SQ_PLUGIN_NAME_),
 
34
  '{{sitename}}' => __("Adds the site's name to the post description", _SQ_PLUGIN_NAME_),
35
  '{{sitedesc}}' => __("Adds the tagline/description of your site", _SQ_PLUGIN_NAME_),
 
 
 
36
  '{{category}}' => __("Adds the post category (several categories will be comma-separated)", _SQ_PLUGIN_NAME_),
37
  '{{primary_category}}' => __("Adds the primary category of the post/page", _SQ_PLUGIN_NAME_),
38
  '{{category_description}}' => __("Adds the category description to the post description", _SQ_PLUGIN_NAME_),
39
+ '{{tag}}' => __("Adds the current tag(s) (several tags will be comma-separated)", _SQ_PLUGIN_NAME_),
40
  '{{tag_description}}' => __("Adds the tag description", _SQ_PLUGIN_NAME_),
 
41
  '{{term_title}}' => __("Adds the term name", _SQ_PLUGIN_NAME_),
42
+ '{{term_description}}' => __("Adds the term description", _SQ_PLUGIN_NAME_),
43
  '{{searchphrase}}' => __("Displays the search phrase (if it appears in the post)", _SQ_PLUGIN_NAME_),
 
44
  '{{modified}}' => __("Replaces the publication date of a post/page with the modified one", _SQ_PLUGIN_NAME_),
45
  '{{name}}' => __("Displays the author's nicename", _SQ_PLUGIN_NAME_),
46
  '{{user_description}}' => __("Adds the author's biographical info to the post description", _SQ_PLUGIN_NAME_),
47
  '{{currentdate}}' => __("Displays the current date", _SQ_PLUGIN_NAME_),
48
+ '{{date}}' => __("Displays the date of the post/page once it's published", _SQ_PLUGIN_NAME_),
49
  '{{currentday}}' => __("Adds the current day", _SQ_PLUGIN_NAME_),
50
  '{{currentmonth}}' => __("Adds the current month", _SQ_PLUGIN_NAME_),
51
  '{{currentyear}}' => __("Adds the current year", _SQ_PLUGIN_NAME_),
52
+ '{{parent_title}}' => __('Adds the title of a page\'s parent page', _SQ_PLUGIN_NAME_),
53
+ '{{product_name}}' => __('Adds the product name from Woocommerce for the current product', _SQ_PLUGIN_NAME_),
54
+ '{{product_price}}' => __('Adds the product price from Woocommerce for the current product', _SQ_PLUGIN_NAME_),
55
+ '{{product_sale}}' => __('Adds the product sale price from Woocommerce for the current product', _SQ_PLUGIN_NAME_),
56
+ '{{product_currency}}' => __('Adds the product price currency from Woocommerce for the current product', _SQ_PLUGIN_NAME_),
57
  )));
58
 
59
+ define('SQ_ALL_JSONLD_TYPES', json_encode(array('website','profile','article','book','music','product','video')));
60
 
61
  define('SQ_ALL_SEP', json_encode(array(
62
  'sc-dash' => '-',
73
  'sc-lt' => '&lt;',
74
  'sc-gt' => '&gt;',
75
  )));
 
 
 
 
 
 
 
 
 
 
 
config/paths.php CHANGED
@@ -8,29 +8,37 @@ 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_DASH_URL_') || define('_SQ_DASH_URL_', 'https://my.squirrly.co/');
12
- defined('SQ_URI') || define('SQ_URI', 'wp480');
13
- defined('_SQ_API_URL_') || define('_SQ_API_URL_', '//api.squirrly.co/');
 
 
14
 
 
15
  defined('_SQ_STATIC_API_URL_') || define('_SQ_STATIC_API_URL_', '//storage.googleapis.com/squirrly/');
16
  defined('_SQ_SUPPORT_EMAIL_URL_') || define('_SQ_SUPPORT_EMAIL_URL_', 'http://plugin.squirrly.co/contact/');
17
  defined('_SQ_SUPPORT_FACEBOOK_URL_') || define('_SQ_SUPPORT_FACEBOOK_URL_', 'https://www.facebook.com/Squirrly.co');
 
18
  defined('_SQ_SUPPORT_URL_') || define('_SQ_SUPPORT_URL_', _SQ_SUPPORT_FACEBOOK_URL_);
19
 
20
  /* Directories */
21
- define('_SQ_ROOT_DIR_', realpath(dirname($currentDir)));
22
- define('_SQ_CLASSES_DIR_', _SQ_ROOT_DIR_ . '/classes/');
23
- define('_SQ_CONTROLLER_DIR_', _SQ_ROOT_DIR_ . '/controllers/');
24
- define('_SQ_MODEL_DIR_', _SQ_ROOT_DIR_ . '/models/');
25
- define('_SQ_SERVICE_DIR_', _SQ_MODEL_DIR_ . '/services/');
26
- define('_SQ_TRANSLATIONS_DIR_', _SQ_ROOT_DIR_ . '/translations/');
27
- define('_SQ_CORE_DIR_', _SQ_ROOT_DIR_ . '/core/');
28
- define('_SQ_THEME_DIR_', _SQ_ROOT_DIR_ . '/view/');
 
29
 
30
  /* URLS */
31
- define('_SQ_URL_', plugins_url('', $currentDir));
32
- define('_SQ_THEME_URL_', _SQ_URL_ . '/view/');
33
- define('_SQ_THEME_RELATIVE_URL_', ltrim(parse_url(_SQ_THEME_URL_, PHP_URL_PATH), '/'));
 
 
34
 
35
  $upload_dir = array();
36
  $upload_dir['baseurl'] = WP_CONTENT_URL . '/uploads';
@@ -55,4 +63,3 @@ if ($upload_path <> '') {
55
  defined('_SQ_CACHE_DIR_') || define('_SQ_CACHE_DIR_', _SQ_ROOT_DIR_ . '/cache/');
56
  defined('_SQ_CACHE_URL_') || define('_SQ_CACHE_URL_', _SQ_URL_ . '/cache/');
57
 
58
-
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');
22
+ defined('_SQ_HOWTO_URL_') || define('_SQ_HOWTO_URL_', 'https://howto.squirrly.co/wordpress-seo/');
23
  defined('_SQ_SUPPORT_URL_') || define('_SQ_SUPPORT_URL_', _SQ_SUPPORT_FACEBOOK_URL_);
24
 
25
  /* Directories */
26
+ define('_SQ_ROOT_DIR_', realpath(dirname($currentDir)) . '/');
27
+ define('_SQ_CLASSES_DIR_', _SQ_ROOT_DIR_ . 'classes/');
28
+ define('_SQ_CONTROLLER_DIR_', _SQ_ROOT_DIR_ . 'controllers/');
29
+ define('_SQ_MODEL_DIR_', _SQ_ROOT_DIR_ . 'models/');
30
+ define('_SQ_SERVICE_DIR_', _SQ_MODEL_DIR_ . 'services/');
31
+ define('_SQ_TRANSLATIONS_DIR_', _SQ_ROOT_DIR_ . 'translations/');
32
+ define('_SQ_CORE_DIR_', _SQ_ROOT_DIR_ . 'core/');
33
+ define('_SQ_THEME_DIR_', _SQ_ROOT_DIR_ . 'view/');
34
+ define('_SQ_ASSETS_DIR_', _SQ_THEME_DIR_ . 'assets/');
35
 
36
  /* URLS */
37
+ define('_SQ_URL_', rtrim(plugins_url('', $currentDir), '/') . '/');
38
+ define('_SQ_THEME_URL_', _SQ_URL_ . 'view/');
39
+ define('_SQ_ASSETS_URL_', _SQ_THEME_URL_ . 'assets/');
40
+ define('_SQ_ASSETS_RELATIVE_URL_', ltrim(parse_url(_SQ_ASSETS_URL_, PHP_URL_PATH), '/'));
41
+
42
 
43
  $upload_dir = array();
44
  $upload_dir['baseurl'] = WP_CONTENT_URL . '/uploads';
63
  defined('_SQ_CACHE_DIR_') || define('_SQ_CACHE_DIR_', _SQ_ROOT_DIR_ . '/cache/');
64
  defined('_SQ_CACHE_URL_') || define('_SQ_CACHE_URL_', _SQ_URL_ . '/cache/');
65
 
 
controllers/Account.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * User Account
5
+ */
6
+ class SQ_Controllers_Account extends SQ_Classes_FrontController {
7
+
8
+ public function init() {
9
+ }
10
+
11
+ }
controllers/Api.php DELETED
@@ -1,76 +0,0 @@
1
- <?php
2
-
3
- class SQ_Controllers_Api extends SQ_Classes_FrontController {
4
-
5
-
6
- /**
7
- * Initialize the TinyMCE editor for the current use
8
- *
9
- * @return void
10
- */
11
- public function hookInit() {
12
-
13
- if (SQ_Classes_Tools::getOption('sq_api') == '')
14
- return;
15
-
16
- //Change the rest api if needed
17
- add_action('rest_api_init', array($this, 'sqApiCall'));
18
- }
19
-
20
-
21
- function sqApiCall() {
22
- if (function_exists('register_rest_route')) {
23
- register_rest_route('save', '/post/', array(
24
- 'methods' => WP_REST_Server::EDITABLE,
25
- 'callback' => array($this, 'savePost'),
26
- ));
27
- }
28
- }
29
-
30
-
31
- public function savePost($request) {
32
- SQ_Classes_Tools::setHeader('json');
33
- $token = $request->get_param('token');
34
- if ($token <> '') {
35
- $token = sanitize_text_field($token);
36
- }
37
-
38
- if (SQ_Classes_Tools::getToken() <> $token) {
39
- SQ_Classes_Action::apiSaveSettings();
40
- exit(json_encode(array('error' => __('Connection expired. Please try again', _SQ_PLUGIN_NAME_))));
41
-
42
- }
43
-
44
- $post = $request->get_param('post');
45
- if ($post = json_decode($post)) {
46
- if (isset($post->ID) && $post->ID > 0) {
47
- $post = new WP_Post($post);
48
- $post->ID = 0;
49
- if (isset($post->post_author)) {
50
- if (is_email($post->post_author)) {
51
- if ($user = get_user_by('email', $post->post_author)) {
52
- $post->post_author = $user->ID;
53
- } else {
54
- exit(json_encode(array('error' => __('Author not found', _SQ_PLUGIN_NAME_))));
55
- }
56
- } else {
57
- exit(json_encode(array('error' => __('Author not found', _SQ_PLUGIN_NAME_))));
58
- }
59
- } else {
60
- exit(json_encode(array('error' => __('Author not found', _SQ_PLUGIN_NAME_))));
61
- }
62
-
63
- $post_ID = wp_insert_post($post->to_array());
64
- if (is_wp_error($post_ID)) {
65
- echo json_encode(array('error' => $post_ID->get_error_message()));
66
- } else {
67
- echo json_encode(array('saved' => true, 'post_ID' => $post_ID, 'permalink' => get_permalink($post_ID)));
68
- }
69
- exit();
70
- }
71
- }
72
- echo json_encode(array('error' => true));
73
- exit();
74
- }
75
-
76
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/Assistant.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Assistant extends SQ_Classes_FrontController {
4
+
5
+
6
+ function init() {
7
+ $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'assistant');
8
+
9
+ if (method_exists($this, $tab)) {
10
+ call_user_func(array($this, $tab));
11
+ }
12
+
13
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
14
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
15
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
16
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('datatables');
17
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
18
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
19
+
20
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
21
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
22
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
23
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('chart');
24
+
25
+ //@ob_flush();
26
+ echo $this->getView('Assistant/' . ucfirst($tab));
27
+
28
+ //get the modal window for the assistant popup
29
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
30
+ }
31
+
32
+ public function assistant() {
33
+ }
34
+
35
+ public function settings() {
36
+ $search = (string)SQ_Classes_Helpers_Tools::getValue('skeyword', '');
37
+ $labels = SQ_Classes_Helpers_Tools::getValue('slabel', false);
38
+
39
+ $args = array();
40
+ $args['search'] = $search;
41
+ if ($labels && !empty($labels)) {
42
+ $args['label'] = join(',', $labels);
43
+ }
44
+ SQ_Debug::dump($args);
45
+
46
+ $json = SQ_Classes_RemoteController::getBriefcase($args);
47
+
48
+ $this->rankkeywords = SQ_Classes_RemoteController::getRanks();
49
+
50
+ SQ_Debug::dump($json);
51
+
52
+ if (isset($json->keywords) && !empty($json->keywords)) {
53
+ $this->keywords = $json->keywords;
54
+ } else {
55
+
56
+ $this->error = __('No keyword found.', _SQ_PLUGIN_NAME_);
57
+
58
+ }
59
+
60
+ if (isset($json->labels)) {
61
+ $this->labels = $json->labels;
62
+ }
63
+
64
+ wp_enqueue_style('wp-color-picker');
65
+ wp_enqueue_script('wp-color-picker');
66
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
67
+
68
+ }
69
+
70
+
71
+ /**
72
+ * Called when action is triggered
73
+ *
74
+ * @return void
75
+ */
76
+ public function action() {
77
+
78
+ parent::action();
79
+ SQ_Classes_Helpers_Tools::setHeader('json');
80
+
81
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
82
+
83
+ ///////////////////////////////////////////LIVE ASSISTANT SETTINGS
84
+ case 'sq_settings_assistant':
85
+ if (!current_user_can('sq_manage_settings')) {
86
+ return;
87
+ }
88
+
89
+ //Save the settings
90
+ if (!empty($_POST)) {
91
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
92
+ }
93
+
94
+ //show the saved message
95
+ SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
96
+
97
+ break;
98
+
99
+ case 'sq_ajax_assistant':
100
+ if (!current_user_can('sq_manage_settings')) {
101
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
102
+ SQ_Classes_Helpers_Tools::setHeader('json');
103
+ echo json_encode($response);
104
+ exit();
105
+ }
106
+
107
+ SQ_Classes_Helpers_Tools::setHeader('json');
108
+
109
+ $input = SQ_Classes_Helpers_Tools::getValue('input', '');
110
+ $value = (bool)SQ_Classes_Helpers_Tools::getValue('value', false);
111
+ if ($input) {
112
+ //unpack the input into expected variables
113
+ list($category_name, $name, $option) = explode('|', $input);
114
+ $dbtasks = json_decode(get_option(SQ_TASKS), true);
115
+
116
+ if ($category_name <> '' && $name <> '') {
117
+ if(!$option) $option = 'active';
118
+ $dbtasks[$category_name][$name][$option] = $value;
119
+ update_option(SQ_TASKS, json_encode($dbtasks));
120
+ }
121
+
122
+ $response['data'] = SQ_Classes_Error::showNotices(__('Saved', _SQ_PLUGIN_NAME_), 'sq_success');
123
+ echo json_encode($response);
124
+ exit;
125
+ }
126
+
127
+ $response['data'] = SQ_Classes_Error::showNotices(__('Error: Could not save the data.', _SQ_PLUGIN_NAME_), 'sq_error');
128
+ echo json_encode($response);
129
+ exit();
130
+
131
+
132
+
133
+ }
134
+
135
+
136
+ }
137
+ }
controllers/Audits.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Audits extends SQ_Classes_FrontController {
4
+
5
+ public $blogs;
6
+ public $audits;
7
+
8
+ /** @var int Audit history limit */
9
+ public $limit = 10;
10
+
11
+ function init() {
12
+ //Checkin to API V2
13
+ SQ_Classes_RemoteController::checkin();
14
+
15
+ $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'audits');
16
+
17
+ if (method_exists($this, $tab)) {
18
+ call_user_func(array($this, $tab));
19
+ }
20
+
21
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
22
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
23
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
24
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
25
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
26
+
27
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
28
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
29
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('audits');
30
+
31
+ //@ob_flush();
32
+ echo $this->getView('Audits/' . ucfirst($tab));
33
+
34
+ //get the modal window for the assistant popup
35
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
36
+
37
+ }
38
+
39
+ public function audits() {
40
+
41
+ $args = array();
42
+ $args['limit'] = $this->limit;
43
+
44
+ $this->audits = SQ_Classes_RemoteController::getBlogAudits($args);
45
+
46
+ if(is_wp_error($this->audits)) {
47
+ $this->audits = array();
48
+ }
49
+ SQ_Debug::dump($this->audits);
50
+
51
+ }
52
+
53
+ /**
54
+ * Called when action is triggered
55
+ *
56
+ * @return void
57
+ */
58
+ public function action() {
59
+ parent::action();
60
+
61
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
62
+ case 'sq_audits_settings':
63
+ if (!current_user_can('sq_manage_settings')) {
64
+ return;
65
+ }
66
+
67
+ $email = sanitize_email(SQ_Classes_Helpers_Tools::getValue('sq_audit_email'));
68
+ SQ_Classes_Helpers_Tools::saveOptions('sq_audit_email', $email);
69
+
70
+ if ($email <> '') {
71
+
72
+ //Save the settings on API too
73
+ $args = array();
74
+ $args['audit_email'] = $email;
75
+ SQ_Classes_RemoteController::saveSettings($args);
76
+ ///////////////////////////////
77
+
78
+ //show the saved message
79
+ SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
80
+ } else {
81
+ SQ_Classes_Error::setError(__('Not a valid email address', _SQ_PLUGIN_NAME_));
82
+
83
+ }
84
+
85
+ break;
86
+ }
87
+
88
+ }
89
+ }
controllers/CheckSeo.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class SQ_Controllers_CheckSeo extends SQ_Classes_FrontController {
3
+ public $report;
4
+ public $report_time;
5
+
6
+ /**
7
+ * Call the init on Dashboard
8
+ * @return mixed|void
9
+ */
10
+ public function init() {
11
+ $this->report = get_option('sq_seoreport');
12
+ $this->report_time = get_option('sq_seoreport_time');
13
+
14
+ if (!empty($this->report)) {
15
+ if (!$tasks_ignored = get_option('sq_seoreport_ignore')) {
16
+ $tasks_ignored = array();
17
+ }
18
+
19
+ $tasks = $this->model->getTasks();
20
+ foreach ($this->report as $function => &$row) {
21
+ if (!in_array($function, $tasks_ignored)) {
22
+ if (isset($tasks[$function])) {
23
+ $row = array_merge($tasks[$function], $row);
24
+ }
25
+ } else {
26
+ unset($this->report[$function]);
27
+ }
28
+ }
29
+ }
30
+
31
+
32
+ echo $this->getView('Blocks/SEOIssues');
33
+ }
34
+
35
+ /**
36
+ * Return the number of SEO errors if exists
37
+ * @return bool|int
38
+ */
39
+ public function getErrorsCount(){
40
+ $this->report = get_option('sq_seoreport');
41
+ if (!empty($this->report)) {
42
+ return count((array)$this->report);
43
+ }
44
+
45
+ return false;
46
+ }
47
+
48
+ /**
49
+ * Check SEO Actions
50
+ */
51
+ public function action() {
52
+ parent::action();
53
+
54
+ if (!current_user_can('manage_options')) {
55
+ return;
56
+ }
57
+
58
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
59
+ case 'sq_checkseo':
60
+ SQ_Classes_Error::setMessage(__('Done!', _SQ_PLUGIN_NAME_));
61
+ //Check all the SEO
62
+ //Process all the tasks and save the report
63
+ $this->model->checkSEO();
64
+
65
+ break;
66
+
67
+ case 'sq_fixsettings':
68
+ $name = SQ_Classes_Helpers_Tools::getValue('name', false);
69
+ $value = SQ_Classes_Helpers_Tools::getValue('value', false);
70
+
71
+ if ($name && $value) {
72
+ if (in_array($name, array_keys(SQ_Classes_Helpers_Tools::$options))) {
73
+ SQ_Classes_Helpers_Tools::saveOptions($name, $value);
74
+
75
+ //Process all the tasks and save the report
76
+ $this->model->checkSEO();
77
+
78
+ SQ_Classes_Error::setMessage(__('Fixed!', _SQ_PLUGIN_NAME_));
79
+ return;
80
+ }
81
+ }
82
+
83
+ SQ_Classes_Error::setError(__('Could not fix it. You need to change it manually.', _SQ_PLUGIN_NAME_));
84
+ break;
85
+
86
+ case 'sq_ignoretask':
87
+
88
+ $name = SQ_Classes_Helpers_Tools::getValue('name', false);
89
+
90
+ if ($name) {
91
+ if (!$tasks_ignored = get_option('sq_seoreport_ignore')) {
92
+ $tasks_ignored = array();
93
+ }
94
+
95
+ array_push($tasks_ignored, $name);
96
+ $tasks_ignored = array_unique($tasks_ignored);
97
+ update_option('sq_seoreport_ignore', $tasks_ignored);
98
+ }
99
+
100
+ SQ_Classes_Error::setMessage(__('Saved! This task will be ignored in the future.', _SQ_PLUGIN_NAME_));
101
+ break;
102
+
103
+ case 'sq_resetignored':
104
+ update_option('sq_seoreport_ignore', array());
105
+ SQ_Classes_Error::setMessage(__('Saved!', _SQ_PLUGIN_NAME_));
106
+
107
+ break;
108
+
109
+ }
110
+
111
+
112
+ }
113
+
114
+ }
controllers/Cron.php CHANGED
@@ -3,16 +3,18 @@
3
  class SQ_Controllers_Cron extends SQ_Classes_FrontController {
4
 
5
  public function processSEOPostCron() {
6
- SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
7
- SQ_Classes_ObjController::getClass('SQ_Classes_Action');
 
 
8
 
9
- if (get_option('sq_seopost') !== false) {
10
  $process = json_decode(get_option('sq_seopost'), true);
11
 
12
- if(!empty($process)) {
13
- foreach ($process as $key => $call) {
14
 
15
- if (!$response = json_decode(SQ_Classes_Action::apiCall('sq/seo/post', $call, 10))) {
16
  break;
17
  }
18
 
@@ -21,17 +23,25 @@ class SQ_Controllers_Cron extends SQ_Classes_FrontController {
21
  }
22
  }
23
 
 
24
  }
25
- update_option('sq_seopost', json_encode($process));
26
  }
27
  }
28
 
29
- public function processRankingCron() {
30
- if(SQ_Classes_Tools::getOption('sq_google_serp_active')) {
31
- SQ_Classes_ObjController::getClass('SQ_Controllers_SerpChecker')->processCron();
32
- }else {
33
- SQ_Classes_ObjController::getClass('SQ_Classes_Ranking')->processCron();
 
 
 
 
 
34
  }
 
 
35
  }
36
 
 
37
  }
3
  class SQ_Controllers_Cron extends SQ_Classes_FrontController {
4
 
5
  public function processSEOPostCron() {
6
+ //make sure the classes are loaded
7
+ SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_Tools');
8
+ SQ_Classes_ObjController::getClass('SQ_Classes_ActionController');
9
+ SQ_Classes_ObjController::getClass('SQ_Classes_RemoteController');
10
 
11
+ if (get_option('sq_seopost')) {
12
  $process = json_decode(get_option('sq_seopost'), true);
13
 
14
+ if (!empty($process)) {
15
+ foreach ($process as $key => $args) {
16
 
17
+ if (!$response = SQ_Classes_RemoteController::savePost($args)) {
18
  break;
19
  }
20
 
23
  }
24
  }
25
 
26
+ update_option('sq_seopost', json_encode($process));
27
  }
 
28
  }
29
  }
30
 
31
+ public function processSEOCheckCron() {
32
+ //make sure the classes are loaded
33
+ SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_Tools');
34
+
35
+ //Check the SEO and save the Report
36
+ $report_time = get_option('sq_seoreport_time');
37
+ if (isset($report_time['timestamp'])) {
38
+ if ((time() - $report_time['timestamp']) < (3600 * 12)) {
39
+ return false;
40
+ }
41
  }
42
+
43
+ SQ_Classes_ObjController::getClass('SQ_Models_CheckSeo')->checkSEO();
44
  }
45
 
46
+
47
  }
controllers/Dashboard.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Dashboard
5
+ */
6
+ class SQ_Controllers_Dashboard extends SQ_Classes_FrontController {
7
+ //checkin API
8
+ public $checkin;
9
+
10
+ public function init() {
11
+ //Checkin to API V2
12
+ $this->checkin = SQ_Classes_RemoteController::checkin();
13
+
14
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
15
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
16
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
17
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
18
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
19
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('research');
20
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar.css');
21
+
22
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
23
+
24
+ //@ob_flush();
25
+ parent::init();
26
+
27
+ //get the modal window for the assistant popup
28
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
29
+
30
+ }
31
+
32
+
33
+ }
controllers/Feed.php DELETED
@@ -1,83 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class for Sitemap Generator
5
- */
6
- class SQ_Controllers_Feed extends SQ_Classes_FrontController {
7
- /* @var string post limit */
8
-
9
- var $posts_limit = 10000;
10
-
11
- public function __construct() {
12
- parent::__construct();
13
- add_filter('template_redirect', array($this, 'hookPreventRedirect'), 1, 0);
14
- }
15
-
16
- public function hookPreventRedirect() {
17
- global $wp_query;
18
- if (get_query_var('feed')) {
19
- $wp_query->is_404 = false;
20
- $wp_query->is_feed = true;
21
-
22
- add_filter('feed_content_type', array($this, 'feedHeader'), 10, 2);
23
- add_action('rss_tag_pre', array($this, 'feedStyle'));
24
- add_action('rss2_head', array($this, 'feedCss'));
25
- add_filter('the_content', array($this, 'addFeedMedia'));
26
- }
27
- }
28
-
29
- public function feedCss() {
30
- echo "\t" . '<feedcss>' . _SQ_THEME_URL_ . 'css/' . 'feed.css</feedcss>' . "\n";
31
- }
32
-
33
- public function feedStyle() {
34
- echo '<?xml-stylesheet type="text/xsl" href="' . _SQ_THEME_URL_ . 'css/' . 'feed.xsl' . '"?>';
35
- }
36
-
37
- public function feedHeader($content_type, $type) {
38
- if (empty($type)) {
39
- $type = get_default_feed();
40
- }
41
-
42
- $types = array(
43
- 'rss' => ' text/xml',
44
- 'rss2' => ' text/xml'
45
- );
46
- $content_type = (!empty($types[$type])) ? $types[$type] : $content_type;
47
-
48
- return $content_type;
49
- }
50
-
51
- public function addFeedMedia($content) {
52
- global $post;
53
- if (has_post_thumbnail($post->ID)) {
54
- $attachment = get_post(get_post_thumbnail_id($post->ID));
55
- if (isset($attachment->ID)) {
56
- $thumb = wp_get_attachment_image_src($attachment->ID, 'large');
57
- $content = '<div class="thumbnail">
58
- <a href="' . get_permalink($post->ID) . '">
59
- <img src="' . esc_url($thumb[0]) . '" alt="' . get_the_title($post->ID) . '">
60
- </a>
61
- </div>' . $content;
62
- }
63
- }
64
- return $content;
65
- }
66
-
67
- function featuredtoRSS($content) {
68
- global $post;
69
- if (has_post_thumbnail($post->ID)) {
70
- $content = '<div>' . get_the_post_thumbnail($post->ID, 'medium') . '</div>' . $content;
71
- }
72
- return $content;
73
- }
74
-
75
- public function refreshSitemap($new_status, $old_status, $post) {
76
- if ($old_status <> $new_status && $new_status = 'publish') {
77
- if (SQ_Classes_Tools::getOption('sq_sitemap_ping')) {
78
- wp_schedule_single_event(time() + 5, 'sq_processPing');
79
- }
80
- }
81
- }
82
-
83
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/FocusPages.php ADDED
@@ -0,0 +1,261 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_FocusPages extends SQ_Classes_FrontController {
4
+
5
+ /** @var array list of tasks labels */
6
+ public $labels = array();
7
+ /** @var array found pages in DB */
8
+ public $pages = array();
9
+ /** @var array of focus pages from API */
10
+ public $focuspages = array();
11
+ /** @var object with the connection status from API */
12
+ public $checkin;
13
+
14
+ /**
15
+ * Initiate the class if called from menu
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
+
26
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
27
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
28
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
29
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
30
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
31
+
32
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
33
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
34
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('seosettings');
35
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('chart');
36
+
37
+ if (method_exists($this, $tab)) {
38
+ call_user_func(array($this, $tab));
39
+ }
40
+
41
+ //@ob_flush();
42
+
43
+ if (is_wp_error($this->checkin)) {
44
+ SQ_Classes_Error::setError('Could not connect to Squirrly Cloud. Please refresh.');
45
+ SQ_Classes_Error::hookNotices();
46
+ return;
47
+ }
48
+
49
+ echo $this->getView('FocusPages/' . ucfirst($tab));
50
+
51
+ //get the modal window for the assistant popup
52
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
53
+ }
54
+
55
+ /**
56
+ * Load for Add Focus Page menu tab
57
+ */
58
+ public function addpage() {
59
+ global $wp_query;
60
+ wp_reset_query();
61
+
62
+ $search = (string)SQ_Classes_Helpers_Tools::getValue('skeyword', '');
63
+ $paged = SQ_Classes_Helpers_Tools::getValue('paged', 1);
64
+ $post_per_page = SQ_Classes_Helpers_Tools::getValue('cnt', 10);
65
+
66
+ //get all the public post types
67
+ $types = get_post_types(array('public' => true));
68
+ $statuses = array('publish');
69
+ $post_ids = array();
70
+ if ($search <> '') {
71
+ $post_per_page = -1;
72
+ }
73
+
74
+ if (!empty($types)) {
75
+
76
+ //get all the posts types from database
77
+ $query = array(
78
+ 'post_type' => array_keys($types),
79
+ 's' => (strpos($search, '/') === false ? $search : ''),
80
+ 'post_status' => $statuses,
81
+ 'posts_per_page' => $post_per_page,
82
+ 'paged' => $paged,
83
+ 'orderby' => 'date',
84
+ 'order' => 'DESC',
85
+ );
86
+
87
+ $wp_query = new WP_Query($query);
88
+ $posts = $wp_query->get_posts();
89
+
90
+ if (!empty($posts)) {
91
+ foreach ($posts as $post) {
92
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($post)) {
93
+ //Search the Squirrly Title, Description and URL if search is set
94
+ if ($search <> '') {
95
+ if (stripos($post->post_title, $search) === false && stripos($post->sq->title, $search) === false && stripos($post->sq->description, $search) === false && stripos($post->url, $search) === false) {
96
+ continue;
97
+ }
98
+ }
99
+ $post_ids[] = $post->ID;
100
+ $this->pages[] = $post;
101
+ unset($page);
102
+ }
103
+ }
104
+ }
105
+
106
+ //get also the focus pages
107
+ $this->focuspages = SQ_Classes_RemoteController::getFocusPages();
108
+
109
+ }
110
+
111
+
112
+ }
113
+
114
+ /**
115
+ * Called for List of the Focus Pages
116
+ */
117
+ public function pagelist() {
118
+ $labels = SQ_Classes_Helpers_Tools::getValue('slabel', array());
119
+
120
+ //Set the Labels and Categories
121
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('focuspages');
122
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('labels');
123
+ SQ_Classes_ObjController::getClass('SQ_Models_FocusPages')->init();
124
+
125
+ if ($this->checkin) {
126
+ if ($focuspages = SQ_Classes_RemoteController::getFocusPages()) {
127
+
128
+ if (is_wp_error($focuspages)) {
129
+ SQ_Classes_Error::setError('Could not load the Focus Pages.');
130
+ SQ_Classes_Error::hookNotices();
131
+ return;
132
+ }
133
+
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
+ }
171
+
172
+
173
+ /**
174
+ * Called when action is triggered
175
+ *
176
+ * @return void
177
+ */
178
+ public function action() {
179
+
180
+ parent::action();
181
+
182
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
183
+ case 'sq_focuspages_addnew':
184
+ if (!current_user_can('sq_manage_focuspages')) {
185
+ return;
186
+ }
187
+
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;
195
+ if ($focuspage = SQ_Classes_RemoteController::addFocusPage($args)) {
196
+ if (!is_wp_error($focuspage)) {
197
+ SQ_Classes_Error::setError(__('Focus page is added. The audit may take a while so please be patient.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
198
+ set_transient('sq_focuspage_' . $post_id, strtotime(date('Y-m-d H:i:s')));
199
+ } elseif ($focuspage->get_error_message() == 'limit_exceed') {
200
+ SQ_Classes_Error::setError(__('You reached the maximum number of focus pages for your account.', _SQ_PLUGIN_NAME_) . " <br /> ");
201
+ }
202
+ } else {
203
+ SQ_Classes_Error::setError(__('Error! Could not add the focus page.', _SQ_PLUGIN_NAME_) . " <br /> ");
204
+ }
205
+ } else {
206
+ SQ_Classes_Error::setError(__('Error! This focus page is not public.', _SQ_PLUGIN_NAME_) . " <br /> ");
207
+ }
208
+ } else {
209
+ SQ_Classes_Error::setError(__('Error! Could not find the focus page in your website.', _SQ_PLUGIN_NAME_) . " <br /> ");
210
+ }
211
+ }
212
+ break;
213
+
214
+ case 'sq_focuspages_update':
215
+ if (!current_user_can('sq_manage_focuspages')) {
216
+ return;
217
+ }
218
+
219
+ $post_id = SQ_Classes_Helpers_Tools::getValue('id', false);
220
+ $user_post_id = SQ_Classes_Helpers_Tools::getValue('user_post_id', false);
221
+ if ($user_post_id) {
222
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($post_id)) {
223
+ if ($post->post_status == 'publish') {
224
+ $args = array();
225
+ $args['post_id'] = $user_post_id;
226
+ $args['permalink'] = $post->url;
227
+ if ($focuspage = SQ_Classes_RemoteController::updateFocusPage($args)) {
228
+ if (!is_wp_error($focuspage)) {
229
+ SQ_Classes_Error::setError(__('Focus page sent for recheck. It may take a while so please be patient.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
230
+ set_transient('sq_focuspage_' . $post_id, strtotime(date('Y-m-d H:i:s')));
231
+ } elseif ($focuspage->get_error_message() == 'too_many_attempts') {
232
+ SQ_Classes_Error::setError(__("You've made too many requests, please wait a few minutes.", _SQ_PLUGIN_NAME_) . " <br /> ");
233
+ }
234
+ } else {
235
+ SQ_Classes_Error::setError(__('Error! Could not refresh the focus page.', _SQ_PLUGIN_NAME_) . " <br /> ");
236
+ }
237
+ } else {
238
+ SQ_Classes_Error::setError(__('Error! This focus page is not public.', _SQ_PLUGIN_NAME_) . " <br /> ");
239
+ }
240
+ } else {
241
+ SQ_Classes_Error::setError(__('Error! Could not find the focus page in your website.', _SQ_PLUGIN_NAME_) . " <br /> ");
242
+ }
243
+ }
244
+ break;
245
+ case 'sq_focuspages_delete':
246
+ if (!current_user_can('sq_manage_focuspages')) {
247
+ return;
248
+ }
249
+
250
+ if ($user_post_id = SQ_Classes_Helpers_Tools::getValue('id', false)) {
251
+ SQ_Classes_RemoteController::deleteFocusPage(array('user_post_id' => $user_post_id));
252
+ SQ_Classes_Error::setError(__('The focus page is deleted', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
253
+ } else {
254
+ SQ_Classes_Error::setError(__('Invalid params!', _SQ_PLUGIN_NAME_) . " <br /> ");
255
+ }
256
+
257
+ break;
258
+ }
259
+
260
+ }
261
+ }
controllers/FrontMenu.php DELETED
@@ -1,104 +0,0 @@
1
- <?php
2
-
3
- class SQ_Controllers_FrontMenu extends SQ_Classes_FrontController {
4
-
5
- public function action() {
6
- parent::action();
7
- switch (SQ_Classes_Tools::getValue('action')) {
8
- case 'sq_saveseo':
9
- //Save the SEO settings
10
- $json = $this->saveSEO();
11
-
12
- if (SQ_Classes_Tools::isAjax()) {
13
- SQ_Classes_Tools::setHeader('json');
14
- echo json_encode($json);
15
- exit();
16
- }
17
- break;
18
- }
19
- }
20
-
21
- public function saveSEO(){
22
- $json = array();
23
- if (SQ_Classes_Tools::getIsset('sq_hash')) {
24
- $sq_hash = SQ_Classes_Tools::getValue('sq_hash', false);
25
- $post_id = SQ_Classes_Tools::getValue('post_id', 0);
26
- $term_taxonomy_id = SQ_Classes_Tools::getValue('term_taxonomy_id', 0);
27
- $taxonomy = SQ_Classes_Tools::getValue('taxonomy', 'category');
28
-
29
- if (!current_user_can('manage_options')) {
30
- if (!current_user_can('edit_post', $post_id)) {
31
- $json['error'] = 1;
32
- $json['error_message'] = __("You don't have enough pemission to edit this article", _SQ_PLUGIN_NAME_);
33
- exit();
34
- }
35
- }
36
-
37
- $url = SQ_Classes_Tools::getValue('sq_url', false);
38
-
39
- $sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($sq_hash);
40
-
41
- $sq->doseo = SQ_Classes_Tools::getValue('sq_doseo', 0);
42
-
43
- $sq->title = SQ_Classes_Tools::getValue('sq_title', false);
44
- $sq->description = SQ_Classes_Tools::getValue('sq_description', false);
45
- $sq->keywords = SQ_Classes_Tools::getValue('sq_keywords', array());
46
- $sq->canonical = SQ_Classes_Tools::getValue('sq_canonical', false);
47
- $sq->noindex = SQ_Classes_Tools::getValue('sq_noindex', 0);
48
- $sq->nofollow = SQ_Classes_Tools::getValue('sq_nofollow', 0);
49
- $sq->nositemap = SQ_Classes_Tools::getValue('sq_nositemap', 0);
50
-
51
- $sq->og_title = SQ_Classes_Tools::getValue('sq_og_title', false);
52
- $sq->og_description = SQ_Classes_Tools::getValue('sq_og_description', false);
53
- $sq->og_author = SQ_Classes_Tools::getValue('sq_og_author', false);
54
- $sq->og_type = SQ_Classes_Tools::getValue('sq_og_type', 'website');
55
- $sq->og_media = SQ_Classes_Tools::getValue('sq_og_media', false);
56
-
57
- $sq->tw_title = SQ_Classes_Tools::getValue('sq_tw_title', false);
58
- $sq->tw_description = SQ_Classes_Tools::getValue('sq_tw_description', false);
59
- $sq->tw_media = SQ_Classes_Tools::getValue('sq_tw_media', false);
60
-
61
-
62
- //Prevent broken url in canonical link
63
- if(strpos($sq->canonical,'//') === false){
64
- $sq->canonical = false;
65
- }
66
- //empty the cache from cache plugins
67
- //SQ_Classes_Tools::emptyCache();
68
-
69
- if (SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
70
- $url,
71
- $sq_hash,
72
- (int)$post_id,
73
- maybe_serialize($sq->toArray()),
74
- gmdate('Y-m-d H:i:s')
75
- )
76
- ) {
77
- $json['saved'] = $sq_hash;
78
-
79
- if (SQ_Classes_Tools::isAjax()) {
80
- if ($post_id > 0) {
81
- if (SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->setPostByID($post_id)) {
82
- $json['html'] = SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->getView('FrontMenu');
83
- }
84
- } elseif ($term_taxonomy_id > 0) {
85
- if (SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->setPostByTaxID($term_taxonomy_id, $taxonomy)) {
86
- $json['html'] = SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->getView('FrontMenu');
87
- }
88
- }
89
- }
90
- } else {
91
- $json['error'] = 1;
92
- $json['error_message'] = 'Could not Insert the information';
93
- SQ_Classes_Tools::createTable();
94
- };
95
-
96
- } else {
97
- $json['error'] = 1;
98
- $json['error_message'] = 'Wrong number of parameters';
99
-
100
- }
101
-
102
- return $json;
103
- }
104
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/Frontend.php CHANGED
@@ -6,8 +6,14 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
6
  public $model;
7
 
8
  public function __construct() {
9
- if (SQ_Classes_Tools::isAjax()) return;
 
 
 
 
 
10
  parent::__construct();
 
11
  //For favicon and Robots
12
  $this->hookCheckFiles();
13
 
@@ -18,19 +24,26 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
18
  add_action('template_redirect', array($this, 'hookBuffer'), 1);
19
 
20
  //Set the post so that Squirrly will know which one to process
21
- if(defined('BP_REQUIRED_PHP_VERSION')) {
22
  add_action('template_redirect', array($this->model, 'setPost'), 10);
23
- }else{
24
  add_action('template_redirect', array($this->model, 'setPost'), 9);
25
  }
26
- /* Check if sitemap is on and Load the Sitemap */
27
- if (SQ_Classes_Tools::getOption('sq_auto_sitemap')) SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps');
28
 
29
- /* Load the Feed Style */
30
- if (SQ_Classes_Tools::getOption('sq_auto_feed')) SQ_Classes_ObjController::getClass('SQ_Controllers_Feed');
 
 
 
 
 
 
 
31
 
32
  /* Fix the Links for feed*/
33
- if (SQ_Classes_Tools::getOption('sq_url_fix')) add_action('the_content', array($this, 'fixFeedLinks'), 11);
 
 
34
 
35
  }
36
 
@@ -43,25 +56,22 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
43
  remove_action('template_redirect', array($this, 'hookBuffer'), 1);
44
  }
45
 
46
- if ($this->isSquirrlySeoEnabled()) {
47
- global $wp_super_cache_late_init;
48
- if (isset($wp_super_cache_late_init) && $wp_super_cache_late_init == 1 && !did_action('init')) {
49
- //add an action after Super cache late login is started
50
- add_action('init', array($this->model, 'startBuffer'), PHP_INT_MAX);
51
- } elseif (SQ_Classes_Tools::getOption('sq_laterload') && !did_action('template_redirect')) {
52
- add_action('template_redirect', array($this->model, 'startBuffer'), PHP_INT_MAX);
53
- } else {
54
- $this->model->startBuffer();
55
- }
56
-
57
- if (defined('WP_ROCKET_VERSION')) {
58
- add_filter('rocket_buffer', array($this->model, 'getBuffer'), PHP_INT_MAX);
59
- }
60
 
61
- add_action('shutdown', array($this->model, 'getBuffer'));
 
62
  }
63
- }
64
 
 
 
65
 
66
  /**
67
  * Called after plugins are loaded
@@ -69,7 +79,7 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
69
  public function hookCheckFiles() {
70
  //Check for sitemap and robots
71
  if ($basename = $this->isFile($_SERVER['REQUEST_URI'])) {
72
- if (SQ_Classes_Tools::getOption('sq_auto_robots') == 1) {
73
  if ($basename == "robots.txt") {
74
  SQ_Classes_ObjController::getClass('SQ_Models_Services_Robots');
75
  apply_filters('sq_robots', false);
@@ -77,21 +87,21 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
77
  }
78
  }
79
 
80
- if (SQ_Classes_Tools::getOption('favicon') <> '') {
81
  if ($basename == "favicon.icon") {
82
- SQ_Classes_Tools::setHeader('ico');
83
- @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon'));
84
  exit();
85
  } elseif ($basename == "touch-icon.png") {
86
- SQ_Classes_Tools::setHeader('png');
87
- @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon'));
88
  exit();
89
  } else {
90
  $appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
91
  foreach ($appleSizes as $appleSize) {
92
  if ($basename == "touch-icon$appleSize.png") {
93
- SQ_Classes_Tools::setHeader('png');
94
- @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon') . $appleSize);
95
  exit();
96
  }
97
  }
@@ -107,13 +117,37 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
107
  * Hook the Header load
108
  */
109
  public function hookFronthead() {
110
- if (!defined('SQ_NOCSS') || (defined('SQ_NOCSS') && !SQ_NOCSS)) {
111
- if (!SQ_Classes_Tools::isAjax()) {
112
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia(_SQ_THEME_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css');
113
  }
114
  }
115
  }
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  /**
118
  * Change the image path to absolute when in feed
119
  * @param string $content
@@ -170,18 +204,7 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
170
  }
171
 
172
  public function hookFrontfooter() {
173
- //Memory Debug
174
- if (SQ_Classes_Tools::getValue('sq_debug') === 'on') {
175
- SQ_Classes_Tools::dump(SQ_Classes_Tools::getMaxMemory(), SQ_Classes_Tools::getUsedMemory());
176
- }
177
-
178
- if ($this->isSquirrlySeoEnabled()) {
179
- echo $this->model->getFooter();
180
- }
181
- }
182
-
183
- public function isSquirrlySeoEnabled() {
184
- return (apply_filters('sq_use', SQ_Classes_Tools::getOption('sq_use')) == 1);
185
  }
186
 
187
  public function isFile($url = null) {
6
  public $model;
7
 
8
  public function __construct() {
9
+
10
+ if (is_admin() || is_network_admin() || SQ_Classes_Helpers_Tools::isAjax()) {
11
+ return;
12
+ }
13
+
14
+ //load the hooks
15
  parent::__construct();
16
+
17
  //For favicon and Robots
18
  $this->hookCheckFiles();
19
 
24
  add_action('template_redirect', array($this, 'hookBuffer'), 1);
25
 
26
  //Set the post so that Squirrly will know which one to process
27
+ if (defined('BP_REQUIRED_PHP_VERSION')) {
28
  add_action('template_redirect', array($this->model, 'setPost'), 10);
29
+ } else {
30
  add_action('template_redirect', array($this->model, 'setPost'), 9);
31
  }
 
 
32
 
33
+ //Check if attachment to image redirect is needed
34
+ if (SQ_Classes_Helpers_Tools::getOption('sq_attachment_redirect')) {
35
+ add_action('template_redirect', array($this->model, 'redirectAttachments'), 10);
36
+ }
37
+
38
+ /* Check if sitemap is on and Load the Sitemap */
39
+ if (SQ_Classes_Helpers_Tools::getOption('sq_auto_sitemap')) {
40
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps');
41
+ }
42
 
43
  /* Fix the Links for feed*/
44
+ if (SQ_Classes_Helpers_Tools::getOption('sq_url_fix')) {
45
+ add_action('the_content', array($this, 'fixFeedLinks'), 11);
46
+ }
47
 
48
  }
49
 
56
  remove_action('template_redirect', array($this, 'hookBuffer'), 1);
57
  }
58
 
59
+ global $wp_super_cache_late_init;
60
+ if (isset($wp_super_cache_late_init) && $wp_super_cache_late_init == 1 && !did_action('init')) {
61
+ //add an action after Super cache late login is started
62
+ add_action('init', array($this->model, 'startBuffer'), PHP_INT_MAX);
63
+ } elseif (SQ_Classes_Helpers_Tools::getOption('sq_laterload') && !did_action('template_redirect')) {
64
+ add_action('template_redirect', array($this->model, 'startBuffer'), PHP_INT_MAX);
65
+ } else {
66
+ $this->model->startBuffer();
67
+ }
 
 
 
 
 
68
 
69
+ if (defined('WP_ROCKET_VERSION')) {
70
+ add_filter('rocket_buffer', array($this->model, 'getBuffer'), PHP_INT_MAX);
71
  }
 
72
 
73
+ add_action('shutdown', array($this->model, 'getBuffer'));
74
+ }
75
 
76
  /**
77
  * Called after plugins are loaded
79
  public function hookCheckFiles() {
80
  //Check for sitemap and robots
81
  if ($basename = $this->isFile($_SERVER['REQUEST_URI'])) {
82
+ if (SQ_Classes_Helpers_Tools::getOption('sq_auto_robots') == 1) {
83
  if ($basename == "robots.txt") {
84
  SQ_Classes_ObjController::getClass('SQ_Models_Services_Robots');
85
  apply_filters('sq_robots', false);
87
  }
88
  }
89
 
90
+ if (SQ_Classes_Helpers_Tools::getOption('sq_auto_favicon') && SQ_Classes_Helpers_Tools::getOption('favicon') <> '') {
91
  if ($basename == "favicon.icon") {
92
+ SQ_Classes_Helpers_Tools::setHeader('ico');
93
+ @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Helpers_Tools::getOption('favicon'));
94
  exit();
95
  } elseif ($basename == "touch-icon.png") {
96
+ SQ_Classes_Helpers_Tools::setHeader('png');
97
+ @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Helpers_Tools::getOption('favicon'));
98
  exit();
99
  } else {
100
  $appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
101
  foreach ($appleSizes as $appleSize) {
102
  if ($basename == "touch-icon$appleSize.png") {
103
+ SQ_Classes_Helpers_Tools::setHeader('png');
104
+ @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Helpers_Tools::getOption('favicon') . $appleSize);
105
  exit();
106
  }
107
  }
117
  * Hook the Header load
118
  */
119
  public function hookFronthead() {
120
+ if (!is_admin() || !defined('SQ_NOCSS') || (defined('SQ_NOCSS') && !SQ_NOCSS)) {
121
+ if (!SQ_Classes_Helpers_Tools::isAjax()) {
122
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia(_SQ_ASSETS_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css');
123
  }
124
  }
125
  }
126
 
127
+ /**
128
+ * Load Squirrly Assistant in frontend
129
+ */
130
+ public function loadAssistant(){
131
+ if (!is_admin() && function_exists('is_user_logged_in') && is_user_logged_in()) {
132
+ global $wp_the_query;
133
+
134
+ if (method_exists($wp_the_query, 'get_queried_object')) {
135
+ $current_object = $wp_the_query->get_queried_object();
136
+ }
137
+
138
+ if (empty($current_object))
139
+ return;
140
+
141
+ $elementor = SQ_Classes_Helpers_Tools::getValue('elementor-preview', false);
142
+ $divi = SQ_Classes_Helpers_Tools::getValue('et_fb', false);
143
+ if ($elementor || $divi) {
144
+ echo $this->getView('Frontend/Assistant');
145
+ }
146
+
147
+ return;
148
+ }
149
+ }
150
+
151
  /**
152
  * Change the image path to absolute when in feed
153
  * @param string $content
204
  }
205
 
206
  public function hookFrontfooter() {
207
+ echo $this->model->getFooter();
 
 
 
 
 
 
 
 
 
 
 
208
  }
209
 
210
  public function isFile($url = null) {
controllers/Help.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Help & Support
5
+ */
6
+ class SQ_Controllers_Help extends SQ_Classes_FrontController {
7
+
8
+ public function init() {
9
+ }
10
+
11
+
12
+ }
controllers/Menu.php CHANGED
@@ -3,61 +3,76 @@
3
  class SQ_Controllers_Menu extends SQ_Classes_FrontController {
4
 
5
  /** @var array snippet */
6
- private $post_type;
7
- public $post;
8
  /** @var array snippet */
9
  var $options = array();
 
10
 
11
  public function __construct() {
12
  parent::__construct();
13
- add_action('admin_bar_menu', array($this, 'hookTopmenu'), 999);
 
14
  add_action('do_meta_boxes', array($this, 'addMetabox'));
 
15
  }
16
 
17
  /**
18
  * Hook the Admin load
19
  */
20
  public function hookInit() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  /* add the plugin menu in admin */
22
  if (current_user_can('manage_options')) {
 
23
  try {
24
  //check if activated
25
  if (get_transient('sq_activate') == 1) {
26
  // Delete the redirect transient
27
  delete_transient('sq_activate');
28
 
29
- //Check if there are expected upgrades
30
- SQ_Classes_Tools::checkUpgrade();
31
-
32
- //Deactivate the QuickSEO plugin
33
- if (SQ_Classes_Tools::isPluginInstalled('quick-seo')) {
34
- $quickSEO = _QSS_ROOT_DIR_ . '/index.php';
35
- if (is_plugin_active(plugin_basename($quickSEO))) {
36
- delete_transient('qss_activate');
37
 
38
- deactivate_plugins(plugin_basename($quickSEO), true);
39
- SQ_Classes_Error::setMessage(sprintf(__("Good news, %s is integrated in Squirrly SEO now and you don't have to run 2 plugins anymore", _SQ_PLUGIN_NAME_), _QSS_PLUGIN_NAME_));
40
- }
41
-
42
- }
43
-
44
- //Deactivate the Premium SEO Pack plugin
45
- if (SQ_Classes_Tools::isPluginInstalled('premium-seo-pack')) {
46
- $phpSEO = _PSP_ROOT_DIR_ . '/index.php';
47
- if (is_plugin_active(plugin_basename($phpSEO))) {
48
- delete_transient('psp_activate');
49
- deactivate_plugins(plugin_basename($phpSEO), true);
50
- SQ_Classes_Error::setMessage(sprintf(__("Good news, %s is integrated in Squirrly SEO now and you don't have to run 2 plugins anymore", _SQ_PLUGIN_NAME_), _PSP_PLUGIN_NAME_));
51
-
52
- }
53
- }
54
-
55
- //Make sure Squirrly upgrades the settings and seo
56
- if (SQ_Classes_Tools::getOption('sq_ver') < 8200 && SQ_Classes_Tools::getOption('sq_api') <> '') {
57
- wp_redirect(admin_url('admin.php?page=sq_dashboard&action=sq_dataupgrade&nonce=' . wp_create_nonce(_SQ_NONCE_ID_)));
58
- }
59
 
60
- wp_safe_redirect(admin_url('admin.php?page=sq_dashboard'));
61
  die();
62
  }
63
 
@@ -71,41 +86,97 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
71
  }
72
 
73
  //This option is use for custom Package details
74
- SQ_Classes_Tools::updatePluginData(); //update text in case of devkit
75
 
76
  }
 
77
  //activate the cron job if not exists
78
- if (!wp_get_schedule('sq_processCron')) {
79
- wp_schedule_event(time(), 'hourly', 'sq_processCron');
80
  }
81
 
 
 
 
 
82
  //Hook the post save action
83
  SQ_Classes_ObjController::getClass('SQ_Controllers_Post')->hookPost();
84
- add_filter('rewrite_rules_array', array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettingsSeo'), 'rewrite_rules'), 999, 1);
85
  }
86
 
87
  /**
88
- * Add a menu in Admin Bar
89
- *
90
- * @param WP_Admin_Bar $wp_admin_bar
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  */
92
- public function hookTopmenu($wp_admin_bar) {
93
- global $tag, $wp_the_query;
94
 
95
  if (!is_user_logged_in()) {
96
- return;
97
  }
98
 
 
 
99
  if (current_user_can('edit_posts')) {
100
  $wp_admin_bar->add_node(array(
101
- 'id' => 'sq_posts',
102
- 'title' => __('See Your Rank on Google', _SQ_PLUGIN_NAME_),
103
- 'href' => admin_url('admin.php?page=sq_posts'),
104
  'parent' => false
105
  ));
106
 
107
- //Hood the TinyMCE editor andd add the H2 button
108
- SQ_Classes_ObjController::getClass('SQ_Controllers_Post')->hookEditor();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  }
110
 
111
  if (is_admin()) {
@@ -113,7 +184,7 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
113
  $post = get_post();
114
  if ('post' == $current_screen->base
115
  && ($post_type_object = get_post_type_object($post->post_type))
116
- && current_user_can('edit_post', $post->ID)
117
  && ($post_type_object->public)) {
118
  } elseif ('edit' == $current_screen->base
119
  && ($post_type_object = get_post_type_object($current_screen->post_type))
@@ -124,65 +195,36 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
124
  && ($tax = get_taxonomy($tag->taxonomy))
125
  && $tax->public) {
126
  } else {
127
- return;
128
  }
129
 
130
  $this->model->addMeta(array('sq_blocksnippet',
131
  ucfirst(_SQ_NAME_) . ' ' . __('SEO Snippet', _SQ_PLUGIN_NAME_),
132
- array(SQ_Classes_ObjController::getClass('SQ_Controllers_FrontMenu'), 'show'),
133
  null,
134
  'normal',
135
  'high'
136
  ));
137
 
138
- } else {
139
- //If user set not to load Squirrly in frontend
140
- if (!SQ_Classes_Tools::getOption('sq_use_frontend')) {
141
- return;
142
- }
143
-
144
- if (!current_user_can('manage_options')) {
145
- $current_object = $wp_the_query->get_queried_object();
146
-
147
- if (empty($current_object))
148
- return;
149
-
150
- if (!empty($current_object->post_type)
151
- && ($post_type_object = get_post_type_object($current_object->post_type))
152
- && current_user_can('edit_post', $current_object->ID)
153
- && $post_type_object->show_in_admin_bar
154
- && $edit_post_link = get_edit_post_link($current_object->ID)) {
155
- } elseif (!empty($current_object->taxonomy)
156
- && ($tax = get_taxonomy($current_object->taxonomy))
157
- && current_user_can('edit_term', $current_object->term_id)
158
- && $edit_term_link = get_edit_term_link($current_object->term_id, $current_object->taxonomy)) {
159
- } else {
160
- return;
161
- }
162
- }
163
- }
164
-
165
-
166
- $wp_admin_bar->add_node(array(
167
- 'id' => 'sq_bar_menu',
168
- 'title' => '<span class="dashicons-sqlogo"></span> ' . __('Custom SEO', _SQ_PLUGIN_NAME_),
169
- 'parent' => 'top-secondary',
170
- ));
171
 
172
- $wp_admin_bar->add_menu(array(
173
- 'id' => 'sq_bar_submenu',
174
- 'parent' => 'sq_bar_menu',
175
- 'meta' => array(
176
- 'html' => $this->getView('FrontMenu'),
177
- 'tabindex' => PHP_INT_MAX,
178
- ),
179
- ));
180
 
181
- if (is_admin()) {
182
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('frontmenu');
183
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('patterns');
 
 
 
 
 
 
184
  }
185
 
 
186
  }
187
 
188
  /**
@@ -190,401 +232,137 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
190
  */
191
  public function hookMenu() {
192
 
193
- $this->post_type = SQ_Classes_Tools::getOption('sq_post_types');
194
- $menu = SQ_Classes_Tools::getOption('menu');
195
 
196
  //Push the Analytics Check
197
  if (strpos($_SERVER['REQUEST_URI'], '?page=sq_dashboard') !== false) {
198
- SQ_Classes_Tools::saveOptions('sq_dashboard', 1);
199
  }
200
- if (strpos($_SERVER['REQUEST_URI'], '?page=sq_posts') !== false) {
201
- SQ_Classes_Tools::saveOptions('sq_analytics', 1);
202
  }
203
 
204
- $analytics_alert = 0;
205
- if (SQ_Classes_ObjController::getClass('SQ_Models_Post')->countKeywords() > 0 && !SQ_Classes_Tools::getOption('sq_analytics')) {
206
- $analytics_alert = 1;
207
- if (!get_transient('sq_analytics')) {
208
- set_transient('sq_analytics', time(), (60 * 60 * 24 * 7));
209
- } else {
210
- $time_loaded = get_transient('sq_analytics');
211
- if (time() - $time_loaded > (60 * 60 * 24 * 3) && time() - $time_loaded < (60 * 60 * 24 * 14)) {
212
- SQ_Classes_Error::setError(sprintf(__('Check out the Squirrly Analytics section. %sClick here%s', _SQ_PLUGIN_NAME_), '<a href="admin.php?page=sq_posts" title="' . __('Squirrly Analytics', _SQ_PLUGIN_NAME_) . '">', '</a>'));
213
- }
214
- }
215
- }
216
-
217
- $dashboard_alert = (int)(SQ_Classes_Tools::getOption('sq_dashboard') == 0);
218
 
219
  ///////////////
220
  $this->model->addMenu(array(ucfirst(_SQ_NAME_),
221
- 'Squirrly' . (($analytics_alert) ? SQ_Classes_Tools::showNotices($analytics_alert, 'errors_count') : ''),
222
  'edit_posts',
223
  'sq_dashboard',
224
  null,
225
- SQ_Classes_Tools::getOption('sq_logo')
226
  ));
227
 
228
- $this->model->addSubmenu(array('sq_dashboard',
229
- ucfirst(_SQ_NAME_) . __(' Dashboard', _SQ_PLUGIN_NAME_),
230
- ((SQ_Classes_Tools::getOption('sq_api') == '') ? __('First Step', _SQ_PLUGIN_NAME_) : __('Dashboard', _SQ_PLUGIN_NAME_)) . SQ_Classes_Tools::showNotices($dashboard_alert, 'errors_count'),
231
  'edit_posts',
232
- 'sq_dashboard',
233
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockDashboard'), 'init')
234
  ));
235
 
236
- //IF SERP PLUGIN IS NOT INSTALLED
237
- if (SQ_Classes_Tools::getOption('sq_google_serp_active')) {
238
- $this->model->addSubmenu(array('sq_dashboard',
239
- ucfirst(_SQ_NAME_) . __(' Advanced Analytics (Business Level)', _SQ_PLUGIN_NAME_),
240
- __('Advanced Analytics', _SQ_PLUGIN_NAME_) . ($analytics_alert ? SQ_Classes_Tools::showNotices($analytics_alert, 'errors_count') : ''),
241
- 'edit_posts',
242
- 'sq_posts',
243
- array(SQ_Classes_ObjController::getClass('SQ_Controllers_SerpChecker'), 'init')
244
  ));
245
- } else {
246
- $this->model->addSubmenu(array('sq_dashboard',
247
- ucfirst(_SQ_NAME_) . __(' Performance Analytics', _SQ_PLUGIN_NAME_),
248
- __('Performance <br />Analytics', _SQ_PLUGIN_NAME_) . ($analytics_alert ? SQ_Classes_Tools::showNotices($analytics_alert, 'errors_count') : ''),
249
- 'edit_posts',
250
- 'sq_posts',
251
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockPostsAnalytics'), 'init')
252
- ));
253
- }
254
-
255
- $this->model->addSubmenu(array('sq_dashboard',
256
- ucfirst(_SQ_NAME_) . __(' Keyword Research', _SQ_PLUGIN_NAME_),
257
- __('Keyword Research', _SQ_PLUGIN_NAME_),
258
- 'edit_posts',
259
- 'sq_keywordresearch',
260
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockKeywordResearch'), 'init')
261
- ));
262
-
263
- $this->model->addSubmenu(array('sq_dashboard',
264
- ucfirst(_SQ_NAME_) . __(' Briefcase', _SQ_PLUGIN_NAME_),
265
- __('Briefcase', _SQ_PLUGIN_NAME_),
266
- 'edit_posts',
267
- 'sq_briefcase',
268
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockBriefcaseKeywords'), 'init')
269
- ));
270
-
271
- $this->model->addSubmenu(array('sq_dashboard',
272
- ucfirst(_SQ_NAME_) . __(' Live Assistant', _SQ_PLUGIN_NAME_),
273
- __('Live Assistant', _SQ_PLUGIN_NAME_),
274
- 'edit_posts',
275
- 'sq_liveassistant',
276
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockLiveAssistant'), 'init')
277
- ));
278
- $this->model->addSubmenu(array('sq_dashboard',
279
- __(' Copywriting', _SQ_PLUGIN_NAME_),
280
- __('Copywriting', _SQ_PLUGIN_NAME_),
281
- 'edit_posts',
282
- 'sq_copyright',
283
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockCopyright'), 'init')
284
- ));
285
 
286
- if ($menu['show_audit'] && current_user_can('manage_options')) {
287
- $this->model->addSubmenu(array('sq_dashboard',
288
- ucfirst(_SQ_NAME_) . __(' SEO Audit', _SQ_PLUGIN_NAME_),
289
- __('Site Audit', _SQ_PLUGIN_NAME_),
290
- 'edit_posts',
291
- 'sq_seoaudit',
292
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockAudit'), 'init')
293
- ));
294
  }
295
 
296
- $this->model->addSubmenu(array('sq_dashboard',
297
- ucfirst(_SQ_NAME_) . __(' SEO Settings', _SQ_PLUGIN_NAME_),
298
- __('SEO Settings', _SQ_PLUGIN_NAME_),
299
- 'manage_options',
300
- 'sq_seo',
301
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettingsSeo'), 'init')
302
- ));
303
-
304
-
305
- $this->model->addSubmenu(array('sq_dashboard',
306
- ucfirst(_SQ_NAME_) . __(' Advanced Settings', _SQ_PLUGIN_NAME_),
307
- __('Advanced Settings', _SQ_PLUGIN_NAME_),
308
- 'manage_options',
309
- 'sq_settings',
310
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettings'), 'init')
311
- ));
312
-
313
- $this->model->addSubmenu(array('sq_dashboard',
314
- ucfirst(_SQ_NAME_) . __(' SEO Patterns', _SQ_PLUGIN_NAME_),
315
- __('Patterns', _SQ_PLUGIN_NAME_),
316
- 'manage_options',
317
- 'sq_patterns',
318
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockPatterns'), 'init')
319
- ));
320
-
321
- if ($menu['show_account_info']) {
322
  $this->model->addSubmenu(array('sq_dashboard',
323
- ucfirst(_SQ_NAME_) . __(' Account Info', _SQ_PLUGIN_NAME_),
324
  __('Account Info', _SQ_PLUGIN_NAME_),
325
- 'manage_options',
326
  'sq_account',
327
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockAccount'), 'init')
328
  ));
329
  }
330
 
331
  $this->model->addSubmenu(array('sq_dashboard',
332
- ucfirst(_SQ_NAME_) . __(' Support', _SQ_PLUGIN_NAME_),
333
- __('Support', _SQ_PLUGIN_NAME_),
334
  'edit_posts',
335
- 'sq_customerservice',
336
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockCustomerService'), 'init')
337
  ));
338
 
339
- if ($menu['show_affiliate']) {
340
- $this->model->addSubmenu(array('sq_dashboard',
341
- __('Become an Affiliate with ', _SQ_PLUGIN_NAME_) . ucfirst(_SQ_NAME_),
342
- __('Become an Affiliate', _SQ_PLUGIN_NAME_),
343
- 'edit_posts',
344
- 'sq_affiliate',
345
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockAffiliate'), 'init')
346
- ));
347
- }
348
 
349
- if (current_user_can('manage_options')) {
350
- $this->model->addSubmenu(array('sq_dashboard',
351
- __('Import, Backup & Restore SEO', _SQ_PLUGIN_NAME_),
352
- __('Import/Backup SEO', _SQ_PLUGIN_NAME_),
353
- 'edit_posts',
354
- 'sq_import',
355
- array(SQ_Classes_ObjController::getClass('SQ_Core_BlockImport'), 'init')
356
- ));
357
- }
358
-
359
- //Add the Rank in the Posts list
360
- $postlist = SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList');
361
- if (is_object($postlist)) {
362
- $postlist->init();
363
- }
364
 
365
  }
366
 
367
  /**
368
  * Add Post Editor Meta Box
 
369
  */
370
  public function addMetabox() {
371
- //Move the Box is gutenberg is active
372
- if(!empty($this->post_type)) {
373
- foreach ($this->post_type as $type) {
374
- if ($metabox = unserialize(SQ_Classes_Tools::getUserMeta('meta-box-order_' . $type))) {
 
 
 
 
 
 
 
 
 
 
 
 
375
  extract($metabox);
376
 
377
  if (isset($side) && isset($normal)) {
378
  $side = explode(',', $side);
379
  $normal = explode(',', $normal);
380
- if (SQ_Classes_Tools::isGutenberg() && !in_array('post' . _SQ_NAME_, $normal)) {
381
- $normal = array_merge(array('post' . _SQ_NAME_), $normal);
382
- $metabox['normal'] = join(',', array_unique($normal));
383
-
384
- $side = array_diff($side, array('post' . _SQ_NAME_));
385
- $metabox['side'] = join(',', array_unique($side));
386
- SQ_Classes_Tools::saveUserMeta('meta-box-order_' . $type, $metabox);
387
-
388
- } elseif (!SQ_Classes_Tools::isGutenberg() && in_array('post' . _SQ_NAME_, $normal)) {
389
  $side = array_merge(array('post' . _SQ_NAME_), $side);
390
  $metabox['side'] = join(',', array_unique($side));
391
 
392
  $normal = array_diff($normal, array('post' . _SQ_NAME_));
393
  $metabox['normal'] = join(',', array_unique($normal));
394
- SQ_Classes_Tools::saveUserMeta('meta-box-order_' . $type, $metabox);
395
  }
396
  }
397
  }
398
 
 
399
  $this->model->addMeta(array('post' . _SQ_NAME_,
400
  ucfirst(_SQ_NAME_),
401
  array(SQ_Classes_ObjController::getClass('SQ_Controllers_Post'), 'init'),
402
  $type,
403
- (SQ_Classes_Tools::isGutenberg() ? 'normal' : 'side'),
404
  'high'
405
  ));
406
  }
407
- }
408
-
409
- }
410
-
411
- /**
412
- * Hook the Head sequence in frontend when user is logged in
413
- */
414
- public function hookFronthead() {
415
- if (current_user_can('edit_posts')) {
416
- //prevent some compatibility errors with other plugins
417
- remove_all_actions('print_media_templates');
418
-
419
- //loade the media library
420
- @wp_enqueue_media();
421
-
422
- //Set the current post domain with all the data
423
- $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
424
- }
425
- }
426
-
427
- /**
428
- * Called when Post action is triggered
429
- *
430
- * @return void
431
- */
432
- public function action() {
433
- parent::action();
434
-
435
- if (!current_user_can('edit_posts')) {
436
- return;
437
- }
438
-
439
- SQ_Classes_Tools::setHeader('json');
440
-
441
- switch (SQ_Classes_Tools::getValue('action')) {
442
- case 'sq_getfrontmenu':
443
- $json = array();
444
- $post_id = (int)SQ_Classes_Tools::getValue('post_id', 0);
445
- $term_taxonomy_id = (int)SQ_Classes_Tools::getValue('term_taxonomy_id', 0);
446
- $taxonomy = SQ_Classes_Tools::getValue('taxonomy', 'category');
447
-
448
- if ($post_id > 0) {
449
- if ($this->setPostByID($post_id)) {
450
- $json['html'] = $this->getView('FrontMenu');
451
- }
452
- } elseif ($term_taxonomy_id > 0) {
453
- if ($this->setPostByTaxID($term_taxonomy_id, $taxonomy)) {
454
- if (get_term_link($term_taxonomy_id) == $this->post->url) {
455
- $json['html'] = $this->getView('FrontMenu');
456
- }
457
- }
458
- }
459
- echo json_encode($json);
460
- exit();
461
- }
462
- }
463
-
464
- public function getPostType($for, $post_type = null) {
465
- switch ($for) {
466
- case 'og:type':
467
- if (isset($this->post->sq) && $this->post->sq->og_type <> '') {
468
- if ($this->post->sq->og_type == $post_type) return 'selected="selected"';
469
- } else {
470
- switch ($post_type) {
471
- case 'website':
472
- if ($this->post->post_type == 'home') return 'selected="selected"';
473
- break;
474
- default:
475
- if ($this->post->post_type == $post_type) return 'selected="selected"';
476
- }
477
- }
478
- break;
479
- }
480
- return false;
481
- }
482
-
483
- public function getImportList() {
484
- return apply_filters('sq_importList', false);
485
- }
486
-
487
- public function setPostByURL($url) {
488
- $post_id = url_to_postid($url);
489
- $this->post = get_post($post_id);
490
-
491
- if ($post_id > 0) {
492
- add_filter('sq_current_post', array($this, 'setCurrentPost'), 10);
493
- SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost();
494
- $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
495
- return $this->post;
496
- }
497
-
498
- return false;
499
- }
500
-
501
- public function setPostByID($post = 0, $taxonomy = 'post') {
502
- if ($post instanceof WP_Post) {
503
- $this->post = $post;
504
- } else {
505
- $post_id = (int)$post;
506
- if ($post_id > 0) {
507
- $this->post = get_post($post_id);
508
- }
509
- }
510
 
511
- if ($this->post) {
512
- set_query_var('post_type', $this->post->post_type);
513
- $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost($this->post)->getPost();
514
-
515
- SQ_Classes_Tools::dump($this->post);
516
- return $this->post;
517
  }
518
- return false;
519
  }
520
 
521
- public function setPostByTaxID($term_taxonomy_id = 0, $taxonomy = 'category') {
522
- if ($term_taxonomy_id > 0) {
523
- global $wp_query;
524
-
525
- $term = get_term($term_taxonomy_id, $taxonomy);
526
- if ($taxonomy == 'category') {
527
- $args = array('posts_per_page' => '1', 'cat' => $term_taxonomy_id);
528
- } elseif ($taxonomy == 'post_tag') {
529
- $args = array('posts_per_page' => 1, 'tag_id' => $term_taxonomy_id);
530
- } else {
531
- $args = array('posts_per_page' => 1, $taxonomy => $term->slug, 'term_id' => $term_taxonomy_id);
532
- }
533
 
534
- $tax_query = array(
535
- array(
536
- 'taxonomy' => $taxonomy,
537
- 'terms' => $term->slug,
538
- 'field' => 'slug',
539
- 'include_children' => true,
540
- 'operator' => 'IN'
541
- ),
542
- array(
543
- 'taxonomy' => $taxonomy,
544
- 'terms' => $term->slug,
545
- 'field' => 'slug',
546
- 'include_children' => false,
547
- )
548
- );
549
-
550
- $args['tax_query'] = $tax_query;
551
- $wp_query->query($args);
552
- set_query_var('post_type', $taxonomy);
553
-
554
- if ($this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost($term)->getPost()) {
555
- return $this->post;
556
- }
557
- }
558
- return false;
559
- }
560
 
561
- public function setCurrentPost() {
562
- return $this->post;
563
- }
564
-
565
- /**
566
- * Is the user on page name? Default name = post edit page
567
- * name = 'quirrly'
568
- *
569
- * @global array $pagenow
570
- * @param string $name
571
- * @return boolean
572
- */
573
- public function is_page($name = '') {
574
- global $pagenow;
575
- $page = array();
576
- //make sure we are on the backend
577
- if (is_admin() && $name <> '') {
578
- if ($name == 'edit') {
579
- $page = array('post.php', 'post-new.php');
580
- } else {
581
- array_push($page, $name . '.php');
582
  }
583
 
584
- return in_array($pagenow, $page);
585
  }
586
 
587
- return false;
588
  }
589
 
590
  }
3
  class SQ_Controllers_Menu extends SQ_Classes_FrontController {
4
 
5
  /** @var array snippet */
6
+ public $post_type;
 
7
  /** @var array snippet */
8
  var $options = array();
9
+ var $sq_pages = array('sq_onboarding', 'sq_research', 'sq_assistant', 'sq_focuspages', 'sq_audits', 'sq_seosettings', 'sq_rankings');
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
 
19
  /**
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_);
48
+ exit();
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) {
66
  // Delete the redirect transient
67
  delete_transient('sq_activate');
68
 
69
+ //Create Qss table if not exists
70
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->createTable();
 
 
 
 
 
 
71
 
72
+ //Check if there are expected upgrades
73
+ SQ_Classes_Helpers_Tools::checkUpgrade();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
+ wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
76
  die();
77
  }
78
 
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
+
102
  //Hook the post save action
103
  SQ_Classes_ObjController::getClass('SQ_Controllers_Post')->hookPost();
 
104
  }
105
 
106
  /**
107
+ * Show the Dashboard link when Full Screen
108
+ * @param $wp_admin_bar
109
+ * @return mixed
110
+ */
111
+ public function hookTopmenuDashboard($wp_admin_bar) {
112
+ global $sq_fullscreen;
113
+
114
+ if (!is_user_logged_in()) {
115
+ return false;
116
+ }
117
+
118
+ if (isset($sq_fullscreen) && $sq_fullscreen) {
119
+ $wp_admin_bar->add_node(array(
120
+ 'parent' => 'site-name',
121
+ 'id' => 'dashboard',
122
+ 'title' => __('Dashboard'),
123
+ 'href' => admin_url(),
124
+ ));
125
+ }
126
+
127
+ return $wp_admin_bar;
128
+ }
129
+
130
+ /**
131
+ * Show the Squirrly Menu in toolbar
132
+ * @param $wp_admin_bar
133
  */
134
+ public function hookTopmenuSquirrly($wp_admin_bar) {
135
+ global $tag;
136
 
137
  if (!is_user_logged_in()) {
138
+ return false;
139
  }
140
 
141
+ $errors = SQ_Classes_ObjController::getClass('SQ_Controllers_CheckSeo')->getErrorsCount();
142
+
143
  if (current_user_can('edit_posts')) {
144
  $wp_admin_bar->add_node(array(
145
+ 'id' => 'sq_toolbar',
146
+ 'title' => '<span class="sq_logo" style="margin-right: 2px"></span>' . __('Squirrly SEO', _SQ_PLUGIN_NAME_) . (($errors) ? '<span class="sq_errorcount">' . $errors . '</span>' : ''),
147
+ 'href' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'),
148
  'parent' => false
149
  ));
150
 
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(
157
+ 'id' => $menuid,
158
+ 'title' => $item['title'],
159
+ 'href' => SQ_Classes_Helpers_Tools::getAdminUrl($menuid),
160
+ 'parent' => 'sq_toolbar'
161
+ ));
162
+ $tabs = $this->model->getTabs($menuid);
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'],
170
+ 'href' => SQ_Classes_Helpers_Tools::getAdminUrl($array_id[0], $array_id[1]),
171
+ 'parent' => $menuid
172
+ ));
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
  }
181
 
182
  if (is_admin()) {
184
  $post = get_post();
185
  if ('post' == $current_screen->base
186
  && ($post_type_object = get_post_type_object($post->post_type))
187
+ && (current_user_can('edit_post', $post->ID) || current_user_can('sq_manage_snippets'))
188
  && ($post_type_object->public)) {
189
  } elseif ('edit' == $current_screen->base
190
  && ($post_type_object = get_post_type_object($current_screen->post_type))
195
  && ($tax = get_taxonomy($tag->taxonomy))
196
  && $tax->public) {
197
  } else {
198
+ return false;
199
  }
200
 
201
  $this->model->addMeta(array('sq_blocksnippet',
202
  ucfirst(_SQ_NAME_) . ' ' . __('SEO Snippet', _SQ_PLUGIN_NAME_),
203
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet'), 'init'),
204
  null,
205
  'normal',
206
  'high'
207
  ));
208
 
209
+ $wp_admin_bar->add_node(array(
210
+ 'id' => 'sq_bar_menu',
211
+ 'title' => '<span class="sq_logo"></span> ' . __('Custom SEO', _SQ_PLUGIN_NAME_),
212
+ 'parent' => 'top-secondary',
213
+ ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
 
 
 
 
 
 
 
 
 
215
 
216
+ //Add snippet body
217
+ $wp_admin_bar->add_menu(array(
218
+ 'id' => 'sq_bar_submenu',
219
+ 'parent' => 'sq_bar_menu',
220
+ 'meta' => array(
221
+ 'html' => SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet')->init(),
222
+ 'tabindex' => PHP_INT_MAX,
223
+ ),
224
+ ));
225
  }
226
 
227
+ return $wp_admin_bar;
228
  }
229
 
230
  /**
232
  */
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) {
240
+ SQ_Classes_Helpers_Tools::saveOptions('sq_dashboard', 1);
241
  }
242
+ if (strpos($_SERVER['REQUEST_URI'], '?page=sq_rankings') !== false) {
243
+ SQ_Classes_Helpers_Tools::saveOptions('sq_analytics', 1);
244
  }
245
 
246
+ $errors = SQ_Classes_ObjController::getClass('SQ_Controllers_CheckSeo')->getErrorsCount();
 
 
 
 
 
 
 
 
 
 
 
 
 
247
 
248
  ///////////////
249
  $this->model->addMenu(array(ucfirst(_SQ_NAME_),
250
+ __('Squirrly SEO', _SQ_PLUGIN_NAME_) . (($errors) ? '<span class="sq_errorcount">' . $errors . '</span>' : ''),
251
  'edit_posts',
252
  'sq_dashboard',
253
  null,
254
+ _SQ_ASSETS_URL_ . 'img/logos/menu_icon_16.png'
255
  ));
256
 
257
+ $this->model->addSubmenu(array('sq_none',
258
+ __('Squirrly Onboarding', _SQ_PLUGIN_NAME_),
259
+ __('Onboarding', _SQ_PLUGIN_NAME_),
260
  'edit_posts',
261
+ 'sq_onboarding',
262
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_Onboarding'), 'init')
263
  ));
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'],
270
+ $item['capability'],
271
+ $name,
272
+ $item['function'],
273
  ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
 
 
 
 
 
 
 
 
 
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',
289
+ __('Squirrly How To & Support', _SQ_PLUGIN_NAME_),
290
+ __('Help & Support', _SQ_PLUGIN_NAME_),
291
  'edit_posts',
292
+ 'sq_help',
293
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_Help'), 'init')
294
  ));
295
 
 
 
 
 
 
 
 
 
 
296
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
 
298
  }
299
 
300
  /**
301
  * Add Post Editor Meta Box
302
+ * Load Squirrly Live Assistant
303
  */
304
  public function addMetabox() {
305
+ $types = get_post_types(array('public' => true));
306
+
307
+ //Exclude types for SLA
308
+ $excludes = SQ_Classes_Helpers_Tools::getOption('sq_sla_exclude_post_types');
309
+ if (!empty($types) && !empty($excludes)) {
310
+ foreach ($excludes as $exclude) {
311
+ if (in_array($exclude, $types)) {
312
+ unset($types[$exclude]);
313
+ }
314
+ }
315
+ }
316
+
317
+ //Add Live Assistant For Selected Post Types
318
+ if (!empty($types)) {
319
+ foreach ($types as $type) {
320
+ if ($metabox = unserialize(SQ_Classes_Helpers_Tools::getUserMeta('meta-box-order_' . $type))) {
321
  extract($metabox);
322
 
323
  if (isset($side) && isset($normal)) {
324
  $side = explode(',', $side);
325
  $normal = explode(',', $normal);
326
+ if (in_array('post' . _SQ_NAME_, $normal)) {
 
 
 
 
 
 
 
 
327
  $side = array_merge(array('post' . _SQ_NAME_), $side);
328
  $metabox['side'] = join(',', array_unique($side));
329
 
330
  $normal = array_diff($normal, array('post' . _SQ_NAME_));
331
  $metabox['normal'] = join(',', array_unique($normal));
332
+ SQ_Classes_Helpers_Tools::saveUserMeta('meta-box-order_' . $type, $metabox);
333
  }
334
  }
335
  }
336
 
337
+ //Load the SLA in Post
338
  $this->model->addMeta(array('post' . _SQ_NAME_,
339
  ucfirst(_SQ_NAME_),
340
  array(SQ_Classes_ObjController::getClass('SQ_Controllers_Post'), 'init'),
341
  $type,
342
+ 'side',
343
  'high'
344
  ));
345
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346
 
 
 
 
 
 
 
347
  }
 
348
  }
349
 
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;
357
+ echo '<div id="sq_preloader" class="sq_loading"></div>';
358
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fullwidth', array('trigger' => true, 'media' => 'all'));
359
+ } elseif (SQ_Classes_Helpers_Tools::getValue('page', '') == 'sq_dashboard') {
360
+ echo '<div id="sq_preloader" class="sq_loading"></div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  }
362
 
 
363
  }
364
 
365
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('logo');
366
  }
367
 
368
  }
controllers/Onboarding.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Onboarding extends SQ_Classes_FrontController {
4
+
5
+ public $metas;
6
+ public $active_plugins;
7
+
8
+ /**
9
+ * Call for Onboarding
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');
16
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
17
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
18
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
19
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
20
+
21
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
22
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
23
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('onboarding');
24
+
25
+ if (method_exists($this, $tab)) {
26
+ call_user_func(array($this, $tab));
27
+ }
28
+
29
+ //@ob_flush();
30
+ echo $this->getView('Onboarding/' . ucfirst($tab));
31
+ }
32
+
33
+ public function step1() {
34
+ //Set the onboarding version
35
+ SQ_Classes_Helpers_Tools::saveOptions('sq_onboarding', SQ_VERSION);
36
+ }
37
+
38
+ /**
39
+ * Check SEO Actions
40
+ */
41
+ public function action() {
42
+ parent::action();
43
+
44
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
45
+ case 'sq_onboading_checksite':
46
+ /** @var SQ_Models_CheckSeo $seoCheck */
47
+ $seoCheck = SQ_Classes_ObjController::getClass('SQ_Models_CheckSeo');
48
+ $seoCheck->getSourceCode();
49
+ $this->metas = $seoCheck->checkMetas();
50
+
51
+
52
+ break;
53
+
54
+ case 'sq_onboarding_commitment':
55
+ SQ_Classes_Helpers_Tools::saveOptions('sq_seojourney', date('Y-m-d'));
56
+
57
+ break;
58
+
59
+ }
60
+ }
61
+
62
+ }
controllers/Patterns.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Patterns extends SQ_Classes_FrontController {
4
+
5
+ /** @var SQ_Models_Domain_Patterns $patterns */
6
+ public $patterns;
7
+
8
+ public function init() {
9
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('sqbootstrap', array('trigger' => true, 'media' => 'all'));
10
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('patterns', array('trigger' => true, 'media' => 'all'));
11
+
12
+ echo '
13
+ <script>
14
+ jQuery.sq_patterns_list = jQuery.parseJSON("' . addslashes(SQ_ALL_PATTERNS) . '");
15
+ var __sq_save_message = "' . __('Saved!', _SQ_PLUGIN_NAME_) . '";
16
+ var __sq_save_message_preview = "' . __('Saved! This is how the preview looks like', _SQ_PLUGIN_NAME_) . '";
17
+ </script>';
18
+ }
19
+
20
+ /**
21
+ * Replace the patterns by each tags
22
+ *
23
+ * @param SQ_Models_Domain_Post $post
24
+ * @return SQ_Models_Domain_Post | false
25
+ */
26
+ public function replacePatterns($post) {
27
+ if ($post instanceof SQ_Models_Domain_Post) {
28
+ //set the patterns based on the current post
29
+ $this->patterns = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Patterns', $post->toArray());
30
+
31
+ //set the current post for excerpt and description
32
+ $this->patterns->currentpost = $post;
33
+
34
+ //Foreach SQ, if has patterns, replace them
35
+ if ($sq_array = $post->sq->toArray()) {
36
+ $post->sq = $this->processPatterns($sq_array, $post->sq);
37
+ }
38
+ }
39
+ return $post;
40
+
41
+ }
42
+
43
+ /**
44
+ * Get all patterns to process and add them in the object
45
+ * @param $values
46
+ * @param $object
47
+ * @return mixed
48
+ */
49
+ public function processPatterns($values, $object) {
50
+
51
+ //Foreach SQ, if has patterns, replace them
52
+ $sq_with_patterns = array();
53
+ //Set the Separator from object automation
54
+ //do not remove it from here
55
+ $this->patterns->sep = $object->sep;
56
+
57
+ if (!empty($values)) {
58
+ foreach ($values as $name => $value) {
59
+ if ($name <> '' && !is_array($value) && $value <> '') {
60
+ if (strpos($value, '%%') !== false) { //in case there are still patterns from Yoast
61
+ $value = preg_replace('/%%([^\%]+)%%/s', '{{$1}}', $value);
62
+ $object->$name = preg_replace('/%%([^\%]+)%%/s', '{{$1}}', $object->$name);
63
+ }
64
+
65
+ if (@strpos($value, '{{') !== false && @strpos($value, '}}') !== false) {
66
+ $sq_with_patterns[$name] = $value;
67
+ }
68
+ }
69
+ }
70
+ if (!empty($sq_with_patterns)) {
71
+ foreach ($this->patterns->getPatterns() as $key => $pattern) {
72
+ foreach ($sq_with_patterns as $name => $value) {
73
+ if ($name <> '' && $value <> '') {
74
+ if (@strpos($value, $pattern) !== false) {
75
+ $object->$name = str_replace($pattern, $this->patterns->$key, $object->$name);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+ return $object;
84
+ }
85
+
86
+ /**
87
+ * Called when Post action is triggered
88
+ *
89
+ * @return void
90
+ */
91
+ public function action() {
92
+ parent::action();
93
+
94
+ if (!current_user_can('sq_manage_snippet')) {
95
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
96
+ SQ_Classes_Helpers_Tools::setHeader('json');
97
+ echo json_encode($response);
98
+ exit();
99
+ }
100
+
101
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
102
+ case 'sq_getpatterns':
103
+ $all_patterns = json_decode(SQ_ALL_PATTERNS, true);
104
+ $patterns = false;
105
+
106
+ $post_id = (int)SQ_Classes_Helpers_Tools::getValue('post_id', 0);
107
+ $term_id = (int)SQ_Classes_Helpers_Tools::getValue('term_id', 0);
108
+ $taxonomy = SQ_Classes_Helpers_Tools::getValue('taxonomy', 'category');
109
+ $post_type = SQ_Classes_Helpers_Tools::getValue('post_type', 'post');
110
+
111
+ if ($post = SQ_Classes_ObjController::getDomain('SQ_Models_Snippet')->getCurrentSnippet($post_id, $term_id, $taxonomy, $post_type)) {
112
+
113
+ $patterns = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Patterns', $post->toArray());
114
+ $patterns = $this->processPatterns(array_keys($all_patterns), $patterns);
115
+
116
+ //Set the separator character from post sep
117
+ $patterns->sep = $post->sq->sep;
118
+
119
+ foreach ($all_patterns as $pattern => $title) {
120
+ $name = preg_replace('/{{([^\}]+)}}/s', '$1', $pattern);
121
+ $all_patterns[$pattern] = $patterns->$name;
122
+ }
123
+ }
124
+
125
+
126
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
127
+ //return json with the results
128
+ SQ_Classes_Helpers_Tools::setHeader('json');
129
+
130
+ if (SQ_Classes_Helpers_Tools::getValue('sq_debug') !== 'on') {
131
+ echo json_encode(array('json' => json_encode($all_patterns)));
132
+ } else {
133
+ SQ_Debug::dump($all_patterns, $patterns);
134
+ }
135
+
136
+ exit();
137
+ }
138
+ break;
139
+
140
+ }
141
+ }
142
+
143
+
144
+ }
controllers/Post.php CHANGED
@@ -6,14 +6,20 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
6
 
7
  public function init() {
8
  parent::init();
 
 
9
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('post');
 
 
 
 
10
  }
11
 
12
  /**
13
  * Hook the post save
14
  */
15
  public function hookPost() {
16
- if (SQ_Classes_Tools::getOption('sq_api') == '')
17
  return;
18
 
19
  //Hook and save the Snippet and Keywords
@@ -22,7 +28,7 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
22
  add_filter('wp_insert_post_data', array($this, 'removeHighlight'), 12, 2);
23
  add_filter('wp_insert_post_data', array($this, 'checkImage'), 13, 2);
24
 
25
- if (SQ_Classes_Tools::getOption('sq_use') && SQ_Classes_Tools::getOption('sq_auto_sitemap')) {
26
  add_action('transition_post_status', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps'), 'refreshSitemap'), 9999, 3);
27
  }
28
 
@@ -35,39 +41,8 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
35
  */
36
  public function hookEditor() {
37
  $this->saved = array();
38
-
39
- //Add the H2 icon on visual editor
40
- add_filter('mce_external_plugins', array($this->model, 'addHeadingButton'));
41
- add_filter('mce_buttons', array($this->model, 'registerButton'));
42
- }
43
-
44
- /**
45
- * hook the Head
46
- *
47
- * @global integer $post_ID
48
- */
49
- public function hookHead() {
50
- global $post_ID;
51
- parent::hookHead();
52
-
53
- /**
54
- * Add the post ID in variable
55
- * If there is a custom plugin post or Shopp product
56
- *
57
- * Set the global variable $sq_postID for cookie and keyword record
58
- */
59
- if ((int)$post_ID == 0) {
60
- if (SQ_Classes_Tools::getIsset('id'))
61
- $GLOBALS['sq_postID'] = (int)SQ_Classes_Tools::getValue('id');
62
- } else {
63
- $GLOBALS['sq_postID'] = $post_ID;
64
- }
65
- /* * ****************************** */
66
-
67
- echo '<script type="text/javascript">(function($) {$.sq_tinymce = { callback: function () {}, setup: function(ed){} } })(jQuery);</script>';
68
  }
69
 
70
-
71
  /**
72
  * Remove the Squirrly Highlights in case there are some left
73
  * @param array $post_data
@@ -97,10 +72,10 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
97
  return $post_data;
98
  }
99
 
100
- require_once( ABSPATH . 'wp-admin/includes/image.php' );
101
 
102
  //if the option to save the images locally is set on
103
- if (SQ_Classes_Tools::getOption('sq_local_images')) {
104
  @set_time_limit(90);
105
 
106
  $urls = array();
@@ -143,10 +118,10 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
143
  if ($local_file !== false) {
144
  $post_data['post_content'] = str_replace($url, $local_file, $post_data['post_content']);
145
 
146
- if (!$this->model->findAttachmentByUrl($local_file)) {
147
  $attach_id = wp_insert_attachment(array(
148
  'post_mime_type' => $file['type'],
149
- 'post_title' => SQ_Classes_Tools::getValue('sq_keyword', preg_replace('/\.[^.]+$/', '', $file['filename'])),
150
  'post_content' => '',
151
  'post_status' => 'inherit',
152
  'guid' => $local_file
@@ -159,7 +134,7 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
159
  }
160
 
161
  if (microtime(true) - $time >= 20) {
162
- return $post_data;
163
  }
164
 
165
  }
@@ -170,7 +145,6 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
170
  return $post_data;
171
  }
172
 
173
-
174
  /**
175
  * Check the SEO from Squirrly Live Assistant
176
  *
@@ -185,48 +159,50 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
185
 
186
  $args = array();
187
 
188
- $seo = SQ_Classes_Tools::getValue('sq_seo', '');
189
 
190
  if (is_array($seo) && count($seo) > 0)
191
  $args['seo'] = implode(',', $seo);
192
 
193
- $args['keyword'] = SQ_Classes_Tools::getValue('sq_keyword', '');
194
 
195
  $args['status'] = $post_data['post_status'];
196
  $args['permalink'] = get_permalink($postarr['ID']);
197
  $args['author'] = $post_data['post_author'];
198
  $args['post_id'] = $postarr['ID'];
199
 
200
- if (SQ_Classes_Tools::getOption('sq_force_savepost')) {
201
- SQ_Classes_Action::apiCall('sq/seo/post', $args, 10);
202
- } else {
203
- $process = array();
204
- if (get_option('sq_seopost') !== false) {
205
- $process = json_decode(get_option('sq_seopost'), true);
206
- }
 
207
 
208
- $process[] = $args;
209
 
210
- //save for later send to api
211
- update_option('sq_seopost', json_encode($process));
212
- wp_schedule_single_event(time(), 'sq_processApi');
213
 
214
- //If the queue is too big ... means that the cron is not working
215
- if (count($process) > 5) SQ_Classes_Tools::saveOptions('sq_force_savepost', 1);
 
216
  }
217
 
218
  //Save the keyword for this post
219
  if ($json = $this->model->getKeyword($postarr['ID'])) {
220
- $json->keyword = addslashes(SQ_Classes_Tools::getValue('sq_keyword'));
221
  $this->model->saveKeyword($postarr['ID'], $json);
222
  } else {
223
  $args = array();
224
- $args['keyword'] = addslashes(SQ_Classes_Tools::getValue('sq_keyword'));
225
  $this->model->saveKeyword($postarr['ID'], json_decode(json_encode($args)));
226
  }
227
 
228
  //Save the snippet in case is edited in backend and not saved
229
- SQ_Classes_ObjController::getClass('SQ_Controllers_FrontMenu')->saveSEO();
230
 
231
  //check for custom SEO
232
  $this->_checkBriefcaseKeywords($postarr['ID']);
@@ -241,9 +217,15 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
241
  */
242
  public function action() {
243
  parent::action();
244
-
245
- switch (SQ_Classes_Tools::getValue('action')) {
246
  case 'sq_save_ogimage':
 
 
 
 
 
 
 
247
  if (!empty($_FILES['ogimage'])) {
248
  $return = $this->model->addImage($_FILES['ogimage']);
249
  }
@@ -256,27 +238,119 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
256
  'post_content' => '',
257
  'post_status' => 'inherit',
258
  'guid' => $local_file
259
- ), $return['file'], SQ_Classes_Tools::getValue('post_id'));
260
 
261
  $attach_data = wp_generate_attachment_metadata($attach_id, $return['file']);
262
  wp_update_attachment_metadata($attach_id, $attach_data);
263
  }
264
- SQ_Classes_Tools::setHeader('json');
 
 
265
  echo json_encode($return);
266
- SQ_Classes_Tools::emptyCache();
267
 
268
- break;
269
  case 'sq_get_keyword':
270
- SQ_Classes_Tools::setHeader('json');
271
- if (SQ_Classes_Tools::getIsset('post_id')) {
272
- echo json_encode($this->model->getKeywordsFromPost(SQ_Classes_Tools::getValue('post_id')));
 
 
 
 
 
 
 
273
  } else {
274
  echo json_encode(array('error' => true));
275
  }
276
- SQ_Classes_Tools::emptyCache();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
277
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  }
279
- exit();
280
  }
281
 
282
  /**
@@ -284,17 +358,17 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
284
  * @param $post_id
285
  */
286
  private function _checkBriefcaseKeywords($post_id) {
287
- if (SQ_Classes_Tools::getIsset('sq_hash')) {
288
- $keywords = SQ_Classes_Tools::getValue('sq_briefcase_keyword', array());
289
  if (!empty($keywords)) {
290
- $sq_hash = SQ_Classes_Tools::getValue('sq_hash', md5($post_id));
291
- $url = SQ_Classes_Tools::getValue('sq_url', get_permalink($post_id));
292
- $sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($sq_hash);
293
 
294
  if ($sq->doseo && $sq->keywords == '') {
295
  $sq->keywords = join(',', $keywords);
296
 
297
- SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
298
  $url,
299
  $sq_hash,
300
  (int)$post_id,
6
 
7
  public function init() {
8
  parent::init();
9
+
10
+ //Load post style in post edit
11
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('post');
12
+
13
+ //load the draggable script in post edit for the floating SLA
14
+ wp_enqueue_script("jquery-ui-core");
15
+ wp_enqueue_script("jquery-ui-draggable");
16
  }
17
 
18
  /**
19
  * Hook the post save
20
  */
21
  public function hookPost() {
22
+ if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '')
23
  return;
24
 
25
  //Hook and save the Snippet and Keywords
28
  add_filter('wp_insert_post_data', array($this, 'removeHighlight'), 12, 2);
29
  add_filter('wp_insert_post_data', array($this, 'checkImage'), 13, 2);
30
 
31
+ if (SQ_Classes_Helpers_Tools::getOption('sq_auto_sitemap')) {
32
  add_action('transition_post_status', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps'), 'refreshSitemap'), 9999, 3);
33
  }
34
 
41
  */
42
  public function hookEditor() {
43
  $this->saved = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
 
46
  /**
47
  * Remove the Squirrly Highlights in case there are some left
48
  * @param array $post_data
72
  return $post_data;
73
  }
74
 
75
+ require_once(ABSPATH . 'wp-admin/includes/image.php');
76
 
77
  //if the option to save the images locally is set on
78
+ if (SQ_Classes_Helpers_Tools::getOption('sq_local_images')) {
79
  @set_time_limit(90);
80
 
81
  $urls = array();
118
  if ($local_file !== false) {
119
  $post_data['post_content'] = str_replace($url, $local_file, $post_data['post_content']);
120
 
121
+ if (!$this->model->findAttachmentByUrl(basename($url))) {
122
  $attach_id = wp_insert_attachment(array(
123
  'post_mime_type' => $file['type'],
124
+ 'post_title' => SQ_Classes_Helpers_Tools::getValue('sq_keyword', preg_replace('/\.[^.]+$/', '', $file['filename'])),
125
  'post_content' => '',
126
  'post_status' => 'inherit',
127
  'guid' => $local_file
134
  }
135
 
136
  if (microtime(true) - $time >= 20) {
137
+ break;
138
  }
139
 
140
  }
145
  return $post_data;
146
  }
147
 
 
148
  /**
149
  * Check the SEO from Squirrly Live Assistant
150
  *
159
 
160
  $args = array();
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', '');
168
 
169
  $args['status'] = $post_data['post_status'];
170
  $args['permalink'] = get_permalink($postarr['ID']);
171
  $args['author'] = $post_data['post_author'];
172
  $args['post_id'] = $postarr['ID'];
173
 
174
+ if ($args['permalink']) {
175
+ if (SQ_Classes_Helpers_Tools::getOption('sq_force_savepost')) {
176
+ SQ_Classes_RemoteController::savePost($args);
177
+ } else {
178
+ $process = array();
179
+ if (get_option('sq_seopost') !== false) {
180
+ $process = json_decode(get_option('sq_seopost'), true);
181
+ }
182
 
183
+ $process[] = $args;
184
 
185
+ //save for later send to api
186
+ update_option('sq_seopost', json_encode($process));
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
 
194
  //Save the keyword for this post
195
  if ($json = $this->model->getKeyword($postarr['ID'])) {
196
+ $json->keyword = addslashes(SQ_Classes_Helpers_Tools::getValue('sq_keyword'));
197
  $this->model->saveKeyword($postarr['ID'], $json);
198
  } else {
199
  $args = array();
200
+ $args['keyword'] = addslashes(SQ_Classes_Helpers_Tools::getValue('sq_keyword'));
201
  $this->model->saveKeyword($postarr['ID'], json_decode(json_encode($args)));
202
  }
203
 
204
  //Save the snippet in case is edited in backend and not saved
205
+ SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->saveSEO();
206
 
207
  //check for custom SEO
208
  $this->_checkBriefcaseKeywords($postarr['ID']);
217
  */
218
  public function action() {
219
  parent::action();
220
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
 
221
  case 'sq_save_ogimage':
222
+ if (!current_user_can('sq_manage_snippet')) {
223
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
224
+ SQ_Classes_Helpers_Tools::setHeader('json');
225
+ echo json_encode($response);
226
+ exit();
227
+ }
228
+
229
  if (!empty($_FILES['ogimage'])) {
230
  $return = $this->model->addImage($_FILES['ogimage']);
231
  }
238
  'post_content' => '',
239
  'post_status' => 'inherit',
240
  'guid' => $local_file
241
+ ), $return['file'], SQ_Classes_Helpers_Tools::getValue('post_id'));
242
 
243
  $attach_data = wp_generate_attachment_metadata($attach_id, $return['file']);
244
  wp_update_attachment_metadata($attach_id, $attach_data);
245
  }
246
+ SQ_Classes_Helpers_Tools::setHeader('json');
247
+ SQ_Classes_Helpers_Tools::emptyCache();
248
+
249
  echo json_encode($return);
250
+ exit();
251
 
 
252
  case 'sq_get_keyword':
253
+ if (!current_user_can('sq_manage_snippet')) {
254
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
255
+ SQ_Classes_Helpers_Tools::setHeader('json');
256
+ echo json_encode($response);
257
+ exit();
258
+ }
259
+
260
+ SQ_Classes_Helpers_Tools::setHeader('json');
261
+ if (SQ_Classes_Helpers_Tools::getIsset('post_id')) {
262
+ echo json_encode($this->model->getKeywordsFromPost(SQ_Classes_Helpers_Tools::getValue('post_id')));
263
  } else {
264
  echo json_encode(array('error' => true));
265
  }
266
+ SQ_Classes_Helpers_Tools::emptyCache();
267
+ break;
268
+
269
+ case 'sq_create_demo':
270
+ $post_type = 'post';
271
+ if (post_type_exists($post_type)) {
272
+ if (file_exists(_SQ_ROOT_DIR_ . 'demo.json')) {
273
+ $json = json_decode(file_get_contents(_SQ_ROOT_DIR_ . 'demo.json'));
274
+
275
+ if (isset($json->demo->title) && isset($json->demo->content)) {
276
+ $args = array();
277
+ $args['s'] = '"' . addslashes($json->demo->title) . '"';
278
+ $args['post_type'] = $post_type;
279
+ //if the post doesn't exists already or is changed
280
+ if (!$posts = SQ_Classes_ObjController::getClass('SQ_Models_Post')->searchPost($args)) {
281
+
282
+ // Create post object
283
+ $post = array(
284
+ 'post_title' => $json->demo->title,
285
+ 'post_content' => $json->demo->content,
286
+ 'post_status' => 'draft',
287
+ 'comment_status' => 'closed',
288
+ 'ping_status' => 'closed',
289
+ 'post_type' => $post_type,
290
+ 'post_author' => get_current_user_id(),
291
+ 'post_category' => array()
292
+ );
293
+
294
+ if ($post_id = wp_insert_post($post)) {
295
+ if (!is_wp_error($post_id)) {
296
+ $args = array();
297
+ $args['keyword'] = $json->demo->keyword;
298
+ $this->model->saveKeyword($post_id, json_decode(json_encode($args)));
299
+
300
+ wp_redirect(admin_url("post.php?post=" . $post_id . "&action=edit&post_type=" . $post_type));
301
+ exit();
302
+
303
+ }
304
+ }
305
+ } else {
306
+ foreach ($posts as $post) {
307
+ wp_redirect(admin_url("post.php?post=" . $post->ID . "&action=edit&post_type=" . $post_type));
308
+ exit();
309
+ }
310
+ }
311
+
312
+ }
313
+ }
314
+ }
315
+ SQ_Classes_Error::setError(__('Could not add the demo post.', _SQ_PLUGIN_NAME_));
316
  break;
317
+
318
+ /**************************** AJAX CALLS *************************/
319
+ case 'sq_ajax_type_click':
320
+ SQ_Classes_Helpers_Tools::saveOptions('sq_img_licence', SQ_Classes_Helpers_Tools::getValue('licence'));
321
+ exit();
322
+
323
+ case 'sq_ajax_search_blog':
324
+ $args = array();
325
+ $args['post_type'] = 'post';
326
+ $args['post_status'] = 'publish';
327
+
328
+ if (SQ_Classes_Helpers_Tools::getValue('exclude') && SQ_Classes_Helpers_Tools::getValue('exclude') <> 'undefined') {
329
+ $args['post__not_in'] = array((int)SQ_Classes_Helpers_Tools::getValue('exclude'));
330
+ }
331
+ if (SQ_Classes_Helpers_Tools::getValue('start'))
332
+ $args['start'] = array((int)SQ_Classes_Helpers_Tools::getValue('start'));
333
+
334
+ if (SQ_Classes_Helpers_Tools::getValue('nrb'))
335
+ $args['posts_per_page'] = (int)SQ_Classes_Helpers_Tools::getValue('nrb');
336
+
337
+ if (SQ_Classes_Helpers_Tools::getValue('q') <> '')
338
+ $args['s'] = SQ_Classes_Helpers_Tools::getValue('q');
339
+
340
+ $responce = array();
341
+ if ($posts = SQ_Classes_ObjController::getClass('SQ_Models_Post')->searchPost($args)) {
342
+ foreach ($posts as $post) {
343
+ $responce['results'][] = array('id' => $post->ID,
344
+ 'url' => get_permalink($post->ID),
345
+ 'title' => $post->post_title,
346
+ 'content' => SQ_Classes_Helpers_Sanitize::truncate($post->post_content, 50),
347
+ 'date' => $post->post_date_gmt);
348
+ }
349
+ }
350
+
351
+ echo json_encode($responce);
352
+ exit();
353
  }
 
354
  }
355
 
356
  /**
358
  * @param $post_id
359
  */
360
  private function _checkBriefcaseKeywords($post_id) {
361
+ if (SQ_Classes_Helpers_Tools::getIsset('sq_hash')) {
362
+ $keywords = SQ_Classes_Helpers_Tools::getValue('sq_briefcase_keyword', array());
363
  if (!empty($keywords)) {
364
+ $sq_hash = SQ_Classes_Helpers_Tools::getValue('sq_hash', md5($post_id));
365
+ $url = SQ_Classes_Helpers_Tools::getValue('sq_url', get_permalink($post_id));
366
+ $sq = SQ_Classes_ObjController::getClass('SQ_Models_Qss')->getSqSeo($sq_hash);
367
 
368
  if ($sq->doseo && $sq->keywords == '') {
369
  $sq->keywords = join(',', $keywords);
370
 
371
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->saveSqSEO(
372
  $url,
373
  $sq_hash,
374
  (int)$post_id,
controllers/PostsList.php CHANGED
@@ -3,69 +3,61 @@
3
  class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
4
 
5
  /** @var array Posts types in */
6
- private $types = array();
 
7
 
8
  /** @var integer Set the column index for Squirrly */
9
- private $pos = 5;
10
 
11
  /** @var string Set the column name for Squirrly */
12
- private $column_id = 'sq_rank_column';
 
13
 
14
- /** @var boolean Is post list colled */
15
- private $is_list = false;
16
- private $posts = array();
17
 
18
 
19
- /**
20
- * Called in SQ_Controllers_Menu > hookMenu
21
- */
22
- public function init() {
23
- $this->types = array_map(array($this, '_addPostsType'), SQ_Classes_Tools::getOption('sq_post_types'));
24
- }
25
-
26
  /**
27
  * Create the column and filter for the Posts List
28
  *
29
  */
30
- public function hookInit() {
31
- if (SQ_Classes_Tools::getOption('sq_api') == '') {
32
- return;
33
- }
 
 
 
 
 
34
 
35
- $browser = SQ_Classes_Tools::getBrowserInfo();
36
 
37
- if ($browser['name'] == 'IE' && (int)$browser['version'] < 9 && (int)$browser['version'] > 0)
38
  return;
 
 
 
 
 
 
39
 
40
- foreach ($this->types as $type) {
41
- add_filter('manage_' . $type . '_columns', array($this, 'add_column'), 10, 1);
42
- add_action('manage_' . $type . '_custom_column', array($this, 'add_row'), 10, 2);
43
  }
44
 
45
- //Update post status
46
  add_action('before_delete_post', array($this->model, 'hookUpdateStatus'));
47
  add_action('untrashed_post', array($this->model, 'hookUpdateStatus'));
48
  add_action('trashed_post', array($this->model, 'hookUpdateStatus'));
49
  }
50
 
51
- protected function _addPostsType($type) {
52
- return $type . '_posts';
53
- }
54
-
55
- public function setPosts($posts) {
56
- if (!empty($posts)) {
57
- $this->posts = $posts;
58
- $this->is_list = true;
59
- }
60
- return $this;
61
- }
62
-
63
  /**
64
- * Hook the Wordpress header
65
  */
66
  public function loadHead() {
67
- parent::hookHead();
68
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia(_SQ_THEME_URL_ . '/css/postslist.css');
69
  }
70
 
71
  /**
@@ -74,11 +66,13 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
74
  * @param array $columns
75
  * @return array
76
  */
77
- public function add_column($columns) {
78
  $this->loadHead(); //load the js only for post list
79
- $this->is_list = true;
80
 
81
- return $this->insert($columns, array($this->column_id => __('Squirrly') . $this->getScripts()), $this->pos);
 
 
 
82
  }
83
 
84
  /**
@@ -87,111 +81,57 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
87
  * @param object $column
88
  * @param integer $post_id
89
  */
90
- public function add_row($column, $post_id) {
91
- $cached = false;
 
 
92
 
93
- if ($column == $this->column_id) {
94
- if (isset($_COOKIE[$this->column_id . $post_id]) && $_COOKIE[$this->column_id . $post_id] <> '') {
 
95
  $cached = true;
96
  } else {
97
  if (get_post_status($post_id) == 'publish')
98
  array_push($this->posts, $post_id);
99
  }
100
 
101
- echo '<div class="' . $this->column_id . '_row" ref="' . $post_id . '">' . (($cached) ? $_COOKIE[$this->column_id . $post_id] : 'loading ...') . '</div>';
 
102
 
103
- if ($frontend = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')) {
104
- $title = $frontend->getAdvancedMeta($post_id, 'title');
105
- $description = $frontend->getAdvancedMeta($post_id, 'description');
106
- echo '<script type="text/javascript">
107
- jQuery(\'#post-' . $post_id . '\').find(\'.row-title\').before(\'' . (($description <> '') ? '<span class="sq_rank_custom_meta sq_rank_customdescription sq_rank_sprite" title="' . __('Custom description: ', _SQ_PLUGIN_NAME_) . ' ' . addslashes($description) . '"></span>' : '') . ' ' . (($title <> '') ? '<span class="sq_rank_custom_meta sq_rank_customtitle sq_rank_sprite" title="' . __('Custom title: ', _SQ_PLUGIN_NAME_) . ' ' . addslashes($title) . '"></span>' : '') . '\');
108
- </script>';
109
- }
110
  }
111
  }
112
 
 
113
  /**
114
- * Hook the Footer
115
  *
 
 
116
  */
117
- public function hookFooter() {
118
- if (!$this->is_list)
119
- return;
120
-
121
- $posts = '';
122
- foreach ($this->posts as $post) {
123
- $posts .= '"' . $post . '",';
124
- }
125
- if (strlen($posts) > 0)
126
- $posts = substr($posts, 0, strlen($posts) - 1);
127
-
128
- echo '<script type="text/javascript">
129
- var sq_posts = new Array(' . $posts . ');
130
- //Show set complete
131
- if (jQuery(".sq_helpnotice").length > 0)
132
- jQuery(".sq_helpnotice").slideDown();
133
- </script>';
134
 
135
- $this->setVars();
 
136
  }
137
 
138
  /**
139
- * Set the javascript variables
 
 
 
 
140
  */
141
- public function setVars() {
142
- echo '<script type="text/javascript">
143
- var __sq_article_rank = "' . __('SEO Analytics, by Squirrly', _SQ_PLUGIN_NAME_) . '";
144
- var __sq_refresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '"
145
-
146
- var __sq_dashurl = "' . _SQ_STATIC_API_URL_ . '";
147
- var __token = "' . SQ_Classes_Tools::getOption('sq_api') . '";
148
- var __sq_ranknotpublic_text = "' . __('Not Public', _SQ_PLUGIN_NAME_) . '";
149
- var __sq_couldnotprocess_text = "' . __('Could not process', _SQ_PLUGIN_NAME_) . '";
150
- </script>';
151
- }
152
 
153
- public function getScripts() {
154
- return '<script type="text/javascript">
155
- //load the rank from squirrly
156
- if (typeof sq_script === "undefined"){
157
- var sq_script = document.createElement(\'script\');
158
- sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/sq_rank' . (SQ_DEBUG ? '' : '.min') . '.js?ver=' . SQ_VERSION_ID . '";
159
- var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
160
- site_head.insertBefore(sq_script, site_head.firstChild);
161
- }
162
- google.load("visualization", "1", {packages: ["corechart"]});
163
- function drawChart(id, values, reverse) {
164
- var data = google.visualization.arrayToDataTable(values);
165
-
166
- var options = {
167
-
168
- curveType: "function",
169
- title: "",
170
- chartArea:{width:"100%",height:"100%"},
171
- enableInteractivity: "true",
172
- tooltip: {trigger: "auto"},
173
- pointSize: "0",
174
- legend: "none",
175
- backgroundColor: "transparent",
176
- colors: ["#55b2ca"],
177
- hAxis: {
178
- baselineColor: "transparent",
179
- gridlineColor: "transparent",
180
- textPosition: "none"
181
- } ,
182
- vAxis:{
183
- direction: ((reverse) ? -1 : 1),
184
- baselineColor: "transparent",
185
- gridlineColor: "transparent",
186
- textPosition: "none"
187
- }
188
- };
189
-
190
- var chart = new google.visualization.LineChart(document.getElementById(id));
191
- chart.draw(data, options);
192
- return chart;
193
- }
194
- </script>';
195
  }
196
 
197
  /**
@@ -217,190 +157,69 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
217
 
218
  /**
219
  * Hook Get/Post action
220
- * @return string
221
  */
222
  public function action() {
223
- switch (SQ_Classes_Tools::getValue('action')) {
224
  case 'inline-save':
225
  check_ajax_referer('inlineeditnonce', '_inline_edit');
226
  if (isset($_POST['post_ID']) && ($post_id = (int)$_POST['post_ID']) && isset($_POST['_status']) && $_POST['_status'] <> '') {
227
  $args = array();
228
  $args['status'] = $_POST['_status'];
229
  $args['post_id'] = $post_id;
230
- SQ_Classes_Action::apiCall('sq/seo/update', $args, 10);
231
  }
232
 
233
  return;
234
  }
235
 
236
  parent::action();
237
- switch (SQ_Classes_Tools::getValue('action')) {
238
- case 'sq_posts_rank':
239
- SQ_Classes_Tools::setHeader('json');
240
- $args = array();
241
- $posts = SQ_Classes_Tools::getValue('posts');
242
- if (is_array($posts) && !empty($posts)) {
243
- $posts = SQ_Classes_Tools::getValue('posts');
244
- $args['posts'] = join(',', $posts);
245
-
246
- $response = json_decode(SQ_Classes_Action::apiCall('sq/user-analytics/total', $args, 20));
247
  }
248
- if (isset($response) && is_object($response)) {
249
- $response = $this->model->getTotal($response);
250
- exit(json_encode($response));
251
- }
252
- exit(json_encode(array('posts' => array())));
253
- break;
254
- case 'sq_post_rank':
255
- SQ_Classes_Tools::setHeader('json');
256
- $args = array();
257
- $rank = null;
258
- $this->model->post_id = (int)SQ_Classes_Tools::getValue('post');
259
- $args['post_id'] = $this->model->post_id;
260
-
261
- if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id)) {
262
- if (isset($json->rank)) {
263
- $rank = $json->rank;
264
- } else {
265
- $rank = get_transient('sq_rank' . $this->model->post_id);
266
- }
267
 
268
- if (isset($rank) && $rank !== false) {
269
- $ranking = SQ_Classes_ObjController::getClass('SQ_Classes_Ranking');
270
- $args['rank'] = (string)$rank;
271
- $args['country'] = $ranking->getCountry();
272
- $args['language'] = $ranking->getLanguage();
273
- }
274
- }
275
-
276
- $response = json_decode(SQ_Classes_Action::apiCall('sq/user-analytics/detail', $args, 20));
277
-
278
- if (!is_object($response)) {
279
- exit(json_encode(array('error' => $response)));
280
- } else {
281
- //SQ_Classes_Tools::dump($response);
282
- $analytics = SQ_Classes_ObjController::getClass('SQ_Core_BlockAnalytics');
283
- $analytics->flush = false;
284
- $analytics->post_id = $this->model->post_id;
285
- $analytics->audit = $this->model->getAnalytics($response, $this->model->post_id);
286
 
287
- $response = $analytics->init();
288
- if (SQ_Classes_Tools::getValue('sq_debug') === 'on') {
 
289
  exit();
290
  }
291
- exit(json_encode($response));
292
  }
293
- break;
294
- case 'sq_recheck':
295
- SQ_Classes_Tools::setHeader('json');
296
- if (SQ_Classes_Tools::getValue('sq_debug') === 'on' || get_transient('google_blocked') === false) {
297
- $this->model->post_id = (int)SQ_Classes_Tools::getValue('post_id');
298
- if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id)) {
299
- $oldrank = (isset($json->rank) ? $json->rank : -1);
300
- if (get_transient('sq_rank' . $this->model->post_id) !== false) {
301
- delete_transient('sq_rank' . $this->model->post_id);
302
- }
303
-
304
- $this->checkKeyword($json->keyword, true);
305
- $json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id);
306
- if ($json->rank === false) {
307
- exit(json_encode(array('error' => true)));
308
- } else {
309
- if ($json->rank == -2) {
310
- $json->rank = $oldrank;
311
- }
312
-
313
- if ($json->rank == -1) {
314
- $value = sprintf(__('Not in top 100 for: %s'), '<br />' . $json->keyword);
315
- } elseif ($json->rank == 0) {
316
- $value = __('The URL is Indexed', _SQ_PLUGIN_NAME_);
317
- } elseif ($json->rank > 0) {
318
- $value = '<strong style="display:block; font-size: 120%; width: 100px; margin: 0 auto; text-align:right;">' . sprintf(__('%s'), $json->rank) . '</strong>' . ((isset($json->country)) ? ' (' . $json->country . ')' : '');
319
- }
320
- exit(json_encode(array('rank' => $value)));
321
- }
322
- }
323
-
324
- exit(json_encode(array('error' => true)));
325
- } else {
326
- $this->model->post_id = (int)SQ_Classes_Tools::getValue('post_id');
327
- if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id)) {
328
- if ($json->rank === false) {
329
- exit(json_encode(array('error' => true)));
330
- } else {
331
- if ($json->rank == -1) {
332
- $value = sprintf(__('Not in top 100 for: %s'), '<br />' . $json->keyword);
333
- } elseif ($json->rank == 0) {
334
- $value = __('The URL is Indexed', _SQ_PLUGIN_NAME_);
335
- } elseif ($json->rank > 0) {
336
- $value = '<strong style="display:block; font-size: 120%; width: 100px; margin: 0 auto; text-align:right;">' . sprintf(__('%s'), $json->rank) . '</strong>' . ((isset($json->country)) ? ' (' . $json->country . ')' : '');
337
- }
338
- exit(json_encode(array('rank' => $value)));
339
- }
340
- }
341
- exit(json_encode(array('error' => true)));
342
- }
343
- break;
344
  }
345
  }
346
 
347
  /**
348
- * Check and save the Keyword SERP
349
  *
350
- * @param type $keyword
351
- * @return type
352
  */
353
- private function checkKeyword($keyword, $force = false) {
354
- $rank = null;
 
 
 
355
 
356
- if ($keyword == '')
357
- return;
358
 
359
- $ranking = SQ_Classes_ObjController::getClass('SQ_Classes_Ranking');
360
- if (is_object($ranking)) {
361
- $rank = get_transient('sq_rank' . $this->model->post_id);
362
- //if the rank is not in transient
363
- if ($rank === false) {
364
- //get the keyword from database
365
- $json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id);
366
- if ($force === false && isset($json->rank)) {
367
- $rank = $json->rank;
368
- //add it to transient
369
- set_transient('sq_rank' . $this->model->post_id, $rank, (60 * 60 * 24 * 1));
370
- } else {
371
- $rank = $ranking->processRanking($this->model->post_id, $keyword);
372
-
373
- if ($rank == -1) {
374
- sleep(mt_rand(5, 10));
375
- //if not indexed with the keyword then find the url
376
- if ($ranking->processRanking($this->model->post_id, get_permalink($this->model->post_id)) > 0) { //for permalink index set 0
377
- $rank = 0;
378
- }
379
- }
380
- if ($rank !== false && $rank >= -1) {
381
- $args = array();
382
- $args['keyword'] = $keyword;
383
- $args['rank'] = $rank;
384
- $args['country'] = $ranking->getCountry();
385
- $args['language'] = $ranking->getLanguage();
386
- SQ_Classes_ObjController::getClass('SQ_Models_Post')->saveKeyword($this->model->post_id, json_decode(json_encode($args)));
387
- }
388
- //add it to transient
389
- set_transient('sq_rank' . $this->model->post_id, $rank, (60 * 60 * 24 * 1));
390
- }
391
- }
392
 
393
- //save the rank if there is no error
394
- if ($rank !== false && $rank >= -1) {
395
- $args = array();
396
- $args['post_id'] = $this->model->post_id;
397
- $args['rank'] = (string)$rank;
398
- $args['country'] = $ranking->getCountry();
399
- $args['language'] = $ranking->getLanguage();
400
- SQ_Classes_Action::apiCall('sq/user-analytics/saveserp', $args);
401
- }
402
- }
403
- return $rank;
404
  }
405
 
406
  }
3
  class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
4
 
5
  /** @var array Posts types in */
6
+ private $_types = array();
7
+ private $_taxonomies = array();
8
 
9
  /** @var integer Set the column index for Squirrly */
10
+ private $_pos = 5;
11
 
12
  /** @var string Set the column name for Squirrly */
13
+ private $_slacolumn_id = 'sq_slacolumn';
14
+ private $_column_id = 'sq_column';
15
 
16
+ /** @var array list of the posts to load the optimization for */
17
+ public $posts = array();
 
18
 
19
 
 
 
 
 
 
 
 
20
  /**
21
  * Create the column and filter for the Posts List
22
  *
23
  */
24
+ public function init() {
25
+ $this->_types = get_post_types(array('public' => true));
26
+ SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->init();
27
+
28
+ array_push($this->_types, 'posts');
29
+ array_push($this->_types, 'pages');
30
+ array_push($this->_types, 'media');
31
+
32
+ $this->_taxonomies = get_taxonomies(array('public' => true));
33
 
34
+ //SQ_Debug::dump($this->_types,$this->_taxonomies);
35
 
36
+ if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') {
37
  return;
38
+ }
39
+
40
+ foreach ($this->_types as $type) {
41
+ add_filter('manage_' . $type . '_columns', array($this, 'add_post_column'), 10, 1);
42
+ add_action('manage_' . $type . '_custom_column', array($this, 'add_post_row'), 10, 2);
43
+ }
44
 
45
+ foreach ($this->_taxonomies as $taxonomy) {
46
+ add_filter('manage_edit-' . $taxonomy . '_columns', array($this, 'add_tax_column'), 10, 1);
47
+ add_action('manage_' . $taxonomy . '_custom_column', array($this, 'add_tax_row'), 10, 3);
48
  }
49
 
50
+ //Update post status on API
51
  add_action('before_delete_post', array($this->model, 'hookUpdateStatus'));
52
  add_action('untrashed_post', array($this->model, 'hookUpdateStatus'));
53
  add_action('trashed_post', array($this->model, 'hookUpdateStatus'));
54
  }
55
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  /**
57
+ * Hook the Wordpress header only on postslist header table
58
  */
59
  public function loadHead() {
60
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('postslist');
 
61
  }
62
 
63
  /**
66
  * @param array $columns
67
  * @return array
68
  */
69
+ public function add_post_column($columns) {
70
  $this->loadHead(); //load the js only for post list
 
71
 
72
+ $columns = $this->insert($columns, array($this->_column_id => __('SQ Snippet', _SQ_PLUGIN_NAME_)), $this->_pos);
73
+ $columns = $this->insert($columns, array($this->_slacolumn_id => __('Optimized', _SQ_PLUGIN_NAME_)), $this->_pos);
74
+
75
+ return $columns;
76
  }
77
 
78
  /**
81
  * @param object $column
82
  * @param integer $post_id
83
  */
84
+ public function add_post_row($column, $post_id) {
85
+ if (!$post_type = get_post_type($post_id)) {
86
+ $post_type = 'post';
87
+ }
88
 
89
+ if ($column == $this->_slacolumn_id) {
90
+ $cached = false;
91
+ if (isset($_COOKIE[$this->_slacolumn_id . $post_id]) && $_COOKIE[$this->_slacolumn_id . $post_id] <> '') {
92
  $cached = true;
93
  } else {
94
  if (get_post_status($post_id) == 'publish')
95
  array_push($this->posts, $post_id);
96
  }
97
 
98
+ echo '<div class="' . $this->_slacolumn_id . '_row" ref="' . $post_id . '">' . (($cached) ? $_COOKIE[$this->_slacolumn_id . $post_id] : 'loading ...') . '</div>';
99
+ }
100
 
101
+ if ($column == $this->_column_id) {
102
+ echo '<div class="' . $this->_column_id . '_row">' . $this->model->getPostButton($post_id, $post_type) . '</div>';
 
 
 
 
 
103
  }
104
  }
105
 
106
+
107
  /**
108
+ * Add the Squirrly column in the Post List
109
  *
110
+ * @param array $columns
111
+ * @return array
112
  */
113
+ public function add_tax_column($columns) {
114
+ $this->loadHead(); //load the js only for post list
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
 
116
+ $columns = $this->insert($columns, array($this->_column_id => __('SQ Snippet', _SQ_PLUGIN_NAME_)), $this->_pos);
117
+ return $columns;
118
  }
119
 
120
  /**
121
+ * Add row in Categories and Tags
122
+ *
123
+ * @param string $html
124
+ * @param object $column
125
+ * @param integer $post_id
126
  */
127
+ public function add_tax_row($html = '', $column, $tax_id) {
128
+ $term = get_term($tax_id);
 
 
 
 
 
 
 
 
 
129
 
130
+ if (!is_wp_error($term) && $column == $this->_column_id) {
131
+ return '<div class="' . $this->_column_id . '_row">' . $this->model->getTaxButton($term->term_id, 'tax-' . $term->taxonomy) . '</div>';
132
+ }
133
+
134
+ return $html;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  }
136
 
137
  /**
157
 
158
  /**
159
  * Hook Get/Post action
160
+ * @return void
161
  */
162
  public function action() {
163
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
164
  case 'inline-save':
165
  check_ajax_referer('inlineeditnonce', '_inline_edit');
166
  if (isset($_POST['post_ID']) && ($post_id = (int)$_POST['post_ID']) && isset($_POST['_status']) && $_POST['_status'] <> '') {
167
  $args = array();
168
  $args['status'] = $_POST['_status'];
169
  $args['post_id'] = $post_id;
170
+ SQ_Classes_RemoteController::updatePost($args);
171
  }
172
 
173
  return;
174
  }
175
 
176
  parent::action();
177
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
178
+ case 'sq_ajax_postslist':
179
+ if (!current_user_can('sq_manage_snippet')) {
180
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
181
+ SQ_Classes_Helpers_Tools::setHeader('json');
182
+ echo json_encode($response);
183
+ exit();
 
 
 
184
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
 
186
+ SQ_Classes_Helpers_Tools::setHeader('json');
187
+ $args = array();
188
+ $posts = SQ_Classes_Helpers_Tools::getValue('posts');
189
+ if (is_array($posts) && !empty($posts)) {
190
+ $post_type = SQ_Classes_Helpers_Tools::getValue('post_type', 'post');
191
+ $args['posts'] = join(',', SQ_Classes_Helpers_Tools::getValue('posts', array()));
 
 
 
 
 
 
 
 
 
 
 
 
192
 
193
+ if ($json = SQ_Classes_RemoteController::getPostOptimization($args)) {
194
+ $posts = $this->model->processPost($json, $post_type);
195
+ echo json_encode(array('posts' => $posts));
196
  exit();
197
  }
 
198
  }
199
+ echo json_encode(array('posts' => array()));
200
+ exit();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  }
202
  }
203
 
204
  /**
205
+ * Hook the Footer
206
  *
 
 
207
  */
208
+ public function hookFooter() {
209
+ $posts = '';
210
+ foreach ($this->posts as $post) {
211
+ $posts .= '"' . $post . '",';
212
+ }
213
 
214
+ if (strlen($posts) > 0) $posts = substr($posts, 0, strlen($posts) - 1);
 
215
 
216
+ echo '<script type="text/javascript">
217
+ var __sq_ranknotpublic_text = "' . __('Not Public', _SQ_PLUGIN_NAME_) . '";
218
+ var __sq_couldnotprocess_text = "' . __('Could not process', _SQ_PLUGIN_NAME_) . '";
219
+ var __sq_subscriptionexpired_text = "' . __('The Squirrly subscription has expired!', _SQ_PLUGIN_NAME_) . '";
220
+ var sq_posts = new Array(' . $posts . ');
221
+ </script>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
 
 
 
 
 
 
 
 
 
 
 
 
223
  }
224
 
225
  }
controllers/Ranking.php ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Ranking extends SQ_Classes_FrontController {
4
+ public $info;
5
+ public $ranks;
6
+ public $serps;
7
+ //checkin API
8
+ public $checkin;
9
+
10
+
11
+ function init() {
12
+ //Checkin to API V2
13
+ $this->checkin = SQ_Classes_RemoteController::checkin();
14
+
15
+ $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'rankings');
16
+
17
+ if (method_exists($this, $tab)) {
18
+ call_user_func(array($this, $tab));
19
+ }
20
+
21
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
22
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
23
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
24
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
25
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('datatables');
26
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
27
+
28
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
29
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
30
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('rankings');
31
+
32
+ //@ob_flush();
33
+ echo $this->getView('Ranking/' . ucfirst($tab));
34
+
35
+ //get the modal window for the assistant popup
36
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
37
+
38
+ }
39
+
40
+ /**
41
+ * Call the rankings
42
+ */
43
+ public function rankings() {
44
+ $args = array();
45
+ $args['days_back'] = 7;
46
+ $args['keyword'] = (string)SQ_Classes_Helpers_Tools::getValue('skeyword', '');
47
+ $args['has_change'] = (string)SQ_Classes_Helpers_Tools::getValue('schanges', '');
48
+ $args['has_ranks'] = (string)SQ_Classes_Helpers_Tools::getValue('ranked', '');
49
+
50
+
51
+ if ($this->info = SQ_Classes_RemoteController::getRanksStats($args)) {
52
+ if (is_wp_error($this->info)) {
53
+ $this->info = array();
54
+ }
55
+ }
56
+
57
+ if ($this->ranks = SQ_Classes_RemoteController::getRanks($args)) {
58
+ if (is_wp_error($this->ranks)) {
59
+ $this->ranks = array();
60
+ }
61
+ }
62
+ }
63
+
64
+ public function gscsync() {
65
+ $args = array();
66
+ $args['max_results'] = '100';
67
+ $args['max_position'] = '30';
68
+
69
+ if ($this->suggested = SQ_Classes_RemoteController::syncGSC($args)) {
70
+ if (is_wp_error($this->suggested)) {
71
+ $this->suggested = array();
72
+ }
73
+ }
74
+
75
+ //Get the briefcase keywords
76
+ if ($briefcase = SQ_Classes_RemoteController::getBriefcase()) {
77
+ if (!is_wp_error($briefcase)) {
78
+ if (isset($briefcase->keywords)) {
79
+ $this->keywords = $briefcase->keywords;
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Called when action is triggered
87
+ *
88
+ * @return void
89
+ */
90
+ public function action() {
91
+ parent::action();
92
+
93
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
94
+
95
+ case 'sq_ranking_settings':
96
+ if (!current_user_can('sq_manage_focuspages')) {
97
+ return;
98
+ }
99
+
100
+ //Save the settings
101
+ if (!empty($_POST)) {
102
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
103
+ }
104
+
105
+ //Save the settings on API too
106
+ $args = array();
107
+ $args['sq_google_country'] = SQ_Classes_Helpers_Tools::getValue('sq_google_country');
108
+ $args['sq_google_language'] = 'en';
109
+ SQ_Classes_RemoteController::saveSettings($args);
110
+ ///////////////////////////////
111
+
112
+ //show the saved message
113
+ SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
114
+
115
+ break;
116
+
117
+ case 'sq_serp_refresh_post':
118
+ if (!current_user_can('sq_manage_focuspages')) {
119
+ return;
120
+ }
121
+
122
+ $id = SQ_Classes_Helpers_Tools::getValue('id', false);
123
+ $keyword = SQ_Classes_Helpers_Tools::getValue('keyword', false);
124
+ if ($id && $keyword) {
125
+ $args = array();
126
+ $args['id'] = $id;
127
+ $args['keyword'] = $keyword;
128
+ if (SQ_Classes_RemoteController::checkPostRank($args) === false) {
129
+ SQ_Classes_Error::setError(sprintf(__('Could not refresh the rank. Please check your SERP credits %shere%s', _SQ_PLUGIN_NAME_), '<a href="' . SQ_Classes_RemoteController::getMySquirrlyLink('account') . '">', '</a>'));
130
+ } else {
131
+ SQ_Classes_Error::setMessage(sprintf(__('%s is queued and the rank will be checked soon.', _SQ_PLUGIN_NAME_), '<strong>' . $keyword . '</strong>'));
132
+ }
133
+ }
134
+
135
+ break;
136
+ case 'sq_serp_delete_keyword':
137
+ if (!current_user_can('sq_manage_focuspages')) {
138
+ return;
139
+ }
140
+
141
+ $keyword = SQ_Classes_Helpers_Tools::getValue('keyword', false);
142
+
143
+ if ($keyword) {
144
+ $response = SQ_Classes_RemoteController::deleteSerpKeyword(array('keyword' => $keyword));
145
+ if (!is_wp_error($response)) {
146
+ SQ_Classes_Error::setError(__('The keyword is deleted', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
147
+ } else {
148
+ SQ_Classes_Error::setError(__('Could not delete the keyword!', _SQ_PLUGIN_NAME_) . " <br /> ");
149
+ }
150
+ } else {
151
+ SQ_Classes_Error::setError(__('Invalid params!', _SQ_PLUGIN_NAME_) . " <br /> ");
152
+ }
153
+ break;
154
+
155
+ }
156
+ }
157
+
158
+ public function getScripts() {
159
+ return '<script type="text/javascript">
160
+ google.load("visualization", "1", {packages: ["corechart"]});
161
+ function drawChart(id, values, reverse) {
162
+ var data = google.visualization.arrayToDataTable(values);
163
+
164
+ var options = {
165
+
166
+ curveType: "function",
167
+ title: "",
168
+ chartArea:{width:"100%",height:"100%"},
169
+ enableInteractivity: "true",
170
+ tooltip: {trigger: "auto"},
171
+ pointSize: "2",
172
+ colors: ["#55b2ca"],
173
+ hAxis: {
174
+ baselineColor: "transparent",
175
+ gridlineColor: "transparent",
176
+ textPosition: "none"
177
+ } ,
178
+ vAxis:{
179
+ direction: ((reverse) ? -1 : 1),
180
+ baselineColor: "transparent",
181
+ gridlineColor: "transparent",
182
+ textPosition: "none"
183
+ }
184
+ };
185
+
186
+ var chart = new google.visualization.LineChart(document.getElementById(id));
187
+ chart.draw(data, options);
188
+ return chart;
189
+ }
190
+ </script>';
191
+ }
192
+ }
controllers/Research.php ADDED
@@ -0,0 +1,588 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Research extends SQ_Classes_FrontController {
4
+
5
+ public $blogs;
6
+ public $kr;
7
+ //--
8
+ public $keywords = array();
9
+ public $suggested = array();
10
+ public $rankkeywords = array();
11
+ public $labels = array();
12
+ public $countries = array();
13
+ //--
14
+ public $index;
15
+ public $error;
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');
22
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
23
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
24
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('datatables');
25
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
26
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
27
+
28
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
29
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
30
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('research');
31
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($tab);
32
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('chart');
33
+
34
+ if (method_exists($this, $tab)) {
35
+ call_user_func(array($this, $tab));
36
+ }
37
+
38
+ //@ob_flush();
39
+ echo $this->getView('Research/' . ucfirst($tab));
40
+
41
+ //get the modal window for the assistant popup
42
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
43
+ }
44
+
45
+ public function research() {
46
+ $countries = SQ_Classes_RemoteController::getKrCountries();
47
+
48
+ if (!is_wp_error($countries)) {
49
+ $this->countries = $countries;
50
+ } else {
51
+ $this->error = $countries->get_error_message();
52
+ }
53
+ }
54
+
55
+ public function briefcase() {
56
+ $search = (string)SQ_Classes_Helpers_Tools::getValue('skeyword', '');
57
+ $labels = SQ_Classes_Helpers_Tools::getValue('slabel', false);
58
+
59
+ $args = array();
60
+ $args['search'] = $search;
61
+ if ($labels && !empty($labels)) {
62
+ $args['label'] = join(',', $labels);
63
+ }
64
+ SQ_Debug::dump($args);
65
+
66
+ $briefcase = SQ_Classes_RemoteController::getBriefcase($args);
67
+ $this->rankkeywords = SQ_Classes_RemoteController::getRanks();
68
+
69
+ if (!is_wp_error($briefcase)) {
70
+ if (isset($briefcase->keywords) && !empty($briefcase->keywords)) {
71
+ $this->keywords = $briefcase->keywords;
72
+ } else {
73
+ $this->error = __('No keyword found.', _SQ_PLUGIN_NAME_);
74
+ }
75
+
76
+ if (isset($briefcase->labels)) {
77
+ $this->labels = $briefcase->labels;
78
+ }
79
+
80
+ }
81
+
82
+ wp_enqueue_style('wp-color-picker');
83
+ wp_enqueue_script('wp-color-picker');
84
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
85
+
86
+ }
87
+
88
+ public function labels() {
89
+
90
+ $args = array();
91
+ if (!empty($labels)) {
92
+ $args['label'] = join(',', $labels);
93
+ }
94
+
95
+ $briefcase = SQ_Classes_RemoteController::getBriefcase($args);
96
+
97
+ if (!is_wp_error($briefcase)) {
98
+ if (isset($briefcase->labels)) {
99
+ $this->labels = $briefcase->labels;
100
+ }
101
+ }
102
+
103
+ wp_enqueue_style('wp-color-picker');
104
+ wp_enqueue_script('wp-color-picker');
105
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
106
+
107
+ }
108
+
109
+ public function suggested() {
110
+ //Get the briefcase keywords
111
+ if ($briefcase = SQ_Classes_RemoteController::getBriefcase()) {
112
+ if (!is_wp_error($briefcase)) {
113
+ if (isset($briefcase->keywords)) {
114
+ $this->keywords = $briefcase->keywords;
115
+ }
116
+ }
117
+ }
118
+
119
+ $this->suggested = SQ_Classes_RemoteController::getKrFound();
120
+
121
+ }
122
+
123
+ function history() {
124
+
125
+ $args = array();
126
+ $args['limit'] = 100;
127
+ $this->kr = SQ_Classes_RemoteController::getKRHistory($args);
128
+
129
+ }
130
+
131
+
132
+ /**
133
+ * Called when action is triggered
134
+ *
135
+ * @return void
136
+ */
137
+ public function action() {
138
+ parent::action();
139
+
140
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
141
+
142
+ case 'sq_briefcase_addkeyword':
143
+ if (!current_user_can('sq_manage_snippet')) {
144
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
145
+ SQ_Classes_Helpers_Tools::setHeader('json');
146
+
147
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
148
+ echo json_encode($response);
149
+ exit();
150
+ } else {
151
+ SQ_Classes_Error::setError(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_));
152
+ }
153
+ }
154
+
155
+ SQ_Classes_Helpers_Tools::setHeader('json');
156
+ $keyword = (string)SQ_Classes_Helpers_Tools::getValue('keyword', '');
157
+ $do_serp = (int)SQ_Classes_Helpers_Tools::getValue('doserp', 0);
158
+ $is_hidden = (int)SQ_Classes_Helpers_Tools::getValue('hidden', 0);
159
+
160
+ if ($keyword <> '') {
161
+ //set ignore on API
162
+ $args = array();
163
+ $args['keyword'] = stripslashes($keyword);
164
+ $args['do_serp'] = $do_serp;
165
+ $args['is_hidden'] = $is_hidden;
166
+ SQ_Classes_RemoteController::addBriefcaseKeyword($args);
167
+
168
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
169
+ if ($do_serp) {
170
+ echo json_encode(array('message' => __('Keyword Saved. The rank check will be ready in a minute.', _SQ_PLUGIN_NAME_)));
171
+ } else {
172
+ echo json_encode(array('message' => __('Keyword Saved!', _SQ_PLUGIN_NAME_)));
173
+ }
174
+ exit();
175
+ } else {
176
+ SQ_Classes_Error::setMessage(__('Keyword Saved!', _SQ_PLUGIN_NAME_));
177
+ }
178
+ } else {
179
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
180
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
181
+ exit();
182
+ } else {
183
+ SQ_Classes_Error::setError(__('Invalid params!', _SQ_PLUGIN_NAME_));
184
+ }
185
+ }
186
+ break;
187
+
188
+ case 'sq_briefcase_deletekeyword':
189
+ if (!current_user_can('sq_manage_settings')) {
190
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
191
+ SQ_Classes_Helpers_Tools::setHeader('json');
192
+ echo json_encode($response);
193
+ exit();
194
+ }
195
+
196
+ SQ_Classes_Helpers_Tools::setHeader('json');
197
+ $keyword = (string)SQ_Classes_Helpers_Tools::getValue('keyword', '');
198
+
199
+ if ($keyword <> '') {
200
+ //set ignore on API
201
+ $args = array();
202
+ $args['keyword'] = stripslashes($keyword);
203
+ SQ_Classes_RemoteController::removeBriefcaseKeyword($args);
204
+
205
+ echo json_encode(array('message' => __('Deleted!', _SQ_PLUGIN_NAME_)));
206
+ } else {
207
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
208
+ }
209
+ exit();
210
+
211
+ case 'sq_briefcase_article':
212
+ if (!current_user_can('sq_manage_snippets')) {
213
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
214
+ SQ_Classes_Helpers_Tools::setHeader('json');
215
+ echo json_encode($response);
216
+ exit();
217
+ }
218
+
219
+ SQ_Classes_Helpers_Tools::setHeader('json');
220
+
221
+ $keyword = (string)SQ_Classes_Helpers_Tools::getValue('keyword', '');
222
+
223
+ if ($keyword <> '') {
224
+ $args = array();
225
+
226
+ $args['keyword'] = stripslashes($keyword);
227
+ $articles = json_decode(SQ_Classes_RemoteController::apiCall('briefcase/articles', $args));
228
+
229
+ $rows = array();
230
+ if ($articles && !empty($articles)) {
231
+ foreach ($articles as $article) {
232
+ if ($post = get_post($article->id)) {
233
+ $link = SQ_Classes_Helpers_Tools::getAdminUrl('optimization?post=' . $post->ID);
234
+ $rows[] = '<tr>
235
+ <td><span style="font-size: 15px; color: #333">' . $post->post_title . '</span></td>
236
+ <td align="right">' . (int)$article->optimized . '%' . '</td>
237
+ <td align="center">
238
+ <button class="btn btn-default sq_research_selectit" onclick="location.href = \'' . $link . '\'">' . __('Edit', _SQ_PLUGIN_NAME_) . '</button>
239
+ </td>
240
+ </tr>';
241
+ } else {
242
+ $rows[] = '<tr>
243
+ <td><span style="font-size: 11px; color: #aaa">' . __('Deleted Post', _SQ_PLUGIN_NAME_) . '</span></td>
244
+ <td align="right"></td>
245
+ <td align="right">' . (int)$article->optimized . '%' . '</td>
246
+ <td></td>
247
+ </tr>';
248
+ }
249
+ }
250
+
251
+ $table = sprintf('<table class="subtable">
252
+ <tr>
253
+ <th>' . __('Article title', _SQ_PLUGIN_NAME_) . '</th>
254
+ <th style="width: 150px; text-align: right;">' . __('Optimized', _SQ_PLUGIN_NAME_) . '</th>
255
+ <th style="width: 150px; text-align: center;">' . __('Option', _SQ_PLUGIN_NAME_) . '</th>
256
+ </tr>
257
+ %s
258
+ </table>', join('', $rows));
259
+ } else {
260
+ $table = '<table class="subtable"><tr><td colspan="6" align="center" style="color: red">' . __('No articles found', _SQ_PLUGIN_NAME_) . '</td></tr></table>';
261
+ }
262
+
263
+
264
+ echo json_encode(array('articles' => $table));
265
+ } else {
266
+ echo json_encode(array('error' => __('Invalid Keyword!', _SQ_PLUGIN_NAME_)));
267
+ }
268
+ exit();
269
+
270
+ /**********************************/
271
+ case 'sq_briefcase_addlabel':
272
+ if (!current_user_can('sq_manage_snippet')) {
273
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
274
+ SQ_Classes_Helpers_Tools::setHeader('json');
275
+ echo json_encode($response);
276
+ exit();
277
+ }
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 <> '') {
285
+ $args = array();
286
+
287
+ $args['name'] = $name;
288
+ $args['color'] = $color;
289
+ $json = SQ_Classes_RemoteController::addBriefcaseLabel($args);
290
+
291
+ if (!is_wp_error($json)) {
292
+ echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
293
+ } else {
294
+ echo json_encode(array('error' => $json->get_error_message()));
295
+ }
296
+
297
+ } else {
298
+ echo json_encode(array('error' => __('Invalid Label or Color!', _SQ_PLUGIN_NAME_)));
299
+ }
300
+ exit();
301
+
302
+ case 'sq_briefcase_editlabel':
303
+ if (!current_user_can('sq_manage_snippet')) {
304
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
305
+ SQ_Classes_Helpers_Tools::setHeader('json');
306
+ echo json_encode($response);
307
+ exit();
308
+ }
309
+
310
+ SQ_Classes_Helpers_Tools::setHeader('json');
311
+
312
+ $id = (string)SQ_Classes_Helpers_Tools::getValue('id', 0);
313
+ $name = (string)SQ_Classes_Helpers_Tools::getValue('name', 0);
314
+ $color = (string)SQ_Classes_Helpers_Tools::getValue('color', '#ffffff');
315
+
316
+ if ((int)$id > 0 && $name <> '' && $color <> '') {
317
+ $args = array();
318
+
319
+ $args['id'] = $id;
320
+ $args['name'] = $name;
321
+ $args['color'] = $color;
322
+ SQ_Classes_RemoteController::saveBriefcaseLabel($args);
323
+
324
+ echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
325
+ } else {
326
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
327
+ }
328
+ exit();
329
+
330
+ case 'sq_briefcase_deletelabel':
331
+ if (!current_user_can('sq_manage_snippets')) {
332
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
333
+ SQ_Classes_Helpers_Tools::setHeader('json');
334
+ echo json_encode($response);
335
+ exit();
336
+ }
337
+
338
+ SQ_Classes_Helpers_Tools::setHeader('json');
339
+
340
+ $id = (int)SQ_Classes_Helpers_Tools::getValue('id', 0);
341
+
342
+ if ($id > 0) {
343
+ //set ignore on API
344
+ $args = array();
345
+
346
+ $args['id'] = $id;
347
+ SQ_Classes_RemoteController::removeBriefcaseLabel($args);
348
+
349
+ echo json_encode(array('deleted' => __('Deleted!', _SQ_PLUGIN_NAME_)));
350
+ } else {
351
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
352
+ }
353
+ exit();
354
+
355
+ case 'sq_briefcase_keywordlabel':
356
+ if (!current_user_can('sq_manage_snippet')) {
357
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
358
+ SQ_Classes_Helpers_Tools::setHeader('json');
359
+ echo json_encode($response);
360
+ exit();
361
+ }
362
+
363
+ SQ_Classes_Helpers_Tools::setHeader('json');
364
+
365
+ $keyword = (string)SQ_Classes_Helpers_Tools::getValue('keyword', '');
366
+ $labels = SQ_Classes_Helpers_Tools::getValue('labels', array());
367
+
368
+ if ($keyword <> '') {
369
+ $args = array();
370
+
371
+ $args['keyword'] = $keyword;
372
+ $args['labels'] = '';
373
+ if (is_array($labels) && !empty($labels)) {
374
+ $args['labels'] = join(',', $labels);
375
+ SQ_Classes_RemoteController::saveBriefcaseKeywordLabel($args);
376
+ } else {
377
+ SQ_Classes_RemoteController::saveBriefcaseKeywordLabel($args);
378
+
379
+ }
380
+ echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
381
+ } else {
382
+ echo json_encode(array('error' => __('Invalid Keyword!', _SQ_PLUGIN_NAME_)));
383
+ }
384
+ exit();
385
+
386
+ case 'sq_briefcase_backup':
387
+ if (!current_user_can('sq_manage_settings')) {
388
+ SQ_Classes_Error::setError(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
389
+ return;
390
+ }
391
+
392
+ $briefcase = SQ_Classes_RemoteController::getBriefcase();
393
+
394
+ $fp = fopen(_SQ_CACHE_DIR_ . 'file.csv', 'w');
395
+ foreach ($briefcase->keywords as $row) {
396
+ fputcsv($fp, array($row->keyword), ',', '"');
397
+ }
398
+ fclose($fp);
399
+
400
+ header('Content-type: text/csv');
401
+ header("Content-Disposition: attachment; filename=squirrly-briefcase-" . gmdate('Y-m-d') . ".csv");
402
+ header("Pragma: no-cache");
403
+ header("Expires: 0");
404
+ readfile(_SQ_CACHE_DIR_ . 'file.csv');
405
+
406
+ exit();
407
+
408
+ case 'sq_briefcase_restore':
409
+ if (!current_user_can('sq_manage_settings')) {
410
+ SQ_Classes_Error::setError(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
411
+ return;
412
+ }
413
+
414
+ if (!empty($_FILES['sq_upload_file']) && $_FILES['sq_upload_file']['tmp_name'] <> '') {
415
+ $fp = fopen($_FILES['sq_upload_file']['tmp_name'], 'rb');
416
+
417
+ try {
418
+ $data = '';
419
+ while (($line = fgets($fp)) !== false) {
420
+ $data .= $line;
421
+ }
422
+ if (function_exists('base64_encode') && base64_decode($data) <> '') {
423
+ $data = @base64_decode($data);
424
+ }
425
+
426
+ if ($data = json_decode($data)) {
427
+ if (is_array($data) and !empty($data)) {
428
+ foreach ($data as $row) {
429
+ if (isset($row->keyword)) {
430
+ $args = array();
431
+ $args['keyword'] = $row->keyword;
432
+ SQ_Classes_RemoteController::addBriefcaseKeyword($args);
433
+ }
434
+ }
435
+
436
+ SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
437
+ }
438
+ } else {
439
+
440
+ //Get the data from CSV
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();
448
+ $args['keyword'] = strip_tags($data[$c]);
449
+ SQ_Classes_RemoteController::addBriefcaseKeyword($args);
450
+ }
451
+ }
452
+ }
453
+ if ($num > 0) {
454
+ SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
455
+ }
456
+ }
457
+ } catch (Exception $e) {
458
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
459
+ }
460
+ } else {
461
+ SQ_Classes_Error::setError(__('Error! You have to enter a previously saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
462
+ }
463
+ break;
464
+ /************************************************* AJAX */
465
+ case 'sq_ajax_briefcase_doserp':
466
+ if (!current_user_can('sq_manage_settings')) {
467
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
468
+ SQ_Classes_Helpers_Tools::setHeader('json');
469
+ echo json_encode($response);
470
+ exit();
471
+ }
472
+
473
+ SQ_Classes_Helpers_Tools::setHeader('json');
474
+
475
+ $json = array();
476
+ $keyword = (string)SQ_Classes_Helpers_Tools::getValue('keyword', '');
477
+
478
+ if ($keyword <> '') {
479
+ $args = array();
480
+ $args['keyword'] = stripslashes($keyword);
481
+ if (SQ_Classes_RemoteController::addSerpKeyword($args) === false) {
482
+ $json['error'] = SQ_Classes_Error::showNotices(__('Could not add the keyword to SERP Check. Please try again.', _SQ_PLUGIN_NAME_), 'sq_error');
483
+ } else {
484
+ $json['message'] = SQ_Classes_Error::showNotices(__('The keyword is added to SERP Check.', _SQ_PLUGIN_NAME_), 'sq_success');
485
+ }
486
+ } else {
487
+ $json['error'] = SQ_Classes_Error::showNotices(__('Invalid parameters.', _SQ_PLUGIN_NAME_), 'sq_error');
488
+ }
489
+
490
+ SQ_Classes_Helpers_Tools::setHeader('json');
491
+ echo json_encode($json);
492
+ exit();
493
+
494
+ case 'sq_ajax_research_others':
495
+ SQ_Classes_Helpers_Tools::setHeader('json');
496
+ $keyword = SQ_Classes_Helpers_Tools::getValue('keyword', false);
497
+ $country = SQ_Classes_Helpers_Tools::getValue('country', 'com');
498
+ $lang = SQ_Classes_Helpers_Tools::getValue('lang', 'en');
499
+
500
+ if ($keyword) {
501
+ $args = array();
502
+ $args['keyword'] = $keyword;
503
+ $args['country'] = $country;
504
+ $args['lang'] = $lang;
505
+ $json = SQ_Classes_RemoteController::getKROthers($args);
506
+
507
+ if (!is_wp_error($json)) {
508
+ echo json_encode(array('keywords' => $json->keywords));
509
+ } else {
510
+ echo json_encode(array('error' => $json->get_error_message()));
511
+ }
512
+ } else {
513
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
514
+ }
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');
521
+ $lang = SQ_Classes_Helpers_Tools::getValue('lang', 'en');
522
+
523
+ if ($keywords) {
524
+ $args = array();
525
+ $args['q'] = $keywords;
526
+ $args['country'] = $country;
527
+ $args['lang'] = $lang;
528
+ $this->kr = SQ_Classes_RemoteController::getKRSuggestion($args);
529
+
530
+ if (!is_wp_error($this->kr)) {
531
+ //Get the briefcase keywords
532
+ if ($briefcase = SQ_Classes_RemoteController::getBriefcase()) {
533
+ if (!is_wp_error($briefcase)) {
534
+ if (isset($briefcase->keywords)) {
535
+ $this->keywords = $briefcase->keywords;
536
+ }
537
+ }
538
+ }
539
+
540
+ $this->country = $country;
541
+ echo json_encode(array('html' => $this->getView('Research/ResearchDetails')));
542
+ } else {
543
+ $this->kr = array();
544
+ //show the keywords in results to be able to add them to brifcase
545
+ $keywords = explode(',', $keywords);
546
+ if (!empty($keywords)) {
547
+ foreach ($keywords as $keyword) {
548
+ $this->kr[] = json_decode(json_encode(array(
549
+ 'keyword' => $keyword,
550
+ )));
551
+ }
552
+ $this->country = $country;
553
+ }
554
+ echo json_encode(array('html' => $this->getView('Research/ResearchDetails')));
555
+
556
+ }
557
+ } else {
558
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
559
+ }
560
+ exit();
561
+ case 'sq_ajax_research_history':
562
+ SQ_Classes_Helpers_Tools::setHeader('json');
563
+ $id = (int)SQ_Classes_Helpers_Tools::getValue('id', 0);
564
+
565
+ if ($id > 0) {
566
+ $args = array();
567
+ $args['id'] = $id;
568
+ $this->kr = SQ_Classes_RemoteController::getKRHistory($args);
569
+
570
+ //Get the briefcase keywords
571
+ if ($briefcase = SQ_Classes_RemoteController::getBriefcase()) {
572
+ if (!is_wp_error($briefcase)) {
573
+ if (isset($briefcase->keywords)) {
574
+ $this->keywords = $briefcase->keywords;
575
+ }
576
+ }
577
+ }
578
+
579
+ echo json_encode(array('html' => $this->getView('Research/HistoryDetails')));
580
+ } else {
581
+ echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
582
+ }
583
+ exit();
584
+ }
585
+
586
+
587
+ }
588
+ }
controllers/SeoSettings.php ADDED
@@ -0,0 +1,811 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
4
+
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');
11
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
12
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
13
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome');
14
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('global');
15
+
16
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('assistant');
17
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
18
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('seosettings');
19
+
20
+ if (method_exists($this, $tab)) {
21
+ call_user_func(array($this, $tab));
22
+ }
23
+
24
+ if (function_exists('wp_enqueue_media')) {
25
+ wp_enqueue_media();
26
+ }
27
+
28
+ //@ob_flush();
29
+ echo $this->getView('SeoSettings/' . ucfirst($tab));
30
+
31
+ //get the modal window for the assistant popup
32
+ echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
33
+ }
34
+
35
+ public function gotoImport() {
36
+ $_GET['tab'] = 'backup';
37
+ return $this->init();
38
+ }
39
+
40
+ public function bulkseo() {
41
+ global $wp_query;
42
+ wp_reset_query();
43
+
44
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bulkseo');
45
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('labels');
46
+
47
+ $search = (string)SQ_Classes_Helpers_Tools::getValue('skeyword', '');
48
+ $labels = SQ_Classes_Helpers_Tools::getValue('slabel', array());
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])) {
60
+ $patterns[$post_type] = $patterns['custom'];
61
+ }
62
+ }
63
+
64
+ //Set the Labels and Categories
65
+ SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->init();
66
+
67
+ //Remove the page from URL for bulkSEO
68
+ remove_filter('sq_post', array(SQ_Classes_ObjController::getClass('SQ_Models_Frontend'), 'addPaged'), 14);
69
+
70
+
71
+ //If home then show the home url
72
+ if (($post_type == 'home' || $search == '#all') && ($post_status == '' || $post_status == 'publish')) {
73
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setHomePage()) {
74
+ $this->pages[] = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->parsePage($post, $labels)->getPage();
75
+ }
76
+ }
77
+
78
+ //get all the public post types
79
+ $types = get_post_types(array('public' => true));
80
+ $statuses = array('draft', 'publish', 'pending', 'future', 'private');
81
+ //push the shop page into post types to pass the filter
82
+ if ($post_type == 'shop') array_push($types, 'shop');
83
+
84
+ if (!empty($types) && in_array($post_type, $types) || $search == '#all') {
85
+
86
+ //get all the posts types from database
87
+ //filter by all in case of #all search
88
+ //filter by page in case of shop post type
89
+ $query = array(
90
+ 'post_type' => ($search == '#all' || $post_id ? array_keys($types) : ($post_type <> 'shop' ? $post_type : 'page')),
91
+ 's' => ($search <> '#all' ? (strpos($search, '/') === false ? $search : '') : ''),
92
+ 'posts_per_page' => $post_per_page,
93
+ 'paged' => $paged,
94
+ 'orderby' => 'date',
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);
102
+ }
103
+
104
+ //show the draft and publish posts
105
+ if ($search == '#all' || $post_type <> 'attachment') {
106
+ $query['post_status'] = ($post_status <> '' ? $post_status : $statuses);
107
+ }
108
+
109
+ $wp_query = new WP_Query($query);
110
+ $posts = $wp_query->get_posts();
111
+
112
+ if (!empty($posts)) {
113
+ foreach ($posts as $post) {
114
+
115
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($post)) {
116
+ if ($page = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->parsePage($post, $labels)->getPage()) {
117
+ if ($page->url <> '') {
118
+ //Search the Squirrly Title, Description and URL if search is set
119
+ if ($search <> '' && $search <> '#all') {
120
+ if (stripos($page->sq->title, $search) === false && stripos($page->sq->description, $search) === false && stripos($page->url, $search) === false) {
121
+ continue;
122
+ }
123
+ }
124
+
125
+ //Don't let other post types to pass
126
+ if ($search <> '#all' && !$post_id && isset($page->post_type) && $page->post_type <> $post_type) {
127
+ continue;
128
+ }
129
+
130
+ $this->pages[] = $page;
131
+ }
132
+
133
+ unset($page);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+ //Get all taxonomies like category, tag, custom post types
141
+ $taxonomies = get_taxonomies(array('public' => true));
142
+ if ($post_type == 'tag') $post_type = 'post_tag';
143
+ if (strpos($post_type, 'tax-') !== false) $post_type = str_replace('tax-', '', $post_type);
144
+ if (in_array($post_type, $taxonomies) || $search == '#all') {
145
+
146
+ $query = array(
147
+ 'public' => true,
148
+ 'taxonomy' => ($search == '#all' ? $taxonomies : $post_type),
149
+ 'hide_empty' => false,
150
+ );
151
+
152
+ //If post id is set in URL
153
+ //Same filter for taxonomy id
154
+ if ($post_id) {
155
+ $query['include'] = explode(',', $post_id);
156
+ }
157
+
158
+ $categories = get_terms($query);
159
+ if (!is_wp_error($categories) && !empty($categories)) {
160
+ foreach ($categories as $category) {
161
+
162
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByTaxID($category->term_id, $category->taxonomy)) {
163
+ if ($page = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->parsePage($post, $labels)->getPage()) {
164
+ if ($page->url <> '') {
165
+ if ($search <> '') {
166
+ if (stripos($category->name, $search) === false && stripos($category->slug, $search) === false && stripos($page->sq->title, $search) === false) {
167
+ continue;
168
+ }
169
+ }
170
+
171
+ $this->pages[] = $page;
172
+ }
173
+ unset($page);
174
+
175
+ }
176
+ }
177
+
178
+ }
179
+ }
180
+ }
181
+
182
+ //Get the user profile from database
183
+ //search in user profile
184
+ if ($post_type == "profile" || $search == '#all') {
185
+ $blog_id = get_current_blog_id();
186
+ $args = array(
187
+ 'blog_id' => $blog_id,
188
+ 'role__not_in' => array('subscriber', 'contributor', 'customer'),
189
+ 'orderby' => 'login',
190
+ 'order' => 'ASC',
191
+ 'search' => ($search == '#all' ? '' : $search),
192
+ 'count_total' => false,
193
+ 'fields' => array('ID'),
194
+ );
195
+
196
+ $users = get_users($args);
197
+
198
+ foreach ($users as $user) {
199
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setAuthorPage($user->ID)) {
200
+ if ($page = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->parsePage($post, $labels)->getPage()) {
201
+ if ($page->url <> '') {
202
+ $this->pages[] = $page;
203
+ unset($page);
204
+ }
205
+ }
206
+ }
207
+ }
208
+
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
+ }
216
+ }
217
+
218
+ public function automation() {
219
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight');
220
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Patterns')->init();
221
+ }
222
+
223
+ public function metas() {
224
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight');
225
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('snippet');
226
+
227
+ }
228
+
229
+ public function jsonld() {
230
+ }
231
+
232
+ public function backup() {
233
+ add_filter('sq_themes', array(SQ_Classes_ObjController::getClass('SQ_Models_ImportExport'), 'getAvailableThemes'), 10, 1);
234
+ add_filter('sq_importList', array(SQ_Classes_ObjController::getClass('SQ_Models_ImportExport'), 'importList'));
235
+
236
+ }
237
+
238
+ public function hookFooter() {
239
+ if (!SQ_Classes_Helpers_Tools::getOption('sq_seoexpert')) {
240
+ echo "<script>jQuery('.sq_advanced').hide();</script>";
241
+ } else {
242
+ echo "<script>jQuery('.sq_advanced').show();</script>";
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Called when action is triggered
248
+ *
249
+ * @return void
250
+ */
251
+ public function action() {
252
+ parent::action();
253
+ SQ_Classes_Helpers_Tools::setHeader('json');
254
+
255
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
256
+
257
+ ///////////////////////////////////////////SEO SETTINGS METAS
258
+ case 'sq_seosettings_metas':
259
+ if (!current_user_can('sq_manage_settings')) {
260
+ return;
261
+ }
262
+
263
+ //Save the settings
264
+ if (!empty($_POST)) {
265
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
266
+ }
267
+
268
+ ///////////////////////////////////////////
269
+ /////////////////////////////FIRST PAGE OPTIMIZATION
270
+ $url = home_url();
271
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->createTable();
272
+ $post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setHomePage();
273
+
274
+ $post->sq->doseo = 1;
275
+ $post->sq->title = urldecode(SQ_Classes_Helpers_Tools::getValue('sq_fp_title', false));
276
+ $post->sq->description = urldecode(SQ_Classes_Helpers_Tools::getValue('sq_fp_description', false));
277
+ $post->sq->keywords = SQ_Classes_Helpers_Tools::getValue('sq_fp_keywords', false);
278
+
279
+ if (SQ_Classes_Helpers_Tools::getIsset('sq_fp_ogimage')) {
280
+ $post->sq->og_media = SQ_Classes_Helpers_Tools::getValue('sq_fp_ogimage', '');
281
+ }
282
+
283
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->saveSqSEO(
284
+ $url,
285
+ md5('wp_homepage'),
286
+ 0,
287
+ maybe_serialize($post->sq->toArray()),
288
+ gmdate('Y-m-d H:i:s')
289
+ );
290
+
291
+ //show the saved message
292
+ if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
293
+
294
+ break;
295
+
296
+ ///////////////////////////////////////////SEO SETTINGS AUTOMATION
297
+ case 'sq_seosettings_automation':
298
+ if (!current_user_can('sq_manage_settings')) {
299
+ return;
300
+ }
301
+
302
+ //Save the settings
303
+ if (!empty($_POST)) {
304
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
305
+ }
306
+
307
+
308
+ //show the saved message
309
+ if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
310
+
311
+ break;
312
+ ///////////////////////////////////////////SEO SETTINGS METAS
313
+ case 'sq_seosettings_social':
314
+ case 'sq_seosettings_tracking':
315
+ case 'sq_seosettings_webmaster':
316
+ if (!current_user_can('sq_manage_settings')) {
317
+ return;
318
+ }
319
+
320
+ //Save the settings
321
+ if (!empty($_POST)) {
322
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
323
+ }
324
+
325
+ //save the options in database
326
+ SQ_Classes_Helpers_Tools::saveOptions();
327
+
328
+ //show the saved message
329
+ if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
330
+
331
+
332
+ break;
333
+
334
+ ///////////////////////////////////////////SEO SETTINGS METAS
335
+ case 'sq_seosettings_sitemap':
336
+ if (!current_user_can('sq_manage_settings')) {
337
+ return;
338
+ }
339
+
340
+ //Save the settings
341
+ if (!empty($_POST)) {
342
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
343
+ }
344
+
345
+ //Make sure we get the Sitemap data from the form
346
+ if ($sitemap = SQ_Classes_Helpers_Tools::getValue('sitemap', false)) {
347
+ foreach (SQ_Classes_Helpers_Tools::$options['sq_sitemap'] as $key => $value) {
348
+ if (isset($sitemap[$key])) {
349
+ SQ_Classes_Helpers_Tools::$options['sq_sitemap'][$key][1] = (int)$sitemap[$key];
350
+ } elseif ($key <> 'sitemap') {
351
+ SQ_Classes_Helpers_Tools::$options['sq_sitemap'][$key][1] = 0;
352
+ }
353
+ }
354
+ }
355
+
356
+ //save the options in database
357
+ SQ_Classes_Helpers_Tools::saveOptions();
358
+
359
+ //delete other sitemap xml files from root
360
+ if (SQ_Classes_Helpers_Tools::getOption('sq_auto_sitemap') && file_exists(ABSPATH . "/" . 'sitemap.xml')) {
361
+ @rename(ABSPATH . "/" . 'sitemap.xml', ABSPATH . "/" . 'sitemap_ren' . time() . '.xml');
362
+
363
+ }
364
+
365
+ //show the saved message
366
+ if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
367
+
368
+ break;
369
+
370
+ //Save the JSON-LD page from SEO Settings
371
+ case 'sq_seosettings_jsonld':
372
+ if (!current_user_can('sq_manage_settings')) {
373
+ return;
374
+ }
375
+
376
+ //Save the settings
377
+ if (!empty($_POST)) {
378
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
379
+ }
380
+
381
+ if (SQ_Classes_Helpers_Tools::$options['sq_jsonld']['Person']['telephone'] <> '') {
382
+ SQ_Classes_Helpers_Tools::$options['sq_jsonld']['Person']['telephone'] = '+' . ltrim(SQ_Classes_Helpers_Tools::$options['sq_jsonld']['Person']['telephone'], '+');
383
+ }
384
+ if (SQ_Classes_Helpers_Tools::$options['sq_jsonld']['Organization']['telephone'] <> '') {
385
+ SQ_Classes_Helpers_Tools::$options['sq_jsonld']['Organization']['telephone'] = '+' . ltrim(SQ_Classes_Helpers_Tools::$options['sq_jsonld']['Organization']['telephone'], '+');
386
+ }
387
+
388
+ //save the options in database
389
+ SQ_Classes_Helpers_Tools::saveOptions();
390
+
391
+ //show the saved message
392
+ if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
393
+
394
+ break;
395
+
396
+ //Save the Robots permissions
397
+ case 'sq_seosettings_robots':
398
+ if (!current_user_can('sq_manage_settings')) {
399
+ return;
400
+ }
401
+
402
+ //Save the settings
403
+ if (!empty($_POST)) {
404
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
405
+ }
406
+
407
+ //Save custom robots
408
+ $robots = SQ_Classes_Helpers_Tools::getValue('robots_permission', '', true);
409
+ $robots = explode(PHP_EOL, $robots);
410
+ $robots = str_replace("\r", "", $robots);
411
+
412
+ if (!empty($robots)) {
413
+ SQ_Classes_Helpers_Tools::$options['sq_robots_permission'] = array_unique($robots);
414
+ }
415
+
416
+ //save the options in database
417
+ SQ_Classes_Helpers_Tools::saveOptions();
418
+
419
+ //show the saved message
420
+ if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
421
+
422
+
423
+ break;
424
+
425
+ //Save the Favicon image
426
+ case 'sq_seosettings_favicon':
427
+ if (!current_user_can('sq_manage_settings')) {
428
+ return;
429
+ }
430
+
431
+ //If the favicon is turned off delete the favicon image created
432
+ if (!SQ_Classes_Helpers_Tools::getValue('sq_auto_favicon') &&
433
+ SQ_Classes_Helpers_Tools::getOption('sq_auto_favicon') &&
434
+ SQ_Classes_Helpers_Tools::getOption('favicon') <> '' &&
435
+ file_exists(ABSPATH . "/" . 'favicon.ico')) {
436
+ @rename(ABSPATH . "/" . 'favicon.ico', ABSPATH . "/" . 'favicon_ren' . time() . '.ico');
437
+ }
438
+
439
+ //Save the settings
440
+ if (!empty($_POST)) {
441
+ SQ_Classes_ObjController::getClass('SQ_Models_Settings')->saveValues($_POST);
442
+ }
443
+
444
+ /* if there is an icon to upload */
445
+ if (!empty($_FILES['favicon'])) {
446
+ if ($return = SQ_Classes_ObjController::getClass('SQ_Models_Ico')->addFavicon($_FILES['favicon'])) {
447
+ if ($return['favicon'] <> '') {
448
+ SQ_Classes_Helpers_Tools::saveOptions('favicon', strtolower(basename($return['favicon'])));
449
+ }
450
+ }
451
+ }
452
+
453
+
454
+ break;
455
+
456
+ case "sq_seosettings_ga_revoke":
457
+ if (!current_user_can('sq_manage_settings')) {
458
+ return;
459
+ }
460
+
461
+ //remove connection with Google Analytics
462
+ $response = SQ_Classes_RemoteController::revokeGaConnection();
463
+ if (!is_wp_error($response)) {
464
+ SQ_Classes_Error::setError(__('Google Analytics account is disconnected.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
465
+ } else {
466
+ SQ_Classes_Error::setError(__('Error! Could not disconnect the account.', _SQ_PLUGIN_NAME_) . " <br /> ");
467
+ }
468
+ break;
469
+
470
+ case "sq_seosettings_gsc_revoke":
471
+ if (!current_user_can('sq_manage_settings')) {
472
+ return;
473
+ }
474
+
475
+ //remove connection with Google Search Console
476
+ $response = SQ_Classes_RemoteController::revokeGscConnection();
477
+ if (!is_wp_error($response)) {
478
+ SQ_Classes_Error::setError(__('Google Search Console account is disconnected.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
479
+ } else {
480
+ SQ_Classes_Error::setError(__('Error! Could not disconnect the account.', _SQ_PLUGIN_NAME_) . " <br /> ");
481
+ }
482
+ break;
483
+
484
+ case 'sq_seosettings_backupsettings':
485
+ if (!current_user_can('sq_manage_settings')) {
486
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
487
+ SQ_Classes_Helpers_Tools::setHeader('json');
488
+ echo json_encode($response);
489
+ exit();
490
+ }
491
+
492
+ SQ_Classes_Helpers_Tools::setHeader('text');
493
+ header("Content-Disposition: attachment; filename=squirrly-settings-" . gmdate('Y-m-d') . ".txt");
494
+
495
+ if (function_exists('base64_encode')) {
496
+ echo base64_encode(json_encode(SQ_Classes_Helpers_Tools::$options));
497
+ } else {
498
+ echo json_encode(SQ_Classes_Helpers_Tools::$options);
499
+ }
500
+ exit();
501
+ case 'sq_seosettings_restoresettings':
502
+ if (!current_user_can('sq_manage_settings')) {
503
+ return;
504
+ }
505
+
506
+ if (!empty($_FILES['sq_options']) && $_FILES['sq_options']['tmp_name'] <> '') {
507
+ $fp = fopen($_FILES['sq_options']['tmp_name'], 'rb');
508
+ $options = '';
509
+ while (($line = fgets($fp)) !== false) {
510
+ $options .= $line;
511
+ }
512
+ try {
513
+ if (function_exists('base64_encode') && base64_decode($options) <> '') {
514
+ $options = @base64_decode($options);
515
+ }
516
+ $options = json_decode($options, true);
517
+ if (is_array($options) && isset($options['sq_api'])) {
518
+ if (SQ_Classes_Helpers_Tools::getOption('sq_api') <> '') {
519
+ $options['sq_api'] = SQ_Classes_Helpers_Tools::getOption('sq_api');
520
+ }
521
+ if (SQ_Classes_Helpers_Tools::getOption('sq_seojourney') <> '') {
522
+ $options['sq_seojourney'] = SQ_Classes_Helpers_Tools::getOption('sq_seojourney');
523
+ }
524
+ SQ_Classes_Helpers_Tools::$options = $options;
525
+ SQ_Classes_Helpers_Tools::saveOptions();
526
+
527
+ //Check if there is an old backup from Squirrly
528
+ SQ_Classes_Helpers_Tools::getOptions();
529
+ SQ_Classes_Helpers_Tools::checkUpgrade();
530
+
531
+ SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
532
+ } else {
533
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
534
+ }
535
+ } catch (Exception $e) {
536
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
537
+ }
538
+ } else {
539
+ SQ_Classes_Error::setError(__('Error! You have to enter a previously saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
540
+ }
541
+ break;
542
+ case 'sq_seosettings_backupseo':
543
+ if (!current_user_can('sq_manage_settings')) {
544
+ return;
545
+ }
546
+
547
+ header('Content-Type: application/octet-stream');
548
+ header("Content-Transfer-Encoding: Binary");
549
+ header("Content-Disposition: attachment; filename=squirrly-seo-" . gmdate('Y-m-d') . ".sql");
550
+
551
+ if (function_exists('base64_encode')) {
552
+ echo base64_encode(SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->createTableBackup());
553
+ } else {
554
+ echo SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->createTableBackup();
555
+ }
556
+ exit();
557
+ case 'sq_seosettings_restoreseo':
558
+ if (!current_user_can('sq_manage_settings')) {
559
+ return;
560
+ }
561
+
562
+ if (!empty($_FILES['sq_sql']) && $_FILES['sq_sql']['tmp_name'] <> '') {
563
+ $fp = fopen($_FILES['sq_sql']['tmp_name'], 'rb');
564
+ $sql_file = '';
565
+ while (($line = fgets($fp)) !== false) {
566
+ $sql_file .= $line;
567
+ }
568
+
569
+ if (function_exists('base64_encode')) {
570
+ $sql_file = @base64_decode($sql_file);
571
+ }
572
+
573
+ if ($sql_file <> '' && strpos($sql_file, 'CREATE TABLE IF NOT EXISTS') !== false) {
574
+ try {
575
+ $queries = explode(";\n", $sql_file);
576
+ SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->executeSql($queries);
577
+ SQ_Classes_Error::setError(__('Great! The SEO backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
578
+
579
+ } catch (Exception $e) {
580
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
581
+ }
582
+ } else {
583
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
584
+ }
585
+ } else {
586
+ SQ_Classes_Error::setError(__('Error! You have to enter a previously saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
587
+ }
588
+ break;
589
+
590
+ case 'sq_seosettings_importall':
591
+ $platform = SQ_Classes_Helpers_Tools::getValue('sq_import_platform', '');
592
+ if ($platform <> '') {
593
+ if (SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->importDBSettings($platform)) {
594
+ SQ_Classes_Error::setMessage(__('Settings imported successfuly!', _SQ_PLUGIN_NAME_));
595
+ }
596
+
597
+ $seo = SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->importDBSeo($platform);
598
+ if (!empty($seo)) {
599
+ foreach ($seo as $sq_hash => $metas) {
600
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->saveSqSEO(
601
+ (isset($metas['url']) ? $metas['url'] : ''),
602
+ $sq_hash,
603
+ (isset($metas['post_id']) && is_numeric($metas['post_id']) ? (int)$metas['post_id'] : 0),
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;
611
+
612
+ case 'sq_seosettings_importsettings':
613
+ if (!current_user_can('sq_manage_settings')) {
614
+ return;
615
+ }
616
+
617
+ $platform = SQ_Classes_Helpers_Tools::getValue('sq_import_platform', '');
618
+ if ($platform <> '') {
619
+ if (SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->importDBSettings($platform)) {
620
+ SQ_Classes_Error::setMessage(__('All the Plugin settings were imported successfuly!', _SQ_PLUGIN_NAME_));
621
+ } else {
622
+ SQ_Classes_Error::setMessage(__('No settings found for this plugin/theme.', _SQ_PLUGIN_NAME_));
623
+
624
+ }
625
+ }
626
+ break;
627
+
628
+ case 'sq_seosettings_importseo':
629
+ if (!current_user_can('sq_manage_settings')) {
630
+ return;
631
+ }
632
+
633
+ $platform = SQ_Classes_Helpers_Tools::getValue('sq_import_platform', '');
634
+ if ($platform <> '') {
635
+ $seo = SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->importDBSeo($platform);
636
+ if (!empty($seo)) {
637
+ foreach ($seo as $sq_hash => $metas) {
638
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->saveSqSEO(
639
+ (isset($metas['url']) ? $metas['url'] : ''),
640
+ $sq_hash,
641
+ (isset($metas['post_id']) && is_numeric($metas['post_id']) ? (int)$metas['post_id'] : 0),
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
+
649
+ }
650
+ }
651
+ break;
652
+
653
+
654
+ /**************************** Ajax *******************************************************/
655
+ case "sq_ajax_seosettings_save":
656
+ $response = array();
657
+ if (!current_user_can('sq_manage_settings')) {
658
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
659
+ SQ_Classes_Helpers_Tools::setHeader('json');
660
+ echo json_encode($response);
661
+ exit();
662
+ }
663
+
664
+ SQ_Classes_Helpers_Tools::setHeader('json');
665
+
666
+ $name = SQ_Classes_Helpers_Tools::getValue('input', false);
667
+ $value = SQ_Classes_Helpers_Tools::getValue('value', false);
668
+
669
+ if (isset(SQ_Classes_Helpers_Tools::$options[$name])) {
670
+ SQ_Classes_Helpers_Tools::saveOptions($name, $value);
671
+ $response['data'] = SQ_Classes_Error::showNotices(__('Saved', _SQ_PLUGIN_NAME_), 'sq_success');
672
+ } else {
673
+ $response['data'] = SQ_Classes_Error::showNotices(__('Could not save the changes', _SQ_PLUGIN_NAME_), 'sq_error');
674
+
675
+ }
676
+
677
+ echo json_encode($response);
678
+ exit();
679
+
680
+ /************************ Automation ********************************************************/
681
+ case 'sq_ajax_automation_addpostype':
682
+ $response = array();
683
+ if (!current_user_can('sq_manage_settings')) {
684
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
685
+ SQ_Classes_Helpers_Tools::setHeader('json');
686
+ echo json_encode($response);
687
+ exit();
688
+ }
689
+
690
+ SQ_Classes_Helpers_Tools::setHeader('json');
691
+
692
+ //Get the new post type
693
+ $posttype = SQ_Classes_Helpers_Tools::getValue('value', false);
694
+ $types = get_post_types();
695
+
696
+ //If the post type is in the list of types
697
+ if ($posttype && in_array($posttype, $types)) {
698
+ $patterns = SQ_Classes_Helpers_Tools::getOption('patterns');
699
+ //if the post type does not already exists
700
+ if (!isset($patterns[$posttype])) {
701
+ //add the custom rights to the new post type
702
+ $patterns[$posttype] = $patterns['custom'];
703
+ $patterns[$posttype]['protected'] = 0;
704
+ //save the options in database
705
+ SQ_Classes_Helpers_Tools::saveOptions('patterns', $patterns);
706
+
707
+ $response['data'] = SQ_Classes_Error::showNotices(__('Saved', _SQ_PLUGIN_NAME_), 'sq_success');
708
+ echo json_encode($response);
709
+ exit();
710
+ }
711
+ }
712
+
713
+
714
+ //Return error in case the post is not saved
715
+ $response['data'] = SQ_Classes_Error::showNotices(__('Could not add the post type', _SQ_PLUGIN_NAME_), 'sq_error');
716
+ echo json_encode($response);
717
+ exit();
718
+
719
+ case 'sq_ajax_automation_deletepostype':
720
+ $response = array();
721
+ if (!current_user_can('sq_manage_settings')) {
722
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
723
+ SQ_Classes_Helpers_Tools::setHeader('json');
724
+ echo json_encode($response);
725
+ exit();
726
+ }
727
+
728
+ SQ_Classes_Helpers_Tools::setHeader('json');
729
+
730
+ //Get the new post type
731
+ $posttype = SQ_Classes_Helpers_Tools::getValue('value', false);
732
+
733
+ //If the post type is in the list of types
734
+ if ($posttype && $posttype <> '') {
735
+ $patterns = SQ_Classes_Helpers_Tools::getOption('patterns');
736
+ //if the post type exists in the patterns
737
+ if (isset($patterns[$posttype])) {
738
+ //add the custom rights to the new post type
739
+ unset($patterns[$posttype]);
740
+
741
+ //save the options in database
742
+ SQ_Classes_Helpers_Tools::saveOptions('patterns', $patterns);
743
+
744
+ $response['data'] = SQ_Classes_Error::showNotices(__('Saved', _SQ_PLUGIN_NAME_), 'sq_success');
745
+ echo json_encode($response);
746
+ exit();
747
+ }
748
+ }
749
+
750
+
751
+ //Return error in case the post is not saved
752
+ $response['data'] = SQ_Classes_Error::showNotices(__('Could not add the post type', _SQ_PLUGIN_NAME_), 'sq_error');
753
+ echo json_encode($response);
754
+ exit();
755
+
756
+ case 'sq_ajax_assistant_bulkseo':
757
+ $response = array();
758
+ if (!current_user_can('sq_manage_snippet')) {
759
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
760
+ SQ_Classes_Helpers_Tools::setHeader('json');
761
+ echo json_encode($response);
762
+ exit();
763
+ }
764
+
765
+ $post_id = (int)SQ_Classes_Helpers_Tools::getValue('post_id', 0);
766
+ $term_id = (int)SQ_Classes_Helpers_Tools::getValue('term_id', 0);
767
+ $taxonomy = SQ_Classes_Helpers_Tools::getValue('taxonomy', 'category');
768
+ $post_type = SQ_Classes_Helpers_Tools::getValue('post_type', 'post');
769
+
770
+ //Set the Labels and Categories
771
+ SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->init();
772
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->getCurrentSnippet($post_id, $term_id, $taxonomy, $post_type)) {
773
+ $this->post = SQ_Classes_ObjController::getClass('SQ_Models_BulkSeo')->parsePage($post)->getPage();
774
+ }
775
+
776
+ $json = array();
777
+ $json['html'] = $this->getView('SeoSettings/BulkseoRow');
778
+ $json['html_dest'] = "#sq_row_" . $this->post->hash;
779
+
780
+ $json['assistant'] = '';
781
+ $categories = apply_filters('sq_assistant_categories_page', $this->post->hash);
782
+ if (!empty($categories)) {
783
+ foreach ($categories as $index => $category) {
784
+ if (isset($category->assistant)) {
785
+ $json['assistant'] .= $category->assistant;
786
+ }
787
+ }
788
+ }
789
+ $json['assistant_dest'] = "#sq_assistant_" . $this->post->hash;
790
+
791
+ echo json_encode($json);
792
+ exit();
793
+
794
+ case 'sq_ajax_sla_sticky':
795
+ $response = array();
796
+ if (!current_user_can('sq_manage_snippet')) {
797
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
798
+ SQ_Classes_Helpers_Tools::setHeader('json');
799
+ echo json_encode($response);
800
+ exit();
801
+ }
802
+
803
+ SQ_Classes_Helpers_Tools::setHeader('json');
804
+ SQ_Classes_Helpers_Tools::saveUserMeta('sq_auto_sticky', (int)SQ_Classes_Helpers_Tools::getValue('sq_auto_sticky'));
805
+ echo json_encode(array());
806
+ exit();
807
+ }
808
+
809
+ }
810
+
811
+ }
controllers/SerpChecker.php DELETED
@@ -1,414 +0,0 @@
1
- <?php
2
-
3
- class SQ_Controllers_SerpChecker extends SQ_Classes_FrontController {
4
-
5
- public $checkin;
6
- /** @var SQ_Models_SerpChecker */
7
- public $model;
8
- /** @var SQ_Models_SerpCheckerTable */
9
- public $listTable;
10
- //
11
- protected $_tabs;
12
- protected $_tab;
13
-
14
- public function init() {
15
- $this->tabs = array();
16
-
17
- SQ_Classes_Tools::saveOptions('sq_analytics', 1); //Save analytics viewed
18
-
19
- if (SQ_Classes_Tools::getOption('sq_api') <> '') {
20
- $this->checkin = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/checkin'));
21
- if (isset($this->checkin->error)) {
22
- SQ_Classes_Tools::saveOptions('sq_google_serp_active', 0);
23
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->setError(sprintf(__('To get back to the Advanced Analytics and see rankings for all the keywords in Briefcase upgrade to %sBusiness Plan%s.'), '<a href="' . SQ_Classes_Tools::getBusinessLink() . '" target="_blank">', '</a>'), 'error');
24
- } else {
25
- if (isset($this->checkin->trial) && $this->checkin->trial) {
26
- SQ_Classes_Tools::saveOptions('sq_google_serp_trial', 1);
27
- } else {
28
- SQ_Classes_Tools::saveOptions('sq_google_serp_trial', 0);
29
- }
30
- }
31
-
32
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
33
-
34
- //Prepare the table with records
35
- $this->listTable = SQ_Classes_ObjController::getClass('SQ_Models_SerpCheckerTable');
36
- $this->listTable->prepare_items();
37
-
38
- //Set the Tabs
39
- $this->_tabs['keywords'] = 'Top Keywords';
40
- $this->_tab = SQ_Classes_Tools::getValue('tab', false);
41
-
42
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
43
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('serpchecker');
44
-
45
- if ($this->_tab <> '') {
46
- foreach ($this->_tabs as $slug => $value) {
47
- if ($this->_tab == $slug) {
48
- echo SQ_Classes_ObjController::getClass('SQ_Core_BlockSerp' . ucfirst($slug))->init()->getView();
49
- return;
50
- }
51
- }
52
- }
53
- }
54
-
55
- return parent::init();
56
- }
57
-
58
- public function action() {
59
- parent::action();
60
-
61
- switch (SQ_Classes_Tools::getValue('action')) {
62
- case 'sq_serp_process':
63
- SQ_Classes_Tools::setHeader('json');
64
- $done = false;
65
-
66
- $paged = (int)get_transient('sq_progress');
67
- if (!$this->getAllRanks(($paged + 1), 100, false)) {
68
- exit(json_encode(array('progress' => (min($paged + 1, 9.9) * 10))));
69
- } else {
70
- exit(json_encode(array('progress' => 100)));
71
- }
72
-
73
- break;
74
-
75
- case 'sq_serp_refresh':
76
- if (!current_user_can('edit_posts')) {
77
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
78
- exit();
79
- }
80
-
81
- SQ_Classes_Tools::setHeader('json');
82
-
83
- $this->getAllRanks();
84
-
85
- exit(json_encode(array('refreshed' => true)));
86
-
87
- break;
88
-
89
- case 'sq_serp_refresh_post':
90
- if (!current_user_can('edit_posts')) {
91
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
92
- exit();
93
- }
94
-
95
- SQ_Classes_Tools::setHeader('json');
96
- $this->listTable = SQ_Classes_ObjController::getClass('SQ_Models_SerpCheckerTable');
97
-
98
- $post_id = SQ_Classes_Tools::getValue('id', false);
99
- $keyword = SQ_Classes_Tools::getValue('keyword', false);
100
- if ($post_id && $keyword) {
101
- $args = array();
102
- $args['post_id'] = $post_id;
103
- $args['keyword'] = $keyword;
104
- $json = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/process-single', $args));
105
-
106
- if (isset($json->rank) && !empty($json->rank)) {
107
- $this->model->saveKeyword($post_id, $json->rank);
108
-
109
- $rank = current($json->rank);
110
- $date_format = get_option('date_format');
111
- $time_format = get_option('time_format');
112
- $timezone = (int)get_option('gmt_offset');
113
- $rank->datetime = date($date_format . ' ' . $time_format, strtotime($rank->datetime) + $timezone * HOUR_IN_SECONDS);
114
-
115
- exit(json_encode(array('rank' => $this->listTable->getRankText($rank->rank, $rank->change), 'datetime' => __('Last checked', _SQ_PLUGIN_NAME_) . ': ' . $rank->datetime)));
116
- } else {
117
- $rank = $this->model->getKeyword($post_id);
118
-
119
- $rank = current($json->rank);
120
- $date_format = get_option('date_format');
121
- $time_format = get_option('time_format');
122
- $timezone = (int)get_option('gmt_offset');
123
- $rank->datetime = date($date_format . ' ' . $time_format, strtotime($rank->datetime) + $timezone * HOUR_IN_SECONDS);
124
-
125
- exit(json_encode(array('rank' => $this->listTable->getRankText($rank->rank, $rank->change), 'datetime' => __('Last checked', _SQ_PLUGIN_NAME_) . ': ' . $rank->datetime)));
126
- }
127
- }
128
-
129
- exit(json_encode(array('error' => __('Invalid Request', _SQ_PLUGIN_NAME_))));
130
-
131
- break;
132
- case 'sq_serp_purgeall':
133
- if (!current_user_can('edit_posts')) {
134
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
135
- exit();
136
- }
137
-
138
- SQ_Classes_ObjController::getClass('SQ_Models_SerpChecker')->purgeAllMeta(array('key' => '_src_processed'));
139
- SQ_Classes_ObjController::getClass('SQ_Models_SerpChecker')->purgeAllMeta(array('key' => '_src_keyword'));
140
- $this->getAllRanks();
141
-
142
- SQ_Classes_Error::setMessage(__('Removed successfully! The ranks were updated from Squirry Server'));
143
- break;
144
-
145
- }
146
- }
147
-
148
-
149
- public function hookHead() {
150
- return '';
151
- }
152
-
153
- public function getNavigationTop() {
154
- return $this->listTable->display_tablenav('top');
155
- }
156
-
157
- public function getNavigationBottom() {
158
- return $this->listTable->display_tablenav('bottom');
159
- }
160
-
161
- public function getHeaderColumns() {
162
- return $this->listTable->print_column_headers();
163
- }
164
-
165
- public function getRows() {
166
- return $this->listTable->display_rows();
167
- }
168
-
169
- /*
170
- * Set the javascript variables
171
- */
172
- public function setVars() {
173
- echo '<script type="text/javascript">
174
- var __sq_refresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '"
175
-
176
- var __sq_dashurl = "' . _SQ_DASH_URL_ . '";
177
- var __token = "' . SQ_Classes_Tools::getOption('sq_api') . '";
178
- var __sq_ranknotpublic_text = "' . __('Not Public', _SQ_PLUGIN_NAME_) . '";
179
- var __sq_couldnotprocess_text = "' . __('Could not process', _SQ_PLUGIN_NAME_) . '";
180
- </script>';
181
- }
182
-
183
- public function getScripts() {
184
- return '<script type="text/javascript">
185
- google.load("visualization", "1", {packages: ["corechart"]});
186
- function drawChart(id, values, reverse) {
187
- var data = google.visualization.arrayToDataTable(values);
188
-
189
- var options = {
190
-
191
- curveType: "function",
192
- title: "",
193
- chartArea:{width:"100%",height:"100%"},
194
- enableInteractivity: "true",
195
- tooltip: {trigger: "auto"},
196
- pointSize: "2",
197
- colors: ["#55b2ca"],
198
- hAxis: {
199
- baselineColor: "transparent",
200
- gridlineColor: "transparent",
201
- textPosition: "none"
202
- } ,
203
- vAxis:{
204
- direction: ((reverse) ? -1 : 1),
205
- baselineColor: "transparent",
206
- gridlineColor: "transparent",
207
- textPosition: "none"
208
- }
209
- };
210
-
211
- var chart = new google.visualization.LineChart(document.getElementById(id));
212
- chart.draw(data, options);
213
- return chart;
214
- }
215
- </script>';
216
- }
217
-
218
-
219
- /**
220
- * Get the specified country in Squirrly
221
- * @return mixed|string
222
- */
223
- public function getCountry() {
224
- if (SQ_Classes_Tools::getOption('sq_google_country') <> '') {
225
- return SQ_Classes_Tools::getOption('sq_google_country');
226
- }
227
- return 'com';
228
- }
229
-
230
- /**
231
- * Get the google language from settings
232
- * @return string
233
- */
234
- public function getLanguage() {
235
- if (SQ_Classes_Tools::getOption('sq_google_language') <> '') {
236
- return SQ_Classes_Tools::getOption('sq_google_language');
237
- }
238
- return 'en';
239
- }
240
-
241
-
242
- /**
243
- * Do google rank with cron
244
- *
245
- * @param int $limit
246
- */
247
- public function processCron($limit = 50, $force_ranks = false) {
248
- set_time_limit(30);
249
- /* Load the Submit Actions Handler */
250
- SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
251
- SQ_Classes_ObjController::getClass('SQ_Classes_Action');
252
-
253
- //Get saved ranks from API SERVER
254
- $last_check = (int)SQ_Classes_Tools::getOption('sq_google_last_checked');
255
-
256
- //If force ranks or every day
257
- if ($force_ranks || $last_check < strtotime('-6 hours')) {
258
- $this->getAllRanks();
259
- }
260
-
261
- // try {
262
- // //Find more posts with keywords and send them to API
263
- // SQ_Classes_Tools::dump('Process queued posts');
264
- // if ($posts = $this->model->getQueuePost($limit)) {
265
- // if (!empty($posts))
266
- // foreach ($posts as $post) {
267
- // $this->sendPostToApi($post);
268
- // }
269
- // }
270
- // } catch (Exception $e) {
271
- //
272
- // }
273
-
274
-
275
- }
276
-
277
- /**
278
- * Send the post to API for SERP Check
279
- * @param $post
280
- */
281
- public function sendPostToApi($post) {
282
- global $wp_query;
283
-
284
- if ($wp_query) {
285
- if ($keyword = $this->model->getKeywordsFromPost($post)) {
286
- $args = array();
287
-
288
- $args['post_id'] = $post->ID;
289
- $args['permalink'] = get_permalink($post->ID);
290
- $args['country'] = $this->getCountry();
291
- $args['language'] = $this->getLanguage();
292
- $args['keywords'] = json_encode(array($keyword));
293
-
294
- SQ_Classes_Action::apiCall('sq/rank-checker/save-keywords', $args);
295
- }
296
-
297
- //save post verified and exclude from queue
298
- $this->model->saveProcessed($post->ID);
299
-
300
- }
301
-
302
- }
303
-
304
- /**
305
- * Get all ranks from API Server
306
- */
307
- public function getAllRanks($paged = 1, $per_page = 20, $loop = true, $cnt = 0) {
308
- set_time_limit(90);
309
- $args = array('paged' => $paged, 'per_page' => $per_page);
310
- set_transient('sq_progress', $paged, 60);
311
-
312
- $json = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/get-ranks', $args));
313
- if (isset($json->ranks)) {
314
- if (!empty($json->ranks)) {
315
- foreach ($json->ranks as $post_id => $rank) {
316
- if ($post_id == 0) {
317
- foreach ($rank as $row) {
318
- if($post_id = url_to_postid($row->permalink)) {
319
- $status = get_post_status($post_id);
320
- if ($status <> 'publish') {
321
- //delete the records for this post to insert all the keywords fresh
322
- $this->model->purgeMeta($post_id, array('key' => '_src_keyword'));
323
- continue;
324
- } else {
325
- $this->model->saveKeyword($post_id, $rank);
326
- }
327
- }
328
- //prevent timeout
329
- if(number_format(microtime(true) - REQUEST_TIME, 0) >= 30){
330
- $loop = false;
331
- break;
332
- }
333
- }
334
- } else {
335
- $status = get_post_status($post_id);
336
- if ($status <> 'publish') {
337
- $args = array();
338
- $args['status'] = ($status ? $status : 'deleted');
339
- $args['post_id'] = $post_id;
340
- //Make sure the API has the correct status of the post
341
- SQ_Classes_Action::apiCall('sq/seo/update', $args, 10);
342
-
343
- //delete the records for this post to insert all the keywords fresh
344
- $this->model->purgeMeta($post_id, array('key' => '_src_keyword'));
345
- continue;
346
- } else {
347
- $this->model->saveKeyword($post_id, $rank);
348
- }
349
- }
350
- //prevent timeout
351
- if(number_format(microtime(true) - REQUEST_TIME, 30) >= 85){
352
- $loop = false;
353
- break;
354
- }
355
- }
356
- }
357
- }
358
-
359
- if ($cnt < 20 && $loop) { //prevent infinite loops
360
- if (isset($json->done) && !$json->done) {
361
- $this->getAllRanks(($paged + 1), $per_page, $loop, ($cnt + 1));
362
- }
363
- }
364
-
365
- //Save the summary if received
366
- if (isset($json->info) && isset($json->info->keywords)) {
367
- SQ_Classes_Tools::saveOptions('sq_google_last_info', json_encode($json->info));
368
- }
369
-
370
- if (isset($json->done) && $json->done) {
371
- SQ_Classes_Tools::saveOptions('sq_google_last_checked', time());
372
-
373
- return true;
374
- }
375
-
376
- return false;
377
-
378
- }
379
-
380
-
381
- /**
382
- * Get all ranks from API Server
383
- *
384
- * public function getChangedRanks($paged = 1, $per_page = 100, $cnt = 0) {
385
- * $args = array('paged' => $paged, 'per_page' => $per_page);
386
- * $json = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/get-changes', $args));
387
- *
388
- * if (isset($json->ranks) && !empty($json->ranks)) {
389
- * foreach ($json->ranks as $post_id => $rank) {
390
- * $this->model->saveKeyword($post_id, $rank);
391
- * }
392
- * }
393
- *
394
- * if ($cnt < 20) { //prevent infinite loops
395
- * if (isset($json->done) && !$json->done) {
396
- * $this->getChangedRanks(($paged + 1), $per_page, ($cnt + 1));
397
- * }
398
- * }
399
- *
400
- * SQ_Classes_Tools::saveOptions('sq_google_last_checked', time());
401
- *
402
- * // print_R($json->info);
403
- * // exit();
404
- * //Save the summary if received
405
- * if (isset($json->info) && !empty($json->info->keywords)) {
406
- * SQ_Classes_Tools::saveOptions('sq_google_last_info', json_encode($json->info));
407
- * }
408
- * }
409
- */
410
- public function getKeywordsFound() {
411
- return $this->model->countKeywords();
412
- }
413
-
414
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/Sitemaps.php CHANGED
@@ -13,7 +13,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
13
 
14
  public function __construct() {
15
  parent::__construct();
16
- $this->posts_limit = SQ_Classes_Tools::getOption('sq_sitemap_perpage');
17
  add_filter('sq_sitemap_style', array($this, 'getFeedStyle'));
18
  add_filter('template_redirect', array($this, 'hookPreventRedirect'), 0);
19
  add_filter('user_trailingslashit', array($this, 'untrailingslashit'));
@@ -44,7 +44,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
44
  die();
45
  } elseif (strpos($_SERVER['REQUEST_URI'], '.xml') !== false) {
46
  $parseurl = @parse_url($_SERVER['REQUEST_URI']);
47
- $stemaplist = SQ_Classes_Tools::getOption('sq_sitemap');
48
  $page = 0;
49
 
50
  foreach ($stemaplist as $request => $sitemap) {
@@ -68,7 +68,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
68
 
69
  public function refreshSitemap($new_status, $old_status, $post) {
70
  if ($old_status <> $new_status && $new_status = 'publish') {
71
- if (SQ_Classes_Tools::getOption('sq_sitemap_ping')) {
72
  wp_schedule_single_event(time() + 5, 'sq_processPing');
73
  }
74
  }
@@ -84,7 +84,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
84
  $sq_query = array();
85
 
86
  if (isset($request) && strpos($request, 'sitemap') !== false) {
87
- $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
88
  $this->model->type = $request;
89
  //reset the previous query
90
  wp_reset_query();
@@ -114,7 +114,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
114
 
115
  //show products
116
  if ($this->model->type == 'sitemap-product') {
117
- if (SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce() && $sq_sitemap[$this->model->type][1] == 2) {
118
  $sq_sitemap[$this->model->type][1] = 1;
119
  }
120
  }
@@ -144,7 +144,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
144
  add_filter('sq-sitemap-authors', array($this, 'authorFilter'), 5);
145
  break;
146
  case 'sitemap-custom-post':
147
- $types = get_post_types();
148
  foreach (array('post', 'page', 'attachment', 'revision', 'nav_menu_item', 'product', 'wpsc-product', 'ngg_tag') as $exclude) {
149
  if (in_array($exclude, $types)) {
150
  unset($types[$exclude]);
@@ -166,7 +166,9 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
166
  $sq_query['post_type'] = $types;
167
  break;
168
  case 'sitemap-product':
169
- if (!$types = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
 
 
170
  $types = array('custom-post');
171
  }
172
  $sq_query['post_type'] = $types;
@@ -181,7 +183,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
181
  }
182
 
183
  public function getFeedStyle() {
184
- return '<?xml-stylesheet type="text/xsl" href="/' . _SQ_THEME_RELATIVE_URL_ . 'css/sitemap' . ($this->model->type == 'sitemap' ? 'index' : '') . '.xsl"?>' . "\n";
185
  }
186
 
187
  /**
@@ -260,12 +262,12 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
260
  switch ($this->model->type) {
261
  case 'sitemap':
262
  $this->showSitemapHeader();
263
- $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
264
 
265
  if (!empty($sq_sitemap))
266
  foreach ($sq_sitemap as $name => $value) {
267
  //force to show products if not preset
268
- if ($name == 'sitemap-product' && !SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
269
  continue;
270
  }
271
 
@@ -341,10 +343,10 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
341
 
342
  /**
343
  * Pach the XML for each sitemap
344
- * @param xhtml $xml
345
- * @return xml|false
346
  */
347
- public function showPackXml($xml) {
348
  if (empty($xml)) {
349
  $xml['contains'] = '';
350
  }
@@ -410,6 +412,8 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
410
  if (isset($this->posts_limit) && $this->posts_limit > 0) {
411
  return 'LIMIT 0, ' . $this->posts_limit;
412
  }
 
 
413
  }
414
 
415
  /**
@@ -419,7 +423,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
419
  * @return string
420
  */
421
  public function getXmlUrl($sitemap, $page = null) {
422
- $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
423
 
424
  if (!get_option('permalink_structure')) {
425
  $sitemap = '?sq_feed=' . str_replace('.xml', '', $sitemap) . (isset($page) ? '&amp;page=' . $page : '');
@@ -437,9 +441,9 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
437
  }
438
 
439
  public function processCron() {
440
- SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
441
 
442
- $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
443
  if (!empty($sq_sitemap)) {
444
  foreach ($sq_sitemap as $name => $sitemap) {
445
  if ($sitemap[1] == 1) { //is the default sitemap
@@ -461,8 +465,14 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
461
  "http://www.bing.com/webmaster/ping.aspx?siteMap=%s",
462
  );
463
 
 
 
 
 
 
 
464
  foreach ($urls as $url) {
465
- if ($responce = SQ_Classes_Tools::sq_remote_get(sprintf($url, $sitemapUrl))) {
466
  $success = true;
467
  }
468
  }
@@ -475,7 +485,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
475
  * @return boolean
476
  */
477
  public function deleteSitemapFile() {
478
- $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
479
  if (isset($sq_sitemap[$this->root])) {
480
  if (file_exists(ABSPATH . $sq_sitemap[$this->root])) {
481
  @unlink(ABSPATH . $sq_sitemap[$this->root]);
@@ -545,7 +555,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
545
  }
546
 
547
  public function customPostFilter(&$query) {
548
- $types = get_post_types();
549
  foreach (array('post', 'page', 'attachment', 'revision', 'nav_menu_item', 'product', 'wpsc-product') as $exclude) {
550
  if (in_array($exclude, $types)) {
551
  unset($types[$exclude]);
@@ -570,7 +580,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
570
 
571
  public function productFilter(&$query) {
572
 
573
- if (!$types = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
574
  $types = array('custom-post');
575
  }
576
  $query->set('post_type', $types); // id of page or post
13
 
14
  public function __construct() {
15
  parent::__construct();
16
+ $this->posts_limit = SQ_Classes_Helpers_Tools::getOption('sq_sitemap_perpage');
17
  add_filter('sq_sitemap_style', array($this, 'getFeedStyle'));
18
  add_filter('template_redirect', array($this, 'hookPreventRedirect'), 0);
19
  add_filter('user_trailingslashit', array($this, 'untrailingslashit'));
44
  die();
45
  } elseif (strpos($_SERVER['REQUEST_URI'], '.xml') !== false) {
46
  $parseurl = @parse_url($_SERVER['REQUEST_URI']);
47
+ $stemaplist = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
48
  $page = 0;
49
 
50
  foreach ($stemaplist as $request => $sitemap) {
68
 
69
  public function refreshSitemap($new_status, $old_status, $post) {
70
  if ($old_status <> $new_status && $new_status = 'publish') {
71
+ if (SQ_Classes_Helpers_Tools::getOption('sq_sitemap_ping')) {
72
  wp_schedule_single_event(time() + 5, 'sq_processPing');
73
  }
74
  }
84
  $sq_query = array();
85
 
86
  if (isset($request) && strpos($request, 'sitemap') !== false) {
87
+ $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
88
  $this->model->type = $request;
89
  //reset the previous query
90
  wp_reset_query();
114
 
115
  //show products
116
  if ($this->model->type == 'sitemap-product') {
117
+ if (SQ_Classes_Helpers_Tools::isEcommerce() && $sq_sitemap[$this->model->type][1] == 2) {
118
  $sq_sitemap[$this->model->type][1] = 1;
119
  }
120
  }
144
  add_filter('sq-sitemap-authors', array($this, 'authorFilter'), 5);
145
  break;
146
  case 'sitemap-custom-post':
147
+ $types = get_post_types(array('public' => true));
148
  foreach (array('post', 'page', 'attachment', 'revision', 'nav_menu_item', 'product', 'wpsc-product', 'ngg_tag') as $exclude) {
149
  if (in_array($exclude, $types)) {
150
  unset($types[$exclude]);
166
  $sq_query['post_type'] = $types;
167
  break;
168
  case 'sitemap-product':
169
+ if (SQ_Classes_Helpers_Tools::isEcommerce()) {
170
+ $types = array('product', 'wpsc-product');
171
+ } else {
172
  $types = array('custom-post');
173
  }
174
  $sq_query['post_type'] = $types;
183
  }
184
 
185
  public function getFeedStyle() {
186
+ return '<?xml-stylesheet type="text/xsl" href="/' . _SQ_ASSETS_RELATIVE_URL_ . 'css/sitemap' . ($this->model->type == 'sitemap' ? 'index' : '') . '.xsl"?>' . "\n";
187
  }
188
 
189
  /**
262
  switch ($this->model->type) {
263
  case 'sitemap':
264
  $this->showSitemapHeader();
265
+ $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
266
 
267
  if (!empty($sq_sitemap))
268
  foreach ($sq_sitemap as $name => $value) {
269
  //force to show products if not preset
270
+ if ($name == 'sitemap-product' && !SQ_Classes_Helpers_Tools::isEcommerce()) {
271
  continue;
272
  }
273
 
343
 
344
  /**
345
  * Pach the XML for each sitemap
346
+ * @param array $xml
347
+ * @return void
348
  */
349
+ public function showPackXml($xml = array()) {
350
  if (empty($xml)) {
351
  $xml['contains'] = '';
352
  }
412
  if (isset($this->posts_limit) && $this->posts_limit > 0) {
413
  return 'LIMIT 0, ' . $this->posts_limit;
414
  }
415
+
416
+ return '';
417
  }
418
 
419
  /**
423
  * @return string
424
  */
425
  public function getXmlUrl($sitemap, $page = null) {
426
+ $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
427
 
428
  if (!get_option('permalink_structure')) {
429
  $sitemap = '?sq_feed=' . str_replace('.xml', '', $sitemap) . (isset($page) ? '&amp;page=' . $page : '');
441
  }
442
 
443
  public function processCron() {
444
+ SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_Tools');
445
 
446
+ $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
447
  if (!empty($sq_sitemap)) {
448
  foreach ($sq_sitemap as $name => $sitemap) {
449
  if ($sitemap[1] == 1) { //is the default sitemap
465
  "http://www.bing.com/webmaster/ping.aspx?siteMap=%s",
466
  );
467
 
468
+ $options = array(
469
+ 'method' => 'get',
470
+ 'sslverify' => false,
471
+ 'timeout' => 10
472
+ );
473
+
474
  foreach ($urls as $url) {
475
+ if ($responce = SQ_Classes_ObjController::getClass('SQ_Classes_RemoteController')->sq_wpcall(sprintf($url, $sitemapUrl), $options)) {
476
  $success = true;
477
  }
478
  }
485
  * @return boolean
486
  */
487
  public function deleteSitemapFile() {
488
+ $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
489
  if (isset($sq_sitemap[$this->root])) {
490
  if (file_exists(ABSPATH . $sq_sitemap[$this->root])) {
491
  @unlink(ABSPATH . $sq_sitemap[$this->root]);
555
  }
556
 
557
  public function customPostFilter(&$query) {
558
+ $types = get_post_types(array('public' => true));
559
  foreach (array('post', 'page', 'attachment', 'revision', 'nav_menu_item', 'product', 'wpsc-product') as $exclude) {
560
  if (in_array($exclude, $types)) {
561
  unset($types[$exclude]);
580
 
581
  public function productFilter(&$query) {
582
 
583
+ if (!$types = SQ_Classes_Helpers_Tools::isEcommerce()) {
584
  $types = array('custom-post');
585
  }
586
  $query->set('post_type', $types); // id of page or post
controllers/Snippet.php ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Snippet extends SQ_Classes_FrontController {
4
+
5
+ /** @var array Posts types in */
6
+ private $_types = array();
7
+ public $post;
8
+
9
+ public function __construct() {
10
+ parent::__construct();
11
+ add_action('admin_bar_menu', array($this, 'hookTopmenuFrontend'), 11);
12
+
13
+ if(is_admin()) {
14
+ add_action('category_add_form_fields', array($this, 'hookTermsPage'), 10);
15
+
16
+ $taxonomies = get_taxonomies(array('public' => true));
17
+ if (!empty($taxonomies)) {
18
+ foreach ($taxonomies as $taxonomy) {
19
+ add_filter($taxonomy . '_edit_form', array($this, 'hookTermsPage'), 10);
20
+ }
21
+ }
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Init Snippet and return the view for Admin Bar
27
+ * @return mixed
28
+ */
29
+ public function init() {
30
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('sqbootstrap', array('trigger' => true, 'media' => 'all'));
31
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('fontawesome', array('trigger' => true, 'media' => 'all'));
32
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight', array('trigger' => true, 'media' => 'all'));
33
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('patterns', array('trigger' => true, 'media' => 'all'));
34
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('snippet', array('trigger' => true, 'media' => 'all'));
35
+
36
+ return $this->getView('Blocks/Snippet');
37
+ }
38
+
39
+ /**
40
+ * Hook the Head sequence in frontend when user is logged in
41
+ */
42
+ public function hookFronthead() {
43
+ if (current_user_can('sq_manage_snippet')) {
44
+ //prevent some compatibility errors with other plugins
45
+ remove_all_actions('print_media_templates');
46
+
47
+ //loade the media library
48
+ @wp_enqueue_media();
49
+
50
+ //Set the current post domain with all the data
51
+ $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
52
+ }
53
+ }
54
+
55
+
56
+ /**
57
+ * Set the post in snippet
58
+ * @param $post
59
+ */
60
+ public function setPost($post) {
61
+ $this->post = $post;
62
+
63
+ return $this;
64
+ }
65
+
66
+ /**
67
+ * Hook pages like Terms and Categories
68
+ */
69
+ public function hookTermsPage() {
70
+ echo $this->getSnippetDiv(SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet')->init());
71
+ }
72
+
73
+ /**
74
+ * Get the Snippet div for different pages
75
+ *
76
+ * @param $content
77
+ * @param string $attributes
78
+ * @return string
79
+ */
80
+ public function getSnippetDiv($content, $attributes = '') {
81
+ return '<div id="sq_blocksnippet" ' . $attributes . ' class="sq_blocksnippet sq-shadow-sm sq-border-bottom sq-mb-4"><h2 class="hndle"><span class="sq_logo" style="margin-right: 5px;width: 30px !important;height: 30px !important;"></span>' . __('Squirrly SEO Snippet', _SQ_PLUGIN_NAME_) . '</span></h2><div class="inside">' . $content . '</div></div>';
82
+
83
+ }
84
+
85
+ /**
86
+ * Add a menu in Frontend Admin Bar
87
+ *
88
+ * @param WP_Admin_Bar $wp_admin_bar
89
+ */
90
+ public function hookTopmenuFrontend($wp_admin_bar) {
91
+ global $wp_the_query;
92
+
93
+ if (is_admin() || !is_user_logged_in()) {
94
+ return;
95
+ }
96
+
97
+ //If user set not to load Squirrly in frontend
98
+ if (!SQ_Classes_Helpers_Tools::getOption('sq_use_frontend')) {
99
+ return;
100
+ }
101
+
102
+ if (!$wp_the_query || !method_exists($wp_the_query, 'get_queried_object') || !function_exists('current_user_can')) {
103
+ return;
104
+ }
105
+
106
+ if (!current_user_can('sq_manage_snippets')) {
107
+ $current_object = $wp_the_query->get_queried_object();
108
+
109
+ if (empty($current_object))
110
+ return;
111
+
112
+ if (!empty($current_object->post_type)
113
+ && ($post_type_object = get_post_type_object($current_object->post_type))
114
+ && current_user_can('edit_post', $current_object->ID)
115
+ && $post_type_object->show_in_admin_bar
116
+ && $edit_post_link = get_edit_post_link($current_object->ID)) {
117
+ } elseif (!empty($current_object->taxonomy)
118
+ && ($tax = get_taxonomy($current_object->taxonomy))
119
+ && current_user_can('edit_term', $current_object->term_id)
120
+ && $edit_term_link = get_edit_term_link($current_object->term_id, $current_object->taxonomy)) {
121
+ } else {
122
+ return;
123
+ }
124
+ }
125
+
126
+ try {
127
+ $wp_admin_bar->add_node(array(
128
+ 'id' => 'sq_bar_menu',
129
+ 'title' => '<span class="sq_logo"></span> ' . __('Custom SEO', _SQ_PLUGIN_NAME_),
130
+ 'parent' => 'top-secondary',
131
+ ));
132
+
133
+
134
+ $wp_admin_bar->add_menu(array(
135
+ 'id' => 'sq_bar_submenu',
136
+ 'parent' => 'sq_bar_menu',
137
+ 'meta' => array(
138
+ 'html' => $this->getSnippetDiv(SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet')->init(), 'data-snippet="topmenu"'),
139
+ 'tabindex' => PHP_INT_MAX,
140
+ ),
141
+ ));
142
+ } catch (Exception $e) {
143
+
144
+ }
145
+
146
+ }
147
+
148
+ /**
149
+ * Called when Post action is triggered
150
+ *
151
+ * @return void
152
+ */
153
+ public function action() {
154
+ parent::action();
155
+
156
+ $response = array();
157
+ if (!current_user_can('sq_manage_snippet')) {
158
+ $response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
159
+ SQ_Classes_Helpers_Tools::setHeader('json');
160
+ echo json_encode($response);
161
+ exit();
162
+ }
163
+
164
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
165
+ case 'sq_saveseo':
166
+ $sq_hash = SQ_Classes_Helpers_Tools::getValue('sq_hash', false);
167
+ $post_id = (int)SQ_Classes_Helpers_Tools::getValue('post_id', 0);
168
+ $term_id = (int)SQ_Classes_Helpers_Tools::getValue('term_id', 0);
169
+ $taxonomy = SQ_Classes_Helpers_Tools::getValue('taxonomy', 'category');
170
+ $post_type = SQ_Classes_Helpers_Tools::getValue('post_type', 'post');
171
+
172
+ //Save the SEO settings
173
+ if ($this->model->saveSEO()) {
174
+ $json['saved'] = $sq_hash;
175
+ } else {
176
+ $json['error'] = __('Could not save the data', _SQ_PLUGIN_NAME_);
177
+ }
178
+
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
+
186
+ if (SQ_Classes_Helpers_Tools::getValue('sq_debug') !== 'on') {
187
+ echo json_encode($json);
188
+ } else {
189
+ SQ_Debug::dump($json);
190
+ }
191
+
192
+ exit();
193
+ }
194
+ break;
195
+
196
+ case 'sq_getsnippet':
197
+ $json = array();
198
+ $post_id = (int)SQ_Classes_Helpers_Tools::getValue('post_id', 0);
199
+ $term_id = (int)SQ_Classes_Helpers_Tools::getValue('term_id', 0);
200
+ $taxonomy = SQ_Classes_Helpers_Tools::getValue('taxonomy', 'category');
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
+
207
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
208
+ SQ_Classes_Helpers_Tools::setHeader('json');
209
+
210
+ if (SQ_Classes_Error::isError()) {
211
+ $json['error'] = SQ_Classes_Error::getError();
212
+ }
213
+
214
+ if (SQ_Classes_Helpers_Tools::getValue('sq_debug') !== 'on') {
215
+ echo json_encode($json);
216
+ } else {
217
+ SQ_Debug::dump($json);
218
+ }
219
+ exit();
220
+ }
221
+
222
+ case 'sq_previewsnippet':
223
+
224
+ $snippet = array();
225
+ try {
226
+
227
+ if (SQ_Classes_Helpers_Tools::getValue('url') <> '') {
228
+ $url = SQ_Classes_Helpers_Tools::getValue('url');
229
+ } else {
230
+ $url = get_bloginfo('url');
231
+ }
232
+
233
+ $snippet = SQ_Classes_RemoteController::getSnippet($url);
234
+
235
+ } catch (Exception $e) {
236
+ }
237
+
238
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
239
+ SQ_Classes_Helpers_Tools::setHeader('json');
240
+ echo json_encode($snippet);
241
+ exit();
242
+ }
243
+ }
244
+ }
245
+
246
+
247
+ }
core/BlockAccount.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Account settings
5
- */
6
- class SQ_Core_BlockAccount extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockAffiliate.php DELETED
@@ -1,47 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Affiliate settings
5
- */
6
- class SQ_Core_BlockAffiliate extends SQ_Classes_BlockController {
7
-
8
- public function hookGetContent() {
9
- parent::preloadSettings();
10
- }
11
-
12
- public function action() {
13
- parent::action();
14
- switch (SQ_Classes_Tools::getValue('action')) {
15
- //login action
16
- case 'sq_settings_affiliate':
17
- //post arguments
18
- $args = array();
19
- //set return to null object as default
20
- $return = (object) NULL;
21
- //api responce variable
22
- $responce = '';
23
-
24
- $responce = SQ_Classes_Action::apiCall('sq/user/affiliate', $args);
25
-
26
- //create an object from json responce
27
- if (is_object(json_decode($responce)))
28
- $return = json_decode($responce);
29
-
30
- //add the responce in msg for debugging in case of error
31
- $return->msg = $responce;
32
-
33
- //if the affiliate link is received
34
- if (isset($return->affiliate_link)) {
35
- SQ_Classes_Tools::saveOptions('sq_affiliate_link', $return->affiliate_link);
36
- } elseif (!empty($return->error)) {
37
- //if an error is throw then ...
38
- $return->info = sprintf(__('Error: %s', _SQ_PLUGIN_NAME_), $return->error);
39
- } else {
40
- //if unknown error
41
- $return->error = __('An error occured. Mabe a network error :(', _SQ_PLUGIN_NAME_);
42
- }
43
- break;
44
- }
45
- }
46
-
47
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockAnalytics.php DELETED
@@ -1,9 +0,0 @@
1
- <?php
2
-
3
- class SQ_Core_BlockAnalytics extends SQ_Classes_BlockController {
4
-
5
- public function hookGetContent() {
6
-
7
- }
8
-
9
- }
 
 
 
 
 
 
 
 
 
core/BlockAssistant.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockAssistant extends SQ_Classes_BlockController {
4
+
5
+ public function hookGetContent(){
6
+ echo $this->getView('Blocks/Assistant');
7
+ }
8
+ }
core/BlockAudit.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Audit Page
5
- */
6
- class SQ_Core_BlockAudit extends SQ_Classes_BlockController {
7
- public $blog;
8
-
9
- function hookGetContent() {
10
- $blogs = json_decode(SQ_Classes_Action::apiCall('sq/audit/blog-list'));
11
- if (!empty($blogs)) {
12
- foreach ($blogs as $blog) {
13
- if (get_bloginfo('url') == $blog->domain){
14
- $this->blog = $blog;
15
- }
16
- }
17
- }
18
- }
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockAudits.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockAudits extends SQ_Classes_BlockController {
4
+ public $audits;
5
+ public $tasks;
6
+ //
7
+ public $title = true;
8
+
9
+ public function hookGetContent() {
10
+ $this->audits = SQ_Classes_RemoteController::getBlogAudits();
11
+ echo $this->getView('Blocks/Audits');
12
+ }
13
+
14
+ public function getScripts() {
15
+ return '<script type="text/javascript">
16
+ google.load("visualization", "1", {packages: ["corechart"]});
17
+ function drawChart(id, values, reverse) {
18
+ var data = google.visualization.arrayToDataTable(values);
19
+
20
+ var options = {
21
+
22
+ title : "",
23
+ chartArea:{width:"80%",height:"70%"},
24
+ vAxis: {title: "",
25
+ viewWindowMode:"explicit",
26
+ viewWindow: {
27
+ max:100,
28
+ min:0
29
+ }},
30
+ hAxis: {title: ""},
31
+ seriesType: "bars",
32
+ series: {2: {type: "line"}},
33
+ legend: {position: "bottom"},
34
+ colors:["#17c6ea","#fb3b47"]
35
+ };
36
+
37
+ var chart = new google.visualization.ComboChart(document.getElementById(id));
38
+ chart.draw(data, options);
39
+ return chart;
40
+ }
41
+ </script>';
42
+ }
43
+ }
core/BlockBriefcaseKeywords.php DELETED
@@ -1,329 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Keyword Research settings
5
- */
6
- class SQ_Core_BlockBriefcaseKeywords extends SQ_Classes_BlockController {
7
-
8
- public $tabs;
9
- public $keywords = array();
10
- public $labels = array();
11
- public $countries; //string with li of all countries
12
- //
13
- public $index;
14
- public $error;
15
- /** @var SQ_Models_SerpCheckerTable */
16
- public $listTable;
17
- public $checkin;
18
-
19
- public function init() {
20
- $this->listTable = SQ_Classes_ObjController::getClass('SQ_Models_SerpCheckerTable');
21
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('serpchecker.css');
22
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
23
-
24
- $menu = SQ_Classes_Tools::getOption('menu');
25
-
26
- //Not yet available
27
- if (SQ_Classes_Tools::getOption('sq_google_serp_active') == 0) {
28
- $this->checkin = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/checkin'));
29
- if (isset($this->checkin->active) && $this->checkin->active) {
30
- if (isset($this->checkin->trial) && $this->checkin->trial) {
31
- SQ_Classes_Tools::saveOptions('sq_google_serp_trial', 1);
32
- } else {
33
- SQ_Classes_Tools::saveOptions('sq_google_serp_trial', 0);
34
- }
35
- SQ_Classes_Tools::saveOptions('sq_google_serp_active', 1);
36
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->setError(sprintf(__('%sYou activated the Business Plan with Advanced Analytics. %sStart Here%s %s'), '<strong style="font-size: 16px;">', '<a href="' . admin_url('admin.php?page=sq_posts') . '">', '</a>', '</strong>'), 'success');
37
- } elseif (isset($this->checkin->error) && $this->checkin->error == "subscription_notfound" && !SQ_Classes_Tools::getOption('sq_google_serp_active')) {
38
- if ($menu['show_ads']) {
39
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->setError(sprintf(__('%sStart a FREE Trial of the Business Plan with Advanced Analytics for 7 days. No credit card required. %sSee details%s %s'), '<strong style="font-size: 16px;">', '<a href="' . _SQ_DASH_URL_ . 'login/?token=' . SQ_Classes_Tools::getToken(). '&redirect_to=' . _SQ_DASH_URL_ . 'user/plans?pid=31" target="_blank">', '</a>', '</strong>'), 'trial');
40
- }
41
- }
42
- }
43
-
44
-
45
- $per_page = $this->listTable->get_items_per_page('edit_post_per_page');
46
- $paged = (int)SQ_Classes_Tools::getValue('paged', 1);
47
- $search = (string)SQ_Classes_Tools::getValue('skeyword', '');
48
- $labels = SQ_Classes_Tools::getValue('slabel', array());
49
-
50
- $args = array();
51
- $args['json'] = true;
52
- $args['paged'] = $paged;
53
- $args['search'] = $search;
54
- if(!empty($labels)) {
55
- $args['label'] = join(',', $labels);
56
- }
57
- $args['per_page'] = $per_page;
58
- $json = json_decode(SQ_Classes_Action::apiCall('sq/briefcase/get', $args));
59
-
60
- if (isset($json->keywords) && !empty($json->keywords)) {
61
- $this->listTable->set_pagination_args(array(
62
- 'total_items' => $json->total,
63
- 'total_pages' => ceil($json->total / $per_page),
64
- 'per_page' => $per_page
65
- ));
66
-
67
- $this->index = (($paged - 1) * $per_page);
68
- $this->keywords = $json->keywords;
69
- } else {
70
- $this->error = __('No keyword found in the briefcase.', _SQ_PLUGIN_NAME_);
71
- }
72
-
73
- if (isset($json->labels)) {
74
- $this->labels = $json->labels;
75
- }
76
- if (isset($json->countries)) {
77
- $this->countries = $json->countries;
78
- }
79
-
80
- wp_enqueue_style('wp-color-picker');
81
- wp_enqueue_script('wp-color-picker');
82
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
83
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
84
-
85
- return parent::init();
86
- }
87
-
88
- /**
89
- * Called when action is triggered
90
- *
91
- * @return void
92
- */
93
- public function action() {
94
- parent::action();
95
- SQ_Classes_Tools::setHeader('json');
96
-
97
- switch (SQ_Classes_Tools::getValue('action')) {
98
- case 'sq_briefcase_addkeyword':
99
- if (!current_user_can('edit_posts')) {
100
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
101
- exit();
102
- }
103
-
104
- $keyword = (string)SQ_Classes_Tools::getValue('keyword', '');
105
- $labels = SQ_Classes_Tools::getValue('labels', array());
106
-
107
- if ($keyword <> '') {
108
- $args = array();
109
- $args['keyword'] = $keyword;
110
- if (!empty($labels)) {
111
- foreach ($labels as $label) {
112
- $args['label'] = $label;
113
- SQ_Classes_Action::apiCall('sq/briefcase/add', $args);
114
- }
115
- } else {
116
- SQ_Classes_Action::apiCall('sq/briefcase/add', $args);
117
-
118
- }
119
-
120
- echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
121
- } else {
122
- echo json_encode(array('error' => __('Invalid Keyword!', _SQ_PLUGIN_NAME_)));
123
- }
124
- break;
125
- case 'sq_briefcase_deletekeyword':
126
- if (!current_user_can('edit_posts')) {
127
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
128
- exit();
129
- }
130
-
131
- $id = (int)SQ_Classes_Tools::getValue('id', 0);
132
-
133
- if ($id > 0) {
134
- //set ignore on API
135
- $args = array();
136
- $args['id'] = $id;
137
- SQ_Classes_Action::apiCall('sq/briefcase/delete', $args);
138
- echo json_encode(array('deleted' => __('Deleted!', _SQ_PLUGIN_NAME_)));
139
- } else {
140
- echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
141
- }
142
- break;
143
- case 'sq_briefcase_doresearch':
144
- if (!current_user_can('edit_posts')) {
145
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
146
- exit();
147
- }
148
-
149
- $keyword = (string)SQ_Classes_Tools::getValue('keyword', '');
150
- $country = (string)SQ_Classes_Tools::getValue('country', 'us');
151
-
152
- if ($keyword <> '' ) {
153
- $args = array();
154
- $args['q'] = $keyword;
155
- $args['lang'] = 'en_US';
156
- $args['country'] = $country;
157
- $response = json_decode(SQ_Classes_Action::apiCall('sq/kr/brief', $args));
158
- if ($response->error == 'limit_exceeded') {
159
- $response->error = '<div class="sq_limit_exceeded">' . __('Keyword Research limit exceeded.', _SQ_PLUGIN_NAME_) . '<br> <a href="' . _SQ_DASH_URL_ . 'login/?token=' . SQ_Classes_Tools::getOption('sq_api') . '&redirect_to=' . _SQ_DASH_URL_ . 'user/plans?pid=102" target="_blank">' . __('Add 20 Keyword Researches', _SQ_PLUGIN_NAME_) . '</a></div>';
160
- }
161
- echo json_encode($response);
162
- } else {
163
- echo json_encode(array('error' => __('Invalid Keyword!', _SQ_PLUGIN_NAME_)));
164
- }
165
- break;
166
- case 'sq_briefcase_article':
167
-
168
- if (!current_user_can('edit_posts')) {
169
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
170
- exit();
171
- }
172
-
173
- $keyword = (string)SQ_Classes_Tools::getValue('keyword', '');
174
-
175
- if ($keyword <> '') {
176
- $args = array();
177
- $args['keyword'] = $keyword;
178
- $articles = json_decode(SQ_Classes_Action::apiCall('sq/briefcase/articles', $args));
179
-
180
- $rows = array();
181
- if ($articles && !empty($articles)) {
182
- foreach ($articles as $article) {
183
- if ($post = get_post($article->id)) {
184
- $link = get_permalink($post->ID);
185
-
186
- if (SQ_Classes_Tools::getOption('sq_google_serp_active')) {
187
- $listTable = SQ_Classes_ObjController::getClass('SQ_Models_SerpCheckerTable');
188
- $check_rank = $listTable->getRankText($article->position, 0);
189
- } else {
190
- $check_rank = '<button class="btn btn-default sq_research_selectit" onclick="location.href = \'' . SQ_Classes_Tools::getBusinessLink() . '\'">' . __('Check Ranks', _SQ_PLUGIN_NAME_) . '</button>';
191
- }
192
- $date_format = get_option('date_format');
193
- $time_format = get_option('time_format');
194
- $timezone = (int)get_option('gmt_offset');
195
- $datetime = date($date_format . ' ' . $time_format, strtotime($article->datetime) + $timezone * HOUR_IN_SECONDS);
196
- $rows[] = '<tr>
197
- <td><span style="font-size: 15px; color: #333">' . $post->post_title . '</span><br /><span style="font-size: 11px;"><a href="' . $link . '" target="_blank" >' . $link . '</a></span></td>
198
- <td align="right" id="sq_rank_value' . $post->ID . '" title="' . __('Last checked', _SQ_PLUGIN_NAME_) . ': ' . $datetime . '">' . $check_rank . '</td>
199
- <td align="right">' . (int)$article->optimized . '%' . '</td>
200
- <td align="center">
201
- <button class="btn btn-default sq_research_selectit" onclick="location.href = \'' . admin_url('post.php?post=' . $post->ID . '&action=edit') . '\'">' . __('Edit', _SQ_PLUGIN_NAME_) . '</button>
202
- ' . sprintf('<button class="btn btn-default sq_rank_refresh" data-id="' . $post->ID . '" data-keyword="' . htmlspecialchars($keyword) . '">%s</button>', __('Get Rank', _SQ_PLUGIN_NAME_)) . '
203
- </td>
204
- </tr>';
205
- } else {
206
- $rows[] = '<tr>
207
- <td><span style="font-size: 11px; color: #aaa">' . __('Deleted Post', _SQ_PLUGIN_NAME_) . '</span></td>
208
- <td align="right"></td>
209
- <td align="right">' . (int)$article->optimized . '%' . '</td>
210
- <td></td>
211
- </tr>';
212
- }
213
- }
214
-
215
- $table = sprintf('<table class="subtable">
216
- <tr>
217
- <th>' . __('Article title', _SQ_PLUGIN_NAME_) . '</th>
218
- <th style="width: 150px; text-align: right;" align="right">' . __('Google Rank', _SQ_PLUGIN_NAME_) . '</th>
219
- <th style="width: 150px; text-align: right;">' . __('Optimized', _SQ_PLUGIN_NAME_) . '</th>
220
- <th style="width: 150px; text-align: center;">' . __('Option', _SQ_PLUGIN_NAME_) . '</th>
221
- </tr>
222
- %s
223
- </table>', join('', $rows));
224
- } else {
225
- $table = '<table class="subtable"><tr><td colspan="6" align="center" style="color: red">' . __('There are no articles found', _SQ_PLUGIN_NAME_) . '</td></tr></table>';
226
- }
227
-
228
-
229
- echo json_encode(array('articles' => $table));
230
- } else {
231
- echo json_encode(array('error' => __('Invalid Keyword!', _SQ_PLUGIN_NAME_)));
232
- }
233
- break;
234
-
235
- /*****************************/
236
-
237
- case 'sq_briefcase_addlabel':
238
- if (!current_user_can('edit_posts')) {
239
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
240
- exit();
241
- }
242
-
243
- $name = (string)SQ_Classes_Tools::getValue('name', 0);
244
- $color = (string)SQ_Classes_Tools::getValue('color', '#ffffff');
245
-
246
- if ($name <> '' && $color <> '') {
247
- $args = array();
248
- $args['name'] = $name;
249
- $args['color'] = $color;
250
- SQ_Classes_Action::apiCall('sq/briefcase/add-label', $args);
251
-
252
- echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
253
- } else {
254
- echo json_encode(array('error' => __('Invalid Label or Color!', _SQ_PLUGIN_NAME_)));
255
- }
256
- break;
257
- case 'sq_briefcase_editlabel':
258
- if (!current_user_can('edit_posts')) {
259
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
260
- exit();
261
- }
262
-
263
- $id = (string)SQ_Classes_Tools::getValue('id', 0);
264
- $name = (string)SQ_Classes_Tools::getValue('name', 0);
265
- $color = (string)SQ_Classes_Tools::getValue('color', '#ffffff');
266
-
267
- if ((int)$id > 0 && $name <> '' && $color <> '') {
268
- $args = array();
269
- $args['id'] = $id;
270
- $args['name'] = $name;
271
- $args['color'] = $color;
272
- SQ_Classes_Action::apiCall('sq/briefcase/edit-label', $args);
273
-
274
- echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
275
- } else {
276
- echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
277
- }
278
- break;
279
- case 'sq_briefcase_deletelabel':
280
- if (!current_user_can('edit_posts')) {
281
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
282
- exit();
283
- }
284
-
285
- $id = (int)SQ_Classes_Tools::getValue('id', 0);
286
-
287
- if ($id > 0) {
288
- //set ignore on API
289
- $args = array();
290
- $args['id'] = $id;
291
- SQ_Classes_Action::apiCall('sq/briefcase/delete-label', $args);
292
- echo json_encode(array('deleted' => __('Deleted!', _SQ_PLUGIN_NAME_)));
293
- } else {
294
- echo json_encode(array('error' => __('Invalid params!', _SQ_PLUGIN_NAME_)));
295
- }
296
- break;
297
- case 'sq_briefcase_keywordlabel':
298
- if (!current_user_can('edit_posts')) {
299
- echo json_encode(array('error' => __("You don't have enough pemission to manage this feature", _SQ_PLUGIN_NAME_)));
300
- exit();
301
- }
302
-
303
- $keyword_id = SQ_Classes_Tools::getValue('keyword_id', 0);
304
- $labels = SQ_Classes_Tools::getValue('labels', array());
305
-
306
- if ((int)$keyword_id > 0) {
307
- $args = array();
308
- $args['id'] = $keyword_id;
309
- if(is_array($labels) && !empty($labels)) {
310
- $args['labels'] = join(',', $labels);
311
- SQ_Classes_Action::apiCall('sq/briefcase/add-briefcase-labels', $args);
312
- }else{
313
- SQ_Classes_Action::apiCall('sq/briefcase/delete-briefcase-labels', $args);
314
-
315
- }
316
- echo json_encode(array('saved' => __('Saved!', _SQ_PLUGIN_NAME_)));
317
- } else {
318
- echo json_encode(array('error' => __('Invalid Keyword!', _SQ_PLUGIN_NAME_)));
319
- }
320
- break;
321
-
322
- }
323
-
324
- exit();
325
-
326
- }
327
-
328
-
329
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockCopyright.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Live Assistant settings
5
- */
6
- class SQ_Core_BlockCopyright extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- }
11
- }
 
 
 
 
 
 
 
 
 
 
 
core/BlockCustomerService.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Customer Service Page
5
- */
6
- class SQ_Core_BlockCustomerService extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('blocksupport');
10
- }
11
- }
 
 
 
 
 
 
 
 
 
 
 
core/BlockDashboard.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Dashboard settings
5
- */
6
- class SQ_Core_BlockDashboard extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockFocusPages.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockFocusPages extends SQ_Classes_BlockController {
4
+ public $focuspages;
5
+
6
+ public function hookGetContent() {
7
+ if ($focuspages = SQ_Classes_RemoteController::getFocusPages()) {
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');
32
+ }
33
+
34
+ public function getScripts() {
35
+ return '<script type="text/javascript">
36
+ google.load("visualization", "1", {packages: ["corechart"]});
37
+ function drawChart(id, values, reverse) {
38
+ var data = google.visualization.arrayToDataTable(values);
39
+
40
+ var options = {
41
+
42
+ title : "",
43
+ chartArea:{width:"80%",height:"70%"},
44
+ vAxis: {title: "",
45
+ viewWindowMode:"explicit",
46
+ viewWindow: {
47
+ max:100,
48
+ min:0
49
+ }},
50
+ hAxis: {title: ""},
51
+ seriesType: "bars",
52
+ series: {2: {type: "line"}},
53
+ legend: {position: "bottom"},
54
+ colors:["#17c6ea","#fb3b47"]
55
+ };
56
+
57
+ var chart = new google.visualization.ComboChart(document.getElementById(id));
58
+ chart.draw(data, options);
59
+ return chart;
60
+ }
61
+ </script>';
62
+ }
63
+ }
core/BlockHelp.php DELETED
@@ -1,8 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Affiliate settings
5
- */
6
- class SQ_Core_BlockHelp extends SQ_Classes_BlockController {
7
-
8
- }
 
 
 
 
 
 
 
 
core/BlockImport.php DELETED
@@ -1,69 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Set the patterns
5
- */
6
- class SQ_Core_BlockImport extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- if(SQ_Classes_Tools::getOption('sq_api') <> '') {
10
- //Remove the notification is Inport Settings are shown
11
- delete_transient('sq_import');
12
-
13
- parent::preloadSettings();
14
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
15
- }
16
- }
17
-
18
- /**
19
- * Called when Post action is triggered
20
- *
21
- * @return void
22
- */
23
- public function action() {
24
- parent::action();
25
- switch (SQ_Classes_Tools::getValue('action')) {
26
- case 'sq_importsettings':
27
- if (!current_user_can('manage_options')) {
28
- return;
29
- }
30
-
31
- $platform = SQ_Classes_Tools::getValue('sq_import_platform', '');
32
- if ($platform <> '') {
33
- if (SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSettings($platform)) {
34
- SQ_Classes_Error::setMessage(__('All the Plugin settings were imported successfuly!', _SQ_PLUGIN_NAME_));
35
- }else{
36
- SQ_Classes_Error::setMessage(__('No settings found for this plugin/theme.', _SQ_PLUGIN_NAME_));
37
-
38
- }
39
- }
40
- break;
41
-
42
- case 'sq_importseo':
43
- if (!current_user_can('manage_options')) {
44
- return;
45
- }
46
- $platform = SQ_Classes_Tools::getValue('sq_import_platform', '');
47
- if ($platform <> '') {
48
- $seo = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSeo($platform);
49
- if (!empty($seo)) {
50
- foreach ($seo as $sq_hash => $metas) {
51
- SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
52
- (isset($metas['url']) ? $metas['url'] : ''),
53
- $sq_hash,
54
- (isset($metas['post_id']) && is_numeric($metas['post_id']) ? (int)$metas['post_id'] : 0),
55
- maybe_serialize($metas),
56
- gmdate('Y-m-d H:i:s'));
57
- }
58
- 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_BlockSettingsSeo')->getName($platform)));
59
- } else {
60
- 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_BlockSettingsSeo')->getName($platform)));
61
-
62
- }
63
- }
64
- break;
65
- }
66
- }
67
-
68
-
69
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockJorney.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockJorney extends SQ_Classes_BlockController {
4
+
5
+ public $days = 0;
6
+
7
+ public function hookGetContent() {
8
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('jorney');
9
+
10
+ if (!$seojorney = SQ_Classes_Helpers_Tools::getOption('sq_seojourney')) {
11
+ ?>
12
+ <div class="col-sm-12 m-0 p-3 text-center">
13
+ <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step2') ?>" class="btn btn-success m-2 py-2 px-4" style="font-size: 20px;"><?php echo __("I'm ready to start the 14 Days Journey To Better Ranking", _SQ_PLUGIN_NAME_); ?></a>
14
+ </div>
15
+ <?php
16
+ return false;
17
+ }
18
+
19
+ $days = 1;
20
+ $seconds = strtotime(date('Y-m-d')) - strtotime($seojorney);
21
+
22
+ if ($seconds > 0) {
23
+ $days = $seconds / (3600 * 24);
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
+ }
34
+
35
+ public function getJourneyDays() {
36
+ return $this->days;
37
+ }
38
+ }
core/BlockKRFound.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockKRFound extends SQ_Classes_BlockController {
4
+
5
+ public $keywords;
6
+
7
+ function hookGetContent() {
8
+
9
+ $this->keywords = SQ_Classes_RemoteController::getKrFound();
10
+ SQ_Debug::dump($this->keywords);
11
+
12
+ echo $this->getView('Blocks/KRFound');
13
+ }
14
+
15
+ }
core/BlockKRHistory.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockKRHistory extends SQ_Classes_BlockController {
4
+
5
+ public $kr;
6
+
7
+ function hookGetContent() {
8
+ $args = array();
9
+ $args['limit'] = 100;
10
+ $this->kr = SQ_Classes_RemoteController::getKRHistory($args);
11
+
12
+ echo $this->getView('Blocks/KRHistory');
13
+ }
14
+
15
+ }
core/BlockKeywordResearch.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Keyword Research settings
5
- */
6
- class SQ_Core_BlockKeywordResearch extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('blockresearch');
11
- }
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockLiveAssistant.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Live Assistant settings
5
- */
6
- class SQ_Core_BlockLiveAssistant extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- }
11
- }
 
 
 
 
 
 
 
 
 
 
 
core/BlockPatterns.php DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Set the patterns
5
- */
6
- class SQ_Core_BlockPatterns extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
11
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('patterns');
12
- }
13
-
14
- /**
15
- * Called when Post action is triggered
16
- *
17
- * @return void
18
- */
19
- public function action() {
20
- parent::action();
21
- switch (SQ_Classes_Tools::getValue('action')) {
22
- case 'sq_savepatters_option':
23
- if (!current_user_can('manage_options')) {
24
- return;
25
- }
26
- SQ_Classes_Tools::setHeader('json');
27
-
28
- SQ_Classes_Tools::saveOptions('sq_auto_pattern', SQ_Classes_Tools::getValue('sq_auto_pattern'));
29
- echo json_encode(array('saved' => true));
30
- exit();
31
-
32
- case 'sq_savepatters':
33
- if (!current_user_can('manage_options')) {
34
- return;
35
- }
36
-
37
- //Save auto patterns option
38
- SQ_Classes_Tools::saveOptions("sq_auto_pattern", SQ_Classes_Tools::getValue('sq_auto_pattern', 1));
39
-
40
- $patterns = SQ_Classes_Tools::getValue('sq_patterns', array());
41
- if (!empty($patterns)) {
42
- SQ_Classes_Tools::saveOptions("patterns", $patterns);
43
- }
44
-
45
- //If a new post type is added
46
- $newposttype = SQ_Classes_Tools::getValue('sq_select_post_types', '');
47
- if ($newposttype <> '') {
48
- $patterns[$newposttype] = $patterns['custom'];
49
- if (!empty($patterns)) {
50
- SQ_Classes_Tools::saveOptions("patterns", $patterns);
51
- }
52
- }
53
-
54
- //empty the cache on settings changed
55
- SQ_Classes_Tools::emptyCache();
56
- break;
57
- }
58
- }
59
-
60
-
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockPostsAnalytics.php DELETED
@@ -1,68 +0,0 @@
1
- <?php
2
-
3
- class SQ_Core_BlockPostsAnalytics extends SQ_Classes_BlockController {
4
- public $checkin;
5
-
6
- public function hookGetContent() {
7
-
8
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')
9
- ->loadMedia(_SQ_THEME_URL_ . 'css/postslist.css');
10
-
11
- SQ_Classes_Tools::saveOptions('sq_analytics', 1); //Save analytics viewed
12
- SQ_Classes_Tools::saveOptions('sq_dashboard', 1); //Save dashboard viewed
13
- $this->postlist = SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList');
14
-
15
- //Not yet available
16
- $this->checkin = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/checkin'));
17
- if (isset($this->checkin->active) && $this->checkin->active) {
18
- if (isset($this->checkin->trial) && $this->checkin->trial) {
19
- SQ_Classes_Tools::saveOptions('sq_google_serp_trial', 1);
20
- } else {
21
- SQ_Classes_Tools::saveOptions('sq_google_serp_trial', 0);
22
- }
23
- SQ_Classes_Tools::saveOptions('sq_google_serp_active', 1);
24
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->setError(sprintf(__('%sYou activated the Business Plan with Advanced Analytics. %sStart Here%s %s'), '<strong style="font-size: 16px;">', '<a href="' . admin_url('admin.php?page=sq_posts') . '">', '</a>', '</strong>'), 'success');
25
- } elseif (isset($this->checkin->error) && $this->checkin->error == "subscription_notfound" && !SQ_Classes_Tools::getOption('sq_google_serp_active')) {
26
- $menu = SQ_Classes_Tools::getOption('menu');
27
- if ($menu['show_ads']) {
28
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->setError(sprintf(__('%sStart a FREE Trial of the Business Plan with Advanced Analytics for 7 days. No credit card required. %sSee details%s %s'), '<strong style="font-size: 16px;">', '<a href="' . _SQ_DASH_URL_ . 'login/?token=' . SQ_Classes_Tools::getToken() . '&redirect_to=' . _SQ_DASH_URL_ . 'user/plans?pid=31" target="_blank">', '</a>', '</strong>'), 'trial');
29
- }
30
- } elseif (!SQ_Classes_Tools::getOption('sq_google_serp_active')) {
31
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->setError(sprintf(__('To get back to the Advanced Analytics and see rankings for all the keywords in Briefcase upgrade to %sBusiness Plan%s.'), '<a href="' . SQ_Classes_Tools::getBusinessLink() . '" target="_blank">', '</a>'), 'error');
32
- }
33
-
34
-
35
- $this->model->prepare_items();
36
-
37
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
38
-
39
-
40
- @ini_set('open_basedir', null);
41
- }
42
-
43
- public function getNavigationTop() {
44
- return $this->model->display_tablenav('top');
45
- }
46
-
47
- public function getNavigationBottom() {
48
- return $this->model->display_tablenav('bottom');
49
- }
50
-
51
- public function getHeaderColumns() {
52
- return $this->model->print_column_headers();
53
- }
54
-
55
- public function getRows() {
56
- return $this->model->display_rows();
57
- }
58
-
59
- public function hookFooter() {
60
- $this->postlist->setPosts($this->model->posts);
61
- $this->postlist->hookFooter();
62
- }
63
-
64
- public function getScripts() {
65
- return $this->postlist->getScripts();
66
- }
67
-
68
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockRanks.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockRanks extends SQ_Classes_BlockController {
4
+ public $info;
5
+ public $ranks;
6
+
7
+
8
+ public function hookGetContent() {
9
+ $args = array();
10
+ $args['days_back'] = 7;
11
+ $args['has_ranks'] = 1;
12
+
13
+
14
+ if ($this->info = SQ_Classes_RemoteController::getRanksStats($args)) {
15
+ if (is_wp_error($this->info)) {
16
+ $this->info = array();
17
+ }
18
+ }
19
+ if ($this->ranks = SQ_Classes_RemoteController::getRanks($args)) {
20
+ if (is_wp_error($this->ranks)) {
21
+ $this->ranks = array();
22
+ }
23
+ }
24
+
25
+ echo $this->getView('Blocks/Ranks');
26
+ }
27
+
28
+ public function getScripts() {
29
+ return '<script type="text/javascript">
30
+ google.load("visualization", "1", {packages: ["corechart"]});
31
+ function drawChart(id, values, reverse) {
32
+ var data = google.visualization.arrayToDataTable(values);
33
+
34
+ var options = {
35
+
36
+ curveType: "function",
37
+ title: "",
38
+ chartArea:{width:"80%",height:"70%"},
39
+ enableInteractivity: "true",
40
+ tooltip: {trigger: "auto"},
41
+ pointSize: "4",
42
+ colors: ["#55b2ca"],
43
+ hAxis: {
44
+ baselineColor: "#55b2ca",
45
+ gridlineColor: "#55b2ca",
46
+ textPosition: "out"
47
+ } ,
48
+ vAxis:{
49
+ direction: ((reverse) ? -1 : 1),
50
+ baselineColor: "#f8f8f8",
51
+ gridlineColor: "#f8f8f8",
52
+ textPosition: "out"
53
+ }
54
+ };
55
+
56
+ var chart = new google.visualization.LineChart(document.getElementById(id));
57
+ chart.draw(data, options);
58
+ return chart;
59
+ }
60
+ </script>';
61
+ }
62
+ }
core/BlockSEOIssues.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockSEOIssues extends SQ_Classes_BlockController {
4
+ public $audits;
5
+ public $tasks;
6
+ //
7
+ public $title = true;
8
+
9
+ public function hookGetContent() {
10
+ echo $this->getView('Blocks/SEOIssues');
11
+ }
12
+
13
+ }
core/BlockSerpKeywords.php DELETED
@@ -1,137 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Keyword Research settings
5
- */
6
- class SQ_Core_BlockSerpKeywords extends SQ_Classes_BlockController {
7
-
8
- public $tabs;
9
- public $keywords = array();
10
- public $index;
11
- public $error;
12
- /** @var SQ_Models_SerpCheckerTable */
13
- public $listTable;
14
-
15
- public function init() {
16
- $this->listTable = SQ_Classes_ObjController::getClass('SQ_Models_SerpCheckerTable');
17
-
18
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
19
- $per_page = $this->listTable->get_items_per_page('edit_post_per_page');
20
- $paged = (int)SQ_Classes_Tools::getValue('paged', 1);
21
-
22
- $args = array();
23
- $args['paged'] = $paged;
24
- $args['per_page'] = $per_page;
25
- $args['ignored'] = (int)SQ_Classes_Tools::getOption('sq_google_show_ignored');
26
- $json = json_decode(SQ_Classes_Action::apiCall('sq/rank-checker/get-keywords', $args));
27
-
28
- if (isset($json->keywords)) {
29
- if(!empty($json->keywords)) {
30
- $this->listTable->set_pagination_args(array(
31
- 'total_items' => $json->total,
32
- 'total_pages' => ceil($json->total / $per_page),
33
- 'per_page' => $per_page
34
- ));
35
-
36
- $this->index = (($paged - 1) * $per_page);
37
- $this->keywords = $json->keywords;
38
- }else{
39
- $this->keywords = array();
40
- $this->listTable->set_pagination_args(array(
41
- 'total_items' => 0,
42
- 'total_pages' => 0,
43
- 'per_page' => $per_page
44
- ));
45
-
46
- $this->error = __('No keyword found yet.', _SQ_PLUGIN_NAME_);
47
- }
48
- }else{
49
- $this->keywords = array();
50
- $this->error = __("No connection with Squirrly Server", _SQ_PLUGIN_NAME_);
51
- }
52
- return $this;
53
- }
54
-
55
- /**
56
- * Called when action is triggered
57
- *
58
- * @return void
59
- */
60
- public function action() {
61
- parent::action();
62
- SQ_Classes_Tools::setHeader('json');
63
- switch (SQ_Classes_Tools::getValue('action')) {
64
- case 'sq_serp_showignore':
65
- if (!current_user_can('edit_posts')) {
66
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
67
- exit();
68
- }
69
-
70
- SQ_Classes_Tools::saveOptions('sq_google_show_ignored', (int)SQ_Classes_Tools::getValue('sq_show_ignored', 0));
71
- return;
72
- case 'sq_serp_ignore':
73
- if (!current_user_can('edit_posts')) {
74
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
75
- exit();
76
- }
77
-
78
- $keyword = (string)SQ_Classes_Tools::getValue('keyword', '');
79
- $active = (int)SQ_Classes_Tools::getValue('active', 1);
80
-
81
- if ($keyword <> '') {
82
- //delete all local keyword ranks
83
- SQ_Classes_ObjController::getClass('SQ_Models_SerpChecker')->deleteKeyword($keyword);
84
-
85
- //set ignore on API
86
- $args = array();
87
- $args['keyword'] = $keyword;
88
- $args['active'] = $active;
89
- echo SQ_Classes_Action::apiCall('sq/rank-checker/ignore-keyword', $args);
90
- } else {
91
- echo json_encode(array('error' => true));
92
- }
93
-
94
- break;
95
- case 'sq_serp_articlesearch':
96
- if (!current_user_can('edit_posts')) {
97
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
98
- exit();
99
- }
100
-
101
- $string = SQ_Classes_Tools::getValue('sSearch', '');
102
- $start = SQ_Classes_Tools::getValue('iDisplayStart', 0);
103
- $show = SQ_Classes_Tools::getValue('iDisplayLength', 10);
104
-
105
- $data = array();
106
-
107
- $posts = SQ_Classes_ObjController::getClass('SQ_Models_SerpChecker')->searchPost($string, array(), $start, $show);
108
- if (!empty($posts)) {
109
- foreach ($posts as $item) {
110
- $data[] = array('<span class="sq_item" id="' . $item->ID . '">' . $item->post_title . '</span>');
111
- }
112
- }
113
- echo json_encode(array('data' => $data));
114
-
115
- break;
116
-
117
- case 'sq_serp_addkeyword':
118
- $keyword = SQ_Classes_Tools::getValue('keyword', null);
119
-
120
- if (isset($keyword) && $keyword <> '') {
121
- $args = array();
122
- $args['permalink'] = home_url();
123
- $args['country'] = SQ_Classes_ObjController::getClass('SQ_Controllers_SerpChecker')->getCountry();
124
- $args['language'] = SQ_Classes_ObjController::getClass('SQ_Controllers_SerpChecker')->getLanguage();
125
- $args['keywords'] = json_encode(array($keyword));
126
- SQ_Classes_Action::apiCall('sq/rank-checker/save-keywords', $args);
127
- echo json_encode(array('sent' => true));
128
- } else {
129
- echo json_encode(array('error' => __('Could not find the Article in your Website', _SQ_PLUGIN_NAME_)));
130
- }
131
- break;
132
- }
133
- exit();
134
- }
135
-
136
-
137
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockSettings.php DELETED
@@ -1,92 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Account settings
5
- */
6
- class SQ_Core_BlockSettings extends SQ_Classes_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
-
11
- if(SQ_Classes_Tools::getOption('sq_api') <> '') {
12
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
13
- echo '<script type="text/javascript">
14
- jQuery(document).ready(function () {
15
- jQuery("#sq_settings").find("select[name=sq_google_country]").val("' . SQ_Classes_Tools::getOption('sq_google_country') . '");
16
- });
17
- </script>';
18
- }
19
- }
20
-
21
- /**
22
- * Called when Post action is triggered
23
- *
24
- * @return void
25
- */
26
- public function action() {
27
- parent::action();
28
-
29
-
30
- switch (SQ_Classes_Tools::getValue('action')) {
31
-
32
- case 'sq_settings_update':
33
- if (!current_user_can('manage_options')) {
34
- return;
35
- }
36
-
37
- if (SQ_Classes_Tools::getIsset('sq_post_types')) {
38
- SQ_Classes_Tools::$options['sq_post_types'] = array();
39
- foreach (SQ_Classes_Tools::getValue('sq_post_types') as $key) {
40
- array_push(SQ_Classes_Tools::$options['sq_post_types'], $key);
41
- }
42
- if (!in_array('product', get_post_types())) {
43
- array_push(SQ_Classes_Tools::$options['sq_post_types'], 'product');
44
- }
45
- }else{
46
- SQ_Classes_Tools::$options['sq_post_types'] = array();
47
- }
48
-
49
- SQ_Classes_Tools::saveOptions('sq_google_country', SQ_Classes_Tools::getValue('sq_google_country'));
50
- SQ_Classes_Tools::saveOptions('sq_google_country_strict', SQ_Classes_Tools::getValue('sq_google_country_strict'));
51
-
52
- if(SQ_Classes_Tools::getIsset('sq_google_ranksperhour')) {
53
- SQ_Classes_Tools::saveOptions('sq_google_ranksperhour', SQ_Classes_Tools::getValue('sq_google_ranksperhour'));
54
- }
55
- if(SQ_Classes_Tools::getIsset('sq_google_serpsperhour')) {
56
- SQ_Classes_Tools::saveOptions('sq_google_serpsperhour', SQ_Classes_Tools::getValue('sq_google_serpsperhour'));
57
- }
58
-
59
- SQ_Classes_Tools::saveOptions('sq_keyword_help', (int)SQ_Classes_Tools::getValue('sq_keyword_help'));
60
- SQ_Classes_Tools::saveOptions('sq_keyword_information', (int)SQ_Classes_Tools::getValue('sq_keyword_information'));
61
- SQ_Classes_Tools::saveOptions('sq_force_savepost', (int)SQ_Classes_Tools::getValue('sq_force_savepost'));
62
-
63
-
64
- SQ_Classes_Tools::saveOptions('sq_sla', (int)SQ_Classes_Tools::getValue('sq_sla'));
65
- SQ_Classes_Tools::saveOptions('sq_local_images', (int)SQ_Classes_Tools::getValue('sq_local_images'));
66
- SQ_Classes_Tools::saveOptions('sq_url_fix', (int)SQ_Classes_Tools::getValue('sq_url_fix'));
67
- SQ_Classes_Tools::saveOptions('sq_auto_robots', (int)SQ_Classes_Tools::getValue('sq_auto_robots'));
68
-
69
- //Save custom robots
70
- $robots = SQ_Classes_Tools::getValue('sq_robots_permission', '', true);
71
- $robots = explode(PHP_EOL, $robots);
72
- $robots = str_replace("\r", "", $robots);
73
-
74
- if (!empty($robots)) {
75
- $robots = array_unique($robots);
76
- SQ_Classes_Tools::saveOptions('sq_robots_permission', $robots);
77
- }
78
-
79
- SQ_Classes_Action::apiSaveSettings();
80
-
81
- if (SQ_Classes_Tools::isAjax()) {
82
- SQ_Classes_Tools::setHeader('json');
83
- echo json_encode(array('saved' => true));
84
- exit();
85
- } else {
86
- SQ_Classes_Tools::emptyCache();
87
- }
88
- break;
89
- }
90
- }
91
-
92
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockSettingsSeo.php DELETED
@@ -1,585 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Account settings
5
- */
6
- class SQ_Core_BlockSettingsSeo extends SQ_Classes_BlockController {
7
- public $post;
8
-
9
- function hookGetContent() {
10
- parent::preloadSettings();
11
-
12
- if (SQ_Classes_Tools::getOption('sq_api') <> '') {
13
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('frontmenu.css');
14
-
15
- //Show Import Settings after Install if needed
16
- if (current_user_can('manage_options') && get_transient('sq_import')) {
17
- $platforms = SQ_Classes_ObjController::getClass('SQ_Controllers_Menu')->getImportList();
18
- $imports = array();
19
- if (!empty($platforms)) {
20
- foreach ($platforms as $path => $settings) {
21
- if ($path !== 'squirrly-seo') {
22
- $imports[] = ucfirst(SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->getName($path));
23
- }
24
- }
25
-
26
- if (!empty($imports)) {
27
- SQ_Classes_Error::setError(sprintf(__('You can now import into Squirrly SEO all the SEO Settings from %s', _SQ_PLUGIN_NAME_), '<a href="' . admin_url('admin.php?page=sq_import#import') . '">' . join(', ', $imports) . '</a>'));
28
- }
29
- }
30
- }
31
-
32
- //Upgrade Sitemap List
33
- $sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
34
- if (!isset($sitemap['sitemap-attachment'])) $sitemap['sitemap-attachment'] = array('sitemap-attachments.xml', 0);
35
- SQ_Classes_Tools::saveOptions('sq_sitemap', $sitemap);
36
-
37
- /* Force call of error display */
38
- SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
39
- echo '<script type="text/javascript">
40
- var __snippetshort = "' . __('Too short', _SQ_PLUGIN_NAME_) . '";
41
- var __snippetlong = "' . __('Too long', _SQ_PLUGIN_NAME_) . '";
42
- jQuery(document).ready(function () {
43
- jQuery("#sq_settings").find("select[name=sq_og_locale]").val("' . SQ_Classes_Tools::getOption('sq_og_locale') . '");
44
- });
45
- </script>';
46
- }
47
-
48
- }
49
-
50
- function hookHead() {
51
- if (function_exists('wp_enqueue_media')) {
52
- wp_enqueue_media();
53
- }
54
- parent::hookHead();
55
- }
56
-
57
- /**
58
- * Called when Post action is triggered
59
- *
60
- * @return void
61
- */
62
- public function action() {
63
- parent::action();
64
- switch (SQ_Classes_Tools::getValue('action')) {
65
- case 'sq_settingsseo_option':
66
- SQ_Classes_Tools::setHeader('json');
67
-
68
- if (!current_user_can('manage_options')) {
69
- echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
70
- exit();
71
- }
72
-
73
- $option = SQ_Classes_Tools::getValue('option');
74
- $value = (int)SQ_Classes_Tools::getValue('value');
75
- SQ_Classes_Tools::saveOptions($option, $value);
76
-
77
- echo json_encode(array('saved' => true));
78
- exit();
79
- case 'sq_settingsseo_update':
80
- if (!current_user_can('manage_options')) {
81
- return;
82
- }
83
-
84
- if (!SQ_Classes_Tools::getIsset('sq_use')) {
85
- return;
86
- }
87
- SQ_Classes_Tools::saveOptions('sq_use', (int)SQ_Classes_Tools::getValue('sq_use'));
88
- SQ_Classes_Tools::saveOptions('sq_auto_title', (int)SQ_Classes_Tools::getValue('sq_auto_title'));
89
- SQ_Classes_Tools::saveOptions('sq_auto_description', (int)SQ_Classes_Tools::getValue('sq_auto_description'));
90
- SQ_Classes_Tools::saveOptions('sq_auto_keywords', (int)SQ_Classes_Tools::getValue('sq_auto_keywords'));
91
- SQ_Classes_Tools::saveOptions('sq_keywordtag', (int)SQ_Classes_Tools::getValue('sq_keywordtag'));
92
- SQ_Classes_Tools::saveOptions('sq_use_frontend', (int)SQ_Classes_Tools::getValue('sq_use_frontend'));
93
-
94
- if (SQ_Classes_Tools::getIsset('sq_post_types')) {
95
- SQ_Classes_Tools::$options['sq_exclude_post_types'] = array();
96
- foreach (SQ_Classes_Tools::getValue('sq_post_types') as $key) {
97
- array_push(SQ_Classes_Tools::$options['sq_exclude_post_types'], $key);
98
- }
99
- } else {
100
- SQ_Classes_Tools::$options['sq_exclude_post_types'] = array();
101
- }
102
-
103
-
104
- SQ_Classes_Tools::saveOptions('sq_auto_canonical', (int)SQ_Classes_Tools::getValue('sq_auto_canonical'));
105
- SQ_Classes_Tools::saveOptions('sq_auto_noindex', (int)SQ_Classes_Tools::getValue('sq_auto_noindex'));
106
-
107
-
108
- SQ_Classes_Tools::saveOptions('sq_analytics_google_js', SQ_Classes_Tools::getValue('sq_analytics_google_js'));
109
- SQ_Classes_Tools::saveOptions('sq_auto_amp', (int)SQ_Classes_Tools::getValue('sq_auto_amp'));
110
-
111
- SQ_Classes_Tools::saveOptions('sq_auto_meta', (int)SQ_Classes_Tools::getValue('sq_auto_meta'));
112
- SQ_Classes_Tools::saveOptions('sq_auto_favicon', (int)SQ_Classes_Tools::getValue('sq_auto_favicon'));
113
-
114
- ///////////////////////////////////////////
115
- /////////////////////////////SOCIAL OPTION
116
- SQ_Classes_Tools::saveOptions('sq_auto_facebook', (int)SQ_Classes_Tools::getValue('sq_auto_facebook'));
117
- SQ_Classes_Tools::saveOptions('sq_auto_twitter', (int)SQ_Classes_Tools::getValue('sq_auto_twitter'));
118
- SQ_Classes_Tools::saveOptions('sq_og_locale', SQ_Classes_Tools::getValue('sq_og_locale'));
119
-
120
- $socials = array_merge(SQ_Classes_Tools::getOption('socials'), SQ_Classes_Tools::getValue('sq_socials', array()));
121
-
122
- if (isset($socials['twitter_site'])) $socials['twitter_site'] = $this->model->checkTwitterAccount($socials['twitter_site']);
123
- if (isset($socials['twitter_site'])) $socials['twitter'] = $this->model->checkTwitterAccountName($socials['twitter_site']);
124
- if (isset($socials['facebook_site'])) $socials['facebook_site'] = $this->model->checkFacebookAccount($socials['facebook_site']);
125
- if (isset($socials['pinterest_url'])) $socials['pinterest_url'] = $this->model->checkPinterestAccount($socials['pinterest_url']);
126
- if (isset($socials['instagram_url'])) $socials['instagram_url'] = $this->model->checkInstagramAccount($socials['instagram_url']);
127
- if (isset($socials['linkedin_url'])) $socials['linkedin_url'] = $this->model->checkLinkeinAccount($socials['linkedin_url']);
128
- if (isset($socials['myspace_url'])) $socials['myspace_url'] = $this->model->checkMySpaceAccount($socials['myspace_url']);
129
- if (isset($socials['youtube_url'])) $socials['youtube_url'] = $this->model->checkYoutubeAccount($socials['youtube_url']);
130
-
131
- $fb_admins = SQ_Classes_Tools::getValue('sq_fb_admins', array());
132
- $socials['fb_admins'] = array();
133
- if (!empty($fb_admins)) {
134
- $fb_admins = array_unique($fb_admins);
135
- foreach ($fb_admins as $index => $value) {
136
- if (isset($value) && $value == '') {
137
- unset($socials['fb_admins'][$index]);
138
- } else {
139
- $socials['fb_admins'][$index]['id'] = $this->model->checkFavebookAdminCode($value);
140
- }
141
- }
142
- }
143
-
144
- //get the facebook app id for sharing
145
- if (SQ_Classes_Tools::getIsset('sq_fbadminapp')) $socials['fbadminapp'] = SQ_Classes_Tools::getValue('sq_fbadminapp');
146
- if (SQ_Classes_Tools::getIsset('twitter_card_type')) $socials['twitter_card_type'] = SQ_Classes_Tools::getValue('twitter_card_type');
147
-
148
-
149
- SQ_Classes_Tools::saveOptions("socials", $socials);
150
-
151
- ///////////////////////////////////////////
152
- /////////////////////////////FIRST PAGE OPTIMIZATION
153
- if ($pageId = get_option('page_on_front')) {
154
- $sq_hash = md5($pageId);
155
- } elseif ($post_id = get_option('page_for_posts')) {
156
- $sq_hash = md5($pageId);
157
- } else {
158
- $sq_hash = md5('wp_homepage');
159
- }
160
-
161
- if ($sq_hash <> '') {
162
- $url = home_url();
163
- $sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($sq_hash);
164
-
165
- $sq->doseo = 1;
166
- $sq->title = urldecode(SQ_Classes_Tools::getValue('sq_fp_title', false));
167
- $sq->description = urldecode(SQ_Classes_Tools::getValue('sq_fp_description', false));
168
- $sq->keywords = SQ_Classes_Tools::getValue('sq_fp_keywords', false);
169
- $sq->og_media = SQ_Classes_Tools::getValue('sq_fp_ogimage', false);
170
-
171
- $this->model->db_insert(
172
- $url,
173
- $sq_hash,
174
- (int)$pageId,
175
- maybe_serialize($sq->toArray()),
176
- gmdate('Y-m-d H:i:s')
177
- );
178
- }
179
-
180
- ///////////////////////////////////////////
181
- /////////////////////////////SITEMAP OPTION
182
- SQ_Classes_Tools::saveOptions('sq_auto_sitemap', (int)SQ_Classes_Tools::getValue('sq_auto_sitemap'));
183
- SQ_Classes_Tools::saveOptions('sq_auto_feed', (int)SQ_Classes_Tools::getValue('sq_auto_feed'));
184
- SQ_Classes_Tools::saveOptions('sq_sitemap_frequency', SQ_Classes_Tools::getValue('sq_sitemap_frequency'));
185
- SQ_Classes_Tools::saveOptions('sq_sitemap_ping', (int)SQ_Classes_Tools::getValue('sq_sitemap_ping'));
186
- SQ_Classes_Tools::saveOptions('sq_sitemap_perpage', (int)SQ_Classes_Tools::getValue('sq_sitemap_perpage'));
187
- SQ_Classes_Tools::saveOptions('sq_sitemap_combinelangs', (int)SQ_Classes_Tools::getValue('sq_sitemap_combinelangs'));
188
-
189
-
190
- foreach (SQ_Classes_Tools::$options['sq_sitemap'] as $key => $value) {
191
- if ($key == 'sitemap') {
192
- continue;
193
- }
194
- SQ_Classes_Tools::$options['sq_sitemap'][$key][1] = 0;
195
- if ($key == 'sitemap-product' && !$this->model->isEcommerce()) {
196
- SQ_Classes_Tools::$options['sq_sitemap'][$key][1] = 2;
197
- }
198
- }
199
- if (SQ_Classes_Tools::getIsset('sq_sitemap')) {
200
- foreach (SQ_Classes_Tools::getValue('sq_sitemap') as $key) {
201
- if (isset(SQ_Classes_Tools::$options['sq_sitemap'][$key][1])) {
202
- SQ_Classes_Tools::$options['sq_sitemap'][$key][1] = 1;
203
- }
204
- }
205
- }
206
-
207
- foreach (SQ_Classes_Tools::$options['sq_sitemap_show'] as $key => $value) {
208
- SQ_Classes_Tools::$options['sq_sitemap_show'][$key] = 0;
209
- }
210
- if (SQ_Classes_Tools::getIsset('sq_sitemap_show')) {
211
- foreach (SQ_Classes_Tools::getValue('sq_sitemap_show') as $key) {
212
- if (isset(SQ_Classes_Tools::$options['sq_sitemap_show'][$key])) {
213
- SQ_Classes_Tools::$options['sq_sitemap_show'][$key] = 1;
214
- }
215
- }
216
- }
217
-
218
- ///////////////////////////////////////////
219
- ///////SAVE THE CODE
220
- $codes = array_merge(SQ_Classes_Tools::getOption('codes'), SQ_Classes_Tools::getValue('sq_codes', array()));
221
-
222
- if (!empty($codes)) {
223
- //if (isset($codes['facebook_pixel'])) $codes['facebook_pixel'] = $codes['facebook_pixel'];
224
- if (isset($codes['google_analytics'])) $codes['google_analytics'] = $this->model->checkGoogleAnalyticsCode($codes['google_analytics']);
225
- if (isset($codes['pinterest_verify'])) $codes['pinterest_verify'] = $this->model->checkPinterestCode($codes['pinterest_verify']);
226
- if (isset($codes['google_wt'])) $codes['google_wt'] = $this->model->checkGoogleWTCode($codes['google_wt']);
227
- if (isset($codes['bing_wt'])) $codes['bing_wt'] = $this->model->checkBingWTCode($codes['bing_wt']);
228
- if (isset($codes['alexa_verify'])) $codes['alexa_verify'] = $this->model->checkBingWTCode($codes['alexa_verify']);
229
-
230
- SQ_Classes_Tools::saveOptions("codes", $codes);
231
- }
232
-
233
-
234
- ///////////////////////////////////////////JSONLD
235
- SQ_Classes_Tools::saveOptions('sq_auto_jsonld', (int)SQ_Classes_Tools::getValue('sq_auto_jsonld'));
236
- if (SQ_Classes_Tools::getIsset('sq_jsonld_type') && isset(SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')])) {
237
-
238
- foreach (SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')] as $key => $value) {
239
- if (isset(SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')][$key])) {
240
- SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')][$key] = SQ_Classes_Tools::getValue('sq_jsonld_' . $key);
241
- }
242
- }
243
- if (isset(SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone']) &&
244
- SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone'] <> ''
245
- ) {
246
- SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone'] = '+' . str_replace('+', '', SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone']);
247
- }
248
- }
249
- SQ_Classes_Tools::saveOptions('sq_jsonld_type', SQ_Classes_Tools::getValue('sq_jsonld_type'));
250
-
251
- ///////////////////////////////////////////
252
- /////////////////////////////FAVICON OPTION
253
-
254
- /* if there is an icon to upload */
255
- if (!empty($_FILES['favicon'])) {
256
-
257
- $return = $this->model->addFavicon($_FILES['favicon']);
258
- if ($return['favicon'] <> '') {
259
- SQ_Classes_Tools::saveOptions('favicon', strtolower(basename($return['favicon'])));
260
- }
261
- if ($return['message'] <> '') {
262
- define('SQ_MESSAGE_FAVICON', $return['message']);
263
- SQ_Classes_Error::setError(SQ_MESSAGE_FAVICON . " <br /> ");
264
- }
265
- }
266
-
267
- //Save the api settings for tutorial
268
- SQ_Classes_Action::apiSaveSettings();
269
-
270
- if (SQ_Classes_Tools::isAjax()) {
271
- SQ_Classes_Tools::setHeader('json');
272
- echo json_encode(array('saved' => true));
273
- exit();
274
- } else {
275
- //Update the rewrite rules with the new options
276
- add_filter('rewrite_rules_array', array($this, 'rewrite_rules'), 999, 1);
277
- //Flush the rewrite with the new favicon and sitemap
278
- flush_rewrite_rules();
279
- //empty the cache on settings changed
280
- SQ_Classes_Tools::emptyCache();
281
-
282
- }
283
- break;
284
- case 'sq_setstickysla':
285
- SQ_Classes_Tools::saveUserMeta('sq_auto_sticky', (int)SQ_Classes_Tools::getValue('sq_auto_sticky'));
286
-
287
- break;
288
- case 'sq_checkissues':
289
- if (!current_user_can('manage_options')) {
290
- return;
291
- }
292
-
293
- SQ_Classes_Tools::saveOptions('sq_checkedissues', 1);
294
-
295
- //Save the api settings for tutorial
296
- SQ_Classes_Action::apiSaveSettings();
297
-
298
- /* Load the error class */
299
- SQ_Classes_Tools::checkErrorSettings();
300
-
301
- break;
302
- case 'sq_fixautoseo':
303
- if (!current_user_can('manage_options')) {
304
- return;
305
- }
306
-
307
- SQ_Classes_Tools::saveOptions('sq_use', 1);
308
-
309
- //Save the api settings for tutorial
310
- SQ_Classes_Action::apiSaveSettings();
311
-
312
- break;
313
- case 'sq_fixprivate':
314
- if (!current_user_can('manage_options')) {
315
- return;
316
- }
317
-
318
- update_option('blog_public', 1);
319
-
320
- //Save the api settings for tutorial
321
- SQ_Classes_Action::apiSaveSettings();
322
-
323
- break;
324
- case 'sq_fixcomments':
325
- if (!current_user_can('manage_options')) {
326
- return;
327
- }
328
-
329
- update_option('comments_notify', 1);
330
-
331
- //Save the api settings for tutorial
332
- SQ_Classes_Action::apiSaveSettings();
333
-
334
- break;
335
- case 'sq_fixpermalink':
336
- if (!current_user_can('manage_options')) {
337
- return;
338
- }
339
-
340
- $GLOBALS['wp_rewrite'] = new WP_Rewrite();
341
- global $wp_rewrite;
342
- $permalink_structure = ((get_option('permalink_structure') <> '') ? get_option('permalink_structure') : '/') . "%postname%/";
343
- $wp_rewrite->set_permalink_structure($permalink_structure);
344
- $permalink_structure = get_option('permalink_structure');
345
-
346
- flush_rewrite_rules();
347
- break;
348
- case 'sq_fix_ogduplicate':
349
- if (!current_user_can('manage_options')) {
350
- return;
351
- }
352
-
353
- SQ_Classes_Tools::saveOptions('sq_auto_facebook', 0);
354
-
355
- //Save the api settings for tutorial
356
- SQ_Classes_Action::apiSaveSettings();
357
-
358
- break;
359
- case 'sq_fix_tcduplicate':
360
- if (!current_user_can('manage_options')) {
361
- return;
362
- }
363
-
364
- SQ_Classes_Tools::saveOptions('sq_auto_twitter', 0);
365
-
366
- //Save the api settings for tutorial
367
- SQ_Classes_Action::apiSaveSettings();
368
-
369
- break;
370
- case 'sq_fix_titleduplicate':
371
- if (!current_user_can('manage_options')) {
372
- return;
373
- }
374
-
375
- SQ_Classes_Tools::saveOptions('sq_auto_title', 0);
376
-
377
- //Save the api settings for tutorial
378
- SQ_Classes_Action::apiSaveSettings();
379
-
380
- break;
381
- case 'sq_fix_descduplicate':
382
- if (!current_user_can('manage_options')) {
383
- return;
384
- }
385
-
386
- SQ_Classes_Tools::saveOptions('sq_auto_description', 0);
387
-
388
- //Save the api settings for tutorial
389
- SQ_Classes_Action::apiSaveSettings();
390
-
391
- break;
392
- case 'sq_active_help' :
393
- if (!current_user_can('manage_options')) {
394
- return;
395
- }
396
- SQ_Classes_Tools::setHeader('json');
397
-
398
- SQ_Classes_Tools::saveOptions('active_help', SQ_Classes_Tools::getValue('active_help'));
399
- exit();
400
- case 'sq_warnings_off':
401
- if (!current_user_can('manage_options')) {
402
- return;
403
- }
404
- SQ_Classes_Tools::setHeader('json');
405
- SQ_Classes_Tools::saveOptions('ignore_warn', 1);
406
- echo json_encode(array('saved' => true));
407
- exit();
408
- case 'sq_google_alert_trial':
409
- if (!current_user_can('manage_options')) {
410
- return;
411
- }
412
- SQ_Classes_Tools::setHeader('json');
413
- SQ_Classes_Tools::saveOptions('sq_google_alert_trial', 0);
414
- echo json_encode(array('saved' => true));
415
- exit();
416
- case 'sq_copyright_agreement':
417
- if (!current_user_can('manage_options')) {
418
- return;
419
- }
420
-
421
- SQ_Classes_Tools::saveOptions('sq_copyright_agreement', 1);
422
- break;
423
- case 'sq_get_snippet':
424
-
425
- if (SQ_Classes_Tools::getValue('url') <> '') {
426
- $url = SQ_Classes_Tools::getValue('url');
427
- } else {
428
- $url = get_bloginfo('url');
429
- }
430
- $snippet = SQ_Classes_Tools::getSnippet($url);
431
-
432
- SQ_Classes_Tools::setHeader('json');
433
- echo json_encode($snippet);
434
- exit();
435
- case 'sq_backup':
436
- if (!current_user_can('manage_options')) {
437
- return;
438
- }
439
-
440
- SQ_Classes_Tools::setHeader('text');
441
- header("Content-Disposition: attachment; filename=squirrly-settings-" . gmdate('Y-m-d') . ".txt");
442
-
443
- if (function_exists('base64_encode')) {
444
- echo base64_encode(json_encode(SQ_Classes_Tools::$options));
445
- } else {
446
- echo json_encode(SQ_Classes_Tools::$options);
447
- }
448
- exit();
449
- break;
450
- case 'sq_restore':
451
- if (!current_user_can('manage_options')) {
452
- return;
453
- }
454
-
455
- if (!empty($_FILES['sq_options']) && $_FILES['sq_options']['tmp_name'] <> '') {
456
- $fp = fopen($_FILES['sq_options']['tmp_name'], 'rb');
457
- $options = '';
458
- while (($line = fgets($fp)) !== false) {
459
- $options .= $line;
460
- }
461
- try {
462
- if (function_exists('base64_encode') && base64_decode($options) <> '') {
463
- $options = @base64_decode($options);
464
- }
465
- $options = json_decode($options, true);
466
- if (is_array($options) && isset($options['sq_api'])) {
467
- if (SQ_Classes_Tools::getOption('sq_api') <> '') {
468
- $options['sq_api'] = SQ_Classes_Tools::getOption('sq_api');
469
- }
470
- SQ_Classes_Tools::$options = $options;
471
- SQ_Classes_Tools::saveOptions();
472
-
473
- //Check if there is an old backup from Squirrly
474
- SQ_Classes_Tools::getOptions();
475
- SQ_Classes_Tools::checkUpgrade();
476
-
477
- //Update the rewrite rules with the new options
478
- add_filter('rewrite_rules_array', array($this, 'rewrite_rules'), 999, 1);
479
- //Flush the rewrite with the new favicon and sitemap
480
- flush_rewrite_rules();
481
-
482
- SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
483
- } else {
484
- SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
485
- }
486
- } catch (Exception $e) {
487
- SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
488
- }
489
- } else {
490
- SQ_Classes_Error::setError(__('Error! You have to enter a previous saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
491
- }
492
- break;
493
- case 'sq_backup_sql':
494
- if (!current_user_can('manage_options')) {
495
- return;
496
- }
497
-
498
- header('Content-Type: application/octet-stream');
499
- header("Content-Transfer-Encoding: Binary");
500
- header("Content-Disposition: attachment; filename=squirrly-seo-" . gmdate('Y-m-d') . ".sql");
501
-
502
- if (function_exists('base64_encode')) {
503
- echo base64_encode($this->model->createTableBackup());
504
- } else {
505
- echo $this->model->createTableBackup();
506
- }
507
- exit();
508
- break;
509
- case 'sq_restore_sql':
510
- if (!current_user_can('manage_options')) {
511
- return;
512
- }
513
-
514
- if (!empty($_FILES['sq_sql']) && $_FILES['sq_sql']['tmp_name'] <> '') {
515
- $fp = fopen($_FILES['sq_sql']['tmp_name'], 'rb');
516
- $sql_file = '';
517
- while (($line = fgets($fp)) !== false) {
518
- $sql_file .= $line;
519
- }
520
-
521
- if (function_exists('base64_encode')) {
522
- $sql_file = @base64_decode($sql_file);
523
- }
524
-
525
- if ($sql_file <> '' && strpos($sql_file, 'CREATE TABLE IF NOT EXISTS') !== false) {
526
- try {
527
- $queries = explode(";\n", $sql_file);
528
- $this->model->executeSql($queries);
529
- SQ_Classes_Error::setError(__('Great! The SEO backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
530
-
531
- } catch (Exception $e) {
532
- SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
533
- }
534
- } else {
535
- SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
536
- }
537
- } else {
538
- SQ_Classes_Error::setError(__('Error! You have to enter a previous saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
539
- }
540
- break;
541
- case 'sq_dataupgrade':
542
- //Check if there is an old backup from Squirrly
543
- SQ_Classes_Tools::getOptions();
544
- SQ_Classes_Tools::checkUpgrade();
545
- SQ_Classes_Error::setError(__('Great! Squirrly Data Settings is up to date now.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
546
-
547
- break;
548
- case 'sq_resetsettings':
549
- if (!current_user_can('manage_options')) {
550
- return;
551
- }
552
-
553
- SQ_Classes_Tools::$options = SQ_Classes_Tools::getOptions('reset');
554
- SQ_Classes_Tools::saveOptions();
555
- break;
556
- }
557
- }
558
-
559
- /**
560
- * Add the favicon in the rewrite rule
561
- * @param type $wp_rewrite
562
- */
563
- public function rewrite_rules($wp_rewrite) {
564
- $rules = array();
565
- if (SQ_Classes_Tools::getOption('sq_use') == 1) {
566
-
567
- //For Favicon
568
- if (SQ_Classes_Tools::getOption('sq_auto_favicon') == 1) {
569
- $rules['favicon\.ico$'] = 'index.php?sq_get=favicon';
570
- $rules['favicon\.icon$'] = 'index.php?sq_get=favicon';
571
- $rules['touch-icon\.png$'] = 'index.php?sq_get=touchicon';
572
- foreach ($this->model->appleSizes as $size) {
573
- $size = (int)$size;
574
- $rules['touch-icon' . $size . '\.png$'] = 'index.php?sq_get=touchicon&sq_size=' . $size;
575
- }
576
- }
577
-
578
- if (SQ_Classes_Tools::getOption('sq_auto_feed') == 1) {
579
- $rules['sqfeedcss$'] = 'index.php?sq_get=feedcss';
580
- }
581
- }
582
- return array_merge($rules, $wp_rewrite);
583
- }
584
-
585
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/BlockStats.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockStats extends SQ_Classes_BlockController {
4
+ var $stats = array();
5
+
6
+ function init() {
7
+ parent::init();
8
+
9
+ if(isset($this->stats) && isset($this->stats)) {
10
+ echo $this->getView('Blocks/Stats');
11
+ }
12
+ }
13
+
14
+ function hookGetContent() {
15
+ //get the stats from Dashboard
16
+ $this->stats = SQ_Classes_RemoteController::getStats();
17
+ }
18
+
19
+
20
+ }
core/BlockSupport.php CHANGED
@@ -2,28 +2,32 @@
2
 
3
  class SQ_Core_BlockSupport extends SQ_Classes_BlockController {
4
 
 
 
 
 
 
5
  /**
6
  * Called when Post action is triggered
7
  *
8
  * @return void
9
  */
10
  public function action() {
11
- parent::action();
12
  global $current_user;
13
- switch (SQ_Classes_Tools::getValue('action')) {
14
  case 'sq_feedback':
15
  $return = array();
16
 
17
- SQ_Classes_Tools::saveOptions('sq_feedback', 1);
18
 
19
  $line = "\n" . "________________________________________" . "\n";
20
- $from = SQ_Classes_Tools::getOption('sq_support_email');
21
  if ($from == '') {
22
  $from = $current_user->user_email;
23
  }
24
  $subject = __('Plugin Feedback', _SQ_PLUGIN_NAME_);
25
- $face = SQ_Classes_Tools::getValue('feedback');
26
- $message = SQ_Classes_Tools::getValue('message');
27
 
28
  if ($message <> '' || (int)$face > 0) {
29
  switch ($face) {
@@ -64,47 +68,7 @@ class SQ_Core_BlockSupport extends SQ_Classes_BlockController {
64
  $return['error'] = true;
65
  }
66
 
67
- SQ_Classes_Tools::setHeader('json');
68
- echo json_encode($return);
69
- break;
70
-
71
- case 'sq_support':
72
- $return = array();
73
- $versions = '';
74
-
75
-
76
- $versions .= 'Url:' . get_bloginfo('wpurl') . "\n";
77
- $versions .= 'Squirrly version: ' . SQ_VERSION_ID . "\n";
78
- $versions .= 'Wordpress version: ' . WP_VERSION_ID . "\n";
79
- $versions .= 'PHP version: ' . PHP_VERSION_ID . "\n";
80
-
81
- $line = "\n" . "________________________________________" . "\n";
82
- $from = SQ_Classes_Tools::getValue('sq_support_email', $current_user->user_email);
83
- SQ_Classes_Tools::saveOptions('sq_support_email', $from);
84
-
85
- $subject = SQ_Classes_Tools::getValue('subject', __('Plugin Support', _SQ_PLUGIN_NAME_));
86
- $message = SQ_Classes_Tools::getValue('message');
87
-
88
- if ($message <> '') {
89
- $message .= $line;
90
- $message .= $versions;
91
-
92
- $headers[] = 'From: ' . $from . ' <' . $from . '>';
93
-
94
- //$this->error='buuum';
95
- if (wp_mail(_SQ_SUPPORT_EMAIL_, $subject, $message, $headers)) {
96
- $return['message'] = __('Message sent. Thank you!', _SQ_PLUGIN_NAME_);
97
- $return['success'] = true;
98
- } else {
99
- $return['message'] = __('Could not send the email. Make sure you can send emails from your blog.', _SQ_PLUGIN_NAME_);
100
- $return['error'] = true;
101
- }
102
- } else {
103
- $return['message'] = __('No message.', _SQ_PLUGIN_NAME_);
104
- $return['error'] = true;
105
- }
106
-
107
- header('Content-Type: application/json');
108
  echo json_encode($return);
109
  break;
110
  }
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
  *
13
  * @return void
14
  */
15
  public function action() {
 
16
  global $current_user;
17
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
18
  case 'sq_feedback':
19
  $return = array();
20
 
21
+ SQ_Classes_Helpers_Tools::saveOptions('sq_feedback', 1);
22
 
23
  $line = "\n" . "________________________________________" . "\n";
24
+ $from = SQ_Classes_Helpers_Tools::getOption('sq_support_email');
25
  if ($from == '') {
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) {
68
  $return['error'] = true;
69
  }
70
 
71
+ SQ_Classes_Helpers_Tools::setHeader('json');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  echo json_encode($return);
73
  break;
74
  }
core/BlockToolbar.php CHANGED
@@ -1,4 +1,11 @@
1
  <?php
 
2
  class SQ_Core_BlockToolbar extends SQ_Classes_BlockController {
3
 
4
- }
 
 
 
 
 
 
1
  <?php
2
+
3
  class SQ_Core_BlockToolbar extends SQ_Classes_BlockController {
4
 
5
+ function init() {
6
+ echo $this->getView('Blocks/Toolbar');
7
+ }
8
+
9
+ function hookGetContent() { }
10
+
11
+ }
core/Blocklogin.php CHANGED
@@ -2,13 +2,15 @@
2
 
3
  class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
4
 
 
 
5
  public function init() {
6
  /* If logged in, then return */
7
- if (SQ_Classes_Tools::getOption('sq_api') <> '')
8
  return;
9
- SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('menu');
10
 
11
- parent::init();
12
  }
13
 
14
  /**
@@ -17,7 +19,7 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
17
  */
18
  public function action() {
19
  parent::action();
20
- switch (SQ_Classes_Tools::getValue('action')) {
21
  //login action
22
  case 'sq_login':
23
  $this->squirrlyLogin();
@@ -27,18 +29,6 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
27
  case 'sq_register':
28
  $this->squirrlyRegister();
29
  break;
30
-
31
- //reset the token action
32
- case 'sq_reset':
33
- SQ_Classes_Tools::saveOptions('sq_api', '');
34
- $return = array();
35
- $return['reset'] = 'success';
36
-
37
- //Set the header for json reply
38
- SQ_Classes_Tools::setHeader('json');
39
- echo json_encode($return);
40
- //force exit
41
- exit();
42
  }
43
  }
44
 
@@ -47,112 +37,110 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
47
  * @global string $current_user
48
  */
49
  public function squirrlyRegister() {
50
- global $current_user;
51
- //set return to null object as default
52
- $return = (object)NULL;
53
- //api responce variable
54
- $responce = '';
55
  //post arguments
56
  $args = array();
57
 
58
- //Check if email is set
59
- if (SQ_Classes_Tools::getValue('email') <> '') {
60
- $args['name'] = '';
61
- $args['user'] = SQ_Classes_Tools::getValue('email');
62
- $args['email'] = SQ_Classes_Tools::getValue('email');
63
- }
64
-
65
  //if email is set
66
- if ($args['email'] <> '') {
67
- $responce = SQ_Classes_Action::apiCall('sq/register', $args);
 
 
68
 
69
  //create an object from json responce
70
- if (is_object(json_decode($responce)))
71
- $return = json_decode($responce);
72
-
73
- //add the responce in msg for debugging in case of error
74
- $return->msg = $responce;
75
-
76
- //check if token is set and save it
77
- if (isset($return->token)) {
78
- SQ_Classes_Tools::saveOptions('sq_api', $return->token);
79
- SQ_Classes_Action::apiSaveSettings();
80
- } elseif (!empty($return->error)) {
81
- //if an error is throw then ...
82
- switch ($return->error) {
83
  case 'alreadyregistered':
84
- $return->info = sprintf(__('We found your email, so it means you already have a Squirrly.co account. Please login with your Squirrly Email. If you forgot your password click %shere%s', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?action=lostpassword" target="_blank">', '</a>');
85
  break;
86
  case 'invalidemail':
87
- $return->info = __('Your email is not valid. Please enter a valid email', _SQ_PLUGIN_NAME_);
88
  break;
89
  default:
90
- $return->info = __('We could not create your account. Please enter a valid email ', _SQ_PLUGIN_NAME_);
91
  break;
92
  }
 
 
 
 
 
 
 
 
 
 
 
93
  } else {
94
- //if unknown error
95
- $return->error = sprintf(__('Error: Couldn\'t connect to host :( . Please contact your site\'s webhost (or webmaster) and request them to add http://api.squirrly.co/ to their IP whitelist.', _SQ_PLUGIN_NAME_), _SQ_API_URL_);
 
 
 
 
96
  }
97
- } else
98
- $return->error = sprintf(__('Could not send your informations to squirrly. Please register %smanually%s.', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?action=register" target="_blank">', '</a>');
 
99
 
100
- //Set the header to json
101
- SQ_Classes_Tools::setHeader('json');
102
- echo json_encode($return); //transform object in json and show it
103
 
104
- exit();
105
  }
106
 
107
  /**
108
  * Login a user to Squirrly and get the token
109
  */
110
  public function squirrlyLogin() {
111
- //set return to null object as default
112
- $return = (object)NULL;
113
- //api responce variable
114
- $responce = '';
115
-
116
- //get the user and password
117
- $args['user'] = SQ_Classes_Tools::getValue('user', null, true);
118
- $args['password'] = $_POST['password'];
119
 
120
- if ($args['user'] <> '' && $args['password'] <> '') {
121
  //get the responce from server on login call
122
- $responce = SQ_Classes_Action::apiCall('sq/login', $args);
 
123
 
124
- //create an object from json responce
125
- if (is_object(json_decode($responce)))
126
- $return = json_decode($responce);
127
-
128
- //add the responce in msg for debugging in case of error
129
- $return->msg = $responce;
130
-
131
- //check if token is set and save it
132
- if (isset($return->token)) {
133
- SQ_Classes_Tools::saveOptions('sq_api', $return->token);
134
- SQ_Classes_Action::apiSaveSettings();
135
- } elseif (!empty($return->error)) {
136
- //if an error is throw then ...
137
- switch ($return->error) {
138
  case 'badlogin':
139
- $return->error = __('Wrong email or password!', _SQ_PLUGIN_NAME_);
140
  break;
141
  case 'multisite':
142
- $return->error = __('You can use this account only for the URL you registered first!', _SQ_PLUGIN_NAME_);
 
 
 
143
  break;
144
  }
145
- } else
 
 
 
 
 
 
 
 
 
 
 
146
  //if unknown error
147
- $return->error = __('An error occured.', _SQ_PLUGIN_NAME_);
148
- } else
149
- $return->error = __('Both fields are required.', _SQ_PLUGIN_NAME_);
 
 
 
 
150
 
151
- //Set the header to json
152
- SQ_Classes_Tools::setHeader('json');
153
- echo json_encode($return);
154
 
155
- exit();
156
  }
157
 
158
  }
2
 
3
  class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
4
 
5
+ public $message;
6
+
7
  public function init() {
8
  /* If logged in, then return */
9
+ if (SQ_Classes_Helpers_Tools::getOption('sq_api') <> '') {
10
  return;
11
+ }
12
 
13
+ echo $this->getView('Blocks/Login');
14
  }
15
 
16
  /**
19
  */
20
  public function action() {
21
  parent::action();
22
+ switch (SQ_Classes_Helpers_Tools::getValue('action')) {
23
  //login action
24
  case 'sq_login':
25
  $this->squirrlyLogin();
29
  case 'sq_register':
30
  $this->squirrlyRegister();
31
  break;
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
  }
34
 
37
  * @global string $current_user
38
  */
39
  public function squirrlyRegister() {
 
 
 
 
 
40
  //post arguments
41
  $args = array();
42
 
 
 
 
 
 
 
 
43
  //if email is set
44
+ if (SQ_Classes_Helpers_Tools::getIsset('email')) {
45
+ $args['name'] = '';
46
+ $args['user'] = SQ_Classes_Helpers_Tools::getValue('email', '');
47
+ $args['email'] = SQ_Classes_Helpers_Tools::getValue('email', '');
48
 
49
  //create an object from json responce
50
+ $responce = SQ_Classes_RemoteController::register($args);
51
+
52
+ if (is_wp_error($responce)) {
53
+ switch ($responce->get_error_message()) {
 
 
 
 
 
 
 
 
 
54
  case 'alreadyregistered':
55
+ $message = SQ_Classes_Error::showNotices(sprintf(__('We found your email, so it means you already have a Squirrly.co account. Please login with your Squirrly Email. If you forgot your password, click %shere%s', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . '/login?action=lostpassword" target="_blank">', '</a>'), 'sq_error');
56
  break;
57
  case 'invalidemail':
58
+ $message = SQ_Classes_Error::showNotices(__('Your email is not valid. Please enter a valid email', _SQ_PLUGIN_NAME_), 'sq_error');
59
  break;
60
  default:
61
+ $message = SQ_Classes_Error::showNotices(__('We could not create your account. Please enter a valid email', _SQ_PLUGIN_NAME_), 'sq_error');
62
  break;
63
  }
64
+
65
+ } else if (isset($responce->token)) { //check if token is set and save it
66
+ SQ_Classes_Helpers_Tools::saveOptions('sq_api', $responce->token);
67
+
68
+ //redirect users to onboarding if necessary
69
+ $onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding');
70
+ if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
71
+ wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
72
+ die();
73
+ }
74
+
75
  } else {
76
+ if (SQ_Classes_Error::isError()) {
77
+ $message = SQ_Classes_Error::showError(SQ_Classes_Error::getError(), 'sq_error');
78
+ } else {
79
+ //if unknown error
80
+ $message = SQ_Classes_Error::showNotices(sprintf(__("Error: Couldn't connect to host :( . Please contact your site's webhost (or webmaster) and request them to add %s to their IP whitelist.", _SQ_PLUGIN_NAME_), _SQ_API_URL_), 'sq_error');
81
+ }
82
  }
83
+ } else {
84
+ $message = SQ_Classes_Error::showNotices(__('Could not send your information to Squirrly. Please try again.', _SQ_PLUGIN_NAME_), 'sq_error');
85
+ }
86
 
87
+ $this->message = $message;
 
 
88
 
 
89
  }
90
 
91
  /**
92
  * Login a user to Squirrly and get the token
93
  */
94
  public function squirrlyLogin() {
95
+ $message = '';
96
+ if (SQ_Classes_Helpers_Tools::getIsset('email') && SQ_Classes_Helpers_Tools::getIsset('password') && isset($_POST['password'])) {
97
+ //get the user and password
98
+ $args['user'] = SQ_Classes_Helpers_Tools::getValue('email');
99
+ $args['password'] = $_POST['password'];
 
 
 
100
 
 
101
  //get the responce from server on login call
102
+ /** @var bool|WP_Error $responce */
103
+ $responce = SQ_Classes_RemoteController::login($args);
104
 
105
+ /** */
106
+ if (is_wp_error($responce)) {
107
+ switch ($responce->get_error_message()) {
 
 
 
 
 
 
 
 
 
 
 
108
  case 'badlogin':
109
+ $message = SQ_Classes_Error::showNotices(__('Wrong email or password!', _SQ_PLUGIN_NAME_), 'sq_error');
110
  break;
111
  case 'multisite':
112
+ $message = SQ_Classes_Error::showNotices(__('You can only use this account for the URL you registered first!', _SQ_PLUGIN_NAME_), 'sq_error');
113
+ break;
114
+ default:
115
+ $message = SQ_Classes_Error::showNotices(__('An error occured', _SQ_PLUGIN_NAME_) . ':' . $responce->get_error_message(), 'sq_error');
116
  break;
117
  }
118
+
119
+ } elseif (isset($responce->token)) { //check if token is set and save it
120
+ SQ_Classes_Helpers_Tools::saveOptions('sq_api', $responce->token);
121
+
122
+ //redirect users to onboarding if necessary
123
+ $onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding');
124
+ if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
125
+ wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
126
+ die();
127
+ }
128
+
129
+ } else {
130
  //if unknown error
131
+ if (SQ_Classes_Error::isError()) {
132
+ $message = SQ_Classes_Error::showError(SQ_Classes_Error::getError(), 'sq_error');
133
+ } else {
134
+ //if unknown error
135
+ $message = SQ_Classes_Error::showNotices(sprintf(__("Error: Couldn't connect to host :( . Please contact your site's webhost (or webmaster) and request them to add %s to their IP whitelist.", _SQ_PLUGIN_NAME_), _SQ_API_URL_), 'sq_error');
136
+ }
137
+ }
138
 
139
+ } else {
140
+ $message = SQ_Classes_Error::showNotices(__('Both fields are required.', _SQ_PLUGIN_NAME_), 'sq_error');
141
+ }
142
 
143
+ $this->message = $message;
144
  }
145
 
146
  }
core/Blockresearch.php DELETED
@@ -1,8 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Core class for SQ_Core_Blocksearch
5
- */
6
- class SQ_Core_Blockresearch extends SQ_Classes_BlockController {
7
-
8
- }
 
 
 
 
 
 
 
 
core/Blocksearch.php DELETED
@@ -1,41 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Core class for SQ_Core_Blocksearch
5
- */
6
- class SQ_Core_Blocksearch extends SQ_Classes_BlockController {
7
-
8
- public function action() {
9
- $start = 0;
10
- $nbr = 8;
11
- $exclude = array();
12
-
13
- parent::action();
14
- switch (SQ_Classes_Tools::getValue('action')) {
15
- case 'sq_type_click':
16
- SQ_Classes_Tools::saveOptions('sq_img_licence', SQ_Classes_Tools::getValue('licence'));
17
- exit();
18
- break;
19
- case 'sq_search_blog':
20
- if (SQ_Classes_Tools::getValue('exclude') && SQ_Classes_Tools::getValue('exclude') <> 'undefined')
21
- $exclude = array((int) SQ_Classes_Tools::getValue('exclude'));
22
-
23
- if (SQ_Classes_Tools::getValue('start'))
24
- $start = array((int) SQ_Classes_Tools::getValue('start'));
25
-
26
- if (SQ_Classes_Tools::getValue('nrb'))
27
- $nrb = (int) SQ_Classes_Tools::getValue('nrb');
28
-
29
- if (SQ_Classes_Tools::getValue('q') <> '')
30
- echo SQ_Classes_ObjController::getClass('SQ_Models_Post')->searchPost(SQ_Classes_Tools::getValue('q'), $exclude, (int) $start, (int) $nrb);
31
- break;
32
- }
33
-
34
- exit();
35
- }
36
-
37
- public function hookHead() {
38
- parent::hookHead();
39
- }
40
-
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/Blockseo.php DELETED
@@ -1,20 +0,0 @@
1
- <?php
2
-
3
- class SQ_Core_Blockseo extends SQ_Classes_BlockController {
4
-
5
- public function action() {
6
-
7
- }
8
-
9
- public function hookHead() {
10
- parent::hookHead();
11
-
12
- echo '<script type="text/javascript">
13
- var __snippetshort = "' . __('Too short', _SQ_PLUGIN_NAME_) . '";
14
- var __snippetlong = "' . __('Too long', _SQ_PLUGIN_NAME_) . '";
15
- var __sq_snippet = "' . __('snippet', _SQ_PLUGIN_NAME_) . '";
16
- ' . "\n" . '</script>';
17
-
18
- }
19
-
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/Loading.php DELETED
@@ -1,102 +0,0 @@
1
- <?php
2
-
3
- class SQ_Core_Loading extends SQ_Classes_BlockController {
4
-
5
- public function hookHead() {
6
- parent::hookHead();
7
- $this->loadJsVars();
8
- }
9
-
10
- /**
11
- * Load the JS for API
12
- */
13
- public function loadJsVars() {
14
- global $sq_postID;
15
-
16
- echo '<script>
17
- var SQ_DEBUG = ' . (int)SQ_DEBUG . ';
18
- (function($){
19
- $.sq_config = {
20
- sq_use: ' . (int)SQ_Classes_Tools::getOption('sq_use') . ',
21
- token: "' . SQ_Classes_Tools::getOption('sq_api') . '",
22
- user_url: "' . home_url() . '",
23
- sq_baseurl: "' . _SQ_STATIC_API_URL_ . '",
24
- sq_uri: "' . SQ_URI . '",
25
- sq_apiurl: "' . _SQ_API_URL_ . '",
26
- language: "' . get_bloginfo('language') . '",
27
- sq_version: "' . SQ_VERSION_ID . '",
28
- sq_wpversion: "' . WP_VERSION_ID . '",
29
- sq_phpversion: "' . PHP_VERSION_ID . '",
30
- sq_seoversion: "' . ((int)SQ_Classes_Tools::getOption('sq_sla') + 1) . '",
31
- keyword_information: ' . (int)SQ_Classes_Tools::getOption('sq_keyword_information') . ',
32
- sq_keywordtag: ' . (int)SQ_Classes_Tools::getOption('sq_keywordtag') . ',
33
- frontend_css: "' . _SQ_THEME_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css",
34
- postID: "' . $sq_postID . '",
35
- prevNonce: "' . wp_create_nonce('post_preview_' . $sq_postID) . '",
36
- is_gutenberg: "' . (SQ_Classes_Tools::isGutenberg() ? 1 : 0) . '",
37
- __infotext: ["' . __('Recent discussions:', _SQ_PLUGIN_NAME_) . '", "' . __('SEO Search Volume:', _SQ_PLUGIN_NAME_) . '", "' . __('Competition:', _SQ_PLUGIN_NAME_) . '", "' . __('Trend:', _SQ_PLUGIN_NAME_) . '"],
38
- __keyword: "' . __('Keyword:', _SQ_PLUGIN_NAME_) . '",
39
- __date: "' . __('date', _SQ_PLUGIN_NAME_) . '",
40
- __saved: "' . __('Saved!', _SQ_PLUGIN_NAME_) . '",
41
- __readit: "' . __('Read it!', _SQ_PLUGIN_NAME_) . '",
42
- __insertit: "' . __('Insert it!', _SQ_PLUGIN_NAME_) . '",
43
- __reference: "' . __('Reference', _SQ_PLUGIN_NAME_) . '",
44
- __insertasbox: "' . __('Insert as box', _SQ_PLUGIN_NAME_) . '",
45
- __addlink: "' . __('Insert Link', _SQ_PLUGIN_NAME_) . '",
46
- __notrelevant: "' . __('Not relevant?', _SQ_PLUGIN_NAME_) . '",
47
- __insertparagraph: "' . __('Insert in your article', _SQ_PLUGIN_NAME_) . '",
48
- __ajaxerror: "' . __(':( An error occurred while processing your request. Please try again', _SQ_PLUGIN_NAME_) . '",
49
- __krerror: "' . __('Keyword Research takes too long to get the results. Click to try again', _SQ_PLUGIN_NAME_) . '",
50
- __nofound: "' . __('No results found!', _SQ_PLUGIN_NAME_) . '",
51
- __morewords: "' . __('Enter one more word to find relevant results', _SQ_PLUGIN_NAME_) . '",
52
- __toolong: "' . __('Takes too long to check this keyword ...', _SQ_PLUGIN_NAME_) . '",
53
- __doresearch: "' . __('Do a research!', _SQ_PLUGIN_NAME_) . '",
54
- __morekeywords: "' . __('Do more research!', _SQ_PLUGIN_NAME_) . '",
55
- __sq_photo_copyright: "' . __('[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]', _SQ_PLUGIN_NAME_) . '",
56
- __has_attributes: "' . __('Has creative commons attributes', _SQ_PLUGIN_NAME_) . '",
57
- __no_attributes: "' . __('No known copyright restrictions', _SQ_PLUGIN_NAME_) . '",
58
- __noopt: "' . __('You haven`t used Squirrly SEO to optimize your article. Do you want to optimize for a keyword before publishing?', _SQ_PLUGIN_NAME_) . '",
59
- __limit_exceeded: "' . __('Keyword Research limit exceeded', _SQ_PLUGIN_NAME_) . '",
60
- __subscription_expired: "' . __('Your Subscription has Expired', _SQ_PLUGIN_NAME_) . '",
61
- __add_keywords: "' . __('Add 20 Keyword Researches', _SQ_PLUGIN_NAME_) . '",
62
- __no_briefcase: "' . __('There are no keywords saved in briefcase yet', _SQ_PLUGIN_NAME_) . '",
63
- __fulloptimized: "' . __('Congratulations! Your article is 100% optimized!', _SQ_PLUGIN_NAME_) . '",
64
- __toomanytimes: "' . __('appears too many times. Try to remove %s of them', _SQ_PLUGIN_NAME_) . '",
65
- __writemorewords: "' . __('write %s more words', _SQ_PLUGIN_NAME_) . '",
66
- __keywordinintroduction: "' . __('Add the keyword in the %s of your article', _SQ_PLUGIN_NAME_) . '",
67
- __clicktohighlight: "' . __('Click to keep the highlight on', _SQ_PLUGIN_NAME_) . '",
68
- __introduction: "' . __('introduction', _SQ_PLUGIN_NAME_) . '",
69
- __morewordsafter: "' . __('Write more words after the %s keyword', _SQ_PLUGIN_NAME_) . '",
70
- __orusesynonyms: "' . __('or use synonyms', _SQ_PLUGIN_NAME_) . '",
71
- __addmorewords: "' . __('add %s more word(s)', _SQ_PLUGIN_NAME_) . '",
72
- __removewords: "' . __('or remove %s word(s)', _SQ_PLUGIN_NAME_) . '",
73
- __addmorekeywords: "' . __('add %s more keyword(s)', _SQ_PLUGIN_NAME_) . '",
74
- __addminimumwords: "' . __('write %s more words to start calculating', _SQ_PLUGIN_NAME_) . '",
75
- __add_to_briefcase: "' . __('Add to Briefcase', _SQ_PLUGIN_NAME_) . '",
76
- __add_keyword_briefcase: "' . __('Add Keyword to Briefcase', _SQ_PLUGIN_NAME_) . '",
77
- __usekeyword: "' . __('Use Keyword', _SQ_PLUGIN_NAME_) . '",
78
- __new_post_title: "' . __('Auto Draft') . '"
79
- };
80
-
81
-
82
- if (typeof sq_script === "undefined"){
83
- var sq_script = document.createElement(\'script\');
84
- sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/squirrly' . (SQ_DEBUG ? '' : '.min') . '.js?ver=' . SQ_VERSION_ID . '";
85
- var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
86
- site_head.insertBefore(sq_script, site_head.firstChild);
87
- }
88
-
89
- window.onerror = function(){
90
- $.sq_config.sq_windowerror = true;
91
- };
92
-
93
- $(document).ready(function() {
94
- $("#sq_preloading").html("");
95
- });
96
- })(jQuery);
97
-
98
- </script>';
99
-
100
- }
101
-
102
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/config.json DELETED
@@ -1,225 +0,0 @@
1
- {
2
- "blocks": {
3
- "block": [
4
- {
5
- "name": "SQ_Controllers_Menu",
6
- "description": "Loading the Menu in Admin and Frontend",
7
- "actions": { "action": "sq_getfrontmenu" },
8
- "active": "1",
9
- "admin": "1"
10
- },
11
- {
12
- "name": "SQ_Controllers_Post",
13
- "description": "Post Page",
14
- "actions": {
15
- "action": [
16
- "sq_save_ogimage",
17
- "sq_get_keyword"
18
- ]
19
- },
20
- "active": "1",
21
- "admin": "1"
22
- },
23
- {
24
- "name": "SQ_Controllers_PostsList",
25
- "description": "Posts List Page",
26
- "actions": {
27
- "action": [
28
- "sq_posts_rank",
29
- "sq_post_rank",
30
- "sq_recheck",
31
- "inline-save"
32
- ]
33
- },
34
- "active": "1",
35
- "admin": "1"
36
- },
37
- {
38
- "name": "SQ_Core_BlockSettingsSeo",
39
- "description": "SEO Setting page",
40
- "actions": {
41
- "action": [
42
- "sq_settingsseo_update",
43
- "sq_settingsseo_option",
44
- "sq_get_snippet",
45
- "sq_checkissues",
46
- "sq_setstickysla",
47
- "sq_active_help",
48
- "sq_fixautoseo",
49
- "sq_fixpermalink",
50
- "sq_fixprivate",
51
- "sq_fixcomments",
52
- "sq_fix_ogduplicate",
53
- "sq_fix_tcduplicate",
54
- "sq_fix_titleduplicate",
55
- "sq_fix_descduplicate",
56
- "sq_backup",
57
- "sq_backup_sql",
58
- "sq_restore",
59
- "sq_restore_sql",
60
- "sq_dataupgrade",
61
- "sq_resetsettings",
62
- "sq_warnings_off",
63
- "sq_google_alert_trial",
64
- "sq_copyright_agreement"
65
- ]
66
- },
67
- "active": "1",
68
- "admin": "1"
69
- },
70
- {
71
- "name": "SQ_Controllers_FrontMenu",
72
- "description": "Front Menu page",
73
- "actions": { "action": "sq_saveseo" },
74
- "active": "1",
75
- "admin": "1"
76
- },
77
- {
78
- "name": "SQ_Core_BlockPatterns",
79
- "description": "Setting page",
80
- "actions": {
81
- "action": [
82
- "sq_savepatters",
83
- "sq_savepatters_option"
84
- ]
85
- },
86
- "active": "1",
87
- "admin": "1"
88
- },
89
- {
90
- "name": "SQ_Core_BlockSettings",
91
- "description": "Setting page",
92
- "actions": { "action": "sq_settings_update" },
93
- "active": "1",
94
- "admin": "1"
95
- },
96
- {
97
- "name": "SQ_Core_BlockSupport",
98
- "description": "The support",
99
- "controllers": { "controller": "SQ_Controllers_Post" },
100
- "actions": {
101
- "action": [
102
- "sq_feedback",
103
- "sq_support"
104
- ]
105
- },
106
- "active": "1",
107
- "admin": "1"
108
- },
109
- {
110
- "name": "SQ_Core_Blocklogin",
111
- "description": "Connect to Squirrly",
112
- "controllers": { "controller": "SQ_Controllers_Post" },
113
- "actions": {
114
- "action": [
115
- "sq_login",
116
- "sq_register",
117
- "sq_reset"
118
- ]
119
- },
120
- "active": "1",
121
- "admin": "1"
122
- },
123
- {
124
- "name": "SQ_Core_Blocksearch",
125
- "description": "Inspiration box",
126
- "controllers": { "controller": "SQ_Controllers_Post" },
127
- "actions": {
128
- "action": [
129
- "sq_search_blog",
130
- "sq_type_click"
131
- ]
132
- },
133
- "active": "1",
134
- "admin": "1"
135
- },
136
- {
137
- "name": "SQ_Core_Blockseo",
138
- "description": "SEO Live assistant",
139
- "controllers": { "controller": "SQ_Controllers_Post" },
140
- "active": "1",
141
- "admin": "1"
142
- },
143
- {
144
- "name": "SQ_Core_Blockresearch",
145
- "description": "Research block",
146
- "controllers": { "controller": "SQ_Controllers_Post" },
147
- "active": "1",
148
- "admin": "1"
149
- },
150
- {
151
- "name": "SQ_Core_BlockAffiliate",
152
- "description": "Affiliate Page",
153
- "actions": { "action": "sq_settings_affiliate" },
154
- "active": "1",
155
- "admin": "1"
156
- },
157
- {
158
- "name": "SQ_Core_Loading",
159
- "description": "Loading JS",
160
- "controllers": { "controller": "SQ_Controllers_Post" },
161
- "active": "1",
162
- "admin": "1"
163
- },
164
- {
165
- "name": "SQ_Core_BlockImport",
166
- "description": "Import from other plugins",
167
- "actions": {
168
- "action": [
169
- "sq_importseo",
170
- "sq_importsettings"
171
- ]
172
- },
173
- "active": "1",
174
- "admin": "1"
175
- },
176
- {
177
- "name": "SQ_Controllers_SerpChecker",
178
- "description": "Import from other plugins",
179
- "actions": {
180
- "action": [
181
- "sq_serp_process",
182
- "sq_serp_refresh",
183
- "sq_serp_recheck",
184
- "sq_serp_purgeall",
185
- "sq_serp_refresh_post"
186
- ]
187
- },
188
- "active": "1",
189
- "admin": "1"
190
- },
191
- {
192
- "name": "SQ_Core_BlockSerpKeywords",
193
- "description": "Use Advanced Analytics",
194
- "actions": {
195
- "action": [
196
- "sq_serp_showignore",
197
- "sq_serp_ignore",
198
- "sq_serp_articlesearch",
199
- "sq_serp_addkeyword"
200
- ]
201
- },
202
- "active": "1",
203
- "admin": "1"
204
- },
205
- {
206
- "name": "SQ_Core_BlockBriefcaseKeywords",
207
- "description": "Squirrly Briefcase",
208
- "actions": {
209
- "action": [
210
- "sq_briefcase_addkeyword",
211
- "sq_briefcase_addlabel",
212
- "sq_briefcase_editlabel",
213
- "sq_briefcase_keywordlabel",
214
- "sq_briefcase_article",
215
- "sq_briefcase_doresearch",
216
- "sq_briefcase_deletekeyword",
217
- "sq_briefcase_deletelabel"
218
- ]
219
- },
220
- "active": "1",
221
- "admin": "1"
222
- }
223
- ]
224
- }
225
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
debug/index.php ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
3
+
4
+ class SQ_Debug {
5
+
6
+ /** @var array */
7
+ private static $debug;
8
+
9
+ public function logQueries($query) {
10
+ self::dump($query);
11
+ return $query;
12
+ }
13
+
14
+ public function _isAjax() {
15
+ if (defined('DOING_AJAX') && DOING_AJAX) {
16
+ return true;
17
+ }
18
+ return false;
19
+ }
20
+
21
+ /**
22
+ * Get a value from $_POST / $_GET
23
+ * if unavailable, take a default value
24
+ *
25
+ * @param string $key Value key
26
+ * @param mixed $defaultValue (optional)
27
+ * @return mixed Value
28
+ */
29
+ public static function getValue($key, $defaultValue = false) {
30
+ if (!isset($key) OR empty($key) OR !is_string($key))
31
+ return false;
32
+ $ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $defaultValue));
33
+
34
+ if (is_string($ret) === true)
35
+ $ret = urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret)));
36
+ return !is_string($ret) ? $ret : stripslashes($ret);
37
+ }
38
+
39
+ public static function setValue($key, $value) {
40
+ $_POST[$key] = $value;
41
+ $_GET[$key] = $value;
42
+ }
43
+
44
+ /**
45
+ * Check if the parameter is set
46
+ *
47
+ * @param string $key
48
+ * @return boolean
49
+ */
50
+ public static function getIsset($key) {
51
+ if (!isset($key) OR empty($key) OR !is_string($key))
52
+ return false;
53
+ return isset($_POST[$key]) ? true : (isset($_GET[$key]) ? true : false);
54
+ }
55
+
56
+ /**
57
+ * Check if debug is called
58
+ */
59
+ public static function checkDebug() {
60
+ //if debug is called
61
+ if (self::getIsset('sq_debug')) {
62
+ if (self::getValue('sq_debug') === 'on' && SQ_DEBUG) {
63
+ error_reporting(E_ALL);
64
+ @ini_set('display_errors', true);
65
+ if (function_exists('register_shutdown_function')) {
66
+ register_shutdown_function(array(new SQ_Debug(), 'showDebug'));
67
+ }
68
+ echo '<script>var SQ_DEBUG = true;</script>';
69
+ }
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Get the debug buffer
75
+ * @param $buffer
76
+ * @return mixed
77
+ */
78
+ public function getBuffer($buffer) {
79
+ if (SQ_Classes_Helpers_Tools::isAjax()) {
80
+ return $buffer;
81
+ }
82
+ if (!$this->getIsset('sq_debug')) {
83
+ return $buffer;
84
+ }
85
+
86
+ return false;
87
+ }
88
+
89
+ /**
90
+ * Store the debug for a later view
91
+ *
92
+ * @return bool|void
93
+ */
94
+ public static function dump() {
95
+ if (SQ_DEBUG) {
96
+ if (self::getValue('sq_debug') !== 'on') {
97
+ return;
98
+ }
99
+
100
+ $output = '';
101
+ $callee = array('file' => '', 'line' => '');
102
+ if (function_exists('func_get_args')) {
103
+ $arguments = func_get_args();
104
+ $total_arguments = count($arguments);
105
+ } else
106
+ $arguments = array();
107
+
108
+
109
+ $run_time = number_format(microtime(true) - SQ_REQUEST_TIME, 3);
110
+ if (function_exists('debug_backtrace'))
111
+ list($callee) = debug_backtrace();
112
+
113
+ $output .= '<fieldset style="background: #FFFFFF; border: 1px #CCCCCC solid; padding: 5px; font-size: 9pt; margin: 0;">';
114
+ $output .= '<legend style="background: #EEEEEE; padding: 2px; font-size: 8pt;">' . $callee['file'] . ' Time: ' . $run_time . ' @ line: ' . $callee['line']
115
+ . '</legend><pre style="margin: 0; font-size: 8pt; text-align: left;">';
116
+
117
+ $i = 0;
118
+ foreach ($arguments as $argument) {
119
+ if (count($arguments) > 1)
120
+ $output .= "\n" . '<strong>#' . (++$i) . ' of ' . $total_arguments . '</strong>: ';
121
+
122
+ // if argument is boolean, false value does not display, so ...
123
+ if (is_bool($argument))
124
+ $argument = ($argument) ? 'TRUE' : 'FALSE';
125
+ else
126
+ if (is_object($argument) && function_exists('array_reverse') && function_exists('class_parents'))
127
+ $output .= implode("\n" . '|' . "\n", array_reverse(class_parents($argument))) . "\n" . '|' . "\n";
128
+
129
+ $output .= htmlspecialchars(print_r($argument, TRUE))
130
+ . ((is_object($argument) && function_exists('spl_object_hash')) ? spl_object_hash($argument) : '');
131
+ }
132
+ $output .= "</pre>";
133
+ $output .= "</fieldset>";
134
+
135
+ self::$debug[] = $output;
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Show the debug dump
141
+ */
142
+ public static function showDebug() {
143
+ SQ_Classes_Helpers_Tools::setHeader('html');
144
+ $errors = error_get_last();
145
+ echo "Debug result: <br />" . '<div id="wpcontent">' . '<br />' . @implode('<br />', self::$debug) . '<div>';
146
+
147
+ $run_time = number_format(microtime(true) - SQ_REQUEST_TIME, 3);
148
+ $pps = number_format(1 / $run_time, 0);
149
+ $memory_avail = ini_get('memory_limit');
150
+ $memory_used = number_format(memory_get_usage(true) / (1024 * 1024), 2);
151
+ $memory_peak = number_format(memory_get_peak_usage(true) / (1024 * 1024), 2);
152
+
153
+ if (PHP_SAPI == 'cli') {
154
+ // if run for command line, display some info
155
+ $debug = PHP_EOL
156
+ . "======================================================================================"
157
+ . PHP_EOL
158
+ . " Config: php " . phpversion() . " " . php_sapi_name()
159
+ . PHP_EOL
160
+ . " Load: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)"
161
+ . " | Time: {$run_time}s | {$pps} req/sec"
162
+ . PHP_EOL
163
+ . " | Server Timezone: " . date_default_timezone_get()
164
+ . " | Agent: CLI"
165
+ . PHP_EOL
166
+ . "======================================================================================"
167
+ . PHP_EOL;
168
+ } else {
169
+ // if not run from command line, only display if debug is enabled
170
+ $debug = "" //<hr />"
171
+ . "<div style=\"text-align: left;\">"
172
+ . "<small><hr />"
173
+ . " Config: "
174
+ . "<br />"
175
+ . " &nbsp;&nbsp; | php " . phpversion() . " " . php_sapi_name()
176
+ . "<br />"
177
+ . " &nbsp;&nbsp; | Server Timezone: " . date_default_timezone_get()
178
+ . "<br />"
179
+ . " Load: "
180
+ . "<br />"
181
+ . " &nbsp;&nbsp; | Memory: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)"
182
+ . "<br />"
183
+ . " &nbsp;&nbsp; | Time: {$run_time}s &nbsp;&nbsp; | {$pps} req/sec"
184
+ . "<br />"
185
+ . "Url: "
186
+ . "<br />"
187
+ . " &nbsp;&nbsp; |"
188
+ . "<br />"
189
+ . " &nbsp;&nbsp; | Agent: " . (@$_SERVER["HTTP_USER_AGENT"])
190
+ . "<br />"
191
+ . "Version Control: "
192
+ . "<br />"
193
+ . "</small>"
194
+ . "</div>"
195
+ . "<br />";
196
+ }
197
+
198
+
199
+ echo '<pre><div id="wpcontent">' . $debug . '</div></pre>';
200
+ }
201
+
202
+ public static function showLoadingTime() {
203
+ $run_time = number_format(microtime(true) - SQ_REQUEST_TIME, 3);
204
+ $pps = number_format(1 / $run_time, 0);
205
+ $memory_avail = ini_get('memory_limit');
206
+ $memory_used = number_format(memory_get_usage(true) / (1024 * 1024), 2);
207
+ $memory_peak = number_format(memory_get_peak_usage(true) / (1024 * 1024), 2);
208
+
209
+ $debug = PHP_EOL
210
+ . "======================================================================================"
211
+ . PHP_EOL
212
+ . " Config: php " . phpversion() . " " . php_sapi_name() . " / zend engine " . zend_version()
213
+ . PHP_EOL
214
+ . " Load: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)"
215
+ . " | Time: {$run_time}s | {$pps} req/sec"
216
+ . PHP_EOL
217
+ . " | Server Timezone: " . date_default_timezone_get()
218
+ . " | Agent: CLI"
219
+ . PHP_EOL
220
+ . "======================================================================================"
221
+ . PHP_EOL;
222
+
223
+
224
+ echo '<pre><div id="wpcontent">' . $debug . '</div></pre>';
225
+ }
226
+
227
+ }
228
+
229
+ defined('SQ_DEBUG') || define('SQ_DEBUG', false);
230
+ SQ_Debug::checkDebug();
demo.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "demo":{
3
+ "title": "Your First Time Hanging Out with Squirrly's Live Assistant",
4
+ "slug": "first-time-squirrly-live-assistant",
5
+ "content": "<p>This article has been&nbsp;100%&nbsp;optimized using Squirrly's Optimization Assistant, which means both Google and human readers will love it!<\/p>\r\n<p>But if you were to <strong>delete the words <\/strong>\"live assistant\" from the title thus also changing the permalink, that would no longer be the case.<\/p>\r\n<p><strong>Go ahead, try it right now. (Yes, go ahead! It's made for DEMO purposes and we want you to break it. Your site will suffer no changes.)<\/strong><\/p>\r\n<p>By removing the&nbsp;phrase for which we've optimized this article from the title, you've lowered the optimization percentage.<\/p>\r\n<p>See how the box for <em>Title is Google Friendly<\/em> is no longer Green? Put the keyword back in the title to get it back to 100%. Good! The box is green again, right?<\/p>\r\n<p>Now, delete this image of an incredibly adorable puppy below (Be strong; don't let those puppy eyes stop you in your tracks).<\/p>\r\n<!-- wp:image {\"align\":\"center\"} -->\r\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img src=\"http:\/\/strategy.plugin.squirrly.co\/wp-content\/uploads\/2019\/02\/7933f875f2efd446c801cc5673dcef2c-2.jpg\" alt=\"live assistant\"\/><\/figure><\/div>\r\n<!-- \/wp:image -->\r\n\r\n<p>Delete the image? Wow, how could you? And also... notice how two of the panels are no longer green?<\/p>\r\n<p>The explanation is that the&nbsp;<strong>Live&nbsp;Assistant<\/strong> checks to see if you've added at least one image in your article and automatically adds the keyword in the alt text of the image (if you insert it using the Blogging&nbsp;Assistant).<\/p>\r\n<p>Did you happen to see the keyword in bold just above? Remove the bold and pay attention to what happens in the panel to the right. Caught it? Great!<\/p>\r\n<p>You'll have to bold one of the keywords present in your&nbsp;text to get it back to green.<\/p>\r\n<!-- wp:heading -->\r\n<h2>Now Delete the Words \"Live&nbsp;Assistant\" from this Heading: See What Happens!<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<p>Yep, this seemingly small change has caused the optimization percentage to go down! But if you follow the instructions from the assistant, you'll never overlook this optimization step - or any other!<\/p>\r\n<p>Next, lets' turn it up a notch and do something really outrageous. Try writing down the keyword for this article 5 more times. Starting now.<\/p>\r\n<p>The assistant caught on to that pretty fast, right? Notice the Red lights?<\/p>\r\n<p>It's to signal that the content is no&nbsp;longer Google-friendly because&nbsp;you over-optimized it.<\/p>\r\n<p>Finally, try removing all the words <em>Live Assistant<\/em> from the text. That's no good either, it's important to have keywords spread throughout the body of the article.<\/p>\r\n<p>But don't worry, the assistant&nbsp;will always be there to be your compass towards achieving a 100% optimized article or page every time you use it.<\/p>\r\n<p>Try it Today to Optimize Your First Post<\/p>\r\n<p>You can find it in any \"Edit Post\" or \"Add New Post\" interface in WordPress.<\/p>",
6
+ "keyword": "Live Assistant"
7
+ }
8
+ }
languages/squirrly-seo-cs_CZ.mo CHANGED
Binary file
languages/squirrly-seo-cs_CZ.po CHANGED
@@ -2,8 +2,8 @@ msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Squirrly SEO Plugin\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2018-07-30 09:01+0300\n"
6
- "PO-Revision-Date: 2018-07-30 09:02+0300\n"
7
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
8
  "Language-Team: \n"
9
  "Language: cs_CZ\n"
@@ -16,4156 +16,7020 @@ msgstr ""
16
  "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
17
  "X-Poedit-Basepath: ..\n"
18
  "X-Textdomain-Support: yes\n"
19
- "X-Generator: Poedit 2.0.5\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  # @ squirrly-seo
23
- #: classes/Error.php:16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  msgid ""
25
- "Function get_class does not exists! Is required for Squirrly to work "
26
- "properly."
 
 
27
  msgstr ""
28
 
29
- # @ squirrly-seo
30
- #: classes/Error.php:19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  msgid ""
32
- "Function file_exists does not exists! Is required for Squirrly to work "
33
- "properly."
34
  msgstr ""
35
 
36
- # @ squirrly-seo
37
- #: classes/Error.php:23
38
- msgid "The home directory is not set!"
39
  msgstr ""
40
 
41
  # @ squirrly-seo
42
- #: classes/Error.php:27
43
- msgid "The PHP version has to be greater then 4.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  msgstr ""
45
 
46
- #: classes/Error.php:70 classes/Error.php:81
47
- msgid "Don't bother me!"
48
  msgstr ""
49
 
50
- #: classes/Tools.php:129
51
- msgid "Getting started"
 
52
  msgstr ""
53
 
54
- #: classes/Tools.php:349
55
- msgid "Format"
 
 
 
 
 
56
  msgstr ""
57
 
58
- #: classes/Tools.php:357 classes/Tools.php:373
59
- msgid "Category"
 
60
  msgstr ""
61
 
62
- #: classes/Tools.php:365 classes/Tools.php:381
63
- msgid "Tag"
64
  msgstr ""
65
 
66
- #: classes/Tools.php:389
67
- msgid "Shipping Option"
 
 
 
 
68
  msgstr ""
69
 
70
- #: classes/Tools.php:397
71
- msgid "Author at"
72
  msgstr ""
73
 
74
- #: classes/Tools.php:429
75
- msgid "You searched for"
 
 
 
 
 
 
 
 
76
  msgstr ""
77
 
78
- #: classes/Tools.php:445
79
- msgid "Page not found"
 
 
 
 
80
  msgstr ""
81
 
82
  # @ squirrly-seo
83
- #: classes/Tools.php:976
84
- msgid "Fix it for me!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  msgstr ""
86
 
87
- #: classes/Tools.php:982
88
- msgid "Activate the Squirrly SEO for your blog (recommended)"
 
 
 
 
 
 
 
 
 
 
89
  msgstr ""
90
 
91
- #: classes/Tools.php:993
 
 
 
 
92
  msgid ""
93
- "You have META Title Duplicates. Disable the Squirrly Title Optimization or "
94
- "disable the other SEO Plugins"
95
  msgstr ""
96
 
97
- #: classes/Tools.php:1001
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  msgid ""
99
- "You have META Description Duplicates. Disable the Squirrly Description "
100
- "Optimization or disable the other SEO Plugins"
 
 
 
 
 
 
 
 
 
 
101
  msgstr ""
102
 
103
- #: classes/Tools.php:1009
 
104
  msgid ""
105
- "You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or "
106
- "disable the other SEO Plugins"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  msgstr ""
108
 
109
- #: classes/Tools.php:1017
 
110
  msgid ""
111
- "You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card "
112
- "or disable the other SEO Plugins"
 
 
 
 
 
 
 
 
 
113
  msgstr ""
114
 
115
  # @ squirrly-seo
116
- #: classes/Tools.php:1026
117
- msgid "You're blocking google from indexing your site!"
 
 
 
 
 
 
118
  msgstr ""
119
 
120
- #: classes/Tools.php:1033
 
 
 
121
  msgid ""
122
- "It is highly recommended that you include the %postname% variable in the "
123
- "permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
124
- "in Custom Structure"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  msgstr ""
126
 
127
- #: classes/Tools.php:1040
 
 
 
 
 
128
  msgid ""
129
- "It is highly recommended to change or remove the default Wordpress Tagline. "
130
- "<br />Go to Settings > General > Tagline"
 
131
  msgstr ""
132
 
133
- #: classes/Tools.php:1046
134
- msgid "Great! We didn't find any issue in your site."
 
135
  msgstr ""
136
 
137
- #: classes/Tools.php:1191
138
- msgid "Just another WordPress site"
139
  msgstr ""
140
 
141
- #: config/config.php:43
142
- msgid "Displays the date of the post/page once it's published"
 
 
 
 
 
143
  msgstr ""
144
 
145
- #: config/config.php:44
146
- msgid "Adds the title of the post/page once it’s published"
 
147
  msgstr ""
148
 
149
- #: config/config.php:45
150
- msgid "Displays the number of the current page (i.e. 1 of 6)"
151
  msgstr ""
152
 
153
- #: config/config.php:46
154
- msgid "Adds the title of a page's parent page"
 
 
 
 
155
  msgstr ""
156
 
157
- #: config/config.php:47
158
- msgid "Adds the site's name to the post description"
159
  msgstr ""
160
 
161
- #: config/config.php:48
162
- msgid "Adds the tagline/description of your site"
163
  msgstr ""
164
 
165
- #: config/config.php:49
 
 
 
 
 
 
 
 
 
 
 
166
  msgid ""
167
- "Will display an excerpt from the post/page (if not customized, the excerpt "
168
- "will be auto-generated)"
169
  msgstr ""
170
 
171
- #: config/config.php:50
172
- msgid "Will display an excerpt from the post/page (no auto-generation)"
 
 
 
173
  msgstr ""
174
 
175
- #: config/config.php:51
176
- msgid "Adds the current tag(s) to the post description"
177
  msgstr ""
178
 
179
- #: config/config.php:52
180
- msgid "Adds the post category (several categories will be comma-separated)"
 
 
 
 
181
  msgstr ""
182
 
183
- #: config/config.php:53
184
- msgid "Adds the primary category of the post/page"
185
  msgstr ""
186
 
187
- #: config/config.php:54
188
- msgid "Adds the category description to the post description"
 
 
 
 
 
 
 
 
189
  msgstr ""
190
 
191
- #: config/config.php:55
192
- msgid "Adds the tag description"
193
  msgstr ""
194
 
195
- #: config/config.php:56
196
- msgid "Adds the term description"
 
 
 
 
 
 
197
  msgstr ""
198
 
199
- #: config/config.php:57
200
- msgid "Adds the term name"
201
  msgstr ""
202
 
203
- #: config/config.php:58
204
- msgid "Displays the search phrase (if it appears in the post)"
205
  msgstr ""
206
 
207
- #: config/config.php:59
208
- msgid "Places a separator between the elements of the post description"
209
  msgstr ""
210
 
211
- #: config/config.php:60
212
- msgid "Replaces the publication date of a post/page with the modified one"
 
 
213
  msgstr ""
214
 
215
- #: config/config.php:61
216
- msgid "Displays the author's nicename"
 
217
  msgstr ""
218
 
219
- #: config/config.php:62
220
- msgid "Adds the author's biographical info to the post description"
 
221
  msgstr ""
222
 
223
- #: config/config.php:63
224
- msgid "Displays the current date"
 
 
 
225
  msgstr ""
226
 
227
- #: config/config.php:64
228
- msgid "Adds the post's keyword to the post description"
 
 
229
  msgstr ""
230
 
231
- #: config/config.php:65
232
- msgid "Adds the current day"
 
233
  msgstr ""
234
 
235
- #: config/config.php:66
236
- msgid "Adds the current month"
237
  msgstr ""
238
 
239
- #: config/config.php:67
240
- msgid "Adds the current year"
 
 
 
 
241
  msgstr ""
242
 
243
- #: controllers/Api.php:40
244
- msgid "Connection expired. Please try again"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  msgstr ""
246
 
247
- #: controllers/Api.php:54 controllers/Api.php:57 controllers/Api.php:60
248
- msgid "Author not found"
 
 
 
 
 
 
 
 
 
 
249
  msgstr ""
250
 
251
- #: controllers/FrontMenu.php:32
252
- msgid "You don't have enough pemission to edit this article"
253
  msgstr ""
254
 
255
- #: controllers/Menu.php:38 controllers/Menu.php:49
256
  #, php-format
257
  msgid ""
258
- "Good news, %s is integrated in Squirrly SEO now and you don't have to run 2 "
259
- "plugins anymore"
 
 
 
 
 
 
 
 
260
  msgstr ""
261
 
262
- #: controllers/Menu.php:69
263
  #, php-format
264
  msgid ""
265
- "An error occurred during activation. If this error persists, please contact "
266
- "us at: %s"
 
 
 
 
 
 
 
267
  msgstr ""
268
 
269
- #: controllers/Menu.php:99
270
- msgid "See Your Rank on Google"
271
  msgstr ""
272
 
273
- #: controllers/Menu.php:156
274
- msgid "Custom SEO"
 
 
 
 
 
275
  msgstr ""
276
 
277
- #: controllers/Menu.php:200
 
 
 
 
278
  #, php-format
279
- msgid "Check out the Squirrly Analytics section. %sClick here%s"
 
 
 
 
280
  msgstr ""
281
 
282
- #: controllers/Menu.php:200 view/BlockPostsAnalytics.php:47
283
- msgid "Squirrly Analytics"
284
  msgstr ""
285
 
286
- #: controllers/Menu.php:217
287
- msgid " Dashboard"
288
  msgstr ""
289
 
290
- #: controllers/Menu.php:218
291
- msgid "First Step"
 
 
 
 
292
  msgstr ""
293
 
294
- #: controllers/Menu.php:218
295
- msgid "Dashboard"
296
  msgstr ""
297
 
298
- #: controllers/Menu.php:227
299
- msgid " Advanced Analytics (Business Level)"
 
 
 
 
 
300
  msgstr ""
301
 
302
- #: controllers/Menu.php:228
303
- msgid "Advanced Analytics"
304
  msgstr ""
305
 
306
- #: controllers/Menu.php:235
307
- msgid " Performance Analytics"
308
  msgstr ""
309
 
310
- #: controllers/Menu.php:236
311
- msgid "Performance <br />Analytics"
312
  msgstr ""
313
 
314
- #: controllers/Menu.php:244
315
- msgid " Keyword Research"
 
316
  msgstr ""
317
 
318
- #: controllers/Menu.php:245 view/BlockBriefcaseKeywords.php:333
319
- msgid "Keyword Research"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  msgstr ""
321
 
322
- #: controllers/Menu.php:252
323
- msgid " Briefcase"
 
 
 
 
 
324
  msgstr ""
325
 
326
- #: controllers/Menu.php:253
327
- msgid "Briefcase"
 
328
  msgstr ""
329
 
330
- #: controllers/Menu.php:260
331
- msgid " Live Assistant"
332
  msgstr ""
333
 
334
- #: controllers/Menu.php:261
335
- msgid "Live Assistant"
 
 
 
 
 
336
  msgstr ""
337
 
338
- #: controllers/Menu.php:267
339
- msgid " Copywriting"
340
  msgstr ""
341
 
342
- #: controllers/Menu.php:268
343
- msgid "Copywriting"
 
 
 
 
 
 
 
344
  msgstr ""
345
 
346
- #: controllers/Menu.php:276
347
- msgid " SEO Audit"
348
  msgstr ""
349
 
350
- #: controllers/Menu.php:277
351
- msgid "Site Audit"
352
  msgstr ""
353
 
354
- #: controllers/Menu.php:285
355
- msgid " SEO Settings"
356
  msgstr ""
357
 
358
- #: controllers/Menu.php:286 view/BlockToolbar.php:4
359
- msgid "SEO Settings"
360
  msgstr ""
361
 
362
- #: controllers/Menu.php:294
363
- msgid " Advanced Settings"
 
 
 
 
 
 
 
 
 
 
 
 
364
  msgstr ""
365
 
366
- #: controllers/Menu.php:295 view/BlockSettings.php:22
367
- msgid "Advanced Settings"
368
  msgstr ""
369
 
370
- #: controllers/Menu.php:302
371
- msgid " SEO Patterns"
 
 
 
 
 
 
 
 
372
  msgstr ""
373
 
374
- #: controllers/Menu.php:303 view/BlockToolbar.php:14
375
- msgid "Patterns"
376
  msgstr ""
377
 
378
- #: controllers/Menu.php:311
379
- msgid " Account Info"
 
 
 
 
 
 
380
  msgstr ""
381
 
382
- #: controllers/Menu.php:312
383
- msgid "Account Info"
384
  msgstr ""
385
 
386
- #: controllers/Menu.php:320
387
- msgid " Support"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  msgstr ""
389
 
390
- # @ squirrly-seo
391
- #: controllers/Menu.php:321 view/BlockSupport.php:22
392
- msgid "Support"
 
 
 
 
 
 
 
 
393
  msgstr ""
394
 
395
- #: controllers/Menu.php:329
396
- msgid "Become an Affiliate with "
397
  msgstr ""
398
 
399
- #: controllers/Menu.php:330
400
- msgid "Become an Affiliate"
 
 
 
 
 
401
  msgstr ""
402
 
403
- #: controllers/Menu.php:339
404
- msgid "Import, Backup & Restore SEO"
405
  msgstr ""
406
 
407
- #: controllers/Menu.php:340
408
- msgid "Import/Backup SEO"
 
409
  msgstr ""
410
 
411
- #: controllers/Menu.php:384
412
- msgid "SEO Snippet"
413
  msgstr ""
414
 
415
- #: controllers/PostsList.php:81
416
- msgid "Squirrly"
 
 
 
 
 
 
417
  msgstr ""
418
 
419
- #: controllers/PostsList.php:107
420
- msgid "Custom description: "
421
  msgstr ""
422
 
423
- #: controllers/PostsList.php:107
424
- msgid "Custom title: "
425
  msgstr ""
426
 
427
- #: controllers/PostsList.php:143
428
- msgid "SEO Analytics, by Squirrly"
 
 
 
 
 
 
 
429
  msgstr ""
430
 
431
- #: controllers/PostsList.php:144 controllers/SerpChecker.php:174
432
- #: models/SerpCheckerTable.php:646 view/Blockseo.php:10
433
- msgid "Update"
434
  msgstr ""
435
 
436
- #: controllers/PostsList.php:148 controllers/SerpChecker.php:178
437
- msgid "Not Public"
 
 
 
 
 
 
 
 
 
438
  msgstr ""
439
 
440
- #: controllers/PostsList.php:149 controllers/SerpChecker.php:179
441
- msgid "Could not process"
442
  msgstr ""
443
 
444
- #: controllers/PostsList.php:314 controllers/PostsList.php:332
445
  #, php-format
446
- msgid "Not in top 100 for: %s"
 
 
 
 
 
 
 
 
447
  msgstr ""
448
 
449
- #: controllers/PostsList.php:316 controllers/PostsList.php:334
450
- msgid "The URL is Indexed"
451
  msgstr ""
452
 
453
- #: controllers/PostsList.php:318 controllers/PostsList.php:336
454
- #: models/BlockPostsAnalytics.php:438
455
  #, php-format
456
- msgid "%s"
 
 
 
 
457
  msgstr ""
458
 
459
- #: controllers/SerpChecker.php:23 core/BlockPostsAnalytics.php:31
460
  #, php-format
461
  msgid ""
462
- "To get back to the Advanced Analytics and see rankings for all the keywords "
463
- "in Briefcase upgrade to %sBusiness Plan%s."
 
 
 
 
464
  msgstr ""
465
 
466
- #: controllers/SerpChecker.php:77 controllers/SerpChecker.php:91
467
- #: controllers/SerpChecker.php:134 core/BlockSerpKeywords.php:66
468
- #: core/BlockSerpKeywords.php:74 core/BlockSerpKeywords.php:97
469
- #: core/BlockSettingsSeo.php:69
470
- msgid "You don't have enough pemission to activate this feature"
471
  msgstr ""
472
 
473
- #: controllers/SerpChecker.php:115 controllers/SerpChecker.php:125
474
- #: core/BlockBriefcaseKeywords.php:194
475
- msgid "Last checked"
476
  msgstr ""
477
 
478
- #: controllers/SerpChecker.php:129
479
- msgid "Invalid Request"
 
 
 
 
 
 
 
 
 
 
480
  msgstr ""
481
 
482
- #: controllers/SerpChecker.php:142
483
- msgid "Removed successfully! The ranks were updated from Squirry Server"
484
  msgstr ""
485
 
486
- #: core/BlockAffiliate.php:38
487
- #, php-format
488
- msgid "Error: %s"
489
  msgstr ""
490
 
491
- #: core/BlockAffiliate.php:41
492
- msgid "An error occured. Mabe a network error :("
493
  msgstr ""
494
 
495
- #: core/BlockBriefcaseKeywords.php:36 core/BlockPostsAnalytics.php:24
496
  #, php-format
497
  msgid ""
498
- "%sYou activated the Business Plan with Advanced Analytics. %sStart Here%s %s"
 
 
 
 
 
 
 
 
 
 
499
  msgstr ""
500
 
501
- #: core/BlockBriefcaseKeywords.php:39 core/BlockPostsAnalytics.php:28
502
  #, php-format
503
  msgid ""
504
- "%sStart a FREE Trial of the Business Plan with Advanced Analytics for 7 "
505
- "days. No credit card required. %sSee details%s %s"
 
 
506
  msgstr ""
507
 
508
- #: core/BlockBriefcaseKeywords.php:70
509
- msgid "No keyword found in the briefcase."
510
  msgstr ""
511
 
512
- #: core/BlockBriefcaseKeywords.php:96 core/BlockBriefcaseKeywords.php:123
513
- #: core/BlockBriefcaseKeywords.php:141 core/BlockBriefcaseKeywords.php:165
514
- #: core/BlockBriefcaseKeywords.php:235 core/BlockBriefcaseKeywords.php:255
515
- #: core/BlockBriefcaseKeywords.php:277 core/BlockBriefcaseKeywords.php:295
516
- msgid "You don't have enough pemission to manage this feature"
 
 
 
 
 
 
 
517
  msgstr ""
518
 
519
- #: core/BlockBriefcaseKeywords.php:116 core/BlockBriefcaseKeywords.php:248
520
- #: core/BlockBriefcaseKeywords.php:270 core/BlockBriefcaseKeywords.php:312
521
- #: core/Loading.php:40 view/FrontMenu.php:45
522
- msgid "Saved!"
523
  msgstr ""
524
 
525
- #: core/BlockBriefcaseKeywords.php:118 core/BlockBriefcaseKeywords.php:159
526
- #: core/BlockBriefcaseKeywords.php:227 core/BlockBriefcaseKeywords.php:314
527
- msgid "Invalid Keyword!"
 
 
 
 
 
 
528
  msgstr ""
529
 
530
- #: core/BlockBriefcaseKeywords.php:134 core/BlockBriefcaseKeywords.php:288
531
- msgid "Deleted!"
532
  msgstr ""
533
 
534
- #: core/BlockBriefcaseKeywords.php:136 core/BlockBriefcaseKeywords.php:272
535
- #: core/BlockBriefcaseKeywords.php:290
536
- msgid "Invalid params!"
 
 
 
 
 
 
 
 
 
 
537
  msgstr ""
538
 
539
- #: core/BlockBriefcaseKeywords.php:155
540
- msgid "Keyword Research limit exceeded."
541
  msgstr ""
542
 
543
- #: core/BlockBriefcaseKeywords.php:155 core/Loading.php:61
544
- msgid "Add 20 Keyword Researches"
545
  msgstr ""
546
 
547
- #: core/BlockBriefcaseKeywords.php:186
548
- msgid "Check Ranks"
 
 
 
 
549
  msgstr ""
550
 
551
- #: core/BlockBriefcaseKeywords.php:197 models/BlockPostsAnalytics.php:393
552
- #: models/SerpCheckerTable.php:565
553
- msgid "Edit"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
  msgstr ""
555
 
556
- #: core/BlockBriefcaseKeywords.php:198
557
- msgid "Get Rank"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
558
  msgstr ""
559
 
560
- #: core/BlockBriefcaseKeywords.php:203
561
- msgid "Deleted Post"
562
  msgstr ""
563
 
564
- #: core/BlockBriefcaseKeywords.php:213
565
- msgid "Article title"
 
 
 
 
 
 
 
 
566
  msgstr ""
567
 
568
- #: core/BlockBriefcaseKeywords.php:214 models/SerpCheckerTable.php:359
569
- msgid "Google Rank"
570
  msgstr ""
571
 
572
- #: core/BlockBriefcaseKeywords.php:215 models/SerpCheckerTable.php:362
573
- msgid "Optimized"
 
 
 
 
 
 
574
  msgstr ""
575
 
576
- #: core/BlockBriefcaseKeywords.php:216
577
- msgid "Option"
578
  msgstr ""
579
 
580
- #: core/BlockBriefcaseKeywords.php:221
581
- msgid "There are no articles found"
 
 
 
 
 
 
 
582
  msgstr ""
583
 
584
- #: core/BlockBriefcaseKeywords.php:250
585
- msgid "Invalid Label or Color!"
586
  msgstr ""
587
 
588
- #: core/BlockImport.php:34
589
- msgid "All the Plugin settings were imported successfuly!"
 
 
 
 
 
 
 
 
 
 
590
  msgstr ""
591
 
592
- #: core/BlockImport.php:36
593
- msgid "No settings found for this plugin/theme."
594
  msgstr ""
595
 
596
- #: core/BlockImport.php:58
597
  #, php-format
598
- msgid ""
599
- "%s SEO records were imported successfuly! You can now deactivate the %s "
600
- "plugin"
 
 
601
  msgstr ""
602
 
603
- #: core/BlockImport.php:60
604
  #, php-format
605
  msgid ""
606
- "There are no SEO records with this plugin. You can now deactivate the %s "
607
- "plugin"
 
 
 
608
  msgstr ""
609
 
610
- #: core/BlockSerpKeywords.php:46
611
- msgid "No keyword found yet."
612
  msgstr ""
613
 
614
- #: core/BlockSerpKeywords.php:50
615
- msgid "No connection with Squirrly Server"
616
  msgstr ""
617
 
618
- #: core/BlockSerpKeywords.php:132
619
- msgid "Could not find the Article in your Website"
620
- msgstr ""
 
 
 
621
 
622
- #: core/BlockSettingsSeo.php:27
623
  #, php-format
624
- msgid "You can now import into Squirrly SEO all the SEO Settings from %s"
 
 
 
 
 
 
 
625
  msgstr ""
626
 
627
- #: core/BlockSettingsSeo.php:40 core/Blockseo.php:13
628
- msgid "Too short"
629
  msgstr ""
630
 
631
- #: core/BlockSettingsSeo.php:41 core/Blockseo.php:14
632
- msgid "Too long"
 
 
 
 
 
 
 
 
 
 
633
  msgstr ""
634
 
635
- #: core/BlockSettingsSeo.php:483
636
- msgid "Great! The backup is restored."
637
  msgstr ""
638
 
639
- #: core/BlockSettingsSeo.php:485 core/BlockSettingsSeo.php:488
640
- #: core/BlockSettingsSeo.php:533 core/BlockSettingsSeo.php:536
641
- msgid "Error! The backup is not valid."
642
  msgstr ""
643
 
644
- #: core/BlockSettingsSeo.php:491 core/BlockSettingsSeo.php:539
645
- msgid "Error! You have to enter a previous saved backup file."
 
 
 
 
 
 
 
 
 
646
  msgstr ""
647
 
648
- #: core/BlockSettingsSeo.php:530
649
- msgid "Great! The SEO backup is restored."
650
  msgstr ""
651
 
652
- #: core/BlockSettingsSeo.php:546
653
- msgid "Great! Squirrly Data Settings is up to date now."
654
  msgstr ""
655
 
656
- # @ squirrly-seo
657
- #: core/BlockSupport.php:24
658
- msgid "Plugin Feedback"
659
  msgstr ""
660
 
661
- # @ squirrly-seo
662
- #: core/BlockSupport.php:59
663
- msgid "Thank you for your feedback"
664
  msgstr ""
665
 
666
- # @ squirrly-seo
667
- #: core/BlockSupport.php:63 core/BlockSupport.php:103
668
- msgid "No message."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
669
  msgstr ""
670
 
671
- # @ squirrly-seo
672
- #: core/BlockSupport.php:85
673
- msgid "Plugin Support"
674
  msgstr ""
675
 
676
- #: core/BlockSupport.php:96
677
- msgid "Message sent. Thank you!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
  msgstr ""
679
 
680
- #: core/BlockSupport.php:99
681
- msgid "Could not send the email. Make sure you can send emails from your blog."
682
  msgstr ""
683
 
684
- # @ squirrly-seo
685
- #: core/Blocklogin.php:84
686
  #, php-format
687
  msgid ""
688
- "We found your email, so it means you already have a Squirrly.co account. "
689
- "Please login with your Squirrly Email. If you forgot your password click "
690
- "%shere%s"
 
691
  msgstr ""
692
 
693
- #: core/Blocklogin.php:87
694
- msgid "Your email is not valid. Please enter a valid email"
695
  msgstr ""
696
 
697
- #: core/Blocklogin.php:90
698
- msgid "We could not create your account. Please enter a valid email "
 
 
 
 
 
 
 
 
 
 
699
  msgstr ""
700
 
701
- #: core/Blocklogin.php:95
702
- msgid ""
703
- "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
704
- "webmaster) and request them to add http://api.squirrly.co/ to their IP "
705
- "whitelist."
706
  msgstr ""
707
 
708
- # @ squirrly-seo
709
- #: core/Blocklogin.php:98
710
- #, php-format
711
  msgid ""
712
- "Could not send your informations to squirrly. Please register %smanually%s."
713
  msgstr ""
714
 
715
- # @ squirrly-seo
716
- #: core/Blocklogin.php:139
717
- msgid "Wrong email or password!"
718
  msgstr ""
719
 
720
- # @ squirrly-seo
721
- #: core/Blocklogin.php:142
722
- msgid "You can use this account only for the URL you registered first!"
723
  msgstr ""
724
 
725
- # @ squirrly-seo
726
- #: core/Blocklogin.php:147
727
- msgid "An error occured."
728
  msgstr ""
729
 
730
- # @ squirrly-seo
731
- #: core/Blocklogin.php:149
732
- msgid "Both fields are required."
733
  msgstr ""
734
 
735
- #: core/Blockseo.php:15
736
- msgid "snippet"
737
  msgstr ""
738
 
739
- #: core/Loading.php:37
740
- msgid "Recent discussions:"
741
  msgstr ""
742
 
743
- #: core/Loading.php:37
744
- msgid "SEO Search Volume:"
 
 
 
 
745
  msgstr ""
746
 
747
- # @ squirrly-seo
748
- #: core/Loading.php:37
749
- msgid "Competition:"
 
 
 
750
  msgstr ""
751
 
752
  # @ squirrly-seo
753
- #: core/Loading.php:37
754
- msgid "Trend:"
 
 
 
 
 
 
 
 
 
755
  msgstr ""
756
 
757
- # @ squirrly-seo
758
- #: core/Loading.php:38
759
- msgid "Keyword:"
760
  msgstr ""
761
 
762
- # @ squirrly-seo
763
- #: core/Loading.php:39
764
- msgid "date"
765
  msgstr ""
766
 
767
- # @ squirrly-seo
768
- #: core/Loading.php:41
769
- msgid "Read it!"
 
770
  msgstr ""
771
 
772
- # @ squirrly-seo
773
- #: core/Loading.php:42
774
- msgid "Insert it!"
775
  msgstr ""
776
 
777
- # @ squirrly-seo
778
- #: core/Loading.php:43
779
- msgid "Reference"
 
780
  msgstr ""
781
 
782
- # @ squirrly-seo
783
- #: core/Loading.php:44
784
- msgid "Insert as box"
785
  msgstr ""
786
 
787
- #: core/Loading.php:45
788
- msgid "Insert Link"
789
  msgstr ""
790
 
791
- # @ squirrly-seo
792
- #: core/Loading.php:46
793
- msgid "Not relevant?"
794
  msgstr ""
795
 
796
- # @ squirrly-seo
797
- #: core/Loading.php:47
798
- msgid "Insert in your article"
799
  msgstr ""
800
 
801
- #: core/Loading.php:48
802
- msgid ":( An error occurred while processing your request. Please try again"
 
 
 
803
  msgstr ""
804
 
805
- #: core/Loading.php:49
806
- msgid "Keyword Research takes too long to get the results. Click to try again"
807
  msgstr ""
808
 
809
- # @ squirrly-seo
810
- #: core/Loading.php:50
811
- msgid "No results found!"
 
812
  msgstr ""
813
 
814
- #: core/Loading.php:51
815
- msgid "Enter one more word to find relevant results"
816
  msgstr ""
817
 
818
- # @ squirrly-seo
819
- #: core/Loading.php:52
820
- msgid "Takes too long to check this keyword ..."
821
  msgstr ""
822
 
823
- # @ squirrly-seo
824
- #: core/Loading.php:53
825
- msgid "Do a research!"
826
  msgstr ""
827
 
828
  # @ squirrly-seo
829
- #: core/Loading.php:54
830
- msgid "Do more research!"
831
- msgstr ""
 
 
 
 
 
 
 
 
832
 
833
- #: core/Loading.php:55
834
- #, php-format
835
- msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
836
  msgstr ""
837
 
838
- #: core/Loading.php:56
839
- msgid "Has creative commons attributes"
 
 
840
  msgstr ""
841
 
842
- #: core/Loading.php:57
843
- msgid "No known copyright restrictions"
844
  msgstr ""
845
 
846
- #: core/Loading.php:58
847
- msgid ""
848
- "You haven`t used Squirrly SEO to optimize your article. Do you want to "
849
- "optimize for a keyword before publishing?"
850
  msgstr ""
851
 
852
- #: core/Loading.php:59
853
- msgid "Keyword Research limit exceeded"
 
854
  msgstr ""
855
 
856
- #: core/Loading.php:60
857
- msgid "Your Subscription has Expired"
858
  msgstr ""
859
 
860
- #: core/Loading.php:62
861
- msgid "There are no keywords saved in briefcase yet"
862
  msgstr ""
863
 
864
- #: core/Loading.php:63
865
- #, php-format
866
- msgid "Congratulations! Your article is 100% optimized!"
867
  msgstr ""
868
 
869
- #: core/Loading.php:64
870
- #, php-format
871
- msgid "appears too many times. Try to remove %s of them"
872
  msgstr ""
873
 
874
- #: core/Loading.php:65
875
  #, php-format
876
- msgid "write %s more words"
877
  msgstr ""
878
 
879
- #: core/Loading.php:66
880
- #, php-format
881
- msgid "Add the keyword in the %s of your article"
 
882
  msgstr ""
883
 
884
- #: core/Loading.php:67
885
- msgid "Click to keep the highlight on"
886
  msgstr ""
887
 
888
- #: core/Loading.php:68
889
- msgid "introduction"
890
  msgstr ""
891
 
892
- #: core/Loading.php:69
893
- #, php-format
894
- msgid "Write more words after the %s keyword"
895
  msgstr ""
896
 
897
- #: core/Loading.php:70
898
- msgid "or use synonyms"
899
  msgstr ""
900
 
901
- #: core/Loading.php:71
902
- #, php-format
903
- msgid "add %s more word(s)"
904
  msgstr ""
905
 
906
- #: core/Loading.php:72
907
- #, php-format
908
- msgid "or remove %s word(s)"
909
  msgstr ""
910
 
911
- #: core/Loading.php:73
912
- #, php-format
913
- msgid "add %s more keyword(s)"
914
  msgstr ""
915
 
916
- #: core/Loading.php:74
917
- #, php-format
918
- msgid "write %s more words to start calculating"
919
  msgstr ""
920
 
921
- #: core/Loading.php:75
922
- msgid "Add to Briefcase"
923
  msgstr ""
924
 
925
- #: core/Loading.php:76
926
- msgid "Add Keyword to Briefcase"
927
  msgstr ""
928
 
929
- #: core/Loading.php:77 view/BlockBriefcaseKeywords.php:304
930
- msgid "Use Keyword"
 
931
  msgstr ""
932
 
933
- #: core/Loading.php:78
934
- msgid "Auto Draft"
935
  msgstr ""
936
 
937
- #: models/BlockPostsAnalytics.php:290
938
- msgctxt "column name"
939
- msgid "Title"
940
  msgstr ""
941
 
942
- #: models/BlockPostsAnalytics.php:292 models/SerpCheckerTable.php:376
943
- msgid "Type"
944
  msgstr ""
945
 
946
- #: models/BlockPostsAnalytics.php:295 models/SerpCheckerTable.php:374
947
- #: view/FrontMenu.php:386
948
- msgid "Author"
949
  msgstr ""
950
 
951
- #: models/BlockPostsAnalytics.php:298
952
- msgid "Keywords"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
953
  msgstr ""
954
 
955
- #: models/BlockPostsAnalytics.php:300
956
- #, php-format
957
- msgid "Google.%s Position"
958
  msgstr ""
959
 
960
- #: models/BlockPostsAnalytics.php:303 view/BlockAudit.php:48
961
- msgid "Date"
962
  msgstr ""
963
 
964
- #: models/BlockPostsAnalytics.php:317
965
- msgid "Reset Filters"
966
  msgstr ""
967
 
968
- #: models/BlockPostsAnalytics.php:322
969
- msgid "Search Posts"
 
 
970
  msgstr ""
971
 
972
- #: models/BlockPostsAnalytics.php:390 models/SerpCheckerTable.php:562
973
- #, php-format
974
- msgid "Edit &#8220;%s&#8221;"
 
975
  msgstr ""
976
 
977
- #: models/BlockPostsAnalytics.php:393 models/SerpCheckerTable.php:565
978
- msgid "Edit this item"
979
  msgstr ""
980
 
981
- #: models/BlockPostsAnalytics.php:398 models/SerpCheckerTable.php:570
982
- #, php-format
983
- msgid "Preview &#8220;%s&#8221;"
984
  msgstr ""
985
 
986
- #: models/BlockPostsAnalytics.php:398 models/SerpCheckerTable.php:570
987
- msgid "Preview"
988
  msgstr ""
989
 
990
- #: models/BlockPostsAnalytics.php:400 models/SerpCheckerTable.php:572
991
- #, php-format
992
- msgid "View &#8220;%s&#8221;"
993
  msgstr ""
994
 
995
- #: models/BlockPostsAnalytics.php:400 models/SerpCheckerTable.php:572
996
- msgid "View"
997
  msgstr ""
998
 
999
- #: models/BlockPostsAnalytics.php:422
1000
- msgid "No Tags"
1001
  msgstr ""
1002
 
1003
- #: models/BlockPostsAnalytics.php:432
1004
- msgid "Could not receive data from google (Err: blocked IP)"
1005
  msgstr ""
1006
 
1007
- #: models/BlockPostsAnalytics.php:434
1008
- msgid "Not in top 100 for: <br /> \""
1009
  msgstr ""
1010
 
1011
- #: models/BlockPostsAnalytics.php:436
1012
- msgid "The URL is indexed"
1013
  msgstr ""
1014
 
1015
- #: models/BlockPostsAnalytics.php:440
1016
- msgid "Force recheck"
1017
  msgstr ""
1018
 
1019
- #: models/BlockPostsAnalytics.php:442
1020
- msgid "Not yet verified"
1021
  msgstr ""
1022
 
1023
- #: models/BlockPostsAnalytics.php:442
1024
- msgid "Check now"
1025
  msgstr ""
1026
 
1027
- #: models/BlockPostsAnalytics.php:445
1028
- #, php-format
1029
- msgid "Enable Ranking in %sAdvanced Settings%s"
1030
  msgstr ""
1031
 
1032
- #: models/BlockPostsAnalytics.php:457 models/SerpCheckerTable.php:654
1033
- msgid "Unpublished"
1034
  msgstr ""
1035
 
1036
- #: models/BlockPostsAnalytics.php:466 models/SerpCheckerTable.php:663
1037
- #, php-format
1038
- msgid "%s ago"
 
 
1039
  msgstr ""
1040
 
1041
- #: models/BlockPostsAnalytics.php:468 models/SerpCheckerTable.php:665
1042
- msgid "Y/m/d"
 
 
1043
  msgstr ""
1044
 
1045
- #: models/BlockPostsAnalytics.php:473 models/SerpCheckerTable.php:670
1046
- msgid "Published"
 
 
 
 
 
1047
  msgstr ""
1048
 
1049
- #: models/BlockPostsAnalytics.php:476 models/SerpCheckerTable.php:673
1050
- msgid "Missed schedule"
 
 
1051
  msgstr ""
1052
 
1053
- #: models/BlockPostsAnalytics.php:478 models/SerpCheckerTable.php:675
1054
- msgid "Scheduled"
 
1055
  msgstr ""
1056
 
1057
- #: models/BlockPostsAnalytics.php:480 models/SerpCheckerTable.php:677
1058
- msgid "Last Modified"
 
 
 
1059
  msgstr ""
1060
 
1061
- # @ squirrly-seo
1062
- #: models/BlockSettingsSeo.php:71
1063
- msgid "The code for Google Webmaster Tool is incorrect."
1064
  msgstr ""
1065
 
1066
- # @ squirrly-seo
1067
- #: models/BlockSettingsSeo.php:98
1068
- msgid "The code for Google Analytics is incorrect."
 
 
1069
  msgstr ""
1070
 
1071
- # @ squirrly-seo
1072
- #: models/BlockSettingsSeo.php:144
1073
- msgid "The code for Facebook is incorrect."
 
 
 
1074
  msgstr ""
1075
 
1076
- #: models/BlockSettingsSeo.php:169
1077
- msgid "The code for Pinterest is incorrect."
1078
  msgstr ""
1079
 
1080
- # @ squirrly-seo
1081
- #: models/BlockSettingsSeo.php:194
1082
- msgid "The code for Bing is incorrect."
1083
  msgstr ""
1084
 
1085
- #: models/BlockSettingsSeo.php:320
1086
- msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
1087
  msgstr ""
1088
 
1089
- # @ squirrly-seo
1090
- #: models/BlockSettingsSeo.php:326
1091
- msgid "GD error: The GD library must be installed on your server."
1092
  msgstr ""
1093
 
1094
- # @ squirrly-seo
1095
- #: models/BlockSettingsSeo.php:332
1096
- msgid "Delete error: Could not delete the old favicon."
1097
  msgstr ""
1098
 
1099
- # @ squirrly-seo
1100
- #: models/BlockSettingsSeo.php:339
1101
- msgid "Upload error: Could not upload the favicon."
1102
  msgstr ""
1103
 
1104
- # @ squirrly-seo
1105
- #: models/BlockSettingsSeo.php:345
1106
- msgid "Permission error: Could not change the favicon permissions."
1107
  msgstr ""
1108
 
1109
  # @ squirrly-seo
1110
- #: models/BlockSettingsSeo.php:367
1111
- msgid ""
1112
- "ICO Error: Could not create the ICO from file. Try with another file type."
1113
  msgstr ""
1114
 
1115
  # @ squirrly-seo
1116
- #: models/BlockSettingsSeo.php:386
1117
- msgid "The favicon has been updated."
1118
  msgstr ""
1119
 
1120
- # @ default
1121
- #: models/Post.php:53
1122
- msgid "Squirrly could not find any results for: "
1123
  msgstr ""
1124
 
1125
- #: models/Post.php:122
1126
- msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
 
1127
  msgstr ""
1128
 
1129
- #: models/Post.php:123
1130
- msgid ""
1131
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
1132
- "the HTML form."
1133
  msgstr ""
1134
 
1135
- #: models/Post.php:124
1136
- msgid "The uploaded file was only partially uploaded."
 
1137
  msgstr ""
1138
 
1139
- #: models/Post.php:125
1140
- msgid "No file was uploaded."
1141
  msgstr ""
1142
 
1143
- #: models/Post.php:127
1144
- msgid "Missing a temporary folder."
 
1145
  msgstr ""
1146
 
1147
- #: models/Post.php:128
1148
- msgid "Failed to write file to disk."
1149
  msgstr ""
1150
 
1151
- #: models/Post.php:129
1152
- msgid "File upload stopped by extension."
1153
  msgstr ""
1154
 
1155
- #: models/Post.php:146
1156
- msgid "Invalid form submission."
1157
  msgstr ""
1158
 
1159
- #: models/Post.php:156
1160
- msgid "File is empty. Please upload something more substantial."
1161
  msgstr ""
1162
 
1163
- #: models/Post.php:158
1164
- msgid ""
1165
- "File is empty. Please upload something more substantial. This error could "
1166
- "also be caused by uploads being disabled in your php.ini or by post_max_size "
1167
- "being defined as smaller than upload_max_filesize in php.ini."
1168
  msgstr ""
1169
 
1170
- #: models/Post.php:164
1171
- msgid "Specified file failed upload test."
1172
  msgstr ""
1173
 
1174
- #: models/Post.php:177
1175
- msgid "Sorry, this file type is not permitted for security reasons."
 
1176
  msgstr ""
1177
 
1178
- #: models/Post.php:202
1179
  #, php-format
1180
- msgid "The uploaded file could not be moved to %s."
1181
  msgstr ""
1182
 
1183
- #: models/PostsList.php:27
1184
- msgid "Optimized:"
1185
  msgstr ""
1186
 
1187
- #: models/PostsList.php:28
1188
- msgid "See Analytics"
1189
  msgstr ""
1190
 
1191
- #: models/PostsList.php:30
1192
- msgid "Optimize it with Squirrly to see the Analytics"
1193
  msgstr ""
1194
 
1195
- #: models/PostsList.php:83
1196
- msgid "This post's current position in Google"
1197
  msgstr ""
1198
 
1199
- #: models/PostsList.php:86
1200
- msgid "The total traffic for the last 30 days, for the current post"
1201
  msgstr ""
1202
 
1203
- #: models/PostsList.php:89
1204
- msgid "The total number of shares on social media channels for this post"
1205
  msgstr ""
1206
 
1207
- #: models/PostsList.php:92
1208
- msgid "The total authority for this post"
1209
  msgstr ""
1210
 
1211
- #: models/PostsList.php:95
1212
- msgid "The total number of inbound links to this post"
1213
  msgstr ""
1214
 
1215
- #: models/SerpCheckerTable.php:353 view/BlockPatterns.php:102
1216
- #: view/FrontMenu.php:156
1217
- msgid "Title"
1218
  msgstr ""
1219
 
1220
- #: models/SerpCheckerTable.php:356 view/BlockBriefcaseKeywords.php:76
1221
- #: view/BlockBriefcaseKeywords.php:184 view/BlockSerpKeywords.php:31
1222
- #: view/BlockSerpKeywords.php:63
1223
- msgid "Keyword"
1224
  msgstr ""
1225
 
1226
- #: models/SerpCheckerTable.php:371
1227
- msgid "Social Shares"
1228
  msgstr ""
1229
 
1230
- #: models/SerpCheckerTable.php:378
1231
- msgid "Post Date"
1232
  msgstr ""
1233
 
1234
- #: models/SerpCheckerTable.php:399 view/BlockBriefcaseKeywords.php:46
1235
- msgid "Search Keyword"
1236
  msgstr ""
1237
 
1238
- #: models/SerpCheckerTable.php:599
1239
- #, php-format
1240
- msgid "Squirrly Optimization for: '%s'"
1241
  msgstr ""
1242
 
1243
- #: models/SerpCheckerTable.php:632
1244
- msgid "Facebook"
1245
  msgstr ""
1246
 
1247
- # @ squirrly-seo
1248
- #: models/SerpCheckerTable.php:633 view/Blocksearch.php:61
1249
- msgid "Twitter"
 
1250
  msgstr ""
1251
 
1252
- #: models/SerpCheckerTable.php:636
1253
- msgid "Reddit"
1254
  msgstr ""
1255
 
1256
- #: models/SerpCheckerTable.php:637
1257
- msgid "Stumble"
1258
  msgstr ""
1259
 
1260
- #: models/SerpCheckerTable.php:638
1261
- msgid "Pinterest"
1262
  msgstr ""
1263
 
1264
- #: models/SerpCheckerTable.php:642
1265
- #, php-format
1266
- msgid "Google Rank for keyword '%s' on '%s'"
1267
  msgstr ""
1268
 
1269
- #: models/SerpCheckerTable.php:702
1270
- msgid "In queue"
1271
  msgstr ""
1272
 
1273
- #: models/SerpCheckerTable.php:705
1274
- msgid "Not indexed"
1275
  msgstr ""
1276
 
1277
- #: models/domain/Patterns.php:240
1278
- msgid "Page"
 
1279
  msgstr ""
1280
 
1281
- #: models/domain/Patterns.php:241
1282
- msgid "of"
 
1283
  msgstr ""
1284
 
1285
- #: models/services/Robots.php:13
1286
- msgid "Squirrly SEO Robots"
1287
- msgstr ""
 
 
 
1288
 
1289
- #: models/services/Robots.php:16
1290
- msgid ""
1291
- "Your blog is not public. Please see Site Visibility on Settings > Reading."
1292
  msgstr ""
1293
 
1294
- #: models/services/Robots.php:31
1295
- msgid "No Squirrly SEO Robots found."
1296
- msgstr ""
 
 
 
1297
 
1298
  # @ squirrly-seo
1299
- #: squirrly.php:75
1300
- msgid ""
1301
- "For Squirrly to work, the PHP version has to be equal or greater then 5.1"
1302
  msgstr ""
1303
 
1304
- #: view/BlockAccount.php:7 view/BlockAffiliate.php:7 view/BlockAudit.php:7
1305
- #: view/BlockBriefcaseKeywords.php:7 view/BlockDashboard.php:6
1306
- #: view/BlockImport.php:7 view/BlockKeywordResearch.php:7
1307
- #: view/BlockPatterns.php:7 view/BlockPostsAnalytics.php:7
1308
- #: view/BlockSettings.php:7 view/BlockSettingsSeo.php:7 view/SerpChecker.php:7
1309
- msgid "Connect to Squirrly Data Cloud"
1310
  msgstr ""
1311
 
1312
- #: view/BlockAccount.php:13 view/BlockAffiliate.php:13 view/BlockAudit.php:13
1313
- #: view/BlockBriefcaseKeywords.php:13 view/BlockDashboard.php:28
1314
- #: view/BlockImport.php:13 view/BlockKeywordResearch.php:13
1315
- #: view/BlockPatterns.php:13 view/BlockPostsAnalytics.php:12
1316
- #: view/BlockSettings.php:13 view/BlockSettingsSeo.php:13
1317
- #: view/Blocklogin.php:38 view/SerpChecker.php:13
1318
- msgid "START HERE"
1319
  msgstr ""
1320
 
1321
- #: view/BlockAccount.php:23
1322
- msgid "Squirrly account information"
 
1323
  msgstr ""
1324
 
1325
- #: view/BlockAccount.php:25 view/BlockAffiliate.php:23
1326
- msgid "Go to dashboard"
 
1327
  msgstr ""
1328
 
1329
- #: view/BlockAccount.php:26
1330
- msgid "See ALL of Your Activity so Far"
 
1331
  msgstr ""
1332
 
1333
- #: view/BlockAffiliate.php:21 view/BlockAffiliate.php:33
1334
- msgid "Join our affiliate program"
1335
  msgstr ""
1336
 
1337
- #: view/BlockAffiliate.php:34
1338
- #, php-format
1339
- msgid "%sHow I Started Making Money With the Squirrly Affiliate Program%s"
1340
  msgstr ""
1341
 
1342
- #: view/BlockAffiliate.php:37
1343
- msgid "Affiliate Benefits"
1344
  msgstr ""
1345
 
1346
- #: view/BlockAffiliate.php:42
1347
- #, php-format
1348
- msgid "- Up to recurring 45%s commission"
1349
  msgstr ""
1350
 
1351
- #: view/BlockAffiliate.php:47
1352
- msgid "- No cost"
1353
  msgstr ""
1354
 
1355
- #: view/BlockAffiliate.php:52
1356
- msgid "- Monthly payments in your Paypal account"
1357
  msgstr ""
1358
 
1359
- #: view/BlockAffiliate.php:61
 
1360
  #, php-format
1361
  msgid ""
1362
- "Before joining our affiliate program, please read the Terms of Use %shttps://"
1363
- "www.squirrly.co/terms/%s."
1364
  msgstr ""
1365
 
1366
- #: view/BlockAffiliate.php:69
1367
- msgid ""
1368
- "To redirect users to your site, just change \"squirrly.co\" with your domain."
1369
  msgstr ""
1370
 
1371
- #: view/BlockAffiliate.php:72
1372
- msgid "Generate affiliate link"
1373
  msgstr ""
1374
 
1375
- #: view/BlockAffiliate.php:81
1376
- msgid ""
1377
- "Your affiliate account is set and ready to go. Above you have the affiliate "
1378
- "link. "
1379
  msgstr ""
1380
 
1381
- #: view/BlockAffiliate.php:83
1382
- #, php-format
1383
- msgid "Check your affiliate page: %sAffiliate page%s"
1384
  msgstr ""
1385
 
1386
- #: view/BlockAffiliate.php:86
1387
- msgid ""
1388
- "After you connect to Squirrly you can begin to use your free Squirrly "
1389
- "affiliate link immediately!"
1390
  msgstr ""
1391
 
1392
- #: view/BlockAffiliate.php:96
1393
- msgid "Squirrly banners you can use"
 
1394
  msgstr ""
1395
 
1396
- #: view/BlockAffiliate.php:121
1397
- msgid "<< START HERE >>"
 
 
1398
  msgstr ""
1399
 
1400
- #: view/BlockAnalytics.php:55
1401
- msgid "Moz Inbound Links"
1402
  msgstr ""
1403
 
1404
- #: view/BlockAnalytics.php:62
1405
- msgid "Ahrefs Inbound Links"
 
 
 
 
 
 
 
 
 
 
 
1406
  msgstr ""
1407
 
1408
- #: view/BlockAnalytics.php:74
1409
- msgid "Moz Authority"
 
1410
  msgstr ""
1411
 
1412
- #: view/BlockAnalytics.php:79
1413
- msgid "Moz Rank"
 
 
1414
  msgstr ""
1415
 
1416
- #: view/BlockAnalytics.php:86
1417
- msgid "Google Page Rank"
1418
  msgstr ""
1419
 
1420
- #: view/BlockAnalytics.php:92
1421
- msgid "Ahrefs Rank"
1422
  msgstr ""
1423
 
1424
- #: view/BlockAnalytics.php:109
1425
- msgid "Facebook shares"
 
1426
  msgstr ""
1427
 
1428
- #: view/BlockAnalytics.php:114
1429
- msgid "Twitter shares"
1430
  msgstr ""
1431
 
1432
- #: view/BlockAnalytics.php:119
1433
- msgid "StumbleUpon shares"
1434
  msgstr ""
1435
 
1436
- #: view/BlockAnalytics.php:124
1437
- msgid "Reddit shares"
 
1438
  msgstr ""
1439
 
1440
- #: view/BlockAnalytics.php:129
1441
- msgid "Pinterest shares"
1442
  msgstr ""
1443
 
1444
- #: view/BlockAnalytics.php:161
1445
- msgid "Nicely done! Now you can focus on the other tasks"
1446
  msgstr ""
1447
 
1448
- #: view/BlockAnalytics.php:161
1449
- msgid ""
1450
- "I know you can improve this. Please follow the documentation for a quicker "
1451
- "progress"
1452
  msgstr ""
1453
 
1454
- #: view/BlockAnalytics.php:234
1455
- msgid "Visits"
1456
  msgstr ""
1457
 
1458
- #: view/BlockAnalytics.php:247
1459
- msgid "Current: "
 
 
 
1460
  msgstr ""
1461
 
1462
- #: view/BlockAnalytics.php:248
1463
- msgid "Lowest: "
1464
  msgstr ""
1465
 
1466
- #: view/BlockAnalytics.php:249
1467
- msgid "Highest: "
 
1468
  msgstr ""
1469
 
1470
- #: view/BlockAnalytics.php:253
1471
- msgid "last 30 days"
 
1472
  msgstr ""
1473
 
1474
- #: view/BlockAudit.php:24
1475
- msgid "Squirrly Site Audit"
 
 
 
1476
  msgstr ""
1477
 
1478
- #: view/BlockAudit.php:31
1479
- msgid "What the Audit offers:"
1480
  msgstr ""
1481
 
1482
- #: view/BlockAudit.php:32
1483
- #, php-format
1484
- msgid ""
1485
- "%sTracks all the areas of your Content Marketing Strategy:%s: Blogging, "
1486
- "Traffic, SEO, Social Signals, Links, Authority. Every single week, you get a "
1487
- "new report by email."
1488
  msgstr ""
1489
 
1490
- #: view/BlockAudit.php:33
1491
- #, php-format
1492
- msgid ""
1493
- "%sIt gives you professional advice on how to fix issues in those 6 areas%s. "
1494
- "You can easily find out how to improve your content marketing strategy."
1495
  msgstr ""
1496
 
1497
- #: view/BlockAudit.php:34
1498
- #, php-format
1499
- msgid ""
1500
- "%sMonitors your progress, week by week.%s You’ll get to see if your site "
1501
- "audit has improved since you last checked it. "
1502
  msgstr ""
1503
 
1504
- #: view/BlockAudit.php:35
1505
  #, php-format
1506
- msgid "%sAnalyze any single article.%s See how it improves over time."
1507
  msgstr ""
1508
 
1509
- #: view/BlockAudit.php:36
1510
- #, php-format
1511
- msgid "%sLearn More About The Site Audit%s"
1512
  msgstr ""
1513
 
1514
- #: view/BlockAudit.php:37
1515
- #, php-format
1516
- msgid "%sRequest an Audit Now%s"
1517
  msgstr ""
1518
 
1519
- #: view/BlockAudit.php:43
1520
- msgid "\"Your current site audit score:"
1521
  msgstr ""
1522
 
1523
- #: view/BlockAudit.php:47
1524
- msgid "Score"
1525
  msgstr ""
1526
 
1527
- #: view/BlockAudit.php:50
1528
- msgid "See the Audit"
1529
  msgstr ""
1530
 
1531
- #: view/BlockAudit.php:53
1532
  msgid ""
1533
- "It seems that no audit has been generated yet. You can request an audit down "
1534
- "below. It should be ready in 5-10 minutes."
1535
  msgstr ""
1536
 
1537
- #: view/BlockAudit.php:55
1538
- msgid "Request an Audit Now"
1539
  msgstr ""
1540
 
1541
- #: view/BlockAudit.php:62
1542
- msgid "This is an example of a Site Audit"
 
 
1543
  msgstr ""
1544
 
1545
- #: view/BlockBriefcaseKeywords.php:25 view/SerpChecker.php:49
1546
- msgid "Show All"
1547
  msgstr ""
1548
 
1549
- #: view/BlockBriefcaseKeywords.php:29
1550
- msgid "Briefcase Keywords"
1551
  msgstr ""
1552
 
1553
- #: view/BlockBriefcaseKeywords.php:33
1554
- msgid "See the Google Ranks for these Keywords"
1555
  msgstr ""
1556
 
1557
- #: view/BlockBriefcaseKeywords.php:36
1558
- msgid "Go to Analytics"
1559
  msgstr ""
1560
 
1561
- #: view/BlockBriefcaseKeywords.php:48
1562
- msgid "Filter by labels"
1563
  msgstr ""
1564
 
1565
- #: view/BlockBriefcaseKeywords.php:62 view/BlockSerpKeywords.php:12
1566
- msgid "Add new keyword"
 
 
1567
  msgstr ""
1568
 
1569
- #: view/BlockBriefcaseKeywords.php:63
1570
- msgid "Manage Labels"
1571
  msgstr ""
1572
 
1573
- #: view/BlockBriefcaseKeywords.php:72 view/BlockSerpKeywords.php:27
1574
- msgid "Add a new Keyword"
 
1575
  msgstr ""
1576
 
1577
- #: view/BlockBriefcaseKeywords.php:77 view/BlockSerpKeywords.php:32
1578
- msgid "Enter a Keyword (2-4 words)"
1579
  msgstr ""
1580
 
1581
- #: view/BlockBriefcaseKeywords.php:80
1582
- msgid "Select Labels"
1583
  msgstr ""
1584
 
1585
- #: view/BlockBriefcaseKeywords.php:89 view/BlockBriefcaseKeywords.php:234
1586
- msgid "Add new Label"
1587
  msgstr ""
1588
 
1589
- #: view/BlockBriefcaseKeywords.php:96 view/BlockSerpKeywords.php:42
1590
- msgid "Add Keyword"
1591
  msgstr ""
1592
 
1593
- #: view/BlockBriefcaseKeywords.php:107
1594
- msgid "Add New Label"
 
 
 
1595
  msgstr ""
1596
 
1597
- #: view/BlockBriefcaseKeywords.php:111 view/BlockBriefcaseKeywords.php:156
1598
- msgid "Label Name"
1599
  msgstr ""
1600
 
1601
- #: view/BlockBriefcaseKeywords.php:115 view/BlockBriefcaseKeywords.php:160
1602
- msgid "Label Color"
1603
  msgstr ""
1604
 
1605
- #: view/BlockBriefcaseKeywords.php:122
1606
- msgid "Add Label"
 
1607
  msgstr ""
1608
 
1609
- #: view/BlockBriefcaseKeywords.php:125
1610
- msgid "Your Labels"
1611
  msgstr ""
1612
 
1613
- #: view/BlockBriefcaseKeywords.php:152
1614
- msgid "Edit Label"
 
 
 
1615
  msgstr ""
1616
 
1617
- #: view/BlockBriefcaseKeywords.php:166
1618
- msgid "Save Label"
 
 
 
1619
  msgstr ""
1620
 
1621
- #: view/BlockBriefcaseKeywords.php:185
1622
- msgid "Used"
 
 
 
1623
  msgstr ""
1624
 
1625
- #: view/BlockBriefcaseKeywords.php:186
1626
- msgid "Data"
 
1627
  msgstr ""
1628
 
1629
- #: view/BlockBriefcaseKeywords.php:216
1630
- msgid "Assign Labels to this Keyword"
1631
  msgstr ""
1632
 
1633
- #: view/BlockBriefcaseKeywords.php:222
1634
  #, php-format
1635
- msgid "Select Labels for: %s"
 
 
1636
  msgstr ""
1637
 
1638
- #: view/BlockBriefcaseKeywords.php:240
1639
- msgid "Save Labels"
 
1640
  msgstr ""
1641
 
1642
- #: view/BlockBriefcaseKeywords.php:257 view/BlockBriefcaseKeywords.php:258
1643
- msgid "Competition"
1644
  msgstr ""
1645
 
1646
- #: view/BlockBriefcaseKeywords.php:258 view/BlockBriefcaseKeywords.php:266
1647
- #: view/BlockBriefcaseKeywords.php:274 view/BlockBriefcaseKeywords.php:282
1648
- msgid "-"
1649
  msgstr ""
1650
 
1651
- #: view/BlockBriefcaseKeywords.php:265 view/BlockBriefcaseKeywords.php:266
1652
- msgid "SEO Search Volume"
1653
  msgstr ""
1654
 
1655
- #: view/BlockBriefcaseKeywords.php:273 view/BlockBriefcaseKeywords.php:274
1656
- msgid "Recent discussions"
 
1657
  msgstr ""
1658
 
1659
- #: view/BlockBriefcaseKeywords.php:281 view/BlockBriefcaseKeywords.php:282
1660
- msgid "Trending"
 
1661
  msgstr ""
1662
 
1663
  # @ squirrly-seo
1664
- #: view/BlockBriefcaseKeywords.php:290
1665
- msgid "Refresh Keyword Research"
1666
  msgstr ""
1667
 
1668
  # @ squirrly-seo
1669
- #: view/BlockBriefcaseKeywords.php:295 view/Blocksearch.php:48
1670
- msgid "Do a research"
1671
  msgstr ""
1672
 
1673
- #: view/BlockBriefcaseKeywords.php:307
1674
- msgid "Delete"
 
1675
  msgstr ""
1676
 
1677
- #: view/BlockBriefcaseKeywords.php:338
1678
- msgid "Select Country"
 
1679
  msgstr ""
1680
 
1681
- # @ squirrly-seo
1682
- #: view/BlockBriefcaseKeywords.php:344
1683
- msgid "Do Research"
1684
  msgstr ""
1685
 
1686
- #: view/BlockCopyright.php:9
1687
- msgid "Squirrly Copywriting Options"
 
1688
  msgstr ""
1689
 
1690
- #: view/BlockCopyright.php:11
1691
- msgid ""
1692
- "Referencing other articles, ideas, and relevant Tweets adds value to your "
1693
- "original content. This established journalist practice makes the content "
1694
- "more trustworthy and helps readers shape a well-rounded understanding of the "
1695
- "subject."
1696
  msgstr ""
1697
 
1698
- #: view/BlockCopyright.php:20
1699
- msgid ""
1700
- "The toolkit's intended purpose is to help you save time and find the best "
1701
- "sources to include in your articles. "
1702
  msgstr ""
1703
 
1704
- #: view/BlockCopyright.php:24
1705
- msgid ""
1706
- "Squirrly has never encouraged and will never encourage users to create "
1707
- "duplicate content."
1708
  msgstr ""
1709
 
1710
- #: view/BlockCopyright.php:25
1711
- msgid ""
1712
- "Squirrly will not take responsibility if an user copies an entire article "
1713
- "from another source."
1714
  msgstr ""
1715
 
1716
- #: view/BlockCopyright.php:27
1717
- msgid "Best Practices for Using the Inspiration Box from Squirrly: "
1718
  msgstr ""
1719
 
1720
- #: view/BlockCopyright.php:31
1721
- msgid ""
1722
- "Focus on creating original content. Citing sources should complement your "
1723
- "original ideas"
1724
  msgstr ""
1725
 
1726
- #: view/BlockCopyright.php:32
1727
- msgid "Try to limit yourself to 2 or 3 quotes per article"
1728
  msgstr ""
1729
 
1730
- #: view/BlockCopyright.php:33
1731
- msgid "Always include a link to your sources"
1732
  msgstr ""
1733
 
1734
- #: view/BlockCopyright.php:39 view/BlockCopyright.php:50
1735
- msgid "Use Squirrly's Inspiration box"
1736
  msgstr ""
1737
 
1738
- #: view/BlockCopyright.php:42 view/BlockCopyright.php:47
1739
- msgid ""
1740
- "I've read and understood how to correctly use the Inspiration Box from "
1741
- "Squirrly."
1742
  msgstr ""
1743
 
1744
- #: view/BlockCustomerService.php:5
1745
- msgid "Squirrly Customer Service"
1746
  msgstr ""
1747
 
1748
- #: view/BlockCustomerService.php:12
1749
- msgid "Support Channels"
1750
  msgstr ""
1751
 
1752
- #: view/BlockCustomerService.php:13
1753
- #, php-format
1754
- msgid ""
1755
- "%sHowto.squirrly.co%s > Knowledge Base. Find out how to get the most out of "
1756
- "Squirrly SEO"
1757
  msgstr ""
1758
 
1759
- #: view/BlockCustomerService.php:14
1760
- #, php-format
1761
- msgid ""
1762
- "%sPlugin.squirrly.co%s >> Case studies, ideas on how to better use Squirrly "
1763
- "SEO for Content Marketing"
1764
  msgstr ""
1765
 
1766
- #: view/BlockCustomerService.php:15
1767
- #, php-format
1768
- msgid ""
1769
- "%sFacebook page%s >> You can send us your support requests in private "
1770
- "messages"
1771
  msgstr ""
1772
 
1773
- #: view/BlockCustomerService.php:16
1774
- #, php-format
1775
- msgid "%sSupport Community%s >> Join us on Google Plus"
1776
  msgstr ""
1777
 
1778
- #: view/BlockCustomerService.php:17
1779
  #, php-format
1780
- msgid "%sLive Chat%s >> on Youtube. Thursday 4 PM"
1781
  msgstr ""
1782
 
1783
- #: view/BlockCustomerService.php:18
1784
- #, php-format
1785
- msgid "%sNew Lessons%s >> Mon. and Tue. on Twitter"
1786
  msgstr ""
1787
 
1788
- #: view/BlockCustomerService.php:19
1789
- #, php-format
1790
- msgid "%sEmail Support%s >> 8 AM to 4 PM (London Time): Mon-Fri.."
 
 
 
 
 
 
1791
  msgstr ""
1792
 
1793
- # @ squirrly-seo
1794
- #: view/BlockCustomerService.php:25 view/BlockSupport.php:25
1795
- msgid "Need Help with Squirrly SEO?"
1796
  msgstr ""
1797
 
1798
- #: view/BlockCustomerService.php:31
1799
- msgid "From"
1800
  msgstr ""
1801
 
1802
- # @ squirrly-seo
1803
- #: view/BlockCustomerService.php:41 view/BlockSupport.php:38
1804
- msgid "Send Question"
 
1805
  msgstr ""
1806
 
1807
- #: view/BlockCustomerService.php:45 view/BlockSupport.php:42
1808
- #, php-format
1809
- msgid "By clicking Send Question you're agreeing to %sSquirrly Terms%s"
1810
  msgstr ""
1811
 
1812
- #: view/BlockDashboard.php:11
1813
- msgid "Restore Squirrly Settings"
1814
  msgstr ""
1815
 
1816
- #: view/BlockDashboard.php:16 view/BlockImport.php:113
1817
- msgid "Upload the file with the saved Squirrly Settings"
1818
  msgstr ""
1819
 
1820
- #: view/BlockDashboard.php:21 view/BlockImport.php:118 view/BlockImport.php:140
1821
- msgid "Restore Backup"
 
 
 
 
 
 
 
 
 
 
1822
  msgstr ""
1823
 
1824
- #: view/BlockDashboard.php:27
1825
- msgid "Connect to Squirrly and start optimizing your site"
1826
  msgstr ""
1827
 
1828
- #: view/BlockDashboard.php:35
1829
  msgid "Squirrly dashboard"
1830
  msgstr ""
1831
 
1832
- #: view/BlockDashboard.php:47
1833
- #, php-format
1834
  msgid ""
1835
- "%sHelp Center%s - learn more about Squirrly SEO features and unhinge your "
1836
- "SEO potential"
 
1837
  msgstr ""
1838
 
1839
- #: view/BlockDashboard.php:50 view/BlockDashboard.php:153
1840
- msgid "Next Feature"
 
1841
  msgstr ""
1842
 
1843
- #: view/BlockDashboard.php:51 view/BlockDashboard.php:154
1844
- msgid "Previous Feature"
1845
  msgstr ""
1846
 
1847
- #: view/BlockImport.php:22 view/BlockPatterns.php:22
1848
- msgid "SEO Patterns"
1849
  msgstr ""
1850
 
1851
- #: view/BlockImport.php:37
1852
- msgid "Import SEO settings from other SEO plugins or themes"
1853
  msgstr ""
1854
 
1855
- #: view/BlockImport.php:38
1856
- msgid ""
1857
- "If you were already using an SEO plugin, then you can import all the SEO "
1858
- "settings in Squirrly. Just follow the steps presented on the right side."
1859
  msgstr ""
1860
 
1861
- #: view/BlockImport.php:45
1862
- msgid "Select the plugin or theme you want to import the Settings from."
1863
  msgstr ""
1864
 
1865
- #: view/BlockImport.php:59
1866
- msgid "Import Settings"
1867
  msgstr ""
1868
 
1869
- #: view/BlockImport.php:61 view/BlockImport.php:82
1870
- msgid "We couldn't find any SEO plugin or theme to import from."
1871
  msgstr ""
1872
 
1873
- #: view/BlockImport.php:68
1874
- msgid "Select the plugin or theme you want to import the SEO settings from."
1875
  msgstr ""
1876
 
1877
- #: view/BlockImport.php:80
1878
- msgid "Import SEO"
1879
  msgstr ""
1880
 
1881
- #: view/BlockImport.php:89
1882
- msgid ""
1883
- "Note! If you import the SEO settings from other plugins or themes, you will "
1884
- "lose all the settings that you had in Squirrly SEO. Make sure you backup "
1885
- "your settings from the panel below before you do this. "
1886
  msgstr ""
1887
 
1888
- #: view/BlockImport.php:94
1889
- msgid "Backup & Restore Squirrly SEO Settings"
1890
  msgstr ""
1891
 
1892
- #: view/BlockImport.php:95
1893
- msgid ""
1894
- "You can now download your Squirrly settings in an sql file before you go "
1895
- "ahead and import the SEO settings from another plugin. That way, you can "
1896
- "always go back to your Squirrly settings. "
1897
- msgstr ""
1898
 
1899
- #: view/BlockImport.php:102
1900
- msgid "Backup & Restore Squirrly Settings"
1901
  msgstr ""
1902
 
1903
- #: view/BlockImport.php:106
1904
- msgid "Backup Settings"
1905
  msgstr ""
1906
 
1907
- #: view/BlockImport.php:107
1908
- msgid "Restore Settings"
1909
  msgstr ""
1910
 
1911
- #: view/BlockImport.php:118 view/BlockImport.php:140
1912
- msgid "Are you sure you want to restore your settings?"
 
 
1913
  msgstr ""
1914
 
1915
- #: view/BlockImport.php:123
1916
- msgid "Backup & Restore all the pages optimized with Squirrly SEO"
 
 
1917
  msgstr ""
1918
 
1919
- #: view/BlockImport.php:127
1920
- msgid "Backup SEO"
1921
  msgstr ""
1922
 
1923
- #: view/BlockImport.php:128
1924
- msgid "Restore SEO"
 
 
1925
  msgstr ""
1926
 
1927
- #: view/BlockImport.php:134
1928
- msgid "Upload the file with the saved Squirrly SEO SQL file"
 
1929
  msgstr ""
1930
 
1931
- #: view/BlockImport.php:155
1932
- msgid "Click to reset all the saved setting to default."
 
 
 
1933
  msgstr ""
1934
 
1935
- #: view/BlockImport.php:159
1936
- msgid "Are you sure you want to remove all the saved settings?"
 
 
 
1937
  msgstr ""
1938
 
1939
- #: view/BlockImport.php:159
1940
- msgid "Reset Settings"
 
 
 
1941
  msgstr ""
1942
 
1943
- #: view/BlockImport.php:165
 
1944
  msgid ""
1945
- "Note! Make sure you backup your data first in case you change your mind."
 
 
1946
  msgstr ""
1947
 
1948
- # @ squirrly-seo
1949
- #: view/BlockKeywordResearch.php:27
1950
- msgid "Squirrly Keyword Research"
1951
  msgstr ""
1952
 
1953
- #: view/BlockLiveAssistant.php:9 view/Blockseo.php:7
1954
- msgid "Squirrly Live Assistant"
1955
  msgstr ""
1956
 
1957
- #: view/BlockLiveAssistant.php:11
1958
  #, php-format
1959
  msgid ""
1960
- "Using the Live Assistant from Squirrly SEO is like having a consultant "
1961
- "sitting right next to you. It helps you get a 100% optimized page for both "
1962
- "Humans and Search Engines."
1963
  msgstr ""
1964
 
1965
- #: view/BlockLiveAssistant.php:20
 
1966
  msgid ""
1967
- "You just have to type in the keyword you want the page to be optimized for."
1968
  msgstr ""
1969
 
1970
- #: view/BlockLiveAssistant.php:25
1971
- msgid "Use Squirrly Live Assistant"
1972
  msgstr ""
1973
 
1974
- #: view/BlockPatterns.php:39
1975
- msgid "Use Squirrly Patterns"
 
 
1976
  msgstr ""
1977
 
1978
- # @ squirrly-seo
1979
- #: view/BlockPatterns.php:43 view/BlockPatterns.php:134
1980
- #: view/BlockPatterns.php:148 view/BlockPatterns.php:165
1981
- #: view/BlockSettings.php:137 view/BlockSettings.php:148
1982
- #: view/BlockSettings.php:159 view/BlockSettings.php:170
1983
- #: view/BlockSettings.php:181 view/BlockSettings.php:193
1984
- #: view/BlockSettings.php:361 view/BlockSettings.php:416
1985
- #: view/BlockSettingsSeo.php:56 view/BlockSettingsSeo.php:98
1986
- #: view/BlockSettingsSeo.php:115 view/BlockSettingsSeo.php:131
1987
- #: view/BlockSettingsSeo.php:147 view/BlockSettingsSeo.php:163
1988
- #: view/BlockSettingsSeo.php:179 view/BlockSettingsSeo.php:195
1989
- #: view/BlockSettingsSeo.php:223 view/BlockSettingsSeo.php:239
1990
- #: view/BlockSettingsSeo.php:255 view/BlockSettingsSeo.php:363
1991
- #: view/BlockSettingsSeo.php:414 view/BlockSettingsSeo.php:606
1992
- #: view/BlockSettingsSeo.php:638 view/BlockSettingsSeo.php:646
1993
- #: view/BlockSettingsSeo.php:744 view/BlockSettingsSeo.php:755
1994
- #: view/BlockSettingsSeo.php:1103 view/FrontMenu.php:71 view/FrontMenu.php:530
1995
- #: view/FrontMenu.php:543 view/FrontMenu.php:556
1996
- msgid "Yes"
1997
  msgstr ""
1998
 
1999
- # @ squirrly-seo
2000
- #: view/BlockPatterns.php:45 view/BlockPatterns.php:136
2001
- #: view/BlockPatterns.php:150 view/BlockPatterns.php:167
2002
- #: view/BlockSettings.php:139 view/BlockSettings.php:150
2003
- #: view/BlockSettings.php:161 view/BlockSettings.php:172
2004
- #: view/BlockSettings.php:183 view/BlockSettings.php:195
2005
- #: view/BlockSettings.php:363 view/BlockSettings.php:418
2006
- #: view/BlockSettingsSeo.php:58 view/BlockSettingsSeo.php:100
2007
- #: view/BlockSettingsSeo.php:117 view/BlockSettingsSeo.php:133
2008
- #: view/BlockSettingsSeo.php:149 view/BlockSettingsSeo.php:165
2009
- #: view/BlockSettingsSeo.php:181 view/BlockSettingsSeo.php:197
2010
- #: view/BlockSettingsSeo.php:225 view/BlockSettingsSeo.php:241
2011
- #: view/BlockSettingsSeo.php:257 view/BlockSettingsSeo.php:365
2012
- #: view/BlockSettingsSeo.php:416 view/BlockSettingsSeo.php:608
2013
- #: view/BlockSettingsSeo.php:640 view/BlockSettingsSeo.php:648
2014
- #: view/BlockSettingsSeo.php:746 view/BlockSettingsSeo.php:757
2015
- #: view/BlockSettingsSeo.php:1105 view/FrontMenu.php:73 view/FrontMenu.php:532
2016
- #: view/FrontMenu.php:545 view/FrontMenu.php:558
2017
- msgid "No"
2018
  msgstr ""
2019
 
2020
- #: view/BlockPatterns.php:51
2021
- msgid ""
2022
- "Control how post types are displayed on your site and within search engine "
2023
- "results and social media feeds."
2024
  msgstr ""
2025
 
2026
- #: view/BlockPatterns.php:52
2027
- msgid ""
2028
- "In Squirrly, each post type in your site comes with a predefined posting "
2029
- "pattern when displayed onto your website. However, based on your site's "
2030
- "purpose and needs, you can also decide what information these patterns will "
2031
- "include."
2032
  msgstr ""
2033
 
2034
- #: view/BlockPatterns.php:53
 
2035
  msgid ""
2036
- "Once you set up a pattern for a particular post type, only the content "
2037
- "required by your custom sequence will be displayed."
2038
  msgstr ""
2039
 
2040
- #: view/BlockPatterns.php:54
2041
  #, php-format
2042
  msgid ""
2043
- "Squirrly lets you see how the customized patterns will apply when posts/"
2044
- "pages are shared across social media or search engine feeds. You just need "
2045
- "to go to the %sSquirrly SEO Snippet%s box, press <strong>Edit Snippet</"
2046
- "strong> and you'll get a live preview after you customize the meta "
2047
- "information."
2048
  msgstr ""
2049
 
2050
- #: view/BlockPatterns.php:59
2051
- msgid "Set the custom patterns for each post type"
2052
  msgstr ""
2053
 
2054
- #: view/BlockPatterns.php:67
2055
- msgid "+ Add Post Type"
2056
  msgstr ""
2057
 
2058
- #: view/BlockPatterns.php:67
2059
- msgid "Add a post type from your Wordpress website"
2060
  msgstr ""
2061
 
2062
- #: view/BlockPatterns.php:70
2063
- msgid "Add Post Type"
2064
  msgstr ""
2065
 
2066
- #: view/BlockPatterns.php:87
2067
- msgid "Add"
2068
  msgstr ""
2069
 
2070
- #: view/BlockPatterns.php:97
2071
- #, php-format
2072
- msgid "Are you sure you want to remove the post type: %s"
2073
  msgstr ""
2074
 
2075
- #: view/BlockPatterns.php:97
2076
- msgid "Remove Post Type"
2077
  msgstr ""
2078
 
2079
- #: view/BlockPatterns.php:108 view/FrontMenu.php:204
2080
- msgid "Description"
 
 
 
 
 
2081
  msgstr ""
2082
 
2083
- #: view/BlockPatterns.php:114
2084
- msgid "Separator"
 
 
 
2085
  msgstr ""
2086
 
2087
- #: view/BlockPatterns.php:129
2088
- msgid "Let Google Index it"
 
2089
  msgstr ""
2090
 
2091
- #: view/BlockPatterns.php:143
2092
- msgid "Pass Link Juice"
 
 
2093
  msgstr ""
2094
 
2095
- #: view/BlockPatterns.php:157
2096
- msgid "Do SEO"
2097
  msgstr ""
2098
 
2099
- #: view/BlockPatterns.php:201 view/BlockSettingsSeo.php:29
2100
- #: view/BlockSettingsSeo.php:1155
2101
- msgid "Save SEO"
2102
  msgstr ""
2103
 
2104
- #: view/BlockPostsAnalytics.php:23
2105
  #, php-format
2106
  msgid ""
2107
- "The IP %s is calling the rank too often and google stopped the calls for %s "
2108
- "mins. Lower the Rank check rate in Squirrly > Advanced > Rank Option. %sMore "
2109
- "details%s"
2110
  msgstr ""
2111
 
2112
- #: view/BlockPostsAnalytics.php:28
2113
- #, php-format
2114
- msgid ""
2115
- "To be able to check the RANK please activate cURL for PHP on your server "
2116
- "%sDetails%s"
2117
  msgstr ""
2118
 
2119
- #: view/BlockPostsAnalytics.php:32
2120
- #, php-format
2121
- msgid ""
2122
- "To be able to check the RANK please set the \"open_basedir\" to NULL on your "
2123
- "server %sDetails%s"
2124
  msgstr ""
2125
 
2126
- #: view/BlockPostsAnalytics.php:37
2127
- #, php-format
2128
  msgid ""
2129
- "To see the Google Ranking for each article you need to select how many pages "
2130
- "to be checked by google rank every hour from %sSquirrly > Advanced > Google "
2131
- "Rank Option%s. "
2132
  msgstr ""
2133
 
2134
- #: view/BlockPostsAnalytics.php:48
2135
- msgid ""
2136
- "Don't see all your pages here? Make sure you optimize them with Squirrly, so "
2137
- "that we can track them, and display you the analytics"
2138
  msgstr ""
2139
 
2140
- #: view/BlockSerpKeywords.php:7
2141
- msgid "Advanced Analytics Keywords"
2142
  msgstr ""
2143
 
2144
- #: view/BlockSerpKeywords.php:13 view/Blocksearch.php:8
2145
- msgid "Go to Analytics"
2146
  msgstr ""
2147
 
2148
- #: view/BlockSerpKeywords.php:35 view/FrontMenu.php:389
2149
- msgid "Article"
 
2150
  msgstr ""
2151
 
2152
- #: view/BlockSerpKeywords.php:36
2153
- msgid "Article URL ..."
 
2154
  msgstr ""
2155
 
2156
- #: view/BlockSerpKeywords.php:64
2157
- msgid "Count"
2158
  msgstr ""
2159
 
2160
- #: view/BlockSerpKeywords.php:65
2161
- msgid "Check the rank for it"
2162
  msgstr ""
2163
 
2164
- #: view/BlockSerpKeywords.php:113
2165
- msgid "Save Keywords"
2166
  msgstr ""
2167
 
2168
- #: view/BlockSerpKeywords.php:128
2169
- msgid "Show ignored keywords"
 
 
2170
  msgstr ""
2171
 
2172
- #: view/BlockSerpKeywords.php:143
2173
- msgid "Reload Google Ranks from Squirrly Server"
2174
  msgstr ""
2175
 
2176
- #: view/BlockSerpKeywords.php:155
2177
- msgid "Remove Local Ranks"
2178
  msgstr ""
2179
 
2180
- # @ squirrly-seo
2181
- #: view/BlockSettings.php:24 view/BlockSettings.php:454
2182
- msgid "Save settings"
2183
  msgstr ""
2184
 
2185
- #: view/BlockSettings.php:43
2186
- msgid "Post/Page Edit"
2187
  msgstr ""
2188
 
2189
- #: view/BlockSettings.php:44
2190
- #, php-format
2191
- msgid "%sThe right method in working with Squirrly, SEO plugin%s"
2192
  msgstr ""
2193
 
2194
- #: view/BlockSettings.php:45
2195
- #, php-format
2196
- msgid "%sGetting inspired with Squirrly WordPress SEO plugin%s"
2197
  msgstr ""
2198
 
2199
- #: view/BlockSettings.php:47
2200
- #, php-format
2201
- msgid "%sThere is a New SEO Live Assistant from Squirrly%s"
2202
  msgstr ""
2203
 
2204
- #: view/BlockSettings.php:48
2205
- #, php-format
2206
- msgid "%sHow to create Human friendly content with the WordPress SEO plugin?%s"
2207
  msgstr ""
2208
 
2209
- #: view/BlockSettings.php:54
2210
- msgid "Inspiration Box G17"
2211
  msgstr ""
2212
 
2213
- #: view/BlockSettings.php:57 view/BlockSettings.php:58
2214
- #: view/BlockSettings.php:71 view/BlockSettings.php:72
2215
- #: view/BlockSettings.php:85 view/BlockSettings.php:86
2216
- #: view/BlockSettingsSeo.php:69 view/BlockSettingsSeo.php:81
2217
- #: view/BlockSettingsSeo.php:272 view/BlockSettingsSeo.php:586
2218
- #: view/BlockSettingsSeo.php:918 view/BlockSettingsSeo.php:1012
2219
- #: view/BlockSettingsSeo.php:1024 view/BlockSettingsSeo.php:1036
2220
- msgid "see how this improved since 2016"
2221
  msgstr ""
2222
 
2223
- #: view/BlockSettings.php:68
2224
- msgid "Keyword Research G17"
2225
  msgstr ""
2226
 
2227
- #: view/BlockSettings.php:82
2228
- msgid "Inner Links G17"
2229
  msgstr ""
2230
 
2231
- #: view/BlockSettings.php:95
2232
- msgid "Load Squirrly Live Assistant for"
2233
  msgstr ""
2234
 
2235
- #: view/BlockSettings.php:99 view/BlockSettingsSeo.php:380
2236
- #: view/BlockSettingsSeo.php:783
2237
- msgid "Posts"
2238
  msgstr ""
2239
 
2240
- #: view/BlockSettings.php:102 view/BlockSettingsSeo.php:383
2241
- #: view/BlockSettingsSeo.php:814
2242
- msgid "Pages"
2243
  msgstr ""
2244
 
2245
- #: view/BlockSettings.php:106 view/BlockSettingsSeo.php:387
2246
- #: view/BlockSettingsSeo.php:799
2247
- msgid "Products"
2248
  msgstr ""
2249
 
2250
- #: view/BlockSettings.php:142
2251
- msgid ""
2252
- "Show <strong>Squirrly Tooltips</strong> when posting a new article (e.g. "
2253
- "\"Enter a keyword\")."
2254
  msgstr ""
2255
 
2256
- #: view/BlockSettings.php:153
2257
- msgid ""
2258
- "Always show <strong>Keyword Research</strong> about the selected keyword."
2259
  msgstr ""
2260
 
2261
- #: view/BlockSettings.php:164
2262
- msgid ""
2263
- "Send optimization data to Squirrly Cloud when the post is saved (don't use "
2264
- "cron)"
2265
  msgstr ""
2266
 
2267
- #: view/BlockSettings.php:175
2268
- msgid "Use <strong> the NEW version of the SEO Live Assistant</strong>."
2269
  msgstr ""
2270
 
2271
- #: view/BlockSettings.php:186
2272
- msgid ""
2273
- "Download <strong>remote images</strong> in your <strong>Media Library</"
2274
- "strong> for the new posts."
2275
  msgstr ""
2276
 
2277
- #: view/BlockSettings.php:198
2278
- msgid ""
2279
- "Correct my <strong>feed links</strong> and <strong>images</strong> (convert "
2280
- "from relative to absolute)."
2281
  msgstr ""
2282
 
2283
- #: view/BlockSettings.php:208
2284
- msgid "Google Rank Options"
2285
  msgstr ""
2286
 
2287
- #: view/BlockSettings.php:209
2288
- #, php-format
2289
- msgid "%sCountry targeting%s"
2290
  msgstr ""
2291
 
2292
- #: view/BlockSettings.php:210
2293
- #, php-format
2294
- msgid "%sPowerful SEO Tool For Strong Google Rankings%s"
2295
  msgstr ""
2296
 
2297
- #: view/BlockSettings.php:217
2298
  msgid ""
2299
  "Select the Google country for which Squirrly will check the Google rank."
2300
  msgstr ""
2301
 
2302
- #: view/BlockSettings.php:222
2303
  msgid "Default"
2304
  msgstr ""
2305
 
2306
- #: view/BlockSettings.php:223
2307
  msgid "American Samoa"
2308
  msgstr ""
2309
 
2310
- #: view/BlockSettings.php:224
2311
  msgid "Anguilla"
2312
  msgstr ""
2313
 
2314
- #: view/BlockSettings.php:225
2315
  msgid "Antigua and Barbuda"
2316
  msgstr ""
2317
 
2318
- #: view/BlockSettings.php:226
2319
  msgid "Argentina"
2320
  msgstr ""
2321
 
2322
- #: view/BlockSettings.php:227
2323
  msgid "Australia"
2324
  msgstr ""
2325
 
2326
- #: view/BlockSettings.php:228
2327
  msgid "Austria"
2328
  msgstr ""
2329
 
2330
- #: view/BlockSettings.php:229
2331
  msgid "Azerbaijan"
2332
  msgstr ""
2333
 
2334
- #: view/BlockSettings.php:230
2335
  msgid "Belgium"
2336
  msgstr ""
2337
 
2338
- #: view/BlockSettings.php:231
2339
  msgid "Brazil"
2340
  msgstr ""
2341
 
2342
- #: view/BlockSettings.php:232
2343
  msgid "British Virgin Islands"
2344
  msgstr ""
2345
 
2346
- #: view/BlockSettings.php:233
2347
  msgid "Burundi"
2348
  msgstr ""
2349
 
2350
- #: view/BlockSettings.php:234
2351
  msgid "Bulgaria"
2352
  msgstr ""
2353
 
2354
- #: view/BlockSettings.php:235
2355
  msgid "Canada"
2356
  msgstr ""
2357
 
2358
- #: view/BlockSettings.php:236
2359
  msgid "Chad"
2360
  msgstr ""
2361
 
2362
- #: view/BlockSettings.php:237
2363
  msgid "Chile"
2364
  msgstr ""
2365
 
2366
- #: view/BlockSettings.php:238
2367
  msgid "Colombia"
2368
  msgstr ""
2369
 
2370
- #: view/BlockSettings.php:239
2371
  msgid "Costa Rica"
2372
  msgstr ""
2373
 
2374
- #: view/BlockSettings.php:240
2375
  msgid "Côte d'Ivoire"
2376
  msgstr ""
2377
 
2378
- #: view/BlockSettings.php:241
2379
  msgid "Cuba"
2380
  msgstr ""
2381
 
2382
- #: view/BlockSettings.php:242
2383
- msgid "Croatia"
2384
- msgstr ""
2385
-
2386
- #: view/BlockSettings.php:243
2387
  msgid "Czech Republic"
2388
  msgstr ""
2389
 
2390
- #: view/BlockSettings.php:244
2391
  msgid "Dem. Rep. of the Congo"
2392
  msgstr ""
2393
 
2394
- #: view/BlockSettings.php:245
2395
  msgid "Denmark"
2396
  msgstr ""
2397
 
2398
- #: view/BlockSettings.php:246
2399
  msgid "Djibouti"
2400
  msgstr ""
2401
 
2402
- #: view/BlockSettings.php:247
2403
  msgid "Dominican Republic"
2404
  msgstr ""
2405
 
2406
- #: view/BlockSettings.php:248
2407
  msgid "Ecuador"
2408
  msgstr ""
2409
 
2410
- #: view/BlockSettings.php:249
2411
  msgid "El Salvador"
2412
  msgstr ""
2413
 
2414
- #: view/BlockSettings.php:250
2415
  msgid "Estonia"
2416
  msgstr ""
2417
 
2418
- #: view/BlockSettings.php:251
2419
  msgid "Federated States of Micronesia"
2420
  msgstr ""
2421
 
2422
- #: view/BlockSettings.php:252
2423
  msgid "Fiji"
2424
  msgstr ""
2425
 
2426
- #: view/BlockSettings.php:253
2427
  msgid "Finland"
2428
  msgstr ""
2429
 
2430
- #: view/BlockSettings.php:254
2431
  msgid "France"
2432
  msgstr ""
2433
 
2434
- #: view/BlockSettings.php:255
2435
  msgid "The Gambia"
2436
  msgstr ""
2437
 
2438
- #: view/BlockSettings.php:256
2439
  msgid "Georgia"
2440
  msgstr ""
2441
 
2442
- #: view/BlockSettings.php:257
2443
  msgid "Germany"
2444
  msgstr ""
2445
 
2446
- #: view/BlockSettings.php:258
2447
  msgid "Ghana "
2448
  msgstr ""
2449
 
2450
- #: view/BlockSettings.php:259
2451
  msgid "Gibraltar"
2452
  msgstr ""
2453
 
2454
- #: view/BlockSettings.php:260
2455
  msgid "Greece"
2456
  msgstr ""
2457
 
2458
- #: view/BlockSettings.php:261
2459
  msgid "Greenland"
2460
  msgstr ""
2461
 
2462
- #: view/BlockSettings.php:262
2463
  msgid "Guernsey"
2464
  msgstr ""
2465
 
2466
- #: view/BlockSettings.php:263
2467
  msgid "Honduras"
2468
  msgstr ""
2469
 
2470
- #: view/BlockSettings.php:264
2471
  msgid "Hong Kong"
2472
  msgstr ""
2473
 
2474
- #: view/BlockSettings.php:265
2475
  msgid "Hungary"
2476
  msgstr ""
2477
 
2478
- #: view/BlockSettings.php:266
2479
  msgid "India"
2480
  msgstr ""
2481
 
2482
- #: view/BlockSettings.php:267
2483
  msgid "Indonesia"
2484
  msgstr ""
2485
 
2486
- #: view/BlockSettings.php:268
2487
  msgid "Ireland"
2488
  msgstr ""
2489
 
2490
- #: view/BlockSettings.php:269
2491
  msgid "Isle of Man"
2492
  msgstr ""
2493
 
2494
- #: view/BlockSettings.php:270
2495
  msgid "Israel"
2496
  msgstr ""
2497
 
2498
- #: view/BlockSettings.php:271
2499
  msgid "Italy"
2500
  msgstr ""
2501
 
2502
- #: view/BlockSettings.php:272
2503
  msgid "Jamaica"
2504
  msgstr ""
2505
 
2506
- #: view/BlockSettings.php:273
2507
  msgid "Japan"
2508
  msgstr ""
2509
 
2510
- #: view/BlockSettings.php:274
2511
  msgid "Jersey"
2512
  msgstr ""
2513
 
2514
- #: view/BlockSettings.php:275
2515
  msgid "Kazakhstan"
2516
  msgstr ""
2517
 
2518
- #: view/BlockSettings.php:276
2519
  msgid "Korea"
2520
  msgstr ""
2521
 
2522
- #: view/BlockSettings.php:277
2523
  msgid "Latvia"
2524
  msgstr ""
2525
 
2526
- #: view/BlockSettings.php:278
2527
  msgid "Lesotho"
2528
  msgstr ""
2529
 
2530
- #: view/BlockSettings.php:279
2531
  msgid "Liechtenstein"
2532
  msgstr ""
2533
 
2534
- #: view/BlockSettings.php:280
2535
  msgid "Lithuania"
2536
  msgstr ""
2537
 
2538
- #: view/BlockSettings.php:281
2539
  msgid "Luxembourg"
2540
  msgstr ""
2541
 
2542
- #: view/BlockSettings.php:282
2543
  msgid "Malawi"
2544
  msgstr ""
2545
 
2546
- #: view/BlockSettings.php:283
2547
  msgid "Malaysia"
2548
  msgstr ""
2549
 
2550
- #: view/BlockSettings.php:284
2551
  msgid "Malta"
2552
  msgstr ""
2553
 
2554
- #: view/BlockSettings.php:285
2555
  msgid "Mauritius"
2556
  msgstr ""
2557
 
2558
- #: view/BlockSettings.php:286
2559
  msgid "México"
2560
  msgstr ""
2561
 
2562
- #: view/BlockSettings.php:287
2563
  msgid "Montserrat"
2564
  msgstr ""
2565
 
2566
- #: view/BlockSettings.php:288
2567
  msgid "Namibia"
2568
  msgstr ""
2569
 
2570
- #: view/BlockSettings.php:289
2571
  msgid "Nepal"
2572
  msgstr ""
2573
 
2574
- #: view/BlockSettings.php:290
2575
  msgid "Netherlands"
2576
  msgstr ""
2577
 
2578
- #: view/BlockSettings.php:291
2579
  msgid "New Zealand"
2580
  msgstr ""
2581
 
2582
- #: view/BlockSettings.php:292
2583
  msgid "Nicaragua"
2584
  msgstr ""
2585
 
2586
- #: view/BlockSettings.php:293
2587
  msgid "Nigeria"
2588
  msgstr ""
2589
 
2590
- #: view/BlockSettings.php:294
2591
  msgid "Norfolk Island"
2592
  msgstr ""
2593
 
2594
- #: view/BlockSettings.php:295
2595
  msgid "Norway"
2596
  msgstr ""
2597
 
2598
- #: view/BlockSettings.php:296
2599
  msgid "Pakistan"
2600
  msgstr ""
2601
 
2602
- #: view/BlockSettings.php:297
2603
  msgid "Panamá"
2604
  msgstr ""
2605
 
2606
- #: view/BlockSettings.php:298
2607
  msgid "Paraguay"
2608
  msgstr ""
2609
 
2610
- #: view/BlockSettings.php:299
2611
  msgid "Perú"
2612
  msgstr ""
2613
 
2614
- #: view/BlockSettings.php:300
2615
  msgid "Philippines"
2616
  msgstr ""
2617
 
2618
- #: view/BlockSettings.php:301
2619
  msgid "Pitcairn Islands"
2620
  msgstr ""
2621
 
2622
- #: view/BlockSettings.php:302
2623
  msgid "Poland"
2624
  msgstr ""
2625
 
2626
- #: view/BlockSettings.php:303
2627
  msgid "Portugal"
2628
  msgstr ""
2629
 
2630
- #: view/BlockSettings.php:304
2631
  msgid "Puerto Rico"
2632
  msgstr ""
2633
 
2634
- #: view/BlockSettings.php:305
2635
  msgid "Rep. of the Congo"
2636
  msgstr ""
2637
 
2638
- #: view/BlockSettings.php:306
2639
  msgid "Romania"
2640
  msgstr ""
2641
 
2642
- #: view/BlockSettings.php:307
2643
  msgid "Russia"
2644
  msgstr ""
2645
 
2646
- #: view/BlockSettings.php:308
2647
  msgid "Rwanda"
2648
  msgstr ""
2649
 
2650
- #: view/BlockSettings.php:309
2651
  msgid "Saint Helena"
2652
  msgstr ""
2653
 
2654
- #: view/BlockSettings.php:310
2655
  msgid "San Marino"
2656
  msgstr ""
2657
 
2658
- #: view/BlockSettings.php:311
2659
  msgid "Saudi Arabia"
2660
  msgstr ""
2661
 
2662
- #: view/BlockSettings.php:312
2663
  msgid "Singapore"
2664
  msgstr ""
2665
 
2666
- #: view/BlockSettings.php:313
2667
  msgid "Slovakia"
2668
  msgstr ""
2669
 
2670
- #: view/BlockSettings.php:314
2671
  msgid "South Africa"
2672
  msgstr ""
2673
 
2674
- #: view/BlockSettings.php:315
2675
  msgid "Spain"
2676
  msgstr ""
2677
 
2678
- #: view/BlockSettings.php:316
2679
  msgid "Sri Lanka"
2680
  msgstr ""
2681
 
2682
- #: view/BlockSettings.php:317
2683
  msgid "Sweden"
2684
  msgstr ""
2685
 
2686
- #: view/BlockSettings.php:318
2687
  msgid "Switzerland"
2688
  msgstr ""
2689
 
2690
- #: view/BlockSettings.php:319
2691
  msgid "Taiwan"
2692
  msgstr ""
2693
 
2694
- #: view/BlockSettings.php:320
2695
  msgid "Thailand"
2696
  msgstr ""
2697
 
2698
- #: view/BlockSettings.php:321
2699
  msgid "Trinidad and Tobago"
2700
  msgstr ""
2701
 
2702
- #: view/BlockSettings.php:322
2703
  msgid "Turkey"
2704
  msgstr ""
2705
 
2706
- #: view/BlockSettings.php:323
2707
  msgid "Ukraine"
2708
  msgstr ""
2709
 
2710
- #: view/BlockSettings.php:324
2711
  msgid "United Arab Emirates"
2712
  msgstr ""
2713
 
2714
- #: view/BlockSettings.php:325
2715
  msgid "United Kingdom"
2716
  msgstr ""
2717
 
2718
- #: view/BlockSettings.php:326
2719
  msgid "United States"
2720
  msgstr ""
2721
 
2722
- #: view/BlockSettings.php:327
2723
  msgid "Uruguay"
2724
  msgstr ""
2725
 
2726
- #: view/BlockSettings.php:328
2727
  msgid "Uzbekistan"
2728
  msgstr ""
2729
 
2730
- #: view/BlockSettings.php:329
2731
  msgid "Vanuatu"
2732
  msgstr ""
2733
 
2734
- #: view/BlockSettings.php:330
2735
  msgid "Venezuela"
2736
  msgstr ""
2737
 
2738
- #: view/BlockSettings.php:331
2739
  msgid "Vietnam"
2740
  msgstr ""
2741
 
2742
- #: view/BlockSettings.php:337
2743
- #, php-format
2744
  msgid ""
2745
- "Select how many pages to be checked in the Performance Analytics section "
2746
- "every hour. %s(not recommended for shared hosting plan)%s"
2747
- msgstr ""
2748
-
2749
- #: view/BlockSettings.php:344
2750
- msgid "page"
2751
  msgstr ""
2752
 
2753
- #: view/BlockSettings.php:346
2754
- msgid "pages"
2755
  msgstr ""
2756
 
2757
- #: view/BlockSettings.php:352
2758
- msgid "h"
2759
  msgstr ""
2760
 
2761
- #: view/BlockSettings.php:366
2762
- msgid ""
2763
- "Restricts search results to results originating in the above particular "
2764
- "country."
2765
  msgstr ""
2766
 
2767
- #: view/BlockSettings.php:372
2768
- #, php-format
2769
- msgid ""
2770
- "You have the %sBusiness Plan%s active. Rankings are now checked by Squirrly "
2771
- "Cloud and will be shown in %sAdvanced Analytics%s"
2772
  msgstr ""
2773
 
2774
- #: view/BlockSettings.php:376
2775
- msgid "Select how many rank queries you want Squirrly to do every day. "
2776
  msgstr ""
2777
 
2778
- #: view/BlockSettings.php:381 view/BlockSettings.php:383
2779
- #: view/BlockSettings.php:396
2780
- msgid "queries"
2781
  msgstr ""
2782
 
2783
- #: view/BlockSettings.php:381 view/BlockSettings.php:383
2784
- #: view/BlockSettings.php:396
2785
- msgid "day"
2786
  msgstr ""
2787
 
2788
- #: view/BlockSettings.php:389
2789
- msgid ""
2790
- "Note: if you're on the free trial, you get 35 queries for the 7 days of "
2791
- "trial."
2792
  msgstr ""
2793
 
2794
- #: view/BlockSettings.php:408
2795
- msgid "Robots.txt Editor"
2796
  msgstr ""
2797
 
2798
- #: view/BlockSettings.php:409
2799
- #, php-format
2800
- msgid "%sLearn about robots.txt files%s"
2801
  msgstr ""
2802
 
2803
- #: view/BlockSettings.php:410
2804
- #, php-format
2805
- msgid "%sHow to use Robots.txt%s"
2806
  msgstr ""
2807
 
2808
  # @ squirrly-seo
2809
- #: view/BlockSettings.php:412
2810
- msgid "Use Squirrly Robots"
2811
- msgstr ""
2812
-
2813
- #: view/BlockSettings.php:427
2814
- msgid "Edit the Robots.txt data"
2815
- msgstr ""
2816
 
2817
- #: view/BlockSettings.php:440
2818
- msgid ""
2819
- "Does not physically create the robots.txt file. The best option for "
2820
- "Multisites."
2821
- msgstr ""
2822
-
2823
- #: view/BlockSettings.php:445
2824
- msgid "Save Robots"
2825
  msgstr ""
2826
 
2827
- #: view/BlockSettingsSeo.php:27
2828
- msgid "SEO"
2829
  msgstr ""
2830
 
2831
- #: view/BlockSettingsSeo.php:31 view/BlockSettingsSeo.php:207
2832
- msgid "Check for SEO issues in your site"
2833
  msgstr ""
2834
 
2835
- #: view/BlockSettingsSeo.php:49
2836
- msgid "Let Squirrly SEO Optimize This Blog"
2837
  msgstr ""
2838
 
2839
- #: view/BlockSettingsSeo.php:50
2840
  #, php-format
2841
- msgid "%sIs Squirrly SEO better than WordPress SEO by Yoast?%s"
2842
  msgstr ""
2843
 
2844
- #: view/BlockSettingsSeo.php:52
2845
- msgid ""
2846
- "Activate the built-in SEO settings from Squirrly by switching Yes below. "
2847
- "<strong>Works well with Multisites and Ecommerce.</strong>"
2848
  msgstr ""
2849
 
2850
- #: view/BlockSettingsSeo.php:66
2851
- msgid "New SEO Settings For Google 2017"
2852
  msgstr ""
2853
 
2854
- #: view/BlockSettingsSeo.php:78
2855
- msgid "Fastest SEO Plugin in 2017"
2856
  msgstr ""
2857
 
2858
- # @ squirrly-seo
2859
- #: view/BlockSettingsSeo.php:89
2860
- msgid "What does Squirrly automatically do for SEO?"
2861
  msgstr ""
2862
 
2863
- #: view/BlockSettingsSeo.php:103
2864
- #, php-format
2865
- msgid ""
2866
- "adds <strong>%scanonical link%s</strong>, <strong>%srel=\"prev\" and rel="
2867
- "\"next\"%s</strong> metas in Header"
2868
  msgstr ""
2869
 
2870
- #: view/BlockSettingsSeo.php:120
2871
- msgid "adds the required METAs (<strong>Dublin Core, Language</strong>, etc.)"
2872
  msgstr ""
2873
 
2874
- #: view/BlockSettingsSeo.php:136
2875
- #, php-format
2876
- msgid "adds the <strong>%sXML Sitemap%s</strong> for search engines: %s"
2877
  msgstr ""
2878
 
2879
- #: view/BlockSettingsSeo.php:152
2880
- #, php-format
2881
- msgid "adds <strong>Feed style</strong> to your blog feed (eg. %s/feed)"
 
2882
  msgstr ""
2883
 
2884
- #: view/BlockSettingsSeo.php:168
2885
- #, php-format
2886
- msgid ""
2887
- "adds the <strong>%sfavicon.ico%s</strong> and the <strong>%sicons for "
2888
- "tablets and smartphones%s</strong>"
2889
  msgstr ""
2890
 
2891
- #: view/BlockSettingsSeo.php:184
2892
- #, php-format
2893
- msgid "adds the <strong>%sJson-LD%s</strong> metas for Semantic SEO"
2894
  msgstr ""
2895
 
2896
- #: view/BlockSettingsSeo.php:200
2897
- #, php-format
2898
- msgid ""
2899
- "adds the <strong>%sNoindex%s</strong>, <strong>%sNofollow%s</strong> metas "
2900
- "for your desired pages"
2901
  msgstr ""
2902
 
2903
- #: view/BlockSettingsSeo.php:204
2904
- msgid ""
2905
- "Note! By switching the <strong>Json-LD</strong>, <strong>XML Sitemap</"
2906
- "strong> and <strong>Favicon</strong> on, you open new options below"
2907
  msgstr ""
2908
 
2909
- #: view/BlockSettingsSeo.php:213
2910
- msgid "First Page Optimization"
2911
  msgstr ""
2912
 
2913
- #: view/BlockSettingsSeo.php:214
2914
- #, php-format
2915
- msgid "%sThe best SEO approach to Meta information%s"
2916
  msgstr ""
2917
 
2918
- #: view/BlockSettingsSeo.php:215
2919
- msgid "Optimize the <strong>Titles</strong>"
2920
  msgstr ""
2921
 
2922
- #: view/BlockSettingsSeo.php:230
2923
- #, php-format
2924
- msgid "Optimize %sDescriptions%s "
2925
  msgstr ""
2926
 
2927
- #: view/BlockSettingsSeo.php:246
2928
- #, php-format
2929
- msgid "Optimize %sKeywords%s "
2930
  msgstr ""
2931
 
2932
- #: view/BlockSettingsSeo.php:269
2933
- msgid "Squirrly Snippet G17-True Render"
2934
  msgstr ""
2935
 
2936
- #: view/BlockSettingsSeo.php:293
2937
- msgid "First Page Optimization:"
 
 
 
2938
  msgstr ""
2939
 
2940
- # @ squirrly-seo
2941
- #: view/BlockSettingsSeo.php:299
2942
- msgid "Title:"
2943
  msgstr ""
2944
 
2945
- #: view/BlockSettingsSeo.php:304
2946
- msgid "Tips: Length 10-75 chars"
2947
  msgstr ""
2948
 
2949
- # @ squirrly-seo
2950
- #: view/BlockSettingsSeo.php:308
2951
- msgid "Description:"
2952
  msgstr ""
2953
 
2954
- #: view/BlockSettingsSeo.php:312
2955
- msgid "Tips: Length 70-320 chars"
2956
  msgstr ""
2957
 
2958
- # @ squirrly-seo
2959
- #: view/BlockSettingsSeo.php:315
2960
- msgid "Keywords:"
2961
  msgstr ""
2962
 
2963
- #: view/BlockSettingsSeo.php:316
2964
- msgid "Tips: use 2-4 keywords"
2965
  msgstr ""
2966
 
2967
- #: view/BlockSettingsSeo.php:319
2968
- msgid "OG Image:"
2969
  msgstr ""
2970
 
2971
- #: view/BlockSettingsSeo.php:320
2972
- msgid "Select Open Graph Image"
2973
  msgstr ""
2974
 
2975
- #: view/BlockSettingsSeo.php:325
2976
- msgid "First Page Preview (Title, Description, Keywords)"
2977
  msgstr ""
2978
 
2979
- #: view/BlockSettingsSeo.php:327
2980
- msgid "Squirrly Snippet"
2981
  msgstr ""
2982
 
2983
- #: view/BlockSettingsSeo.php:339
2984
- msgid ""
2985
- "If you don't see any changes in your Google snippet, check if other SEO "
2986
- "themes or plugins affect Squirrly."
2987
  msgstr ""
2988
 
2989
- #: view/BlockSettingsSeo.php:343
2990
- #, php-format
2991
- msgid ""
2992
- "Use the %s<strong>Squirrly Snippet Tool</strong>%s while editing a Post/Page "
2993
- "to customize the Title and the Description."
2994
  msgstr ""
2995
 
2996
- #: view/BlockSettingsSeo.php:351
2997
- msgid "SEO for all post/pages"
2998
  msgstr ""
2999
 
3000
- #: view/BlockSettingsSeo.php:352
3001
- #, php-format
3002
  msgid ""
3003
- "To customize the Title and Description for all the Posts and Pages in your "
3004
- "site use the %sSquirrly Snippet Tool%s"
 
3005
  msgstr ""
3006
 
3007
- #: view/BlockSettingsSeo.php:354
3008
- msgid "Add the Post tags in <strong>Keyword META</strong>."
3009
  msgstr ""
3010
 
3011
- #: view/BlockSettingsSeo.php:376
3012
- msgid "Exclude Squirrly from loading in these Post Types"
3013
  msgstr ""
3014
 
3015
- #: view/BlockSettingsSeo.php:377
3016
- msgid ""
3017
- "DO NOT CHECK any Post Type if you want Squirrly to load for all posts types. "
3018
  msgstr ""
3019
 
3020
- #: view/BlockSettingsSeo.php:419
3021
- msgid "Load <strong>Squirrly SEO Snippet in Frontend</strong> too."
3022
  msgstr ""
3023
 
3024
- #: view/BlockSettingsSeo.php:427
3025
- msgid "Social Media Options"
3026
  msgstr ""
3027
 
3028
- #: view/BlockSettingsSeo.php:429
3029
- msgid "Select the language you're using on Social Media"
3030
  msgstr ""
3031
 
3032
- #: view/BlockSettingsSeo.php:575
3033
- #, php-format
3034
- msgid "%sHow to pop out in Social Media with your links%s"
3035
  msgstr ""
3036
 
3037
- #: view/BlockSettingsSeo.php:576
3038
- #, php-format
3039
- msgid "%sGet busy with Facebook’s new Search Engine functions%s"
3040
  msgstr ""
3041
 
3042
- #: view/BlockSettingsSeo.php:577
3043
- #, php-format
3044
- msgid ""
3045
- "%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s"
3046
  msgstr ""
3047
 
3048
- #: view/BlockSettingsSeo.php:583
3049
- msgid "Open Graph G17 - 2017 Settings"
3050
  msgstr ""
3051
 
3052
- #: view/BlockSettingsSeo.php:595
3053
- msgid "Squirrly Adds the Best Codes for Open Graph and Twitter Cards"
3054
  msgstr ""
3055
 
3056
- #: view/BlockSettingsSeo.php:611
3057
- #, php-format
3058
  msgid ""
3059
- "Add the Social Open Graph protocol so that your Facebook shares look good. "
3060
- "%sCheck here%s. "
3061
  msgstr ""
3062
 
3063
- #: view/BlockSettingsSeo.php:615
3064
- msgid "Facebook App ID"
 
3065
  msgstr ""
3066
 
3067
- #: view/BlockSettingsSeo.php:616
3068
- #, php-format
3069
- msgid "Add the %sFacebook App%s ID "
3070
  msgstr ""
3071
 
3072
- #: view/BlockSettingsSeo.php:633
3073
- msgid "You need to add your <strong>Twitter account</strong> below"
3074
  msgstr ""
3075
 
3076
- #: view/BlockSettingsSeo.php:643
3077
- msgid "Add the <strong>Twitter card</strong> in your tweets. "
3078
- msgstr ""
 
 
 
3079
 
3080
- #: view/BlockSettingsSeo.php:651
3081
- #, php-format
3082
- msgid ""
3083
- "Use <strong>Twitter %ssummary_large_image%s</strong> for your Twitter Card. "
3084
  msgstr ""
3085
 
3086
- #: view/BlockSettingsSeo.php:663
3087
- msgid "Social Media Accounts"
3088
  msgstr ""
3089
 
3090
- #: view/BlockSettingsSeo.php:664
3091
- #, php-format
3092
- msgid "%sLink your Google+ profile to the content you create%s"
3093
  msgstr ""
3094
 
3095
- #: view/BlockSettingsSeo.php:665
3096
- #, php-format
3097
- msgid ""
3098
- "%sTwitter account is mandatory for <strong>Twitter Card Validation</strong>%s"
3099
  msgstr ""
3100
 
3101
- #: view/BlockSettingsSeo.php:666
3102
- #, php-format
3103
- msgid ""
3104
- "%sAdd all your social accounts for <strong>JSON-LD Semantic SEO</strong>%s"
3105
  msgstr ""
3106
 
3107
- #: view/BlockSettingsSeo.php:667 view/BlockSettingsSeo.php:909
3108
- #, php-format
3109
- msgid "%sSpecify your social profiles to Google%s"
3110
  msgstr ""
3111
 
3112
- #: view/BlockSettingsSeo.php:675
3113
- msgid "Your Twitter Account:"
3114
  msgstr ""
3115
 
3116
- #: view/BlockSettingsSeo.php:682
3117
- msgid "Google Plus Profile:"
 
 
3118
  msgstr ""
3119
 
3120
- #: view/BlockSettingsSeo.php:689
3121
- msgid "Facebook Profile:"
3122
  msgstr ""
3123
 
3124
- #: view/BlockSettingsSeo.php:696
3125
- msgid "Linkedin Profile:"
3126
  msgstr ""
3127
 
3128
- #: view/BlockSettingsSeo.php:703
3129
- msgid "Pinterest Profile:"
3130
  msgstr ""
3131
 
3132
- #: view/BlockSettingsSeo.php:710
3133
- msgid "Instagram Profile:"
3134
  msgstr ""
3135
 
3136
- #: view/BlockSettingsSeo.php:717
3137
- msgid "Youtube Profile:"
 
 
3138
  msgstr ""
3139
 
3140
- #: view/BlockSettingsSeo.php:727
3141
- msgid "XML Sitemap for Google"
3142
  msgstr ""
3143
 
3144
- #: view/BlockSettingsSeo.php:728
3145
  msgid ""
3146
- "Squirrly Sitemap is the fastest way to tell Google about the pages on your "
3147
- "site. <strong>Supports Multisites, Google News, Images, Videos, Custom Post "
3148
- "Types, Custom Taxonomies and Ecommerce products</strong>"
3149
  msgstr ""
3150
 
3151
- #: view/BlockSettingsSeo.php:729
3152
- #, php-format
3153
- msgid "%sHow to submit your sitemap.xml in Google Webmaster Tool%s"
3154
  msgstr ""
3155
 
3156
- #: view/BlockSettingsSeo.php:730
3157
- #, php-format
3158
  msgid ""
3159
- "%s10 Vital To Dos to Feed Your SEO Content Machine After You Post Articles%s"
 
3160
  msgstr ""
3161
 
3162
- #: view/BlockSettingsSeo.php:731
3163
- #, php-format
3164
- msgid ""
3165
- "For Google News Sitemap, ensure that your site is included in %sGoogle News%s"
3166
  msgstr ""
3167
 
3168
- #: view/BlockSettingsSeo.php:740
3169
- msgid "XML Sitemap Options"
3170
  msgstr ""
3171
 
3172
- #: view/BlockSettingsSeo.php:749
3173
- msgid "Ping your sitemap to Google and Bing when a new post is published"
3174
  msgstr ""
3175
 
3176
- #: view/BlockSettingsSeo.php:760
3177
- msgid "Add all languages in the same sitemap"
3178
  msgstr ""
3179
 
3180
- #: view/BlockSettingsSeo.php:767
3181
- msgid "Build Sitemaps for"
3182
  msgstr ""
3183
 
3184
- #: view/BlockSettingsSeo.php:772
3185
- msgid "Home Page"
3186
  msgstr ""
3187
 
3188
- #: view/BlockSettingsSeo.php:779
3189
- msgid "Google News"
 
 
3190
  msgstr ""
3191
 
3192
- #: view/BlockSettingsSeo.php:787
3193
- msgid "Attachments"
3194
- msgstr ""
 
 
 
3195
 
3196
- #: view/BlockSettingsSeo.php:793
3197
- msgid "Categories"
3198
  msgstr ""
3199
 
3200
- #: view/BlockSettingsSeo.php:807
3201
- msgid "Tags"
3202
  msgstr ""
3203
 
3204
- #: view/BlockSettingsSeo.php:819
3205
- msgid "Archive"
3206
  msgstr ""
3207
 
3208
- #: view/BlockSettingsSeo.php:822
3209
- msgid "Custom Taxonomies"
3210
  msgstr ""
3211
 
3212
- #: view/BlockSettingsSeo.php:825
3213
- msgid "Custom Posts"
 
3214
  msgstr ""
3215
 
3216
- #: view/BlockSettingsSeo.php:828
3217
- #, php-format
3218
- msgid ""
3219
- "Select only the Post Types that have links in them. Your sitemap will be %s"
3220
  msgstr ""
3221
 
3222
- #: view/BlockSettingsSeo.php:832
3223
- msgid "Include in Sitemaps"
3224
  msgstr ""
3225
 
3226
- #: view/BlockSettingsSeo.php:835
3227
- msgid "<strong>Images</strong> from posts/pages"
3228
  msgstr ""
3229
 
3230
- #: view/BlockSettingsSeo.php:838
3231
- msgid "<strong>Videos</strong> (embeded and local media)"
3232
  msgstr ""
3233
 
3234
- #: view/BlockSettingsSeo.php:843
3235
- msgid "How often do you update your site?"
3236
  msgstr ""
3237
 
3238
- #: view/BlockSettingsSeo.php:845
3239
- msgid "every hour"
3240
  msgstr ""
3241
 
3242
- #: view/BlockSettingsSeo.php:846
3243
- msgid "every day"
3244
  msgstr ""
3245
 
3246
- #: view/BlockSettingsSeo.php:847
3247
- msgid "1-3 times per week"
 
3248
  msgstr ""
3249
 
3250
- #: view/BlockSettingsSeo.php:848
3251
- msgid "1-3 times per month"
3252
  msgstr ""
3253
 
3254
- #: view/BlockSettingsSeo.php:849
3255
- msgid "1-3 times per year"
3256
  msgstr ""
3257
 
3258
- #: view/BlockSettingsSeo.php:853
3259
- msgid "Feed Pagination: How many Posts per page to show in sitemap?"
3260
  msgstr ""
3261
 
3262
- # @ squirrly-seo
3263
- #: view/BlockSettingsSeo.php:868
3264
- msgid "Change the Website Icon"
3265
  msgstr ""
3266
 
3267
- #: view/BlockSettingsSeo.php:869
3268
- msgid ""
3269
- "Now, even tablet & smartphone browsers make use of your icons. This makes "
3270
- "having a good favicon even more important."
3271
  msgstr ""
3272
 
3273
- #: view/BlockSettingsSeo.php:870
3274
  #, php-format
3275
- msgid ""
3276
- "You can use %shttp://convertico.com/%s to convert your photo to icon and "
3277
- "upload it here after that."
3278
  msgstr ""
3279
 
3280
- # @ squirrly-seo
3281
- #: view/BlockSettingsSeo.php:876
3282
- msgid "Upload file:"
3283
  msgstr ""
3284
 
3285
- # @ squirrly-seo
3286
- #: view/BlockSettingsSeo.php:889 view/FrontMenu.php:327 view/FrontMenu.php:468
3287
- msgid "Upload"
3288
  msgstr ""
3289
 
3290
- # @ squirrly-seo
3291
- #: view/BlockSettingsSeo.php:893
3292
- msgid ""
3293
- "If you don't see the new icon in your browser, empty the browser cache and "
3294
- "refresh the page."
3295
  msgstr ""
3296
 
3297
  # @ squirrly-seo
3298
- #: view/BlockSettingsSeo.php:895
3299
- msgid "File types: JPG, JPEG, GIF and PNG."
 
 
 
 
 
 
 
 
3300
  msgstr ""
3301
 
3302
- #: view/BlockSettingsSeo.php:897
3303
  msgid ""
3304
- "Does not physically create the favicon.ico file. The best option for "
3305
- "Multisites."
3306
  msgstr ""
3307
 
3308
- #: view/BlockSettingsSeo.php:905
3309
- msgid "JSON-LD for Semantic SEO"
 
 
 
 
3310
  msgstr ""
3311
 
3312
- #: view/BlockSettingsSeo.php:906
3313
  msgid ""
3314
- "Squirrly will automatically add the JSON-LD Structured Data in your site."
 
3315
  msgstr ""
3316
 
3317
- #: view/BlockSettingsSeo.php:907
3318
  #, php-format
3319
- msgid "%sJSON-LD's Big Day at Google%s"
 
 
 
3320
  msgstr ""
3321
 
3322
- #: view/BlockSettingsSeo.php:908
3323
- #, php-format
3324
- msgid "%sGoogle Testing Tool%s"
3325
  msgstr ""
3326
 
3327
- #: view/BlockSettingsSeo.php:915
3328
- msgid "JSON-LD G17 - 2x More Options"
3329
  msgstr ""
3330
 
3331
- #: view/BlockSettingsSeo.php:932
3332
- msgid "Your site type:"
3333
  msgstr ""
3334
 
3335
- #: view/BlockSettingsSeo.php:934
3336
- msgid "Organization"
3337
  msgstr ""
3338
 
3339
- #: view/BlockSettingsSeo.php:935
3340
- msgid "Personal"
3341
  msgstr ""
3342
 
3343
- #: view/BlockSettingsSeo.php:941
3344
- msgid "Your Organization Name:"
3345
  msgstr ""
3346
 
3347
- #: view/BlockSettingsSeo.php:942
3348
- msgid "Your Name:"
3349
  msgstr ""
3350
 
3351
- #: view/BlockSettingsSeo.php:946
3352
- msgid "Job Title:"
3353
  msgstr ""
3354
 
3355
- #: view/BlockSettingsSeo.php:950
3356
- msgid "Logo Url:"
3357
  msgstr ""
3358
 
3359
- #: view/BlockSettingsSeo.php:951
3360
- msgid "Image Url:"
3361
  msgstr ""
3362
 
3363
- #: view/BlockSettingsSeo.php:952
3364
- msgid "Select Image"
3365
  msgstr ""
3366
 
3367
- #: view/BlockSettingsSeo.php:956
3368
- msgid "Contact Phone:"
 
 
3369
  msgstr ""
3370
 
3371
- #: view/BlockSettingsSeo.php:960
3372
- msgid "Contact Type:"
 
 
 
3373
  msgstr ""
3374
 
3375
- #: view/BlockSettingsSeo.php:962
3376
- msgid "Customer Service"
3377
  msgstr ""
3378
 
3379
- #: view/BlockSettingsSeo.php:963
3380
- msgid "Technical Support"
3381
  msgstr ""
3382
 
3383
- #: view/BlockSettingsSeo.php:964
3384
- msgid "Billing Support"
3385
  msgstr ""
3386
 
3387
- #: view/BlockSettingsSeo.php:965
3388
- msgid "Bill Payment"
3389
  msgstr ""
3390
 
3391
- #: view/BlockSettingsSeo.php:966
3392
- msgid "Sales"
3393
  msgstr ""
3394
 
3395
- #: view/BlockSettingsSeo.php:967
3396
- msgid "Reservations"
3397
  msgstr ""
3398
 
3399
- #: view/BlockSettingsSeo.php:968
3400
- msgid "Credit Card Support"
3401
  msgstr ""
3402
 
3403
- #: view/BlockSettingsSeo.php:969
3404
- msgid "Emergency"
 
 
 
3405
  msgstr ""
3406
 
3407
- #: view/BlockSettingsSeo.php:970
3408
- msgid "Baggage Tracking"
3409
  msgstr ""
3410
 
3411
- #: view/BlockSettingsSeo.php:971
3412
- msgid "Roadside Assistance"
3413
  msgstr ""
3414
 
3415
- #: view/BlockSettingsSeo.php:972
3416
- msgid "Package Tracking"
3417
  msgstr ""
3418
 
3419
- #: view/BlockSettingsSeo.php:977
3420
- msgid "Short Description:"
3421
  msgstr ""
3422
 
3423
- #: view/BlockSettingsSeo.php:985
3424
- msgid "Add your social accounts for Json-LD"
3425
  msgstr ""
3426
 
3427
- #: view/BlockSettingsSeo.php:990
3428
- msgid "How the search results will look like once Google grabs your data."
3429
  msgstr ""
3430
 
3431
- #: view/BlockSettingsSeo.php:999 view/BlockToolbar.php:8
3432
- msgid "Tracking Tools"
3433
  msgstr ""
3434
 
3435
- #: view/BlockSettingsSeo.php:1000
3436
- #, php-format
3437
- msgid "%sHow to Get the Most Out of Google Analytics%s"
3438
  msgstr ""
3439
 
3440
- #: view/BlockSettingsSeo.php:1001
3441
- #, php-format
3442
- msgid "%sWhat is Facebook Pixel?%s"
3443
  msgstr ""
3444
 
3445
- #: view/BlockSettingsSeo.php:1002
3446
- #, php-format
3447
- msgid "%sA Beginner’s Guide to Facebook Insights%s"
3448
  msgstr ""
3449
 
3450
- #: view/BlockSettingsSeo.php:1009
3451
- msgid "Google Tracking G17"
3452
  msgstr ""
3453
 
3454
- #: view/BlockSettingsSeo.php:1021
3455
- msgid "Facebook Tracking G17"
 
 
3456
  msgstr ""
3457
 
3458
- #: view/BlockSettingsSeo.php:1033
3459
- msgid "Rich Pins G17"
3460
  msgstr ""
3461
 
3462
- #: view/BlockSettingsSeo.php:1050 view/BlockSettingsSeo.php:1060
3463
- #: view/BlockSettingsSeo.php:1073
3464
  #, php-format
3465
- msgid "Facebook Admin ID (for %sInsights%s ):"
3466
  msgstr ""
3467
 
3468
- #: view/BlockSettingsSeo.php:1053 view/BlockSettingsSeo.php:1063
3469
- #: view/BlockSettingsSeo.php:1076
3470
- msgid "Facebook ID or https://www.facebook.com/YourProfileName"
3471
  msgstr ""
3472
 
3473
- #: view/BlockSettingsSeo.php:1068
3474
- msgid "Add more Facebook Admin IDs"
3475
  msgstr ""
3476
 
3477
- #: view/BlockSettingsSeo.php:1082
3478
- #, php-format
3479
- msgid "Google %sAnalytics ID%s:"
 
3480
  msgstr ""
3481
 
3482
- #: view/BlockSettingsSeo.php:1086
3483
- msgid "Google Tracking Mode:"
3484
  msgstr ""
3485
 
3486
- #: view/BlockSettingsSeo.php:1088
3487
- msgid "analytics.js"
3488
  msgstr ""
3489
 
3490
- #: view/BlockSettingsSeo.php:1089
3491
- msgid "gtag.js"
3492
  msgstr ""
3493
 
3494
- #: view/BlockSettingsSeo.php:1095
3495
- #, php-format
3496
- msgid "Facebook %sPixel ID%s:"
3497
  msgstr ""
3498
 
3499
- #: view/BlockSettingsSeo.php:1108
3500
- #, php-format
3501
  msgid ""
3502
- "Load <strong>%sGoogle Analytics AMP%s</strong> and <strong>%sFacebook Pixel "
3503
- "AMP%s</strong> tracking%s(Warning! The tracking works only for AMP Themes.%s)"
3504
  msgstr ""
3505
 
3506
- #: view/BlockSettingsSeo.php:1115
3507
- msgid "Measure Your Success"
3508
  msgstr ""
3509
 
3510
- #: view/BlockSettingsSeo.php:1116
3511
- #, php-format
3512
- msgid "%sHow to set the Google Webmaster Tool%s"
 
3513
  msgstr ""
3514
 
3515
- #: view/BlockSettingsSeo.php:1117
3516
- #, php-format
3517
- msgid "%sBest practices to help Google find, crawl, and index your site%s"
3518
  msgstr ""
3519
 
3520
- #: view/BlockSettingsSeo.php:1118
3521
- #, php-format
3522
- msgid "%sBing Webmaster Tools Help & How-To Center%s"
3523
  msgstr ""
3524
 
3525
- #: view/BlockSettingsSeo.php:1119
3526
- #, php-format
3527
- msgid "%sRich Pins Validator%s"
 
3528
  msgstr ""
3529
 
3530
- #: view/BlockSettingsSeo.php:1125
3531
- #, php-format
3532
- msgid "Google META verification code for %sWebmaster Tool%s:"
3533
  msgstr ""
3534
 
3535
- #: view/BlockSettingsSeo.php:1131
3536
- #, php-format
3537
- msgid "Bing META code (for %sWebmaster Tool%s ):"
3538
  msgstr ""
3539
 
3540
- #: view/BlockSettingsSeo.php:1138
3541
- #, php-format
3542
- msgid "Alexa META code (for %sAlexa Tool%s ):"
3543
  msgstr ""
3544
 
3545
- #: view/BlockSettingsSeo.php:1144
3546
- #, php-format
3547
- msgid "Pinterest Website Validator Code: (validate %sRich Pins%s )"
3548
  msgstr ""
3549
 
3550
- # @ squirrly-seo
3551
- #: view/BlockSupport.php:11
3552
- msgid "Go to Profile"
3553
  msgstr ""
3554
 
3555
- # @ squirrly-seo
3556
- #: view/BlockSupport.php:11 view/BlockSupport.php:12
3557
- msgid "Profile"
3558
  msgstr ""
3559
 
3560
- #: view/BlockSupport.php:47 view/BlockSupport.php:102
3561
- msgid "For more support:"
 
3562
  msgstr ""
3563
 
3564
- #: view/BlockSupport.php:48 view/BlockSupport.php:103
3565
- #, php-format
3566
- msgid "10 AM to 4 PM (GMT): Mon-Fri %sby email%s."
3567
  msgstr ""
3568
 
3569
- #: view/BlockSupport.php:49 view/BlockSupport.php:105
3570
- #, php-format
3571
- msgid "%sLive Chat%s on Youtube. Thursday 4 PM."
3572
  msgstr ""
3573
 
3574
- #: view/BlockSupport.php:50 view/BlockSupport.php:106
3575
- #, php-format
3576
- msgid "Google Plus %sSupport Community%s."
3577
  msgstr ""
3578
 
3579
- #: view/BlockSupport.php:51 view/BlockSupport.php:107
3580
- #, php-format
3581
- msgid "New Lessons Mon. and Tue. on %sTwitter%s."
3582
  msgstr ""
3583
 
3584
- # @ squirrly-seo
3585
- #: view/BlockSupport.php:63
3586
- msgid "How was your Squirrly experience today?"
3587
  msgstr ""
3588
 
3589
- # @ squirrly-seo
3590
- #: view/BlockSupport.php:72
3591
- msgid "How was Squirrly today?"
3592
  msgstr ""
3593
 
3594
- #: view/BlockSupport.php:77
3595
- msgid "Angry"
3596
  msgstr ""
3597
 
3598
- #: view/BlockSupport.php:77
3599
- msgid "Annoying"
3600
  msgstr ""
3601
 
3602
- #: view/BlockSupport.php:80
3603
- msgid "Sad"
3604
  msgstr ""
3605
 
3606
- #: view/BlockSupport.php:80
3607
- msgid "Bad"
3608
  msgstr ""
3609
 
3610
- #: view/BlockSupport.php:83
3611
- msgid "Happy"
3612
  msgstr ""
3613
 
3614
- #: view/BlockSupport.php:83
3615
- msgid "Nice"
3616
  msgstr ""
3617
 
3618
- #: view/BlockSupport.php:86
3619
- msgid "Excited"
3620
  msgstr ""
3621
 
3622
- #: view/BlockSupport.php:86
3623
- msgid "Great"
3624
  msgstr ""
3625
 
3626
- #: view/BlockSupport.php:89
3627
- msgid "Love it"
3628
  msgstr ""
3629
 
3630
- # @ squirrly-seo
3631
- #: view/BlockSupport.php:95
3632
- msgid "Please tell us why?"
3633
  msgstr ""
3634
 
3635
- # @ squirrly-seo
3636
- #: view/BlockSupport.php:98
3637
- msgid "Send feedback"
3638
  msgstr ""
3639
 
3640
- #: view/BlockSupport.php:104
3641
- #, php-format
3642
- msgid "%sSupport button%s here in WordPress (^^)"
3643
  msgstr ""
3644
 
3645
- # @ squirrly-seo
3646
- #: view/BlockSupport.php:112
3647
- msgid "Thank you! You can send us a happy face tomorow too."
3648
  msgstr ""
3649
 
3650
- #: view/BlockToolbar.php:5
3651
- msgid "Structured Data"
3652
  msgstr ""
3653
 
3654
- #: view/BlockToolbar.php:6
3655
- msgid "Social Media"
3656
  msgstr ""
3657
 
3658
- #: view/BlockToolbar.php:7
3659
- msgid "Site Icon"
3660
  msgstr ""
3661
 
3662
- #: view/BlockToolbar.php:9
3663
- msgid "Connections"
 
 
3664
  msgstr ""
3665
 
3666
- #: view/BlockToolbar.php:10
3667
- msgid "Sitemap XML"
3668
  msgstr ""
3669
 
3670
- #: view/BlockToolbar.php:11
3671
- msgid "Ranking Options"
 
 
3672
  msgstr ""
3673
 
3674
- #: view/BlockToolbar.php:12
3675
- msgid "Advanced"
3676
  msgstr ""
3677
 
3678
- #: view/BlockToolbar.php:13
3679
- msgid "Robots.txt"
 
 
3680
  msgstr ""
3681
 
3682
- #: view/BlockToolbar.php:15
3683
- msgid "Import"
 
 
3684
  msgstr ""
3685
 
3686
- # @ squirrly-seo
3687
- #: view/Blocklogin.php:2
3688
- msgid "Squirrly.co Login"
3689
  msgstr ""
3690
 
3691
- # @ squirrly-seo
3692
- #: view/Blocklogin.php:9
3693
- msgid "Email:"
3694
  msgstr ""
3695
 
3696
- # @ squirrly-seo
3697
- #: view/Blocklogin.php:11
3698
- msgid "Password:"
3699
  msgstr ""
3700
 
3701
- # @ squirrly-seo
3702
- #: view/Blocklogin.php:13
3703
- msgid "Login"
3704
  msgstr ""
3705
 
3706
- # @ squirrly-seo
3707
- #: view/Blocklogin.php:15
3708
- msgid "Register"
 
3709
  msgstr ""
3710
 
3711
- # @ squirrly-seo
3712
- #: view/Blocklogin.php:15
3713
- msgid "Register to Squirrly.co"
3714
  msgstr ""
3715
 
3716
- # @ squirrly-seo
3717
- #: view/Blocklogin.php:16
3718
- msgid "Lost password?"
3719
  msgstr ""
3720
 
3721
- # @ squirrly-seo
3722
- #: view/Blocklogin.php:16
3723
- msgid "Lost password"
3724
  msgstr ""
3725
 
3726
- # @ squirrly-seo
3727
- #: view/Blocklogin.php:21
3728
- msgid "Enter your email"
 
3729
  msgstr ""
3730
 
3731
- #: view/Blocklogin.php:23
3732
- msgid "Your Email:"
3733
  msgstr ""
3734
 
3735
- #: view/Blocklogin.php:31
3736
- #, php-format
3737
- msgid "I Agree with the Squirrly %sTerms of Use%s and %sPrivacy Policy%s"
 
3738
  msgstr ""
3739
 
3740
- #: view/Blocklogin.php:33
3741
- msgid "Sign Up"
3742
  msgstr ""
3743
 
3744
- #: view/Blocklogin.php:34
3745
- msgid "I already have an account"
3746
  msgstr ""
3747
 
3748
- #: view/Blocklogin.php:35
3749
- msgid "This email connects you to Squirrly.co"
3750
  msgstr ""
3751
 
3752
- # @ squirrly-seo
3753
- #: view/Blocklogin.php:46
3754
- msgid "The email address is invalid!"
3755
  msgstr ""
3756
 
3757
- # @ squirrly-seo
3758
- #: view/Blocklogin.php:47
3759
- msgid "Click on Sign Up button and try again ..."
3760
  msgstr ""
3761
 
3762
- # @ squirrly-seo
3763
- #: view/Blocklogin.php:48
3764
- msgid "An error occured while logging in!"
 
3765
  msgstr ""
3766
 
3767
- # @ squirrly-seo
3768
- #: view/Blocklogin.php:49
3769
- msgid "Connecting ..."
3770
  msgstr ""
3771
 
3772
- #: view/Blocklogin.php:59
3773
- msgid "Congratulations! You are ready to use all the features from Squirrly"
 
 
3774
  msgstr ""
3775
 
3776
- #: view/Blocksearch.php:2
3777
- msgid "Waiting for your editor to load .. "
3778
  msgstr ""
3779
 
3780
- #: view/Blocksearch.php:3
3781
  msgid ""
3782
- "Javascript is disabled! You need to activate the javascript in order to use "
3783
- "Squirrly SEO."
3784
  msgstr ""
3785
 
3786
- #: view/Blocksearch.php:6
3787
- msgid "Optimize for Keyword"
3788
  msgstr ""
3789
 
3790
- #: view/Blocksearch.php:7 view/Blocksearch.php:15
3791
- msgid "Squirrly Briefcase"
3792
  msgstr ""
3793
 
3794
- #: view/Blocksearch.php:9
3795
- msgid "What is Briefcase?"
3796
  msgstr ""
3797
 
3798
- #: view/Blocksearch.php:16
3799
- msgid "Refresh the keywords"
3800
  msgstr ""
3801
 
3802
- #: view/Blocksearch.php:18
3803
- msgid "Search in Briefcase ..."
3804
  msgstr ""
3805
 
3806
- #: view/Blocksearch.php:20
3807
- msgid "Go to Briefcase"
3808
  msgstr ""
3809
 
3810
- # @ squirrly-seo
3811
- #: view/Blocksearch.php:32
3812
- msgid "Enter a keyword"
3813
  msgstr ""
3814
 
3815
- # @ squirrly-seo
3816
- #: view/Blocksearch.php:33
3817
- msgid "for Squirrly Live SEO optimization"
3818
  msgstr ""
3819
 
3820
- # @ squirrly-seo
3821
- #: view/Blocksearch.php:49
3822
- msgid "Use this keyword"
3823
  msgstr ""
3824
 
3825
- # @ squirrly-seo
3826
- #: view/Blocksearch.php:53
3827
- msgid "Enter a keyword above!"
3828
  msgstr ""
3829
 
3830
- # @ squirrly-seo
3831
- #: view/Blocksearch.php:54
3832
- msgid "I have more then one keyword!"
3833
  msgstr ""
3834
 
3835
- # @ squirrly-seo
3836
- #: view/Blocksearch.php:60
3837
- msgid "Images"
3838
  msgstr ""
3839
 
3840
- # @ squirrly-seo
3841
- #: view/Blocksearch.php:62
3842
- msgid "Wiki"
 
3843
  msgstr ""
3844
 
3845
- # @ squirrly-seo
3846
- #: view/Blocksearch.php:63
3847
- msgid "Blogs"
3848
  msgstr ""
3849
 
3850
- # @ squirrly-seo
3851
- #: view/Blocksearch.php:64
3852
- msgid "My articles"
 
 
3853
  msgstr ""
3854
 
3855
- # @ squirrly-seo
3856
- #: view/Blocksearch.php:72
3857
- msgid "Show only Copyright Free images"
 
3858
  msgstr ""
3859
 
3860
- #: view/Blockseo.php:13
3861
- msgid "Split Window"
3862
  msgstr ""
3863
 
3864
- #: view/FrontMenu.php:46
3865
- msgid "Saved! This is how the preview looks like"
3866
  msgstr ""
3867
 
3868
- #: view/FrontMenu.php:63
3869
- msgid "Activate Squirrly SEO for this page"
3870
  msgstr ""
3871
 
3872
- #: view/FrontMenu.php:65
3873
  #, php-format
3874
  msgid ""
3875
- "Post Type (%s) was excluded from %sSquirrly > SEO Settings%s. Squirrly SEO "
3876
- "will not load for this post type on the frontend"
3877
  msgstr ""
3878
 
3879
- #: view/FrontMenu.php:83
3880
- msgid "META"
3881
  msgstr ""
3882
 
3883
- #: view/FrontMenu.php:86
3884
- msgid "FACEBOOK"
3885
  msgstr ""
3886
 
3887
- #: view/FrontMenu.php:89
3888
- msgid "TWITTER"
3889
  msgstr ""
3890
 
3891
- #: view/FrontMenu.php:92
3892
- msgid "ADVANCED"
3893
  msgstr ""
3894
 
3895
- #: view/FrontMenu.php:105
3896
- msgid "How this page will appear on Search Engines"
3897
  msgstr ""
3898
 
3899
- #: view/FrontMenu.php:110
3900
- msgid "Edit Snippet"
3901
  msgstr ""
3902
 
3903
- #: view/FrontMenu.php:125 view/FrontMenu.php:316 view/FrontMenu.php:456
3904
- msgid "Cancel"
3905
  msgstr ""
3906
 
3907
- #: view/FrontMenu.php:126 view/FrontMenu.php:317 view/FrontMenu.php:457
3908
- #: view/FrontMenu.php:518
3909
- msgid "Save"
3910
  msgstr ""
3911
 
3912
- #: view/FrontMenu.php:133
3913
- msgid "SEO Title"
3914
  msgstr ""
3915
 
3916
- #: view/FrontMenu.php:136 view/FrontMenu.php:186
3917
- msgid "Pattern: "
3918
  msgstr ""
3919
 
3920
- #: view/FrontMenu.php:141
3921
- msgid "Current Title"
3922
  msgstr ""
3923
 
3924
- #: view/FrontMenu.php:146
3925
- msgid "Default Title"
3926
  msgstr ""
3927
 
3928
- #: view/FrontMenu.php:166 view/FrontMenu.php:213
3929
- msgid "Pattern"
3930
  msgstr ""
3931
 
3932
- #: view/FrontMenu.php:183
3933
- msgid "META Description"
3934
  msgstr ""
3935
 
3936
- #: view/FrontMenu.php:190
3937
- msgid "Current Description"
3938
  msgstr ""
3939
 
3940
- #: view/FrontMenu.php:195
3941
- msgid "Default Description"
 
3942
  msgstr ""
3943
 
3944
- #: view/FrontMenu.php:229
3945
- msgid "Meta Keywords"
3946
  msgstr ""
3947
 
3948
- # @ squirrly-seo
3949
- #: view/FrontMenu.php:233
3950
- msgid "+ Add keyword"
3951
  msgstr ""
3952
 
3953
- #: view/FrontMenu.php:241
3954
- msgid "Canonical link"
3955
  msgstr ""
3956
 
3957
- #: view/FrontMenu.php:244
3958
- msgid "Found: "
 
 
3959
  msgstr ""
3960
 
3961
- #: view/FrontMenu.php:250
3962
- msgid "Current"
3963
  msgstr ""
3964
 
3965
- #: view/FrontMenu.php:256
3966
- msgid "Default Link"
3967
  msgstr ""
3968
 
3969
- #: view/FrontMenu.php:267
3970
- msgid ""
3971
- "To edit the snippet, you have to activate Squirrly SEO for this page first"
3972
  msgstr ""
3973
 
3974
- #: view/FrontMenu.php:268 view/FrontMenu.php:411 view/FrontMenu.php:511
3975
- #: view/FrontMenu.php:567
3976
- msgid "or Click here"
3977
  msgstr ""
3978
 
3979
- #: view/FrontMenu.php:276
3980
- msgid "How this page appears on Facebook"
3981
  msgstr ""
3982
 
3983
- #: view/FrontMenu.php:281
3984
- msgid "Edit Open Graph"
 
 
 
 
3985
  msgstr ""
3986
 
3987
- #: view/FrontMenu.php:289 view/FrontMenu.php:430
3988
- msgid "The image size must be at least 500 pixels wide"
 
3989
  msgstr ""
3990
 
3991
- #: view/FrontMenu.php:303 view/FrontMenu.php:444
 
3992
  msgid ""
3993
- "This is the Featured Image. You can changin it if you edit the snippet and "
3994
- "upload anothe image."
3995
  msgstr ""
3996
 
3997
- #: view/FrontMenu.php:323
3998
- msgid "Media Image"
3999
  msgstr ""
4000
 
4001
- #: view/FrontMenu.php:328 view/FrontMenu.php:469
4002
- msgid "Image size must be at least 500 pixels wide"
 
 
4003
  msgstr ""
4004
 
4005
- #: view/FrontMenu.php:342
4006
- msgid "OG Title"
4007
  msgstr ""
4008
 
4009
- #: view/FrontMenu.php:355
4010
- msgid "OG Description"
 
 
 
4011
  msgstr ""
4012
 
4013
- #: view/FrontMenu.php:368
4014
- msgid "Author Link"
 
4015
  msgstr ""
4016
 
4017
- #: view/FrontMenu.php:373
4018
- msgid "if there are more authors, separate their facebook links with commas"
 
 
4019
  msgstr ""
4020
 
4021
- #: view/FrontMenu.php:379
4022
- msgid "Page type"
 
 
4023
  msgstr ""
4024
 
4025
- #: view/FrontMenu.php:383
4026
- msgid "Website"
4027
  msgstr ""
4028
 
4029
- #: view/FrontMenu.php:392
4030
- msgid "Book"
 
4031
  msgstr ""
4032
 
4033
- #: view/FrontMenu.php:395
4034
- msgid "Music"
 
 
 
4035
  msgstr ""
4036
 
4037
- #: view/FrontMenu.php:398
4038
- msgid "Product"
4039
  msgstr ""
4040
 
4041
- #: view/FrontMenu.php:401
4042
- msgid "Video"
 
 
4043
  msgstr ""
4044
 
4045
- #: view/FrontMenu.php:410
 
4046
  msgid ""
4047
- "To edit the Open Graph, you have to activate Squirrly SEO for this page first"
 
4048
  msgstr ""
4049
 
4050
- #: view/FrontMenu.php:419
4051
- msgid "How this page appears on Twitter"
4052
  msgstr ""
4053
 
4054
- #: view/FrontMenu.php:422
4055
- msgid "Edit Twitter Card"
 
 
4056
  msgstr ""
4057
 
4058
- #: view/FrontMenu.php:464
4059
- msgid "Twitter Image"
4060
  msgstr ""
4061
 
4062
- #: view/FrontMenu.php:482
4063
- msgid "Twitter Card Title"
4064
  msgstr ""
4065
 
4066
- #: view/FrontMenu.php:495
4067
- msgid "Twitter Card Description"
4068
  msgstr ""
4069
 
4070
- #: view/FrontMenu.php:510
4071
- msgid ""
4072
- "To edit the Twitter Card, you have to activate Squirrly SEO for this page "
4073
- "first"
4074
  msgstr ""
4075
 
4076
- #: view/FrontMenu.php:525
4077
- msgid "Let Google Index This Page"
4078
  msgstr ""
4079
 
4080
- #: view/FrontMenu.php:538
4081
- msgid "Pass Link Juice to This Page"
4082
  msgstr ""
4083
 
4084
- #: view/FrontMenu.php:551
4085
- msgid "Show it in Sitemap.xml"
4086
  msgstr ""
4087
 
4088
- #: view/FrontMenu.php:566
4089
- msgid "To edit, you have to activate Squirrly SEO for this page first."
4090
  msgstr ""
4091
 
4092
- #: view/FrontMenu.php:586
4093
- msgid "post type"
4094
  msgstr ""
4095
 
4096
- #: view/FrontMenu.php:588
4097
- msgid "og type"
4098
  msgstr ""
4099
 
4100
- #: view/FrontMenu.php:610
4101
- msgid "Can't do Custom SEO for this URL"
4102
  msgstr ""
4103
 
4104
- #: view/FrontMenu.php:630
4105
- msgid "Enable Squirrly SEO to load Squirrly Snippet"
 
 
 
 
4106
  msgstr ""
4107
 
4108
- #: view/FrontMenu.php:654
 
 
 
 
 
 
 
4109
  #, php-format
4110
- msgid "%sPlease connect to Squirrly first%s"
 
 
4111
  msgstr ""
4112
 
4113
- #: view/SerpChecker.php:32
4114
- msgid "Settings"
4115
  msgstr ""
4116
 
4117
- #: view/SerpChecker.php:37
4118
- msgid "Update ranks"
 
 
 
4119
  msgstr ""
4120
 
4121
- #: view/SerpChecker.php:54
4122
- msgid "Advanced Analytics (Business Level)"
4123
  msgstr ""
4124
 
4125
- #: view/SerpChecker.php:77
4126
- msgid "Get Ranks and found Keywords from Squirrly Cloud"
4127
  msgstr ""
4128
 
4129
- #: view/SerpChecker.php:81 view/SerpChecker.php:85
4130
- msgid "Get Ranks from Squirrly Cloud"
 
 
 
4131
  msgstr ""
4132
 
4133
- #: view/SerpChecker.php:92
4134
- msgid "Last Update"
4135
  msgstr ""
4136
 
4137
- #: view/SerpChecker.php:109 view/SerpChecker.php:113
4138
- msgid "Found Keywords"
 
 
4139
  msgstr ""
4140
 
4141
- #: view/SerpChecker.php:118
4142
- #, php-format
4143
- msgid "Found Keywords (%sSee all keywords%s)"
4144
  msgstr ""
4145
 
4146
- #: view/SerpChecker.php:118
4147
- msgid "Show the keywords found with Advanced Analytics"
4148
  msgstr ""
4149
 
4150
- #: view/SerpChecker.php:140
4151
- msgid "Show only the ranked articles"
4152
  msgstr ""
4153
 
4154
- #: view/SerpChecker.php:145
4155
- msgid "Today Avg. Ranking"
 
 
 
 
 
 
 
 
 
4156
  msgstr ""
4157
 
4158
- #: view/SerpChecker.php:175
4159
- msgid "Show only the SERP changes"
 
 
 
 
 
 
 
4160
  msgstr ""
4161
 
4162
- #: view/SerpChecker.php:180
4163
- msgid "Today SERP Changes"
 
 
 
4164
  msgstr ""
4165
 
4166
- # @ squirrly-seo
4167
- #~ msgid "Could not send the email..."
4168
- #~ msgstr "Konnte E-Mail nicht senden ..."
 
 
 
 
 
 
 
4169
 
4170
  # @ squirrly-seo
4171
  #~ msgid ""
@@ -4196,10 +7060,6 @@ msgstr ""
4196
  #~ msgid "Switch to Visual editor!"
4197
  #~ msgstr "Zum Visual Editor wechseln !"
4198
 
4199
- # @ squirrly-seo
4200
- #~ msgid "Tips: 2-4 keywords"
4201
- #~ msgstr "Tipp: Länge 2-4 Schlüsselwörter"
4202
-
4203
  # @ squirrly-seo
4204
  #~ msgid "Go to:"
4205
  #~ msgstr "Gehe zu:"
@@ -4212,14 +7072,6 @@ msgstr ""
4212
  #~ msgid "Clear"
4213
  #~ msgstr "Löschen"
4214
 
4215
- # @ squirrly-seo
4216
- #~ msgid "Do the research"
4217
- #~ msgstr "Recherchieren"
4218
-
4219
- # @ squirrly-seo
4220
- #~ msgid "Enter even more keywords."
4221
- #~ msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
4222
-
4223
  # @ squirrly-seo
4224
  #~ msgid "Let some keywords for the next time as well!"
4225
  #~ msgstr "Lassen Sie ein paar Schlüsselwörter auch für das nächste Mal!"
@@ -4269,14 +7121,6 @@ msgstr ""
4269
  #~ msgid "File type error: Only JPEG, JPG, GIF or PNG files are allowed."
4270
  #~ msgstr "Dateityp Fehler: Nur JPEG, JPG, GIF oder PNG-Dateien sind erlaubt."
4271
 
4272
- # @ squirrly-seo
4273
- #~ msgid "Your E-mail:"
4274
- #~ msgstr "Ihre E-Mail Adresse:"
4275
-
4276
- # @ squirrly-seo
4277
- #~ msgid "Squirrly LIVE SEO assistant"
4278
- #~ msgstr "Squirrly LIVE SEO-Assistent"
4279
-
4280
  # @ squirrly-seo
4281
  #~ msgid ""
4282
  #~ "With Squirrly SEO, your Wordpress will get Perfect SEO on each article "
@@ -4285,10 +7129,6 @@ msgstr ""
4285
  #~ "Mit Squirrly SEO wird jeder Ihrer Wordpress Artikel eine perfekte "
4286
  #~ "Suchmaschinenoptimierung erhalten. "
4287
 
4288
- # @ squirrly-seo
4289
- #~ msgid "SEO Software"
4290
- #~ msgstr "SEO Software"
4291
-
4292
  # @ squirrly-seo
4293
  #~ msgid ""
4294
  #~ "delivered as a plugin for Wordpress. <br /><br />We connect your "
@@ -4303,10 +7143,6 @@ msgstr ""
4303
  #~ msgid "Write a new post with Squirrly"
4304
  #~ msgstr "Schreiben Sie einen neuen Beitrag mit Squirrly"
4305
 
4306
- # @ squirrly-seo
4307
- #~ msgid "Squirrly settings"
4308
- #~ msgstr "Squirrly Einstellungen"
4309
-
4310
  #~ msgid " API"
4311
  #~ msgstr " API"
4312
 
@@ -4384,42 +7220,14 @@ msgstr ""
4384
  #~ msgid "Status:"
4385
  #~ msgstr "Status:"
4386
 
4387
- # @ squirrly-seo
4388
- #~ msgid "automatically"
4389
- #~ msgstr "automatisch"
4390
-
4391
- # @ squirrly-seo
4392
- #~ msgid "Change it >>"
4393
- #~ msgstr "Ändern >>"
4394
-
4395
- # @ squirrly-seo
4396
- #~ msgid "Tips: Length 10-70 chars"
4397
- #~ msgstr "Tipp: Länge 10-70 Charaktere"
4398
-
4399
  # @ squirrly-seo
4400
  #~ msgid "Tips: Length 70-255 chars"
4401
  #~ msgstr "Tipp: Länge 70-255 Charaktere"
4402
 
4403
- # @ squirrly-seo
4404
- #~ msgid "<< Leave it automatically"
4405
- #~ msgstr "<< Lass es automatisch"
4406
-
4407
- # @ squirrly-seo
4408
- #~ msgid "Tool for Search Engines"
4409
- #~ msgstr "Tool für Suchmaschinen"
4410
-
4411
  # @ squirrly-seo
4412
  #~ msgid "Google Plus URL:"
4413
  #~ msgstr "Google Plus URL:"
4414
 
4415
- # @ squirrly-seo
4416
- #~ msgid "Google META verification code for %sWebmaster Tool%s`:"
4417
- #~ msgstr "Google META Bestätigungs-Code für %sWebmaster Tool%s`:"
4418
-
4419
- # @ squirrly-seo
4420
- #~ msgid "Google %sAnalytics ID%s`:"
4421
- #~ msgstr "Google %sAnalytics ID%s`:"
4422
-
4423
  # @ squirrly-seo
4424
  #~ msgid "Facebook META code (for %sInsights%s )`:"
4425
  #~ msgstr "Facebook META Code (für %sInsights%s )`:"
2
  msgstr ""
3
  "Project-Id-Version: Squirrly SEO Plugin\n"
4
  "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2019-04-05 12:21+0300\n"
6
+ "PO-Revision-Date: 2019-04-05 12:22+0300\n"
7
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
8
  "Language-Team: \n"
9
  "Language: cs_CZ\n"
16
  "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
17
  "X-Poedit-Basepath: ..\n"
18
  "X-Textdomain-Support: yes\n"
19
+ "X-Generator: Poedit 2.2.1\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
 
22
+ #: classes/Error.php:72 classes/Error.php:83
23
+ msgid "Don't bother me!"
24
+ msgstr ""
25
+
26
+ #: classes/RemoteController.php:261
27
+ msgid "Articles optimized so far"
28
+ msgstr ""
29
+
30
+ #: classes/RemoteController.php:263 classes/RemoteController.php:270
31
+ msgid "add post"
32
+ msgstr ""
33
+
34
+ #: classes/RemoteController.php:268
35
+ msgid "Average optimization"
36
+ msgstr ""
37
+
38
+ #: classes/RemoteController.php:275
39
+ msgid "All Keyword Researches performed for all websites"
40
+ msgstr ""
41
+
42
+ # @ squirrly-seo
43
+ #: classes/RemoteController.php:277
44
+ #, fuzzy
45
+ #| msgid "Do the research"
46
+ msgid "do research"
47
+ msgstr "Recherchieren"
48
+
49
+ #: classes/RemoteController.php:282
50
+ msgid "Keywords stored in Squirrly Briefcase"
51
+ msgstr ""
52
+
53
+ #: classes/RemoteController.php:284
54
+ msgid "add keyword"
55
+ msgstr ""
56
+
57
+ #: classes/RemoteController.php:289
58
+ msgid "Pages ranking in top 100 Google"
59
+ msgstr ""
60
+
61
+ #: classes/RemoteController.php:291
62
+ msgid "see rankings"
63
+ msgstr ""
64
+
65
+ #: classes/RemoteController.php:296
66
+ msgid "SEO Audits"
67
+ msgstr ""
68
+
69
+ #: classes/RemoteController.php:298
70
+ msgid "see audits"
71
+ msgstr ""
72
+
73
+ #: classes/RemoteController.php:928
74
+ msgid "Recent discussions:"
75
+ msgstr ""
76
+
77
+ #: classes/RemoteController.php:928
78
+ msgid "SEO Search Volume:"
79
+ msgstr ""
80
+
81
+ # @ squirrly-seo
82
+ #: classes/RemoteController.php:928
83
+ msgid "Competition:"
84
+ msgstr ""
85
+
86
+ # @ squirrly-seo
87
+ #: classes/RemoteController.php:928
88
+ msgid "Trend:"
89
+ msgstr ""
90
+
91
+ # @ squirrly-seo
92
+ #: classes/RemoteController.php:929
93
+ msgid "Keyword:"
94
+ msgstr ""
95
+
96
+ # @ squirrly-seo
97
+ #: classes/RemoteController.php:930
98
+ msgid "date"
99
+ msgstr ""
100
+
101
+ #: classes/RemoteController.php:931 controllers/CheckSeo.php:105
102
+ #: controllers/Patterns.php:15 controllers/Research.php:288
103
+ #: controllers/Research.php:320 controllers/Research.php:376
104
+ msgid "Saved!"
105
+ msgstr ""
106
+
107
+ # @ squirrly-seo
108
+ #: classes/RemoteController.php:932
109
+ msgid "Read it!"
110
+ msgstr ""
111
+
112
+ # @ squirrly-seo
113
+ #: classes/RemoteController.php:933
114
+ msgid "Insert it!"
115
+ msgstr ""
116
+
117
+ # @ squirrly-seo
118
+ #: classes/RemoteController.php:934
119
+ msgid "Reference"
120
+ msgstr ""
121
+
122
+ # @ squirrly-seo
123
+ #: classes/RemoteController.php:935
124
+ msgid "Insert as box"
125
+ msgstr ""
126
+
127
+ #: classes/RemoteController.php:936
128
+ msgid "Insert Link"
129
+ msgstr ""
130
+
131
+ # @ squirrly-seo
132
+ #: classes/RemoteController.php:937
133
+ msgid "Not relevant?"
134
+ msgstr ""
135
+
136
+ # @ squirrly-seo
137
+ #: classes/RemoteController.php:938
138
+ msgid "Insert in your article"
139
+ msgstr ""
140
+
141
+ #: classes/RemoteController.php:939
142
+ msgid ":( An error occurred while processing your request. Please try again"
143
+ msgstr ""
144
+
145
+ #: classes/RemoteController.php:940
146
+ msgid "Keyword Research takes too long to get the results. Click to try again"
147
+ msgstr ""
148
+
149
+ # @ squirrly-seo
150
+ #: classes/RemoteController.php:941
151
+ msgid "No results found!"
152
+ msgstr ""
153
+
154
+ #: classes/RemoteController.php:942
155
+ msgid "Enter one more word to find relevant results"
156
+ msgstr ""
157
+
158
+ #: classes/RemoteController.php:943
159
+ msgid "It's taking too long to check this keyword"
160
+ msgstr ""
161
+
162
+ # @ squirrly-seo
163
+ #: classes/RemoteController.php:944
164
+ msgid "Do a research!"
165
+ msgstr ""
166
+
167
+ # @ squirrly-seo
168
+ #: classes/RemoteController.php:945
169
+ msgid "Do more research!"
170
+ msgstr ""
171
+
172
+ #: classes/RemoteController.php:946
173
+ #, php-format
174
+ msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
175
+ msgstr ""
176
+
177
+ #: classes/RemoteController.php:947
178
+ msgid "Has creative commons attributes"
179
+ msgstr ""
180
+
181
+ #: classes/RemoteController.php:948
182
+ msgid "No known copyright restrictions"
183
+ msgstr ""
184
+
185
+ #: classes/RemoteController.php:949
186
+ msgid ""
187
+ "You haven`t used Squirrly SEO to optimize your article. Do you want to "
188
+ "optimize for a keyword before publishing?"
189
+ msgstr ""
190
+
191
+ #: classes/RemoteController.php:950
192
+ msgid "Keyword Research limit exceeded"
193
+ msgstr ""
194
+
195
+ #: classes/RemoteController.php:951
196
+ msgid "Your Subscription has Expired"
197
+ msgstr ""
198
+
199
+ #: classes/RemoteController.php:952
200
+ msgid "Add 20 Keyword Researches"
201
+ msgstr ""
202
+
203
+ #: classes/RemoteController.php:953
204
+ msgid "There are no keywords saved in briefcase yet"
205
+ msgstr ""
206
+
207
+ #: classes/RemoteController.php:954
208
+ #, php-format
209
+ msgid "Congratulations! Your article is 100% optimized!"
210
+ msgstr ""
211
+
212
+ #: classes/RemoteController.php:955
213
+ #, php-format
214
+ msgid "appears too many times. Try to remove %s of them"
215
+ msgstr ""
216
+
217
+ #: classes/RemoteController.php:956
218
+ #, php-format
219
+ msgid "write %s more words"
220
+ msgstr ""
221
+
222
+ #: classes/RemoteController.php:957
223
+ #, php-format
224
+ msgid "Add the keyword in the %s of your article"
225
+ msgstr ""
226
+
227
+ #: classes/RemoteController.php:958
228
+ msgid "Click to keep the highlight on"
229
+ msgstr ""
230
+
231
+ #: classes/RemoteController.php:959
232
+ msgid "introduction"
233
+ msgstr ""
234
+
235
+ #: classes/RemoteController.php:960
236
+ #, php-format
237
+ msgid "Write more words after the %s keyword"
238
+ msgstr ""
239
+
240
+ #: classes/RemoteController.php:961
241
+ msgid "or use synonyms"
242
+ msgstr ""
243
+
244
+ #: classes/RemoteController.php:962
245
+ #, php-format
246
+ msgid "add %s more word(s)"
247
+ msgstr ""
248
+
249
+ #: classes/RemoteController.php:963
250
+ #, php-format
251
+ msgid "or remove %s word(s)"
252
+ msgstr ""
253
+
254
+ #: classes/RemoteController.php:964
255
+ #, php-format
256
+ msgid "add %s more keyword(s)"
257
+ msgstr ""
258
+
259
+ #: classes/RemoteController.php:965
260
+ #, php-format
261
+ msgid "write %s more words to start calculating"
262
+ msgstr ""
263
+
264
+ #: classes/RemoteController.php:966 view/Research/Research.php:42
265
+ msgid "Add to Briefcase"
266
+ msgstr ""
267
+
268
+ #: classes/RemoteController.php:967
269
+ msgid "Add Keyword to Briefcase"
270
+ msgstr ""
271
+
272
+ #: classes/RemoteController.php:968 view/Blocks/KRFound.php:78
273
+ msgid "Use Keyword"
274
+ msgstr ""
275
+
276
+ #: classes/RemoteController.php:969 view/Blocks/Snippet.php:146
277
+ #: view/Blocks/Snippet.php:518 view/Blocks/Snippet.php:774
278
+ msgid "Auto Draft"
279
+ msgstr ""
280
+
281
+ # @ squirrly-seo
282
+ #: classes/helpers/Sanitize.php:112
283
+ msgid "The code for Google Webmaster Tool is incorrect."
284
+ msgstr ""
285
+
286
+ # @ squirrly-seo
287
+ #: classes/helpers/Sanitize.php:140
288
+ msgid "The code for Google Analytics is incorrect."
289
+ msgstr ""
290
+
291
+ # @ squirrly-seo
292
+ #: classes/helpers/Sanitize.php:187
293
+ msgid "The code for Facebook is incorrect."
294
+ msgstr ""
295
+
296
+ #: classes/helpers/Sanitize.php:213
297
+ msgid "The code for Pinterest is incorrect."
298
+ msgstr ""
299
+
300
+ # @ squirrly-seo
301
+ #: classes/helpers/Sanitize.php:238
302
+ msgid "The code for Bing is incorrect."
303
+ msgstr ""
304
+
305
+ #: classes/helpers/Sanitize.php:263
306
+ msgid "The code for Alexa is incorrect."
307
+ msgstr ""
308
+
309
+ #: classes/helpers/Sanitize.php:389
310
+ msgid "The code for Facebook Pixel must only contain numbers."
311
+ msgstr ""
312
+
313
+ #: classes/helpers/Sanitize.php:404
314
+ msgid "The code for Facebook App must only contain numbers."
315
+ msgstr ""
316
+
317
+ #: classes/helpers/Tools.php:82
318
+ msgid "Getting started"
319
+ msgstr ""
320
+
321
+ #: classes/helpers/Tools.php:107
322
+ msgid "Documentation"
323
+ msgstr ""
324
+
325
+ #: classes/helpers/Tools.php:108
326
+ msgid "Leave a review"
327
+ msgstr ""
328
+
329
+ #: classes/helpers/Tools.php:385
330
+ msgid "Format"
331
+ msgstr ""
332
+
333
+ #: classes/helpers/Tools.php:402 classes/helpers/Tools.php:436
334
+ msgid "Category"
335
+ msgstr ""
336
+
337
+ #: classes/helpers/Tools.php:419 classes/helpers/Tools.php:453
338
+ msgid "Tag"
339
+ msgstr ""
340
+
341
+ #: classes/helpers/Tools.php:470
342
+ msgid "Shipping Option"
343
+ msgstr ""
344
+
345
+ #: classes/helpers/Tools.php:487
346
+ msgid "Author at"
347
+ msgstr ""
348
+
349
+ #: classes/helpers/Tools.php:555
350
+ msgid "Are you looking for"
351
+ msgstr ""
352
+
353
+ #: classes/helpers/Tools.php:556
354
+ msgid "These are the results for"
355
+ msgstr ""
356
+
357
+ #: classes/helpers/Tools.php:556
358
+ msgid "that you can find on our website."
359
+ msgstr ""
360
+
361
+ #: classes/helpers/Tools.php:589
362
+ msgid "Page not found"
363
+ msgstr ""
364
+
365
+ #: classes/helpers/Tools.php:590
366
+ msgid "This page could not be found on our website."
367
+ msgstr ""
368
+
369
+ #: classes/helpers/Tools.php:873 classes/helpers/Tools.php:884
370
+ #, php-format
371
+ msgid ""
372
+ "Good news, %s is integrated in Squirrly SEO now and you no longer have to "
373
+ "run 2 different plugins."
374
+ msgstr ""
375
+
376
+ #: config/config.php:28
377
+ msgid "Places a separator between the elements of the post description"
378
+ msgstr ""
379
+
380
+ #: config/config.php:29
381
+ msgid "Adds the title of the post/page/term once it’s published"
382
+ msgstr ""
383
+
384
+ #: config/config.php:30
385
+ msgid ""
386
+ "Will display an excerpt from the post/page/term (if not customized, the "
387
+ "excerpt will be auto-generated)"
388
+ msgstr ""
389
+
390
+ #: config/config.php:31
391
+ msgid "Will display an excerpt from the post/page (no auto-generation)"
392
+ msgstr ""
393
+
394
+ #: config/config.php:32
395
+ msgid "Adds the post's keyword to the post description"
396
+ msgstr ""
397
+
398
+ #: config/config.php:33
399
+ msgid "Displays the number of the current page (i.e. 1 of 6)"
400
+ msgstr ""
401
+
402
+ #: config/config.php:34
403
+ msgid "Adds the site's name to the post description"
404
+ msgstr ""
405
+
406
+ #: config/config.php:35
407
+ msgid "Adds the tagline/description of your site"
408
+ msgstr ""
409
+
410
+ #: config/config.php:36
411
+ msgid "Adds the post category (several categories will be comma-separated)"
412
+ msgstr ""
413
+
414
+ #: config/config.php:37
415
+ msgid "Adds the primary category of the post/page"
416
+ msgstr ""
417
+
418
+ #: config/config.php:38
419
+ msgid "Adds the category description to the post description"
420
+ msgstr ""
421
+
422
+ #: config/config.php:39
423
+ msgid "Adds the current tag(s) (several tags will be comma-separated)"
424
+ msgstr ""
425
+
426
+ #: config/config.php:40
427
+ msgid "Adds the tag description"
428
+ msgstr ""
429
+
430
+ #: config/config.php:41
431
+ msgid "Adds the term name"
432
+ msgstr ""
433
+
434
+ #: config/config.php:42
435
+ msgid "Adds the term description"
436
+ msgstr ""
437
+
438
+ #: config/config.php:43
439
+ msgid "Displays the search phrase (if it appears in the post)"
440
+ msgstr ""
441
+
442
+ #: config/config.php:44
443
+ msgid "Replaces the publication date of a post/page with the modified one"
444
+ msgstr ""
445
+
446
+ #: config/config.php:45
447
+ msgid "Displays the author's nicename"
448
+ msgstr ""
449
+
450
+ #: config/config.php:46
451
+ msgid "Adds the author's biographical info to the post description"
452
+ msgstr ""
453
+
454
+ #: config/config.php:47
455
+ msgid "Displays the current date"
456
+ msgstr ""
457
+
458
+ #: config/config.php:48
459
+ msgid "Displays the date of the post/page once it's published"
460
+ msgstr ""
461
+
462
+ #: config/config.php:49
463
+ msgid "Adds the current day"
464
+ msgstr ""
465
+
466
+ #: config/config.php:50
467
+ msgid "Adds the current month"
468
+ msgstr ""
469
+
470
+ #: config/config.php:51
471
+ msgid "Adds the current year"
472
+ msgstr ""
473
+
474
+ #: config/config.php:52
475
+ msgid "Adds the title of a page's parent page"
476
+ msgstr ""
477
+
478
+ #: config/config.php:53
479
+ msgid "Adds the product name from Woocommerce for the current product"
480
+ msgstr ""
481
+
482
+ #: config/config.php:54
483
+ msgid "Adds the product price from Woocommerce for the current product"
484
+ msgstr ""
485
+
486
+ #: config/config.php:55
487
+ msgid "Adds the product sale price from Woocommerce for the current product"
488
+ msgstr ""
489
+
490
+ #: config/config.php:56
491
+ msgid ""
492
+ "Adds the product price currency from Woocommerce for the current product"
493
+ msgstr ""
494
+
495
+ #: controllers/Assistant.php:56 controllers/Research.php:73
496
+ msgid "No keyword found."
497
+ msgstr ""
498
+
499
+ #: controllers/Assistant.php:95 controllers/Assistant.php:122
500
+ #: controllers/Audits.php:79 controllers/Ranking.php:113
501
+ #: controllers/SeoSettings.php:285 controllers/SeoSettings.php:302
502
+ #: controllers/SeoSettings.php:322 controllers/SeoSettings.php:359
503
+ #: controllers/SeoSettings.php:385 controllers/SeoSettings.php:413
504
+ #: controllers/SeoSettings.php:661 controllers/SeoSettings.php:697
505
+ #: controllers/SeoSettings.php:734
506
+ msgid "Saved"
507
+ msgstr ""
508
+
509
+ #: controllers/Assistant.php:101 controllers/Patterns.php:92
510
+ #: controllers/Post.php:223 controllers/Post.php:254
511
+ #: controllers/PostsList.php:180 controllers/Research.php:144
512
+ #: controllers/Research.php:151 controllers/Research.php:186
513
+ #: controllers/Research.php:209 controllers/Research.php:269
514
+ #: controllers/Research.php:300 controllers/Research.php:328
515
+ #: controllers/Research.php:353 controllers/Research.php:384
516
+ #: controllers/Research.php:409 controllers/Research.php:447
517
+ #: controllers/SeoSettings.php:479 controllers/SeoSettings.php:648
518
+ #: controllers/SeoSettings.php:674 controllers/SeoSettings.php:712
519
+ #: controllers/SeoSettings.php:749 controllers/SeoSettings.php:787
520
+ #: controllers/Snippet.php:143
521
+ msgid "You do not have permission to perform this action"
522
+ msgstr ""
523
+
524
+ # @ squirrly-seo
525
+ #: controllers/Assistant.php:127
526
+ #, fuzzy
527
+ #| msgid "Could not send the email..."
528
+ msgid "Error: Could not save the data."
529
+ msgstr "Konnte E-Mail nicht senden ..."
530
+
531
+ #: controllers/Audits.php:81
532
+ msgid "Not a valid email address"
533
+ msgstr ""
534
+
535
+ #: controllers/CheckSeo.php:60
536
+ msgid "Done!"
537
+ msgstr ""
538
+
539
+ #: controllers/CheckSeo.php:78
540
+ msgid "Fixed!"
541
+ msgstr ""
542
+
543
+ #: controllers/CheckSeo.php:83
544
+ msgid "Could not fix it. You need to change it manually."
545
+ msgstr ""
546
+
547
+ #: controllers/CheckSeo.php:100
548
+ msgid "Saved! This task will be ignored in the future."
549
+ msgstr ""
550
+
551
+ #: controllers/FocusPages.php:159
552
+ msgid "Focus Page does not exist or was deleted from your website."
553
+ msgstr ""
554
+
555
+ #: controllers/FocusPages.php:197
556
+ msgid "Focus page is added. The audit may take a while so please be patient."
557
+ msgstr ""
558
+
559
+ #: controllers/FocusPages.php:200
560
+ msgid "You reached the maximum number of focus pages for your account."
561
+ msgstr ""
562
+
563
+ #: controllers/FocusPages.php:203
564
+ msgid "Error! Could not add the focus page."
565
+ msgstr ""
566
+
567
+ #: controllers/FocusPages.php:206 controllers/FocusPages.php:238
568
+ msgid "Error! This focus page is not public."
569
+ msgstr ""
570
+
571
+ #: controllers/FocusPages.php:209 controllers/FocusPages.php:241
572
+ msgid "Error! Could not find the focus page in your website."
573
+ msgstr ""
574
+
575
+ #: controllers/FocusPages.php:229
576
+ msgid "Focus page sent for recheck. It may take a while so please be patient."
577
+ msgstr ""
578
+
579
+ #: controllers/FocusPages.php:232
580
+ msgid "You've made too many requests, please wait a few minutes."
581
+ msgstr ""
582
+
583
+ #: controllers/FocusPages.php:235
584
+ msgid "Error! Could not refresh the focus page."
585
+ msgstr ""
586
+
587
+ #: controllers/FocusPages.php:252
588
+ msgid "The focus page is deleted"
589
+ msgstr ""
590
+
591
+ #: controllers/FocusPages.php:254 controllers/Ranking.php:151
592
+ #: controllers/Research.php:176 controllers/Research.php:179
593
+ #: controllers/Research.php:203 controllers/Research.php:322
594
+ #: controllers/Research.php:347 controllers/Research.php:515
595
+ #: controllers/Research.php:539
596
+ msgid "Invalid params!"
597
+ msgstr ""
598
+
599
+ #: controllers/Menu.php:78
600
+ #, php-format
601
+ msgid ""
602
+ "An error occurred during activation. If this error persists, please contact "
603
+ "us at: %s"
604
+ msgstr ""
605
+
606
+ #: controllers/Menu.php:115 models/Menu.php:123
607
+ msgid "Dashboard"
608
+ msgstr ""
609
+
610
+ # @ squirrly-seo
611
+ #: controllers/Menu.php:139 view/Blocks/SLASearch.php:7
612
+ #, fuzzy
613
+ #| msgid "Squirrly settings"
614
+ msgid "Squirrly SEO"
615
+ msgstr "Squirrly Einstellungen"
616
+
617
+ #: controllers/Menu.php:195
618
+ msgid "SEO Snippet"
619
+ msgstr ""
620
+
621
+ #: controllers/Menu.php:204 controllers/Snippet.php:114
622
+ msgid "Custom SEO"
623
+ msgstr ""
624
+
625
+ #: controllers/Menu.php:243
626
+ msgid "Squirrly"
627
+ msgstr ""
628
+
629
+ # @ squirrly-seo
630
+ #: controllers/Menu.php:251
631
+ #, fuzzy
632
+ #| msgid "Squirrly settings"
633
+ msgid "Squirrly Onboarding"
634
+ msgstr "Squirrly Einstellungen"
635
+
636
+ #: controllers/Menu.php:252
637
+ msgid "Onboarding"
638
+ msgstr ""
639
+
640
+ #: controllers/Menu.php:271
641
+ msgid "Squirrly How To & Support"
642
+ msgstr ""
643
+
644
+ #: controllers/Menu.php:272
645
+ msgid "Help & Support"
646
+ msgstr ""
647
+
648
+ #: controllers/Patterns.php:16
649
+ msgid "Saved! This is how the preview looks like"
650
+ msgstr ""
651
+
652
+ # @ squirrly-seo
653
+ #: controllers/Post.php:315
654
+ #, fuzzy
655
+ #| msgid "Could not send the email..."
656
+ msgid "Could not add the demo post."
657
+ msgstr "Konnte E-Mail nicht senden ..."
658
+
659
+ #: controllers/PostsList.php:72 controllers/PostsList.php:116
660
+ msgid "SQ Snippet"
661
+ msgstr ""
662
+
663
+ #: controllers/PostsList.php:73 controllers/Research.php:250
664
+ msgid "Optimized"
665
+ msgstr ""
666
+
667
+ #: controllers/PostsList.php:217
668
+ msgid "Not Public"
669
+ msgstr ""
670
+
671
+ #: controllers/PostsList.php:218
672
+ msgid "Could not process"
673
+ msgstr ""
674
+
675
+ #: controllers/PostsList.php:219
676
+ msgid "The Squirrly subscription has expired!"
677
+ msgstr ""
678
+
679
+ #: controllers/Ranking.php:129
680
+ #, php-format
681
+ msgid "Could not refresh the rank. Please check your SERP credits %shere%s"
682
+ msgstr ""
683
+
684
+ #: controllers/Ranking.php:131
685
+ #, php-format
686
+ msgid "%s is queued and the rank will be checked soon."
687
+ msgstr ""
688
+
689
+ #: controllers/Ranking.php:146
690
+ msgid "The keyword is deleted"
691
+ msgstr ""
692
+
693
+ # @ squirrly-seo
694
+ #: controllers/Ranking.php:148
695
+ #, fuzzy
696
+ #| msgid "Could not send the email..."
697
+ msgid "Could not delete the keyword!"
698
+ msgstr "Konnte E-Mail nicht senden ..."
699
+
700
+ #: controllers/Research.php:169 controllers/Research.php:172
701
+ msgid "Keyword Saved!"
702
+ msgstr ""
703
+
704
+ #: controllers/Research.php:201 controllers/Research.php:345
705
+ msgid "Deleted!"
706
+ msgstr ""
707
+
708
+ #: controllers/Research.php:234
709
+ msgid "Edit"
710
+ msgstr ""
711
+
712
+ #: controllers/Research.php:239
713
+ msgid "Deleted Post"
714
+ msgstr ""
715
+
716
+ #: controllers/Research.php:249
717
+ msgid "Article title"
718
+ msgstr ""
719
+
720
+ #: controllers/Research.php:251 view/FocusPages/Addpage.php:44
721
+ msgid "Option"
722
+ msgstr ""
723
+
724
+ #: controllers/Research.php:256
725
+ msgid "No articles found"
726
+ msgstr ""
727
+
728
+ #: controllers/Research.php:262 controllers/Research.php:378
729
+ msgid "Invalid Keyword!"
730
+ msgstr ""
731
+
732
+ #: controllers/Research.php:294
733
+ msgid "Invalid Label or Color!"
734
+ msgstr ""
735
+
736
+ #: controllers/Research.php:433 controllers/SeoSettings.php:521
737
+ msgid "Great! The backup is restored."
738
+ msgstr ""
739
+
740
+ #: controllers/Research.php:435 controllers/Research.php:438
741
+ #: controllers/SeoSettings.php:523 controllers/SeoSettings.php:526
742
+ #: controllers/SeoSettings.php:570 controllers/SeoSettings.php:573
743
+ msgid "Error! The backup is not valid."
744
+ msgstr ""
745
+
746
+ #: controllers/Research.php:441 controllers/SeoSettings.php:529
747
+ #: controllers/SeoSettings.php:576
748
+ msgid "Error! You have to enter a previously saved backup file."
749
+ msgstr ""
750
+
751
+ #: controllers/Research.php:462
752
+ msgid "Could not add the keyword to SERP Check. Please try again."
753
+ msgstr ""
754
+
755
+ #: controllers/Research.php:464
756
+ msgid "The keyword is added to SERP Check."
757
+ msgstr ""
758
+
759
+ #: controllers/Research.php:467
760
+ msgid "Invalid parameters."
761
+ msgstr ""
762
+
763
+ #: controllers/SeoSettings.php:457
764
+ msgid "Google Analytics account is disconnected."
765
+ msgstr ""
766
+
767
+ #: controllers/SeoSettings.php:459 controllers/SeoSettings.php:473
768
+ msgid "Error! Could not disconnect the account."
769
+ msgstr ""
770
+
771
+ #: controllers/SeoSettings.php:471
772
+ msgid "Google Search Console account is disconnected."
773
+ msgstr ""
774
+
775
+ #: controllers/SeoSettings.php:567
776
+ msgid "Great! The SEO backup is restored."
777
+ msgstr ""
778
+
779
+ #: controllers/SeoSettings.php:584
780
+ msgid "Settings imported successfuly!"
781
+ msgstr ""
782
+
783
+ #: controllers/SeoSettings.php:597 controllers/SeoSettings.php:635
784
+ #, php-format
785
+ msgid ""
786
+ "%s SEO records were imported successfuly! You can now deactivate the %s "
787
+ "plugin"
788
+ msgstr ""
789
+
790
+ #: controllers/SeoSettings.php:610
791
+ msgid "All the Plugin settings were imported successfuly!"
792
+ msgstr ""
793
+
794
+ #: controllers/SeoSettings.php:612
795
+ msgid "No settings found for this plugin/theme."
796
+ msgstr ""
797
+
798
+ #: controllers/SeoSettings.php:637
799
+ #, php-format
800
+ msgid ""
801
+ "There are no SEO records with this plugin. You can now deactivate the %s "
802
+ "plugin"
803
+ msgstr ""
804
+
805
+ # @ squirrly-seo
806
+ #: controllers/SeoSettings.php:663
807
+ #, fuzzy
808
+ #| msgid "Could not send the email..."
809
+ msgid "Could not save the changes"
810
+ msgstr "Konnte E-Mail nicht senden ..."
811
+
812
+ # @ squirrly-seo
813
+ #: controllers/SeoSettings.php:705 controllers/SeoSettings.php:742
814
+ #, fuzzy
815
+ #| msgid "Could not send the email..."
816
+ msgid "Could not add the post type"
817
+ msgstr "Konnte E-Mail nicht senden ..."
818
+
819
+ # @ squirrly-seo
820
+ #: controllers/Snippet.php:66
821
+ #, fuzzy
822
+ #| msgid "Squirrly LIVE SEO assistant"
823
+ msgid "Squirrly SEO Snippet"
824
+ msgstr "Squirrly LIVE SEO-Assistent"
825
+
826
+ # @ squirrly-seo
827
+ #: controllers/Snippet.php:161
828
+ #, fuzzy
829
+ #| msgid "Could not send the email..."
830
+ msgid "Could not save the data"
831
+ msgstr "Konnte E-Mail nicht senden ..."
832
+
833
+ # @ squirrly-seo
834
+ #: core/BlockSupport.php:28
835
+ msgid "Plugin Feedback"
836
+ msgstr ""
837
+
838
+ # @ squirrly-seo
839
+ #: core/BlockSupport.php:63
840
+ msgid "Thank you for your feedback"
841
+ msgstr ""
842
+
843
+ # @ squirrly-seo
844
+ #: core/BlockSupport.php:67
845
+ msgid "No message."
846
+ msgstr ""
847
+
848
+ #: core/Blocklogin.php:55
849
+ #, php-format
850
+ msgid ""
851
+ "We found your email, so it means you already have a Squirrly.co account. "
852
+ "Please login with your Squirrly Email. If you forgot your password, click "
853
+ "%shere%s"
854
+ msgstr ""
855
+
856
+ #: core/Blocklogin.php:58
857
+ msgid "Your email is not valid. Please enter a valid email"
858
+ msgstr ""
859
+
860
+ #: core/Blocklogin.php:61
861
+ msgid "We could not create your account. Please enter a valid email"
862
+ msgstr ""
863
+
864
+ #: core/Blocklogin.php:80 core/Blocklogin.php:135
865
+ #, php-format
866
+ msgid ""
867
+ "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
868
+ "webmaster) and request them to add %s to their IP whitelist."
869
+ msgstr ""
870
+
871
+ #: core/Blocklogin.php:84
872
+ msgid "Could not send your information to Squirrly. Please try again."
873
+ msgstr ""
874
+
875
+ # @ squirrly-seo
876
+ #: core/Blocklogin.php:109
877
+ msgid "Wrong email or password!"
878
+ msgstr ""
879
+
880
+ #: core/Blocklogin.php:112
881
+ msgid "You can only use this account for the URL you registered first!"
882
+ msgstr ""
883
+
884
+ #: core/Blocklogin.php:115
885
+ msgid "An error occured"
886
+ msgstr ""
887
+
888
+ # @ squirrly-seo
889
+ #: core/Blocklogin.php:140
890
+ msgid "Both fields are required."
891
+ msgstr ""
892
+
893
+ #: models/Assistant.php:49 view/Blocks/SEOIssues.php:42
894
+ msgid "Task Details"
895
+ msgstr ""
896
+
897
+ #: models/Assistant.php:56
898
+ msgid "active task"
899
+ msgstr ""
900
+
901
+ #: models/Assistant.php:77
902
+ msgid "Complete Research Tasks"
903
+ msgstr ""
904
+
905
+ #: models/Assistant.php:78
906
+ #, php-format
907
+ msgid ""
908
+ "Go to the Research section of Squirrly SEO. %s Look to the right of the "
909
+ "screen and turn those RED bullets from Red to Green. Click on each element "
910
+ "and you'll find out what you need to do to complete the task and turn it "
911
+ "Green."
912
+ msgstr ""
913
+
914
+ #: models/Assistant.php:82
915
+ msgid "Complete Live Assistant Tasks"
916
+ msgstr ""
917
+
918
+ #: models/Assistant.php:83
919
+ #, php-format
920
+ msgid ""
921
+ "Go to the Live Assistant section of Squirrly SEO. %s Look to the right of "
922
+ "the screen and turn those RED bullets from Red to Green. Click on each "
923
+ "element and you'll find out what you need to do to complete the task and "
924
+ "turn it Green."
925
+ msgstr ""
926
+
927
+ #: models/Assistant.php:87
928
+ msgid "Complete SEO Settings Tasks"
929
+ msgstr ""
930
+
931
+ #: models/Assistant.php:88
932
+ #, php-format
933
+ msgid ""
934
+ "Go to the SEO Settings section of Squirrly SEO. Click on the METAs section. "
935
+ "You'll see tasks appearing at the right of the screen. %s Look to the right "
936
+ "of the screen and turn those RED bullets from Red to Green. Click on each "
937
+ "element and you'll find out what you need to do to complete the task and "
938
+ "turn it Green."
939
+ msgstr ""
940
+
941
+ #: models/Assistant.php:97
942
+ msgid "Complete SEO Audit Tasks"
943
+ msgstr ""
944
+
945
+ #: models/Assistant.php:98
946
+ #, php-format
947
+ msgid ""
948
+ "Go to the SEO Audit section of Squirrly SEO.%sLook to the right of the "
949
+ "screen and turn those RED bullets from Red to Green. Click on each element "
950
+ "and you'll find out what you need to do to complete the task and turn it "
951
+ "Green."
952
+ msgstr ""
953
+
954
+ #: models/Assistant.php:102
955
+ msgid "Complete Ranking Tasks"
956
+ msgstr ""
957
+
958
+ #: models/Assistant.php:103
959
+ #, php-format
960
+ msgid ""
961
+ "Go to the Ranking section of Squirrly SEO. %sLook to the right of the screen "
962
+ "and turn those RED bullets from Red to Green. Click on each element and "
963
+ "you'll find out what you need to do to complete the task and turn it Green."
964
+ msgstr ""
965
+
966
+ # @ squirrly-seo
967
+ #: models/Assistant.php:109 view/Blocks/Jorney.php:30
968
+ #: view/Blocks/KRHistory.php:43 view/Research/History.php:55
969
+ #, fuzzy
970
+ #| msgid "Do the research"
971
+ msgid "Do Keyword Research"
972
+ msgstr "Recherchieren"
973
+
974
+ #: models/Assistant.php:110
975
+ #, php-format
976
+ msgid ""
977
+ "Use Research - Find Keywords to perform your very first keyword research for "
978
+ "this website using Squirrly SEO. %s It will guide through the 3 important "
979
+ "steps of performing a research. %s Just follow the steps."
980
+ msgstr ""
981
+
982
+ #: models/Assistant.php:114
983
+ msgid "Add Keywords in Briefcase"
984
+ msgstr ""
985
+
986
+ #: models/Assistant.php:115
987
+ #, php-format
988
+ msgid ""
989
+ "Use the Briefcase feature to organize and manage your portfolio of keywords. "
990
+ "%s You'll need to know and document the keywords that you'll be using "
991
+ "throughout your WordPress site. %s This will help you keep a clear SEO "
992
+ "Strategy or it can help you form a SEO Strategy. It will also help you focus "
993
+ "and you'll get to see when you're spreading yourself too thin. %s Add your "
994
+ "first keywords (that you've researched using the Keyword Research tool) to "
995
+ "Briefcase. Only add keywords that you will want to work on at some point in "
996
+ "the future and which are on-point with your strategy."
997
+ msgstr ""
998
+
999
+ #: models/Assistant.php:119
1000
+ msgid "Create Labels for Keywords"
1001
+ msgstr ""
1002
+
1003
+ #: models/Assistant.php:120
1004
+ #, php-format
1005
+ msgid ""
1006
+ "Organize your keywords by using Labels for the keywords you've stored in "
1007
+ "Briefcase. %s There are many ways to use this: from Customer Journey labels, "
1008
+ "to direct or indirect labels, to core keywords or secondary keywords ... and "
1009
+ "so on. You can get super creative with this. %s We have a very important "
1010
+ "blog post you can read for this http://fourhourseo.com/pro-course-6-how-to-"
1011
+ "organize-and-manage-your-keyword-portfolio/ %s Just add your first label to "
1012
+ "complete this task."
1013
+ msgstr ""
1014
+
1015
+ #: models/Assistant.php:124
1016
+ msgid "Add Keywords to Labels"
1017
+ msgstr ""
1018
+
1019
+ #: models/Assistant.php:125
1020
+ #, php-format
1021
+ msgid ""
1022
+ "Now that you've created your first label, you should label one of your "
1023
+ "stored keywords using that label. %s Go to Briefcase. Move your mouse over "
1024
+ "the row containing your desired keyword. The 3 vertical dots button appears. "
1025
+ "%s Move your mouse over it and a menu will show. Click on Assign Label. %s "
1026
+ "Then, assign a label to your keyword in order to complete this task."
1027
+ msgstr ""
1028
+
1029
+ #: models/Assistant.php:129
1030
+ msgid "Send Keywords to Rank Checker"
1031
+ msgstr ""
1032
+
1033
+ #: models/Assistant.php:130
1034
+ #, php-format
1035
+ msgid ""
1036
+ "Now that you (hopefully) have keywords added to your Briefcase, go look at "
1037
+ "one of your keywords. Move the mouse over the row with your desired keyword. "
1038
+ "%s You will see a button with 3 vertical dots appear to the right of the "
1039
+ "row. %s Get your mouse cursor over that button. A menu shows. Click on Send "
1040
+ "to Rank Checker. %s That's it. Now Squirrly SEO's rank checker feature will "
1041
+ "start tracking your position in Google for that keyword that is part of your "
1042
+ "SEO strategy."
1043
+ msgstr ""
1044
+
1045
+ #: models/Assistant.php:136
1046
+ msgid "Optimize Using Live Assistant"
1047
+ msgstr ""
1048
+
1049
+ #: models/Assistant.php:137
1050
+ #, php-format
1051
+ msgid ""
1052
+ "Optimize your first Page or Article using the SEO Live Assistant (SLA) "
1053
+ "feature from Squirrly SEO. %s You can either Edit an existing post or create "
1054
+ "a new post. (You have your Live Assistant where you have your WP "
1055
+ "Editor)%sThe SEO Live Assistant is like having a SEO Consultant near you, "
1056
+ "whispering in your ear exactly what you have to do to get a 100% optimized "
1057
+ "article or page.%sYou can try the DEMO first, by clicking on the Demo Post "
1058
+ "button. It's safe to break anything in the SEO of that page, because it "
1059
+ "never gets indexed by Google, since it's a DEMO. It's an easy way to learn "
1060
+ "your way around it."
1061
+ msgstr ""
1062
+
1063
+ #: models/Assistant.php:143
1064
+ msgid "Activate METAs"
1065
+ msgstr ""
1066
+
1067
+ #: models/Assistant.php:144
1068
+ #, php-format
1069
+ msgid ""
1070
+ "Activate the META settings from the Squirrly SEO Plugin. %s You can import "
1071
+ "ALL meta settings you've made with other plugins in WordPress into your "
1072
+ "Squirrly SEO Plugin. That way everything will be kept 100%% intact, without "
1073
+ "any head-aches. %s To complete this task you need to activate: %s - Optimize "
1074
+ "the Titles%s- Optimize Descriptions %s - Add Canonical META Link %s Make "
1075
+ "sure you click on SAVE settings after you switch anything on or off."
1076
+ msgstr ""
1077
+
1078
+ #: models/Assistant.php:148 view/Blocks/Snippet.php:385
1079
+ #: view/SeoSettings/Jsonld.php:21
1080
+ msgid "Activate JSON-LD"
1081
+ msgstr ""
1082
+
1083
+ #: models/Assistant.php:149
1084
+ #, php-format
1085
+ msgid ""
1086
+ "JSON-LD Structured Data needs to be activated. %s The Duplicate Removal "
1087
+ "feature of Squirrly SEO will make sure that if you have more than one JSON-"
1088
+ "LD definition inside the source code of any URL, the definition created by "
1089
+ "Squirrly SEO will be the only one that remains. %s Make sure you setup all "
1090
+ "the information about your Organization or your Personal Brand here. %s To "
1091
+ "finish all the JSON-LD related setup, also visit the Social Media section of "
1092
+ "our Settings page and write in your social media profiles for this site. %s "
1093
+ "Then, at URL-level you will be able to add custom JSON-LD if you're an "
1094
+ "advanced user."
1095
+ msgstr ""
1096
+
1097
+ #: models/Assistant.php:153 view/Blocks/Snippet.php:488
1098
+ #: view/SeoSettings/Automation.php:317 view/SeoSettings/Social.php:45
1099
+ msgid "Activate Open Graph"
1100
+ msgstr ""
1101
+
1102
+ #: models/Assistant.php:154
1103
+ #, php-format
1104
+ msgid ""
1105
+ "Go to the Social Media section.%sActivate Open Graph. (switch the toggle to "
1106
+ "ON) %s The Open Graph will help you control the way your posts look when "
1107
+ "people share your URLs to social media sites like Facebook and LinkedIN. %s "
1108
+ "It will also make your social media posts look great and gain you clicks to "
1109
+ "your site."
1110
+ msgstr ""
1111
+
1112
+ #: models/Assistant.php:158 view/Blocks/Snippet.php:742
1113
+ #: view/SeoSettings/Automation.php:344 view/SeoSettings/Social.php:268
1114
+ msgid "Activate Twitter Card"
1115
+ msgstr ""
1116
+
1117
+ #: models/Assistant.php:159
1118
+ #, php-format
1119
+ msgid ""
1120
+ "Go to the Social Media section. %s - Activate Twitter Card. (switch the "
1121
+ "toggle to ON) %s - Add your Twitter profile URL %s The Twitter Card will "
1122
+ "help you control the way your posts look when people share your URLs on "
1123
+ "Twitter. %s It will also make your social media posts look great and gain "
1124
+ "you clicks to your site."
1125
+ msgstr ""
1126
+
1127
+ # @ squirrly-seo
1128
+ #: models/Assistant.php:163
1129
+ #, fuzzy
1130
+ #| msgid "Google %sAnalytics ID%s`:"
1131
+ msgid "Activate Google Analytics"
1132
+ msgstr "Google %sAnalytics ID%s`:"
1133
+
1134
+ #: models/Assistant.php:164
1135
+ #, php-format
1136
+ msgid ""
1137
+ "Go to the Tracking Tools section. %s Add your Google Analytics ID to "
1138
+ "complete this setting. (find it in the tracking code that Google Analytics "
1139
+ "tells you to place on your site) %s Squirrly SEO will then add "
1140
+ "(automatically) your Google Analytics tracking code (in the format you "
1141
+ "desire) to every page of your site (according to rules you can modify in the "
1142
+ "Automation section)."
1143
+ msgstr ""
1144
+
1145
+ #: models/Assistant.php:168
1146
+ msgid "Activate Facebook Pixel"
1147
+ msgstr ""
1148
+
1149
+ #: models/Assistant.php:169
1150
+ #, php-format
1151
+ msgid ""
1152
+ "Go to the Tracking Tools section of the settings and add your Facebook Pixel "
1153
+ "ID. %s Make sure you click Save Settings after you do that. %s Do this, and "
1154
+ "Facebook will start tracking user actions on your site, so you can later "
1155
+ "retarget them with ads."
1156
+ msgstr ""
1157
+
1158
+ #: models/Assistant.php:173
1159
+ msgid "Connect the Webmasters"
1160
+ msgstr ""
1161
+
1162
+ #: models/Assistant.php:174
1163
+ #, php-format
1164
+ msgid ""
1165
+ "Go to the Connection section of the Settings. %s This section makes it super "
1166
+ "easy to integrate different (important) 3rd party services with your "
1167
+ "WordPress. %s Alexa META Code is 100%% optional, but the rest are very "
1168
+ "important to add. %s Enter your Pinterest code, especially if you plan to "
1169
+ "expand your presence on Pinterest. It will activate Rich Pins, which will "
1170
+ "completely boost your sales and visibility for any product or post that has "
1171
+ "great images."
1172
+ msgstr ""
1173
+
1174
+ #: models/Assistant.php:178
1175
+ msgid "Activate Sitemap XML"
1176
+ msgstr ""
1177
+
1178
+ #: models/Assistant.php:179
1179
+ #, php-format
1180
+ msgid ""
1181
+ "Activate your Sitemap XML setting. Squirrly SEO will then generate your "
1182
+ "sitemap, according to different items you can set up. %s Use this to tell "
1183
+ "Google how often you bring new content to your site. %s Also, choose for "
1184
+ "which types of URLs you'll want to have sitemaps. It depends on your "
1185
+ "strategy. Leave the defaults if you're uncertain. Squirrly SEO chooses the "
1186
+ "best defaults for you. %s Make sure you include Images and Videos in the "
1187
+ "sitemap. It has been identified as a ranking factor, so it's good to have "
1188
+ "that."
1189
+ msgstr ""
1190
+
1191
+ #: models/Assistant.php:183
1192
+ msgid "Activate Meta Automation"
1193
+ msgstr ""
1194
+
1195
+ #: models/Assistant.php:184
1196
+ #, php-format
1197
+ msgid ""
1198
+ "The Automation Features of Squirrly SEO are extremely powerful. %s They help "
1199
+ "Non-SEO experts avoid many mistakes they would normally make. %s They help "
1200
+ "experts control any WordPress site at a level that has never been possible "
1201
+ "before. (just make sure you click to see the Advanced settings). %s You'll "
1202
+ "be able to configure automations according to any post type. %s Turn the "
1203
+ "toggle to ON for : Activate Patterns to complete this task."
1204
+ msgstr ""
1205
+
1206
+ # @ squirrly-seo
1207
+ #: models/Assistant.php:192 models/focuspages/Accuracy.php:40
1208
+ #: models/focuspages/Traffic.php:85 models/focuspages/Traffic.php:90
1209
+ #, fuzzy
1210
+ #| msgid "Google %sAnalytics ID%s`:"
1211
+ msgid "Connect Google Analytics"
1212
+ msgstr "Google %sAnalytics ID%s`:"
1213
+
1214
+ #: models/Assistant.php:193
1215
+ #, php-format
1216
+ msgid ""
1217
+ "Integrate Google Analytics with Squirrly SEO.%sFeatures like Focus Pages and "
1218
+ "the Audit need this integration, in order to work at full potential.%sGoogle "
1219
+ "Analytics is free and everyone uses it. The Audit and the Focus Pages will "
1220
+ "interpret the right data from Google Analytics for you.%sYou'll feel like an "
1221
+ "Analytics expert, without having to know a single thing about Google "
1222
+ "Analytics."
1223
+ msgstr ""
1224
+
1225
+ #: models/Assistant.php:197 models/Assistant.php:219
1226
+ msgid "Connect Google Search Console"
1227
+ msgstr ""
1228
+
1229
+ #: models/Assistant.php:198
1230
+ #, php-format
1231
+ msgid ""
1232
+ "Integrate your WordPress with Google Search Console, using Squirrly SEO."
1233
+ "%sThis integration is more than just setting the meta code for it. It will "
1234
+ "connect your WP to the API of Google's service and enable info such as "
1235
+ "Impressions, Clicks, Average Ranking Position to be collected.%sMore "
1236
+ "importantly, you'll be able to update all the info that Google has about "
1237
+ "your site, directly from your Squirrly SEO Plugin."
1238
+ msgstr ""
1239
+
1240
+ #: models/Assistant.php:202
1241
+ msgid "Set the Audit Email"
1242
+ msgstr ""
1243
+
1244
+ #: models/Assistant.php:203
1245
+ #, php-format
1246
+ msgid ""
1247
+ "You can customize the email to which we send the Audit reports.%sIt can be "
1248
+ "your personal email, your work email or the email of one of your "
1249
+ "collaborators.%sIt's a best practice to have the Audit sent to the person "
1250
+ "that will take charge and start correcting the problems of the site, in "
1251
+ "order to increase the score."
1252
+ msgstr ""
1253
+
1254
+ #: models/Assistant.php:207
1255
+ msgid "Get your score over 60"
1256
+ msgstr ""
1257
+
1258
+ #: models/Assistant.php:208
1259
+ #, php-format
1260
+ msgid ""
1261
+ "True website marketing performance happens after your Audit score gets to "
1262
+ "over 84.%sHowever, you need to start with smaller steps. For now, focus on "
1263
+ "getting a score of over 60.%sLook at the progress charts weekly and make "
1264
+ "sure you check out the Tasks section, which tells you exactly what you need "
1265
+ "to do in order to increase the score.%sWe've been testing these scores since "
1266
+ "2013 on hundreds of thousands of websites and it's always the same: true "
1267
+ "performance happens at over 84. That's why you need to start working on this."
1268
+ msgstr ""
1269
+
1270
+ #: models/Assistant.php:214
1271
+ msgid "Track your first 3 Keywords"
1272
+ msgstr ""
1273
+
1274
+ #: models/Assistant.php:215
1275
+ #, php-format
1276
+ msgid ""
1277
+ "SERP Checker = Search Engine Result Pages Checker. %s It checks your "
1278
+ "position on the Google Search Engine for your keywords. Also (on the "
1279
+ "Business Plan) it shows you the evolution in time for your sites' URLs for "
1280
+ "these keywords. %s Tell Squirrly SEO the first three keywords you want it to "
1281
+ "check for you, to see if you're ranking for them. %s Because you should work "
1282
+ "according to a solid SEO Strategy, you'll only be able to add keywords or "
1283
+ "remove keywords in the Ranking section from your Briefcase. %s Briefcase is "
1284
+ "your keyword organizer / manager. Find it in the Research section. Go with "
1285
+ "the mouse cursor over a keyword from briefcase -> see the 3 vertical dots -> "
1286
+ "select Send to Rank Checker"
1287
+ msgstr ""
1288
+
1289
+ #: models/Assistant.php:220
1290
+ #, php-format
1291
+ msgid ""
1292
+ "Connect Google Search Console. %s You can do that from SEO Audit -> "
1293
+ "Settings. %s It will bring information regarding Impressions and Clicks. %s "
1294
+ "Note: if you're on the free plan or the PRO plan then the Ranking Position "
1295
+ "will be displayed according to data from Google Search Console, which does "
1296
+ "not present the actual position you are on. It shows an average position "
1297
+ "that your site was lately found on. It can give you values such as 4.3 "
1298
+ "because of this. Even though your page today could be on position 7. %s The "
1299
+ "Business Plan is the only one that can give you the exact position because "
1300
+ "it uses Squirrly's private cloud servers that are working around the clock "
1301
+ "to gather the accurate, on-time and objective information about your "
1302
+ "rankings."
1303
+ msgstr ""
1304
+
1305
+ #: models/Assistant.php:224
1306
+ msgid "Get 1 Keyword to the first page of Google"
1307
+ msgstr ""
1308
+
1309
+ #: models/Assistant.php:225
1310
+ #, php-format
1311
+ msgid ""
1312
+ "Start with a small task. Get 1 keyword to the first page of Google. %s "
1313
+ "Select a good keyword (using our Keyword Research tool). %s Create an "
1314
+ "amazing page for it (if you don't already have one). %s Add the page to "
1315
+ "Focus Pages in Squirrly SEO. %s Turn the RED lights to Green in Focus Pages "
1316
+ "and see your rankings increase over time. %s If you continue working on "
1317
+ "those tasks and turning elements to green you'll complete this task."
1318
+ msgstr ""
1319
+
1320
+ #: models/Assistant.php:277
1321
+ msgid "You chose to ignore this task. Click to activate it."
1322
+ msgstr ""
1323
+
1324
+ #: models/BulkSeo.php:17
1325
+ msgid "METAs"
1326
+ msgstr ""
1327
+
1328
+ #: models/BulkSeo.php:18 view/Blocks/Snippet.php:98
1329
+ msgid "Open Graph"
1330
+ msgstr ""
1331
+
1332
+ #: models/BulkSeo.php:19 view/Blocks/Snippet.php:101
1333
+ msgid "Twitter Card"
1334
+ msgstr ""
1335
+
1336
+ #: models/BulkSeo.php:20 models/FocusPages.php:20 view/Blocks/Snippet.php:110
1337
+ msgid "Visibility"
1338
+ msgstr ""
1339
+
1340
+ # @ squirrly-seo
1341
+ #: models/CheckSeo.php:13
1342
+ #, fuzzy
1343
+ #| msgid "Could not send the email..."
1344
+ msgid "Could not verify the frontend"
1345
+ msgstr "Konnte E-Mail nicht senden ..."
1346
+
1347
+ #: models/CheckSeo.php:14
1348
+ msgid ""
1349
+ "To be able to check your website, you need to allow local crawling in your ."
1350
+ "htaccess file"
1351
+ msgstr ""
1352
+
1353
+ #: models/CheckSeo.php:15
1354
+ #, php-format
1355
+ msgid ""
1356
+ "Run the test again. If you get the same error, check if you have added 'Deny "
1357
+ "%s' into your config file (e.g. htaccess)"
1358
+ msgstr ""
1359
+
1360
+ #: models/CheckSeo.php:19
1361
+ msgid "Squirrly SEO Title is not active for your website"
1362
+ msgstr ""
1363
+
1364
+ #: models/CheckSeo.php:20
1365
+ msgid ""
1366
+ "It's important to activate Squirrly SEO Title for your website if you don't "
1367
+ "use other SEO plugins"
1368
+ msgstr ""
1369
+
1370
+ #: models/CheckSeo.php:21
1371
+ #, php-format
1372
+ msgid "Go to %sSquirrly > SEO Settings > Metas%s and switch on Meta Title"
1373
+ msgstr ""
1374
+
1375
+ #: models/CheckSeo.php:25
1376
+ msgid "You have duplicate Open Graph Meta tags"
1377
+ msgstr ""
1378
+
1379
+ #: models/CheckSeo.php:26
1380
+ #, php-format
1381
+ msgid ""
1382
+ "If you have duplicate OG tags, it means that some crawlers like %sFacebook "
1383
+ "Open Graph Object Debugger%s will raise an error and may not proceed with "
1384
+ "your request until you fix it."
1385
+ msgstr ""
1386
+
1387
+ #: models/CheckSeo.php:27 models/CheckSeo.php:33 models/CheckSeo.php:45
1388
+ #: models/CheckSeo.php:51
1389
+ msgid ""
1390
+ "If you are using multiple SEO plugins, then try to remove some of them and "
1391
+ "check again."
1392
+ msgstr ""
1393
+
1394
+ #: models/CheckSeo.php:31
1395
+ msgid "You have duplicate Twitter Card tags"
1396
+ msgstr ""
1397
+
1398
+ #: models/CheckSeo.php:32
1399
+ #, php-format
1400
+ msgid ""
1401
+ "If you have duplicate Twitter Card tags, it means that some crawlers like "
1402
+ "%sTwitter Validator%s will raise an error and may not proceed with your "
1403
+ "request until you fix it."
1404
+ msgstr ""
1405
+
1406
+ #: models/CheckSeo.php:37
1407
+ msgid "The Title meta tag is missing in frontend"
1408
+ msgstr ""
1409
+
1410
+ #: models/CheckSeo.php:38
1411
+ msgid ""
1412
+ "If you don't have Title meta tag in your website, it means that your website "
1413
+ "is not going to perform well on search engines."
1414
+ msgstr ""
1415
+
1416
+ #: models/CheckSeo.php:39
1417
+ #, php-format
1418
+ msgid ""
1419
+ "Go to %sSquirrly > SEO Settings > Metas%s and switch on Meta Title. If it's "
1420
+ "already switched on, check if another plugin is stopping Squirrly from "
1421
+ "showing the Title meta."
1422
+ msgstr ""
1423
+
1424
+ #: models/CheckSeo.php:43
1425
+ msgid "You have duplicate Title meta tags"
1426
+ msgstr ""
1427
+
1428
+ #: models/CheckSeo.php:44 models/CheckSeo.php:50
1429
+ msgid ""
1430
+ "If you have duplicate meta tags, it means that some crawlers may raise an "
1431
+ "error or process wrong data from your website until you fix it."
1432
+ msgstr ""
1433
+
1434
+ #: models/CheckSeo.php:49
1435
+ msgid "You have duplicate Description meta tags"
1436
+ msgstr ""
1437
+
1438
+ #: models/CheckSeo.php:55
1439
+ msgid "Your website is not public"
1440
+ msgstr ""
1441
+
1442
+ #: models/CheckSeo.php:56 models/bulkseo/Visibility.php:104
1443
+ #, php-format
1444
+ msgid ""
1445
+ "You selected '%s' in Settings > Reading. It's important to uncheck that "
1446
+ "option."
1447
+ msgstr ""
1448
+
1449
+ #: models/CheckSeo.php:56 models/CheckSeo.php:57
1450
+ #: models/bulkseo/Visibility.php:104 view/Blocks/Snippet.php:1077
1451
+ msgid "Discourage search engines from indexing this site"
1452
+ msgstr ""
1453
+
1454
+ #: models/CheckSeo.php:57
1455
+ #, php-format
1456
+ msgid "Go to %sGeneral > Reading%s and uncheck %s."
1457
+ msgstr ""
1458
+
1459
+ #: models/CheckSeo.php:61
1460
+ msgid "Permalink structure is not good"
1461
+ msgstr ""
1462
+
1463
+ #: models/CheckSeo.php:62
1464
+ msgid ""
1465
+ "Your URLs (the links from your site) should be super easy to read. This "
1466
+ "makes your site Human-friendly as well."
1467
+ msgstr ""
1468
+
1469
+ #: models/CheckSeo.php:63
1470
+ #, php-format
1471
+ msgid ""
1472
+ "Make your LINKS SEO-Friendly. %s Settings > Permalinks %s That is where "
1473
+ "WordPress allows you to change the permalink structure."
1474
+ msgstr ""
1475
+
1476
+ #: models/CheckSeo.php:67
1477
+ msgid "The default Tagline is still on"
1478
+ msgstr ""
1479
+
1480
+ #: models/CheckSeo.php:68
1481
+ msgid ""
1482
+ "Most of the pages will use the WordPress Tagline in Title and Description. "
1483
+ "Squirrly SEO uses the Tagline on {{sitedesc}} pattern for automation."
1484
+ msgstr ""
1485
+
1486
+ #: models/CheckSeo.php:69
1487
+ #, php-format
1488
+ msgid "Change the Tagline with your Brand or the Store name from %s"
1489
+ msgstr ""
1490
+
1491
+ #: models/CheckSeo.php:69 models/Menu.php:229 models/Menu.php:263
1492
+ #: models/Menu.php:283
1493
+ msgid "Settings"
1494
+ msgstr ""
1495
+
1496
+ #: models/CheckSeo.php:69
1497
+ msgid "General"
1498
+ msgstr ""
1499
+
1500
+ #: models/CheckSeo.php:73
1501
+ msgid "AMP site detected and Squirrly AMP is off"
1502
+ msgstr ""
1503
+
1504
+ #: models/CheckSeo.php:74
1505
+ msgid ""
1506
+ "If this website is an AMP website you need to make sure that you activate "
1507
+ "Squirrly AMP Tracking for it. Squirrly will load Google Analytics and "
1508
+ "Facebook Pixel for AMP and avoid AMP script errors."
1509
+ msgstr ""
1510
+
1511
+ #: models/CheckSeo.php:75
1512
+ #, php-format
1513
+ msgid "Activate AMP tracking in %s Squirrly > SEO Settings > Tracking Tools%s "
1514
+ msgstr ""
1515
+
1516
+ # @ squirrly-seo
1517
+ #: models/CheckSeo.php:143
1518
+ #, fuzzy
1519
+ #| msgid "Could not send the email..."
1520
+ msgid "Could not verify the frontend."
1521
+ msgstr "Konnte E-Mail nicht senden ..."
1522
+
1523
+ #: models/CheckSeo.php:427
1524
+ msgid "Just another WordPress site"
1525
+ msgstr ""
1526
+
1527
+ #: models/FocusPages.php:21 models/bulkseo/Metas.php:135
1528
+ #: models/focuspages/Clicks.php:59 models/focuspages/Content.php:76
1529
+ #: models/focuspages/Ctr.php:59 models/focuspages/Image.php:72
1530
+ #: models/focuspages/Impressions.php:59 models/focuspages/Keyword.php:79
1531
+ #: models/focuspages/Keyword.php:82 models/focuspages/Snippet.php:124
1532
+ #: models/focuspages/Strategy.php:88 view/Blocks/KRFound.php:15
1533
+ #: view/Blocks/KRHistory.php:15 view/Ranking/Gscsync.php:24
1534
+ #: view/Ranking/Rankings.php:122 view/Ranking/Rankings.php:151
1535
+ #: view/Research/Briefcase.php:66 view/Research/Briefcase.php:104
1536
+ #: view/Research/History.php:25 view/Research/HistoryDetails.php:7
1537
+ #: view/Research/Research.php:158 view/Research/Suggested.php:23
1538
+ msgid "Keyword"
1539
+ msgstr ""
1540
+
1541
+ #: models/FocusPages.php:22
1542
+ msgid "Strategy"
1543
+ msgstr ""
1544
+
1545
+ # @ squirrly-seo
1546
+ #: models/FocusPages.php:23
1547
+ #, fuzzy
1548
+ #| msgid "SEO Software"
1549
+ msgid "SEO Content"
1550
+ msgstr "SEO Software"
1551
+
1552
+ #: models/FocusPages.php:24
1553
+ msgid "Words / Page"
1554
+ msgstr ""
1555
+
1556
+ #: models/FocusPages.php:25
1557
+ msgid "Platform SEO"
1558
+ msgstr ""
1559
+
1560
+ #: models/FocusPages.php:26
1561
+ msgid "Snippet"
1562
+ msgstr ""
1563
+
1564
+ #: models/FocusPages.php:27
1565
+ msgid "SEO Image"
1566
+ msgstr ""
1567
+
1568
+ #: models/FocusPages.php:28
1569
+ msgid "Traffic Health"
1570
+ msgstr ""
1571
+
1572
+ #: models/FocusPages.php:29
1573
+ msgid "Platform Health"
1574
+ msgstr ""
1575
+
1576
+ #: models/FocusPages.php:30
1577
+ msgid "Page Authority"
1578
+ msgstr ""
1579
+
1580
+ #: models/FocusPages.php:31
1581
+ msgid "Social Signals"
1582
+ msgstr ""
1583
+
1584
+ #: models/FocusPages.php:32
1585
+ msgid "Backlinks"
1586
+ msgstr ""
1587
+
1588
+ #: models/FocusPages.php:33
1589
+ msgid "Inner Links"
1590
+ msgstr ""
1591
+
1592
+ #: models/FocusPages.php:34
1593
+ msgid "Outbound Links"
1594
+ msgstr ""
1595
+
1596
+ #: models/FocusPages.php:35
1597
+ msgid "Accuracy"
1598
+ msgstr ""
1599
+
1600
+ #: models/FocusPages.php:36 view/Ranking/Gscsync.php:26
1601
+ msgid "CTR"
1602
+ msgstr ""
1603
+
1604
+ #: models/FocusPages.php:37 view/Ranking/Rankings.php:165
1605
+ msgid "Impressions"
1606
+ msgstr ""
1607
+
1608
+ #: models/FocusPages.php:38 view/Ranking/Gscsync.php:25
1609
+ #: view/Ranking/Rankings.php:171
1610
+ msgid "Clicks"
1611
+ msgstr ""
1612
+
1613
+ #: models/FocusPages.php:102
1614
+ msgid "Audit in progress"
1615
+ msgstr ""
1616
+
1617
+ #: models/Ico.php:43
1618
+ msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
1619
+ msgstr ""
1620
+
1621
+ # @ squirrly-seo
1622
+ #: models/Ico.php:49
1623
+ msgid "GD error: The GD library must be installed on your server."
1624
+ msgstr ""
1625
+
1626
+ # @ squirrly-seo
1627
+ #: models/Ico.php:55
1628
+ msgid "Delete error: Could not delete the old favicon."
1629
+ msgstr ""
1630
+
1631
+ # @ squirrly-seo
1632
+ #: models/Ico.php:62
1633
+ msgid "Upload error: Could not upload the favicon."
1634
+ msgstr ""
1635
+
1636
+ # @ squirrly-seo
1637
+ #: models/Ico.php:68
1638
+ msgid "Permission error: Could not change the favicon permissions."
1639
+ msgstr ""
1640
+
1641
+ # @ squirrly-seo
1642
+ #: models/Ico.php:89
1643
+ msgid ""
1644
+ "ICO Error: Could not create the ICO from file. Try with another file type."
1645
+ msgstr ""
1646
+
1647
+ # @ squirrly-seo
1648
+ #: models/Ico.php:106
1649
+ msgid "The favicon has been updated."
1650
+ msgstr ""
1651
+
1652
+ #: models/Menu.php:123 models/Menu.php:361
1653
+ msgid "First Step"
1654
+ msgstr ""
1655
+
1656
+ #: models/Menu.php:124
1657
+ msgid " Dashboard"
1658
+ msgstr ""
1659
+
1660
+ # @ squirrly-seo
1661
+ #: models/Menu.php:131 view/Research/Briefcase.php:69
1662
+ #, fuzzy
1663
+ #| msgid "Do the research"
1664
+ msgid "Research"
1665
+ msgstr "Recherchieren"
1666
+
1667
+ # @ squirrly-seo
1668
+ #: models/Menu.php:132
1669
+ #, fuzzy
1670
+ #| msgid "Do the research"
1671
+ msgid " Research"
1672
+ msgstr "Recherchieren"
1673
+
1674
+ #: models/Menu.php:139
1675
+ msgid "Live Assistant"
1676
+ msgstr ""
1677
+
1678
+ #: models/Menu.php:140
1679
+ msgid " Live Assistant"
1680
+ msgstr ""
1681
+
1682
+ #: models/Menu.php:147
1683
+ msgid "SEO Settings"
1684
+ msgstr ""
1685
+
1686
+ #: models/Menu.php:148
1687
+ msgid " SEO Settings"
1688
+ msgstr ""
1689
+
1690
+ #: models/Menu.php:155 models/Menu.php:237 view/Blocks/FocusPages.php:6
1691
+ #: view/FocusPages/Pagelist.php:13
1692
+ msgid "Focus Pages"
1693
+ msgstr ""
1694
+
1695
+ #: models/Menu.php:156
1696
+ msgid " Focus Pages"
1697
+ msgstr ""
1698
+
1699
+ #: models/Menu.php:163 view/Blocks/Audits.php:6
1700
+ msgid "SEO Audit"
1701
+ msgstr ""
1702
+
1703
+ #: models/Menu.php:164
1704
+ msgid " SEO Audit"
1705
+ msgstr ""
1706
+
1707
+ #: models/Menu.php:171 models/Menu.php:271
1708
+ msgid "Rankings"
1709
+ msgstr ""
1710
+
1711
+ #: models/Menu.php:172
1712
+ msgid " Rankings"
1713
+ msgstr ""
1714
+
1715
+ #: models/Menu.php:191
1716
+ msgid "Find Keywords"
1717
+ msgstr ""
1718
+
1719
+ # @ squirrly-seo
1720
+ #: models/Menu.php:192
1721
+ #, fuzzy
1722
+ #| msgid "Do the research"
1723
+ msgid "do a keyword research"
1724
+ msgstr "Recherchieren"
1725
+
1726
+ #: models/Menu.php:197 view/Research/Briefcase.php:14
1727
+ msgid "Briefcase"
1728
+ msgstr ""
1729
+
1730
+ #: models/Menu.php:198
1731
+ msgid "save the best Keywords"
1732
+ msgstr ""
1733
+
1734
+ #: models/Menu.php:203 view/Research/Briefcase.php:24
1735
+ msgid "Labels"
1736
+ msgstr ""
1737
+
1738
+ # @ squirrly-seo
1739
+ #: models/Menu.php:204
1740
+ #, fuzzy
1741
+ #| msgid "Tips: 2-4 keywords"
1742
+ msgid "group keywords"
1743
+ msgstr "Tipp: Länge 2-4 Schlüsselwörter"
1744
+
1745
+ #: models/Menu.php:209 view/Research/Suggested.php:12
1746
+ msgid "Suggested"
1747
+ msgstr ""
1748
+
1749
+ #: models/Menu.php:210
1750
+ msgid "better keywords found"
1751
+ msgstr ""
1752
+
1753
+ #: models/Menu.php:215 view/Research/History.php:14
1754
+ msgid "History"
1755
+ msgstr ""
1756
+
1757
+ #: models/Menu.php:216
1758
+ msgid "keyword research history"
1759
+ msgstr ""
1760
+
1761
+ #: models/Menu.php:223
1762
+ msgid "Optimize Posts"
1763
+ msgstr ""
1764
+
1765
+ #: models/Menu.php:224
1766
+ msgid "use the Live Assistant"
1767
+ msgstr ""
1768
+
1769
+ #: models/Menu.php:230
1770
+ msgid "live assistant setup"
1771
+ msgstr ""
1772
+
1773
+ #: models/Menu.php:238
1774
+ msgid "all my focus pages"
1775
+ msgstr ""
1776
+
1777
+ #: models/Menu.php:249
1778
+ msgid "Add New Page"
1779
+ msgstr ""
1780
+
1781
+ #: models/Menu.php:250
1782
+ msgid "add page in focus pages"
1783
+ msgstr ""
1784
+
1785
+ #: models/Menu.php:257 view/Blocks/Toolbar.php:31
1786
+ msgid "Overview"
1787
+ msgstr ""
1788
+
1789
+ #: models/Menu.php:258
1790
+ msgid "See all the SEO audits"
1791
+ msgstr ""
1792
+
1793
+ # @ squirrly-seo
1794
+ #: models/Menu.php:264
1795
+ #, fuzzy
1796
+ #| msgid "Squirrly settings"
1797
+ msgid "Audit settings"
1798
+ msgstr "Squirrly Einstellungen"
1799
+
1800
+ #: models/Menu.php:272
1801
+ msgid "See Google ranking"
1802
+ msgstr ""
1803
+
1804
+ #: models/Menu.php:277
1805
+ msgid "Add Keywords"
1806
+ msgstr ""
1807
+
1808
+ #: models/Menu.php:278
1809
+ msgid "Add briefcase keywords"
1810
+ msgstr ""
1811
+
1812
+ # @ squirrly-seo
1813
+ #: models/Menu.php:284
1814
+ #, fuzzy
1815
+ #| msgid "Squirrly settings"
1816
+ msgid "Ranking settings"
1817
+ msgstr "Squirrly Einstellungen"
1818
+
1819
+ #: models/Menu.php:293 view/SeoSettings/Bulkseo.php:18
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:17
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 ""
1838
+
1839
+ #: models/Menu.php:306
1840
+ msgid "google structured data"
1841
+ msgstr ""
1842
+
1843
+ #: models/Menu.php:311 view/SeoSettings/Social.php:16
1844
+ msgid "Social Media"
1845
+ msgstr ""
1846
+
1847
+ #: models/Menu.php:312
1848
+ msgid "social share options"
1849
+ msgstr ""
1850
+
1851
+ # @ squirrly-seo
1852
+ #: models/Menu.php:317
1853
+ #, fuzzy
1854
+ #| msgid "automatically"
1855
+ msgid "Automation"
1856
+ msgstr "automatisch"
1857
+
1858
+ #: models/Menu.php:318
1859
+ msgid "patterns & automation"
1860
+ msgstr ""
1861
+
1862
+ #: models/Menu.php:323 view/SeoSettings/Tracking.php:16
1863
+ msgid "Tracking Tools"
1864
+ msgstr ""
1865
+
1866
+ #: models/Menu.php:324
1867
+ msgid "google analytics, pixel, etc."
1868
+ msgstr ""
1869
+
1870
+ #: models/Menu.php:329
1871
+ msgid "Connection"
1872
+ msgstr ""
1873
+
1874
+ #: models/Menu.php:330
1875
+ msgid "webmaster tools"
1876
+ msgstr ""
1877
+
1878
+ #: models/Menu.php:335 view/SeoSettings/Sitemap.php:17
1879
+ msgid "Sitemap XML"
1880
+ msgstr ""
1881
+
1882
+ #: models/Menu.php:336
1883
+ msgid "setup the sitemap"
1884
+ msgstr ""
1885
+
1886
+ #: models/Menu.php:341
1887
+ msgid "Robots.txt"
1888
+ msgstr ""
1889
+
1890
+ #: models/Menu.php:342
1891
+ msgid "search engine filters"
1892
+ msgstr ""
1893
+
1894
+ #: models/Menu.php:347
1895
+ msgid "Favicon"
1896
+ msgstr ""
1897
+
1898
+ #: models/Menu.php:348
1899
+ msgid "add website icon"
1900
+ msgstr ""
1901
+
1902
+ #: models/Menu.php:353
1903
+ msgid "Import/Export"
1904
+ msgstr ""
1905
+
1906
+ #: models/Menu.php:354
1907
+ msgid "import & export SEO"
1908
+ msgstr ""
1909
+
1910
+ #: models/Menu.php:362
1911
+ msgid "all the SEO features"
1912
+ msgstr ""
1913
+
1914
+ #: models/Menu.php:367
1915
+ msgid "14 days jorney"
1916
+ msgstr ""
1917
+
1918
+ #: models/Menu.php:368
1919
+ msgid "sign up for better ranking"
1920
+ msgstr ""
1921
+
1922
+ #: models/Menu.php:373 view/Onboarding/Step3.php:51
1923
+ msgid "Import"
1924
+ msgstr ""
1925
+
1926
+ #: models/Menu.php:374
1927
+ msgid "import settings and SEO"
1928
+ msgstr ""
1929
+
1930
+ #: models/Menu.php:379
1931
+ msgid "Final Step"
1932
+ msgstr ""
1933
+
1934
+ #: models/Menu.php:380
1935
+ msgid "start using Squirrly SEO"
1936
+ msgstr ""
1937
+
1938
+ #: models/Post.php:73
1939
+ msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
1940
+ msgstr ""
1941
+
1942
+ #: models/Post.php:74
1943
+ msgid ""
1944
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
1945
+ "the HTML form."
1946
+ msgstr ""
1947
+
1948
+ #: models/Post.php:75
1949
+ msgid "The uploaded file was only partially uploaded."
1950
+ msgstr ""
1951
+
1952
+ #: models/Post.php:76
1953
+ msgid "No file was uploaded."
1954
+ msgstr ""
1955
+
1956
+ #: models/Post.php:78
1957
+ msgid "Missing a temporary folder."
1958
+ msgstr ""
1959
+
1960
+ #: models/Post.php:79
1961
+ msgid "Failed to write file to disk."
1962
+ msgstr ""
1963
+
1964
+ #: models/Post.php:80
1965
+ msgid "File upload stopped by extension."
1966
+ msgstr ""
1967
+
1968
+ #: models/Post.php:97
1969
+ msgid "Invalid form submission."
1970
+ msgstr ""
1971
+
1972
+ #: models/Post.php:107
1973
+ msgid "File is empty. Please upload something more substantial."
1974
+ msgstr ""
1975
+
1976
+ #: models/Post.php:109
1977
+ msgid ""
1978
+ "File is empty. Please upload something more substantial. This error could "
1979
+ "also be caused by uploads being disabled in your php.ini or by post_max_size "
1980
+ "being defined as smaller than upload_max_filesize in php.ini."
1981
+ msgstr ""
1982
+
1983
+ #: models/Post.php:115
1984
+ msgid "Specified file failed upload test."
1985
+ msgstr ""
1986
+
1987
+ #: models/Post.php:128
1988
+ msgid "Sorry, this file type is not permitted for security reasons."
1989
+ msgstr ""
1990
+
1991
+ #: models/Post.php:153
1992
+ #, php-format
1993
+ msgid "The uploaded file could not be moved to %s."
1994
+ msgstr ""
1995
+
1996
+ #: models/PostsList.php:21
1997
+ msgid "Optimized:"
1998
+ msgstr ""
1999
+
2000
+ #: models/PostsList.php:24
2001
+ msgid "Optimize it with Squirrly Live Assistant"
2002
+ msgstr ""
2003
+
2004
+ #: models/PostsList.php:48 models/PostsList.php:74
2005
+ msgid "Snippet optimized:"
2006
+ msgstr ""
2007
+
2008
+ #: models/PostsList.php:48 models/PostsList.php:74
2009
+ msgid "task(s) remained."
2010
+ msgstr ""
2011
+
2012
+ #: models/PostsList.php:52 models/PostsList.php:78
2013
+ msgid "Can't get snippet data"
2014
+ msgstr ""
2015
+
2016
+ #: models/PostsList.php:55 models/PostsList.php:80 view/Blocks/Snippet.php:143
2017
+ msgid "Edit Snippet"
2018
+ msgstr ""
2019
+
2020
+ # @ squirrly-seo
2021
+ #: models/RoleManager.php:62
2022
+ #, fuzzy
2023
+ #| msgid "Squirrly LIVE SEO assistant"
2024
+ msgid "Squirrly SEO Editor"
2025
+ msgstr "Squirrly LIVE SEO-Assistent"
2026
+
2027
+ # @ squirrly-seo
2028
+ #: models/RoleManager.php:63
2029
+ #, fuzzy
2030
+ #| msgid "Squirrly LIVE SEO assistant"
2031
+ msgid "Squirrly SEO Admin"
2032
+ msgstr "Squirrly LIVE SEO-Assistent"
2033
+
2034
+ #: models/Snippet.php:16
2035
+ msgid "You don't have enough pemission to edit this article"
2036
+ msgstr ""
2037
+
2038
  # @ squirrly-seo
2039
+ #: models/Snippet.php:117 view/Blocks/Snippet.php:1227
2040
+ #, fuzzy
2041
+ #| msgid "Could not send the email..."
2042
+ msgid "Couldn't find the page"
2043
+ msgstr "Konnte E-Mail nicht senden ..."
2044
+
2045
+ #: models/Snippet.php:132 models/Snippet.php:144
2046
+ msgid "No Polylang translation for this post."
2047
+ msgstr ""
2048
+
2049
+ #: models/abstract/Assistant.php:119
2050
+ msgid "We are gathering data for this category"
2051
+ msgstr ""
2052
+
2053
+ #: models/abstract/Assistant.php:160
2054
+ msgid "Not enough data to process this task"
2055
+ msgstr ""
2056
+
2057
+ #: models/abstract/Assistant.php:164 view/Blocks/Snippet.php:319
2058
+ msgid "Current"
2059
+ msgstr ""
2060
+
2061
+ #: models/abstract/Assistant.php:178
2062
+ msgid "You choosed to ignore this task. Click to activate it."
2063
+ msgstr ""
2064
+
2065
+ #: models/bulkseo/Metas.php:54
2066
+ msgid "Title not empty"
2067
+ msgstr ""
2068
+
2069
+ #: models/bulkseo/Metas.php:55 view/Blocks/Snippet.php:197
2070
+ #: view/Blocks/Snippet.php:595 view/Blocks/Snippet.php:850
2071
+ msgid "Current Title"
2072
+ msgstr ""
2073
+
2074
+ #: models/bulkseo/Metas.php:57
2075
+ #, php-format
2076
  msgid ""
2077
+ "The title for this URL must not be empty. %s Write a title for this page. "
2078
+ "The title is very important because it shows up in the browser tab and in "
2079
+ "the Google listing for your page. %s The better you write the title, the "
2080
+ "more clicks you can get when people find your page on search engines."
2081
  msgstr ""
2082
 
2083
+ #: models/bulkseo/Metas.php:60
2084
+ #, php-format
2085
+ msgid "Title up to %s chars"
2086
+ msgstr ""
2087
+
2088
+ #: models/bulkseo/Metas.php:61
2089
+ msgid "Current Title Length"
2090
+ msgstr ""
2091
+
2092
+ #: models/bulkseo/Metas.php:62 models/bulkseo/Metas.php:80
2093
+ #: models/bulkseo/Opengraph.php:72 models/bulkseo/Opengraph.php:82
2094
+ #: models/bulkseo/Twittercard.php:69 models/bulkseo/Twittercard.php:79
2095
+ msgid "chars"
2096
+ msgstr ""
2097
+
2098
+ #: models/bulkseo/Metas.php:63 models/bulkseo/Opengraph.php:73
2099
+ #: models/bulkseo/Twittercard.php:70
2100
+ #, php-format
2101
  msgid ""
2102
+ "Title has to be longer than %s chars and up to %s chars. %s You can change "
2103
+ "the title max length from %sSEO Settings > Automation%s."
2104
  msgstr ""
2105
 
2106
+ #: models/bulkseo/Metas.php:66 models/focuspages/Snippet.php:80
2107
+ msgid "Keyword in title"
 
2108
  msgstr ""
2109
 
2110
  # @ squirrly-seo
2111
+ #: models/bulkseo/Metas.php:67 models/bulkseo/Metas.php:85
2112
+ #, fuzzy
2113
+ #| msgid "Squirrly settings"
2114
+ msgid "Squirrly Keyword"
2115
+ msgstr "Squirrly Einstellungen"
2116
+
2117
+ # @ squirrly-seo
2118
+ #: models/bulkseo/Metas.php:68 models/bulkseo/Metas.php:86
2119
+ #, fuzzy
2120
+ #| msgid "Tips: 2-4 keywords"
2121
+ msgid "no keywords"
2122
+ msgstr "Tipp: Länge 2-4 Schlüsselwörter"
2123
+
2124
+ #: models/bulkseo/Metas.php:69 models/focuspages/Snippet.php:82
2125
+ #, php-format
2126
+ msgid ""
2127
+ "Your keyword must be present in the title of the page. %s It's a very "
2128
+ "important element through which you make sure that you connect the "
2129
+ "searcher's intent to the content on your page. %s If I'm looking for \"buy "
2130
+ "cheap smartwatch\" and you give me a page called \"Luna Presentation\", I "
2131
+ "will never click your page. Why? Because I might not know that Luna is a "
2132
+ "smartwatch designed by VectorWatch. %s \"Buy Cheap Smartwatch - Luna by "
2133
+ "VectorWatch\" would be a much better choice for a title."
2134
  msgstr ""
2135
 
2136
+ #: models/bulkseo/Metas.php:72
2137
+ msgid "Description not empty"
2138
  msgstr ""
2139
 
2140
+ #: models/bulkseo/Metas.php:73 view/Blocks/Snippet.php:249
2141
+ #: view/Blocks/Snippet.php:639 view/Blocks/Snippet.php:894
2142
+ msgid "Current Description"
2143
  msgstr ""
2144
 
2145
+ #: models/bulkseo/Metas.php:75
2146
+ #, php-format
2147
+ msgid ""
2148
+ "Meta descriptions are important for SEO on multiple search engines. %s You "
2149
+ "need to have a meta description for this URL. %s The better you write it, "
2150
+ "the higher the chances of people clicking on your listing when they find it "
2151
+ "on search engines."
2152
  msgstr ""
2153
 
2154
+ #: models/bulkseo/Metas.php:78
2155
+ #, php-format
2156
+ msgid "Description up to %s chars"
2157
  msgstr ""
2158
 
2159
+ #: models/bulkseo/Metas.php:79
2160
+ msgid "Current Description Length"
2161
  msgstr ""
2162
 
2163
+ #: models/bulkseo/Metas.php:81 models/bulkseo/Opengraph.php:83
2164
+ #: models/bulkseo/Twittercard.php:80
2165
+ #, php-format
2166
+ msgid ""
2167
+ "Description has to be longer than %s chars and up to %s chars. %s You can "
2168
+ "change the description max length from %sSEO Settings > Automation%s."
2169
  msgstr ""
2170
 
2171
+ #: models/bulkseo/Metas.php:84 models/focuspages/Snippet.php:85
2172
+ msgid "Keyword in description"
2173
  msgstr ""
2174
 
2175
+ #: models/bulkseo/Metas.php:87
2176
+ #, php-format
2177
+ msgid ""
2178
+ "Same as with the title task. %s If a user reads the description of your page "
2179
+ "on Google, but cannot find the keyword they searched for in that text, then "
2180
+ "they'd have very low chances of actually clicking and visiting your page. %s "
2181
+ "They'd go to the next page ranked on Google for that keyword. %s Think about "
2182
+ "this: Google itself is trying more and more to display keywords in the "
2183
+ "description of the pages it brings to TOP 10. It's pretty clear they care a "
2184
+ "lot about this, because that's what people want to find on the search engine."
2185
  msgstr ""
2186
 
2187
+ #: models/bulkseo/Metas.php:90
2188
+ msgid "Meta Keywords (2-4 Words)"
2189
+ msgstr ""
2190
+
2191
+ #: models/bulkseo/Metas.php:91
2192
+ msgid "Meta Keyword"
2193
  msgstr ""
2194
 
2195
  # @ squirrly-seo
2196
+ #: models/bulkseo/Metas.php:92
2197
+ #, fuzzy
2198
+ #| msgid "Enter even more keywords."
2199
+ msgid "no meta keywords"
2200
+ msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
2201
+
2202
+ #: models/bulkseo/Metas.php:93
2203
+ msgid ""
2204
+ "Even if Meta keywords are not mandatory for Google, it's important for other "
2205
+ "search engines to find this meta and to index your post for these keywords."
2206
+ msgstr ""
2207
+
2208
+ #: models/bulkseo/Metas.php:96
2209
+ msgid "Canonical Link"
2210
+ msgstr ""
2211
+
2212
+ #: models/bulkseo/Metas.php:97
2213
+ msgid "Current Link"
2214
+ msgstr ""
2215
+
2216
+ #: models/bulkseo/Metas.php:99
2217
+ #, php-format
2218
+ msgid ""
2219
+ "You don't have to set any canonical link if your post is not copied from "
2220
+ "another source. %s Squirrly will alert you if your canonical link is not the "
2221
+ "same with the current post's URL. %s The canonical link is used to tell "
2222
+ "search engines which URL is the original one. The original is the one that "
2223
+ "gets indexed and ranked."
2224
+ msgstr ""
2225
+
2226
+ #: models/bulkseo/Metas.php:108
2227
+ msgid "Some Squirrly Metas are deactivated."
2228
+ msgstr ""
2229
+
2230
+ #: models/bulkseo/Metas.php:113
2231
+ msgid "Some Squirrly Metas are not set correctly."
2232
+ msgstr ""
2233
+
2234
+ #: models/bulkseo/Metas.php:118
2235
+ msgid "Some Squirrly Metas are generated automatically."
2236
+ msgstr ""
2237
+
2238
+ #: models/bulkseo/Metas.php:121
2239
+ msgid "All Squirrly Metas are customized and set correctly."
2240
+ msgstr ""
2241
+
2242
+ #: models/bulkseo/Metas.php:132 models/bulkseo/Opengraph.php:125
2243
+ #: models/bulkseo/Twittercard.php:122 models/bulkseo/Visibility.php:69
2244
+ msgid "Current URL"
2245
+ msgstr ""
2246
+
2247
+ #: models/bulkseo/Metas.php:137 models/focuspages/Clicks.php:70
2248
+ #: models/focuspages/Content.php:81 models/focuspages/Ctr.php:70
2249
+ #: models/focuspages/Image.php:80 models/focuspages/Impressions.php:70
2250
+ #: models/focuspages/Keyword.php:93 models/focuspages/Snippet.php:126
2251
+ #: models/focuspages/Strategy.php:98
2252
+ msgid "No Keyword Found"
2253
  msgstr ""
2254
 
2255
+ #: models/bulkseo/Metas.php:152 models/bulkseo/Metas.php:188
2256
+ #: models/bulkseo/Metas.php:221 models/bulkseo/Metas.php:262
2257
+ #: models/bulkseo/Metas.php:298 models/bulkseo/Metas.php:331
2258
+ #: models/bulkseo/Metas.php:375 models/bulkseo/Metas.php:414
2259
+ #: models/bulkseo/Opengraph.php:139 models/bulkseo/Opengraph.php:175
2260
+ #: models/bulkseo/Opengraph.php:207 models/bulkseo/Opengraph.php:243
2261
+ #: models/bulkseo/Opengraph.php:279 models/bulkseo/Twittercard.php:136
2262
+ #: models/bulkseo/Twittercard.php:172 models/bulkseo/Twittercard.php:204
2263
+ #: models/bulkseo/Twittercard.php:240 models/bulkseo/Twittercard.php:276
2264
+ #: models/bulkseo/Visibility.php:83 models/bulkseo/Visibility.php:122
2265
+ #: models/bulkseo/Visibility.php:155
2266
+ msgid "Squirrly Snippet is deactivated from this post."
2267
  msgstr ""
2268
 
2269
+ #: models/bulkseo/Metas.php:156 models/bulkseo/Metas.php:192
2270
+ #: models/bulkseo/Metas.php:225 models/bulkseo/Metas.php:266
2271
+ #: models/bulkseo/Metas.php:302 models/bulkseo/Metas.php:335
2272
+ #: models/bulkseo/Metas.php:379 models/bulkseo/Metas.php:418
2273
+ #, php-format
2274
  msgid ""
2275
+ "SEO Metas for this post type are deactivated from %sSEO Settings > Automation"
2276
+ "%s."
2277
  msgstr ""
2278
 
2279
+ #: models/bulkseo/Metas.php:160 models/bulkseo/Metas.php:196
2280
+ #: models/bulkseo/Metas.php:229
2281
+ #, php-format
2282
+ msgid "Meta Title is deactivated from %sSEO Settings > Metas%s."
2283
+ msgstr ""
2284
+
2285
+ #: models/bulkseo/Metas.php:164 models/bulkseo/Metas.php:200
2286
+ #: models/bulkseo/Metas.php:233 models/bulkseo/Metas.php:274
2287
+ #: models/bulkseo/Metas.php:310 models/bulkseo/Metas.php:343
2288
+ #: models/bulkseo/Metas.php:383 models/bulkseo/Metas.php:426
2289
+ #, php-format
2290
+ msgid "SEO Metas is deactivated from %sSEO Settings > Metas%s."
2291
+ msgstr ""
2292
+
2293
+ # @ squirrly-seo
2294
+ #: models/bulkseo/Metas.php:173 models/bulkseo/Metas.php:209
2295
+ #: models/bulkseo/Opengraph.php:160 models/bulkseo/Opengraph.php:196
2296
+ #: models/bulkseo/Twittercard.php:157 models/bulkseo/Twittercard.php:193
2297
+ #, fuzzy
2298
+ #| msgid "<< Leave it automatically"
2299
+ msgid "Title is generated automatically."
2300
+ msgstr "<< Lass es automatisch"
2301
+
2302
+ #: models/bulkseo/Metas.php:270 models/bulkseo/Metas.php:306
2303
+ #: models/bulkseo/Metas.php:339
2304
+ #, php-format
2305
+ msgid "Meta Description is deactivated from %sSEO Settings > Metas%s."
2306
+ msgstr ""
2307
+
2308
+ #: models/bulkseo/Metas.php:283 models/bulkseo/Metas.php:320
2309
+ #: models/bulkseo/Opengraph.php:228 models/bulkseo/Opengraph.php:264
2310
+ #: models/bulkseo/Twittercard.php:225 models/bulkseo/Twittercard.php:261
2311
+ msgid "Description is generated automatically."
2312
+ msgstr ""
2313
+
2314
+ #: models/bulkseo/Metas.php:387
2315
+ #, php-format
2316
+ msgid "Meta Keywords is deactivated from %sSEO Settings > Metas%s."
2317
+ msgstr ""
2318
+
2319
+ #: models/bulkseo/Metas.php:422
2320
+ #, php-format
2321
+ msgid "Meta Canonical is deactivated from %sSEO Settings > Metas%s."
2322
+ msgstr ""
2323
+
2324
+ #: models/bulkseo/Opengraph.php:66
2325
+ msgid "OG title not empty"
2326
+ msgstr ""
2327
+
2328
+ #: models/bulkseo/Opengraph.php:68
2329
+ #, php-format
2330
  msgid ""
2331
+ "You need to have an Open Graph title for this post. %s It will help you "
2332
+ "control the way your post looks when people share this URL to Facebook, "
2333
+ "LinkedIN and other social networks. %s It's also important for SEO purposes."
2334
+ msgstr ""
2335
+
2336
+ #: models/bulkseo/Opengraph.php:71
2337
+ #, php-format
2338
+ msgid "OG title up to %s chars"
2339
+ msgstr ""
2340
+
2341
+ #: models/bulkseo/Opengraph.php:76
2342
+ msgid "OG description not empty"
2343
  msgstr ""
2344
 
2345
+ #: models/bulkseo/Opengraph.php:78
2346
+ #, php-format
2347
  msgid ""
2348
+ "You need to have an Open Graph description for this post. %s It will help "
2349
+ "you control the way your post looks when people share this URL to Facebook, "
2350
+ "LinkedIN and other social networks. %s It's also important for SEO purposes."
2351
+ msgstr ""
2352
+
2353
+ #: models/bulkseo/Opengraph.php:81
2354
+ #, php-format
2355
+ msgid "OG description up to %s chars"
2356
+ msgstr ""
2357
+
2358
+ #: models/bulkseo/Opengraph.php:86 view/SeoSettings/Metas.php:179
2359
+ msgid "OG Image"
2360
+ msgstr ""
2361
+
2362
+ #: models/bulkseo/Opengraph.php:87 models/bulkseo/Twittercard.php:84
2363
+ msgid "(featured image)"
2364
  msgstr ""
2365
 
2366
+ #: models/bulkseo/Opengraph.php:88
2367
+ #, php-format
2368
  msgid ""
2369
+ "Set a good looking image for your URL. It needs to look good in Facebook and "
2370
+ "LinkedIN feeds when people will share this URL. %s A great image will "
2371
+ "attract more clicks to your site."
2372
+ msgstr ""
2373
+
2374
+ #: models/bulkseo/Opengraph.php:102
2375
+ msgid "Open Graph is deactivated."
2376
+ msgstr ""
2377
+
2378
+ #: models/bulkseo/Opengraph.php:107
2379
+ msgid "Open Graph is not set correctly."
2380
  msgstr ""
2381
 
2382
  # @ squirrly-seo
2383
+ #: models/bulkseo/Opengraph.php:112
2384
+ #, fuzzy
2385
+ #| msgid "<< Leave it automatically"
2386
+ msgid "Open Graph is generated automatically."
2387
+ msgstr "<< Lass es automatisch"
2388
+
2389
+ #: models/bulkseo/Opengraph.php:115
2390
+ msgid "Open Graph is customized and set correctly."
2391
  msgstr ""
2392
 
2393
+ #: models/bulkseo/Opengraph.php:143 models/bulkseo/Opengraph.php:179
2394
+ #: models/bulkseo/Opengraph.php:211 models/bulkseo/Opengraph.php:247
2395
+ #: models/bulkseo/Opengraph.php:283
2396
+ #, php-format
2397
  msgid ""
2398
+ "Open Graph for this post type is deactivated from %sSEO Settings > Automation"
2399
+ "%s."
2400
+ msgstr ""
2401
+
2402
+ #: models/bulkseo/Opengraph.php:147 models/bulkseo/Opengraph.php:183
2403
+ #: models/bulkseo/Opengraph.php:215 models/bulkseo/Opengraph.php:251
2404
+ #: models/bulkseo/Opengraph.php:287
2405
+ #, php-format
2406
+ msgid "Open Graph is deactivated from %sSEO Settings > Social Media%s."
2407
+ msgstr ""
2408
+
2409
+ #: models/bulkseo/Opengraph.php:151 models/bulkseo/Opengraph.php:187
2410
+ #: models/bulkseo/Opengraph.php:219 models/bulkseo/Opengraph.php:255
2411
+ #: models/bulkseo/Opengraph.php:291 models/bulkseo/Twittercard.php:148
2412
+ #: models/bulkseo/Twittercard.php:184 models/bulkseo/Twittercard.php:216
2413
+ #: models/bulkseo/Twittercard.php:252 models/bulkseo/Twittercard.php:288
2414
+ #, php-format
2415
+ msgid "Social Media is deactivated from %sSEO Settings > Social Media%s."
2416
  msgstr ""
2417
 
2418
+ #: models/bulkseo/Twittercard.php:63
2419
+ msgid "TC title not empty"
2420
+ msgstr ""
2421
+
2422
+ #: models/bulkseo/Twittercard.php:65
2423
+ #, php-format
2424
  msgid ""
2425
+ "You need to have a title for the Twitter Card of this post. %s It will help "
2426
+ "you control the way your post looks when it's shared on Twitter. %s It's "
2427
+ "also important for SEO purposes."
2428
  msgstr ""
2429
 
2430
+ #: models/bulkseo/Twittercard.php:68
2431
+ #, php-format
2432
+ msgid "TC title up to %s chars"
2433
  msgstr ""
2434
 
2435
+ #: models/bulkseo/Twittercard.php:73
2436
+ msgid "TC Description not empty"
2437
  msgstr ""
2438
 
2439
+ #: models/bulkseo/Twittercard.php:75
2440
+ #, php-format
2441
+ msgid ""
2442
+ "You need to have a Twitter Card description for this post. %s It will help "
2443
+ "you control the way your post looks when people share this URL on Twitter. "
2444
+ "Good copywriting on your Twitter Card description will attract more clicks "
2445
+ "to your site. %s It's also important for SEO purposes."
2446
  msgstr ""
2447
 
2448
+ #: models/bulkseo/Twittercard.php:78
2449
+ #, php-format
2450
+ msgid "TC description up to %s chars"
2451
  msgstr ""
2452
 
2453
+ #: models/bulkseo/Twittercard.php:83
2454
+ msgid "TC Image"
2455
  msgstr ""
2456
 
2457
+ #: models/bulkseo/Twittercard.php:85
2458
+ #, php-format
2459
+ msgid ""
2460
+ "Set a good looking image for your URL. It needs to look good in Twitter "
2461
+ "feeds when people will share this URL. %s A great image will attract more "
2462
+ "clicks to your site."
2463
  msgstr ""
2464
 
2465
+ #: models/bulkseo/Twittercard.php:99
2466
+ msgid "Twitter Card is deactivated."
2467
  msgstr ""
2468
 
2469
+ #: models/bulkseo/Twittercard.php:104
2470
+ msgid "Twitter Card is not set correctly."
2471
  msgstr ""
2472
 
2473
+ #: models/bulkseo/Twittercard.php:109
2474
+ msgid "Twitter Card is generated automatically."
2475
+ msgstr ""
2476
+
2477
+ #: models/bulkseo/Twittercard.php:112
2478
+ msgid "Twitter Card is customized and set correctly."
2479
+ msgstr ""
2480
+
2481
+ #: models/bulkseo/Twittercard.php:140 models/bulkseo/Twittercard.php:176
2482
+ #: models/bulkseo/Twittercard.php:208 models/bulkseo/Twittercard.php:244
2483
+ #: models/bulkseo/Twittercard.php:280
2484
+ #, php-format
2485
  msgid ""
2486
+ "Twitter Card for this post type is deactivated from %sSEO Settings > "
2487
+ "Automation%s."
2488
  msgstr ""
2489
 
2490
+ #: models/bulkseo/Twittercard.php:144 models/bulkseo/Twittercard.php:180
2491
+ #: models/bulkseo/Twittercard.php:212 models/bulkseo/Twittercard.php:248
2492
+ #: models/bulkseo/Twittercard.php:284
2493
+ #, php-format
2494
+ msgid "Twitter Card is deactivated from %sSEO Settings > Social Media%s."
2495
  msgstr ""
2496
 
2497
+ #: models/bulkseo/Visibility.php:27
2498
+ msgid "Visible on Google"
2499
  msgstr ""
2500
 
2501
+ #: models/bulkseo/Visibility.php:28
2502
+ #, php-format
2503
+ msgid ""
2504
+ "Let Google Index this page. %s You need to make sure your settings are "
2505
+ "turned to green for the \"let Google index this page\" section of this URL's "
2506
+ "visibility settings."
2507
  msgstr ""
2508
 
2509
+ #: models/bulkseo/Visibility.php:31 view/Blocks/Snippet.php:1146
2510
+ msgid "Send Authority to this page"
2511
  msgstr ""
2512
 
2513
+ #: models/bulkseo/Visibility.php:32
2514
+ #, php-format
2515
+ msgid ""
2516
+ "Pass SEO authority to this page. %s If you want this page to really be "
2517
+ "visible, then you must allow the flow of authority from the previous pages "
2518
+ "to this one. %s The previous page means any page that leads to the current "
2519
+ "one. Passing authority from the previous page to this one will improve the "
2520
+ "current page's visibility. %s You need to make sure your settings are turned "
2521
+ "to green for the \"Pass Link Juice\" section of this URL's visibility "
2522
+ "settings."
2523
  msgstr ""
2524
 
2525
+ #: models/bulkseo/Visibility.php:35
2526
+ msgid "Add page in sitemap"
2527
  msgstr ""
2528
 
2529
+ #: models/bulkseo/Visibility.php:36
2530
+ #, php-format
2531
+ msgid ""
2532
+ "Turn the \"Show it in Sitemap.xml\" toggle to green (ON). %s That setting "
2533
+ "helps you control if the current URL should be found within the sitemap. "
2534
+ "There are pages you will want in the sitemap, and pages that you will want "
2535
+ "out of the sitemap. %s If your purpose is to maximize visibility for the "
2536
+ "current URL, then you need to add it to Sitemap."
2537
  msgstr ""
2538
 
2539
+ #: models/bulkseo/Visibility.php:50
2540
+ msgid "Some visibility options are inactive."
2541
  msgstr ""
2542
 
2543
+ #: models/bulkseo/Visibility.php:55
2544
+ msgid "Visibility is not set correctly."
2545
  msgstr ""
2546
 
2547
+ #: models/bulkseo/Visibility.php:59
2548
+ msgid "Visibility is set correctly."
2549
  msgstr ""
2550
 
2551
+ #: models/bulkseo/Visibility.php:87
2552
+ #, php-format
2553
+ msgid ""
2554
+ "Noindex for this post type is deactivated from %sSEO Settings > Automation%s."
2555
  msgstr ""
2556
 
2557
+ #: models/bulkseo/Visibility.php:91 models/bulkseo/Visibility.php:130
2558
+ #, php-format
2559
+ msgid "Robots Meta is deactivated from %sSEO Settings > SEO Metas%s."
2560
  msgstr ""
2561
 
2562
+ #: models/bulkseo/Visibility.php:95 models/bulkseo/Visibility.php:134
2563
+ #, php-format
2564
+ msgid "SEO Metas is deactivated from %sSEO Settings > SEO Metas%s."
2565
  msgstr ""
2566
 
2567
+ #: models/bulkseo/Visibility.php:126
2568
+ #, php-format
2569
+ msgid ""
2570
+ "Nofollow for this post type is deactivated from %sSEO Settings > Automation"
2571
+ "%s."
2572
  msgstr ""
2573
 
2574
+ #: models/bulkseo/Visibility.php:159
2575
+ #, php-format
2576
+ msgid ""
2577
+ "This post type is excluded from sitemap. See %sSEO Settings > Automation%s."
2578
  msgstr ""
2579
 
2580
+ #: models/bulkseo/Visibility.php:163
2581
+ #, php-format
2582
+ msgid "Sitemap XML is deactivated from %sSEO Settings > Sitemap XML%s."
2583
  msgstr ""
2584
 
2585
+ #: models/domain/Patterns.php:373
2586
+ msgid "Page"
2587
  msgstr ""
2588
 
2589
+ #: models/domain/Patterns.php:374
2590
+ msgid "of"
2591
+ msgstr ""
2592
+
2593
+ #: models/focuspages/Accuracy.php:21
2594
+ msgid "Rank accuracy"
2595
  msgstr ""
2596
 
2597
+ #: models/focuspages/Accuracy.php:22
2598
+ #, php-format
2599
+ msgid ""
2600
+ "Do you need better accuracy for your ranking results? %s Look at the "
2601
+ "Business Plan pricing for Squirrly SEO. %s The SERP Checker Available on "
2602
+ "FREE and PRO Plans is made via Search Console integration, which means that "
2603
+ "the information is not as accurate as possible and will not clearly depict "
2604
+ "the exact position in Google. %s Why? %s Google uses an average when it "
2605
+ "comes to the position. And it's not the true position. The average is made "
2606
+ "according to the positions that the page was found on when users did click "
2607
+ "on it. %s Also, the data inside Search Console is a bit old, so if you're "
2608
+ "actively trying to increase your rankings day in and day out, you need the "
2609
+ "Business Plan. %s If you just want casually to know your rankings and not "
2610
+ "care about FULL accuracy, then you can stick with your current plan."
2611
+ msgstr ""
2612
+
2613
+ #: models/focuspages/Accuracy.php:35 models/focuspages/Clicks.php:57
2614
+ #: models/focuspages/Ctr.php:57 models/focuspages/Impressions.php:57
2615
+ #: models/focuspages/Indexability.php:85
2616
+ msgid "Connect Google Search"
2617
+ msgstr ""
2618
+
2619
+ #: models/focuspages/Audit.php:34
2620
+ #, php-format
2621
+ msgid "Audit score is over %s"
2622
  msgstr ""
2623
 
2624
+ #: models/focuspages/Audit.php:37
2625
+ #, php-format
2626
+ msgid ""
2627
+ "Even though we recommend getting an Audit score of 84 or above, a score of "
2628
+ "70 will do. %s The Audit made by Squirrly takes a lot of things into "
2629
+ "account: blogging, SEO, social media, links, authority, traffic. All these "
2630
+ "aspects contribute directly or indirectly to the overall SEO of your site. "
2631
+ "%s Therefore, without a good score on your Audit it's quite probable for "
2632
+ "Google not to position your pages high enough, because overall your website "
2633
+ "is not doing good enough for it to be considered a priority. %s A page will "
2634
+ "not rank high if most of the website has low quality SEO and low marketing "
2635
+ "metrics."
2636
  msgstr ""
2637
 
2638
+ #: models/focuspages/Audit.php:40
2639
+ msgid "No duplicate titles"
2640
  msgstr ""
2641
 
2642
+ #: models/focuspages/Audit.php:41
2643
  #, php-format
2644
  msgid ""
2645
+ "Make sure that you don't have duplicate titles across pages from your site. "
2646
+ "%s If you do, then use canonical links to point the duplicate pages towards "
2647
+ "the original. %s Otherwise, if it's too hard to customize too many titles at "
2648
+ "once, simply use the Patterns feature from Squirrly. You'll be able to "
2649
+ "define patterns, so that your titles will seem to be unique. %s WordPress -> "
2650
+ "Squirrly -> SEO Settings. There you will find the Patterns tab."
2651
+ msgstr ""
2652
+
2653
+ #: models/focuspages/Audit.php:44
2654
+ msgid "No duplicate description"
2655
  msgstr ""
2656
 
2657
+ #: models/focuspages/Audit.php:45
2658
  #, php-format
2659
  msgid ""
2660
+ "Make sure that your pages do not have duplicate descriptions. %s This is "
2661
+ "super easy to fix if you're using the Patterns feature from Squirrly SEO, "
2662
+ "because it will generate your META description automatically from the "
2663
+ "content of your page (in case you didn't already place a custom "
2664
+ "description). %s If you want to fix this problem by giving the problematic "
2665
+ "pages their own custom descriptions: go to the Squirrly SEO Audit and see "
2666
+ "which pages have this problem. %s Or use a tool like ContentLook to identify "
2667
+ "the pages and then place tasks for your self to fix those issues at a later "
2668
+ "time."
2669
  msgstr ""
2670
 
2671
+ #: models/focuspages/Audit.php:48
2672
+ msgid "No empty titles"
2673
  msgstr ""
2674
 
2675
+ #: models/focuspages/Audit.php:49
2676
+ #, php-format
2677
+ msgid ""
2678
+ "Make sure that you do not have pages with empty titles. %s This means: pages "
2679
+ "where you haven't placed a meta title in your Snippet. %s Features like "
2680
+ "Patterns or Snippet from Squirrly SEO will help you easily fix this problem "
2681
+ "by either automating or customizing descriptions for your pages."
2682
  msgstr ""
2683
 
2684
+ #: models/focuspages/Audit.php:52
2685
+ msgid "No empty descriptions"
2686
+ msgstr ""
2687
+
2688
+ #: models/focuspages/Audit.php:54
2689
  #, php-format
2690
+ msgid ""
2691
+ "Make sure that you do not have pages with empty descriptions. %s This means: "
2692
+ "pages where you haven't placed a meta description. %s Features like Patterns "
2693
+ "or Snippet from Squirrly SEO will help you easily fix this problem by either "
2694
+ "automating or customizing descriptions for your pages."
2695
  msgstr ""
2696
 
2697
+ #: models/focuspages/Audit.php:57
2698
+ msgid "SEO speed"
2699
  msgstr ""
2700
 
2701
+ #: models/focuspages/Audit.php:58
2702
+ msgid "sec"
2703
  msgstr ""
2704
 
2705
+ #: models/focuspages/Audit.php:59
2706
+ #, php-format
2707
+ msgid ""
2708
+ "You need to get good loading times for your pages. %s Good loading times "
2709
+ "will help you rank higher in Google, while pages that load very slowly will "
2710
+ "drag you down in search results."
2711
  msgstr ""
2712
 
2713
+ #: models/focuspages/Audit.php:62
2714
+ msgid "Mobile-friendly"
2715
  msgstr ""
2716
 
2717
+ #: models/focuspages/Audit.php:63
2718
+ #, php-format
2719
+ msgid ""
2720
+ "Your website must be mobile friendly. %s It used to be an optional thing for "
2721
+ "Google until now, but it made it quite mandatory. %s Google prefers to "
2722
+ "display sites which are mobile friendly higher in search results, because "
2723
+ "most people search using mobile devices these days."
2724
  msgstr ""
2725
 
2726
+ #: models/focuspages/Audit.php:78
2727
+ msgid "Go to Audit"
2728
  msgstr ""
2729
 
2730
+ #: models/focuspages/Audit.php:82
2731
+ msgid "Note! The audit is not ready yet"
2732
  msgstr ""
2733
 
2734
+ #: models/focuspages/Audit.php:83
2735
+ msgid "Request a new audit"
2736
  msgstr ""
2737
 
2738
+ #: models/focuspages/Audit.php:118 models/focuspages/Audit.php:141
2739
+ #: models/focuspages/Audit.php:164 models/focuspages/Audit.php:187
2740
+ msgid "URL"
2741
  msgstr ""
2742
 
2743
+ #: models/focuspages/Authority.php:32
2744
+ #, php-format
2745
+ msgid "Authority over %s"
2746
+ msgstr ""
2747
+
2748
+ #: models/focuspages/Authority.php:33
2749
+ msgid "Authority"
2750
+ msgstr ""
2751
+
2752
+ #: models/focuspages/Authority.php:34
2753
+ #, php-format
2754
+ msgid ""
2755
+ "Your Page Authority Needs to be over %s to complete this task. %s To do that "
2756
+ "you'll need good metrics for all the tasks in the Traffic Health section of "
2757
+ "Focus Pages. %s You'll also need inner links, social media signals and "
2758
+ "backlinks from 3rd party sites."
2759
+ msgstr ""
2760
+
2761
+ #: models/focuspages/Backlinks.php:45
2762
+ #, php-format
2763
+ msgid "At Least %s MOZ BackLinks"
2764
+ msgstr ""
2765
+
2766
+ #: models/focuspages/Backlinks.php:46 models/focuspages/Backlinks.php:57
2767
+ msgid "backlinks"
2768
+ msgstr ""
2769
+
2770
+ #: models/focuspages/Backlinks.php:51
2771
+ #, php-format
2772
+ msgid "At Least %s Referring Domains"
2773
+ msgstr ""
2774
+
2775
+ #: models/focuspages/Backlinks.php:52
2776
+ msgid "unique domains"
2777
+ msgstr ""
2778
+
2779
+ #: models/focuspages/Backlinks.php:56
2780
+ #, php-format
2781
+ msgid "At Least %s Majestic SEO Links"
2782
+ msgstr ""
2783
+
2784
+ # @ squirrly-seo
2785
+ #: models/focuspages/Clicks.php:42
2786
+ #, fuzzy
2787
+ #| msgid "Tool for Search Engines"
2788
+ msgid "Clicks from Search Engine"
2789
+ msgstr "Tool für Suchmaschinen"
2790
+
2791
+ # @ squirrly-seo
2792
+ #: models/focuspages/Clicks.php:60 models/focuspages/Clicks.php:71
2793
+ #: models/focuspages/Content.php:82 models/focuspages/Ctr.php:60
2794
+ #: models/focuspages/Ctr.php:71 models/focuspages/Image.php:81
2795
+ #: models/focuspages/Impressions.php:60 models/focuspages/Impressions.php:71
2796
+ #: models/focuspages/Keyword.php:83 models/focuspages/Keyword.php:95
2797
+ #: models/focuspages/Strategy.php:99 view/Research/Briefcase.php:237
2798
+ msgid "Do a research"
2799
+ msgstr ""
2800
+
2801
+ #: models/focuspages/Clicks.php:73 models/focuspages/Content.php:84
2802
+ #: models/focuspages/Ctr.php:73 models/focuspages/Image.php:87
2803
+ #: models/focuspages/Impressions.php:73 models/focuspages/Keyword.php:96
2804
+ #: models/focuspages/Strategy.php:101
2805
+ msgid "Optimize for a keyword"
2806
+ msgstr ""
2807
+
2808
+ #: models/focuspages/Content.php:39
2809
+ #, php-format
2810
+ msgid "Optimize to %s"
2811
+ msgstr ""
2812
+
2813
+ #: models/focuspages/Content.php:41
2814
+ #, php-format
2815
+ msgid ""
2816
+ "Make sure this Focus Page is optimized to 100%% using the Squirrly SEO Live "
2817
+ "Assistant. %s As you can see clearly on Google search result pages, Googles "
2818
+ "tries to find the closest match (inside web content) to what the user "
2819
+ "searched for. %s That is why using this method of optimizing a page as "
2820
+ "outlined by the Live Assistant feature is mandatory. %s Don't worry about "
2821
+ "over-optimizing anything, as the Live Assistant checks for many over-"
2822
+ "optimization traps you may fall into."
2823
+ msgstr ""
2824
+
2825
+ #: models/focuspages/Content.php:44
2826
+ msgid "Snippet is green"
2827
+ msgstr ""
2828
+
2829
+ #: models/focuspages/Content.php:45
2830
+ #, php-format
2831
+ msgid ""
2832
+ "The tasks inside the Snippet section of the Focus Pages feature must all be "
2833
+ "turned green. %s Why? %s If the Snippet elements are Not green, then your "
2834
+ "Focus Page is not 100%% optimized. %s We've built this SEO Content section "
2835
+ "especially because we wanted to help you understand that there's a lot more "
2836
+ "to On-Page SEO than just a content analysis, or a snippet. You need all "
2837
+ "these elements working together in order to achieve high rankings."
2838
+ msgstr ""
2839
+
2840
+ #: models/focuspages/Content.php:48
2841
+ msgid "Platform SEO is green"
2842
+ msgstr ""
2843
+
2844
+ #: models/focuspages/Content.php:49
2845
+ #, php-format
2846
+ msgid ""
2847
+ "Make sure that the Platform SEO section is green for this Focus Page. %s "
2848
+ "Because WordPress is such a vast CMS with many customization possibilities, "
2849
+ "it happens to many website owners, business owners and developers, that "
2850
+ "custom post types from their site remain completely without SEO codes and "
2851
+ "other important settings. %s This task makes sure that everything is "
2852
+ "properly set up."
2853
+ msgstr ""
2854
+
2855
+ #: models/focuspages/Content.php:52
2856
+ msgid "Fresh content update"
2857
  msgstr ""
2858
 
2859
+ #: models/focuspages/Content.php:54
2860
+ #, php-format
2861
+ msgid ""
2862
+ "Last Update Date for your Content: needs to be in the last 3 months. %s If "
2863
+ "it's not, then go and edit your page. %s Google prefers pages where the "
2864
+ "website owners keep updating the content. %s Why? %s Because it's one of the "
2865
+ "easiest ways to ensure that the content on the page keeps being relevant."
2866
  msgstr ""
2867
 
2868
+ #: models/focuspages/Content.php:78 view/Research/Briefcase.php:226
2869
+ #: view/Research/HistoryDetails.php:74 view/Research/ResearchDetails.php:36
2870
+ msgid "Optimize for this"
2871
  msgstr ""
2872
 
2873
+ #: models/focuspages/Ctr.php:41
2874
+ msgid "Clickthrough rate"
2875
  msgstr ""
2876
 
2877
+ #: models/focuspages/Ctr.php:42
2878
+ #, php-format
2879
+ msgid ""
2880
+ "CTR is the number of clicks that your page receives divided by the number of "
2881
+ "times your page appeared in search results: clicks ÷ impressions = CTR. %s "
2882
+ "For example, if you had 5 clicks and 100 impressions, then your CTR would be "
2883
+ "5%%. %s Keep the CTR above %s with enhanced headlines."
2884
  msgstr ""
2885
 
2886
+ #: models/focuspages/Image.php:53
2887
+ msgid "Keyword in filename"
2888
  msgstr ""
2889
 
2890
+ #: models/focuspages/Image.php:56
2891
+ #, php-format
2892
+ msgid ""
2893
+ "Your filename for one of the images in this Focus Page should be: %s keyword."
2894
+ "jpg %s Download a relevant image from your page. Change the filename. Then "
2895
+ "re-upload with the SEO filename and add it your page's content again. %s "
2896
+ "It's best to keep this at only one filename which contains the main keyword "
2897
+ "of the page. %s Why? %s Because Google could consider over-optimization if "
2898
+ "you used it more than once."
2899
  msgstr ""
2900
 
2901
+ #: models/focuspages/Image.php:77 models/focuspages/Snippet.php:129
2902
+ msgid "Edit your snippet"
2903
  msgstr ""
2904
 
2905
+ #: models/focuspages/Image.php:106
2906
+ msgid "Optimize the post first using a Keyword from Squirrly Briefcase"
2907
  msgstr ""
2908
 
2909
+ #: models/focuspages/Impressions.php:42
2910
+ msgid "Search Results Impressions"
2911
  msgstr ""
2912
 
2913
+ #: models/focuspages/Indexability.php:47
2914
+ msgid "Yes, do index"
2915
  msgstr ""
2916
 
2917
+ #: models/focuspages/Indexability.php:50
2918
+ #, php-format
2919
+ msgid ""
2920
+ "To turn this task to green, go and look at all the places where you could "
2921
+ "have added instructions for Google not to index this page from your site. %s "
2922
+ "Make sure that there is no such instruction added to WordPress -> Settings, "
2923
+ "or in a theme, or in a plugin, or in Squirrly SEO's Snippet for this page. "
2924
+ "Also, make sure you don't block this page in your robots.txt file. %s "
2925
+ "Sometimes, you will want certain pages from your site not to be indexed. Now "
2926
+ "is not the case, however. %s If this task turns green, then it means that "
2927
+ "you did not specify to Google that it should NOT index the page. %s "
2928
+ "Therefore, you allow Google to index the page. %s Since this is a Focus "
2929
+ "Page, you must allow Google to index it, in order for it to appear in search "
2930
+ "result pages."
2931
  msgstr ""
2932
 
2933
+ #: models/focuspages/Indexability.php:53
2934
+ msgid "Yes, do follow"
2935
  msgstr ""
2936
 
2937
+ #: models/focuspages/Indexability.php:56
2938
+ #, php-format
2939
+ msgid ""
2940
+ "To turn this task to green, make sure that you do NOT have a no-follow "
2941
+ "attribute for this Focus Page. %s This task gets verified from multiple "
2942
+ "sources. %s However, if you want to be 100%% certain in the future that "
2943
+ "everything is perfect, use just Squirrly SEO, because it will ease both your "
2944
+ "setup and the system check. %s With Squirrly SEO, you could easily check "
2945
+ "this setting in the Snippet section. %s Many themes and plugins could "
2946
+ "interfere with settings."
2947
  msgstr ""
2948
 
2949
+ #: models/focuspages/Indexability.php:59
2950
+ msgid "Present in sitemap"
2951
  msgstr ""
2952
 
2953
+ #: models/focuspages/Indexability.php:60
2954
+ #, php-format
2955
+ msgid ""
2956
+ "Checks whether or not your page is available in your XML Sitemap. %s Use the "
2957
+ "Sitemap from WordPress -> Squirrly -> SEO Settings %s Make sure this Focus "
2958
+ "Page is included in the sitemap generated by Squirrly SEO. %s In the best "
2959
+ "practices section you can find ideas for why it can make sense to remove "
2960
+ "pages from your sitemap."
2961
  msgstr ""
2962
 
2963
+ #: models/focuspages/Indexability.php:63
2964
+ msgid "Manual index request"
2965
  msgstr ""
2966
 
2967
+ #: models/focuspages/Indexability.php:64
2968
+ #, php-format
2969
+ msgid ""
2970
+ "Click the button to ask Google to re-index this page. %s Disclaimer: This "
2971
+ "task will automatically turn to green once you click on the button and it "
2972
+ "takes you to Google Search Console. It's up to you to make 100%% sure that "
2973
+ "you do tell Google to either index or re-index this page. %s Perform a "
2974
+ "manual request for Google to re-index this page. %s This is super important "
2975
+ "to do whenever you make important changes to your pages. Otherwise, Google "
2976
+ "will still have the old version of your page. %s If Google keeps having the "
2977
+ "older version, then it doesn't matter if you've improved the page. %s When "
2978
+ "you click the Ask Google to Re-Index button, Squirrly will use the Google "
2979
+ "Search Console API to send Google the request on your behalf."
2980
+ msgstr ""
2981
+
2982
+ #: models/focuspages/Indexability.php:67 view/Blocks/Snippet.php:308
2983
+ msgid "Canonical link"
2984
  msgstr ""
2985
 
2986
+ #: models/focuspages/Indexability.php:70
2987
+ #, php-format
2988
+ msgid ""
2989
+ "This page should have a canonical link to itself, indicating that it is "
2990
+ "indeed the original content. %s You can not have pages with canonical links "
2991
+ "to other sites and pages, because you could not rank for them. Why? Because "
2992
+ "a canonical link to another URL would mean that the other URL is the one "
2993
+ "worth indexing. (the original one) %s To turn this task to green, go and "
2994
+ "make sure that this page does not have a canonical link attribute pointing "
2995
+ "to another page. %s You can easily control this is in the future by using "
2996
+ "the Snippet feature of Squirrly SEO."
2997
  msgstr ""
2998
 
2999
+ #: models/focuspages/Indexability.php:73
3000
+ msgid "Permalink structure is good"
3001
  msgstr ""
3002
 
3003
+ #: models/focuspages/Indexability.php:75
3004
+ #, php-format
3005
+ msgid ""
3006
+ "Make your LINKS SEO-Friendly. %s WordPress -> Settings %s That is where "
3007
+ "WordPress allows you to change the permalink structure. %s Your URLs (the "
3008
+ "links from your site) should be super easy to read. This makes your site "
3009
+ "Human-friendly as well."
3010
  msgstr ""
3011
 
3012
+ #: models/focuspages/Indexability.php:90
3013
+ msgid "Ask Google to Re-Index"
3014
  msgstr ""
3015
 
3016
+ #: models/focuspages/Innerlinks.php:48
3017
+ #, php-format
3018
+ msgid "Get %s inner links"
3019
  msgstr ""
3020
 
3021
+ #: models/focuspages/Innerlinks.php:49
3022
+ msgid "inner links"
3023
  msgstr ""
3024
 
3025
+ #: models/focuspages/Innerlinks.php:51
3026
+ #, php-format
3027
+ msgid ""
3028
+ "Get %s Inner Links %s Recommended is: %s %s Inner Links are links that you "
3029
+ "send from one URL of your site to another URL of your site. %s Since your "
3030
+ "Focus Pages are the most important pages in your site, you should make sure "
3031
+ "that you link to them from many pages of your website. %s Follow the best "
3032
+ "practices for this. (highlighted in the Best Practices section)"
3033
  msgstr ""
3034
 
3035
+ #: models/focuspages/Innerlinks.php:67
3036
+ msgid "Build with Blogging Assistant"
3037
  msgstr ""
3038
 
3039
+ #: models/focuspages/Keyword.php:48
3040
+ msgid "Competition is low"
3041
  msgstr ""
3042
 
3043
+ #: models/focuspages/Keyword.php:51
3044
+ #, php-format
3045
+ msgid ""
3046
+ "To complete this task you must make sure that the main keyword you're "
3047
+ "optimizing this Focus Page for has low competition. %s The Squirrly SEO "
3048
+ "software suite uses our proprietary Market Intelligence feature to determine "
3049
+ "the chance that your site has of outranking the current TOP 10 of Google for "
3050
+ "the desired keyword you're targeting. %s If you really want to have a clear "
3051
+ "shot at ranking, make sure the competition is low for the keyword you choose."
3052
  msgstr ""
3053
 
3054
+ #: models/focuspages/Keyword.php:54
3055
+ msgid "Search volume is big enough"
 
3056
  msgstr ""
3057
 
3058
+ #: models/focuspages/Keyword.php:56
3059
+ #, php-format
3060
+ msgid ""
3061
+ "To turn this task to green, go and find a keyword that has a good search "
3062
+ "volume. (meaning that many people search on Google for this keyword every "
3063
+ "single month). %s The Research features from Squirrly SEO will indicate if "
3064
+ "the volume is big enough. %s Since these are the most important pages on "
3065
+ "your website, you need to make sure that you get the maximum number of "
3066
+ "people possible to find this page. %s If you target keyword searches with "
3067
+ "low volumes, then you'll end up having just 2 or 3 people every month "
3068
+ "visiting this page. And then all the effort will have been for nothing."
3069
  msgstr ""
3070
 
3071
+ #: models/focuspages/Keyword.php:59
3072
+ msgid "Trend is decent"
3073
  msgstr ""
3074
 
3075
+ #: models/focuspages/Keyword.php:61
3076
  #, php-format
3077
+ msgid ""
3078
+ "Trend levels required to get the Green Check on this task: %s - Steady %s - "
3079
+ "Going Up %s - Sky-rocketing %s we take the trend from the previous 3 months. "
3080
+ "%s If you target a search query with a bad trend you'll end up seeing little "
3081
+ "traffic to this page in the long run. %s Why ? A declining trend shows that "
3082
+ "Google Users are losing interest in that topic or keyword and will continue "
3083
+ "to do so in the future. %s Therefore, even though you could get much traffic "
3084
+ "right now after you rank this page, in the near future you'll get very "
3085
+ "little traffic even if you'd end up on Position 1 in Google Search."
3086
  msgstr ""
3087
 
3088
+ #: models/focuspages/Keyword.php:80
3089
+ msgid "Find Better Keywords"
3090
  msgstr ""
3091
 
3092
+ #: models/focuspages/Length.php:38
 
3093
  #, php-format
3094
+ msgid "Write %s words"
3095
+ msgstr ""
3096
+
3097
+ #: models/focuspages/Length.php:39
3098
+ msgid "words"
3099
  msgstr ""
3100
 
3101
+ #: models/focuspages/Length.php:41
3102
  #, php-format
3103
  msgid ""
3104
+ "For Focus Pages it's mandatory, in our opinion, to have at least 1,500 "
3105
+ "words. %s Go and edit the page. %s I know: for some of you it might sound "
3106
+ "tough, but Google places longer, more valuable pages higher in search "
3107
+ "positions. %s You don't necessarily have to get 1,500 words on this page for "
3108
+ "it to rank in TOP 10 on Google. However, getting this task completed ensures "
3109
+ "that your chances of ranking will be very high."
3110
  msgstr ""
3111
 
3112
+ #: models/focuspages/Length.php:44
3113
+ msgid "Reader's Experience"
 
 
 
3114
  msgstr ""
3115
 
3116
+ #: models/focuspages/Length.php:45
3117
+ msgid "minutes average"
 
3118
  msgstr ""
3119
 
3120
+ #: models/focuspages/Length.php:46
3121
+ #, php-format
3122
+ msgid ""
3123
+ "Get an average time on page of minimum 2 minutes for this focus page. You "
3124
+ "can do this by editing the content and making it more appealing to visitors. "
3125
+ "%s We're looking at the Average Time On Page for this page. %s Why? %s "
3126
+ "Because, sometimes website owners can be tempted to make the pages longer in "
3127
+ "order to get many words on a page. They make them longer by increasing "
3128
+ "wordiness. %s Over 1,500 words / page can give you much better SEO results. "
3129
+ "However, making it longer does not mean you should make it boring. %s In "
3130
+ "order to check that the length of the page was increased properly, we also "
3131
+ "take into account if website visitors love this page."
3132
  msgstr ""
3133
 
3134
+ #: models/focuspages/Length.php:64
3135
+ msgid "Edit Page"
3136
  msgstr ""
3137
 
3138
+ #: models/focuspages/Nofollow.php:57
3139
+ msgid "Maintain authority"
 
3140
  msgstr ""
3141
 
3142
+ #: models/focuspages/Nofollow.php:58
3143
+ msgid "External Links"
3144
  msgstr ""
3145
 
3146
+ #: models/focuspages/Nofollow.php:60 models/focuspages/Ranking.php:24
3147
  #, php-format
3148
  msgid ""
3149
+ "TLDR: All outbound links need to have no-follow attribute. %s You've worked "
3150
+ "hard on your Focus Page. %s Now make sure that you're not letting that hard "
3151
+ "work go to waste, by sending out all your authority and Link Juice over to "
3152
+ "other pages from the web. %s The Focus Page needs to be the final page that "
3153
+ "Google Follows. It's an \"All Roads Lead to Rome\" kind of scenario. %s If "
3154
+ "you want your focus pages to get ranked better and have authority make sure "
3155
+ "that ALL outbound links have a no-follow attribute attached to them."
3156
+ msgstr ""
3157
+
3158
+ #: models/focuspages/Onpage.php:51
3159
+ msgid "Enhance your sitemap"
3160
  msgstr ""
3161
 
3162
+ #: models/focuspages/Onpage.php:52
3163
  #, php-format
3164
  msgid ""
3165
+ "Add images / videos to it. %s Squirrly SEO makes it super easy for you to "
3166
+ "enhance your XML sitemap. %s Make sure you activate the sitemap from "
3167
+ "%sSquirrly > SEO Settings > Bulk SEO%s for this post. %s Include the images "
3168
+ "and videos into sitemap from %sSquirrly > SEO Settings > Sitemap XML%s"
3169
  msgstr ""
3170
 
3171
+ #: models/focuspages/Onpage.php:55
3172
+ msgid "Post Type settings activated"
3173
  msgstr ""
3174
 
3175
+ #: models/focuspages/Onpage.php:56
3176
+ #, php-format
3177
+ msgid ""
3178
+ "Are the SEO Settings from Squirrly SEO activated for the post type of this "
3179
+ "particular Focus Page? %s This is what we're checking with this task. %s "
3180
+ "Why? %s Some of the times, we're seeing that people don't get good enough "
3181
+ "results with Google rankings simply because they do not have the SEO "
3182
+ "settings activated for their current post type. %s Many WordPress sites "
3183
+ "employ the use of custom post types. Your \"Events\" page or \"Real Estate\" "
3184
+ "page could be a different post type from general \"Pages\" or \"Posts\" in "
3185
+ "WordPress. %s To turn this task to green, go and add this post type (%s) in "
3186
+ "%sSquirrly SEO Automation%s."
3187
  msgstr ""
3188
 
3189
+ #: models/focuspages/Onpage.php:59
3190
+ msgid "Patterns activated"
 
 
3191
  msgstr ""
3192
 
3193
+ #: models/focuspages/Onpage.php:60
3194
+ #, php-format
3195
+ msgid ""
3196
+ "To turn this task to green, go and activate the Patterns from Squirrly SEO "
3197
+ "for the post type of this Focus Page. %s With this task, we're looking to "
3198
+ "see if the SEO Patterns from Squirrly are activated for the post type of "
3199
+ "this Focus Page. %s Similar to the previous task with \"Post Type Settings "
3200
+ "Activated\". There are some cases in which this double check is necessary. "
3201
+ "%s It's for your ranking safety."
3202
  msgstr ""
3203
 
3204
+ #: models/focuspages/Onpage.php:63 view/SeoSettings/Robots.php:16
3205
+ msgid "Robots File"
3206
  msgstr ""
3207
 
3208
+ #: models/focuspages/Onpage.php:65
3209
+ #, php-format
3210
+ msgid ""
3211
+ "You have a certain definition for your Robots.txt file made in Squirrly SEO "
3212
+ "or in another plugin. %s Make sure that the final version of robots.txt that "
3213
+ "gets rendered when the file is loaded is the one you had intended. %s "
3214
+ "Sometimes, other plugins or themes can interfere and ruin the output of the "
3215
+ "robots file. Sometimes it can even be that you have a robots.txt file placed "
3216
+ "on your root directory (in such case: remove that file. hard-coding things "
3217
+ "like that is bad practice!). %s To do this: look at the definition you've "
3218
+ "made inside your plugin. Then, look at the robots.txt from your site. See if "
3219
+ "the text inside these two places is identical. If it is identical, "
3220
+ "everything is Perfect!"
3221
  msgstr ""
3222
 
3223
+ #: models/focuspages/Onpage.php:78
3224
+ msgid "Go to SEO Settings"
3225
  msgstr ""
3226
 
3227
+ #: models/focuspages/Ranking.php:23
3228
+ msgid "Nofollow on external links"
3229
  msgstr ""
3230
 
3231
+ #: models/focuspages/Snippet.php:69 models/focuspages/Snippet.php:180
3232
+ #: models/focuspages/Snippet.php:202 view/Blocks/Snippet.php:181
3233
+ #: view/Blocks/Snippet.php:579 view/Blocks/Snippet.php:834
3234
+ #: view/FocusPages/Addpage.php:43 view/SeoSettings/Automation.php:80
3235
+ #: view/SeoSettings/Bulkseo.php:133 view/SeoSettings/Metas.php:152
3236
+ msgid "Title"
3237
  msgstr ""
3238
 
3239
+ #: models/focuspages/Snippet.php:72
3240
+ #, php-format
3241
+ msgid ""
3242
+ "To turn this task to green, go and define a title for this page. You can "
3243
+ "easily do this by using the Snippet from Squirrly SEO. %s Make sure that you "
3244
+ "have a Title defined for your Focus Page. %s Not having a title defined is "
3245
+ "bad for both search engines and Humans. %s Why? %s It's weird for someone to "
3246
+ "try to figure out if they landed on your Pricing page, and not get a clear "
3247
+ "answer. If you have multiple pricing pages (in case your site displays "
3248
+ "multiple products) then your title should only contain the brand name of "
3249
+ "that product."
3250
+ msgstr ""
3251
+
3252
+ #: models/focuspages/Snippet.php:75 models/focuspages/Snippet.php:181
3253
+ #: models/focuspages/Snippet.php:203 view/Blocks/Snippet.php:622
3254
+ #: view/Blocks/Snippet.php:877 view/SeoSettings/Automation.php:89
3255
+ #: view/SeoSettings/Metas.php:161
3256
+ msgid "Description"
3257
  msgstr ""
3258
 
3259
+ #: models/focuspages/Snippet.php:77
3260
+ #, php-format
3261
+ msgid ""
3262
+ "To turn this task to green, go and define a Meta description for this page. "
3263
+ "You can easily do this by using the Snippet from Squirrly SEO. %s Make sure "
3264
+ "that you have a META description set up for this Focus Page. %s The meta "
3265
+ "description is very important for showing others the value they can find by "
3266
+ "clicking to go to your page. %s Think of it as an awesome ad that gets "
3267
+ "people excited enough that they visit your page after reading it. %s "
3268
+ "Sometimes, Google displays the exact META description that you create inside "
3269
+ "the search result pages. Use great descriptions for pages on your site to "
3270
+ "boost CTR (click-through rates)."
3271
+ msgstr ""
3272
+
3273
+ #: models/focuspages/Snippet.php:86
3274
+ #, php-format
3275
+ msgid ""
3276
+ "Same as with the title task. %s If a user reads the description of your page "
3277
+ "on Google, but cannot find the keyword they searched for in that text, then "
3278
+ "they'd have very low chances of actually clicking and visiting your page. %s "
3279
+ "They'd go to the next page ranked on Google for that keyword. %s Think about "
3280
+ "this: Google itself is trying more and more to display keywords in the "
3281
+ "description of the pages it bring to TOP 10. It's pretty clear they care a "
3282
+ "lot about this, because that's what people want to find on the search engine."
3283
  msgstr ""
3284
 
3285
+ #: models/focuspages/Snippet.php:89
3286
+ msgid "Open Graph - full definition"
3287
  msgstr ""
3288
 
3289
+ #: models/focuspages/Snippet.php:91
3290
+ #, php-format
3291
+ msgid ""
3292
+ "To turn this task to green, you can easily use the Snippet from Squirrly SEO "
3293
+ "to get all the definitions in place. %s With this task, we make sure that "
3294
+ "you have the full Open Graph definitions created for this Focus Page. %s "
3295
+ "There are many things which could interfere with the code, there are times "
3296
+ "when you could forget setting some of the elements up, so Squirrly SEO helps "
3297
+ "you make sure that ALL the og tags are present. %s And yes, this is relevant "
3298
+ "for your search engine position placements."
3299
  msgstr ""
3300
 
3301
+ #: models/focuspages/Snippet.php:94
3302
+ msgid "Twitter Cards - full definition"
3303
  msgstr ""
3304
 
3305
+ #: models/focuspages/Snippet.php:96
3306
+ #, php-format
3307
+ msgid ""
3308
+ "To turn this task to green, you can easily use the Snippet from Squirrly SEO "
3309
+ "to get all the definitions in place. %s Checking to make sure that your "
3310
+ "Twitter Cards definitions are made properly. %s Same as with the Open Graph "
3311
+ "task, Squirrly SEO makes sure to check for all the required definitions, so "
3312
+ "that you won't miss a beat."
3313
  msgstr ""
3314
 
3315
+ #: models/focuspages/Snippet.php:99
3316
+ msgid "JSON-LD definition"
3317
  msgstr ""
3318
 
3319
+ #: models/focuspages/Snippet.php:100
3320
+ #, php-format
3321
+ msgid ""
3322
+ "To turn this task to green, you can easily use the JSON-LD section inside "
3323
+ "Squirrly -> SEO Settings. %s Make sure that you complete all fields with the "
3324
+ "proper information. %s This gives important Semantic context to Google and "
3325
+ "it plays a role in determining how high your page should be placed in search "
3326
+ "rankings. %s You can validate your existing JSON-LD with: %shttps://search."
3327
+ "google.com/structured-data/testing-tool%s"
3328
  msgstr ""
3329
 
3330
+ #: models/focuspages/Snippet.php:103
3331
+ msgid "Customized"
3332
  msgstr ""
3333
 
3334
+ #: models/focuspages/Snippet.php:104
3335
+ #, php-format
3336
+ msgid ""
3337
+ "The Snippets of your most important pages should be customized. %s Use the "
3338
+ "Snippet from Squirrly SEO to customize the meta settings, the open graph, "
3339
+ "etc. for this page. %s Since Focus Pages are the most important pages on "
3340
+ "your site, you'll want people to love the search engine listings that you "
3341
+ "build for this page. %s Therefore, you should define a custom SEO listing to "
3342
+ "improve the number of clicks you get when people DO find your page on search "
3343
+ "engines. %s NOTE: sometimes Google tries to create automated snippets and "
3344
+ "display those, but it's just an experiment they run. Most of the times, your "
3345
+ "own custom snippet will be the one that gets displayed."
3346
  msgstr ""
3347
 
3348
+ #: models/focuspages/Snippet.php:182 models/focuspages/Snippet.php:204
3349
+ msgid "Image"
3350
  msgstr ""
3351
 
3352
+ #: models/focuspages/Social.php:44
3353
  #, php-format
3354
+ msgid "%s Shares"
3355
+ msgstr ""
3356
+
3357
+ #: models/focuspages/Social.php:45
3358
+ msgid "social share"
3359
  msgstr ""
3360
 
3361
+ #: models/focuspages/Social.php:47
3362
  #, php-format
3363
  msgid ""
3364
+ "This task only tracks shares from trackable sources. %s Twitter and LinkedIN "
3365
+ "share counts are no longer available. %s Of course, for Twitter you can "
3366
+ "always pay Twitter directly for API access, in which case we could give you "
3367
+ "a guide on how to integrate your Twitter API with our Focus Pages audit "
3368
+ "services. %s %shttps://developer.twitter.com/en/pricing/search-fullarchive%s"
3369
  msgstr ""
3370
 
3371
+ #: models/focuspages/Social.php:56
3372
+ msgid "Go to Social Media Settings"
3373
  msgstr ""
3374
 
3375
+ #: models/focuspages/Strategy.php:60
3376
+ msgid "Add keyword to Briefcase"
3377
  msgstr ""
3378
 
3379
+ # @ squirrly-seo
3380
+ #: models/focuspages/Strategy.php:61
3381
+ #, fuzzy
3382
+ #| msgid "Tips: 2-4 keywords"
3383
+ msgid "keywords"
3384
+ msgstr "Tipp: Länge 2-4 Schlüsselwörter"
3385
 
3386
+ #: models/focuspages/Strategy.php:62
3387
  #, php-format
3388
+ msgid ""
3389
+ "Go add a keyword to your Briefcase. %s The Briefcase is the command center "
3390
+ "for your SEO operations. Manage your keywords in briefcase, so that you'll "
3391
+ "always have quick access to them. You'll always know what your SEO Strategy "
3392
+ "is all about. %s Plus, adding keywords to Briefcase will make it very easy "
3393
+ "for you to collaborate with other people from your team, freelancers, "
3394
+ "agencies or partners. %s Never lose the amazing keywords you find through "
3395
+ "the Squirrly SEO Keyword Research tool."
3396
  msgstr ""
3397
 
3398
+ #: models/focuspages/Strategy.php:65
3399
+ msgid "Add SEO Context"
3400
  msgstr ""
3401
 
3402
+ #: models/focuspages/Strategy.php:68
3403
+ #, php-format
3404
+ msgid ""
3405
+ "Optimize to %s for a secondary keyword. %s Squirrly SEO's Live Assistant "
3406
+ "allows you to optimize for multiple keywords that you have placed in your "
3407
+ "Briefcase. %s Use a couple of additional keywords for your Focus Page which "
3408
+ "help Google understand the exact topic and context of your page. %s If you "
3409
+ "added the keywords 'political party' to 'black panther', you'd make a clear "
3410
+ "hint to Google that your page is about the Black Panther political party, "
3411
+ "not Black Panther, the Marvel Movie. %s Or add 'places to eat' to a page "
3412
+ "about your Local Restaurant in San Diego. That will give clearer context to "
3413
+ "Google that your page really is about a restaurant where people can dine."
3414
  msgstr ""
3415
 
3416
+ #: models/focuspages/Strategy.php:72
3417
+ msgid "Labels Exist"
3418
  msgstr ""
3419
 
3420
+ #: models/focuspages/Strategy.php:73
3421
+ msgid "labels"
 
3422
  msgstr ""
3423
 
3424
+ #: models/focuspages/Strategy.php:74
3425
+ #, php-format
3426
+ msgid ""
3427
+ "To turn this task to green, go and add a label to the keyword that you've "
3428
+ "used as main keyword for this Focus Page. %s Make sure that you keep "
3429
+ "creating new labels as you're finding more keywords to target with your "
3430
+ "website. %s If you're unsure regarding keyword research, go to the Best "
3431
+ "Practices section of Focus Pages. %s Organize all the Keywords that you plan "
3432
+ "to use for your website with Briefcase Labels. %s This task helps you make "
3433
+ "sure that the main keyword for this Focus Page has been organized clearly "
3434
+ "inside your SEO Strategy. That's what Briefcase Labels are all about."
3435
  msgstr ""
3436
 
3437
+ #: models/focuspages/Strategy.php:89
3438
+ msgid "Manage Strategy"
3439
  msgstr ""
3440
 
3441
+ #: models/focuspages/Strategy.php:140
3442
+ msgid "Add a secondary keyword in Squirrly Live Assistant"
3443
  msgstr ""
3444
 
3445
+ #: models/focuspages/Traffic.php:55
3446
+ #, php-format
3447
+ msgid "Below %s Bounce Rate"
3448
  msgstr ""
3449
 
3450
+ #: models/focuspages/Traffic.php:56
3451
+ msgid "bounce rate"
 
3452
  msgstr ""
3453
 
3454
+ #: models/focuspages/Traffic.php:57
3455
+ #, php-format
3456
+ msgid ""
3457
+ "Make sure this number is below %s %s Why? %s A high bounce rate means that "
3458
+ "your users just click on your search listing, visit the page and then decide "
3459
+ "they've seen enough and bounce off to another page on the web. %s This is, "
3460
+ "for Google, an indicator of the quality of the search result it displayed. "
3461
+ "And if many of your users bounce off your pages, it means (to Google) that "
3462
+ "your page is not worth displaying in search results, because it has low "
3463
+ "performance with the user groups it sends your way. %s Easy way to complete "
3464
+ "this task: give users pages to click and send them to other pages from your "
3465
+ "site."
3466
+ msgstr ""
3467
+
3468
+ #: models/focuspages/Traffic.php:60
3469
+ #, php-format
3470
+ msgid "Time on page is %s minutes"
3471
  msgstr ""
3472
 
3473
+ #: models/focuspages/Traffic.php:61
3474
+ msgid "minutes"
 
3475
  msgstr ""
3476
 
3477
+ #: models/focuspages/Traffic.php:63
3478
+ #, php-format
3479
+ msgid ""
3480
+ "Make sure that visitors spend on average at least %s minutes on your site. "
3481
+ "%s Get an average time on page of minimum %s minutes for this focus page. "
3482
+ "You can do this by editing the content and making it more appealing to "
3483
+ "visitors. %s In the Best Practices section you'll find a plugin for "
3484
+ "WordPress that will help your Google Analytics tracker to track the real "
3485
+ "time on page for people. Sometimes, Google Analytics tracks this lower than "
3486
+ "it should. %s If your visitors don't spend at 2 minutes on your Focus Page, "
3487
+ "it can mean that the page is not important enough for them, or that the "
3488
+ "content from the page is boring, or hard to read, or the page just loads too "
3489
+ "slow."
3490
+ msgstr ""
3491
+
3492
+ #: models/focuspages/Traffic.php:66
3493
+ #, php-format
3494
+ msgid "%s visitors / day / page"
3495
  msgstr ""
3496
 
3497
+ #: models/focuspages/Traffic.php:67
3498
+ msgid "unique views"
3499
  msgstr ""
3500
 
3501
+ #: models/focuspages/Traffic.php:68
 
3502
  #, php-format
3503
  msgid ""
3504
+ "For this task, we're looking at unique page views from your Google "
3505
+ "Analytics. %s If you don't get %s visitors / day / page, then this Focus "
3506
+ "Page is not yet popular enough on your site. %s You should make sure that "
3507
+ "more people end up visiting it."
3508
  msgstr ""
3509
 
3510
+ #: models/focuspages/Traffic.php:71
3511
+ msgid "Just one Google Analytics tracking code"
3512
  msgstr ""
3513
 
3514
+ #: models/focuspages/Traffic.php:72
3515
+ #, php-format
3516
+ msgid ""
3517
+ "We've seen many sites where there were multiple google analytics codes "
3518
+ "placed by different employees, themes or plugins. %s With this check, we're "
3519
+ "helping you make sure that your tracker is setup properly and that there "
3520
+ "will be no errors with your Google Analytics account. %s To turn this green, "
3521
+ "you'll have to investigate your theme, custom code that you may have placed "
3522
+ "in your theme, other plugins, header settings. Once you have a clear view of "
3523
+ "all the tracking codes, make sure that only one remains and that the one "
3524
+ "code is the one linked to your Google Analytics account. %s These problems "
3525
+ "happen more often than you would think."
3526
  msgstr ""
3527
 
3528
+ #: models/services/Robots.php:13
3529
+ msgid "Squirrly SEO Robots"
 
 
 
3530
  msgstr ""
3531
 
3532
+ #: models/services/Robots.php:16
 
 
3533
  msgid ""
3534
+ "Your blog is not public. Please see Site Visibility on Settings > Reading."
3535
  msgstr ""
3536
 
3537
+ #: models/services/Robots.php:32
3538
+ msgid "No Squirrly SEO Robots found."
 
3539
  msgstr ""
3540
 
3541
+ #: view/Assistant/Assistant.php:12
3542
+ msgid "Optimize with Squirrly Live Assistant"
 
3543
  msgstr ""
3544
 
3545
+ #: view/Assistant/Assistant.php:13
3546
+ msgid ""
3547
+ "Use Squirrly to optimize the content for your posts, pages, products, etc."
3548
  msgstr ""
3549
 
3550
+ #: view/Assistant/Assistant.php:25
3551
+ msgid "Demo Post"
 
3552
  msgstr ""
3553
 
3554
+ #: view/Assistant/Assistant.php:34
3555
+ msgid "Add New"
3556
  msgstr ""
3557
 
3558
+ #: view/Assistant/Settings.php:17
3559
+ msgid "Live Assistant Settings"
3560
  msgstr ""
3561
 
3562
+ #: view/Assistant/Settings.php:27 view/Audits/Settings.php:31
3563
+ #: view/Ranking/Settings.php:31 view/SeoSettings/Automation.php:39
3564
+ #: view/SeoSettings/Jsonld.php:37 view/SeoSettings/Metas.php:29
3565
+ #: view/SeoSettings/Sitemap.php:41 view/SeoSettings/Social.php:28
3566
+ #: view/SeoSettings/Tracking.php:37 view/SeoSettings/Webmaster.php:37
3567
+ msgid "Show Advanced Options"
3568
  msgstr ""
3569
 
3570
+ #: view/Assistant/Settings.php:28 view/Audits/Settings.php:32
3571
+ #: view/Ranking/Settings.php:32 view/SeoSettings/Automation.php:40
3572
+ #: view/SeoSettings/Jsonld.php:38 view/SeoSettings/Metas.php:30
3573
+ #: view/SeoSettings/Sitemap.php:42 view/SeoSettings/Social.php:29
3574
+ #: view/SeoSettings/Tracking.php:38 view/SeoSettings/Webmaster.php:38
3575
+ msgid "Hide Advanced Options"
3576
  msgstr ""
3577
 
3578
  # @ squirrly-seo
3579
+ #: view/Assistant/Settings.php:42
3580
+ #, fuzzy
3581
+ #| msgid "Squirrly settings"
3582
+ msgid "Squirrly Tooltips"
3583
+ msgstr "Squirrly Einstellungen"
3584
+
3585
+ #: view/Assistant/Settings.php:43
3586
+ #, php-format
3587
+ msgid ""
3588
+ "Show %sSquirrly Tooltips%s when posting a new article (e.g. \"Enter a keyword"
3589
+ "\")."
3590
  msgstr ""
3591
 
3592
+ #: view/Assistant/Settings.php:53
3593
+ msgid "Download Remote Images"
 
3594
  msgstr ""
3595
 
3596
+ #: view/Assistant/Settings.php:54
3597
+ #, php-format
3598
+ msgid "Download %sremote images%s in your %sMedia Library%s for the new posts."
3599
  msgstr ""
3600
 
3601
+ #: view/Assistant/Settings.php:55
3602
+ msgid ""
3603
+ "Prevent from losing the images you use in your articles in case the remote "
3604
+ "images are deleted."
3605
  msgstr ""
3606
 
3607
+ #: view/Assistant/Settings.php:65
3608
+ msgid "Send Optimization On Save"
 
3609
  msgstr ""
3610
 
3611
+ #: view/Assistant/Settings.php:66
3612
+ msgid ""
3613
+ "Send optimization data to Squirrly Cloud when the post is saved (don't use "
3614
+ "cron)"
3615
  msgstr ""
3616
 
3617
+ #: view/Assistant/Settings.php:67
3618
+ msgid "Use this option if your WordPress cron is not working properly."
 
3619
  msgstr ""
3620
 
3621
+ #: view/Assistant/Settings.php:77
3622
+ msgid "Copyright Free Images"
3623
  msgstr ""
3624
 
3625
+ #: view/Assistant/Settings.php:78
3626
+ #, php-format
3627
+ msgid "Search %sCopyright Free Images%s in Squirrly Live Assistant."
3628
  msgstr ""
3629
 
3630
+ #: view/Assistant/Settings.php:88
3631
+ msgid "Optimized Version Of Live Assistant"
 
3632
  msgstr ""
3633
 
3634
+ #: view/Assistant/Settings.php:89
3635
+ #, php-format
3636
+ msgid ""
3637
+ "Use %sthe NEW version of the SEO Live Assistant%s with Google and Human "
3638
+ "Friendly Analysis."
3639
  msgstr ""
3640
 
3641
+ #: view/Assistant/Settings.php:97
3642
+ msgid "Places where you do NOT want Squirrly Live Assistant to load"
3643
  msgstr ""
3644
 
3645
+ #: view/Assistant/Settings.php:99
3646
+ msgid ""
3647
+ "Don't select anything if you wish Squirrly Live Assistant to load for all "
3648
+ "post types."
3649
  msgstr ""
3650
 
3651
+ #: view/Assistant/Settings.php:105
3652
+ msgid "Exclusions"
3653
  msgstr ""
3654
 
3655
+ #: view/Assistant/Settings.php:106
3656
+ msgid "Select places where you do NOT want Squirrly Live Assistant to load."
 
3657
  msgstr ""
3658
 
3659
+ #: view/Assistant/Settings.php:107
3660
+ msgid "Hold Control key to select multiple places"
 
3661
  msgstr ""
3662
 
3663
  # @ squirrly-seo
3664
+ #: view/Assistant/Settings.php:132 view/Audits/Settings.php:60
3665
+ #: view/Ranking/Settings.php:175 view/SeoSettings/Automation.php:412
3666
+ #: view/SeoSettings/Automation.php:560 view/SeoSettings/Backup.php:175
3667
+ #: view/SeoSettings/Favicon.php:95 view/SeoSettings/Jsonld.php:184
3668
+ #: view/SeoSettings/Metas.php:224 view/SeoSettings/Robots.php:68
3669
+ #: view/SeoSettings/Sitemap.php:301 view/SeoSettings/Social.php:368
3670
+ #: view/SeoSettings/Tracking.php:109 view/SeoSettings/Webmaster.php:100
3671
+ #, fuzzy
3672
+ #| msgid "Squirrly settings"
3673
+ msgid "Save Settings"
3674
+ msgstr "Squirrly Einstellungen"
3675
 
3676
+ #: view/Audits/Audits.php:13
3677
+ msgid "Audits"
 
3678
  msgstr ""
3679
 
3680
+ #: view/Audits/Audits.php:14
3681
+ msgid ""
3682
+ "Verifies the online presence of your website by knowing how your website is "
3683
+ "performing in terms of Blogging, SEO, Social, Authority, Links, and Traffic"
3684
  msgstr ""
3685
 
3686
+ #: view/Audits/Audits.php:44
3687
+ msgid "Score:"
3688
  msgstr ""
3689
 
3690
+ #: view/Audits/Audits.php:58
3691
+ #, php-format
3692
+ msgid "The audit score increased by %s since %s"
 
3693
  msgstr ""
3694
 
3695
+ #: view/Audits/Audits.php:60
3696
+ #, php-format
3697
+ msgid "The audit score went down by %s since %s"
3698
  msgstr ""
3699
 
3700
+ #: view/Audits/Audits.php:69
3701
+ msgid "Incapsula Protection Error"
3702
  msgstr ""
3703
 
3704
+ #: view/Audits/Audits.php:72
3705
+ msgid "Your blog returns an error"
3706
  msgstr ""
3707
 
3708
+ #: view/Audits/Audits.php:89
3709
+ msgid "Go to all audit panel"
 
3710
  msgstr ""
3711
 
3712
+ #: view/Audits/Audits.php:101 view/Blocks/Audits.php:15
3713
+ msgid "Audits Score"
 
3714
  msgstr ""
3715
 
3716
+ #: view/Audits/Audits.php:102
3717
  #, php-format
3718
+ msgid "last %s audits"
3719
  msgstr ""
3720
 
3721
+ #: view/Audits/Audits.php:108 view/Audits/Audits.php:150
3722
+ #: view/Blocks/Audits.php:21 view/Blocks/KRHistory.php:17
3723
+ #: view/Ranking/Rankings.php:206 view/Research/History.php:27
3724
+ msgid "Date"
3725
  msgstr ""
3726
 
3727
+ #: view/Audits/Audits.php:109 view/Blocks/Audits.php:22
3728
+ msgid "On-Page"
3729
  msgstr ""
3730
 
3731
+ #: view/Audits/Audits.php:110 view/Blocks/Audits.php:23
3732
+ msgid "Off-Page"
3733
  msgstr ""
3734
 
3735
+ #: view/Audits/Audits.php:129 view/Blocks/Audits.php:42
3736
+ msgid "No data yet"
 
3737
  msgstr ""
3738
 
3739
+ #: view/Audits/Audits.php:147
3740
+ msgid "No."
3741
  msgstr ""
3742
 
3743
+ #: view/Audits/Audits.php:148
3744
+ msgid "On-Page Score"
 
3745
  msgstr ""
3746
 
3747
+ #: view/Audits/Audits.php:149
3748
+ msgid "Off-Page Score"
 
3749
  msgstr ""
3750
 
3751
+ #: view/Audits/Audits.php:151 view/Audits/Audits.php:186
3752
+ #: view/Blocks/Audits.php:62
3753
+ msgid "Tasks"
3754
  msgstr ""
3755
 
3756
+ #: view/Audits/Audits.php:174
3757
+ msgid "tasks found"
 
3758
  msgstr ""
3759
 
3760
+ #: view/Audits/Audits.php:187 view/Blocks/Audits.php:63
3761
+ msgid "last issues found"
3762
  msgstr ""
3763
 
3764
+ #: view/Audits/Audits.php:203 view/Blocks/Audits.php:77
3765
+ msgid "Update on"
3766
  msgstr ""
3767
 
3768
+ #: view/Audits/Audits.php:210
3769
+ #, php-format
3770
+ msgid "Learn how to improve your SEO Audit score over time %sClick Here%s"
3771
  msgstr ""
3772
 
3773
+ #: view/Audits/Audits.php:216
3774
+ msgid "Welcome to Squirrly SEO Audits"
3775
  msgstr ""
3776
 
3777
+ #: view/Audits/Audits.php:217 view/Blocks/Audits.php:84
3778
+ msgid "The SEO Audit is generated once every week"
 
3779
  msgstr ""
3780
 
3781
+ #: view/Audits/Audits.php:218 view/Blocks/Audits.php:85
3782
+ msgid "Until the audit is ready, try the Focus Pages section"
3783
  msgstr ""
3784
 
3785
+ #: view/Audits/Audits.php:222 view/Blocks/Audits.php:89
3786
+ msgid "Go to Focus Pages"
 
3787
  msgstr ""
3788
 
3789
+ # @ squirrly-seo
3790
+ #: view/Audits/Settings.php:21
3791
+ #, fuzzy
3792
+ #| msgid "Squirrly settings"
3793
+ msgid "Audit Settings"
3794
+ msgstr "Squirrly Einstellungen"
3795
+
3796
+ # @ squirrly-seo
3797
+ #: view/Audits/Settings.php:43
3798
+ #, fuzzy
3799
+ #| msgid "Your E-mail:"
3800
+ msgid "Audit Email"
3801
+ msgstr "Ihre E-Mail Adresse:"
3802
+
3803
+ #: view/Audits/Settings.php:44
3804
+ msgid "Enter the email address on which you want to receive the weekly audits."
3805
  msgstr ""
3806
 
3807
+ #: view/Blocks/Assistant.php:8
3808
+ msgid "Knowledge Base"
 
3809
  msgstr ""
3810
 
3811
+ #: view/Blocks/Assistant.php:23
3812
+ msgid "Advanced SEO Settings"
3813
  msgstr ""
3814
 
3815
+ #: view/Blocks/Assistant.php:30 view/SeoSettings/Metas.php:65
3816
+ msgid "Optimize Keywords"
3817
  msgstr ""
3818
 
3819
+ #: view/Blocks/Assistant.php:31 view/SeoSettings/Metas.php:66
3820
+ msgid ""
3821
+ "Add the Keyword meta in the page header. You can customize it using the Bulk "
3822
+ "SEO and Squirrly SEO Snippet."
3823
  msgstr ""
3824
 
3825
+ #: view/Blocks/Assistant.php:32 view/SeoSettings/Metas.php:67
3826
+ msgid ""
3827
+ "This meta is not mandatory for Google but other search engines still use it "
3828
+ "for ranking"
3829
  msgstr ""
3830
 
3831
+ #: view/Blocks/Audits.php:7 view/Blocks/Audits.php:55
3832
+ msgid "See Audits"
3833
  msgstr ""
3834
 
3835
+ #: view/Blocks/Audits.php:16
3836
+ msgid "last 4 audits"
 
3837
  msgstr ""
3838
 
3839
+ #: view/Blocks/FocusPages.php:7
3840
+ msgid "See Focus Pages"
3841
  msgstr ""
3842
 
3843
+ #: view/Blocks/FocusPages.php:16 view/FocusPages/Pagelist.php:65
3844
+ msgid "Permalink"
 
3845
  msgstr ""
3846
 
3847
+ #: view/Blocks/FocusPages.php:17 view/FocusPages/FocusPageRow.php:30
3848
+ msgid "Last audited"
3849
  msgstr ""
3850
 
3851
+ #: view/Blocks/FocusPages.php:47
3852
+ msgid "Check Focus Page"
3853
  msgstr ""
3854
 
3855
+ #: view/Blocks/FocusPages.php:59 view/FocusPages/Pagelist.php:105
3856
+ msgid "To get started with managing the focus pages"
3857
  msgstr ""
3858
 
3859
+ #: view/Blocks/FocusPages.php:63 view/FocusPages/Pagelist.php:109
3860
+ msgid "Add new page"
3861
  msgstr ""
3862
 
3863
+ #: view/Blocks/FocusPages.php:69 view/FocusPages/Pagelist.php:115
3864
+ msgid "Then set a page as focus"
3865
  msgstr ""
3866
 
3867
+ #: view/Blocks/Jorney.php:10
3868
+ msgid "Your 14 Days Journey To Better Ranking"
3869
  msgstr ""
3870
 
3871
+ #: view/Blocks/Jorney.php:17 view/Blocks/Jorney.php:23
3872
+ msgid "Day"
3873
  msgstr ""
3874
 
3875
+ #: view/Blocks/Jorney.php:23
3876
+ msgid "Open the SEO recipe for today"
3877
  msgstr ""
3878
 
3879
+ #: view/Blocks/Jorney.php:27 view/FocusPages/Addpage.php:12
3880
+ msgid "Add a page in Focus Pages"
 
3881
  msgstr ""
3882
 
3883
+ #: view/Blocks/KRFound.php:6
3884
+ msgid "Suggested Keywords"
3885
  msgstr ""
3886
 
3887
+ #: view/Blocks/KRFound.php:16 view/Blocks/KRHistory.php:16
3888
+ #: view/Ranking/Rankings.php:198 view/Research/Briefcase.php:112
3889
+ #: view/Research/History.php:26 view/Research/Research.php:159
3890
+ #: view/Research/Suggested.php:24
3891
+ msgid "Country"
3892
  msgstr ""
3893
 
3894
+ #: view/Blocks/KRFound.php:16 view/Blocks/KRHistory.php:16
3895
+ #: view/Research/History.php:26 view/Research/Research.php:159
3896
+ #: view/Research/Suggested.php:24
3897
+ msgid "Co"
3898
  msgstr ""
3899
 
3900
+ #: view/Blocks/KRFound.php:18 view/Blocks/KRFound.php:19
3901
+ #: view/Blocks/KRFound.php:59 view/Research/Briefcase.php:117
3902
+ #: view/Research/HistoryDetails.php:16 view/Research/HistoryDetails.php:18
3903
+ #: view/Research/Research.php:161 view/Research/Research.php:162
3904
+ #: view/Research/Suggested.php:26 view/Research/Suggested.php:27
3905
+ #: view/Research/Suggested.php:76
3906
+ msgid "Competition"
3907
  msgstr ""
3908
 
3909
+ #: view/Blocks/KRFound.php:22 view/Blocks/KRFound.php:64
3910
+ #: view/Research/HistoryDetails.php:12 view/Research/Research.php:165
3911
+ #: view/Research/Suggested.php:30 view/Research/Suggested.php:81
3912
+ msgid "SEO Search Volume"
3913
  msgstr ""
3914
 
3915
+ #: view/Blocks/KRFound.php:23 view/Research/HistoryDetails.php:14
3916
+ #: view/Research/Suggested.php:31
3917
+ msgid "SV"
3918
  msgstr ""
3919
 
3920
+ #: view/Blocks/KRFound.php:26 view/Blocks/KRFound.php:69
3921
+ #: view/Research/Briefcase.php:129 view/Research/HistoryDetails.php:8
3922
+ #: view/Research/Research.php:169 view/Research/Suggested.php:34
3923
+ #: view/Research/Suggested.php:86
3924
+ msgid "Recent discussions"
3925
  msgstr ""
3926
 
3927
+ #: view/Blocks/KRFound.php:27 view/Research/HistoryDetails.php:10
3928
+ #: view/Research/Research.php:170 view/Research/Suggested.php:35
3929
+ msgid "Discussion"
3930
  msgstr ""
3931
 
3932
+ #: view/Blocks/KRFound.php:30 view/Blocks/KRFound.php:31
3933
+ #: view/Blocks/KRFound.php:74 view/Research/Briefcase.php:135
3934
+ #: view/Research/HistoryDetails.php:20 view/Research/Research.php:173
3935
+ #: view/Research/Suggested.php:38
3936
+ msgid "Trending"
3937
  msgstr ""
3938
 
3939
+ #: view/Blocks/KRFound.php:59 view/Blocks/KRFound.php:64
3940
+ #: view/Blocks/KRFound.php:69 view/Blocks/KRFound.php:74
3941
+ #: view/Research/Briefcase.php:118 view/Research/Briefcase.php:124
3942
+ #: view/Research/Briefcase.php:130 view/Research/Suggested.php:76
3943
+ #: view/Research/Suggested.php:81 view/Research/Suggested.php:86
3944
+ msgid "-"
3945
  msgstr ""
3946
 
3947
+ #: view/Blocks/KRFound.php:91
3948
+ msgid "Once a week, Squirrly checks all the keywords from your briefcase."
3949
  msgstr ""
3950
 
3951
+ #: view/Blocks/KRFound.php:92
3952
+ msgid "If it finds better keywords, they will be listed here"
 
3953
  msgstr ""
3954
 
3955
+ #: view/Blocks/KRFound.php:93 view/Research/Suggested.php:150
3956
+ msgid "Until then, add keywords in Briefcase"
3957
  msgstr ""
3958
 
3959
+ #: view/Blocks/KRFound.php:97 view/Blocks/SLASearch.php:22
3960
+ #: view/Ranking/Gscsync.php:94 view/Research/Suggested.php:154
3961
+ msgid "Go to Briefcase"
3962
  msgstr ""
3963
 
3964
+ #: view/Blocks/KRHistory.php:5 view/Research/Research.php:14
3965
+ msgid "Keyword Research"
 
3966
  msgstr ""
3967
 
3968
+ #: view/Blocks/KRHistory.php:6
3969
+ msgid "See Research History"
 
3970
  msgstr ""
3971
 
3972
+ #: view/Blocks/KRHistory.php:39 view/Research/History.php:51
3973
+ msgid "See your research results and compare them over time"
 
3974
  msgstr ""
3975
 
3976
  # @ squirrly-seo
3977
+ #: view/Blocks/Login.php:10 view/Blocks/Login.php:28
3978
+ msgid "Email:"
 
3979
  msgstr ""
3980
 
3981
  # @ squirrly-seo
3982
+ #: view/Blocks/Login.php:14
3983
+ msgid "Password:"
3984
  msgstr ""
3985
 
3986
+ # @ squirrly-seo
3987
+ #: view/Blocks/Login.php:18
3988
+ msgid "Register to Squirrly.co"
3989
  msgstr ""
3990
 
3991
+ # @ squirrly-seo
3992
+ #: view/Blocks/Login.php:19
3993
+ msgid "Lost password?"
3994
  msgstr ""
3995
 
3996
+ # @ squirrly-seo
3997
+ #: view/Blocks/Login.php:19
3998
+ msgid "Lost password"
 
3999
  msgstr ""
4000
 
4001
+ # @ squirrly-seo
4002
+ #: view/Blocks/Login.php:21
4003
+ msgid "Login"
4004
  msgstr ""
4005
 
4006
+ #: view/Blocks/Login.php:35
4007
+ msgid "I already have an account"
4008
  msgstr ""
4009
 
4010
+ #: view/Blocks/Login.php:38
4011
+ #, php-format
4012
+ msgid "I Agree with the Squirrly %sTerms of Use%s and %sPrivacy Policy%s"
4013
  msgstr ""
4014
 
4015
+ #: view/Blocks/Login.php:40
4016
+ msgid "Sign Up"
4017
  msgstr ""
4018
 
4019
+ #: view/Blocks/Ranks.php:6 view/Ranking/Rankings.php:19
4020
+ msgid "Google Rankings"
4021
  msgstr ""
4022
 
4023
+ #: view/Blocks/Ranks.php:7 view/Blocks/Ranks.php:77
4024
+ msgid "See Rankings"
4025
  msgstr ""
4026
 
4027
+ #: view/Blocks/Ranks.php:19 view/Blocks/Ranks.php:84
4028
+ msgid "Google Ranks"
4029
  msgstr ""
4030
 
4031
+ #: view/Blocks/Ranks.php:20 view/Blocks/Ranks.php:85
4032
+ msgid "last 7 days"
 
 
 
4033
  msgstr ""
4034
 
4035
+ #: view/Blocks/Ranks.php:44
4036
+ msgid "Today Average"
4037
  msgstr ""
4038
 
4039
+ #: view/Blocks/Ranks.php:67
4040
+ #, php-format
4041
+ msgid "The average rank went down with %s since %s"
4042
  msgstr ""
4043
 
4044
+ #: view/Blocks/Ranks.php:69
4045
  #, php-format
4046
+ msgid "The average rank went up with %s since %s"
4047
  msgstr ""
4048
 
4049
+ #: view/Blocks/Ranks.php:97 view/SeoSettings/Metas.php:170
4050
+ msgid "Keywords"
4051
  msgstr ""
4052
 
4053
+ #: view/Blocks/Ranks.php:98
4054
+ msgid "keywords found"
4055
  msgstr ""
4056
 
4057
+ #: view/Blocks/Ranks.php:121 view/Ranking/Rankings.php:303
4058
+ msgid "To see how your website is ranking on Google"
4059
  msgstr ""
4060
 
4061
+ #: view/Blocks/Ranks.php:125 view/Ranking/Rankings.php:307
4062
+ msgid "Add keywords in Briefcase"
4063
  msgstr ""
4064
 
4065
+ #: view/Blocks/Ranks.php:131 view/Ranking/Rankings.php:313
4066
+ msgid "Then send keywords to Rank Checker"
4067
  msgstr ""
4068
 
4069
+ #: view/Blocks/SEOIssues.php:5
4070
+ msgid "SEO Issues"
4071
  msgstr ""
4072
 
4073
+ #: view/Blocks/SEOIssues.php:10
4074
+ msgid "Run new test"
4075
  msgstr ""
4076
 
4077
+ #: view/Blocks/SEOIssues.php:23
4078
+ msgid "Problem"
4079
  msgstr ""
4080
 
4081
+ #: view/Blocks/SEOIssues.php:24
4082
+ msgid "Solution"
 
4083
  msgstr ""
4084
 
4085
+ #: view/Blocks/SEOIssues.php:56
4086
+ msgid "See solution"
 
 
4087
  msgstr ""
4088
 
4089
+ #: view/Blocks/SEOIssues.php:67
4090
+ msgid "Fix It"
4091
  msgstr ""
4092
 
4093
+ #: view/Blocks/SEOIssues.php:88
4094
+ msgid "No SEO major issues found in your website"
4095
  msgstr ""
4096
 
4097
+ #: view/Blocks/SEOIssues.php:90
4098
+ msgid "Now, check the SEO for each page using Bulk SEO"
4099
  msgstr ""
4100
 
4101
+ #: view/Blocks/SEOIssues.php:94
4102
+ msgid "Go to Bulk SEO"
 
4103
  msgstr ""
4104
 
4105
+ #: view/Blocks/SLASearch.php:2
4106
+ msgid "Waiting for your editor to load .. "
4107
  msgstr ""
4108
 
4109
+ #: view/Blocks/SLASearch.php:3
4110
+ msgid ""
4111
+ "Javascript is disabled! You need to activate the javascript in order to use "
4112
+ "Squirrly SEO."
4113
  msgstr ""
4114
 
4115
+ #: view/Blocks/SLASearch.php:8
4116
+ msgid "Click to Close Squirrly Live Assistant"
4117
  msgstr ""
4118
 
4119
+ #: view/Blocks/SLASearch.php:9
4120
+ msgid "Click to Minimize Box"
4121
  msgstr ""
4122
 
4123
+ #: view/Blocks/SLASearch.php:10
4124
+ msgid "Click to Maximize Box"
4125
  msgstr ""
4126
 
4127
+ #: view/Blocks/SLASearch.php:11 view/Blocks/SLASearch.php:17
4128
+ msgid "Squirrly Briefcase"
 
4129
  msgstr ""
4130
 
4131
+ #: view/Blocks/SLASearch.php:18
4132
+ msgid "Refresh the keywords"
4133
  msgstr ""
4134
 
4135
+ #: view/Blocks/SLASearch.php:20
4136
+ msgid "Search in Briefcase ..."
4137
  msgstr ""
4138
 
4139
+ # @ squirrly-seo
4140
+ #: view/Blocks/SLASearch.php:34
4141
+ msgid "Enter a keyword"
4142
  msgstr ""
4143
 
4144
+ # @ squirrly-seo
4145
+ #: view/Blocks/SLASearch.php:35
4146
+ msgid "for Squirrly Live SEO optimization"
4147
  msgstr ""
4148
 
4149
+ # @ squirrly-seo
4150
+ #: view/Blocks/SLASearch.php:38
4151
+ #, fuzzy
4152
+ #| msgid "Enter even more keywords."
4153
+ msgid "Type in your keyword..."
4154
+ msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
4155
 
4156
+ # @ squirrly-seo
4157
+ #: view/Blocks/SLASearch.php:50
4158
+ msgid "Use this keyword"
4159
  msgstr ""
4160
 
4161
+ # @ squirrly-seo
4162
+ #: view/Blocks/SLASearch.php:55
4163
+ #, fuzzy
4164
+ #| msgid "Do the research"
4165
+ msgid "Do keyword research!"
4166
+ msgstr "Recherchieren"
4167
 
4168
  # @ squirrly-seo
4169
+ #: view/Blocks/SLASearch.php:62
4170
+ msgid "Images"
 
4171
  msgstr ""
4172
 
4173
+ # @ squirrly-seo
4174
+ #: view/Blocks/SLASearch.php:63
4175
+ msgid "Twitter"
 
 
 
4176
  msgstr ""
4177
 
4178
+ # @ squirrly-seo
4179
+ #: view/Blocks/SLASearch.php:64
4180
+ msgid "Wiki"
 
 
 
 
4181
  msgstr ""
4182
 
4183
+ # @ squirrly-seo
4184
+ #: view/Blocks/SLASearch.php:65
4185
+ msgid "Blogs"
4186
  msgstr ""
4187
 
4188
+ # @ squirrly-seo
4189
+ #: view/Blocks/SLASearch.php:66
4190
+ msgid "My articles"
4191
  msgstr ""
4192
 
4193
+ # @ squirrly-seo
4194
+ #: view/Blocks/SLASearch.php:74
4195
+ msgid "Show only Copyright Free images"
4196
  msgstr ""
4197
 
4198
+ #: view/Blocks/SLASeo.php:3
4199
+ msgid "Squirrly Live Assistant"
4200
  msgstr ""
4201
 
4202
+ #: view/Blocks/SLASeo.php:6
4203
+ msgid "Update"
 
4204
  msgstr ""
4205
 
4206
+ #: view/Blocks/SLASeo.php:9
4207
+ msgid "Split Window"
4208
  msgstr ""
4209
 
4210
+ #: view/Blocks/Snippet.php:90
4211
+ msgid "Meta Tags"
 
4212
  msgstr ""
4213
 
4214
+ #: view/Blocks/Snippet.php:94
4215
+ msgid "JSON-LD"
4216
  msgstr ""
4217
 
4218
+ #: view/Blocks/Snippet.php:105
4219
+ msgid "Tracking"
4220
  msgstr ""
4221
 
4222
+ #: view/Blocks/Snippet.php:121 view/Blocks/Snippet.php:480
4223
+ #: view/Blocks/Snippet.php:734
4224
  #, php-format
4225
  msgid ""
4226
+ "Post Type (%s) was excluded from %sSquirrly > SEO Settings%s. Squirrly SEO "
4227
+ "will not load for this post type on the frontend"
4228
  msgstr ""
4229
 
4230
+ #: view/Blocks/Snippet.php:129 view/SeoSettings/Automation.php:126
4231
+ #: view/SeoSettings/Automation.php:153 view/SeoSettings/Automation.php:215
4232
+ msgid "Activate Metas"
4233
  msgstr ""
4234
 
4235
+ #: view/Blocks/Snippet.php:138
4236
+ msgid "How this page will appear on Search Engines"
4237
  msgstr ""
4238
 
4239
+ #: view/Blocks/Snippet.php:142 view/Blocks/Snippet.php:373
4240
+ #: view/Blocks/Snippet.php:502 view/Blocks/Snippet.php:756
4241
+ #: view/Blocks/Snippet.php:970 view/Blocks/Snippet.php:1085
4242
+ msgid "Refresh"
4243
  msgstr ""
4244
 
4245
+ #: view/Blocks/Snippet.php:146 view/Blocks/Snippet.php:518
4246
+ #: view/Blocks/Snippet.php:774
4247
+ msgid "AUTO-DRAFT"
4248
  msgstr ""
4249
 
4250
+ #: view/Blocks/Snippet.php:157 view/Blocks/Snippet.php:539
4251
+ #: view/Blocks/Snippet.php:794
4252
+ msgid "Please save the post first to be able to edit the Squirrly SEO Snippet"
 
4253
  msgstr ""
4254
 
4255
+ #: view/Blocks/Snippet.php:164 view/Blocks/Snippet.php:546
4256
+ #: view/Blocks/Snippet.php:801
4257
+ msgid "Cancel"
4258
  msgstr ""
4259
 
4260
+ #: view/Blocks/Snippet.php:165 view/Blocks/Snippet.php:374
4261
+ #: view/Blocks/Snippet.php:547 view/Blocks/Snippet.php:802
4262
+ #: view/Blocks/Snippet.php:971 view/Blocks/Snippet.php:1086
4263
+ msgid "Save"
4264
  msgstr ""
4265
 
4266
+ #: view/Blocks/Snippet.php:175
4267
+ msgid "Activate Title"
4268
  msgstr ""
4269
 
4270
+ # @ squirrly-seo
4271
+ #: view/Blocks/Snippet.php:182 view/Blocks/Snippet.php:233
4272
+ #: view/Blocks/Snippet.php:580 view/Blocks/Snippet.php:623
4273
+ #: view/Blocks/Snippet.php:835 view/Blocks/Snippet.php:878
4274
+ #, fuzzy, php-format
4275
+ #| msgid "Tips: Length 10-70 chars"
4276
+ msgid "Tips: Length %s-%s chars"
4277
+ msgstr "Tipp: Länge 10-70 Charaktere"
4278
+
4279
+ #: view/Blocks/Snippet.php:185 view/Blocks/Snippet.php:236
4280
+ #: view/Blocks/Snippet.php:583 view/Blocks/Snippet.php:626
4281
+ #: view/Blocks/Snippet.php:838 view/Blocks/Snippet.php:881
4282
+ msgid "Pattern: "
4283
  msgstr ""
4284
 
4285
+ #: view/Blocks/Snippet.php:202 view/Blocks/Snippet.php:600
4286
+ #: view/Blocks/Snippet.php:855
4287
+ msgid "Default Title"
4288
  msgstr ""
4289
 
4290
+ #: view/Blocks/Snippet.php:209 view/Blocks/Snippet.php:263
4291
+ #: view/Blocks/Snippet.php:607 view/Blocks/Snippet.php:653
4292
+ #: view/Blocks/Snippet.php:862 view/Blocks/Snippet.php:908
4293
+ msgid "Pattern"
4294
  msgstr ""
4295
 
4296
+ #: view/Blocks/Snippet.php:226
4297
+ msgid "Activate Description"
4298
  msgstr ""
4299
 
4300
+ #: view/Blocks/Snippet.php:232
4301
+ msgid "Meta Description"
4302
  msgstr ""
4303
 
4304
+ #: view/Blocks/Snippet.php:256 view/Blocks/Snippet.php:646
4305
+ #: view/Blocks/Snippet.php:901
4306
+ msgid "Default Description"
4307
  msgstr ""
4308
 
4309
+ #: view/Blocks/Snippet.php:280
4310
+ msgid "Activate Keywords"
4311
  msgstr ""
4312
 
4313
+ #: view/Blocks/Snippet.php:286
4314
+ msgid "Meta Keywords"
4315
  msgstr ""
4316
 
4317
+ # @ squirrly-seo
4318
+ #: view/Blocks/Snippet.php:290
4319
+ msgid "+ Add keyword"
4320
  msgstr ""
4321
 
4322
+ #: view/Blocks/Snippet.php:302
4323
+ msgid "Activate Canonical"
4324
  msgstr ""
4325
 
4326
+ #: view/Blocks/Snippet.php:309
4327
+ msgid "Leave it blank if you don't have an external canonical"
4328
  msgstr ""
4329
 
4330
+ #: view/Blocks/Snippet.php:312
4331
+ msgid "Found: "
 
 
4332
  msgstr ""
4333
 
4334
+ #: view/Blocks/Snippet.php:325
4335
+ msgid "Default Link"
4336
  msgstr ""
4337
 
4338
+ #: view/Blocks/Snippet.php:345 view/Blocks/Snippet.php:468
4339
+ #: view/Blocks/Snippet.php:714 view/Blocks/Snippet.php:949
4340
+ #: view/Blocks/Snippet.php:1064 view/Blocks/Snippet.php:1190
4341
+ msgid ""
4342
+ "To edit the snippet, you have to activate Squirrly SEO for this page first"
4343
  msgstr ""
4344
 
4345
+ #: view/Blocks/Snippet.php:354
4346
+ msgid "Activate Squirrly Snippet for this page"
4347
  msgstr ""
4348
 
4349
+ #: view/Blocks/Snippet.php:359 view/Blocks/Snippet.php:719
4350
+ #: view/Blocks/Snippet.php:954
4351
+ msgid "Post Type"
4352
  msgstr ""
4353
 
4354
+ #: view/Blocks/Snippet.php:361 view/Blocks/Snippet.php:683
4355
+ #: view/Blocks/Snippet.php:721
4356
+ msgid "OG Type"
4357
  msgstr ""
4358
 
4359
+ #: view/Blocks/Snippet.php:391
4360
+ #, php-format
4361
+ msgid ""
4362
+ "JSON-LD is disable for this Post Type (%s). See %sSquirrly > SEO Settings > "
4363
+ "Automation%s."
4364
  msgstr ""
4365
 
4366
+ #: view/Blocks/Snippet.php:415
4367
+ msgid "JSON-LD Type"
4368
  msgstr ""
4369
 
4370
+ #: view/Blocks/Snippet.php:420 view/Blocks/Snippet.php:691
4371
+ #: view/Blocks/Snippet.php:929 view/Blocks/Snippet.php:1017
4372
+ msgid "(Auto)"
 
 
 
4373
  msgstr ""
4374
 
4375
+ #: view/Blocks/Snippet.php:421 view/Blocks/Snippet.php:1018
4376
+ msgid "Custom Code"
 
 
 
4377
  msgstr ""
4378
 
4379
+ #: view/Blocks/Snippet.php:431
4380
+ msgid "Custom JSON-LD Code"
 
 
 
4381
  msgstr ""
4382
 
4383
+ #: view/Blocks/Snippet.php:432
4384
  #, php-format
4385
+ msgid "Add JSON-LD code from %sSchema Generator Online%s."
4386
  msgstr ""
4387
 
4388
+ #: view/Blocks/Snippet.php:441
4389
+ msgid "Current JSON-LD Code"
 
4390
  msgstr ""
4391
 
4392
+ #: view/Blocks/Snippet.php:449
4393
+ msgid "Validate"
 
4394
  msgstr ""
4395
 
4396
+ #: view/Blocks/Snippet.php:497
4397
+ msgid "How this page appears on Facebook"
4398
  msgstr ""
4399
 
4400
+ #: view/Blocks/Snippet.php:503
4401
+ msgid "Edit Open Graph"
4402
  msgstr ""
4403
 
4404
+ #: view/Blocks/Snippet.php:511 view/Blocks/Snippet.php:766
4405
+ msgid "The image size must be at least 500 pixels wide"
4406
  msgstr ""
4407
 
4408
+ #: view/Blocks/Snippet.php:527
4409
  msgid ""
4410
+ "This is the Featured Image. You can change it if you edit the snippet and "
4411
+ "upload another image. "
4412
  msgstr ""
4413
 
4414
+ #: view/Blocks/Snippet.php:556 view/Blocks/Snippet.php:811
4415
+ msgid "Media Image"
4416
  msgstr ""
4417
 
4418
+ # @ squirrly-seo
4419
+ #: view/Blocks/Snippet.php:560 view/Blocks/Snippet.php:815
4420
+ #: view/Research/Briefcase.php:360 view/SeoSettings/Favicon.php:65
4421
+ msgid "Upload"
4422
  msgstr ""
4423
 
4424
+ #: view/Blocks/Snippet.php:561 view/Blocks/Snippet.php:816
4425
+ msgid "Image size must be at least 500 pixels wide"
4426
  msgstr ""
4427
 
4428
+ #: view/Blocks/Snippet.php:668
4429
+ msgid "Author Link"
4430
  msgstr ""
4431
 
4432
+ #: view/Blocks/Snippet.php:669
4433
+ msgid "For multiple authors, separate their Facebook links with commas"
4434
  msgstr ""
4435
 
4436
+ #: view/Blocks/Snippet.php:751
4437
+ msgid "How this page appears on Twitter"
4438
  msgstr ""
4439
 
4440
+ #: view/Blocks/Snippet.php:757
4441
+ msgid "Edit Twitter Card"
4442
  msgstr ""
4443
 
4444
+ #: view/Blocks/Snippet.php:783
4445
+ msgid ""
4446
+ "This is the Featured Image. You can changin it if you edit the snippet and "
4447
+ "upload anothe image."
4448
  msgstr ""
4449
 
4450
+ #: view/Blocks/Snippet.php:924
4451
+ msgid "Card Type"
4452
  msgstr ""
4453
 
4454
+ #: view/Blocks/Snippet.php:925 view/SeoSettings/Social.php:283
4455
+ #, php-format
4456
+ msgid "Every change needs %sTwitter Card Validator%s"
4457
  msgstr ""
4458
 
4459
+ #: view/Blocks/Snippet.php:930
4460
+ msgid "summary"
4461
  msgstr ""
4462
 
4463
+ #: view/Blocks/Snippet.php:931
4464
+ msgid "summary_large_image"
4465
  msgstr ""
4466
 
4467
+ #: view/Blocks/Snippet.php:956
4468
+ msgid "Twitter Type"
4469
  msgstr ""
4470
 
4471
+ #: view/Blocks/Snippet.php:982
4472
+ msgid "Activate Tracking"
4473
  msgstr ""
4474
 
4475
+ #: view/Blocks/Snippet.php:988
4476
+ #, php-format
4477
+ msgid ""
4478
+ "Facebook Pixel is disabled for this Post Type. See %sSquirrly > SEO Settings "
4479
+ "> Automation%s."
4480
  msgstr ""
4481
 
4482
+ #: view/Blocks/Snippet.php:1012 view/SeoSettings/Tracking.php:78
4483
+ msgid "Facebook Pixel"
4484
  msgstr ""
4485
 
4486
+ #: view/Blocks/Snippet.php:1028
4487
+ msgid "Custom Pixel Code"
4488
  msgstr ""
4489
 
4490
+ #: view/Blocks/Snippet.php:1029
4491
+ #, php-format
4492
+ msgid "Add Facebook Pixel code from %sFacebook Events%s."
4493
  msgstr ""
4494
 
4495
+ #: view/Blocks/Snippet.php:1038
4496
+ msgid "Current Pixel Code"
4497
  msgstr ""
4498
 
4499
+ #: view/Blocks/Snippet.php:1047
4500
+ #, php-format
4501
+ msgid ""
4502
+ "Add a Pixel ID for Facebook Pixel at %sSquirrly > SEO Settings > Tracking "
4503
+ "Tools%s."
4504
  msgstr ""
4505
 
4506
+ #: view/Blocks/Snippet.php:1077
4507
+ #, php-format
4508
+ msgid ""
4509
+ "You selected '%s' in %sSettings > Reading%s. It's important to uncheck that "
4510
+ "option."
4511
  msgstr ""
4512
 
4513
+ #: view/Blocks/Snippet.php:1097 view/Blocks/Snippet.php:1128
4514
+ #, php-format
4515
+ msgid ""
4516
+ "This Post Type (%s) has Nofollow set in Automation. See %sSquirrly > SEO "
4517
+ "Settings > Automation%s."
4518
  msgstr ""
4519
 
4520
+ #: view/Blocks/Snippet.php:1104 view/Blocks/Snippet.php:1135
4521
+ #: view/SeoSettings/Automation.php:133 view/SeoSettings/Automation.php:160
4522
+ msgid "Activate Robots Meta"
4523
  msgstr ""
4524
 
4525
+ #: view/Blocks/Snippet.php:1115
4526
+ msgid "Let Google Index This Page"
4527
  msgstr ""
4528
 
4529
+ #: view/Blocks/Snippet.php:1158
4530
  #, php-format
4531
+ msgid ""
4532
+ "Show in sitemap for this Post Type (%s) was excluded from %sSquirrly > SEO "
4533
+ "Settings > Automation%s."
4534
  msgstr ""
4535
 
4536
+ #: view/Blocks/Snippet.php:1165 view/SeoSettings/Automation.php:179
4537
+ #: view/SeoSettings/Sitemap.php:22
4538
+ msgid "Activate Sitemap"
4539
  msgstr ""
4540
 
4541
+ #: view/Blocks/Snippet.php:1175
4542
+ msgid "Show it in Sitemap.xml"
4543
  msgstr ""
4544
 
4545
+ #: view/Blocks/Snippet.php:1214
4546
+ msgid "Loading Squirrly Snippet ..."
 
4547
  msgstr ""
4548
 
4549
+ #: view/Blocks/Snippet.php:1240
4550
+ msgid "Enable Squirrly SEO to load Squirrly Snippet"
4551
  msgstr ""
4552
 
4553
+ #: view/Blocks/Snippet.php:1253
4554
+ #, php-format
4555
+ msgid "%sPlease connect to SquirrlyCloud first%s"
4556
  msgstr ""
4557
 
4558
+ # @ squirrly-seo
4559
+ #: view/Blocks/Support.php:6
4560
+ msgid "Go to Profile"
4561
  msgstr ""
4562
 
4563
  # @ squirrly-seo
4564
+ #: view/Blocks/Support.php:6 view/Blocks/Support.php:7
4565
+ msgid "Profile"
4566
  msgstr ""
4567
 
4568
  # @ squirrly-seo
4569
+ #: view/Blocks/Support.php:17
4570
+ msgid "Support"
4571
  msgstr ""
4572
 
4573
+ # @ squirrly-seo
4574
+ #: view/Blocks/Support.php:20
4575
+ msgid "Need Help with Squirrly SEO?"
4576
  msgstr ""
4577
 
4578
+ #: view/Blocks/Support.php:22 view/Blocks/Support.php:78
4579
+ #, php-format
4580
+ msgid "10 AM to 4 PM (GMT): Mon-Fri %sby email%s."
4581
  msgstr ""
4582
 
4583
+ #: view/Blocks/Support.php:23 view/Blocks/Support.php:79
4584
+ #, php-format
4585
+ msgid "How To Squirrly %swebsite%s."
4586
  msgstr ""
4587
 
4588
+ #: view/Blocks/Support.php:24 view/Blocks/Support.php:80
4589
+ #, php-format
4590
+ msgid "Facebook %sSupport Community%s."
4591
  msgstr ""
4592
 
4593
+ #: view/Blocks/Support.php:25 view/Blocks/Support.php:81
4594
+ #, php-format
4595
+ msgid "Facebook %sMessenger%s."
 
 
 
4596
  msgstr ""
4597
 
4598
+ #: view/Blocks/Support.php:26
4599
+ #, php-format
4600
+ msgid "Twitter %sSupport%s."
 
4601
  msgstr ""
4602
 
4603
+ # @ squirrly-seo
4604
+ #: view/Blocks/Support.php:38
4605
+ msgid "How was your Squirrly experience today?"
 
4606
  msgstr ""
4607
 
4608
+ # @ squirrly-seo
4609
+ #: view/Blocks/Support.php:47
4610
+ msgid "How was Squirrly today?"
 
4611
  msgstr ""
4612
 
4613
+ #: view/Blocks/Support.php:52
4614
+ msgid "Angry"
4615
  msgstr ""
4616
 
4617
+ #: view/Blocks/Support.php:52
4618
+ msgid "Annoying"
 
 
4619
  msgstr ""
4620
 
4621
+ #: view/Blocks/Support.php:55
4622
+ msgid "Sad"
4623
  msgstr ""
4624
 
4625
+ #: view/Blocks/Support.php:55
4626
+ msgid "Bad"
4627
  msgstr ""
4628
 
4629
+ #: view/Blocks/Support.php:58
4630
+ msgid "Happy"
4631
  msgstr ""
4632
 
4633
+ #: view/Blocks/Support.php:58
4634
+ msgid "Nice"
 
 
4635
  msgstr ""
4636
 
4637
+ #: view/Blocks/Support.php:61
4638
+ msgid "Excited"
4639
  msgstr ""
4640
 
4641
+ #: view/Blocks/Support.php:61
4642
+ msgid "Great"
4643
  msgstr ""
4644
 
4645
+ #: view/Blocks/Support.php:64
4646
+ msgid "Love it"
 
 
 
4647
  msgstr ""
4648
 
4649
+ #: view/Blocks/Support.php:70
4650
+ msgid "Please tell us why."
 
 
 
4651
  msgstr ""
4652
 
4653
+ # @ squirrly-seo
4654
+ #: view/Blocks/Support.php:73
4655
+ msgid "Send feedback"
 
 
4656
  msgstr ""
4657
 
4658
+ #: view/Blocks/Support.php:77
4659
+ msgid "For more support:"
 
4660
  msgstr ""
4661
 
4662
+ #: view/Blocks/Support.php:82
4663
  #, php-format
4664
+ msgid "New Lessons Mon. and Tue. on %sTwitter%s."
4665
  msgstr ""
4666
 
4667
+ #: view/Blocks/Support.php:87
4668
+ msgid "Thank you! You can send us a happy face tomorrow too."
 
4669
  msgstr ""
4670
 
4671
+ # @ squirrly-seo
4672
+ #: view/Connect/GoogleAnalytics.php:9
4673
+ #, fuzzy
4674
+ #| msgid "Google %sAnalytics ID%s`:"
4675
+ msgid "Google Analytics"
4676
+ msgstr "Google %sAnalytics ID%s`:"
4677
+
4678
+ #: view/Connect/GoogleAnalytics.php:14
4679
+ msgid "You are connected to Google Analytics"
4680
  msgstr ""
4681
 
4682
+ #: view/Connect/GoogleAnalytics.php:20 view/Connect/GoogleSearchConsole.php:20
4683
+ msgid "Disconnect"
 
4684
  msgstr ""
4685
 
4686
+ #: view/Connect/GoogleAnalytics.php:30
4687
+ msgid "Connect this blog to Google Analytics"
4688
  msgstr ""
4689
 
4690
+ #: view/Connect/GoogleAnalytics.php:31
4691
+ msgid ""
4692
+ "Connect Google Analytics and get traffic insights for your website on each "
4693
+ "Audit"
4694
  msgstr ""
4695
 
4696
+ #: view/Connect/GoogleAnalytics.php:35 view/Connect/GoogleSearchConsole.php:36
4697
+ msgid "Sign in"
 
4698
  msgstr ""
4699
 
4700
+ #: view/Connect/GoogleAnalytics.php:40 view/Connect/GoogleSearchConsole.php:41
4701
+ msgid "Check connection"
4702
  msgstr ""
4703
 
4704
+ #: view/Connect/GoogleSearchConsole.php:9
4705
+ msgid "Google Search Console"
4706
  msgstr ""
4707
 
4708
+ #: view/Connect/GoogleSearchConsole.php:14
4709
+ msgid "You are connected to Google Search Console"
4710
+ msgstr ""
4711
+
4712
+ #: view/Connect/GoogleSearchConsole.php:31
4713
+ msgid "Connect this blog to Google Search Console"
4714
+ msgstr ""
4715
+
4716
+ #: view/Connect/GoogleSearchConsole.php:32
4717
+ msgid ""
4718
+ "Connect Google Search Console and get traffic insights for your website on "
4719
+ "each Audit"
4720
  msgstr ""
4721
 
4722
+ #: view/Dashboard.php:9
4723
+ msgid "Connect to Squirrly Data Cloud"
4724
  msgstr ""
4725
 
4726
+ #: view/Dashboard.php:20
4727
  msgid "Squirrly dashboard"
4728
  msgstr ""
4729
 
4730
+ #: view/FocusPages/Addpage.php:13 view/FocusPages/Pagelist.php:14
 
4731
  msgid ""
4732
+ "Focus Pages bring you clear methods to take your pages from never found to "
4733
+ "always found on Google. Rank your pages by influencing the right ranking "
4734
+ "factors. Turn everything that you see here to Green and you will win."
4735
  msgstr ""
4736
 
4737
+ #: view/FocusPages/Addpage.php:25 view/Research/Research.php:166
4738
+ #: view/SeoSettings/Bulkseo.php:110
4739
+ msgid "Search"
4740
  msgstr ""
4741
 
4742
+ #: view/FocusPages/Addpage.php:74
4743
+ msgid "Set Focus Page"
4744
  msgstr ""
4745
 
4746
+ #: view/FocusPages/Addpage.php:78
4747
+ msgid "Is focus page"
4748
  msgstr ""
4749
 
4750
+ #: view/FocusPages/Addpage.php:89 view/SeoSettings/Bulkseo.php:177
4751
+ msgid "Prev Page"
4752
  msgstr ""
4753
 
4754
+ #: view/FocusPages/Addpage.php:90 view/SeoSettings/Bulkseo.php:178
4755
+ msgid "Next Page"
 
 
4756
  msgstr ""
4757
 
4758
+ #: view/FocusPages/Bestpractice.php:13
4759
+ msgid "Best Practices"
4760
  msgstr ""
4761
 
4762
+ #: view/FocusPages/FocusPageRow.php:39
4763
+ msgid "You can refresh the audit once every 5 minutes"
4764
  msgstr ""
4765
 
4766
+ #: view/FocusPages/FocusPageRow.php:41
4767
+ msgid "Request new audit"
4768
  msgstr ""
4769
 
4770
+ #: view/FocusPages/FocusPageRow.php:71
4771
+ msgid "Delete Focus Page"
4772
  msgstr ""
4773
 
4774
+ #: view/FocusPages/Pagelist.php:25
4775
+ msgid "Current Ranking Drawbacks."
4776
  msgstr ""
4777
 
4778
+ #: view/FocusPages/Pagelist.php:31 view/Ranking/Rankings.php:40
4779
+ #: view/Research/Briefcase.php:34 view/SeoSettings/Bulkseo.php:114
4780
+ msgid "Show All"
 
 
4781
  msgstr ""
4782
 
4783
+ #: view/FocusPages/Pagelist.php:66
4784
+ msgid "Must FIX"
4785
  msgstr ""
4786
 
4787
+ # @ squirrly-seo
4788
+ #: view/FocusPages/Pagelist.php:67
4789
+ #, fuzzy
4790
+ #| msgid "Change it >>"
4791
+ msgid "Chance to Rank"
4792
+ msgstr "Ändern >>"
4793
 
4794
+ #: view/FocusPages/Pagelist.php:104
4795
+ msgid "Welcome to Focus Pages"
4796
  msgstr ""
4797
 
4798
+ #: view/FocusPages/Settings.php:12
4799
+ msgid "Focus Pages Settings"
4800
  msgstr ""
4801
 
4802
+ #: view/Onboarding/Step1.1.php:11 view/Onboarding/Step1.php:11
4803
+ msgid "Welcome to Squirrly SEO 2019 (Strategy)"
4804
  msgstr ""
4805
 
4806
+ #: view/Onboarding/Step1.1.php:22
4807
+ msgid ""
4808
+ "All you need now is to start driving One of your most valuable pages to "
4809
+ "Better Rankings."
4810
  msgstr ""
4811
 
4812
+ #: view/Onboarding/Step1.1.php:28
4813
+ msgid ""
4814
+ "To drive it in the right direction, you have the chance to join (for Free) "
4815
+ "the 14 Days Journey to Better Rankings."
4816
  msgstr ""
4817
 
4818
+ #: view/Onboarding/Step1.1.php:33
4819
+ msgid "You'll get"
4820
  msgstr ""
4821
 
4822
+ #: view/Onboarding/Step1.1.php:35
4823
+ #, php-format
4824
+ msgid ""
4825
+ "the %schance to fix in 14 days%s mistakes from years of ineffective SEO."
4826
  msgstr ""
4827
 
4828
+ #: view/Onboarding/Step1.1.php:36
4829
+ #, php-format
4830
+ msgid "the skills you need to %ssucceed in 14 days%s."
4831
  msgstr ""
4832
 
4833
+ #: view/Onboarding/Step1.1.php:37
4834
+ #, php-format
4835
+ msgid ""
4836
+ "access to the private %sJourneyTeam community%s where you can share your "
4837
+ "experience and talk about it (good and bad, all is accepted)."
4838
  msgstr ""
4839
 
4840
+ #: view/Onboarding/Step1.1.php:38
4841
+ #, php-format
4842
+ msgid ""
4843
+ "receive%s help from the JourneyTeam%s and Private Feedback on your journey "
4844
+ "from Squirrly."
4845
  msgstr ""
4846
 
4847
+ #: view/Onboarding/Step1.1.php:39
4848
+ #, php-format
4849
+ msgid ""
4850
+ "an %sexact recipe to follow for 14 Days%s to bring one of your pages up in "
4851
+ "rankings, for a hands-on experience."
4852
  msgstr ""
4853
 
4854
+ #: view/Onboarding/Step1.1.php:40
4855
+ #, php-format
4856
  msgid ""
4857
+ "%sall the costs%s (to third parties) involved with APIs, technology, cloud "
4858
+ "computing, etc. %sare fully sponsored by Squirrly%s. We sponsor every new "
4859
+ "member who wishes to become part of the winning JourneyTeam."
4860
  msgstr ""
4861
 
4862
+ #: view/Onboarding/Step1.1.php:46 view/Onboarding/Step1.php:43
4863
+ #: view/Onboarding/Step3.php:64
4864
+ msgid "Continue >"
4865
  msgstr ""
4866
 
4867
+ #: view/Onboarding/Step1.php:24
4868
+ msgid "You've got the perfect setup for WordPress SEO."
4869
  msgstr ""
4870
 
4871
+ #: view/Onboarding/Step1.php:27
4872
  #, php-format
4873
  msgid ""
4874
+ "With Squirrly SEO you've just upgraded it to an %sultra-competitive level%s."
 
 
4875
  msgstr ""
4876
 
4877
+ #: view/Onboarding/Step1.php:28
4878
+ #, php-format
4879
  msgid ""
4880
+ "It's equipped with %severything you need%s to drive it to Top 10 rankings."
4881
  msgstr ""
4882
 
4883
+ #: view/Onboarding/Step1.php:30
4884
+ msgid "All the SEO Requirements"
4885
  msgstr ""
4886
 
4887
+ #: view/Onboarding/Step1.php:31
4888
+ msgid ""
4889
+ "We started processing data to provide you with personalized guidance for "
4890
+ "improving rankings."
4891
  msgstr ""
4892
 
4893
+ #: view/Onboarding/Step1.php:32
4894
+ msgid "Powerful SEO capabilities (already available for you to test-drive)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4895
  msgstr ""
4896
 
4897
+ #: view/Onboarding/Step2.php:21
4898
+ msgid "Start the 14 Days Journey"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4899
  msgstr ""
4900
 
4901
+ #: view/Onboarding/Step2.php:33
4902
+ msgid "Awesome! You are on your way to better results."
 
 
4903
  msgstr ""
4904
 
4905
+ #: view/Onboarding/Step2.php:35
4906
+ #, php-format
4907
+ msgid "You will receive the %sdaily recipe%s in your %sDashboard%s."
 
 
 
4908
  msgstr ""
4909
 
4910
+ #: view/Onboarding/Step2.php:41
4911
+ #, php-format
4912
  msgid ""
4913
+ "%sJoin%s the rest of the %sJourneyTeam on the Facebook Group%s and if you "
4914
+ "want you can share with the members that you have started your Journey."
4915
  msgstr ""
4916
 
4917
+ #: view/Onboarding/Step2.php:42
4918
  #, php-format
4919
  msgid ""
4920
+ "%sIn 14 Days you can tell us how it went%s (via messages on our %sFacebook "
4921
+ "Page%s) and we'll tell you what you can do to further improve the results "
4922
+ "you got during the 14 Days."
 
 
4923
  msgstr ""
4924
 
4925
+ #: view/Onboarding/Step2.php:46
4926
+ msgid "Continue to next step >"
4927
  msgstr ""
4928
 
4929
+ #: view/Onboarding/Step2.php:50
4930
+ msgid "Choose how to continue"
4931
  msgstr ""
4932
 
4933
+ #: view/Onboarding/Step2.php:60
4934
+ msgid "Let's Start My 14 Days Journey"
4935
  msgstr ""
4936
 
4937
+ #: view/Onboarding/Step2.php:68
4938
+ msgid "Nah, there is little interest in this"
4939
  msgstr ""
4940
 
4941
+ #: view/Onboarding/Step2.php:77 view/Onboarding/Step3.php:65
4942
+ msgid "Skip this step"
4943
  msgstr ""
4944
 
4945
+ #: view/Onboarding/Step3.php:11
4946
+ msgid "Other SEO Plugins"
 
4947
  msgstr ""
4948
 
4949
+ #: view/Onboarding/Step3.php:27
4950
+ msgid "We've detected another SEO Plugin on your site."
4951
  msgstr ""
4952
 
4953
+ #: view/Onboarding/Step3.php:28
4954
+ #, php-format
4955
+ msgid ""
4956
+ "Just as you'd never place two different sets of tires on the wheels of your "
4957
+ "car, you shouldn't use two different plugins for your WordPress SEO. "
4958
+ "%sSquirrly SEO loads the fastest in all tests done by 3rd parties%s, and "
4959
+ "keeps you best connected on the SEO road."
4960
  msgstr ""
4961
 
4962
+ #: view/Onboarding/Step3.php:32
4963
+ #, php-format
4964
+ msgid ""
4965
+ "%sLet's import your settings and SEO%s from the following plugin into your "
4966
+ "new Squirrly SEO"
4967
  msgstr ""
4968
 
4969
+ #: view/Onboarding/Step3.php:53 view/SeoSettings/Backup.php:52
4970
+ #: view/SeoSettings/Backup.php:80
4971
+ msgid "We couldn't find any SEO plugin or theme to import from."
4972
  msgstr ""
4973
 
4974
+ #: view/Onboarding/Step3.php:59
4975
+ #, php-format
4976
+ msgid ""
4977
+ "You are 100% covered by the new Squirrly SEO. You have all you need in it."
4978
  msgstr ""
4979
 
4980
+ #: view/Onboarding/Step4.php:11
4981
+ msgid "Start using Squirrly SEO 2019 (Strategy)"
4982
  msgstr ""
4983
 
4984
+ #: view/Onboarding/Step4.php:22
4985
+ msgid "Follow all the Squirrly SEO tasks and make them green"
 
4986
  msgstr ""
4987
 
4988
+ #: view/Onboarding/Step4.php:23
4989
  #, php-format
4990
  msgid ""
4991
+ "We made Squirrly SEO so easy for you that %s all you need to do is to %smake "
4992
+ "all tasks green while using it%s."
 
4993
  msgstr ""
4994
 
4995
+ #: view/Onboarding/Step4.php:34
4996
+ msgid "Start using Squirrly SEO"
 
 
 
4997
  msgstr ""
4998
 
4999
+ #: view/Ranking/Gscsync.php:13
5000
+ msgid "Google Search Console Keywords Sync"
 
 
 
5001
  msgstr ""
5002
 
5003
+ #: view/Ranking/Gscsync.php:14 view/Research/Suggested.php:13
 
5004
  msgid ""
5005
+ "See the trending keywords suitable for your website's future topics. We "
5006
+ "check for new keywords weekly based on your latest researches."
 
5007
  msgstr ""
5008
 
5009
+ #: view/Ranking/Gscsync.php:26
5010
+ msgid "Click-Through Rate"
 
 
5011
  msgstr ""
5012
 
5013
+ #: view/Ranking/Gscsync.php:27
5014
+ msgid "Average Position"
5015
  msgstr ""
5016
 
5017
+ #: view/Ranking/Gscsync.php:27
5018
+ msgid "AVG Position"
5019
  msgstr ""
5020
 
5021
+ #: view/Ranking/Gscsync.php:67 view/Research/HistoryDetails.php:80
5022
+ #: view/Research/ResearchDetails.php:41 view/Research/Suggested.php:126
5023
+ msgid "Already in briefcase"
5024
  msgstr ""
5025
 
5026
+ #: view/Ranking/Gscsync.php:72 view/Research/HistoryDetails.php:85
5027
+ #: view/Research/ResearchDetails.php:46 view/Research/Suggested.php:131
5028
+ msgid "Add to briefcase"
5029
  msgstr ""
5030
 
5031
+ #: view/Ranking/Gscsync.php:88
5032
+ msgid "Welcome to Google Search Console Keywords Sync"
5033
  msgstr ""
5034
 
5035
+ #: view/Ranking/Gscsync.php:89
5036
+ msgid "We could not find any keyword from your GSC account"
5037
  msgstr ""
5038
 
5039
+ #: view/Ranking/Gscsync.php:90
5040
+ msgid "You can add keywords in Briefcase and add them to Ranking"
5041
  msgstr ""
5042
 
5043
+ #: view/Ranking/Rankings.php:20
5044
+ msgid ""
5045
+ "It's a fully functional SEO Ranking Tool that helps you find the true "
5046
+ "position of your website in Google for any keyword and any country you want"
5047
  msgstr ""
5048
 
5049
+ #: view/Ranking/Rankings.php:63
5050
+ msgid "Only show ranked articles"
5051
  msgstr ""
5052
 
5053
+ #: view/Ranking/Rankings.php:68
5054
+ msgid "Today Avg. Ranking"
5055
  msgstr ""
5056
 
5057
+ #: view/Ranking/Rankings.php:96
5058
+ msgid "Only show SERP changes"
 
5059
  msgstr ""
5060
 
5061
+ #: view/Ranking/Rankings.php:110
5062
+ msgid "Today SERP Changes"
5063
  msgstr ""
5064
 
5065
+ #: view/Ranking/Rankings.php:123
5066
+ msgid "Path"
 
5067
  msgstr ""
5068
 
5069
+ #: view/Ranking/Rankings.php:125
5070
+ msgid "Rank"
 
5071
  msgstr ""
5072
 
5073
+ #: view/Ranking/Rankings.php:126
5074
+ msgid "Best"
 
5075
  msgstr ""
5076
 
5077
+ #: view/Ranking/Rankings.php:128
5078
+ msgid "Avg Rank"
 
5079
  msgstr ""
5080
 
5081
+ #: view/Ranking/Rankings.php:130 view/Research/History.php:28
5082
+ msgid "Details"
5083
  msgstr ""
5084
 
5085
+ #: view/Ranking/Rankings.php:178
5086
+ msgid "Optimized with SLA"
 
 
 
 
 
 
5087
  msgstr ""
5088
 
5089
+ #: view/Ranking/Rankings.php:186
5090
+ msgid "Social Shares"
5091
  msgstr ""
5092
 
5093
+ #: view/Ranking/Rankings.php:189
5094
+ msgid "Facebook"
5095
  msgstr ""
5096
 
5097
+ #: view/Ranking/Rankings.php:190
5098
+ msgid "Reddit"
5099
  msgstr ""
5100
 
5101
+ #: view/Ranking/Rankings.php:191
5102
+ msgid "Pinterest"
 
5103
  msgstr ""
5104
 
5105
+ #: view/Ranking/Rankings.php:232
5106
+ msgid "Not indexed"
 
5107
  msgstr ""
5108
 
5109
+ #: view/Ranking/Rankings.php:242
5110
+ msgid "No Google Search Console data"
 
5111
  msgstr ""
5112
 
5113
+ #: view/Ranking/Rankings.php:243
5114
+ msgid "No GSC data"
 
 
5115
  msgstr ""
5116
 
5117
+ #: view/Ranking/Rankings.php:247
5118
+ msgid "rank details"
 
5119
  msgstr ""
5120
 
5121
+ #: view/Ranking/Rankings.php:266
5122
+ msgid "Check Ranking again"
 
 
5123
  msgstr ""
5124
 
5125
+ #: view/Ranking/Rankings.php:279
5126
+ msgid "Remove Keyword"
5127
  msgstr ""
5128
 
5129
+ #: view/Ranking/Rankings.php:299
5130
+ msgid "No ranking found."
 
 
5131
  msgstr ""
5132
 
5133
+ #: view/Ranking/Rankings.php:302
5134
+ msgid "Welcome to Squirrly Rankings"
 
 
5135
  msgstr ""
5136
 
5137
+ #: view/Ranking/Rankings.php:325
5138
+ msgid "Synchronize Keywords with Google Search Console"
5139
  msgstr ""
5140
 
5141
+ #: view/Ranking/Settings.php:21
5142
+ msgid "Rankings Settings"
 
5143
  msgstr ""
5144
 
5145
+ #: view/Ranking/Settings.php:45
5146
+ msgid "Google Country"
 
5147
  msgstr ""
5148
 
5149
+ #: view/Ranking/Settings.php:46
5150
  msgid ""
5151
  "Select the Google country for which Squirrly will check the Google rank."
5152
  msgstr ""
5153
 
5154
+ #: view/Ranking/Settings.php:50
5155
  msgid "Default"
5156
  msgstr ""
5157
 
5158
+ #: view/Ranking/Settings.php:51
5159
  msgid "American Samoa"
5160
  msgstr ""
5161
 
5162
+ #: view/Ranking/Settings.php:52
5163
  msgid "Anguilla"
5164
  msgstr ""
5165
 
5166
+ #: view/Ranking/Settings.php:53
5167
  msgid "Antigua and Barbuda"
5168
  msgstr ""
5169
 
5170
+ #: view/Ranking/Settings.php:54
5171
  msgid "Argentina"
5172
  msgstr ""
5173
 
5174
+ #: view/Ranking/Settings.php:55
5175
  msgid "Australia"
5176
  msgstr ""
5177
 
5178
+ #: view/Ranking/Settings.php:56
5179
  msgid "Austria"
5180
  msgstr ""
5181
 
5182
+ #: view/Ranking/Settings.php:57
5183
  msgid "Azerbaijan"
5184
  msgstr ""
5185
 
5186
+ #: view/Ranking/Settings.php:58
5187
  msgid "Belgium"
5188
  msgstr ""
5189
 
5190
+ #: view/Ranking/Settings.php:59
5191
  msgid "Brazil"
5192
  msgstr ""
5193
 
5194
+ #: view/Ranking/Settings.php:60
5195
  msgid "British Virgin Islands"
5196
  msgstr ""
5197
 
5198
+ #: view/Ranking/Settings.php:61
5199
  msgid "Burundi"
5200
  msgstr ""
5201
 
5202
+ #: view/Ranking/Settings.php:62
5203
  msgid "Bulgaria"
5204
  msgstr ""
5205
 
5206
+ #: view/Ranking/Settings.php:63
5207
  msgid "Canada"
5208
  msgstr ""
5209
 
5210
+ #: view/Ranking/Settings.php:64
5211
  msgid "Chad"
5212
  msgstr ""
5213
 
5214
+ #: view/Ranking/Settings.php:65
5215
  msgid "Chile"
5216
  msgstr ""
5217
 
5218
+ #: view/Ranking/Settings.php:66
5219
  msgid "Colombia"
5220
  msgstr ""
5221
 
5222
+ #: view/Ranking/Settings.php:67
5223
  msgid "Costa Rica"
5224
  msgstr ""
5225
 
5226
+ #: view/Ranking/Settings.php:68
5227
  msgid "Côte d'Ivoire"
5228
  msgstr ""
5229
 
5230
+ #: view/Ranking/Settings.php:69
5231
  msgid "Cuba"
5232
  msgstr ""
5233
 
5234
+ #: view/Ranking/Settings.php:70
 
 
 
 
5235
  msgid "Czech Republic"
5236
  msgstr ""
5237
 
5238
+ #: view/Ranking/Settings.php:71
5239
  msgid "Dem. Rep. of the Congo"
5240
  msgstr ""
5241
 
5242
+ #: view/Ranking/Settings.php:72
5243
  msgid "Denmark"
5244
  msgstr ""
5245
 
5246
+ #: view/Ranking/Settings.php:73
5247
  msgid "Djibouti"
5248
  msgstr ""
5249
 
5250
+ #: view/Ranking/Settings.php:74
5251
  msgid "Dominican Republic"
5252
  msgstr ""
5253
 
5254
+ #: view/Ranking/Settings.php:75
5255
  msgid "Ecuador"
5256
  msgstr ""
5257
 
5258
+ #: view/Ranking/Settings.php:76
5259
  msgid "El Salvador"
5260
  msgstr ""
5261
 
5262
+ #: view/Ranking/Settings.php:77
5263
  msgid "Estonia"
5264
  msgstr ""
5265
 
5266
+ #: view/Ranking/Settings.php:78
5267
  msgid "Federated States of Micronesia"
5268
  msgstr ""
5269
 
5270
+ #: view/Ranking/Settings.php:79
5271
  msgid "Fiji"
5272
  msgstr ""
5273
 
5274
+ #: view/Ranking/Settings.php:80
5275
  msgid "Finland"
5276
  msgstr ""
5277
 
5278
+ #: view/Ranking/Settings.php:81
5279
  msgid "France"
5280
  msgstr ""
5281
 
5282
+ #: view/Ranking/Settings.php:82
5283
  msgid "The Gambia"
5284
  msgstr ""
5285
 
5286
+ #: view/Ranking/Settings.php:83
5287
  msgid "Georgia"
5288
  msgstr ""
5289
 
5290
+ #: view/Ranking/Settings.php:84
5291
  msgid "Germany"
5292
  msgstr ""
5293
 
5294
+ #: view/Ranking/Settings.php:85
5295
  msgid "Ghana "
5296
  msgstr ""
5297
 
5298
+ #: view/Ranking/Settings.php:86
5299
  msgid "Gibraltar"
5300
  msgstr ""
5301
 
5302
+ #: view/Ranking/Settings.php:87
5303
  msgid "Greece"
5304
  msgstr ""
5305
 
5306
+ #: view/Ranking/Settings.php:88
5307
  msgid "Greenland"
5308
  msgstr ""
5309
 
5310
+ #: view/Ranking/Settings.php:89
5311
  msgid "Guernsey"
5312
  msgstr ""
5313
 
5314
+ #: view/Ranking/Settings.php:90
5315
  msgid "Honduras"
5316
  msgstr ""
5317
 
5318
+ #: view/Ranking/Settings.php:91
5319
  msgid "Hong Kong"
5320
  msgstr ""
5321
 
5322
+ #: view/Ranking/Settings.php:92
5323
  msgid "Hungary"
5324
  msgstr ""
5325
 
5326
+ #: view/Ranking/Settings.php:93
5327
  msgid "India"
5328
  msgstr ""
5329
 
5330
+ #: view/Ranking/Settings.php:94
5331
  msgid "Indonesia"
5332
  msgstr ""
5333
 
5334
+ #: view/Ranking/Settings.php:95
5335
  msgid "Ireland"
5336
  msgstr ""
5337
 
5338
+ #: view/Ranking/Settings.php:96
5339
  msgid "Isle of Man"
5340
  msgstr ""
5341
 
5342
+ #: view/Ranking/Settings.php:97
5343
  msgid "Israel"
5344
  msgstr ""
5345
 
5346
+ #: view/Ranking/Settings.php:98
5347
  msgid "Italy"
5348
  msgstr ""
5349
 
5350
+ #: view/Ranking/Settings.php:99
5351
  msgid "Jamaica"
5352
  msgstr ""
5353
 
5354
+ #: view/Ranking/Settings.php:100
5355
  msgid "Japan"
5356
  msgstr ""
5357
 
5358
+ #: view/Ranking/Settings.php:101
5359
  msgid "Jersey"
5360
  msgstr ""
5361
 
5362
+ #: view/Ranking/Settings.php:102
5363
  msgid "Kazakhstan"
5364
  msgstr ""
5365
 
5366
+ #: view/Ranking/Settings.php:103
5367
  msgid "Korea"
5368
  msgstr ""
5369
 
5370
+ #: view/Ranking/Settings.php:104
5371
  msgid "Latvia"
5372
  msgstr ""
5373
 
5374
+ #: view/Ranking/Settings.php:105
5375
  msgid "Lesotho"
5376
  msgstr ""
5377
 
5378
+ #: view/Ranking/Settings.php:106
5379
  msgid "Liechtenstein"
5380
  msgstr ""
5381
 
5382
+ #: view/Ranking/Settings.php:107
5383
  msgid "Lithuania"
5384
  msgstr ""
5385
 
5386
+ #: view/Ranking/Settings.php:108
5387
  msgid "Luxembourg"
5388
  msgstr ""
5389
 
5390
+ #: view/Ranking/Settings.php:109
5391
  msgid "Malawi"
5392
  msgstr ""
5393
 
5394
+ #: view/Ranking/Settings.php:110
5395
  msgid "Malaysia"
5396
  msgstr ""
5397
 
5398
+ #: view/Ranking/Settings.php:111
5399
  msgid "Malta"
5400
  msgstr ""
5401
 
5402
+ #: view/Ranking/Settings.php:112
5403
  msgid "Mauritius"
5404
  msgstr ""
5405
 
5406
+ #: view/Ranking/Settings.php:113
5407
  msgid "México"
5408
  msgstr ""
5409
 
5410
+ #: view/Ranking/Settings.php:114
5411
  msgid "Montserrat"
5412
  msgstr ""
5413
 
5414
+ #: view/Ranking/Settings.php:115
5415
  msgid "Namibia"
5416
  msgstr ""
5417
 
5418
+ #: view/Ranking/Settings.php:116
5419
  msgid "Nepal"
5420
  msgstr ""
5421
 
5422
+ #: view/Ranking/Settings.php:117
5423
  msgid "Netherlands"
5424
  msgstr ""
5425
 
5426
+ #: view/Ranking/Settings.php:118
5427
  msgid "New Zealand"
5428
  msgstr ""
5429
 
5430
+ #: view/Ranking/Settings.php:119
5431
  msgid "Nicaragua"
5432
  msgstr ""
5433
 
5434
+ #: view/Ranking/Settings.php:120
5435
  msgid "Nigeria"
5436
  msgstr ""
5437
 
5438
+ #: view/Ranking/Settings.php:121
5439
  msgid "Norfolk Island"
5440
  msgstr ""
5441
 
5442
+ #: view/Ranking/Settings.php:122
5443
  msgid "Norway"
5444
  msgstr ""
5445
 
5446
+ #: view/Ranking/Settings.php:123
5447
  msgid "Pakistan"
5448
  msgstr ""
5449
 
5450
+ #: view/Ranking/Settings.php:124
5451
  msgid "Panamá"
5452
  msgstr ""
5453
 
5454
+ #: view/Ranking/Settings.php:125
5455
  msgid "Paraguay"
5456
  msgstr ""
5457
 
5458
+ #: view/Ranking/Settings.php:126
5459
  msgid "Perú"
5460
  msgstr ""
5461
 
5462
+ #: view/Ranking/Settings.php:127
5463
  msgid "Philippines"
5464
  msgstr ""
5465
 
5466
+ #: view/Ranking/Settings.php:128
5467
  msgid "Pitcairn Islands"
5468
  msgstr ""
5469
 
5470
+ #: view/Ranking/Settings.php:129
5471
  msgid "Poland"
5472
  msgstr ""
5473
 
5474
+ #: view/Ranking/Settings.php:130
5475
  msgid "Portugal"
5476
  msgstr ""
5477
 
5478
+ #: view/Ranking/Settings.php:131
5479
  msgid "Puerto Rico"
5480
  msgstr ""
5481
 
5482
+ #: view/Ranking/Settings.php:132
5483
  msgid "Rep. of the Congo"
5484
  msgstr ""
5485
 
5486
+ #: view/Ranking/Settings.php:133
5487
  msgid "Romania"
5488
  msgstr ""
5489
 
5490
+ #: view/Ranking/Settings.php:134
5491
  msgid "Russia"
5492
  msgstr ""
5493
 
5494
+ #: view/Ranking/Settings.php:135
5495
  msgid "Rwanda"
5496
  msgstr ""
5497
 
5498
+ #: view/Ranking/Settings.php:136
5499
  msgid "Saint Helena"
5500
  msgstr ""
5501
 
5502
+ #: view/Ranking/Settings.php:137
5503
  msgid "San Marino"
5504
  msgstr ""
5505
 
5506
+ #: view/Ranking/Settings.php:138
5507
  msgid "Saudi Arabia"
5508
  msgstr ""
5509
 
5510
+ #: view/Ranking/Settings.php:139
5511
  msgid "Singapore"
5512
  msgstr ""
5513
 
5514
+ #: view/Ranking/Settings.php:140
5515
  msgid "Slovakia"
5516
  msgstr ""
5517
 
5518
+ #: view/Ranking/Settings.php:141
5519
  msgid "South Africa"
5520
  msgstr ""
5521
 
5522
+ #: view/Ranking/Settings.php:142
5523
  msgid "Spain"
5524
  msgstr ""
5525
 
5526
+ #: view/Ranking/Settings.php:143
5527
  msgid "Sri Lanka"
5528
  msgstr ""
5529
 
5530
+ #: view/Ranking/Settings.php:144
5531
  msgid "Sweden"
5532
  msgstr ""
5533
 
5534
+ #: view/Ranking/Settings.php:145
5535
  msgid "Switzerland"
5536
  msgstr ""
5537
 
5538
+ #: view/Ranking/Settings.php:146
5539
  msgid "Taiwan"
5540
  msgstr ""
5541
 
5542
+ #: view/Ranking/Settings.php:147
5543
  msgid "Thailand"
5544
  msgstr ""
5545
 
5546
+ #: view/Ranking/Settings.php:148
5547
  msgid "Trinidad and Tobago"
5548
  msgstr ""
5549
 
5550
+ #: view/Ranking/Settings.php:149
5551
  msgid "Turkey"
5552
  msgstr ""
5553
 
5554
+ #: view/Ranking/Settings.php:150
5555
  msgid "Ukraine"
5556
  msgstr ""
5557
 
5558
+ #: view/Ranking/Settings.php:151
5559
  msgid "United Arab Emirates"
5560
  msgstr ""
5561
 
5562
+ #: view/Ranking/Settings.php:152
5563
  msgid "United Kingdom"
5564
  msgstr ""
5565
 
5566
+ #: view/Ranking/Settings.php:153
5567
  msgid "United States"
5568
  msgstr ""
5569
 
5570
+ #: view/Ranking/Settings.php:154
5571
  msgid "Uruguay"
5572
  msgstr ""
5573
 
5574
+ #: view/Ranking/Settings.php:155
5575
  msgid "Uzbekistan"
5576
  msgstr ""
5577
 
5578
+ #: view/Ranking/Settings.php:156
5579
  msgid "Vanuatu"
5580
  msgstr ""
5581
 
5582
+ #: view/Ranking/Settings.php:157
5583
  msgid "Venezuela"
5584
  msgstr ""
5585
 
5586
+ #: view/Ranking/Settings.php:158
5587
  msgid "Vietnam"
5588
  msgstr ""
5589
 
5590
+ #: view/Research/Briefcase.php:15
 
5591
  msgid ""
5592
+ "Briefcase is essential to managing your SEO Strategy. With Briefcase you'll "
5593
+ "find the best opportunities for keywords you're using in the Awareness "
5594
+ "Stage, Decision Stage and other stages you may plan for your Customer's "
5595
+ "Journey."
 
 
5596
  msgstr ""
5597
 
5598
+ #: view/Research/Briefcase.php:30
5599
+ msgid "Search Keyword"
5600
  msgstr ""
5601
 
5602
+ #: view/Research/Briefcase.php:67
5603
+ msgid "Usage"
5604
  msgstr ""
5605
 
5606
+ #: view/Research/Briefcase.php:68
5607
+ msgid "Ranking"
 
 
5608
  msgstr ""
5609
 
5610
+ #: view/Research/Briefcase.php:123
5611
+ msgid "Search Volume"
 
 
 
5612
  msgstr ""
5613
 
5614
+ #: view/Research/Briefcase.php:181
5615
+ msgid "in"
5616
  msgstr ""
5617
 
5618
+ #: view/Research/Briefcase.php:181
5619
+ msgid "post"
 
5620
  msgstr ""
5621
 
5622
+ #: view/Research/Briefcase.php:181
5623
+ msgid "posts"
 
5624
  msgstr ""
5625
 
5626
+ #: view/Research/Briefcase.php:184
5627
+ msgid "N/A"
 
 
5628
  msgstr ""
5629
 
5630
+ #: view/Research/Briefcase.php:186
5631
+ msgid " ranking"
5632
  msgstr ""
5633
 
5634
+ #: view/Research/Briefcase.php:186
5635
+ msgid " rankings"
 
5636
  msgstr ""
5637
 
5638
+ #: view/Research/Briefcase.php:191
5639
+ msgid "keyword info"
 
5640
  msgstr ""
5641
 
5642
  # @ squirrly-seo
5643
+ #: view/Research/Briefcase.php:213
5644
+ #, fuzzy
5645
+ #| msgid "Do the research"
5646
+ msgid "No research data"
5647
+ msgstr "Recherchieren"
 
 
5648
 
5649
+ #: view/Research/Briefcase.php:231
5650
+ msgid "Send to Rank Checker"
 
 
 
 
 
 
5651
  msgstr ""
5652
 
5653
+ #: view/Research/Briefcase.php:239
5654
+ msgid "Refresh Research"
5655
  msgstr ""
5656
 
5657
+ #: view/Research/Briefcase.php:244
5658
+ msgid "Assign Label"
5659
  msgstr ""
5660
 
5661
+ #: view/Research/Briefcase.php:249
5662
+ msgid "Delete Keyword"
5663
  msgstr ""
5664
 
5665
+ #: view/Research/Briefcase.php:259
5666
  #, php-format
5667
+ msgid "Select Labels for: %s"
5668
  msgstr ""
5669
 
5670
+ #: view/Research/Briefcase.php:273 view/Research/Labels.php:17
5671
+ msgid "Add new Label"
 
 
5672
  msgstr ""
5673
 
5674
+ #: view/Research/Briefcase.php:279
5675
+ msgid "Save Labels"
5676
  msgstr ""
5677
 
5678
+ #: view/Research/Briefcase.php:306
5679
+ msgid "Welcome to Briefcase"
5680
  msgstr ""
5681
 
5682
+ #: view/Research/Briefcase.php:307
5683
+ msgid "To get started with managing keywords for your SEO Strategy"
 
5684
  msgstr ""
5685
 
5686
+ #: view/Research/Briefcase.php:311
5687
+ msgid "Go Find Keywords"
 
 
 
5688
  msgstr ""
5689
 
5690
+ #: view/Research/Briefcase.php:317 view/Research/History.php:61
5691
+ msgid "Then Add them to Briefcase"
5692
  msgstr ""
5693
 
5694
+ #: view/Research/Briefcase.php:326
5695
+ msgid "Backup/Restore Briefcase Keywords"
 
5696
  msgstr ""
5697
 
5698
+ #: view/Research/Briefcase.php:327
5699
+ msgid ""
5700
+ "Keep your briefcase keywords safe in case you change your domain or "
5701
+ "reinstall the plugin"
5702
  msgstr ""
5703
 
5704
+ #: view/Research/Briefcase.php:333 view/SeoSettings/Backup.php:118
5705
+ msgid "Download Backup"
 
 
 
5706
  msgstr ""
5707
 
5708
+ #: view/Research/Briefcase.php:336
5709
+ msgid "Restore Backup"
 
5710
  msgstr ""
5711
 
5712
+ #: view/Research/Briefcase.php:342
5713
+ msgid "Restore Briefcase Keywords"
 
 
 
5714
  msgstr ""
5715
 
5716
+ #: view/Research/Briefcase.php:350
5717
+ msgid "Restore Keywords"
 
 
5718
  msgstr ""
5719
 
5720
+ #: view/Research/Briefcase.php:351
5721
+ msgid "Upload the file with the saved Squirrly Briefcase Keywords."
5722
  msgstr ""
5723
 
5724
+ #: view/Research/History.php:15
5725
+ msgid "See the last Keyword Researches you made."
 
5726
  msgstr ""
5727
 
5728
+ #: view/Research/History.php:42
5729
+ msgid "Show Details"
5730
  msgstr ""
5731
 
5732
+ #: view/Research/History.php:50
5733
+ msgid "Welcome to Keyword Research History"
 
5734
  msgstr ""
5735
 
5736
+ #: view/Research/HistoryDetails.php:22 view/Research/Research.php:174
5737
+ #: view/Research/Suggested.php:39
5738
+ msgid "Trend"
5739
  msgstr ""
5740
 
5741
+ #: view/Research/Labels.php:13
5742
+ msgid "Briefcase Labels"
5743
  msgstr ""
5744
 
5745
+ #: view/Research/Labels.php:14
5746
+ msgid ""
5747
+ "Briefcase Labels will help you sort your keywords based on your SEO "
5748
+ "strategy. Labels are like categories and you can quickly filter your "
5749
+ "keywords by one or more labels."
5750
  msgstr ""
5751
 
5752
+ #: view/Research/Labels.php:22
5753
+ msgid "Add New Label"
 
5754
  msgstr ""
5755
 
5756
+ #: view/Research/Labels.php:27 view/Research/Labels.php:53
5757
+ msgid "Label Name"
5758
  msgstr ""
5759
 
5760
+ #: view/Research/Labels.php:31 view/Research/Labels.php:57
5761
+ msgid "Label Color"
 
5762
  msgstr ""
5763
 
5764
+ #: view/Research/Labels.php:38
5765
+ msgid "Add Label"
5766
  msgstr ""
5767
 
5768
+ #: view/Research/Labels.php:48 view/Research/Labels.php:103
5769
+ msgid "Edit Label"
 
5770
  msgstr ""
5771
 
5772
+ #: view/Research/Labels.php:63
5773
+ msgid "Save Label"
5774
  msgstr ""
5775
 
5776
+ #: view/Research/Labels.php:76
5777
+ msgid "Name"
5778
  msgstr ""
5779
 
5780
+ #: view/Research/Labels.php:77
5781
+ msgid "Color"
5782
  msgstr ""
5783
 
5784
+ #: view/Research/Labels.php:107
5785
+ msgid "Delete Label"
5786
  msgstr ""
5787
 
5788
+ #: view/Research/Labels.php:122
5789
+ msgid "Welcome to Briefcase Labels"
5790
  msgstr ""
5791
 
5792
+ #: view/Research/Labels.php:123
5793
+ msgid "To categorize and filter the keywords from Briefcase"
 
 
5794
  msgstr ""
5795
 
5796
+ #: view/Research/Labels.php:127
5797
+ msgid "Add new label"
 
 
 
5798
  msgstr ""
5799
 
5800
+ #: view/Research/Labels.php:134
5801
+ msgid "Assign keywords to labels"
5802
  msgstr ""
5803
 
5804
+ #: view/Research/Research.php:16
 
5805
  msgid ""
5806
+ "You can now find long-tail keywords that are easy to rank for. Get "
5807
+ "personalized competition data for each keyword you research, thanks to "
5808
+ "Squirrly's Market Intelligence Features."
5809
  msgstr ""
5810
 
5811
+ #: view/Research/Research.php:28 view/Research/Research.php:138
5812
+ msgid "You've reached your Keyword Research Limit"
5813
  msgstr ""
5814
 
5815
+ #: view/Research/Research.php:29 view/Research/Research.php:139
5816
+ msgid "Check Your Account"
5817
  msgstr ""
5818
 
5819
+ #: view/Research/Research.php:32
5820
+ msgid "Add a keyword to Briefcase"
 
5821
  msgstr ""
5822
 
5823
+ #: view/Research/Research.php:36
5824
+ msgid "It's best if you focus on finding Long-Tail Keywords."
5825
  msgstr ""
5826
 
5827
+ #: view/Research/Research.php:50
5828
+ msgid "Step 1/3: Enter a starting 2-3 words keyword"
5829
  msgstr ""
5830
 
5831
+ #: view/Research/Research.php:54
5832
+ msgid "Enter a keyword that matches your business"
5833
  msgstr ""
5834
 
5835
+ #: view/Research/Research.php:57
5836
+ msgid "Focus on finding Long Tail Keywords."
 
5837
  msgstr ""
5838
 
5839
+ #: view/Research/Research.php:58
5840
+ msgid "You need to enter a keyword first"
 
5841
  msgstr ""
5842
 
5843
+ #: view/Research/Research.php:64 view/Research/Research.php:96
5844
+ msgid "Next"
 
 
5845
  msgstr ""
5846
 
5847
+ #: view/Research/Research.php:70
5848
+ msgid "Step 2/3: Choose a country for your keyword research"
5849
  msgstr ""
5850
 
5851
+ #: view/Research/Research.php:74
5852
+ msgid "Select country"
5853
  msgstr ""
5854
 
5855
+ #: view/Research/Research.php:88
 
5856
  msgid ""
5857
+ "For local SEO you need to select the Country where you run your business"
 
5858
  msgstr ""
5859
 
5860
+ #: view/Research/Research.php:93 view/Research/Research.php:145
5861
+ #: view/Research/Research.php:186
5862
+ msgid "Start Over"
5863
  msgstr ""
5864
 
5865
+ #: view/Research/Research.php:101
5866
+ msgid "Step 3/3: Select similar keywords from below"
 
5867
  msgstr ""
5868
 
5869
+ #: view/Research/Research.php:141
5870
+ msgid "We could not find similar keywords"
5871
  msgstr ""
5872
 
5873
+ # @ squirrly-seo
5874
+ #: view/Research/Research.php:148
5875
+ #, fuzzy
5876
+ #| msgid "Do the research"
5877
+ msgid "Do research"
5878
+ msgstr "Recherchieren"
5879
 
5880
+ #: view/Research/Research.php:153
5881
+ msgid "We found some relevant keywords for you"
 
 
5882
  msgstr ""
5883
 
5884
+ #: view/Research/Research.php:154
5885
+ msgid "We could not find relevant keywords for you"
5886
  msgstr ""
5887
 
5888
+ #: view/Research/Suggested.php:147
5889
+ msgid "Welcome to Suggested Keywords"
 
5890
  msgstr ""
5891
 
5892
+ #: view/Research/Suggested.php:148
5893
+ msgid "We check once a week all the keywords from your briefcase"
 
 
5894
  msgstr ""
5895
 
5896
+ #: view/Research/Suggested.php:149
5897
+ msgid "If we find better keywords, they will be listed here"
 
 
5898
  msgstr ""
5899
 
5900
+ #: view/SeoSettings/Automation.php:18
5901
+ msgid "Meta Automation"
 
5902
  msgstr ""
5903
 
5904
+ #: view/SeoSettings/Automation.php:23 view/SeoSettings/Automation.php:234
5905
+ msgid "Activate Patterns"
5906
  msgstr ""
5907
 
5908
+ #: view/SeoSettings/Automation.php:31
5909
+ msgid ""
5910
+ "Control how post types are displayed on your site, within search engine "
5911
+ "results, and social media feeds."
5912
  msgstr ""
5913
 
5914
+ #: view/SeoSettings/Automation.php:49
5915
+ msgid "Customize the automation for each post type"
5916
  msgstr ""
5917
 
5918
+ #: view/SeoSettings/Automation.php:81 view/SeoSettings/Metas.php:153
5919
+ msgid "Tips: Length 10-75 chars"
5920
  msgstr ""
5921
 
5922
+ #: view/SeoSettings/Automation.php:90 view/SeoSettings/Metas.php:162
5923
+ msgid "Tips: Length 70-320 chars"
5924
  msgstr ""
5925
 
5926
+ #: view/SeoSettings/Automation.php:99
5927
+ msgid "Separator"
5928
  msgstr ""
5929
 
5930
+ #: view/SeoSettings/Automation.php:100
5931
+ msgid ""
5932
+ "Use separator to help user read the most relevant part of your title and "
5933
+ "increase Conversion Rate"
5934
  msgstr ""
5935
 
5936
+ #: view/SeoSettings/Automation.php:140
5937
+ msgid "Let Google Index it"
5938
  msgstr ""
5939
 
5940
+ #: view/SeoSettings/Automation.php:141
5941
  msgid ""
5942
+ "If you switch off this option, Squirrly will add noindex meta for this post "
5943
+ "type."
 
5944
  msgstr ""
5945
 
5946
+ #: view/SeoSettings/Automation.php:167
5947
+ msgid "Send Authority to it"
 
5948
  msgstr ""
5949
 
5950
+ #: view/SeoSettings/Automation.php:168
 
5951
  msgid ""
5952
+ "If you sq-switch off this option, Squirrly will add nofollow meta for this "
5953
+ "post type."
5954
  msgstr ""
5955
 
5956
+ #: view/SeoSettings/Automation.php:186
5957
+ msgid "Include In Sitemap"
 
 
5958
  msgstr ""
5959
 
5960
+ #: view/SeoSettings/Automation.php:187
5961
+ msgid "Let Squirrly SEO include this post type in Squirrly Sitemap XML."
5962
  msgstr ""
5963
 
5964
+ #: view/SeoSettings/Automation.php:198
5965
+ msgid "Redirect Attachments Page"
5966
  msgstr ""
5967
 
5968
+ #: view/SeoSettings/Automation.php:199
5969
+ msgid "Redirect the attachment page to its image URL."
5970
  msgstr ""
5971
 
5972
+ #: view/SeoSettings/Automation.php:200
5973
+ msgid "Recommended if your website is not a photography website."
5974
  msgstr ""
5975
 
5976
+ #: view/SeoSettings/Automation.php:222
5977
+ msgid "Load Squirrly SEO METAs"
5978
  msgstr ""
5979
 
5980
+ #: view/SeoSettings/Automation.php:223
5981
+ msgid ""
5982
+ "Let Squirrly SEO load the Title, Description, Keyword METAs for this post "
5983
+ "type."
5984
  msgstr ""
5985
 
5986
+ # @ squirrly-seo
5987
+ #: view/SeoSettings/Automation.php:241
5988
+ #, fuzzy
5989
+ #| msgid "Squirrly settings"
5990
+ msgid "Load Squirrly Patterns"
5991
+ msgstr "Squirrly Einstellungen"
5992
 
5993
+ #: view/SeoSettings/Automation.php:242
5994
+ msgid "Let Squirrly SEO load the Patterns for this post type."
5995
  msgstr ""
5996
 
5997
+ #: view/SeoSettings/Automation.php:253
5998
+ msgid "Activate Json-Ld"
5999
  msgstr ""
6000
 
6001
+ #: view/SeoSettings/Automation.php:260
6002
+ msgid "Load JSON-LD Structured Data"
6003
  msgstr ""
6004
 
6005
+ #: view/SeoSettings/Automation.php:261
6006
+ msgid "Let Squirrly SEO load the JSON-LD META for this post type."
6007
  msgstr ""
6008
 
6009
+ #: view/SeoSettings/Automation.php:277 view/SeoSettings/Automation.php:310
6010
+ #: view/SeoSettings/Automation.php:337
6011
+ msgid "Activate Social Media"
6012
  msgstr ""
6013
 
6014
+ #: view/SeoSettings/Automation.php:283
6015
+ msgid "Open Graph & JSON-LD Type"
 
 
6016
  msgstr ""
6017
 
6018
+ #: view/SeoSettings/Automation.php:284
6019
+ msgid "Select which Open Graph type to load for this post type."
6020
  msgstr ""
6021
 
6022
+ #: view/SeoSettings/Automation.php:285
6023
+ msgid "JSON-LD will try to load the relevant data for this type."
6024
  msgstr ""
6025
 
6026
+ #: view/SeoSettings/Automation.php:324
6027
+ msgid "Load Squirrly Open Graph"
6028
  msgstr ""
6029
 
6030
+ #: view/SeoSettings/Automation.php:325
6031
+ msgid "Let Squirrly SEO load the Open Graph for this post type."
6032
  msgstr ""
6033
 
6034
+ #: view/SeoSettings/Automation.php:351
6035
+ msgid "Load Squirrly Twitter Card"
6036
  msgstr ""
6037
 
6038
+ #: view/SeoSettings/Automation.php:352
6039
+ msgid "Let Squirrly SEO load the Twitter Card for this post type."
6040
  msgstr ""
6041
 
6042
+ #: view/SeoSettings/Automation.php:367 view/SeoSettings/Automation.php:386
6043
+ #: view/SeoSettings/Tracking.php:21
6044
+ msgid "Activate Trackers"
6045
  msgstr ""
6046
 
6047
+ #: view/SeoSettings/Automation.php:374
6048
+ msgid "Load Google Analytics Tracking Script"
6049
  msgstr ""
6050
 
6051
+ #: view/SeoSettings/Automation.php:375
6052
+ msgid "Let Google Analytics Tracking to load for this post type."
6053
  msgstr ""
6054
 
6055
+ #: view/SeoSettings/Automation.php:393
6056
+ msgid "Load Facebook Pixel Tracking Script"
6057
  msgstr ""
6058
 
6059
+ #: view/SeoSettings/Automation.php:394
6060
+ msgid "Let Facebook Pixel Tracking to load for this post type."
 
6061
  msgstr ""
6062
 
6063
+ #: view/SeoSettings/Automation.php:404
6064
+ #, php-format
6065
+ msgid "Do you want to delete the automation for %s?"
 
6066
  msgstr ""
6067
 
6068
+ #: view/SeoSettings/Automation.php:404
6069
  #, php-format
6070
+ msgid "Remove automation for %s"
 
 
6071
  msgstr ""
6072
 
6073
+ #: view/SeoSettings/Automation.php:430
6074
+ msgid "Add another post type for automation"
 
6075
  msgstr ""
6076
 
6077
+ #: view/SeoSettings/Automation.php:436 view/SeoSettings/Automation.php:451
6078
+ msgid "Add Post Type"
 
6079
  msgstr ""
6080
 
6081
+ #: view/SeoSettings/Automation.php:437
6082
+ msgid "Add new post types in the list and customize the automation for it."
 
 
 
6083
  msgstr ""
6084
 
6085
  # @ squirrly-seo
6086
+ #: view/SeoSettings/Automation.php:460
6087
+ #, fuzzy
6088
+ #| msgid "Squirrly settings"
6089
+ msgid "Squirrly Patterns"
6090
+ msgstr "Squirrly Einstellungen"
6091
+
6092
+ #: view/SeoSettings/Automation.php:462
6093
+ msgid ""
6094
+ "Use the Pattern system to prevent Title and Description duplicates between "
6095
+ "posts"
6096
  msgstr ""
6097
 
6098
+ #: view/SeoSettings/Automation.php:468
6099
  msgid ""
6100
+ "Patterns change the codes like {{title}} with the actual value of the post "
6101
+ "Title."
6102
  msgstr ""
6103
 
6104
+ #: view/SeoSettings/Automation.php:469
6105
+ msgid ""
6106
+ "In Squirrly, each post type in your site comes with a predefined posting "
6107
+ "pattern when displayed onto your website. However, based on your site's "
6108
+ "purpose and needs, you can also decide what information these patterns will "
6109
+ "include."
6110
  msgstr ""
6111
 
6112
+ #: view/SeoSettings/Automation.php:470
6113
  msgid ""
6114
+ "Once you set up a pattern for a particular post type, only the content "
6115
+ "required by your custom sequence will be displayed."
6116
  msgstr ""
6117
 
6118
+ #: view/SeoSettings/Automation.php:471
6119
  #, php-format
6120
+ msgid ""
6121
+ "Squirrly lets you see how the customized patterns will apply when posts/"
6122
+ "pages are shared across social media or search engine feeds. You just need "
6123
+ "to go to the %sBulk SEO%s and see the meta information for each post type."
6124
  msgstr ""
6125
 
6126
+ #: view/SeoSettings/Automation.php:479
6127
+ msgid "META Lengths"
 
6128
  msgstr ""
6129
 
6130
+ #: view/SeoSettings/Automation.php:481
6131
+ msgid "Change the lengths for each META on automation"
6132
  msgstr ""
6133
 
6134
+ #: view/SeoSettings/Automation.php:487
6135
+ msgid "Title Length"
6136
  msgstr ""
6137
 
6138
+ #: view/SeoSettings/Automation.php:495
6139
+ msgid "Description Length"
6140
  msgstr ""
6141
 
6142
+ #: view/SeoSettings/Automation.php:503
6143
+ msgid "Open Graph Title Length"
6144
  msgstr ""
6145
 
6146
+ #: view/SeoSettings/Automation.php:511
6147
+ msgid "Open Graph Description Length"
6148
  msgstr ""
6149
 
6150
+ #: view/SeoSettings/Automation.php:519
6151
+ msgid "Twitter Card Title Length"
6152
  msgstr ""
6153
 
6154
+ #: view/SeoSettings/Automation.php:527
6155
+ msgid "Twitter Card Description Length"
6156
  msgstr ""
6157
 
6158
+ #: view/SeoSettings/Automation.php:535
6159
+ msgid "JSON-LD Title Length"
6160
  msgstr ""
6161
 
6162
+ #: view/SeoSettings/Automation.php:543
6163
+ msgid "JSON-LD Description Length"
6164
  msgstr ""
6165
 
6166
+ #: view/SeoSettings/Backup.php:14
6167
+ msgid "Import Settings & SEO"
6168
  msgstr ""
6169
 
6170
+ #: view/SeoSettings/Backup.php:17
6171
+ msgid ""
6172
+ "Import the settings and SEO from other plugins so you can use only Squirrly "
6173
+ "SEO for on-page SEO."
6174
  msgstr ""
6175
 
6176
+ #: view/SeoSettings/Backup.php:18
6177
+ msgid ""
6178
+ "Note! If you import the SEO settings from other plugins or themes, you will "
6179
+ "lose all the settings that you had in Squirrly SEO. Make sure you backup "
6180
+ "your settings from the panel below before you do this."
6181
  msgstr ""
6182
 
6183
+ #: view/SeoSettings/Backup.php:33
6184
+ msgid "Import Settings From"
6185
  msgstr ""
6186
 
6187
+ #: view/SeoSettings/Backup.php:34
6188
+ msgid "Select the plugin or theme you want to import the Settings from."
6189
  msgstr ""
6190
 
6191
+ #: view/SeoSettings/Backup.php:50
6192
+ msgid "Import Settings"
6193
  msgstr ""
6194
 
6195
+ #: view/SeoSettings/Backup.php:61
6196
+ msgid "Import SEO From"
6197
  msgstr ""
6198
 
6199
+ #: view/SeoSettings/Backup.php:62
6200
+ msgid "Select the plugin or theme you want to import the SEO settings from."
6201
  msgstr ""
6202
 
6203
+ #: view/SeoSettings/Backup.php:78
6204
+ msgid "Import SEO"
6205
  msgstr ""
6206
 
6207
+ #: view/SeoSettings/Backup.php:89
6208
+ msgid "Backup Settings & SEO"
6209
  msgstr ""
6210
 
6211
+ #: view/SeoSettings/Backup.php:91
6212
+ msgid ""
6213
+ "You can now download your Squirrly settings in an sql file before you go "
6214
+ "ahead and import the SEO settings from another plugin. That way, you can "
6215
+ "always go back to your Squirrly settings."
6216
  msgstr ""
6217
 
6218
+ #: view/SeoSettings/Backup.php:98
6219
+ msgid "Backup Settings"
6220
  msgstr ""
6221
 
6222
+ #: view/SeoSettings/Backup.php:99
6223
+ msgid "Download all the settings from Squirrly SEO."
6224
  msgstr ""
6225
 
6226
+ #: view/SeoSettings/Backup.php:104
6227
+ msgid "Download Backup"
6228
  msgstr ""
6229
 
6230
+ #: view/SeoSettings/Backup.php:112
6231
+ msgid "Backup SEO"
6232
  msgstr ""
6233
 
6234
+ #: view/SeoSettings/Backup.php:113
6235
+ msgid "Download all the Squirrly SEO Snippet optimizations."
6236
  msgstr ""
6237
 
6238
+ #: view/SeoSettings/Backup.php:126
6239
+ msgid "Restore Settings & SEO"
6240
  msgstr ""
6241
 
6242
+ #: view/SeoSettings/Backup.php:128
6243
+ msgid "Restore the settings and all the pages optimized with Squirrly SEO."
6244
  msgstr ""
6245
 
6246
+ #: view/SeoSettings/Backup.php:135 view/SeoSettings/Backup.php:144
6247
+ msgid "Restore Settings"
 
6248
  msgstr ""
6249
 
6250
+ #: view/SeoSettings/Backup.php:136
6251
+ msgid "Upload the file with the saved Squirrly Settings."
 
6252
  msgstr ""
6253
 
6254
+ #: view/SeoSettings/Backup.php:152 view/SeoSettings/Backup.php:161
6255
+ msgid "Restore SEO"
 
6256
  msgstr ""
6257
 
6258
+ #: view/SeoSettings/Backup.php:153
6259
+ msgid "Upload the file with the saved Squirrly SEO SQL file."
6260
  msgstr ""
6261
 
6262
+ #: view/SeoSettings/Bulkseo.php:19
6263
+ msgid ""
6264
+ "Simplify the SEO process for all your posts types and optimize them in just "
6265
+ "minutes. "
6266
  msgstr ""
6267
 
6268
+ #: view/SeoSettings/Bulkseo.php:89
6269
+ msgid "Any status"
6270
  msgstr ""
6271
 
6272
+ #: view/SeoSettings/BulkseoRow.php:26
 
6273
  #, php-format
6274
+ msgid "View &#8220;%s&#8221;"
6275
  msgstr ""
6276
 
6277
+ #: view/SeoSettings/Favicon.php:16
6278
+ msgid "Website Icon"
 
6279
  msgstr ""
6280
 
6281
+ #: view/SeoSettings/Favicon.php:21
6282
+ msgid "Activate Favicon"
6283
  msgstr ""
6284
 
6285
+ #: view/SeoSettings/Favicon.php:29
6286
+ msgid ""
6287
+ "Add your website icon in the browser tabs and on other devices like iPhone, "
6288
+ "iPad and Android phones."
6289
  msgstr ""
6290
 
6291
+ #: view/SeoSettings/Favicon.php:43
6292
+ msgid "Upload file"
6293
  msgstr ""
6294
 
6295
+ #: view/SeoSettings/Favicon.php:44
6296
+ msgid "Upload a jpg, jpeg, png or ico file."
6297
  msgstr ""
6298
 
6299
+ #: view/SeoSettings/Favicon.php:74
6300
+ msgid "Add Mobile Favicon"
6301
  msgstr ""
6302
 
6303
+ #: view/SeoSettings/Favicon.php:75
6304
+ msgid "Also load the favicon for mobile devices."
 
6305
  msgstr ""
6306
 
6307
+ # @ squirrly-seo
6308
+ #: view/SeoSettings/Favicon.php:81
6309
  msgid ""
6310
+ "If you don't see the new icon in your browser, empty the browser cache and "
6311
+ "refresh the page."
6312
  msgstr ""
6313
 
6314
+ #: view/SeoSettings/Favicon.php:82
6315
+ msgid "Accepted file types: JPG, JPEG, GIF and PNG."
6316
  msgstr ""
6317
 
6318
+ #: view/SeoSettings/Favicon.php:83
6319
+ msgid ""
6320
+ "Does not physically create the favicon.ico file. The best option for "
6321
+ "Multisites."
6322
  msgstr ""
6323
 
6324
+ #: view/SeoSettings/Jsonld.php:16
6325
+ msgid "JSON-LD Structured Data"
 
6326
  msgstr ""
6327
 
6328
+ #: view/SeoSettings/Jsonld.php:52
6329
+ msgid "Your Site Type"
 
6330
  msgstr ""
6331
 
6332
+ #: view/SeoSettings/Jsonld.php:53
6333
+ msgid ""
6334
+ "The Organization details will be added in JSON-LD publisher section for "
6335
+ "every page and post"
6336
  msgstr ""
6337
 
6338
+ #: view/SeoSettings/Jsonld.php:58
6339
+ msgid "Organization"
 
6340
  msgstr ""
6341
 
6342
+ #: view/SeoSettings/Jsonld.php:59
6343
+ msgid "Personal"
 
6344
  msgstr ""
6345
 
6346
+ #: view/SeoSettings/Jsonld.php:68
6347
+ msgid "Your Organization Name"
 
6348
  msgstr ""
6349
 
6350
+ #: view/SeoSettings/Jsonld.php:69
6351
+ msgid "eg. COMPANY LTD"
 
6352
  msgstr ""
6353
 
6354
+ #: view/SeoSettings/Jsonld.php:77 view/SeoSettings/Jsonld.php:147
6355
+ msgid "Logo URL"
 
6356
  msgstr ""
6357
 
6358
+ #: view/SeoSettings/Jsonld.php:78 view/SeoSettings/Jsonld.php:148
6359
+ msgid "eg. /wp-content/uploads/logo.png"
 
6360
  msgstr ""
6361
 
6362
+ #: view/SeoSettings/Jsonld.php:82 view/SeoSettings/Jsonld.php:152
6363
+ #: view/SeoSettings/Metas.php:184
6364
+ msgid "Select Image"
6365
  msgstr ""
6366
 
6367
+ #: view/SeoSettings/Jsonld.php:87 view/SeoSettings/Jsonld.php:157
6368
+ msgid "Contact Phone"
 
6369
  msgstr ""
6370
 
6371
+ #: view/SeoSettings/Jsonld.php:88 view/SeoSettings/Jsonld.php:158
6372
+ msgid "eg. +1-541-754-3010"
 
6373
  msgstr ""
6374
 
6375
+ #: view/SeoSettings/Jsonld.php:96
6376
+ msgid "Contact Type"
 
6377
  msgstr ""
6378
 
6379
+ #: view/SeoSettings/Jsonld.php:101
6380
+ msgid "Customer Service"
 
6381
  msgstr ""
6382
 
6383
+ #: view/SeoSettings/Jsonld.php:102
6384
+ msgid "Technical Support"
 
6385
  msgstr ""
6386
 
6387
+ #: view/SeoSettings/Jsonld.php:103
6388
+ msgid "Billing Support"
 
6389
  msgstr ""
6390
 
6391
+ #: view/SeoSettings/Jsonld.php:104
6392
+ msgid "Bill Payment"
6393
  msgstr ""
6394
 
6395
+ #: view/SeoSettings/Jsonld.php:105
6396
+ msgid "Sales"
6397
  msgstr ""
6398
 
6399
+ #: view/SeoSettings/Jsonld.php:106
6400
+ msgid "Reservations"
6401
  msgstr ""
6402
 
6403
+ #: view/SeoSettings/Jsonld.php:107
6404
+ msgid "Credit Card Support"
6405
  msgstr ""
6406
 
6407
+ #: view/SeoSettings/Jsonld.php:108
6408
+ msgid "Emergency"
6409
  msgstr ""
6410
 
6411
+ #: view/SeoSettings/Jsonld.php:109
6412
+ msgid "Baggage Tracking"
6413
  msgstr ""
6414
 
6415
+ #: view/SeoSettings/Jsonld.php:110
6416
+ msgid "Roadside Assistance"
6417
  msgstr ""
6418
 
6419
+ #: view/SeoSettings/Jsonld.php:111
6420
+ msgid "Package Tracking"
6421
  msgstr ""
6422
 
6423
+ #: view/SeoSettings/Jsonld.php:117 view/SeoSettings/Jsonld.php:166
6424
+ msgid "Short Description"
6425
  msgstr ""
6426
 
6427
+ #: view/SeoSettings/Jsonld.php:118
6428
+ msgid "A short description about the company. 20-50 words."
 
6429
  msgstr ""
6430
 
6431
+ #: view/SeoSettings/Jsonld.php:129
6432
+ msgid "Your Name"
 
6433
  msgstr ""
6434
 
6435
+ #: view/SeoSettings/Jsonld.php:130
6436
+ msgid "eg. John Smith"
 
6437
  msgstr ""
6438
 
6439
+ #: view/SeoSettings/Jsonld.php:138
6440
+ msgid "Job Title"
 
6441
  msgstr ""
6442
 
6443
+ #: view/SeoSettings/Jsonld.php:139
6444
+ msgid "eg. Sales Manager"
6445
  msgstr ""
6446
 
6447
+ #: view/SeoSettings/Jsonld.php:167
6448
+ msgid "A short description about your job title."
6449
  msgstr ""
6450
 
6451
+ #: view/SeoSettings/Metas.php:43
6452
+ msgid "Optimize the Titles"
6453
  msgstr ""
6454
 
6455
+ #: view/SeoSettings/Metas.php:44
6456
+ msgid ""
6457
+ "Add the Title Tag in the page header. You can customize it using the Bulk "
6458
+ "SEO and Squirrly SEO Snippet."
6459
  msgstr ""
6460
 
6461
+ #: view/SeoSettings/Metas.php:54
6462
+ msgid "Optimize Descriptions"
6463
  msgstr ""
6464
 
6465
+ #: view/SeoSettings/Metas.php:55
6466
+ msgid ""
6467
+ "Add the Description meta in the page header. You can customize it using the "
6468
+ "Bulk SEO and Squirrly SEO Snippet."
6469
  msgstr ""
6470
 
6471
+ #: view/SeoSettings/Metas.php:78
6472
+ msgid "Add Canonical Meta Link"
6473
  msgstr ""
6474
 
6475
+ #: view/SeoSettings/Metas.php:79
6476
+ msgid ""
6477
+ "Add canonical link meta in the page header. You can customize the canonical "
6478
+ "link on each page."
6479
  msgstr ""
6480
 
6481
+ #: view/SeoSettings/Metas.php:80
6482
+ msgid ""
6483
+ "Also add prev & next links metas in the page header when navigate between "
6484
+ "blog pages."
6485
  msgstr ""
6486
 
6487
+ #: view/SeoSettings/Metas.php:90
6488
+ msgid "Add Dublin Core Meta"
 
6489
  msgstr ""
6490
 
6491
+ #: view/SeoSettings/Metas.php:91
6492
+ msgid "Add the Dublin Core meta in the page header."
 
6493
  msgstr ""
6494
 
6495
+ #: view/SeoSettings/Metas.php:98
6496
+ msgid "More SEO Settings"
 
6497
  msgstr ""
6498
 
6499
+ #: view/SeoSettings/Metas.php:106
6500
+ msgid "Add the Post tags in Keyword META"
 
6501
  msgstr ""
6502
 
6503
+ #: view/SeoSettings/Metas.php:107
6504
+ msgid ""
6505
+ "Add all the tags from your posts as keywords. Not recommended when you use "
6506
+ "Keywords in Squirrly SEO Snippet."
6507
  msgstr ""
6508
 
6509
+ #: view/SeoSettings/Metas.php:117
6510
+ msgid "Add Robots Meta"
 
6511
  msgstr ""
6512
 
6513
+ #: view/SeoSettings/Metas.php:118
6514
+ msgid ""
6515
+ "Add the Index/Noindex and Follow/Nofollow options in Squirrly SEO Snippet."
6516
  msgstr ""
6517
 
6518
+ #: view/SeoSettings/Metas.php:128
6519
+ msgid "Activate Snippet in Frontend"
 
6520
  msgstr ""
6521
 
6522
+ #: view/SeoSettings/Metas.php:129
6523
+ msgid ""
6524
+ "Load Squirrly SEO Snippet in Frontend to customize the SEO directly from "
6525
+ "page preview."
6526
  msgstr ""
6527
 
6528
+ #: view/SeoSettings/Metas.php:140
6529
+ msgid "First Page Optimization"
6530
  msgstr ""
6531
 
6532
+ #: view/SeoSettings/Metas.php:142
6533
+ msgid ""
6534
+ "Needed when you didn't set a specific page as Homepage in Settings > Reading "
6535
+ "page"
6536
  msgstr ""
6537
 
6538
+ #: view/SeoSettings/Metas.php:171
6539
+ msgid "Tips: use 2-4 keywords"
6540
  msgstr ""
6541
 
6542
+ #: view/SeoSettings/Metas.php:180
6543
+ msgid "/wp-content/uploads/logo.png"
6544
  msgstr ""
6545
 
6546
+ #: view/SeoSettings/Metas.php:192
6547
+ msgid "First Page Preview"
6548
  msgstr ""
6549
 
6550
+ #: view/SeoSettings/Metas.php:194
6551
+ msgid "See how the social snippet will look like for the front page"
 
6552
  msgstr ""
6553
 
6554
+ #: view/SeoSettings/Metas.php:199
6555
+ msgid "Squirrly Snippet"
 
6556
  msgstr ""
6557
 
6558
+ #: view/SeoSettings/Metas.php:210
6559
+ msgid ""
6560
+ "If you don't see any changes in your Google snippet, check if other SEO "
6561
+ "themes or plugins affect Squirrly."
6562
  msgstr ""
6563
 
6564
+ #: view/SeoSettings/Robots.php:21
6565
+ msgid "Activate Robots"
 
6566
  msgstr ""
6567
 
6568
+ #: view/SeoSettings/Robots.php:29
6569
+ msgid ""
6570
+ "A robots.txt file tells search engine crawlers which pages or files the "
6571
+ "crawler can or can't request from your site."
6572
  msgstr ""
6573
 
6574
+ #: view/SeoSettings/Robots.php:44
6575
+ msgid "Edit the Robots.txt data"
6576
  msgstr ""
6577
 
6578
+ #: view/SeoSettings/Robots.php:45
6579
  msgid ""
6580
+ "Does not physically create the robots.txt file. The best option for "
6581
+ "Multisites."
6582
  msgstr ""
6583
 
6584
+ #: view/SeoSettings/Sitemap.php:53
6585
+ msgid "Blogging Frequency"
6586
  msgstr ""
6587
 
6588
+ #: view/SeoSettings/Sitemap.php:54
6589
+ msgid "How often do you write new posts?"
6590
  msgstr ""
6591
 
6592
+ #: view/SeoSettings/Sitemap.php:58
6593
+ msgid "every hour"
6594
  msgstr ""
6595
 
6596
+ #: view/SeoSettings/Sitemap.php:59
6597
+ msgid "every day"
6598
  msgstr ""
6599
 
6600
+ #: view/SeoSettings/Sitemap.php:60
6601
+ msgid "1-3 times per week"
6602
  msgstr ""
6603
 
6604
+ #: view/SeoSettings/Sitemap.php:61
6605
+ msgid "1-3 times per month"
6606
  msgstr ""
6607
 
6608
+ #: view/SeoSettings/Sitemap.php:62
6609
+ msgid "1-3 times per year"
 
6610
  msgstr ""
6611
 
6612
+ #: view/SeoSettings/Sitemap.php:72
6613
+ msgid "Ping New Posts to Google"
 
6614
  msgstr ""
6615
 
6616
+ #: view/SeoSettings/Sitemap.php:73
6617
+ msgid "Ping your sitemap to Google and Bing when a new post is published."
 
6618
  msgstr ""
6619
 
6620
+ #: view/SeoSettings/Sitemap.php:74
6621
+ msgid "Not recommended if you added your sitemap in Google Search Console."
 
6622
  msgstr ""
6623
 
6624
+ #: view/SeoSettings/Sitemap.php:85
6625
+ msgid "Combine Languages in Sitemap"
 
6626
  msgstr ""
6627
 
6628
+ #: view/SeoSettings/Sitemap.php:86
6629
+ msgid "Add all languages in the same sitemap.xml file"
 
6630
  msgstr ""
6631
 
6632
+ #: view/SeoSettings/Sitemap.php:87
6633
+ msgid ""
6634
+ "If not selected, you have to add the language slug for each snippet. e.g. /"
6635
+ "en/sitemap.xml"
6636
  msgstr ""
6637
 
6638
+ #: view/SeoSettings/Sitemap.php:96
6639
+ msgid "Build Sitemaps for"
 
6640
  msgstr ""
6641
 
6642
+ #: view/SeoSettings/Sitemap.php:98
6643
+ #, php-format
6644
+ msgid ""
6645
+ "Check the sitemap you want Squirrly to build for your website. Your sitemap "
6646
+ "will be %s"
6647
  msgstr ""
6648
 
6649
+ #: view/SeoSettings/Sitemap.php:99
6650
+ msgid ""
6651
+ "Verify your sitemaps after you activate them to have data. Uncheck them if "
6652
+ "they don't have URLs to avoid Google errors."
6653
  msgstr ""
6654
 
6655
+ #: view/SeoSettings/Sitemap.php:108
6656
+ msgid "Home Page"
6657
  msgstr ""
6658
 
6659
+ #: view/SeoSettings/Sitemap.php:109
6660
+ msgid "Build the sitemap for the home page."
6661
  msgstr ""
6662
 
6663
+ #: view/SeoSettings/Sitemap.php:118
6664
+ msgid "Google News"
6665
  msgstr ""
6666
 
6667
+ #: view/SeoSettings/Sitemap.php:119
6668
  #, php-format
6669
  msgid ""
6670
+ "Only if you have a news website. Make sure you submit your website to "
6671
+ "%sGoogle News%s first."
6672
  msgstr ""
6673
 
6674
+ #: view/SeoSettings/Sitemap.php:131
6675
+ msgid "Posts"
6676
  msgstr ""
6677
 
6678
+ #: view/SeoSettings/Sitemap.php:132
6679
+ msgid "Build the sitemap for your posts."
6680
  msgstr ""
6681
 
6682
+ #: view/SeoSettings/Sitemap.php:141
6683
+ msgid "Attachments"
6684
  msgstr ""
6685
 
6686
+ #: view/SeoSettings/Sitemap.php:142
6687
+ msgid "Only recommended if you have a photography website."
6688
  msgstr ""
6689
 
6690
+ #: view/SeoSettings/Sitemap.php:153
6691
+ msgid "Categories"
6692
  msgstr ""
6693
 
6694
+ #: view/SeoSettings/Sitemap.php:154
6695
+ msgid "Build the sitemap for your post categories."
6696
  msgstr ""
6697
 
6698
+ #: view/SeoSettings/Sitemap.php:164
6699
+ msgid "Tags"
6700
  msgstr ""
6701
 
6702
+ #: view/SeoSettings/Sitemap.php:165
6703
+ msgid "Build the sitemap for your post tags."
 
6704
  msgstr ""
6705
 
6706
+ #: view/SeoSettings/Sitemap.php:176
6707
+ msgid "Pages"
6708
  msgstr ""
6709
 
6710
+ #: view/SeoSettings/Sitemap.php:177
6711
+ msgid "Build the sitemap for your pages."
6712
  msgstr ""
6713
 
6714
+ #: view/SeoSettings/Sitemap.php:186
6715
+ msgid "Archive"
6716
  msgstr ""
6717
 
6718
+ #: view/SeoSettings/Sitemap.php:187
6719
+ msgid "Build the sitemap for your archive links."
6720
  msgstr ""
6721
 
6722
+ #: view/SeoSettings/Sitemap.php:198
6723
+ msgid "Custom Taxonomies"
6724
  msgstr ""
6725
 
6726
+ #: view/SeoSettings/Sitemap.php:199
6727
+ msgid "Build the sitemap for your custom post type categories and tags."
6728
  msgstr ""
6729
 
6730
+ #: view/SeoSettings/Sitemap.php:208
6731
+ msgid "Custom Posts"
6732
  msgstr ""
6733
 
6734
+ #: view/SeoSettings/Sitemap.php:209
6735
+ msgid ""
6736
+ "Build the sitemap for your custom post types (other than WP posts and pages)."
6737
  msgstr ""
6738
 
6739
+ #: view/SeoSettings/Sitemap.php:221
6740
+ msgid "Products"
6741
  msgstr ""
6742
 
6743
+ #: view/SeoSettings/Sitemap.php:222
6744
+ msgid "Build the sitemap for your e-commerce products."
 
6745
  msgstr ""
6746
 
6747
+ #: view/SeoSettings/Sitemap.php:242
6748
+ msgid "Include Images in Sitemap"
6749
  msgstr ""
6750
 
6751
+ #: view/SeoSettings/Sitemap.php:243
6752
+ msgid ""
6753
+ "Add the image tag for each post with feature image to index your images in "
6754
+ "Google Image Search."
6755
  msgstr ""
6756
 
6757
+ #: view/SeoSettings/Sitemap.php:253
6758
+ msgid "Include Videos in Sitemap"
6759
  msgstr ""
6760
 
6761
+ #: view/SeoSettings/Sitemap.php:254
6762
+ msgid "Add the video tag for each post with embed video in it."
6763
  msgstr ""
6764
 
6765
+ #: view/SeoSettings/Sitemap.php:266
6766
+ msgid "Sitemap Pagination"
 
6767
  msgstr ""
6768
 
6769
+ #: view/SeoSettings/Sitemap.php:267
6770
+ msgid "How many Posts per page to show in sitemap?"
 
6771
  msgstr ""
6772
 
6773
+ #: view/SeoSettings/Sitemap.php:285
6774
+ msgid "Fix Relative URLs"
6775
  msgstr ""
6776
 
6777
+ #: view/SeoSettings/Sitemap.php:286
6778
+ #, php-format
6779
+ msgid ""
6780
+ "Make sure that all URLs have the absolute path in each Sitemap. It's "
6781
+ "important to prevent broken links especially when you export your Sitemap to "
6782
+ "%sFeedburner%s"
6783
  msgstr ""
6784
 
6785
+ #: view/SeoSettings/Social.php:46
6786
+ msgid ""
6787
+ "Add the Social Open Graph protocol so that your Facebook shares look good."
6788
  msgstr ""
6789
 
6790
+ #: view/SeoSettings/Social.php:47
6791
+ #, php-format
6792
  msgid ""
6793
+ "You can always update an URL on Facebook if you change its Social Media "
6794
+ "Image. Visit %sOpen Graph Debugger%s"
6795
  msgstr ""
6796
 
6797
+ #: view/SeoSettings/Social.php:56
6798
+ msgid "Facebook Share Language"
6799
  msgstr ""
6800
 
6801
+ #: view/SeoSettings/Social.php:57
6802
+ msgid ""
6803
+ "Use this so that Facebook can automatically translate the text into the "
6804
+ "reader's language"
6805
  msgstr ""
6806
 
6807
+ #: view/SeoSettings/Social.php:206
6808
+ msgid "Facebook App ID"
6809
  msgstr ""
6810
 
6811
+ #: view/SeoSettings/Social.php:207
6812
+ #, php-format
6813
+ msgid ""
6814
+ "Add the %sFacebook App ID%s to create a connection between your Facebook "
6815
+ "Page and your Website."
6816
  msgstr ""
6817
 
6818
+ #: view/SeoSettings/Social.php:226 view/SeoSettings/Social.php:238
6819
+ #: view/SeoSettings/Social.php:251
6820
+ msgid "Facebook Admin ID"
6821
  msgstr ""
6822
 
6823
+ #: view/SeoSettings/Social.php:227
6824
+ msgid ""
6825
+ "Similar to Facebook App ID, Facebook Admin ID connects your Facebook Page to "
6826
+ "your Website."
6827
  msgstr ""
6828
 
6829
+ #: view/SeoSettings/Social.php:239
6830
+ msgid ""
6831
+ "Similar to Facebook App ID, Facebook Admin ID connects your Facebook Page "
6832
+ "with your Website."
6833
  msgstr ""
6834
 
6835
+ #: view/SeoSettings/Social.php:258
6836
+ msgid "Add multiple Facebook Admin IDs"
6837
  msgstr ""
6838
 
6839
+ #: view/SeoSettings/Social.php:269
6840
+ msgid ""
6841
+ "Add the Twitter card in your tweets so that your Twitter shares look good."
6842
  msgstr ""
6843
 
6844
+ #: view/SeoSettings/Social.php:270
6845
+ #, php-format
6846
+ msgid ""
6847
+ "Make sure you validate the twitter card with your Twitter account. Visit "
6848
+ "%sTwitter Card Validator%s"
6849
  msgstr ""
6850
 
6851
+ #: view/SeoSettings/Social.php:280
6852
+ msgid "Share Large Images"
6853
  msgstr ""
6854
 
6855
+ #: view/SeoSettings/Social.php:281
6856
+ msgid ""
6857
+ "Activate this option only if you upload images with sizes between 500px and "
6858
+ "4096px width in Twitter Card."
6859
  msgstr ""
6860
 
6861
+ #: view/SeoSettings/Social.php:282
6862
+ #, php-format
6863
  msgid ""
6864
+ "This option will show the twitter card image as a shared image and not as a "
6865
+ "summary. Visit %sSummary Card with Large Image%s"
6866
  msgstr ""
6867
 
6868
+ #: view/SeoSettings/Social.php:290
6869
+ msgid "Social Media Accounts"
6870
  msgstr ""
6871
 
6872
+ #: view/SeoSettings/Social.php:292
6873
+ msgid ""
6874
+ "Add your Social Media account for JSON-LD Structured data, Open Graph, and "
6875
+ "Twitter Card."
6876
  msgstr ""
6877
 
6878
+ #: view/SeoSettings/Social.php:298
6879
+ msgid "Twitter Profile URL"
6880
  msgstr ""
6881
 
6882
+ #: view/SeoSettings/Social.php:299
6883
+ msgid "https://twitter.com/XXXXXXXX"
6884
  msgstr ""
6885
 
6886
+ #: view/SeoSettings/Social.php:300
6887
+ msgid "Required for Twitter Card Validator"
6888
  msgstr ""
6889
 
6890
+ #: view/SeoSettings/Social.php:309
6891
+ msgid "Facebook Profile or Page URL"
 
 
6892
  msgstr ""
6893
 
6894
+ #: view/SeoSettings/Social.php:310
6895
+ msgid "https://facebook.com/XXXXXXXX"
6896
  msgstr ""
6897
 
6898
+ #: view/SeoSettings/Social.php:320
6899
+ msgid "Linkedin Profile URL"
6900
  msgstr ""
6901
 
6902
+ #: view/SeoSettings/Social.php:321
6903
+ msgid "https://linkedin.com/XXXXXXXX"
6904
  msgstr ""
6905
 
6906
+ #: view/SeoSettings/Social.php:330
6907
+ msgid "Pinterest Profile URL"
6908
  msgstr ""
6909
 
6910
+ #: view/SeoSettings/Social.php:331
6911
+ msgid "https://pinterest.com/XXXXXXXX"
6912
  msgstr ""
6913
 
6914
+ #: view/SeoSettings/Social.php:340
6915
+ msgid "Instagram Profile URL"
6916
  msgstr ""
6917
 
6918
+ #: view/SeoSettings/Social.php:341
6919
+ msgid "https://instagram.com/XXXXXXXX"
6920
  msgstr ""
6921
 
6922
+ #: view/SeoSettings/Social.php:350
6923
+ msgid "Youtube Channel URL"
6924
+ msgstr ""
6925
+
6926
+ #: view/SeoSettings/Social.php:351
6927
+ msgid "https://youtube.com/channel/XXXXXXXX"
6928
  msgstr ""
6929
 
6930
+ # @ squirrly-seo
6931
+ #: view/SeoSettings/Tracking.php:52
6932
+ #, fuzzy
6933
+ #| msgid "Google %sAnalytics ID%s`:"
6934
+ msgid "Google Analytics ID"
6935
+ msgstr "Google %sAnalytics ID%s`:"
6936
+
6937
+ #: view/SeoSettings/Tracking.php:53
6938
  #, php-format
6939
+ msgid ""
6940
+ "Squirrly adds the Google Tracking script for your Analytics ID. %sGet the "
6941
+ "Analytics ID%s"
6942
  msgstr ""
6943
 
6944
+ #: view/SeoSettings/Tracking.php:62
6945
+ msgid "Google Tracking Mode"
6946
  msgstr ""
6947
 
6948
+ #: view/SeoSettings/Tracking.php:63
6949
+ #, php-format
6950
+ msgid ""
6951
+ "Choose gtag.js if you use %sGoogle Tag Manager%s. Otherwise select analytics."
6952
+ "js to track the website traffic."
6953
  msgstr ""
6954
 
6955
+ #: view/SeoSettings/Tracking.php:67
6956
+ msgid "analytics.js"
6957
  msgstr ""
6958
 
6959
+ #: view/SeoSettings/Tracking.php:68
6960
+ msgid "gtag.js"
6961
  msgstr ""
6962
 
6963
+ #: view/SeoSettings/Tracking.php:79
6964
+ #, php-format
6965
+ msgid ""
6966
+ "Use FB Pixel to track the visitors events and to use Facebook Ads more "
6967
+ "efficient. %sLearn More%s"
6968
  msgstr ""
6969
 
6970
+ #: view/SeoSettings/Tracking.php:95
6971
+ msgid "Load Trackings as AMP"
6972
  msgstr ""
6973
 
6974
+ #: view/SeoSettings/Tracking.php:96
6975
+ msgid ""
6976
+ "Only if your website is AMP optimize, activate this option to load the "
6977
+ "scripts for AMP version."
6978
  msgstr ""
6979
 
6980
+ #: view/SeoSettings/Webmaster.php:16
6981
+ msgid "Webmaster Tools"
 
6982
  msgstr ""
6983
 
6984
+ #: view/SeoSettings/Webmaster.php:21
6985
+ msgid "Activate Webmasters"
6986
  msgstr ""
6987
 
6988
+ #: view/SeoSettings/Webmaster.php:52
6989
+ msgid "Google Verification Code"
6990
  msgstr ""
6991
 
6992
+ # @ squirrly-seo
6993
+ #: view/SeoSettings/Webmaster.php:53
6994
+ #, fuzzy, php-format
6995
+ #| msgid "Google META verification code for %sWebmaster Tool%s`:"
6996
+ msgid ""
6997
+ "Add the Google META verification code to connect to %sGoogle Search Console"
6998
+ "%s and %sWebmaster Tool%s"
6999
+ msgstr "Google META Bestätigungs-Code für %sWebmaster Tool%s`:"
7000
+
7001
+ #: view/SeoSettings/Webmaster.php:62
7002
+ msgid "Bing Verification Code"
7003
  msgstr ""
7004
 
7005
+ # @ squirrly-seo
7006
+ #: view/SeoSettings/Webmaster.php:63
7007
+ #, fuzzy, php-format
7008
+ #| msgid "Google META verification code for %sWebmaster Tool%s`:"
7009
+ msgid "Add the Bing META verification code to connect to %sWebmaster Tool%s"
7010
+ msgstr "Google META Bestätigungs-Code für %sWebmaster Tool%s`:"
7011
+
7012
+ #: view/SeoSettings/Webmaster.php:72
7013
+ msgid "Alexa META Code"
7014
  msgstr ""
7015
 
7016
+ #: view/SeoSettings/Webmaster.php:73
7017
+ #, php-format
7018
+ msgid ""
7019
+ "Add the Alexa META code to analyze your entire website. Visit the %sAlexa "
7020
+ "Marketing Tool%s"
7021
  msgstr ""
7022
 
7023
+ #: view/SeoSettings/Webmaster.php:82
7024
+ msgid "Pinterest Website Validator Code"
7025
+ msgstr ""
7026
+
7027
+ #: view/SeoSettings/Webmaster.php:83
7028
+ #, php-format
7029
+ msgid ""
7030
+ "Add the Pinterest verification code to connect your website to your "
7031
+ "Pinterest account. Visit the %sRich Pins Validator%s"
7032
+ msgstr ""
7033
 
7034
  # @ squirrly-seo
7035
  #~ msgid ""
7060
  #~ msgid "Switch to Visual editor!"
7061
  #~ msgstr "Zum Visual Editor wechseln !"
7062
 
 
 
 
 
7063
  # @ squirrly-seo
7064
  #~ msgid "Go to:"
7065
  #~ msgstr "Gehe zu:"
7072
  #~ msgid "Clear"
7073
  #~ msgstr "Löschen"
7074
 
 
 
 
 
 
 
 
 
7075
  # @ squirrly-seo
7076
  #~ msgid "Let some keywords for the next time as well!"
7077
  #~ msgstr "Lassen Sie ein paar Schlüsselwörter auch für das nächste Mal!"
7121
  #~ msgid "File type error: Only JPEG, JPG, GIF or PNG files are allowed."
7122
  #~ msgstr "Dateityp Fehler: Nur JPEG, JPG, GIF oder PNG-Dateien sind erlaubt."
7123
 
 
 
 
 
 
 
 
 
7124
  # @ squirrly-seo
7125
  #~ msgid ""
7126
  #~ "With Squirrly SEO, your Wordpress will get Perfect SEO on each article "
7129
  #~ "Mit Squirrly SEO wird jeder Ihrer Wordpress Artikel eine perfekte "
7130
  #~ "Suchmaschinenoptimierung erhalten. "
7131
 
 
 
 
 
7132
  # @ squirrly-seo
7133
  #~ msgid ""
7134
  #~ "delivered as a plugin for Wordpress. <br /><br />We connect your "
7143
  #~ msgid "Write a new post with Squirrly"
7144
  #~ msgstr "Schreiben Sie einen neuen Beitrag mit Squirrly"
7145
 
 
 
 
 
7146
  #~ msgid " API"
7147
  #~ msgstr " API"
7148
 
7220
  #~ msgid "Status:"
7221
  #~ msgstr "Status:"
7222
 
 
 
 
 
 
 
 
 
 
 
 
 
7223
  # @ squirrly-seo
7224
  #~ msgid "Tips: Length 70-255 chars"
7225
  #~ msgstr "Tipp: Länge 70-255 Charaktere"
7226
 
 
 
 
 
 
 
 
 
7227
  # @ squirrly-seo
7228
  #~ msgid "Google Plus URL:"
7229
  #~ msgstr "Google Plus URL:"
7230
 
 
 
 
 
 
 
 
 
7231
  # @ squirrly-seo
7232
  #~ msgid "Facebook META code (for %sInsights%s )`:"
7233
  #~ msgstr "Facebook META Code (für %sInsights%s )`:"
languages/squirrly-seo-de_DE.mo CHANGED
Binary file
languages/squirrly-seo-de_DE.po CHANGED
@@ -2,8 +2,8 @@ msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Squirrly SEO Plugin\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2018-07-30 08:57+0300\n"
6
- "PO-Revision-Date: 2018-07-30 08:57+0300\n"
7
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
8
  "Language-Team: \n"
9
  "Language: de_DE\n"
@@ -16,4181 +16,7360 @@ msgstr ""
16
  "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
17
  "X-Poedit-Basepath: ..\n"
18
  "X-Textdomain-Support: yes\n"
19
- "X-Generator: Poedit 2.0.5\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  # @ squirrly-seo
23
- #: classes/Error.php:16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  msgid ""
25
- "Function get_class does not exists! Is required for Squirrly to work "
26
- "properly."
27
  msgstr ""
28
- "Funktion Get_class ist nicht vorhanden! Ist erforderlich für Squirrly um "
29
- "richtig zu arbeiten."
30
 
31
- # @ squirrly-seo
32
- #: classes/Error.php:19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  msgid ""
34
- "Function file_exists does not exists! Is required for Squirrly to work "
35
- "properly."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  msgstr ""
37
- "Funktion File_exists ist nicht vorhanden! Ist erforderlich für Squirrly um "
38
- "richtig zu arbeiten."
39
 
40
  # @ squirrly-seo
41
- #: classes/Error.php:23
42
- msgid "The home directory is not set!"
43
- msgstr "Das Home-Verzeichnis wurde nicht gesetzt!"
 
 
44
 
45
  # @ squirrly-seo
46
- #: classes/Error.php:27
47
- msgid "The PHP version has to be greater then 4.0"
48
- msgstr "Die PHP-Version muß größer als 4.0 sein"
 
 
49
 
50
- #: classes/Error.php:70 classes/Error.php:81
51
- msgid "Don't bother me!"
52
  msgstr ""
53
 
54
- #: classes/Tools.php:129
55
- msgid "Getting started"
 
 
 
 
 
 
 
56
  msgstr ""
57
 
58
- #: classes/Tools.php:349
59
- msgid "Format"
60
  msgstr ""
61
 
62
- #: classes/Tools.php:357 classes/Tools.php:373
63
- msgid "Category"
64
  msgstr ""
65
 
66
- #: classes/Tools.php:365 classes/Tools.php:381
67
- msgid "Tag"
68
  msgstr ""
69
 
70
- #: classes/Tools.php:389
71
- msgid "Shipping Option"
72
  msgstr ""
73
 
74
- #: classes/Tools.php:397
75
- msgid "Author at"
76
  msgstr ""
77
 
78
- #: classes/Tools.php:429
79
- msgid "You searched for"
 
80
  msgstr ""
81
 
82
- #: classes/Tools.php:445
83
- msgid "Page not found"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  msgstr ""
85
 
86
  # @ squirrly-seo
87
- #: classes/Tools.php:976
88
- msgid "Fix it for me!"
89
- msgstr "Beheben Sie es für mich!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
 
91
- #: classes/Tools.php:982
92
- msgid "Activate the Squirrly SEO for your blog (recommended)"
93
  msgstr ""
94
 
95
- #: classes/Tools.php:993
 
96
  msgid ""
97
- "You have META Title Duplicates. Disable the Squirrly Title Optimization or "
98
- "disable the other SEO Plugins"
 
 
 
 
 
 
 
 
 
99
  msgstr ""
100
 
101
- #: classes/Tools.php:1001
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  msgid ""
103
- "You have META Description Duplicates. Disable the Squirrly Description "
104
- "Optimization or disable the other SEO Plugins"
105
  msgstr ""
106
 
107
- #: classes/Tools.php:1009
 
 
 
 
 
 
 
 
 
108
  msgid ""
109
- "You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or "
110
- "disable the other SEO Plugins"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  msgstr ""
112
 
113
- #: classes/Tools.php:1017
 
 
 
 
114
  msgid ""
115
- "You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card "
116
- "or disable the other SEO Plugins"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  msgstr ""
118
 
119
  # @ squirrly-seo
120
- #: classes/Tools.php:1026
121
- msgid "You're blocking google from indexing your site!"
122
- msgstr "Sie blockieren Google zum Indizieren Ihrer Website!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
- #: classes/Tools.php:1033
 
 
 
 
 
125
  msgid ""
126
- "It is highly recommended that you include the %postname% variable in the "
127
- "permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
128
- "in Custom Structure"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  msgstr ""
130
 
131
- #: classes/Tools.php:1040
 
132
  msgid ""
133
- "It is highly recommended to change or remove the default Wordpress Tagline. "
134
- "<br />Go to Settings > General > Tagline"
 
135
  msgstr ""
136
 
137
- #: classes/Tools.php:1046
138
- msgid "Great! We didn't find any issue in your site."
139
  msgstr ""
140
 
141
- #: classes/Tools.php:1191
142
- msgid "Just another WordPress site"
143
  msgstr ""
144
 
145
- #: config/config.php:43
146
- msgid "Displays the date of the post/page once it's published"
 
 
 
 
 
 
 
147
  msgstr ""
148
 
149
- #: config/config.php:44
150
- msgid "Adds the title of the post/page once it’s published"
 
 
 
 
 
151
  msgstr ""
152
 
153
- #: config/config.php:45
154
- msgid "Displays the number of the current page (i.e. 1 of 6)"
 
 
 
155
  msgstr ""
156
 
157
- #: config/config.php:46
158
- msgid "Adds the title of a page's parent page"
 
 
 
 
 
159
  msgstr ""
160
 
161
- #: config/config.php:47
162
- msgid "Adds the site's name to the post description"
163
  msgstr ""
164
 
165
- #: config/config.php:48
166
- msgid "Adds the tagline/description of your site"
 
 
 
 
167
  msgstr ""
168
 
169
- #: config/config.php:49
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  msgid ""
171
- "Will display an excerpt from the post/page (if not customized, the excerpt "
172
- "will be auto-generated)"
 
 
173
  msgstr ""
174
 
175
- #: config/config.php:50
176
- msgid "Will display an excerpt from the post/page (no auto-generation)"
 
177
  msgstr ""
178
 
179
- #: config/config.php:51
180
- msgid "Adds the current tag(s) to the post description"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  msgstr ""
182
 
183
- #: config/config.php:52
184
- msgid "Adds the post category (several categories will be comma-separated)"
 
 
 
185
  msgstr ""
186
 
187
- #: config/config.php:53
188
- msgid "Adds the primary category of the post/page"
189
  msgstr ""
190
 
191
- #: config/config.php:54
192
- msgid "Adds the category description to the post description"
 
 
 
 
193
  msgstr ""
194
 
195
- #: config/config.php:55
196
- msgid "Adds the tag description"
197
  msgstr ""
198
 
199
- #: config/config.php:56
200
- msgid "Adds the term description"
 
 
 
 
 
 
 
 
201
  msgstr ""
202
 
203
- #: config/config.php:57
204
- msgid "Adds the term name"
205
  msgstr ""
206
 
207
- #: config/config.php:58
208
- msgid "Displays the search phrase (if it appears in the post)"
 
 
 
 
 
 
209
  msgstr ""
210
 
211
- #: config/config.php:59
212
- msgid "Places a separator between the elements of the post description"
213
  msgstr ""
214
 
215
- #: config/config.php:60
216
- msgid "Replaces the publication date of a post/page with the modified one"
217
  msgstr ""
218
 
219
- #: config/config.php:61
220
- msgid "Displays the author's nicename"
221
  msgstr ""
222
 
223
- #: config/config.php:62
224
- msgid "Adds the author's biographical info to the post description"
 
 
225
  msgstr ""
226
 
227
- #: config/config.php:63
228
- msgid "Displays the current date"
 
229
  msgstr ""
230
 
231
- #: config/config.php:64
232
- msgid "Adds the post's keyword to the post description"
 
233
  msgstr ""
234
 
235
- #: config/config.php:65
236
- msgid "Adds the current day"
 
 
 
237
  msgstr ""
238
 
239
- #: config/config.php:66
240
- msgid "Adds the current month"
 
 
241
  msgstr ""
242
 
243
- #: config/config.php:67
244
- msgid "Adds the current year"
 
245
  msgstr ""
246
 
247
- #: controllers/Api.php:40
248
- msgid "Connection expired. Please try again"
249
  msgstr ""
250
 
251
- #: controllers/Api.php:54 controllers/Api.php:57 controllers/Api.php:60
252
- msgid "Author not found"
253
  msgstr ""
254
 
255
- #: controllers/FrontMenu.php:32
256
- msgid "You don't have enough pemission to edit this article"
257
  msgstr ""
258
 
259
- #: controllers/Menu.php:38 controllers/Menu.php:49
260
  #, php-format
261
  msgid ""
262
- "Good news, %s is integrated in Squirrly SEO now and you don't have to run 2 "
263
- "plugins anymore"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  msgstr ""
265
 
266
- #: controllers/Menu.php:69
267
  #, php-format
268
  msgid ""
269
- "An error occurred during activation. If this error persists, please contact "
270
- "us at: %s"
 
 
 
 
 
 
 
271
  msgstr ""
272
 
273
- #: controllers/Menu.php:99
274
- msgid "See Your Rank on Google"
275
  msgstr ""
276
 
277
- #: controllers/Menu.php:156
278
- msgid "Custom SEO"
 
 
 
 
 
 
 
 
 
 
 
279
  msgstr ""
280
 
281
- #: controllers/Menu.php:200
282
  #, php-format
283
- msgid "Check out the Squirrly Analytics section. %sClick here%s"
 
 
 
 
 
 
 
 
 
284
  msgstr ""
285
 
286
- #: controllers/Menu.php:200 view/BlockPostsAnalytics.php:47
287
- msgid "Squirrly Analytics"
288
  msgstr ""
289
 
290
- #: controllers/Menu.php:217
291
- msgid " Dashboard"
 
 
 
 
 
292
  msgstr ""
293
 
294
- #: controllers/Menu.php:218
295
- msgid "First Step"
 
 
 
 
 
 
 
 
 
 
 
 
296
  msgstr ""
297
 
298
- #: controllers/Menu.php:218
299
- msgid "Dashboard"
300
  msgstr ""
301
 
302
- #: controllers/Menu.php:227
303
- msgid " Advanced Analytics (Business Level)"
304
  msgstr ""
305
 
306
- #: controllers/Menu.php:228
307
- msgid "Advanced Analytics"
 
 
 
 
308
  msgstr ""
309
 
310
- #: controllers/Menu.php:235
311
- msgid " Performance Analytics"
312
  msgstr ""
313
 
314
- #: controllers/Menu.php:236
315
- msgid "Performance <br />Analytics"
 
 
 
 
 
316
  msgstr ""
317
 
318
- #: controllers/Menu.php:244
319
- msgid " Keyword Research"
320
  msgstr ""
321
 
322
- #: controllers/Menu.php:245 view/BlockBriefcaseKeywords.php:333
323
- msgid "Keyword Research"
324
  msgstr ""
325
 
326
- #: controllers/Menu.php:252
327
- msgid " Briefcase"
328
  msgstr ""
329
 
330
- #: controllers/Menu.php:253
331
- msgid "Briefcase"
 
332
  msgstr ""
333
 
334
- #: controllers/Menu.php:260
335
- msgid " Live Assistant"
 
336
  msgstr ""
337
 
338
- #: controllers/Menu.php:261
339
- msgid "Live Assistant"
340
  msgstr ""
341
 
342
- #: controllers/Menu.php:267
343
- msgid " Copywriting"
 
 
 
 
 
344
  msgstr ""
345
 
346
- #: controllers/Menu.php:268
347
- msgid "Copywriting"
 
348
  msgstr ""
349
 
350
- #: controllers/Menu.php:276
351
- msgid " SEO Audit"
352
  msgstr ""
353
 
354
- #: controllers/Menu.php:277
355
- msgid "Site Audit"
 
356
  msgstr ""
357
 
358
- #: controllers/Menu.php:285
359
- msgid " SEO Settings"
360
  msgstr ""
361
 
362
- #: controllers/Menu.php:286 view/BlockToolbar.php:4
363
- msgid "SEO Settings"
 
364
  msgstr ""
365
 
366
- #: controllers/Menu.php:294
367
- msgid " Advanced Settings"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  msgstr ""
369
 
370
- #: controllers/Menu.php:295 view/BlockSettings.php:22
371
- msgid "Advanced Settings"
372
  msgstr ""
373
 
374
- #: controllers/Menu.php:302
375
- msgid " SEO Patterns"
 
 
 
 
 
 
 
376
  msgstr ""
377
 
378
- #: controllers/Menu.php:303 view/BlockToolbar.php:14
379
- msgid "Patterns"
380
  msgstr ""
381
 
382
- #: controllers/Menu.php:311
383
- msgid " Account Info"
 
 
 
 
 
 
 
384
  msgstr ""
385
 
386
- #: controllers/Menu.php:312
387
- msgid "Account Info"
388
  msgstr ""
389
 
390
- #: controllers/Menu.php:320
391
- msgid " Support"
 
 
 
 
 
392
  msgstr ""
393
 
394
- # @ squirrly-seo
395
- #: controllers/Menu.php:321 view/BlockSupport.php:22
396
- msgid "Support"
397
- msgstr "Support"
 
 
398
 
399
- #: controllers/Menu.php:329
400
- msgid "Become an Affiliate with "
401
  msgstr ""
402
 
403
- #: controllers/Menu.php:330
404
- msgid "Become an Affiliate"
 
 
 
 
 
405
  msgstr ""
406
 
407
- #: controllers/Menu.php:339
408
- msgid "Import, Backup & Restore SEO"
409
  msgstr ""
410
 
411
- #: controllers/Menu.php:340
412
- msgid "Import/Backup SEO"
 
 
 
 
 
 
 
413
  msgstr ""
414
 
415
- #: controllers/Menu.php:384
416
- msgid "SEO Snippet"
417
  msgstr ""
418
 
419
- #: controllers/PostsList.php:81
420
- msgid "Squirrly"
421
  msgstr ""
422
 
423
- #: controllers/PostsList.php:107
424
- msgid "Custom description: "
425
  msgstr ""
426
 
427
- #: controllers/PostsList.php:107
428
- msgid "Custom title: "
429
  msgstr ""
430
 
431
- #: controllers/PostsList.php:143
432
- msgid "SEO Analytics, by Squirrly"
 
 
 
 
 
 
 
 
 
 
 
 
433
  msgstr ""
434
 
435
- #: controllers/PostsList.php:144 controllers/SerpChecker.php:174
436
- #: models/SerpCheckerTable.php:646 view/Blockseo.php:10
437
- msgid "Update"
438
  msgstr ""
439
 
440
- #: controllers/PostsList.php:148 controllers/SerpChecker.php:178
441
- msgid "Not Public"
 
 
 
 
 
 
 
 
442
  msgstr ""
443
 
444
- #: controllers/PostsList.php:149 controllers/SerpChecker.php:179
445
- msgid "Could not process"
446
  msgstr ""
447
 
448
- #: controllers/PostsList.php:314 controllers/PostsList.php:332
449
  #, php-format
450
- msgid "Not in top 100 for: %s"
 
 
 
 
 
451
  msgstr ""
452
 
453
- #: controllers/PostsList.php:316 controllers/PostsList.php:334
454
- msgid "The URL is Indexed"
455
  msgstr ""
456
 
457
- #: controllers/PostsList.php:318 controllers/PostsList.php:336
458
- #: models/BlockPostsAnalytics.php:438
459
  #, php-format
460
- msgid "%s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  msgstr ""
462
 
463
- #: controllers/SerpChecker.php:23 core/BlockPostsAnalytics.php:31
464
  #, php-format
465
  msgid ""
466
- "To get back to the Advanced Analytics and see rankings for all the keywords "
467
- "in Briefcase upgrade to %sBusiness Plan%s."
 
 
 
 
 
 
468
  msgstr ""
469
 
470
- #: controllers/SerpChecker.php:77 controllers/SerpChecker.php:91
471
- #: controllers/SerpChecker.php:134 core/BlockSerpKeywords.php:66
472
- #: core/BlockSerpKeywords.php:74 core/BlockSerpKeywords.php:97
473
- #: core/BlockSettingsSeo.php:69
474
- msgid "You don't have enough pemission to activate this feature"
475
  msgstr ""
476
 
477
- #: controllers/SerpChecker.php:115 controllers/SerpChecker.php:125
478
- #: core/BlockBriefcaseKeywords.php:194
479
- msgid "Last checked"
480
- msgstr ""
481
-
482
- #: controllers/SerpChecker.php:129
483
- msgid "Invalid Request"
484
  msgstr ""
485
 
486
- #: controllers/SerpChecker.php:142
487
- msgid "Removed successfully! The ranks were updated from Squirry Server"
488
  msgstr ""
489
 
490
- #: core/BlockAffiliate.php:38
491
  #, php-format
492
- msgid "Error: %s"
493
  msgstr ""
494
 
495
- #: core/BlockAffiliate.php:41
496
- msgid "An error occured. Mabe a network error :("
497
  msgstr ""
498
 
499
- #: core/BlockBriefcaseKeywords.php:36 core/BlockPostsAnalytics.php:24
500
  #, php-format
501
  msgid ""
502
- "%sYou activated the Business Plan with Advanced Analytics. %sStart Here%s %s"
 
 
 
 
503
  msgstr ""
504
 
505
- #: core/BlockBriefcaseKeywords.php:39 core/BlockPostsAnalytics.php:28
 
 
 
 
 
 
 
 
 
 
 
506
  #, php-format
507
  msgid ""
508
- "%sStart a FREE Trial of the Business Plan with Advanced Analytics for 7 "
509
- "days. No credit card required. %sSee details%s %s"
 
 
 
 
510
  msgstr ""
511
 
512
- #: core/BlockBriefcaseKeywords.php:70
513
- msgid "No keyword found in the briefcase."
514
  msgstr ""
515
 
516
- #: core/BlockBriefcaseKeywords.php:96 core/BlockBriefcaseKeywords.php:123
517
- #: core/BlockBriefcaseKeywords.php:141 core/BlockBriefcaseKeywords.php:165
518
- #: core/BlockBriefcaseKeywords.php:235 core/BlockBriefcaseKeywords.php:255
519
- #: core/BlockBriefcaseKeywords.php:277 core/BlockBriefcaseKeywords.php:295
520
- msgid "You don't have enough pemission to manage this feature"
 
 
 
 
 
 
521
  msgstr ""
522
 
523
- #: core/BlockBriefcaseKeywords.php:116 core/BlockBriefcaseKeywords.php:248
524
- #: core/BlockBriefcaseKeywords.php:270 core/BlockBriefcaseKeywords.php:312
525
- #: core/Loading.php:40 view/FrontMenu.php:45
526
- msgid "Saved!"
527
  msgstr ""
528
 
529
- #: core/BlockBriefcaseKeywords.php:118 core/BlockBriefcaseKeywords.php:159
530
- #: core/BlockBriefcaseKeywords.php:227 core/BlockBriefcaseKeywords.php:314
531
- msgid "Invalid Keyword!"
 
 
 
 
 
 
 
 
532
  msgstr ""
533
 
534
- #: core/BlockBriefcaseKeywords.php:134 core/BlockBriefcaseKeywords.php:288
535
- msgid "Deleted!"
536
- msgstr ""
 
 
 
537
 
538
- #: core/BlockBriefcaseKeywords.php:136 core/BlockBriefcaseKeywords.php:272
539
- #: core/BlockBriefcaseKeywords.php:290
540
- msgid "Invalid params!"
541
  msgstr ""
542
 
543
- #: core/BlockBriefcaseKeywords.php:155
544
- msgid "Keyword Research limit exceeded."
545
- msgstr ""
 
 
 
546
 
547
- #: core/BlockBriefcaseKeywords.php:155 core/Loading.php:61
548
- msgid "Add 20 Keyword Researches"
 
 
 
 
 
 
 
549
  msgstr ""
550
 
551
- #: core/BlockBriefcaseKeywords.php:186
552
- msgid "Check Ranks"
553
  msgstr ""
554
 
555
- #: core/BlockBriefcaseKeywords.php:197 models/BlockPostsAnalytics.php:393
556
- #: models/SerpCheckerTable.php:565
557
- msgid "Edit"
558
  msgstr ""
559
 
560
- #: core/BlockBriefcaseKeywords.php:198
561
- msgid "Get Rank"
 
 
 
 
 
 
 
 
 
 
562
  msgstr ""
563
 
564
- #: core/BlockBriefcaseKeywords.php:203
565
- msgid "Deleted Post"
566
  msgstr ""
567
 
568
- #: core/BlockBriefcaseKeywords.php:213
569
- msgid "Article title"
570
  msgstr ""
571
 
572
- #: core/BlockBriefcaseKeywords.php:214 models/SerpCheckerTable.php:359
573
- msgid "Google Rank"
574
  msgstr ""
575
 
576
- #: core/BlockBriefcaseKeywords.php:215 models/SerpCheckerTable.php:362
577
- msgid "Optimized"
 
 
 
 
 
 
 
 
578
  msgstr ""
579
 
580
- #: core/BlockBriefcaseKeywords.php:216
581
- msgid "Option"
582
- msgstr ""
 
 
 
583
 
584
- #: core/BlockBriefcaseKeywords.php:221
585
- msgid "There are no articles found"
 
 
 
 
 
586
  msgstr ""
587
 
588
- #: core/BlockBriefcaseKeywords.php:250
589
- msgid "Invalid Label or Color!"
590
  msgstr ""
591
 
592
- #: core/BlockImport.php:34
593
- msgid "All the Plugin settings were imported successfuly!"
 
 
 
 
 
 
 
 
 
 
594
  msgstr ""
595
 
596
- #: core/BlockImport.php:36
597
- msgid "No settings found for this plugin/theme."
598
  msgstr ""
599
 
600
- #: core/BlockImport.php:58
601
  #, php-format
602
  msgid ""
603
- "%s SEO records were imported successfuly! You can now deactivate the %s "
604
- "plugin"
 
 
 
 
605
  msgstr ""
606
 
607
- #: core/BlockImport.php:60
 
 
 
 
608
  #, php-format
609
  msgid ""
610
- "There are no SEO records with this plugin. You can now deactivate the %s "
611
- "plugin"
 
 
 
 
 
 
 
 
612
  msgstr ""
613
 
614
- #: core/BlockSerpKeywords.php:46
615
- msgid "No keyword found yet."
616
  msgstr ""
617
 
618
- #: core/BlockSerpKeywords.php:50
619
- msgid "No connection with Squirrly Server"
620
  msgstr ""
621
 
622
- #: core/BlockSerpKeywords.php:132
623
- msgid "Could not find the Article in your Website"
 
 
 
 
624
  msgstr ""
625
 
626
- #: core/BlockSettingsSeo.php:27
627
  #, php-format
628
- msgid "You can now import into Squirrly SEO all the SEO Settings from %s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
629
  msgstr ""
630
 
631
- #: core/BlockSettingsSeo.php:40 core/Blockseo.php:13
632
- msgid "Too short"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
633
  msgstr ""
634
 
635
- #: core/BlockSettingsSeo.php:41 core/Blockseo.php:14
636
- msgid "Too long"
637
  msgstr ""
638
 
639
- #: core/BlockSettingsSeo.php:483
640
- msgid "Great! The backup is restored."
 
 
 
 
 
 
 
 
641
  msgstr ""
642
 
643
- #: core/BlockSettingsSeo.php:485 core/BlockSettingsSeo.php:488
644
- #: core/BlockSettingsSeo.php:533 core/BlockSettingsSeo.php:536
645
- msgid "Error! The backup is not valid."
646
  msgstr ""
647
 
648
- #: core/BlockSettingsSeo.php:491 core/BlockSettingsSeo.php:539
649
- msgid "Error! You have to enter a previous saved backup file."
 
 
 
 
 
 
650
  msgstr ""
651
 
652
- #: core/BlockSettingsSeo.php:530
653
- msgid "Great! The SEO backup is restored."
654
  msgstr ""
655
 
656
- #: core/BlockSettingsSeo.php:546
657
- msgid "Great! Squirrly Data Settings is up to date now."
 
 
 
 
 
 
 
658
  msgstr ""
659
 
660
- # @ squirrly-seo
661
- #: core/BlockSupport.php:24
662
- msgid "Plugin Feedback"
663
- msgstr "Plugin Feedback"
664
-
665
- # @ squirrly-seo
666
- #: core/BlockSupport.php:59
667
- msgid "Thank you for your feedback"
668
- msgstr "Vielen Dank für Ihre Feedback"
669
 
670
- # @ squirrly-seo
671
- #: core/BlockSupport.php:63 core/BlockSupport.php:103
672
- msgid "No message."
673
- msgstr "Keine Nachricht."
 
 
 
 
 
 
 
 
 
674
 
675
  # @ squirrly-seo
676
- #: core/BlockSupport.php:85
677
- msgid "Plugin Support"
678
- msgstr "Plugin Support"
 
 
679
 
680
- #: core/BlockSupport.php:96
681
- msgid "Message sent. Thank you!"
 
682
  msgstr ""
683
 
684
- #: core/BlockSupport.php:99
685
- msgid "Could not send the email. Make sure you can send emails from your blog."
686
  msgstr ""
687
 
688
- # @ squirrly-seo
689
- #: core/Blocklogin.php:84
690
  #, php-format
691
  msgid ""
692
- "We found your email, so it means you already have a Squirrly.co account. "
693
- "Please login with your Squirrly Email. If you forgot your password click "
694
- "%shere%s"
695
- msgstr ""
696
- "Ihre E-Mail Adresse ist bereits bei Squirrly.co registriert. Bitte loggen "
697
- "Sie sich mit Ihrer Squirrly-ID ein. Falls Sie Ihr Passwort vergessen haben, "
698
- "klicken Sie %shier%s"
699
-
700
- #: core/Blocklogin.php:87
701
- msgid "Your email is not valid. Please enter a valid email"
702
  msgstr ""
703
 
704
- #: core/Blocklogin.php:90
705
- msgid "We could not create your account. Please enter a valid email "
706
  msgstr ""
707
 
708
- #: core/Blocklogin.php:95
709
- msgid ""
710
- "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
711
- "webmaster) and request them to add http://api.squirrly.co/ to their IP "
712
- "whitelist."
713
  msgstr ""
714
 
715
  # @ squirrly-seo
716
- #: core/Blocklogin.php:98
 
 
 
 
 
 
717
  #, php-format
718
  msgid ""
719
- "Could not send your informations to squirrly. Please register %smanually%s."
 
 
 
 
 
 
720
  msgstr ""
721
- "Konnte Ihre Informationen nicht zu Squirrly senden. Bitte registrieren "
722
- "%smanually%s."
723
 
724
- # @ squirrly-seo
725
- #: core/Blocklogin.php:139
726
- msgid "Wrong email or password!"
727
- msgstr "Benutzername oder Passwort falsch!"
728
 
729
- # @ squirrly-seo
730
- #: core/Blocklogin.php:142
731
- msgid "You can use this account only for the URL you registered first!"
 
 
 
 
 
 
 
 
 
732
  msgstr ""
733
- "Dieses Konto können Sie nur für die URL benutzen, die Sie zuerst registriert "
734
- "haben!"
735
 
736
- # @ squirrly-seo
737
- #: core/Blocklogin.php:147
738
- msgid "An error occured."
739
- msgstr "Ein Fehler ist aufgetreten."
740
 
741
- # @ squirrly-seo
742
- #: core/Blocklogin.php:149
743
- msgid "Both fields are required."
744
- msgstr "Beide Felder sind Pflichtfelder."
745
 
746
- #: core/Blockseo.php:15
747
- msgid "snippet"
 
 
 
 
 
 
 
 
 
748
  msgstr ""
749
 
750
- #: core/Loading.php:37
751
- msgid "Recent discussions:"
752
- msgstr "Bisherige Diskussionen:"
753
 
754
- #: core/Loading.php:37
755
- msgid "SEO Search Volume:"
756
  msgstr ""
757
 
758
- # @ squirrly-seo
759
- #: core/Loading.php:37
760
- msgid "Competition:"
761
- msgstr "Wettbewerb:"
762
 
763
- # @ squirrly-seo
764
- #: core/Loading.php:37
765
- msgid "Trend:"
766
- msgstr "Trend:"
767
 
768
- # @ squirrly-seo
769
- #: core/Loading.php:38
770
- msgid "Keyword:"
771
- msgstr "Schlüsselwort:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
772
 
773
- # @ squirrly-seo
774
- #: core/Loading.php:39
775
- msgid "date"
776
- msgstr "Datum"
777
 
778
- # @ squirrly-seo
779
- #: core/Loading.php:41
780
- msgid "Read it!"
781
- msgstr "Lesen!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
782
 
783
- # @ squirrly-seo
784
- #: core/Loading.php:42
785
- msgid "Insert it!"
786
- msgstr "Einfügen!"
787
 
788
- # @ squirrly-seo
789
- #: core/Loading.php:43
790
- msgid "Reference"
791
- msgstr "Referenz"
 
 
 
 
792
 
793
  # @ squirrly-seo
794
- #: core/Loading.php:44
795
- msgid "Insert as box"
796
- msgstr "Als Box einfügen"
 
 
797
 
798
- #: core/Loading.php:45
799
- msgid "Insert Link"
 
 
 
 
 
 
 
 
 
 
800
  msgstr ""
801
 
802
- # @ squirrly-seo
803
- #: core/Loading.php:46
804
- msgid "Not relevant?"
805
- msgstr "Nicht relevant?"
806
 
807
- # @ squirrly-seo
808
- #: core/Loading.php:47
809
- msgid "Insert in your article"
810
- msgstr "In Artikel einfügen"
811
 
812
- #: core/Loading.php:48
813
- msgid ":( An error occurred while processing your request. Please try again"
814
  msgstr ""
815
 
816
- #: core/Loading.php:49
817
- msgid "Keyword Research takes too long to get the results. Click to try again"
818
  msgstr ""
819
 
820
- # @ squirrly-seo
821
- #: core/Loading.php:50
822
- msgid "No results found!"
823
- msgstr "Keine Ergebnisse gefunden!"
824
 
825
- #: core/Loading.php:51
826
- msgid "Enter one more word to find relevant results"
827
  msgstr ""
828
 
829
  # @ squirrly-seo
830
- #: core/Loading.php:52
831
- msgid "Takes too long to check this keyword ..."
832
- msgstr "Dauert zu lange, um dieses Schlüsselwort zu überprüfen ..."
 
 
833
 
834
  # @ squirrly-seo
835
- #: core/Loading.php:53
836
- msgid "Do a research!"
837
- msgstr "Erweiterte Suche!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
838
 
839
  # @ squirrly-seo
840
- #: core/Loading.php:54
841
- msgid "Do more research!"
842
- msgstr "Erweiterte Suche!"
 
 
843
 
844
- #: core/Loading.php:55
845
  #, php-format
846
- msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
 
 
847
  msgstr ""
848
 
849
- #: core/Loading.php:56
850
- msgid "Has creative commons attributes"
851
  msgstr ""
852
 
853
- #: core/Loading.php:57
854
- msgid "No known copyright restrictions"
 
855
  msgstr ""
856
 
857
- #: core/Loading.php:58
858
  msgid ""
859
- "You haven`t used Squirrly SEO to optimize your article. Do you want to "
860
- "optimize for a keyword before publishing?"
861
  msgstr ""
862
- "You haven`t used Squirrly SEO to optimize your article. Do you want to "
863
- "optimize for a keyword before publishing?"
864
 
865
- #: core/Loading.php:59
866
- msgid "Keyword Research limit exceeded"
867
  msgstr ""
868
 
869
- #: core/Loading.php:60
870
- msgid "Your Subscription has Expired"
 
 
871
  msgstr ""
872
 
873
- #: core/Loading.php:62
874
- msgid "There are no keywords saved in briefcase yet"
875
  msgstr ""
876
 
877
- #: core/Loading.php:63
 
 
 
 
 
 
 
878
  #, php-format
879
- msgid "Congratulations! Your article is 100% optimized!"
880
  msgstr ""
881
 
882
- #: core/Loading.php:64
883
- #, php-format
884
- msgid "appears too many times. Try to remove %s of them"
885
  msgstr ""
886
 
887
- #: core/Loading.php:65
888
  #, php-format
889
- msgid "write %s more words"
 
 
890
  msgstr ""
891
 
892
- #: core/Loading.php:66
893
- #, php-format
894
- msgid "Add the keyword in the %s of your article"
895
  msgstr ""
896
 
897
- #: core/Loading.php:67
898
- msgid "Click to keep the highlight on"
 
 
899
  msgstr ""
900
 
901
- #: core/Loading.php:68
902
- msgid "introduction"
903
  msgstr ""
904
 
905
- #: core/Loading.php:69
906
- #, php-format
907
- msgid "Write more words after the %s keyword"
908
  msgstr ""
909
 
910
- #: core/Loading.php:70
911
- msgid "or use synonyms"
912
  msgstr ""
913
 
914
- #: core/Loading.php:71
915
- #, php-format
916
- msgid "add %s more word(s)"
 
 
 
 
 
 
 
 
 
 
 
 
917
  msgstr ""
918
 
919
- #: core/Loading.php:72
920
- #, php-format
921
- msgid "or remove %s word(s)"
 
 
 
 
 
922
  msgstr ""
923
 
924
- #: core/Loading.php:73
925
  #, php-format
926
- msgid "add %s more keyword(s)"
927
  msgstr ""
928
 
929
- #: core/Loading.php:74
930
  #, php-format
931
- msgid "write %s more words to start calculating"
932
  msgstr ""
933
 
934
- #: core/Loading.php:75
935
- msgid "Add to Briefcase"
936
  msgstr ""
937
 
938
- #: core/Loading.php:76
939
- msgid "Add Keyword to Briefcase"
940
  msgstr ""
941
 
942
- #: core/Loading.php:77 view/BlockBriefcaseKeywords.php:304
943
- msgid "Use Keyword"
944
  msgstr ""
945
 
946
- #: core/Loading.php:78
947
- msgid "Auto Draft"
948
  msgstr ""
949
 
950
- #: models/BlockPostsAnalytics.php:290
951
- msgctxt "column name"
952
- msgid "Title"
953
  msgstr ""
954
 
955
- #: models/BlockPostsAnalytics.php:292 models/SerpCheckerTable.php:376
956
- msgid "Type"
 
 
957
  msgstr ""
958
 
959
- #: models/BlockPostsAnalytics.php:295 models/SerpCheckerTable.php:374
960
- #: view/FrontMenu.php:386
961
- msgid "Author"
962
  msgstr ""
963
 
964
- #: models/BlockPostsAnalytics.php:298
965
- msgid "Keywords"
966
  msgstr ""
967
 
968
- #: models/BlockPostsAnalytics.php:300
969
- #, php-format
970
- msgid "Google.%s Position"
971
  msgstr ""
972
 
973
- #: models/BlockPostsAnalytics.php:303 view/BlockAudit.php:48
974
- msgid "Date"
 
 
 
 
 
 
 
975
  msgstr ""
976
 
977
- #: models/BlockPostsAnalytics.php:317
978
- msgid "Reset Filters"
979
  msgstr ""
980
 
981
- #: models/BlockPostsAnalytics.php:322
982
- msgid "Search Posts"
 
983
  msgstr ""
984
 
985
- #: models/BlockPostsAnalytics.php:390 models/SerpCheckerTable.php:562
986
- #, php-format
987
- msgid "Edit &#8220;%s&#8221;"
988
  msgstr ""
989
 
990
- #: models/BlockPostsAnalytics.php:393 models/SerpCheckerTable.php:565
991
- msgid "Edit this item"
992
  msgstr ""
993
 
994
- #: models/BlockPostsAnalytics.php:398 models/SerpCheckerTable.php:570
 
 
 
 
 
 
 
995
  #, php-format
996
- msgid "Preview &#8220;%s&#8221;"
997
  msgstr ""
998
 
999
- #: models/BlockPostsAnalytics.php:398 models/SerpCheckerTable.php:570
1000
- msgid "Preview"
1001
  msgstr ""
1002
 
1003
- #: models/BlockPostsAnalytics.php:400 models/SerpCheckerTable.php:572
1004
- #, php-format
1005
- msgid "View &#8220;%s&#8221;"
1006
  msgstr ""
1007
 
1008
- #: models/BlockPostsAnalytics.php:400 models/SerpCheckerTable.php:572
1009
- msgid "View"
1010
  msgstr ""
1011
 
1012
- #: models/BlockPostsAnalytics.php:422
1013
- msgid "No Tags"
1014
  msgstr ""
1015
 
1016
- #: models/BlockPostsAnalytics.php:432
1017
- msgid "Could not receive data from google (Err: blocked IP)"
1018
- msgstr ""
 
 
 
 
 
 
 
 
 
 
1019
 
1020
- #: models/BlockPostsAnalytics.php:434
1021
- msgid "Not in top 100 for: <br /> \""
1022
  msgstr ""
1023
 
1024
- #: models/BlockPostsAnalytics.php:436
1025
- msgid "The URL is indexed"
1026
  msgstr ""
1027
 
1028
- #: models/BlockPostsAnalytics.php:440
1029
- msgid "Force recheck"
1030
  msgstr ""
1031
 
1032
- #: models/BlockPostsAnalytics.php:442
1033
- msgid "Not yet verified"
 
 
 
 
 
 
 
 
1034
  msgstr ""
1035
 
1036
- #: models/BlockPostsAnalytics.php:442
1037
- msgid "Check now"
 
 
1038
  msgstr ""
1039
 
1040
- #: models/BlockPostsAnalytics.php:445
1041
- #, php-format
1042
- msgid "Enable Ranking in %sAdvanced Settings%s"
1043
  msgstr ""
1044
 
1045
- #: models/BlockPostsAnalytics.php:457 models/SerpCheckerTable.php:654
1046
- msgid "Unpublished"
1047
  msgstr ""
1048
 
1049
- #: models/BlockPostsAnalytics.php:466 models/SerpCheckerTable.php:663
1050
- #, php-format
1051
- msgid "%s ago"
1052
  msgstr ""
1053
 
1054
- #: models/BlockPostsAnalytics.php:468 models/SerpCheckerTable.php:665
1055
- msgid "Y/m/d"
1056
  msgstr ""
1057
 
1058
- #: models/BlockPostsAnalytics.php:473 models/SerpCheckerTable.php:670
1059
- msgid "Published"
1060
  msgstr ""
1061
 
1062
- #: models/BlockPostsAnalytics.php:476 models/SerpCheckerTable.php:673
1063
- msgid "Missed schedule"
1064
  msgstr ""
1065
 
1066
- #: models/BlockPostsAnalytics.php:478 models/SerpCheckerTable.php:675
1067
- msgid "Scheduled"
1068
  msgstr ""
1069
 
1070
- #: models/BlockPostsAnalytics.php:480 models/SerpCheckerTable.php:677
1071
- msgid "Last Modified"
1072
  msgstr ""
1073
 
1074
- # @ squirrly-seo
1075
- #: models/BlockSettingsSeo.php:71
1076
- msgid "The code for Google Webmaster Tool is incorrect."
1077
- msgstr "Der Code für Google Webmaster Tool ist falsch."
1078
 
1079
- # @ squirrly-seo
1080
- #: models/BlockSettingsSeo.php:98
1081
- msgid "The code for Google Analytics is incorrect."
1082
- msgstr "Der Code für Google Analytics ist falsch."
1083
 
1084
- # @ squirrly-seo
1085
- #: models/BlockSettingsSeo.php:144
1086
- msgid "The code for Facebook is incorrect."
1087
- msgstr "Der Code für Facebook ist falsch."
1088
 
1089
- #: models/BlockSettingsSeo.php:169
1090
- msgid "The code for Pinterest is incorrect."
1091
  msgstr ""
1092
 
1093
- # @ squirrly-seo
1094
- #: models/BlockSettingsSeo.php:194
1095
- msgid "The code for Bing is incorrect."
1096
- msgstr "Der Code für Bing ist falsch."
1097
 
1098
- #: models/BlockSettingsSeo.php:320
1099
- msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
1100
  msgstr ""
1101
 
1102
- # @ squirrly-seo
1103
- #: models/BlockSettingsSeo.php:326
1104
- msgid "GD error: The GD library must be installed on your server."
1105
- msgstr "GD Fehler: Die GD-Bibliothek muss auf dem Server installiert werden."
 
 
1106
 
1107
- # @ squirrly-seo
1108
- #: models/BlockSettingsSeo.php:332
1109
- msgid "Delete error: Could not delete the old favicon."
1110
- msgstr "Lösch Fehler: Konnte das alte Favicon nicht löschen."
 
1111
 
1112
- # @ squirrly-seo
1113
- #: models/BlockSettingsSeo.php:339
1114
- msgid "Upload error: Could not upload the favicon."
1115
- msgstr "Upload Fehler: Konnte das Favicon nicht hochladen."
 
 
 
 
1116
 
1117
- # @ squirrly-seo
1118
- #: models/BlockSettingsSeo.php:345
1119
- msgid "Permission error: Could not change the favicon permissions."
1120
- msgstr "Permission Fehler: Konnte Favicon-Berechtigungen nicht ändern."
 
1121
 
1122
- # @ squirrly-seo
1123
- #: models/BlockSettingsSeo.php:367
1124
- msgid ""
1125
- "ICO Error: Could not create the ICO from file. Try with another file type."
1126
  msgstr ""
1127
- "ICO Fehler: konnte ICO aus der Datei nicht erstellen. Versuchen Sie es mit "
1128
- "einem anderen Dateityp."
1129
 
1130
- # @ squirrly-seo
1131
- #: models/BlockSettingsSeo.php:386
1132
- msgid "The favicon has been updated."
1133
- msgstr "Das Favicon wurde aktualisiert."
 
 
1134
 
1135
- # @ default
1136
- #: models/Post.php:53
1137
- msgid "Squirrly could not find any results for: "
1138
- msgstr "Squirly hat keine Suchergebnisse gefunden für:"
 
 
1139
 
1140
- #: models/Post.php:122
1141
- msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
 
 
 
1142
  msgstr ""
1143
 
1144
- #: models/Post.php:123
1145
- msgid ""
1146
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
1147
- "the HTML form."
 
 
1148
  msgstr ""
1149
 
1150
- #: models/Post.php:124
1151
- msgid "The uploaded file was only partially uploaded."
1152
  msgstr ""
1153
 
1154
- #: models/Post.php:125
1155
- msgid "No file was uploaded."
1156
  msgstr ""
1157
 
1158
- #: models/Post.php:127
1159
- msgid "Missing a temporary folder."
1160
  msgstr ""
1161
 
1162
- #: models/Post.php:128
1163
- msgid "Failed to write file to disk."
 
1164
  msgstr ""
1165
 
1166
- #: models/Post.php:129
1167
- msgid "File upload stopped by extension."
1168
  msgstr ""
1169
 
1170
- #: models/Post.php:146
1171
- msgid "Invalid form submission."
1172
  msgstr ""
1173
 
1174
- #: models/Post.php:156
1175
- msgid "File is empty. Please upload something more substantial."
1176
  msgstr ""
1177
 
1178
- #: models/Post.php:158
1179
- msgid ""
1180
- "File is empty. Please upload something more substantial. This error could "
1181
- "also be caused by uploads being disabled in your php.ini or by post_max_size "
1182
- "being defined as smaller than upload_max_filesize in php.ini."
1183
- msgstr ""
1184
 
1185
- #: models/Post.php:164
1186
- msgid "Specified file failed upload test."
1187
- msgstr ""
 
1188
 
1189
- #: models/Post.php:177
1190
- msgid "Sorry, this file type is not permitted for security reasons."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
  msgstr ""
1192
 
1193
- #: models/Post.php:202
1194
  #, php-format
1195
- msgid "The uploaded file could not be moved to %s."
1196
  msgstr ""
1197
 
1198
- #: models/PostsList.php:27
1199
- msgid "Optimized:"
 
 
 
 
1200
  msgstr ""
1201
 
1202
- #: models/PostsList.php:28
1203
- msgid "See Analytics"
1204
  msgstr ""
1205
 
1206
- #: models/PostsList.php:30
1207
- msgid "Optimize it with Squirrly to see the Analytics"
1208
  msgstr ""
1209
 
1210
- #: models/PostsList.php:83
1211
- msgid "This post's current position in Google"
1212
  msgstr ""
1213
 
1214
- #: models/PostsList.php:86
1215
- msgid "The total traffic for the last 30 days, for the current post"
1216
  msgstr ""
1217
 
1218
- #: models/PostsList.php:89
1219
- msgid "The total number of shares on social media channels for this post"
 
1220
  msgstr ""
1221
 
1222
- #: models/PostsList.php:92
1223
- msgid "The total authority for this post"
 
1224
  msgstr ""
1225
 
1226
- #: models/PostsList.php:95
1227
- msgid "The total number of inbound links to this post"
1228
  msgstr ""
1229
 
1230
- #: models/SerpCheckerTable.php:353 view/BlockPatterns.php:102
1231
- #: view/FrontMenu.php:156
1232
- msgid "Title"
 
 
 
 
 
 
1233
  msgstr ""
1234
 
1235
- #: models/SerpCheckerTable.php:356 view/BlockBriefcaseKeywords.php:76
1236
- #: view/BlockBriefcaseKeywords.php:184 view/BlockSerpKeywords.php:31
1237
- #: view/BlockSerpKeywords.php:63
1238
- msgid "Keyword"
1239
  msgstr ""
1240
 
1241
- #: models/SerpCheckerTable.php:371
1242
- msgid "Social Shares"
1243
  msgstr ""
1244
 
1245
- #: models/SerpCheckerTable.php:378
1246
- msgid "Post Date"
1247
  msgstr ""
1248
 
1249
- #: models/SerpCheckerTable.php:399 view/BlockBriefcaseKeywords.php:46
1250
- msgid "Search Keyword"
1251
  msgstr ""
1252
 
1253
- #: models/SerpCheckerTable.php:599
1254
- #, php-format
1255
- msgid "Squirrly Optimization for: '%s'"
1256
  msgstr ""
1257
 
1258
- #: models/SerpCheckerTable.php:632
1259
- msgid "Facebook"
1260
  msgstr ""
1261
 
1262
  # @ squirrly-seo
1263
- #: models/SerpCheckerTable.php:633 view/Blocksearch.php:61
1264
- msgid "Twitter"
1265
- msgstr "Twitter"
 
 
1266
 
1267
- #: models/SerpCheckerTable.php:636
1268
- msgid "Reddit"
1269
  msgstr ""
1270
 
1271
- #: models/SerpCheckerTable.php:637
1272
- msgid "Stumble"
1273
  msgstr ""
1274
 
1275
- #: models/SerpCheckerTable.php:638
1276
- msgid "Pinterest"
1277
  msgstr ""
1278
 
1279
- #: models/SerpCheckerTable.php:642
1280
- #, php-format
1281
- msgid "Google Rank for keyword '%s' on '%s'"
1282
  msgstr ""
1283
 
1284
- #: models/SerpCheckerTable.php:702
1285
- msgid "In queue"
1286
  msgstr ""
1287
 
1288
- #: models/SerpCheckerTable.php:705
1289
- msgid "Not indexed"
 
 
1290
  msgstr ""
1291
 
1292
- #: models/domain/Patterns.php:240
1293
- msgid "Page"
1294
  msgstr ""
1295
 
1296
- #: models/domain/Patterns.php:241
1297
- msgid "of"
1298
  msgstr ""
1299
 
1300
- #: models/services/Robots.php:13
1301
- msgid "Squirrly SEO Robots"
1302
  msgstr ""
1303
 
1304
- #: models/services/Robots.php:16
1305
- msgid ""
1306
- "Your blog is not public. Please see Site Visibility on Settings > Reading."
1307
  msgstr ""
1308
 
1309
- #: models/services/Robots.php:31
1310
- msgid "No Squirrly SEO Robots found."
1311
  msgstr ""
1312
 
1313
- # @ squirrly-seo
1314
- #: squirrly.php:75
1315
- msgid ""
1316
- "For Squirrly to work, the PHP version has to be equal or greater then 5.1"
1317
  msgstr ""
1318
- "Damit Squirrly funktioniert, muss die PHP-Version gleich oder größer als 5.1 "
1319
- "sein"
1320
 
1321
- #: view/BlockAccount.php:7 view/BlockAffiliate.php:7 view/BlockAudit.php:7
1322
- #: view/BlockBriefcaseKeywords.php:7 view/BlockDashboard.php:6
1323
- #: view/BlockImport.php:7 view/BlockKeywordResearch.php:7
1324
- #: view/BlockPatterns.php:7 view/BlockPostsAnalytics.php:7
1325
- #: view/BlockSettings.php:7 view/BlockSettingsSeo.php:7 view/SerpChecker.php:7
1326
- msgid "Connect to Squirrly Data Cloud"
1327
- msgstr ""
1328
 
1329
- #: view/BlockAccount.php:13 view/BlockAffiliate.php:13 view/BlockAudit.php:13
1330
- #: view/BlockBriefcaseKeywords.php:13 view/BlockDashboard.php:28
1331
- #: view/BlockImport.php:13 view/BlockKeywordResearch.php:13
1332
- #: view/BlockPatterns.php:13 view/BlockPostsAnalytics.php:12
1333
- #: view/BlockSettings.php:13 view/BlockSettingsSeo.php:13
1334
- #: view/Blocklogin.php:38 view/SerpChecker.php:13
1335
- msgid "START HERE"
1336
- msgstr ""
1337
 
1338
- #: view/BlockAccount.php:23
1339
- msgid "Squirrly account information"
1340
- msgstr ""
 
 
 
1341
 
1342
- #: view/BlockAccount.php:25 view/BlockAffiliate.php:23
1343
- msgid "Go to dashboard"
1344
- msgstr ""
 
1345
 
1346
- #: view/BlockAccount.php:26
1347
- msgid "See ALL of Your Activity so Far"
1348
- msgstr ""
 
 
 
1349
 
1350
- #: view/BlockAffiliate.php:21 view/BlockAffiliate.php:33
1351
- msgid "Join our affiliate program"
1352
- msgstr ""
 
1353
 
1354
- #: view/BlockAffiliate.php:34
1355
- #, php-format
1356
- msgid "%sHow I Started Making Money With the Squirrly Affiliate Program%s"
1357
- msgstr ""
1358
 
1359
- #: view/BlockAffiliate.php:37
1360
- msgid "Affiliate Benefits"
1361
- msgstr ""
 
1362
 
1363
- #: view/BlockAffiliate.php:42
1364
- #, php-format
1365
- msgid "- Up to recurring 45%s commission"
1366
- msgstr ""
1367
 
1368
- #: view/BlockAffiliate.php:47
1369
- msgid "- No cost"
1370
- msgstr ""
 
 
 
 
 
 
1371
 
1372
- #: view/BlockAffiliate.php:52
1373
- msgid "- Monthly payments in your Paypal account"
1374
  msgstr ""
1375
 
1376
- #: view/BlockAffiliate.php:61
1377
- #, php-format
1378
- msgid ""
1379
- "Before joining our affiliate program, please read the Terms of Use %shttps://"
1380
- "www.squirrly.co/terms/%s."
1381
  msgstr ""
1382
 
1383
- #: view/BlockAffiliate.php:69
1384
- msgid ""
1385
- "To redirect users to your site, just change \"squirrly.co\" with your domain."
1386
  msgstr ""
1387
 
1388
- #: view/BlockAffiliate.php:72
1389
- msgid "Generate affiliate link"
1390
  msgstr ""
1391
 
1392
- #: view/BlockAffiliate.php:81
1393
- msgid ""
1394
- "Your affiliate account is set and ready to go. Above you have the affiliate "
1395
- "link. "
1396
  msgstr ""
1397
 
1398
- #: view/BlockAffiliate.php:83
1399
- #, php-format
1400
- msgid "Check your affiliate page: %sAffiliate page%s"
1401
  msgstr ""
1402
 
1403
- #: view/BlockAffiliate.php:86
 
 
1404
  msgid ""
1405
- "After you connect to Squirrly you can begin to use your free Squirrly "
1406
- "affiliate link immediately!"
1407
  msgstr ""
1408
 
1409
- #: view/BlockAffiliate.php:96
1410
- msgid "Squirrly banners you can use"
 
1411
  msgstr ""
1412
 
1413
- #: view/BlockAffiliate.php:121
1414
- msgid "<< START HERE >>"
1415
  msgstr ""
1416
 
1417
- #: view/BlockAnalytics.php:55
1418
- msgid "Moz Inbound Links"
 
 
1419
  msgstr ""
1420
 
1421
- #: view/BlockAnalytics.php:62
1422
- msgid "Ahrefs Inbound Links"
 
1423
  msgstr ""
1424
 
1425
- #: view/BlockAnalytics.php:74
1426
- msgid "Moz Authority"
 
1427
  msgstr ""
1428
 
1429
- #: view/BlockAnalytics.php:79
1430
- msgid "Moz Rank"
 
1431
  msgstr ""
1432
 
1433
- #: view/BlockAnalytics.php:86
1434
- msgid "Google Page Rank"
 
 
1435
  msgstr ""
1436
 
1437
- #: view/BlockAnalytics.php:92
1438
- msgid "Ahrefs Rank"
1439
  msgstr ""
1440
 
1441
- #: view/BlockAnalytics.php:109
1442
- msgid "Facebook shares"
1443
- msgstr ""
 
 
 
 
 
1444
 
1445
- #: view/BlockAnalytics.php:114
1446
- msgid "Twitter shares"
 
 
1447
  msgstr ""
1448
 
1449
- #: view/BlockAnalytics.php:119
1450
- msgid "StumbleUpon shares"
 
1451
  msgstr ""
1452
 
1453
- #: view/BlockAnalytics.php:124
1454
- msgid "Reddit shares"
 
 
1455
  msgstr ""
1456
 
1457
- #: view/BlockAnalytics.php:129
1458
- msgid "Pinterest shares"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1459
  msgstr ""
1460
 
1461
- #: view/BlockAnalytics.php:161
1462
- msgid "Nicely done! Now you can focus on the other tasks"
 
 
 
 
 
 
 
1463
  msgstr ""
1464
 
1465
- #: view/BlockAnalytics.php:161
1466
- msgid ""
1467
- "I know you can improve this. Please follow the documentation for a quicker "
1468
- "progress"
 
 
 
1469
  msgstr ""
1470
 
1471
- #: view/BlockAnalytics.php:234
1472
- msgid "Visits"
1473
  msgstr ""
1474
 
1475
- #: view/BlockAnalytics.php:247
1476
- msgid "Current: "
1477
  msgstr ""
1478
 
1479
- #: view/BlockAnalytics.php:248
1480
- msgid "Lowest: "
1481
  msgstr ""
1482
 
1483
- #: view/BlockAnalytics.php:249
1484
- msgid "Highest: "
 
 
 
1485
  msgstr ""
1486
 
1487
- #: view/BlockAnalytics.php:253
1488
- msgid "last 30 days"
1489
  msgstr ""
1490
 
1491
- #: view/BlockAudit.php:24
1492
- msgid "Squirrly Site Audit"
 
1493
  msgstr ""
1494
 
1495
- #: view/BlockAudit.php:31
1496
- msgid "What the Audit offers:"
 
1497
  msgstr ""
1498
 
1499
- #: view/BlockAudit.php:32
1500
  #, php-format
1501
  msgid ""
1502
- "%sTracks all the areas of your Content Marketing Strategy:%s: Blogging, "
1503
- "Traffic, SEO, Social Signals, Links, Authority. Every single week, you get a "
1504
- "new report by email."
1505
  msgstr ""
1506
 
1507
- #: view/BlockAudit.php:33
1508
- #, php-format
1509
- msgid ""
1510
- "%sIt gives you professional advice on how to fix issues in those 6 areas%s. "
1511
- "You can easily find out how to improve your content marketing strategy."
1512
  msgstr ""
1513
 
1514
- #: view/BlockAudit.php:34
1515
- #, php-format
1516
- msgid ""
1517
- "%sMonitors your progress, week by week.%s You’ll get to see if your site "
1518
- "audit has improved since you last checked it. "
1519
  msgstr ""
1520
 
1521
- #: view/BlockAudit.php:35
1522
- #, php-format
1523
- msgid "%sAnalyze any single article.%s See how it improves over time."
1524
  msgstr ""
1525
 
1526
- #: view/BlockAudit.php:36
1527
- #, php-format
1528
- msgid "%sLearn More About The Site Audit%s"
1529
  msgstr ""
1530
 
1531
- #: view/BlockAudit.php:37
1532
  #, php-format
1533
- msgid "%sRequest an Audit Now%s"
1534
  msgstr ""
1535
 
1536
- #: view/BlockAudit.php:43
1537
- msgid "\"Your current site audit score:"
1538
  msgstr ""
1539
 
1540
- #: view/BlockAudit.php:47
1541
- msgid "Score"
1542
- msgstr ""
 
 
 
1543
 
1544
- #: view/BlockAudit.php:50
1545
- msgid "See the Audit"
1546
  msgstr ""
1547
 
1548
- #: view/BlockAudit.php:53
1549
- msgid ""
1550
- "It seems that no audit has been generated yet. You can request an audit down "
1551
- "below. It should be ready in 5-10 minutes."
1552
  msgstr ""
1553
 
1554
- #: view/BlockAudit.php:55
1555
- msgid "Request an Audit Now"
1556
  msgstr ""
1557
 
1558
- #: view/BlockAudit.php:62
1559
- msgid "This is an example of a Site Audit"
 
 
1560
  msgstr ""
1561
 
1562
- #: view/BlockBriefcaseKeywords.php:25 view/SerpChecker.php:49
1563
- msgid "Show All"
1564
  msgstr ""
1565
 
1566
- #: view/BlockBriefcaseKeywords.php:29
1567
- msgid "Briefcase Keywords"
1568
- msgstr ""
 
 
1569
 
1570
- #: view/BlockBriefcaseKeywords.php:33
1571
- msgid "See the Google Ranks for these Keywords"
1572
  msgstr ""
1573
 
1574
- #: view/BlockBriefcaseKeywords.php:36
1575
- msgid "Go to Analytics"
1576
  msgstr ""
1577
 
1578
- #: view/BlockBriefcaseKeywords.php:48
1579
- msgid "Filter by labels"
1580
  msgstr ""
1581
 
1582
- #: view/BlockBriefcaseKeywords.php:62 view/BlockSerpKeywords.php:12
1583
- msgid "Add new keyword"
1584
  msgstr ""
1585
 
1586
- #: view/BlockBriefcaseKeywords.php:63
1587
- msgid "Manage Labels"
1588
  msgstr ""
1589
 
1590
- #: view/BlockBriefcaseKeywords.php:72 view/BlockSerpKeywords.php:27
1591
- msgid "Add a new Keyword"
 
 
1592
  msgstr ""
1593
 
1594
- #: view/BlockBriefcaseKeywords.php:77 view/BlockSerpKeywords.php:32
1595
- msgid "Enter a Keyword (2-4 words)"
1596
  msgstr ""
1597
 
1598
- #: view/BlockBriefcaseKeywords.php:80
1599
- msgid "Select Labels"
 
1600
  msgstr ""
1601
 
1602
- #: view/BlockBriefcaseKeywords.php:89 view/BlockBriefcaseKeywords.php:234
1603
- msgid "Add new Label"
1604
  msgstr ""
1605
 
1606
- #: view/BlockBriefcaseKeywords.php:96 view/BlockSerpKeywords.php:42
1607
- msgid "Add Keyword"
1608
  msgstr ""
1609
 
1610
- #: view/BlockBriefcaseKeywords.php:107
1611
- msgid "Add New Label"
1612
- msgstr ""
 
 
 
1613
 
1614
- #: view/BlockBriefcaseKeywords.php:111 view/BlockBriefcaseKeywords.php:156
1615
- msgid "Label Name"
1616
  msgstr ""
1617
 
1618
- #: view/BlockBriefcaseKeywords.php:115 view/BlockBriefcaseKeywords.php:160
1619
- msgid "Label Color"
 
 
 
1620
  msgstr ""
1621
 
1622
- #: view/BlockBriefcaseKeywords.php:122
1623
- msgid "Add Label"
1624
  msgstr ""
1625
 
1626
- #: view/BlockBriefcaseKeywords.php:125
1627
- msgid "Your Labels"
1628
  msgstr ""
1629
 
1630
- #: view/BlockBriefcaseKeywords.php:152
1631
- msgid "Edit Label"
 
1632
  msgstr ""
1633
 
1634
- #: view/BlockBriefcaseKeywords.php:166
1635
- msgid "Save Label"
1636
  msgstr ""
1637
 
1638
- #: view/BlockBriefcaseKeywords.php:185
1639
- msgid "Used"
 
 
 
1640
  msgstr ""
1641
 
1642
- #: view/BlockBriefcaseKeywords.php:186
1643
- msgid "Data"
 
 
 
1644
  msgstr ""
1645
 
1646
- #: view/BlockBriefcaseKeywords.php:216
1647
- msgid "Assign Labels to this Keyword"
 
 
 
1648
  msgstr ""
1649
 
1650
- #: view/BlockBriefcaseKeywords.php:222
1651
- #, php-format
1652
- msgid "Select Labels for: %s"
1653
  msgstr ""
1654
 
1655
- #: view/BlockBriefcaseKeywords.php:240
1656
- msgid "Save Labels"
1657
  msgstr ""
1658
 
1659
- #: view/BlockBriefcaseKeywords.php:257 view/BlockBriefcaseKeywords.php:258
1660
- msgid "Competition"
 
 
 
1661
  msgstr ""
1662
 
1663
- #: view/BlockBriefcaseKeywords.php:258 view/BlockBriefcaseKeywords.php:266
1664
- #: view/BlockBriefcaseKeywords.php:274 view/BlockBriefcaseKeywords.php:282
1665
- msgid "-"
1666
  msgstr ""
1667
 
1668
- #: view/BlockBriefcaseKeywords.php:265 view/BlockBriefcaseKeywords.php:266
1669
- msgid "SEO Search Volume"
1670
  msgstr ""
1671
 
1672
- #: view/BlockBriefcaseKeywords.php:273 view/BlockBriefcaseKeywords.php:274
1673
- msgid "Recent discussions"
1674
  msgstr ""
1675
 
1676
- #: view/BlockBriefcaseKeywords.php:281 view/BlockBriefcaseKeywords.php:282
1677
- msgid "Trending"
1678
  msgst
2
  msgstr ""
3
  "Project-Id-Version: Squirrly SEO Plugin\n"
4
  "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2019-04-05 12:21+0300\n"
6
+ "PO-Revision-Date: 2019-04-05 12:21+0300\n"
7
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
8
  "Language-Team: \n"
9
  "Language: de_DE\n"
16
  "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
17
  "X-Poedit-Basepath: ..\n"
18
  "X-Textdomain-Support: yes\n"
19
+ "X-Generator: Poedit 2.2.1\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
 
22
+ #: classes/Error.php:72 classes/Error.php:83
23
+ msgid "Don't bother me!"
24
+ msgstr ""
25
+
26
+ #: classes/RemoteController.php:261
27
+ msgid "Articles optimized so far"
28
+ msgstr ""
29
+
30
+ #: classes/RemoteController.php:263 classes/RemoteController.php:270
31
+ msgid "add post"
32
+ msgstr ""
33
+
34
+ #: classes/RemoteController.php:268
35
+ msgid "Average optimization"
36
+ msgstr ""
37
+
38
+ #: classes/RemoteController.php:275
39
+ msgid "All Keyword Researches performed for all websites"
40
+ msgstr ""
41
+
42
+ # @ squirrly-seo
43
+ #: classes/RemoteController.php:277
44
+ #, fuzzy
45
+ #| msgid "Do a research"
46
+ msgid "do research"
47
+ msgstr "Recherchieren"
48
+
49
+ #: classes/RemoteController.php:282
50
+ msgid "Keywords stored in Squirrly Briefcase"
51
+ msgstr ""
52
+
53
+ # @ squirrly-seo
54
+ #: classes/RemoteController.php:284
55
+ #, fuzzy
56
+ #| msgid "+ Add keyword"
57
+ msgid "add keyword"
58
+ msgstr "Fügen Sie ein anderes Schlüsselwort ein"
59
+
60
+ #: classes/RemoteController.php:289
61
+ msgid "Pages ranking in top 100 Google"
62
+ msgstr ""
63
+
64
+ #: classes/RemoteController.php:291
65
+ msgid "see rankings"
66
+ msgstr ""
67
+
68
+ #: classes/RemoteController.php:296
69
+ msgid "SEO Audits"
70
+ msgstr ""
71
+
72
+ #: classes/RemoteController.php:298
73
+ msgid "see audits"
74
+ msgstr ""
75
+
76
+ #: classes/RemoteController.php:928
77
+ msgid "Recent discussions:"
78
+ msgstr "Bisherige Diskussionen:"
79
+
80
+ #: classes/RemoteController.php:928
81
+ msgid "SEO Search Volume:"
82
+ msgstr ""
83
+
84
+ # @ squirrly-seo
85
+ #: classes/RemoteController.php:928
86
+ msgid "Competition:"
87
+ msgstr "Wettbewerb:"
88
+
89
+ # @ squirrly-seo
90
+ #: classes/RemoteController.php:928
91
+ msgid "Trend:"
92
+ msgstr "Trend:"
93
+
94
+ # @ squirrly-seo
95
+ #: classes/RemoteController.php:929
96
+ msgid "Keyword:"
97
+ msgstr "Schlüsselwort:"
98
+
99
+ # @ squirrly-seo
100
+ #: classes/RemoteController.php:930
101
+ msgid "date"
102
+ msgstr "Datum"
103
+
104
+ #: classes/RemoteController.php:931 controllers/CheckSeo.php:105
105
+ #: controllers/Patterns.php:15 controllers/Research.php:288
106
+ #: controllers/Research.php:320 controllers/Research.php:376
107
+ msgid "Saved!"
108
+ msgstr ""
109
+
110
+ # @ squirrly-seo
111
+ #: classes/RemoteController.php:932
112
+ msgid "Read it!"
113
+ msgstr "Lesen!"
114
+
115
+ # @ squirrly-seo
116
+ #: classes/RemoteController.php:933
117
+ msgid "Insert it!"
118
+ msgstr "Einfügen!"
119
+
120
+ # @ squirrly-seo
121
+ #: classes/RemoteController.php:934
122
+ msgid "Reference"
123
+ msgstr "Referenz"
124
+
125
+ # @ squirrly-seo
126
+ #: classes/RemoteController.php:935
127
+ msgid "Insert as box"
128
+ msgstr "Als Box einfügen"
129
+
130
+ #: classes/RemoteController.php:936
131
+ msgid "Insert Link"
132
+ msgstr ""
133
+
134
+ # @ squirrly-seo
135
+ #: classes/RemoteController.php:937
136
+ msgid "Not relevant?"
137
+ msgstr "Nicht relevant?"
138
+
139
+ # @ squirrly-seo
140
+ #: classes/RemoteController.php:938
141
+ msgid "Insert in your article"
142
+ msgstr "In Artikel einfügen"
143
+
144
+ #: classes/RemoteController.php:939
145
+ msgid ":( An error occurred while processing your request. Please try again"
146
+ msgstr ""
147
+
148
+ #: classes/RemoteController.php:940
149
+ msgid "Keyword Research takes too long to get the results. Click to try again"
150
+ msgstr ""
151
+
152
+ # @ squirrly-seo
153
+ #: classes/RemoteController.php:941
154
+ msgid "No results found!"
155
+ msgstr "Keine Ergebnisse gefunden!"
156
+
157
+ #: classes/RemoteController.php:942
158
+ msgid "Enter one more word to find relevant results"
159
+ msgstr ""
160
+
161
+ # @ squirrly-seo
162
+ #: classes/RemoteController.php:943
163
+ #, fuzzy
164
+ #| msgid "Takes too long to check this keyword ..."
165
+ msgid "It's taking too long to check this keyword"
166
+ msgstr "Dauert zu lange, um dieses Schlüsselwort zu überprüfen ..."
167
+
168
+ # @ squirrly-seo
169
+ #: classes/RemoteController.php:944
170
+ msgid "Do a research!"
171
+ msgstr "Erweiterte Suche!"
172
+
173
+ # @ squirrly-seo
174
+ #: classes/RemoteController.php:945
175
+ msgid "Do more research!"
176
+ msgstr "Erweiterte Suche!"
177
+
178
+ #: classes/RemoteController.php:946
179
+ #, php-format
180
+ msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
181
+ msgstr ""
182
+
183
+ #: classes/RemoteController.php:947
184
+ msgid "Has creative commons attributes"
185
+ msgstr ""
186
+
187
+ #: classes/RemoteController.php:948
188
+ msgid "No known copyright restrictions"
189
+ msgstr ""
190
+
191
+ #: classes/RemoteController.php:949
192
+ msgid ""
193
+ "You haven`t used Squirrly SEO to optimize your article. Do you want to "
194
+ "optimize for a keyword before publishing?"
195
+ msgstr ""
196
+ "You haven`t used Squirrly SEO to optimize your article. Do you want to "
197
+ "optimize for a keyword before publishing?"
198
+
199
+ #: classes/RemoteController.php:950
200
+ msgid "Keyword Research limit exceeded"
201
+ msgstr ""
202
+
203
+ #: classes/RemoteController.php:951
204
+ msgid "Your Subscription has Expired"
205
+ msgstr ""
206
+
207
+ #: classes/RemoteController.php:952
208
+ msgid "Add 20 Keyword Researches"
209
+ msgstr ""
210
+
211
+ #: classes/RemoteController.php:953
212
+ msgid "There are no keywords saved in briefcase yet"
213
+ msgstr ""
214
+
215
+ #: classes/RemoteController.php:954
216
+ #, php-format
217
+ msgid "Congratulations! Your article is 100% optimized!"
218
+ msgstr ""
219
+
220
+ #: classes/RemoteController.php:955
221
+ #, php-format
222
+ msgid "appears too many times. Try to remove %s of them"
223
+ msgstr ""
224
+
225
+ #: classes/RemoteController.php:956
226
+ #, php-format
227
+ msgid "write %s more words"
228
+ msgstr ""
229
+
230
+ #: classes/RemoteController.php:957
231
+ #, php-format
232
+ msgid "Add the keyword in the %s of your article"
233
+ msgstr ""
234
+
235
+ #: classes/RemoteController.php:958
236
+ msgid "Click to keep the highlight on"
237
+ msgstr ""
238
+
239
+ #: classes/RemoteController.php:959
240
+ msgid "introduction"
241
+ msgstr ""
242
+
243
+ #: classes/RemoteController.php:960
244
+ #, php-format
245
+ msgid "Write more words after the %s keyword"
246
+ msgstr ""
247
+
248
+ #: classes/RemoteController.php:961
249
+ msgid "or use synonyms"
250
+ msgstr ""
251
+
252
+ #: classes/RemoteController.php:962
253
+ #, php-format
254
+ msgid "add %s more word(s)"
255
+ msgstr ""
256
+
257
+ #: classes/RemoteController.php:963
258
+ #, php-format
259
+ msgid "or remove %s word(s)"
260
+ msgstr ""
261
+
262
+ #: classes/RemoteController.php:964
263
+ #, php-format
264
+ msgid "add %s more keyword(s)"
265
+ msgstr ""
266
+
267
+ #: classes/RemoteController.php:965
268
+ #, php-format
269
+ msgid "write %s more words to start calculating"
270
+ msgstr ""
271
+
272
+ #: classes/RemoteController.php:966 view/Research/Research.php:42
273
+ msgid "Add to Briefcase"
274
+ msgstr ""
275
+
276
+ #: classes/RemoteController.php:967
277
+ msgid "Add Keyword to Briefcase"
278
+ msgstr ""
279
+
280
+ #: classes/RemoteController.php:968 view/Blocks/KRFound.php:78
281
+ msgid "Use Keyword"
282
+ msgstr ""
283
+
284
+ #: classes/RemoteController.php:969 view/Blocks/Snippet.php:146
285
+ #: view/Blocks/Snippet.php:518 view/Blocks/Snippet.php:774
286
+ msgid "Auto Draft"
287
+ msgstr ""
288
+
289
+ # @ squirrly-seo
290
+ #: classes/helpers/Sanitize.php:112
291
+ msgid "The code for Google Webmaster Tool is incorrect."
292
+ msgstr "Der Code für Google Webmaster Tool ist falsch."
293
+
294
+ # @ squirrly-seo
295
+ #: classes/helpers/Sanitize.php:140
296
+ msgid "The code for Google Analytics is incorrect."
297
+ msgstr "Der Code für Google Analytics ist falsch."
298
+
299
+ # @ squirrly-seo
300
+ #: classes/helpers/Sanitize.php:187
301
+ msgid "The code for Facebook is incorrect."
302
+ msgstr "Der Code für Facebook ist falsch."
303
+
304
+ #: classes/helpers/Sanitize.php:213
305
+ msgid "The code for Pinterest is incorrect."
306
+ msgstr ""
307
+
308
+ # @ squirrly-seo
309
+ #: classes/helpers/Sanitize.php:238
310
+ msgid "The code for Bing is incorrect."
311
+ msgstr "Der Code für Bing ist falsch."
312
+
313
+ # @ squirrly-seo
314
+ #: classes/helpers/Sanitize.php:263
315
+ #, fuzzy
316
+ #| msgid "The code for Bing is incorrect."
317
+ msgid "The code for Alexa is incorrect."
318
+ msgstr "Der Code für Bing ist falsch."
319
+
320
+ # @ squirrly-seo
321
+ #: classes/helpers/Sanitize.php:389
322
+ #, fuzzy
323
+ #| msgid "The code for Facebook is incorrect."
324
+ msgid "The code for Facebook Pixel must only contain numbers."
325
+ msgstr "Der Code für Facebook ist falsch."
326
+
327
+ # @ squirrly-seo
328
+ #: classes/helpers/Sanitize.php:404
329
+ #, fuzzy
330
+ #| msgid "The code for Facebook is incorrect."
331
+ msgid "The code for Facebook App must only contain numbers."
332
+ msgstr "Der Code für Facebook ist falsch."
333
+
334
+ #: classes/helpers/Tools.php:82
335
+ msgid "Getting started"
336
+ msgstr ""
337
+
338
+ # @ squirrly-seo
339
+ #: classes/helpers/Tools.php:107
340
+ #, fuzzy
341
+ #| msgid "Competition:"
342
+ msgid "Documentation"
343
+ msgstr "Wettbewerb:"
344
+
345
+ #: classes/helpers/Tools.php:108
346
+ msgid "Leave a review"
347
+ msgstr ""
348
+
349
+ #: classes/helpers/Tools.php:385
350
+ msgid "Format"
351
+ msgstr ""
352
+
353
+ #: classes/helpers/Tools.php:402 classes/helpers/Tools.php:436
354
+ msgid "Category"
355
+ msgstr ""
356
+
357
+ #: classes/helpers/Tools.php:419 classes/helpers/Tools.php:453
358
+ msgid "Tag"
359
+ msgstr ""
360
+
361
+ #: classes/helpers/Tools.php:470
362
+ msgid "Shipping Option"
363
+ msgstr ""
364
+
365
+ #: classes/helpers/Tools.php:487
366
+ msgid "Author at"
367
+ msgstr ""
368
+
369
+ #: classes/helpers/Tools.php:555
370
+ msgid "Are you looking for"
371
+ msgstr ""
372
+
373
+ #: classes/helpers/Tools.php:556
374
+ msgid "These are the results for"
375
+ msgstr ""
376
+
377
+ #: classes/helpers/Tools.php:556
378
+ msgid "that you can find on our website."
379
+ msgstr ""
380
+
381
+ #: classes/helpers/Tools.php:589
382
+ msgid "Page not found"
383
+ msgstr ""
384
+
385
+ #: classes/helpers/Tools.php:590
386
+ msgid "This page could not be found on our website."
387
+ msgstr ""
388
+
389
+ #: classes/helpers/Tools.php:873 classes/helpers/Tools.php:884
390
+ #, php-format
391
+ msgid ""
392
+ "Good news, %s is integrated in Squirrly SEO now and you no longer have to "
393
+ "run 2 different plugins."
394
+ msgstr ""
395
+
396
+ #: config/config.php:28
397
+ msgid "Places a separator between the elements of the post description"
398
+ msgstr ""
399
+
400
+ #: config/config.php:29
401
+ msgid "Adds the title of the post/page/term once it’s published"
402
+ msgstr ""
403
+
404
+ #: config/config.php:30
405
+ msgid ""
406
+ "Will display an excerpt from the post/page/term (if not customized, the "
407
+ "excerpt will be auto-generated)"
408
+ msgstr ""
409
+
410
+ #: config/config.php:31
411
+ msgid "Will display an excerpt from the post/page (no auto-generation)"
412
+ msgstr ""
413
+
414
+ #: config/config.php:32
415
+ msgid "Adds the post's keyword to the post description"
416
+ msgstr ""
417
+
418
+ #: config/config.php:33
419
+ msgid "Displays the number of the current page (i.e. 1 of 6)"
420
+ msgstr ""
421
+
422
+ #: config/config.php:34
423
+ msgid "Adds the site's name to the post description"
424
+ msgstr ""
425
+
426
+ #: config/config.php:35
427
+ msgid "Adds the tagline/description of your site"
428
+ msgstr ""
429
+
430
+ #: config/config.php:36
431
+ msgid "Adds the post category (several categories will be comma-separated)"
432
+ msgstr ""
433
+
434
+ #: config/config.php:37
435
+ msgid "Adds the primary category of the post/page"
436
+ msgstr ""
437
+
438
+ #: config/config.php:38
439
+ msgid "Adds the category description to the post description"
440
+ msgstr ""
441
+
442
+ #: config/config.php:39
443
+ msgid "Adds the current tag(s) (several tags will be comma-separated)"
444
+ msgstr ""
445
+
446
+ #: config/config.php:40
447
+ msgid "Adds the tag description"
448
+ msgstr ""
449
+
450
+ #: config/config.php:41
451
+ msgid "Adds the term name"
452
+ msgstr ""
453
+
454
+ #: config/config.php:42
455
+ msgid "Adds the term description"
456
+ msgstr ""
457
+
458
+ #: config/config.php:43
459
+ msgid "Displays the search phrase (if it appears in the post)"
460
+ msgstr ""
461
+
462
+ #: config/config.php:44
463
+ msgid "Replaces the publication date of a post/page with the modified one"
464
+ msgstr ""
465
+
466
+ #: config/config.php:45
467
+ msgid "Displays the author's nicename"
468
+ msgstr ""
469
+
470
+ #: config/config.php:46
471
+ msgid "Adds the author's biographical info to the post description"
472
+ msgstr ""
473
+
474
+ #: config/config.php:47
475
+ msgid "Displays the current date"
476
+ msgstr ""
477
+
478
+ #: config/config.php:48
479
+ msgid "Displays the date of the post/page once it's published"
480
+ msgstr ""
481
+
482
+ #: config/config.php:49
483
+ msgid "Adds the current day"
484
+ msgstr ""
485
+
486
+ #: config/config.php:50
487
+ msgid "Adds the current month"
488
+ msgstr ""
489
+
490
+ #: config/config.php:51
491
+ msgid "Adds the current year"
492
+ msgstr ""
493
+
494
+ #: config/config.php:52
495
+ msgid "Adds the title of a page's parent page"
496
+ msgstr ""
497
+
498
+ #: config/config.php:53
499
+ msgid "Adds the product name from Woocommerce for the current product"
500
+ msgstr ""
501
+
502
+ #: config/config.php:54
503
+ msgid "Adds the product price from Woocommerce for the current product"
504
+ msgstr ""
505
+
506
+ #: config/config.php:55
507
+ msgid "Adds the product sale price from Woocommerce for the current product"
508
+ msgstr ""
509
+
510
+ #: config/config.php:56
511
+ msgid ""
512
+ "Adds the product price currency from Woocommerce for the current product"
513
+ msgstr ""
514
+
515
+ #: controllers/Assistant.php:56 controllers/Research.php:73
516
+ msgid "No keyword found."
517
+ msgstr ""
518
+
519
+ #: controllers/Assistant.php:95 controllers/Assistant.php:122
520
+ #: controllers/Audits.php:79 controllers/Ranking.php:113
521
+ #: controllers/SeoSettings.php:285 controllers/SeoSettings.php:302
522
+ #: controllers/SeoSettings.php:322 controllers/SeoSettings.php:359
523
+ #: controllers/SeoSettings.php:385 controllers/SeoSettings.php:413
524
+ #: controllers/SeoSettings.php:661 controllers/SeoSettings.php:697
525
+ #: controllers/SeoSettings.php:734
526
+ msgid "Saved"
527
+ msgstr ""
528
+
529
+ #: controllers/Assistant.php:101 controllers/Patterns.php:92
530
+ #: controllers/Post.php:223 controllers/Post.php:254
531
+ #: controllers/PostsList.php:180 controllers/Research.php:144
532
+ #: controllers/Research.php:151 controllers/Research.php:186
533
+ #: controllers/Research.php:209 controllers/Research.php:269
534
+ #: controllers/Research.php:300 controllers/Research.php:328
535
+ #: controllers/Research.php:353 controllers/Research.php:384
536
+ #: controllers/Research.php:409 controllers/Research.php:447
537
+ #: controllers/SeoSettings.php:479 controllers/SeoSettings.php:648
538
+ #: controllers/SeoSettings.php:674 controllers/SeoSettings.php:712
539
+ #: controllers/SeoSettings.php:749 controllers/SeoSettings.php:787
540
+ #: controllers/Snippet.php:143
541
+ msgid "You do not have permission to perform this action"
542
+ msgstr ""
543
+
544
+ # @ squirrly-seo
545
+ #: controllers/Assistant.php:127
546
+ #, fuzzy
547
+ #| msgid "Could not send the email..."
548
+ msgid "Error: Could not save the data."
549
+ msgstr "Konnte E-Mail nicht senden ..."
550
+
551
+ #: controllers/Audits.php:81
552
+ msgid "Not a valid email address"
553
+ msgstr ""
554
+
555
+ #: controllers/CheckSeo.php:60
556
+ msgid "Done!"
557
+ msgstr ""
558
+
559
+ #: controllers/CheckSeo.php:78
560
+ msgid "Fixed!"
561
+ msgstr ""
562
+
563
+ #: controllers/CheckSeo.php:83
564
+ msgid "Could not fix it. You need to change it manually."
565
+ msgstr ""
566
+
567
+ #: controllers/CheckSeo.php:100
568
+ msgid "Saved! This task will be ignored in the future."
569
+ msgstr ""
570
+
571
+ #: controllers/FocusPages.php:159
572
+ msgid "Focus Page does not exist or was deleted from your website."
573
+ msgstr ""
574
+
575
+ #: controllers/FocusPages.php:197
576
+ msgid "Focus page is added. The audit may take a while so please be patient."
577
+ msgstr ""
578
+
579
+ #: controllers/FocusPages.php:200
580
+ msgid "You reached the maximum number of focus pages for your account."
581
+ msgstr ""
582
+
583
+ # @ squirrly-seo
584
+ #: controllers/FocusPages.php:203
585
+ #, fuzzy
586
+ #| msgid "Upload error: Could not upload the favicon."
587
+ msgid "Error! Could not add the focus page."
588
+ msgstr "Upload Fehler: Konnte das Favicon nicht hochladen."
589
+
590
+ #: controllers/FocusPages.php:206 controllers/FocusPages.php:238
591
+ msgid "Error! This focus page is not public."
592
+ msgstr ""
593
+
594
+ #: controllers/FocusPages.php:209 controllers/FocusPages.php:241
595
+ msgid "Error! Could not find the focus page in your website."
596
+ msgstr ""
597
+
598
+ #: controllers/FocusPages.php:229
599
+ msgid "Focus page sent for recheck. It may take a while so please be patient."
600
+ msgstr ""
601
+
602
+ #: controllers/FocusPages.php:232
603
+ msgid "You've made too many requests, please wait a few minutes."
604
+ msgstr ""
605
+
606
+ #: controllers/FocusPages.php:235
607
+ msgid "Error! Could not refresh the focus page."
608
+ msgstr ""
609
+
610
+ #: controllers/FocusPages.php:252
611
+ msgid "The focus page is deleted"
612
+ msgstr ""
613
+
614
+ #: controllers/FocusPages.php:254 controllers/Ranking.php:151
615
+ #: controllers/Research.php:176 controllers/Research.php:179
616
+ #: controllers/Research.php:203 controllers/Research.php:322
617
+ #: controllers/Research.php:347 controllers/Research.php:515
618
+ #: controllers/Research.php:539
619
+ msgid "Invalid params!"
620
+ msgstr ""
621
+
622
+ #: controllers/Menu.php:78
623
+ #, php-format
624
+ msgid ""
625
+ "An error occurred during activation. If this error persists, please contact "
626
+ "us at: %s"
627
+ msgstr ""
628
+
629
+ #: controllers/Menu.php:115 models/Menu.php:123
630
+ msgid "Dashboard"
631
+ msgstr ""
632
+
633
+ # @ squirrly-seo
634
+ #: controllers/Menu.php:139 view/Blocks/SLASearch.php:7
635
+ #, fuzzy
636
+ #| msgid "Squirrly settings"
637
+ msgid "Squirrly SEO"
638
+ msgstr "Squirrly Einstellungen"
639
+
640
+ #: controllers/Menu.php:195
641
+ msgid "SEO Snippet"
642
+ msgstr ""
643
+
644
+ #: controllers/Menu.php:204 controllers/Snippet.php:114
645
+ msgid "Custom SEO"
646
+ msgstr ""
647
+
648
+ #: controllers/Menu.php:243
649
+ msgid "Squirrly"
650
+ msgstr ""
651
+
652
+ # @ squirrly-seo
653
+ #: controllers/Menu.php:251
654
+ #, fuzzy
655
+ #| msgid "Squirrly settings"
656
+ msgid "Squirrly Onboarding"
657
+ msgstr "Squirrly Einstellungen"
658
+
659
+ #: controllers/Menu.php:252
660
+ msgid "Onboarding"
661
+ msgstr ""
662
+
663
+ #: controllers/Menu.php:271
664
+ msgid "Squirrly How To & Support"
665
+ msgstr ""
666
+
667
+ # @ squirrly-seo
668
+ #: controllers/Menu.php:272
669
+ #, fuzzy
670
+ #| msgid "Support"
671
+ msgid "Help & Support"
672
+ msgstr "Support"
673
+
674
+ #: controllers/Patterns.php:16
675
+ msgid "Saved! This is how the preview looks like"
676
+ msgstr ""
677
+
678
+ # @ squirrly-seo
679
+ #: controllers/Post.php:315
680
+ #, fuzzy
681
+ #| msgid "Could not send the email..."
682
+ msgid "Could not add the demo post."
683
+ msgstr "Konnte E-Mail nicht senden ..."
684
+
685
+ #: controllers/PostsList.php:72 controllers/PostsList.php:116
686
+ msgid "SQ Snippet"
687
+ msgstr ""
688
+
689
+ #: controllers/PostsList.php:73 controllers/Research.php:250
690
+ msgid "Optimized"
691
+ msgstr ""
692
+
693
+ #: controllers/PostsList.php:217
694
+ msgid "Not Public"
695
+ msgstr ""
696
+
697
+ #: controllers/PostsList.php:218
698
+ msgid "Could not process"
699
+ msgstr ""
700
+
701
+ #: controllers/PostsList.php:219
702
+ msgid "The Squirrly subscription has expired!"
703
+ msgstr ""
704
+
705
+ #: controllers/Ranking.php:129
706
+ #, php-format
707
+ msgid "Could not refresh the rank. Please check your SERP credits %shere%s"
708
+ msgstr ""
709
+
710
+ #: controllers/Ranking.php:131
711
+ #, php-format
712
+ msgid "%s is queued and the rank will be checked soon."
713
+ msgstr ""
714
+
715
+ #: controllers/Ranking.php:146
716
+ msgid "The keyword is deleted"
717
+ msgstr ""
718
+
719
+ # @ squirrly-seo
720
+ #: controllers/Ranking.php:148
721
+ #, fuzzy
722
+ #| msgid "Could not send the email..."
723
+ msgid "Could not delete the keyword!"
724
+ msgstr "Konnte E-Mail nicht senden ..."
725
+
726
+ # @ squirrly-seo
727
+ #: controllers/Research.php:169 controllers/Research.php:172
728
+ #, fuzzy
729
+ #| msgid "Keyword:"
730
+ msgid "Keyword Saved!"
731
+ msgstr "Schlüsselwort:"
732
+
733
+ #: controllers/Research.php:201 controllers/Research.php:345
734
+ msgid "Deleted!"
735
+ msgstr ""
736
+
737
+ #: controllers/Research.php:234
738
+ msgid "Edit"
739
+ msgstr ""
740
+
741
+ #: controllers/Research.php:239
742
+ msgid "Deleted Post"
743
+ msgstr ""
744
+
745
+ #: controllers/Research.php:249
746
+ msgid "Article title"
747
+ msgstr ""
748
+
749
+ #: controllers/Research.php:251 view/FocusPages/Addpage.php:44
750
+ msgid "Option"
751
+ msgstr ""
752
+
753
+ # @ squirrly-seo
754
+ #: controllers/Research.php:256
755
+ #, fuzzy
756
+ #| msgid "No results found!"
757
+ msgid "No articles found"
758
+ msgstr "Keine Ergebnisse gefunden!"
759
+
760
+ #: controllers/Research.php:262 controllers/Research.php:378
761
+ msgid "Invalid Keyword!"
762
+ msgstr ""
763
+
764
+ #: controllers/Research.php:294
765
+ msgid "Invalid Label or Color!"
766
+ msgstr ""
767
+
768
+ #: controllers/Research.php:433 controllers/SeoSettings.php:521
769
+ msgid "Great! The backup is restored."
770
+ msgstr ""
771
+
772
+ #: controllers/Research.php:435 controllers/Research.php:438
773
+ #: controllers/SeoSettings.php:523 controllers/SeoSettings.php:526
774
+ #: controllers/SeoSettings.php:570 controllers/SeoSettings.php:573
775
+ msgid "Error! The backup is not valid."
776
+ msgstr ""
777
+
778
+ #: controllers/Research.php:441 controllers/SeoSettings.php:529
779
+ #: controllers/SeoSettings.php:576
780
+ msgid "Error! You have to enter a previously saved backup file."
781
+ msgstr ""
782
+
783
+ #: controllers/Research.php:462
784
+ msgid "Could not add the keyword to SERP Check. Please try again."
785
+ msgstr ""
786
+
787
+ #: controllers/Research.php:464
788
+ msgid "The keyword is added to SERP Check."
789
+ msgstr ""
790
+
791
+ #: controllers/Research.php:467
792
+ msgid "Invalid parameters."
793
+ msgstr ""
794
+
795
+ # @ squirrly-seo
796
+ #: controllers/SeoSettings.php:457
797
+ #, fuzzy
798
+ #| msgid "The code for Google Analytics is incorrect."
799
+ msgid "Google Analytics account is disconnected."
800
+ msgstr "Der Code für Google Analytics ist falsch."
801
+
802
+ # @ squirrly-seo
803
+ #: controllers/SeoSettings.php:459 controllers/SeoSettings.php:473
804
+ #, fuzzy
805
+ #| msgid "Delete error: Could not delete the old favicon."
806
+ msgid "Error! Could not disconnect the account."
807
+ msgstr "Lösch Fehler: Konnte das alte Favicon nicht löschen."
808
+
809
+ #: controllers/SeoSettings.php:471
810
+ msgid "Google Search Console account is disconnected."
811
+ msgstr ""
812
+
813
+ #: controllers/SeoSettings.php:567
814
+ msgid "Great! The SEO backup is restored."
815
+ msgstr ""
816
+
817
+ #: controllers/SeoSettings.php:584
818
+ msgid "Settings imported successfuly!"
819
+ msgstr ""
820
+
821
+ #: controllers/SeoSettings.php:597 controllers/SeoSettings.php:635
822
+ #, php-format
823
+ msgid ""
824
+ "%s SEO records were imported successfuly! You can now deactivate the %s "
825
+ "plugin"
826
+ msgstr ""
827
+
828
+ #: controllers/SeoSettings.php:610
829
+ msgid "All the Plugin settings were imported successfuly!"
830
+ msgstr ""
831
+
832
+ #: controllers/SeoSettings.php:612
833
+ msgid "No settings found for this plugin/theme."
834
+ msgstr ""
835
+
836
+ #: controllers/SeoSettings.php:637
837
+ #, php-format
838
+ msgid ""
839
+ "There are no SEO records with this plugin. You can now deactivate the %s "
840
+ "plugin"
841
+ msgstr ""
842
+
843
+ # @ squirrly-seo
844
+ #: controllers/SeoSettings.php:663
845
+ #, fuzzy
846
+ #| msgid "Could not send the email..."
847
+ msgid "Could not save the changes"
848
+ msgstr "Konnte E-Mail nicht senden ..."
849
+
850
+ # @ squirrly-seo
851
+ #: controllers/SeoSettings.php:705 controllers/SeoSettings.php:742
852
+ #, fuzzy
853
+ #| msgid "Could not send the email..."
854
+ msgid "Could not add the post type"
855
+ msgstr "Konnte E-Mail nicht senden ..."
856
+
857
+ # @ squirrly-seo
858
+ #: controllers/Snippet.php:66
859
+ #, fuzzy
860
+ #| msgid "Squirrly LIVE SEO assistant"
861
+ msgid "Squirrly SEO Snippet"
862
+ msgstr "Squirrly LIVE SEO-Assistent"
863
+
864
+ # @ squirrly-seo
865
+ #: controllers/Snippet.php:161
866
+ #, fuzzy
867
+ #| msgid "Could not send the email..."
868
+ msgid "Could not save the data"
869
+ msgstr "Konnte E-Mail nicht senden ..."
870
+
871
+ # @ squirrly-seo
872
+ #: core/BlockSupport.php:28
873
+ msgid "Plugin Feedback"
874
+ msgstr "Plugin Feedback"
875
+
876
+ # @ squirrly-seo
877
+ #: core/BlockSupport.php:63
878
+ msgid "Thank you for your feedback"
879
+ msgstr "Vielen Dank für Ihre Feedback"
880
+
881
+ # @ squirrly-seo
882
+ #: core/BlockSupport.php:67
883
+ msgid "No message."
884
+ msgstr "Keine Nachricht."
885
+
886
+ # @ squirrly-seo
887
+ #: core/Blocklogin.php:55
888
+ #, fuzzy, php-format
889
+ #| msgid ""
890
+ #| "We found your email, so it means you already have a Squirrly.co account. "
891
+ #| "Please login with your Squirrly Email. If you forgot your password click "
892
+ #| "%shere%s"
893
+ msgid ""
894
+ "We found your email, so it means you already have a Squirrly.co account. "
895
+ "Please login with your Squirrly Email. If you forgot your password, click "
896
+ "%shere%s"
897
+ msgstr ""
898
+ "Ihre E-Mail Adresse ist bereits bei Squirrly.co registriert. Bitte loggen "
899
+ "Sie sich mit Ihrer Squirrly-ID ein. Falls Sie Ihr Passwort vergessen haben, "
900
+ "klicken Sie %shier%s"
901
+
902
+ #: core/Blocklogin.php:58
903
+ msgid "Your email is not valid. Please enter a valid email"
904
+ msgstr ""
905
+
906
+ #: core/Blocklogin.php:61
907
+ msgid "We could not create your account. Please enter a valid email"
908
+ msgstr ""
909
+
910
+ #: core/Blocklogin.php:80 core/Blocklogin.php:135
911
+ #, php-format
912
+ msgid ""
913
+ "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
914
+ "webmaster) and request them to add %s to their IP whitelist."
915
+ msgstr ""
916
+
917
+ # @ squirrly-seo
918
+ #: core/Blocklogin.php:84
919
+ #, fuzzy
920
+ #| msgid ""
921
+ #| "Could not send your informations to squirrly. Please register %smanually"
922
+ #| "%s."
923
+ msgid "Could not send your information to Squirrly. Please try again."
924
+ msgstr ""
925
+ "Konnte Ihre Informationen nicht zu Squirrly senden. Bitte registrieren "
926
+ "%smanually%s."
927
+
928
+ # @ squirrly-seo
929
+ #: core/Blocklogin.php:109
930
+ msgid "Wrong email or password!"
931
+ msgstr "Benutzername oder Passwort falsch!"
932
+
933
+ # @ squirrly-seo
934
+ #: core/Blocklogin.php:112
935
+ #, fuzzy
936
+ #| msgid "You can use this account only for the URL you registered first!"
937
+ msgid "You can only use this account for the URL you registered first!"
938
+ msgstr ""
939
+ "Dieses Konto können Sie nur für die URL benutzen, die Sie zuerst registriert "
940
+ "haben!"
941
+
942
+ # @ squirrly-seo
943
+ #: core/Blocklogin.php:115
944
+ #, fuzzy
945
+ #| msgid "An error occured."
946
+ msgid "An error occured"
947
+ msgstr "Ein Fehler ist aufgetreten."
948
+
949
+ # @ squirrly-seo
950
+ #: core/Blocklogin.php:140
951
+ msgid "Both fields are required."
952
+ msgstr "Beide Felder sind Pflichtfelder."
953
+
954
+ #: models/Assistant.php:49 view/Blocks/SEOIssues.php:42
955
+ msgid "Task Details"
956
+ msgstr ""
957
+
958
+ #: models/Assistant.php:56
959
+ msgid "active task"
960
+ msgstr ""
961
+
962
+ #: models/Assistant.php:77
963
+ msgid "Complete Research Tasks"
964
+ msgstr ""
965
+
966
+ #: models/Assistant.php:78
967
+ #, php-format
968
+ msgid ""
969
+ "Go to the Research section of Squirrly SEO. %s Look to the right of the "
970
+ "screen and turn those RED bullets from Red to Green. Click on each element "
971
+ "and you'll find out what you need to do to complete the task and turn it "
972
+ "Green."
973
+ msgstr ""
974
+
975
+ #: models/Assistant.php:82
976
+ msgid "Complete Live Assistant Tasks"
977
+ msgstr ""
978
+
979
+ #: models/Assistant.php:83
980
+ #, php-format
981
+ msgid ""
982
+ "Go to the Live Assistant section of Squirrly SEO. %s Look to the right of "
983
+ "the screen and turn those RED bullets from Red to Green. Click on each "
984
+ "element and you'll find out what you need to do to complete the task and "
985
+ "turn it Green."
986
+ msgstr ""
987
+
988
+ #: models/Assistant.php:87
989
+ msgid "Complete SEO Settings Tasks"
990
+ msgstr ""
991
+
992
+ #: models/Assistant.php:88
993
+ #, php-format
994
+ msgid ""
995
+ "Go to the SEO Settings section of Squirrly SEO. Click on the METAs section. "
996
+ "You'll see tasks appearing at the right of the screen. %s Look to the right "
997
+ "of the screen and turn those RED bullets from Red to Green. Click on each "
998
+ "element and you'll find out what you need to do to complete the task and "
999
+ "turn it Green."
1000
+ msgstr ""
1001
+
1002
+ #: models/Assistant.php:97
1003
+ msgid "Complete SEO Audit Tasks"
1004
+ msgstr ""
1005
+
1006
+ #: models/Assistant.php:98
1007
+ #, php-format
1008
+ msgid ""
1009
+ "Go to the SEO Audit section of Squirrly SEO.%sLook to the right of the "
1010
+ "screen and turn those RED bullets from Red to Green. Click on each element "
1011
+ "and you'll find out what you need to do to complete the task and turn it "
1012
+ "Green."
1013
+ msgstr ""
1014
+
1015
+ #: models/Assistant.php:102
1016
+ msgid "Complete Ranking Tasks"
1017
+ msgstr ""
1018
+
1019
+ #: models/Assistant.php:103
1020
+ #, php-format
1021
+ msgid ""
1022
+ "Go to the Ranking section of Squirrly SEO. %sLook to the right of the screen "
1023
+ "and turn those RED bullets from Red to Green. Click on each element and "
1024
+ "you'll find out what you need to do to complete the task and turn it Green."
1025
+ msgstr ""
1026
+
1027
+ # @ squirrly-seo
1028
+ #: models/Assistant.php:109 view/Blocks/Jorney.php:30
1029
+ #: view/Blocks/KRHistory.php:43 view/Research/History.php:55
1030
+ #, fuzzy
1031
+ #| msgid "Squirrly Keyword Research"
1032
+ msgid "Do Keyword Research"
1033
+ msgstr "Squirrly Erweiterte Suche!"
1034
+
1035
+ #: models/Assistant.php:110
1036
+ #, php-format
1037
+ msgid ""
1038
+ "Use Research - Find Keywords to perform your very first keyword research for "
1039
+ "this website using Squirrly SEO. %s It will guide through the 3 important "
1040
+ "steps of performing a research. %s Just follow the steps."
1041
+ msgstr ""
1042
+
1043
+ #: models/Assistant.php:114
1044
+ msgid "Add Keywords in Briefcase"
1045
+ msgstr ""
1046
+
1047
+ #: models/Assistant.php:115
1048
+ #, php-format
1049
+ msgid ""
1050
+ "Use the Briefcase feature to organize and manage your portfolio of keywords. "
1051
+ "%s You'll need to know and document the keywords that you'll be using "
1052
+ "throughout your WordPress site. %s This will help you keep a clear SEO "
1053
+ "Strategy or it can help you form a SEO Strategy. It will also help you focus "
1054
+ "and you'll get to see when you're spreading yourself too thin. %s Add your "
1055
+ "first keywords (that you've researched using the Keyword Research tool) to "
1056
+ "Briefcase. Only add keywords that you will want to work on at some point in "
1057
+ "the future and which are on-point with your strategy."
1058
+ msgstr ""
1059
+
1060
+ #: models/Assistant.php:119
1061
+ #, fuzzy
1062
+ #| msgid "Optimize for Keyword"
1063
+ msgid "Create Labels for Keywords"
1064
+ msgstr "Schlüsselwort optimieren"
1065
+
1066
+ #: models/Assistant.php:120
1067
+ #, php-format
1068
+ msgid ""
1069
+ "Organize your keywords by using Labels for the keywords you've stored in "
1070
+ "Briefcase. %s There are many ways to use this: from Customer Journey labels, "
1071
+ "to direct or indirect labels, to core keywords or secondary keywords ... and "
1072
+ "so on. You can get super creative with this. %s We have a very important "
1073
+ "blog post you can read for this http://fourhourseo.com/pro-course-6-how-to-"
1074
+ "organize-and-manage-your-keyword-portfolio/ %s Just add your first label to "
1075
+ "complete this task."
1076
+ msgstr ""
1077
+
1078
+ #: models/Assistant.php:124
1079
+ msgid "Add Keywords to Labels"
1080
+ msgstr ""
1081
+
1082
+ #: models/Assistant.php:125
1083
+ #, php-format
1084
+ msgid ""
1085
+ "Now that you've created your first label, you should label one of your "
1086
+ "stored keywords using that label. %s Go to Briefcase. Move your mouse over "
1087
+ "the row containing your desired keyword. The 3 vertical dots button appears. "
1088
+ "%s Move your mouse over it and a menu will show. Click on Assign Label. %s "
1089
+ "Then, assign a label to your keyword in order to complete this task."
1090
+ msgstr ""
1091
+
1092
+ #: models/Assistant.php:129
1093
+ msgid "Send Keywords to Rank Checker"
1094
+ msgstr ""
1095
+
1096
+ #: models/Assistant.php:130
1097
+ #, php-format
1098
+ msgid ""
1099
+ "Now that you (hopefully) have keywords added to your Briefcase, go look at "
1100
+ "one of your keywords. Move the mouse over the row with your desired keyword. "
1101
+ "%s You will see a button with 3 vertical dots appear to the right of the "
1102
+ "row. %s Get your mouse cursor over that button. A menu shows. Click on Send "
1103
+ "to Rank Checker. %s That's it. Now Squirrly SEO's rank checker feature will "
1104
+ "start tracking your position in Google for that keyword that is part of your "
1105
+ "SEO strategy."
1106
+ msgstr ""
1107
+
1108
+ #: models/Assistant.php:136
1109
+ msgid "Optimize Using Live Assistant"
1110
+ msgstr ""
1111
+
1112
+ #: models/Assistant.php:137
1113
+ #, php-format
1114
+ msgid ""
1115
+ "Optimize your first Page or Article using the SEO Live Assistant (SLA) "
1116
+ "feature from Squirrly SEO. %s You can either Edit an existing post or create "
1117
+ "a new post. (You have your Live Assistant where you have your WP "
1118
+ "Editor)%sThe SEO Live Assistant is like having a SEO Consultant near you, "
1119
+ "whispering in your ear exactly what you have to do to get a 100% optimized "
1120
+ "article or page.%sYou can try the DEMO first, by clicking on the Demo Post "
1121
+ "button. It's safe to break anything in the SEO of that page, because it "
1122
+ "never gets indexed by Google, since it's a DEMO. It's an easy way to learn "
1123
+ "your way around it."
1124
+ msgstr ""
1125
+
1126
+ #: models/Assistant.php:143
1127
+ msgid "Activate METAs"
1128
+ msgstr ""
1129
+
1130
+ #: models/Assistant.php:144
1131
+ #, php-format
1132
+ msgid ""
1133
+ "Activate the META settings from the Squirrly SEO Plugin. %s You can import "
1134
+ "ALL meta settings you've made with other plugins in WordPress into your "
1135
+ "Squirrly SEO Plugin. That way everything will be kept 100%% intact, without "
1136
+ "any head-aches. %s To complete this task you need to activate: %s - Optimize "
1137
+ "the Titles%s- Optimize Descriptions %s - Add Canonical META Link %s Make "
1138
+ "sure you click on SAVE settings after you switch anything on or off."
1139
+ msgstr ""
1140
+
1141
+ #: models/Assistant.php:148 view/Blocks/Snippet.php:385
1142
+ #: view/SeoSettings/Jsonld.php:21
1143
+ msgid "Activate JSON-LD"
1144
+ msgstr ""
1145
+
1146
+ #: models/Assistant.php:149
1147
+ #, php-format
1148
+ msgid ""
1149
+ "JSON-LD Structured Data needs to be activated. %s The Duplicate Removal "
1150
+ "feature of Squirrly SEO will make sure that if you have more than one JSON-"
1151
+ "LD definition inside the source code of any URL, the definition created by "
1152
+ "Squirrly SEO will be the only one that remains. %s Make sure you setup all "
1153
+ "the information about your Organization or your Personal Brand here. %s To "
1154
+ "finish all the JSON-LD related setup, also visit the Social Media section of "
1155
+ "our Settings page and write in your social media profiles for this site. %s "
1156
+ "Then, at URL-level you will be able to add custom JSON-LD if you're an "
1157
+ "advanced user."
1158
+ msgstr ""
1159
+
1160
+ #: models/Assistant.php:153 view/Blocks/Snippet.php:488
1161
+ #: view/SeoSettings/Automation.php:317 view/SeoSettings/Social.php:45
1162
+ msgid "Activate Open Graph"
1163
+ msgstr ""
1164
+
1165
+ #: models/Assistant.php:154
1166
+ #, php-format
1167
+ msgid ""
1168
+ "Go to the Social Media section.%sActivate Open Graph. (switch the toggle to "
1169
+ "ON) %s The Open Graph will help you control the way your posts look when "
1170
+ "people share your URLs to social media sites like Facebook and LinkedIN. %s "
1171
+ "It will also make your social media posts look great and gain you clicks to "
1172
+ "your site."
1173
+ msgstr ""
1174
+
1175
+ #: models/Assistant.php:158 view/Blocks/Snippet.php:742
1176
+ #: view/SeoSettings/Automation.php:344 view/SeoSettings/Social.php:268
1177
+ msgid "Activate Twitter Card"
1178
+ msgstr ""
1179
+
1180
+ #: models/Assistant.php:159
1181
+ #, php-format
1182
+ msgid ""
1183
+ "Go to the Social Media section. %s - Activate Twitter Card. (switch the "
1184
+ "toggle to ON) %s - Add your Twitter profile URL %s The Twitter Card will "
1185
+ "help you control the way your posts look when people share your URLs on "
1186
+ "Twitter. %s It will also make your social media posts look great and gain "
1187
+ "you clicks to your site."
1188
+ msgstr ""
1189
+
1190
+ # @ squirrly-seo
1191
+ #: models/Assistant.php:163
1192
+ #, fuzzy
1193
+ #| msgid "Google %sAnalytics ID%s`:"
1194
+ msgid "Activate Google Analytics"
1195
+ msgstr "Google %sAnalytics ID%s`:"
1196
+
1197
+ #: models/Assistant.php:164
1198
+ #, php-format
1199
+ msgid ""
1200
+ "Go to the Tracking Tools section. %s Add your Google Analytics ID to "
1201
+ "complete this setting. (find it in the tracking code that Google Analytics "
1202
+ "tells you to place on your site) %s Squirrly SEO will then add "
1203
+ "(automatically) your Google Analytics tracking code (in the format you "
1204
+ "desire) to every page of your site (according to rules you can modify in the "
1205
+ "Automation section)."
1206
+ msgstr ""
1207
+
1208
+ #: models/Assistant.php:168
1209
+ msgid "Activate Facebook Pixel"
1210
+ msgstr ""
1211
+
1212
+ #: models/Assistant.php:169
1213
+ #, php-format
1214
+ msgid ""
1215
+ "Go to the Tracking Tools section of the settings and add your Facebook Pixel "
1216
+ "ID. %s Make sure you click Save Settings after you do that. %s Do this, and "
1217
+ "Facebook will start tracking user actions on your site, so you can later "
1218
+ "retarget them with ads."
1219
+ msgstr ""
1220
+
1221
+ # @ squirrly-seo
1222
+ #: models/Assistant.php:173
1223
+ #, fuzzy
1224
+ #| msgid "Change the Website Icon"
1225
+ msgid "Connect the Webmasters"
1226
+ msgstr "Ändern Sie das Website-Symbol"
1227
+
1228
+ #: models/Assistant.php:174
1229
+ #, php-format
1230
+ msgid ""
1231
+ "Go to the Connection section of the Settings. %s This section makes it super "
1232
+ "easy to integrate different (important) 3rd party services with your "
1233
+ "WordPress. %s Alexa META Code is 100%% optional, but the rest are very "
1234
+ "important to add. %s Enter your Pinterest code, especially if you plan to "
1235
+ "expand your presence on Pinterest. It will activate Rich Pins, which will "
1236
+ "completely boost your sales and visibility for any product or post that has "
1237
+ "great images."
1238
+ msgstr ""
1239
+
1240
+ #: models/Assistant.php:178
1241
+ msgid "Activate Sitemap XML"
1242
+ msgstr ""
1243
+
1244
+ #: models/Assistant.php:179
1245
+ #, php-format
1246
+ msgid ""
1247
+ "Activate your Sitemap XML setting. Squirrly SEO will then generate your "
1248
+ "sitemap, according to different items you can set up. %s Use this to tell "
1249
+ "Google how often you bring new content to your site. %s Also, choose for "
1250
+ "which types of URLs you'll want to have sitemaps. It depends on your "
1251
+ "strategy. Leave the defaults if you're uncertain. Squirrly SEO chooses the "
1252
+ "best defaults for you. %s Make sure you include Images and Videos in the "
1253
+ "sitemap. It has been identified as a ranking factor, so it's good to have "
1254
+ "that."
1255
+ msgstr ""
1256
+
1257
+ #: models/Assistant.php:183
1258
+ msgid "Activate Meta Automation"
1259
+ msgstr ""
1260
+
1261
+ #: models/Assistant.php:184
1262
+ #, php-format
1263
+ msgid ""
1264
+ "The Automation Features of Squirrly SEO are extremely powerful. %s They help "
1265
+ "Non-SEO experts avoid many mistakes they would normally make. %s They help "
1266
+ "experts control any WordPress site at a level that has never been possible "
1267
+ "before. (just make sure you click to see the Advanced settings). %s You'll "
1268
+ "be able to configure automations according to any post type. %s Turn the "
1269
+ "toggle to ON for : Activate Patterns to complete this task."
1270
+ msgstr ""
1271
+
1272
+ # @ squirrly-seo
1273
+ #: models/Assistant.php:192 models/focuspages/Accuracy.php:40
1274
+ #: models/focuspages/Traffic.php:85 models/focuspages/Traffic.php:90
1275
+ #, fuzzy
1276
+ #| msgid "Google %sAnalytics ID%s`:"
1277
+ msgid "Connect Google Analytics"
1278
+ msgstr "Google %sAnalytics ID%s`:"
1279
+
1280
+ #: models/Assistant.php:193
1281
+ #, php-format
1282
+ msgid ""
1283
+ "Integrate Google Analytics with Squirrly SEO.%sFeatures like Focus Pages and "
1284
+ "the Audit need this integration, in order to work at full potential.%sGoogle "
1285
+ "Analytics is free and everyone uses it. The Audit and the Focus Pages will "
1286
+ "interpret the right data from Google Analytics for you.%sYou'll feel like an "
1287
+ "Analytics expert, without having to know a single thing about Google "
1288
+ "Analytics."
1289
+ msgstr ""
1290
+
1291
+ #: models/Assistant.php:197 models/Assistant.php:219
1292
+ msgid "Connect Google Search Console"
1293
+ msgstr ""
1294
+
1295
+ #: models/Assistant.php:198
1296
+ #, php-format
1297
+ msgid ""
1298
+ "Integrate your WordPress with Google Search Console, using Squirrly SEO."
1299
+ "%sThis integration is more than just setting the meta code for it. It will "
1300
+ "connect your WP to the API of Google's service and enable info such as "
1301
+ "Impressions, Clicks, Average Ranking Position to be collected.%sMore "
1302
+ "importantly, you'll be able to update all the info that Google has about "
1303
+ "your site, directly from your Squirrly SEO Plugin."
1304
+ msgstr ""
1305
+
1306
+ #: models/Assistant.php:202
1307
+ msgid "Set the Audit Email"
1308
+ msgstr ""
1309
+
1310
+ #: models/Assistant.php:203
1311
+ #, php-format
1312
+ msgid ""
1313
+ "You can customize the email to which we send the Audit reports.%sIt can be "
1314
+ "your personal email, your work email or the email of one of your "
1315
+ "collaborators.%sIt's a best practice to have the Audit sent to the person "
1316
+ "that will take charge and start correcting the problems of the site, in "
1317
+ "order to increase the score."
1318
+ msgstr ""
1319
+
1320
+ #: models/Assistant.php:207
1321
+ msgid "Get your score over 60"
1322
+ msgstr ""
1323
+
1324
+ #: models/Assistant.php:208
1325
+ #, php-format
1326
+ msgid ""
1327
+ "True website marketing performance happens after your Audit score gets to "
1328
+ "over 84.%sHowever, you need to start with smaller steps. For now, focus on "
1329
+ "getting a score of over 60.%sLook at the progress charts weekly and make "
1330
+ "sure you check out the Tasks section, which tells you exactly what you need "
1331
+ "to do in order to increase the score.%sWe've been testing these scores since "
1332
+ "2013 on hundreds of thousands of websites and it's always the same: true "
1333
+ "performance happens at over 84. That's why you need to start working on this."
1334
+ msgstr ""
1335
+
1336
+ #: models/Assistant.php:214
1337
+ msgid "Track your first 3 Keywords"
1338
+ msgstr ""
1339
+
1340
+ #: models/Assistant.php:215
1341
+ #, php-format
1342
+ msgid ""
1343
+ "SERP Checker = Search Engine Result Pages Checker. %s It checks your "
1344
+ "position on the Google Search Engine for your keywords. Also (on the "
1345
+ "Business Plan) it shows you the evolution in time for your sites' URLs for "
1346
+ "these keywords. %s Tell Squirrly SEO the first three keywords you want it to "
1347
+ "check for you, to see if you're ranking for them. %s Because you should work "
1348
+ "according to a solid SEO Strategy, you'll only be able to add keywords or "
1349
+ "remove keywords in the Ranking section from your Briefcase. %s Briefcase is "
1350
+ "your keyword organizer / manager. Find it in the Research section. Go with "
1351
+ "the mouse cursor over a keyword from briefcase -> see the 3 vertical dots -> "
1352
+ "select Send to Rank Checker"
1353
+ msgstr ""
1354
+
1355
+ #: models/Assistant.php:220
1356
+ #, php-format
1357
+ msgid ""
1358
+ "Connect Google Search Console. %s You can do that from SEO Audit -> "
1359
+ "Settings. %s It will bring information regarding Impressions and Clicks. %s "
1360
+ "Note: if you're on the free plan or the PRO plan then the Ranking Position "
1361
+ "will be displayed according to data from Google Search Console, which does "
1362
+ "not present the actual position you are on. It shows an average position "
1363
+ "that your site was lately found on. It can give you values such as 4.3 "
1364
+ "because of this. Even though your page today could be on position 7. %s The "
1365
+ "Business Plan is the only one that can give you the exact position because "
1366
+ "it uses Squirrly's private cloud servers that are working around the clock "
1367
+ "to gather the accurate, on-time and objective information about your "
1368
+ "rankings."
1369
+ msgstr ""
1370
+
1371
+ #: models/Assistant.php:224
1372
+ msgid "Get 1 Keyword to the first page of Google"
1373
+ msgstr ""
1374
+
1375
+ #: models/Assistant.php:225
1376
+ #, php-format
1377
+ msgid ""
1378
+ "Start with a small task. Get 1 keyword to the first page of Google. %s "
1379
+ "Select a good keyword (using our Keyword Research tool). %s Create an "
1380
+ "amazing page for it (if you don't already have one). %s Add the page to "
1381
+ "Focus Pages in Squirrly SEO. %s Turn the RED lights to Green in Focus Pages "
1382
+ "and see your rankings increase over time. %s If you continue working on "
1383
+ "those tasks and turning elements to green you'll complete this task."
1384
+ msgstr ""
1385
+
1386
+ #: models/Assistant.php:277
1387
+ msgid "You chose to ignore this task. Click to activate it."
1388
+ msgstr ""
1389
+
1390
+ #: models/BulkSeo.php:17
1391
+ msgid "METAs"
1392
+ msgstr ""
1393
+
1394
+ #: models/BulkSeo.php:18 view/Blocks/Snippet.php:98
1395
+ msgid "Open Graph"
1396
+ msgstr ""
1397
+
1398
+ # @ squirrly-seo
1399
+ #: models/BulkSeo.php:19 view/Blocks/Snippet.php:101
1400
+ #, fuzzy
1401
+ #| msgid "Twitter"
1402
+ msgid "Twitter Card"
1403
+ msgstr "Twitter"
1404
+
1405
+ #: models/BulkSeo.php:20 models/FocusPages.php:20 view/Blocks/Snippet.php:110
1406
+ msgid "Visibility"
1407
+ msgstr ""
1408
+
1409
+ # @ squirrly-seo
1410
+ #: models/CheckSeo.php:13
1411
+ #, fuzzy
1412
+ #| msgid "Could not send the email..."
1413
+ msgid "Could not verify the frontend"
1414
+ msgstr "Konnte E-Mail nicht senden ..."
1415
+
1416
+ #: models/CheckSeo.php:14
1417
+ msgid ""
1418
+ "To be able to check your website, you need to allow local crawling in your ."
1419
+ "htaccess file"
1420
+ msgstr ""
1421
+
1422
+ #: models/CheckSeo.php:15
1423
+ #, php-format
1424
+ msgid ""
1425
+ "Run the test again. If you get the same error, check if you have added 'Deny "
1426
+ "%s' into your config file (e.g. htaccess)"
1427
+ msgstr ""
1428
+
1429
+ #: models/CheckSeo.php:19
1430
+ msgid "Squirrly SEO Title is not active for your website"
1431
+ msgstr ""
1432
+
1433
+ #: models/CheckSeo.php:20
1434
+ msgid ""
1435
+ "It's important to activate Squirrly SEO Title for your website if you don't "
1436
+ "use other SEO plugins"
1437
+ msgstr ""
1438
+
1439
+ #: models/CheckSeo.php:21
1440
+ #, php-format
1441
+ msgid "Go to %sSquirrly > SEO Settings > Metas%s and switch on Meta Title"
1442
+ msgstr ""
1443
+
1444
+ #: models/CheckSeo.php:25
1445
+ msgid "You have duplicate Open Graph Meta tags"
1446
+ msgstr ""
1447
+
1448
+ #: models/CheckSeo.php:26
1449
+ #, php-format
1450
+ msgid ""
1451
+ "If you have duplicate OG tags, it means that some crawlers like %sFacebook "
1452
+ "Open Graph Object Debugger%s will raise an error and may not proceed with "
1453
+ "your request until you fix it."
1454
+ msgstr ""
1455
+
1456
+ #: models/CheckSeo.php:27 models/CheckSeo.php:33 models/CheckSeo.php:45
1457
+ #: models/CheckSeo.php:51
1458
+ msgid ""
1459
+ "If you are using multiple SEO plugins, then try to remove some of them and "
1460
+ "check again."
1461
+ msgstr ""
1462
+
1463
+ #: models/CheckSeo.php:31
1464
+ msgid "You have duplicate Twitter Card tags"
1465
+ msgstr ""
1466
+
1467
+ #: models/CheckSeo.php:32
1468
+ #, php-format
1469
+ msgid ""
1470
+ "If you have duplicate Twitter Card tags, it means that some crawlers like "
1471
+ "%sTwitter Validator%s will raise an error and may not proceed with your "
1472
+ "request until you fix it."
1473
+ msgstr ""
1474
+
1475
+ #: models/CheckSeo.php:37
1476
+ msgid "The Title meta tag is missing in frontend"
1477
+ msgstr ""
1478
+
1479
+ #: models/CheckSeo.php:38
1480
+ msgid ""
1481
+ "If you don't have Title meta tag in your website, it means that your website "
1482
+ "is not going to perform well on search engines."
1483
+ msgstr ""
1484
+
1485
+ #: models/CheckSeo.php:39
1486
+ #, php-format
1487
+ msgid ""
1488
+ "Go to %sSquirrly > SEO Settings > Metas%s and switch on Meta Title. If it's "
1489
+ "already switched on, check if another plugin is stopping Squirrly from "
1490
+ "showing the Title meta."
1491
+ msgstr ""
1492
+
1493
+ #: models/CheckSeo.php:43
1494
+ msgid "You have duplicate Title meta tags"
1495
+ msgstr ""
1496
+
1497
+ #: models/CheckSeo.php:44 models/CheckSeo.php:50
1498
+ msgid ""
1499
+ "If you have duplicate meta tags, it means that some crawlers may raise an "
1500
+ "error or process wrong data from your website until you fix it."
1501
+ msgstr ""
1502
+
1503
+ #: models/CheckSeo.php:49
1504
+ msgid "You have duplicate Description meta tags"
1505
+ msgstr ""
1506
+
1507
+ #: models/CheckSeo.php:55
1508
+ msgid "Your website is not public"
1509
+ msgstr ""
1510
+
1511
+ #: models/CheckSeo.php:56 models/bulkseo/Visibility.php:104
1512
+ #, php-format
1513
+ msgid ""
1514
+ "You selected '%s' in Settings > Reading. It's important to uncheck that "
1515
+ "option."
1516
+ msgstr ""
1517
+
1518
+ # @ squirrly-seo
1519
+ #: models/CheckSeo.php:56 models/CheckSeo.php:57
1520
+ #: models/bulkseo/Visibility.php:104 view/Blocks/Snippet.php:1077
1521
+ #, fuzzy
1522
+ #| msgid "You're blocking google from indexing your site!"
1523
+ msgid "Discourage search engines from indexing this site"
1524
+ msgstr "Sie blockieren Google zum Indizieren Ihrer Website!"
1525
+
1526
+ #: models/CheckSeo.php:57
1527
+ #, php-format
1528
+ msgid "Go to %sGeneral > Reading%s and uncheck %s."
1529
+ msgstr ""
1530
+
1531
+ #: models/CheckSeo.php:61
1532
+ msgid "Permalink structure is not good"
1533
+ msgstr ""
1534
+
1535
+ #: models/CheckSeo.php:62
1536
+ msgid ""
1537
+ "Your URLs (the links from your site) should be super easy to read. This "
1538
+ "makes your site Human-friendly as well."
1539
+ msgstr ""
1540
+
1541
+ #: models/CheckSeo.php:63
1542
+ #, php-format
1543
+ msgid ""
1544
+ "Make your LINKS SEO-Friendly. %s Settings > Permalinks %s That is where "
1545
+ "WordPress allows you to change the permalink structure."
1546
+ msgstr ""
1547
+
1548
+ #: models/CheckSeo.php:67
1549
+ msgid "The default Tagline is still on"
1550
+ msgstr ""
1551
+
1552
+ #: models/CheckSeo.php:68
1553
+ msgid ""
1554
+ "Most of the pages will use the WordPress Tagline in Title and Description. "
1555
+ "Squirrly SEO uses the Tagline on {{sitedesc}} pattern for automation."
1556
+ msgstr ""
1557
+
1558
+ #: models/CheckSeo.php:69
1559
+ #, php-format
1560
+ msgid "Change the Tagline with your Brand or the Store name from %s"
1561
+ msgstr ""
1562
+
1563
+ #: models/CheckSeo.php:69 models/Menu.php:229 models/Menu.php:263
1564
+ #: models/Menu.php:283
1565
+ msgid "Settings"
1566
+ msgstr ""
1567
+
1568
+ #: models/CheckSeo.php:69
1569
+ msgid "General"
1570
+ msgstr ""
1571
+
1572
+ #: models/CheckSeo.php:73
1573
+ msgid "AMP site detected and Squirrly AMP is off"
1574
+ msgstr ""
1575
+
1576
+ #: models/CheckSeo.php:74
1577
+ msgid ""
1578
+ "If this website is an AMP website you need to make sure that you activate "
1579
+ "Squirrly AMP Tracking for it. Squirrly will load Google Analytics and "
1580
+ "Facebook Pixel for AMP and avoid AMP script errors."
1581
+ msgstr ""
1582
+
1583
+ #: models/CheckSeo.php:75
1584
+ #, php-format
1585
+ msgid "Activate AMP tracking in %s Squirrly > SEO Settings > Tracking Tools%s "
1586
+ msgstr ""
1587
+
1588
+ # @ squirrly-seo
1589
+ #: models/CheckSeo.php:143
1590
+ #, fuzzy
1591
+ #| msgid "Could not send the email..."
1592
+ msgid "Could not verify the frontend."
1593
+ msgstr "Konnte E-Mail nicht senden ..."
1594
+
1595
+ #: models/CheckSeo.php:427
1596
+ msgid "Just another WordPress site"
1597
+ msgstr ""
1598
+
1599
+ #: models/FocusPages.php:21 models/bulkseo/Metas.php:135
1600
+ #: models/focuspages/Clicks.php:59 models/focuspages/Content.php:76
1601
+ #: models/focuspages/Ctr.php:59 models/focuspages/Image.php:72
1602
+ #: models/focuspages/Impressions.php:59 models/focuspages/Keyword.php:79
1603
+ #: models/focuspages/Keyword.php:82 models/focuspages/Snippet.php:124
1604
+ #: models/focuspages/Strategy.php:88 view/Blocks/KRFound.php:15
1605
+ #: view/Blocks/KRHistory.php:15 view/Ranking/Gscsync.php:24
1606
+ #: view/Ranking/Rankings.php:122 view/Ranking/Rankings.php:151
1607
+ #: view/Research/Briefcase.php:66 view/Research/Briefcase.php:104
1608
+ #: view/Research/History.php:25 view/Research/HistoryDetails.php:7
1609
+ #: view/Research/Research.php:158 view/Research/Suggested.php:23
1610
+ msgid "Keyword"
1611
+ msgstr ""
1612
+
1613
+ #: models/FocusPages.php:22
1614
+ msgid "Strategy"
1615
+ msgstr ""
1616
+
1617
+ # @ squirrly-seo
1618
+ #: models/FocusPages.php:23
1619
+ #, fuzzy
1620
+ #| msgid "SEO Software"
1621
+ msgid "SEO Content"
1622
+ msgstr "SEO Software"
1623
+
1624
+ #: models/FocusPages.php:24
1625
+ msgid "Words / Page"
1626
+ msgstr ""
1627
+
1628
+ #: models/FocusPages.php:25
1629
+ msgid "Platform SEO"
1630
+ msgstr ""
1631
+
1632
+ #: models/FocusPages.php:26
1633
+ msgid "Snippet"
1634
+ msgstr ""
1635
+
1636
+ # @ squirrly-seo
1637
+ #: models/FocusPages.php:27
1638
+ #, fuzzy
1639
+ #| msgid "Images"
1640
+ msgid "SEO Image"
1641
+ msgstr "Bilder"
1642
+
1643
+ #: models/FocusPages.php:28
1644
+ msgid "Traffic Health"
1645
+ msgstr ""
1646
+
1647
+ #: models/FocusPages.php:29
1648
+ msgid "Platform Health"
1649
+ msgstr ""
1650
+
1651
+ #: models/FocusPages.php:30
1652
+ msgid "Page Authority"
1653
+ msgstr ""
1654
+
1655
+ #: models/FocusPages.php:31
1656
+ msgid "Social Signals"
1657
+ msgstr ""
1658
+
1659
+ #: models/FocusPages.php:32
1660
+ msgid "Backlinks"
1661
+ msgstr ""
1662
+
1663
+ #: models/FocusPages.php:33
1664
+ msgid "Inner Links"
1665
+ msgstr ""
1666
+
1667
+ #: models/FocusPages.php:34
1668
+ msgid "Outbound Links"
1669
+ msgstr ""
1670
+
1671
+ #: models/FocusPages.php:35
1672
+ msgid "Accuracy"
1673
+ msgstr ""
1674
+
1675
+ #: models/FocusPages.php:36 view/Ranking/Gscsync.php:26
1676
+ msgid "CTR"
1677
+ msgstr ""
1678
+
1679
+ #: models/FocusPages.php:37 view/Ranking/Rankings.php:165
1680
+ msgid "Impressions"
1681
+ msgstr ""
1682
+
1683
+ #: models/FocusPages.php:38 view/Ranking/Gscsync.php:25
1684
+ #: view/Ranking/Rankings.php:171
1685
+ msgid "Clicks"
1686
+ msgstr ""
1687
+
1688
+ #: models/FocusPages.php:102
1689
+ msgid "Audit in progress"
1690
+ msgstr ""
1691
+
1692
+ #: models/Ico.php:43
1693
+ msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
1694
+ msgstr ""
1695
+
1696
+ # @ squirrly-seo
1697
+ #: models/Ico.php:49
1698
+ msgid "GD error: The GD library must be installed on your server."
1699
+ msgstr "GD Fehler: Die GD-Bibliothek muss auf dem Server installiert werden."
1700
+
1701
+ # @ squirrly-seo
1702
+ #: models/Ico.php:55
1703
+ msgid "Delete error: Could not delete the old favicon."
1704
+ msgstr "Lösch Fehler: Konnte das alte Favicon nicht löschen."
1705
+
1706
+ # @ squirrly-seo
1707
+ #: models/Ico.php:62
1708
+ msgid "Upload error: Could not upload the favicon."
1709
+ msgstr "Upload Fehler: Konnte das Favicon nicht hochladen."
1710
+
1711
+ # @ squirrly-seo
1712
+ #: models/Ico.php:68
1713
+ msgid "Permission error: Could not change the favicon permissions."
1714
+ msgstr "Permission Fehler: Konnte Favicon-Berechtigungen nicht ändern."
1715
+
1716
+ # @ squirrly-seo
1717
+ #: models/Ico.php:89
1718
+ msgid ""
1719
+ "ICO Error: Could not create the ICO from file. Try with another file type."
1720
+ msgstr ""
1721
+ "ICO Fehler: konnte ICO aus der Datei nicht erstellen. Versuchen Sie es mit "
1722
+ "einem anderen Dateityp."
1723
+
1724
+ # @ squirrly-seo
1725
+ #: models/Ico.php:106
1726
+ msgid "The favicon has been updated."
1727
+ msgstr "Das Favicon wurde aktualisiert."
1728
+
1729
+ #: models/Menu.php:123 models/Menu.php:361
1730
+ msgid "First Step"
1731
+ msgstr ""
1732
+
1733
+ #: models/Menu.php:124
1734
+ msgid " Dashboard"
1735
+ msgstr ""
1736
+
1737
+ # @ squirrly-seo
1738
+ #: models/Menu.php:131 view/Research/Briefcase.php:69
1739
+ #, fuzzy
1740
+ #| msgid "Do a research"
1741
+ msgid "Research"
1742
+ msgstr "Recherchieren"
1743
+
1744
+ # @ squirrly-seo
1745
+ #: models/Menu.php:132
1746
+ #, fuzzy
1747
+ #| msgid "Do a research"
1748
+ msgid " Research"
1749
+ msgstr "Recherchieren"
1750
+
1751
+ #: models/Menu.php:139
1752
+ msgid "Live Assistant"
1753
+ msgstr ""
1754
+
1755
+ #: models/Menu.php:140
1756
+ msgid " Live Assistant"
1757
+ msgstr ""
1758
+
1759
+ #: models/Menu.php:147
1760
+ msgid "SEO Settings"
1761
+ msgstr ""
1762
+
1763
+ #: models/Menu.php:148
1764
+ msgid " SEO Settings"
1765
+ msgstr ""
1766
+
1767
+ #: models/Menu.php:155 models/Menu.php:237 view/Blocks/FocusPages.php:6
1768
+ #: view/FocusPages/Pagelist.php:13
1769
+ msgid "Focus Pages"
1770
+ msgstr ""
1771
+
1772
+ #: models/Menu.php:156
1773
+ msgid " Focus Pages"
1774
+ msgstr ""
1775
+
1776
+ #: models/Menu.php:163 view/Blocks/Audits.php:6
1777
+ msgid "SEO Audit"
1778
+ msgstr ""
1779
+
1780
+ #: models/Menu.php:164
1781
+ msgid " SEO Audit"
1782
+ msgstr ""
1783
+
1784
+ #: models/Menu.php:171 models/Menu.php:271
1785
+ msgid "Rankings"
1786
+ msgstr ""
1787
+
1788
+ #: models/Menu.php:172
1789
+ msgid " Rankings"
1790
+ msgstr ""
1791
+
1792
+ # @ squirrly-seo
1793
+ #: models/Menu.php:191
1794
+ #, fuzzy
1795
+ #| msgid "Keywords:"
1796
+ msgid "Find Keywords"
1797
+ msgstr "Schlüsselwörter:"
1798
+
1799
+ # @ squirrly-seo
1800
+ #: models/Menu.php:192
1801
+ #, fuzzy
1802
+ #| msgid "Do a research"
1803
+ msgid "do a keyword research"
1804
+ msgstr "Recherchieren"
1805
+
1806
+ #: models/Menu.php:197 view/Research/Briefcase.php:14
1807
+ msgid "Briefcase"
1808
+ msgstr ""
1809
+
1810
+ # @ squirrly-seo
1811
+ #: models/Menu.php:198
1812
+ #, fuzzy
1813
+ #| msgid "Use this keyword"
1814
+ msgid "save the best Keywords"
1815
+ msgstr "Dieses Schlüsselwort verwenden"
1816
+
1817
+ #: models/Menu.php:203 view/Research/Briefcase.php:24
1818
+ msgid "Labels"
1819
+ msgstr ""
1820
+
1821
+ # @ squirrly-seo
1822
+ #: models/Menu.php:204
1823
+ #, fuzzy
1824
+ #| msgid "Tips: 2-4 keywords"
1825
+ msgid "group keywords"
1826
+ msgstr "Tipp: Länge 2-4 Schlüsselwörter"
1827
+
1828
+ #: models/Menu.php:209 view/Research/Suggested.php:12
1829
+ msgid "Suggested"
1830
+ msgstr ""
1831
+
1832
+ # @ squirrly-seo
1833
+ #: models/Menu.php:210
1834
+ #, fuzzy
1835
+ #| msgid "Enter a keyword"
1836
+ msgid "better keywords found"
1837
+ msgstr "Ein Schlüsselwort eingeben"
1838
+
1839
+ #: models/Menu.php:215 view/Research/History.php:14
1840
+ msgid "History"
1841
+ msgstr ""
1842
+
1843
+ #: models/Menu.php:216
1844
+ msgid "keyword research history"
1845
+ msgstr ""
1846
+
1847
+ #: models/Menu.php:223
1848
+ msgid "Optimize Posts"
1849
+ msgstr ""
1850
+
1851
+ #: models/Menu.php:224
1852
+ msgid "use the Live Assistant"
1853
+ msgstr ""
1854
+
1855
+ #: models/Menu.php:230
1856
+ msgid "live assistant setup"
1857
+ msgstr ""
1858
+
1859
+ #: models/Menu.php:238
1860
+ msgid "all my focus pages"
1861
+ msgstr ""
1862
+
1863
+ #: models/Menu.php:249
1864
+ msgid "Add New Page"
1865
+ msgstr ""
1866
+
1867
+ #: models/Menu.php:250
1868
+ msgid "add page in focus pages"
1869
+ msgstr ""
1870
+
1871
+ #: models/Menu.php:257 view/Blocks/Toolbar.php:31
1872
+ msgid "Overview"
1873
+ msgstr ""
1874
+
1875
+ #: models/Menu.php:258
1876
+ msgid "See all the SEO audits"
1877
+ msgstr ""
1878
+
1879
+ # @ squirrly-seo
1880
+ #: models/Menu.php:264
1881
+ #, fuzzy
1882
+ #| msgid "Squirrly settings"
1883
+ msgid "Audit settings"
1884
+ msgstr "Squirrly Einstellungen"
1885
+
1886
+ #: models/Menu.php:272
1887
+ msgid "See Google ranking"
1888
+ msgstr ""
1889
+
1890
+ # @ squirrly-seo
1891
+ #: models/Menu.php:277
1892
+ #, fuzzy
1893
+ #| msgid "+ Add keyword"
1894
+ msgid "Add Keywords"
1895
+ msgstr "Fügen Sie ein anderes Schlüsselwort ein"
1896
+
1897
+ # @ squirrly-seo
1898
+ #: models/Menu.php:278
1899
+ #, fuzzy
1900
+ #| msgid "+ Add keyword"
1901
+ msgid "Add briefcase keywords"
1902
+ msgstr "Fügen Sie ein anderes Schlüsselwort ein"
1903
+
1904
+ # @ squirrly-seo
1905
+ #: models/Menu.php:284
1906
+ #, fuzzy
1907
+ #| msgid "Save settings"
1908
+ msgid "Ranking settings"
1909
+ msgstr "Einstellungen speichern"
1910
+
1911
+ #: models/Menu.php:293 view/SeoSettings/Bulkseo.php:18
1912
+ msgid "Bulk SEO"
1913
+ msgstr ""
1914
+
1915
+ #: models/Menu.php:294
1916
+ msgid "optimize all pages"
1917
+ msgstr ""
1918
+
1919
+ #: models/Menu.php:299 view/SeoSettings/Metas.php:17
1920
+ msgid "SEO Metas"
1921
+ msgstr ""
1922
+
1923
+ #: models/Menu.php:300
1924
+ msgid "required on-page metas"
1925
+ msgstr ""
1926
+
1927
+ #: models/Menu.php:305
1928
+ msgid "Json LD"
1929
+ msgstr ""
1930
+
1931
+ #: models/Menu.php:306
1932
+ msgid "google structured data"
1933
+ msgstr ""
1934
+
1935
+ #: models/Menu.php:311 view/SeoSettings/Social.php:16
1936
+ msgid "Social Media"
1937
+ msgstr ""
1938
+
1939
+ #: models/Menu.php:312
1940
+ msgid "social share options"
1941
+ msgstr ""
1942
+
1943
+ # @ squirrly-seo
1944
+ #: models/Menu.php:317
1945
+ #, fuzzy
1946
+ #| msgid "automatically"
1947
+ msgid "Automation"
1948
+ msgstr "automatisch"
1949
+
1950
+ #: models/Menu.php:318
1951
+ msgid "patterns & automation"
1952
+ msgstr ""
1953
+
1954
+ #: models/Menu.php:323 view/SeoSettings/Tracking.php:16
1955
+ msgid "Tracking Tools"
1956
+ msgstr ""
1957
+
1958
+ #: models/Menu.php:324
1959
+ msgid "google analytics, pixel, etc."
1960
+ msgstr ""
1961
+
1962
+ # @ squirrly-seo
1963
+ #: models/Menu.php:329
1964
+ #, fuzzy
1965
+ #| msgid "Connecting ..."
1966
+ msgid "Connection"
1967
+ msgstr "Verbinden ..."
1968
+
1969
+ #: models/Menu.php:330
1970
+ msgid "webmaster tools"
1971
+ msgstr ""
1972
+
1973
+ #: models/Menu.php:335 view/SeoSettings/Sitemap.php:17
1974
+ msgid "Sitemap XML"
1975
+ msgstr ""
1976
+
1977
+ #: models/Menu.php:336
1978
+ msgid "setup the sitemap"
1979
+ msgstr ""
1980
+
1981
+ #: models/Menu.php:341
1982
+ msgid "Robots.txt"
1983
+ msgstr ""
1984
+
1985
+ #: models/Menu.php:342
1986
+ msgid "search engine filters"
1987
+ msgstr ""
1988
+
1989
+ #: models/Menu.php:347
1990
+ msgid "Favicon"
1991
+ msgstr ""
1992
+
1993
  # @ squirrly-seo
1994
+ #: models/Menu.php:348
1995
+ #, fuzzy
1996
+ #| msgid "Change the Website Icon"
1997
+ msgid "add website icon"
1998
+ msgstr "Ändern Sie das Website-Symbol"
1999
+
2000
+ #: models/Menu.php:353
2001
+ msgid "Import/Export"
2002
+ msgstr ""
2003
+
2004
+ #: models/Menu.php:354
2005
+ msgid "import & export SEO"
2006
+ msgstr ""
2007
+
2008
+ #: models/Menu.php:362
2009
+ msgid "all the SEO features"
2010
+ msgstr ""
2011
+
2012
+ #: models/Menu.php:367
2013
+ msgid "14 days jorney"
2014
+ msgstr ""
2015
+
2016
+ #: models/Menu.php:368
2017
+ msgid "sign up for better ranking"
2018
+ msgstr ""
2019
+
2020
+ #: models/Menu.php:373 view/Onboarding/Step3.php:51
2021
+ msgid "Import"
2022
+ msgstr ""
2023
+
2024
+ #: models/Menu.php:374
2025
+ msgid "import settings and SEO"
2026
+ msgstr ""
2027
+
2028
+ #: models/Menu.php:379
2029
+ msgid "Final Step"
2030
+ msgstr ""
2031
+
2032
+ #: models/Menu.php:380
2033
+ msgid "start using Squirrly SEO"
2034
+ msgstr ""
2035
+
2036
+ #: models/Post.php:73
2037
+ msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
2038
+ msgstr ""
2039
+
2040
+ #: models/Post.php:74
2041
  msgid ""
2042
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
2043
+ "the HTML form."
2044
  msgstr ""
 
 
2045
 
2046
+ #: models/Post.php:75
2047
+ msgid "The uploaded file was only partially uploaded."
2048
+ msgstr ""
2049
+
2050
+ #: models/Post.php:76
2051
+ msgid "No file was uploaded."
2052
+ msgstr ""
2053
+
2054
+ #: models/Post.php:78
2055
+ msgid "Missing a temporary folder."
2056
+ msgstr ""
2057
+
2058
+ #: models/Post.php:79
2059
+ msgid "Failed to write file to disk."
2060
+ msgstr ""
2061
+
2062
+ #: models/Post.php:80
2063
+ msgid "File upload stopped by extension."
2064
+ msgstr ""
2065
+
2066
+ #: models/Post.php:97
2067
+ msgid "Invalid form submission."
2068
+ msgstr ""
2069
+
2070
+ #: models/Post.php:107
2071
+ msgid "File is empty. Please upload something more substantial."
2072
+ msgstr ""
2073
+
2074
+ #: models/Post.php:109
2075
  msgid ""
2076
+ "File is empty. Please upload something more substantial. This error could "
2077
+ "also be caused by uploads being disabled in your php.ini or by post_max_size "
2078
+ "being defined as smaller than upload_max_filesize in php.ini."
2079
+ msgstr ""
2080
+
2081
+ #: models/Post.php:115
2082
+ msgid "Specified file failed upload test."
2083
+ msgstr ""
2084
+
2085
+ #: models/Post.php:128
2086
+ msgid "Sorry, this file type is not permitted for security reasons."
2087
+ msgstr ""
2088
+
2089
+ #: models/Post.php:153
2090
+ #, php-format
2091
+ msgid "The uploaded file could not be moved to %s."
2092
+ msgstr ""
2093
+
2094
+ #: models/PostsList.php:21
2095
+ msgid "Optimized:"
2096
+ msgstr ""
2097
+
2098
+ #: models/PostsList.php:24
2099
+ msgid "Optimize it with Squirrly Live Assistant"
2100
+ msgstr ""
2101
+
2102
+ #: models/PostsList.php:48 models/PostsList.php:74
2103
+ msgid "Snippet optimized:"
2104
+ msgstr ""
2105
+
2106
+ #: models/PostsList.php:48 models/PostsList.php:74
2107
+ msgid "task(s) remained."
2108
+ msgstr ""
2109
+
2110
+ #: models/PostsList.php:52 models/PostsList.php:78
2111
+ msgid "Can't get snippet data"
2112
+ msgstr ""
2113
+
2114
+ #: models/PostsList.php:55 models/PostsList.php:80 view/Blocks/Snippet.php:143
2115
+ msgid "Edit Snippet"
2116
  msgstr ""
 
 
2117
 
2118
  # @ squirrly-seo
2119
+ #: models/RoleManager.php:62
2120
+ #, fuzzy
2121
+ #| msgid "Squirrly LIVE SEO assistant"
2122
+ msgid "Squirrly SEO Editor"
2123
+ msgstr "Squirrly LIVE SEO-Assistent"
2124
 
2125
  # @ squirrly-seo
2126
+ #: models/RoleManager.php:63
2127
+ #, fuzzy
2128
+ #| msgid "Squirrly LIVE SEO assistant"
2129
+ msgid "Squirrly SEO Admin"
2130
+ msgstr "Squirrly LIVE SEO-Assistent"
2131
 
2132
+ #: models/Snippet.php:16
2133
+ msgid "You don't have enough pemission to edit this article"
2134
  msgstr ""
2135
 
2136
+ # @ squirrly-seo
2137
+ #: models/Snippet.php:117 view/Blocks/Snippet.php:1227
2138
+ #, fuzzy
2139
+ #| msgid "Could not send the email..."
2140
+ msgid "Couldn't find the page"
2141
+ msgstr "Konnte E-Mail nicht senden ..."
2142
+
2143
+ #: models/Snippet.php:132 models/Snippet.php:144
2144
+ msgid "No Polylang translation for this post."
2145
  msgstr ""
2146
 
2147
+ #: models/abstract/Assistant.php:119
2148
+ msgid "We are gathering data for this category"
2149
  msgstr ""
2150
 
2151
+ #: models/abstract/Assistant.php:160
2152
+ msgid "Not enough data to process this task"
2153
  msgstr ""
2154
 
2155
+ #: models/abstract/Assistant.php:164 view/Blocks/Snippet.php:319
2156
+ msgid "Current"
2157
  msgstr ""
2158
 
2159
+ #: models/abstract/Assistant.php:178
2160
+ msgid "You choosed to ignore this task. Click to activate it."
2161
  msgstr ""
2162
 
2163
+ #: models/bulkseo/Metas.php:54
2164
+ msgid "Title not empty"
2165
  msgstr ""
2166
 
2167
+ #: models/bulkseo/Metas.php:55 view/Blocks/Snippet.php:197
2168
+ #: view/Blocks/Snippet.php:595 view/Blocks/Snippet.php:850
2169
+ msgid "Current Title"
2170
  msgstr ""
2171
 
2172
+ #: models/bulkseo/Metas.php:57
2173
+ #, php-format
2174
+ msgid ""
2175
+ "The title for this URL must not be empty. %s Write a title for this page. "
2176
+ "The title is very important because it shows up in the browser tab and in "
2177
+ "the Google listing for your page. %s The better you write the title, the "
2178
+ "more clicks you can get when people find your page on search engines."
2179
+ msgstr ""
2180
+
2181
+ #: models/bulkseo/Metas.php:60
2182
+ #, php-format
2183
+ msgid "Title up to %s chars"
2184
+ msgstr ""
2185
+
2186
+ #: models/bulkseo/Metas.php:61
2187
+ msgid "Current Title Length"
2188
+ msgstr ""
2189
+
2190
+ #: models/bulkseo/Metas.php:62 models/bulkseo/Metas.php:80
2191
+ #: models/bulkseo/Opengraph.php:72 models/bulkseo/Opengraph.php:82
2192
+ #: models/bulkseo/Twittercard.php:69 models/bulkseo/Twittercard.php:79
2193
+ msgid "chars"
2194
+ msgstr ""
2195
+
2196
+ #: models/bulkseo/Metas.php:63 models/bulkseo/Opengraph.php:73
2197
+ #: models/bulkseo/Twittercard.php:70
2198
+ #, php-format
2199
+ msgid ""
2200
+ "Title has to be longer than %s chars and up to %s chars. %s You can change "
2201
+ "the title max length from %sSEO Settings > Automation%s."
2202
+ msgstr ""
2203
+
2204
+ #: models/bulkseo/Metas.php:66 models/focuspages/Snippet.php:80
2205
+ msgid "Keyword in title"
2206
+ msgstr ""
2207
+
2208
+ # @ squirrly-seo
2209
+ #: models/bulkseo/Metas.php:67 models/bulkseo/Metas.php:85
2210
+ #, fuzzy
2211
+ #| msgid "Squirrly Keyword Research"
2212
+ msgid "Squirrly Keyword"
2213
+ msgstr "Squirrly Erweiterte Suche!"
2214
+
2215
+ # @ squirrly-seo
2216
+ #: models/bulkseo/Metas.php:68 models/bulkseo/Metas.php:86
2217
+ #, fuzzy
2218
+ #| msgid "Keywords:"
2219
+ msgid "no keywords"
2220
+ msgstr "Schlüsselwörter:"
2221
+
2222
+ #: models/bulkseo/Metas.php:69 models/focuspages/Snippet.php:82
2223
+ #, php-format
2224
+ msgid ""
2225
+ "Your keyword must be present in the title of the page. %s It's a very "
2226
+ "important element through which you make sure that you connect the "
2227
+ "searcher's intent to the content on your page. %s If I'm looking for \"buy "
2228
+ "cheap smartwatch\" and you give me a page called \"Luna Presentation\", I "
2229
+ "will never click your page. Why? Because I might not know that Luna is a "
2230
+ "smartwatch designed by VectorWatch. %s \"Buy Cheap Smartwatch - Luna by "
2231
+ "VectorWatch\" would be a much better choice for a title."
2232
  msgstr ""
2233
 
2234
  # @ squirrly-seo
2235
+ #: models/bulkseo/Metas.php:72
2236
+ #, fuzzy
2237
+ #| msgid "Description:"
2238
+ msgid "Description not empty"
2239
+ msgstr "Beschreibung:"
2240
+
2241
+ #: models/bulkseo/Metas.php:73 view/Blocks/Snippet.php:249
2242
+ #: view/Blocks/Snippet.php:639 view/Blocks/Snippet.php:894
2243
+ msgid "Current Description"
2244
+ msgstr ""
2245
+
2246
+ #: models/bulkseo/Metas.php:75
2247
+ #, php-format
2248
+ msgid ""
2249
+ "Meta descriptions are important for SEO on multiple search engines. %s You "
2250
+ "need to have a meta description for this URL. %s The better you write it, "
2251
+ "the higher the chances of people clicking on your listing when they find it "
2252
+ "on search engines."
2253
+ msgstr ""
2254
+
2255
+ #: models/bulkseo/Metas.php:78
2256
+ #, php-format
2257
+ msgid "Description up to %s chars"
2258
+ msgstr ""
2259
+
2260
+ #: models/bulkseo/Metas.php:79
2261
+ msgid "Current Description Length"
2262
+ msgstr ""
2263
+
2264
+ #: models/bulkseo/Metas.php:81 models/bulkseo/Opengraph.php:83
2265
+ #: models/bulkseo/Twittercard.php:80
2266
+ #, php-format
2267
+ msgid ""
2268
+ "Description has to be longer than %s chars and up to %s chars. %s You can "
2269
+ "change the description max length from %sSEO Settings > Automation%s."
2270
+ msgstr ""
2271
 
2272
+ #: models/bulkseo/Metas.php:84 models/focuspages/Snippet.php:85
2273
+ msgid "Keyword in description"
2274
  msgstr ""
2275
 
2276
+ #: models/bulkseo/Metas.php:87
2277
+ #, php-format
2278
  msgid ""
2279
+ "Same as with the title task. %s If a user reads the description of your page "
2280
+ "on Google, but cannot find the keyword they searched for in that text, then "
2281
+ "they'd have very low chances of actually clicking and visiting your page. %s "
2282
+ "They'd go to the next page ranked on Google for that keyword. %s Think about "
2283
+ "this: Google itself is trying more and more to display keywords in the "
2284
+ "description of the pages it brings to TOP 10. It's pretty clear they care a "
2285
+ "lot about this, because that's what people want to find on the search engine."
2286
+ msgstr ""
2287
+
2288
+ #: models/bulkseo/Metas.php:90
2289
+ msgid "Meta Keywords (2-4 Words)"
2290
  msgstr ""
2291
 
2292
+ # @ squirrly-seo
2293
+ #: models/bulkseo/Metas.php:91
2294
+ #, fuzzy
2295
+ #| msgid "Keyword:"
2296
+ msgid "Meta Keyword"
2297
+ msgstr "Schlüsselwort:"
2298
+
2299
+ # @ squirrly-seo
2300
+ #: models/bulkseo/Metas.php:92
2301
+ #, fuzzy
2302
+ #| msgid "Enter a keyword"
2303
+ msgid "no meta keywords"
2304
+ msgstr "Ein Schlüsselwort eingeben"
2305
+
2306
+ #: models/bulkseo/Metas.php:93
2307
  msgid ""
2308
+ "Even if Meta keywords are not mandatory for Google, it's important for other "
2309
+ "search engines to find this meta and to index your post for these keywords."
2310
  msgstr ""
2311
 
2312
+ #: models/bulkseo/Metas.php:96
2313
+ msgid "Canonical Link"
2314
+ msgstr ""
2315
+
2316
+ #: models/bulkseo/Metas.php:97
2317
+ msgid "Current Link"
2318
+ msgstr ""
2319
+
2320
+ #: models/bulkseo/Metas.php:99
2321
+ #, php-format
2322
  msgid ""
2323
+ "You don't have to set any canonical link if your post is not copied from "
2324
+ "another source. %s Squirrly will alert you if your canonical link is not the "
2325
+ "same with the current post's URL. %s The canonical link is used to tell "
2326
+ "search engines which URL is the original one. The original is the one that "
2327
+ "gets indexed and ranked."
2328
+ msgstr ""
2329
+
2330
+ #: models/bulkseo/Metas.php:108
2331
+ msgid "Some Squirrly Metas are deactivated."
2332
+ msgstr ""
2333
+
2334
+ #: models/bulkseo/Metas.php:113
2335
+ msgid "Some Squirrly Metas are not set correctly."
2336
+ msgstr ""
2337
+
2338
+ #: models/bulkseo/Metas.php:118
2339
+ msgid "Some Squirrly Metas are generated automatically."
2340
+ msgstr ""
2341
+
2342
+ #: models/bulkseo/Metas.php:121
2343
+ msgid "All Squirrly Metas are customized and set correctly."
2344
+ msgstr ""
2345
+
2346
+ #: models/bulkseo/Metas.php:132 models/bulkseo/Opengraph.php:125
2347
+ #: models/bulkseo/Twittercard.php:122 models/bulkseo/Visibility.php:69
2348
+ msgid "Current URL"
2349
+ msgstr ""
2350
+
2351
+ #: models/bulkseo/Metas.php:137 models/focuspages/Clicks.php:70
2352
+ #: models/focuspages/Content.php:81 models/focuspages/Ctr.php:70
2353
+ #: models/focuspages/Image.php:80 models/focuspages/Impressions.php:70
2354
+ #: models/focuspages/Keyword.php:93 models/focuspages/Snippet.php:126
2355
+ #: models/focuspages/Strategy.php:98
2356
+ msgid "No Keyword Found"
2357
+ msgstr ""
2358
+
2359
+ #: models/bulkseo/Metas.php:152 models/bulkseo/Metas.php:188
2360
+ #: models/bulkseo/Metas.php:221 models/bulkseo/Metas.php:262
2361
+ #: models/bulkseo/Metas.php:298 models/bulkseo/Metas.php:331
2362
+ #: models/bulkseo/Metas.php:375 models/bulkseo/Metas.php:414
2363
+ #: models/bulkseo/Opengraph.php:139 models/bulkseo/Opengraph.php:175
2364
+ #: models/bulkseo/Opengraph.php:207 models/bulkseo/Opengraph.php:243
2365
+ #: models/bulkseo/Opengraph.php:279 models/bulkseo/Twittercard.php:136
2366
+ #: models/bulkseo/Twittercard.php:172 models/bulkseo/Twittercard.php:204
2367
+ #: models/bulkseo/Twittercard.php:240 models/bulkseo/Twittercard.php:276
2368
+ #: models/bulkseo/Visibility.php:83 models/bulkseo/Visibility.php:122
2369
+ #: models/bulkseo/Visibility.php:155
2370
+ msgid "Squirrly Snippet is deactivated from this post."
2371
  msgstr ""
2372
 
2373
+ #: models/bulkseo/Metas.php:156 models/bulkseo/Metas.php:192
2374
+ #: models/bulkseo/Metas.php:225 models/bulkseo/Metas.php:266
2375
+ #: models/bulkseo/Metas.php:302 models/bulkseo/Metas.php:335
2376
+ #: models/bulkseo/Metas.php:379 models/bulkseo/Metas.php:418
2377
+ #, php-format
2378
  msgid ""
2379
+ "SEO Metas for this post type are deactivated from %sSEO Settings > Automation"
2380
+ "%s."
2381
+ msgstr ""
2382
+
2383
+ #: models/bulkseo/Metas.php:160 models/bulkseo/Metas.php:196
2384
+ #: models/bulkseo/Metas.php:229
2385
+ #, php-format
2386
+ msgid "Meta Title is deactivated from %sSEO Settings > Metas%s."
2387
+ msgstr ""
2388
+
2389
+ #: models/bulkseo/Metas.php:164 models/bulkseo/Metas.php:200
2390
+ #: models/bulkseo/Metas.php:233 models/bulkseo/Metas.php:274
2391
+ #: models/bulkseo/Metas.php:310 models/bulkseo/Metas.php:343
2392
+ #: models/bulkseo/Metas.php:383 models/bulkseo/Metas.php:426
2393
+ #, php-format
2394
+ msgid "SEO Metas is deactivated from %sSEO Settings > Metas%s."
2395
  msgstr ""
2396
 
2397
  # @ squirrly-seo
2398
+ #: models/bulkseo/Metas.php:173 models/bulkseo/Metas.php:209
2399
+ #: models/bulkseo/Opengraph.php:160 models/bulkseo/Opengraph.php:196
2400
+ #: models/bulkseo/Twittercard.php:157 models/bulkseo/Twittercard.php:193
2401
+ #, fuzzy
2402
+ #| msgid "<< Leave it automatically"
2403
+ msgid "Title is generated automatically."
2404
+ msgstr "<< Lass es automatisch"
2405
+
2406
+ #: models/bulkseo/Metas.php:270 models/bulkseo/Metas.php:306
2407
+ #: models/bulkseo/Metas.php:339
2408
+ #, php-format
2409
+ msgid "Meta Description is deactivated from %sSEO Settings > Metas%s."
2410
+ msgstr ""
2411
+
2412
+ #: models/bulkseo/Metas.php:283 models/bulkseo/Metas.php:320
2413
+ #: models/bulkseo/Opengraph.php:228 models/bulkseo/Opengraph.php:264
2414
+ #: models/bulkseo/Twittercard.php:225 models/bulkseo/Twittercard.php:261
2415
+ msgid "Description is generated automatically."
2416
+ msgstr ""
2417
+
2418
+ #: models/bulkseo/Metas.php:387
2419
+ #, php-format
2420
+ msgid "Meta Keywords is deactivated from %sSEO Settings > Metas%s."
2421
+ msgstr ""
2422
+
2423
+ #: models/bulkseo/Metas.php:422
2424
+ #, php-format
2425
+ msgid "Meta Canonical is deactivated from %sSEO Settings > Metas%s."
2426
+ msgstr ""
2427
+
2428
+ #: models/bulkseo/Opengraph.php:66
2429
+ msgid "OG title not empty"
2430
+ msgstr ""
2431
+
2432
+ #: models/bulkseo/Opengraph.php:68
2433
+ #, php-format
2434
+ msgid ""
2435
+ "You need to have an Open Graph title for this post. %s It will help you "
2436
+ "control the way your post looks when people share this URL to Facebook, "
2437
+ "LinkedIN and other social networks. %s It's also important for SEO purposes."
2438
+ msgstr ""
2439
+
2440
+ #: models/bulkseo/Opengraph.php:71
2441
+ #, php-format
2442
+ msgid "OG title up to %s chars"
2443
+ msgstr ""
2444
 
2445
+ #: models/bulkseo/Opengraph.php:76
2446
+ msgid "OG description not empty"
2447
+ msgstr ""
2448
+
2449
+ #: models/bulkseo/Opengraph.php:78
2450
+ #, php-format
2451
  msgid ""
2452
+ "You need to have an Open Graph description for this post. %s It will help "
2453
+ "you control the way your post looks when people share this URL to Facebook, "
2454
+ "LinkedIN and other social networks. %s It's also important for SEO purposes."
2455
+ msgstr ""
2456
+
2457
+ #: models/bulkseo/Opengraph.php:81
2458
+ #, php-format
2459
+ msgid "OG description up to %s chars"
2460
+ msgstr ""
2461
+
2462
+ # @ squirrly-seo
2463
+ #: models/bulkseo/Opengraph.php:86 view/SeoSettings/Metas.php:179
2464
+ #, fuzzy
2465
+ #| msgid "Images"
2466
+ msgid "OG Image"
2467
+ msgstr "Bilder"
2468
+
2469
+ #: models/bulkseo/Opengraph.php:87 models/bulkseo/Twittercard.php:84
2470
+ msgid "(featured image)"
2471
  msgstr ""
2472
 
2473
+ #: models/bulkseo/Opengraph.php:88
2474
+ #, php-format
2475
  msgid ""
2476
+ "Set a good looking image for your URL. It needs to look good in Facebook and "
2477
+ "LinkedIN feeds when people will share this URL. %s A great image will "
2478
+ "attract more clicks to your site."
2479
  msgstr ""
2480
 
2481
+ #: models/bulkseo/Opengraph.php:102
2482
+ msgid "Open Graph is deactivated."
2483
  msgstr ""
2484
 
2485
+ #: models/bulkseo/Opengraph.php:107
2486
+ msgid "Open Graph is not set correctly."
2487
  msgstr ""
2488
 
2489
+ # @ squirrly-seo
2490
+ #: models/bulkseo/Opengraph.php:112
2491
+ #, fuzzy
2492
+ #| msgid "<< Leave it automatically"
2493
+ msgid "Open Graph is generated automatically."
2494
+ msgstr "<< Lass es automatisch"
2495
+
2496
+ #: models/bulkseo/Opengraph.php:115
2497
+ msgid "Open Graph is customized and set correctly."
2498
  msgstr ""
2499
 
2500
+ #: models/bulkseo/Opengraph.php:143 models/bulkseo/Opengraph.php:179
2501
+ #: models/bulkseo/Opengraph.php:211 models/bulkseo/Opengraph.php:247
2502
+ #: models/bulkseo/Opengraph.php:283
2503
+ #, php-format
2504
+ msgid ""
2505
+ "Open Graph for this post type is deactivated from %sSEO Settings > Automation"
2506
+ "%s."
2507
  msgstr ""
2508
 
2509
+ #: models/bulkseo/Opengraph.php:147 models/bulkseo/Opengraph.php:183
2510
+ #: models/bulkseo/Opengraph.php:215 models/bulkseo/Opengraph.php:251
2511
+ #: models/bulkseo/Opengraph.php:287
2512
+ #, php-format
2513
+ msgid "Open Graph is deactivated from %sSEO Settings > Social Media%s."
2514
  msgstr ""
2515
 
2516
+ #: models/bulkseo/Opengraph.php:151 models/bulkseo/Opengraph.php:187
2517
+ #: models/bulkseo/Opengraph.php:219 models/bulkseo/Opengraph.php:255
2518
+ #: models/bulkseo/Opengraph.php:291 models/bulkseo/Twittercard.php:148
2519
+ #: models/bulkseo/Twittercard.php:184 models/bulkseo/Twittercard.php:216
2520
+ #: models/bulkseo/Twittercard.php:252 models/bulkseo/Twittercard.php:288
2521
+ #, php-format
2522
+ msgid "Social Media is deactivated from %sSEO Settings > Social Media%s."
2523
  msgstr ""
2524
 
2525
+ #: models/bulkseo/Twittercard.php:63
2526
+ msgid "TC title not empty"
2527
  msgstr ""
2528
 
2529
+ #: models/bulkseo/Twittercard.php:65
2530
+ #, php-format
2531
+ msgid ""
2532
+ "You need to have a title for the Twitter Card of this post. %s It will help "
2533
+ "you control the way your post looks when it's shared on Twitter. %s It's "
2534
+ "also important for SEO purposes."
2535
  msgstr ""
2536
 
2537
+ #: models/bulkseo/Twittercard.php:68
2538
+ #, php-format
2539
+ msgid "TC title up to %s chars"
2540
+ msgstr ""
2541
+
2542
+ # @ squirrly-seo
2543
+ #: models/bulkseo/Twittercard.php:73
2544
+ #, fuzzy
2545
+ #| msgid "Description:"
2546
+ msgid "TC Description not empty"
2547
+ msgstr "Beschreibung:"
2548
+
2549
+ #: models/bulkseo/Twittercard.php:75
2550
+ #, php-format
2551
  msgid ""
2552
+ "You need to have a Twitter Card description for this post. %s It will help "
2553
+ "you control the way your post looks when people share this URL on Twitter. "
2554
+ "Good copywriting on your Twitter Card description will attract more clicks "
2555
+ "to your site. %s It's also important for SEO purposes."
2556
  msgstr ""
2557
 
2558
+ #: models/bulkseo/Twittercard.php:78
2559
+ #, php-format
2560
+ msgid "TC description up to %s chars"
2561
  msgstr ""
2562
 
2563
+ # @ squirrly-seo
2564
+ #: models/bulkseo/Twittercard.php:83
2565
+ #, fuzzy
2566
+ #| msgid "Images"
2567
+ msgid "TC Image"
2568
+ msgstr "Bilder"
2569
+
2570
+ #: models/bulkseo/Twittercard.php:85
2571
+ #, php-format
2572
+ msgid ""
2573
+ "Set a good looking image for your URL. It needs to look good in Twitter "
2574
+ "feeds when people will share this URL. %s A great image will attract more "
2575
+ "clicks to your site."
2576
+ msgstr ""
2577
+
2578
+ #: models/bulkseo/Twittercard.php:99
2579
+ msgid "Twitter Card is deactivated."
2580
+ msgstr ""
2581
+
2582
+ #: models/bulkseo/Twittercard.php:104
2583
+ msgid "Twitter Card is not set correctly."
2584
+ msgstr ""
2585
+
2586
+ #: models/bulkseo/Twittercard.php:109
2587
+ msgid "Twitter Card is generated automatically."
2588
+ msgstr ""
2589
+
2590
+ #: models/bulkseo/Twittercard.php:112
2591
+ msgid "Twitter Card is customized and set correctly."
2592
+ msgstr ""
2593
+
2594
+ #: models/bulkseo/Twittercard.php:140 models/bulkseo/Twittercard.php:176
2595
+ #: models/bulkseo/Twittercard.php:208 models/bulkseo/Twittercard.php:244
2596
+ #: models/bulkseo/Twittercard.php:280
2597
+ #, php-format
2598
+ msgid ""
2599
+ "Twitter Card for this post type is deactivated from %sSEO Settings > "
2600
+ "Automation%s."
2601
  msgstr ""
2602
 
2603
+ #: models/bulkseo/Twittercard.php:144 models/bulkseo/Twittercard.php:180
2604
+ #: models/bulkseo/Twittercard.php:212 models/bulkseo/Twittercard.php:248
2605
+ #: models/bulkseo/Twittercard.php:284
2606
+ #, php-format
2607
+ msgid "Twitter Card is deactivated from %sSEO Settings > Social Media%s."
2608
  msgstr ""
2609
 
2610
+ #: models/bulkseo/Visibility.php:27
2611
+ msgid "Visible on Google"
2612
  msgstr ""
2613
 
2614
+ #: models/bulkseo/Visibility.php:28
2615
+ #, php-format
2616
+ msgid ""
2617
+ "Let Google Index this page. %s You need to make sure your settings are "
2618
+ "turned to green for the \"let Google index this page\" section of this URL's "
2619
+ "visibility settings."
2620
  msgstr ""
2621
 
2622
+ #: models/bulkseo/Visibility.php:31 view/Blocks/Snippet.php:1146
2623
+ msgid "Send Authority to this page"
2624
  msgstr ""
2625
 
2626
+ #: models/bulkseo/Visibility.php:32
2627
+ #, php-format
2628
+ msgid ""
2629
+ "Pass SEO authority to this page. %s If you want this page to really be "
2630
+ "visible, then you must allow the flow of authority from the previous pages "
2631
+ "to this one. %s The previous page means any page that leads to the current "
2632
+ "one. Passing authority from the previous page to this one will improve the "
2633
+ "current page's visibility. %s You need to make sure your settings are turned "
2634
+ "to green for the \"Pass Link Juice\" section of this URL's visibility "
2635
+ "settings."
2636
  msgstr ""
2637
 
2638
+ #: models/bulkseo/Visibility.php:35
2639
+ msgid "Add page in sitemap"
2640
  msgstr ""
2641
 
2642
+ #: models/bulkseo/Visibility.php:36
2643
+ #, php-format
2644
+ msgid ""
2645
+ "Turn the \"Show it in Sitemap.xml\" toggle to green (ON). %s That setting "
2646
+ "helps you control if the current URL should be found within the sitemap. "
2647
+ "There are pages you will want in the sitemap, and pages that you will want "
2648
+ "out of the sitemap. %s If your purpose is to maximize visibility for the "
2649
+ "current URL, then you need to add it to Sitemap."
2650
  msgstr ""
2651
 
2652
+ #: models/bulkseo/Visibility.php:50
2653
+ msgid "Some visibility options are inactive."
2654
  msgstr ""
2655
 
2656
+ #: models/bulkseo/Visibility.php:55
2657
+ msgid "Visibility is not set correctly."
2658
  msgstr ""
2659
 
2660
+ #: models/bulkseo/Visibility.php:59
2661
+ msgid "Visibility is set correctly."
2662
  msgstr ""
2663
 
2664
+ #: models/bulkseo/Visibility.php:87
2665
+ #, php-format
2666
+ msgid ""
2667
+ "Noindex for this post type is deactivated from %sSEO Settings > Automation%s."
2668
  msgstr ""
2669
 
2670
+ #: models/bulkseo/Visibility.php:91 models/bulkseo/Visibility.php:130
2671
+ #, php-format
2672
+ msgid "Robots Meta is deactivated from %sSEO Settings > SEO Metas%s."
2673
  msgstr ""
2674
 
2675
+ #: models/bulkseo/Visibility.php:95 models/bulkseo/Visibility.php:134
2676
+ #, php-format
2677
+ msgid "SEO Metas is deactivated from %sSEO Settings > SEO Metas%s."
2678
  msgstr ""
2679
 
2680
+ #: models/bulkseo/Visibility.php:126
2681
+ #, php-format
2682
+ msgid ""
2683
+ "Nofollow for this post type is deactivated from %sSEO Settings > Automation"
2684
+ "%s."
2685
  msgstr ""
2686
 
2687
+ #: models/bulkseo/Visibility.php:159
2688
+ #, php-format
2689
+ msgid ""
2690
+ "This post type is excluded from sitemap. See %sSEO Settings > Automation%s."
2691
  msgstr ""
2692
 
2693
+ #: models/bulkseo/Visibility.php:163
2694
+ #, php-format
2695
+ msgid "Sitemap XML is deactivated from %sSEO Settings > Sitemap XML%s."
2696
  msgstr ""
2697
 
2698
+ #: models/domain/Patterns.php:373
2699
+ msgid "Page"
2700
  msgstr ""
2701
 
2702
+ #: models/domain/Patterns.php:374
2703
+ msgid "of"
2704
  msgstr ""
2705
 
2706
+ #: models/focuspages/Accuracy.php:21
2707
+ msgid "Rank accuracy"
2708
  msgstr ""
2709
 
2710
+ #: models/focuspages/Accuracy.php:22
2711
  #, php-format
2712
  msgid ""
2713
+ "Do you need better accuracy for your ranking results? %s Look at the "
2714
+ "Business Plan pricing for Squirrly SEO. %s The SERP Checker Available on "
2715
+ "FREE and PRO Plans is made via Search Console integration, which means that "
2716
+ "the information is not as accurate as possible and will not clearly depict "
2717
+ "the exact position in Google. %s Why? %s Google uses an average when it "
2718
+ "comes to the position. And it's not the true position. The average is made "
2719
+ "according to the positions that the page was found on when users did click "
2720
+ "on it. %s Also, the data inside Search Console is a bit old, so if you're "
2721
+ "actively trying to increase your rankings day in and day out, you need the "
2722
+ "Business Plan. %s If you just want casually to know your rankings and not "
2723
+ "care about FULL accuracy, then you can stick with your current plan."
2724
+ msgstr ""
2725
+
2726
+ #: models/focuspages/Accuracy.php:35 models/focuspages/Clicks.php:57
2727
+ #: models/focuspages/Ctr.php:57 models/focuspages/Impressions.php:57
2728
+ #: models/focuspages/Indexability.php:85
2729
+ msgid "Connect Google Search"
2730
+ msgstr ""
2731
+
2732
+ #: models/focuspages/Audit.php:34
2733
+ #, php-format
2734
+ msgid "Audit score is over %s"
2735
  msgstr ""
2736
 
2737
+ #: models/focuspages/Audit.php:37
2738
  #, php-format
2739
  msgid ""
2740
+ "Even though we recommend getting an Audit score of 84 or above, a score of "
2741
+ "70 will do. %s The Audit made by Squirrly takes a lot of things into "
2742
+ "account: blogging, SEO, social media, links, authority, traffic. All these "
2743
+ "aspects contribute directly or indirectly to the overall SEO of your site. "
2744
+ "%s Therefore, without a good score on your Audit it's quite probable for "
2745
+ "Google not to position your pages high enough, because overall your website "
2746
+ "is not doing good enough for it to be considered a priority. %s A page will "
2747
+ "not rank high if most of the website has low quality SEO and low marketing "
2748
+ "metrics."
2749
  msgstr ""
2750
 
2751
+ #: models/focuspages/Audit.php:40
2752
+ msgid "No duplicate titles"
2753
  msgstr ""
2754
 
2755
+ #: models/focuspages/Audit.php:41
2756
+ #, php-format
2757
+ msgid ""
2758
+ "Make sure that you don't have duplicate titles across pages from your site. "
2759
+ "%s If you do, then use canonical links to point the duplicate pages towards "
2760
+ "the original. %s Otherwise, if it's too hard to customize too many titles at "
2761
+ "once, simply use the Patterns feature from Squirrly. You'll be able to "
2762
+ "define patterns, so that your titles will seem to be unique. %s WordPress -> "
2763
+ "Squirrly -> SEO Settings. There you will find the Patterns tab."
2764
+ msgstr ""
2765
+
2766
+ #: models/focuspages/Audit.php:44
2767
+ msgid "No duplicate description"
2768
  msgstr ""
2769
 
2770
+ #: models/focuspages/Audit.php:45
2771
  #, php-format
2772
+ msgid ""
2773
+ "Make sure that your pages do not have duplicate descriptions. %s This is "
2774
+ "super easy to fix if you're using the Patterns feature from Squirrly SEO, "
2775
+ "because it will generate your META description automatically from the "
2776
+ "content of your page (in case you didn't already place a custom "
2777
+ "description). %s If you want to fix this problem by giving the problematic "
2778
+ "pages their own custom descriptions: go to the Squirrly SEO Audit and see "
2779
+ "which pages have this problem. %s Or use a tool like ContentLook to identify "
2780
+ "the pages and then place tasks for your self to fix those issues at a later "
2781
+ "time."
2782
  msgstr ""
2783
 
2784
+ #: models/focuspages/Audit.php:48
2785
+ msgid "No empty titles"
2786
  msgstr ""
2787
 
2788
+ #: models/focuspages/Audit.php:49
2789
+ #, php-format
2790
+ msgid ""
2791
+ "Make sure that you do not have pages with empty titles. %s This means: pages "
2792
+ "where you haven't placed a meta title in your Snippet. %s Features like "
2793
+ "Patterns or Snippet from Squirrly SEO will help you easily fix this problem "
2794
+ "by either automating or customizing descriptions for your pages."
2795
  msgstr ""
2796
 
2797
+ # @ squirrly-seo
2798
+ #: models/focuspages/Audit.php:52
2799
+ #, fuzzy
2800
+ #| msgid "Description:"
2801
+ msgid "No empty descriptions"
2802
+ msgstr "Beschreibung:"
2803
+
2804
+ #: models/focuspages/Audit.php:54
2805
+ #, php-format
2806
+ msgid ""
2807
+ "Make sure that you do not have pages with empty descriptions. %s This means: "
2808
+ "pages where you haven't placed a meta description. %s Features like Patterns "
2809
+ "or Snippet from Squirrly SEO will help you easily fix this problem by either "
2810
+ "automating or customizing descriptions for your pages."
2811
  msgstr ""
2812
 
2813
+ #: models/focuspages/Audit.php:57
2814
+ msgid "SEO speed"
2815
  msgstr ""
2816
 
2817
+ #: models/focuspages/Audit.php:58
2818
+ msgid "sec"
2819
  msgstr ""
2820
 
2821
+ #: models/focuspages/Audit.php:59
2822
+ #, php-format
2823
+ msgid ""
2824
+ "You need to get good loading times for your pages. %s Good loading times "
2825
+ "will help you rank higher in Google, while pages that load very slowly will "
2826
+ "drag you down in search results."
2827
  msgstr ""
2828
 
2829
+ #: models/focuspages/Audit.php:62
2830
+ msgid "Mobile-friendly"
2831
  msgstr ""
2832
 
2833
+ #: models/focuspages/Audit.php:63
2834
+ #, php-format
2835
+ msgid ""
2836
+ "Your website must be mobile friendly. %s It used to be an optional thing for "
2837
+ "Google until now, but it made it quite mandatory. %s Google prefers to "
2838
+ "display sites which are mobile friendly higher in search results, because "
2839
+ "most people search using mobile devices these days."
2840
  msgstr ""
2841
 
2842
+ #: models/focuspages/Audit.php:78
2843
+ msgid "Go to Audit"
2844
  msgstr ""
2845
 
2846
+ #: models/focuspages/Audit.php:82
2847
+ msgid "Note! The audit is not ready yet"
2848
  msgstr ""
2849
 
2850
+ #: models/focuspages/Audit.php:83
2851
+ msgid "Request a new audit"
2852
  msgstr ""
2853
 
2854
+ #: models/focuspages/Audit.php:118 models/focuspages/Audit.php:141
2855
+ #: models/focuspages/Audit.php:164 models/focuspages/Audit.php:187
2856
+ msgid "URL"
2857
  msgstr ""
2858
 
2859
+ #: models/focuspages/Authority.php:32
2860
+ #, php-format
2861
+ msgid "Authority over %s"
2862
  msgstr ""
2863
 
2864
+ #: models/focuspages/Authority.php:33
2865
+ msgid "Authority"
2866
  msgstr ""
2867
 
2868
+ #: models/focuspages/Authority.php:34
2869
+ #, php-format
2870
+ msgid ""
2871
+ "Your Page Authority Needs to be over %s to complete this task. %s To do that "
2872
+ "you'll need good metrics for all the tasks in the Traffic Health section of "
2873
+ "Focus Pages. %s You'll also need inner links, social media signals and "
2874
+ "backlinks from 3rd party sites."
2875
  msgstr ""
2876
 
2877
+ #: models/focuspages/Backlinks.php:45
2878
+ #, php-format
2879
+ msgid "At Least %s MOZ BackLinks"
2880
  msgstr ""
2881
 
2882
+ #: models/focuspages/Backlinks.php:46 models/focuspages/Backlinks.php:57
2883
+ msgid "backlinks"
2884
  msgstr ""
2885
 
2886
+ #: models/focuspages/Backlinks.php:51
2887
+ #, php-format
2888
+ msgid "At Least %s Referring Domains"
2889
  msgstr ""
2890
 
2891
+ #: models/focuspages/Backlinks.php:52
2892
+ msgid "unique domains"
2893
  msgstr ""
2894
 
2895
+ #: models/focuspages/Backlinks.php:56
2896
+ #, php-format
2897
+ msgid "At Least %s Majestic SEO Links"
2898
  msgstr ""
2899
 
2900
+ # @ squirrly-seo
2901
+ #: models/focuspages/Clicks.php:42
2902
+ #, fuzzy
2903
+ #| msgid "Tool for Search Engines"
2904
+ msgid "Clicks from Search Engine"
2905
+ msgstr "Tool für Suchmaschinen"
2906
+
2907
+ # @ squirrly-seo
2908
+ #: models/focuspages/Clicks.php:60 models/focuspages/Clicks.php:71
2909
+ #: models/focuspages/Content.php:82 models/focuspages/Ctr.php:60
2910
+ #: models/focuspages/Ctr.php:71 models/focuspages/Image.php:81
2911
+ #: models/focuspages/Impressions.php:60 models/focuspages/Impressions.php:71
2912
+ #: models/focuspages/Keyword.php:83 models/focuspages/Keyword.php:95
2913
+ #: models/focuspages/Strategy.php:99 view/Research/Briefcase.php:237
2914
+ msgid "Do a research"
2915
+ msgstr "Recherchieren"
2916
+
2917
+ #: models/focuspages/Clicks.php:73 models/focuspages/Content.php:84
2918
+ #: models/focuspages/Ctr.php:73 models/focuspages/Image.php:87
2919
+ #: models/focuspages/Impressions.php:73 models/focuspages/Keyword.php:96
2920
+ #: models/focuspages/Strategy.php:101
2921
+ #, fuzzy
2922
+ #| msgid "Optimize for Keyword"
2923
+ msgid "Optimize for a keyword"
2924
+ msgstr "Schlüsselwort optimieren"
2925
+
2926
+ #: models/focuspages/Content.php:39
2927
+ #, fuzzy, php-format
2928
+ #| msgid "Optimize for Keyword"
2929
+ msgid "Optimize to %s"
2930
+ msgstr "Schlüsselwort optimieren"
2931
+
2932
+ #: models/focuspages/Content.php:41
2933
+ #, php-format
2934
+ msgid ""
2935
+ "Make sure this Focus Page is optimized to 100%% using the Squirrly SEO Live "
2936
+ "Assistant. %s As you can see clearly on Google search result pages, Googles "
2937
+ "tries to find the closest match (inside web content) to what the user "
2938
+ "searched for. %s That is why using this method of optimizing a page as "
2939
+ "outlined by the Live Assistant feature is mandatory. %s Don't worry about "
2940
+ "over-optimizing anything, as the Live Assistant checks for many over-"
2941
+ "optimization traps you may fall into."
2942
  msgstr ""
2943
 
2944
+ #: models/focuspages/Content.php:44
2945
+ msgid "Snippet is green"
2946
  msgstr ""
2947
 
2948
+ #: models/focuspages/Content.php:45
2949
+ #, php-format
2950
+ msgid ""
2951
+ "The tasks inside the Snippet section of the Focus Pages feature must all be "
2952
+ "turned green. %s Why? %s If the Snippet elements are Not green, then your "
2953
+ "Focus Page is not 100%% optimized. %s We've built this SEO Content section "
2954
+ "especially because we wanted to help you understand that there's a lot more "
2955
+ "to On-Page SEO than just a content analysis, or a snippet. You need all "
2956
+ "these elements working together in order to achieve high rankings."
2957
  msgstr ""
2958
 
2959
+ #: models/focuspages/Content.php:48
2960
+ msgid "Platform SEO is green"
2961
  msgstr ""
2962
 
2963
+ #: models/focuspages/Content.php:49
2964
+ #, php-format
2965
+ msgid ""
2966
+ "Make sure that the Platform SEO section is green for this Focus Page. %s "
2967
+ "Because WordPress is such a vast CMS with many customization possibilities, "
2968
+ "it happens to many website owners, business owners and developers, that "
2969
+ "custom post types from their site remain completely without SEO codes and "
2970
+ "other important settings. %s This task makes sure that everything is "
2971
+ "properly set up."
2972
  msgstr ""
2973
 
2974
+ #: models/focuspages/Content.php:52
2975
+ msgid "Fresh content update"
2976
  msgstr ""
2977
 
2978
+ #: models/focuspages/Content.php:54
2979
+ #, php-format
2980
+ msgid ""
2981
+ "Last Update Date for your Content: needs to be in the last 3 months. %s If "
2982
+ "it's not, then go and edit your page. %s Google prefers pages where the "
2983
+ "website owners keep updating the content. %s Why? %s Because it's one of the "
2984
+ "easiest ways to ensure that the content on the page keeps being relevant."
2985
  msgstr ""
2986
 
2987
+ #: models/focuspages/Content.php:78 view/Research/Briefcase.php:226
2988
+ #: view/Research/HistoryDetails.php:74 view/Research/ResearchDetails.php:36
2989
+ #, fuzzy
2990
+ #| msgid "Optimize for Keyword"
2991
+ msgid "Optimize for this"
2992
+ msgstr "Schlüsselwort optimieren"
2993
 
2994
+ #: models/focuspages/Ctr.php:41
2995
+ msgid "Clickthrough rate"
2996
  msgstr ""
2997
 
2998
+ #: models/focuspages/Ctr.php:42
2999
+ #, php-format
3000
+ msgid ""
3001
+ "CTR is the number of clicks that your page receives divided by the number of "
3002
+ "times your page appeared in search results: clicks ÷ impressions = CTR. %s "
3003
+ "For example, if you had 5 clicks and 100 impressions, then your CTR would be "
3004
+ "5%%. %s Keep the CTR above %s with enhanced headlines."
3005
  msgstr ""
3006
 
3007
+ #: models/focuspages/Image.php:53
3008
+ msgid "Keyword in filename"
3009
  msgstr ""
3010
 
3011
+ #: models/focuspages/Image.php:56
3012
+ #, php-format
3013
+ msgid ""
3014
+ "Your filename for one of the images in this Focus Page should be: %s keyword."
3015
+ "jpg %s Download a relevant image from your page. Change the filename. Then "
3016
+ "re-upload with the SEO filename and add it your page's content again. %s "
3017
+ "It's best to keep this at only one filename which contains the main keyword "
3018
+ "of the page. %s Why? %s Because Google could consider over-optimization if "
3019
+ "you used it more than once."
3020
  msgstr ""
3021
 
3022
+ #: models/focuspages/Image.php:77 models/focuspages/Snippet.php:129
3023
+ msgid "Edit your snippet"
3024
  msgstr ""
3025
 
3026
+ #: models/focuspages/Image.php:106
3027
+ msgid "Optimize the post first using a Keyword from Squirrly Briefcase"
3028
  msgstr ""
3029
 
3030
+ #: models/focuspages/Impressions.php:42
3031
+ msgid "Search Results Impressions"
3032
  msgstr ""
3033
 
3034
+ #: models/focuspages/Indexability.php:47
3035
+ msgid "Yes, do index"
3036
  msgstr ""
3037
 
3038
+ #: models/focuspages/Indexability.php:50
3039
+ #, php-format
3040
+ msgid ""
3041
+ "To turn this task to green, go and look at all the places where you could "
3042
+ "have added instructions for Google not to index this page from your site. %s "
3043
+ "Make sure that there is no such instruction added to WordPress -> Settings, "
3044
+ "or in a theme, or in a plugin, or in Squirrly SEO's Snippet for this page. "
3045
+ "Also, make sure you don't block this page in your robots.txt file. %s "
3046
+ "Sometimes, you will want certain pages from your site not to be indexed. Now "
3047
+ "is not the case, however. %s If this task turns green, then it means that "
3048
+ "you did not specify to Google that it should NOT index the page. %s "
3049
+ "Therefore, you allow Google to index the page. %s Since this is a Focus "
3050
+ "Page, you must allow Google to index it, in order for it to appear in search "
3051
+ "result pages."
3052
  msgstr ""
3053
 
3054
+ #: models/focuspages/Indexability.php:53
3055
+ msgid "Yes, do follow"
 
3056
  msgstr ""
3057
 
3058
+ #: models/focuspages/Indexability.php:56
3059
+ #, php-format
3060
+ msgid ""
3061
+ "To turn this task to green, make sure that you do NOT have a no-follow "
3062
+ "attribute for this Focus Page. %s This task gets verified from multiple "
3063
+ "sources. %s However, if you want to be 100%% certain in the future that "
3064
+ "everything is perfect, use just Squirrly SEO, because it will ease both your "
3065
+ "setup and the system check. %s With Squirrly SEO, you could easily check "
3066
+ "this setting in the Snippet section. %s Many themes and plugins could "
3067
+ "interfere with settings."
3068
  msgstr ""
3069
 
3070
+ #: models/focuspages/Indexability.php:59
3071
+ msgid "Present in sitemap"
3072
  msgstr ""
3073
 
3074
+ #: models/focuspages/Indexability.php:60
3075
  #, php-format
3076
+ msgid ""
3077
+ "Checks whether or not your page is available in your XML Sitemap. %s Use the "
3078
+ "Sitemap from WordPress -> Squirrly -> SEO Settings %s Make sure this Focus "
3079
+ "Page is included in the sitemap generated by Squirrly SEO. %s In the best "
3080
+ "practices section you can find ideas for why it can make sense to remove "
3081
+ "pages from your sitemap."
3082
  msgstr ""
3083
 
3084
+ #: models/focuspages/Indexability.php:63
3085
+ msgid "Manual index request"
3086
  msgstr ""
3087
 
3088
+ #: models/focuspages/Indexability.php:64
 
3089
  #, php-format
3090
+ msgid ""
3091
+ "Click the button to ask Google to re-index this page. %s Disclaimer: This "
3092
+ "task will automatically turn to green once you click on the button and it "
3093
+ "takes you to Google Search Console. It's up to you to make 100%% sure that "
3094
+ "you do tell Google to either index or re-index this page. %s Perform a "
3095
+ "manual request for Google to re-index this page. %s This is super important "
3096
+ "to do whenever you make important changes to your pages. Otherwise, Google "
3097
+ "will still have the old version of your page. %s If Google keeps having the "
3098
+ "older version, then it doesn't matter if you've improved the page. %s When "
3099
+ "you click the Ask Google to Re-Index button, Squirrly will use the Google "
3100
+ "Search Console API to send Google the request on your behalf."
3101
+ msgstr ""
3102
+
3103
+ #: models/focuspages/Indexability.php:67 view/Blocks/Snippet.php:308
3104
+ msgid "Canonical link"
3105
  msgstr ""
3106
 
3107
+ #: models/focuspages/Indexability.php:70
3108
  #, php-format
3109
  msgid ""
3110
+ "This page should have a canonical link to itself, indicating that it is "
3111
+ "indeed the original content. %s You can not have pages with canonical links "
3112
+ "to other sites and pages, because you could not rank for them. Why? Because "
3113
+ "a canonical link to another URL would mean that the other URL is the one "
3114
+ "worth indexing. (the original one) %s To turn this task to green, go and "
3115
+ "make sure that this page does not have a canonical link attribute pointing "
3116
+ "to another page. %s You can easily control this is in the future by using "
3117
+ "the Snippet feature of Squirrly SEO."
3118
  msgstr ""
3119
 
3120
+ #: models/focuspages/Indexability.php:73
3121
+ msgid "Permalink structure is good"
 
 
 
3122
  msgstr ""
3123
 
3124
+ #: models/focuspages/Indexability.php:75
3125
+ #, php-format
3126
+ msgid ""
3127
+ "Make your LINKS SEO-Friendly. %s WordPress -> Settings %s That is where "
3128
+ "WordPress allows you to change the permalink structure. %s Your URLs (the "
3129
+ "links from your site) should be super easy to read. This makes your site "
3130
+ "Human-friendly as well."
3131
  msgstr ""
3132
 
3133
+ #: models/focuspages/Indexability.php:90
3134
+ msgid "Ask Google to Re-Index"
3135
  msgstr ""
3136
 
3137
+ #: models/focuspages/Innerlinks.php:48
3138
  #, php-format
3139
+ msgid "Get %s inner links"
3140
  msgstr ""
3141
 
3142
+ #: models/focuspages/Innerlinks.php:49
3143
+ msgid "inner links"
3144
  msgstr ""
3145
 
3146
+ #: models/focuspages/Innerlinks.php:51
3147
  #, php-format
3148
  msgid ""
3149
+ "Get %s Inner Links %s Recommended is: %s %s Inner Links are links that you "
3150
+ "send from one URL of your site to another URL of your site. %s Since your "
3151
+ "Focus Pages are the most important pages in your site, you should make sure "
3152
+ "that you link to them from many pages of your website. %s Follow the best "
3153
+ "practices for this. (highlighted in the Best Practices section)"
3154
  msgstr ""
3155
 
3156
+ #: models/focuspages/Innerlinks.php:67
3157
+ msgid "Build with Blogging Assistant"
3158
+ msgstr ""
3159
+
3160
+ # @ squirrly-seo
3161
+ #: models/focuspages/Keyword.php:48
3162
+ #, fuzzy
3163
+ #| msgid "Competition:"
3164
+ msgid "Competition is low"
3165
+ msgstr "Wettbewerb:"
3166
+
3167
+ #: models/focuspages/Keyword.php:51
3168
  #, php-format
3169
  msgid ""
3170
+ "To complete this task you must make sure that the main keyword you're "
3171
+ "optimizing this Focus Page for has low competition. %s The Squirrly SEO "
3172
+ "software suite uses our proprietary Market Intelligence feature to determine "
3173
+ "the chance that your site has of outranking the current TOP 10 of Google for "
3174
+ "the desired keyword you're targeting. %s If you really want to have a clear "
3175
+ "shot at ranking, make sure the competition is low for the keyword you choose."
3176
  msgstr ""
3177
 
3178
+ #: models/focuspages/Keyword.php:54
3179
+ msgid "Search volume is big enough"
3180
  msgstr ""
3181
 
3182
+ #: models/focuspages/Keyword.php:56
3183
+ #, php-format
3184
+ msgid ""
3185
+ "To turn this task to green, go and find a keyword that has a good search "
3186
+ "volume. (meaning that many people search on Google for this keyword every "
3187
+ "single month). %s The Research features from Squirrly SEO will indicate if "
3188
+ "the volume is big enough. %s Since these are the most important pages on "
3189
+ "your website, you need to make sure that you get the maximum number of "
3190
+ "people possible to find this page. %s If you target keyword searches with "
3191
+ "low volumes, then you'll end up having just 2 or 3 people every month "
3192
+ "visiting this page. And then all the effort will have been for nothing."
3193
  msgstr ""
3194
 
3195
+ #: models/focuspages/Keyword.php:59
3196
+ msgid "Trend is decent"
 
 
3197
  msgstr ""
3198
 
3199
+ #: models/focuspages/Keyword.php:61
3200
+ #, php-format
3201
+ msgid ""
3202
+ "Trend levels required to get the Green Check on this task: %s - Steady %s - "
3203
+ "Going Up %s - Sky-rocketing %s we take the trend from the previous 3 months. "
3204
+ "%s If you target a search query with a bad trend you'll end up seeing little "
3205
+ "traffic to this page in the long run. %s Why ? A declining trend shows that "
3206
+ "Google Users are losing interest in that topic or keyword and will continue "
3207
+ "to do so in the future. %s Therefore, even though you could get much traffic "
3208
+ "right now after you rank this page, in the near future you'll get very "
3209
+ "little traffic even if you'd end up on Position 1 in Google Search."
3210
  msgstr ""
3211
 
3212
+ # @ squirrly-seo
3213
+ #: models/focuspages/Keyword.php:80
3214
+ #, fuzzy
3215
+ #| msgid "Enter a keyword"
3216
+ msgid "Find Better Keywords"
3217
+ msgstr "Ein Schlüsselwort eingeben"
3218
 
3219
+ #: models/focuspages/Length.php:38
3220
+ #, php-format
3221
+ msgid "Write %s words"
3222
  msgstr ""
3223
 
3224
+ # @ squirrly-seo
3225
+ #: models/focuspages/Length.php:39
3226
+ #, fuzzy
3227
+ #| msgid "Keywords:"
3228
+ msgid "words"
3229
+ msgstr "Schlüsselwörter:"
3230
 
3231
+ #: models/focuspages/Length.php:41
3232
+ #, php-format
3233
+ msgid ""
3234
+ "For Focus Pages it's mandatory, in our opinion, to have at least 1,500 "
3235
+ "words. %s Go and edit the page. %s I know: for some of you it might sound "
3236
+ "tough, but Google places longer, more valuable pages higher in search "
3237
+ "positions. %s You don't necessarily have to get 1,500 words on this page for "
3238
+ "it to rank in TOP 10 on Google. However, getting this task completed ensures "
3239
+ "that your chances of ranking will be very high."
3240
  msgstr ""
3241
 
3242
+ #: models/focuspages/Length.php:44
3243
+ msgid "Reader's Experience"
3244
  msgstr ""
3245
 
3246
+ #: models/focuspages/Length.php:45
3247
+ msgid "minutes average"
 
3248
  msgstr ""
3249
 
3250
+ #: models/focuspages/Length.php:46
3251
+ #, php-format
3252
+ msgid ""
3253
+ "Get an average time on page of minimum 2 minutes for this focus page. You "
3254
+ "can do this by editing the content and making it more appealing to visitors. "
3255
+ "%s We're looking at the Average Time On Page for this page. %s Why? %s "
3256
+ "Because, sometimes website owners can be tempted to make the pages longer in "
3257
+ "order to get many words on a page. They make them longer by increasing "
3258
+ "wordiness. %s Over 1,500 words / page can give you much better SEO results. "
3259
+ "However, making it longer does not mean you should make it boring. %s In "
3260
+ "order to check that the length of the page was increased properly, we also "
3261
+ "take into account if website visitors love this page."
3262
  msgstr ""
3263
 
3264
+ #: models/focuspages/Length.php:64
3265
+ msgid "Edit Page"
3266
  msgstr ""
3267
 
3268
+ #: models/focuspages/Nofollow.php:57
3269
+ msgid "Maintain authority"
3270
  msgstr ""
3271
 
3272
+ #: models/focuspages/Nofollow.php:58
3273
+ msgid "External Links"
3274
  msgstr ""
3275
 
3276
+ #: models/focuspages/Nofollow.php:60 models/focuspages/Ranking.php:24
3277
+ #, php-format
3278
+ msgid ""
3279
+ "TLDR: All outbound links need to have no-follow attribute. %s You've worked "
3280
+ "hard on your Focus Page. %s Now make sure that you're not letting that hard "
3281
+ "work go to waste, by sending out all your authority and Link Juice over to "
3282
+ "other pages from the web. %s The Focus Page needs to be the final page that "
3283
+ "Google Follows. It's an \"All Roads Lead to Rome\" kind of scenario. %s If "
3284
+ "you want your focus pages to get ranked better and have authority make sure "
3285
+ "that ALL outbound links have a no-follow attribute attached to them."
3286
  msgstr ""
3287
 
3288
+ # @ squirrly-seo
3289
+ #: models/focuspages/Onpage.php:51
3290
+ #, fuzzy
3291
+ #| msgid "Enter your email"
3292
+ msgid "Enhance your sitemap"
3293
+ msgstr "In Artikel einfügen"
3294
 
3295
+ #: models/focuspages/Onpage.php:52
3296
+ #, php-format
3297
+ msgid ""
3298
+ "Add images / videos to it. %s Squirrly SEO makes it super easy for you to "
3299
+ "enhance your XML sitemap. %s Make sure you activate the sitemap from "
3300
+ "%sSquirrly > SEO Settings > Bulk SEO%s for this post. %s Include the images "
3301
+ "and videos into sitemap from %sSquirrly > SEO Settings > Sitemap XML%s"
3302
  msgstr ""
3303
 
3304
+ #: models/focuspages/Onpage.php:55
3305
+ msgid "Post Type settings activated"
3306
  msgstr ""
3307
 
3308
+ #: models/focuspages/Onpage.php:56
3309
+ #, php-format
3310
+ msgid ""
3311
+ "Are the SEO Settings from Squirrly SEO activated for the post type of this "
3312
+ "particular Focus Page? %s This is what we're checking with this task. %s "
3313
+ "Why? %s Some of the times, we're seeing that people don't get good enough "
3314
+ "results with Google rankings simply because they do not have the SEO "
3315
+ "settings activated for their current post type. %s Many WordPress sites "
3316
+ "employ the use of custom post types. Your \"Events\" page or \"Real Estate\" "
3317
+ "page could be a different post type from general \"Pages\" or \"Posts\" in "
3318
+ "WordPress. %s To turn this task to green, go and add this post type (%s) in "
3319
+ "%sSquirrly SEO Automation%s."
3320
  msgstr ""
3321
 
3322
+ #: models/focuspages/Onpage.php:59
3323
+ msgid "Patterns activated"
3324
  msgstr ""
3325
 
3326
+ #: models/focuspages/Onpage.php:60
3327
  #, php-format
3328
  msgid ""
3329
+ "To turn this task to green, go and activate the Patterns from Squirrly SEO "
3330
+ "for the post type of this Focus Page. %s With this task, we're looking to "
3331
+ "see if the SEO Patterns from Squirrly are activated for the post type of "
3332
+ "this Focus Page. %s Similar to the previous task with \"Post Type Settings "
3333
+ "Activated\". There are some cases in which this double check is necessary. "
3334
+ "%s It's for your ranking safety."
3335
  msgstr ""
3336
 
3337
+ #: models/focuspages/Onpage.php:63 view/SeoSettings/Robots.php:16
3338
+ msgid "Robots File"
3339
+ msgstr ""
3340
+
3341
+ #: models/focuspages/Onpage.php:65
3342
  #, php-format
3343
  msgid ""
3344
+ "You have a certain definition for your Robots.txt file made in Squirrly SEO "
3345
+ "or in another plugin. %s Make sure that the final version of robots.txt that "
3346
+ "gets rendered when the file is loaded is the one you had intended. %s "
3347
+ "Sometimes, other plugins or themes can interfere and ruin the output of the "
3348
+ "robots file. Sometimes it can even be that you have a robots.txt file placed "
3349
+ "on your root directory (in such case: remove that file. hard-coding things "
3350
+ "like that is bad practice!). %s To do this: look at the definition you've "
3351
+ "made inside your plugin. Then, look at the robots.txt from your site. See if "
3352
+ "the text inside these two places is identical. If it is identical, "
3353
+ "everything is Perfect!"
3354
  msgstr ""
3355
 
3356
+ #: models/focuspages/Onpage.php:78
3357
+ msgid "Go to SEO Settings"
3358
  msgstr ""
3359
 
3360
+ #: models/focuspages/Ranking.php:23
3361
+ msgid "Nofollow on external links"
3362
  msgstr ""
3363
 
3364
+ #: models/focuspages/Snippet.php:69 models/focuspages/Snippet.php:180
3365
+ #: models/focuspages/Snippet.php:202 view/Blocks/Snippet.php:181
3366
+ #: view/Blocks/Snippet.php:579 view/Blocks/Snippet.php:834
3367
+ #: view/FocusPages/Addpage.php:43 view/SeoSettings/Automation.php:80
3368
+ #: view/SeoSettings/Bulkseo.php:133 view/SeoSettings/Metas.php:152
3369
+ msgid "Title"
3370
  msgstr ""
3371
 
3372
+ #: models/focuspages/Snippet.php:72
3373
  #, php-format
3374
+ msgid ""
3375
+ "To turn this task to green, go and define a title for this page. You can "
3376
+ "easily do this by using the Snippet from Squirrly SEO. %s Make sure that you "
3377
+ "have a Title defined for your Focus Page. %s Not having a title defined is "
3378
+ "bad for both search engines and Humans. %s Why? %s It's weird for someone to "
3379
+ "try to figure out if they landed on your Pricing page, and not get a clear "
3380
+ "answer. If you have multiple pricing pages (in case your site displays "
3381
+ "multiple products) then your title should only contain the brand name of "
3382
+ "that product."
3383
+ msgstr ""
3384
+
3385
+ #: models/focuspages/Snippet.php:75 models/focuspages/Snippet.php:181
3386
+ #: models/focuspages/Snippet.php:203 view/Blocks/Snippet.php:622
3387
+ #: view/Blocks/Snippet.php:877 view/SeoSettings/Automation.php:89
3388
+ #: view/SeoSettings/Metas.php:161
3389
+ msgid "Description"
3390
  msgstr ""
3391
 
3392
+ #: models/focuspages/Snippet.php:77
3393
+ #, php-format
3394
+ msgid ""
3395
+ "To turn this task to green, go and define a Meta description for this page. "
3396
+ "You can easily do this by using the Snippet from Squirrly SEO. %s Make sure "
3397
+ "that you have a META description set up for this Focus Page. %s The meta "
3398
+ "description is very important for showing others the value they can find by "
3399
+ "clicking to go to your page. %s Think of it as an awesome ad that gets "
3400
+ "people excited enough that they visit your page after reading it. %s "
3401
+ "Sometimes, Google displays the exact META description that you create inside "
3402
+ "the search result pages. Use great descriptions for pages on your site to "
3403
+ "boost CTR (click-through rates)."
3404
+ msgstr ""
3405
+
3406
+ #: models/focuspages/Snippet.php:86
3407
+ #, php-format
3408
+ msgid ""
3409
+ "Same as with the title task. %s If a user reads the description of your page "
3410
+ "on Google, but cannot find the keyword they searched for in that text, then "
3411
+ "they'd have very low chances of actually clicking and visiting your page. %s "
3412
+ "They'd go to the next page ranked on Google for that keyword. %s Think about "
3413
+ "this: Google itself is trying more and more to display keywords in the "
3414
+ "description of the pages it bring to TOP 10. It's pretty clear they care a "
3415
+ "lot about this, because that's what people want to find on the search engine."
3416
  msgstr ""
3417
 
3418
+ #: models/focuspages/Snippet.php:89
3419
+ msgid "Open Graph - full definition"
3420
  msgstr ""
3421
 
3422
+ #: models/focuspages/Snippet.php:91
3423
+ #, php-format
3424
+ msgid ""
3425
+ "To turn this task to green, you can easily use the Snippet from Squirrly SEO "
3426
+ "to get all the definitions in place. %s With this task, we make sure that "
3427
+ "you have the full Open Graph definitions created for this Focus Page. %s "
3428
+ "There are many things which could interfere with the code, there are times "
3429
+ "when you could forget setting some of the elements up, so Squirrly SEO helps "
3430
+ "you make sure that ALL the og tags are present. %s And yes, this is relevant "
3431
+ "for your search engine position placements."
3432
  msgstr ""
3433
 
3434
+ #: models/focuspages/Snippet.php:94
3435
+ msgid "Twitter Cards - full definition"
 
3436
  msgstr ""
3437
 
3438
+ #: models/focuspages/Snippet.php:96
3439
+ #, php-format
3440
+ msgid ""
3441
+ "To turn this task to green, you can easily use the Snippet from Squirrly SEO "
3442
+ "to get all the definitions in place. %s Checking to make sure that your "
3443
+ "Twitter Cards definitions are made properly. %s Same as with the Open Graph "
3444
+ "task, Squirrly SEO makes sure to check for all the required definitions, so "
3445
+ "that you won't miss a beat."
3446
  msgstr ""
3447
 
3448
+ #: models/focuspages/Snippet.php:99
3449
+ msgid "JSON-LD definition"
3450
  msgstr ""
3451
 
3452
+ #: models/focuspages/Snippet.php:100
3453
+ #, php-format
3454
+ msgid ""
3455
+ "To turn this task to green, you can easily use the JSON-LD section inside "
3456
+ "Squirrly -> SEO Settings. %s Make sure that you complete all fields with the "
3457
+ "proper information. %s This gives important Semantic context to Google and "
3458
+ "it plays a role in determining how high your page should be placed in search "
3459
+ "rankings. %s You can validate your existing JSON-LD with: %shttps://search."
3460
+ "google.com/structured-data/testing-tool%s"
3461
  msgstr ""
3462
 
3463
+ #: models/focuspages/Snippet.php:103
3464
+ msgid "Customized"
3465
+ msgstr ""
 
 
 
 
 
 
3466
 
3467
+ #: models/focuspages/Snippet.php:104
3468
+ #, php-format
3469
+ msgid ""
3470
+ "The Snippets of your most important pages should be customized. %s Use the "
3471
+ "Snippet from Squirrly SEO to customize the meta settings, the open graph, "
3472
+ "etc. for this page. %s Since Focus Pages are the most important pages on "
3473
+ "your site, you'll want people to love the search engine listings that you "
3474
+ "build for this page. %s Therefore, you should define a custom SEO listing to "
3475
+ "improve the number of clicks you get when people DO find your page on search "
3476
+ "engines. %s NOTE: sometimes Google tries to create automated snippets and "
3477
+ "display those, but it's just an experiment they run. Most of the times, your "
3478
+ "own custom snippet will be the one that gets displayed."
3479
+ msgstr ""
3480
 
3481
  # @ squirrly-seo
3482
+ #: models/focuspages/Snippet.php:182 models/focuspages/Snippet.php:204
3483
+ #, fuzzy
3484
+ #| msgid "Images"
3485
+ msgid "Image"
3486
+ msgstr "Bilder"
3487
 
3488
+ #: models/focuspages/Social.php:44
3489
+ #, php-format
3490
+ msgid "%s Shares"
3491
  msgstr ""
3492
 
3493
+ #: models/focuspages/Social.php:45
3494
+ msgid "social share"
3495
  msgstr ""
3496
 
3497
+ #: models/focuspages/Social.php:47
 
3498
  #, php-format
3499
  msgid ""
3500
+ "This task only tracks shares from trackable sources. %s Twitter and LinkedIN "
3501
+ "share counts are no longer available. %s Of course, for Twitter you can "
3502
+ "always pay Twitter directly for API access, in which case we could give you "
3503
+ "a guide on how to integrate your Twitter API with our Focus Pages audit "
3504
+ "services. %s %shttps://developer.twitter.com/en/pricing/search-fullarchive%s"
 
 
 
 
 
3505
  msgstr ""
3506
 
3507
+ #: models/focuspages/Social.php:56
3508
+ msgid "Go to Social Media Settings"
3509
  msgstr ""
3510
 
3511
+ #: models/focuspages/Strategy.php:60
3512
+ msgid "Add keyword to Briefcase"
 
 
 
3513
  msgstr ""
3514
 
3515
  # @ squirrly-seo
3516
+ #: models/focuspages/Strategy.php:61
3517
+ #, fuzzy
3518
+ #| msgid "Keywords:"
3519
+ msgid "keywords"
3520
+ msgstr "Schlüsselwörter:"
3521
+
3522
+ #: models/focuspages/Strategy.php:62
3523
  #, php-format
3524
  msgid ""
3525
+ "Go add a keyword to your Briefcase. %s The Briefcase is the command center "
3526
+ "for your SEO operations. Manage your keywords in briefcase, so that you'll "
3527
+ "always have quick access to them. You'll always know what your SEO Strategy "
3528
+ "is all about. %s Plus, adding keywords to Briefcase will make it very easy "
3529
+ "for you to collaborate with other people from your team, freelancers, "
3530
+ "agencies or partners. %s Never lose the amazing keywords you find through "
3531
+ "the Squirrly SEO Keyword Research tool."
3532
  msgstr ""
 
 
3533
 
3534
+ #: models/focuspages/Strategy.php:65
3535
+ msgid "Add SEO Context"
3536
+ msgstr ""
 
3537
 
3538
+ #: models/focuspages/Strategy.php:68
3539
+ #, php-format
3540
+ msgid ""
3541
+ "Optimize to %s for a secondary keyword. %s Squirrly SEO's Live Assistant "
3542
+ "allows you to optimize for multiple keywords that you have placed in your "
3543
+ "Briefcase. %s Use a couple of additional keywords for your Focus Page which "
3544
+ "help Google understand the exact topic and context of your page. %s If you "
3545
+ "added the keywords 'political party' to 'black panther', you'd make a clear "
3546
+ "hint to Google that your page is about the Black Panther political party, "
3547
+ "not Black Panther, the Marvel Movie. %s Or add 'places to eat' to a page "
3548
+ "about your Local Restaurant in San Diego. That will give clearer context to "
3549
+ "Google that your page really is about a restaurant where people can dine."
3550
  msgstr ""
 
 
3551
 
3552
+ #: models/focuspages/Strategy.php:72
3553
+ msgid "Labels Exist"
3554
+ msgstr ""
 
3555
 
3556
+ #: models/focuspages/Strategy.php:73
3557
+ msgid "labels"
3558
+ msgstr ""
 
3559
 
3560
+ #: models/focuspages/Strategy.php:74
3561
+ #, php-format
3562
+ msgid ""
3563
+ "To turn this task to green, go and add a label to the keyword that you've "
3564
+ "used as main keyword for this Focus Page. %s Make sure that you keep "
3565
+ "creating new labels as you're finding more keywords to target with your "
3566
+ "website. %s If you're unsure regarding keyword research, go to the Best "
3567
+ "Practices section of Focus Pages. %s Organize all the Keywords that you plan "
3568
+ "to use for your website with Briefcase Labels. %s This task helps you make "
3569
+ "sure that the main keyword for this Focus Page has been organized clearly "
3570
+ "inside your SEO Strategy. That's what Briefcase Labels are all about."
3571
  msgstr ""
3572
 
3573
+ #: models/focuspages/Strategy.php:89
3574
+ msgid "Manage Strategy"
3575
+ msgstr ""
3576
 
3577
+ #: models/focuspages/Strategy.php:140
3578
+ msgid "Add a secondary keyword in Squirrly Live Assistant"
3579
  msgstr ""
3580
 
3581
+ #: models/focuspages/Traffic.php:55
3582
+ #, php-format
3583
+ msgid "Below %s Bounce Rate"
3584
+ msgstr ""
3585
 
3586
+ #: models/focuspages/Traffic.php:56
3587
+ msgid "bounce rate"
3588
+ msgstr ""
 
3589
 
3590
+ #: models/focuspages/Traffic.php:57
3591
+ #, php-format
3592
+ msgid ""
3593
+ "Make sure this number is below %s %s Why? %s A high bounce rate means that "
3594
+ "your users just click on your search listing, visit the page and then decide "
3595
+ "they've seen enough and bounce off to another page on the web. %s This is, "
3596
+ "for Google, an indicator of the quality of the search result it displayed. "
3597
+ "And if many of your users bounce off your pages, it means (to Google) that "
3598
+ "your page is not worth displaying in search results, because it has low "
3599
+ "performance with the user groups it sends your way. %s Easy way to complete "
3600
+ "this task: give users pages to click and send them to other pages from your "
3601
+ "site."
3602
+ msgstr ""
3603
+
3604
+ #: models/focuspages/Traffic.php:60
3605
+ #, php-format
3606
+ msgid "Time on page is %s minutes"
3607
+ msgstr ""
3608
 
3609
+ #: models/focuspages/Traffic.php:61
3610
+ msgid "minutes"
3611
+ msgstr ""
 
3612
 
3613
+ #: models/focuspages/Traffic.php:63
3614
+ #, php-format
3615
+ msgid ""
3616
+ "Make sure that visitors spend on average at least %s minutes on your site. "
3617
+ "%s Get an average time on page of minimum %s minutes for this focus page. "
3618
+ "You can do this by editing the content and making it more appealing to "
3619
+ "visitors. %s In the Best Practices section you'll find a plugin for "
3620
+ "WordPress that will help your Google Analytics tracker to track the real "
3621
+ "time on page for people. Sometimes, Google Analytics tracks this lower than "
3622
+ "it should. %s If your visitors don't spend at 2 minutes on your Focus Page, "
3623
+ "it can mean that the page is not important enough for them, or that the "
3624
+ "content from the page is boring, or hard to read, or the page just loads too "
3625
+ "slow."
3626
+ msgstr ""
3627
+
3628
+ #: models/focuspages/Traffic.php:66
3629
+ #, php-format
3630
+ msgid "%s visitors / day / page"
3631
+ msgstr ""
3632
 
3633
+ #: models/focuspages/Traffic.php:67
3634
+ msgid "unique views"
3635
+ msgstr ""
 
3636
 
3637
+ #: models/focuspages/Traffic.php:68
3638
+ #, php-format
3639
+ msgid ""
3640
+ "For this task, we're looking at unique page views from your Google "
3641
+ "Analytics. %s If you don't get %s visitors / day / page, then this Focus "
3642
+ "Page is not yet popular enough on your site. %s You should make sure that "
3643
+ "more people end up visiting it."
3644
+ msgstr ""
3645
 
3646
  # @ squirrly-seo
3647
+ #: models/focuspages/Traffic.php:71
3648
+ #, fuzzy
3649
+ #| msgid "The code for Google Analytics is incorrect."
3650
+ msgid "Just one Google Analytics tracking code"
3651
+ msgstr "Der Code für Google Analytics ist falsch."
3652
 
3653
+ #: models/focuspages/Traffic.php:72
3654
+ #, php-format
3655
+ msgid ""
3656
+ "We've seen many sites where there were multiple google analytics codes "
3657
+ "placed by different employees, themes or plugins. %s With this check, we're "
3658
+ "helping you make sure that your tracker is setup properly and that there "
3659
+ "will be no errors with your Google Analytics account. %s To turn this green, "
3660
+ "you'll have to investigate your theme, custom code that you may have placed "
3661
+ "in your theme, other plugins, header settings. Once you have a clear view of "
3662
+ "all the tracking codes, make sure that only one remains and that the one "
3663
+ "code is the one linked to your Google Analytics account. %s These problems "
3664
+ "happen more often than you would think."
3665
  msgstr ""
3666
 
3667
+ #: models/services/Robots.php:13
3668
+ msgid "Squirrly SEO Robots"
3669
+ msgstr ""
 
3670
 
3671
+ #: models/services/Robots.php:16
3672
+ msgid ""
3673
+ "Your blog is not public. Please see Site Visibility on Settings > Reading."
3674
+ msgstr ""
3675
 
3676
+ #: models/services/Robots.php:32
3677
+ msgid "No Squirrly SEO Robots found."
3678
  msgstr ""
3679
 
3680
+ #: view/Assistant/Assistant.php:12
3681
+ msgid "Optimize with Squirrly Live Assistant"
3682
  msgstr ""
3683
 
3684
+ #: view/Assistant/Assistant.php:13
3685
+ msgid ""
3686
+ "Use Squirrly to optimize the content for your posts, pages, products, etc."
3687
+ msgstr ""
3688
 
3689
+ #: view/Assistant/Assistant.php:25
3690
+ msgid "Demo Post"
3691
  msgstr ""
3692
 
3693
  # @ squirrly-seo
3694
+ #: view/Assistant/Assistant.php:34
3695
+ #, fuzzy
3696
+ #| msgid "+ Add keyword"
3697
+ msgid "Add New"
3698
+ msgstr "Fügen Sie ein anderes Schlüsselwort ein"
3699
 
3700
  # @ squirrly-seo
3701
+ #: view/Assistant/Settings.php:17
3702
+ #, fuzzy
3703
+ #| msgid "Save settings"
3704
+ msgid "Live Assistant Settings"
3705
+ msgstr "Einstellungen speichern"
3706
+
3707
+ #: view/Assistant/Settings.php:27 view/Audits/Settings.php:31
3708
+ #: view/Ranking/Settings.php:31 view/SeoSettings/Automation.php:39
3709
+ #: view/SeoSettings/Jsonld.php:37 view/SeoSettings/Metas.php:29
3710
+ #: view/SeoSettings/Sitemap.php:41 view/SeoSettings/Social.php:28
3711
+ #: view/SeoSettings/Tracking.php:37 view/SeoSettings/Webmaster.php:37
3712
+ msgid "Show Advanced Options"
3713
+ msgstr ""
3714
+
3715
+ #: view/Assistant/Settings.php:28 view/Audits/Settings.php:32
3716
+ #: view/Ranking/Settings.php:32 view/SeoSettings/Automation.php:40
3717
+ #: view/SeoSettings/Jsonld.php:38 view/SeoSettings/Metas.php:30
3718
+ #: view/SeoSettings/Sitemap.php:42 view/SeoSettings/Social.php:29
3719
+ #: view/SeoSettings/Tracking.php:38 view/SeoSettings/Webmaster.php:38
3720
+ msgid "Hide Advanced Options"
3721
+ msgstr ""
3722
 
3723
  # @ squirrly-seo
3724
+ #: view/Assistant/Settings.php:42
3725
+ #, fuzzy
3726
+ #| msgid "Squirrly Options"
3727
+ msgid "Squirrly Tooltips"
3728
+ msgstr "Squirrly Optionen"
3729
 
3730
+ #: view/Assistant/Settings.php:43
3731
  #, php-format
3732
+ msgid ""
3733
+ "Show %sSquirrly Tooltips%s when posting a new article (e.g. \"Enter a keyword"
3734
+ "\")."
3735
  msgstr ""
3736
 
3737
+ #: view/Assistant/Settings.php:53
3738
+ msgid "Download Remote Images"
3739
  msgstr ""
3740
 
3741
+ #: view/Assistant/Settings.php:54
3742
+ #, php-format
3743
+ msgid "Download %sremote images%s in your %sMedia Library%s for the new posts."
3744
  msgstr ""
3745
 
3746
+ #: view/Assistant/Settings.php:55
3747
  msgid ""
3748
+ "Prevent from losing the images you use in your articles in case the remote "
3749
+ "images are deleted."
3750
  msgstr ""
 
 
3751
 
3752
+ #: view/Assistant/Settings.php:65
3753
+ msgid "Send Optimization On Save"
3754
  msgstr ""
3755
 
3756
+ #: view/Assistant/Settings.php:66
3757
+ msgid ""
3758
+ "Send optimization data to Squirrly Cloud when the post is saved (don't use "
3759
+ "cron)"
3760
  msgstr ""
3761
 
3762
+ #: view/Assistant/Settings.php:67
3763
+ msgid "Use this option if your WordPress cron is not working properly."
3764
  msgstr ""
3765
 
3766
+ # @ squirrly-seo
3767
+ #: view/Assistant/Settings.php:77
3768
+ #, fuzzy
3769
+ #| msgid "Show only Copyright Free images"
3770
+ msgid "Copyright Free Images"
3771
+ msgstr "Nur urheberrechtfreie Bilder zeigen"
3772
+
3773
+ #: view/Assistant/Settings.php:78
3774
  #, php-format
3775
+ msgid "Search %sCopyright Free Images%s in Squirrly Live Assistant."
3776
  msgstr ""
3777
 
3778
+ #: view/Assistant/Settings.php:88
3779
+ msgid "Optimized Version Of Live Assistant"
 
3780
  msgstr ""
3781
 
3782
+ #: view/Assistant/Settings.php:89
3783
  #, php-format
3784
+ msgid ""
3785
+ "Use %sthe NEW version of the SEO Live Assistant%s with Google and Human "
3786
+ "Friendly Analysis."
3787
  msgstr ""
3788
 
3789
+ #: view/Assistant/Settings.php:97
3790
+ msgid "Places where you do NOT want Squirrly Live Assistant to load"
 
3791
  msgstr ""
3792
 
3793
+ #: view/Assistant/Settings.php:99
3794
+ msgid ""
3795
+ "Don't select anything if you wish Squirrly Live Assistant to load for all "
3796
+ "post types."
3797
  msgstr ""
3798
 
3799
+ #: view/Assistant/Settings.php:105
3800
+ msgid "Exclusions"
3801
  msgstr ""
3802
 
3803
+ #: view/Assistant/Settings.php:106
3804
+ msgid "Select places where you do NOT want Squirrly Live Assistant to load."
 
3805
  msgstr ""
3806
 
3807
+ #: view/Assistant/Settings.php:107
3808
+ msgid "Hold Control key to select multiple places"
3809
  msgstr ""
3810
 
3811
+ # @ squirrly-seo
3812
+ #: view/Assistant/Settings.php:132 view/Audits/Settings.php:60
3813
+ #: view/Ranking/Settings.php:175 view/SeoSettings/Automation.php:412
3814
+ #: view/SeoSettings/Automation.php:560 view/SeoSettings/Backup.php:175
3815
+ #: view/SeoSettings/Favicon.php:95 view/SeoSettings/Jsonld.php:184
3816
+ #: view/SeoSettings/Metas.php:224 view/SeoSettings/Robots.php:68
3817
+ #: view/SeoSettings/Sitemap.php:301 view/SeoSettings/Social.php:368
3818
+ #: view/SeoSettings/Tracking.php:109 view/SeoSettings/Webmaster.php:100
3819
+ #, fuzzy
3820
+ #| msgid "Save settings"
3821
+ msgid "Save Settings"
3822
+ msgstr "Einstellungen speichern"
3823
+
3824
+ #: view/Audits/Audits.php:13
3825
+ msgid "Audits"
3826
  msgstr ""
3827
 
3828
+ #: view/Audits/Audits.php:14
3829
+ msgid ""
3830
+ "Verifies the online presence of your website by knowing how your website is "
3831
+ "performing in terms of Blogging, SEO, Social, Authority, Links, and Traffic"
3832
+ msgstr ""
3833
+
3834
+ #: view/Audits/Audits.php:44
3835
+ msgid "Score:"
3836
  msgstr ""
3837
 
3838
+ #: view/Audits/Audits.php:58
3839
  #, php-format
3840
+ msgid "The audit score increased by %s since %s"
3841
  msgstr ""
3842
 
3843
+ #: view/Audits/Audits.php:60
3844
  #, php-format
3845
+ msgid "The audit score went down by %s since %s"
3846
  msgstr ""
3847
 
3848
+ #: view/Audits/Audits.php:69
3849
+ msgid "Incapsula Protection Error"
3850
  msgstr ""
3851
 
3852
+ #: view/Audits/Audits.php:72
3853
+ msgid "Your blog returns an error"
3854
  msgstr ""
3855
 
3856
+ #: view/Audits/Audits.php:89
3857
+ msgid "Go to all audit panel"
3858
  msgstr ""
3859
 
3860
+ #: view/Audits/Audits.php:101 view/Blocks/Audits.php:15
3861
+ msgid "Audits Score"
3862
  msgstr ""
3863
 
3864
+ #: view/Audits/Audits.php:102
3865
+ #, php-format
3866
+ msgid "last %s audits"
3867
  msgstr ""
3868
 
3869
+ #: view/Audits/Audits.php:108 view/Audits/Audits.php:150
3870
+ #: view/Blocks/Audits.php:21 view/Blocks/KRHistory.php:17
3871
+ #: view/Ranking/Rankings.php:206 view/Research/History.php:27
3872
+ msgid "Date"
3873
  msgstr ""
3874
 
3875
+ #: view/Audits/Audits.php:109 view/Blocks/Audits.php:22
3876
+ msgid "On-Page"
 
3877
  msgstr ""
3878
 
3879
+ #: view/Audits/Audits.php:110 view/Blocks/Audits.php:23
3880
+ msgid "Off-Page"
3881
  msgstr ""
3882
 
3883
+ #: view/Audits/Audits.php:129 view/Blocks/Audits.php:42
3884
+ msgid "No data yet"
 
3885
  msgstr ""
3886
 
3887
+ # @ squirrly-seo
3888
+ #: view/Audits/Audits.php:147
3889
+ #, fuzzy
3890
+ #| msgid "No"
3891
+ msgid "No."
3892
+ msgstr "Nein"
3893
+
3894
+ #: view/Audits/Audits.php:148
3895
+ msgid "On-Page Score"
3896
  msgstr ""
3897
 
3898
+ #: view/Audits/Audits.php:149
3899
+ msgid "Off-Page Score"
3900
  msgstr ""
3901
 
3902
+ #: view/Audits/Audits.php:151 view/Audits/Audits.php:186
3903
+ #: view/Blocks/Audits.php:62
3904
+ msgid "Tasks"
3905
  msgstr ""
3906
 
3907
+ #: view/Audits/Audits.php:174
3908
+ msgid "tasks found"
 
3909
  msgstr ""
3910
 
3911
+ #: view/Audits/Audits.php:187 view/Blocks/Audits.php:63
3912
+ msgid "last issues found"
3913
  msgstr ""
3914
 
3915
+ # @ squirrly-seo
3916
+ #: view/Audits/Audits.php:203 view/Blocks/Audits.php:77
3917
+ #, fuzzy
3918
+ #| msgid "date"
3919
+ msgid "Update on"
3920
+ msgstr "Datum"
3921
+
3922
+ #: view/Audits/Audits.php:210
3923
  #, php-format
3924
+ msgid "Learn how to improve your SEO Audit score over time %sClick Here%s"
3925
  msgstr ""
3926
 
3927
+ #: view/Audits/Audits.php:216
3928
+ msgid "Welcome to Squirrly SEO Audits"
3929
  msgstr ""
3930
 
3931
+ #: view/Audits/Audits.php:217 view/Blocks/Audits.php:84
3932
+ msgid "The SEO Audit is generated once every week"
 
3933
  msgstr ""
3934
 
3935
+ #: view/Audits/Audits.php:218 view/Blocks/Audits.php:85
3936
+ msgid "Until the audit is ready, try the Focus Pages section"
3937
  msgstr ""
3938
 
3939
+ #: view/Audits/Audits.php:222 view/Blocks/Audits.php:89
3940
+ msgid "Go to Focus Pages"
3941
  msgstr ""
3942
 
3943
+ # @ squirrly-seo
3944
+ #: view/Audits/Settings.php:21
3945
+ #, fuzzy
3946
+ #| msgid "Squirrly settings"
3947
+ msgid "Audit Settings"
3948
+ msgstr "Squirrly Einstellungen"
3949
+
3950
+ # @ squirrly-seo
3951
+ #: view/Audits/Settings.php:43
3952
+ #, fuzzy
3953
+ #| msgid "Your E-mail:"
3954
+ msgid "Audit Email"
3955
+ msgstr "Ihre E-Mail Adresse:"
3956
 
3957
+ #: view/Audits/Settings.php:44
3958
+ msgid "Enter the email address on which you want to receive the weekly audits."
3959
  msgstr ""
3960
 
3961
+ #: view/Blocks/Assistant.php:8
3962
+ msgid "Knowledge Base"
3963
  msgstr ""
3964
 
3965
+ #: view/Blocks/Assistant.php:23
3966
+ msgid "Advanced SEO Settings"
3967
  msgstr ""
3968
 
3969
+ #: view/Blocks/Assistant.php:30 view/SeoSettings/Metas.php:65
3970
+ #, fuzzy
3971
+ #| msgid "Optimize for Keyword"
3972
+ msgid "Optimize Keywords"
3973
+ msgstr "Schlüsselwort optimieren"
3974
+
3975
+ #: view/Blocks/Assistant.php:31 view/SeoSettings/Metas.php:66
3976
+ msgid ""
3977
+ "Add the Keyword meta in the page header. You can customize it using the Bulk "
3978
+ "SEO and Squirrly SEO Snippet."
3979
  msgstr ""
3980
 
3981
+ #: view/Blocks/Assistant.php:32 view/SeoSettings/Metas.php:67
3982
+ msgid ""
3983
+ "This meta is not mandatory for Google but other search engines still use it "
3984
+ "for ranking"
3985
  msgstr ""
3986
 
3987
+ #: view/Blocks/Audits.php:7 view/Blocks/Audits.php:55
3988
+ msgid "See Audits"
 
3989
  msgstr ""
3990
 
3991
+ #: view/Blocks/Audits.php:16
3992
+ msgid "last 4 audits"
3993
  msgstr ""
3994
 
3995
+ #: view/Blocks/FocusPages.php:7
3996
+ msgid "See Focus Pages"
 
3997
  msgstr ""
3998
 
3999
+ #: view/Blocks/FocusPages.php:16 view/FocusPages/Pagelist.php:65
4000
+ msgid "Permalink"
4001
  msgstr ""
4002
 
4003
+ #: view/Blocks/FocusPages.php:17 view/FocusPages/FocusPageRow.php:30
4004
+ msgid "Last audited"
4005
  msgstr ""
4006
 
4007
+ #: view/Blocks/FocusPages.php:47
4008
+ msgid "Check Focus Page"
4009
  msgstr ""
4010
 
4011
+ #: view/Blocks/FocusPages.php:59 view/FocusPages/Pagelist.php:105
4012
+ msgid "To get started with managing the focus pages"
4013
  msgstr ""
4014
 
4015
+ #: view/Blocks/FocusPages.php:63 view/FocusPages/Pagelist.php:109
4016
+ msgid "Add new page"
4017
  msgstr ""
4018
 
4019
+ #: view/Blocks/FocusPages.php:69 view/FocusPages/Pagelist.php:115
4020
+ msgid "Then set a page as focus"
4021
+ msgstr ""
 
4022
 
4023
+ #: view/Blocks/Jorney.php:10
4024
+ msgid "Your 14 Days Journey To Better Ranking"
4025
+ msgstr ""
 
4026
 
4027
+ #: view/Blocks/Jorney.php:17 view/Blocks/Jorney.php:23
4028
+ msgid "Day"
4029
+ msgstr ""
 
4030
 
4031
+ #: view/Blocks/Jorney.php:23
4032
+ msgid "Open the SEO recipe for today"
4033
  msgstr ""
4034
 
4035
+ #: view/Blocks/Jorney.php:27 view/FocusPages/Addpage.php:12
4036
+ msgid "Add a page in Focus Pages"
4037
+ msgstr ""
 
4038
 
4039
+ #: view/Blocks/KRFound.php:6
4040
+ msgid "Suggested Keywords"
4041
  msgstr ""
4042
 
4043
+ #: view/Blocks/KRFound.php:16 view/Blocks/KRHistory.php:16
4044
+ #: view/Ranking/Rankings.php:198 view/Research/Briefcase.php:112
4045
+ #: view/Research/History.php:26 view/Research/Research.php:159
4046
+ #: view/Research/Suggested.php:24
4047
+ msgid "Country"
4048
+ msgstr ""
4049
 
4050
+ #: view/Blocks/KRFound.php:16 view/Blocks/KRHistory.php:16
4051
+ #: view/Research/History.php:26 view/Research/Research.php:159
4052
+ #: view/Research/Suggested.php:24
4053
+ msgid "Co"
4054
+ msgstr ""
4055
 
4056
+ #: view/Blocks/KRFound.php:18 view/Blocks/KRFound.php:19
4057
+ #: view/Blocks/KRFound.php:59 view/Research/Briefcase.php:117
4058
+ #: view/Research/HistoryDetails.php:16 view/Research/HistoryDetails.php:18
4059
+ #: view/Research/Research.php:161 view/Research/Research.php:162
4060
+ #: view/Research/Suggested.php:26 view/Research/Suggested.php:27
4061
+ #: view/Research/Suggested.php:76
4062
+ msgid "Competition"
4063
+ msgstr ""
4064
 
4065
+ #: view/Blocks/KRFound.php:22 view/Blocks/KRFound.php:64
4066
+ #: view/Research/HistoryDetails.php:12 view/Research/Research.php:165
4067
+ #: view/Research/Suggested.php:30 view/Research/Suggested.php:81
4068
+ msgid "SEO Search Volume"
4069
+ msgstr ""
4070
 
4071
+ #: view/Blocks/KRFound.php:23 view/Research/HistoryDetails.php:14
4072
+ #: view/Research/Suggested.php:31
4073
+ msgid "SV"
 
4074
  msgstr ""
 
 
4075
 
4076
+ #: view/Blocks/KRFound.php:26 view/Blocks/KRFound.php:69
4077
+ #: view/Research/Briefcase.php:129 view/Research/HistoryDetails.php:8
4078
+ #: view/Research/Research.php:169 view/Research/Suggested.php:34
4079
+ #: view/Research/Suggested.php:86
4080
+ msgid "Recent discussions"
4081
+ msgstr ""
4082
 
4083
+ #: view/Blocks/KRFound.php:27 view/Research/HistoryDetails.php:10
4084
+ #: view/Research/Research.php:170 view/Research/Suggested.php:35
4085
+ #, fuzzy
4086
+ #| msgid "Recent discussions:"
4087
+ msgid "Discussion"
4088
+ msgstr "Bisherige Diskussionen:"
4089
 
4090
+ #: view/Blocks/KRFound.php:30 view/Blocks/KRFound.php:31
4091
+ #: view/Blocks/KRFound.php:74 view/Research/Briefcase.php:135
4092
+ #: view/Research/HistoryDetails.php:20 view/Research/Research.php:173
4093
+ #: view/Research/Suggested.php:38
4094
+ msgid "Trending"
4095
  msgstr ""
4096
 
4097
+ #: view/Blocks/KRFound.php:59 view/Blocks/KRFound.php:64
4098
+ #: view/Blocks/KRFound.php:69 view/Blocks/KRFound.php:74
4099
+ #: view/Research/Briefcase.php:118 view/Research/Briefcase.php:124
4100
+ #: view/Research/Briefcase.php:130 view/Research/Suggested.php:76
4101
+ #: view/Research/Suggested.php:81 view/Research/Suggested.php:86
4102
+ msgid "-"
4103
  msgstr ""
4104
 
4105
+ #: view/Blocks/KRFound.php:91
4106
+ msgid "Once a week, Squirrly checks all the keywords from your briefcase."
4107
  msgstr ""
4108
 
4109
+ #: view/Blocks/KRFound.php:92
4110
+ msgid "If it finds better keywords, they will be listed here"
4111
  msgstr ""
4112
 
4113
+ #: view/Blocks/KRFound.php:93 view/Research/Suggested.php:150
4114
+ msgid "Until then, add keywords in Briefcase"
4115
  msgstr ""
4116
 
4117
+ #: view/Blocks/KRFound.php:97 view/Blocks/SLASearch.php:22
4118
+ #: view/Ranking/Gscsync.php:94 view/Research/Suggested.php:154
4119
+ msgid "Go to Briefcase"
4120
  msgstr ""
4121
 
4122
+ #: view/Blocks/KRHistory.php:5 view/Research/Research.php:14
4123
+ msgid "Keyword Research"
4124
  msgstr ""
4125
 
4126
+ #: view/Blocks/KRHistory.php:6
4127
+ msgid "See Research History"
4128
  msgstr ""
4129
 
4130
+ #: view/Blocks/KRHistory.php:39 view/Research/History.php:51
4131
+ msgid "See your research results and compare them over time"
4132
  msgstr ""
4133
 
4134
+ # @ squirrly-seo
4135
+ #: view/Blocks/Login.php:10 view/Blocks/Login.php:28
4136
+ msgid "Email:"
4137
+ msgstr "Ihre E-Mail Adresse:"
 
 
4138
 
4139
+ # @ squirrly-seo
4140
+ #: view/Blocks/Login.php:14
4141
+ msgid "Password:"
4142
+ msgstr "Passwort:"
4143
 
4144
+ # @ squirrly-seo
4145
+ #: view/Blocks/Login.php:18
4146
+ msgid "Register to Squirrly.co"
4147
+ msgstr "Bei Squirrly.co registrieren"
4148
+
4149
+ # @ squirrly-seo
4150
+ #: view/Blocks/Login.php:19
4151
+ msgid "Lost password?"
4152
+ msgstr "Passwort vergessen?"
4153
+
4154
+ # @ squirrly-seo
4155
+ #: view/Blocks/Login.php:19
4156
+ msgid "Lost password"
4157
+ msgstr "Passwort vergessen"
4158
+
4159
+ # @ squirrly-seo
4160
+ #: view/Blocks/Login.php:21
4161
+ msgid "Login"
4162
+ msgstr "Login"
4163
+
4164
+ #: view/Blocks/Login.php:35
4165
+ msgid "I already have an account"
4166
  msgstr ""
4167
 
4168
+ #: view/Blocks/Login.php:38
4169
  #, php-format
4170
+ msgid "I Agree with the Squirrly %sTerms of Use%s and %sPrivacy Policy%s"
4171
  msgstr ""
4172
 
4173
+ #: view/Blocks/Login.php:40
4174
+ msgid "Sign Up"
4175
+ msgstr "Anmelden"
4176
+
4177
+ #: view/Blocks/Ranks.php:6 view/Ranking/Rankings.php:19
4178
+ msgid "Google Rankings"
4179
  msgstr ""
4180
 
4181
+ #: view/Blocks/Ranks.php:7 view/Blocks/Ranks.php:77
4182
+ msgid "See Rankings"
4183
  msgstr ""
4184
 
4185
+ #: view/Blocks/Ranks.php:19 view/Blocks/Ranks.php:84
4186
+ msgid "Google Ranks"
4187
  msgstr ""
4188
 
4189
+ #: view/Blocks/Ranks.php:20 view/Blocks/Ranks.php:85
4190
+ msgid "last 7 days"
4191
  msgstr ""
4192
 
4193
+ #: view/Blocks/Ranks.php:44
4194
+ msgid "Today Average"
4195
  msgstr ""
4196
 
4197
+ #: view/Blocks/Ranks.php:67
4198
+ #, php-format
4199
+ msgid "The average rank went down with %s since %s"
4200
  msgstr ""
4201
 
4202
+ #: view/Blocks/Ranks.php:69
4203
+ #, php-format
4204
+ msgid "The average rank went up with %s since %s"
4205
  msgstr ""
4206
 
4207
+ #: view/Blocks/Ranks.php:97 view/SeoSettings/Metas.php:170
4208
+ msgid "Keywords"
4209
  msgstr ""
4210
 
4211
+ # @ squirrly-seo
4212
+ #: view/Blocks/Ranks.php:98
4213
+ #, fuzzy
4214
+ #| msgid "Keywords:"
4215
+ msgid "keywords found"
4216
+ msgstr "Schlüsselwörter:"
4217
+
4218
+ #: view/Blocks/Ranks.php:121 view/Ranking/Rankings.php:303
4219
+ msgid "To see how your website is ranking on Google"
4220
  msgstr ""
4221
 
4222
+ #: view/Blocks/Ranks.php:125 view/Ranking/Rankings.php:307
4223
+ msgid "Add keywords in Briefcase"
 
 
4224
  msgstr ""
4225
 
4226
+ #: view/Blocks/Ranks.php:131 view/Ranking/Rankings.php:313
4227
+ msgid "Then send keywords to Rank Checker"
4228
  msgstr ""
4229
 
4230
+ #: view/Blocks/SEOIssues.php:5
4231
+ msgid "SEO Issues"
4232
  msgstr ""
4233
 
4234
+ #: view/Blocks/SEOIssues.php:10
4235
+ msgid "Run new test"
4236
  msgstr ""
4237
 
4238
+ #: view/Blocks/SEOIssues.php:23
4239
+ msgid "Problem"
 
4240
  msgstr ""
4241
 
4242
+ #: view/Blocks/SEOIssues.php:24
4243
+ msgid "Solution"
4244
  msgstr ""
4245
 
4246
  # @ squirrly-seo
4247
+ #: view/Blocks/SEOIssues.php:56
4248
+ #, fuzzy
4249
+ #| msgid "Send Question"
4250
+ msgid "See solution"
4251
+ msgstr "Senden Sie Ihre Frage"
4252
 
4253
+ #: view/Blocks/SEOIssues.php:67
4254
+ msgid "Fix It"
4255
  msgstr ""
4256
 
4257
+ #: view/Blocks/SEOIssues.php:88
4258
+ msgid "No SEO major issues found in your website"
4259
  msgstr ""
4260
 
4261
+ #: view/Blocks/SEOIssues.php:90
4262
+ msgid "Now, check the SEO for each page using Bulk SEO"
4263
  msgstr ""
4264
 
4265
+ #: view/Blocks/SEOIssues.php:94
4266
+ msgid "Go to Bulk SEO"
 
4267
  msgstr ""
4268
 
4269
+ #: view/Blocks/SLASearch.php:2
4270
+ msgid "Waiting for your editor to load .. "
4271
  msgstr ""
4272
 
4273
+ #: view/Blocks/SLASearch.php:3
4274
+ msgid ""
4275
+ "Javascript is disabled! You need to activate the javascript in order to use "
4276
+ "Squirrly SEO."
4277
  msgstr ""
4278
 
4279
+ #: view/Blocks/SLASearch.php:8
4280
+ msgid "Click to Close Squirrly Live Assistant"
4281
  msgstr ""
4282
 
4283
+ #: view/Blocks/SLASearch.php:9
4284
+ msgid "Click to Minimize Box"
4285
  msgstr ""
4286
 
4287
+ #: view/Blocks/SLASearch.php:10
4288
+ msgid "Click to Maximize Box"
4289
  msgstr ""
4290
 
4291
+ #: view/Blocks/SLASearch.php:11 view/Blocks/SLASearch.php:17
4292
+ msgid "Squirrly Briefcase"
 
4293
  msgstr ""
4294
 
4295
+ #: view/Blocks/SLASearch.php:18
4296
+ msgid "Refresh the keywords"
4297
  msgstr ""
4298
 
4299
+ #: view/Blocks/SLASearch.php:20
4300
+ msgid "Search in Briefcase ..."
 
 
4301
  msgstr ""
 
 
4302
 
4303
+ # @ squirrly-seo
4304
+ #: view/Blocks/SLASearch.php:34
4305
+ msgid "Enter a keyword"
4306
+ msgstr "Ein Schlüsselwort eingeben"
 
 
 
4307
 
4308
+ # @ squirrly-seo
4309
+ #: view/Blocks/SLASearch.php:35
4310
+ msgid "for Squirrly Live SEO optimization"
4311
+ msgstr "Live-SEO-Optimierung für Squirrly"
 
 
 
 
4312
 
4313
+ # @ squirrly-seo
4314
+ #: view/Blocks/SLASearch.php:38
4315
+ #, fuzzy
4316
+ #| msgid "Enter even more keywords."
4317
+ msgid "Type in your keyword..."
4318
+ msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
4319
 
4320
+ # @ squirrly-seo
4321
+ #: view/Blocks/SLASearch.php:50
4322
+ msgid "Use this keyword"
4323
+ msgstr "Dieses Schlüsselwort verwenden"
4324
 
4325
+ # @ squirrly-seo
4326
+ #: view/Blocks/SLASearch.php:55
4327
+ #, fuzzy
4328
+ #| msgid "Do more research!"
4329
+ msgid "Do keyword research!"
4330
+ msgstr "Erweiterte Suche!"
4331
 
4332
+ # @ squirrly-seo
4333
+ #: view/Blocks/SLASearch.php:62
4334
+ msgid "Images"
4335
+ msgstr "Bilder"
4336
 
4337
+ # @ squirrly-seo
4338
+ #: view/Blocks/SLASearch.php:63
4339
+ msgid "Twitter"
4340
+ msgstr "Twitter"
4341
 
4342
+ # @ squirrly-seo
4343
+ #: view/Blocks/SLASearch.php:64
4344
+ msgid "Wiki"
4345
+ msgstr "Wiki"
4346
 
4347
+ # @ squirrly-seo
4348
+ #: view/Blocks/SLASearch.php:65
4349
+ msgid "Blogs"
4350
+ msgstr "Blogs"
4351
 
4352
+ # @ squirrly-seo
4353
+ #: view/Blocks/SLASearch.php:66
4354
+ msgid "My articles"
4355
+ msgstr "Meine Artikel"
4356
+
4357
+ # @ squirrly-seo
4358
+ #: view/Blocks/SLASearch.php:74
4359
+ msgid "Show only Copyright Free images"
4360
+ msgstr "Nur urheberrechtfreie Bilder zeigen"
4361
 
4362
+ #: view/Blocks/SLASeo.php:3
4363
+ msgid "Squirrly Live Assistant"
4364
  msgstr ""
4365
 
4366
+ #: view/Blocks/SLASeo.php:6
4367
+ msgid "Update"
 
 
 
4368
  msgstr ""
4369
 
4370
+ #: view/Blocks/SLASeo.php:9
4371
+ msgid "Split Window"
 
4372
  msgstr ""
4373
 
4374
+ #: view/Blocks/Snippet.php:90
4375
+ msgid "Meta Tags"
4376
  msgstr ""
4377
 
4378
+ #: view/Blocks/Snippet.php:94
4379
+ msgid "JSON-LD"
 
 
4380
  msgstr ""
4381
 
4382
+ #: view/Blocks/Snippet.php:105
4383
+ msgid "Tracking"
 
4384
  msgstr ""
4385
 
4386
+ #: view/Blocks/Snippet.php:121 view/Blocks/Snippet.php:480
4387
+ #: view/Blocks/Snippet.php:734
4388
+ #, php-format
4389
  msgid ""
4390
+ "Post Type (%s) was excluded from %sSquirrly > SEO Settings%s. Squirrly SEO "
4391
+ "will not load for this post type on the frontend"
4392
  msgstr ""
4393
 
4394
+ #: view/Blocks/Snippet.php:129 view/SeoSettings/Automation.php:126
4395
+ #: view/SeoSettings/Automation.php:153 view/SeoSettings/Automation.php:215
4396
+ msgid "Activate Metas"
4397
  msgstr ""
4398
 
4399
+ #: view/Blocks/Snippet.php:138
4400
+ msgid "How this page will appear on Search Engines"
4401
  msgstr ""
4402
 
4403
+ #: view/Blocks/Snippet.php:142 view/Blocks/Snippet.php:373
4404
+ #: view/Blocks/Snippet.php:502 view/Blocks/Snippet.php:756
4405
+ #: view/Blocks/Snippet.php:970 view/Blocks/Snippet.php:1085
4406
+ msgid "Refresh"
4407
  msgstr ""
4408
 
4409
+ #: view/Blocks/Snippet.php:146 view/Blocks/Snippet.php:518
4410
+ #: view/Blocks/Snippet.php:774
4411
+ msgid "AUTO-DRAFT"
4412
  msgstr ""
4413
 
4414
+ #: view/Blocks/Snippet.php:157 view/Blocks/Snippet.php:539
4415
+ #: view/Blocks/Snippet.php:794
4416
+ msgid "Please save the post first to be able to edit the Squirrly SEO Snippet"
4417
  msgstr ""
4418
 
4419
+ #: view/Blocks/Snippet.php:164 view/Blocks/Snippet.php:546
4420
+ #: view/Blocks/Snippet.php:801
4421
+ msgid "Cancel"
4422
  msgstr ""
4423
 
4424
+ #: view/Blocks/Snippet.php:165 view/Blocks/Snippet.php:374
4425
+ #: view/Blocks/Snippet.php:547 view/Blocks/Snippet.php:802
4426
+ #: view/Blocks/Snippet.php:971 view/Blocks/Snippet.php:1086
4427
+ msgid "Save"
4428
  msgstr ""
4429
 
4430
+ #: view/Blocks/Snippet.php:175
4431
+ msgid "Activate Title"
4432
  msgstr ""
4433
 
4434
+ # @ squirrly-seo
4435
+ #: view/Blocks/Snippet.php:182 view/Blocks/Snippet.php:233
4436
+ #: view/Blocks/Snippet.php:580 view/Blocks/Snippet.php:623
4437
+ #: view/Blocks/Snippet.php:835 view/Blocks/Snippet.php:878
4438
+ #, fuzzy, php-format
4439
+ #| msgid "Tips: Length 10-70 chars"
4440
+ msgid "Tips: Length %s-%s chars"
4441
+ msgstr "Tipp: Länge 10-70 Charaktere"
4442
 
4443
+ #: view/Blocks/Snippet.php:185 view/Blocks/Snippet.php:236
4444
+ #: view/Blocks/Snippet.php:583 view/Blocks/Snippet.php:626
4445
+ #: view/Blocks/Snippet.php:838 view/Blocks/Snippet.php:881
4446
+ msgid "Pattern: "
4447
  msgstr ""
4448
 
4449
+ #: view/Blocks/Snippet.php:202 view/Blocks/Snippet.php:600
4450
+ #: view/Blocks/Snippet.php:855
4451
+ msgid "Default Title"
4452
  msgstr ""
4453
 
4454
+ #: view/Blocks/Snippet.php:209 view/Blocks/Snippet.php:263
4455
+ #: view/Blocks/Snippet.php:607 view/Blocks/Snippet.php:653
4456
+ #: view/Blocks/Snippet.php:862 view/Blocks/Snippet.php:908
4457
+ msgid "Pattern"
4458
  msgstr ""
4459
 
4460
+ # @ squirrly-seo
4461
+ #: view/Blocks/Snippet.php:226
4462
+ #, fuzzy
4463
+ #| msgid "Description:"
4464
+ msgid "Activate Description"
4465
+ msgstr "Beschreibung:"
4466
+
4467
+ # @ squirrly-seo
4468
+ #: view/Blocks/Snippet.php:232
4469
+ #, fuzzy
4470
+ #| msgid "Description:"
4471
+ msgid "Meta Description"
4472
+ msgstr "Beschreibung:"
4473
+
4474
+ #: view/Blocks/Snippet.php:256 view/Blocks/Snippet.php:646
4475
+ #: view/Blocks/Snippet.php:901
4476
+ msgid "Default Description"
4477
  msgstr ""
4478
 
4479
+ # @ squirrly-seo
4480
+ #: view/Blocks/Snippet.php:280
4481
+ #, fuzzy
4482
+ #| msgid "Keywords:"
4483
+ msgid "Activate Keywords"
4484
+ msgstr "Schlüsselwörter:"
4485
+
4486
+ #: view/Blocks/Snippet.php:286
4487
+ msgid "Meta Keywords"
4488
  msgstr ""
4489
 
4490
+ # @ squirrly-seo
4491
+ #: view/Blocks/Snippet.php:290
4492
+ msgid "+ Add keyword"
4493
+ msgstr "Fügen Sie ein anderes Schlüsselwort ein"
4494
+
4495
+ #: view/Blocks/Snippet.php:302
4496
+ msgid "Activate Canonical"
4497
  msgstr ""
4498
 
4499
+ #: view/Blocks/Snippet.php:309
4500
+ msgid "Leave it blank if you don't have an external canonical"
4501
  msgstr ""
4502
 
4503
+ #: view/Blocks/Snippet.php:312
4504
+ msgid "Found: "
4505
  msgstr ""
4506
 
4507
+ #: view/Blocks/Snippet.php:325
4508
+ msgid "Default Link"
4509
  msgstr ""
4510
 
4511
+ #: view/Blocks/Snippet.php:345 view/Blocks/Snippet.php:468
4512
+ #: view/Blocks/Snippet.php:714 view/Blocks/Snippet.php:949
4513
+ #: view/Blocks/Snippet.php:1064 view/Blocks/Snippet.php:1190
4514
+ msgid ""
4515
+ "To edit the snippet, you have to activate Squirrly SEO for this page first"
4516
  msgstr ""
4517
 
4518
+ #: view/Blocks/Snippet.php:354
4519
+ msgid "Activate Squirrly Snippet for this page"
4520
  msgstr ""
4521
 
4522
+ #: view/Blocks/Snippet.php:359 view/Blocks/Snippet.php:719
4523
+ #: view/Blocks/Snippet.php:954
4524
+ msgid "Post Type"
4525
  msgstr ""
4526
 
4527
+ #: view/Blocks/Snippet.php:361 view/Blocks/Snippet.php:683
4528
+ #: view/Blocks/Snippet.php:721
4529
+ msgid "OG Type"
4530
  msgstr ""
4531
 
4532
+ #: view/Blocks/Snippet.php:391
4533
  #, php-format
4534
  msgid ""
4535
+ "JSON-LD is disable for this Post Type (%s). See %sSquirrly > SEO Settings > "
4536
+ "Automation%s."
 
4537
  msgstr ""
4538
 
4539
+ #: view/Blocks/Snippet.php:415
4540
+ msgid "JSON-LD Type"
 
 
 
4541
  msgstr ""
4542
 
4543
+ #: view/Blocks/Snippet.php:420 view/Blocks/Snippet.php:691
4544
+ #: view/Blocks/Snippet.php:929 view/Blocks/Snippet.php:1017
4545
+ msgid "(Auto)"
 
 
4546
  msgstr ""
4547
 
4548
+ #: view/Blocks/Snippet.php:421 view/Blocks/Snippet.php:1018
4549
+ msgid "Custom Code"
 
4550
  msgstr ""
4551
 
4552
+ #: view/Blocks/Snippet.php:431
4553
+ msgid "Custom JSON-LD Code"
 
4554
  msgstr ""
4555
 
4556
+ #: view/Blocks/Snippet.php:432
4557
  #, php-format
4558
+ msgid "Add JSON-LD code from %sSchema Generator Online%s."
4559
  msgstr ""
4560
 
4561
+ #: view/Blocks/Snippet.php:441
4562
+ msgid "Current JSON-LD Code"
4563
  msgstr ""
4564
 
4565
+ # @ squirrly-seo
4566
+ #: view/Blocks/Snippet.php:449
4567
+ #, fuzzy
4568
+ #| msgid "date"
4569
+ msgid "Validate"
4570
+ msgstr "Datum"
4571
 
4572
+ #: view/Blocks/Snippet.php:497
4573
+ msgid "How this page appears on Facebook"
4574
  msgstr ""
4575
 
4576
+ #: view/Blocks/Snippet.php:503
4577
+ msgid "Edit Open Graph"
 
 
4578
  msgstr ""
4579
 
4580
+ #: view/Blocks/Snippet.php:511 view/Blocks/Snippet.php:766
4581
+ msgid "The image size must be at least 500 pixels wide"
4582
  msgstr ""
4583
 
4584
+ #: view/Blocks/Snippet.php:527
4585
+ msgid ""
4586
+ "This is the Featured Image. You can change it if you edit the snippet and "
4587
+ "upload another image. "
4588
  msgstr ""
4589
 
4590
+ #: view/Blocks/Snippet.php:556 view/Blocks/Snippet.php:811
4591
+ msgid "Media Image"
4592
  msgstr ""
4593
 
4594
+ # @ squirrly-seo
4595
+ #: view/Blocks/Snippet.php:560 view/Blocks/Snippet.php:815
4596
+ #: view/Research/Briefcase.php:360 view/SeoSettings/Favicon.php:65
4597
+ msgid "Upload"
4598
+ msgstr "Hochladen"
4599
 
4600
+ #: view/Blocks/Snippet.php:561 view/Blocks/Snippet.php:816
4601
+ msgid "Image size must be at least 500 pixels wide"
4602
  msgstr ""
4603
 
4604
+ #: view/Blocks/Snippet.php:668
4605
+ msgid "Author Link"
4606
  msgstr ""
4607
 
4608
+ #: view/Blocks/Snippet.php:669
4609
+ msgid "For multiple authors, separate their Facebook links with commas"
4610
  msgstr ""
4611
 
4612
+ #: view/Blocks/Snippet.php:751
4613
+ msgid "How this page appears on Twitter"
4614
  msgstr ""
4615
 
4616
+ #: view/Blocks/Snippet.php:757
4617
+ msgid "Edit Twitter Card"
4618
  msgstr ""
4619
 
4620
+ #: view/Blocks/Snippet.php:783
4621
+ msgid ""
4622
+ "This is the Featured Image. You can changin it if you edit the snippet and "
4623
+ "upload anothe image."
4624
  msgstr ""
4625
 
4626
+ #: view/Blocks/Snippet.php:924
4627
+ msgid "Card Type"
4628
  msgstr ""
4629
 
4630
+ #: view/Blocks/Snippet.php:925 view/SeoSettings/Social.php:283
4631
+ #, php-format
4632
+ msgid "Every change needs %sTwitter Card Validator%s"
4633
  msgstr ""
4634
 
4635
+ #: view/Blocks/Snippet.php:930
4636
+ msgid "summary"
4637
  msgstr ""
4638
 
4639
+ #: view/Blocks/Snippet.php:931
4640
+ msgid "summary_large_image"
4641
  msgstr ""
4642
 
4643
+ # @ squirrly-seo
4644
+ #: view/Blocks/Snippet.php:956
4645
+ #, fuzzy
4646
+ #| msgid "Twitter"
4647
+ msgid "Twitter Type"
4648
+ msgstr "Twitter"
4649
 
4650
+ #: view/Blocks/Snippet.php:982
4651
+ msgid "Activate Tracking"
4652
  msgstr ""
4653
 
4654
+ #: view/Blocks/Snippet.php:988
4655
+ #, php-format
4656
+ msgid ""
4657
+ "Facebook Pixel is disabled for this Post Type. See %sSquirrly > SEO Settings "
4658
+ "> Automation%s."
4659
  msgstr ""
4660
 
4661
+ #: view/Blocks/Snippet.php:1012 view/SeoSettings/Tracking.php:78
4662
+ msgid "Facebook Pixel"
4663
  msgstr ""
4664
 
4665
+ #: view/Blocks/Snippet.php:1028
4666
+ msgid "Custom Pixel Code"
4667
  msgstr ""
4668
 
4669
+ #: view/Blocks/Snippet.php:1029
4670
+ #, php-format
4671
+ msgid "Add Facebook Pixel code from %sFacebook Events%s."
4672
  msgstr ""
4673
 
4674
+ #: view/Blocks/Snippet.php:1038
4675
+ msgid "Current Pixel Code"
4676
  msgstr ""
4677
 
4678
+ #: view/Blocks/Snippet.php:1047
4679
+ #, php-format
4680
+ msgid ""
4681
+ "Add a Pixel ID for Facebook Pixel at %sSquirrly > SEO Settings > Tracking "
4682
+ "Tools%s."
4683
  msgstr ""
4684
 
4685
+ #: view/Blocks/Snippet.php:1077
4686
+ #, php-format
4687
+ msgid ""
4688
+ "You selected '%s' in %sSettings > Reading%s. It's important to uncheck that "
4689
+ "option."
4690
  msgstr ""
4691
 
4692
+ #: view/Blocks/Snippet.php:1097 view/Blocks/Snippet.php:1128
4693
+ #, php-format
4694
+ msgid ""
4695
+ "This Post Type (%s) has Nofollow set in Automation. See %sSquirrly > SEO "
4696
+ "Settings > Automation%s."
4697
  msgstr ""
4698
 
4699
+ #: view/Blocks/Snippet.php:1104 view/Blocks/Snippet.php:1135
4700
+ #: view/SeoSettings/Automation.php:133 view/SeoSettings/Automation.php:160
4701
+ msgid "Activate Robots Meta"
4702
  msgstr ""
4703
 
4704
+ #: view/Blocks/Snippet.php:1115
4705
+ msgid "Let Google Index This Page"
4706
  msgstr ""
4707
 
4708
+ #: view/Blocks/Snippet.php:1158
4709
+ #, php-format
4710
+ msgid ""
4711
+ "Show in sitemap for this Post Type (%s) was excluded from %sSquirrly > SEO "
4712
+ "Settings > Automation%s."
4713
  msgstr ""
4714
 
4715
+ #: view/Blocks/Snippet.php:1165 view/SeoSettings/Automation.php:179
4716
+ #: view/SeoSettings/Sitemap.php:22
4717
+ msgid "Activate Sitemap"
4718
  msgstr ""
4719
 
4720
+ #: view/Blocks/Snippet.php:1175
4721
+ msgid "Show it in Sitemap.xml"
4722
  msgstr ""
4723
 
4724
+ #: view/Blocks/Snippet.php:1214
4725
+ msgid "Loading Squirrly Snippet ..."
4726
  msgstr ""
4727
 
4728
+ #: view/Blocks/Snippet.php:1240
4729
+ msgid "Enable Squirrly SEO to load Squirrly Snippet"
4730
  msgst