SEO SQUIRRLY™ - Version 8.2.23

Version Description

  • 11/07/2017 =
  • Fixed the SEO METAs in frontend for some theme
  • Fixed the SEO METAs for Wp Super cache and other cache plugins
  • Update Squirrly SEO Snippet Frontend is optional in Squirrly > SEO Settings Advanced
  • Fixed the Sitemap to load for all subdirectories
  • Fixed compatibility issues with other plugins
Download this release

Release Info

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

Code changes from version 8.0.5 to 8.2.23

Files changed (119) hide show
  1. classes/{SQ_Action.php → Action.php} +43 -28
  2. classes/BlockController.php +114 -0
  3. classes/{SQ_DisplayController.php → DisplayController.php} +31 -41
  4. classes/{SQ_Error.php → Error.php} +11 -5
  5. classes/FrontController.php +152 -0
  6. classes/{SQ_HookController.php → HookController.php} +42 -3
  7. classes/ObjController.php +200 -0
  8. classes/{SQ_Ranking.php → Ranking.php} +25 -35
  9. classes/SQ_BlockController.php +0 -95
  10. classes/SQ_FrontController.php +0 -123
  11. classes/SQ_ObjController.php +0 -197
  12. classes/SQ_Traffic.php +0 -8
  13. classes/{SQ_Tools.php → Tools.php} +533 -111
  14. config/config.php +54 -8
  15. config/paths.php +5 -6
  16. controllers/Api.php +76 -0
  17. controllers/Cron.php +29 -0
  18. controllers/{SQ_Feed.php → Feed.php} +10 -8
  19. controllers/FrontMenu.php +100 -0
  20. controllers/Frontend.php +193 -0
  21. controllers/Menu.php +548 -0
  22. controllers/{SQ_Post.php → Post.php} +88 -99
  23. controllers/{SQ_PostsList.php → PostsList.php} +33 -62
  24. controllers/SQ_Frontend.php +0 -218
  25. controllers/SQ_Menu.php +0 -247
  26. controllers/{SQ_Sitemaps.php → Sitemaps.php} +149 -67
  27. core/{SQ_BlockAccount/SQ_BlockAccount.php → BlockAccount.php} +1 -1
  28. core/{SQ_BlockAffiliate/SQ_BlockAffiliate.php → BlockAffiliate.php} +4 -4
  29. core/BlockAnalytics.php +9 -0
  30. core/{SQ_BlockAudit/SQ_BlockAudit.php → BlockAudit.php} +2 -2
  31. core/{SQ_BlockLiveAssistant/SQ_BlockLiveAssistant.php → BlockCopyright.php} +1 -1
  32. core/BlockCustomerService.php +11 -0
  33. core/{SQ_BlockDashboard/SQ_BlockDashboard.php → BlockDashboard.php} +1 -1
  34. core/BlockHelp.php +8 -0
  35. core/BlockImport.php +67 -0
  36. core/BlockKeywordResearch.php +12 -0
  37. core/{SQ_BlockCopyright/SQ_BlockCopyright.php → BlockLiveAssistant.php} +1 -1
  38. core/BlockPatterns.php +49 -0
  39. core/{SQ_BlockPostsAnalytics/SQ_BlockPostsAnalytics.php → BlockPostsAnalytics.php} +7 -6
  40. core/BlockSettings.php +76 -0
  41. core/BlockSettingsSeo.php +538 -0
  42. core/{SQ_BlockSupport/SQ_BlockSupport.php → BlockSupport.php} +8 -8
  43. core/BlockToolbar.php +4 -0
  44. core/{SQ_Blocklogin/SQ_Blocklogin.php → Blocklogin.php} +16 -16
  45. core/Blockresearch.php +8 -0
  46. core/Blocksearch.php +41 -0
  47. core/Blockseo.php +20 -0
  48. core/Loading.php +105 -0
  49. core/SQ_BlockAnalytics/SQ_BlockAnalytics.php +0 -9
  50. core/SQ_BlockCustomerService/SQ_BlockCustomerService.php +0 -11
  51. core/SQ_BlockHelp/SQ_BlockHelp.php +0 -8
  52. core/SQ_BlockKeywordResearch/SQ_BlockKeywordResearch.php +0 -11
  53. core/SQ_BlockSettings/SQ_BlockSettings.php +0 -72
  54. core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php +0 -382
  55. core/SQ_Blockresearch/SQ_Blockresearch.php +0 -17
  56. core/SQ_Blocksearch/SQ_Blocksearch.php +0 -41
  57. core/SQ_Blockseo/SQ_Blockseo.php +0 -40
  58. core/SQ_Loading/SQ_Loading.php +0 -74
  59. core/config.xml +73 -32
  60. languages/squirrly-seo-de_DE.mo +0 -0
  61. languages/squirrly-seo-de_DE.po +2186 -915
  62. languages/squirrly-seo-ro_RO.mo +0 -0
  63. languages/squirrly-seo-ro_RO.po +2896 -1061
  64. models/{SQ_BlockPostsAnalytics.php → BlockPostsAnalytics.php} +10 -10
  65. models/BlockSettingsSeo.php +1026 -0
  66. models/Blocksearch.php +10 -0
  67. models/Blockseo.php +29 -0
  68. models/Frontend.php +812 -0
  69. models/{SQ_Ico.php → Ico.php} +1 -1
  70. models/{SQ_Menu.php → Menu.php} +1 -1
  71. models/{SQ_Post.php → Post.php} +13 -7
  72. models/{SQ_PostsList.php → PostsList.php} +2 -2
  73. models/SQ_BlockSettingsSeo.php +0 -355
  74. models/SQ_Blocksearch.php +0 -10
  75. models/SQ_Blockseo.php +0 -41
  76. models/SQ_Frontend.php +0 -2136
  77. models/SQ_Sitemaps.php +0 -453
  78. models/Sitemaps.php +495 -0
  79. models/abstract/Domain.php +457 -0
  80. models/abstract/Seo.php +194 -0
  81. models/domain/Patterns.php +366 -0
  82. models/domain/Post.php +151 -0
  83. models/domain/Sq.php +146 -0
  84. models/services/Analytics.php +64 -0
  85. models/services/Canonical.php +33 -0
  86. models/services/Description.php +33 -0
  87. models/services/DublinCore.php +99 -0
  88. models/services/Favicon.php +71 -0
  89. models/services/JsonLD.php +264 -50
  90. models/services/Keywords.php +42 -0
  91. models/services/Noindex.php +36 -0
  92. models/services/OpenGraph.php +232 -0
  93. models/services/Pixel.php +210 -0
  94. models/services/PrevNext.php +43 -0
  95. models/services/Publisher.php +84 -0
  96. models/services/Robots.php +54 -0
  97. models/services/Sitemap.php +40 -0
  98. models/services/Title.php +38 -0
  99. models/services/TwitterCard.php +104 -0
  100. models/services/Verify.php +49 -0
  101. readme.txt +68 -3
  102. screenshot-1.png +0 -0
  103. screenshot-2.png +0 -0
  104. screenshot-3.png +0 -0
  105. screenshot-4.png +0 -0
  106. screenshot-5.png +0 -0
  107. screenshot-6.png +0 -0
  108. screenshot-7.png +0 -0
  109. squirrly.php +19 -17
  110. themes/default/SQ_BlockAccount.php +0 -35
  111. themes/default/SQ_BlockAffiliate.php +0 -103
  112. themes/default/SQ_BlockAudit.php +0 -63
  113. themes/default/SQ_BlockCopyright.php +0 -31
  114. themes/default/SQ_BlockDashboard.php +0 -111
  115. themes/default/SQ_BlockKeywordResearch.php +0 -37
  116. themes/default/SQ_BlockLiveAssistant.php +0 -36
  117. themes/default/SQ_BlockPostsAnalytics.php +0 -56
  118. themes/default/SQ_BlockSettings.php +0 -416
  119. themes/default/SQ_BlockSettingsSeo.php +0 -635
classes/{SQ_Action.php → Action.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Set the ajax action and call for wordpress
5
  */
6
- class SQ_Action extends SQ_FrontController {
7
 
8
  /** @var array with all form and ajax actions */
9
  var $actions = array();
@@ -14,7 +14,7 @@ class SQ_Action extends SQ_FrontController {
14
 
15
  private function _isAjax() {
16
  $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
17
- if ($url && (strpos($url, str_replace(get_bloginfo('url'),'',admin_url('admin-ajax.php', 'relative'))) !== false )) {
18
  return true;
19
  }
20
 
@@ -59,6 +59,7 @@ class SQ_Action extends SQ_FrontController {
59
  echo '<script type="text/javascript" src="https://www.google.com/jsapi"></script>
60
  <script type="text/javascript">
61
  var sqQuery = {
 
62
  "ajaxurl": "' . admin_url('admin-ajax.php') . '",
63
  "adminposturl": "' . admin_url('post.php') . '",
64
  "adminlisturl": "' . admin_url('edit.php') . '",
@@ -67,6 +68,18 @@ class SQ_Action extends SQ_FrontController {
67
  </script>';
68
  }
69
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  /**
71
  * Get all actions from config.xml in core directory and add them in the WP
72
  *
@@ -87,37 +100,37 @@ class SQ_Action extends SQ_FrontController {
87
  self::$config = json_decode(json_encode((array)simplexml_load_string($data)), 1);
88
  }
89
 
90
- if (is_array(self::$config)) {
91
  foreach (self::$config['block'] as $block) {
92
- if ($block['active'] == 1) {
93
  /* if there is a single action */
94
- if (isset($block['actions']['action'])) /* if there are more actions for the current block */ {
95
- if (!is_array($block['actions']['action'])) {
96
- /* add the action in the actions array */
97
- if ($block['actions']['action'] == $cur_action) {
98
- $this->actions[] = array('class' => $block['name'], 'path' => $block['path']);
99
- }
100
- } else {
101
  /* if there are more actions for the current block */
102
- foreach ($block['actions']['action'] as $action) {
103
- /* add the actions in the actions array */
104
- if ($action == $cur_action) {
105
- $this->actions[] = array('class' => $block['name'], 'path' => $block['path']);
 
 
 
 
 
 
106
  }
107
  }
108
  }
109
- }
110
  }
111
  }
112
- }
113
 
114
  /* add the actions in WP */
115
  foreach ($this->actions as $actions) {
116
- if ($actions['path'] == 'core') {
117
- SQ_ObjController::getBlock($actions['class'])->action();
118
- } elseif ($actions['path'] == 'controllers') {
119
- SQ_ObjController::getController($actions['class'])->action();
120
- }
121
  }
122
  }
123
  }
@@ -128,20 +141,21 @@ class SQ_Action extends SQ_FrontController {
128
  * @param array $args
129
  * @return json | string
130
  */
131
- public static function apiCall($module, $args = array(), $timeout = 10) {
 
132
  $parameters = "";
133
  $scheme = "http:";
134
 
135
- if (SQ_Tools::$options['sq_api'] == '' && $module <> 'sq/login' && $module <> 'sq/register') {
136
  return false;
137
  }
138
 
139
- $extra = array('user_url' => get_bloginfo('url'),
140
  'lang' => (defined('WPLANG') ? WPLANG : 'en_US'),
141
  'versq' => SQ_VERSION_ID,
142
  'verwp' => WP_VERSION_ID,
143
  'verphp' => PHP_VERSION_ID,
144
- 'token' => SQ_Tools::$options['sq_api']);
145
 
146
 
147
  if (is_array($args)) {
@@ -169,7 +183,7 @@ class SQ_Action extends SQ_FrontController {
169
  //call it with http to prevent curl issues with ssls
170
  $url = self::cleanUrl($scheme . _SQ_API_URL_ . $module . "?" . $parameters);
171
  //update_option('sq_seopost_log', $url);
172
- return SQ_Tools::sq_remote_get($url, array(), array('timeout' => $timeout));
173
  }
174
 
175
  /**
@@ -177,7 +191,8 @@ class SQ_Action extends SQ_FrontController {
177
  * @param string $url
178
  * @return string
179
  */
180
- private static function cleanUrl($url) {
 
181
  return str_replace(array(' '), array('+'), $url);
182
  }
183
 
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();
14
 
15
  private function _isAjax() {
16
  $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
17
+ if ($url && (strpos($url, str_replace(get_bloginfo('url'), '', admin_url('admin-ajax.php', 'relative'))) !== false)) {
18
  return true;
19
  }
20
 
59
  echo '<script type="text/javascript" src="https://www.google.com/jsapi"></script>
60
  <script type="text/javascript">
61
  var sqQuery = {
62
+ "adminurl": "' . admin_url() . '",
63
  "ajaxurl": "' . admin_url('admin-ajax.php') . '",
64
  "adminposturl": "' . admin_url('post.php') . '",
65
  "adminlisturl": "' . admin_url('edit.php') . '",
68
  </script>';
69
  }
70
 
71
+ public function hookFronthead() {
72
+ if (is_user_logged_in()) {
73
+ echo '<script type="text/javascript">
74
+ var sqQuery = {
75
+ "adminurl": "' . admin_url() . '",
76
+ "ajaxurl": "' . admin_url('admin-ajax.php') . '",
77
+ "nonce": "' . wp_create_nonce(_SQ_NONCE_ID_) . '"
78
+ }
79
+ </script>';
80
+ }
81
+ }
82
+
83
  /**
84
  * Get all actions from config.xml in core directory and add them in the WP
85
  *
100
  self::$config = json_decode(json_encode((array)simplexml_load_string($data)), 1);
101
  }
102
 
103
+ if (is_array(self::$config))
104
  foreach (self::$config['block'] as $block) {
105
+ if (isset($block['active']) && $block['active'] == 1) {
106
  /* if there is a single action */
107
+ if (isset($block['actions']['action']))
108
+ if (isset($block['admin']) &&
109
+ (($block['admin'] == 1 && is_user_logged_in()) ||
110
+ $block['admin'] == 0)
111
+ ) {
 
 
112
  /* if there are more actions for the current block */
113
+ if (!is_array($block['actions']['action'])) {
114
+ /* add the action in the actions array */
115
+ if ($block['actions']['action'] == $cur_action)
116
+ $this->actions[] = array('class' => $block['name']);
117
+ } else {
118
+ /* if there are more actions for the current block */
119
+ foreach ($block['actions']['action'] as $action) {
120
+ /* add the actions in the actions array */
121
+ if ($action == $cur_action)
122
+ $this->actions[] = array('class' => $block['name']);
123
  }
124
  }
125
  }
126
+
127
  }
128
  }
129
+
130
 
131
  /* add the actions in WP */
132
  foreach ($this->actions as $actions) {
133
+ SQ_Classes_ObjController::getClass($actions['class'])->action();
 
 
 
 
134
  }
135
  }
136
  }
141
  * @param array $args
142
  * @return json | string
143
  */
144
+ public
145
+ static function apiCall($module, $args = array(), $timeout = 10) {
146
  $parameters = "";
147
  $scheme = "http:";
148
 
149
+ if (SQ_Classes_Tools::getOption('sq_api') == '' && $module <> 'sq/login' && $module <> 'sq/register') {
150
  return false;
151
  }
152
 
153
+ $extra = array('user_url' => home_url(),
154
  'lang' => (defined('WPLANG') ? WPLANG : 'en_US'),
155
  'versq' => SQ_VERSION_ID,
156
  'verwp' => WP_VERSION_ID,
157
  'verphp' => PHP_VERSION_ID,
158
+ 'token' => SQ_Classes_Tools::getOption('sq_api'));
159
 
160
 
161
  if (is_array($args)) {
183
  //call it with http to prevent curl issues with ssls
184
  $url = self::cleanUrl($scheme . _SQ_API_URL_ . $module . "?" . $parameters);
185
  //update_option('sq_seopost_log', $url);
186
+ return SQ_Classes_Tools::sq_remote_get($url, array(), array('timeout' => $timeout));
187
  }
188
 
189
  /**
191
  * @param string $url
192
  * @return string
193
  */
194
+ private
195
+ static function cleanUrl($url) {
196
  return str_replace(array(' '), array('+'), $url);
197
  }
198
 
classes/BlockController.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The main class for core blocks
5
+ *
6
+ */
7
+ class SQ_Classes_BlockController {
8
+
9
+ /** @var object of the model class */
10
+ protected $model;
11
+
12
+ /** @var boolean */
13
+ public $flush = true;
14
+
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() {
22
+ /* get the name of the current class */
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
+ echo '<script type="text/javascript">
81
+ var __blog_url = "' . get_bloginfo('url') . '";
82
+ var __token = "' . SQ_Classes_Tools::getOption('sq_api') . '";
83
+ var __language = "' . get_bloginfo('language') . '";
84
+ var __api_url = "' . _SQ_API_URL_ . '";
85
+ jQuery(document).ready(function () {
86
+ jQuery.sq_getHelp("' . str_replace(array("sq_core_block", "sq_controller_block_"), "", strtolower($this->name)) . '", "content");
87
+ });
88
+ </script>';
89
+ }
90
+
91
+ /**
92
+ * This function is called from Ajax class as a wp_ajax_action
93
+ *
94
+ */
95
+ protected function action() {
96
+ // check to see if the submitted nonce matches with the
97
+ // generated nonce we created
98
+ if (function_exists('wp_verify_nonce'))
99
+ if (!wp_verify_nonce(SQ_Classes_Tools::getValue('nonce'), _SQ_NONCE_ID_))
100
+ die('Invalid request!');
101
+ }
102
+
103
+ /**
104
+ * This function will load the media in the header for each class
105
+ *
106
+ * @return void
107
+ */
108
+ protected function hookHead() {
109
+ if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
110
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($class['name']);
111
+ }
112
+ }
113
+
114
+ }
classes/{SQ_DisplayController.php → DisplayController.php} RENAMED
@@ -3,14 +3,13 @@
3
  /**
4
  * The class handles the theme part in WP
5
  */
6
- class SQ_DisplayController {
7
 
8
- private static $name;
9
  private static $cache;
10
 
11
  public function init() {
12
  /* Load the global CSS file */
13
- self::loadMedia('sq_global');
14
  }
15
 
16
  /**
@@ -19,7 +18,7 @@ class SQ_DisplayController {
19
  */
20
  private static function _isAjax() {
21
  $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
22
- if ($url && (strpos($url, str_replace(get_bloginfo('url'),'',admin_url('admin-ajax.php', 'relative'))) !== false )) {
23
  return true;
24
  }
25
 
@@ -41,7 +40,7 @@ class SQ_DisplayController {
41
 
42
  $css_uri = '';
43
  $js_uri = '';
44
- $local = true;
45
  if (!isset($params['media'])) {
46
  $params['media'] = 'all';
47
  }
@@ -51,13 +50,24 @@ class SQ_DisplayController {
51
  self::$cache[$uri] = true;
52
 
53
  /* if is a custom css file */
54
- if (strpos($uri, '/') === false) {
55
- $name = strtolower($uri);
56
- if (file_exists(_SQ_THEME_DIR_ . 'css/' . $name . '.css')) {
57
- $css_uri = _SQ_THEME_URL_ . 'css/' . $name . '.css?ver=' . SQ_VERSION_ID;
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
- if (file_exists(_SQ_THEME_DIR_ . 'js/' . $name . '.js')) {
60
- $js_uri = _SQ_THEME_URL_ . 'js/' . $name . '.js?ver=' . SQ_VERSION_ID;
61
  }
62
  } else {
63
  $name = strtolower(basename($uri));
@@ -66,11 +76,9 @@ class SQ_DisplayController {
66
  elseif (strpos($uri, '.js') !== FALSE) {
67
  $js_uri = $uri;
68
  }
69
- $local = false;
70
  }
71
 
72
 
73
-
74
  if ($css_uri <> '') {
75
  if (!wp_style_is($name)) {
76
  wp_enqueue_style($name, $css_uri, null, SQ_VERSION_ID, $params['media']);
@@ -83,7 +91,7 @@ class SQ_DisplayController {
83
 
84
  if ($js_uri <> '') {
85
  if (!wp_script_is($name)) {
86
- wp_enqueue_script($name, $js_uri, null, SQ_VERSION_ID);
87
  }
88
  if (isset($params['trigger']) && $params['trigger'] === true) {
89
  wp_print_scripts(array($name));
@@ -91,39 +99,21 @@ class SQ_DisplayController {
91
  }
92
  }
93
 
94
- public function setBlock($block) {
95
- self::$name = $block;
96
- }
97
 
98
  /**
99
- * echo the block content from theme directory
100
  *
101
- * @return string
 
 
102
  */
103
- public static function echoBlock($view) {
104
- global $post_ID;
105
- if (file_exists(_SQ_THEME_DIR_ . self::$name . '.php')) {
106
  ob_start();
107
-
108
- /* includes the block from theme directory */
109
- include(_SQ_THEME_DIR_ . self::$name . '.php');
110
- $block_content = ob_get_contents();
111
- ob_end_clean();
112
-
113
- return $block_content;
114
  }
115
- }
116
 
117
- /**
118
- * Called for any class to show the block content
119
- *
120
- * @param string $block the name of the block file in theme directory (class name by default)
121
- *
122
- * @return string of the current class view
123
- */
124
- public function output($block, $obj) {
125
- self::$name = $block;
126
- echo $this->echoBlock($obj);
127
  }
128
-
129
  }
3
  /**
4
  * The class handles the theme part in WP
5
  */
6
+ 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
  /**
18
  */
19
  private static function _isAjax() {
20
  $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
21
+ if ($url && (strpos($url, str_replace(get_bloginfo('url'), '', admin_url('admin-ajax.php', 'relative'))) !== false)) {
22
  return true;
23
  }
24
 
40
 
41
  $css_uri = '';
42
  $js_uri = '';
43
+
44
  if (!isset($params['media'])) {
45
  $params['media'] = 'all';
46
  }
50
  self::$cache[$uri] = true;
51
 
52
  /* if is a custom css file */
53
+ if (strpos($uri, '//') === false) {
54
+ if (strpos($uri, '.') !== false) {
55
+ $name = strtolower(_SQ_NAMESPACE_ . substr($uri, 0, strpos($uri, '.')));
56
+ } else {
57
+ $name = strtolower(_SQ_NAMESPACE_ . $uri);
58
+ }
59
+ if (strpos($uri,'.css') !== false && file_exists(_SQ_THEME_DIR_ . 'css/' . strtolower($uri))) {
60
+ $css_uri = _SQ_THEME_URL_ . 'css/' . strtolower($uri);
61
+ }
62
+ if (strpos($uri,'.js') !== false && file_exists(_SQ_THEME_DIR_ . 'js/' . strtolower($uri))) {
63
+ $js_uri = _SQ_THEME_URL_ . 'js/' . strtolower($uri);
64
+ }
65
+
66
+ if (file_exists(_SQ_THEME_DIR_ . 'css/' . strtolower($uri) . '.css')) {
67
+ $css_uri = _SQ_THEME_URL_ . 'css/' . strtolower($uri) . '.css';
68
  }
69
+ if (file_exists(_SQ_THEME_DIR_ . 'js/' . strtolower($uri) . '.js')) {
70
+ $js_uri = _SQ_THEME_URL_ . 'js/' . strtolower($uri) . '.js';
71
  }
72
  } else {
73
  $name = strtolower(basename($uri));
76
  elseif (strpos($uri, '.js') !== FALSE) {
77
  $js_uri = $uri;
78
  }
 
79
  }
80
 
81
 
 
82
  if ($css_uri <> '') {
83
  if (!wp_style_is($name)) {
84
  wp_enqueue_style($name, $css_uri, null, SQ_VERSION_ID, $params['media']);
91
 
92
  if ($js_uri <> '') {
93
  if (!wp_script_is($name)) {
94
+ wp_enqueue_script($name, $js_uri, array('jquery'), SQ_VERSION_ID);
95
  }
96
  if (isset($params['trigger']) && $params['trigger'] === true) {
97
  wp_print_scripts(array($name));
99
  }
100
  }
101
 
 
 
 
102
 
103
  /**
104
+ * return the block content from theme directory
105
  *
106
+ * @param $block
107
+ * @param $view
108
+ * @return bool|string
109
  */
110
+ public function getView($block, $view) {
111
+ if (file_exists(_SQ_THEME_DIR_ . $block . '.php')) {
 
112
  ob_start();
113
+ include(_SQ_THEME_DIR_ . $block . '.php');
114
+ return ob_get_clean();
 
 
 
 
 
115
  }
 
116
 
117
+ return false;
 
 
 
 
 
 
 
 
 
118
  }
 
119
  }
classes/{SQ_Error.php → Error.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class SQ_Error extends SQ_FrontController {
4
 
5
  /** @var array */
6
  private static $errors, $switch_off;
@@ -42,6 +42,12 @@ class SQ_Error extends SQ_FrontController {
42
  'text' => $error);
43
  }
44
 
 
 
 
 
 
 
45
  /**
46
  * This hook will show the error in WP header
47
  */
@@ -61,7 +67,7 @@ class SQ_Error extends SQ_FrontController {
61
  break;
62
 
63
  case 'helpnotice':
64
- if (isset(SQ_Tools::$options['ignore_warn']) && SQ_Tools::$options['ignore_warn'] == 1) {
65
  break;
66
  }
67
  self::$switch_off = "<a href=\"javascript:void(0);\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_warnings_off', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'}, function(data) { if (data) { 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>";
@@ -81,12 +87,12 @@ class SQ_Error extends SQ_FrontController {
81
  /**
82
  * Show the notices to WP
83
  *
84
- * @return void
85
  */
86
  public static function showError($message, $id = '', $type = 'sq_error') {
87
 
88
- if (file_exists(_SQ_THEME_DIR_ . 'SQ_notices.php')) {
89
- include (_SQ_THEME_DIR_ . 'SQ_notices.php');
90
  } else {
91
  echo $message;
92
  }
1
  <?php
2
 
3
+ class SQ_Classes_Error extends SQ_Classes_FrontController {
4
 
5
  /** @var array */
6
  private static $errors, $switch_off;
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
+ }
50
+
51
  /**
52
  * This hook will show the error in WP header
53
  */
67
  break;
68
 
69
  case 'helpnotice':
70
+ if (SQ_Classes_Tools::getOption('ignore_warn')) {
71
  break;
72
  }
73
  self::$switch_off = "<a href=\"javascript:void(0);\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_warnings_off', nonce: '" . wp_create_nonce(_SQ_NONCE_ID_) . "'}, function(data) { if (data) { 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>";
87
  /**
88
  * Show the notices to WP
89
  *
90
+ * @return string
91
  */
92
  public static function showError($message, $id = '', $type = 'sq_error') {
93
 
94
+ if (file_exists(_SQ_THEME_DIR_ . 'Notices.php')) {
95
+ include(_SQ_THEME_DIR_ . 'Notices.php');
96
  } else {
97
  echo $message;
98
  }
classes/FrontController.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The main class for controllers
5
+ *
6
+ */
7
+ class SQ_Classes_FrontController {
8
+
9
+ /** @var object of the model class */
10
+ public $model;
11
+
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
+
23
+ /* Load error class */
24
+ SQ_Classes_ObjController::getClass('SQ_Classes_Error');
25
+ /* Load Tools */
26
+ SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
27
+
28
+
29
+ /* get the name of the current class */
30
+ $this->name = get_class($this);
31
+
32
+ /* load the model and hooks here for wordpress actions to take efect */
33
+ /* create the model and view instances */
34
+ $this->model = SQ_Classes_ObjController::getClass(str_replace('Controllers', 'Models', $this->name));
35
+
36
+ //IMPORTANT TO LOAD HOOKS HERE
37
+ /* check if there is a hook defined in the controller clients class */
38
+ SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
39
+
40
+ /* Load the Submit Actions Handler */
41
+ SQ_Classes_ObjController::getClass('SQ_Classes_Action');
42
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController');
43
+
44
+ //abstract classes
45
+ SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Domain');
46
+ SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Models');
47
+ SQ_Classes_ObjController::getClass('SQ_Models_Abstract_Seo');
48
+ }
49
+
50
+ /**
51
+ * load sequence of classes
52
+ * Function called usualy when the controller is loaded in WP
53
+ *
54
+ * @return mixed
55
+ */
56
+ public function init() {
57
+ /* load the blocks for this controller */
58
+ SQ_Classes_ObjController::getClass('SQ_Classes_ObjController')->getBlocks($this->name);
59
+
60
+ if ($this->flush) {
61
+ echo $this->getView();
62
+ } else {
63
+ return $this->getView();
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Get the block view
69
+ *
70
+ * @param null $view
71
+ * @return mixed
72
+ */
73
+ public function getView($view = null) {
74
+ if (!isset($view)) {
75
+ if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
76
+ $view = $class['name'];
77
+ }
78
+ }
79
+
80
+ if (isset($view)) {
81
+ $this->view = SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController');
82
+ return $this->view->getView($view, $this);
83
+ }
84
+
85
+ return '';
86
+ }
87
+
88
+ /**
89
+ * Called as menu callback to show the block
90
+ *
91
+ */
92
+ public function show() {
93
+ $this->flush = true;
94
+ echo $this->init();
95
+ }
96
+
97
+ /**
98
+ * initialize settings
99
+ * Called from index
100
+ *
101
+ * @return void
102
+ */
103
+ public function runAdmin() {
104
+ /* show the admin menu and post actions */
105
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Menu');
106
+ }
107
+
108
+ /**
109
+ * Run fron frontend
110
+ */
111
+ public function runFrontend() {
112
+ //Load Frontend only if Squirrly SEO is enabled
113
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Frontend');
114
+
115
+ /* show the topbar admin menu and post actions */
116
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Menu');
117
+
118
+ /* call the API for save posts */
119
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Api');
120
+
121
+ }
122
+
123
+ /**
124
+ * first function call for any class
125
+ *
126
+ */
127
+ protected function action() {
128
+
129
+ // check to see if the submitted nonce matches with the
130
+ // generated nonce we created
131
+ if (function_exists('wp_verify_nonce'))
132
+ if (!wp_verify_nonce(SQ_Classes_Tools::getValue('nonce'), _SQ_NONCE_ID_))
133
+ die('Invalid request!');
134
+ }
135
+
136
+ /**
137
+ * This function will load the media in the header for each class
138
+ *
139
+ * @return void
140
+ */
141
+ public function hookHead() {
142
+ if (!is_admin()) {
143
+ return;
144
+ }
145
+
146
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->init();
147
+ if ($class = SQ_Classes_ObjController::getClassPath($this->name)) {
148
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia($class['name']);
149
+ }
150
+ }
151
+
152
+ }
classes/{SQ_HookController.php → HookController.php} RENAMED
@@ -3,26 +3,49 @@
3
  /**
4
  * The class handles the actions in WP
5
  */
6
- class SQ_HookController {
7
 
8
  /** @var array the WP actions list from admin */
9
  private $admin_hooks = array();
 
10
  private $block_hooks = array();
11
 
12
  public function __construct() {
13
- $this->admin_hooks = array('init' => 'admin_init',
 
14
  'head' => 'admin_head',
15
  'footer' => 'admin_footer',
16
  'menu' => 'admin_menu',
17
- 'preload' => 'template_redirect',
18
  'notices' => 'admin_notices',
 
 
 
 
 
 
 
19
  'frontinit' => 'init',
20
  'fronthead' => 'wp_head',
21
  'frontfooter' => 'wp_footer',
22
  );
 
23
  $this->block_hooks = array('getContent' => 'getContent');
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * Calls the specified action in WP
28
  * @param object $instance The parent class instance
@@ -41,6 +64,22 @@ class SQ_HookController {
41
  }
42
  }
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  /**
45
  * Calls the specified action in WP
46
  * @param string $action
3
  /**
4
  * The class handles the actions in WP
5
  */
6
+ class SQ_Classes_HookController {
7
 
8
  /** @var array the WP actions list from admin */
9
  private $admin_hooks = array();
10
+ private $front_hooks = array();
11
  private $block_hooks = array();
12
 
13
  public function __construct() {
14
+ $this->admin_hooks = array(
15
+ 'init' => 'admin_init',
16
  'head' => 'admin_head',
17
  'footer' => 'admin_footer',
18
  'menu' => 'admin_menu',
 
19
  'notices' => 'admin_notices',
20
+ );
21
+
22
+ //called in frontend
23
+ $this->front_hooks = array(
24
+ // --
25
+ 'init' => 'init',
26
+ 'preload' => 'template_redirect',
27
  'frontinit' => 'init',
28
  'fronthead' => 'wp_head',
29
  'frontfooter' => 'wp_footer',
30
  );
31
+
32
  $this->block_hooks = array('getContent' => 'getContent');
33
  }
34
 
35
+ /**
36
+ * Calls the specified action in WP
37
+ * @param object $instance The parent class instance
38
+ *
39
+ * @return void
40
+ */
41
+ public function setHooks($instance) {
42
+ if (is_admin() || is_network_admin()) {
43
+ $this->setAdminHooks($instance);
44
+ } else {
45
+ $this->setFrontHooks($instance);
46
+ }
47
+ }
48
+
49
  /**
50
  * Calls the specified action in WP
51
  * @param object $instance The parent class instance
64
  }
65
  }
66
 
67
+ /**
68
+ * Calls the specified action in WP
69
+ * @param object $instance The parent class instance
70
+ *
71
+ * @return void
72
+ */
73
+ public function setFrontHooks($instance) {
74
+ /* for each admin action check if is defined in class and call it */
75
+ foreach ($this->front_hooks as $hook => $value) {
76
+ if (is_callable(array($instance, 'hook' . ucfirst($hook)))) {
77
+ //call the WP add_action function
78
+ add_action($value, array($instance, 'hook' . ucfirst($hook)), 5);
79
+ }
80
+ }
81
+ }
82
+
83
  /**
84
  * Calls the specified action in WP
85
  * @param string $action
classes/ObjController.php ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The class creates object for plugin classes
5
+ */
6
+ class SQ_Classes_ObjController {
7
+
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];
40
+ }
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
+
71
+ /**
72
+ * Check if the class is correctly set
73
+ *
74
+ * @param string $className
75
+ * @return boolean
76
+ */
77
+ private static function checkClassPath($className) {
78
+ $path = preg_split('/[_]+/', $className);
79
+ if (is_array($path) && count($path) > 1) {
80
+ if (in_array(_SQ_NAMESPACE_, $path)) {
81
+ return true;
82
+ }
83
+ }
84
+
85
+ return false;
86
+ }
87
+
88
+ /**
89
+ * Get the path of the class and name of the class
90
+ *
91
+ * @param string $className
92
+ * @return array | boolean
93
+ * array(
94
+ * dir - absolute path of the class
95
+ * name - the name of the file
96
+ * }
97
+ */
98
+ public static function getClassPath($className) {
99
+ $dir = '';
100
+
101
+
102
+ if (self::checkClassPath($className)) {
103
+ $path = preg_split('/[_]+/', $className);
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')) {
111
+ return $class;
112
+ }
113
+ }
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.xml 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.xml';
172
+ if (!file_exists($config_file))
173
+ return;
174
+
175
+ /* load configuration blocks data from core config files */
176
+ $data = file_get_contents($config_file);
177
+ self::$config = json_decode(json_encode((array)simplexml_load_string($data)), 1);;
178
+ }
179
+ //print_r(self::$config);
180
+ if (is_array(self::$config))
181
+ foreach (self::$config['block'] as $block) {
182
+ if ($block['active'] == 1)
183
+ if (isset($block['controllers']['controller']))
184
+ if (!is_array($block['controllers']['controller'])) {
185
+ /* if the block should load for the current controller */
186
+ if ($for == $block['controllers']['controller']) {
187
+ SQ_Classes_ObjController::getClass($block['name'])->init();
188
+ }
189
+ } else {
190
+ foreach ($block['controllers']['controller'] as $controller) {
191
+ /* if the block should load for the current controller */
192
+ if ($for == $controller) {
193
+ SQ_Classes_ObjController::getClass($block['name'])->init();
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+
200
+ }
classes/{SQ_Ranking.php → Ranking.php} RENAMED
@@ -3,23 +3,20 @@
3
  /**
4
  * Class for Google Ranking Record
5
  */
6
- class SQ_Ranking extends SQ_FrontController
7
- {
8
  private $keyword;
9
  private $post_id;
10
  private $error;
11
 
12
  //--
13
- public function getCountry()
14
- {
15
- if (isset(SQ_Tools::$options['sq_google_country']) && SQ_Tools::$options['sq_google_country'] <> '') {
16
- return SQ_Tools::$options['sq_google_country'];
17
  }
18
  return 'com';
19
  }
20
 
21
- public function getRefererCountry()
22
- {
23
  $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',);
24
  $country = $this->getCountry();
25
  if (array_key_exists($country, $convert_refc)) {
@@ -32,10 +29,9 @@ class SQ_Ranking extends SQ_FrontController
32
  * Get the google language from settings
33
  * @return string
34
  */
35
- public function getLanguage()
36
- {
37
- if (isset(SQ_Tools::$options['sq_google_language']) && SQ_Tools::$options['sq_google_language'] <> '') {
38
- return SQ_Tools::$options['sq_google_language'];
39
  }
40
  return 'en';
41
  }
@@ -44,8 +40,7 @@ class SQ_Ranking extends SQ_FrontController
44
  * Set the Post id
45
  * @return type
46
  */
47
- public function setPost($post_id)
48
- {
49
  $this->post_id = $post_id;
50
  }
51
 
@@ -53,8 +48,7 @@ class SQ_Ranking extends SQ_FrontController
53
  * Get the current keyword
54
  * @param type $keyword
55
  */
56
- public function setKeyword($keyword)
57
- {
58
  $this->keyword = str_replace(" ", "+", urlencode(strtolower($keyword)));
59
  }
60
 
@@ -62,8 +56,7 @@ class SQ_Ranking extends SQ_FrontController
62
  * Process Ranking on brief request
63
  * @param type $return
64
  */
65
- public function processRanking($post_id, $keyword)
66
- {
67
  $this->setPost($post_id);
68
  $this->setKeyword(trim($keyword));
69
 
@@ -82,8 +75,7 @@ class SQ_Ranking extends SQ_FrontController
82
  * @param string $language : en | local language
83
  * @return boolean|int
84
  */
85
- public function getGoogleRank()
86
- {
87
 
88
  @ini_set('open_basedir', null);
89
  $this->error = '';
@@ -102,7 +94,7 @@ class SQ_Ranking extends SQ_FrontController
102
  $arg['hl'] = $this->getLanguage();
103
  //$arg['gl'] = $this->getRefererCountry();
104
 
105
- if (SQ_Tools::$options['sq_google_country_strict'] == 1) {
106
  $arg['cr'] = 'country' . strtoupper($this->getRefererCountry());
107
  }
108
  $arg['start'] = '0';
@@ -212,7 +204,7 @@ class SQ_Ranking extends SQ_FrontController
212
  $option['User-Agent'] = $user_agents[mt_rand(0, count($user_agents) - 1)];
213
  $option['followlocation'] = true;
214
  //Grab the remote informations from google
215
- $response = utf8_decode(SQ_Tools::sq_remote_get("https://www.google.$country/search", $arg, $option));
216
 
217
  //Check the values for block IP
218
  if (strpos($response, "</h3>") === false) {
@@ -247,18 +239,17 @@ class SQ_Ranking extends SQ_FrontController
247
  * Do google rank with cron
248
  * @global type $wpdb
249
  */
250
- public function processCron()
251
- {
252
  global $wpdb;
253
 
254
- if (get_transient('google_blocked') !== false || SQ_Tools::$options['sq_google_ranksperhour'] == 0) {
255
  return;
256
  }
257
 
258
  set_time_limit(3000);
259
  /* Load the Submit Actions Handler */
260
- SQ_ObjController::getController('SQ_Tools', false);
261
- SQ_ObjController::getController('SQ_Action', false);
262
 
263
  //check 20 keyword at one time
264
  $sql = "SELECT `post_id`, `meta_value`
@@ -269,7 +260,7 @@ class SQ_Ranking extends SQ_FrontController
269
  if ($rows = $wpdb->get_results($sql)) {
270
  $count = 0;
271
  foreach ($rows as $row) {
272
- if ($count > SQ_Tools::$options['sq_google_ranksperhour']) {
273
  break; //check only 10 keywords at the time
274
  }
275
  if ($row->meta_value <> '') {
@@ -289,7 +280,7 @@ class SQ_Ranking extends SQ_FrontController
289
  $json->rank = $rank;
290
  $json->country = $this->getCountry();
291
  $json->language = $this->getLanguage();
292
- SQ_ObjController::getModel('SQ_Post')->saveKeyword($row->post_id, $json);
293
  }
294
  set_transient('sq_rank' . $row->post_id, $rank, (60 * 60 * 24));
295
  //if rank proccess has no error
@@ -301,7 +292,7 @@ class SQ_Ranking extends SQ_FrontController
301
  $args['country'] = $this->getCountry();
302
  $args['language'] = $this->getLanguage();
303
 
304
- SQ_Action::apiCall('sq/user-analytics/saveserp', $args);
305
 
306
  $count++;
307
  sleep(mt_rand(20, 40));
@@ -315,8 +306,7 @@ class SQ_Ranking extends SQ_FrontController
315
  * Get keyword from earlier version
316
  *
317
  */
318
- public function getKeywordHistory()
319
- {
320
  global $wpdb;
321
  //Check if ranks is saved in database
322
  $sql = "SELECT a.`global_rank`, a.`keyword`, a.`post_id`
@@ -325,19 +315,19 @@ class SQ_Ranking extends SQ_FrontController
325
 
326
  if ($rows = $wpdb->get_results($sql)) {
327
  foreach ($rows as $values) {
328
- if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($values->post_id)) {
329
  $json->keyword = urldecode($values->keyword);
330
  if ($values->global_rank > 0) {
331
  $json->rank = $values->global_rank;
332
  }
333
- SQ_ObjController::getModel('SQ_Post')->saveKeyword($values->post_id, $json);
334
  } else {
335
  $args = array();
336
  $args['keyword'] = urldecode($values->keyword);
337
  if ($values->global_rank > 0) {
338
  $json->rank = $values->global_rank;
339
  }
340
- SQ_ObjController::getModel('SQ_Post')->saveKeyword($values->post_id, json_decode(json_encode($args)));
341
  }
342
  }
343
  }
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)) {
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
  }
40
  * Set the Post id
41
  * @return type
42
  */
43
+ public function setPost($post_id) {
 
44
  $this->post_id = $post_id;
45
  }
46
 
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
 
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
 
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 = '';
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';
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) {
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`
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 <> '') {
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
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));
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`
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
  }
classes/SQ_BlockController.php DELETED
@@ -1,95 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * The main class for core blocks
5
- *
6
- */
7
- class SQ_BlockController {
8
-
9
- /** @var object of the model class */
10
- protected $model;
11
-
12
- /** @var boolean */
13
- public $flush = true;
14
-
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() {
22
- /** check the admin condition */
23
- if (!is_admin())
24
- return;
25
-
26
- /* get the name of the current class */
27
- $this->name = get_class($this);
28
-
29
- /* create the model and view instances */
30
- $this->model = SQ_ObjController::getModel($this->name);
31
- }
32
-
33
- /**
34
- * load sequence of classes
35
- *
36
- * @return void
37
- */
38
- public function init() {
39
-
40
- $this->view = SQ_ObjController::getController('SQ_DisplayController', false);
41
- $this->view->setBlock($this->name);
42
-
43
- /* check if there is a hook defined in the block class */
44
- SQ_ObjController::getController('SQ_HookController', false)
45
- ->setBlockHooks($this);
46
-
47
- if ($this->flush) {
48
- echo $this->output();
49
- } else {
50
- return $this->output();
51
- }
52
- }
53
-
54
- protected function output() {
55
- $this->hookHead();
56
- return $this->view->echoBlock($this);
57
- }
58
-
59
- public function preloadSettings() {
60
-
61
- echo '<script type="text/javascript">
62
- var __blog_url = "' . get_bloginfo('url') . '";
63
- var __token = "' . SQ_Tools::$options['sq_api'] . '";
64
- var __api_url = "' . _SQ_API_URL_ . '";
65
- jQuery(document).ready(function () {
66
- sq_getHelp("' . str_replace("sq_block", "", strtolower($this->name)) . '", "content");
67
- });
68
- </script>';
69
- }
70
-
71
- /**
72
- * This function is called from Ajax class as a wp_ajax_action
73
- *
74
- */
75
- protected function action() {
76
- // check to see if the submitted nonce matches with the
77
- // generated nonce we created
78
- if (function_exists('wp_verify_nonce'))
79
- if (!wp_verify_nonce(SQ_Tools::getValue('nonce'), _SQ_NONCE_ID_))
80
- die('Invalid request!');
81
- }
82
-
83
- /**
84
- * This function will load the media in the header for each class
85
- *
86
- * @return void
87
- */
88
- protected function hookHead() {
89
- if (!is_admin())
90
- return;
91
- SQ_ObjController::getController('SQ_DisplayController', false)
92
- ->loadMedia($this->name);
93
- }
94
-
95
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/SQ_FrontController.php DELETED
@@ -1,123 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * The main class for controllers
5
- *
6
- */
7
- class SQ_FrontController {
8
-
9
- /** @var object of the model class */
10
- public $model;
11
-
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
-
23
- /* get the name of the current class */
24
- $this->name = get_class($this);
25
-
26
-
27
- /* load the model and hooks here for wordpress actions to take efect */
28
- /* create the model and view instances */
29
- $this->model = SQ_ObjController::getModel($this->name);
30
-
31
- //IMPORTANT TO LOAD HOOKS HERE
32
- /* check if there is a hook defined in the controller clients class */
33
- SQ_ObjController::getController('SQ_HookController', false)->setAdminHooks($this);
34
- }
35
-
36
- /**
37
- * load sequence of classes
38
- * Function called usualy when the controller is loaded in WP
39
- *
40
- * @return void
41
- */
42
- public function init() {
43
-
44
- $this->view = SQ_ObjController::getController('SQ_DisplayController', false);
45
- $this->view->setBlock($this->name);
46
-
47
-
48
- /* load the blocks for this controller */
49
- SQ_ObjController::getController('SQ_ObjController', false)->getBlocks($this->name);
50
-
51
- if ($this->flush) {
52
- echo $this->output();
53
- } else {
54
- return $this->output();
55
- }
56
- }
57
-
58
- protected function output() {
59
- $this->hookHead();
60
- return $this->view->echoBlock($this);
61
- }
62
-
63
- /**
64
- * initialize settings
65
- * Called from index
66
- *
67
- * @return void
68
- */
69
- public function run() {
70
-
71
- /* Load error class */
72
- SQ_ObjController::getController('SQ_Error', false);
73
- /* Load Tools */
74
- SQ_ObjController::getController('SQ_Tools', false);
75
-
76
-
77
-
78
- /* Load the Submit Actions Handler */
79
- SQ_ObjController::getController('SQ_Action', false);
80
-
81
- SQ_ObjController::getController('SQ_DisplayController', false);
82
-
83
- /* show the admin menu and post actions */
84
- $this->loadMenu();
85
- }
86
-
87
- /**
88
- * initialize menu
89
- *
90
- * @return void
91
- */
92
- private function loadMenu() {
93
- /* get the menu from controller */
94
- SQ_ObjController::getController('SQ_Menu');
95
- }
96
-
97
- /**
98
- * first function call for any class
99
- *
100
- */
101
- protected function action() {
102
-
103
- // check to see if the submitted nonce matches with the
104
- // generated nonce we created
105
- if (function_exists('wp_verify_nonce'))
106
- if (!wp_verify_nonce(SQ_Tools::getValue('nonce'), _SQ_NONCE_ID_))
107
- die('Invalid request!');
108
- }
109
-
110
- /**
111
- * This function will load the media in the header for each class
112
- *
113
- * @return void
114
- */
115
- public function hookHead() {
116
- if (!is_admin())
117
- return;
118
- SQ_ObjController::getController('SQ_DisplayController', false)->init();
119
- SQ_ObjController::getController('SQ_DisplayController', false)
120
- ->loadMedia($this->name);
121
- }
122
-
123
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/SQ_ObjController.php DELETED
@@ -1,197 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * The class creates object for plugin classes
5
- */
6
- class SQ_ObjController {
7
-
8
- /** @var array of instances */
9
- public static $instances;
10
-
11
- /** @var array from core config */
12
- private static $config;
13
-
14
- private static function includeController($className, $core) {
15
- /* check if class is already defined */
16
- if (!class_exists($className, false))
17
- /* if $core == true then call the class from core directory */
18
- try {
19
- if (file_exists(($core ? _SQ_CONTROLLER_DIR_ : _SQ_CLASSES_DIR_) . $className . '.php'))
20
- include_once(($core ? _SQ_CONTROLLER_DIR_ : _SQ_CLASSES_DIR_) . $className . '.php');
21
- } catch (Exception $e) {
22
- echo 'Controller Error: ' . $e->getMessage();
23
- }
24
- }
25
-
26
- /**
27
- * Get the instance of the specified class
28
- *
29
- * @param string $className
30
- * @param bool $core TRUE is the class is a core class or FALSE if it is from classes directory
31
- *
32
- * @return bool|object of the class
33
- */
34
- public static function getController($className, $core = true) {
35
- if (!isset(self::$instances[$className])) {
36
- /* if $core == true then call the class from core directory */
37
- self::includeController($className, $core);
38
-
39
- if (class_exists($className)) {
40
- self::$instances[$className] = new $className;
41
- return self::$instances[$className];
42
- }
43
- } else
44
- return self::$instances[$className];
45
-
46
- return false;
47
- }
48
-
49
- private static function includeModel($className) {
50
-
51
- /* check if class is already defined */
52
- if (file_exists(_SQ_MODEL_DIR_ . $className . '.php'))
53
- try {
54
- include_once(_SQ_MODEL_DIR_ . $className . '.php');
55
- } catch (Exception $e) {
56
- echo 'Model Error: ' . $e->getMessage();
57
- }
58
- }
59
-
60
- /**
61
- * Get the instance of the specified model class
62
- *
63
- * @param string $className
64
- *
65
- * @return bool|object of the class
66
- */
67
- public static function getModel($className) {
68
- /* add Model prefix */
69
- $prefix = 'Model_';
70
-
71
- if (!isset(self::$instances[$prefix . $className])) {
72
- /* if $core == true then call the class from core directory */
73
- self::includeModel($className);
74
-
75
- //echo $className . '<br />';
76
- if (class_exists($prefix . $className)) {
77
- $classModel = $prefix . $className;
78
- self::$instances[$prefix . $className] = new $classModel;
79
- return self::$instances[$prefix . $className];
80
- }
81
- } else
82
- return self::$instances[$prefix . $className];
83
-
84
- return false;
85
- }
86
-
87
- private static function includeModelService($className) {
88
-
89
- /* check if class is already defined */
90
- if (file_exists(_SQ_SERVICE_DIR_ . $className . '.php'))
91
- try {
92
- include_once(_SQ_SERVICE_DIR_ . $className . '.php');
93
- } catch (Exception $e) {
94
- echo 'Model Service Error: ' . $e->getMessage();
95
- }
96
- }
97
-
98
- /**
99
- * Get the instance of the specified model service class
100
- *
101
- * @param string $className
102
- *
103
- * @return bool|object of the class
104
- */
105
- public static function getModelService($className) {
106
- /* add Model_Service prefix */
107
- $prefix = 'Model_Service_';
108
-
109
- if (!isset(self::$instances[$prefix . $className])) {
110
- /* if $core == true then call the class from core directory */
111
- self::includeModelService($className);
112
-
113
- //echo $className . '<br />';
114
- if (class_exists($prefix . $className)) {
115
- $classModel = $prefix . $className;
116
- self::$instances[$prefix . $className] = new $classModel;
117
- return self::$instances[$prefix . $className];
118
- }
119
- } else
120
- return self::$instances[$prefix . $className];
121
-
122
- return false;
123
- }
124
-
125
- private static function includeBlock($className) {
126
-
127
- /* check if class is already defined */
128
- try {
129
- require_once(_SQ_CORE_DIR_ . $className . '/' . $className . '.php');
130
- } catch (Exception $e) {
131
- echo 'Model Error: ' . $e->getMessage();
132
- }
133
- }
134
-
135
- /**
136
- * Get the instance of the specified block from core directory
137
- *
138
- * @param string $className
139
- *
140
- * @return bool|object of the class
141
- */
142
- public static function getBlock($className) {
143
-
144
- if (!isset(self::$instances[$className])) {
145
- /* if $core == true then call the class from core directory */
146
- self::includeBlock($className);
147
-
148
- //echo $className . '<br />';
149
- if (class_exists($className)) {
150
- self::$instances[$className] = new $className;
151
- return self::$instances[$className];
152
- } else
153
- exit("Block error: Can't call $className class");
154
- } else
155
- return self::$instances[$className];
156
-
157
- return false;
158
- }
159
-
160
- /**
161
- * Get all core classes from config.xml in core directory
162
- *
163
- * @param string $for
164
- */
165
- public function getBlocks($for) {
166
- /* if config allready in cache */
167
- if (!isset(self::$config)) {
168
- $config_file = _SQ_CORE_DIR_ . 'config.xml';
169
- if (!file_exists($config_file))
170
- return;
171
-
172
- /* load configuration blocks data from core config files */
173
- $data = file_get_contents($config_file);
174
- self::$config = json_decode(json_encode((array)simplexml_load_string($data)), 1);;
175
- }
176
- //print_r(self::$config);
177
- if (is_array(self::$config))
178
- foreach (self::$config['block'] as $block) {
179
- if ($block['active'] == 1)
180
- if (isset($block['controllers']['controller']))
181
- if (!is_array($block['controllers']['controller'])) {
182
- /* if the block should load for the current controller */
183
- if ($for == $block['controllers']['controller']) {
184
- SQ_ObjController::getBlock($block['name'])->init();
185
- }
186
- } else {
187
- foreach ($block['controllers']['controller'] as $controller) {
188
- /* if the block should load for the current controller */
189
- if ($for == $controller) {
190
- SQ_ObjController::getBlock($block['name'])->init();
191
- }
192
- }
193
- }
194
- }
195
- }
196
-
197
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/SQ_Traffic.php DELETED
@@ -1,8 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class for Traffic Record
5
- */
6
- class SQ_Traffic extends SQ_FrontController {
7
-
8
- }
 
 
 
 
 
 
 
 
classes/{SQ_Tools.php → Tools.php} RENAMED
@@ -5,10 +5,11 @@
5
  *
6
  * @author Squirrly
7
  */
8
- class SQ_Tools extends SQ_FrontController {
9
 
10
  /** @var array Saved options in database */
11
  public static $options = array();
 
12
 
13
  /** @var integer Count the errors in site */
14
  static $errors_count;
@@ -16,13 +17,14 @@ class SQ_Tools extends SQ_FrontController {
16
  /** @var array */
17
  private static $debug;
18
  private static $source_code;
 
19
 
20
  public function __construct() {
21
  parent::__construct();
22
 
23
  self::$options = $this->getOptions();
24
 
25
- //$this->checkDebug(); //dev mode
26
  }
27
 
28
  public static function getUserID() {
@@ -66,13 +68,16 @@ class SQ_Tools extends SQ_FrontController {
66
  *
67
  * @return array
68
  */
69
- public static function getOptions() {
70
  $default = array(
71
  'sq_ver' => 0,
 
72
  'sq_api' => '',
73
  'sq_checkedissues' => 0,
74
  'sq_areissues' => 0,
75
  'sq_use' => 1,
 
 
76
  'sq_post_types' => array(
77
  'post', 'page', 'product', 'shopp_page_shopp-products'
78
  ),
@@ -80,6 +85,7 @@ class SQ_Tools extends SQ_FrontController {
80
  'sq_auto_canonical' => 1,
81
  'sq_auto_sitemap' => 0,
82
  'sq_auto_feed' => 0,
 
83
  'sq_auto_jsonld' => 0,
84
  'sq_auto_amp' => 0,
85
  'sq_jsonld_type' => 'Organization',
@@ -103,6 +109,7 @@ class SQ_Tools extends SQ_FrontController {
103
  'images' => 1,
104
  'videos' => 0,
105
  ),
 
106
  'sq_sitemap_frequency' => 'weekly',
107
  'sq_sitemap' => array(
108
  'sitemap' => array('sitemap.xml', 1),
@@ -131,38 +138,20 @@ class SQ_Tools extends SQ_FrontController {
131
  'sq_auto_favicon' => 0,
132
  'favicon' => '',
133
  'sq_auto_twitter' => 0,
134
- 'sq_auto_twittersize' => 'summary',
135
  'sq_auto_facebook' => 0,
136
  'sq_og_locale' => 'en_US',
137
- 'sq_twitter_account' => '',
138
- 'sq_facebook_account' => '',
139
- 'sq_google_plus' => '',
140
- 'sq_linkedin_account' => '',
141
- 'sq_pinterest_account' => '',
142
- 'sq_instagram_account' => '',
143
  // --
144
- 'sq_auto_seo' => 1,
145
  'sq_auto_title' => 1,
146
  'sq_auto_description' => 1,
147
- 'sq_fp_title' => '',
148
- 'sq_fp_description' => '',
149
- 'sq_fp_keywords' => '',
150
- 'sq_fp_ogimage' => '',
151
- // --
152
- 'sq_google_wt' => '',
153
- 'sq_google_analytics' => '',
154
- 'sq_facebook_analytics' => '',
155
- 'sq_facebook_insights' => '',
156
- 'sq_bing_wt' => '',
157
- 'sq_pinterest' => '',
158
- 'sq_alexa' => '',
159
  // --
160
  'active_help' => '',
161
  'ignore_warn' => 0,
 
162
  'sq_keyword_help' => 1,
163
  'sq_keyword_information' => 0,
164
  'sq_url_fix' => 1,
165
- //
166
  'sq_google_country' => 'com',
167
  'sq_google_language' => 'en',
168
  'sq_google_country_strict' => 0,
@@ -176,9 +165,198 @@ class SQ_Tools extends SQ_FrontController {
176
  //--
177
  'sq_dashboard' => 0,
178
  'sq_analytics' => 0,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  );
180
  $options = json_decode(get_option(SQ_OPTION), true);
181
 
 
 
 
 
 
 
182
  if (is_array($options)) {
183
  $options = @array_merge($default, $options);
184
  return $options;
@@ -187,48 +365,139 @@ class SQ_Tools extends SQ_FrontController {
187
  return $default;
188
  }
189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  /**
191
  * Send completed tasks from tutorial
192
  * @return array
193
  */
194
  public static function getBriefOptions() {
195
- if ($pageId = get_option('page_on_front')) {
196
- $title = SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'title');
197
- $description = SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'description');
198
- } else {
199
- $title = SQ_Tools::$options['sq_fp_title'];
200
- $description = SQ_Tools::$options['sq_fp_description'];
201
- }
202
  return array(
203
  'sq_version' => SQ_VERSION_ID,
204
- 'sq_use' => SQ_Tools::$options['sq_use'],
205
- 'sq_checkedissues' => SQ_Tools::$options['sq_checkedissues'],
206
- 'sq_areissues' => SQ_Tools::$options['sq_areissues'],
207
- 'sq_auto_canonical' => SQ_Tools::$options['sq_auto_canonical'],
208
- 'sq_auto_meta' => SQ_Tools::$options['sq_auto_meta'],
209
- 'sq_auto_sitemap' => SQ_Tools::$options['sq_auto_sitemap'],
210
- 'sq_auto_jsonld' => (SQ_Tools::$options['sq_auto_jsonld'] && (SQ_Tools::$options['sq_jsonld']['Organization']['name'] <> '' || SQ_Tools::$options['sq_jsonld']['Person']['name'] <> '')),
211
- 'sq_sitemap_ping' => SQ_Tools::$options['sq_sitemap_ping'],
212
- 'sq_auto_robots' => SQ_Tools::$options['sq_auto_robots'],
213
- 'sq_auto_favicon' => (SQ_Tools::$options['sq_auto_favicon'] && SQ_Tools::$options['favicon'] <> ''),
214
- 'sq_auto_twitter' => SQ_Tools::$options['sq_auto_twitter'],
215
- 'sq_auto_facebook' => SQ_Tools::$options['sq_auto_facebook'],
216
- 'sq_auto_seo' => SQ_Tools::$options['sq_auto_seo'],
217
- 'sq_auto_title' => (int)(SQ_Tools::$options['sq_auto_title'] == 1 && $title <> ''),
218
- 'sq_auto_description' => (int)(SQ_Tools::$options['sq_auto_description'] == 1 && $description <> ''),
219
- 'sq_google_plus' => (int)(SQ_Tools::$options['sq_google_plus'] <> ''),
220
- 'sq_google_wt' => (int)(SQ_Tools::$options['sq_google_wt'] <> ''),
221
- 'sq_google_analytics' => (int)(SQ_Tools::$options['sq_google_analytics'] <> ''),
222
- 'sq_facebook_insights' => (int)(SQ_Tools::$options['sq_facebook_insights'] <> ''),
223
- 'sq_bing_wt' => (int)(SQ_Tools::$options['sq_bing_wt'] <> ''),
224
- 'sq_pinterest' => (int)(SQ_Tools::$options['sq_pinterest'] <> ''),
225
- 'sq_alexa' => (int)(SQ_Tools::$options['sq_alexa'] <> ''),
226
- 'sq_keyword_help' => SQ_Tools::$options['sq_keyword_help'],
227
- 'sq_keyword_information' => SQ_Tools::$options['sq_keyword_information'],
228
- 'sq_google_country_strict' => SQ_Tools::$options['sq_google_country_strict'],
229
- 'sq_keywordtag' => SQ_Tools::$options['sq_keywordtag'],
230
- 'sq_local_images' => SQ_Tools::$options['sq_local_images'],
 
 
 
231
  );
 
232
  }
233
 
234
  /**
@@ -246,11 +515,15 @@ class SQ_Tools extends SQ_FrontController {
246
 
247
  /**
248
  * Set the header type
249
- * @param type $type
250
  */
251
  public static function setHeader($type) {
252
- if (SQ_Tools::getValue('sq_debug') == 'on')
 
 
 
253
  return;
 
254
 
255
  switch ($type) {
256
  case 'json':
@@ -265,6 +538,9 @@ class SQ_Tools extends SQ_FrontController {
265
  case'text':
266
  header("Content-type: text/plain");
267
  break;
 
 
 
268
  }
269
  }
270
 
@@ -303,12 +579,12 @@ class SQ_Tools extends SQ_FrontController {
303
  /**
304
  * Show the notices to WP
305
  *
306
- * @return void
307
  */
308
  public static function showNotices($message, $type = 'sq_notices') {
309
- if (file_exists(_SQ_THEME_DIR_ . 'SQ_notices.php')) {
310
  ob_start();
311
- include(_SQ_THEME_DIR_ . 'SQ_notices.php');
312
  $message = ob_get_contents();
313
  ob_end_clean();
314
  }
@@ -540,7 +816,7 @@ class SQ_Tools extends SQ_FrontController {
540
  if (function_exists('curl_exec')) {
541
  $ch = curl_init($url);
542
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
543
- curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
544
  curl_exec($ch);
545
 
546
  $response['headers']['content-type'] = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
@@ -578,13 +854,13 @@ class SQ_Tools extends SQ_FrontController {
578
  public static function checkErrorSettings($count_only = false) {
579
  if (current_user_can('manage_options')) {
580
 
581
- $fixit = "<a href=\"javascript:void(0);\" onclick=\"%s jQuery(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>";
582
 
583
  /* IF SEO INDEX IS OFF */
584
  if (self::getAutoSeoSquirrly()) {
585
  self::$errors_count++;
586
  if (!$count_only) {
587
- SQ_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');
588
  }
589
  }
590
 
@@ -595,7 +871,7 @@ class SQ_Tools extends SQ_FrontController {
595
  if (self::getDuplicateTitle()) {
596
  self::$errors_count++;
597
  if (!$count_only) {
598
- SQ_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');
599
  }
600
  }
601
 
@@ -603,7 +879,7 @@ class SQ_Tools extends SQ_FrontController {
603
  if (self::getDuplicateDescription()) {
604
  self::$errors_count++;
605
  if (!$count_only) {
606
- SQ_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');
607
  }
608
  }
609
 
@@ -611,7 +887,7 @@ class SQ_Tools extends SQ_FrontController {
611
  if (self::getDuplicateOG()) {
612
  self::$errors_count++;
613
  if (!$count_only) {
614
- SQ_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');
615
  }
616
  }
617
 
@@ -619,7 +895,7 @@ class SQ_Tools extends SQ_FrontController {
619
  if (self::getDuplicateTC()) {
620
  self::$errors_count++;
621
  if (!$count_only) {
622
- SQ_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');
623
  }
624
  }
625
  }
@@ -628,20 +904,27 @@ class SQ_Tools extends SQ_FrontController {
628
  if (self::getPrivateBlog()) {
629
  self::$errors_count++;
630
  if (!$count_only) {
631
- SQ_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');
632
  }
633
  }
634
 
635
  if (self::getBadLinkStructure()) {
636
  self::$errors_count++;
637
  if (!$count_only) {
638
- SQ_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');
 
 
 
 
 
 
 
639
  }
640
  }
641
 
642
  if (self::$errors_count == 0) {
643
  self::saveOptions('sq_areissues', 0);
644
- SQ_Error::setError(__('Great! We didn\'t find any issue in your site.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
645
  } else {
646
  self::saveOptions('sq_areissues', 1);
647
  }
@@ -653,10 +936,7 @@ class SQ_Tools extends SQ_FrontController {
653
  * @return bool
654
  */
655
  private static function getAutoSeoSquirrly() {
656
- if (isset(self::$options['sq_use']))
657
- return ((int)self::$options['sq_use'] == 0);
658
-
659
- return true;
660
  }
661
 
662
  /**
@@ -668,7 +948,7 @@ class SQ_Tools extends SQ_FrontController {
668
  return false;
669
  }
670
 
671
- if (self::$options['sq_use'] == 1 && self::$options['sq_auto_facebook'] == 1) {
672
 
673
  if (self::$source_code <> '') {
674
  preg_match_all("/<meta[\s+]property=[\"|\']og:url[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
@@ -690,7 +970,7 @@ class SQ_Tools extends SQ_FrontController {
690
  return false;
691
  }
692
 
693
- if (self::$options['sq_use'] == 1 && self::$options['sq_auto_twitter'] == 1) {
694
 
695
  if (self::$source_code <> '') {
696
  preg_match_all("/<meta[\s+]name=[\"|\']twitter:card[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
@@ -713,7 +993,7 @@ class SQ_Tools extends SQ_FrontController {
713
  }
714
  $total = 0;
715
 
716
- if (self::$options['sq_use'] == 1 && self::$options['sq_auto_description'] == 1) {
717
  if (self::$source_code <> '') {
718
  preg_match_all("/<meta[^>]*name=[\"|\']description[\"|\'][^>]*content=[\"]([^\"]*)[\"][^>]*>/i", self::$source_code, $out);
719
  if (!empty($out) && isset($out[0]) && is_array($out[0])) {
@@ -739,7 +1019,7 @@ class SQ_Tools extends SQ_FrontController {
739
  }
740
  $total = 0;
741
 
742
- if (self::$options['sq_use'] == 1 && self::$options['sq_auto_title'] == 1) {
743
  if (self::$source_code <> '') {
744
  preg_match_all("/<title[^>]*>(.*)?<\/title>/i", self::$source_code, $out);
745
 
@@ -786,6 +1066,13 @@ class SQ_Tools extends SQ_FrontController {
786
  }
787
  }
788
 
 
 
 
 
 
 
 
789
  /**
790
  * Support for i18n with wpml, polyglot or qtrans
791
  *
@@ -819,6 +1106,47 @@ class SQ_Tools extends SQ_FrontController {
819
  return apply_filters('number_format_i18n', $formatted);
820
  }
821
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  public static function getBrowserInfo() {
823
  $ub = '';
824
  $u_agent = $_SERVER['HTTP_USER_AGENT'];
@@ -882,34 +1210,41 @@ class SQ_Tools extends SQ_FrontController {
882
  /**
883
  *
884
  * @param string $url
885
- * @return array
886
  */
887
  public static function getSnippet($url) {
888
  if ($url == '' || !function_exists('preg_match')) {
889
- return;
890
  }
891
 
892
- $postid = 0;
 
893
  $snippet = array();
894
- $frontend = SQ_ObjController::getModel('SQ_Frontend');
895
 
896
- if ($postid == 0) {
897
- $postid = url_to_postid($url);
 
 
 
898
  }
899
 
900
- if ($postid > 0) {
901
- $frontend->setPost(get_post($postid));
902
- $snippet['title'] = $frontend->getTitle();
903
- $snippet['description'] = $frontend->getDescription();
904
- $snippet['url'] = $url;
905
- } elseif ($url == get_bloginfo('url')) {
906
- if (self::$options ['sq_auto_title'] == 1) {
907
- $snippet['title'] = self::$options['sq_fp_title'];
908
- }
909
- if (self::$options['sq_auto_description'] == 1) {
910
- $snippet['description'] = self::$options['sq_fp_description'];
911
- }
912
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
913
  $snippet['url'] = $url;
914
  } else {
915
  $length = array('title' => 66,
@@ -935,7 +1270,7 @@ class SQ_Tools extends SQ_FrontController {
935
  $snippet['description'] = substr($snippet['description'], 0, ($length['description'] - 1)) . '...';
936
  }
937
 
938
- $snippet['url'] = $url;
939
  if (strlen($snippet['url']) > $length['url'])
940
  $snippet['url'] = substr($snippet['url'], 0, ($length['url'] - 1)) . '...';
941
 
@@ -950,13 +1285,7 @@ class SQ_Tools extends SQ_FrontController {
950
  */
951
  private function checkDebug() {
952
  //if debug is called
953
- if (self::getIsset('sq_debug')) {
954
- if (self::getValue('sq_debug') == self::$options['sq_api']) {
955
- $_GET['sq_debug'] = 'on';
956
- } else {
957
- $_GET['sq_debug'] = 'off';
958
- }
959
-
960
  if (self::getValue('sq_debug') === 'on') {
961
  if (function_exists('register_shutdown_function')) {
962
  register_shutdown_function(array($this, 'showDebug'));
@@ -1015,7 +1344,6 @@ class SQ_Tools extends SQ_FrontController {
1015
  * Show the debug dump
1016
  */
1017
  public static function showDebug() {
1018
- global $wp_query;
1019
  echo "Debug result: <br />" . '<div id="wpcontent">' . @implode('<br />', self::$debug) . '</div>';
1020
 
1021
  $run_time = number_format(microtime(true) - REQUEST_TIME, 3);
@@ -1031,6 +1359,7 @@ class SQ_Tools extends SQ_FrontController {
1031
  public function sq_activate() {
1032
  set_transient('sq_activate', true);
1033
  set_transient('sq_rewrite', true);
 
1034
  }
1035
 
1036
  public function sq_deactivate() {
@@ -1039,9 +1368,9 @@ class SQ_Tools extends SQ_FrontController {
1039
 
1040
  $args = array();
1041
  $args['type'] = 'deact';
1042
- SQ_Action::apiCall('sq/user/log', $args, 5);
1043
 
1044
- remove_filter('rewrite_rules_array', array(SQ_ObjController::getBlock('SQ_BlockSettingsSeo'), 'rewrite_rules'));
1045
  global $wp_rewrite;
1046
  $wp_rewrite->flush_rules();
1047
  }
@@ -1064,7 +1393,7 @@ class SQ_Tools extends SQ_FrontController {
1064
  }
1065
 
1066
  public static function checkUpgrade() {
1067
- if (self::$options['sq_ver'] == 0 || self::$options['sq_ver'] < SQ_VERSION_ID) {
1068
  //Delete the old versions table
1069
  global $wpdb;
1070
  $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_title' WHERE `meta_key` = 'sq_fp_title'");
@@ -1073,11 +1402,104 @@ class SQ_Tools extends SQ_FrontController {
1073
  $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_keywords' WHERE `meta_key` = 'sq_fp_keywords'");
1074
  $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_post_keyword' WHERE `meta_key` = 'sq_post_keyword'");
1075
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1076
  self::saveOptions('sq_ver', SQ_VERSION_ID);
1077
 
 
 
 
1078
  global $wp_rewrite;
1079
  $wp_rewrite->flush_rules();
1080
  }
 
 
1081
  }
1082
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1083
  }
5
  *
6
  * @author Squirrly
7
  */
8
+ class SQ_Classes_Tools extends SQ_Classes_FrontController {
9
 
10
  /** @var array Saved options in database */
11
  public static $options = array();
12
+ public static $usermeta = array();
13
 
14
  /** @var integer Count the errors in site */
15
  static $errors_count;
17
  /** @var array */
18
  private static $debug;
19
  private static $source_code;
20
+ public static $is_ajax = null;
21
 
22
  public function __construct() {
23
  parent::__construct();
24
 
25
  self::$options = $this->getOptions();
26
 
27
+ $this->checkDebug(); //dev mode
28
  }
29
 
30
  public static function getUserID() {
68
  *
69
  * @return array
70
  */
71
+ public static function getOptions($action = '') {
72
  $default = array(
73
  'sq_ver' => 0,
74
+ 'sq_token' => md5(home_url() . date('d')), //daily token
75
  'sq_api' => '',
76
  'sq_checkedissues' => 0,
77
  'sq_areissues' => 0,
78
  'sq_use' => 1,
79
+ 'sq_use_frontend' => 1,
80
+ 'sq_laterload' => 0,
81
  'sq_post_types' => array(
82
  'post', 'page', 'product', 'shopp_page_shopp-products'
83
  ),
85
  'sq_auto_canonical' => 1,
86
  'sq_auto_sitemap' => 0,
87
  'sq_auto_feed' => 0,
88
+ 'sq_auto_noindex' => 1,
89
  'sq_auto_jsonld' => 0,
90
  'sq_auto_amp' => 0,
91
  'sq_jsonld_type' => 'Organization',
109
  'images' => 1,
110
  'videos' => 0,
111
  ),
112
+ 'sq_sitemap_perpage' => 200,
113
  'sq_sitemap_frequency' => 'weekly',
114
  'sq_sitemap' => array(
115
  'sitemap' => array('sitemap.xml', 1),
138
  'sq_auto_favicon' => 0,
139
  'favicon' => '',
140
  'sq_auto_twitter' => 0,
 
141
  'sq_auto_facebook' => 0,
142
  'sq_og_locale' => 'en_US',
 
 
 
 
 
 
143
  // --
 
144
  'sq_auto_title' => 1,
145
  'sq_auto_description' => 1,
146
+ 'sq_auto_keywords' => 1,
 
 
 
 
 
 
 
 
 
 
 
147
  // --
148
  'active_help' => '',
149
  'ignore_warn' => 0,
150
+ 'sq_copyright_agreement' => 0,
151
  'sq_keyword_help' => 1,
152
  'sq_keyword_information' => 0,
153
  'sq_url_fix' => 1,
154
+ //Ranking Option
155
  'sq_google_country' => 'com',
156
  'sq_google_language' => 'en',
157
  'sq_google_country_strict' => 0,
165
  //--
166
  'sq_dashboard' => 0,
167
  'sq_analytics' => 0,
168
+
169
+ 'socials' => array(
170
+ 'fb_admins' => array(),
171
+ 'fbconnectkey' => "",
172
+ 'fbadminapp' => "",
173
+
174
+ 'facebook_site' => "",
175
+ 'twitter_site' => "",
176
+ 'twitter' => "",
177
+ 'instagram_url' => "",
178
+ 'linkedin_url' => "",
179
+ 'myspace_url' => "",
180
+ 'pinterest_url' => "",
181
+ 'youtube_url' => "",
182
+ 'google_plus_url' => "",
183
+ 'twitter_card_type' => "summary",
184
+ 'plus_publisher' => ""
185
+ ),
186
+
187
+ 'codes' => array(
188
+ 'google_wt' => "",
189
+ 'google_analytics' => "",
190
+ 'facebook_pixel' => "",
191
+
192
+ 'bing_wt' => "",
193
+ 'pinterest_verify' => "",
194
+ 'alexa_verify' => "",
195
+ ),
196
+
197
+ 'patterns' => array(
198
+ 'home' => array(
199
+ 'sep' => '|',
200
+ 'title' => '{{sitename}} {{page}} {{sep}} {{sitedesc}}',
201
+ 'description' => '{{excerpt}} {{page}} {{sep}} {{sitename}}',
202
+ 'noindex' => 0,
203
+ 'nofollow' => 0,
204
+ 'disable' => 0,
205
+ ),
206
+ 'post' => array(
207
+ 'sep' => '|',
208
+ 'title' => '{{title}} {{page}}',
209
+ 'description' => '{{excerpt}}',
210
+ 'noindex' => 0,
211
+ 'nofollow' => 0,
212
+ 'disable' => 0,
213
+ ),
214
+ 'page' => array(
215
+ 'sep' => '|',
216
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
217
+ 'description' => '{{excerpt}}',
218
+ 'noindex' => 0,
219
+ 'nofollow' => 0,
220
+ 'disable' => 0,
221
+ ),
222
+ 'category' => array(
223
+ 'sep' => '|',
224
+ 'title' => '{{category}} {{page}} {{sep}} {{sitename}}',
225
+ 'description' => '{{category_description}}',
226
+ 'noindex' => 0,
227
+ 'nofollow' => 0,
228
+ 'disable' => 0,
229
+ ),
230
+ 'tag' => array(
231
+ 'sep' => '|',
232
+ 'title' => '{{tag}} {{page}} {{sep}} {{sitename}}',
233
+ 'description' => '{{excerpt}}',
234
+ 'noindex' => 0,
235
+ 'nofollow' => 0,
236
+ 'disable' => 0,
237
+ ),
238
+ 'tax-post_format' => array(
239
+ 'sep' => '|',
240
+ 'title' => '{{term_title}} ' . __('Format', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
241
+ 'description' => '{{excerpt}}',
242
+ 'noindex' => 0,
243
+ 'nofollow' => 0,
244
+ 'disable' => 0,
245
+ ),
246
+ 'tax-category' => array(
247
+ 'sep' => '|',
248
+ 'title' => '{{term_title}} ' . __('Category', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
249
+ 'description' => '{{excerpt}}',
250
+ 'noindex' => 0,
251
+ 'nofollow' => 0,
252
+ 'disable' => 0,
253
+ ),
254
+ 'tax-post_tag' => array(
255
+ 'sep' => '|',
256
+ 'title' => '{{term_title}} ' . __('Tag', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
257
+ 'description' => '{{excerpt}}',
258
+ 'noindex' => 0,
259
+ 'nofollow' => 0,
260
+ 'disable' => 0,
261
+ ),
262
+ 'tax-product_cat' => array(
263
+ 'sep' => '|',
264
+ 'title' => '{{term_title}} ' . __('Category', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
265
+ 'description' => '{{excerpt}}',
266
+ 'noindex' => 0,
267
+ 'nofollow' => 0,
268
+ 'disable' => 0,
269
+ ),
270
+ 'tax-product_tag' => array(
271
+ 'sep' => '|',
272
+ 'title' => '{{term_title}} ' . __('Tag', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
273
+ 'description' => '{{excerpt}}',
274
+ 'noindex' => 0,
275
+ 'nofollow' => 0,
276
+ 'disable' => 0,
277
+ ),
278
+ 'tax-product_shipping_class' => array(
279
+ 'sep' => '|',
280
+ 'title' => '{{term_title}} ' . __('Shipping Option', _SQ_PLUGIN_NAME_) . ' {{page}} {{sep}} {{sitename}}',
281
+ 'description' => '{{excerpt}}',
282
+ 'noindex' => 0,
283
+ 'nofollow' => 0,
284
+ 'disable' => 0,
285
+ ),
286
+ 'profile' => array(
287
+ 'sep' => '|',
288
+ 'title' => '{{name}}, ' . __('Author at', _SQ_PLUGIN_NAME_) . ' {{sitename}} {{page}}',
289
+ 'description' => '{{excerpt}}',
290
+ 'noindex' => 0,
291
+ 'nofollow' => 0,
292
+ 'disable' => 0,
293
+ ),
294
+ 'shop' => array(
295
+ 'sep' => '|',
296
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
297
+ 'description' => '{{excerpt}}',
298
+ 'noindex' => 0,
299
+ 'nofollow' => 0,
300
+ 'disable' => 0,
301
+ ),
302
+ 'product' => array(
303
+ 'sep' => '|',
304
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
305
+ 'description' => '{{excerpt}}',
306
+ 'noindex' => 0,
307
+ 'nofollow' => 0,
308
+ 'disable' => 0,
309
+ ),
310
+ 'archive' => array(
311
+ 'sep' => '|',
312
+ 'title' => '{{date}} {{page}} {{sep}} {{sitename}}',
313
+ 'description' => '{{excerpt}}',
314
+ 'noindex' => 0,
315
+ 'nofollow' => 0,
316
+ 'disable' => 0,
317
+ ),
318
+ 'search' => array(
319
+ 'sep' => '|',
320
+ 'title' => __('You searched for', _SQ_PLUGIN_NAME_) . ' {{searchphrase}} {{page}} {{sep}} {{sitename}}',
321
+ 'description' => '{{excerpt}}',
322
+ 'noindex' => 1,
323
+ 'nofollow' => 0,
324
+ 'disable' => 0,
325
+ ),
326
+ 'attachment' => array(
327
+ 'sep' => '|',
328
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
329
+ 'description' => '{{excerpt}}',
330
+ 'noindex' => 0,
331
+ 'nofollow' => 0,
332
+ 'disable' => 0,
333
+ ),
334
+ '404' => array(
335
+ 'sep' => '|',
336
+ 'title' => __('Page not found', _SQ_PLUGIN_NAME_) . ' {{sep}} {{sitename}}',
337
+ 'description' => '{{excerpt}}',
338
+ 'noindex' => 1,
339
+ 'nofollow' => 1,
340
+ 'disable' => 0,
341
+ ),
342
+ 'custom' => array(
343
+ 'sep' => '|',
344
+ 'title' => '{{title}} {{page}} {{sep}} {{sitename}}',
345
+ 'description' => '{{excerpt}}',
346
+ 'noindex' => 0,
347
+ 'nofollow' => 0,
348
+ 'disable' => 0,
349
+ ),
350
+ )
351
  );
352
  $options = json_decode(get_option(SQ_OPTION), true);
353
 
354
+ if ($action == 'reset') {
355
+ $init['sq_ver'] = $options['sq_ver'];
356
+ $init['sq_api'] = $options['sq_api'];
357
+ return $init;
358
+ }
359
+
360
  if (is_array($options)) {
361
  $options = @array_merge($default, $options);
362
  return $options;
365
  return $default;
366
  }
367
 
368
+ /**
369
+ * Get the option from database
370
+ * @param $key
371
+ * @return mixed
372
+ */
373
+ public static function getOption($key) {
374
+ if (!isset(self::$options[$key])) {
375
+ self::$options = self::getOptions();
376
+
377
+ if (!isset(self::$options[$key])) {
378
+ self::$options[$key] = false;
379
+ }
380
+ }
381
+
382
+ return self::$options[$key];
383
+ }
384
+
385
+
386
+ /**
387
+ * Get user metas
388
+ * @param null $user_id
389
+ * @return array|mixed
390
+ */
391
+ public static function getUserMetas($user_id = null) {
392
+ if (!isset($user_id)) {
393
+ $user_id = get_current_user_id();
394
+ }
395
+
396
+ $default = array('sq_auto_sticky' => 0,);
397
+
398
+ $usermeta = get_user_meta($user_id);
399
+ $usermetatmp = array();
400
+ if (is_array($usermeta)) foreach ($usermeta as $key => $values) {
401
+ $usermetatmp[$key] = $values[0];
402
+ }
403
+ $usermeta = $usermetatmp;
404
+
405
+ if (is_array($usermeta)) {
406
+ $usermeta = @array_merge($default, $usermeta);
407
+ } else {
408
+ $usermeta = $default;
409
+ }
410
+ self::$usermeta = $usermeta;
411
+ return $usermeta;
412
+ }
413
+
414
+ /**
415
+ * Get use meta
416
+ * @param $value
417
+ * @return bool
418
+ */
419
+ public static function getUserMeta($value) {
420
+ if (!isset(self::$usermeta[$value])) {
421
+ self::getUserMetas();
422
+ }
423
+
424
+ if (isset(self::$usermeta[$value])) {
425
+ return self::$usermeta[$value];
426
+ }
427
+
428
+ return false;
429
+ }
430
+
431
+ /**
432
+ * Save user meta
433
+ * @param $key
434
+ * @param $value
435
+ * @param null $user_id
436
+ */
437
+ public static function saveUserMeta($key, $value, $user_id = null) {
438
+ if (!isset($user_id)) {
439
+ $user_id = get_current_user_id();
440
+ }
441
+ self::$usermeta[$key] = $value;
442
+ update_user_meta($user_id, $key, $value);
443
+ }
444
+
445
+ /**
446
+ * Delete User meta
447
+ * @param $key
448
+ * @param null $user_id
449
+ */
450
+ public static function deleteUserMeta($key, $user_id = null) {
451
+ if (!isset($user_id)) {
452
+ $user_id = get_current_user_id();
453
+ }
454
+ unset(self::$usermeta[$key]);
455
+ delete_user_meta($user_id, $key);
456
+ }
457
+
458
  /**
459
  * Send completed tasks from tutorial
460
  * @return array
461
  */
462
  public static function getBriefOptions() {
463
+ $jsonld = self::getOption('sq_jsonld');
464
+ $socials = self::getOption('socials');
465
+ $codes = self::getOption('codes');
466
+
 
 
 
467
  return array(
468
  'sq_version' => SQ_VERSION_ID,
469
+ 'sq_use' => self::getOption('sq_use'),
470
+ 'sq_token' => self::getOption('sq_token'),
471
+ 'sq_checkedissues' => self::getOption('sq_checkedissues'),
472
+ 'sq_areissues' => self::getOption('sq_areissues'),
473
+ 'sq_auto_canonical' => self::getOption('sq_auto_canonical'),
474
+ 'sq_auto_meta' => self::getOption('sq_auto_meta'),
475
+ 'sq_auto_sitemap' => self::getOption('sq_auto_sitemap'),
476
+ 'sq_auto_jsonld' => (self::getOption('sq_auto_jsonld') && ($jsonld['Organization']['name'] <> '' || $jsonld['Person']['name'] <> '')),
477
+ 'sq_sitemap_ping' => SQ_Classes_Tools::getOption('sq_sitemap_ping'),
478
+ 'sq_auto_robots' => SQ_Classes_Tools::getOption('sq_auto_robots'),
479
+ 'sq_auto_favicon' => (SQ_Classes_Tools::getOption('sq_auto_favicon') && SQ_Classes_Tools::getOption('favicon') <> ''),
480
+ 'sq_auto_twitter' => SQ_Classes_Tools::getOption('sq_auto_twitter'),
481
+ 'sq_auto_facebook' => SQ_Classes_Tools::getOption('sq_auto_facebook'),
482
+ 'sq_auto_seo' => 1,
483
+ 'sq_auto_title' => (int)(SQ_Classes_Tools::getOption('sq_auto_title') == 1),
484
+ 'sq_auto_description' => (int)(SQ_Classes_Tools::getOption('sq_auto_description') == 1),
485
+ 'sq_auto_keywords' => (int)(SQ_Classes_Tools::getOption('sq_auto_keywords') == 1),
486
+ 'sq_auto_noindex' => (int)(SQ_Classes_Tools::getOption('sq_auto_noindex') == 1),
487
+ 'sq_google_plus' => (int)($socials['google_plus_url'] <> ''),
488
+ 'sq_google_wt' => (int)($codes['google_wt'] <> ''),
489
+ 'sq_google_analytics' => (int)($codes['google_analytics'] <> ''),
490
+ 'sq_facebook_insights' => (int)(!empty($socials['sq_facebook_insights'])),
491
+ 'sq_bing_wt' => (int)($codes['bing_wt'] <> ''),
492
+ 'sq_pinterest' => (int)($codes['pinterest_verify'] <> ''),
493
+ 'sq_alexa' => (int)($codes['alexa_verify'] <> ''),
494
+ 'sq_keyword_help' => SQ_Classes_Tools::getOption('sq_keyword_help'),
495
+ 'sq_keyword_information' => SQ_Classes_Tools::getOption('sq_keyword_information'),
496
+ 'sq_google_country_strict' => SQ_Classes_Tools::getOption('sq_google_country_strict'),
497
+ 'sq_keywordtag' => SQ_Classes_Tools::getOption('sq_keywordtag'),
498
+ 'sq_local_images' => SQ_Classes_Tools::getOption('sq_local_images'),
499
  );
500
+
501
  }
502
 
503
  /**
515
 
516
  /**
517
  * Set the header type
518
+ * @param string $type
519
  */
520
  public static function setHeader($type) {
521
+ if (SQ_Classes_Tools::getValue('sq_debug') == 'on') {
522
+ if (self::isAjax()) {
523
+ header("Content-type: text/html");
524
+ }
525
  return;
526
+ }
527
 
528
  switch ($type) {
529
  case 'json':
538
  case'text':
539
  header("Content-type: text/plain");
540
  break;
541
+ case'html':
542
+ header("Content-type: text/html");
543
+ break;
544
  }
545
  }
546
 
579
  /**
580
  * Show the notices to WP
581
  *
582
+ * @return string
583
  */
584
  public static function showNotices($message, $type = 'sq_notices') {
585
+ if (file_exists(_SQ_THEME_DIR_ . 'Notices.php')) {
586
  ob_start();
587
+ include(_SQ_THEME_DIR_ . 'Notices.php');
588
  $message = ob_get_contents();
589
  ob_end_clean();
590
  }
816
  if (function_exists('curl_exec')) {
817
  $ch = curl_init($url);
818
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
819
+ curl_setopt($ch, CURLOPT_TIMEOUT, 30);
820
  curl_exec($ch);
821
 
822
  $response['headers']['content-type'] = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
854
  public static function checkErrorSettings($count_only = false) {
855
  if (current_user_can('manage_options')) {
856
 
857
+ $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>";
858
 
859
  /* IF SEO INDEX IS OFF */
860
  if (self::getAutoSeoSquirrly()) {
861
  self::$errors_count++;
862
  if (!$count_only) {
863
+ 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');
864
  }
865
  }
866
 
871
  if (self::getDuplicateTitle()) {
872
  self::$errors_count++;
873
  if (!$count_only) {
874
+ 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');
875
  }
876
  }
877
 
879
  if (self::getDuplicateDescription()) {
880
  self::$errors_count++;
881
  if (!$count_only) {
882
+ 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');
883
  }
884
  }
885
 
887
  if (self::getDuplicateOG()) {
888
  self::$errors_count++;
889
  if (!$count_only) {
890
+ 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');
891
  }
892
  }
893
 
895
  if (self::getDuplicateTC()) {
896
  self::$errors_count++;
897
  if (!$count_only) {
898
+ 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');
899
  }
900
  }
901
  }
904
  if (self::getPrivateBlog()) {
905
  self::$errors_count++;
906
  if (!$count_only) {
907
+ 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');
908
  }
909
  }
910
 
911
  if (self::getBadLinkStructure()) {
912
  self::$errors_count++;
913
  if (!$count_only) {
914
+ 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');
915
+ }
916
+ }
917
+
918
+ if (self::getDefaultTagline()) {
919
+ self::$errors_count++;
920
+ if (!$count_only) {
921
+ 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');
922
  }
923
  }
924
 
925
  if (self::$errors_count == 0) {
926
  self::saveOptions('sq_areissues', 0);
927
+ SQ_Classes_Error::setError(__('Great! We didn\'t find any issue in your site.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
928
  } else {
929
  self::saveOptions('sq_areissues', 1);
930
  }
936
  * @return bool
937
  */
938
  private static function getAutoSeoSquirrly() {
939
+ return (!self::getOption('sq_use'));
 
 
 
940
  }
941
 
942
  /**
948
  return false;
949
  }
950
 
951
+ if (self::getOption('sq_use') && self::getOption('sq_auto_facebook')) {
952
 
953
  if (self::$source_code <> '') {
954
  preg_match_all("/<meta[\s+]property=[\"|\']og:url[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
970
  return false;
971
  }
972
 
973
+ if (self::getOption('sq_use') && self::getOption('sq_auto_twitter')) {
974
 
975
  if (self::$source_code <> '') {
976
  preg_match_all("/<meta[\s+]name=[\"|\']twitter:card[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
993
  }
994
  $total = 0;
995
 
996
+ if (self::getOption('sq_use') && self::$options['sq_auto_description'] == 1) {
997
  if (self::$source_code <> '') {
998
  preg_match_all("/<meta[^>]*name=[\"|\']description[\"|\'][^>]*content=[\"]([^\"]*)[\"][^>]*>/i", self::$source_code, $out);
999
  if (!empty($out) && isset($out[0]) && is_array($out[0])) {
1019
  }
1020
  $total = 0;
1021
 
1022
+ if (self::getOption('sq_use') && self::$options['sq_auto_title'] == 1) {
1023
  if (self::$source_code <> '') {
1024
  preg_match_all("/<title[^>]*>(.*)?<\/title>/i", self::$source_code, $out);
1025
 
1066
  }
1067
  }
1068
 
1069
+ private static function getDefaultTagline() {
1070
+ $blog_description = get_bloginfo('description');
1071
+ $default_blog_description = 'Just another WordPress site';
1072
+ $translated_blog_description = __('Just another WordPress site');
1073
+ return $translated_blog_description === $blog_description || $default_blog_description === $blog_description;
1074
+ }
1075
+
1076
  /**
1077
  * Support for i18n with wpml, polyglot or qtrans
1078
  *
1106
  return apply_filters('number_format_i18n', $formatted);
1107
  }
1108
 
1109
+ public static function clearTitle($title) {
1110
+ if ($title <> '') {
1111
+ $title = str_replace(array("\n", "&nbsp;"), " ", $title);
1112
+
1113
+ $title = self::i18n(trim(esc_html(ent2ncr(strip_tags($title)))));
1114
+ $title = addcslashes($title, '$');
1115
+
1116
+ $title = preg_replace('/\s{2,}/', ' ', $title);
1117
+ }
1118
+ return $title;
1119
+ }
1120
+
1121
+ public static function clearDescription($description) {
1122
+ if ($description <> '') {
1123
+
1124
+
1125
+ if (function_exists('preg_replace')) {
1126
+ $search = array("'<script[^>]*?>.*?<\/script>'si", // strip out javascript
1127
+ "/<form.*?<\/form>/si",
1128
+ "/<iframe.*?<\/iframe>/si",
1129
+ );
1130
+ $description = preg_replace($search, "", $description);
1131
+ $search = array(
1132
+ "/[\n\r]/si",
1133
+ "/&nbsp;/si",
1134
+ "/\s{2,}/",
1135
+ );
1136
+ $description = preg_replace($search, " ", $description);
1137
+ }
1138
+
1139
+ $description = self::i18n(trim(esc_html(ent2ncr(strip_tags($description)))));
1140
+ $description = addcslashes($description, '$');
1141
+ }
1142
+
1143
+ return $description;
1144
+ }
1145
+
1146
+ public static function clearKeywords($keywords) {
1147
+ return self::clearTitle($keywords);
1148
+ }
1149
+
1150
  public static function getBrowserInfo() {
1151
  $ub = '';
1152
  $u_agent = $_SERVER['HTTP_USER_AGENT'];
1210
  /**
1211
  *
1212
  * @param string $url
1213
+ * @return array | false
1214
  */
1215
  public static function getSnippet($url) {
1216
  if ($url == '' || !function_exists('preg_match')) {
1217
+ return false;
1218
  }
1219
 
1220
+
1221
+ $post_id = 0;
1222
  $snippet = array();
 
1223
 
1224
+ if ($post_id == 0) {
1225
+ $post_id = url_to_postid($url);
1226
+ } elseif ($url == get_bloginfo('url')) {
1227
+ if (!$post_id = get_option('page_on_front'))
1228
+ ($post_id = get_option('page_for_posts'));
1229
  }
1230
 
 
 
 
 
 
 
 
 
 
 
 
 
1231
 
1232
+ if ($post_id > 0) {
1233
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Controllers_Menu')->setPostByID($post_id)) {
1234
+ $snippet['title'] = (self::getOption('sq_auto_title') ? $post->sq->title : $post->post_title);
1235
+ $snippet['description'] = (self::getOption('sq_auto_description') ? $post->sq->description : $post->post_excerpt);
1236
+ $snippet['url'] = $url;
1237
+ }
1238
+ } elseif ($url == home_url()) {
1239
+ $post = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Post');
1240
+ $post->debug = 'isHomePage';
1241
+ $post->post_type = 'home';
1242
+ $post->hash = md5('wp_homepage');
1243
+ $post->url = home_url();
1244
+
1245
+ $post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost($post)->getPost();
1246
+ $snippet['title'] = (self::getOption('sq_auto_title') ? $post->sq->title : get_bloginfo('name'));
1247
+ $snippet['description'] = (self::getOption('sq_auto_description') ? $post->sq->description : get_bloginfo('description'));
1248
  $snippet['url'] = $url;
1249
  } else {
1250
  $length = array('title' => 66,
1270
  $snippet['description'] = substr($snippet['description'], 0, ($length['description'] - 1)) . '...';
1271
  }
1272
 
1273
+ $snippet['url'] = urldecode($url);
1274
  if (strlen($snippet['url']) > $length['url'])
1275
  $snippet['url'] = substr($snippet['url'], 0, ($length['url'] - 1)) . '...';
1276
 
1285
  */
1286
  private function checkDebug() {
1287
  //if debug is called
1288
+ if (SQ_DEBUG && self::getIsset('sq_debug')) {
 
 
 
 
 
 
1289
  if (self::getValue('sq_debug') === 'on') {
1290
  if (function_exists('register_shutdown_function')) {
1291
  register_shutdown_function(array($this, 'showDebug'));
1344
  * Show the debug dump
1345
  */
1346
  public static function showDebug() {
 
1347
  echo "Debug result: <br />" . '<div id="wpcontent">' . @implode('<br />', self::$debug) . '</div>';
1348
 
1349
  $run_time = number_format(microtime(true) - REQUEST_TIME, 3);
1359
  public function sq_activate() {
1360
  set_transient('sq_activate', true);
1361
  set_transient('sq_rewrite', true);
1362
+ set_transient('sq_import', true);
1363
  }
1364
 
1365
  public function sq_deactivate() {
1368
 
1369
  $args = array();
1370
  $args['type'] = 'deact';
1371
+ SQ_Classes_Action::apiCall('sq/user/log', $args, 5);
1372
 
1373
+ remove_filter('rewrite_rules_array', array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettingsSeo'), 'rewrite_rules'));
1374
  global $wp_rewrite;
1375
  $wp_rewrite->flush_rules();
1376
  }
1393
  }
1394
 
1395
  public static function checkUpgrade() {
1396
+ if (self::getOption('sq_ver') == 0 || self::getOption('sq_ver') < SQ_VERSION_ID) {
1397
  //Delete the old versions table
1398
  global $wpdb;
1399
  $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_title' WHERE `meta_key` = 'sq_fp_title'");
1402
  $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_fp_keywords' WHERE `meta_key` = 'sq_fp_keywords'");
1403
  $wpdb->query("UPDATE " . $wpdb->postmeta . " SET `meta_key` = '_sq_post_keyword' WHERE `meta_key` = 'sq_post_keyword'");
1404
 
1405
+ if (self::getOption('sq_ver') < 8200) {
1406
+ self::createTable();
1407
+
1408
+ //Import the SEO from the old format to the new format
1409
+ $seo = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSeo('squirrly-seo');
1410
+ if (!empty($seo)) {
1411
+ foreach ($seo as $sq_hash => $metas) {
1412
+ SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
1413
+ (isset($metas['url']) ? $metas['url'] : ''),
1414
+ $sq_hash,
1415
+ (int)$metas['post_id'],
1416
+ maybe_serialize($metas),
1417
+ gmdate('Y-m-d H:i:s'));
1418
+ }
1419
+ }
1420
+
1421
+ //Import the settings from the old format to the new format
1422
+ SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSettings('squirrly-seo');
1423
+ }
1424
+
1425
+
1426
  self::saveOptions('sq_ver', SQ_VERSION_ID);
1427
 
1428
+ self::getOptions();
1429
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(self::getBriefOptions())), 10);
1430
+
1431
  global $wp_rewrite;
1432
  $wp_rewrite->flush_rules();
1433
  }
1434
+
1435
+
1436
  }
1437
 
1438
+ public static function isAjax() {
1439
+ if (isset(self::$is_ajax)) {
1440
+ return self::$is_ajax;
1441
+ }
1442
+
1443
+ self::$is_ajax = false;
1444
+
1445
+ if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
1446
+ self::$is_ajax = true;
1447
+ } else {
1448
+ $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
1449
+ if ($url && (strpos($url, str_replace(get_bloginfo('url'), '', admin_url('admin-ajax.php', 'relative'))) !== false)) {
1450
+ self::$is_ajax = true;
1451
+ }
1452
+ }
1453
+ return self::$is_ajax;
1454
+ }
1455
+
1456
+ public static function isPluginInstalled($name) {
1457
+ switch ($name) {
1458
+ case 'instapage':
1459
+ return defined('INSTAPAGE_PLUGIN_PATH');
1460
+ break;
1461
+ case 'quick-seo':
1462
+ return defined('QSS_VERSION') && defined('_QSS_ROOT_DIR_');
1463
+ break;
1464
+ case 'premium-seo-pack':
1465
+ return defined('PSP_VERSION') && defined('_PSP_ROOT_DIR_');
1466
+ break;
1467
+ }
1468
+ }
1469
+
1470
+ public static function isFrontAdmin() {
1471
+ return (!is_admin() && is_user_logged_in());
1472
+ }
1473
+
1474
+ public static function createTable() {
1475
+ global $wpdb, $charset_collate;
1476
+ $sq_table_query = 'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . strtolower(_SQ_DB_) . ' (
1477
+ `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
1478
+ `blog_id` INT(10) NOT NULL,
1479
+ `post_id` bigint(20) NOT NULL DEFAULT 0 ,
1480
+ `URL` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
1481
+ `url_hash` VARCHAR(32) NOT NULL,
1482
+ `seo` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
1483
+ `date_time` DATETIME NOT NULL,
1484
+ PRIMARY KEY(id),
1485
+ UNIQUE url_hash(url_hash) USING BTREE,
1486
+ INDEX post_id(post_id) USING BTREE,
1487
+ INDEX blog_id_url_hash(blog_id, url_hash) USING BTREE
1488
+ ) CHARACTER SET utf8 COLLATE utf8_general_ci';
1489
+
1490
+ if (file_exists(ABSPATH . 'wp-admin/includes/upgrade.php')) {
1491
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
1492
+ if (function_exists('dbDelta')) {
1493
+ dbDelta($sq_table_query, true);
1494
+ $count = $wpdb->get_row("SELECT count(*) as count
1495
+ FROM information_schema.columns
1496
+ WHERE table_name = '" . $wpdb->prefix . strtolower(_SQ_DB_) . "'
1497
+ AND column_name = 'post_id';");
1498
+
1499
+ if ($count->count == 0) {
1500
+ $wpdb->query("ALTER TABLE " . $wpdb->prefix . strtolower(_SQ_DB_) . " ADD COLUMN `post_id` bigint(20) NOT NULL DEFAULT 0");
1501
+ }
1502
+ }
1503
+ }
1504
+ }
1505
  }
config/config.php CHANGED
@@ -4,33 +4,79 @@
4
  * The configuration file
5
  */
6
  define('_SQ_SUPPORT_EMAIL_', 'support@squirrly.co');
7
- if (defined('NONCE_KEY')){
8
- define('_SQ_NONCE_ID_', NONCE_KEY);
9
- }else{
10
- define('_SQ_NONCE_ID_', md5(date('Y-d')));
 
 
11
  }
 
12
  define('_SQ_MOBILE_ICON_SIZES', '76,120,152');
13
  define('REQUEST_TIME', microtime(true));
14
 
15
 
16
  if (!defined('PHP_VERSION_ID')) {
17
  $version = explode('.', PHP_VERSION);
18
- define('PHP_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
19
  }
20
  if (!defined('WP_VERSION_ID') && isset($wp_version)) {
21
  $version = explode('.', $wp_version);
22
- define('WP_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
23
  }
24
  if (!defined('WP_VERSION_ID'))
25
  define('WP_VERSION_ID', '3000');
26
 
27
  if (!defined('SQ_VERSION_ID')) {
28
- $version = explode('.', SQ_VERSION);
29
- define('SQ_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
30
  }
31
 
 
32
  /* No path file? error ... */
33
  require_once(dirname(__FILE__) . '/paths.php');
34
 
35
  /* Define the record name in the Option and UserMeta tables */
36
  define('SQ_OPTION', 'sq_options');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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);
10
+ } else {
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 of a post/page", _SQ_PLUGIN_NAME_),
64
+ '{{keyword}}' => __("Adds the post's keyword to the post description", _SQ_PLUGIN_NAME_),
65
+ )));
66
+
67
+
68
+ define('SQ_ALL_SEP', json_encode(array(
69
+ 'sc-dash' => '-',
70
+ 'sc-ndash' => '&ndash;',
71
+ 'sc-mdash' => '&mdash;',
72
+ 'sc-middot' => '&middot;',
73
+ 'sc-bull' => '&bull;',
74
+ 'sc-star' => '*',
75
+ 'sc-smstar' => '&#8902;',
76
+ 'sc-pipe' => '|',
77
+ 'sc-tilde' => '~',
78
+ 'sc-laquo' => '&laquo;',
79
+ 'sc-raquo' => '&raquo;',
80
+ 'sc-lt' => '&lt;',
81
+ 'sc-gt' => '&gt;',
82
+ )));
config/paths.php CHANGED
@@ -3,12 +3,13 @@
3
  $currentDir = dirname(__FILE__);
4
 
5
  define('_SQ_NAME_', 'squirrly');
 
 
6
  define('_SQ_PLUGIN_NAME_', 'squirrly-seo'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
7
- define('_THEME_NAME_', 'default'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
8
 
9
  $scheme = (((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") || (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN)) ? 'https:' : 'http:'); //CHECK IF SCURE
10
  defined('_SQ_DASH_URL_') || define('_SQ_DASH_URL_', 'https://my.squirrly.co/');
11
- defined('SQ_URI') || define('SQ_URI', (WP_VERSION_ID >= 4700) ? 'wp470' : 'wp350');
12
  defined('_SQ_API_URL_') || define('_SQ_API_URL_', '//api.squirrly.co/');
13
 
14
  defined('_SQ_STATIC_API_URL_') || define('_SQ_STATIC_API_URL_', '//storage.googleapis.com/squirrly/');
@@ -25,13 +26,11 @@ 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_ALL_THEMES_DIR_', _SQ_ROOT_DIR_ . '/themes/');
29
- define('_SQ_THEME_DIR_', _SQ_ROOT_DIR_ . '/themes/' . _THEME_NAME_ . '/');
30
 
31
  /* URLS */
32
  define('_SQ_URL_', plugins_url('', $currentDir));
33
- define('_SQ_ALL_THEMES_URL_', _SQ_URL_ . '/themes/');
34
- define('_SQ_THEME_URL_', _SQ_URL_ . '/themes/' . _THEME_NAME_ . '/');
35
 
36
 
37
  $upload_dir = wp_upload_dir();
3
  $currentDir = dirname(__FILE__);
4
 
5
  define('_SQ_NAME_', 'squirrly');
6
+ define('_SQ_NAMESPACE_', 'SQ');
7
+ define('_SQ_DB_', 'QSS');
8
  define('_SQ_PLUGIN_NAME_', 'squirrly-seo'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
 
9
 
10
  $scheme = (((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") || (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN)) ? 'https:' : 'http:'); //CHECK IF SCURE
11
  defined('_SQ_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/');
26
  define('_SQ_SERVICE_DIR_', _SQ_MODEL_DIR_ . '/services/');
27
  define('_SQ_TRANSLATIONS_DIR_', _SQ_ROOT_DIR_ . '/translations/');
28
  define('_SQ_CORE_DIR_', _SQ_ROOT_DIR_ . '/core/');
29
+ define('_SQ_THEME_DIR_', _SQ_ROOT_DIR_ . '/view/');
 
30
 
31
  /* URLS */
32
  define('_SQ_URL_', plugins_url('', $currentDir));
33
+ define('_SQ_THEME_URL_', _SQ_URL_ . '/view/');
 
34
 
35
 
36
  $upload_dir = wp_upload_dir();
controllers/Api.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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::getOption('sq_token') <> $token) {
39
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
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/Cron.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
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
+ foreach ($process as $key => $call) {
12
+
13
+ if (!$response = json_decode(SQ_Classes_Action::apiCall('sq/seo/post', $call, 10))) {
14
+ break;
15
+ }
16
+
17
+ if (isset($response->saved) && $response->saved == true) {
18
+ unset($process[$key]);
19
+ }
20
+ }
21
+ update_option('sq_seopost', json_encode($process));
22
+ }
23
+ }
24
+
25
+ public function processRankingCron() {
26
+ SQ_Classes_ObjController::getClass('SQ_Classes_Ranking')->processCron();
27
+ }
28
+
29
+ }
controllers/{SQ_Feed.php → Feed.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Class for Sitemap Generator
5
  */
6
- class SQ_Feed extends SQ_FrontController {
7
  /* @var string post limit */
8
 
9
  var $posts_limit = 10000;
@@ -15,7 +15,7 @@ class SQ_Feed extends SQ_FrontController {
15
 
16
  public function hookPreventRedirect() {
17
  global $wp_query;
18
- if (!empty($wp_query->query_vars["feed"])) {
19
  $wp_query->is_404 = false;
20
  $wp_query->is_feed = true;
21
 
@@ -27,11 +27,11 @@ class SQ_Feed extends SQ_FrontController {
27
  }
28
 
29
  public function feedCss() {
30
- echo "\t" . '<feedcss>' . _SQ_THEME_URL_ . 'css/' . 'sq_feed.css</feedcss>' . "\n";
31
  }
32
 
33
  public function feedStyle() {
34
- echo '<?xml-stylesheet type="text/xsl" href="' . _SQ_THEME_URL_ . 'css/' . 'sq_feed.xsl' . '"?>';
35
  }
36
 
37
  public function feedHeader($content_type, $type) {
@@ -43,7 +43,7 @@ class SQ_Feed extends SQ_FrontController {
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
  }
@@ -52,12 +52,14 @@ class SQ_Feed extends SQ_FrontController {
52
  global $post;
53
  if (has_post_thumbnail($post->ID)) {
54
  $attachment = get_post(get_post_thumbnail_id($post->ID));
55
- $thumb = wp_get_attachment_image_src($attachment->ID, 'large');
56
- $content = '<div class="thumbnail">
 
57
  <a href="' . get_permalink($post->ID) . '">
58
  <img src="' . esc_url($thumb[0]) . '" alt="' . get_the_title($post->ID) . '">
59
  </a>
60
  </div>' . $content;
 
61
  }
62
  return $content;
63
  }
@@ -72,7 +74,7 @@ class SQ_Feed extends SQ_FrontController {
72
 
73
  public function refreshSitemap($new_status, $old_status, $post) {
74
  if ($old_status <> $new_status && $new_status = 'publish') {
75
- if (SQ_Tools::$options['sq_sitemap_ping'] == 1) {
76
  wp_schedule_single_event(time() + 5, 'sq_processPing');
77
  }
78
  }
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;
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
 
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) {
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
  }
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
  }
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
  }
controllers/FrontMenu.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ //empty the cache from cache plugins
63
+ //SQ_Classes_Tools::emptyCache();
64
+
65
+ if (SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
66
+ $url,
67
+ $sq_hash,
68
+ (int)$post_id,
69
+ maybe_serialize($sq->toArray()),
70
+ gmdate('Y-m-d H:i:s')
71
+ )
72
+ ) {
73
+ $json['saved'] = $sq_hash;
74
+
75
+ if (SQ_Classes_Tools::isAjax()) {
76
+ if ($post_id > 0) {
77
+ if (SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->setPostByID($post_id)) {
78
+ $json['html'] = SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->getView('FrontMenu');
79
+ }
80
+ } elseif ($term_taxonomy_id > 0) {
81
+ if (SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->setPostByTaxID($term_taxonomy_id, $taxonomy)) {
82
+ $json['html'] = SQ_Classes_ObjController::getClass("SQ_Controllers_Menu")->getView('FrontMenu');
83
+ }
84
+ }
85
+ }
86
+ } else {
87
+ $json['error'] = 1;
88
+ $json['error_message'] = 'Could not Insert the information';
89
+ SQ_Classes_Tools::createTable();
90
+ };
91
+
92
+ } else {
93
+ $json['error'] = 1;
94
+ $json['error_message'] = 'Wrong number of parameters';
95
+
96
+ }
97
+
98
+ return $json;
99
+ }
100
+ }
controllers/Frontend.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
4
+
5
+ public function __construct() {
6
+ if (SQ_Classes_Tools::isAjax()) return;
7
+ parent::__construct();
8
+
9
+ //For favicon and Robots
10
+ $this->hookCheckFiles();
11
+
12
+ add_action('plugins_loaded', array($this, 'hookBuffer'));
13
+ add_action('template_redirect', array($this, 'hookBuffer'));
14
+
15
+ //SET THE POST FROM THE BEGINING
16
+ add_action('template_redirect', array($this->model, 'setPost'), 0);
17
+
18
+ /* Check if sitemap is on and Load the Sitemap */
19
+ if (SQ_Classes_Tools::getOption('sq_auto_sitemap')) SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps');
20
+
21
+ /* Load the Feed Style */
22
+ if (SQ_Classes_Tools::getOption('sq_auto_feed')) SQ_Classes_ObjController::getClass('SQ_Controllers_Feed');
23
+
24
+ /* Fix the Links for feed*/
25
+ if (SQ_Classes_Tools::getOption('sq_url_fix')) add_action('the_content', array($this, 'fixFeedLinks'), 11);
26
+
27
+ }
28
+
29
+ /**
30
+ * HOOK THE BUFFER
31
+ */
32
+ public function hookBuffer() {
33
+ remove_action('template_redirect', array($this, 'hookBuffer'));
34
+
35
+ if ($this->isSquirrlySeoEnabled()) {
36
+ global $wp_super_cache_late_init;
37
+ if (isset($wp_super_cache_late_init) && $wp_super_cache_late_init == 1 && !did_action('init')) {
38
+ //add an action after Super cache late login is started
39
+ add_action('init', array($this->model, 'startBuffer'), PHP_INT_MAX);
40
+ } elseif (SQ_Classes_Tools::getOption('sq_laterload') && !did_action('template_redirect')) {
41
+ add_action('template_redirect', array($this->model, 'startBuffer'), PHP_INT_MAX);
42
+ } else {
43
+ $this->model->startBuffer();
44
+ }
45
+
46
+ if (defined('WP_ROCKET_VERSION')) {
47
+ add_filter('rocket_buffer', array($this->model, 'getBuffer'), PHP_INT_MAX);
48
+ }
49
+
50
+ add_action('shutdown', array($this->model, 'getBuffer'));
51
+ }
52
+ }
53
+
54
+
55
+ /**
56
+ * Called after plugins are loaded
57
+ */
58
+ public function hookCheckFiles() {
59
+ //Check for sitemap and robots
60
+ if ($basename = $this->isFile($_SERVER['REQUEST_URI'])) {
61
+ if (SQ_Classes_Tools::getOption('sq_auto_robots') == 1) {
62
+ if ($basename == "robots.txt") {
63
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Robots');
64
+ apply_filters('sq_robots', false);
65
+ exit();
66
+ }
67
+ }
68
+
69
+ if (SQ_Classes_Tools::getOption('favicon') <> '') {
70
+ if ($basename == "favicon.icon") {
71
+ SQ_Classes_Tools::setHeader('ico');
72
+ @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon'));
73
+ exit();
74
+ } elseif ($basename == "touch-icon.png") {
75
+ SQ_Classes_Tools::setHeader('png');
76
+ @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon'));
77
+ exit();
78
+ } else {
79
+ $appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
80
+ foreach ($appleSizes as $appleSize) {
81
+ if ($basename == "touch-icon$appleSize.png") {
82
+ SQ_Classes_Tools::setHeader('png');
83
+ @readfile(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon') . $appleSize);
84
+ exit();
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ }
91
+
92
+ }
93
+
94
+
95
+ /**
96
+ * Hook the Header load
97
+ */
98
+ public function hookFronthead() {
99
+ if (!SQ_Classes_Tools::isAjax()) {
100
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia(_SQ_THEME_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css');
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Change the image path to absolute when in feed
106
+ * @param string $content
107
+ *
108
+ * @return string
109
+ */
110
+ public function fixFeedLinks($content) {
111
+ if (is_feed()) {
112
+ $find = $replace = $urls = array();
113
+
114
+ @preg_match_all('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', $content, $out);
115
+ if (is_array($out)) {
116
+ if (!is_array($out[1]) || empty($out[1]))
117
+ return $content;
118
+
119
+ foreach ($out[1] as $row) {
120
+ if (strpos($row, '//') === false) {
121
+ if (!in_array($row, $urls)) {
122
+ $urls[] = $row;
123
+ }
124
+ }
125
+ }
126
+ }
127
+
128
+ @preg_match_all('/<a[^>]*href=[\'"]([^\'"]+)[\'"][^>]*>/i', $content, $out);
129
+ if (is_array($out)) {
130
+ if (!is_array($out[1]) || empty($out[1]))
131
+ return $content;
132
+
133
+ foreach ($out[1] as $row) {
134
+ if (strpos($row, '//') === false) {
135
+ if (!in_array($row, $urls)) {
136
+ $urls[] = $row;
137
+ }
138
+ }
139
+ }
140
+ }
141
+ if (!is_array($urls) || (is_array($urls) && empty($urls))) {
142
+ return $content;
143
+ }
144
+
145
+ $urls = array_unique($urls);
146
+ foreach ($urls as $url) {
147
+ $find[] = "'" . $url . "'";
148
+ $replace[] = "'" . esc_url(home_url() . $url) . "'";
149
+ $find[] = '"' . $url . '"';
150
+ $replace[] = '"' . esc_url(home_url() . $url) . '"';
151
+ }
152
+ if (!empty($find) && !empty($replace)) {
153
+ $content = str_replace($find, $replace, $content);
154
+ }
155
+ }
156
+ return $content;
157
+ }
158
+
159
+ public function hookFrontfooter() {
160
+ if ($this->isSquirrlySeoEnabled()) {
161
+ echo $this->model->getFooter();
162
+ }
163
+ }
164
+
165
+ public function isSquirrlySeoEnabled() {
166
+ return (apply_filters('sq_use', SQ_Classes_Tools::getOption('sq_use')) == 1);
167
+ }
168
+
169
+ public function isFile($url = null) {
170
+ if (isset($url) && $url <> '') {
171
+ $url = basename($url);
172
+ if (strpos($url, '?') <> '') {
173
+ $url = substr($url, 0, strpos($url, '?'));
174
+ }
175
+
176
+ $files = array('ico', 'icon', 'txt', 'jpg', 'jpeg', 'png', 'bmp', 'gif',
177
+ 'css', 'scss', 'js',
178
+ 'pdf', 'doc', 'docx', 'csv', 'xls', 'xslx',
179
+ 'mp4', 'mpeg',
180
+ 'zip', 'rar');
181
+
182
+ if (strrpos($url, '.') !== false) {
183
+ $ext = substr($url, strrpos($url, '.') + 1);
184
+ if (in_array($ext, $files)) {
185
+ return $url;
186
+ }
187
+ }
188
+ }
189
+
190
+ return false;
191
+
192
+ }
193
+ }
controllers/Menu.php ADDED
@@ -0,0 +1,548 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
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
+
12
+ public function __construct() {
13
+ parent::__construct();
14
+ add_action('admin_bar_menu', array($this, 'hookTopmenu'), 999);
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
+ //check if activated
24
+ if (get_transient('sq_activate') == 1) {
25
+ //create the table
26
+ SQ_Classes_Tools::createTable();
27
+ //Check if there are expected upgrades
28
+ SQ_Classes_Tools::checkUpgrade();
29
+
30
+ // Delete the redirect transient
31
+ delete_transient('sq_activate');
32
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
33
+
34
+ wp_safe_redirect(admin_url('admin.php?page=sq_dashboard'));
35
+ exit();
36
+ } else {
37
+ //Deactivate the QuickSEO plugin
38
+ if (SQ_Classes_Tools::isPluginInstalled('quick-seo')) {
39
+ $quickSEO = _QSS_ROOT_DIR_ . '/index.php';
40
+ if (is_plugin_active(plugin_basename($quickSEO))) {
41
+ delete_transient('qss_activate');
42
+
43
+ deactivate_plugins(plugin_basename($quickSEO), true);
44
+ 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_));
45
+ }
46
+
47
+ }
48
+
49
+ //Deactivate the Premium SEO Pack plugin
50
+ if (SQ_Classes_Tools::isPluginInstalled('premium-seo-pack')) {
51
+ $phpSEO = _PSP_ROOT_DIR_ . '/index.php';
52
+ if (is_plugin_active(plugin_basename($phpSEO))) {
53
+ delete_transient('psp_activate');
54
+ deactivate_plugins(plugin_basename($phpSEO), true);
55
+ 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_));
56
+
57
+ }
58
+ }
59
+
60
+ //Make sure Squirrly upgrades the settings and seo
61
+ if (SQ_Classes_Tools::getOption('sq_ver') < 8200 && SQ_Classes_Tools::getOption('sq_api') <> '') {
62
+ wp_redirect('admin.php?page=sq_dashboard&action=sq_dataupgrade&nonce=' . wp_create_nonce(_SQ_NONCE_ID_));
63
+ }
64
+ }
65
+
66
+ if (get_transient('sq_rewrite') == 1) {
67
+ // Delete the redirect transient
68
+ delete_transient('sq_rewrite');
69
+ global $wp_rewrite;
70
+ $wp_rewrite->flush_rules();
71
+ }
72
+
73
+
74
+ }
75
+ //activate the cron job if not exists
76
+ if (!wp_get_schedule('sq_processCron')) {
77
+ wp_schedule_event(time(), 'hourly', 'sq_processCron');
78
+ }
79
+
80
+ add_filter('rewrite_rules_array', array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettingsSeo'), 'rewrite_rules'), 999, 1);
81
+
82
+
83
+ }
84
+
85
+ /**
86
+ * Add a menu in Admin Bar
87
+ *
88
+ * @param WP_Admin_Bar $wp_admin_bar
89
+ */
90
+ public function hookTopmenu($wp_admin_bar) {
91
+ global $tag, $wp_the_query;
92
+
93
+ if (!is_user_logged_in()) {
94
+ return;
95
+ }
96
+
97
+ $wp_admin_bar->add_node(array(
98
+ 'id' => 'sq_posts',
99
+ 'title' => __('See Your Rank on Google', _SQ_PLUGIN_NAME_),
100
+ 'href' => admin_url('admin.php?page=sq_posts'),
101
+ 'parent' => false
102
+ ));
103
+
104
+ if (is_admin()) {
105
+ $current_screen = get_current_screen();
106
+ SQ_Classes_Tools::dump($current_screen);
107
+
108
+ $post = get_post();
109
+ if ('post' == $current_screen->base
110
+ && ($post_type_object = get_post_type_object($post->post_type))
111
+ && current_user_can('edit_post', $post->ID)
112
+ && ($post_type_object->public)) {
113
+ } elseif ('edit' == $current_screen->base
114
+ && ($post_type_object = get_post_type_object($current_screen->post_type))
115
+ && ($post_type_object->show_in_admin_bar)
116
+ && !('edit-' . $current_screen->post_type === $current_screen->id)) {
117
+ } elseif ('term' == $current_screen->base
118
+ && isset($tag) && is_object($tag) && !is_wp_error($tag)
119
+ && ($tax = get_taxonomy($tag->taxonomy))
120
+ && $tax->public) {
121
+ } else {
122
+ return;
123
+ }
124
+
125
+ //Add the snippet in all post types
126
+ $this->addMetabox();
127
+ } else {
128
+ //If user set not to load Squirrly in frontend
129
+ if (!SQ_Classes_Tools::getOption('sq_use_frontend')) {
130
+ return;
131
+ }
132
+
133
+ if (!current_user_can('manage_options')) {
134
+ $current_object = $wp_the_query->get_queried_object();
135
+
136
+ if (empty($current_object))
137
+ return;
138
+
139
+ if (!empty($current_object->post_type)
140
+ && ($post_type_object = get_post_type_object($current_object->post_type))
141
+ && current_user_can('edit_post', $current_object->ID)
142
+ && $post_type_object->show_in_admin_bar
143
+ && $edit_post_link = get_edit_post_link($current_object->ID)) {
144
+ } elseif (!empty($current_object->taxonomy)
145
+ && ($tax = get_taxonomy($current_object->taxonomy))
146
+ && current_user_can('edit_term', $current_object->term_id)
147
+ && $edit_term_link = get_edit_term_link($current_object->term_id, $current_object->taxonomy)) {
148
+ } else {
149
+ return;
150
+ }
151
+ }
152
+ }
153
+
154
+
155
+ $wp_admin_bar->add_node(array(
156
+ 'id' => 'sq_bar_menu',
157
+ 'title' => '<span class="dashicons-sqlogo"></span> ' . __('Custom SEO', _SQ_PLUGIN_NAME_),
158
+ 'parent' => 'top-secondary',
159
+ ));
160
+
161
+ $wp_admin_bar->add_menu(array(
162
+ 'id' => 'sq_bar_submenu',
163
+ 'parent' => 'sq_bar_menu',
164
+ 'meta' => array(
165
+ 'html' => $this->getView('FrontMenu'),
166
+ 'tabindex' => PHP_INT_MAX,
167
+ ),
168
+ ));
169
+
170
+ if (is_admin()) {
171
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('frontmenu');
172
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('patterns');
173
+ }
174
+
175
+ }
176
+
177
+ /**
178
+ * Creates the Setting menu in Wordpress
179
+ */
180
+ public function hookMenu() {
181
+
182
+ $this->post_type = SQ_Classes_Tools::getOption('sq_post_types');
183
+
184
+ //Push the Analytics Check
185
+ if (strpos($_SERVER['REQUEST_URI'], '?page=sq_dashboard') !== false) {
186
+ SQ_Classes_Tools::saveOptions('sq_dashboard', 1);
187
+ }
188
+ if (strpos($_SERVER['REQUEST_URI'], '?page=sq_analytics') !== false) {
189
+ SQ_Classes_Tools::saveOptions('sq_analytics', 1);
190
+ }
191
+
192
+ $analytics_alert = 0;
193
+ if (SQ_Classes_ObjController::getClass('SQ_Models_Post')->countKeywords() > 0 && !SQ_Classes_Tools::getOption('sq_analytics')) {
194
+ $analytics_alert = 1;
195
+ if (!get_transient('sq_analytics')) {
196
+ set_transient('sq_analytics', time(), (60 * 60 * 24 * 7));
197
+ } else {
198
+ $time_loaded = get_transient('sq_analytics');
199
+ if (time() - $time_loaded > (60 * 60 * 24 * 3) && time() - $time_loaded < (60 * 60 * 24 * 14)) {
200
+ SQ_Classes_Error::setError(__('Check out the Squirrly Analytics section. <a href="admin.php?page=sq_posts" title="Squirrly Analytics">Click here</a>', _SQ_PLUGIN_NAME_));
201
+ }
202
+ }
203
+ }
204
+
205
+ $dashboard_alert = (int)(SQ_Classes_Tools::getOption('sq_dashboard') == 0);
206
+
207
+
208
+ ///////////////
209
+
210
+ $this->model->addMenu(array(ucfirst(_SQ_NAME_),
211
+ 'Squirrly' . SQ_Classes_Tools::showNotices(SQ_Classes_Tools::$errors_count, 'errors_count'),
212
+ 'edit_posts',
213
+ 'sq_dashboard',
214
+ null,
215
+ _SQ_THEME_URL_ . 'img/settings/menu_icon_16.png'
216
+ ));
217
+
218
+ $this->model->addSubmenu(array('sq_dashboard',
219
+ ucfirst(_SQ_NAME_) . __(' Dashboard', _SQ_PLUGIN_NAME_),
220
+ ((SQ_Classes_Tools::getOption('sq_api') == '') ? __('First Step', _SQ_PLUGIN_NAME_) : __('Dashboard', _SQ_PLUGIN_NAME_)) . SQ_Classes_Tools::showNotices($dashboard_alert, 'errors_count'),
221
+ 'edit_posts',
222
+ 'sq_dashboard',
223
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockDashboard'), 'init')
224
+ ));
225
+
226
+ //IF SERP PLUGIN IS NOT INSTALLED
227
+ if (!class_exists('SRC_Classes_ObjController')) {
228
+ $this->model->addSubmenu(array('sq_dashboard',
229
+ ucfirst(_SQ_NAME_) . __(' Performance Analytics', _SQ_PLUGIN_NAME_),
230
+ __('Performance <br />Analytics', _SQ_PLUGIN_NAME_) . SQ_Classes_Tools::showNotices($analytics_alert, 'errors_count'),
231
+ 'edit_posts',
232
+ 'sq_posts',
233
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockPostsAnalytics'), 'init')
234
+ ));
235
+ }
236
+
237
+ $this->model->addSubmenu(array('sq_dashboard',
238
+ ucfirst(_SQ_NAME_) . __(' Keyword Research', _SQ_PLUGIN_NAME_),
239
+ __('Keyword Research', _SQ_PLUGIN_NAME_),
240
+ 'edit_posts',
241
+ 'sq_keywordresearch',
242
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockKeywordResearch'), 'init')
243
+ ));
244
+
245
+ $this->model->addSubmenu(array('sq_dashboard',
246
+ ucfirst(_SQ_NAME_) . __(' Live Assistant', _SQ_PLUGIN_NAME_),
247
+ __('Live Assistant', _SQ_PLUGIN_NAME_),
248
+ 'edit_posts',
249
+ 'sq_liveassistant',
250
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockLiveAssistant'), 'init')
251
+ ));
252
+ $this->model->addSubmenu(array('sq_dashboard',
253
+ __(' Copywriting', _SQ_PLUGIN_NAME_),
254
+ __('Copywriting', _SQ_PLUGIN_NAME_),
255
+ 'edit_posts',
256
+ 'sq_copyright',
257
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockCopyright'), 'init')
258
+ ));
259
+
260
+ if (current_user_can('manage_options')) {
261
+ $this->model->addSubmenu(array('sq_dashboard',
262
+ ucfirst(_SQ_NAME_) . __(' SEO Audit', _SQ_PLUGIN_NAME_),
263
+ __('Site Audit', _SQ_PLUGIN_NAME_),
264
+ 'edit_posts',
265
+ 'sq_seoaudit',
266
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockAudit'), 'init')
267
+ ));
268
+ }
269
+
270
+ $this->model->addSubmenu(array('sq_dashboard',
271
+ ucfirst(_SQ_NAME_) . __(' SEO Settings', _SQ_PLUGIN_NAME_),
272
+ __('SEO Settings', _SQ_PLUGIN_NAME_) . SQ_Classes_Tools::showNotices(SQ_Classes_Tools::$errors_count, 'errors_count'),
273
+ 'manage_options',
274
+ 'sq_seo',
275
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettingsSeo'), 'init')
276
+ ));
277
+
278
+
279
+ $this->model->addSubmenu(array('sq_dashboard',
280
+ ucfirst(_SQ_NAME_) . __(' Advanced Settings', _SQ_PLUGIN_NAME_),
281
+ __('Advanced Settings', _SQ_PLUGIN_NAME_),
282
+ 'manage_options',
283
+ 'sq_settings',
284
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockSettings'), 'init')
285
+ ));
286
+
287
+ $this->model->addSubmenu(array('sq_dashboard',
288
+ ucfirst(_SQ_NAME_) . __(' SEO Patterns', _SQ_PLUGIN_NAME_),
289
+ __('Patterns', _SQ_PLUGIN_NAME_),
290
+ 'manage_options',
291
+ 'sq_patterns',
292
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockPatterns'), 'init')
293
+ ));
294
+
295
+ $this->model->addSubmenu(array('sq_dashboard',
296
+ ucfirst(_SQ_NAME_) . __(' Account Info', _SQ_PLUGIN_NAME_),
297
+ __('Account Info', _SQ_PLUGIN_NAME_),
298
+ 'manage_options',
299
+ 'sq_account',
300
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockAccount'), 'init')
301
+ ));
302
+
303
+ $this->model->addSubmenu(array('sq_dashboard',
304
+ ucfirst(_SQ_NAME_) . __(' Support', _SQ_PLUGIN_NAME_),
305
+ __('Support', _SQ_PLUGIN_NAME_),
306
+ 'edit_posts',
307
+ 'sq_customerservice',
308
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockCustomerService'), 'init')
309
+ ));
310
+
311
+ $this->model->addSubmenu(array('sq_dashboard',
312
+ __('Become an Affiliate with ', _SQ_PLUGIN_NAME_) . ucfirst(_SQ_NAME_),
313
+ __('Become an Affiliate', _SQ_PLUGIN_NAME_),
314
+ 'edit_posts',
315
+ 'sq_affiliate',
316
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockAffiliate'), 'init')
317
+ ));
318
+
319
+ if (current_user_can('manage_options')) {
320
+ $this->model->addSubmenu(array('sq_dashboard',
321
+ __('Import SEO ', _SQ_PLUGIN_NAME_),
322
+ __('Import SEO', _SQ_PLUGIN_NAME_),
323
+ 'edit_posts',
324
+ 'sq_import',
325
+ array(SQ_Classes_ObjController::getClass('SQ_Core_BlockImport'), 'init')
326
+ ));
327
+ }
328
+
329
+ foreach ($this->post_type as $type) {
330
+ $this->model->addMeta(array('post' . _SQ_NAME_,
331
+ ucfirst(_SQ_NAME_),
332
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_Post'), 'init'),
333
+ $type,
334
+ 'side',
335
+ 'high'
336
+ ));
337
+ }
338
+
339
+
340
+ //Add the Rank in the Posts list
341
+ $postlist = SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList');
342
+ if (is_object($postlist)) {
343
+ $postlist->init();
344
+ }
345
+
346
+ //Show bar to go back and finish the help
347
+ if (current_user_can('manage_options') && ($this->is_page('edit') || strpos($_SERVER['REQUEST_URI'], 'sq_posts') !== false)) {
348
+ if (SQ_Classes_Tools::getOption('active_help') <> '' && !SQ_Classes_Tools::getOption('ignore_warn')) {
349
+ SQ_Classes_Error::setError(sprintf(__('Go back and complete the Squirrly Tasks for today %sContinue%s', _SQ_PLUGIN_NAME_), '<a href="admin.php?page=sq_' . SQ_Classes_Tools::getOption('active_help') . '" class="sq_button" title="Continue the Help">', '</a>'), 'helpnotice');
350
+ }
351
+ }
352
+
353
+
354
+ }
355
+
356
+ /**
357
+ * Add Post Editor Meta Box
358
+ */
359
+ public function addMetabox() {
360
+ $this->model->addMeta(array('sq_blocksnippet',
361
+ ucfirst(_SQ_NAME_) . ' ' . __('SEO Snippet', _SQ_PLUGIN_NAME_),
362
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_FrontMenu'), 'show'),
363
+ null,
364
+ 'normal',
365
+ 'high'
366
+ ));
367
+ }
368
+
369
+ /**
370
+ * Hook the Head sequence in frontend when user is logged in
371
+ */
372
+ public function hookFronthead() {
373
+ if (current_user_can('edit_posts')) {
374
+ //prevent some compatibility errors with other plugins
375
+ remove_all_actions('print_media_templates');
376
+
377
+ //loade the media library
378
+ wp_enqueue_media();
379
+
380
+ //Set the current post domain with all the data
381
+ $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
382
+ }
383
+ }
384
+
385
+ /**
386
+ * Called when Post action is triggered
387
+ *
388
+ * @return void
389
+ */
390
+ public function action() {
391
+ parent::action();
392
+
393
+ if (!current_user_can('edit_posts')) {
394
+ return;
395
+ }
396
+
397
+ SQ_Classes_Tools::setHeader('json');
398
+
399
+ switch (SQ_Classes_Tools::getValue('action')) {
400
+ case 'sq_getfrontmenu':
401
+ $json = array();
402
+ $post_id = (int)SQ_Classes_Tools::getValue('post_id', 0);
403
+ $term_taxonomy_id = (int)SQ_Classes_Tools::getValue('term_taxonomy_id', 0);
404
+ $taxonomy = SQ_Classes_Tools::getValue('taxonomy', 'category');
405
+
406
+ if ($post_id > 0) {
407
+ if ($this->setPostByID($post_id)) {
408
+ $json['html'] = $this->getView('FrontMenu');
409
+ }
410
+ } elseif ($term_taxonomy_id > 0) {
411
+ if ($this->setPostByTaxID($term_taxonomy_id, $taxonomy)) {
412
+ if (get_term_link($term_taxonomy_id) == $this->post->url) {
413
+ $json['html'] = $this->getView('FrontMenu');
414
+ }
415
+ }
416
+ }
417
+ echo json_encode($json);
418
+ exit();
419
+ }
420
+ }
421
+
422
+ public function getPostType($for, $post_type = null) {
423
+ switch ($for) {
424
+ case 'og:type':
425
+ if (isset($this->post->sq) && $this->post->sq->og_type <> '') {
426
+ if ($this->post->sq->og_type == $post_type) return 'selected="selected"';
427
+ } else {
428
+ switch ($post_type) {
429
+ case 'website':
430
+ if ($this->post->post_type == 'home') return 'selected="selected"';
431
+ break;
432
+ default:
433
+ if ($this->post->post_type == $post_type) return 'selected="selected"';
434
+ }
435
+ }
436
+ break;
437
+ }
438
+ return false;
439
+ }
440
+
441
+ public function getImportList() {
442
+ return apply_filters('sq_importList', false);
443
+ }
444
+
445
+ public function setPostByURL($url) {
446
+ $post_id = url_to_postid($url);
447
+ $this->post = get_post($post_id);
448
+
449
+ if ($post_id > 0) {
450
+ add_filter('sq_current_post', array($this, 'setCurrentPost'), 10);
451
+ SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost();
452
+ $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
453
+ return $this->post;
454
+ }
455
+
456
+ return false;
457
+ }
458
+
459
+ public function setPostByID($post = 0, $taxonomy = 'post') {
460
+ if ($post instanceof WP_Post) {
461
+ $this->post = $post;
462
+ } else {
463
+ $post_id = (int)$post;
464
+ if ($post_id > 0) {
465
+ $this->post = get_post($post_id);
466
+ }
467
+ }
468
+
469
+ if ($this->post) {
470
+ set_query_var('post_type', $this->post->post_type);
471
+ $this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost($this->post)->getPost();
472
+
473
+ SQ_Classes_Tools::dump($this->post);
474
+ return $this->post;
475
+ }
476
+ return false;
477
+ }
478
+
479
+ public function setPostByTaxID($term_taxonomy_id = 0, $taxonomy = 'category') {
480
+ if ($term_taxonomy_id > 0) {
481
+ global $wp_query;
482
+
483
+ $term = get_term($term_taxonomy_id, $taxonomy);
484
+ if ($taxonomy == 'category') {
485
+ $args = array('posts_per_page' => '1', 'cat' => $term_taxonomy_id);
486
+ } elseif ($taxonomy == 'post_tag') {
487
+ $args = array('posts_per_page' => 1, 'tag_id' => $term_taxonomy_id);
488
+ } else {
489
+ $args = array('posts_per_page' => 1, $taxonomy => $term->slug, 'term_id' => $term_taxonomy_id);
490
+ }
491
+
492
+ $tax_query = array(
493
+ array(
494
+ 'taxonomy' => $taxonomy,
495
+ 'terms' => $term->slug,
496
+ 'field' => 'slug',
497
+ 'include_children' => true,
498
+ 'operator' => 'IN'
499
+ ),
500
+ array(
501
+ 'taxonomy' => $taxonomy,
502
+ 'terms' => $term->slug,
503
+ 'field' => 'slug',
504
+ 'include_children' => false,
505
+ )
506
+ );
507
+
508
+ $args['tax_query'] = $tax_query;
509
+ $wp_query->query($args);
510
+ set_query_var('post_type', $taxonomy);
511
+
512
+ if ($this->post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost($term)->getPost()) {
513
+ return $this->post;
514
+ }
515
+ }
516
+ return false;
517
+ }
518
+
519
+ public function setCurrentPost() {
520
+ return $this->post;
521
+ }
522
+
523
+ /**
524
+ * Is the user on page name? Default name = post edit page
525
+ * name = 'quirrly'
526
+ *
527
+ * @global array $pagenow
528
+ * @param string $name
529
+ * @return boolean
530
+ */
531
+ public function is_page($name = '') {
532
+ global $pagenow;
533
+ $page = array();
534
+ //make sure we are on the backend
535
+ if (is_admin() && $name <> '') {
536
+ if ($name == 'edit') {
537
+ $page = array('post.php', 'post-new.php');
538
+ } else {
539
+ array_push($page, $name . '.php');
540
+ }
541
+
542
+ return in_array($pagenow, $page);
543
+ }
544
+
545
+ return false;
546
+ }
547
+
548
+ }
controllers/{SQ_Post.php → Post.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class SQ_Post extends SQ_FrontController {
4
 
5
  public $saved;
6
 
@@ -16,15 +16,15 @@ class SQ_Post extends SQ_FrontController {
16
  add_filter('mce_external_plugins', array($this->model, 'addHeadingButton'));
17
  add_filter('mce_buttons', array($this->model, 'registerButton'));
18
 
19
- if (SQ_Tools::$options['sq_api'] == '')
20
  return;
21
 
22
  add_action('save_post', array($this, 'hookSavePost'), 99, 1);
23
  add_action('shopp_product_saved', array($this, 'hookShopp'), 11, 1);
24
  add_action('edit_attachment', array($this, 'checkSeo'), 99, 1);
25
 
26
- if (SQ_Tools::$options['sq_use'] == 1 && SQ_Tools::$options['sq_auto_sitemap'] == 1) {
27
- add_action('transition_post_status', array(SQ_ObjController::getController('SQ_Sitemaps'), 'refreshSitemap'), 9999, 3);
28
  }
29
  }
30
 
@@ -44,14 +44,14 @@ class SQ_Post extends SQ_FrontController {
44
  * Set the global variable $sq_postID for cookie and keyword record
45
  */
46
  if ((int)$post_ID == 0) {
47
- if (SQ_Tools::getIsset('id'))
48
- $GLOBALS['sq_postID'] = (int)SQ_Tools::getValue('id');
49
  } else {
50
  $GLOBALS['sq_postID'] = $post_ID;
51
  }
52
  /* * ****************************** */
53
 
54
- echo '<script type="text/javascript">(function() {this.sq_tinymce = { callback: function () {}, setup: function(ed){} } })(window);</script>';
55
  }
56
 
57
  /**
@@ -75,20 +75,20 @@ class SQ_Post extends SQ_FrontController {
75
  remove_action('save_post', array($this, 'hookSavePost'), 99);
76
 
77
  //If the post is a new or edited post
78
- if ((SQ_Tools::getValue('action')) == 'editpost' &&
79
  wp_is_post_autosave($post_id) == '' &&
80
  get_post_status($post_id) != 'auto-draft' &&
81
  get_post_status($post_id) != 'inherit' &&
82
- SQ_Tools::getValue('autosave') == ''
83
  ) {
84
 
85
  if ($this->saved[$post_id] === false) {
86
- //check for custom SEO
87
- $this->_checkAdvMeta($post_id);
88
  //check the SEO from Squirrly Live Assistant
89
  $this->checkSeo($post_id, get_post_status($post_id));
90
  //check the remote images
91
  $this->checkImage($post_id);
 
 
92
  }
93
  $this->saved[$post_id] = true;
94
  }
@@ -97,6 +97,22 @@ class SQ_Post extends SQ_FrontController {
97
  add_action('save_post', array($this, 'hookSavePost'), 99);
98
  }
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  /**
101
  * Check if the image is a remote image and save it locally
102
  *
@@ -106,12 +122,12 @@ class SQ_Post extends SQ_FrontController {
106
  public function checkImage($post_id) {
107
 
108
  //if the option to save the images locally is set on
109
- if (SQ_Tools::$options['sq_local_images'] == 1) {
110
 
111
  @set_time_limit(90);
112
  $local_file = false;
113
 
114
- $content = SQ_Tools::getValue('post_content', '', true); //get the content in html format
115
  $tmpcontent = trim(html_entity_decode($content), "\n");
116
  $urls = array();
117
 
@@ -147,7 +163,6 @@ class SQ_Post extends SQ_FrontController {
147
  $time = microtime(true);
148
  foreach ($urls as $url) {
149
  if ($file = $this->model->upload_image($url)) {
150
-
151
  if (!file_is_valid_image($file['file']))
152
  continue;
153
 
@@ -155,21 +170,25 @@ class SQ_Post extends SQ_FrontController {
155
  if ($local_file !== false) {
156
  $content = str_replace($url, $local_file, $content);
157
 
158
- $attach_id = wp_insert_attachment(array(
159
- 'post_mime_type' => $file['type'],
160
- 'post_title' => SQ_Tools::getValue('sq_keyword', preg_replace('/\.[^.]+$/', '', $file['filename'])),
161
- 'post_content' => urldecode(SQ_Tools::getValue('sq_fp_title', '')),
162
- 'post_status' => 'inherit',
163
- 'guid' => $local_file
164
- ), $file['file'], $post_id);
165
-
166
- $attach_data = wp_generate_attachment_metadata($attach_id, $file['file']);
167
- wp_update_attachment_metadata($attach_id, $attach_data);
 
 
168
  }
169
  }
 
170
  if (microtime(true) - $time >= 20) {
171
  break;
172
  }
 
173
  }
174
 
175
 
@@ -182,6 +201,7 @@ class SQ_Post extends SQ_FrontController {
182
  }
183
  }
184
 
 
185
  /**
186
  * Check the SEO from Squirrly Live Assistant
187
  *
@@ -191,22 +211,22 @@ class SQ_Post extends SQ_FrontController {
191
  public function checkSeo($post_id, $status = '') {
192
  $args = array();
193
 
194
- $seo = SQ_Tools::getValue('sq_seo');
195
 
196
  if (is_array($seo) && count($seo) > 0)
197
  $args['seo'] = implode(',', $seo);
198
 
199
- $args['keyword'] = SQ_Tools::getValue('sq_keyword');
200
 
201
  $args['status'] = $status;
202
  $args['permalink'] = get_permalink($post_id);
203
  $args['permalink'] = $this->getPaged($args['permalink']);
204
- $args['author'] = (int)SQ_Tools::getUserID();
205
  $args['post_id'] = $post_id;
206
 
207
 
208
- if (SQ_Tools::$options['sq_force_savepost'] == 1) {
209
- SQ_Action::apiCall('sq/seo/post', $args, 10);
210
  } else {
211
  $process = array();
212
  if (get_option('sq_seopost') !== false) {
@@ -222,13 +242,18 @@ class SQ_Post extends SQ_FrontController {
222
 
223
  //Save the keyword for this post
224
  if ($json = $this->model->getKeyword($post_id)) {
225
- $json->keyword = addslashes(SQ_Tools::getValue('sq_keyword'));
226
  $this->model->saveKeyword($post_id, $json);
227
  } else {
228
  $args = array();
229
- $args['keyword'] = addslashes(SQ_Tools::getValue('sq_keyword'));
230
  $this->model->saveKeyword($post_id, json_decode(json_encode($args)));
231
  }
 
 
 
 
 
232
  }
233
 
234
  public function getPaged($link) {
@@ -247,13 +272,7 @@ class SQ_Post extends SQ_FrontController {
247
  public function action() {
248
  parent::action();
249
 
250
- switch (SQ_Tools::getValue('action')) {
251
- case 'sq_save_meta':
252
- $return = $this->_checkAdvMeta(SQ_Tools::getValue('post_id'));
253
- SQ_Tools::setHeader('json');
254
- echo json_encode($return);
255
- SQ_Tools::emptyCache();
256
- break;
257
  case 'sq_save_ogimage':
258
  if (!empty($_FILES['ogimage'])) {
259
  $return = $this->model->addImage($_FILES['ogimage']);
@@ -267,93 +286,63 @@ class SQ_Post extends SQ_FrontController {
267
  'post_content' => '',
268
  'post_status' => 'inherit',
269
  'guid' => $local_file
270
- ), $return['file'], SQ_Tools::getValue('post_id'));
271
 
272
  $attach_data = wp_generate_attachment_metadata($attach_id, $return['file']);
273
  wp_update_attachment_metadata($attach_id, $attach_data);
274
  }
275
- SQ_Tools::setHeader('json');
276
  echo json_encode($return);
277
- SQ_Tools::emptyCache();
278
 
279
  break;
280
  case 'sq_get_keyword':
281
- SQ_Tools::setHeader('json');
282
- if (SQ_Tools::getIsset('post_id')) {
283
- echo json_encode($this->model->getKeywordsFromPost(SQ_Tools::getValue('post_id')));
284
  } else {
285
  echo json_encode(array('error' => true));
286
  }
287
- SQ_Tools::emptyCache();
288
  break;
289
  }
290
  exit();
291
  }
292
 
293
  /**
294
- * Check if there are advanced settings for meta title, description and keywords
295
- * @param integer $post_id
296
- * @return array | false
297
- *
298
  */
299
- private function _checkAdvMeta($post_id) {
300
-
301
- $meta = array();
302
- if (SQ_Tools::getIsset('sq_canonical') || SQ_Tools::getIsset('sq_fp_title') || SQ_Tools::getIsset('sq_fp_description') || SQ_Tools::getIsset('sq_fp_keywords')) {
303
- if (SQ_Tools::getIsset('sq_fp_title'))
304
- $meta[] = array('key' => '_sq_fp_title',
305
- 'value' => SQ_Tools::getValue('sq_fp_title'));
306
-
307
- if (SQ_Tools::getIsset('sq_fp_description'))
308
- $meta[] = array('key' => '_sq_fp_description',
309
- 'value' => SQ_Tools::getValue('sq_fp_description'));
310
-
311
- if (SQ_Tools::getIsset('sq_fp_keywords'))
312
- $meta[] = array('key' => '_sq_fp_keywords',
313
- 'value' => SQ_Tools::getValue('sq_fp_keywords'));
314
-
315
- if (SQ_Tools::getIsset('sq_fp_ogimage'))
316
- $meta[] = array('key' => '_sq_fp_ogimage',
317
- 'value' => SQ_Tools::getValue('sq_fp_ogimage'));
318
-
319
- if (SQ_Tools::getIsset('sq_canonical'))
320
- $meta[] = array('key' => '_sq_canonical',
321
- 'value' => SQ_Tools::getValue('sq_canonical'));
322
-
323
- $this->model->saveAdvMeta($post_id, $meta);
324
-
325
- return $meta;
326
  }
327
- return false;
328
  }
329
 
330
  public function hookFooter() {
331
- if (!defined('DISABLE_WP_CRON') || DISABLE_WP_CRON == true) {
332
  global $pagenow;
333
  if (in_array($pagenow, array('post.php', 'post-new.php'))) {
334
- $this->processCron();
335
  }
336
  }
337
  }
338
 
339
- public function processCron() {
340
- SQ_ObjController::getController('SQ_Tools', false);
341
- SQ_ObjController::getController('SQ_Action', false);
342
-
343
- if (get_option('sq_seopost') !== false) {
344
- $process = json_decode(get_option('sq_seopost'), true);
345
- foreach ($process as $key => $call) {
346
-
347
- if (!$response = json_decode(SQ_Action::apiCall('sq/seo/post', $call, 10))) {
348
- break;
349
- }
350
-
351
- if (isset($response->saved) && $response->saved == true) {
352
- unset($process[$key]);
353
- }
354
- }
355
- update_option('sq_seopost', json_encode($process));
356
- }
357
- }
358
-
359
  }
1
  <?php
2
 
3
+ class SQ_Controllers_Post extends SQ_Classes_FrontController {
4
 
5
  public $saved;
6
 
16
  add_filter('mce_external_plugins', array($this->model, 'addHeadingButton'));
17
  add_filter('mce_buttons', array($this->model, 'registerButton'));
18
 
19
+ if (SQ_Classes_Tools::getOption('sq_api') == '')
20
  return;
21
 
22
  add_action('save_post', array($this, 'hookSavePost'), 99, 1);
23
  add_action('shopp_product_saved', array($this, 'hookShopp'), 11, 1);
24
  add_action('edit_attachment', array($this, 'checkSeo'), 99, 1);
25
 
26
+ if (SQ_Classes_Tools::getOption('sq_use') && SQ_Classes_Tools::getOption('sq_auto_sitemap')) {
27
+ add_action('transition_post_status', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps'), 'refreshSitemap'), 9999, 3);
28
  }
29
  }
30
 
44
  * Set the global variable $sq_postID for cookie and keyword record
45
  */
46
  if ((int)$post_ID == 0) {
47
+ if (SQ_Classes_Tools::getIsset('id'))
48
+ $GLOBALS['sq_postID'] = (int)SQ_Classes_Tools::getValue('id');
49
  } else {
50
  $GLOBALS['sq_postID'] = $post_ID;
51
  }
52
  /* * ****************************** */
53
 
54
+ echo '<script type="text/javascript">(function($) {$.sq_tinymce = { callback: function () {}, setup: function(ed){} } })(jQuery);</script>';
55
  }
56
 
57
  /**
75
  remove_action('save_post', array($this, 'hookSavePost'), 99);
76
 
77
  //If the post is a new or edited post
78
+ if ((SQ_Classes_Tools::getValue('action')) == 'editpost' &&
79
  wp_is_post_autosave($post_id) == '' &&
80
  get_post_status($post_id) != 'auto-draft' &&
81
  get_post_status($post_id) != 'inherit' &&
82
+ SQ_Classes_Tools::getValue('autosave') == ''
83
  ) {
84
 
85
  if ($this->saved[$post_id] === false) {
 
 
86
  //check the SEO from Squirrly Live Assistant
87
  $this->checkSeo($post_id, get_post_status($post_id));
88
  //check the remote images
89
  $this->checkImage($post_id);
90
+ //check sq mark remained
91
+ $this->removeHighlight($post_id);
92
  }
93
  $this->saved[$post_id] = true;
94
  }
97
  add_action('save_post', array($this, 'hookSavePost'), 99);
98
  }
99
 
100
+ /**
101
+ * Remove the Squirrly Highlights in case there are some left
102
+ * @param $post_id
103
+ */
104
+ public function removeHighlight($post_id) {
105
+ $content = SQ_Classes_Tools::getValue('post_content', '', true); //get the content in html format
106
+
107
+ if (strpos($content, '<mark') !== false) {
108
+ $content = preg_replace('/<mark[^>]*data-markjs="true"[^>]*>([^<]*)<\/mark>/i', '$1', $content);
109
+ wp_update_post(array(
110
+ 'ID' => $post_id,
111
+ 'post_content' => $content)
112
+ );
113
+ }
114
+ }
115
+
116
  /**
117
  * Check if the image is a remote image and save it locally
118
  *
122
  public function checkImage($post_id) {
123
 
124
  //if the option to save the images locally is set on
125
+ if (SQ_Classes_Tools::getOption('sq_local_images')) {
126
 
127
  @set_time_limit(90);
128
  $local_file = false;
129
 
130
+ $content = SQ_Classes_Tools::getValue('post_content', '', true); //get the content in html format
131
  $tmpcontent = trim(html_entity_decode($content), "\n");
132
  $urls = array();
133
 
163
  $time = microtime(true);
164
  foreach ($urls as $url) {
165
  if ($file = $this->model->upload_image($url)) {
 
166
  if (!file_is_valid_image($file['file']))
167
  continue;
168
 
170
  if ($local_file !== false) {
171
  $content = str_replace($url, $local_file, $content);
172
 
173
+ if (!$this->model->findAttachmentByUrl(basename($url))) {
174
+ $attach_id = wp_insert_attachment(array(
175
+ 'post_mime_type' => $file['type'],
176
+ 'post_title' => SQ_Classes_Tools::getValue('sq_keyword', preg_replace('/\.[^.]+$/', '', $file['filename'])),
177
+ 'post_content' => '',
178
+ 'post_status' => 'inherit',
179
+ 'guid' => $local_file
180
+ ), $file['file'], $post_id);
181
+
182
+ $attach_data = wp_generate_attachment_metadata($attach_id, $file['file']);
183
+ wp_update_attachment_metadata($attach_id, $attach_data);
184
+ }
185
  }
186
  }
187
+
188
  if (microtime(true) - $time >= 20) {
189
  break;
190
  }
191
+
192
  }
193
 
194
 
201
  }
202
  }
203
 
204
+
205
  /**
206
  * Check the SEO from Squirrly Live Assistant
207
  *
211
  public function checkSeo($post_id, $status = '') {
212
  $args = array();
213
 
214
+ $seo = SQ_Classes_Tools::getValue('sq_seo');
215
 
216
  if (is_array($seo) && count($seo) > 0)
217
  $args['seo'] = implode(',', $seo);
218
 
219
+ $args['keyword'] = SQ_Classes_Tools::getValue('sq_keyword');
220
 
221
  $args['status'] = $status;
222
  $args['permalink'] = get_permalink($post_id);
223
  $args['permalink'] = $this->getPaged($args['permalink']);
224
+ $args['author'] = (int)SQ_Classes_Tools::getUserID();
225
  $args['post_id'] = $post_id;
226
 
227
 
228
+ if (SQ_Classes_Tools::getOption('sq_force_savepost')) {
229
+ SQ_Classes_Action::apiCall('sq/seo/post', $args, 10);
230
  } else {
231
  $process = array();
232
  if (get_option('sq_seopost') !== false) {
242
 
243
  //Save the keyword for this post
244
  if ($json = $this->model->getKeyword($post_id)) {
245
+ $json->keyword = addslashes(SQ_Classes_Tools::getValue('sq_keyword'));
246
  $this->model->saveKeyword($post_id, $json);
247
  } else {
248
  $args = array();
249
+ $args['keyword'] = addslashes(SQ_Classes_Tools::getValue('sq_keyword'));
250
  $this->model->saveKeyword($post_id, json_decode(json_encode($args)));
251
  }
252
+
253
+ //Save the snippet in case is edited in backend and not saved
254
+ SQ_Classes_ObjController::getClass('SQ_Controllers_FrontMenu')->saveSEO();
255
+ //check for custom SEO
256
+ $this->_checkBriefcaseKeywords($post_id);
257
  }
258
 
259
  public function getPaged($link) {
272
  public function action() {
273
  parent::action();
274
 
275
+ switch (SQ_Classes_Tools::getValue('action')) {
 
 
 
 
 
 
276
  case 'sq_save_ogimage':
277
  if (!empty($_FILES['ogimage'])) {
278
  $return = $this->model->addImage($_FILES['ogimage']);
286
  'post_content' => '',
287
  'post_status' => 'inherit',
288
  'guid' => $local_file
289
+ ), $return['file'], SQ_Classes_Tools::getValue('post_id'));
290
 
291
  $attach_data = wp_generate_attachment_metadata($attach_id, $return['file']);
292
  wp_update_attachment_metadata($attach_id, $attach_data);
293
  }
294
+ SQ_Classes_Tools::setHeader('json');
295
  echo json_encode($return);
296
+ SQ_Classes_Tools::emptyCache();
297
 
298
  break;
299
  case 'sq_get_keyword':
300
+ SQ_Classes_Tools::setHeader('json');
301
+ if (SQ_Classes_Tools::getIsset('post_id')) {
302
+ echo json_encode($this->model->getKeywordsFromPost(SQ_Classes_Tools::getValue('post_id')));
303
  } else {
304
  echo json_encode(array('error' => true));
305
  }
306
+ SQ_Classes_Tools::emptyCache();
307
  break;
308
  }
309
  exit();
310
  }
311
 
312
  /**
313
+ * Save the keywords from briefcase into the meta keywords if there are no keywords saved
314
+ * @param $post_id
 
 
315
  */
316
+ private function _checkBriefcaseKeywords($post_id) {
317
+ if (SQ_Classes_Tools::getIsset('sq_hash')) {
318
+ $keywords = SQ_Classes_Tools::getValue('sq_briefcase_keyword', array());
319
+ if (!empty($keywords)) {
320
+ $sq_hash = SQ_Classes_Tools::getValue('sq_hash', md5($post_id));
321
+ $url = SQ_Classes_Tools::getValue('sq_url', get_permalink($post_id));
322
+ $sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($sq_hash);
323
+
324
+ if ($sq->doseo && $sq->keywords == '') {
325
+ $sq->keywords = join(',', $keywords);
326
+
327
+ SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
328
+ $url,
329
+ $sq_hash,
330
+ (int)$post_id,
331
+ maybe_serialize($sq->toArray()),
332
+ gmdate('Y-m-d H:i:s')
333
+ );
334
+ }
335
+ }
 
 
 
 
 
 
 
336
  }
 
337
  }
338
 
339
  public function hookFooter() {
340
+ if (!defined('DISABLE_WP_CRON') || DISABLE_WP_CRON) {
341
  global $pagenow;
342
  if (in_array($pagenow, array('post.php', 'post-new.php'))) {
343
+ SQ_Classes_ObjController::getClass('SQ_Controllers_Cron')->processSEOPostCron();
344
  }
345
  }
346
  }
347
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
  }
controllers/{SQ_PostsList.php → PostsList.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class SQ_PostsList extends SQ_FrontController
4
  {
5
 
6
  /** @var array Posts types in */
@@ -17,11 +17,11 @@ class SQ_PostsList extends SQ_FrontController
17
  private $posts = array();
18
 
19
  /**
20
- * Called in SQ_Menu > hookMenu
21
  */
22
  public function init()
23
  {
24
- $this->types = array_map(array($this, '_addPostsType'), SQ_Tools::$options['sq_post_types']);
25
  }
26
 
27
  protected function _addPostsType($type)
@@ -44,12 +44,12 @@ class SQ_PostsList extends SQ_FrontController
44
  */
45
  public function hookInit()
46
  {
47
- $browser = SQ_Tools::getBrowserInfo();
48
 
49
  if ($browser['name'] == 'IE' && (int)$browser['version'] < 9 && (int)$browser['version'] > 0)
50
  return;
51
 
52
- if (isset(SQ_Tools::$options['sq_api']) && SQ_Tools::$options['sq_api'] <> '') {
53
  foreach ($this->types as $type) {
54
 
55
  if (isset($options['hideeditbox-post']) && $options['hideeditbox-post'])
@@ -57,36 +57,16 @@ class SQ_PostsList extends SQ_FrontController
57
  add_filter('manage_' . $type . '_columns', array($this, 'add_column'), 10, 1);
58
  add_action('manage_' . $type . '_custom_column', array($this, 'add_row'), 10, 2);
59
  }
60
- add_filter('posts_where', array($this, 'filterPosts'));
61
  }
62
  }
63
 
64
- /**
65
- * Filter the Posts when sq_post_id is set
66
- *
67
- * @param string $where
68
- * @return string
69
- */
70
- public function filterPosts($where)
71
- {
72
- if (!is_admin())
73
- return;
74
-
75
- if (SQ_Tools::getIsset('sq_post_id')) {
76
- $where .= " AND ID = " . (int)SQ_Tools::getValue('sq_post_id');
77
- }
78
-
79
- return $where;
80
- }
81
-
82
  /**
83
  * Hook the Wordpress header
84
  */
85
  public function loadHead()
86
  {
87
  parent::hookHead();
88
- SQ_ObjController::getController('SQ_DisplayController', false)
89
- ->loadMedia(_SQ_THEME_URL_ . '/css/sq_postslist.css');
90
  }
91
 
92
  /**
@@ -111,9 +91,6 @@ class SQ_PostsList extends SQ_FrontController
111
  */
112
  public function add_row($column, $post_id)
113
  {
114
- $title = '';
115
- $description = '';
116
- $frontend = null;
117
  $cached = false;
118
 
119
  if ($column == $this->column_id) {
@@ -126,15 +103,9 @@ class SQ_PostsList extends SQ_FrontController
126
 
127
  echo '<div class="' . $this->column_id . '_row" ref="' . $post_id . '">' . (($cached) ? $_COOKIE[$this->column_id . $post_id] : 'loading ...') . '</div>';
128
 
129
- if ($frontend = SQ_ObjController::getModel('SQ_Frontend')) {
130
  $title = $frontend->getAdvancedMeta($post_id, 'title');
131
  $description = $frontend->getAdvancedMeta($post_id, 'description');
132
- if ($post_id == get_option('page_on_front')) {
133
- if (SQ_Tools::$options['sq_fp_title'] <> '' && !$title)
134
- $title = SQ_Tools::$options['sq_fp_title'];
135
- if (SQ_Tools::$options['sq_fp_description'] <> '' && !$description)
136
- $description = SQ_Tools::$options['sq_fp_description'];
137
- }
138
  echo '<script type="text/javascript">
139
  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>' : '') . '\');
140
  </script>';
@@ -178,7 +149,7 @@ class SQ_PostsList extends SQ_FrontController
178
  var __sq_refresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '"
179
 
180
  var __sq_dashurl = "' . _SQ_STATIC_API_URL_ . '";
181
- var __token = "' . SQ_Tools::$options['sq_api'] . '";
182
  var __sq_ranknotpublic_text = "' . __('Not Public', _SQ_PLUGIN_NAME_) . '";
183
  var __sq_couldnotprocess_text = "' . __('Could not process', _SQ_PLUGIN_NAME_) . '";
184
  </script>';
@@ -190,7 +161,7 @@ class SQ_PostsList extends SQ_FrontController
190
  //load the rank from squirrly
191
  if (typeof sq_script === "undefined"){
192
  var sq_script = document.createElement(\'script\');
193
- sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/sq_rank.js?ver=' . SQ_VERSION_ID . '";
194
  var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
195
  site_head.insertBefore(sq_script, site_head.firstChild);
196
  }
@@ -258,16 +229,16 @@ class SQ_PostsList extends SQ_FrontController
258
  public function action()
259
  {
260
  parent::action();
261
- switch (SQ_Tools::getValue('action')) {
262
  case 'sq_posts_rank':
263
- SQ_Tools::setHeader('json');
264
  $args = array();
265
- $posts = SQ_Tools::getValue('posts');
266
  if (is_array($posts) && !empty($posts)) {
267
- $posts = SQ_Tools::getValue('posts');
268
  $args['posts'] = join(',', $posts);
269
 
270
- $response = json_decode(SQ_Action::apiCall('sq/user-analytics/total', $args, 20));
271
  }
272
  if (isset($response) && is_object($response)) {
273
  $response = $this->model->getTotal($response);
@@ -276,13 +247,13 @@ class SQ_PostsList extends SQ_FrontController
276
  exit(json_encode(array('posts' => array())));
277
  break;
278
  case 'sq_post_rank':
279
- SQ_Tools::setHeader('json');
280
  $args = array();
281
  $rank = null;
282
- $this->model->post_id = (int)SQ_Tools::getValue('post');
283
  $args['post_id'] = $this->model->post_id;
284
 
285
- if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id)) {
286
  if (isset($json->rank)) {
287
  $rank = $json->rank;
288
  } else {
@@ -290,43 +261,43 @@ class SQ_PostsList extends SQ_FrontController
290
  }
291
 
292
  if (isset($rank) && $rank !== false) {
293
- $ranking = SQ_ObjController::getController('SQ_Ranking', false);
294
  $args['rank'] = (string)$rank;
295
  $args['country'] = $ranking->getCountry();
296
  $args['language'] = $ranking->getLanguage();
297
  }
298
  }
299
 
300
- $response = json_decode(SQ_Action::apiCall('sq/user-analytics/detail', $args, 20));
301
 
302
  if (!is_object($response)) {
303
  exit(json_encode(array('error' => $response)));
304
  } else {
305
- //SQ_Tools::dump($response);
306
- $analytics = SQ_ObjController::getBlock('SQ_BlockAnalytics');
307
  $analytics->flush = false;
308
  $analytics->post_id = $this->model->post_id;
309
  $analytics->audit = $this->model->getAnalytics($response, $this->model->post_id);
310
 
311
  $response = $analytics->init();
312
- if (SQ_Tools::getValue('sq_debug') === 'on') {
313
  exit();
314
  }
315
  exit(json_encode($response));
316
  }
317
  break;
318
  case 'sq_recheck':
319
- SQ_Tools::setHeader('json');
320
- if (SQ_Tools::getValue('sq_debug') === 'on' || get_transient('google_blocked') === false) {
321
- $this->model->post_id = (int)SQ_Tools::getValue('post_id');
322
- if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id)) {
323
  $oldrank = (isset($json->rank) ? $json->rank : -1);
324
  if (get_transient('sq_rank' . $this->model->post_id) !== false) {
325
  delete_transient('sq_rank' . $this->model->post_id);
326
  }
327
 
328
  $this->checkKeyword($json->keyword, true);
329
- $json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id);
330
  if ($json->rank === false) {
331
  exit(json_encode(array('error' => true)));
332
  } else {
@@ -347,8 +318,8 @@ class SQ_PostsList extends SQ_FrontController
347
 
348
  exit(json_encode(array('error' => true)));
349
  } else {
350
- $this->model->post_id = (int)SQ_Tools::getValue('post_id');
351
- if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id)) {
352
  if ($json->rank === false) {
353
  exit(json_encode(array('error' => true)));
354
  } else {
@@ -381,13 +352,13 @@ class SQ_PostsList extends SQ_FrontController
381
  if ($keyword == '')
382
  return;
383
 
384
- $ranking = SQ_ObjController::getController('SQ_Ranking', false);
385
  if (is_object($ranking)) {
386
  $rank = get_transient('sq_rank' . $this->model->post_id);
387
  //if the rank is not in transient
388
  if ($rank === false) {
389
  //get the keyword from database
390
- $json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id);
391
  if ($force === false && isset($json->rank)) {
392
  $rank = $json->rank;
393
  //add it to transient
@@ -408,7 +379,7 @@ class SQ_PostsList extends SQ_FrontController
408
  $args['rank'] = $rank;
409
  $args['country'] = $ranking->getCountry();
410
  $args['language'] = $ranking->getLanguage();
411
- SQ_ObjController::getModel('SQ_Post')->saveKeyword($this->model->post_id, json_decode(json_encode($args)));
412
  }
413
  //add it to transient
414
  set_transient('sq_rank' . $this->model->post_id, $rank, (60 * 60 * 24 * 1));
@@ -422,7 +393,7 @@ class SQ_PostsList extends SQ_FrontController
422
  $args['rank'] = (string)$rank;
423
  $args['country'] = $ranking->getCountry();
424
  $args['language'] = $ranking->getLanguage();
425
- SQ_Action::apiCall('sq/user-analytics/saveserp', $args);
426
  }
427
  }
428
  return $rank;
1
  <?php
2
 
3
+ class SQ_Controllers_PostsList extends SQ_Classes_FrontController
4
  {
5
 
6
  /** @var array Posts types in */
17
  private $posts = array();
18
 
19
  /**
20
+ * Called in SQ_Controllers_Menu > hookMenu
21
  */
22
  public function init()
23
  {
24
+ $this->types = array_map(array($this, '_addPostsType'), SQ_Classes_Tools::getOption('sq_post_types'));
25
  }
26
 
27
  protected function _addPostsType($type)
44
  */
45
  public function hookInit()
46
  {
47
+ $browser = SQ_Classes_Tools::getBrowserInfo();
48
 
49
  if ($browser['name'] == 'IE' && (int)$browser['version'] < 9 && (int)$browser['version'] > 0)
50
  return;
51
 
52
+ if (SQ_Classes_Tools::getOption('sq_api') <> '') {
53
  foreach ($this->types as $type) {
54
 
55
  if (isset($options['hideeditbox-post']) && $options['hideeditbox-post'])
57
  add_filter('manage_' . $type . '_columns', array($this, 'add_column'), 10, 1);
58
  add_action('manage_' . $type . '_custom_column', array($this, 'add_row'), 10, 2);
59
  }
 
60
  }
61
  }
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  /**
64
  * Hook the Wordpress header
65
  */
66
  public function loadHead()
67
  {
68
  parent::hookHead();
69
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia(_SQ_THEME_URL_ . '/css/postslist.css');
 
70
  }
71
 
72
  /**
91
  */
92
  public function add_row($column, $post_id)
93
  {
 
 
 
94
  $cached = false;
95
 
96
  if ($column == $this->column_id) {
103
 
104
  echo '<div class="' . $this->column_id . '_row" ref="' . $post_id . '">' . (($cached) ? $_COOKIE[$this->column_id . $post_id] : 'loading ...') . '</div>';
105
 
106
+ if ($frontend = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')) {
107
  $title = $frontend->getAdvancedMeta($post_id, 'title');
108
  $description = $frontend->getAdvancedMeta($post_id, 'description');
 
 
 
 
 
 
109
  echo '<script type="text/javascript">
110
  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>' : '') . '\');
111
  </script>';
149
  var __sq_refresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '"
150
 
151
  var __sq_dashurl = "' . _SQ_STATIC_API_URL_ . '";
152
+ var __token = "' . SQ_Classes_Tools::getOption('sq_api') . '";
153
  var __sq_ranknotpublic_text = "' . __('Not Public', _SQ_PLUGIN_NAME_) . '";
154
  var __sq_couldnotprocess_text = "' . __('Could not process', _SQ_PLUGIN_NAME_) . '";
155
  </script>';
161
  //load the rank from squirrly
162
  if (typeof sq_script === "undefined"){
163
  var sq_script = document.createElement(\'script\');
164
+ sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/sq_rank' . (SQ_DEBUG ? '' : '.min') . '.js?ver=' . SQ_VERSION_ID . '";
165
  var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
166
  site_head.insertBefore(sq_script, site_head.firstChild);
167
  }
229
  public function action()
230
  {
231
  parent::action();
232
+ switch (SQ_Classes_Tools::getValue('action')) {
233
  case 'sq_posts_rank':
234
+ SQ_Classes_Tools::setHeader('json');
235
  $args = array();
236
+ $posts = SQ_Classes_Tools::getValue('posts');
237
  if (is_array($posts) && !empty($posts)) {
238
+ $posts = SQ_Classes_Tools::getValue('posts');
239
  $args['posts'] = join(',', $posts);
240
 
241
+ $response = json_decode(SQ_Classes_Action::apiCall('sq/user-analytics/total', $args, 20));
242
  }
243
  if (isset($response) && is_object($response)) {
244
  $response = $this->model->getTotal($response);
247
  exit(json_encode(array('posts' => array())));
248
  break;
249
  case 'sq_post_rank':
250
+ SQ_Classes_Tools::setHeader('json');
251
  $args = array();
252
  $rank = null;
253
+ $this->model->post_id = (int)SQ_Classes_Tools::getValue('post');
254
  $args['post_id'] = $this->model->post_id;
255
 
256
+ if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id)) {
257
  if (isset($json->rank)) {
258
  $rank = $json->rank;
259
  } else {
261
  }
262
 
263
  if (isset($rank) && $rank !== false) {
264
+ $ranking = SQ_Classes_ObjController::getClass('SQ_Classes_Ranking');
265
  $args['rank'] = (string)$rank;
266
  $args['country'] = $ranking->getCountry();
267
  $args['language'] = $ranking->getLanguage();
268
  }
269
  }
270
 
271
+ $response = json_decode(SQ_Classes_Action::apiCall('sq/user-analytics/detail', $args, 20));
272
 
273
  if (!is_object($response)) {
274
  exit(json_encode(array('error' => $response)));
275
  } else {
276
+ //SQ_Classes_Tools::dump($response);
277
+ $analytics = SQ_Classes_ObjController::getClass('SQ_Core_BlockAnalytics');
278
  $analytics->flush = false;
279
  $analytics->post_id = $this->model->post_id;
280
  $analytics->audit = $this->model->getAnalytics($response, $this->model->post_id);
281
 
282
  $response = $analytics->init();
283
+ if (SQ_Classes_Tools::getValue('sq_debug') === 'on') {
284
  exit();
285
  }
286
  exit(json_encode($response));
287
  }
288
  break;
289
  case 'sq_recheck':
290
+ SQ_Classes_Tools::setHeader('json');
291
+ if (SQ_Classes_Tools::getValue('sq_debug') === 'on' || get_transient('google_blocked') === false) {
292
+ $this->model->post_id = (int)SQ_Classes_Tools::getValue('post_id');
293
+ if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id)) {
294
  $oldrank = (isset($json->rank) ? $json->rank : -1);
295
  if (get_transient('sq_rank' . $this->model->post_id) !== false) {
296
  delete_transient('sq_rank' . $this->model->post_id);
297
  }
298
 
299
  $this->checkKeyword($json->keyword, true);
300
+ $json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id);
301
  if ($json->rank === false) {
302
  exit(json_encode(array('error' => true)));
303
  } else {
318
 
319
  exit(json_encode(array('error' => true)));
320
  } else {
321
+ $this->model->post_id = (int)SQ_Classes_Tools::getValue('post_id');
322
+ if ($json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id)) {
323
  if ($json->rank === false) {
324
  exit(json_encode(array('error' => true)));
325
  } else {
352
  if ($keyword == '')
353
  return;
354
 
355
+ $ranking = SQ_Classes_ObjController::getClass('SQ_Classes_Ranking');
356
  if (is_object($ranking)) {
357
  $rank = get_transient('sq_rank' . $this->model->post_id);
358
  //if the rank is not in transient
359
  if ($rank === false) {
360
  //get the keyword from database
361
+ $json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($this->model->post_id);
362
  if ($force === false && isset($json->rank)) {
363
  $rank = $json->rank;
364
  //add it to transient
379
  $args['rank'] = $rank;
380
  $args['country'] = $ranking->getCountry();
381
  $args['language'] = $ranking->getLanguage();
382
+ SQ_Classes_ObjController::getClass('SQ_Models_Post')->saveKeyword($this->model->post_id, json_decode(json_encode($args)));
383
  }
384
  //add it to transient
385
  set_transient('sq_rank' . $this->model->post_id, $rank, (60 * 60 * 24 * 1));
393
  $args['rank'] = (string)$rank;
394
  $args['country'] = $ranking->getCountry();
395
  $args['language'] = $ranking->getLanguage();
396
+ SQ_Classes_Action::apiCall('sq/user-analytics/saveserp', $args);
397
  }
398
  }
399
  return $rank;
controllers/SQ_Frontend.php DELETED
@@ -1,218 +0,0 @@
1
- <?php
2
-
3
- class SQ_Frontend extends SQ_FrontController {
4
-
5
- public static $options;
6
-
7
- public function __construct() {
8
-
9
- if ($this->_isAjax()) {
10
- return;
11
- }
12
-
13
- parent::__construct();
14
-
15
- /* Check if sitemap is on */
16
- if (SQ_Tools::$options['sq_auto_sitemap'] == 1) {
17
- /* Load the Sitemap */
18
- add_filter('rewrite_rules_array', array($this, 'rewrite_rules'), 1, 1);
19
- SQ_ObjController::getController('SQ_Sitemaps');
20
- }
21
-
22
- if (SQ_Tools::$options['sq_auto_feed'] == 1) {
23
- /* Load the Feed Style */
24
- SQ_ObjController::getController('SQ_Feed');
25
- }
26
-
27
- //validate custom arguments for favicon and sitemap
28
- add_filter('query_vars', array($this, 'validateParams'), 1, 1);
29
-
30
- if ($this->isSquirrlySeoEnabled()) {
31
- add_filter('sq_title', array($this->model, 'clearTitle'));
32
- add_filter('sq_description', array($this->model, 'clearDescription'));
33
-
34
- add_action('plugins_loaded', array($this->model, 'startBuffer'));
35
- add_action('template_redirect', array($this->model, 'checkHandles'));
36
- //flush the header with the title and removing duplicates
37
- add_action('shutdown', array($this->model, 'getBuffer'));
38
- }
39
- if (SQ_Tools::$options['sq_url_fix'] == 1) {
40
- add_action('the_content', array($this, 'fixFeedLinks'), 11);
41
- }
42
-
43
- }
44
-
45
- public function rewrite_rules($wp_rewrite) {
46
- if (SQ_Tools::$options['sq_auto_sitemap'] == 1) {
47
- foreach (SQ_Tools::$options['sq_sitemap'] as $name => $sitemap) {
48
- $rules[preg_quote($sitemap[0]) . '$'] = 'index.php?sq_feed=' . $name;
49
- }
50
- }
51
- return array_merge($rules, $wp_rewrite);
52
- }
53
-
54
- private function _isAjax() {
55
- $url = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : false);
56
- if ($url && (strpos($url, str_replace(get_bloginfo('url'), '', admin_url('admin-ajax.php', 'relative'))) !== false)) {
57
- return true;
58
- }
59
-
60
- return false;
61
- }
62
-
63
- /**
64
- * Hook the Header load
65
- */
66
- public function hookFronthead() {
67
-
68
- if (!$this->_isAjax()) {
69
- if ($this->isSquirrlySeoEnabled()) {
70
- if (SQ_Tools::$options['sq_auto_jsonld'] == 1) {
71
- //load the hooks for JsonLD
72
- SQ_ObjController::getModelService('JsonLD');
73
- }
74
-
75
- }
76
-
77
- SQ_ObjController::getController('SQ_DisplayController', false)
78
- ->loadMedia(_SQ_THEME_URL_ . 'css/sq_frontend.css');
79
- }
80
- }
81
-
82
- /**
83
- * Called after plugins are loaded
84
- */
85
- public function hookPreload() {
86
- //Check for sitemap and robots
87
- if ($this->isSquirrlySeoEnabled()) {
88
- if (isset($_SERVER['REQUEST_URI'])) {
89
- if (SQ_Tools::$options['sq_auto_robots'] == 1) {
90
- if (substr(strrchr($_SERVER['REQUEST_URI'], "/"), 1) == "robots.txt" || $_SERVER['REQUEST_URI'] == "/robots.txt") {
91
- $this->model->robots();
92
- }
93
- }
94
- }
95
-
96
- //check the action call
97
- $this->action();
98
- }
99
-
100
-
101
- }
102
-
103
- /**
104
- * Change the image path to absolute when in feed
105
- * @param string $content
106
- *
107
- * @return string
108
- */
109
- public function fixFeedLinks($content) {
110
- if (is_feed()) {
111
- $find = $replace = $urls = array();
112
-
113
- @preg_match_all('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', $content, $out);
114
- if (is_array($out)) {
115
- if (!is_array($out[1]) || empty($out[1]))
116
- return $content;
117
-
118
- foreach ($out[1] as $row) {
119
- if (strpos($row, '//') === false) {
120
- if (!in_array($row, $urls)) {
121
- $urls[] = $row;
122
- }
123
- }
124
- }
125
- }
126
-
127
- @preg_match_all('/<a[^>]*href=[\'"]([^\'"]+)[\'"][^>]*>/i', $content, $out);
128
- if (is_array($out)) {
129
- if (!is_array($out[1]) || empty($out[1]))
130
- return $content;
131
-
132
- foreach ($out[1] as $row) {
133
- if (strpos($row, '//') === false) {
134
- if (!in_array($row, $urls)) {
135
- $urls[] = $row;
136
- }
137
- }
138
- }
139
- }
140
- if (!is_array($urls) || (is_array($urls) && empty($urls))) {
141
- return $content;
142
- }
143
-
144
- $urls = array_unique($urls);
145
- foreach ($urls as $url) {
146
- $find[] = "'" . $url . "'";
147
- $replace[] = "'" . esc_url(get_bloginfo('url') . $url) . "'";
148
- $find[] = '"' . $url . '"';
149
- $replace[] = '"' . esc_url(get_bloginfo('url') . $url) . '"';
150
- }
151
- if (!empty($find) && !empty($replace)) {
152
- $content = str_replace($find, $replace, $content);
153
- }
154
- }
155
- return $content;
156
- }
157
-
158
- /**
159
- * Validate the params for getting the basic info from the server
160
- * eg favicon.ico
161
- *
162
- * @param array $vars
163
- * @return $vars
164
- */
165
- public function validateParams($vars) {
166
- array_push($vars, 'sq_feed');
167
- array_push($vars, 'sq_get');
168
- array_push($vars, 'sq_size');
169
- return $vars;
170
- }
171
-
172
- public function action() {
173
- global $wp_query;
174
- if (!empty($wp_query->query_vars["sq_get"])) {
175
- $wp_query->is_404 = false;
176
-
177
-
178
- switch (get_query_var('sq_get')) {
179
- case 'favicon':
180
- if (SQ_Tools::$options['favicon'] <> '') {
181
- //show the favico file
182
- SQ_Tools::setHeader('ico');
183
- readfile(_SQ_CACHE_DIR_ . SQ_Tools::$options['favicon']);
184
- exit();
185
- }
186
- break;
187
- case 'touchicon':
188
- $size = (int)get_query_var('sq_size');
189
- if (SQ_Tools::$options['favicon'] <> '') {
190
- //show the favico file
191
- SQ_Tools::setHeader('png');
192
- if ($size <> '') {
193
- readfile(_SQ_CACHE_DIR_ . SQ_Tools::$options['favicon'] . get_query_var('sq_size'));
194
- } else {
195
- readfile(_SQ_CACHE_DIR_ . SQ_Tools::$options['favicon']);
196
- }
197
- exit();
198
- }
199
- break;
200
-
201
- case 'feedcss':
202
- readfile(_SQ_THEME_DIR_ . 'css/' . 'sq_feed.css');
203
- exit();
204
- break;
205
- }
206
- }
207
- }
208
-
209
- public function hookFrontfooter() {
210
- if ($this->isSquirrlySeoEnabled()) {
211
- echo $this->model->getGoogleAnalyticsAMPBody();
212
- }
213
- }
214
-
215
- public function isSquirrlySeoEnabled() {
216
- return (apply_filters('sq_use', SQ_Tools::$options['sq_use']) == 1);
217
- }
218
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/SQ_Menu.php DELETED
@@ -1,247 +0,0 @@
1
- <?php
2
-
3
- class SQ_Menu extends SQ_FrontController {
4
-
5
- /** @var array snippet */
6
- private $post_type;
7
-
8
- /** @var array snippet */
9
- var $options = array();
10
-
11
- public function __construct() {
12
- parent::__construct();
13
- add_filter('rewrite_rules_array', array(SQ_ObjController::getBlock('SQ_BlockSettingsSeo'), 'rewrite_rules'), 999, 1);
14
- add_action('admin_bar_menu', array($this, 'hookTopmenu'), 999);
15
- }
16
-
17
- /**
18
- * Hook the Admin load
19
- */
20
- public function hookInit() {
21
-
22
- /* add the plugin menu in admin */
23
- if (current_user_can('manage_options')) {
24
- //check if activated
25
- if (get_transient('sq_activate') == 1) {
26
- // Delete the redirect transient
27
- delete_transient('sq_activate');
28
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
29
-
30
- wp_safe_redirect(admin_url('admin.php?page=sq_dashboard'));
31
- exit();
32
- }
33
-
34
- if (get_transient('sq_rewrite') == 1) {
35
- // Delete the redirect transient
36
- delete_transient('sq_rewrite');
37
- global $wp_rewrite;
38
- $wp_rewrite->flush_rules();
39
- }
40
-
41
- //Check if there are expected upgrades
42
- SQ_Tools::checkUpgrade();
43
- }
44
- //activate the cron job if not exists
45
- if (!wp_get_schedule('sq_processCron')) {
46
- wp_schedule_event(time(), 'hourly', 'sq_processCron');
47
- }
48
- }
49
-
50
- /**
51
- * Add a menu in Admin Bar
52
- *
53
- * @param WP_Admin_Bar $wp_admin_bar
54
- */
55
- public function hookTopmenu($wp_admin_bar) {
56
- $wp_admin_bar->add_node(array(
57
- 'id' => 'sq_posts',
58
- 'title' => __('See Your Rank on Google', _SQ_PLUGIN_NAME_),
59
- 'href' => admin_url('admin.php?page=sq_posts'),
60
- 'parent' => false
61
- ));
62
- }
63
-
64
- /**
65
- * Creates the Setting menu in Wordpress
66
- */
67
- public function hookMenu() {
68
-
69
- $this->post_type = SQ_Tools::$options['sq_post_types'];
70
-
71
- //Push the Analytics Check
72
- if (strpos($_SERVER['REQUEST_URI'], '?page=sq_dashboard') !== false) {
73
- SQ_Tools::saveOptions('sq_dashboard', 1);
74
- }
75
- if (strpos($_SERVER['REQUEST_URI'], '?page=sq_analytics') !== false) {
76
- SQ_Tools::saveOptions('sq_analytics', 1);
77
- }
78
-
79
- $analytics_alert = 0;
80
- if (SQ_ObjController::getModel('SQ_Post')->countKeywords() > 0 && SQ_Tools::$options['sq_analytics'] == 0) {
81
- $analytics_alert = 1;
82
- if (!get_transient('sq_analytics')) {
83
- set_transient('sq_analytics', time(), (60 * 60 * 24 * 7));
84
- } else {
85
- $time_loaded = get_transient('sq_analytics');
86
- if (time() - $time_loaded > (60 * 60 * 24 * 3) && time() - $time_loaded < (60 * 60 * 24 * 14)) {
87
- SQ_Error::setError(__('Check out the Squirrly Analytics section. <a href="admin.php?page=sq_posts" title="Squirrly Analytics">Click here</a>', _SQ_PLUGIN_NAME_));
88
- }
89
- }
90
- }
91
-
92
- $dashboard_alert = (int) (SQ_Tools::$options['sq_dashboard'] == 0);
93
-
94
-
95
-
96
- ///////////////
97
-
98
- $this->model->addMenu(array(ucfirst(_SQ_NAME_),
99
- 'Squirrly' . SQ_Tools::showNotices(SQ_Tools::$errors_count, 'errors_count'),
100
- 'edit_posts',
101
- 'sq_dashboard',
102
- null,
103
- _SQ_THEME_URL_ . 'img/settings/menu_icon_16.png'
104
- ));
105
-
106
- $this->model->addSubmenu(array('sq_dashboard',
107
- ucfirst(_SQ_NAME_) . __(' Dashboard', _SQ_PLUGIN_NAME_),
108
- ( (SQ_Tools::$options['sq_api'] == '') ? __('First Step', _SQ_PLUGIN_NAME_) : __('Dashboard', _SQ_PLUGIN_NAME_)) . SQ_Tools::showNotices($dashboard_alert, 'errors_count'),
109
- 'edit_posts',
110
- 'sq_dashboard',
111
- array(SQ_ObjController::getBlock('SQ_BlockDashboard'), 'init')
112
- ));
113
- if (SQ_Tools::$options['sq_api'] <> '') {
114
-
115
- //IF SERP PLUGIN IS NOT INSTALLED
116
- if (!class_exists('SRC_Classes_ObjController')){
117
- $this->model->addSubmenu(array('sq_dashboard',
118
- ucfirst(_SQ_NAME_) . __(' Performance Analytics', _SQ_PLUGIN_NAME_),
119
- __('Performance <br />Analytics', _SQ_PLUGIN_NAME_) . SQ_Tools::showNotices($analytics_alert, 'errors_count'),
120
- 'edit_posts',
121
- 'sq_posts',
122
- array(SQ_ObjController::getBlock('SQ_BlockPostsAnalytics'), 'init')
123
- ));
124
- }
125
-
126
- $this->model->addSubmenu(array('sq_dashboard',
127
- ucfirst(_SQ_NAME_) . __(' Keyword Research', _SQ_PLUGIN_NAME_),
128
- __('Keyword Research', _SQ_PLUGIN_NAME_),
129
- 'edit_posts',
130
- 'sq_keywordresearch',
131
- array(SQ_ObjController::getBlock('SQ_BlockKeywordResearch'), 'init')
132
- ));
133
-
134
- $this->model->addSubmenu(array('sq_dashboard',
135
- ucfirst(_SQ_NAME_) . __(' Live Assistant', _SQ_PLUGIN_NAME_),
136
- __('Live Assistant', _SQ_PLUGIN_NAME_),
137
- 'edit_posts',
138
- 'sq_liveassistant',
139
- array(SQ_ObjController::getBlock('SQ_BlockLiveAssistant'), 'init')
140
- ));
141
- $this->model->addSubmenu(array('sq_dashboard',
142
- ucfirst(_SQ_NAME_) . __(' Copywriting Options', _SQ_PLUGIN_NAME_),
143
- __('Copywriting Options', _SQ_PLUGIN_NAME_),
144
- 'edit_posts',
145
- 'sq_copyright',
146
- array(SQ_ObjController::getBlock('SQ_BlockCopyright'), 'init')
147
- ));
148
-
149
- $this->model->addSubmenu(array('sq_dashboard',
150
- ucfirst(_SQ_NAME_) . __(' SEO Audit', _SQ_PLUGIN_NAME_),
151
- __('Audit Site', _SQ_PLUGIN_NAME_),
152
- 'edit_posts',
153
- 'sq_seoaudit',
154
- array(SQ_ObjController::getBlock('SQ_BlockAudit'), 'init')
155
- ));
156
-
157
- $this->model->addSubmenu(array('sq_dashboard',
158
- ucfirst(_SQ_NAME_) . __(' SEO Settings', _SQ_PLUGIN_NAME_),
159
- __('SEO Settings', _SQ_PLUGIN_NAME_) . SQ_Tools::showNotices(SQ_Tools::$errors_count, 'errors_count'),
160
- 'manage_options',
161
- 'sq_seo',
162
- array(SQ_ObjController::getBlock('SQ_BlockSettingsSeo'), 'init')
163
- ));
164
-
165
-
166
- $this->model->addSubmenu(array('sq_dashboard',
167
- ucfirst(_SQ_NAME_) . __(' Advanced Settings', _SQ_PLUGIN_NAME_),
168
- __('Advanced Settings', _SQ_PLUGIN_NAME_),
169
- 'manage_options',
170
- 'sq_settings',
171
- array(SQ_ObjController::getBlock('SQ_BlockSettings'), 'init')
172
- ));
173
-
174
- $this->model->addSubmenu(array('sq_dashboard',
175
- ucfirst(_SQ_NAME_) . __(' Account Info', _SQ_PLUGIN_NAME_),
176
- __('Account Info', _SQ_PLUGIN_NAME_),
177
- 'manage_options',
178
- 'sq_account',
179
- array(SQ_ObjController::getBlock('SQ_BlockAccount'), 'init')
180
- ));
181
- }
182
-
183
- $this->model->addSubmenu(array('sq_dashboard',
184
- ucfirst(_SQ_NAME_) . __(' Customer Service', _SQ_PLUGIN_NAME_),
185
- __('Customer Service', _SQ_PLUGIN_NAME_),
186
- 'edit_posts',
187
- 'sq_customerservice',
188
- array(SQ_ObjController::getBlock('SQ_BlockCustomerService'), 'init')
189
- ));
190
-
191
- $this->model->addSubmenu(array('sq_dashboard',
192
- __('Become an Affiliate with ', _SQ_PLUGIN_NAME_) . ucfirst(_SQ_NAME_),
193
- __('Become an Affiliate', _SQ_PLUGIN_NAME_),
194
- 'edit_posts',
195
- 'sq_affiliate',
196
- array(SQ_ObjController::getBlock('SQ_BlockAffiliate'), 'init')
197
- ));
198
-
199
- foreach ($this->post_type as $type)
200
- $this->model->addMeta(array('post' . _SQ_NAME_,
201
- ucfirst(_SQ_NAME_),
202
- array(SQ_ObjController::getController('SQ_Post'), 'init'),
203
- $type,
204
- 'side',
205
- 'high'
206
- ));
207
-
208
- //Add the Rank in the Posts list
209
- $postlist = SQ_ObjController::getController('SQ_PostsList');
210
- if (is_object($postlist)) {
211
- $postlist->init();
212
- }
213
-
214
- //Show bar to go back and finish the help
215
- if ($this->is_page('edit') || strpos($_SERVER['REQUEST_URI'], 'sq_posts') !== false) {
216
- if (SQ_Tools::$options['active_help'] <> '' && SQ_Tools::$options['ignore_warn'] == 0) {
217
- SQ_Error::setError('Go back and complete the Squirrly Tasks for today <a href="admin.php?page=sq_' . SQ_Tools::$options['active_help'] . '" class="sq_button" title="Continue the Help">Continue</a>', 'helpnotice');
218
- }
219
- }
220
- }
221
-
222
- /**
223
- * Is the user on page name? Default name = post edit page
224
- * name = 'quirrly'
225
- *
226
- * @global array $pagenow
227
- * @param string $name
228
- * @return boolean
229
- */
230
- public function is_page($name = '') {
231
- global $pagenow;
232
- $page = array();
233
- //make sure we are on the backend
234
- if (is_admin() && $name <> '') {
235
- if ($name == 'edit') {
236
- $page = array('post.php', 'post-new.php');
237
- } else {
238
- array_push($page, $name . '.php');
239
- }
240
-
241
- return in_array($pagenow, $page);
242
- }
243
-
244
- return false;
245
- }
246
-
247
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/{SQ_Sitemaps.php → Sitemaps.php} RENAMED
@@ -3,37 +3,70 @@
3
  /**
4
  * Class for Sitemap Generator
5
  */
6
- class SQ_Sitemaps extends SQ_FrontController {
7
  /* @var string root name */
8
 
9
  var $root = 'sitemap';
10
  /* @var string post limit */
11
- var $posts_limit = 1000;
12
- var $news_limit = 50;
13
 
14
  public function __construct() {
15
  parent::__construct();
16
- add_filter('template_redirect', array($this, 'hookPreventRedirect'), 1);
 
17
  add_filter('user_trailingslashit', array($this, 'untrailingslashit'));
18
  add_action('sq_processPing', array($this, 'processCron'));
19
  }
20
 
21
  public function hookPreventRedirect() {
22
- global $wp_query, $sq_is_sitemap;
23
- if (!empty($wp_query->query_vars["sq_feed"])) {
24
- $wp_query->is_404 = false;
25
- $wp_query->is_feed = true;
26
- $sq_is_sitemap = true;
27
-
28
- $this->feedRequest($wp_query->query_vars);
29
- $this->showSitemap();
30
- die();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
32
  }
33
 
34
  public function refreshSitemap($new_status, $old_status, $post) {
35
  if ($old_status <> $new_status && $new_status = 'publish') {
36
- if (SQ_Tools::$options['sq_sitemap_ping'] == 1) {
37
  wp_schedule_single_event(time() + 5, 'sq_processPing');
38
  }
39
  }
@@ -41,46 +74,51 @@ class SQ_Sitemaps extends SQ_FrontController {
41
 
42
  /**
43
  * Listen the feed call from wordpress
44
- * @param array $request
45
- * @return array
 
46
  */
47
- public function feedRequest($request) {
48
  global $wp_query;
49
  $query = array();
50
 
51
- if (!empty($request['feed'])) {
52
- $request['sq_feed'] = $request['feed'];
53
- }
54
 
55
- if (isset($request['sq_feed']) && strpos($request['sq_feed'], 'sitemap') !== false) {
56
- @ini_set('memory_limit', '512M');
 
 
 
 
 
57
 
58
- $this->model->type = $request['sq_feed'];
59
  //init the query
60
  $query = array(
61
  'sq_feed' => $this->model->type,
62
  'post_type' => array('post'),
63
  'tax_query' => array(),
64
  'post_status' => 'publish',
 
 
 
 
65
  );
66
 
67
  //show products
68
  if ($this->model->type == 'sitemap-product') {
69
- if (SQ_ObjController::getModel('SQ_BlockSettingsSeo')->isEcommerce() && SQ_Tools::$options['sq_sitemap'][$this->model->type][1] == 2) {
70
- SQ_Tools::$options['sq_sitemap'][$this->model->type][1] = 1;
71
  }
72
  }
73
 
74
- if (isset(SQ_Tools::$options['sq_sitemap'][$this->model->type]) && SQ_Tools::$options['sq_sitemap'][$this->model->type][1] == 1) {
75
 
76
- add_action('do_feed_' . $request['sq_feed'], array($this, 'showSitemap'));
77
  //PREPARE CUSTOM QUERIES
78
  switch ($this->model->type) {
79
-
80
  case 'sitemap-news':
81
- if ($this->model->type == 'sitemap-news') {
82
- $this->posts_limit = $this->news_limit;
83
- }
84
  case 'sitemap-post':
85
  break;
86
  case 'sitemap-category':
@@ -90,7 +128,7 @@ class SQ_Sitemaps extends SQ_FrontController {
90
  add_filter('get_terms_fields', array($this, 'customTaxFilter'), 5, 2);
91
  break;
92
  case 'sitemap-page':
93
- $query['post_type'] = array('page');
94
  break;
95
  case 'sitemap-author':
96
  add_filter('sq-sitemap-authors', array($this, 'authorFilter'), 5);
@@ -115,27 +153,27 @@ class SQ_Sitemaps extends SQ_FrontController {
115
  array_push($types, 'custom-post');
116
  }
117
 
118
- $query['post_type'] = $types;
119
  break;
120
  case 'sitemap-product':
121
- if (!$types = SQ_ObjController::getModel('SQ_BlockSettingsSeo')->isEcommerce()) {
122
  $types = array('custom-post');
123
  }
124
- $query['post_type'] = $types;
125
  break;
126
  case 'sitemap-archive':
127
  add_filter('sq-sitemap-archive', array($this, 'archiveFilter'), 5);
128
  break;
129
  }
130
 
131
- add_filter('post_limits', array($this, 'setLimits'));
132
  }
133
  }
134
-
135
  if (method_exists($wp_query, 'parse_query')) {
136
  $wp_query = new WP_Query($query);
 
137
  }
138
- return $request;
 
139
  }
140
 
141
  /**
@@ -149,7 +187,7 @@ class SQ_Sitemaps extends SQ_FrontController {
149
  header('Content-Type: text/xml; charset=' . get_bloginfo('charset'), true);
150
  //Generate header
151
  echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?>' . "\n";
152
- echo '<?xml-stylesheet type="text/xsl" href="' . wp_make_link_relative(_SQ_THEME_URL_) . 'css/sq_sitemap' . ($this->model->type == 'sitemap' ? 'index' : '') . '.xsl"?>' . "\n";
153
  echo '<!-- generated-on="' . date('Y-m-d\TH:i:s+00:00') . '" -->' . "\n";
154
  echo '<!-- generator="Squirrly SEO Sitemap" -->' . "\n";
155
  echo '<!-- generator-url="https://wordpress.org/plugins/squirrly-seo/" -->' . "\n";
@@ -214,20 +252,57 @@ class SQ_Sitemaps extends SQ_FrontController {
214
  switch ($this->model->type) {
215
  case 'sitemap':
216
  $this->showSitemapHeader();
 
217
 
218
- foreach (SQ_Tools::$options['sq_sitemap'] as $name => $value) {
219
- //force to show products if not preset
220
- if ($name == 'sitemap-product' && !SQ_ObjController::getModel('SQ_BlockSettingsSeo')->isEcommerce()) {
221
- continue;
222
- }
 
223
 
224
- if ($name !== 'sitemap' && ($value[1] == 1 || $value[1] == 2)) {
225
- echo "\t" . '<sitemap>' . "\n";
226
- echo "\t" . '<loc>' . $this->getXmlUrl($name) . '</loc>' . "\n";
227
- echo "\t" . '<lastmod>' . mysql2date('Y-m-d\TH:i:s+00:00', get_lastpostmodified('gmt'), false) . '</lastmod>' . "\n";
228
- echo "\t" . '</sitemap>' . "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  }
230
- }
231
  $this->showSitemapFooter();
232
  break;
233
  case 'sitemap-home':
@@ -256,12 +331,12 @@ class SQ_Sitemaps extends SQ_FrontController {
256
 
257
  /**
258
  * Pach the XML for each sitemap
259
- * @param type $xml
260
- * @return type
261
  */
262
  public function showPackXml($xml) {
263
  if (empty($xml)) {
264
- return;
265
  }
266
  if (!isset($xml['contains'])) {
267
  $xml['contains'] = '';
@@ -330,14 +405,17 @@ class SQ_Sitemaps extends SQ_FrontController {
330
  /**
331
  * Get the url for each sitemap
332
  * @param string $sitemap
 
333
  * @return string
334
  */
335
- public function getXmlUrl($sitemap) {
 
 
336
  if (!get_option('permalink_structure')) {
337
- $sitemap = '?sq_feed=' . str_replace('.xml', '', $sitemap);
338
  } else {
339
- if (isset(SQ_Tools::$options['sq_sitemap'][$sitemap])) {
340
- $sitemap = SQ_Tools::$options['sq_sitemap'][$sitemap][0];
341
  }
342
 
343
  if (strpos($sitemap, '.xml') === false) {
@@ -349,12 +427,15 @@ class SQ_Sitemaps extends SQ_FrontController {
349
  }
350
 
351
  public function processCron() {
352
- SQ_ObjController::getController('SQ_Tools', false);
353
- foreach (SQ_Tools::$options['sq_sitemap'] as $name => $sitemap) {
354
- if ($sitemap[1] == 1) {
355
- $this->SendPing($this->getXmlUrl($name));
 
 
 
 
356
  }
357
- }
358
  }
359
 
360
  /**
@@ -370,7 +451,7 @@ class SQ_Sitemaps extends SQ_FrontController {
370
  );
371
 
372
  foreach ($urls as $url) {
373
- if ($responce = SQ_Tools::sq_remote_get($url)) {
374
  $success = true;
375
  sleep(mt_rand(2, 5));
376
  }
@@ -384,9 +465,10 @@ class SQ_Sitemaps extends SQ_FrontController {
384
  * @return boolean
385
  */
386
  public function deleteSitemapFile() {
387
- if (isset(SQ_Tools::$options['sq_sitemap'][$this->root])) {
388
- if (file_exists(ABSPATH . SQ_Tools::$options['sq_sitemap'][$this->root])) {
389
- @unlink(ABSPATH . SQ_Tools::$options['sq_sitemap'][$this->root]);
 
390
  return true;
391
  }
392
  }
@@ -470,7 +552,7 @@ class SQ_Sitemaps extends SQ_FrontController {
470
 
471
  public function productFilter(&$query) {
472
 
473
- if (!$types = SQ_ObjController::getModel('SQ_BlockSettingsSeo')->isEcommerce()) {
474
  $types = array('custom-post');
475
  }
476
  $query->set('post_type', $types); // id of page or post
3
  /**
4
  * Class for Sitemap Generator
5
  */
6
+ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
7
  /* @var string root name */
8
 
9
  var $root = 'sitemap';
10
  /* @var string post limit */
11
+ var $posts_limit;
12
+ var $news_limit = 10;
13
 
14
  public function __construct() {
15
  parent::__construct();
16
+ $this->posts_limit = SQ_Classes_Tools::getOption('sq_sitemap_perpage');
17
+ add_filter('template_redirect', array($this, 'hookPreventRedirect'), 0);
18
  add_filter('user_trailingslashit', array($this, 'untrailingslashit'));
19
  add_action('sq_processPing', array($this, 'processCron'));
20
  }
21
 
22
  public function hookPreventRedirect() {
23
+ global $wp_query;
24
+ // echo '<pre>' . print_R($_SERVER, true) . '</pre>';
25
+ // exit();
26
+ if (isset($_SERVER['REQUEST_URI'])) {
27
+ if (strpos($_SERVER['REQUEST_URI'], 'sq_feed') !== false) {
28
+ $parseurl = @parse_url($_SERVER['REQUEST_URI']);
29
+ $sitemap = 'sitemap';
30
+ $page = 0;
31
+
32
+ if (isset($parseurl['query'])) {
33
+ parse_str($parseurl['query'], $query);
34
+ $sitemap = (isset($query['sq_feed']) ? $query['sq_feed'] : 'sitemap');
35
+ $page = (isset($query['page']) ? $query['page'] : 0);
36
+ }
37
+
38
+ $wp_query->is_404 = false;
39
+ $wp_query->is_feed = true;
40
+ $this->feedRequest($sitemap, $page);
41
+ apply_filters('sq_sitemapxml', $this->showSitemap());
42
+ die();
43
+ } elseif (strpos($_SERVER['REQUEST_URI'], '.xml') !== false) {
44
+ $parseurl = @parse_url($_SERVER['REQUEST_URI']);
45
+ $stemaplist = SQ_Classes_Tools::getOption('sq_sitemap');
46
+ $page = 0;
47
+
48
+ foreach ($stemaplist as $request => $sitemap) {
49
+ if (isset($sitemap[0]) && $sitemap[1] && str_replace('/', '', $parseurl['path']) == $sitemap[0]) {
50
+ $wp_query->is_404 = false;
51
+ $wp_query->is_feed = true;
52
+
53
+ if (isset($parseurl['query'])) {
54
+ parse_str($parseurl['query'], $query);
55
+ $page = (isset($query['page']) ? $query['page'] : 0);
56
+ }
57
+
58
+ $this->feedRequest($request, $page);
59
+ apply_filters('sq_sitemapxml', $this->showSitemap());
60
+ die();
61
+ }
62
+ }
63
+ }
64
  }
65
  }
66
 
67
  public function refreshSitemap($new_status, $old_status, $post) {
68
  if ($old_status <> $new_status && $new_status = 'publish') {
69
+ if (SQ_Classes_Tools::getOption('sq_sitemap_ping')) {
70
  wp_schedule_single_event(time() + 5, 'sq_processPing');
71
  }
72
  }
74
 
75
  /**
76
  * Listen the feed call from wordpress
77
+ * @param string $request
78
+ * @param integer $page
79
+ * @return SQ_Controllers_Sitemaps
80
  */
81
+ public function feedRequest($request = null, $page = 1) {
82
  global $wp_query;
83
  $query = array();
84
 
85
+ if (isset($request) && strpos($request, 'sitemap') !== false) {
86
+ $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
87
+ $this->model->type = $request;
88
 
89
+ if ($request == 'sitemap') { //if sitemapindex, return
90
+ return $wp_query;
91
+ }
92
+
93
+ if ($this->model->type == 'sitemap-news') {
94
+ $this->posts_limit = $this->news_limit;
95
+ }
96
 
 
97
  //init the query
98
  $query = array(
99
  'sq_feed' => $this->model->type,
100
  'post_type' => array('post'),
101
  'tax_query' => array(),
102
  'post_status' => 'publish',
103
+ 'posts_per_page' => $this->posts_limit,
104
+ 'paged' => $page,
105
+ 'orderby' => 'date',
106
+ 'order' => 'DESC',
107
  );
108
 
109
  //show products
110
  if ($this->model->type == 'sitemap-product') {
111
+ if (SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce() && $sq_sitemap[$this->model->type][1] == 2) {
112
+ $sq_sitemap[$this->model->type][1] = 1;
113
  }
114
  }
115
 
116
+ if (isset($sq_sitemap[$this->model->type]) && $sq_sitemap[$this->model->type][1]) {
117
 
118
+ add_action('do_feed_' . $this->model->type, array($this, 'showSitemap'));
119
  //PREPARE CUSTOM QUERIES
120
  switch ($this->model->type) {
 
121
  case 'sitemap-news':
 
 
 
122
  case 'sitemap-post':
123
  break;
124
  case 'sitemap-category':
128
  add_filter('get_terms_fields', array($this, 'customTaxFilter'), 5, 2);
129
  break;
130
  case 'sitemap-page':
131
+ $query['post_type'] = array('page');
132
  break;
133
  case 'sitemap-author':
134
  add_filter('sq-sitemap-authors', array($this, 'authorFilter'), 5);
153
  array_push($types, 'custom-post');
154
  }
155
 
156
+ $query['post_type'] = $types;
157
  break;
158
  case 'sitemap-product':
159
+ if (!$types = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
160
  $types = array('custom-post');
161
  }
162
+ $query['post_type'] = $types;
163
  break;
164
  case 'sitemap-archive':
165
  add_filter('sq-sitemap-archive', array($this, 'archiveFilter'), 5);
166
  break;
167
  }
168
 
 
169
  }
170
  }
 
171
  if (method_exists($wp_query, 'parse_query')) {
172
  $wp_query = new WP_Query($query);
173
+ return $wp_query->found_posts;
174
  }
175
+
176
+ return false;
177
  }
178
 
179
  /**
187
  header('Content-Type: text/xml; charset=' . get_bloginfo('charset'), true);
188
  //Generate header
189
  echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?>' . "\n";
190
+ echo '<?xml-stylesheet type="text/xsl" href="' . _SQ_THEME_URL_ . 'css/sitemap' . ($this->model->type == 'sitemap' ? 'index' : '') . '.xsl"?>' . "\n";
191
  echo '<!-- generated-on="' . date('Y-m-d\TH:i:s+00:00') . '" -->' . "\n";
192
  echo '<!-- generator="Squirrly SEO Sitemap" -->' . "\n";
193
  echo '<!-- generator-url="https://wordpress.org/plugins/squirrly-seo/" -->' . "\n";
252
  switch ($this->model->type) {
253
  case 'sitemap':
254
  $this->showSitemapHeader();
255
+ $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
256
 
257
+ if (!empty($sq_sitemap))
258
+ foreach ($sq_sitemap as $name => $value) {
259
+ //force to show products if not preset
260
+ if ($name == 'sitemap-product' && !SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
261
+ continue;
262
+ }
263
 
264
+ if ($name !== 'sitemap' && ($value[1] == 1 || $value[1] == 2)) {
265
+ echo "\t" . '<sitemap>' . "\n";
266
+ echo "\t" . '<loc>' . $this->getXmlUrl($name) . '</loc>' . "\n";
267
+ echo "\t" . '<lastmod>' . mysql2date('Y-m-d\TH:i:s+00:00', get_lastpostmodified('gmt'), false) . '</lastmod>' . "\n";
268
+ echo "\t" . '</sitemap>' . "\n";
269
+
270
+
271
+ if ($name == 'sitemap-post' && $count_posts = wp_count_posts()) {
272
+ if (isset($count_posts->publish) && $count_posts->publish > 0 && $count_posts->publish > $this->posts_limit) {
273
+ $pages = ceil($count_posts->publish / $this->posts_limit);
274
+ for ($page = 2; $page <= $pages; $page++) {
275
+ echo "\t" . '<sitemap>' . "\n";
276
+ echo "\t" . '<loc>' . $this->getXmlUrl($name, $page) . '</loc>' . "\n";
277
+ echo "\t" . '<lastmod>' . mysql2date('Y-m-d\TH:i:s+00:00', get_lastpostmodified('gmt'), false) . '</lastmod>' . "\n";
278
+ echo "\t" . '</sitemap>' . "\n";
279
+ }
280
+ }
281
+ }
282
+ if ($name == 'sitemap-page' && $count_posts = wp_count_posts('page')) {
283
+ if (isset($count_posts->publish) && $count_posts->publish > 0 && $count_posts->publish > $this->posts_limit) {
284
+ $pages = ceil($count_posts->publish / $this->posts_limit);
285
+ for ($page = 2; $page <= $pages; $page++) {
286
+ echo "\t" . '<sitemap>' . "\n";
287
+ echo "\t" . '<loc>' . $this->getXmlUrl($name, $page) . '</loc>' . "\n";
288
+ echo "\t" . '<lastmod>' . mysql2date('Y-m-d\TH:i:s+00:00', get_lastpostmodified('gmt'), false) . '</lastmod>' . "\n";
289
+ echo "\t" . '</sitemap>' . "\n";
290
+ }
291
+ }
292
+ }
293
+ if ($name == 'sitemap-product' && $count_posts = wp_count_posts('product')) {
294
+ if (isset($count_posts->publish) && $count_posts->publish > 0 && $count_posts->publish > $this->posts_limit) {
295
+ $pages = ceil($count_posts->publish / $this->posts_limit);
296
+ for ($page = 2; $page <= $pages; $page++) {
297
+ echo "\t" . '<sitemap>' . "\n";
298
+ echo "\t" . '<loc>' . $this->getXmlUrl($name, $page) . '</loc>' . "\n";
299
+ echo "\t" . '<lastmod>' . mysql2date('Y-m-d\TH:i:s+00:00', get_lastpostmodified('gmt'), false) . '</lastmod>' . "\n";
300
+ echo "\t" . '</sitemap>' . "\n";
301
+ }
302
+ }
303
+ }
304
+ }
305
  }
 
306
  $this->showSitemapFooter();
307
  break;
308
  case 'sitemap-home':
331
 
332
  /**
333
  * Pach the XML for each sitemap
334
+ * @param xhtml $xml
335
+ * @return xml|false
336
  */
337
  public function showPackXml($xml) {
338
  if (empty($xml)) {
339
+ $xml['contains'] = '';
340
  }
341
  if (!isset($xml['contains'])) {
342
  $xml['contains'] = '';
405
  /**
406
  * Get the url for each sitemap
407
  * @param string $sitemap
408
+ * @param integer $page
409
  * @return string
410
  */
411
+ public function getXmlUrl($sitemap, $page = null) {
412
+ $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
413
+
414
  if (!get_option('permalink_structure')) {
415
+ $sitemap = '?sq_feed=' . str_replace('.xml', '', $sitemap) . (isset($page) ? '&amp;page=' . $page : '');
416
  } else {
417
+ if (isset($sq_sitemap[$sitemap])) {
418
+ $sitemap = $sq_sitemap[$sitemap][0] . (isset($page) ? '?page=' . $page : '');
419
  }
420
 
421
  if (strpos($sitemap, '.xml') === false) {
427
  }
428
 
429
  public function processCron() {
430
+ SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
431
+
432
+ $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
433
+ if (!empty($sq_sitemap))
434
+ foreach ($sq_sitemap as $name => $sitemap) {
435
+ if ($sitemap[1] == 1) {
436
+ $this->SendPing($this->getXmlUrl($name));
437
+ }
438
  }
 
439
  }
440
 
441
  /**
451
  );
452
 
453
  foreach ($urls as $url) {
454
+ if ($responce = SQ_Classes_Tools::sq_remote_get($url)) {
455
  $success = true;
456
  sleep(mt_rand(2, 5));
457
  }
465
  * @return boolean
466
  */
467
  public function deleteSitemapFile() {
468
+ $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
469
+ if (isset($sq_sitemap[$this->root])) {
470
+ if (file_exists(ABSPATH . $sq_sitemap[$this->root])) {
471
+ @unlink(ABSPATH . $sq_sitemap[$this->root]);
472
  return true;
473
  }
474
  }
552
 
553
  public function productFilter(&$query) {
554
 
555
+ if (!$types = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
556
  $types = array('custom-post');
557
  }
558
  $query->set('post_type', $types); // id of page or post
core/{SQ_BlockAccount/SQ_BlockAccount.php → BlockAccount.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Account settings
5
  */
6
- class SQ_BlockAccount extends SQ_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
3
  /**
4
  * Account settings
5
  */
6
+ class SQ_Core_BlockAccount extends SQ_Classes_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
core/{SQ_BlockAffiliate/SQ_BlockAffiliate.php → BlockAffiliate.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Affiliate settings
5
  */
6
- class SQ_BlockAffiliate extends SQ_BlockController {
7
 
8
  public function hookGetContent() {
9
  parent::preloadSettings();
@@ -11,7 +11,7 @@ class SQ_BlockAffiliate extends SQ_BlockController {
11
 
12
  public function action() {
13
  parent::action();
14
- switch (SQ_Tools::getValue('action')) {
15
  //login action
16
  case 'sq_settings_affiliate':
17
  //post arguments
@@ -21,7 +21,7 @@ class SQ_BlockAffiliate extends SQ_BlockController {
21
  //api responce variable
22
  $responce = '';
23
 
24
- $responce = SQ_Action::apiCall('sq/user/affiliate', $args);
25
 
26
  //create an object from json responce
27
  if (is_object(json_decode($responce)))
@@ -32,7 +32,7 @@ class SQ_BlockAffiliate extends SQ_BlockController {
32
 
33
  //if the affiliate link is received
34
  if (isset($return->affiliate_link)) {
35
- SQ_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);
3
  /**
4
  * Affiliate settings
5
  */
6
+ class SQ_Core_BlockAffiliate extends SQ_Classes_BlockController {
7
 
8
  public function hookGetContent() {
9
  parent::preloadSettings();
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
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)))
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);
core/BlockAnalytics.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Core_BlockAnalytics extends SQ_Classes_BlockController {
4
+
5
+ public function hookGetContent() {
6
+
7
+ }
8
+
9
+ }
core/{SQ_BlockAudit/SQ_BlockAudit.php → BlockAudit.php} RENAMED
@@ -3,11 +3,11 @@
3
  /**
4
  * Audit Page
5
  */
6
- class SQ_BlockAudit extends SQ_BlockController {
7
  public $blog;
8
 
9
  function hookGetContent() {
10
- $blogs = json_decode(SQ_Action::apiCall('sq/audit/blog-list'));
11
  if (!empty($blogs)) {
12
  foreach ($blogs as $blog) {
13
  if (get_bloginfo('url') == $blog->domain){
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){
core/{SQ_BlockLiveAssistant/SQ_BlockLiveAssistant.php → BlockCopyright.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Live Assistant settings
5
  */
6
- class SQ_BlockLiveAssistant extends SQ_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
3
  /**
4
  * Live Assistant settings
5
  */
6
+ class SQ_Core_BlockCopyright extends SQ_Classes_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
core/BlockCustomerService.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
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/{SQ_BlockDashboard/SQ_BlockDashboard.php → BlockDashboard.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Dashboard settings
5
  */
6
- class SQ_BlockDashboard extends SQ_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
3
  /**
4
  * Dashboard settings
5
  */
6
+ class SQ_Core_BlockDashboard extends SQ_Classes_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
core/BlockHelp.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Affiliate settings
5
+ */
6
+ class SQ_Core_BlockHelp extends SQ_Classes_BlockController {
7
+
8
+ }
core/BlockImport.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Set the patterns
5
+ */
6
+ class SQ_Core_BlockImport extends SQ_Classes_BlockController {
7
+
8
+ function hookGetContent() {
9
+ //Remove the notification is Inport Settings are shown
10
+ delete_transient('sq_import');
11
+
12
+ parent::preloadSettings();
13
+ SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
14
+ }
15
+
16
+ /**
17
+ * Called when Post action is triggered
18
+ *
19
+ * @return void
20
+ */
21
+ public function action() {
22
+ parent::action();
23
+ switch (SQ_Classes_Tools::getValue('action')) {
24
+ case 'sq_importsettings':
25
+ if (!current_user_can('manage_options')) {
26
+ return;
27
+ }
28
+
29
+ $platform = SQ_Classes_Tools::getValue('sq_import_platform', '');
30
+ if ($platform <> '') {
31
+ if (SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSettings($platform)) {
32
+ SQ_Classes_Error::setMessage(__('All the Plugin settings were imported successfuly!', _SQ_PLUGIN_NAME_));
33
+ }else{
34
+ SQ_Classes_Error::setMessage(__('No settings found for this plugin/theme.', _SQ_PLUGIN_NAME_));
35
+
36
+ }
37
+ }
38
+ break;
39
+
40
+ case 'sq_importseo':
41
+ if (!current_user_can('manage_options')) {
42
+ return;
43
+ }
44
+ $platform = SQ_Classes_Tools::getValue('sq_import_platform', '');
45
+ if ($platform <> '') {
46
+ $seo = SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->importDBSeo($platform);
47
+ if (!empty($seo)) {
48
+ foreach ($seo as $sq_hash => $metas) {
49
+ SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->db_insert(
50
+ (isset($metas['url']) ? $metas['url'] : ''),
51
+ $sq_hash,
52
+ (isset($metas['post_id']) && is_numeric($metas['post_id']) ? (int)$metas['post_id'] : 0),
53
+ maybe_serialize($metas),
54
+ gmdate('Y-m-d H:i:s'));
55
+ }
56
+ 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)));
57
+ } else {
58
+ 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)));
59
+
60
+ }
61
+ }
62
+ break;
63
+ }
64
+ }
65
+
66
+
67
+ }
core/BlockKeywordResearch.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
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/{SQ_BlockCopyright/SQ_BlockCopyright.php → BlockLiveAssistant.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Live Assistant settings
5
  */
6
- class SQ_BlockCopyright extends SQ_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
3
  /**
4
  * Live Assistant settings
5
  */
6
+ class SQ_Core_BlockLiveAssistant extends SQ_Classes_BlockController {
7
 
8
  function hookGetContent() {
9
  parent::preloadSettings();
core/BlockPatterns.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
23
+ case 'sq_savepatters':
24
+ if (!current_user_can('manage_options')) {
25
+ return;
26
+ }
27
+
28
+ $patterns = SQ_Classes_Tools::getValue('sq_patterns', array());
29
+ if (!empty($patterns)) {
30
+ SQ_Classes_Tools::saveOptions("patterns", $patterns);
31
+ }
32
+
33
+ //If a new post type is added
34
+ $newposttype = SQ_Classes_Tools::getValue('sq_select_post_types', '');
35
+ if ($newposttype <> '') {
36
+ $patterns[$newposttype] = $patterns['custom'];
37
+ if (!empty($patterns)) {
38
+ SQ_Classes_Tools::saveOptions("patterns", $patterns);
39
+ }
40
+ }
41
+
42
+ //empty the cache on settings changed
43
+ SQ_Classes_Tools::emptyCache();
44
+ break;
45
+ }
46
+ }
47
+
48
+
49
+ }
core/{SQ_BlockPostsAnalytics/SQ_BlockPostsAnalytics.php → BlockPostsAnalytics.php} RENAMED
@@ -1,15 +1,16 @@
1
  <?php
2
 
3
- class SQ_BlockPostsAnalytics extends SQ_BlockController {
4
 
5
  public function hookGetContent() {
6
 
7
- SQ_ObjController::getController('SQ_DisplayController', false)
8
- ->loadMedia(_SQ_THEME_URL_ . '/css/sq_postslist.css');
 
 
 
 
9
 
10
- SQ_Tools::saveOptions('sq_analytics', 1); //Save analytics viewed
11
- SQ_Tools::saveOptions('sq_dashboard', 1); //Save dashboard viewed
12
- $this->postlist = SQ_ObjController::getController('SQ_PostsList');
13
 
14
  $this->model->prepare_items();
15
 
1
  <?php
2
 
3
+ class SQ_Core_BlockPostsAnalytics extends SQ_Classes_BlockController {
4
 
5
  public function hookGetContent() {
6
 
7
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')
8
+ ->loadMedia(_SQ_THEME_URL_ . '/css/postslist.css');
9
+
10
+ SQ_Classes_Tools::saveOptions('sq_analytics', 1); //Save analytics viewed
11
+ SQ_Classes_Tools::saveOptions('sq_dashboard', 1); //Save dashboard viewed
12
+ $this->postlist = SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList');
13
 
 
 
 
14
 
15
  $this->model->prepare_items();
16
 
core/BlockSettings.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
11
+ echo '<script type="text/javascript">
12
+ jQuery(document).ready(function () {
13
+ jQuery("#sq_settings").find("select[name=sq_google_country]").val("' . SQ_Classes_Tools::getOption('sq_google_country') . '");
14
+ });
15
+ </script>';
16
+ }
17
+
18
+ /**
19
+ * Called when Post action is triggered
20
+ *
21
+ * @return void
22
+ */
23
+ public function action() {
24
+ parent::action();
25
+
26
+
27
+ switch (SQ_Classes_Tools::getValue('action')) {
28
+
29
+ case 'sq_settings_update':
30
+ if (!current_user_can('manage_options')) {
31
+ return;
32
+ }
33
+
34
+ if (SQ_Classes_Tools::getIsset('sq_post_types')) {
35
+ SQ_Classes_Tools::$options['sq_post_types'] = array();
36
+ foreach (SQ_Classes_Tools::getValue('sq_post_types') as $key) {
37
+ array_push(SQ_Classes_Tools::$options['sq_post_types'], $key);
38
+ }
39
+ if (!in_array('product', get_post_types())) {
40
+ array_push(SQ_Classes_Tools::$options['sq_post_types'], 'product');
41
+ }
42
+ }else{
43
+ SQ_Classes_Tools::$options['sq_post_types'] = array();
44
+ }
45
+
46
+ SQ_Classes_Tools::saveOptions('sq_google_country', SQ_Classes_Tools::getValue('sq_google_country'));
47
+ SQ_Classes_Tools::saveOptions('sq_google_country_strict', SQ_Classes_Tools::getValue('sq_google_country_strict'));
48
+ SQ_Classes_Tools::saveOptions('sq_google_ranksperhour', SQ_Classes_Tools::getValue('sq_google_ranksperhour'));
49
+
50
+ SQ_Classes_Tools::saveOptions('sq_keyword_help', (int)SQ_Classes_Tools::getValue('sq_keyword_help'));
51
+ SQ_Classes_Tools::saveOptions('sq_keyword_information', (int)SQ_Classes_Tools::getValue('sq_keyword_information'));
52
+ SQ_Classes_Tools::saveOptions('sq_force_savepost', (int)SQ_Classes_Tools::getValue('sq_force_savepost'));
53
+
54
+
55
+ SQ_Classes_Tools::saveOptions('sq_sla', (int)SQ_Classes_Tools::getValue('sq_sla'));
56
+ SQ_Classes_Tools::saveOptions('sq_use_frontend', (int)SQ_Classes_Tools::getValue('sq_use_frontend'));
57
+ SQ_Classes_Tools::saveOptions('sq_local_images', (int)SQ_Classes_Tools::getValue('sq_local_images'));
58
+ SQ_Classes_Tools::saveOptions('sq_url_fix', (int)SQ_Classes_Tools::getValue('sq_url_fix'));
59
+
60
+ //Save custom robots
61
+ $robots = SQ_Classes_Tools::getValue('sq_robots_permission', '', true);
62
+ $robots = explode(PHP_EOL, $robots);
63
+ $robots = str_replace("\r", "", $robots);
64
+
65
+ if (!empty($robots)) {
66
+ $robots = array_unique($robots);
67
+ SQ_Classes_Tools::saveOptions('sq_robots_permission', $robots);
68
+ }
69
+
70
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
71
+ SQ_Classes_Tools::emptyCache();
72
+ break;
73
+ }
74
+ }
75
+
76
+ }
core/BlockSettingsSeo.php ADDED
@@ -0,0 +1,538 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('frontmenu.css');
13
+
14
+ //Show Import Settings after Install if needed
15
+ if (current_user_can('manage_options') && get_transient('sq_import')) {
16
+ $platforms = SQ_Classes_ObjController::getClass('SQ_Controllers_Menu')->getImportList();
17
+ $imports = array();
18
+ if (!empty($platforms)) {
19
+ foreach ($platforms as $path => $settings) {
20
+ if ($path !== 'squirrly-seo') {
21
+ $imports[] = ucfirst(SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->getName($path));
22
+ }
23
+ }
24
+
25
+ if (!empty($imports)) {
26
+ 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>'));
27
+ }
28
+ }
29
+ }
30
+
31
+
32
+ /* Force call of error display */
33
+ SQ_Classes_ObjController::getClass('SQ_Classes_Error')->hookNotices();
34
+ echo '<script type="text/javascript">
35
+ var __snippetshort = "' . __('Too short', _SQ_PLUGIN_NAME_) . '";
36
+ var __snippetlong = "' . __('Too long', _SQ_PLUGIN_NAME_) . '";
37
+ jQuery(document).ready(function () {
38
+ jQuery("#sq_settings").find("select[name=sq_og_locale]").val("' . SQ_Classes_Tools::getOption('sq_og_locale') . '");
39
+ });
40
+ </script>';
41
+
42
+ }
43
+
44
+ function hookHead() {
45
+ if (function_exists('wp_enqueue_media')) {
46
+ wp_enqueue_media();
47
+ }
48
+ parent::hookHead();
49
+ }
50
+
51
+ /**
52
+ * Called when Post action is triggered
53
+ *
54
+ * @return void
55
+ */
56
+ public function action() {
57
+ parent::action();
58
+ switch (SQ_Classes_Tools::getValue('action')) {
59
+ case 'sq_settingsseo_option':
60
+ SQ_Classes_Tools::setHeader('json');
61
+
62
+ if (!current_user_can('manage_options')) {
63
+ echo json_encode(array('error' => __("You don't have enough pemission to activate this feature", _SQ_PLUGIN_NAME_)));
64
+ exit();
65
+ }
66
+
67
+ $option = SQ_Classes_Tools::getValue('option');
68
+ $value = (int)SQ_Classes_Tools::getValue('value');
69
+ SQ_Classes_Tools::saveOptions($option, $value);
70
+
71
+ echo json_encode(array('saved' => true));
72
+ exit();
73
+ case 'sq_settingsseo_update':
74
+ if (!current_user_can('manage_options')) {
75
+ return;
76
+ }
77
+
78
+ if (!SQ_Classes_Tools::getIsset('sq_use')) {
79
+ return;
80
+ }
81
+ SQ_Classes_Tools::saveOptions('sq_use', (int)SQ_Classes_Tools::getValue('sq_use'));
82
+ SQ_Classes_Tools::saveOptions('sq_auto_title', (int)SQ_Classes_Tools::getValue('sq_auto_title'));
83
+ SQ_Classes_Tools::saveOptions('sq_auto_description', (int)SQ_Classes_Tools::getValue('sq_auto_description'));
84
+ SQ_Classes_Tools::saveOptions('sq_auto_keywords', (int)SQ_Classes_Tools::getValue('sq_auto_keywords'));
85
+ SQ_Classes_Tools::saveOptions('sq_keywordtag', (int)SQ_Classes_Tools::getValue('sq_keywordtag'));
86
+
87
+ SQ_Classes_Tools::saveOptions('sq_auto_canonical', (int)SQ_Classes_Tools::getValue('sq_auto_canonical'));
88
+ SQ_Classes_Tools::saveOptions('sq_auto_noindex', (int)SQ_Classes_Tools::getValue('sq_auto_noindex'));
89
+
90
+ SQ_Classes_Tools::saveOptions('sq_auto_amp', (int)SQ_Classes_Tools::getValue('sq_auto_amp'));
91
+
92
+ SQ_Classes_Tools::saveOptions('sq_auto_meta', (int)SQ_Classes_Tools::getValue('sq_auto_meta'));
93
+ SQ_Classes_Tools::saveOptions('sq_auto_favicon', (int)SQ_Classes_Tools::getValue('sq_auto_favicon'));
94
+
95
+ ///////////////////////////////////////////
96
+ /////////////////////////////SOCIAL OPTION
97
+ SQ_Classes_Tools::saveOptions('sq_auto_facebook', (int)SQ_Classes_Tools::getValue('sq_auto_facebook'));
98
+ SQ_Classes_Tools::saveOptions('sq_auto_twitter', (int)SQ_Classes_Tools::getValue('sq_auto_twitter'));
99
+ SQ_Classes_Tools::saveOptions('sq_og_locale', SQ_Classes_Tools::getValue('sq_og_locale'));
100
+
101
+ $socials = array_merge(SQ_Classes_Tools::getOption('socials'), SQ_Classes_Tools::getValue('sq_socials', array()));
102
+
103
+ if (isset($socials['twitter_site'])) $socials['twitter_site'] = $this->model->checkTwitterAccount($socials['twitter_site']);
104
+ if (isset($socials['twitter_site'])) $socials['twitter'] = $this->model->checkTwitterAccountName($socials['twitter_site']);
105
+ if (isset($socials['facebook_site'])) $socials['facebook_site'] = $this->model->checkFacebookAccount($socials['facebook_site']);
106
+ if (isset($socials['google_plus_url'])) $socials['google_plus_url'] = $this->model->checkGoogleAccount($socials['google_plus_url']);
107
+ if (isset($socials['pinterest_url'])) $socials['pinterest_url'] = $this->model->checkPinterestAccount($socials['pinterest_url']);
108
+ if (isset($socials['instagram_url'])) $socials['instagram_url'] = $this->model->checkInstagramAccount($socials['instagram_url']);
109
+ if (isset($socials['linkedin_url'])) $socials['linkedin_url'] = $this->model->checkLinkeinAccount($socials['linkedin_url']);
110
+ if (isset($socials['myspace_url'])) $socials['myspace_url'] = $this->model->checkMySpaceAccount($socials['myspace_url']);
111
+ if (isset($socials['youtube_url'])) $socials['youtube_url'] = $this->model->checkYoutubeAccount($socials['youtube_url']);
112
+
113
+ $fb_admins = SQ_Classes_Tools::getValue('sq_fb_admins', array());
114
+ if (!empty($fb_admins)) {
115
+ foreach ($fb_admins as $index => $value) {
116
+ if (isset($value) && $value == '') {
117
+ unset($socials['fb_admins'][$index]);
118
+ } else {
119
+ $socials['fb_admins'][$index]['id'] = $this->model->checkFavebookAdminCode($value);
120
+ }
121
+ }
122
+ }
123
+
124
+ //get the facebook app id for sharing
125
+ if (SQ_Classes_Tools::getIsset('sq_fbadminapp')) $socials['fbadminapp'] = SQ_Classes_Tools::getValue('sq_fbadminapp');
126
+ if (SQ_Classes_Tools::getIsset('twitter_card_type')) $socials['twitter_card_type'] = SQ_Classes_Tools::getValue('twitter_card_type');
127
+
128
+
129
+ SQ_Classes_Tools::saveOptions("socials", $socials);
130
+
131
+ ///////////////////////////////////////////
132
+ /////////////////////////////FIRST PAGE OPTIMIZATION
133
+ if ($pageId = get_option('page_on_front')) {
134
+ $sq_hash = md5($pageId);
135
+ } elseif ($post_id = get_option('page_for_posts')) {
136
+ $sq_hash = md5($pageId);
137
+ } else {
138
+ $sq_hash = md5('wp_homepage');
139
+ }
140
+
141
+ if ($sq_hash <> '') {
142
+ $url = home_url();
143
+ $sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($sq_hash);
144
+
145
+ $sq->doseo = 1;
146
+ $sq->title = urldecode(SQ_Classes_Tools::getValue('sq_fp_title', false));
147
+ $sq->description = urldecode(SQ_Classes_Tools::getValue('sq_fp_description', false));
148
+ $sq->keywords = SQ_Classes_Tools::getValue('sq_fp_keywords', false);
149
+ $sq->og_media = SQ_Classes_Tools::getValue('sq_fp_ogimage', false);
150
+
151
+ $this->model->db_insert(
152
+ $url,
153
+ $sq_hash,
154
+ (int)$pageId,
155
+ maybe_serialize($sq->toArray()),
156
+ gmdate('Y-m-d H:i:s')
157
+ );
158
+ }
159
+
160
+ ///////////////////////////////////////////
161
+ /////////////////////////////SITEMAP OPTION
162
+ SQ_Classes_Tools::saveOptions('sq_auto_sitemap', (int)SQ_Classes_Tools::getValue('sq_auto_sitemap'));
163
+ SQ_Classes_Tools::saveOptions('sq_auto_feed', (int)SQ_Classes_Tools::getValue('sq_auto_feed'));
164
+ SQ_Classes_Tools::saveOptions('sq_sitemap_frequency', SQ_Classes_Tools::getValue('sq_sitemap_frequency'));
165
+ SQ_Classes_Tools::saveOptions('sq_sitemap_ping', (int)SQ_Classes_Tools::getValue('sq_sitemap_ping'));
166
+ SQ_Classes_Tools::saveOptions('sq_sitemap_perpage', (int)SQ_Classes_Tools::getValue('sq_sitemap_perpage'));
167
+
168
+
169
+ foreach (SQ_Classes_Tools::$options['sq_sitemap'] as $key => $value) {
170
+ if ($key == 'sitemap') {
171
+ continue;
172
+ }
173
+ SQ_Classes_Tools::$options['sq_sitemap'][$key][1] = 0;
174
+ if ($key == 'sitemap-product' && !$this->model->isEcommerce()) {
175
+ SQ_Classes_Tools::$options['sq_sitemap'][$key][1] = 2;
176
+ }
177
+ }
178
+ if (SQ_Classes_Tools::getIsset('sq_sitemap')) {
179
+ foreach (SQ_Classes_Tools::getValue('sq_sitemap') as $key) {
180
+ if (isset(SQ_Classes_Tools::$options['sq_sitemap'][$key][1])) {
181
+ SQ_Classes_Tools::$options['sq_sitemap'][$key][1] = 1;
182
+ }
183
+ }
184
+ }
185
+
186
+ foreach (SQ_Classes_Tools::$options['sq_sitemap_show'] as $key => $value) {
187
+ SQ_Classes_Tools::$options['sq_sitemap_show'][$key] = 0;
188
+ }
189
+ if (SQ_Classes_Tools::getIsset('sq_sitemap_show')) {
190
+ foreach (SQ_Classes_Tools::getValue('sq_sitemap_show') as $key) {
191
+ if (isset(SQ_Classes_Tools::$options['sq_sitemap_show'][$key])) {
192
+ SQ_Classes_Tools::$options['sq_sitemap_show'][$key] = 1;
193
+ }
194
+ }
195
+ }
196
+
197
+ ///////////////////////////////////////////
198
+ ///////SAVE THE CODE
199
+ $codes = array_merge(SQ_Classes_Tools::getOption('codes'), SQ_Classes_Tools::getValue('sq_codes', array()));
200
+
201
+ if (!empty($codes)) {
202
+ //if (isset($codes['facebook_pixel'])) $codes['facebook_pixel'] = $codes['facebook_pixel'];
203
+ if (isset($codes['google_analytics'])) $codes['google_analytics'] = $this->model->checkGoogleAnalyticsCode($codes['google_analytics']);
204
+ if (isset($codes['pinterest_verify'])) $codes['pinterest_verify'] = $this->model->checkPinterestCode($codes['pinterest_verify']);
205
+ if (isset($codes['google_wt'])) $codes['google_wt'] = $this->model->checkGoogleWTCode($codes['google_wt']);
206
+ if (isset($codes['bing_wt'])) $codes['bing_wt'] = $this->model->checkBingWTCode($codes['bing_wt']);
207
+ if (isset($codes['alexa_verify'])) $codes['alexa_verify'] = $this->model->checkBingWTCode($codes['alexa_verify']);
208
+
209
+ SQ_Classes_Tools::saveOptions("codes", $codes);
210
+ }
211
+
212
+
213
+ ///////////////////////////////////////////JSONLD
214
+ SQ_Classes_Tools::saveOptions('sq_auto_jsonld', (int)SQ_Classes_Tools::getValue('sq_auto_jsonld'));
215
+ if (SQ_Classes_Tools::getIsset('sq_jsonld_type') && isset(SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')])) {
216
+
217
+ foreach (SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')] as $key => $value) {
218
+ if (isset(SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')][$key])) {
219
+ SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')][$key] = SQ_Classes_Tools::getValue('sq_jsonld_' . $key);
220
+ }
221
+ }
222
+ if (isset(SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone']) &&
223
+ SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone'] <> ''
224
+ ) {
225
+ SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone'] = '+' . SQ_Classes_Tools::$options['sq_jsonld'][SQ_Classes_Tools::getValue('sq_jsonld_type')]['telephone'];
226
+ }
227
+ }
228
+ SQ_Classes_Tools::saveOptions('sq_jsonld_type', SQ_Classes_Tools::getValue('sq_jsonld_type'));
229
+
230
+ ///////////////////////////////////////////
231
+ /////////////////////////////FAVICON OPTION
232
+
233
+ /* if there is an icon to upload */
234
+ if (!empty($_FILES['favicon'])) {
235
+
236
+ $return = $this->model->addFavicon($_FILES['favicon']);
237
+ if ($return['favicon'] <> '') {
238
+ SQ_Classes_Tools::saveOptions('favicon', strtolower(basename($return['favicon'])));
239
+ }
240
+ if ($return['message'] <> '') {
241
+ define('SQ_MESSAGE_FAVICON', $return['message']);
242
+ SQ_Classes_Error::setError(SQ_MESSAGE_FAVICON . " <br /> ");
243
+ }
244
+ }
245
+
246
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
247
+
248
+
249
+ if (SQ_Classes_Tools::isAjax()) {
250
+ SQ_Classes_Tools::setHeader('json');
251
+ echo json_encode(array('saved' => true));
252
+ exit();
253
+ } else {
254
+ //Update the rewrite rules with the new options
255
+ add_filter('rewrite_rules_array', array($this, 'rewrite_rules'), 999, 1);
256
+ //Flush the rewrite with the new favicon and sitemap
257
+ flush_rewrite_rules();
258
+ //empty the cache on settings changed
259
+ SQ_Classes_Tools::emptyCache();
260
+
261
+ }
262
+ break;
263
+ case 'sq_setstickysla':
264
+ SQ_Classes_Tools::saveUserMeta('sq_auto_sticky', (int)SQ_Classes_Tools::getValue('sq_auto_sticky'));
265
+
266
+ break;
267
+ case 'sq_checkissues':
268
+ if (!current_user_can('manage_options')) {
269
+ return;
270
+ }
271
+
272
+ SQ_Classes_Tools::saveOptions('sq_checkedissues', 1);
273
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
274
+
275
+ /* Load the error class */
276
+ SQ_Classes_Tools::checkErrorSettings();
277
+
278
+ break;
279
+ case 'sq_fixautoseo':
280
+ if (!current_user_can('manage_options')) {
281
+ return;
282
+ }
283
+
284
+ SQ_Classes_Tools::saveOptions('sq_use', 1);
285
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
286
+
287
+ break;
288
+ case 'sq_fixprivate':
289
+ if (!current_user_can('manage_options')) {
290
+ return;
291
+ }
292
+
293
+ update_option('blog_public', 1);
294
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
295
+
296
+ break;
297
+ case 'sq_fixcomments':
298
+ if (!current_user_can('manage_options')) {
299
+ return;
300
+ }
301
+
302
+ update_option('comments_notify', 1);
303
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
304
+
305
+ break;
306
+ case 'sq_fixpermalink':
307
+ if (!current_user_can('manage_options')) {
308
+ return;
309
+ }
310
+
311
+ $GLOBALS['wp_rewrite'] = new WP_Rewrite();
312
+ global $wp_rewrite;
313
+ $permalink_structure = ((get_option('permalink_structure') <> '') ? get_option('permalink_structure') : '/') . "%postname%/";
314
+ $wp_rewrite->set_permalink_structure($permalink_structure);
315
+ $permalink_structure = get_option('permalink_structure');
316
+
317
+ flush_rewrite_rules();
318
+ break;
319
+ case 'sq_fix_ogduplicate':
320
+ if (!current_user_can('manage_options')) {
321
+ return;
322
+ }
323
+
324
+ SQ_Classes_Tools::saveOptions('sq_auto_facebook', 0);
325
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
326
+
327
+ break;
328
+ case 'sq_fix_tcduplicate':
329
+ if (!current_user_can('manage_options')) {
330
+ return;
331
+ }
332
+
333
+ SQ_Classes_Tools::saveOptions('sq_auto_twitter', 0);
334
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
335
+
336
+ break;
337
+ case 'sq_fix_titleduplicate':
338
+ if (!current_user_can('manage_options')) {
339
+ return;
340
+ }
341
+
342
+ SQ_Classes_Tools::saveOptions('sq_auto_title', 0);
343
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
344
+
345
+ break;
346
+ case 'sq_fix_descduplicate':
347
+ if (!current_user_can('manage_options')) {
348
+ return;
349
+ }
350
+
351
+ SQ_Classes_Tools::saveOptions('sq_auto_description', 0);
352
+ SQ_Classes_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Classes_Tools::getBriefOptions())), 10);
353
+
354
+ break;
355
+ case 'sq_active_help' :
356
+ if (!current_user_can('manage_options')) {
357
+ return;
358
+ }
359
+
360
+ SQ_Classes_Tools::saveOptions('active_help', SQ_Classes_Tools::getValue('active_help'));
361
+ break;
362
+ case 'sq_warnings_off':
363
+ if (!current_user_can('manage_options')) {
364
+ return;
365
+ }
366
+
367
+ SQ_Classes_Tools::saveOptions('ignore_warn', 1);
368
+ break;
369
+ case 'sq_copyright_agreement':
370
+ if (!current_user_can('manage_options')) {
371
+ return;
372
+ }
373
+
374
+ SQ_Classes_Tools::saveOptions('sq_copyright_agreement', 1);
375
+ break;
376
+ case 'sq_get_snippet':
377
+
378
+ if (SQ_Classes_Tools::getValue('url') <> '') {
379
+ $url = SQ_Classes_Tools::getValue('url');
380
+ } else {
381
+ $url = get_bloginfo('url');
382
+ }
383
+ $snippet = SQ_Classes_Tools::getSnippet($url);
384
+
385
+ SQ_Classes_Tools::setHeader('json');
386
+ echo json_encode($snippet);
387
+ exit();
388
+ case 'sq_backup':
389
+ if (!current_user_can('manage_options')) {
390
+ return;
391
+ }
392
+
393
+ SQ_Classes_Tools::setHeader('text');
394
+ header("Content-Disposition: attachment; filename=squirrly-settings-" . gmdate('Y-m-d') . ".txt");
395
+
396
+ if (function_exists('base64_encode')) {
397
+ echo base64_encode(json_encode(SQ_Classes_Tools::$options));
398
+ } else {
399
+ echo json_encode(SQ_Classes_Tools::$options);
400
+ }
401
+ exit();
402
+ break;
403
+ case 'sq_restore':
404
+ if (!current_user_can('manage_options')) {
405
+ return;
406
+ }
407
+
408
+ if (!empty($_FILES['sq_options']) && $_FILES["sq_options"]["type"] == "text/plain" && $_FILES['sq_options']['tmp_name'] <> '') {
409
+ $fp = fopen($_FILES['sq_options']['tmp_name'], 'rb');
410
+ $options = '';
411
+ while (($line = fgets($fp)) !== false) {
412
+ $options .= $line;
413
+ }
414
+ try {
415
+ if (function_exists('base64_encode') && base64_decode($options) <> '') {
416
+ $options = @base64_decode($options);
417
+ }
418
+ $options = json_decode($options, true);
419
+ if (is_array($options) && isset($options['sq_api'])) {
420
+ if (SQ_Classes_Tools::getOption('sq_api') <> '') {
421
+ $options['sq_api'] = SQ_Classes_Tools::getOption('sq_api');
422
+ }
423
+ SQ_Classes_Tools::$options = $options;
424
+ SQ_Classes_Tools::saveOptions();
425
+
426
+ //Check if there is an old backup from Squirrly
427
+ SQ_Classes_Tools::getOptions();
428
+ SQ_Classes_Tools::checkUpgrade();
429
+
430
+ //Update the rewrite rules with the new options
431
+ add_filter('rewrite_rules_array', array($this, 'rewrite_rules'), 999, 1);
432
+ //Flush the rewrite with the new favicon and sitemap
433
+ flush_rewrite_rules();
434
+
435
+ SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
436
+ } else {
437
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
438
+ }
439
+ } catch (Exception $e) {
440
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
441
+ }
442
+ } else {
443
+ SQ_Classes_Error::setError(__('Error! You have to enter a previous saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
444
+ }
445
+ break;
446
+ case 'sq_backup_sql':
447
+ if (!current_user_can('manage_options')) {
448
+ return;
449
+ }
450
+
451
+ header('Content-Type: application/octet-stream');
452
+ header("Content-Transfer-Encoding: Binary");
453
+ header("Content-Disposition: attachment; filename=squirrly-seo-" . gmdate('Y-m-d') . ".sql");
454
+
455
+ if (function_exists('base64_encode')) {
456
+ echo base64_encode($this->model->createTableBackup());
457
+ } else {
458
+ echo $this->model->createTableBackup();
459
+ }
460
+ exit();
461
+ break;
462
+ case 'sq_restore_sql':
463
+ if (!current_user_can('manage_options')) {
464
+ return;
465
+ }
466
+
467
+
468
+ if (!empty($_FILES['sq_sql']) && $_FILES["sq_sql"]["type"] == "application/octet-stream" && $_FILES['sq_sql']['tmp_name'] <> '') {
469
+ $fp = fopen($_FILES['sq_sql']['tmp_name'], 'rb');
470
+ $sql_file = '';
471
+ while (($line = fgets($fp)) !== false) {
472
+ $sql_file .= $line;
473
+ }
474
+
475
+ if (function_exists('base64_encode')) {
476
+ $sql_file = @base64_decode($sql_file);
477
+ }
478
+ if ($sql_file <> '' && strpos($sql_file, 'CREATE TABLE IF NOT EXISTS') !== false) {
479
+ try {
480
+ $queries = explode(";\n", $sql_file);
481
+ $this->model->executeSql($queries);
482
+ SQ_Classes_Error::setError(__('Great! The SEO backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
483
+
484
+ } catch (Exception $e) {
485
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
486
+ }
487
+ } else {
488
+ SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
489
+ }
490
+ } else {
491
+ SQ_Classes_Error::setError(__('Error! You have to enter a previous saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
492
+ }
493
+ break;
494
+ case 'sq_dataupgrade':
495
+ //Check if there is an old backup from Squirrly
496
+ SQ_Classes_Tools::getOptions();
497
+ SQ_Classes_Tools::checkUpgrade();
498
+ SQ_Classes_Error::setError(__('Great! Squirrly Data Settings is up to date now.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
499
+
500
+ break;
501
+ case 'sq_resetsettings':
502
+ if (!current_user_can('manage_options')) {
503
+ return;
504
+ }
505
+
506
+ SQ_Classes_Tools::$options = SQ_Classes_Tools::getOptions('reset');
507
+ SQ_Classes_Tools::saveOptions();
508
+ break;
509
+ }
510
+ }
511
+
512
+ /**
513
+ * Add the favicon in the rewrite rule
514
+ * @param type $wp_rewrite
515
+ */
516
+ public function rewrite_rules($wp_rewrite) {
517
+ $rules = array();
518
+ if (SQ_Classes_Tools::getOption('sq_use') == 1) {
519
+
520
+ //For Favicon
521
+ if (SQ_Classes_Tools::$options['sq_auto_favicon'] == 1) {
522
+ $rules['favicon\.ico$'] = 'index.php?sq_get=favicon';
523
+ $rules['favicon\.icon$'] = 'index.php?sq_get=favicon';
524
+ $rules['touch-icon\.png$'] = 'index.php?sq_get=touchicon';
525
+ foreach ($this->model->appleSizes as $size) {
526
+ $size = (int)$size;
527
+ $rules['touch-icon' . $size . '\.png$'] = 'index.php?sq_get=touchicon&sq_size=' . $size;
528
+ }
529
+ }
530
+
531
+ if (SQ_Classes_Tools::$options['sq_auto_feed'] == 1) {
532
+ $rules['sqfeedcss$'] = 'index.php?sq_get=feedcss';
533
+ }
534
+ }
535
+ return array_merge($rules, $wp_rewrite);
536
+ }
537
+
538
+ }
core/{SQ_BlockSupport/SQ_BlockSupport.php → BlockSupport.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class SQ_BlockSupport extends SQ_BlockController {
4
 
5
  /**
6
  * Called when Post action is triggered
@@ -10,18 +10,18 @@ class SQ_BlockSupport extends SQ_BlockController {
10
  public function action() {
11
  parent::action();
12
 
13
- switch (SQ_Tools::getValue('action')) {
14
  case 'sq_feedback':
15
  global $current_user;
16
  $return = array();
17
 
18
- SQ_Tools::saveOptions('sq_feedback', 1);
19
 
20
  $line = "\n" . "________________________________________" . "\n";
21
  $from = $current_user->user_email;
22
  $subject = __('Plugin Feedback', _SQ_PLUGIN_NAME_);
23
- $face = SQ_Tools::getValue('feedback');
24
- $message = SQ_Tools::getValue('message');
25
 
26
  if ($message <> '' || (int) $face > 0) {
27
  switch ($face) {
@@ -66,7 +66,7 @@ class SQ_BlockSupport extends SQ_BlockController {
66
  $return['error'] = true;
67
  }
68
 
69
- SQ_Tools::setHeader('json');
70
  echo json_encode($return);
71
  break;
72
 
@@ -82,8 +82,8 @@ class SQ_BlockSupport extends SQ_BlockController {
82
 
83
  $line = "\n" . "________________________________________" . "\n";
84
  $from = $current_user->user_email;
85
- $subject = SQ_Tools::getValue('subject', __('Plugin Support', _SQ_PLUGIN_NAME_));
86
- $message = SQ_Tools::getValue('message');
87
 
88
  if ($message <> '') {
89
  $message .= $line;
1
  <?php
2
 
3
+ class SQ_Core_BlockSupport extends SQ_Classes_BlockController {
4
 
5
  /**
6
  * Called when Post action is triggered
10
  public function action() {
11
  parent::action();
12
 
13
+ switch (SQ_Classes_Tools::getValue('action')) {
14
  case 'sq_feedback':
15
  global $current_user;
16
  $return = array();
17
 
18
+ SQ_Classes_Tools::saveOptions('sq_feedback', 1);
19
 
20
  $line = "\n" . "________________________________________" . "\n";
21
  $from = $current_user->user_email;
22
  $subject = __('Plugin Feedback', _SQ_PLUGIN_NAME_);
23
+ $face = SQ_Classes_Tools::getValue('feedback');
24
+ $message = SQ_Classes_Tools::getValue('message');
25
 
26
  if ($message <> '' || (int) $face > 0) {
27
  switch ($face) {
66
  $return['error'] = true;
67
  }
68
 
69
+ SQ_Classes_Tools::setHeader('json');
70
  echo json_encode($return);
71
  break;
72
 
82
 
83
  $line = "\n" . "________________________________________" . "\n";
84
  $from = $current_user->user_email;
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;
core/BlockToolbar.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ class SQ_Core_BlockToolbar extends SQ_Classes_BlockController {
3
+
4
+ }
core/{SQ_Blocklogin/SQ_Blocklogin.php → Blocklogin.php} RENAMED
@@ -1,10 +1,10 @@
1
  <?php
2
 
3
- class SQ_Blocklogin extends SQ_BlockController {
4
 
5
  public function init() {
6
  /* If logged in, then return */
7
- if (SQ_Tools::$options['sq_api'] <> '')
8
  return;
9
  parent::init();
10
  }
@@ -15,7 +15,7 @@ class SQ_Blocklogin extends SQ_BlockController {
15
  */
16
  public function action() {
17
  parent::action();
18
- switch (SQ_Tools::getValue('action')) {
19
  //login action
20
  case 'sq_login':
21
  $this->squirrlyLogin();
@@ -28,12 +28,12 @@ class SQ_Blocklogin extends SQ_BlockController {
28
 
29
  //reset the token action
30
  case 'sq_reset':
31
- SQ_Tools::saveOptions('sq_api', '');
32
  $return = array();
33
  $return['reset'] = 'success';
34
 
35
  //Set the header for json reply
36
- SQ_Tools::setHeader('json');
37
  echo json_encode($return);
38
  //force exit
39
  exit();
@@ -54,15 +54,15 @@ class SQ_Blocklogin extends SQ_BlockController {
54
  $args = array();
55
 
56
  //Check if email is set
57
- if (SQ_Tools::getValue('email') <> '') {
58
  $args['name'] = '';
59
- $args['user'] = SQ_Tools::getValue('email');
60
- $args['email'] = SQ_Tools::getValue('email');
61
  }
62
 
63
  //if email is set
64
  if ($args['email'] <> '') {
65
- $responce = SQ_Action::apiCall('sq/register', $args);
66
 
67
  //create an object from json responce
68
  if (is_object(json_decode($responce)))
@@ -73,7 +73,7 @@ class SQ_Blocklogin extends SQ_BlockController {
73
 
74
  //check if token is set and save it
75
  if (isset($return->token)) {
76
- SQ_Tools::saveOptions('sq_api', $return->token);
77
  } elseif (!empty($return->error)) {
78
  //if an error is throw then ...
79
  switch ($return->error) {
@@ -89,7 +89,7 @@ class SQ_Blocklogin extends SQ_BlockController {
89
  $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>');
90
 
91
  //Set the header to json
92
- SQ_Tools::setHeader('json');
93
  echo json_encode($return); //transform object in json and show it
94
 
95
  exit();
@@ -105,12 +105,12 @@ class SQ_Blocklogin extends SQ_BlockController {
105
  $responce = '';
106
 
107
  //get the user and password
108
- $args['user'] = SQ_Tools::getValue('user', null, true);
109
- $args['password'] = SQ_Tools::getValue('password', null, true);
110
 
111
  if ($args['user'] <> '' && $args['password'] <> '') {
112
  //get the responce from server on login call
113
- $responce = SQ_Action::apiCall('sq/login', $args);
114
 
115
  //create an object from json responce
116
  if (is_object(json_decode($responce)))
@@ -121,7 +121,7 @@ class SQ_Blocklogin extends SQ_BlockController {
121
 
122
  //check if token is set and save it
123
  if (isset($return->token)) {
124
- SQ_Tools::saveOptions('sq_api', $return->token);
125
  } elseif (!empty($return->error)) {
126
  //if an error is throw then ...
127
  switch ($return->error) {
@@ -139,7 +139,7 @@ class SQ_Blocklogin extends SQ_BlockController {
139
  $return->error = __('Both fields are required.', _SQ_PLUGIN_NAME_);
140
 
141
  //Set the header to json
142
- SQ_Tools::setHeader('json');
143
  echo json_encode($return);
144
 
145
  exit();
1
  <?php
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
  parent::init();
10
  }
15
  */
16
  public function action() {
17
  parent::action();
18
+ switch (SQ_Classes_Tools::getValue('action')) {
19
  //login action
20
  case 'sq_login':
21
  $this->squirrlyLogin();
28
 
29
  //reset the token action
30
  case 'sq_reset':
31
+ SQ_Classes_Tools::saveOptions('sq_api', '');
32
  $return = array();
33
  $return['reset'] = 'success';
34
 
35
  //Set the header for json reply
36
+ SQ_Classes_Tools::setHeader('json');
37
  echo json_encode($return);
38
  //force exit
39
  exit();
54
  $args = array();
55
 
56
  //Check if email is set
57
+ if (SQ_Classes_Tools::getValue('email') <> '') {
58
  $args['name'] = '';
59
+ $args['user'] = SQ_Classes_Tools::getValue('email');
60
+ $args['email'] = SQ_Classes_Tools::getValue('email');
61
  }
62
 
63
  //if email is set
64
  if ($args['email'] <> '') {
65
+ $responce = SQ_Classes_Action::apiCall('sq/register', $args);
66
 
67
  //create an object from json responce
68
  if (is_object(json_decode($responce)))
73
 
74
  //check if token is set and save it
75
  if (isset($return->token)) {
76
+ SQ_Classes_Tools::saveOptions('sq_api', $return->token);
77
  } elseif (!empty($return->error)) {
78
  //if an error is throw then ...
79
  switch ($return->error) {
89
  $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>');
90
 
91
  //Set the header to json
92
+ SQ_Classes_Tools::setHeader('json');
93
  echo json_encode($return); //transform object in json and show it
94
 
95
  exit();
105
  $responce = '';
106
 
107
  //get the user and password
108
+ $args['user'] = SQ_Classes_Tools::getValue('user', null, true);
109
+ $args['password'] = SQ_Classes_Tools::getValue('password', null, true);
110
 
111
  if ($args['user'] <> '' && $args['password'] <> '') {
112
  //get the responce from server on login call
113
+ $responce = SQ_Classes_Action::apiCall('sq/login', $args);
114
 
115
  //create an object from json responce
116
  if (is_object(json_decode($responce)))
121
 
122
  //check if token is set and save it
123
  if (isset($return->token)) {
124
+ SQ_Classes_Tools::saveOptions('sq_api', $return->token);
125
  } elseif (!empty($return->error)) {
126
  //if an error is throw then ...
127
  switch ($return->error) {
139
  $return->error = __('Both fields are required.', _SQ_PLUGIN_NAME_);
140
 
141
  //Set the header to json
142
+ SQ_Classes_Tools::setHeader('json');
143
  echo json_encode($return);
144
 
145
  exit();
core/Blockresearch.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ public function loadJsVars() {
11
+ global $sq_postID;
12
+
13
+ /* Check the squirrly.js file if exists */
14
+ $browser = SQ_Classes_Tools::getBrowserInfo();
15
+
16
+ if ((isset($browser) && $browser != false && is_array($browser) && $browser['name'] == 'IE' && (int)$browser['version'] < 9 && (int)$browser['version'] > 0)) {
17
+ echo '<script type="text/javascript">
18
+ (function($){
19
+ $("#sq_preloading").removeClass("sq_loading");
20
+ $("#sq_preloading").addClass("sq_error")
21
+ $("#sq_preloading").html("' . __('For Squirrly to work properly you have to use a higher version of Internet Explorer. <br /> We recommend you to use Chrome or Mozilla.', _SQ_PLUGIN_NAME_) . '");
22
+ $("#sq_options").hide();
23
+ $("#sq_blocklogin").hide();
24
+ })(jQuery);
25
+ </script>';
26
+ } else {
27
+ echo '<script type="text/javascript">
28
+ var SQ_DEBUG = ' . (int)SQ_DEBUG . ';
29
+ (function($){
30
+ $.sq_config = {
31
+ sq_use: ' . (int)SQ_Classes_Tools::getOption('sq_use') . ',
32
+ user_url: "' . home_url() . '",
33
+ sq_baseurl: "' . _SQ_STATIC_API_URL_ . '",
34
+ sq_uri: "' . SQ_URI . '",
35
+ sq_apiurl: "' . _SQ_API_URL_ . '",
36
+ language: "' . get_bloginfo('language') . '",
37
+ sq_version: "' . SQ_VERSION_ID . '",
38
+ sq_wpversion: "' . WP_VERSION_ID . '",
39
+ sq_phpversion: "' . PHP_VERSION_ID . '",
40
+ sq_seoversion: "' . (SQ_Classes_Tools::getOption('sq_sla') + 1) . '",
41
+ keyword_information: ' . (int)SQ_Classes_Tools::getOption('sq_keyword_information') . ',
42
+ sq_keywordtag: ' . (int)SQ_Classes_Tools::getOption('sq_keywordtag') . ',
43
+ frontend_css: "' . _SQ_THEME_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css",
44
+ postID: "' . $sq_postID . '",
45
+ prevNonce: "' . wp_create_nonce('post_preview_' . $sq_postID) . '",
46
+ token: "' . SQ_Classes_Tools::getOption('sq_api') . '",
47
+ __infotext: ["' . __('Recent discussions:', _SQ_PLUGIN_NAME_) . '", "' . __('SEO Search Volume:', _SQ_PLUGIN_NAME_) . '", "' . __('Competition:', _SQ_PLUGIN_NAME_) . '", "' . __('Trend:', _SQ_PLUGIN_NAME_) . '"],
48
+ __keyword: "' . __('Keyword:', _SQ_PLUGIN_NAME_) . '",
49
+ __date: "' . __('date', _SQ_PLUGIN_NAME_) . '",
50
+ __readit: "' . __('Read it!', _SQ_PLUGIN_NAME_) . '",
51
+ __insertit: "' . __('Insert it!', _SQ_PLUGIN_NAME_) . '",
52
+ __reference: "' . __('Reference', _SQ_PLUGIN_NAME_) . '",
53
+ __insertasbox: "' . __('Insert as box', _SQ_PLUGIN_NAME_) . '",
54
+ __addlink: "' . __('Insert Link', _SQ_PLUGIN_NAME_) . '",
55
+ __notrelevant: "' . __('Not relevant?', _SQ_PLUGIN_NAME_) . '",
56
+ __insertparagraph: "' . __('Insert in your article', _SQ_PLUGIN_NAME_) . '",
57
+ __ajaxerror: "' . __(':( An error occurred while processing your request. Please try again', _SQ_PLUGIN_NAME_) . '",
58
+ __krerror: "' . __('Keyword Research takes too long to get the results. Click to try again', _SQ_PLUGIN_NAME_) . '",
59
+ __nofound: "' . __('No results found!', _SQ_PLUGIN_NAME_) . '",
60
+ __morewords: "' . __('Enter one more word to find relevant results', _SQ_PLUGIN_NAME_) . '",
61
+ __toolong: "' . __('Takes too long to check this keyword ...', _SQ_PLUGIN_NAME_) . '",
62
+ __doresearch: "' . __('Do a research!', _SQ_PLUGIN_NAME_) . '",
63
+ __morekeywords: "' . __('Do more research!', _SQ_PLUGIN_NAME_) . '",
64
+ __sq_photo_copyright: "' . __('[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]', _SQ_PLUGIN_NAME_) . '",
65
+ __has_attributes: "' . __('Has creative commons attributes', _SQ_PLUGIN_NAME_) . '",
66
+ __no_attributes: "' . __('No known copyright restrictions', _SQ_PLUGIN_NAME_) . '",
67
+ __noopt: "' . __('You haven`t used Squirrly SEO to optimize your article. Do you want to optimize for a keyword before publishing?', _SQ_PLUGIN_NAME_) . '",
68
+ __limit_exceeded: "' . __('Keyword Research limit exceeded', _SQ_PLUGIN_NAME_) . '",
69
+ __subscription_expired: "' . __('Your Subscription has Expired', _SQ_PLUGIN_NAME_) . '",
70
+ __add_keywords: "' . __('Add 20 Keyword Researches', _SQ_PLUGIN_NAME_) . '",
71
+ __no_briefcase: "' . __('There are no keywords saved in briefcase yet', _SQ_PLUGIN_NAME_) . '",
72
+ __fulloptimized: "' . __('Congratulations! Your article is 100% optimized!', _SQ_PLUGIN_NAME_) . '",
73
+ __toomanytimes: "' . __('appears too many times. Try to remove %s of them', _SQ_PLUGIN_NAME_) . '",
74
+ __writemorewords: "' . __('write %s more words', _SQ_PLUGIN_NAME_) . '",
75
+ __keywordinintroduction: "' . __('Add the keyword in the %s of your article', _SQ_PLUGIN_NAME_) . '",
76
+ __clicktohighlight: "' . __('Click to keep the highlight on', _SQ_PLUGIN_NAME_) . '",
77
+ __introduction: "' . __('introduction', _SQ_PLUGIN_NAME_) . '",
78
+ __morewordsafter: "' . __('Write more words after the %s keyword', _SQ_PLUGIN_NAME_) . '",
79
+ __orusesynonyms: "' . __('or use synonyms', _SQ_PLUGIN_NAME_) . '",
80
+ __addmorewords: "' . __('add %s more word(s)', _SQ_PLUGIN_NAME_) . '",
81
+ __removewords: "' . __('or remove %s word(s)', _SQ_PLUGIN_NAME_) . '",
82
+ __addmorekeywords: "' . __('add %s more keyword(s)', _SQ_PLUGIN_NAME_) . '",
83
+ __addminimumwords: "' . __('write %s more words to start calculating', _SQ_PLUGIN_NAME_) . '",
84
+ };
85
+
86
+
87
+ if (typeof sq_script === "undefined"){
88
+ var sq_script = document.createElement(\'script\');
89
+ sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/squirrly' . (SQ_DEBUG ? '' : '.min') . '.js?ver=' . SQ_VERSION_ID . '";
90
+ var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
91
+ site_head.insertBefore(sq_script, site_head.firstChild);
92
+ }
93
+
94
+
95
+ $(document).ready(function() {
96
+ $("#sq_preloading").html("");
97
+ });
98
+ })(jQuery);
99
+
100
+ </script>';
101
+
102
+ }
103
+ }
104
+
105
+ }
core/SQ_BlockAnalytics/SQ_BlockAnalytics.php DELETED
@@ -1,9 +0,0 @@
1
- <?php
2
-
3
- class SQ_BlockAnalytics extends SQ_BlockController {
4
-
5
- public function hookGetContent() {
6
-
7
- }
8
-
9
- }
 
 
 
 
 
 
 
 
 
core/SQ_BlockCustomerService/SQ_BlockCustomerService.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Customer Service Page
5
- */
6
- class SQ_BlockCustomerService extends SQ_BlockController {
7
-
8
- function hookGetContent() {
9
- SQ_ObjController::getController('SQ_DisplayController', false)->loadMedia('sq_blocksupport');
10
- }
11
- }
 
 
 
 
 
 
 
 
 
 
 
core/SQ_BlockHelp/SQ_BlockHelp.php DELETED
@@ -1,8 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Affiliate settings
5
- */
6
- class SQ_BlockHelp extends SQ_BlockController {
7
-
8
- }
 
 
 
 
 
 
 
 
core/SQ_BlockKeywordResearch/SQ_BlockKeywordResearch.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Keyword Research settings
5
- */
6
- class SQ_BlockKeywordResearch extends SQ_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- }
11
- }
 
 
 
 
 
 
 
 
 
 
 
core/SQ_BlockSettings/SQ_BlockSettings.php DELETED
@@ -1,72 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Account settings
5
- */
6
- class SQ_BlockSettings extends SQ_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- SQ_ObjController::getController('SQ_Error', false)->hookNotices();
11
- echo '<script type="text/javascript">
12
- jQuery(document).ready(function () {
13
- jQuery("#sq_settings").find("select[name=sq_google_country]").val("' . SQ_Tools::$options['sq_google_country'] . '");
14
- });
15
- </script>';
16
- }
17
-
18
- /**
19
- * Called when Post action is triggered
20
- *
21
- * @return void
22
- */
23
- public function action() {
24
- parent::action();
25
-
26
-
27
-
28
- switch (SQ_Tools::getValue('action')) {
29
-
30
- case 'sq_settings_update':
31
- if (!current_user_can('manage_options')){
32
- return;
33
- }
34
-
35
- if (SQ_Tools::getIsset('sq_post_types')) {
36
- SQ_Tools::$options['sq_post_types'] = array();
37
- foreach (SQ_Tools::getValue('sq_post_types') as $key) {
38
- array_push(SQ_Tools::$options['sq_post_types'], $key);
39
- }
40
-
41
- if (!in_array('product', get_post_types())) {
42
- array_push(SQ_Tools::$options['sq_post_types'], 'product');
43
- }
44
- }
45
-
46
- SQ_Tools::saveOptions('sq_google_country', SQ_Tools::getValue('sq_google_country'));
47
- SQ_Tools::saveOptions('sq_google_country_strict', SQ_Tools::getValue('sq_google_country_strict'));
48
- SQ_Tools::saveOptions('sq_google_ranksperhour', SQ_Tools::getValue('sq_google_ranksperhour'));
49
-
50
- SQ_Tools::saveOptions('sq_keyword_help', (int) SQ_Tools::getValue('sq_keyword_help'));
51
- SQ_Tools::saveOptions('sq_keyword_information', (int) SQ_Tools::getValue('sq_keyword_information'));
52
- SQ_Tools::saveOptions('sq_force_savepost', (int) SQ_Tools::getValue('sq_force_savepost'));
53
-
54
-
55
- SQ_Tools::saveOptions('sq_sla', (int) SQ_Tools::getValue('sq_sla'));
56
- SQ_Tools::saveOptions('sq_keywordtag', (int) SQ_Tools::getValue('sq_keywordtag'));
57
- SQ_Tools::saveOptions('sq_local_images', (int) SQ_Tools::getValue('sq_local_images'));
58
- SQ_Tools::saveOptions('sq_url_fix', (int) SQ_Tools::getValue('sq_url_fix'));
59
-
60
-
61
- SQ_Tools::saveOptions('sq_google_wt', SQ_ObjController::getModel('SQ_BlockSettingsSeo')->checkGoogleWTCode(SQ_Tools::getValue('sq_google_wt','',true)));
62
- SQ_Tools::saveOptions('sq_bing_wt', SQ_ObjController::getModel('SQ_BlockSettingsSeo')->checkBingWTCode(SQ_Tools::getValue('sq_bing_wt','',true)));
63
- SQ_Tools::saveOptions('sq_alexa', SQ_ObjController::getModel('SQ_BlockSettingsSeo')->checkBingWTCode(SQ_Tools::getValue('sq_alexa','',true)));
64
-
65
-
66
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
67
- SQ_Tools::emptyCache();
68
- break;
69
- }
70
- }
71
-
72
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php DELETED
@@ -1,382 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Account settings
5
- */
6
- class SQ_BlockSettingsSeo extends SQ_BlockController {
7
-
8
- function hookGetContent() {
9
- parent::preloadSettings();
10
- /* Force call of error display */
11
- SQ_ObjController::getController('SQ_Error', false)->hookNotices();
12
- echo '<script type="text/javascript">
13
- var __snippetshort = "' . __('Too short', _SQ_PLUGIN_NAME_) . '";
14
- var __snippetlong = "' . __('Too long', _SQ_PLUGIN_NAME_) . '";
15
- jQuery(document).ready(function () {
16
- jQuery("#sq_settings").find("select[name=sq_og_locale]").val("' . SQ_Tools::$options['sq_og_locale'] . '");
17
- });
18
- </script>';
19
- }
20
-
21
- function hookHead() {
22
- if (function_exists('wp_enqueue_media')) {
23
- wp_enqueue_media();
24
- }
25
- parent::hookHead();
26
- }
27
-
28
- /**
29
- * Called when Post action is triggered
30
- *
31
- * @return void
32
- */
33
- public function action() {
34
- parent::action();
35
-
36
- switch (SQ_Tools::getValue('action')) {
37
-
38
- case 'sq_settingsseo_update':
39
- if (!current_user_can('manage_options')) {
40
- return;
41
- }
42
-
43
- if (!SQ_Tools::getIsset('sq_use')) {
44
- return;
45
- }
46
-
47
- SQ_Tools::saveOptions('sq_use', (int)SQ_Tools::getValue('sq_use'));
48
- SQ_Tools::saveOptions('sq_auto_title', (int)SQ_Tools::getValue('sq_auto_title'));
49
- SQ_Tools::saveOptions('sq_auto_description', (int)SQ_Tools::getValue('sq_auto_description'));
50
- SQ_Tools::saveOptions('sq_auto_canonical', (int)SQ_Tools::getValue('sq_auto_canonical'));
51
- SQ_Tools::saveOptions('sq_auto_amp', (int)SQ_Tools::getValue('sq_auto_amp'));
52
-
53
- SQ_Tools::saveOptions('sq_auto_meta', (int)SQ_Tools::getValue('sq_auto_meta'));
54
- SQ_Tools::saveOptions('sq_auto_favicon', (int)SQ_Tools::getValue('sq_auto_favicon'));
55
-
56
- ///////////////////////////////////////////
57
- /////////////////////////////SOCIAL OPTION
58
- SQ_Tools::saveOptions('sq_auto_facebook', (int)SQ_Tools::getValue('sq_auto_facebook'));
59
- SQ_Tools::saveOptions('sq_auto_twitter', (int)SQ_Tools::getValue('sq_auto_twitter'));
60
- SQ_Tools::saveOptions('sq_auto_twittersize', SQ_Tools::getValue('sq_auto_twittersize'));
61
- SQ_Tools::saveOptions('sq_og_locale', SQ_Tools::getValue('sq_og_locale'));
62
-
63
- SQ_Tools::saveOptions('sq_twitter_account', $this->model->checkTwitterAccount(SQ_Tools::getValue('sq_twitter_account')));
64
- SQ_Tools::saveOptions('sq_facebook_account', $this->model->checkFacebookAccount(SQ_Tools::getValue('sq_facebook_account')));
65
- SQ_Tools::saveOptions('sq_google_plus', $this->model->checkGoogleAccount(SQ_Tools::getValue('sq_google_plus')));
66
- SQ_Tools::saveOptions('sq_linkedin_account', $this->model->checkLinkeinAccount(SQ_Tools::getValue('sq_linkedin_account')));
67
- SQ_Tools::saveOptions('sq_pinterest_account', $this->model->checkPinterestAccount(SQ_Tools::getValue('sq_pinterest_account')));
68
- SQ_Tools::saveOptions('sq_instagram_account', $this->model->checkInstagramAccount(SQ_Tools::getValue('sq_instagram_account')));
69
-
70
- ///////////////////////////////////////////
71
- /////////////////////////////FIRST PAGE OPTIMIZATION
72
- SQ_Tools::saveOptions('sq_auto_seo', 0);
73
- if ($pageId = get_option('page_on_front')) {
74
- $meta = array();
75
- if (SQ_Tools::getIsset('sq_fp_title'))
76
- $meta[] = array('key' => '_sq_fp_title', 'value' => urldecode(SQ_Tools::getValue('sq_fp_title')));
77
-
78
- if (SQ_Tools::getIsset('sq_fp_description'))
79
- $meta[] = array('key' => '_sq_fp_description', 'value' => urldecode(SQ_Tools::getValue('sq_fp_description')));
80
-
81
- if (SQ_Tools::getIsset('sq_fp_keywords'))
82
- $meta[] = array('key' => '_sq_fp_keywords', 'value' => SQ_Tools::getValue('sq_fp_keywords'));
83
-
84
- if (SQ_Tools::getIsset('sq_fp_ogimage'))
85
- $meta[] = array('key' => '_sq_fp_ogimage', 'value' => SQ_Tools::getValue('sq_fp_ogimage'));
86
-
87
- if (!empty($meta))
88
- SQ_ObjController::getModel('SQ_Post')->saveAdvMeta($pageId, $meta);
89
- }
90
-
91
- SQ_Tools::saveOptions('sq_fp_title', SQ_Tools::getValue('sq_fp_title'));
92
- SQ_Tools::saveOptions('sq_fp_description', SQ_Tools::getValue('sq_fp_description'));
93
- SQ_Tools::saveOptions('sq_fp_keywords', SQ_Tools::getValue('sq_fp_keywords'));
94
- SQ_Tools::saveOptions('sq_fp_ogimage', SQ_Tools::getValue('sq_fp_ogimage'));
95
-
96
-
97
- ///////////////////////////////////////////
98
- /////////////////////////////SITEMAP OPTION
99
- SQ_Tools::saveOptions('sq_auto_sitemap', (int)SQ_Tools::getValue('sq_auto_sitemap'));
100
- SQ_Tools::saveOptions('sq_auto_feed', (int)SQ_Tools::getValue('sq_auto_feed'));
101
- SQ_Tools::saveOptions('sq_sitemap_frequency', SQ_Tools::getValue('sq_sitemap_frequency'));
102
- SQ_Tools::saveOptions('sq_sitemap_ping', (int)SQ_Tools::getValue('sq_sitemap_ping'));
103
-
104
- foreach (SQ_Tools::$options['sq_sitemap'] as $key => $value) {
105
- if ($key == 'sitemap') {
106
- continue;
107
- }
108
- SQ_Tools::$options['sq_sitemap'][$key][1] = 0;
109
- if ($key == 'sitemap-product' && !$this->model->isEcommerce()) {
110
- SQ_Tools::$options['sq_sitemap'][$key][1] = 2;
111
- }
112
- }
113
- if (SQ_Tools::getIsset('sq_sitemap')) {
114
- foreach (SQ_Tools::getValue('sq_sitemap') as $key) {
115
- if (isset(SQ_Tools::$options['sq_sitemap'][$key][1])) {
116
- SQ_Tools::$options['sq_sitemap'][$key][1] = 1;
117
- }
118
- }
119
- }
120
-
121
- foreach (SQ_Tools::$options['sq_sitemap_show'] as $key => $value) {
122
- SQ_Tools::$options['sq_sitemap_show'][$key] = 0;
123
- }
124
- if (SQ_Tools::getIsset('sq_sitemap_show')) {
125
- foreach (SQ_Tools::getValue('sq_sitemap_show') as $key) {
126
- if (isset(SQ_Tools::$options['sq_sitemap_show'][$key])) {
127
- SQ_Tools::$options['sq_sitemap_show'][$key] = 1;
128
- }
129
- }
130
- }
131
-
132
- ///////////////////////////////////////////
133
-
134
- SQ_Tools::saveOptions('sq_google_analytics', $this->model->checkGoogleAnalyticsCode(SQ_Tools::getValue('sq_google_analytics', '', true)));
135
- SQ_Tools::saveOptions('sq_facebook_insights', $this->model->checkFavebookInsightsCode(SQ_Tools::getValue('sq_facebook_insights', '', true)));
136
- SQ_Tools::saveOptions('sq_facebook_analytics', SQ_Tools::getValue('sq_facebook_analytics', ''));
137
- SQ_Tools::saveOptions('sq_pinterest', $this->model->checkPinterestCode(SQ_Tools::getValue('sq_pinterest', '', true)));
138
-
139
- ///////////////////////////////////////////JSONLD
140
-
141
-
142
- SQ_Tools::saveOptions('sq_auto_jsonld', (int)SQ_Tools::getValue('sq_auto_jsonld'));
143
- if (SQ_Tools::getIsset('sq_jsonld_type') && isset(SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')])) {
144
-
145
- foreach (SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')] as $key => $value) {
146
- if (isset(SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')][$key])) {
147
- SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')][$key] = SQ_Tools::getValue('sq_jsonld_' . $key);
148
- }
149
- }
150
- if (isset(SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')]['telephone']) &&
151
- SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')]['telephone'] <> ''
152
- ) {
153
- SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')]['telephone'] = '+' . SQ_Tools::$options['sq_jsonld'][SQ_Tools::getValue('sq_jsonld_type')]['telephone'];
154
- }
155
- }
156
- SQ_Tools::saveOptions('sq_jsonld_type', SQ_Tools::getValue('sq_jsonld_type'));
157
-
158
- ///////////////////////////////////////////
159
- /////////////////////////////FAVICON OPTION
160
-
161
- /* if there is an icon to upload */
162
- if (!empty($_FILES['favicon'])) {
163
-
164
- $return = $this->model->addFavicon($_FILES['favicon']);
165
- if ($return['favicon'] <> '') {
166
- SQ_Tools::saveOptions('favicon', strtolower(basename($return['favicon'])));
167
- }
168
- if ($return['message'] <> '') {
169
- define('SQ_MESSAGE_FAVICON', $return['message']);
170
- SQ_Error::setError(SQ_MESSAGE_FAVICON . " <br /> ");
171
- }
172
- }
173
-
174
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
175
- //Update the rewrite rules with the new options
176
- add_filter('rewrite_rules_array', array($this, 'rewrite_rules'), 999, 1);
177
- //Flush the rewrite with the new favicon and sitemap
178
- global $wp_rewrite;
179
- $wp_rewrite->flush_rules();
180
-
181
- //empty the cache on settings changed
182
- SQ_Tools::emptyCache();
183
- break;
184
- case 'sq_checkissues':
185
- if (!current_user_can('manage_options')) {
186
- return;
187
- }
188
-
189
- SQ_Tools::saveOptions('sq_checkedissues', 1);
190
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
191
-
192
- /* Load the error class */
193
- SQ_Tools::checkErrorSettings();
194
-
195
- break;
196
- case 'sq_fixautoseo':
197
- if (!current_user_can('manage_options')) {
198
- return;
199
- }
200
-
201
- SQ_Tools::saveOptions('sq_use', 1);
202
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
203
-
204
- break;
205
- case 'sq_fixprivate':
206
- if (!current_user_can('manage_options')) {
207
- return;
208
- }
209
-
210
- update_option('blog_public', 1);
211
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
212
-
213
- break;
214
- case 'sq_fixcomments':
215
- if (!current_user_can('manage_options')) {
216
- return;
217
- }
218
-
219
- update_option('comments_notify', 1);
220
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
221
-
222
- break;
223
- case 'sq_fixpermalink':
224
- if (!current_user_can('manage_options')) {
225
- return;
226
- }
227
-
228
- $GLOBALS['wp_rewrite'] = new WP_Rewrite();
229
- global $wp_rewrite;
230
- $permalink_structure = ((get_option('permalink_structure') <> '') ? get_option('permalink_structure') : '/') . "%postname%/";
231
- $wp_rewrite->set_permalink_structure($permalink_structure);
232
- $permalink_structure = get_option('permalink_structure');
233
-
234
- flush_rewrite_rules();
235
- break;
236
- case 'sq_fix_ogduplicate':
237
- if (!current_user_can('manage_options')) {
238
- return;
239
- }
240
-
241
- SQ_Tools::saveOptions('sq_auto_facebook', 0);
242
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
243
-
244
- break;
245
- case 'sq_fix_tcduplicate':
246
- if (!current_user_can('manage_options')) {
247
- return;
248
- }
249
-
250
- SQ_Tools::saveOptions('sq_auto_twitter', 0);
251
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
252
-
253
- break;
254
- case 'sq_fix_titleduplicate':
255
- if (!current_user_can('manage_options')) {
256
- return;
257
- }
258
-
259
- SQ_Tools::saveOptions('sq_auto_title', 0);
260
- SQ_Tools::saveOptions('sq_auto_seo', 1);
261
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
262
-
263
- break;
264
- case 'sq_fix_descduplicate':
265
- if (!current_user_can('manage_options')) {
266
- return;
267
- }
268
-
269
- SQ_Tools::saveOptions('sq_auto_description', 0);
270
- SQ_Tools::saveOptions('sq_auto_seo', 1);
271
- SQ_Action::apiCall('sq/user/settings', array('settings' => json_encode(SQ_Tools::getBriefOptions())), 10);
272
-
273
- break;
274
- case 'sq_active_help' :
275
- if (!current_user_can('manage_options')) {
276
- return;
277
- }
278
-
279
- SQ_Tools::saveOptions('active_help', SQ_Tools::getValue('active_help'));
280
- break;
281
- case 'sq_warnings_off':
282
- if (!current_user_can('manage_options')) {
283
- return;
284
- }
285
-
286
- SQ_Tools::saveOptions('ignore_warn', 1);
287
- break;
288
- case 'sq_get_snippet':
289
-
290
- if (SQ_Tools::getValue('url') <> '') {
291
- $url = SQ_Tools::getValue('url');
292
- } else {
293
- $url = get_bloginfo('url');
294
- }
295
- $snippet = SQ_Tools::getSnippet($url);
296
-
297
- SQ_Tools::setHeader('json');
298
- echo json_encode($snippet);
299
- exit();
300
- case 'sq_backup':
301
- if (!current_user_can('manage_options')) {
302
- return;
303
- }
304
-
305
- SQ_Tools::setHeader('text');
306
- header("Content-Disposition: attachment; filename=squirrly.txt");
307
-
308
- if (function_exists('base64_encode')) {
309
- echo base64_encode(json_encode(SQ_Tools::$options));
310
- } else {
311
- echo json_encode(SQ_Tools::$options);
312
- }
313
- exit();
314
- break;
315
- case 'sq_restore':
316
- if (!current_user_can('manage_options')) {
317
- return;
318
- }
319
-
320
- if (!empty($_FILES['sq_options']) && $_FILES['sq_options']['tmp_name'] <> '') {
321
- $options = file_get_contents($_FILES['sq_options']['tmp_name']);
322
- try {
323
- if (function_exists('base64_encode') && base64_decode($options) <> '') {
324
- $options = base64_decode($options);
325
- }
326
- $options = json_decode($options, true);
327
- if (is_array($options) && isset($options['sq_api'])) {
328
- if (SQ_Tools::$options['sq_api'] <> '') {
329
- $options['sq_api'] = SQ_Tools::$options['sq_api'];
330
- }
331
- SQ_Tools::$options = $options;
332
- SQ_Tools::saveOptions();
333
- SQ_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
334
- } else {
335
- SQ_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
336
- }
337
- } catch (Exception $e) {
338
- SQ_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
339
- }
340
- } else {
341
- SQ_Error::setError(__('Error! You have to enter a previous saved backup file.', _SQ_PLUGIN_NAME_) . " <br /> ");
342
- }
343
- break;
344
- }
345
- }
346
-
347
- /**
348
- * Add the favicon in the rewrite rule
349
- * @param type $wp_rewrite
350
- */
351
- public function rewrite_rules($wp_rewrite) {
352
- $rules = array();
353
- if (SQ_Tools::$options['sq_use'] == 1) {
354
-
355
- //For Favicon
356
- if (SQ_Tools::$options['sq_auto_favicon'] == 1) {
357
- $rules['favicon\.ico$'] = 'index.php?sq_get=favicon';
358
- $rules['favicon\.icon$'] = 'index.php?sq_get=favicon';
359
- $rules['touch-icon\.png$'] = 'index.php?sq_get=touchicon';
360
- foreach ($this->model->appleSizes as $size) {
361
- $size = (int)$size;
362
- $rules['touch-icon' . $size . '\.png$'] = 'index.php?sq_get=touchicon&sq_size=' . $size;
363
- }
364
- }
365
-
366
- //For Sitemap
367
- if (SQ_Tools::$options['sq_auto_sitemap'] == 1) {
368
- foreach (SQ_Tools::$options['sq_sitemap'] as $name => $sitemap) {
369
- if ($sitemap[1] == 1 || $sitemap[1] == 2) { // is show sitemap
370
- $rules[preg_quote($sitemap[0])] = 'index.php?sq_feed=' . $name;
371
- }
372
- }
373
- }
374
-
375
- if (SQ_Tools::$options['sq_auto_feed'] == 1) {
376
- $rules['sqfeedcss$'] = 'index.php?sq_get=feedcss';
377
- }
378
- }
379
- return array_merge($rules, $wp_rewrite);
380
- }
381
-
382
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/SQ_Blockresearch/SQ_Blockresearch.php DELETED
@@ -1,17 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Core class for SQ_Blocksearch
5
- */
6
- class SQ_Blockresearch extends SQ_BlockController {
7
-
8
- public function hookHead() {
9
- parent::hookHead();
10
-
11
-
12
- echo '<script type="text/javascript">
13
- var __infotext = ["' . __('Recent discussions:', _SQ_PLUGIN_NAME_) . '", "' . __('Exact search:', _SQ_PLUGIN_NAME_) . '", "' . __('Competition:', _SQ_PLUGIN_NAME_) . '", "' . __('Trend:', _SQ_PLUGIN_NAME_) . '"];
14
- </script>';
15
- }
16
-
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/SQ_Blocksearch/SQ_Blocksearch.php DELETED
@@ -1,41 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Core class for SQ_Blocksearch
5
- */
6
- class SQ_Blocksearch extends SQ_BlockController {
7
-
8
- public function action() {
9
- $start = 0;
10
- $nbr = 8;
11
- $exclude = array();
12
-
13
- parent::action();
14
- switch (SQ_Tools::getValue('action')) {
15
- case 'sq_type_click':
16
- SQ_Tools::saveOptions('sq_img_licence', SQ_Tools::getValue('licence'));
17
- exit();
18
- break;
19
- case 'sq_search_blog':
20
- if (SQ_Tools::getValue('exclude') && SQ_Tools::getValue('exclude') <> 'undefined')
21
- $exclude = array((int) SQ_Tools::getValue('exclude'));
22
-
23
- if (SQ_Tools::getValue('start'))
24
- $start = array((int) SQ_Tools::getValue('start'));
25
-
26
- if (SQ_Tools::getValue('nrb'))
27
- $nrb = (int) SQ_Tools::getValue('nrb');
28
-
29
- if (SQ_Tools::getValue('q') <> '')
30
- echo SQ_ObjController::getController('SQ_Post')->model->searchPost(SQ_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/SQ_Blockseo/SQ_Blockseo.php DELETED
@@ -1,40 +0,0 @@
1
- <?php
2
-
3
- class SQ_Blockseo extends SQ_BlockController {
4
-
5
- public function action() {
6
-
7
- }
8
-
9
- public function hookHead() {
10
- parent::hookHead();
11
- $metas = array();
12
- $metas = $this->model->getAdvSeo();
13
-
14
- echo '<script type="text/javascript">
15
- var __snippetsavechanges = "' . __('Save changes', _SQ_PLUGIN_NAME_) . '";
16
- var __snippetsavecancel = "' . __('Cancel', _SQ_PLUGIN_NAME_) . '";
17
- var __snippetreset = "' . __('Reset', _SQ_PLUGIN_NAME_) . '";
18
-
19
- var __snippetcustomize = "' . __('Edit Meta / Open Graph', _SQ_PLUGIN_NAME_) . '";
20
- var __snippetkeyword = "' . __('manage keywords', _SQ_PLUGIN_NAME_) . '";
21
- var __snippetshort = "' . __('Too short', _SQ_PLUGIN_NAME_) . '";
22
- var __snippetlong = "' . __('Too long', _SQ_PLUGIN_NAME_) . '";
23
-
24
- var __snippetname = "' . __('Squirrly Snippet', _SQ_PLUGIN_NAME_) . '";
25
- var __snippetrefresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '";
26
- var __sq_snippet = "' . __('snippet', _SQ_PLUGIN_NAME_) . '";
27
-
28
- var __snippetclickrefresh = "' . __('Click the Update button (to the right) to see the snippet from your website.', _SQ_PLUGIN_NAME_) . '";
29
- var __snippetentertitle = "' . __('Enter a title above for the snippet to get data.', _SQ_PLUGIN_NAME_) . '";' . "\n";
30
-
31
- if (is_array($metas)) {
32
- foreach ($metas as $key => $meta) {
33
- echo 'var _' . $key . ' = "' . str_replace('"', '\"', $meta) . '";' . "\n";
34
- }
35
- }
36
-
37
- echo '</script>';
38
- }
39
-
40
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/SQ_Loading/SQ_Loading.php DELETED
@@ -1,74 +0,0 @@
1
- <?php
2
-
3
- class SQ_Loading extends SQ_BlockController {
4
-
5
- public function hookHead() {
6
- parent::hookHead();
7
- $this->loadJsVars();
8
- }
9
-
10
- public function loadJsVars(){
11
- global $sq_postID;
12
-
13
- /* Check the squirrly.js file if exists */
14
- $browser = SQ_Tools::getBrowserInfo();
15
- $keyword = '';
16
-
17
- if ((isset($browser) && $browser != false && is_array($browser) && $browser['name'] == 'IE' && (int) $browser['version'] < 9 && (int) $browser['version'] > 0)) {
18
- echo '<script type="text/javascript">
19
- jQuery("#sq_preloading").removeClass("sq_loading");
20
- jQuery("#sq_preloading").addClass("sq_error")
21
- jQuery("#sq_preloading").html("' . __('For Squirrly to work properly you have to use a higher version of Internet Explorer. <br /> We recommend you to use Chrome or Mozilla.', _SQ_PLUGIN_NAME_) . '");
22
- jQuery("#sq_options").hide();
23
- jQuery("#sq_blocklogin").hide();
24
- </script>';
25
- } else {
26
- if (isset($sq_postID)) {
27
- $keyword = SQ_ObjController::getModel('SQ_Post')->getKeywordsFromPost($sq_postID);
28
- }
29
- echo '<script type="text/javascript">
30
- var sq_use = "' . SQ_Tools::$options['sq_use'] . '";
31
- var sq_baseurl = "' . _SQ_STATIC_API_URL_ . '";
32
- var sq_uri = "' . SQ_URI . '"; var sq_language = "' . get_bloginfo('language') . '";
33
- var sq_version = "' . SQ_VERSION_ID . '"; var sq_wpversion = "' . WP_VERSION_ID . '"; var sq_phpversion = "' . PHP_VERSION_ID . '"; var sq_seoversion = "' . (SQ_Tools::$options['sq_sla'] + 1) . '";
34
- var __postID = "' . $sq_postID . '";
35
- var __prevNonce = "' . wp_create_nonce('post_preview_' . $sq_postID) . '";
36
- var __token = "' . SQ_Tools::$options['sq_api'] . '";
37
- var sq_keyword_information = "' . ((isset(SQ_Tools::$options['sq_keyword_information'])) ? SQ_Tools::$options['sq_keyword_information'] : '0') . '";
38
- var __noopt = "' . __('You haven`t used Squirrly SEO to optimize your article. Do you want to optimize for a keyword before publishing?', _SQ_PLUGIN_NAME_) . '";
39
- var sq_keywordtag = "' . SQ_Tools::$options['sq_keywordtag'] . '";
40
- var sq_frontend_css = "' . _SQ_THEME_URL_ . 'css/sq_frontend.css";
41
- var __date = "' . __('date', _SQ_PLUGIN_NAME_) . '";
42
- var __readit = "' . __('Read it!', _SQ_PLUGIN_NAME_) . '";
43
- var __insertit = "' . __('Insert it!', _SQ_PLUGIN_NAME_) . '";
44
- var __reference = "' . __('Reference', _SQ_PLUGIN_NAME_) . '";
45
- var __insertasbox = "' . __('Insert as box', _SQ_PLUGIN_NAME_) . '";
46
- var __notrelevant = "' . __('Not relevant?', _SQ_PLUGIN_NAME_) . '";
47
- var __insertparagraph = "' . __('Insert in your article', _SQ_PLUGIN_NAME_) . '";
48
- var __tinymceerror = "' . __('For Squirrly to work, you have to have tinymce editor installed!', _SQ_PLUGIN_NAME_) . '";
49
- var __ajaxerror = "' . __(':( I lost my squirrel. Please reload the page.', _SQ_PLUGIN_NAME_) . '";
50
- var __nofound = "' . __('No results found!', _SQ_PLUGIN_NAME_) . '";
51
- var __tinymceinactive = "' . __('Switch to Visual editor!', _SQ_PLUGIN_NAME_) . '";
52
- var __morewords = "' . __('Enter one more word to find relevant results', _SQ_PLUGIN_NAME_) . '";
53
- var __toolong = "' . __('Takes too long to check this keyword ...', _SQ_PLUGIN_NAME_) . '";
54
- var __doresearch = "' . __('Do a research!', _SQ_PLUGIN_NAME_) . '";
55
- var __morekeywords = "' . __('Do more research!', _SQ_PLUGIN_NAME_) . '";
56
- var __sq_photo_copyright = "' . __('[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]', _SQ_PLUGIN_NAME_) . '";
57
- var __has_attributes = "' . __('Has creative commons attributes', _SQ_PLUGIN_NAME_) . '";
58
- var __no_attributes = "' . __('No known copyright restrictions', _SQ_PLUGIN_NAME_) . '";
59
-
60
- ' . (($keyword <> '') ? 'var sq_keyword_from_post = "' . $keyword . '";' : '') . '
61
- if (typeof sq_script === "undefined"){
62
- var sq_script = document.createElement(\'script\');
63
- sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/squirrly.js?ver=' . SQ_VERSION_ID . '2";
64
- var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
65
- site_head.insertBefore(sq_script, site_head.firstChild);
66
- }
67
- jQuery(document).ready(function() {
68
- jQuery("#sq_preloading").html("");
69
- });
70
- </script>';
71
- }
72
- }
73
-
74
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
core/config.xml CHANGED
@@ -1,18 +1,26 @@
1
  <?xml version="1.0" encoding="UTF-8"?>
2
  <blocks>
3
  <block>
4
- <name>SQ_Post</name>
 
 
 
 
 
 
 
 
 
5
  <description>Post Page</description>
6
  <actions>
7
- <action>sq_save_meta</action>
8
  <action>sq_save_ogimage</action>
9
  <action>sq_get_keyword</action>
10
  </actions>
11
  <active>1</active>
12
- <path>controllers</path>
13
  </block>
14
  <block>
15
- <name>SQ_PostsList</name>
16
  <description>Posts List Page</description>
17
  <actions>
18
  <action>sq_posts_rank</action>
@@ -20,16 +28,18 @@
20
  <action>sq_recheck</action>
21
  </actions>
22
  <active>1</active>
23
- <path>controllers</path>
24
  </block>
25
  <block>
26
- <name>SQ_BlockSettingsSeo</name>
27
  <description>SEO Setting page</description>
28
  <actions>
29
  <action>sq_settingsseo_update</action>
 
30
  <action>sq_get_snippet</action>
31
  <action>sq_checkissues</action>
32
 
 
33
  <action>sq_active_help</action>
34
  <action>sq_fixautoseo</action>
35
  <action>sq_fixpermalink</action>
@@ -40,39 +50,62 @@
40
  <action>sq_fix_titleduplicate</action>
41
  <action>sq_fix_descduplicate</action>
42
  <action>sq_backup</action>
 
43
  <action>sq_restore</action>
 
 
 
44
  <action>sq_warnings_off</action>
 
45
  </actions>
46
  <active>1</active>
47
- <path>core</path>
48
  </block>
49
  <block>
50
- <name>SQ_BlockSettings</name>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  <description>Setting page</description>
52
  <actions>
53
  <action>sq_settings_update</action>
54
  </actions>
55
  <active>1</active>
56
- <path>core</path>
57
  </block>
58
  <block>
59
- <name>SQ_BlockSupport</name>
60
  <description>The support</description>
61
  <controllers>
62
- <controller>SQ_Post</controller>
63
  </controllers>
64
  <actions>
65
  <action>sq_feedback</action>
66
  <action>sq_support</action>
67
  </actions>
68
  <active>1</active>
69
- <path>core</path>
70
  </block>
71
  <block>
72
- <name>SQ_Blocklogin</name>
73
  <description>Connect to Squirrly</description>
74
  <controllers>
75
- <controller>SQ_Post</controller>
76
  </controllers>
77
  <actions>
78
  <action>sq_login</action>
@@ -80,58 +113,66 @@
80
  <action>sq_reset</action>
81
  </actions>
82
  <active>1</active>
83
- <path>core</path>
84
  </block>
85
  <block>
86
- <name>SQ_Blocksearch</name>
87
  <description>Inspiration box</description>
88
  <controllers>
89
- <controller>SQ_Post</controller>
90
  </controllers>
91
  <actions>
92
  <action>sq_search_blog</action>
93
  <action>sq_type_click</action>
94
  </actions>
95
  <active>1</active>
96
- <path>core</path>
97
  </block>
98
-
99
  <block>
100
- <name>SQ_Blockseo</name>
101
  <description>SEO Live assistant</description>
102
  <controllers>
103
- <controller>SQ_Post</controller>
104
  </controllers>
105
  <active>1</active>
106
- <path>core</path>
107
  </block>
108
-
109
  <block>
110
- <name>SQ_Blockresearch</name>
111
  <description>Research block</description>
112
  <controllers>
113
- <controller>SQ_Post</controller>
114
  </controllers>
115
  <active>1</active>
116
- <path>core</path>
117
  </block>
118
-
119
  <block>
120
- <name>SQ_BlockAffiliate</name>
121
  <description>Affiliate Page</description>
122
  <actions>
123
  <action>sq_settings_affiliate</action>
124
  </actions>
125
  <active>1</active>
126
- <path>core</path>
127
  </block>
128
  <block>
129
- <name>SQ_Loading</name>
130
  <description>Loading JS</description>
131
  <controllers>
132
- <controller>SQ_Post</controller>
133
  </controllers>
134
  <active>1</active>
135
- <path>core</path>
 
 
 
 
 
 
 
 
 
 
 
136
  </block>
137
  </blocks>
1
  <?xml version="1.0" encoding="UTF-8"?>
2
  <blocks>
3
  <block>
4
+ <name>SQ_Controllers_Menu</name>
5
+ <description>Loading the Menu in Admin and Frontend</description>
6
+ <actions>
7
+ <action>sq_getfrontmenu</action>
8
+ </actions>
9
+ <active>1</active>
10
+ <admin>1</admin>
11
+ </block>
12
+ <block>
13
+ <name>SQ_Controllers_Post</name>
14
  <description>Post Page</description>
15
  <actions>
 
16
  <action>sq_save_ogimage</action>
17
  <action>sq_get_keyword</action>
18
  </actions>
19
  <active>1</active>
20
+ <admin>1</admin>
21
  </block>
22
  <block>
23
+ <name>SQ_Controllers_PostsList</name>
24
  <description>Posts List Page</description>
25
  <actions>
26
  <action>sq_posts_rank</action>
28
  <action>sq_recheck</action>
29
  </actions>
30
  <active>1</active>
31
+ <admin>1</admin>
32
  </block>
33
  <block>
34
+ <name>SQ_Core_BlockSettingsSeo</name>
35
  <description>SEO Setting page</description>
36
  <actions>
37
  <action>sq_settingsseo_update</action>
38
+ <action>sq_settingsseo_option</action>
39
  <action>sq_get_snippet</action>
40
  <action>sq_checkissues</action>
41
 
42
+ <action>sq_setstickysla</action>
43
  <action>sq_active_help</action>
44
  <action>sq_fixautoseo</action>
45
  <action>sq_fixpermalink</action>
50
  <action>sq_fix_titleduplicate</action>
51
  <action>sq_fix_descduplicate</action>
52
  <action>sq_backup</action>
53
+ <action>sq_backup_sql</action>
54
  <action>sq_restore</action>
55
+ <action>sq_restore_sql</action>
56
+ <action>sq_dataupgrade</action>
57
+ <action>sq_resetsettings</action>
58
  <action>sq_warnings_off</action>
59
+ <action>sq_copyright_agreement</action>
60
  </actions>
61
  <active>1</active>
62
+ <admin>1</admin>
63
  </block>
64
  <block>
65
+ <name>SQ_Controllers_FrontMenu</name>
66
+ <description>Front Menu page</description>
67
+ <actions>
68
+ <action>sq_saveseo</action>
69
+ </actions>
70
+ <active>1</active>
71
+ <admin>1</admin>
72
+ </block>
73
+ <block>
74
+ <name>SQ_Core_BlockPatterns</name>
75
+ <description>Setting page</description>
76
+ <actions>
77
+ <action>sq_savepatters</action>
78
+ </actions>
79
+ <active>1</active>
80
+ <admin>1</admin>
81
+ </block>
82
+ <block>
83
+ <name>SQ_Core_BlockSettings</name>
84
  <description>Setting page</description>
85
  <actions>
86
  <action>sq_settings_update</action>
87
  </actions>
88
  <active>1</active>
89
+ <admin>1</admin>
90
  </block>
91
  <block>
92
+ <name>SQ_Core_BlockSupport</name>
93
  <description>The support</description>
94
  <controllers>
95
+ <controller>SQ_Controllers_Post</controller>
96
  </controllers>
97
  <actions>
98
  <action>sq_feedback</action>
99
  <action>sq_support</action>
100
  </actions>
101
  <active>1</active>
102
+ <admin>1</admin>
103
  </block>
104
  <block>
105
+ <name>SQ_Core_Blocklogin</name>
106
  <description>Connect to Squirrly</description>
107
  <controllers>
108
+ <controller>SQ_Controllers_Post</controller>
109
  </controllers>
110
  <actions>
111
  <action>sq_login</action>
113
  <action>sq_reset</action>
114
  </actions>
115
  <active>1</active>
116
+ <admin>1</admin>
117
  </block>
118
  <block>
119
+ <name>SQ_Core_Blocksearch</name>
120
  <description>Inspiration box</description>
121
  <controllers>
122
+ <controller>SQ_Controllers_Post</controller>
123
  </controllers>
124
  <actions>
125
  <action>sq_search_blog</action>
126
  <action>sq_type_click</action>
127
  </actions>
128
  <active>1</active>
129
+ <admin>1</admin>
130
  </block>
 
131
  <block>
132
+ <name>SQ_Core_Blockseo</name>
133
  <description>SEO Live assistant</description>
134
  <controllers>
135
+ <controller>SQ_Controllers_Post</controller>
136
  </controllers>
137
  <active>1</active>
138
+ <admin>1</admin>
139
  </block>
 
140
  <block>
141
+ <name>SQ_Core_Blockresearch</name>
142
  <description>Research block</description>
143
  <controllers>
144
+ <controller>SQ_Controllers_Post</controller>
145
  </controllers>
146
  <active>1</active>
147
+ <admin>1</admin>
148
  </block>
 
149
  <block>
150
+ <name>SQ_Core_BlockAffiliate</name>
151
  <description>Affiliate Page</description>
152
  <actions>
153
  <action>sq_settings_affiliate</action>
154
  </actions>
155
  <active>1</active>
156
+ <admin>1</admin>
157
  </block>
158
  <block>
159
+ <name>SQ_Core_Loading</name>
160
  <description>Loading JS</description>
161
  <controllers>
162
+ <controller>SQ_Controllers_Post</controller>
163
  </controllers>
164
  <active>1</active>
165
+ <admin>1</admin>
166
+ </block>
167
+
168
+ <block>
169
+ <name>SQ_Core_BlockImport</name>
170
+ <description>Import from other plugins</description>
171
+ <actions>
172
+ <action>sq_importseo</action>
173
+ <action>sq_importsettings</action>
174
+ </actions>
175
+ <active>1</active>
176
+ <admin>1</admin>
177
  </block>
178
  </blocks>
languages/squirrly-seo-de_DE.mo CHANGED
Binary file
languages/squirrly-seo-de_DE.po CHANGED
@@ -1,9 +1,9 @@
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: Squirrly SEO Plugin v1.0.8\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2016-06-09 12:01+0300\n"
6
- "PO-Revision-Date: 2016-06-09 12:01+0300\n"
7
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
8
  "Language-Team: \n"
9
  "Language: de_DE\n"
@@ -11,16 +11,16 @@ msgstr ""
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
- "X-Poedit-SourceCharset: utf-8\n"
15
  "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
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 1.8.8\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
 
22
  # @ squirrly-seo
23
- #: classes/SQ_Error.php:16
24
  msgid ""
25
  "Function get_class does not exists! Is required for Squirrly to work "
26
  "properly."
@@ -29,7 +29,7 @@ msgstr ""
29
  "richtig zu arbeiten."
30
 
31
  # @ squirrly-seo
32
- #: classes/SQ_Error.php:19
33
  msgid ""
34
  "Function file_exists does not exists! Is required for Squirrly to work "
35
  "properly."
@@ -38,250 +38,499 @@ msgstr ""
38
  "richtig zu arbeiten."
39
 
40
  # @ squirrly-seo
41
- #: classes/SQ_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/SQ_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
  # @ squirrly-seo
51
- #: classes/SQ_Error.php:59
52
  msgid "Turn off warnings!"
53
  msgstr "Warnungen ausschalten!"
54
 
55
- #: classes/SQ_Error.php:67
56
  msgid "Don't bother me!"
57
  msgstr ""
58
 
59
- #: classes/SQ_Tools.php:62
60
  msgid "Getting started"
61
  msgstr ""
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  # @ squirrly-seo
64
- #: classes/SQ_Tools.php:589
65
  msgid "Fix it for me!"
66
  msgstr "Beheben Sie es für mich!"
67
 
68
- #: classes/SQ_Tools.php:595
69
  msgid "Activate the Squirrly SEO for your blog (recommended)"
70
  msgstr ""
71
 
72
- #: classes/SQ_Tools.php:606
73
  msgid ""
74
  "You have META Title Duplicates. Disable the Squirrly Title Optimization or "
75
  "disable the other SEO Plugins"
76
  msgstr ""
77
 
78
- #: classes/SQ_Tools.php:614
79
  msgid ""
80
  "You have META Description Duplicates. Disable the Squirrly Description "
81
  "Optimization or disable the other SEO Plugins"
82
  msgstr ""
83
 
84
- #: classes/SQ_Tools.php:622
85
  msgid ""
86
  "You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or "
87
  "disable the other SEO Plugins"
88
  msgstr ""
89
 
90
- #: classes/SQ_Tools.php:630
91
  msgid ""
92
  "You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card "
93
  "or disable the other SEO Plugins"
94
  msgstr ""
95
 
96
  # @ squirrly-seo
97
- #: classes/SQ_Tools.php:639
98
  msgid "You're blocking google from indexing your site!"
99
  msgstr "Sie blockieren Google zum Indizieren Ihrer Website!"
100
 
101
- #: classes/SQ_Tools.php:646
102
  msgid ""
103
  "It is highly recommended that you include the %postname% variable in the "
104
  "permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
105
  "in Custom Structure"
106
  msgstr ""
107
 
108
- #: classes/SQ_Tools.php:652
 
 
 
 
 
 
109
  msgid "Great! We didn't find any issue in your site."
110
  msgstr ""
111
 
112
- #: controllers/SQ_Menu.php:58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  msgid "See Your Rank on Google"
114
  msgstr ""
115
 
116
- #: controllers/SQ_Menu.php:87
 
 
 
 
117
  msgid ""
118
  "Check out the Squirrly Analytics section. <a href=\"admin.php?page=sq_posts"
119
  "\" title=\"Squirrly Analytics\">Click here</a>"
120
  msgstr ""
121
 
122
- #: controllers/SQ_Menu.php:107
123
- msgid " dashboard"
124
  msgstr ""
125
 
126
- #: controllers/SQ_Menu.php:108
127
  msgid "First Step"
128
  msgstr ""
129
 
130
- #: controllers/SQ_Menu.php:108
131
  msgid "Dashboard"
132
  msgstr ""
133
 
134
- #: controllers/SQ_Menu.php:115
135
- msgid " post list"
136
  msgstr ""
137
 
138
- #: controllers/SQ_Menu.php:116
139
  msgid "Performance <br />Analytics"
140
  msgstr ""
141
 
142
- #: controllers/SQ_Menu.php:125
143
- msgid " settings"
144
  msgstr ""
145
 
146
- #: controllers/SQ_Menu.php:126 themes/default/SQ_BlockSettingsSeo.php:5
147
- msgid "SEO"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  msgstr ""
149
 
150
- #: controllers/SQ_Menu.php:133
151
- msgid " Settings"
152
  msgstr ""
153
 
154
- #: controllers/SQ_Menu.php:134 themes/default/SQ_BlockSettings.php:5
155
- msgid "Settings"
156
  msgstr ""
157
 
158
- #: controllers/SQ_Menu.php:141
159
- msgid " account info"
160
  msgstr ""
161
 
162
- #: controllers/SQ_Menu.php:142
163
  msgid "Account Info"
164
  msgstr ""
165
 
166
- #: controllers/SQ_Menu.php:150
 
 
 
 
 
 
 
 
 
167
  msgid "Become an Affiliate with "
168
  msgstr ""
169
 
170
- #: controllers/SQ_Menu.php:151
171
- msgid "Affiliate plan"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  msgstr ""
173
 
174
- #: controllers/SQ_PostsList.php:95
175
  msgid "Squirrly"
176
  msgstr ""
177
 
178
- #: controllers/SQ_PostsList.php:130
179
  msgid "Custom description: "
180
  msgstr ""
181
 
182
- #: controllers/SQ_PostsList.php:130
183
  msgid "Custom title: "
184
  msgstr ""
185
 
186
- #: controllers/SQ_PostsList.php:166
187
  msgid "SEO Analytics, by Squirrly"
188
  msgstr ""
189
 
190
- #: controllers/SQ_PostsList.php:167 core/SQ_Blockseo/SQ_Blockseo.php:25
191
  msgid "Update"
192
  msgstr ""
193
 
194
- #: controllers/SQ_PostsList.php:171
195
  msgid "Not Public"
196
  msgstr ""
197
 
198
- #: controllers/SQ_PostsList.php:172
199
  msgid "Could not process"
200
  msgstr ""
201
 
202
- #: controllers/SQ_PostsList.php:319 controllers/SQ_PostsList.php:333
203
- #: models/SQ_BlockPostsAnalytics.php:399
204
- msgid "Could not receive data from google (Err: blocked IP)"
205
- msgstr ""
206
-
207
- #: controllers/SQ_PostsList.php:321 models/SQ_BlockPostsAnalytics.php:401
208
- msgid "> 100"
209
  msgstr ""
210
 
211
- #: controllers/SQ_PostsList.php:323 models/SQ_BlockPostsAnalytics.php:403
212
- msgid "URL Indexed"
213
  msgstr ""
214
 
215
- #: controllers/SQ_PostsList.php:325 models/SQ_BlockPostsAnalytics.php:405
 
216
  #, php-format
217
  msgid "%s"
218
  msgstr ""
219
 
220
- #: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:38
221
  #, php-format
222
  msgid "Error: %s"
223
  msgstr ""
224
 
225
- #: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:41
226
  msgid "An error occured. Mabe a network error :("
227
  msgstr ""
228
 
229
- #: core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php:13
230
- #: core/SQ_Blockseo/SQ_Blockseo.php:21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  msgid "Too short"
232
  msgstr ""
233
 
234
- #: core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php:14
235
- #: core/SQ_Blockseo/SQ_Blockseo.php:22
236
  msgid "Too long"
237
  msgstr ""
238
 
239
- #: core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php:266
 
 
 
 
240
  msgid "Great! The backup is restored."
241
  msgstr ""
242
 
243
- #: core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php:268
244
- #: core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php:271
245
  msgid "Error! The backup is not valid."
246
  msgstr ""
247
 
248
- #: core/SQ_BlockSettingsSeo/SQ_BlockSettingsSeo.php:274
249
  msgid "Error! You have to enter a previous saved backup file."
250
  msgstr ""
251
 
 
 
 
 
 
 
 
 
252
  # @ squirrly-seo
253
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:22
254
  msgid "Plugin Feedback"
255
  msgstr "Plugin Feedback"
256
 
257
  # @ squirrly-seo
258
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:58
259
  msgid "Thank you for your feedback"
260
  msgstr "Vielen Dank für Ihre Feedback"
261
 
262
  # @ squirrly-seo
263
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:61
264
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:99
265
  msgid "Could not send the email..."
266
  msgstr "Konnte E-Mail nicht senden ..."
267
 
268
  # @ squirrly-seo
269
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:65
270
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:103
271
  msgid "No message."
272
  msgstr "Keine Nachricht."
273
 
274
  # @ squirrly-seo
275
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:85
276
  msgid "Plugin Support"
277
  msgstr "Plugin Support"
278
 
279
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:96
280
  msgid "Message sent. Thank you!"
281
  msgstr ""
282
 
283
  # @ squirrly-seo
284
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:81
285
  #, php-format
286
  msgid ""
287
  "We found your email, so it means you already have a Squirrly.co account. "
@@ -292,7 +541,7 @@ msgstr ""
292
  "Sie sich mit Ihrer Squirrly-ID ein. Falls Sie Ihr Passwort vergessen haben, "
293
  "klicken Sie %shier%s"
294
 
295
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:86
296
  msgid ""
297
  "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
298
  "webmaster) and request them to add http://api.squirrly.co/ to their IP "
@@ -300,7 +549,7 @@ msgid ""
300
  msgstr ""
301
 
302
  # @ squirrly-seo
303
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:89
304
  #, php-format
305
  msgid ""
306
  "Could not send your informations to squirrly. Please register %smanually%s."
@@ -309,348 +558,401 @@ msgstr ""
309
  "%smanually%s."
310
 
311
  # @ squirrly-seo
312
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:129
313
  msgid "Wrong email or password!"
314
  msgstr "Benutzername oder Passwort falsch!"
315
 
316
  # @ squirrly-seo
317
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:132
318
  msgid "You can use this account only for the URL you registered first!"
319
  msgstr ""
320
  "Dieses Konto können Sie nur für die URL benutzen, die Sie zuerst registriert "
321
  "haben!"
322
 
323
  # @ squirrly-seo
324
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:137
325
  msgid "An error occured."
326
  msgstr "Ein Fehler ist aufgetreten."
327
 
328
  # @ squirrly-seo
329
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:139
330
  msgid "Both fields are required."
331
  msgstr "Beide Felder sind Pflichtfelder."
332
 
333
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
 
 
 
 
 
 
 
 
 
 
 
 
 
334
  msgid "Recent discussions:"
335
  msgstr "Bisherige Diskussionen:"
336
 
337
- # @ squirrly-seo
338
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
339
- msgid "Exact search:"
340
- msgstr "Exakte Suche:"
341
 
342
  # @ squirrly-seo
343
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
344
  msgid "Competition:"
345
  msgstr "Wettbewerb:"
346
 
347
  # @ squirrly-seo
348
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
349
  msgid "Trend:"
350
  msgstr "Trend:"
351
 
352
  # @ squirrly-seo
353
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
 
 
 
 
 
354
  msgid "date"
355
  msgstr "Datum"
356
 
357
  # @ squirrly-seo
358
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
359
  msgid "Read it!"
360
  msgstr "Lesen!"
361
 
362
  # @ squirrly-seo
363
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
364
  msgid "Insert it!"
365
  msgstr "Einfügen!"
366
 
367
  # @ squirrly-seo
368
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
369
  msgid "Reference"
370
  msgstr "Referenz"
371
 
372
  # @ squirrly-seo
373
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
374
  msgid "Insert as box"
375
  msgstr "Als Box einfügen"
376
 
 
 
 
 
377
  # @ squirrly-seo
378
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
379
  msgid "Not relevant?"
380
  msgstr "Nicht relevant?"
381
 
382
  # @ squirrly-seo
383
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
384
  msgid "Insert in your article"
385
  msgstr "In Artikel einfügen"
386
 
387
- # @ squirrly-seo
388
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
389
- msgid "For Squirrly to work, you have to have tinymce editor installed!"
390
- msgstr "Damit Squirrly arbeitet, muss tinymce installiert sein!"
391
-
392
- # @ squirrly-seo
393
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
394
- msgid ":( I lost my squirrel. Please reload the page."
395
- msgstr ":( Ich verlor meine Eichhörnchen. Laden Sie die Seite erneut."
396
 
397
  # @ squirrly-seo
398
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
399
  msgid "No results found!"
400
  msgstr "Keine Ergebnisse gefunden!"
401
 
402
- # @ squirrly-seo
403
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
404
- msgid "Switch to Visual editor!"
405
- msgstr "Zum Visual Editor wechseln !"
406
-
407
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
408
  msgid "Enter one more word to find relevant results"
409
  msgstr ""
410
 
411
  # @ squirrly-seo
412
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
413
  msgid "Takes too long to check this keyword ..."
414
  msgstr "Dauert zu lange, um dieses Schlüsselwort zu überprüfen ..."
415
 
416
  # @ squirrly-seo
417
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
418
  msgid "Do a research!"
419
  msgstr "Erweiterte Suche!"
420
 
421
  # @ squirrly-seo
422
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
423
  msgid "Do more research!"
424
  msgstr "Erweiterte Suche!"
425
 
426
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
427
  #, php-format
428
  msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
429
  msgstr ""
430
 
431
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
432
  msgid "Has creative commons attributes"
433
  msgstr ""
434
 
435
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
436
  msgid "No known copyright restrictions"
437
  msgstr ""
438
 
439
- #: core/SQ_Blockseo/SQ_Blockseo.php:15
440
- msgid "Save changes"
 
 
441
  msgstr ""
 
 
442
 
443
- #: core/SQ_Blockseo/SQ_Blockseo.php:16
444
- msgid "Cancel"
445
  msgstr ""
446
 
447
- #: core/SQ_Blockseo/SQ_Blockseo.php:17
448
- msgid "Reset"
449
  msgstr ""
450
 
451
- #: core/SQ_Blockseo/SQ_Blockseo.php:19
452
- msgid "Customize Meta"
453
  msgstr ""
454
 
455
- #: core/SQ_Blockseo/SQ_Blockseo.php:20
456
- msgid "manage keywords"
457
  msgstr ""
458
 
459
- #: core/SQ_Blockseo/SQ_Blockseo.php:24
460
- #: themes/default/SQ_BlockSettingsSeo.php:227
461
- msgid "Squirrly Snippet"
462
  msgstr ""
463
 
464
- #: core/SQ_Blockseo/SQ_Blockseo.php:26
465
- msgid "snippet"
 
466
  msgstr ""
467
 
468
- #: core/SQ_Blockseo/SQ_Blockseo.php:28
469
- msgid ""
470
- "Click the Update button (to the right) to see the snippet from your website."
471
  msgstr ""
472
 
473
- #: core/SQ_Blockseo/SQ_Blockseo.php:29
474
- msgid "Enter a title above for the snippet to get data."
 
475
  msgstr ""
476
 
477
- # @ squirrly-seo
478
- #: core/SQ_Loading/SQ_Loading.php:21
479
- msgid ""
480
- "For Squirrly to work properly you have to use a higher version of Internet "
481
- "Explorer. <br /> We recommend you to use Chrome or Mozilla."
482
  msgstr ""
483
- "Damit Squirrly ordnungsgemäß funktioniert, müssen Sie eine höhere Version "
484
- "von Internet Explorer verwenden. <br /> Wir empfehlen, Chrome oder Mozilla."
485
 
486
- #: core/SQ_Loading/SQ_Loading.php:36
487
- msgid ""
488
- "You haven`t used Squirrly SEO to optimize your article. Do you want to "
489
- "optimize for a keyword before publishing?"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
490
  msgstr ""
491
- "You haven`t used Squirrly SEO to optimize your article. Do you want to "
492
- "optimize for a keyword before publishing?"
493
 
494
- #: models/SQ_BlockPostsAnalytics.php:275
 
 
 
 
 
495
  msgctxt "column name"
496
  msgid "Title"
497
  msgstr ""
498
 
499
- #: models/SQ_BlockPostsAnalytics.php:277
500
  msgid "Type"
501
  msgstr ""
502
 
503
- #: models/SQ_BlockPostsAnalytics.php:280
504
  msgid "Author"
505
  msgstr ""
506
 
507
- #: models/SQ_BlockPostsAnalytics.php:283
508
  msgid "Keywords"
509
  msgstr ""
510
 
511
- #: models/SQ_BlockPostsAnalytics.php:285
512
  #, php-format
513
  msgid "Google.%s Position"
514
  msgstr ""
515
 
516
- #: models/SQ_BlockPostsAnalytics.php:287
517
  msgid "Date"
518
  msgstr ""
519
 
520
- #: models/SQ_BlockPostsAnalytics.php:300
521
  msgid "Reset Filters"
522
  msgstr ""
523
 
524
- #: models/SQ_BlockPostsAnalytics.php:359
 
 
 
 
525
  #, php-format
526
  msgid "Edit &#8220;%s&#8221;"
527
  msgstr ""
528
 
529
- #: models/SQ_BlockPostsAnalytics.php:362
530
  msgid "Edit this item"
531
  msgstr ""
532
 
533
- #: models/SQ_BlockPostsAnalytics.php:362
534
  msgid "Edit"
535
  msgstr ""
536
 
537
- #: models/SQ_BlockPostsAnalytics.php:367
538
  #, php-format
539
  msgid "Preview &#8220;%s&#8221;"
540
  msgstr ""
541
 
542
- #: models/SQ_BlockPostsAnalytics.php:367
543
  msgid "Preview"
544
  msgstr ""
545
 
546
- #: models/SQ_BlockPostsAnalytics.php:369
547
  #, php-format
548
  msgid "View &#8220;%s&#8221;"
549
  msgstr ""
550
 
551
- #: models/SQ_BlockPostsAnalytics.php:369
552
  msgid "View"
553
  msgstr ""
554
 
555
- #: models/SQ_BlockPostsAnalytics.php:391
556
  msgid "No Tags"
557
  msgstr ""
558
 
559
- #: models/SQ_BlockPostsAnalytics.php:407
 
 
 
 
 
 
 
 
 
 
 
 
560
  msgid "Force recheck"
561
  msgstr ""
562
 
563
- #: models/SQ_BlockPostsAnalytics.php:409
564
  msgid "Not yet verified"
565
  msgstr ""
566
 
567
- #: models/SQ_BlockPostsAnalytics.php:409
568
  msgid "Check now"
569
  msgstr ""
570
 
571
- #: models/SQ_BlockPostsAnalytics.php:422
 
 
 
 
 
572
  msgid "Unpublished"
573
  msgstr ""
574
 
575
- #: models/SQ_BlockPostsAnalytics.php:431
576
  #, php-format
577
  msgid "%s ago"
578
  msgstr ""
579
 
580
- #: models/SQ_BlockPostsAnalytics.php:433
581
  msgid "Y/m/d"
582
  msgstr ""
583
 
584
- #: models/SQ_BlockPostsAnalytics.php:438
585
  msgid "Published"
586
  msgstr ""
587
 
588
- #: models/SQ_BlockPostsAnalytics.php:441
589
  msgid "Missed schedule"
590
  msgstr ""
591
 
592
- #: models/SQ_BlockPostsAnalytics.php:443
593
  msgid "Scheduled"
594
  msgstr ""
595
 
596
- #: models/SQ_BlockPostsAnalytics.php:445
597
  msgid "Last Modified"
598
  msgstr ""
599
 
600
  # @ squirrly-seo
601
- #: models/SQ_BlockSettingsSeo.php:57
602
  msgid "The code for Google Webmaster Tool is incorrect."
603
  msgstr "Der Code für Google Webmaster Tool ist falsch."
604
 
605
  # @ squirrly-seo
606
- #: models/SQ_BlockSettingsSeo.php:83
607
  msgid "The code for Google Analytics is incorrect."
608
  msgstr "Der Code für Google Analytics ist falsch."
609
 
610
  # @ squirrly-seo
611
- #: models/SQ_BlockSettingsSeo.php:134
612
  msgid "The code for Facebook is incorrect."
613
  msgstr "Der Code für Facebook ist falsch."
614
 
615
- #: models/SQ_BlockSettingsSeo.php:158
616
  msgid "The code for Pinterest is incorrect."
617
  msgstr ""
618
 
619
  # @ squirrly-seo
620
- #: models/SQ_BlockSettingsSeo.php:181
621
  msgid "The code for Bing is incorrect."
622
  msgstr "Der Code für Bing ist falsch."
623
 
624
- #: models/SQ_BlockSettingsSeo.php:194
625
- msgid "The twitter account is incorrect"
626
- msgstr ""
627
-
628
- #: models/SQ_BlockSettingsSeo.php:271
629
  msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
630
  msgstr ""
631
 
632
  # @ squirrly-seo
633
- #: models/SQ_BlockSettingsSeo.php:277
634
  msgid "GD error: The GD library must be installed on your server."
635
  msgstr "GD Fehler: Die GD-Bibliothek muss auf dem Server installiert werden."
636
 
637
  # @ squirrly-seo
638
- #: models/SQ_BlockSettingsSeo.php:283
639
  msgid "Delete error: Could not delete the old favicon."
640
  msgstr "Lösch Fehler: Konnte das alte Favicon nicht löschen."
641
 
642
  # @ squirrly-seo
643
- #: models/SQ_BlockSettingsSeo.php:290
644
  msgid "Upload error: Could not upload the favicon."
645
  msgstr "Upload Fehler: Konnte das Favicon nicht hochladen."
646
 
647
  # @ squirrly-seo
648
- #: models/SQ_BlockSettingsSeo.php:296
649
  msgid "Permission error: Could not change the favicon permissions."
650
  msgstr "Permission Fehler: Konnte Favicon-Berechtigungen nicht ändern."
651
 
652
  # @ squirrly-seo
653
- #: models/SQ_BlockSettingsSeo.php:318
654
  msgid ""
655
  "ICO Error: Could not create the ICO from file. Try with another file type."
656
  msgstr ""
@@ -658,1275 +960,1850 @@ msgstr ""
658
  "einem anderen Dateityp."
659
 
660
  # @ squirrly-seo
661
- #: models/SQ_BlockSettingsSeo.php:337
662
  msgid "The favicon has been updated."
663
  msgstr "Das Favicon wurde aktualisiert."
664
 
665
- #: models/SQ_Frontend.php:496 models/SQ_Frontend.php:506
666
- #: models/SQ_Frontend.php:511 models/SQ_Frontend.php:533
667
- #: models/SQ_Frontend.php:730 models/SQ_Frontend.php:744
668
- #: models/SQ_Frontend.php:753 models/SQ_Frontend.php:779
669
- msgid "Page"
670
- msgstr ""
671
-
672
- #: models/SQ_Frontend.php:503
673
- msgid "About"
674
- msgstr ""
675
-
676
  # @ default
677
- #: models/SQ_Post.php:69
678
  msgid "Squirrly could not find any results for: "
679
  msgstr "Squirly hat keine Suchergebnisse gefunden für:"
680
 
681
- #: models/SQ_Post.php:132
682
  msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
683
  msgstr ""
684
 
685
- #: models/SQ_Post.php:133
686
  msgid ""
687
  "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
688
  "the HTML form."
689
  msgstr ""
690
 
691
- #: models/SQ_Post.php:134
692
  msgid "The uploaded file was only partially uploaded."
693
  msgstr ""
694
 
695
- #: models/SQ_Post.php:135
696
  msgid "No file was uploaded."
697
  msgstr ""
698
 
699
- #: models/SQ_Post.php:137
700
  msgid "Missing a temporary folder."
701
  msgstr ""
702
 
703
- #: models/SQ_Post.php:138
704
  msgid "Failed to write file to disk."
705
  msgstr ""
706
 
707
- #: models/SQ_Post.php:139
708
  msgid "File upload stopped by extension."
709
  msgstr ""
710
 
711
- #: models/SQ_Post.php:156
712
  msgid "Invalid form submission."
713
  msgstr ""
714
 
715
- #: models/SQ_Post.php:166
716
  msgid "File is empty. Please upload something more substantial."
717
  msgstr ""
718
 
719
- #: models/SQ_Post.php:168
720
  msgid ""
721
  "File is empty. Please upload something more substantial. This error could "
722
  "also be caused by uploads being disabled in your php.ini or by post_max_size "
723
  "being defined as smaller than upload_max_filesize in php.ini."
724
  msgstr ""
725
 
726
- #: models/SQ_Post.php:174
727
  msgid "Specified file failed upload test."
728
  msgstr ""
729
 
730
- #: models/SQ_Post.php:187
731
  msgid "Sorry, this file type is not permitted for security reasons."
732
  msgstr ""
733
 
734
- #: models/SQ_Post.php:212
735
  #, php-format
736
  msgid "The uploaded file could not be moved to %s."
737
  msgstr ""
738
 
739
- #: models/SQ_PostsList.php:27
740
  msgid "Optimized:"
741
  msgstr ""
742
 
743
- #: models/SQ_PostsList.php:28
744
  msgid "See Analytics"
745
  msgstr ""
746
 
747
- #: models/SQ_PostsList.php:30
748
  msgid "Optimize it with Squirrly to see the Analytics"
749
  msgstr ""
750
 
751
- #: models/SQ_PostsList.php:82
752
  msgid "This post's current position in Google"
753
  msgstr ""
754
 
755
- #: models/SQ_PostsList.php:85
756
  msgid "The total traffic for the last 30 days, for the current post"
757
  msgstr ""
758
 
759
- #: models/SQ_PostsList.php:88
760
  msgid "The total number of shares on social media channels for this post"
761
  msgstr ""
762
 
763
- #: models/SQ_PostsList.php:91
764
  msgid "The total authority for this post"
765
  msgstr ""
766
 
767
- #: models/SQ_PostsList.php:94
768
  msgid "The total number of inbound links to this post"
769
  msgstr ""
770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
771
  # @ squirrly-seo
772
- #: squirrly.php:60
773
  msgid ""
774
  "For Squirrly to work, the PHP version has to be equal or greater then 5.1"
775
  msgstr ""
776
  "Damit Squirrly funktioniert, muss die PHP-Version gleich oder größer als 5.1 "
777
  "sein"
778
 
779
- #: themes/default/SQ_BlockAccount.php:7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
780
  msgid "Squirrly account information"
781
  msgstr ""
782
 
783
- #: themes/default/SQ_BlockAccount.php:9 themes/default/SQ_BlockAffiliate.php:7
784
  msgid "Go to dashboard"
785
  msgstr ""
786
 
787
- #: themes/default/SQ_BlockAffiliate.php:5
788
- #: themes/default/SQ_BlockAffiliate.php:17
789
- msgid "Join Squirrly today!"
 
 
 
790
  msgstr ""
791
 
792
- #: themes/default/SQ_BlockAffiliate.php:18
793
  #, php-format
794
  msgid "%sHow I Started Making Money With the Squirrly Affiliate Program%s"
795
  msgstr ""
796
 
797
- #: themes/default/SQ_BlockAffiliate.php:21
798
  msgid "Affiliate Benefits"
799
  msgstr ""
800
 
801
- #: themes/default/SQ_BlockAffiliate.php:26
802
  #, php-format
803
- msgid "- Recurring 45%s commission"
804
  msgstr ""
805
 
806
- #: themes/default/SQ_BlockAffiliate.php:31
807
  msgid "- No cost"
808
  msgstr ""
809
 
810
- #: themes/default/SQ_BlockAffiliate.php:36
811
  msgid "- Monthly payments in your Paypal account"
812
  msgstr ""
813
 
814
- #: themes/default/SQ_BlockAffiliate.php:47
 
 
 
 
 
 
 
815
  msgid ""
816
  "To redirect users to your site, just change \"squirrly.co\" with your domain."
817
  msgstr ""
818
 
819
- #: themes/default/SQ_BlockAffiliate.php:49
820
  msgid "Generate affiliate link"
821
  msgstr ""
822
 
823
- #: themes/default/SQ_BlockAffiliate.php:58
824
  msgid ""
825
  "Your affiliate account is set and ready to go. Above you have the affiliate "
826
  "link. "
827
  msgstr ""
828
 
829
- #: themes/default/SQ_BlockAffiliate.php:60
830
  #, php-format
831
  msgid "Check your affiliate page: %sAffiliate page%s"
832
  msgstr ""
833
 
834
- #: themes/default/SQ_BlockAffiliate.php:63
835
  msgid ""
836
  "After you connect to Squirrly you can begin to use your free Squirrly "
837
  "affiliate link immediately!"
838
  msgstr ""
839
 
840
- #: themes/default/SQ_BlockAffiliate.php:72
841
  msgid "Squirrly banners you can use"
842
  msgstr ""
843
 
844
- #: themes/default/SQ_BlockAffiliate.php:97
845
  msgid "<< START HERE >>"
846
  msgstr ""
847
 
848
- #: themes/default/SQ_BlockAnalytics.php:55
849
  msgid "Moz Inbound Links"
850
  msgstr ""
851
 
852
- #: themes/default/SQ_BlockAnalytics.php:62
853
  msgid "Ahrefs Inbound Links"
854
  msgstr ""
855
 
856
- #: themes/default/SQ_BlockAnalytics.php:74
857
  msgid "Moz Authority"
858
  msgstr ""
859
 
860
- #: themes/default/SQ_BlockAnalytics.php:79
861
  msgid "Moz Rank"
862
  msgstr ""
863
 
864
- #: themes/default/SQ_BlockAnalytics.php:86
865
  msgid "Google Page Rank"
866
  msgstr ""
867
 
868
- #: themes/default/SQ_BlockAnalytics.php:92
869
  msgid "Ahrefs Rank"
870
  msgstr ""
871
 
872
- #: themes/default/SQ_BlockAnalytics.php:108
873
  msgid "Facebook shares"
874
  msgstr ""
875
 
876
- #: themes/default/SQ_BlockAnalytics.php:113
877
  msgid "Facebook likes"
878
  msgstr ""
879
 
880
- #: themes/default/SQ_BlockAnalytics.php:118
881
  msgid "Twitter shares"
882
  msgstr ""
883
 
884
- #: themes/default/SQ_BlockAnalytics.php:123
885
  msgid "Google+ shares"
886
  msgstr ""
887
 
888
- #: themes/default/SQ_BlockAnalytics.php:128
889
  msgid "LinkedIn Shares"
890
  msgstr ""
891
 
892
- #: themes/default/SQ_BlockAnalytics.php:133
893
  msgid "StumbleUpon shares"
894
  msgstr ""
895
 
896
- #: themes/default/SQ_BlockAnalytics.php:138
897
  msgid "Reddit shares"
898
  msgstr ""
899
 
900
- #: themes/default/SQ_BlockAnalytics.php:170
901
  msgid "Nicely done! Now you can focus on the other tasks"
902
  msgstr ""
903
 
904
- #: themes/default/SQ_BlockAnalytics.php:170
905
  msgid ""
906
  "I know you can improve this. Please follow the documentation for a quicker "
907
  "progress"
908
  msgstr ""
909
 
910
- #: themes/default/SQ_BlockAnalytics.php:243
911
  msgid "Visits"
912
  msgstr ""
913
 
914
- #: themes/default/SQ_BlockAnalytics.php:256
915
  msgid "Current: "
916
  msgstr ""
917
 
918
- #: themes/default/SQ_BlockAnalytics.php:257
919
  msgid "Lowest: "
920
  msgstr ""
921
 
922
- #: themes/default/SQ_BlockAnalytics.php:258
923
  msgid "Highest: "
924
  msgstr ""
925
 
926
- #: themes/default/SQ_BlockAnalytics.php:262
927
  msgid "last 30 days"
928
  msgstr ""
929
 
930
- #: themes/default/SQ_BlockDashboard.php:6
931
- msgid "Connect to Squirrly.co"
932
  msgstr ""
933
 
934
- #: themes/default/SQ_BlockDashboard.php:12
935
- msgid "Connect to Squirrly and start optimizing your site"
936
  msgstr ""
937
 
938
- #: themes/default/SQ_BlockDashboard.php:13
939
- msgid "START HERE"
 
 
 
 
940
  msgstr ""
941
 
942
- #: themes/default/SQ_BlockDashboard.php:20
943
- msgid "Squirrly dashboard"
 
 
 
944
  msgstr ""
945
 
946
- #: themes/default/SQ_BlockPostsAnalytics.php:3
947
- msgid "Squirrly Analytics"
 
 
 
948
  msgstr ""
949
 
950
- #: themes/default/SQ_BlockPostsAnalytics.php:4
951
- msgid ""
952
- "Don't see all your pages here? Make sure you optimize them with Squirrly, so "
953
- "that we can track them, and display you the analytics"
954
- msgstr ""
955
-
956
- #: themes/default/SQ_BlockPostsAnalytics.php:5
957
- msgid ""
958
- "If you recheck the google rank, let 10-20 seconds between requests to "
959
- "prevent google to block your IP for an hour."
960
- msgstr ""
961
-
962
- # @ squirrly-seo
963
- #: themes/default/SQ_BlockSettings.php:7
964
- #: themes/default/SQ_BlockSettings.php:300
965
- msgid "Save settings"
966
- msgstr "Einstellungen speichern"
967
-
968
- #: themes/default/SQ_BlockSettings.php:17
969
- msgid "Post/Page Edit"
970
  msgstr ""
971
 
972
- #: themes/default/SQ_BlockSettings.php:18
973
  #, php-format
974
- msgid "%sThe right method in working with Squirrly, SEO plugin%s"
975
  msgstr ""
976
 
977
- #: themes/default/SQ_BlockSettings.php:19
978
  #, php-format
979
- msgid "%sGetting inspired with Squirrly WordPress SEO plugin%s"
980
  msgstr ""
981
 
982
- #: themes/default/SQ_BlockSettings.php:21
983
- #, php-format
984
- msgid "%sThere is a New SEO Live Assistant from Squirrly%s"
985
  msgstr ""
986
 
987
- #: themes/default/SQ_BlockSettings.php:22
988
- #, php-format
989
- msgid "%sHow to create Human friendly content with the WordPress SEO plugin?%s"
990
  msgstr ""
991
 
992
- #: themes/default/SQ_BlockSettings.php:28
993
- msgid "Load Squirrly Live Assistant for"
994
  msgstr ""
995
 
996
- #: themes/default/SQ_BlockSettings.php:31
997
- #: themes/default/SQ_BlockSettingsSeo.php:528
998
- msgid "Posts"
 
999
  msgstr ""
1000
 
1001
- #: themes/default/SQ_BlockSettings.php:32
1002
- #: themes/default/SQ_BlockSettingsSeo.php:530
1003
- msgid "Pages"
1004
  msgstr ""
1005
 
1006
- #: themes/default/SQ_BlockSettings.php:34
1007
- #: themes/default/SQ_BlockSettingsSeo.php:527
1008
- msgid "Products"
1009
  msgstr ""
1010
 
1011
- # @ squirrly-seo
1012
- #: themes/default/SQ_BlockSettings.php:61
1013
- #: themes/default/SQ_BlockSettings.php:72
1014
- #: themes/default/SQ_BlockSettings.php:84
1015
- #: themes/default/SQ_BlockSettings.php:95
1016
- #: themes/default/SQ_BlockSettings.php:106
1017
- #: themes/default/SQ_BlockSettings.php:118
1018
- #: themes/default/SQ_BlockSettings.php:261
1019
- #: themes/default/SQ_BlockSettingsSeo.php:28
1020
- #: themes/default/SQ_BlockSettingsSeo.php:47
1021
- #: themes/default/SQ_BlockSettingsSeo.php:65
1022
- #: themes/default/SQ_BlockSettingsSeo.php:82
1023
- #: themes/default/SQ_BlockSettingsSeo.php:99
1024
- #: themes/default/SQ_BlockSettingsSeo.php:116
1025
- #: themes/default/SQ_BlockSettingsSeo.php:133
1026
- #: themes/default/SQ_BlockSettingsSeo.php:161
1027
- #: themes/default/SQ_BlockSettingsSeo.php:177
1028
- #: themes/default/SQ_BlockSettingsSeo.php:411
1029
- #: themes/default/SQ_BlockSettingsSeo.php:433
1030
- #: themes/default/SQ_BlockSettingsSeo.php:442
1031
- #: themes/default/SQ_BlockSettingsSeo.php:514
1032
- msgid "Yes"
1033
- msgstr "Ja"
1034
 
1035
- # @ squirrly-seo
1036
- #: themes/default/SQ_BlockSettings.php:63
1037
- #: themes/default/SQ_BlockSettings.php:74
1038
- #: themes/default/SQ_BlockSettings.php:86
1039
- #: themes/default/SQ_BlockSettings.php:97
1040
- #: themes/default/SQ_BlockSettings.php:108
1041
- #: themes/default/SQ_BlockSettings.php:120
1042
- #: themes/default/SQ_BlockSettings.php:263
1043
- #: themes/default/SQ_BlockSettingsSeo.php:30
1044
- #: themes/default/SQ_BlockSettingsSeo.php:49
1045
- #: themes/default/SQ_BlockSettingsSeo.php:67
1046
- #: themes/default/SQ_BlockSettingsSeo.php:84
1047
- #: themes/default/SQ_BlockSettingsSeo.php:101
1048
- #: themes/default/SQ_BlockSettingsSeo.php:118
1049
- #: themes/default/SQ_BlockSettingsSeo.php:135
1050
- #: themes/default/SQ_BlockSettingsSeo.php:163
1051
- #: themes/default/SQ_BlockSettingsSeo.php:179
1052
- #: themes/default/SQ_BlockSettingsSeo.php:413
1053
- #: themes/default/SQ_BlockSettingsSeo.php:435
1054
- #: themes/default/SQ_BlockSettingsSeo.php:444
1055
- #: themes/default/SQ_BlockSettingsSeo.php:516
1056
- msgid "No"
1057
- msgstr "Nein"
1058
 
1059
- #: themes/default/SQ_BlockSettings.php:66
1060
  msgid ""
1061
- "Show <strong>Squirrly Tooltips</strong> posting a new article (e.g. \"Enter "
1062
- "a keyword\")."
1063
  msgstr ""
1064
 
1065
- #: themes/default/SQ_BlockSettings.php:77
1066
  msgid ""
1067
- "Always show <strong>Keyword Research</strong> about the selected keyword."
 
1068
  msgstr ""
1069
 
1070
- #: themes/default/SQ_BlockSettings.php:89
1071
- msgid "Use <strong> the NEW version of the SEO Live Assistant</strong>."
 
 
1072
  msgstr ""
1073
 
1074
- #: themes/default/SQ_BlockSettings.php:100
1075
- msgid "Add the Post tags in <strong>META keyword</strong>."
1076
  msgstr ""
1077
 
1078
- #: themes/default/SQ_BlockSettings.php:111
1079
  msgid ""
1080
- "Download <strong>remote images</strong> in your <strong>Media Library</"
1081
- "strong> for the new posts."
1082
  msgstr ""
1083
 
1084
- #: themes/default/SQ_BlockSettings.php:123
1085
- msgid ""
1086
- "Correct my <strong>feed links</strong> and <strong>images</strong> (convert "
1087
- "from relative to absolute)."
1088
  msgstr ""
1089
 
1090
- #: themes/default/SQ_BlockSettings.php:130
1091
- msgid "Google Rank Options"
1092
  msgstr ""
1093
 
1094
- #: themes/default/SQ_BlockSettings.php:131
1095
- #, php-format
1096
- msgid "%sCountry targeting%s"
1097
  msgstr ""
1098
 
1099
- #: themes/default/SQ_BlockSettings.php:136
1100
  msgid ""
1101
- "Select the google extension for which Squirrly will check the google rank"
 
1102
  msgstr ""
1103
 
1104
- #: themes/default/SQ_BlockSettings.php:140
1105
- msgid "Default"
1106
  msgstr ""
1107
 
1108
- #: themes/default/SQ_BlockSettings.php:141
1109
- msgid "American Samoa"
1110
  msgstr ""
1111
 
1112
- #: themes/default/SQ_BlockSettings.php:142
1113
- msgid "Anguilla"
 
 
 
1114
  msgstr ""
1115
 
1116
- #: themes/default/SQ_BlockSettings.php:143
1117
- msgid "Antigua and Barbuda"
 
 
 
1118
  msgstr ""
1119
 
1120
- #: themes/default/SQ_BlockSettings.php:144
1121
- msgid "Argentina"
 
 
 
1122
  msgstr ""
1123
 
1124
- #: themes/default/SQ_BlockSettings.php:145
1125
- msgid "Australia"
 
1126
  msgstr ""
1127
 
1128
- #: themes/default/SQ_BlockSettings.php:146
1129
- msgid "Austria"
 
1130
  msgstr ""
1131
 
1132
- #: themes/default/SQ_BlockSettings.php:147
1133
- msgid "Azerbaijan"
 
1134
  msgstr ""
1135
 
1136
- #: themes/default/SQ_BlockSettings.php:148
1137
- msgid "Belgium"
 
1138
  msgstr ""
1139
 
1140
- #: themes/default/SQ_BlockSettings.php:149
1141
- msgid "Brazil"
1142
- msgstr ""
 
1143
 
1144
- #: themes/default/SQ_BlockSettings.php:150
1145
- msgid "British Virgin Islands"
1146
- msgstr ""
 
1147
 
1148
- #: themes/default/SQ_BlockSettings.php:151
1149
- msgid "Burundi"
1150
  msgstr ""
1151
 
1152
- #: themes/default/SQ_BlockSettings.php:152
1153
- msgid "Bulgaria"
1154
  msgstr ""
1155
 
1156
- #: themes/default/SQ_BlockSettings.php:153
1157
- msgid "Canada"
 
1158
  msgstr ""
1159
 
1160
- #: themes/default/SQ_BlockSettings.php:154
1161
- msgid "Chad"
1162
  msgstr ""
1163
 
1164
- #: themes/default/SQ_BlockSettings.php:155
1165
- msgid "Chile"
1166
  msgstr ""
1167
 
1168
- #: themes/default/SQ_BlockSettings.php:156
1169
- msgid "Colombia"
 
 
 
1170
  msgstr ""
1171
 
1172
- #: themes/default/SQ_BlockSettings.php:157
1173
- msgid "Costa Rica"
1174
  msgstr ""
1175
 
1176
- #: themes/default/SQ_BlockSettings.php:158
1177
- msgid "Côte d'Ivoire"
1178
  msgstr ""
1179
 
1180
- #: themes/default/SQ_BlockSettings.php:159
1181
- msgid "Cuba"
1182
  msgstr ""
1183
 
1184
- #: themes/default/SQ_BlockSettings.php:160
1185
- msgid "Czech Republic"
1186
  msgstr ""
1187
 
1188
- #: themes/default/SQ_BlockSettings.php:161
1189
- msgid "Dem. Rep. of the Congo"
1190
  msgstr ""
1191
 
1192
- #: themes/default/SQ_BlockSettings.php:162
1193
- msgid "Denmark"
1194
  msgstr ""
1195
 
1196
- #: themes/default/SQ_BlockSettings.php:163
1197
- msgid "Djibouti"
 
 
1198
  msgstr ""
1199
 
1200
- #: themes/default/SQ_BlockSettings.php:164
1201
- msgid "Dominican Republic"
1202
  msgstr ""
1203
 
1204
- #: themes/default/SQ_BlockSettings.php:165
1205
- msgid "Ecuador"
1206
  msgstr ""
1207
 
1208
- #: themes/default/SQ_BlockSettings.php:166
1209
- msgid "El Salvador"
1210
  msgstr ""
1211
 
1212
- #: themes/default/SQ_BlockSettings.php:167
1213
- msgid "Estonia"
1214
  msgstr ""
1215
 
1216
- #: themes/default/SQ_BlockSettings.php:168
1217
- msgid "Federated States of Micronesia"
 
 
 
1218
  msgstr ""
1219
 
1220
- #: themes/default/SQ_BlockSettings.php:169
1221
- msgid "Fiji"
1222
  msgstr ""
1223
 
1224
- #: themes/default/SQ_BlockSettings.php:170
1225
- msgid "Finland"
 
 
 
1226
  msgstr ""
1227
 
1228
- #: themes/default/SQ_BlockSettings.php:171
1229
- msgid "France"
1230
  msgstr ""
1231
 
1232
- #: themes/default/SQ_BlockSettings.php:172
1233
- msgid "The Gambia"
1234
  msgstr ""
1235
 
1236
- #: themes/default/SQ_BlockSettings.php:173
1237
- msgid "Georgia"
1238
  msgstr ""
1239
 
1240
- #: themes/default/SQ_BlockSettings.php:174
1241
- msgid "Germany"
1242
  msgstr ""
1243
 
1244
- #: themes/default/SQ_BlockSettings.php:175
1245
- msgid "Gibraltar"
1246
  msgstr ""
1247
 
1248
- #: themes/default/SQ_BlockSettings.php:176
1249
- msgid "Greece"
1250
  msgstr ""
1251
 
1252
- #: themes/default/SQ_BlockSettings.php:177
1253
- msgid "Greenland"
1254
  msgstr ""
1255
 
1256
- #: themes/default/SQ_BlockSettings.php:178
1257
- msgid "Guernsey"
1258
  msgstr ""
1259
 
1260
- #: themes/default/SQ_BlockSettings.php:179
1261
- msgid "Honduras"
1262
  msgstr ""
1263
 
1264
- #: themes/default/SQ_BlockSettings.php:180
1265
- msgid "Hong Kong"
1266
  msgstr ""
1267
 
1268
- #: themes/default/SQ_BlockSettings.php:181
1269
- msgid "Hungary"
1270
  msgstr ""
1271
 
1272
- #: themes/default/SQ_BlockSettings.php:182
1273
- msgid "India"
 
1274
  msgstr ""
1275
 
1276
- #: themes/default/SQ_BlockSettings.php:183
1277
- msgid "Ireland"
1278
- msgstr ""
 
1279
 
1280
- #: themes/default/SQ_BlockSettings.php:184
1281
- msgid "Isle of Man"
1282
  msgstr ""
1283
 
1284
- #: themes/default/SQ_BlockSettings.php:185
1285
- msgid "Israel"
 
 
 
 
1286
  msgstr ""
1287
 
1288
- #: themes/default/SQ_BlockSettings.php:186
1289
- msgid "Italy"
 
1290
  msgstr ""
1291
 
1292
- #: themes/default/SQ_BlockSettings.php:187
1293
- msgid "Jamaica"
1294
  msgstr ""
1295
 
1296
- #: themes/default/SQ_BlockSettings.php:188
1297
- msgid "Japan"
 
 
1298
  msgstr ""
1299
 
1300
- #: themes/default/SQ_BlockSettings.php:189
1301
- msgid "Jersey"
 
 
 
 
1302
  msgstr ""
1303
 
1304
- #: themes/default/SQ_BlockSettings.php:190
1305
- msgid "Kazakhstan"
 
 
1306
  msgstr ""
1307
 
1308
- #: themes/default/SQ_BlockSettings.php:191
1309
- msgid "Korea"
 
 
 
 
 
 
1310
  msgstr ""
1311
 
1312
- #: themes/default/SQ_BlockSettings.php:192
1313
- msgid "Latvia"
1314
  msgstr ""
1315
 
1316
- #: themes/default/SQ_BlockSettings.php:193
1317
- msgid "Lesotho"
1318
  msgstr ""
1319
 
1320
- #: themes/default/SQ_BlockSettings.php:194
1321
- msgid "Liechtenstein"
1322
  msgstr ""
1323
 
1324
- #: themes/default/SQ_BlockSettings.php:195
1325
- msgid "Lithuania"
1326
  msgstr ""
1327
 
1328
- #: themes/default/SQ_BlockSettings.php:196
1329
- msgid "Luxembourg"
1330
  msgstr ""
1331
 
1332
- #: themes/default/SQ_BlockSettings.php:197
1333
- msgid "Malawi"
 
1334
  msgstr ""
1335
 
1336
- #: themes/default/SQ_BlockSettings.php:198
1337
- msgid "Malaysia"
1338
  msgstr ""
1339
 
1340
- #: themes/default/SQ_BlockSettings.php:199
1341
- msgid "Malta"
1342
  msgstr ""
1343
 
1344
- #: themes/default/SQ_BlockSettings.php:200
1345
- msgid "Mauritius"
1346
  msgstr ""
1347
 
1348
- #: themes/default/SQ_BlockSettings.php:201
1349
- msgid "México"
1350
  msgstr ""
1351
 
1352
- #: themes/default/SQ_BlockSettings.php:202
1353
- msgid "Montserrat"
1354
  msgstr ""
1355
 
1356
- #: themes/default/SQ_BlockSettings.php:203
1357
- msgid "Namibia"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1358
  msgstr ""
1359
 
1360
- #: themes/default/SQ_BlockSettings.php:204
1361
- msgid "Nepal"
1362
  msgstr ""
1363
 
1364
- #: themes/default/SQ_BlockSettings.php:205
1365
- msgid "Netherlands"
 
1366
  msgstr ""
1367
 
1368
- #: themes/default/SQ_BlockSettings.php:206
1369
- msgid "New Zealand"
 
 
 
 
1370
  msgstr ""
1371
 
1372
- #: themes/default/SQ_BlockSettings.php:207
1373
- msgid "Nicaragua"
 
 
 
1374
  msgstr ""
1375
 
1376
- #: themes/default/SQ_BlockSettings.php:208
1377
- msgid "Norfolk Island"
 
 
 
1378
  msgstr ""
1379
 
1380
- #: themes/default/SQ_BlockSettings.php:209
1381
- msgid "Norway"
 
 
 
 
1382
  msgstr ""
1383
 
1384
- #: themes/default/SQ_BlockSettings.php:210
1385
- msgid "Pakistan"
1386
  msgstr ""
1387
 
1388
- #: themes/default/SQ_BlockSettings.php:211
1389
- msgid "Panamá"
 
 
1390
  msgstr ""
1391
 
1392
- #: themes/default/SQ_BlockSettings.php:212
1393
- msgid "Paraguay"
 
 
 
 
 
1394
  msgstr ""
1395
 
1396
- #: themes/default/SQ_BlockSettings.php:213
1397
- msgid "Perú"
 
1398
  msgstr ""
1399
 
1400
- #: themes/default/SQ_BlockSettings.php:214
1401
- msgid "Philippines"
 
1402
  msgstr ""
1403
 
1404
- #: themes/default/SQ_BlockSettings.php:215
1405
- msgid "Pitcairn Islands"
 
1406
  msgstr ""
1407
 
1408
- #: themes/default/SQ_BlockSettings.php:216
1409
- msgid "Poland"
 
1410
  msgstr ""
1411
 
1412
- #: themes/default/SQ_BlockSettings.php:217
1413
- msgid "Portugal"
1414
  msgstr ""
1415
 
1416
- #: themes/default/SQ_BlockSettings.php:218
1417
- msgid "Puerto Rico"
 
 
 
 
 
 
1418
  msgstr ""
1419
 
1420
- #: themes/default/SQ_BlockSettings.php:219
1421
- msgid "Rep. of the Congo"
1422
  msgstr ""
1423
 
1424
- #: themes/default/SQ_BlockSettings.php:220
1425
- msgid "Romania"
1426
  msgstr ""
1427
 
1428
- #: themes/default/SQ_BlockSettings.php:221
1429
- msgid "Russia"
1430
  msgstr ""
1431
 
1432
- #: themes/default/SQ_BlockSettings.php:222
1433
- msgid "Rwanda"
1434
  msgstr ""
1435
 
1436
- #: themes/default/SQ_BlockSettings.php:223
1437
- msgid "Saint Helena"
1438
  msgstr ""
1439
 
1440
- #: themes/default/SQ_BlockSettings.php:224
1441
- msgid "San Marino"
1442
  msgstr ""
1443
 
1444
- #: themes/default/SQ_BlockSettings.php:225
1445
- msgid "Saudi Arabia"
 
 
1446
  msgstr ""
1447
 
1448
- #: themes/default/SQ_BlockSettings.php:226
1449
- msgid "Singapore"
 
1450
  msgstr ""
1451
 
1452
- #: themes/default/SQ_BlockSettings.php:227
1453
- msgid "Slovakia"
 
 
1454
  msgstr ""
1455
 
1456
- #: themes/default/SQ_BlockSettings.php:228
1457
- msgid "South Africa"
1458
  msgstr ""
1459
 
1460
- #: themes/default/SQ_BlockSettings.php:229
1461
- msgid "Spain"
 
 
1462
  msgstr ""
1463
 
1464
- #: themes/default/SQ_BlockSettings.php:230
1465
- msgid "Sri Lanka"
 
 
1466
  msgstr ""
1467
 
1468
- #: themes/default/SQ_BlockSettings.php:231
1469
- msgid "Sweden"
1470
  msgstr ""
1471
 
1472
- #: themes/default/SQ_BlockSettings.php:232
1473
- msgid "Switzerland"
 
1474
  msgstr ""
1475
 
1476
- #: themes/default/SQ_BlockSettings.php:233
1477
- msgid "Taiwan"
 
1478
  msgstr ""
1479
 
1480
- #: themes/default/SQ_BlockSettings.php:234
1481
- msgid "Thailand"
 
1482
  msgstr ""
1483
 
1484
- #: themes/default/SQ_BlockSettings.php:235
1485
- msgid "Trinidad and Tobago"
1486
  msgstr ""
1487
 
1488
- #: themes/default/SQ_BlockSettings.php:236
1489
- msgid "Turkey"
1490
  msgstr ""
1491
 
1492
- #: themes/default/SQ_BlockSettings.php:237
1493
- msgid "Ukraine"
1494
  msgstr ""
1495
 
1496
- #: themes/default/SQ_BlockSettings.php:238
1497
- msgid "United Arab Emirates"
1498
  msgstr ""
1499
 
1500
- #: themes/default/SQ_BlockSettings.php:239
1501
- msgid "United Kingdom"
1502
  msgstr ""
1503
 
1504
- #: themes/default/SQ_BlockSettings.php:240
1505
- msgid "Uruguay"
1506
  msgstr ""
1507
 
1508
- #: themes/default/SQ_BlockSettings.php:241
1509
- msgid "Uzbekistan"
1510
  msgstr ""
1511
 
1512
- #: themes/default/SQ_BlockSettings.php:242
1513
- msgid "Vanuatu"
1514
  msgstr ""
1515
 
1516
- #: themes/default/SQ_BlockSettings.php:243
1517
- msgid "Venezuela"
1518
  msgstr ""
1519
 
1520
- #: themes/default/SQ_BlockSettings.php:247
1521
- #, php-format
1522
- msgid ""
1523
- "Select how many pages to be checked by google rank every hour. %s5 pages "
1524
- "(recommended)%s"
1525
  msgstr ""
1526
 
1527
- #: themes/default/SQ_BlockSettings.php:252
1528
- msgid "pages"
1529
  msgstr ""
1530
 
1531
- #: themes/default/SQ_BlockSettings.php:266
1532
- msgid ""
1533
- "Restricts search results to results originating in the above particular "
1534
- "country."
1535
  msgstr ""
1536
 
1537
- #: themes/default/SQ_BlockSettings.php:275
1538
- msgid "Measure Your Success"
1539
  msgstr ""
1540
 
1541
- #: themes/default/SQ_BlockSettings.php:276
1542
- #, php-format
1543
- msgid "%sHow to set the Google Webmaster Tool%s"
1544
  msgstr ""
1545
 
1546
- #: themes/default/SQ_BlockSettings.php:277
1547
- #, php-format
1548
- msgid "%sBest practices to help Google find, crawl, and index your site%s"
1549
  msgstr ""
1550
 
1551
- #: themes/default/SQ_BlockSettings.php:278
1552
- #, php-format
1553
- msgid "%sBing Webmaster Tools Help & How-To Center%s"
1554
  msgstr ""
1555
 
1556
- #: themes/default/SQ_BlockSettings.php:284
1557
- #, php-format
1558
- msgid "Google META verification code for %sWebmaster Tool%s:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1559
  msgstr ""
1560
 
1561
- #: themes/default/SQ_BlockSettings.php:288
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1562
  #, php-format
1563
- msgid "Bing META code (for %sWebmaster Tool%s ):"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1564
  msgstr ""
1565
 
1566
- #: themes/default/SQ_BlockSettings.php:292
 
 
 
 
1567
  #, php-format
1568
- msgid "Alexa META code (for %sAlexa Tool%s ):"
1569
  msgstr ""
1570
 
1571
- #: themes/default/SQ_BlockSettings.php:309
1572
- #: themes/default/SQ_BlockSettingsSeo.php:696
1573
- msgid "Backup Settings"
1574
  msgstr ""
1575
 
1576
- #: themes/default/SQ_BlockSettings.php:310
1577
- #: themes/default/SQ_BlockSettingsSeo.php:697
1578
- msgid "Restore Settings"
1579
  msgstr ""
1580
 
1581
- #: themes/default/SQ_BlockSettings.php:316
1582
- #: themes/default/SQ_BlockSettingsSeo.php:703
1583
- #: themes/default/SQ_Blocklogin.php:55
1584
- msgid "Upload the file with the saved Squirrly Settings"
1585
  msgstr ""
1586
 
1587
- #: themes/default/SQ_BlockSettings.php:321
1588
- #: themes/default/SQ_BlockSettingsSeo.php:708
1589
- #: themes/default/SQ_Blocklogin.php:60
1590
- msgid "Restore Backup"
1591
  msgstr ""
1592
 
1593
- #: themes/default/SQ_BlockSettingsSeo.php:7
1594
- #: themes/default/SQ_BlockSettingsSeo.php:685
1595
- msgid "Save SEO"
1596
  msgstr ""
1597
 
1598
- #: themes/default/SQ_BlockSettingsSeo.php:9
1599
- #: themes/default/SQ_BlockSettingsSeo.php:144
1600
  msgid "Check for SEO issues in your site"
1601
  msgstr ""
1602
 
1603
- #: themes/default/SQ_BlockSettingsSeo.php:21
1604
- msgid "Let Squirrly SEO optimize this blog"
1605
  msgstr ""
1606
 
1607
- #: themes/default/SQ_BlockSettingsSeo.php:22
1608
  #, php-format
1609
- msgid "%sIs Squirrly SEO better then WordPress SEO by Yoast?%s"
1610
  msgstr ""
1611
 
1612
- #: themes/default/SQ_BlockSettingsSeo.php:24
1613
  msgid ""
1614
  "Activate the built-in SEO settings from Squirrly by switching Yes below. "
1615
  "<strong>Works well with Multisites and Ecommerce.</strong>"
1616
  msgstr ""
1617
 
 
 
 
 
 
 
 
 
1618
  # @ squirrly-seo
1619
- #: themes/default/SQ_BlockSettingsSeo.php:37
1620
  msgid "What does Squirrly automatically do for SEO?"
1621
  msgstr "Was tut Squirrly automatisch für SEO?"
1622
 
1623
- #: themes/default/SQ_BlockSettingsSeo.php:52
1624
  #, php-format
1625
  msgid ""
1626
  "adds <strong>%scanonical link%s</strong>, <strong>%srel=\"prev\" and rel="
1627
  "\"next\"%s</strong> metas in Header"
1628
  msgstr ""
1629
 
1630
- #: themes/default/SQ_BlockSettingsSeo.php:70
1631
- msgid ""
1632
- "adds the required METAs (<strong>dublincore, google hreflang</strong>, etc.)"
1633
  msgstr ""
1634
 
1635
- #: themes/default/SQ_BlockSettingsSeo.php:87
1636
  #, php-format
1637
  msgid "adds the <strong>%sXML Sitemap%s</strong> for search engines: %s"
1638
  msgstr ""
1639
 
1640
- #: themes/default/SQ_BlockSettingsSeo.php:104
1641
- msgid "adds <strong>Feed style</strong> to your blog feed (eg. /feed)"
 
1642
  msgstr ""
1643
 
1644
- #: themes/default/SQ_BlockSettingsSeo.php:121
1645
  #, php-format
1646
  msgid ""
1647
- "adds the <strong>%sfavicon.ico%s</strong> and the <strong>%sicons for pads "
1648
- "and phones%s</strong>"
1649
  msgstr ""
1650
 
1651
- #: themes/default/SQ_BlockSettingsSeo.php:138
1652
  #, php-format
1653
  msgid "adds the <strong>%sJson-LD%s</strong> metas for Semantic SEO"
1654
  msgstr ""
1655
 
1656
- #: themes/default/SQ_BlockSettingsSeo.php:141
 
 
 
 
 
 
 
1657
  msgid ""
1658
  "Note! By switching the <strong>Json-LD</strong>, <strong>XML Sitemap</"
1659
  "strong> and <strong>Favicon</strong> on, you open new options below"
1660
  msgstr ""
1661
 
1662
- #: themes/default/SQ_BlockSettingsSeo.php:150
1663
- msgid "First page optimization"
1664
  msgstr ""
1665
 
1666
- #: themes/default/SQ_BlockSettingsSeo.php:151
1667
  #, php-format
1668
  msgid "%sThe best SEO approach to Meta information%s"
1669
  msgstr ""
1670
 
1671
- #: themes/default/SQ_BlockSettingsSeo.php:152
1672
- msgid "Add meta <strong>title</strong> in Home Page"
1673
  msgstr ""
1674
 
1675
- #: themes/default/SQ_BlockSettingsSeo.php:168
1676
- msgid ""
1677
- "Add meta <strong>description</strong> and <strong>keywords</strong> in Home "
1678
- "Page"
 
 
 
 
1679
  msgstr ""
1680
 
1681
- #: themes/default/SQ_BlockSettingsSeo.php:184
1682
  msgid "SEO for all post/pages"
1683
  msgstr ""
1684
 
1685
- #: themes/default/SQ_BlockSettingsSeo.php:185
1686
  #, php-format
1687
  msgid ""
1688
  "To customize the Title and Description for all the Posts and Pages in your "
1689
- "site use the %s<strong>Squirrly Snippet Tool</strong>%s"
 
 
 
 
 
 
 
 
 
 
 
 
1690
  msgstr ""
1691
 
1692
  # @ squirrly-seo
1693
- #: themes/default/SQ_BlockSettingsSeo.php:212
1694
  msgid "Title:"
1695
  msgstr "Titel:"
1696
 
1697
- #: themes/default/SQ_BlockSettingsSeo.php:213
1698
  msgid "Tips: Length 10-75 chars"
1699
  msgstr ""
1700
 
1701
  # @ squirrly-seo
1702
- #: themes/default/SQ_BlockSettingsSeo.php:216
1703
  msgid "Description:"
1704
  msgstr "Beschreibung:"
1705
 
1706
- #: themes/default/SQ_BlockSettingsSeo.php:217
1707
  msgid "Tips: Length 70-165 chars"
1708
  msgstr ""
1709
 
1710
  # @ squirrly-seo
1711
- #: themes/default/SQ_BlockSettingsSeo.php:220
1712
  msgid "Keywords:"
1713
  msgstr "Schlüsselwörter:"
1714
 
1715
- # @ squirrly-seo
1716
- #: themes/default/SQ_BlockSettingsSeo.php:221
1717
- msgid "Tips: 2-4 keywords"
1718
- msgstr "Tipp: Länge 2-4 Schlüsselwörter"
 
 
 
1719
 
1720
- #: themes/default/SQ_BlockSettingsSeo.php:225
 
 
 
 
1721
  msgid "First Page Preview (Title, Description, Keywords)"
1722
  msgstr ""
1723
 
1724
- #: themes/default/SQ_BlockSettingsSeo.php:235
 
 
 
 
1725
  msgid ""
1726
- "If you don't see any changes in custom optimization, check if another SEO "
1727
- "plugin affects Squirrly SEO"
1728
  msgstr ""
1729
 
1730
- #: themes/default/SQ_BlockSettingsSeo.php:238
1731
  #, php-format
1732
  msgid ""
1733
- "To customize the Title and Description for all the Posts and Pages in your "
1734
- "site use the %s<strong>Squirrly Snippet Tool</strong>%s while edit a Post/"
1735
- "Page"
1736
  msgstr ""
1737
 
1738
- #: themes/default/SQ_BlockSettingsSeo.php:244
1739
  msgid "Social Media Options"
1740
  msgstr ""
1741
 
1742
- #: themes/default/SQ_BlockSettingsSeo.php:246
1743
  msgid "Select the language you're using on Social Media"
1744
  msgstr ""
1745
 
1746
- #: themes/default/SQ_BlockSettingsSeo.php:392
1747
  #, php-format
1748
  msgid "%sHow to pop out in Social Media with your links%s"
1749
  msgstr ""
1750
 
1751
- #: themes/default/SQ_BlockSettingsSeo.php:393
1752
  #, php-format
1753
  msgid "%sGet busy with Facebook’s new Search Engine functions%s"
1754
  msgstr ""
1755
 
1756
- #: themes/default/SQ_BlockSettingsSeo.php:394
1757
  #, php-format
1758
  msgid ""
1759
  "%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s"
1760
  msgstr ""
1761
 
1762
- #: themes/default/SQ_BlockSettingsSeo.php:399
1763
- msgid "What does Squirrly automatically do for Social Media?"
1764
  msgstr ""
1765
 
1766
- #: themes/default/SQ_BlockSettingsSeo.php:416
 
 
 
 
 
1767
  msgid ""
1768
- "Add the <strong>Social Open Graph objects</strong> for a good looking share. "
 
1769
  msgstr ""
1770
 
1771
- #: themes/default/SQ_BlockSettingsSeo.php:438
1772
- msgid "Add the <strong>Twitter card</strong> in your tweets. "
1773
  msgstr ""
1774
 
1775
- #: themes/default/SQ_BlockSettingsSeo.php:447
1776
  #, php-format
1777
- msgid ""
1778
- "Use <strong>Twitter %ssummary_large_image%s</strong> for your tweeter card. "
1779
  msgstr ""
1780
 
1781
- #: themes/default/SQ_BlockSettingsSeo.php:449
1782
  msgid "You need to add your <strong>Twitter account</strong> below"
1783
  msgstr ""
1784
 
1785
- #: themes/default/SQ_BlockSettingsSeo.php:459
 
 
 
 
 
 
 
 
 
 
1786
  msgid "Social Media Accounts"
1787
  msgstr ""
1788
 
1789
- #: themes/default/SQ_BlockSettingsSeo.php:460
1790
  #, php-format
1791
  msgid "%sLink your Google+ profile to the content you create%s"
1792
  msgstr ""
1793
 
1794
- #: themes/default/SQ_BlockSettingsSeo.php:461
1795
  #, php-format
1796
  msgid ""
1797
  "%sTwitter account is mandatory for <strong>Twitter Card Validation</strong>%s"
1798
  msgstr ""
1799
 
1800
- #: themes/default/SQ_BlockSettingsSeo.php:462
1801
  #, php-format
1802
  msgid ""
1803
  "%sAdd all your social accounts for <strong>JSON-LD Semantic SEO</strong>%s"
1804
  msgstr ""
1805
 
1806
- #: themes/default/SQ_BlockSettingsSeo.php:463
1807
- #: themes/default/SQ_BlockSettingsSeo.php:597
1808
  #, php-format
1809
  msgid "%sSpecify your social profiles to Google%s"
1810
  msgstr ""
1811
 
1812
- #: themes/default/SQ_BlockSettingsSeo.php:471
1813
  msgid "Your Twitter Account:"
1814
  msgstr ""
1815
 
1816
- #: themes/default/SQ_BlockSettingsSeo.php:477
1817
  msgid "Google Plus Profile:"
1818
  msgstr ""
1819
 
1820
- #: themes/default/SQ_BlockSettingsSeo.php:483
1821
  msgid "Facebook Profile:"
1822
  msgstr ""
1823
 
1824
- #: themes/default/SQ_BlockSettingsSeo.php:489
1825
  msgid "Linkedin Profile:"
1826
  msgstr ""
1827
 
1828
- #: themes/default/SQ_BlockSettingsSeo.php:497
 
 
 
 
 
 
 
 
 
 
 
 
1829
  msgid "XML Sitemap for Google"
1830
  msgstr ""
1831
 
1832
- #: themes/default/SQ_BlockSettingsSeo.php:498
1833
  msgid ""
1834
- "Squirrly Sitemap is the fastest way to tell Google about your site links. "
1835
- "<strong>Supports Multisites, Google News, Images, Videos, Custom Post Types, "
1836
- "Custom Taxonomies and Ecommerce products</strong>"
1837
  msgstr ""
1838
 
1839
- #: themes/default/SQ_BlockSettingsSeo.php:499
1840
  #, php-format
1841
  msgid "%sHow to submit your sitemap.xml in Google Webmaster Tool%s"
1842
  msgstr ""
1843
 
1844
- #: themes/default/SQ_BlockSettingsSeo.php:500
1845
  #, php-format
1846
  msgid ""
1847
  "%s10 Vital To Dos to Feed Your SEO Content Machine After You Post Articles%s"
1848
  msgstr ""
1849
 
1850
- #: themes/default/SQ_BlockSettingsSeo.php:510
 
 
 
 
 
 
1851
  msgid "XML Sitemap Options"
1852
  msgstr ""
1853
 
1854
- #: themes/default/SQ_BlockSettingsSeo.php:519
1855
  msgid "Ping your sitemap to Google and Bing when a new post is published"
1856
  msgstr ""
1857
 
1858
- #: themes/default/SQ_BlockSettingsSeo.php:522
1859
  msgid "Build Sitemaps for"
1860
  msgstr ""
1861
 
1862
- #: themes/default/SQ_BlockSettingsSeo.php:525
1863
  msgid "Google News"
1864
  msgstr ""
1865
 
1866
- #: themes/default/SQ_BlockSettingsSeo.php:526
1867
  msgid "Categories"
1868
  msgstr ""
1869
 
1870
- #: themes/default/SQ_BlockSettingsSeo.php:529
1871
  msgid "Tags"
1872
  msgstr ""
1873
 
1874
- #: themes/default/SQ_BlockSettingsSeo.php:531
1875
  msgid "Archive"
1876
  msgstr ""
1877
 
1878
- #: themes/default/SQ_BlockSettingsSeo.php:532
1879
  msgid "Custom Taxonomies"
1880
  msgstr ""
1881
 
1882
- #: themes/default/SQ_BlockSettingsSeo.php:533
1883
  msgid "Custom Posts"
1884
  msgstr ""
1885
 
1886
- #: themes/default/SQ_BlockSettingsSeo.php:537
 
 
 
 
 
 
1887
  msgid "Include in Sitemaps"
1888
  msgstr ""
1889
 
1890
- #: themes/default/SQ_BlockSettingsSeo.php:539
1891
  msgid "<strong>Images</strong> from posts/pages"
1892
  msgstr ""
1893
 
1894
- #: themes/default/SQ_BlockSettingsSeo.php:540
1895
  msgid "<strong>Videos</strong> (embeded and local media)"
1896
  msgstr ""
1897
 
1898
- #: themes/default/SQ_BlockSettingsSeo.php:544
1899
  msgid "How often do you update your site?"
1900
  msgstr ""
1901
 
1902
- #: themes/default/SQ_BlockSettingsSeo.php:546
1903
  msgid "every day"
1904
  msgstr ""
1905
 
1906
- #: themes/default/SQ_BlockSettingsSeo.php:547
1907
  msgid "1-3 times per week"
1908
  msgstr ""
1909
 
1910
- #: themes/default/SQ_BlockSettingsSeo.php:548
1911
  msgid "1-3 times per month"
1912
  msgstr ""
1913
 
1914
- #: themes/default/SQ_BlockSettingsSeo.php:549
1915
  msgid "1-3 times per year"
1916
  msgstr ""
1917
 
 
 
 
 
1918
  # @ squirrly-seo
1919
- #: themes/default/SQ_BlockSettingsSeo.php:558
1920
  msgid "Change the Website Icon"
1921
  msgstr "Ändern Sie das Website-Symbol"
1922
 
1923
- #: themes/default/SQ_BlockSettingsSeo.php:559
1924
  msgid ""
1925
  "Now, even tablet & smartphone browsers make use of your icons. This makes "
1926
  "having a good favicon even more important."
1927
  msgstr ""
1928
 
1929
- #: themes/default/SQ_BlockSettingsSeo.php:560
1930
  #, php-format
1931
  msgid ""
1932
  "You can use %shttp://convertico.com/%s to convert your photo to icon and "
@@ -1934,17 +2811,17 @@ msgid ""
1934
  msgstr ""
1935
 
1936
  # @ squirrly-seo
1937
- #: themes/default/SQ_BlockSettingsSeo.php:566
1938
  msgid "Upload file:"
1939
  msgstr "Datei hochladen:"
1940
 
1941
  # @ squirrly-seo
1942
- #: themes/default/SQ_BlockSettingsSeo.php:577
1943
  msgid "Upload"
1944
  msgstr "Hochladen"
1945
 
1946
  # @ squirrly-seo
1947
- #: themes/default/SQ_BlockSettingsSeo.php:581
1948
  msgid ""
1949
  "If you don't see the new icon in your browser, empty the browser cache and "
1950
  "refresh the page."
@@ -1953,462 +2830,856 @@ msgstr ""
1953
  "Cache und aktualisieren Sie die Seite."
1954
 
1955
  # @ squirrly-seo
1956
- #: themes/default/SQ_BlockSettingsSeo.php:586
1957
  msgid "File types: JPG, JPEG, GIF and PNG."
1958
  msgstr "Dateitypen: JPG, JPEG, GIF und PNG."
1959
 
1960
- #: themes/default/SQ_BlockSettingsSeo.php:588
1961
  msgid ""
1962
  "Does not physically create the favicon.ico file. The best option for "
1963
  "Multisites."
1964
  msgstr ""
1965
 
1966
- #: themes/default/SQ_BlockSettingsSeo.php:593
1967
  msgid "JSON-LD for Semantic SEO"
1968
  msgstr ""
1969
 
1970
- #: themes/default/SQ_BlockSettingsSeo.php:594
1971
  msgid ""
1972
  "Squirrly will automatically add the JSON-LD Structured Data in your site."
1973
  msgstr ""
1974
 
1975
- #: themes/default/SQ_BlockSettingsSeo.php:595
1976
  #, php-format
1977
  msgid "%sJSON-LD's Big Day at Google%s"
1978
  msgstr ""
1979
 
1980
- #: themes/default/SQ_BlockSettingsSeo.php:596
1981
  #, php-format
1982
  msgid "%sGoogle Testing Tool%s"
1983
  msgstr ""
1984
 
1985
- #: themes/default/SQ_BlockSettingsSeo.php:603
 
 
 
 
1986
  msgid "Your site type:"
1987
  msgstr ""
1988
 
1989
- #: themes/default/SQ_BlockSettingsSeo.php:605
1990
  msgid "Organization"
1991
  msgstr ""
1992
 
1993
- #: themes/default/SQ_BlockSettingsSeo.php:606
1994
  msgid "Personal"
1995
  msgstr ""
1996
 
1997
- #: themes/default/SQ_BlockSettingsSeo.php:612
1998
  msgid "Your Organization Name:"
1999
  msgstr ""
2000
 
2001
- #: themes/default/SQ_BlockSettingsSeo.php:613
2002
  msgid "Your Name:"
2003
  msgstr ""
2004
 
2005
- #: themes/default/SQ_BlockSettingsSeo.php:617
2006
  msgid "Job Title:"
2007
  msgstr ""
2008
 
2009
- #: themes/default/SQ_BlockSettingsSeo.php:621
2010
  msgid "Logo Url:"
2011
  msgstr ""
2012
 
2013
- #: themes/default/SQ_BlockSettingsSeo.php:622
2014
  msgid "Image Url:"
2015
  msgstr ""
2016
 
2017
- #: themes/default/SQ_BlockSettingsSeo.php:623
2018
  msgid "Select Image"
2019
  msgstr ""
2020
 
2021
- #: themes/default/SQ_BlockSettingsSeo.php:626
2022
  msgid "Contact Phone:"
2023
  msgstr ""
2024
 
2025
- #: themes/default/SQ_BlockSettingsSeo.php:630
2026
  msgid "Contact Type:"
2027
  msgstr ""
2028
 
2029
- #: themes/default/SQ_BlockSettingsSeo.php:632
2030
  msgid "Customer Service"
2031
  msgstr ""
2032
 
2033
- #: themes/default/SQ_BlockSettingsSeo.php:633
2034
  msgid "Technical Support"
2035
  msgstr ""
2036
 
2037
- #: themes/default/SQ_BlockSettingsSeo.php:634
2038
  msgid "Billing Support"
2039
  msgstr ""
2040
 
2041
- #: themes/default/SQ_BlockSettingsSeo.php:635
2042
  msgid "Bill Payment"
2043
  msgstr ""
2044
 
2045
- #: themes/default/SQ_BlockSettingsSeo.php:636
2046
  msgid "Sales"
2047
  msgstr ""
2048
 
2049
- #: themes/default/SQ_BlockSettingsSeo.php:637
2050
  msgid "Reservations"
2051
  msgstr ""
2052
 
2053
- #: themes/default/SQ_BlockSettingsSeo.php:638
2054
  msgid "Credit Card Support"
2055
  msgstr ""
2056
 
2057
- #: themes/default/SQ_BlockSettingsSeo.php:639
2058
  msgid "Emergency"
2059
  msgstr ""
2060
 
2061
- #: themes/default/SQ_BlockSettingsSeo.php:640
2062
  msgid "Baggage Tracking"
2063
  msgstr ""
2064
 
2065
- #: themes/default/SQ_BlockSettingsSeo.php:641
2066
  msgid "Roadside Assistance"
2067
  msgstr ""
2068
 
2069
- #: themes/default/SQ_BlockSettingsSeo.php:642
2070
  msgid "Package Tracking"
2071
  msgstr ""
2072
 
2073
- #: themes/default/SQ_BlockSettingsSeo.php:647
2074
  msgid "Short Description:"
2075
  msgstr ""
2076
 
2077
- #: themes/default/SQ_BlockSettingsSeo.php:650
2078
- msgid "Add your social accounts for Json-LD"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2079
  msgstr ""
2080
 
2081
- #: themes/default/SQ_BlockSettingsSeo.php:652
2082
- msgid "How will the search results look once google grab your data."
 
2083
  msgstr ""
2084
 
2085
- #: themes/default/SQ_BlockSettingsSeo.php:659
2086
- msgid "Tracking Tools"
 
2087
  msgstr ""
2088
 
2089
- #: themes/default/SQ_BlockSettingsSeo.php:660
2090
  #, php-format
2091
- msgid "%sHow to Get the Most Out of Google Analytics%s"
2092
  msgstr ""
2093
 
2094
- #: themes/default/SQ_BlockSettingsSeo.php:661
2095
  #, php-format
2096
- msgid "%sA Beginner’s Guide to Facebook Insights%s"
2097
  msgstr ""
2098
 
2099
- #: themes/default/SQ_BlockSettingsSeo.php:668
2100
  #, php-format
2101
- msgid "Google %sAnalytics ID%s:"
2102
  msgstr ""
2103
 
2104
- #: themes/default/SQ_BlockSettingsSeo.php:672
2105
  #, php-format
2106
- msgid "Facebook Admin ID (for %sInsights%s ):"
2107
  msgstr ""
2108
 
2109
- #: themes/default/SQ_BlockSettingsSeo.php:672
2110
- msgid "Facebook ID or https://www.facebook.com/YourProfileName"
 
2111
  msgstr ""
2112
 
2113
- #: themes/default/SQ_BlockSettingsSeo.php:676
2114
- msgid "Pinterest META code:"
 
2115
  msgstr ""
2116
 
2117
  # @ squirrly-seo
2118
- #: themes/default/SQ_BlockSupport.php:7
2119
  msgid "Go to Profile"
2120
  msgstr "Zum Profil"
2121
 
2122
  # @ squirrly-seo
2123
- #: themes/default/SQ_BlockSupport.php:7
2124
  msgid "Profile"
2125
  msgstr "Profil"
2126
 
2127
- # @ squirrly-seo
2128
- #: themes/default/SQ_BlockSupport.php:17
2129
- msgid "Support"
2130
- msgstr "Support"
2131
 
2132
- # @ squirrly-seo
2133
- #: themes/default/SQ_BlockSupport.php:20
2134
- msgid "Need Help with Squirrly SEO?"
2135
- msgstr "Brauchen Sie Hilfe mit Squirrly SEO?"
2136
 
2137
- # @ squirrly-seo
2138
- #: themes/default/SQ_BlockSupport.php:24
2139
- msgid "Send Question"
2140
- msgstr "Senden Sie Ihre Frage"
2141
 
2142
- # @ squirrly-seo
2143
- #: themes/default/SQ_BlockSupport.php:27 themes/default/SQ_BlockSupport.php:68
2144
- msgid "Go to:"
2145
- msgstr "Gehe zu:"
2146
 
2147
- # @ squirrly-seo
2148
- #: themes/default/SQ_BlockSupport.php:27 themes/default/SQ_BlockSupport.php:68
2149
- msgid "support page"
2150
- msgstr "Support Page"
2151
 
2152
  # @ squirrly-seo
2153
- #: themes/default/SQ_BlockSupport.php:39
2154
  msgid "How was your Squirrly experience today?"
2155
  msgstr "Wie war Ihre Squirrly Erfahrung heute?"
2156
 
2157
  # @ squirrly-seo
2158
- #: themes/default/SQ_BlockSupport.php:48
2159
  msgid "How was Squirrly today?"
2160
  msgstr "Wie war Squirrly heute?"
2161
 
2162
- #: themes/default/SQ_BlockSupport.php:52
2163
  msgid "Angry"
2164
  msgstr ""
2165
 
2166
- #: themes/default/SQ_BlockSupport.php:53
 
 
 
 
2167
  msgid "Sad"
2168
  msgstr ""
2169
 
2170
- #: themes/default/SQ_BlockSupport.php:54
 
 
 
 
2171
  msgid "Happy"
2172
  msgstr ""
2173
 
2174
- #: themes/default/SQ_BlockSupport.php:55
 
 
 
 
2175
  msgid "Excited"
2176
  msgstr ""
2177
 
2178
- #: themes/default/SQ_BlockSupport.php:56
 
 
 
 
2179
  msgid "Love it"
2180
  msgstr ""
2181
 
2182
  # @ squirrly-seo
2183
- #: themes/default/SQ_BlockSupport.php:61
2184
  msgid "Please tell us why?"
2185
  msgstr "Bitte sagen Sie uns, warum?"
2186
 
2187
  # @ squirrly-seo
2188
- #: themes/default/SQ_BlockSupport.php:64
2189
  msgid "Send feedback"
2190
  msgstr "Feedback senden"
2191
 
 
 
 
 
 
2192
  # @ squirrly-seo
2193
- #: themes/default/SQ_BlockSupport.php:73
2194
  msgid "Thank you! You can send us a happy face tomorow too."
2195
  msgstr "Danke! Sie können uns auch morgen ein fröhliches Gesicht senden."
2196
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2197
  # @ squirrly-seo
2198
- #: themes/default/SQ_Blocklogin.php:2
2199
  msgid "Squirrly.co Login"
2200
  msgstr "Squirrly.co Login"
2201
 
2202
  # @ squirrly-seo
2203
- #: themes/default/SQ_Blocklogin.php:9
2204
  msgid "Email:"
2205
  msgstr "Ihre E-Mail Adresse:"
2206
 
2207
  # @ squirrly-seo
2208
- #: themes/default/SQ_Blocklogin.php:11
2209
  msgid "Password:"
2210
  msgstr "Passwort:"
2211
 
2212
  # @ squirrly-seo
2213
- #: themes/default/SQ_Blocklogin.php:13
2214
  msgid "Login"
2215
  msgstr "Login"
2216
 
2217
  # @ squirrly-seo
2218
- #: themes/default/SQ_Blocklogin.php:14
2219
  msgid "Register"
2220
  msgstr "Registrieren"
2221
 
2222
  # @ squirrly-seo
2223
- #: themes/default/SQ_Blocklogin.php:14
2224
  msgid "Register to Squirrly.co"
2225
  msgstr "Bei Squirrly.co registrieren"
2226
 
2227
  # @ squirrly-seo
2228
- #: themes/default/SQ_Blocklogin.php:15
2229
  msgid "Lost password?"
2230
  msgstr "Passwort vergessen?"
2231
 
2232
  # @ squirrly-seo
2233
- #: themes/default/SQ_Blocklogin.php:15
2234
  msgid "Lost password"
2235
  msgstr "Passwort vergessen"
2236
 
2237
  # @ squirrly-seo
2238
- #: themes/default/SQ_Blocklogin.php:19
2239
  msgid "Enter your email"
2240
  msgstr "In Artikel einfügen"
2241
 
2242
- #: themes/default/SQ_Blocklogin.php:20
2243
  msgid "Your Email:"
2244
  msgstr ""
2245
 
2246
- #: themes/default/SQ_Blocklogin.php:26
 
 
 
 
 
2247
  msgid "Sign Up"
2248
  msgstr "Anmelden"
2249
 
2250
- #: themes/default/SQ_Blocklogin.php:27
2251
  msgid "I already have an account"
2252
  msgstr ""
2253
 
2254
- #: themes/default/SQ_Blocklogin.php:28
2255
  msgid "This email connects you to Squirrly.co"
2256
  msgstr "This email connects you to Squirrly.co"
2257
 
2258
  # @ squirrly-seo
2259
- #: themes/default/SQ_Blocklogin.php:38
2260
  msgid "The email address is invalid!"
2261
  msgstr "Die E-Mail-Adresse ist ungültig!"
2262
 
2263
  # @ squirrly-seo
2264
- #: themes/default/SQ_Blocklogin.php:39
2265
  msgid "Click on Sign Up button and try again ..."
2266
  msgstr "Klicken Sie auf das Bild und versuchen Sie es erneut ..."
2267
 
2268
  # @ squirrly-seo
2269
- #: themes/default/SQ_Blocklogin.php:40
2270
  msgid "An error occured while logging in!"
2271
  msgstr "Bei der Anmeldung ist ein Fehler aufgetreten!"
2272
 
2273
  # @ squirrly-seo
2274
- #: themes/default/SQ_Blocklogin.php:41
2275
  msgid "Connecting ..."
2276
  msgstr "Verbinden ..."
2277
 
2278
- #: themes/default/SQ_Blocklogin.php:50
2279
- msgid "Restore Squirrly Settings"
2280
- msgstr ""
2281
-
2282
- #: themes/default/SQ_Blocklogin.php:64
2283
  msgid "Congratulations! You are ready to use all the features from Squirrly"
2284
  msgstr ""
2285
 
2286
- # @ squirrly-seo
2287
- #: themes/default/SQ_Blockresearch.php:2
2288
- msgid "Squirrly Keyword Research"
2289
- msgstr "Squirrly Erweiterte Suche!"
2290
-
2291
- # @ squirrly-seo
2292
- #: themes/default/SQ_Blockresearch.php:3
2293
- msgid "Clear"
2294
- msgstr "Löschen"
2295
-
2296
- # @ squirrly-seo
2297
- #: themes/default/SQ_Blockresearch.php:39
2298
- msgid "Keyword:"
2299
- msgstr "Schlüsselwort:"
2300
-
2301
- # @ squirrly-seo
2302
- #: themes/default/SQ_Blockresearch.php:41 themes/default/SQ_Blocksearch.php:26
2303
- msgid "Use this keyword"
2304
- msgstr "Dieses Schlüsselwort verwenden"
2305
-
2306
- # @ squirrly-seo
2307
- #: themes/default/SQ_Blockresearch.php:50
2308
- msgid "+ Add keyword"
2309
- msgstr "Fügen Sie ein anderes Schlüsselwort ein"
2310
-
2311
- # @ squirrly-seo
2312
- #: themes/default/SQ_Blockresearch.php:51
2313
- msgid "Do the research"
2314
- msgstr "Recherchieren"
2315
-
2316
- # @ squirrly-seo
2317
- #: themes/default/SQ_Blockresearch.php:54
2318
- msgid "Enter even more keywords."
2319
- msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
2320
-
2321
- # @ squirrly-seo
2322
- #: themes/default/SQ_Blockresearch.php:55
2323
- msgid "Let some keywords for the next time as well!"
2324
- msgstr "Lassen Sie ein paar Schlüsselwörter auch für das nächste Mal!"
2325
-
2326
- #: themes/default/SQ_Blocksearch.php:1
2327
  msgid "Waiting for your editor to load .. "
2328
  msgstr ""
2329
 
2330
- #: themes/default/SQ_Blocksearch.php:1
2331
  msgid ""
2332
  "Javascript is disabled! You need to activate the javascript in order to use "
2333
  "Squirrly SEO."
2334
  msgstr ""
2335
 
2336
- #: themes/default/SQ_Blocksearch.php:3
2337
  msgid "Optimize for Keyword"
2338
  msgstr "Schlüsselwort optimieren"
2339
 
 
 
 
 
 
 
 
 
2340
  # @ squirrly-seo
2341
- #: themes/default/SQ_Blocksearch.php:12
2342
  msgid "Enter a keyword"
2343
  msgstr "Ein Schlüsselwort eingeben"
2344
 
2345
  # @ squirrly-seo
2346
- #: themes/default/SQ_Blocksearch.php:12
2347
  msgid "for Squirrly Live SEO optimization"
2348
  msgstr "Live-SEO-Optimierung für Squirrly"
2349
 
2350
  # @ squirrly-seo
2351
- #: themes/default/SQ_Blocksearch.php:25
2352
  msgid "Do a research"
2353
  msgstr "Recherchieren"
2354
 
2355
  # @ squirrly-seo
2356
- #: themes/default/SQ_Blocksearch.php:30
 
 
 
 
 
2357
  msgid "Enter a keyword above!"
2358
  msgstr "Geben Sie oben ein Schlüsselwort ein!"
2359
 
2360
  # @ squirrly-seo
2361
- #: themes/default/SQ_Blocksearch.php:31
2362
  msgid "I have more then one keyword!"
2363
  msgstr "Ich habe mehr als ein Schlüsselwort!"
2364
 
2365
  # @ squirrly-seo
2366
- #: themes/default/SQ_Blocksearch.php:37
2367
  msgid "Images"
2368
  msgstr "Bilder"
2369
 
2370
  # @ squirrly-seo
2371
- #: themes/default/SQ_Blocksearch.php:38
2372
  msgid "Twitter"
2373
  msgstr "Twitter"
2374
 
2375
  # @ squirrly-seo
2376
- #: themes/default/SQ_Blocksearch.php:39
2377
  msgid "Wiki"
2378
  msgstr "Wiki"
2379
 
2380
  # @ squirrly-seo
2381
- #: themes/default/SQ_Blocksearch.php:40
2382
- msgid "News"
2383
- msgstr "News"
2384
-
2385
- # @ squirrly-seo
2386
- #: themes/default/SQ_Blocksearch.php:41
2387
  msgid "Blogs"
2388
  msgstr "Blogs"
2389
 
2390
  # @ squirrly-seo
2391
- #: themes/default/SQ_Blocksearch.php:42
2392
  msgid "My articles"
2393
  msgstr "Meine Artikel"
2394
 
2395
  # @ squirrly-seo
2396
- #: themes/default/SQ_Blocksearch.php:47
2397
  msgid "Show only Copyright Free images"
2398
  msgstr "Nur urheberrechtfreie Bilder zeigen"
2399
 
2400
- #: themes/default/SQ_Blockseo.php:3
2401
- msgid "Squirrly SEO Live Assistant"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2402
  msgstr ""
2403
 
2404
- #: themes/default/SQ_Blockseo.php:8
2405
- msgid "Canonical link: "
2406
  msgstr ""
2407
 
2408
- #: themes/default/SQ_Blockseo.php:10
2409
- msgid "(only for external sources)"
 
2410
  msgstr ""
2411
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2412
  # @ squirrly-seo
2413
  #~ msgid "Notice: "
2414
  #~ msgstr "Hinweis: "
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: Squirrly SEO Plugin \n"
4
  "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2017-10-24 10:08+0300\n"
6
+ "PO-Revision-Date: 2017-10-24 10:08+0300\n"
7
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
8
  "Language-Team: \n"
9
  "Language: de_DE\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Poedit-SourceCharset: UTF-8\n"
15
  "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
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 1.8.2\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."
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."
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
  # @ squirrly-seo
51
+ #: classes/Error.php:65
52
  msgid "Turn off warnings!"
53
  msgstr "Warnungen ausschalten!"
54
 
55
+ #: classes/Error.php:73
56
  msgid "Don't bother me!"
57
  msgstr ""
58
 
59
+ #: classes/Tools.php:59
60
  msgid "Getting started"
61
  msgstr ""
62
 
63
+ #: classes/Tools.php:238
64
+ msgid "Format"
65
+ msgstr ""
66
+
67
+ #: classes/Tools.php:246 classes/Tools.php:262
68
+ msgid "Category"
69
+ msgstr ""
70
+
71
+ #: classes/Tools.php:254 classes/Tools.php:270
72
+ msgid "Tag"
73
+ msgstr ""
74
+
75
+ #: classes/Tools.php:278
76
+ msgid "Shipping Option"
77
+ msgstr ""
78
+
79
+ #: classes/Tools.php:286
80
+ msgid "Author at"
81
+ msgstr ""
82
+
83
+ #: classes/Tools.php:318
84
+ msgid "You searched for"
85
+ msgstr ""
86
+
87
+ #: classes/Tools.php:334
88
+ msgid "Page not found"
89
+ msgstr ""
90
+
91
  # @ squirrly-seo
92
+ #: classes/Tools.php:855
93
  msgid "Fix it for me!"
94
  msgstr "Beheben Sie es für mich!"
95
 
96
+ #: classes/Tools.php:861
97
  msgid "Activate the Squirrly SEO for your blog (recommended)"
98
  msgstr ""
99
 
100
+ #: classes/Tools.php:872
101
  msgid ""
102
  "You have META Title Duplicates. Disable the Squirrly Title Optimization or "
103
  "disable the other SEO Plugins"
104
  msgstr ""
105
 
106
+ #: classes/Tools.php:880
107
  msgid ""
108
  "You have META Description Duplicates. Disable the Squirrly Description "
109
  "Optimization or disable the other SEO Plugins"
110
  msgstr ""
111
 
112
+ #: classes/Tools.php:888
113
  msgid ""
114
  "You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or "
115
  "disable the other SEO Plugins"
116
  msgstr ""
117
 
118
+ #: classes/Tools.php:896
119
  msgid ""
120
  "You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card "
121
  "or disable the other SEO Plugins"
122
  msgstr ""
123
 
124
  # @ squirrly-seo
125
+ #: classes/Tools.php:905
126
  msgid "You're blocking google from indexing your site!"
127
  msgstr "Sie blockieren Google zum Indizieren Ihrer Website!"
128
 
129
+ #: classes/Tools.php:912
130
  msgid ""
131
  "It is highly recommended that you include the %postname% variable in the "
132
  "permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
133
  "in Custom Structure"
134
  msgstr ""
135
 
136
+ #: classes/Tools.php:919
137
+ msgid ""
138
+ "It is highly recommended to change or remove the default Wordpress Tagline. "
139
+ "<br />Go to Settings > General > Tagline"
140
+ msgstr ""
141
+
142
+ #: classes/Tools.php:925
143
  msgid "Great! We didn't find any issue in your site."
144
  msgstr ""
145
 
146
+ #: classes/Tools.php:1070
147
+ msgid "Just another WordPress site"
148
+ msgstr ""
149
+
150
+ #: config/config.php:43
151
+ msgid "Displays the date of the post/page once it's published"
152
+ msgstr ""
153
+
154
+ #: config/config.php:44
155
+ msgid "Adds the title of the post/page once it’s published"
156
+ msgstr ""
157
+
158
+ #: config/config.php:45
159
+ msgid "Displays the number of the current page (i.e. 1 of 6)"
160
+ msgstr ""
161
+
162
+ #: config/config.php:46
163
+ msgid "Adds the title of a page's parent page"
164
+ msgstr ""
165
+
166
+ #: config/config.php:47
167
+ msgid "Adds the site's name to the post description"
168
+ msgstr ""
169
+
170
+ #: config/config.php:48
171
+ msgid "Adds the tagline/description of your site"
172
+ msgstr ""
173
+
174
+ #: config/config.php:49
175
+ msgid ""
176
+ "Will display an excerpt from the post/page (if not customized, the excerpt "
177
+ "will be auto-generated)"
178
+ msgstr ""
179
+
180
+ #: config/config.php:50
181
+ msgid "Will display an excerpt from the post/page (no auto-generation)"
182
+ msgstr ""
183
+
184
+ #: config/config.php:51
185
+ msgid "Adds the current tag(s) to the post description"
186
+ msgstr ""
187
+
188
+ #: config/config.php:52
189
+ msgid "Adds the post category (several categories will be comma-separated)"
190
+ msgstr ""
191
+
192
+ #: config/config.php:53
193
+ msgid "Adds the primary category of the post/page"
194
+ msgstr ""
195
+
196
+ #: config/config.php:54
197
+ msgid "Adds the category description to the post description"
198
+ msgstr ""
199
+
200
+ #: config/config.php:55
201
+ msgid "Adds the tag description"
202
+ msgstr ""
203
+
204
+ #: config/config.php:56
205
+ msgid "Adds the term description"
206
+ msgstr ""
207
+
208
+ #: config/config.php:57
209
+ msgid "Adds the term name"
210
+ msgstr ""
211
+
212
+ #: config/config.php:58
213
+ msgid "Displays the search phrase (if it appears in the post)"
214
+ msgstr ""
215
+
216
+ #: config/config.php:59
217
+ msgid "Places a separator between the elements of the post description"
218
+ msgstr ""
219
+
220
+ #: config/config.php:60
221
+ msgid "Replaces the publication date of a post/page with the modified one"
222
+ msgstr ""
223
+
224
+ #: config/config.php:61
225
+ msgid "Displays the author's nicename"
226
+ msgstr ""
227
+
228
+ #: config/config.php:62
229
+ msgid "Adds the author's biographical info to the post description"
230
+ msgstr ""
231
+
232
+ #: config/config.php:63
233
+ msgid "Displays the current date of a post/page"
234
+ msgstr ""
235
+
236
+ #: config/config.php:64
237
+ msgid "Adds the post's keyword to the post description"
238
+ msgstr ""
239
+
240
+ #: controllers/Api.php:40
241
+ msgid "Connection expired. Please try again"
242
+ msgstr ""
243
+
244
+ #: controllers/Api.php:54 controllers/Api.php:57 controllers/Api.php:60
245
+ msgid "Author not found"
246
+ msgstr ""
247
+
248
+ #: controllers/FrontMenu.php:32
249
+ msgid "You don't have enough pemission to edit this article"
250
+ msgstr ""
251
+
252
+ #: controllers/Menu.php:44 controllers/Menu.php:55
253
+ #, php-format
254
+ msgid ""
255
+ "Good news, %s is integrated in Squirrly SEO now and you don't have to run 2 "
256
+ "plugins anymore"
257
+ msgstr ""
258
+
259
+ #: controllers/Menu.php:99
260
  msgid "See Your Rank on Google"
261
  msgstr ""
262
 
263
+ #: controllers/Menu.php:151
264
+ msgid "Custom SEO"
265
+ msgstr ""
266
+
267
+ #: controllers/Menu.php:194
268
  msgid ""
269
  "Check out the Squirrly Analytics section. <a href=\"admin.php?page=sq_posts"
270
  "\" title=\"Squirrly Analytics\">Click here</a>"
271
  msgstr ""
272
 
273
+ #: controllers/Menu.php:213
274
+ msgid " Dashboard"
275
  msgstr ""
276
 
277
+ #: controllers/Menu.php:214
278
  msgid "First Step"
279
  msgstr ""
280
 
281
+ #: controllers/Menu.php:214
282
  msgid "Dashboard"
283
  msgstr ""
284
 
285
+ #: controllers/Menu.php:223
286
+ msgid " Performance Analytics"
287
  msgstr ""
288
 
289
+ #: controllers/Menu.php:224
290
  msgid "Performance <br />Analytics"
291
  msgstr ""
292
 
293
+ #: controllers/Menu.php:232
294
+ msgid " Keyword Research"
295
  msgstr ""
296
 
297
+ #: controllers/Menu.php:233
298
+ msgid "Keyword Research"
299
+ msgstr ""
300
+
301
+ #: controllers/Menu.php:240
302
+ msgid " Live Assistant"
303
+ msgstr ""
304
+
305
+ #: controllers/Menu.php:241
306
+ msgid "Live Assistant"
307
+ msgstr ""
308
+
309
+ #: controllers/Menu.php:247
310
+ msgid " Copywriting"
311
+ msgstr ""
312
+
313
+ #: controllers/Menu.php:248
314
+ msgid "Copywriting"
315
+ msgstr ""
316
+
317
+ #: controllers/Menu.php:256
318
+ msgid " SEO Audit"
319
+ msgstr ""
320
+
321
+ #: controllers/Menu.php:257
322
+ msgid "Site Audit"
323
+ msgstr ""
324
+
325
+ #: controllers/Menu.php:265
326
+ msgid " SEO Settings"
327
+ msgstr ""
328
+
329
+ #: controllers/Menu.php:266 view/BlockToolbar.php:4
330
+ msgid "SEO Settings"
331
+ msgstr ""
332
+
333
+ #: controllers/Menu.php:274
334
+ msgid " Advanced Settings"
335
+ msgstr ""
336
+
337
+ #: controllers/Menu.php:275 view/BlockSettings.php:22
338
+ msgid "Advanced Settings"
339
  msgstr ""
340
 
341
+ #: controllers/Menu.php:282
342
+ msgid " SEO Patterns"
343
  msgstr ""
344
 
345
+ #: controllers/Menu.php:283 view/BlockToolbar.php:14
346
+ msgid "Patterns"
347
  msgstr ""
348
 
349
+ #: controllers/Menu.php:290
350
+ msgid " Account Info"
351
  msgstr ""
352
 
353
+ #: controllers/Menu.php:291
354
  msgid "Account Info"
355
  msgstr ""
356
 
357
+ #: controllers/Menu.php:298
358
+ msgid " Support"
359
+ msgstr ""
360
+
361
+ # @ squirrly-seo
362
+ #: controllers/Menu.php:299 view/BlockSupport.php:18
363
+ msgid "Support"
364
+ msgstr "Support"
365
+
366
+ #: controllers/Menu.php:306
367
  msgid "Become an Affiliate with "
368
  msgstr ""
369
 
370
+ #: controllers/Menu.php:307
371
+ msgid "Become an Affiliate"
372
+ msgstr ""
373
+
374
+ #: controllers/Menu.php:315
375
+ msgid "Import SEO "
376
+ msgstr ""
377
+
378
+ #: controllers/Menu.php:316 view/BlockImport.php:77
379
+ msgid "Import SEO"
380
+ msgstr ""
381
+
382
+ #: controllers/Menu.php:343
383
+ #, php-format
384
+ msgid "Go back and complete the Squirrly Tasks for today %sContinue%s"
385
+ msgstr ""
386
+
387
+ #: controllers/Menu.php:355
388
+ msgid "SEO Snippet"
389
  msgstr ""
390
 
391
+ #: controllers/PostsList.php:102
392
  msgid "Squirrly"
393
  msgstr ""
394
 
395
+ #: controllers/PostsList.php:129
396
  msgid "Custom description: "
397
  msgstr ""
398
 
399
+ #: controllers/PostsList.php:129
400
  msgid "Custom title: "
401
  msgstr ""
402
 
403
+ #: controllers/PostsList.php:167
404
  msgid "SEO Analytics, by Squirrly"
405
  msgstr ""
406
 
407
+ #: controllers/PostsList.php:168 view/Blockseo.php:10
408
  msgid "Update"
409
  msgstr ""
410
 
411
+ #: controllers/PostsList.php:172
412
  msgid "Not Public"
413
  msgstr ""
414
 
415
+ #: controllers/PostsList.php:173
416
  msgid "Could not process"
417
  msgstr ""
418
 
419
+ #: controllers/PostsList.php:328 controllers/PostsList.php:346
420
+ #, php-format
421
+ msgid "Not in top 100 for: %s"
 
 
 
 
422
  msgstr ""
423
 
424
+ #: controllers/PostsList.php:330 controllers/PostsList.php:348
425
+ msgid "The URL is Indexed"
426
  msgstr ""
427
 
428
+ #: controllers/PostsList.php:332 controllers/PostsList.php:350
429
+ #: models/BlockPostsAnalytics.php:438
430
  #, php-format
431
  msgid "%s"
432
  msgstr ""
433
 
434
+ #: core/BlockAffiliate.php:38
435
  #, php-format
436
  msgid "Error: %s"
437
  msgstr ""
438
 
439
+ #: core/BlockAffiliate.php:41
440
  msgid "An error occured. Mabe a network error :("
441
  msgstr ""
442
 
443
+ #: core/BlockImport.php:32
444
+ msgid "All the Plugin settings were imported successfuly!"
445
+ msgstr ""
446
+
447
+ #: core/BlockImport.php:34
448
+ msgid "No settings found for this plugin/theme."
449
+ msgstr ""
450
+
451
+ #: core/BlockImport.php:56
452
+ #, php-format
453
+ msgid ""
454
+ "%s SEO records were imported successfuly! You can now deactivate the %s "
455
+ "plugin"
456
+ msgstr ""
457
+
458
+ #: core/BlockImport.php:58
459
+ #, php-format
460
+ msgid ""
461
+ "There are no SEO records with this plugin. You can now deactivate the %s "
462
+ "plugin"
463
+ msgstr ""
464
+
465
+ #: core/BlockSettingsSeo.php:26
466
+ #, php-format
467
+ msgid "You can now import into Squirrly SEO all the SEO Settings from %s"
468
+ msgstr ""
469
+
470
+ #: core/BlockSettingsSeo.php:35 core/Blockseo.php:13
471
  msgid "Too short"
472
  msgstr ""
473
 
474
+ #: core/BlockSettingsSeo.php:36 core/Blockseo.php:14
 
475
  msgid "Too long"
476
  msgstr ""
477
 
478
+ #: core/BlockSettingsSeo.php:63
479
+ msgid "You don't have enough pemission to activate this feature"
480
+ msgstr ""
481
+
482
+ #: core/BlockSettingsSeo.php:435
483
  msgid "Great! The backup is restored."
484
  msgstr ""
485
 
486
+ #: core/BlockSettingsSeo.php:437 core/BlockSettingsSeo.php:440
487
+ #: core/BlockSettingsSeo.php:485 core/BlockSettingsSeo.php:488
488
  msgid "Error! The backup is not valid."
489
  msgstr ""
490
 
491
+ #: core/BlockSettingsSeo.php:443 core/BlockSettingsSeo.php:491
492
  msgid "Error! You have to enter a previous saved backup file."
493
  msgstr ""
494
 
495
+ #: core/BlockSettingsSeo.php:482
496
+ msgid "Great! The SEO backup is restored."
497
+ msgstr ""
498
+
499
+ #: core/BlockSettingsSeo.php:498
500
+ msgid "Great! Squirrly Data Settings is up to date now."
501
+ msgstr ""
502
+
503
  # @ squirrly-seo
504
+ #: core/BlockSupport.php:22
505
  msgid "Plugin Feedback"
506
  msgstr "Plugin Feedback"
507
 
508
  # @ squirrly-seo
509
+ #: core/BlockSupport.php:58
510
  msgid "Thank you for your feedback"
511
  msgstr "Vielen Dank für Ihre Feedback"
512
 
513
  # @ squirrly-seo
514
+ #: core/BlockSupport.php:61 core/BlockSupport.php:99
 
515
  msgid "Could not send the email..."
516
  msgstr "Konnte E-Mail nicht senden ..."
517
 
518
  # @ squirrly-seo
519
+ #: core/BlockSupport.php:65 core/BlockSupport.php:103
 
520
  msgid "No message."
521
  msgstr "Keine Nachricht."
522
 
523
  # @ squirrly-seo
524
+ #: core/BlockSupport.php:85
525
  msgid "Plugin Support"
526
  msgstr "Plugin Support"
527
 
528
+ #: core/BlockSupport.php:96
529
  msgid "Message sent. Thank you!"
530
  msgstr ""
531
 
532
  # @ squirrly-seo
533
+ #: core/Blocklogin.php:81
534
  #, php-format
535
  msgid ""
536
  "We found your email, so it means you already have a Squirrly.co account. "
541
  "Sie sich mit Ihrer Squirrly-ID ein. Falls Sie Ihr Passwort vergessen haben, "
542
  "klicken Sie %shier%s"
543
 
544
+ #: core/Blocklogin.php:86
545
  msgid ""
546
  "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
547
  "webmaster) and request them to add http://api.squirrly.co/ to their IP "
549
  msgstr ""
550
 
551
  # @ squirrly-seo
552
+ #: core/Blocklogin.php:89
553
  #, php-format
554
  msgid ""
555
  "Could not send your informations to squirrly. Please register %smanually%s."
558
  "%smanually%s."
559
 
560
  # @ squirrly-seo
561
+ #: core/Blocklogin.php:129
562
  msgid "Wrong email or password!"
563
  msgstr "Benutzername oder Passwort falsch!"
564
 
565
  # @ squirrly-seo
566
+ #: core/Blocklogin.php:132
567
  msgid "You can use this account only for the URL you registered first!"
568
  msgstr ""
569
  "Dieses Konto können Sie nur für die URL benutzen, die Sie zuerst registriert "
570
  "haben!"
571
 
572
  # @ squirrly-seo
573
+ #: core/Blocklogin.php:137
574
  msgid "An error occured."
575
  msgstr "Ein Fehler ist aufgetreten."
576
 
577
  # @ squirrly-seo
578
+ #: core/Blocklogin.php:139
579
  msgid "Both fields are required."
580
  msgstr "Beide Felder sind Pflichtfelder."
581
 
582
+ #: core/Blockseo.php:15
583
+ msgid "snippet"
584
+ msgstr ""
585
+
586
+ # @ squirrly-seo
587
+ #: core/Loading.php:21
588
+ msgid ""
589
+ "For Squirrly to work properly you have to use a higher version of Internet "
590
+ "Explorer. <br /> We recommend you to use Chrome or Mozilla."
591
+ msgstr ""
592
+ "Damit Squirrly ordnungsgemäß funktioniert, müssen Sie eine höhere Version "
593
+ "von Internet Explorer verwenden. <br /> Wir empfehlen, Chrome oder Mozilla."
594
+
595
+ #: core/Loading.php:47
596
  msgid "Recent discussions:"
597
  msgstr "Bisherige Diskussionen:"
598
 
599
+ #: core/Loading.php:47
600
+ msgid "SEO Search Volume:"
601
+ msgstr ""
 
602
 
603
  # @ squirrly-seo
604
+ #: core/Loading.php:47
605
  msgid "Competition:"
606
  msgstr "Wettbewerb:"
607
 
608
  # @ squirrly-seo
609
+ #: core/Loading.php:47
610
  msgid "Trend:"
611
  msgstr "Trend:"
612
 
613
  # @ squirrly-seo
614
+ #: core/Loading.php:48
615
+ msgid "Keyword:"
616
+ msgstr "Schlüsselwort:"
617
+
618
+ # @ squirrly-seo
619
+ #: core/Loading.php:49
620
  msgid "date"
621
  msgstr "Datum"
622
 
623
  # @ squirrly-seo
624
+ #: core/Loading.php:50
625
  msgid "Read it!"
626
  msgstr "Lesen!"
627
 
628
  # @ squirrly-seo
629
+ #: core/Loading.php:51
630
  msgid "Insert it!"
631
  msgstr "Einfügen!"
632
 
633
  # @ squirrly-seo
634
+ #: core/Loading.php:52
635
  msgid "Reference"
636
  msgstr "Referenz"
637
 
638
  # @ squirrly-seo
639
+ #: core/Loading.php:53
640
  msgid "Insert as box"
641
  msgstr "Als Box einfügen"
642
 
643
+ #: core/Loading.php:54
644
+ msgid "Insert Link"
645
+ msgstr ""
646
+
647
  # @ squirrly-seo
648
+ #: core/Loading.php:55
649
  msgid "Not relevant?"
650
  msgstr "Nicht relevant?"
651
 
652
  # @ squirrly-seo
653
+ #: core/Loading.php:56
654
  msgid "Insert in your article"
655
  msgstr "In Artikel einfügen"
656
 
657
+ #: core/Loading.php:57
658
+ msgid ":( An error occurred while processing your request. Please try again"
659
+ msgstr ""
 
 
 
 
 
 
660
 
661
  # @ squirrly-seo
662
+ #: core/Loading.php:58
663
  msgid "No results found!"
664
  msgstr "Keine Ergebnisse gefunden!"
665
 
666
+ #: core/Loading.php:59
 
 
 
 
 
667
  msgid "Enter one more word to find relevant results"
668
  msgstr ""
669
 
670
  # @ squirrly-seo
671
+ #: core/Loading.php:60
672
  msgid "Takes too long to check this keyword ..."
673
  msgstr "Dauert zu lange, um dieses Schlüsselwort zu überprüfen ..."
674
 
675
  # @ squirrly-seo
676
+ #: core/Loading.php:61
677
  msgid "Do a research!"
678
  msgstr "Erweiterte Suche!"
679
 
680
  # @ squirrly-seo
681
+ #: core/Loading.php:62
682
  msgid "Do more research!"
683
  msgstr "Erweiterte Suche!"
684
 
685
+ #: core/Loading.php:63
686
  #, php-format
687
  msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
688
  msgstr ""
689
 
690
+ #: core/Loading.php:64
691
  msgid "Has creative commons attributes"
692
  msgstr ""
693
 
694
+ #: core/Loading.php:65
695
  msgid "No known copyright restrictions"
696
  msgstr ""
697
 
698
+ #: core/Loading.php:66
699
+ msgid ""
700
+ "You haven`t used Squirrly SEO to optimize your article. Do you want to "
701
+ "optimize for a keyword before publishing?"
702
  msgstr ""
703
+ "You haven`t used Squirrly SEO to optimize your article. Do you want to "
704
+ "optimize for a keyword before publishing?"
705
 
706
+ #: core/Loading.php:67
707
+ msgid "Keyword Research limit exceeded"
708
  msgstr ""
709
 
710
+ #: core/Loading.php:68
711
+ msgid "Your Subscription has Expired"
712
  msgstr ""
713
 
714
+ #: core/Loading.php:69
715
+ msgid "Add 20 Keyword Researches"
716
  msgstr ""
717
 
718
+ #: core/Loading.php:70
719
+ msgid "There are no keywords saved in briefcase yet"
720
  msgstr ""
721
 
722
+ #: core/Loading.php:71
723
+ #, php-format
724
+ msgid "Congratulations! Your article is 100% optimized!"
725
  msgstr ""
726
 
727
+ #: core/Loading.php:72
728
+ #, php-format
729
+ msgid "appears too many times. Try to remove %s of them"
730
  msgstr ""
731
 
732
+ #: core/Loading.php:73
733
+ #, php-format
734
+ msgid "write %s more words"
735
  msgstr ""
736
 
737
+ #: core/Loading.php:74
738
+ #, php-format
739
+ msgid "Add the keyword in the %s of your article"
740
  msgstr ""
741
 
742
+ #: core/Loading.php:75
743
+ msgid "Click to keep the highlight on"
 
 
 
744
  msgstr ""
 
 
745
 
746
+ #: core/Loading.php:76
747
+ msgid "introduction"
748
+ msgstr ""
749
+
750
+ #: core/Loading.php:77
751
+ #, php-format
752
+ msgid "Write more words after the %s keyword"
753
+ msgstr ""
754
+
755
+ #: core/Loading.php:78
756
+ msgid "or use synonyms"
757
+ msgstr ""
758
+
759
+ #: core/Loading.php:79
760
+ #, php-format
761
+ msgid "add %s more word(s)"
762
+ msgstr ""
763
+
764
+ #: core/Loading.php:80
765
+ #, php-format
766
+ msgid "or remove %s word(s)"
767
+ msgstr ""
768
+
769
+ #: core/Loading.php:81
770
+ #, php-format
771
+ msgid "add %s more keyword(s)"
772
  msgstr ""
 
 
773
 
774
+ #: core/Loading.php:82
775
+ #, php-format
776
+ msgid "write %s more words to start calculating"
777
+ msgstr ""
778
+
779
+ #: models/BlockPostsAnalytics.php:290
780
  msgctxt "column name"
781
  msgid "Title"
782
  msgstr ""
783
 
784
+ #: models/BlockPostsAnalytics.php:292
785
  msgid "Type"
786
  msgstr ""
787
 
788
+ #: models/BlockPostsAnalytics.php:295 view/FrontMenu.php:364
789
  msgid "Author"
790
  msgstr ""
791
 
792
+ #: models/BlockPostsAnalytics.php:298
793
  msgid "Keywords"
794
  msgstr ""
795
 
796
+ #: models/BlockPostsAnalytics.php:300
797
  #, php-format
798
  msgid "Google.%s Position"
799
  msgstr ""
800
 
801
+ #: models/BlockPostsAnalytics.php:303 view/BlockAudit.php:48
802
  msgid "Date"
803
  msgstr ""
804
 
805
+ #: models/BlockPostsAnalytics.php:317
806
  msgid "Reset Filters"
807
  msgstr ""
808
 
809
+ #: models/BlockPostsAnalytics.php:322
810
+ msgid "Search Posts"
811
+ msgstr ""
812
+
813
+ #: models/BlockPostsAnalytics.php:390
814
  #, php-format
815
  msgid "Edit &#8220;%s&#8221;"
816
  msgstr ""
817
 
818
+ #: models/BlockPostsAnalytics.php:393
819
  msgid "Edit this item"
820
  msgstr ""
821
 
822
+ #: models/BlockPostsAnalytics.php:393
823
  msgid "Edit"
824
  msgstr ""
825
 
826
+ #: models/BlockPostsAnalytics.php:398
827
  #, php-format
828
  msgid "Preview &#8220;%s&#8221;"
829
  msgstr ""
830
 
831
+ #: models/BlockPostsAnalytics.php:398
832
  msgid "Preview"
833
  msgstr ""
834
 
835
+ #: models/BlockPostsAnalytics.php:400
836
  #, php-format
837
  msgid "View &#8220;%s&#8221;"
838
  msgstr ""
839
 
840
+ #: models/BlockPostsAnalytics.php:400
841
  msgid "View"
842
  msgstr ""
843
 
844
+ #: models/BlockPostsAnalytics.php:422
845
  msgid "No Tags"
846
  msgstr ""
847
 
848
+ #: models/BlockPostsAnalytics.php:432
849
+ msgid "Could not receive data from google (Err: blocked IP)"
850
+ msgstr ""
851
+
852
+ #: models/BlockPostsAnalytics.php:434
853
+ msgid "Not in top 100 for: <br /> \""
854
+ msgstr ""
855
+
856
+ #: models/BlockPostsAnalytics.php:436
857
+ msgid "The URL is indexed"
858
+ msgstr ""
859
+
860
+ #: models/BlockPostsAnalytics.php:440
861
  msgid "Force recheck"
862
  msgstr ""
863
 
864
+ #: models/BlockPostsAnalytics.php:442
865
  msgid "Not yet verified"
866
  msgstr ""
867
 
868
+ #: models/BlockPostsAnalytics.php:442
869
  msgid "Check now"
870
  msgstr ""
871
 
872
+ #: models/BlockPostsAnalytics.php:445
873
+ #, php-format
874
+ msgid "Enable Ranking in %sAdvanced Settings%s"
875
+ msgstr ""
876
+
877
+ #: models/BlockPostsAnalytics.php:457
878
  msgid "Unpublished"
879
  msgstr ""
880
 
881
+ #: models/BlockPostsAnalytics.php:466
882
  #, php-format
883
  msgid "%s ago"
884
  msgstr ""
885
 
886
+ #: models/BlockPostsAnalytics.php:468
887
  msgid "Y/m/d"
888
  msgstr ""
889
 
890
+ #: models/BlockPostsAnalytics.php:473
891
  msgid "Published"
892
  msgstr ""
893
 
894
+ #: models/BlockPostsAnalytics.php:476
895
  msgid "Missed schedule"
896
  msgstr ""
897
 
898
+ #: models/BlockPostsAnalytics.php:478
899
  msgid "Scheduled"
900
  msgstr ""
901
 
902
+ #: models/BlockPostsAnalytics.php:480
903
  msgid "Last Modified"
904
  msgstr ""
905
 
906
  # @ squirrly-seo
907
+ #: models/BlockSettingsSeo.php:71
908
  msgid "The code for Google Webmaster Tool is incorrect."
909
  msgstr "Der Code für Google Webmaster Tool ist falsch."
910
 
911
  # @ squirrly-seo
912
+ #: models/BlockSettingsSeo.php:98
913
  msgid "The code for Google Analytics is incorrect."
914
  msgstr "Der Code für Google Analytics ist falsch."
915
 
916
  # @ squirrly-seo
917
+ #: models/BlockSettingsSeo.php:144
918
  msgid "The code for Facebook is incorrect."
919
  msgstr "Der Code für Facebook ist falsch."
920
 
921
+ #: models/BlockSettingsSeo.php:169
922
  msgid "The code for Pinterest is incorrect."
923
  msgstr ""
924
 
925
  # @ squirrly-seo
926
+ #: models/BlockSettingsSeo.php:194
927
  msgid "The code for Bing is incorrect."
928
  msgstr "Der Code für Bing ist falsch."
929
 
930
+ #: models/BlockSettingsSeo.php:320
 
 
 
 
931
  msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
932
  msgstr ""
933
 
934
  # @ squirrly-seo
935
+ #: models/BlockSettingsSeo.php:326
936
  msgid "GD error: The GD library must be installed on your server."
937
  msgstr "GD Fehler: Die GD-Bibliothek muss auf dem Server installiert werden."
938
 
939
  # @ squirrly-seo
940
+ #: models/BlockSettingsSeo.php:332
941
  msgid "Delete error: Could not delete the old favicon."
942
  msgstr "Lösch Fehler: Konnte das alte Favicon nicht löschen."
943
 
944
  # @ squirrly-seo
945
+ #: models/BlockSettingsSeo.php:339
946
  msgid "Upload error: Could not upload the favicon."
947
  msgstr "Upload Fehler: Konnte das Favicon nicht hochladen."
948
 
949
  # @ squirrly-seo
950
+ #: models/BlockSettingsSeo.php:345
951
  msgid "Permission error: Could not change the favicon permissions."
952
  msgstr "Permission Fehler: Konnte Favicon-Berechtigungen nicht ändern."
953
 
954
  # @ squirrly-seo
955
+ #: models/BlockSettingsSeo.php:367
956
  msgid ""
957
  "ICO Error: Could not create the ICO from file. Try with another file type."
958
  msgstr ""
960
  "einem anderen Dateityp."
961
 
962
  # @ squirrly-seo
963
+ #: models/BlockSettingsSeo.php:386
964
  msgid "The favicon has been updated."
965
  msgstr "Das Favicon wurde aktualisiert."
966
 
 
 
 
 
 
 
 
 
 
 
 
967
  # @ default
968
+ #: models/Post.php:69
969
  msgid "Squirrly could not find any results for: "
970
  msgstr "Squirly hat keine Suchergebnisse gefunden für:"
971
 
972
+ #: models/Post.php:138
973
  msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
974
  msgstr ""
975
 
976
+ #: models/Post.php:139
977
  msgid ""
978
  "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
979
  "the HTML form."
980
  msgstr ""
981
 
982
+ #: models/Post.php:140
983
  msgid "The uploaded file was only partially uploaded."
984
  msgstr ""
985
 
986
+ #: models/Post.php:141
987
  msgid "No file was uploaded."
988
  msgstr ""
989
 
990
+ #: models/Post.php:143
991
  msgid "Missing a temporary folder."
992
  msgstr ""
993
 
994
+ #: models/Post.php:144
995
  msgid "Failed to write file to disk."
996
  msgstr ""
997
 
998
+ #: models/Post.php:145
999
  msgid "File upload stopped by extension."
1000
  msgstr ""
1001
 
1002
+ #: models/Post.php:162
1003
  msgid "Invalid form submission."
1004
  msgstr ""
1005
 
1006
+ #: models/Post.php:172
1007
  msgid "File is empty. Please upload something more substantial."
1008
  msgstr ""
1009
 
1010
+ #: models/Post.php:174
1011
  msgid ""
1012
  "File is empty. Please upload something more substantial. This error could "
1013
  "also be caused by uploads being disabled in your php.ini or by post_max_size "
1014
  "being defined as smaller than upload_max_filesize in php.ini."
1015
  msgstr ""
1016
 
1017
+ #: models/Post.php:180
1018
  msgid "Specified file failed upload test."
1019
  msgstr ""
1020
 
1021
+ #: models/Post.php:193
1022
  msgid "Sorry, this file type is not permitted for security reasons."
1023
  msgstr ""
1024
 
1025
+ #: models/Post.php:218
1026
  #, php-format
1027
  msgid "The uploaded file could not be moved to %s."
1028
  msgstr ""
1029
 
1030
+ #: models/PostsList.php:27
1031
  msgid "Optimized:"
1032
  msgstr ""
1033
 
1034
+ #: models/PostsList.php:28
1035
  msgid "See Analytics"
1036
  msgstr ""
1037
 
1038
+ #: models/PostsList.php:30
1039
  msgid "Optimize it with Squirrly to see the Analytics"
1040
  msgstr ""
1041
 
1042
+ #: models/PostsList.php:83
1043
  msgid "This post's current position in Google"
1044
  msgstr ""
1045
 
1046
+ #: models/PostsList.php:86
1047
  msgid "The total traffic for the last 30 days, for the current post"
1048
  msgstr ""
1049
 
1050
+ #: models/PostsList.php:89
1051
  msgid "The total number of shares on social media channels for this post"
1052
  msgstr ""
1053
 
1054
+ #: models/PostsList.php:92
1055
  msgid "The total authority for this post"
1056
  msgstr ""
1057
 
1058
+ #: models/PostsList.php:95
1059
  msgid "The total number of inbound links to this post"
1060
  msgstr ""
1061
 
1062
+ #: models/domain/Patterns.php:214
1063
+ msgid "Page"
1064
+ msgstr ""
1065
+
1066
+ #: models/domain/Patterns.php:215
1067
+ msgid "of"
1068
+ msgstr ""
1069
+
1070
+ #: models/services/Robots.php:13
1071
+ msgid "Squirrly SEO Robots"
1072
+ msgstr ""
1073
+
1074
+ #: models/services/Robots.php:16
1075
+ msgid ""
1076
+ "Your blog is not public. Please see Site Visibility on Settings > Reading."
1077
+ msgstr ""
1078
+
1079
+ #: models/services/Robots.php:31
1080
+ msgid "No Squirrly SEO Robots found."
1081
+ msgstr ""
1082
+
1083
  # @ squirrly-seo
1084
+ #: squirrly.php:63
1085
  msgid ""
1086
  "For Squirrly to work, the PHP version has to be equal or greater then 5.1"
1087
  msgstr ""
1088
  "Damit Squirrly funktioniert, muss die PHP-Version gleich oder größer als 5.1 "
1089
  "sein"
1090
 
1091
+ #: view/BlockAccount.php:7 view/BlockAffiliate.php:7 view/BlockAudit.php:7
1092
+ #: view/BlockDashboard.php:6 view/BlockImport.php:7
1093
+ #: view/BlockKeywordResearch.php:7 view/BlockPatterns.php:7
1094
+ #: view/BlockPostsAnalytics.php:7 view/BlockSettings.php:7
1095
+ #: view/BlockSettingsSeo.php:7
1096
+ msgid "Connect to Squirrly Data Cloud"
1097
+ msgstr ""
1098
+
1099
+ #: view/BlockAccount.php:13 view/BlockAffiliate.php:13 view/BlockAudit.php:13
1100
+ #: view/BlockDashboard.php:28 view/BlockImport.php:13
1101
+ #: view/BlockKeywordResearch.php:13 view/BlockPatterns.php:13
1102
+ #: view/BlockPostsAnalytics.php:13 view/BlockSettings.php:13
1103
+ #: view/BlockSettingsSeo.php:13 view/Blocklogin.php:38
1104
+ msgid "START HERE"
1105
+ msgstr ""
1106
+
1107
+ #: view/BlockAccount.php:23
1108
  msgid "Squirrly account information"
1109
  msgstr ""
1110
 
1111
+ #: view/BlockAccount.php:25 view/BlockAffiliate.php:23
1112
  msgid "Go to dashboard"
1113
  msgstr ""
1114
 
1115
+ #: view/BlockAccount.php:26
1116
+ msgid "See ALL of Your Activity so Far"
1117
+ msgstr ""
1118
+
1119
+ #: view/BlockAffiliate.php:21 view/BlockAffiliate.php:33
1120
+ msgid "Join our affiliate program"
1121
  msgstr ""
1122
 
1123
+ #: view/BlockAffiliate.php:34
1124
  #, php-format
1125
  msgid "%sHow I Started Making Money With the Squirrly Affiliate Program%s"
1126
  msgstr ""
1127
 
1128
+ #: view/BlockAffiliate.php:37
1129
  msgid "Affiliate Benefits"
1130
  msgstr ""
1131
 
1132
+ #: view/BlockAffiliate.php:42
1133
  #, php-format
1134
+ msgid "- Up to recurring 45%s commission"
1135
  msgstr ""
1136
 
1137
+ #: view/BlockAffiliate.php:47
1138
  msgid "- No cost"
1139
  msgstr ""
1140
 
1141
+ #: view/BlockAffiliate.php:52
1142
  msgid "- Monthly payments in your Paypal account"
1143
  msgstr ""
1144
 
1145
+ #: view/BlockAffiliate.php:61
1146
+ #, php-format
1147
+ msgid ""
1148
+ "Before joining our affiliate program, please read the Terms of Use %shttps://"
1149
+ "www.squirrly.co/terms/%s."
1150
+ msgstr ""
1151
+
1152
+ #: view/BlockAffiliate.php:69
1153
  msgid ""
1154
  "To redirect users to your site, just change \"squirrly.co\" with your domain."
1155
  msgstr ""
1156
 
1157
+ #: view/BlockAffiliate.php:72
1158
  msgid "Generate affiliate link"
1159
  msgstr ""
1160
 
1161
+ #: view/BlockAffiliate.php:81
1162
  msgid ""
1163
  "Your affiliate account is set and ready to go. Above you have the affiliate "
1164
  "link. "
1165
  msgstr ""
1166
 
1167
+ #: view/BlockAffiliate.php:83
1168
  #, php-format
1169
  msgid "Check your affiliate page: %sAffiliate page%s"
1170
  msgstr ""
1171
 
1172
+ #: view/BlockAffiliate.php:86
1173
  msgid ""
1174
  "After you connect to Squirrly you can begin to use your free Squirrly "
1175
  "affiliate link immediately!"
1176
  msgstr ""
1177
 
1178
+ #: view/BlockAffiliate.php:96
1179
  msgid "Squirrly banners you can use"
1180
  msgstr ""
1181
 
1182
+ #: view/BlockAffiliate.php:121
1183
  msgid "<< START HERE >>"
1184
  msgstr ""
1185
 
1186
+ #: view/BlockAnalytics.php:55
1187
  msgid "Moz Inbound Links"
1188
  msgstr ""
1189
 
1190
+ #: view/BlockAnalytics.php:62
1191
  msgid "Ahrefs Inbound Links"
1192
  msgstr ""
1193
 
1194
+ #: view/BlockAnalytics.php:74
1195
  msgid "Moz Authority"
1196
  msgstr ""
1197
 
1198
+ #: view/BlockAnalytics.php:79
1199
  msgid "Moz Rank"
1200
  msgstr ""
1201
 
1202
+ #: view/BlockAnalytics.php:86
1203
  msgid "Google Page Rank"
1204
  msgstr ""
1205
 
1206
+ #: view/BlockAnalytics.php:92
1207
  msgid "Ahrefs Rank"
1208
  msgstr ""
1209
 
1210
+ #: view/BlockAnalytics.php:108
1211
  msgid "Facebook shares"
1212
  msgstr ""
1213
 
1214
+ #: view/BlockAnalytics.php:113
1215
  msgid "Facebook likes"
1216
  msgstr ""
1217
 
1218
+ #: view/BlockAnalytics.php:118
1219
  msgid "Twitter shares"
1220
  msgstr ""
1221
 
1222
+ #: view/BlockAnalytics.php:123
1223
  msgid "Google+ shares"
1224
  msgstr ""
1225
 
1226
+ #: view/BlockAnalytics.php:128
1227
  msgid "LinkedIn Shares"
1228
  msgstr ""
1229
 
1230
+ #: view/BlockAnalytics.php:133
1231
  msgid "StumbleUpon shares"
1232
  msgstr ""
1233
 
1234
+ #: view/BlockAnalytics.php:138
1235
  msgid "Reddit shares"
1236
  msgstr ""
1237
 
1238
+ #: view/BlockAnalytics.php:170
1239
  msgid "Nicely done! Now you can focus on the other tasks"
1240
  msgstr ""
1241
 
1242
+ #: view/BlockAnalytics.php:170
1243
  msgid ""
1244
  "I know you can improve this. Please follow the documentation for a quicker "
1245
  "progress"
1246
  msgstr ""
1247
 
1248
+ #: view/BlockAnalytics.php:243
1249
  msgid "Visits"
1250
  msgstr ""
1251
 
1252
+ #: view/BlockAnalytics.php:256
1253
  msgid "Current: "
1254
  msgstr ""
1255
 
1256
+ #: view/BlockAnalytics.php:257
1257
  msgid "Lowest: "
1258
  msgstr ""
1259
 
1260
+ #: view/BlockAnalytics.php:258
1261
  msgid "Highest: "
1262
  msgstr ""
1263
 
1264
+ #: view/BlockAnalytics.php:262
1265
  msgid "last 30 days"
1266
  msgstr ""
1267
 
1268
+ #: view/BlockAudit.php:24
1269
+ msgid "Squirrly Site Audit"
1270
  msgstr ""
1271
 
1272
+ #: view/BlockAudit.php:31
1273
+ msgid "What the Audit offers:"
1274
  msgstr ""
1275
 
1276
+ #: view/BlockAudit.php:32
1277
+ #, php-format
1278
+ msgid ""
1279
+ "%sTracks all the areas of your Content Marketing Strategy:%s: Blogging, "
1280
+ "Traffic, SEO, Social Signals, Links, Authority. Every single week, you get a "
1281
+ "new report by email."
1282
  msgstr ""
1283
 
1284
+ #: view/BlockAudit.php:33
1285
+ #, php-format
1286
+ msgid ""
1287
+ "%sIt gives you professional advice on how to fix issues in those 6 areas%s. "
1288
+ "You can easily find out how to improve your content marketing strategy."
1289
  msgstr ""
1290
 
1291
+ #: view/BlockAudit.php:34
1292
+ #, php-format
1293
+ msgid ""
1294
+ "%sMonitors your progress, week by week.%s You’ll get to see if your site "
1295
+ "audit has improved since you last checked it. "
1296
  msgstr ""
1297
 
1298
+ #: view/BlockAudit.php:35
1299
+ #, php-format
1300
+ msgid "%sAnalyze any single article.%s See how it improves over time."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1301
  msgstr ""
1302
 
1303
+ #: view/BlockAudit.php:36
1304
  #, php-format
1305
+ msgid "%sLearn More About The Site Audit%s"
1306
  msgstr ""
1307
 
1308
+ #: view/BlockAudit.php:37
1309
  #, php-format
1310
+ msgid "%sRequest an Audit Now%s"
1311
  msgstr ""
1312
 
1313
+ #: view/BlockAudit.php:43
1314
+ msgid "\"Your current site audit score:"
 
1315
  msgstr ""
1316
 
1317
+ #: view/BlockAudit.php:47
1318
+ msgid "Score"
 
1319
  msgstr ""
1320
 
1321
+ #: view/BlockAudit.php:50
1322
+ msgid "See the Audit"
1323
  msgstr ""
1324
 
1325
+ #: view/BlockAudit.php:53
1326
+ msgid ""
1327
+ "It seems that no audit has been generated yet. You can request an audit down "
1328
+ "below. It should be ready in 5-10 minutes."
1329
  msgstr ""
1330
 
1331
+ #: view/BlockAudit.php:55
1332
+ msgid "Request an Audit Now"
 
1333
  msgstr ""
1334
 
1335
+ #: view/BlockAudit.php:62
1336
+ msgid "This is an example of a Site Audit"
 
1337
  msgstr ""
1338
 
1339
+ #: view/BlockCopyright.php:9
1340
+ msgid "Squirrly Copywriting Options"
1341
+ msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1342
 
1343
+ #: view/BlockCopyright.php:11
1344
+ msgid ""
1345
+ "Referencing other articles, ideas, and relevant Tweets adds value to your "
1346
+ "original content. This established journalist practice makes the content "
1347
+ "more trustworthy and helps readers shape a well-rounded understanding of the "
1348
+ "subject."
1349
+ msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1350
 
1351
+ #: view/BlockCopyright.php:20
1352
  msgid ""
1353
+ "The toolkit's intended purpose is to help you save time and find the best "
1354
+ "sources to include in your articles. "
1355
  msgstr ""
1356
 
1357
+ #: view/BlockCopyright.php:24
1358
  msgid ""
1359
+ "Squirrly has never encouraged and will never encourage users to create "
1360
+ "duplicate content."
1361
  msgstr ""
1362
 
1363
+ #: view/BlockCopyright.php:25
1364
+ msgid ""
1365
+ "Squirrly will not take responsibility if an user copies an entire article "
1366
+ "from another source."
1367
  msgstr ""
1368
 
1369
+ #: view/BlockCopyright.php:27
1370
+ msgid "Best Practices for Using the Inspiration Box from Squirrly: "
1371
  msgstr ""
1372
 
1373
+ #: view/BlockCopyright.php:31
1374
  msgid ""
1375
+ "Focus on creating original content. Citing sources should complement your "
1376
+ "original ideas"
1377
  msgstr ""
1378
 
1379
+ #: view/BlockCopyright.php:32
1380
+ msgid "Try to limit yourself to 2 or 3 quotes per article"
 
 
1381
  msgstr ""
1382
 
1383
+ #: view/BlockCopyright.php:33
1384
+ msgid "Always include a link to your sources"
1385
  msgstr ""
1386
 
1387
+ #: view/BlockCopyright.php:39 view/BlockCopyright.php:50
1388
+ msgid "Use Squirrly's Inspiration box"
 
1389
  msgstr ""
1390
 
1391
+ #: view/BlockCopyright.php:42 view/BlockCopyright.php:47
1392
  msgid ""
1393
+ "I've read and understood how to correctly use the Inspiration Box from "
1394
+ "Squirrly."
1395
  msgstr ""
1396
 
1397
+ #: view/BlockCustomerService.php:5
1398
+ msgid "Squirrly Customer Service"
1399
  msgstr ""
1400
 
1401
+ #: view/BlockCustomerService.php:12
1402
+ msgid "Support Channels"
1403
  msgstr ""
1404
 
1405
+ #: view/BlockCustomerService.php:13
1406
+ #, php-format
1407
+ msgid ""
1408
+ "%sHowto.squirrly.co%s > Knowledge Base. Find out how to get the most out of "
1409
+ "Squirrly SEO"
1410
  msgstr ""
1411
 
1412
+ #: view/BlockCustomerService.php:14
1413
+ #, php-format
1414
+ msgid ""
1415
+ "%sPlugin.squirrly.co%s >> Case studies, ideas on how to better use Squirrly "
1416
+ "SEO for Content Marketing"
1417
  msgstr ""
1418
 
1419
+ #: view/BlockCustomerService.php:15
1420
+ #, php-format
1421
+ msgid ""
1422
+ "%sFacebook page%s >> You can send us your support requests in private "
1423
+ "messages"
1424
  msgstr ""
1425
 
1426
+ #: view/BlockCustomerService.php:16
1427
+ #, php-format
1428
+ msgid "%sSupport Community%s >> Join us on Google Plus"
1429
  msgstr ""
1430
 
1431
+ #: view/BlockCustomerService.php:17
1432
+ #, php-format
1433
+ msgid "%sLive Chat%s >> on Youtube. Thursday 4 PM"
1434
  msgstr ""
1435
 
1436
+ #: view/BlockCustomerService.php:18
1437
+ #, php-format
1438
+ msgid "%sNew Lessons%s >> Mon. and Tue. on Twitter"
1439
  msgstr ""
1440
 
1441
+ #: view/BlockCustomerService.php:19
1442
+ #, php-format
1443
+ msgid "%sEmail Support%s >> 8 AM to 4 PM (London Time): Mon-Fri.."
1444
  msgstr ""
1445
 
1446
+ # @ squirrly-seo
1447
+ #: view/BlockCustomerService.php:25 view/BlockSupport.php:21
1448
+ msgid "Need Help with Squirrly SEO?"
1449
+ msgstr "Brauchen Sie Hilfe mit Squirrly SEO?"
1450
 
1451
+ # @ squirrly-seo
1452
+ #: view/BlockCustomerService.php:33 view/BlockSupport.php:27
1453
+ msgid "Send Question"
1454
+ msgstr "Senden Sie Ihre Frage"
1455
 
1456
+ #: view/BlockDashboard.php:11
1457
+ msgid "Restore Squirrly Settings"
1458
  msgstr ""
1459
 
1460
+ #: view/BlockDashboard.php:16 view/BlockImport.php:110
1461
+ msgid "Upload the file with the saved Squirrly Settings"
1462
  msgstr ""
1463
 
1464
+ #: view/BlockDashboard.php:21 view/BlockImport.php:115
1465
+ #: view/BlockImport.php:137
1466
+ msgid "Restore Backup"
1467
  msgstr ""
1468
 
1469
+ #: view/BlockDashboard.php:27
1470
+ msgid "Connect to Squirrly and start optimizing your site"
1471
  msgstr ""
1472
 
1473
+ #: view/BlockDashboard.php:35
1474
+ msgid "Squirrly dashboard"
1475
  msgstr ""
1476
 
1477
+ #: view/BlockDashboard.php:44
1478
+ #, php-format
1479
+ msgid ""
1480
+ "%sHelp Center%s - learn more about Squirrly SEO features and unhinge your "
1481
+ "SEO potential"
1482
  msgstr ""
1483
 
1484
+ #: view/BlockDashboard.php:49
1485
+ msgid "Now with a fresh one right out of our Squirrly Labs!"
1486
  msgstr ""
1487
 
1488
+ #: view/BlockDashboard.php:52
1489
+ msgid "Get It Here"
1490
  msgstr ""
1491
 
1492
+ #: view/BlockDashboard.php:128
1493
+ msgid "Next Feature"
1494
  msgstr ""
1495
 
1496
+ #: view/BlockDashboard.php:129
1497
+ msgid "Previous Feature"
1498
  msgstr ""
1499
 
1500
+ #: view/BlockImport.php:22 view/BlockPatterns.php:22
1501
+ msgid "SEO Patterns"
1502
  msgstr ""
1503
 
1504
+ #: view/BlockImport.php:34
1505
+ msgid "Import SEO settings from other SEO plugins or themes"
1506
  msgstr ""
1507
 
1508
+ #: view/BlockImport.php:35
1509
+ msgid ""
1510
+ "If you were already using an SEO plugin, then you can import all the SEO "
1511
+ "settings in Squirrly. Just follow the steps presented on the right side."
1512
  msgstr ""
1513
 
1514
+ #: view/BlockImport.php:42
1515
+ msgid "Select the plugin or theme you want to import the Settings from."
1516
  msgstr ""
1517
 
1518
+ #: view/BlockImport.php:56
1519
+ msgid "Import Settings"
1520
  msgstr ""
1521
 
1522
+ #: view/BlockImport.php:58 view/BlockImport.php:79
1523
+ msgid "We couldn't find any SEO plugin or theme to import from."
1524
  msgstr ""
1525
 
1526
+ #: view/BlockImport.php:65
1527
+ msgid "Select the plugin or theme you want to import the SEO settings from."
1528
  msgstr ""
1529
 
1530
+ #: view/BlockImport.php:86
1531
+ msgid ""
1532
+ "Note! If you import the SEO settings from other plugins or themes, you will "
1533
+ "lose all the settings that you had in Squirrly SEO. Make sure you backup "
1534
+ "your settings from the panel below before you do this. "
1535
  msgstr ""
1536
 
1537
+ #: view/BlockImport.php:91
1538
+ msgid "Backup & Restore Squirrly SEO Settings"
1539
  msgstr ""
1540
 
1541
+ #: view/BlockImport.php:92
1542
+ msgid ""
1543
+ "You can now download your Squirrly settings in an sql file before you go "
1544
+ "ahead and import the SEO settings from another plugin. That way, you can "
1545
+ "always go back to your Squirrly settings. "
1546
  msgstr ""
1547
 
1548
+ #: view/BlockImport.php:99
1549
+ msgid "Backup & Restore Squirrly Settings"
1550
  msgstr ""
1551
 
1552
+ #: view/BlockImport.php:103
1553
+ msgid "Backup Settings"
1554
  msgstr ""
1555
 
1556
+ #: view/BlockImport.php:104
1557
+ msgid "Restore Settings"
1558
  msgstr ""
1559
 
1560
+ #: view/BlockImport.php:115 view/BlockImport.php:137
1561
+ msgid "Are you sure you want to restore your settings?"
1562
  msgstr ""
1563
 
1564
+ #: view/BlockImport.php:120
1565
+ msgid "Backup & Restore all the pages optimized with Squirrly SEO"
1566
  msgstr ""
1567
 
1568
+ #: view/BlockImport.php:124
1569
+ msgid "Backup SEO"
1570
  msgstr ""
1571
 
1572
+ #: view/BlockImport.php:125
1573
+ msgid "Restore SEO"
1574
  msgstr ""
1575
 
1576
+ #: view/BlockImport.php:131
1577
+ msgid "Upload the file with the saved Squirrly SEO SQL file"
1578
  msgstr ""
1579
 
1580
+ #: view/BlockImport.php:152
1581
+ msgid "Click to reset all the saved setting to default."
1582
  msgstr ""
1583
 
1584
+ #: view/BlockImport.php:156
1585
+ msgid "Are you sure you want to remove all the saved settings?"
1586
  msgstr ""
1587
 
1588
+ #: view/BlockImport.php:156
1589
+ msgid "Reset Settings"
1590
  msgstr ""
1591
 
1592
+ #: view/BlockImport.php:162
1593
+ msgid ""
1594
+ "Note! Make sure you backup your data first in case you change your mind."
1595
  msgstr ""
1596
 
1597
+ # @ squirrly-seo
1598
+ #: view/BlockKeywordResearch.php:27
1599
+ msgid "Squirrly Keyword Research"
1600
+ msgstr "Squirrly Erweiterte Suche!"
1601
 
1602
+ #: view/BlockLiveAssistant.php:9 view/Blockseo.php:7
1603
+ msgid "Squirrly Live Assistant"
1604
  msgstr ""
1605
 
1606
+ #: view/BlockLiveAssistant.php:11
1607
+ #, php-format
1608
+ msgid ""
1609
+ "Using the Live Assistant from Squirrly SEO is like having a consultant "
1610
+ "sitting right next to you. It helps you get a 100% optimized page for both "
1611
+ "Humans and Search Engines."
1612
  msgstr ""
1613
 
1614
+ #: view/BlockLiveAssistant.php:20
1615
+ msgid ""
1616
+ "You just have to type in the keyword you want the page to be optimized for."
1617
  msgstr ""
1618
 
1619
+ #: view/BlockLiveAssistant.php:25
1620
+ msgid "Use Squirrly Live Assistant"
1621
  msgstr ""
1622
 
1623
+ #: view/BlockPatterns.php:36
1624
+ msgid ""
1625
+ "Control how post types are displayed on your site and within search engine "
1626
+ "results and social media feeds."
1627
  msgstr ""
1628
 
1629
+ #: view/BlockPatterns.php:37
1630
+ msgid ""
1631
+ "In Squirrly, each post type in your site comes with a predefined posting "
1632
+ "pattern when displayed onto your website. However, based on your site's "
1633
+ "purpose and needs, you can also decide what information these patterns will "
1634
+ "include."
1635
  msgstr ""
1636
 
1637
+ #: view/BlockPatterns.php:38
1638
+ msgid ""
1639
+ "Once you set up a pattern for a particular post type, only the content "
1640
+ "required by your custom sequence will be displayed."
1641
  msgstr ""
1642
 
1643
+ #: view/BlockPatterns.php:39
1644
+ #, php-format
1645
+ msgid ""
1646
+ "Squirrly lets you see how the customized patterns will apply when posts/"
1647
+ "pages are shared across social media or search engine feeds. You just need "
1648
+ "to go to the %sSquirrly SEO Snippet%s box, press <strong>Edit Snippet</"
1649
+ "strong> and you'll get a live preview after you customize the meta "
1650
+ "information."
1651
  msgstr ""
1652
 
1653
+ #: view/BlockPatterns.php:43
1654
+ msgid "Set the custom patterns for each post type"
1655
  msgstr ""
1656
 
1657
+ #: view/BlockPatterns.php:51
1658
+ msgid "+ Add Post Type"
1659
  msgstr ""
1660
 
1661
+ #: view/BlockPatterns.php:51
1662
+ msgid "Add a post type from your Wordpress website"
1663
  msgstr ""
1664
 
1665
+ #: view/BlockPatterns.php:54
1666
+ msgid "Add Post Type"
1667
  msgstr ""
1668
 
1669
+ #: view/BlockPatterns.php:71
1670
+ msgid "Add"
1671
  msgstr ""
1672
 
1673
+ #: view/BlockPatterns.php:81
1674
+ #, php-format
1675
+ msgid "Are you sure you want to remove the post type: %s"
1676
  msgstr ""
1677
 
1678
+ #: view/BlockPatterns.php:81
1679
+ msgid "Remove Post Type"
1680
  msgstr ""
1681
 
1682
+ #: view/BlockPatterns.php:86 view/FrontMenu.php:134
1683
+ msgid "Title"
1684
  msgstr ""
1685
 
1686
+ #: view/BlockPatterns.php:92 view/FrontMenu.php:182
1687
+ msgid "Description"
1688
  msgstr ""
1689
 
1690
+ #: view/BlockPatterns.php:98
1691
+ msgid "Separator"
1692
  msgstr ""
1693
 
1694
+ #: view/BlockPatterns.php:113
1695
+ msgid "Let Google Index it"
1696
  msgstr ""
1697
 
1698
+ # @ squirrly-seo
1699
+ #: view/BlockPatterns.php:118 view/BlockPatterns.php:132
1700
+ #: view/BlockPatterns.php:149 view/BlockSettings.php:135
1701
+ #: view/BlockSettings.php:146 view/BlockSettings.php:157
1702
+ #: view/BlockSettings.php:168 view/BlockSettings.php:180
1703
+ #: view/BlockSettings.php:192 view/BlockSettings.php:355
1704
+ #: view/BlockSettingsSeo.php:53 view/BlockSettingsSeo.php:95
1705
+ #: view/BlockSettingsSeo.php:112 view/BlockSettingsSeo.php:128
1706
+ #: view/BlockSettingsSeo.php:144 view/BlockSettingsSeo.php:160
1707
+ #: view/BlockSettingsSeo.php:176 view/BlockSettingsSeo.php:192
1708
+ #: view/BlockSettingsSeo.php:220 view/BlockSettingsSeo.php:236
1709
+ #: view/BlockSettingsSeo.php:252 view/BlockSettingsSeo.php:271
1710
+ #: view/BlockSettingsSeo.php:546 view/BlockSettingsSeo.php:578
1711
+ #: view/BlockSettingsSeo.php:586 view/BlockSettingsSeo.php:684
1712
+ #: view/BlockSettingsSeo.php:1030 view/FrontMenu.php:49 view/FrontMenu.php:508
1713
+ #: view/FrontMenu.php:521 view/FrontMenu.php:534
1714
+ msgid "Yes"
1715
+ msgstr "Ja"
1716
+
1717
+ # @ squirrly-seo
1718
+ #: view/BlockPatterns.php:120 view/BlockPatterns.php:134
1719
+ #: view/BlockPatterns.php:151 view/BlockSettings.php:137
1720
+ #: view/BlockSettings.php:148 view/BlockSettings.php:159
1721
+ #: view/BlockSettings.php:170 view/BlockSettings.php:182
1722
+ #: view/BlockSettings.php:194 view/BlockSettings.php:357
1723
+ #: view/BlockSettingsSeo.php:55 view/BlockSettingsSeo.php:97
1724
+ #: view/BlockSettingsSeo.php:114 view/BlockSettingsSeo.php:130
1725
+ #: view/BlockSettingsSeo.php:146 view/BlockSettingsSeo.php:162
1726
+ #: view/BlockSettingsSeo.php:178 view/BlockSettingsSeo.php:194
1727
+ #: view/BlockSettingsSeo.php:222 view/BlockSettingsSeo.php:238
1728
+ #: view/BlockSettingsSeo.php:254 view/BlockSettingsSeo.php:273
1729
+ #: view/BlockSettingsSeo.php:548 view/BlockSettingsSeo.php:580
1730
+ #: view/BlockSettingsSeo.php:588 view/BlockSettingsSeo.php:686
1731
+ #: view/BlockSettingsSeo.php:1032 view/FrontMenu.php:51 view/FrontMenu.php:510
1732
+ #: view/FrontMenu.php:523 view/FrontMenu.php:536
1733
+ msgid "No"
1734
+ msgstr "Nein"
1735
+
1736
+ #: view/BlockPatterns.php:127
1737
+ msgid "Pass Link Juice"
1738
  msgstr ""
1739
 
1740
+ #: view/BlockPatterns.php:141
1741
+ msgid "Do SEO"
1742
  msgstr ""
1743
 
1744
+ #: view/BlockPatterns.php:185 view/BlockSettingsSeo.php:29
1745
+ #: view/BlockSettingsSeo.php:1082
1746
+ msgid "Save SEO"
1747
  msgstr ""
1748
 
1749
+ #: view/BlockPostsAnalytics.php:24
1750
+ #, php-format
1751
+ msgid ""
1752
+ "The IP %s is calling the rank too often and google stopped the calls for %s "
1753
+ "mins. Lower the Rank check rate in Squirrly > Advanced > Rank Option. %sMore "
1754
+ "details%s"
1755
  msgstr ""
1756
 
1757
+ #: view/BlockPostsAnalytics.php:29
1758
+ #, php-format
1759
+ msgid ""
1760
+ "To be able to check the RANK please activate cURL for PHP on your server "
1761
+ "%sDetails%s"
1762
  msgstr ""
1763
 
1764
+ #: view/BlockPostsAnalytics.php:33
1765
+ #, php-format
1766
+ msgid ""
1767
+ "To be able to check the RANK please set the \"open_basedir\" to NULL on your "
1768
+ "server %sDetails%s"
1769
  msgstr ""
1770
 
1771
+ #: view/BlockPostsAnalytics.php:38
1772
+ #, php-format
1773
+ msgid ""
1774
+ "To see the Google Ranking for each article you need to select how many pages "
1775
+ "to be checked by google rank every hour from %sSquirrly > Advanced > Google "
1776
+ "Rank Option%s. "
1777
  msgstr ""
1778
 
1779
+ #: view/BlockPostsAnalytics.php:47
1780
+ msgid "Squirrly Analytics"
1781
  msgstr ""
1782
 
1783
+ #: view/BlockPostsAnalytics.php:48
1784
+ msgid ""
1785
+ "Don't see all your pages here? Make sure you optimize them with Squirrly, so "
1786
+ "that we can track them, and display you the analytics"
1787
  msgstr ""
1788
 
1789
+ # @ squirrly-seo
1790
+ #: view/BlockSettings.php:24 view/BlockSettings.php:405
1791
+ msgid "Save settings"
1792
+ msgstr "Einstellungen speichern"
1793
+
1794
+ #: view/BlockSettings.php:41
1795
+ msgid "Post/Page Edit"
1796
  msgstr ""
1797
 
1798
+ #: view/BlockSettings.php:42
1799
+ #, php-format
1800
+ msgid "%sThe right method in working with Squirrly, SEO plugin%s"
1801
  msgstr ""
1802
 
1803
+ #: view/BlockSettings.php:43
1804
+ #, php-format
1805
+ msgid "%sGetting inspired with Squirrly WordPress SEO plugin%s"
1806
  msgstr ""
1807
 
1808
+ #: view/BlockSettings.php:45
1809
+ #, php-format
1810
+ msgid "%sThere is a New SEO Live Assistant from Squirrly%s"
1811
  msgstr ""
1812
 
1813
+ #: view/BlockSettings.php:46
1814
+ #, php-format
1815
+ msgid "%sHow to create Human friendly content with the WordPress SEO plugin?%s"
1816
  msgstr ""
1817
 
1818
+ #: view/BlockSettings.php:52
1819
+ msgid "Inspiration Box G17"
1820
  msgstr ""
1821
 
1822
+ #: view/BlockSettings.php:55 view/BlockSettings.php:56
1823
+ #: view/BlockSettings.php:69 view/BlockSettings.php:70
1824
+ #: view/BlockSettings.php:83 view/BlockSettings.php:84
1825
+ #: view/BlockSettingsSeo.php:66 view/BlockSettingsSeo.php:78
1826
+ #: view/BlockSettingsSeo.php:287 view/BlockSettingsSeo.php:526
1827
+ #: view/BlockSettingsSeo.php:852 view/BlockSettingsSeo.php:946
1828
+ #: view/BlockSettingsSeo.php:958 view/BlockSettingsSeo.php:970
1829
+ msgid "see how this improved since 2016"
1830
  msgstr ""
1831
 
1832
+ #: view/BlockSettings.php:66
1833
+ msgid "Keyword Research G17"
1834
  msgstr ""
1835
 
1836
+ #: view/BlockSettings.php:80
1837
+ msgid "Inner Links G17"
1838
  msgstr ""
1839
 
1840
+ #: view/BlockSettings.php:93
1841
+ msgid "Load Squirrly Live Assistant for"
1842
  msgstr ""
1843
 
1844
+ #: view/BlockSettings.php:97 view/BlockSettingsSeo.php:707
1845
+ msgid "Posts"
1846
  msgstr ""
1847
 
1848
+ #: view/BlockSettings.php:100 view/BlockSettingsSeo.php:736
1849
+ msgid "Pages"
1850
  msgstr ""
1851
 
1852
+ #: view/BlockSettings.php:104 view/BlockSettingsSeo.php:721
1853
+ msgid "Products"
1854
  msgstr ""
1855
 
1856
+ #: view/BlockSettings.php:140
1857
+ msgid ""
1858
+ "Show <strong>Squirrly Tooltips</strong> when posting a new article (e.g. "
1859
+ "\"Enter a keyword\")."
1860
  msgstr ""
1861
 
1862
+ #: view/BlockSettings.php:151
1863
+ msgid ""
1864
+ "Always show <strong>Keyword Research</strong> about the selected keyword."
1865
  msgstr ""
1866
 
1867
+ #: view/BlockSettings.php:162
1868
+ msgid ""
1869
+ "Send optimization data to Squirrly API when the post is saved (don't use "
1870
+ "cron)"
1871
  msgstr ""
1872
 
1873
+ #: view/BlockSettings.php:173
1874
+ msgid "Use <strong> the NEW version of the SEO Live Assistant</strong>."
1875
  msgstr ""
1876
 
1877
+ #: view/BlockSettings.php:185
1878
+ msgid ""
1879
+ "Download <strong>remote images</strong> in your <strong>Media Library</"
1880
+ "strong> for the new posts."
1881
  msgstr ""
1882
 
1883
+ #: view/BlockSettings.php:197
1884
+ msgid ""
1885
+ "Correct my <strong>feed links</strong> and <strong>images</strong> (convert "
1886
+ "from relative to absolute)."
1887
  msgstr ""
1888
 
1889
+ #: view/BlockSettings.php:207
1890
+ msgid "Google Rank Options"
1891
  msgstr ""
1892
 
1893
+ #: view/BlockSettings.php:208
1894
+ #, php-format
1895
+ msgid "%sCountry targeting%s"
1896
  msgstr ""
1897
 
1898
+ #: view/BlockSettings.php:209
1899
+ #, php-format
1900
+ msgid "%sPowerful SEO Tool For Strong Google Rankings%s"
1901
  msgstr ""
1902
 
1903
+ #: view/BlockSettings.php:216
1904
+ msgid ""
1905
+ "Select the Google extension for which Squirrly will check the Google rank."
1906
  msgstr ""
1907
 
1908
+ #: view/BlockSettings.php:221
1909
+ msgid "Default"
1910
  msgstr ""
1911
 
1912
+ #: view/BlockSettings.php:222
1913
+ msgid "American Samoa"
1914
  msgstr ""
1915
 
1916
+ #: view/BlockSettings.php:223
1917
+ msgid "Anguilla"
1918
  msgstr ""
1919
 
1920
+ #: view/BlockSettings.php:224
1921
+ msgid "Antigua and Barbuda"
1922
  msgstr ""
1923
 
1924
+ #: view/BlockSettings.php:225
1925
+ msgid "Argentina"
1926
  msgstr ""
1927
 
1928
+ #: view/BlockSettings.php:226
1929
+ msgid "Australia"
1930
  msgstr ""
1931
 
1932
+ #: view/BlockSettings.php:227
1933
+ msgid "Austria"
1934
  msgstr ""
1935
 
1936
+ #: view/BlockSettings.php:228
1937
+ msgid "Azerbaijan"
1938
  msgstr ""
1939
 
1940
+ #: view/BlockSettings.php:229
1941
+ msgid "Belgium"
1942
  msgstr ""
1943
 
1944
+ #: view/BlockSettings.php:230
1945
+ msgid "Brazil"
 
 
 
1946
  msgstr ""
1947
 
1948
+ #: view/BlockSettings.php:231
1949
+ msgid "British Virgin Islands"
1950
  msgstr ""
1951
 
1952
+ #: view/BlockSettings.php:232
1953
+ msgid "Burundi"
 
 
1954
  msgstr ""
1955
 
1956
+ #: view/BlockSettings.php:233
1957
+ msgid "Bulgaria"
1958
  msgstr ""
1959
 
1960
+ #: view/BlockSettings.php:234
1961
+ msgid "Canada"
 
1962
  msgstr ""
1963
 
1964
+ #: view/BlockSettings.php:235
1965
+ msgid "Chad"
 
1966
  msgstr ""
1967
 
1968
+ #: view/BlockSettings.php:236
1969
+ msgid "Chile"
 
1970
  msgstr ""
1971
 
1972
+ #: view/BlockSettings.php:237
1973
+ msgid "Colombia"
1974
+ msgstr ""
1975
+
1976
+ #: view/BlockSettings.php:238
1977
+ msgid "Costa Rica"
1978
+ msgstr ""
1979
+
1980
+ #: view/BlockSettings.php:239
1981
+ msgid "Côte d'Ivoire"
1982
+ msgstr ""
1983
+
1984
+ #: view/BlockSettings.php:240
1985
+ msgid "Cuba"
1986
+ msgstr ""
1987
+
1988
+ #: view/BlockSettings.php:241
1989
+ msgid "Czech Republic"
1990
+ msgstr ""
1991
+
1992
+ #: view/BlockSettings.php:242
1993
+ msgid "Dem. Rep. of the Congo"
1994
+ msgstr ""
1995
+
1996
+ #: view/BlockSettings.php:243
1997
+ msgid "Denmark"
1998
+ msgstr ""
1999
+
2000
+ #: view/BlockSettings.php:244
2001
+ msgid "Djibouti"
2002
+ msgstr ""
2003
+
2004
+ #: view/BlockSettings.php:245
2005
+ msgid "Dominican Republic"
2006
+ msgstr ""
2007
+
2008
+ #: view/BlockSettings.php:246
2009
+ msgid "Ecuador"
2010
+ msgstr ""
2011
+
2012
+ #: view/BlockSettings.php:247
2013
+ msgid "El Salvador"
2014
+ msgstr ""
2015
+
2016
+ #: view/BlockSettings.php:248
2017
+ msgid "Estonia"
2018
+ msgstr ""
2019
+
2020
+ #: view/BlockSettings.php:249
2021
+ msgid "Federated States of Micronesia"
2022
+ msgstr ""
2023
+
2024
+ #: view/BlockSettings.php:250
2025
+ msgid "Fiji"
2026
+ msgstr ""
2027
+
2028
+ #: view/BlockSettings.php:251
2029
+ msgid "Finland"
2030
+ msgstr ""
2031
+
2032
+ #: view/BlockSettings.php:252
2033
+ msgid "France"
2034
+ msgstr ""
2035
+
2036
+ #: view/BlockSettings.php:253
2037
+ msgid "The Gambia"
2038
+ msgstr ""
2039
+
2040
+ #: view/BlockSettings.php:254
2041
+ msgid "Georgia"
2042
+ msgstr ""
2043
+
2044
+ #: view/BlockSettings.php:255
2045
+ msgid "Germany"
2046
+ msgstr ""
2047
+
2048
+ #: view/BlockSettings.php:256
2049
+ msgid "Gibraltar"
2050
+ msgstr ""
2051
+
2052
+ #: view/BlockSettings.php:257
2053
+ msgid "Greece"
2054
+ msgstr ""
2055
+
2056
+ #: view/BlockSettings.php:258
2057
+ msgid "Greenland"
2058
+ msgstr ""
2059
+
2060
+ #: view/BlockSettings.php:259
2061
+ msgid "Guernsey"
2062
+ msgstr ""
2063
+
2064
+ #: view/BlockSettings.php:260
2065
+ msgid "Honduras"
2066
+ msgstr ""
2067
+
2068
+ #: view/BlockSettings.php:261
2069
+ msgid "Hong Kong"
2070
+ msgstr ""
2071
+
2072
+ #: view/BlockSettings.php:262
2073
+ msgid "Hungary"
2074
+ msgstr ""
2075
+
2076
+ #: view/BlockSettings.php:263
2077
+ msgid "India"
2078
+ msgstr ""
2079
+
2080
+ #: view/BlockSettings.php:264
2081
+ msgid "Indonesia"
2082
+ msgstr ""
2083
+
2084
+ #: view/BlockSettings.php:265
2085
+ msgid "Ireland"
2086
+ msgstr ""
2087
+
2088
+ #: view/BlockSettings.php:266
2089
+ msgid "Isle of Man"
2090
+ msgstr ""
2091
+
2092
+ #: view/BlockSettings.php:267
2093
+ msgid "Israel"
2094
+ msgstr ""
2095
+
2096
+ #: view/BlockSettings.php:268
2097
+ msgid "Italy"
2098
+ msgstr ""
2099
+
2100
+ #: view/BlockSettings.php:269
2101
+ msgid "Jamaica"
2102
+ msgstr ""
2103
+
2104
+ #: view/BlockSettings.php:270
2105
+ msgid "Japan"
2106
+ msgstr ""
2107
+
2108
+ #: view/BlockSettings.php:271
2109
+ msgid "Jersey"
2110
+ msgstr ""
2111
+
2112
+ #: view/BlockSettings.php:272
2113
+ msgid "Kazakhstan"
2114
+ msgstr ""
2115
+
2116
+ #: view/BlockSettings.php:273
2117
+ msgid "Korea"
2118
+ msgstr ""
2119
+
2120
+ #: view/BlockSettings.php:274
2121
+ msgid "Latvia"
2122
+ msgstr ""
2123
+
2124
+ #: view/BlockSettings.php:275
2125
+ msgid "Lesotho"
2126
+ msgstr ""
2127
+
2128
+ #: view/BlockSettings.php:276
2129
+ msgid "Liechtenstein"
2130
+ msgstr ""
2131
+
2132
+ #: view/BlockSettings.php:277
2133
+ msgid "Lithuania"
2134
+ msgstr ""
2135
+
2136
+ #: view/BlockSettings.php:278
2137
+ msgid "Luxembourg"
2138
+ msgstr ""
2139
+
2140
+ #: view/BlockSettings.php:279
2141
+ msgid "Malawi"
2142
+ msgstr ""
2143
+
2144
+ #: view/BlockSettings.php:280
2145
+ msgid "Malaysia"
2146
+ msgstr ""
2147
+
2148
+ #: view/BlockSettings.php:281
2149
+ msgid "Malta"
2150
+ msgstr ""
2151
+
2152
+ #: view/BlockSettings.php:282
2153
+ msgid "Mauritius"
2154
+ msgstr ""
2155
+
2156
+ #: view/BlockSettings.php:283
2157
+ msgid "México"
2158
+ msgstr ""
2159
+
2160
+ #: view/BlockSettings.php:284
2161
+ msgid "Montserrat"
2162
+ msgstr ""
2163
+
2164
+ #: view/BlockSettings.php:285
2165
+ msgid "Namibia"
2166
+ msgstr ""
2167
+
2168
+ #: view/BlockSettings.php:286
2169
+ msgid "Nepal"
2170
+ msgstr ""
2171
+
2172
+ #: view/BlockSettings.php:287
2173
+ msgid "Netherlands"
2174
+ msgstr ""
2175
+
2176
+ #: view/BlockSettings.php:288
2177
+ msgid "New Zealand"
2178
+ msgstr ""
2179
+
2180
+ #: view/BlockSettings.php:289
2181
+ msgid "Nicaragua"
2182
+ msgstr ""
2183
+
2184
+ #: view/BlockSettings.php:290
2185
+ msgid "Norfolk Island"
2186
+ msgstr ""
2187
+
2188
+ #: view/BlockSettings.php:291
2189
+ msgid "Norway"
2190
+ msgstr ""
2191
+
2192
+ #: view/BlockSettings.php:292
2193
+ msgid "Pakistan"
2194
+ msgstr ""
2195
+
2196
+ #: view/BlockSettings.php:293
2197
+ msgid "Panamá"
2198
+ msgstr ""
2199
+
2200
+ #: view/BlockSettings.php:294
2201
+ msgid "Paraguay"
2202
+ msgstr ""
2203
+
2204
+ #: view/BlockSettings.php:295
2205
+ msgid "Perú"
2206
+ msgstr ""
2207
+
2208
+ #: view/BlockSettings.php:296
2209
+ msgid "Philippines"
2210
+ msgstr ""
2211
+
2212
+ #: view/BlockSettings.php:297
2213
+ msgid "Pitcairn Islands"
2214
+ msgstr ""
2215
+
2216
+ #: view/BlockSettings.php:298
2217
+ msgid "Poland"
2218
+ msgstr ""
2219
+
2220
+ #: view/BlockSettings.php:299
2221
+ msgid "Portugal"
2222
+ msgstr ""
2223
+
2224
+ #: view/BlockSettings.php:300
2225
+ msgid "Puerto Rico"
2226
  msgstr ""
2227
 
2228
+ #: view/BlockSettings.php:301
2229
+ msgid "Rep. of the Congo"
2230
+ msgstr ""
2231
+
2232
+ #: view/BlockSettings.php:302
2233
+ msgid "Romania"
2234
+ msgstr ""
2235
+
2236
+ #: view/BlockSettings.php:303
2237
+ msgid "Russia"
2238
+ msgstr ""
2239
+
2240
+ #: view/BlockSettings.php:304
2241
+ msgid "Rwanda"
2242
+ msgstr ""
2243
+
2244
+ #: view/BlockSettings.php:305
2245
+ msgid "Saint Helena"
2246
+ msgstr ""
2247
+
2248
+ #: view/BlockSettings.php:306
2249
+ msgid "San Marino"
2250
+ msgstr ""
2251
+
2252
+ #: view/BlockSettings.php:307
2253
+ msgid "Saudi Arabia"
2254
+ msgstr ""
2255
+
2256
+ #: view/BlockSettings.php:308
2257
+ msgid "Singapore"
2258
+ msgstr ""
2259
+
2260
+ #: view/BlockSettings.php:309
2261
+ msgid "Slovakia"
2262
+ msgstr ""
2263
+
2264
+ #: view/BlockSettings.php:310
2265
+ msgid "South Africa"
2266
+ msgstr ""
2267
+
2268
+ #: view/BlockSettings.php:311
2269
+ msgid "Spain"
2270
+ msgstr ""
2271
+
2272
+ #: view/BlockSettings.php:312
2273
+ msgid "Sri Lanka"
2274
+ msgstr ""
2275
+
2276
+ #: view/BlockSettings.php:313
2277
+ msgid "Sweden"
2278
+ msgstr ""
2279
+
2280
+ #: view/BlockSettings.php:314
2281
+ msgid "Switzerland"
2282
+ msgstr ""
2283
+
2284
+ #: view/BlockSettings.php:315
2285
+ msgid "Taiwan"
2286
+ msgstr ""
2287
+
2288
+ #: view/BlockSettings.php:316
2289
+ msgid "Thailand"
2290
+ msgstr ""
2291
+
2292
+ #: view/BlockSettings.php:317
2293
+ msgid "Trinidad and Tobago"
2294
+ msgstr ""
2295
+
2296
+ #: view/BlockSettings.php:318
2297
+ msgid "Turkey"
2298
+ msgstr ""
2299
+
2300
+ #: view/BlockSettings.php:319
2301
+ msgid "Ukraine"
2302
+ msgstr ""
2303
+
2304
+ #: view/BlockSettings.php:320
2305
+ msgid "United Arab Emirates"
2306
+ msgstr ""
2307
+
2308
+ #: view/BlockSettings.php:321
2309
+ msgid "United Kingdom"
2310
+ msgstr ""
2311
+
2312
+ #: view/BlockSettings.php:322
2313
+ msgid "United States"
2314
+ msgstr ""
2315
+
2316
+ #: view/BlockSettings.php:323
2317
+ msgid "Uruguay"
2318
+ msgstr ""
2319
+
2320
+ #: view/BlockSettings.php:324
2321
+ msgid "Uzbekistan"
2322
+ msgstr ""
2323
+
2324
+ #: view/BlockSettings.php:325
2325
+ msgid "Vanuatu"
2326
+ msgstr ""
2327
+
2328
+ #: view/BlockSettings.php:326
2329
+ msgid "Venezuela"
2330
+ msgstr ""
2331
+
2332
+ #: view/BlockSettings.php:327
2333
+ msgid "Vietnam"
2334
+ msgstr ""
2335
+
2336
+ #: view/BlockSettings.php:331
2337
  #, php-format
2338
+ msgid ""
2339
+ "Select how many pages to be checked in the Performance Analytics section "
2340
+ "every hour. %s(not recommended for shared hosting plan)%s"
2341
+ msgstr ""
2342
+
2343
+ #: view/BlockSettings.php:338
2344
+ msgid "page"
2345
+ msgstr ""
2346
+
2347
+ #: view/BlockSettings.php:340
2348
+ msgid "pages"
2349
+ msgstr ""
2350
+
2351
+ #: view/BlockSettings.php:346
2352
+ msgid "h"
2353
+ msgstr ""
2354
+
2355
+ #: view/BlockSettings.php:360
2356
+ msgid ""
2357
+ "Restricts search results to results originating in the above particular "
2358
+ "country."
2359
  msgstr ""
2360
 
2361
+ #: view/BlockSettings.php:370
2362
+ msgid "Robots.txt Editor"
2363
+ msgstr ""
2364
+
2365
+ #: view/BlockSettings.php:371
2366
  #, php-format
2367
+ msgid "%sLearn about robots.txt files%s"
2368
  msgstr ""
2369
 
2370
+ #: view/BlockSettings.php:372
2371
+ #, php-format
2372
+ msgid "%sHow to use Robots.txt%s"
2373
  msgstr ""
2374
 
2375
+ #: view/BlockSettings.php:378
2376
+ msgid "Edit the Robots.txt data"
 
2377
  msgstr ""
2378
 
2379
+ #: view/BlockSettings.php:391
2380
+ msgid ""
2381
+ "Does not physically create the robots.txt file. The best option for "
2382
+ "Multisites."
2383
  msgstr ""
2384
 
2385
+ #: view/BlockSettings.php:396
2386
+ msgid "Save Robots"
 
 
2387
  msgstr ""
2388
 
2389
+ #: view/BlockSettingsSeo.php:27
2390
+ msgid "SEO"
 
2391
  msgstr ""
2392
 
2393
+ #: view/BlockSettingsSeo.php:31 view/BlockSettingsSeo.php:204
 
2394
  msgid "Check for SEO issues in your site"
2395
  msgstr ""
2396
 
2397
+ #: view/BlockSettingsSeo.php:46
2398
+ msgid "Let Squirrly SEO Optimize This Blog"
2399
  msgstr ""
2400
 
2401
+ #: view/BlockSettingsSeo.php:47
2402
  #, php-format
2403
+ msgid "%sIs Squirrly SEO better than WordPress SEO by Yoast?%s"
2404
  msgstr ""
2405
 
2406
+ #: view/BlockSettingsSeo.php:49
2407
  msgid ""
2408
  "Activate the built-in SEO settings from Squirrly by switching Yes below. "
2409
  "<strong>Works well with Multisites and Ecommerce.</strong>"
2410
  msgstr ""
2411
 
2412
+ #: view/BlockSettingsSeo.php:63
2413
+ msgid "New SEO Settings For Google 2017"
2414
+ msgstr ""
2415
+
2416
+ #: view/BlockSettingsSeo.php:75
2417
+ msgid "Fastest SEO Plugin in 2017"
2418
+ msgstr ""
2419
+
2420
  # @ squirrly-seo
2421
+ #: view/BlockSettingsSeo.php:86
2422
  msgid "What does Squirrly automatically do for SEO?"
2423
  msgstr "Was tut Squirrly automatisch für SEO?"
2424
 
2425
+ #: view/BlockSettingsSeo.php:100
2426
  #, php-format
2427
  msgid ""
2428
  "adds <strong>%scanonical link%s</strong>, <strong>%srel=\"prev\" and rel="
2429
  "\"next\"%s</strong> metas in Header"
2430
  msgstr ""
2431
 
2432
+ #: view/BlockSettingsSeo.php:117
2433
+ msgid "adds the required METAs (<strong>Dublin Core, Language</strong>, etc.)"
 
2434
  msgstr ""
2435
 
2436
+ #: view/BlockSettingsSeo.php:133
2437
  #, php-format
2438
  msgid "adds the <strong>%sXML Sitemap%s</strong> for search engines: %s"
2439
  msgstr ""
2440
 
2441
+ #: view/BlockSettingsSeo.php:149
2442
+ #, php-format
2443
+ msgid "adds <strong>Feed style</strong> to your blog feed (eg. %s/feed)"
2444
  msgstr ""
2445
 
2446
+ #: view/BlockSettingsSeo.php:165
2447
  #, php-format
2448
  msgid ""
2449
+ "adds the <strong>%sfavicon.ico%s</strong> and the <strong>%sicons for "
2450
+ "tablets and smartphones%s</strong>"
2451
  msgstr ""
2452
 
2453
+ #: view/BlockSettingsSeo.php:181
2454
  #, php-format
2455
  msgid "adds the <strong>%sJson-LD%s</strong> metas for Semantic SEO"
2456
  msgstr ""
2457
 
2458
+ #: view/BlockSettingsSeo.php:197
2459
+ #, php-format
2460
+ msgid ""
2461
+ "adds the <strong>%sNoindex%s</strong>, <strong>%sNofollow%s</strong> metas "
2462
+ "for your desired pages"
2463
+ msgstr ""
2464
+
2465
+ #: view/BlockSettingsSeo.php:201
2466
  msgid ""
2467
  "Note! By switching the <strong>Json-LD</strong>, <strong>XML Sitemap</"
2468
  "strong> and <strong>Favicon</strong> on, you open new options below"
2469
  msgstr ""
2470
 
2471
+ #: view/BlockSettingsSeo.php:210
2472
+ msgid "First Page Optimization"
2473
  msgstr ""
2474
 
2475
+ #: view/BlockSettingsSeo.php:211
2476
  #, php-format
2477
  msgid "%sThe best SEO approach to Meta information%s"
2478
  msgstr ""
2479
 
2480
+ #: view/BlockSettingsSeo.php:212
2481
+ msgid "Optimize the <strong>Titles</strong>"
2482
  msgstr ""
2483
 
2484
+ #: view/BlockSettingsSeo.php:227
2485
+ #, php-format
2486
+ msgid "Optimize %sDescriptions%s "
2487
+ msgstr ""
2488
+
2489
+ #: view/BlockSettingsSeo.php:243
2490
+ #, php-format
2491
+ msgid "Optimize %sKeywords%s "
2492
  msgstr ""
2493
 
2494
+ #: view/BlockSettingsSeo.php:259
2495
  msgid "SEO for all post/pages"
2496
  msgstr ""
2497
 
2498
+ #: view/BlockSettingsSeo.php:260
2499
  #, php-format
2500
  msgid ""
2501
  "To customize the Title and Description for all the Posts and Pages in your "
2502
+ "site use the %sSquirrly Snippet Tool%s"
2503
+ msgstr ""
2504
+
2505
+ #: view/BlockSettingsSeo.php:262
2506
+ msgid "Add the Post tags in <strong>Keyword META</strong>."
2507
+ msgstr ""
2508
+
2509
+ #: view/BlockSettingsSeo.php:284
2510
+ msgid "Squirrly Snippet G17-True Render"
2511
+ msgstr ""
2512
+
2513
+ #: view/BlockSettingsSeo.php:308
2514
+ msgid "First Page Optimization:"
2515
  msgstr ""
2516
 
2517
  # @ squirrly-seo
2518
+ #: view/BlockSettingsSeo.php:314
2519
  msgid "Title:"
2520
  msgstr "Titel:"
2521
 
2522
+ #: view/BlockSettingsSeo.php:319
2523
  msgid "Tips: Length 10-75 chars"
2524
  msgstr ""
2525
 
2526
  # @ squirrly-seo
2527
+ #: view/BlockSettingsSeo.php:323
2528
  msgid "Description:"
2529
  msgstr "Beschreibung:"
2530
 
2531
+ #: view/BlockSettingsSeo.php:327
2532
  msgid "Tips: Length 70-165 chars"
2533
  msgstr ""
2534
 
2535
  # @ squirrly-seo
2536
+ #: view/BlockSettingsSeo.php:330
2537
  msgid "Keywords:"
2538
  msgstr "Schlüsselwörter:"
2539
 
2540
+ #: view/BlockSettingsSeo.php:331
2541
+ msgid "Tips: use 2-4 keywords"
2542
+ msgstr ""
2543
+
2544
+ #: view/BlockSettingsSeo.php:334
2545
+ msgid "OG Image:"
2546
+ msgstr ""
2547
 
2548
+ #: view/BlockSettingsSeo.php:335
2549
+ msgid "Select Open Graph Image"
2550
+ msgstr ""
2551
+
2552
+ #: view/BlockSettingsSeo.php:340
2553
  msgid "First Page Preview (Title, Description, Keywords)"
2554
  msgstr ""
2555
 
2556
+ #: view/BlockSettingsSeo.php:342
2557
+ msgid "Squirrly Snippet"
2558
+ msgstr ""
2559
+
2560
+ #: view/BlockSettingsSeo.php:354
2561
  msgid ""
2562
+ "If you don't see any changes in your Google snippet, check if other SEO "
2563
+ "themes or plugins affect Squirrly."
2564
  msgstr ""
2565
 
2566
+ #: view/BlockSettingsSeo.php:358
2567
  #, php-format
2568
  msgid ""
2569
+ "Use the %s<strong>Squirrly Snippet Tool</strong>%s while editing a Post/Page "
2570
+ "to customize the Title and the Description."
 
2571
  msgstr ""
2572
 
2573
+ #: view/BlockSettingsSeo.php:367
2574
  msgid "Social Media Options"
2575
  msgstr ""
2576
 
2577
+ #: view/BlockSettingsSeo.php:369
2578
  msgid "Select the language you're using on Social Media"
2579
  msgstr ""
2580
 
2581
+ #: view/BlockSettingsSeo.php:515
2582
  #, php-format
2583
  msgid "%sHow to pop out in Social Media with your links%s"
2584
  msgstr ""
2585
 
2586
+ #: view/BlockSettingsSeo.php:516
2587
  #, php-format
2588
  msgid "%sGet busy with Facebook’s new Search Engine functions%s"
2589
  msgstr ""
2590
 
2591
+ #: view/BlockSettingsSeo.php:517
2592
  #, php-format
2593
  msgid ""
2594
  "%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s"
2595
  msgstr ""
2596
 
2597
+ #: view/BlockSettingsSeo.php:523
2598
+ msgid "Open Graph G17 - 2017 Settings"
2599
  msgstr ""
2600
 
2601
+ #: view/BlockSettingsSeo.php:535
2602
+ msgid "Squirrly Adds the Best Codes for Open Graph and Twitter Cards"
2603
+ msgstr ""
2604
+
2605
+ #: view/BlockSettingsSeo.php:551
2606
+ #, php-format
2607
  msgid ""
2608
+ "Add the Social Open Graph protocol so that your Facebook shares look good. "
2609
+ "%sCheck here%s. "
2610
  msgstr ""
2611
 
2612
+ #: view/BlockSettingsSeo.php:555
2613
+ msgid "Facebook App ID"
2614
  msgstr ""
2615
 
2616
+ #: view/BlockSettingsSeo.php:556
2617
  #, php-format
2618
+ msgid "Add the %sFacebook App%s ID "
 
2619
  msgstr ""
2620
 
2621
+ #: view/BlockSettingsSeo.php:573
2622
  msgid "You need to add your <strong>Twitter account</strong> below"
2623
  msgstr ""
2624
 
2625
+ #: view/BlockSettingsSeo.php:583
2626
+ msgid "Add the <strong>Twitter card</strong> in your tweets. "
2627
+ msgstr ""
2628
+
2629
+ #: view/BlockSettingsSeo.php:591
2630
+ #, php-format
2631
+ msgid ""
2632
+ "Use <strong>Twitter %ssummary_large_image%s</strong> for your Twitter Card. "
2633
+ msgstr ""
2634
+
2635
+ #: view/BlockSettingsSeo.php:603
2636
  msgid "Social Media Accounts"
2637
  msgstr ""
2638
 
2639
+ #: view/BlockSettingsSeo.php:604
2640
  #, php-format
2641
  msgid "%sLink your Google+ profile to the content you create%s"
2642
  msgstr ""
2643
 
2644
+ #: view/BlockSettingsSeo.php:605
2645
  #, php-format
2646
  msgid ""
2647
  "%sTwitter account is mandatory for <strong>Twitter Card Validation</strong>%s"
2648
  msgstr ""
2649
 
2650
+ #: view/BlockSettingsSeo.php:606
2651
  #, php-format
2652
  msgid ""
2653
  "%sAdd all your social accounts for <strong>JSON-LD Semantic SEO</strong>%s"
2654
  msgstr ""
2655
 
2656
+ #: view/BlockSettingsSeo.php:607 view/BlockSettingsSeo.php:843
 
2657
  #, php-format
2658
  msgid "%sSpecify your social profiles to Google%s"
2659
  msgstr ""
2660
 
2661
+ #: view/BlockSettingsSeo.php:615
2662
  msgid "Your Twitter Account:"
2663
  msgstr ""
2664
 
2665
+ #: view/BlockSettingsSeo.php:622
2666
  msgid "Google Plus Profile:"
2667
  msgstr ""
2668
 
2669
+ #: view/BlockSettingsSeo.php:629
2670
  msgid "Facebook Profile:"
2671
  msgstr ""
2672
 
2673
+ #: view/BlockSettingsSeo.php:636
2674
  msgid "Linkedin Profile:"
2675
  msgstr ""
2676
 
2677
+ #: view/BlockSettingsSeo.php:643
2678
+ msgid "Pinterest Profile:"
2679
+ msgstr ""
2680
+
2681
+ #: view/BlockSettingsSeo.php:650
2682
+ msgid "Instagram Profile:"
2683
+ msgstr ""
2684
+
2685
+ #: view/BlockSettingsSeo.php:657
2686
+ msgid "Youtube Profile:"
2687
+ msgstr ""
2688
+
2689
+ #: view/BlockSettingsSeo.php:667
2690
  msgid "XML Sitemap for Google"
2691
  msgstr ""
2692
 
2693
+ #: view/BlockSettingsSeo.php:668
2694
  msgid ""
2695
+ "Squirrly Sitemap is the fastest way to tell Google about the pages on your "
2696
+ "site. <strong>Supports Multisites, Google News, Images, Videos, Custom Post "
2697
+ "Types, Custom Taxonomies and Ecommerce products</strong>"
2698
  msgstr ""
2699
 
2700
+ #: view/BlockSettingsSeo.php:669
2701
  #, php-format
2702
  msgid "%sHow to submit your sitemap.xml in Google Webmaster Tool%s"
2703
  msgstr ""
2704
 
2705
+ #: view/BlockSettingsSeo.php:670
2706
  #, php-format
2707
  msgid ""
2708
  "%s10 Vital To Dos to Feed Your SEO Content Machine After You Post Articles%s"
2709
  msgstr ""
2710
 
2711
+ #: view/BlockSettingsSeo.php:671
2712
+ #, php-format
2713
+ msgid ""
2714
+ "For Google News Sitemap, ensure that your site is included in %sGoogle News%s"
2715
+ msgstr ""
2716
+
2717
+ #: view/BlockSettingsSeo.php:680
2718
  msgid "XML Sitemap Options"
2719
  msgstr ""
2720
 
2721
+ #: view/BlockSettingsSeo.php:689
2722
  msgid "Ping your sitemap to Google and Bing when a new post is published"
2723
  msgstr ""
2724
 
2725
+ #: view/BlockSettingsSeo.php:695
2726
  msgid "Build Sitemaps for"
2727
  msgstr ""
2728
 
2729
+ #: view/BlockSettingsSeo.php:703
2730
  msgid "Google News"
2731
  msgstr ""
2732
 
2733
+ #: view/BlockSettingsSeo.php:715
2734
  msgid "Categories"
2735
  msgstr ""
2736
 
2737
+ #: view/BlockSettingsSeo.php:729
2738
  msgid "Tags"
2739
  msgstr ""
2740
 
2741
+ #: view/BlockSettingsSeo.php:744
2742
  msgid "Archive"
2743
  msgstr ""
2744
 
2745
+ #: view/BlockSettingsSeo.php:752
2746
  msgid "Custom Taxonomies"
2747
  msgstr ""
2748
 
2749
+ #: view/BlockSettingsSeo.php:759
2750
  msgid "Custom Posts"
2751
  msgstr ""
2752
 
2753
+ #: view/BlockSettingsSeo.php:763
2754
+ #, php-format
2755
+ msgid ""
2756
+ "Select only the Post Types that have links in them. Your sitemap will be %s"
2757
+ msgstr ""
2758
+
2759
+ #: view/BlockSettingsSeo.php:767
2760
  msgid "Include in Sitemaps"
2761
  msgstr ""
2762
 
2763
+ #: view/BlockSettingsSeo.php:770
2764
  msgid "<strong>Images</strong> from posts/pages"
2765
  msgstr ""
2766
 
2767
+ #: view/BlockSettingsSeo.php:773
2768
  msgid "<strong>Videos</strong> (embeded and local media)"
2769
  msgstr ""
2770
 
2771
+ #: view/BlockSettingsSeo.php:778
2772
  msgid "How often do you update your site?"
2773
  msgstr ""
2774
 
2775
+ #: view/BlockSettingsSeo.php:780
2776
  msgid "every day"
2777
  msgstr ""
2778
 
2779
+ #: view/BlockSettingsSeo.php:781
2780
  msgid "1-3 times per week"
2781
  msgstr ""
2782
 
2783
+ #: view/BlockSettingsSeo.php:782
2784
  msgid "1-3 times per month"
2785
  msgstr ""
2786
 
2787
+ #: view/BlockSettingsSeo.php:783
2788
  msgid "1-3 times per year"
2789
  msgstr ""
2790
 
2791
+ #: view/BlockSettingsSeo.php:787
2792
+ msgid "Feed Pagination: How many Posts per page to show in sitemap?"
2793
+ msgstr ""
2794
+
2795
  # @ squirrly-seo
2796
+ #: view/BlockSettingsSeo.php:802
2797
  msgid "Change the Website Icon"
2798
  msgstr "Ändern Sie das Website-Symbol"
2799
 
2800
+ #: view/BlockSettingsSeo.php:803
2801
  msgid ""
2802
  "Now, even tablet & smartphone browsers make use of your icons. This makes "
2803
  "having a good favicon even more important."
2804
  msgstr ""
2805
 
2806
+ #: view/BlockSettingsSeo.php:804
2807
  #, php-format
2808
  msgid ""
2809
  "You can use %shttp://convertico.com/%s to convert your photo to icon and "
2811
  msgstr ""
2812
 
2813
  # @ squirrly-seo
2814
+ #: view/BlockSettingsSeo.php:810
2815
  msgid "Upload file:"
2816
  msgstr "Datei hochladen:"
2817
 
2818
  # @ squirrly-seo
2819
+ #: view/BlockSettingsSeo.php:823 view/FrontMenu.php:305 view/FrontMenu.php:446
2820
  msgid "Upload"
2821
  msgstr "Hochladen"
2822
 
2823
  # @ squirrly-seo
2824
+ #: view/BlockSettingsSeo.php:827
2825
  msgid ""
2826
  "If you don't see the new icon in your browser, empty the browser cache and "
2827
  "refresh the page."
2830
  "Cache und aktualisieren Sie die Seite."
2831
 
2832
  # @ squirrly-seo
2833
+ #: view/BlockSettingsSeo.php:829
2834
  msgid "File types: JPG, JPEG, GIF and PNG."
2835
  msgstr "Dateitypen: JPG, JPEG, GIF und PNG."
2836
 
2837
+ #: view/BlockSettingsSeo.php:831
2838
  msgid ""
2839
  "Does not physically create the favicon.ico file. The best option for "
2840
  "Multisites."
2841
  msgstr ""
2842
 
2843
+ #: view/BlockSettingsSeo.php:839
2844
  msgid "JSON-LD for Semantic SEO"
2845
  msgstr ""
2846
 
2847
+ #: view/BlockSettingsSeo.php:840
2848
  msgid ""
2849
  "Squirrly will automatically add the JSON-LD Structured Data in your site."
2850
  msgstr ""
2851
 
2852
+ #: view/BlockSettingsSeo.php:841
2853
  #, php-format
2854
  msgid "%sJSON-LD's Big Day at Google%s"
2855
  msgstr ""
2856
 
2857
+ #: view/BlockSettingsSeo.php:842
2858
  #, php-format
2859
  msgid "%sGoogle Testing Tool%s"
2860
  msgstr ""
2861
 
2862
+ #: view/BlockSettingsSeo.php:849
2863
+ msgid "JSON-LD G17 -2x More Options"
2864
+ msgstr ""
2865
+
2866
+ #: view/BlockSettingsSeo.php:866
2867
  msgid "Your site type:"
2868
  msgstr ""
2869
 
2870
+ #: view/BlockSettingsSeo.php:868
2871
  msgid "Organization"
2872
  msgstr ""
2873
 
2874
+ #: view/BlockSettingsSeo.php:869
2875
  msgid "Personal"
2876
  msgstr ""
2877
 
2878
+ #: view/BlockSettingsSeo.php:875
2879
  msgid "Your Organization Name:"
2880
  msgstr ""
2881
 
2882
+ #: view/BlockSettingsSeo.php:876
2883
  msgid "Your Name:"
2884
  msgstr ""
2885
 
2886
+ #: view/BlockSettingsSeo.php:880
2887
  msgid "Job Title:"
2888
  msgstr ""
2889
 
2890
+ #: view/BlockSettingsSeo.php:884
2891
  msgid "Logo Url:"
2892
  msgstr ""
2893
 
2894
+ #: view/BlockSettingsSeo.php:885
2895
  msgid "Image Url:"
2896
  msgstr ""
2897
 
2898
+ #: view/BlockSettingsSeo.php:886
2899
  msgid "Select Image"
2900
  msgstr ""
2901
 
2902
+ #: view/BlockSettingsSeo.php:890
2903
  msgid "Contact Phone:"
2904
  msgstr ""
2905
 
2906
+ #: view/BlockSettingsSeo.php:894
2907
  msgid "Contact Type:"
2908
  msgstr ""
2909
 
2910
+ #: view/BlockSettingsSeo.php:896
2911
  msgid "Customer Service"
2912
  msgstr ""
2913
 
2914
+ #: view/BlockSettingsSeo.php:897
2915
  msgid "Technical Support"
2916
  msgstr ""
2917
 
2918
+ #: view/BlockSettingsSeo.php:898
2919
  msgid "Billing Support"
2920
  msgstr ""
2921
 
2922
+ #: view/BlockSettingsSeo.php:899
2923
  msgid "Bill Payment"
2924
  msgstr ""
2925
 
2926
+ #: view/BlockSettingsSeo.php:900
2927
  msgid "Sales"
2928
  msgstr ""
2929
 
2930
+ #: view/BlockSettingsSeo.php:901
2931
  msgid "Reservations"
2932
  msgstr ""
2933
 
2934
+ #: view/BlockSettingsSeo.php:902
2935
  msgid "Credit Card Support"
2936
  msgstr ""
2937
 
2938
+ #: view/BlockSettingsSeo.php:903
2939
  msgid "Emergency"
2940
  msgstr ""
2941
 
2942
+ #: view/BlockSettingsSeo.php:904
2943
  msgid "Baggage Tracking"
2944
  msgstr ""
2945
 
2946
+ #: view/BlockSettingsSeo.php:905
2947
  msgid "Roadside Assistance"
2948
  msgstr ""
2949
 
2950
+ #: view/BlockSettingsSeo.php:906
2951
  msgid "Package Tracking"
2952
  msgstr ""
2953
 
2954
+ #: view/BlockSettingsSeo.php:911
2955
  msgid "Short Description:"
2956
  msgstr ""
2957
 
2958
+ #: view/BlockSettingsSeo.php:919
2959
+ msgid "Add your social accounts for Json-LD"
2960
+ msgstr ""
2961
+
2962
+ #: view/BlockSettingsSeo.php:924
2963
+ msgid "How the search results will look like once Google grabs your data."
2964
+ msgstr ""
2965
+
2966
+ #: view/BlockSettingsSeo.php:933 view/BlockToolbar.php:8
2967
+ msgid "Tracking Tools"
2968
+ msgstr ""
2969
+
2970
+ #: view/BlockSettingsSeo.php:934
2971
+ #, php-format
2972
+ msgid "%sHow to Get the Most Out of Google Analytics%s"
2973
+ msgstr ""
2974
+
2975
+ #: view/BlockSettingsSeo.php:935
2976
+ #, php-format
2977
+ msgid "%sWhat is Facebook Pixel?%s"
2978
+ msgstr ""
2979
+
2980
+ #: view/BlockSettingsSeo.php:936
2981
+ #, php-format
2982
+ msgid "%sA Beginner’s Guide to Facebook Insights%s"
2983
+ msgstr ""
2984
+
2985
+ #: view/BlockSettingsSeo.php:943
2986
+ msgid "Google Tracking G17"
2987
+ msgstr ""
2988
+
2989
+ #: view/BlockSettingsSeo.php:955
2990
+ msgid "Facebook Tracking G17"
2991
+ msgstr ""
2992
+
2993
+ #: view/BlockSettingsSeo.php:967
2994
+ msgid "Rich Pins G17"
2995
+ msgstr ""
2996
+
2997
+ #: view/BlockSettingsSeo.php:984 view/BlockSettingsSeo.php:994
2998
+ #: view/BlockSettingsSeo.php:1007
2999
+ #, php-format
3000
+ msgid "Facebook Admin ID (for %sInsights%s ):"
3001
+ msgstr ""
3002
+
3003
+ #: view/BlockSettingsSeo.php:987 view/BlockSettingsSeo.php:997
3004
+ #: view/BlockSettingsSeo.php:1010
3005
+ msgid "Facebook ID or https://www.facebook.com/YourProfileName"
3006
+ msgstr ""
3007
+
3008
+ #: view/BlockSettingsSeo.php:1002
3009
+ msgid "Add a Facebook Admin ID"
3010
+ msgstr ""
3011
+
3012
+ #: view/BlockSettingsSeo.php:1016
3013
+ #, php-format
3014
+ msgid "Google %sAnalytics ID%s:"
3015
+ msgstr ""
3016
+
3017
+ #: view/BlockSettingsSeo.php:1021
3018
+ #, php-format
3019
+ msgid "Facebook %sPixel ID%s:"
3020
+ msgstr ""
3021
+
3022
+ #: view/BlockSettingsSeo.php:1035
3023
+ #, php-format
3024
+ msgid ""
3025
+ "Load <strong>%sGoogle Analytics AMP%s</strong> and <strong>%sFacebook Pixel "
3026
+ "AMP%s</strong> tracking%s(Warning! The tracking works only for AMP Themes.%s)"
3027
+ msgstr ""
3028
+
3029
+ #: view/BlockSettingsSeo.php:1042
3030
+ msgid "Measure Your Success"
3031
  msgstr ""
3032
 
3033
+ #: view/BlockSettingsSeo.php:1043
3034
+ #, php-format
3035
+ msgid "%sHow to set the Google Webmaster Tool%s"
3036
  msgstr ""
3037
 
3038
+ #: view/BlockSettingsSeo.php:1044
3039
+ #, php-format
3040
+ msgid "%sBest practices to help Google find, crawl, and index your site%s"
3041
  msgstr ""
3042
 
3043
+ #: view/BlockSettingsSeo.php:1045
3044
  #, php-format
3045
+ msgid "%sBing Webmaster Tools Help & How-To Center%s"
3046
  msgstr ""
3047
 
3048
+ #: view/BlockSettingsSeo.php:1046
3049
  #, php-format
3050
+ msgid "%sRich Pins Validator%s"
3051
  msgstr ""
3052
 
3053
+ #: view/BlockSettingsSeo.php:1052
3054
  #, php-format
3055
+ msgid "Google META verification code for %sWebmaster Tool%s:"
3056
  msgstr ""
3057
 
3058
+ #: view/BlockSettingsSeo.php:1058
3059
  #, php-format
3060
+ msgid "Bing META code (for %sWebmaster Tool%s ):"
3061
  msgstr ""
3062
 
3063
+ #: view/BlockSettingsSeo.php:1065
3064
+ #, php-format
3065
+ msgid "Alexa META code (for %sAlexa Tool%s ):"
3066
  msgstr ""
3067
 
3068
+ #: view/BlockSettingsSeo.php:1071
3069
+ #, php-format
3070
+ msgid "Pinterest Website Validator Code: (validate %sRich Pins%s )"
3071
  msgstr ""
3072
 
3073
  # @ squirrly-seo
3074
+ #: view/BlockSupport.php:7
3075
  msgid "Go to Profile"
3076
  msgstr "Zum Profil"
3077
 
3078
  # @ squirrly-seo
3079
+ #: view/BlockSupport.php:7 view/BlockSupport.php:8
3080
  msgid "Profile"
3081
  msgstr "Profil"
3082
 
3083
+ #: view/BlockSupport.php:32 view/BlockSupport.php:87
3084
+ msgid "For more support:"
3085
+ msgstr ""
 
3086
 
3087
+ #: view/BlockSupport.php:33 view/BlockSupport.php:88
3088
+ #, php-format
3089
+ msgid "10 AM to 4 PM (GMT): Mon-Fri %sby email%s."
3090
+ msgstr ""
3091
 
3092
+ #: view/BlockSupport.php:34 view/BlockSupport.php:90
3093
+ #, php-format
3094
+ msgid "%sLive Chat%s on Youtube. Thursday 4 PM."
3095
+ msgstr ""
3096
 
3097
+ #: view/BlockSupport.php:35 view/BlockSupport.php:91
3098
+ #, php-format
3099
+ msgid "Google Plus %sSupport Community%s."
3100
+ msgstr ""
3101
 
3102
+ #: view/BlockSupport.php:36 view/BlockSupport.php:92
3103
+ #, php-format
3104
+ msgid "New Lessons Mon. and Tue. on %sTwitter%s."
3105
+ msgstr ""
3106
 
3107
  # @ squirrly-seo
3108
+ #: view/BlockSupport.php:48
3109
  msgid "How was your Squirrly experience today?"
3110
  msgstr "Wie war Ihre Squirrly Erfahrung heute?"
3111
 
3112
  # @ squirrly-seo
3113
+ #: view/BlockSupport.php:57
3114
  msgid "How was Squirrly today?"
3115
  msgstr "Wie war Squirrly heute?"
3116
 
3117
+ #: view/BlockSupport.php:62
3118
  msgid "Angry"
3119
  msgstr ""
3120
 
3121
+ #: view/BlockSupport.php:62
3122
+ msgid "Annoying"
3123
+ msgstr ""
3124
+
3125
+ #: view/BlockSupport.php:65
3126
  msgid "Sad"
3127
  msgstr ""
3128
 
3129
+ #: view/BlockSupport.php:65
3130
+ msgid "Bad"
3131
+ msgstr ""
3132
+
3133
+ #: view/BlockSupport.php:68
3134
  msgid "Happy"
3135
  msgstr ""
3136
 
3137
+ #: view/BlockSupport.php:68
3138
+ msgid "Nice"
3139
+ msgstr ""
3140
+
3141
+ #: view/BlockSupport.php:71
3142
  msgid "Excited"
3143
  msgstr ""
3144
 
3145
+ #: view/BlockSupport.php:71
3146
+ msgid "Great"
3147
+ msgstr ""
3148
+
3149
+ #: view/BlockSupport.php:74
3150
  msgid "Love it"
3151
  msgstr ""
3152
 
3153
  # @ squirrly-seo
3154
+ #: view/BlockSupport.php:80
3155
  msgid "Please tell us why?"
3156
  msgstr "Bitte sagen Sie uns, warum?"
3157
 
3158
  # @ squirrly-seo
3159
+ #: view/BlockSupport.php:83
3160
  msgid "Send feedback"
3161
  msgstr "Feedback senden"
3162
 
3163
+ #: view/BlockSupport.php:89
3164
+ #, php-format
3165
+ msgid "%sSupport button%s here in WordPress (^^)"
3166
+ msgstr ""
3167
+
3168
  # @ squirrly-seo
3169
+ #: view/BlockSupport.php:97
3170
  msgid "Thank you! You can send us a happy face tomorow too."
3171
  msgstr "Danke! Sie können uns auch morgen ein fröhliches Gesicht senden."
3172
 
3173
+ #: view/BlockToolbar.php:5
3174
+ msgid "Structured Data"
3175
+ msgstr ""
3176
+
3177
+ #: view/BlockToolbar.php:6
3178
+ msgid "Social Media"
3179
+ msgstr ""
3180
+
3181
+ #: view/BlockToolbar.php:7
3182
+ msgid "Site Icon"
3183
+ msgstr ""
3184
+
3185
+ #: view/BlockToolbar.php:9
3186
+ msgid "Connections"
3187
+ msgstr ""
3188
+
3189
+ #: view/BlockToolbar.php:10
3190
+ msgid "Sitemap XML"
3191
+ msgstr ""
3192
+
3193
+ #: view/BlockToolbar.php:11
3194
+ msgid "Ranking Options"
3195
+ msgstr ""
3196
+
3197
+ #: view/BlockToolbar.php:12
3198
+ msgid "Advanced"
3199
+ msgstr ""
3200
+
3201
+ #: view/BlockToolbar.php:13
3202
+ msgid "Robots.txt"
3203
+ msgstr ""
3204
+
3205
+ #: view/BlockToolbar.php:15
3206
+ msgid "Import"
3207
+ msgstr ""
3208
+
3209
  # @ squirrly-seo
3210
+ #: view/Blocklogin.php:2
3211
  msgid "Squirrly.co Login"
3212
  msgstr "Squirrly.co Login"
3213
 
3214
  # @ squirrly-seo
3215
+ #: view/Blocklogin.php:9
3216
  msgid "Email:"
3217
  msgstr "Ihre E-Mail Adresse:"
3218
 
3219
  # @ squirrly-seo
3220
+ #: view/Blocklogin.php:11
3221
  msgid "Password:"
3222
  msgstr "Passwort:"
3223
 
3224
  # @ squirrly-seo
3225
+ #: view/Blocklogin.php:13
3226
  msgid "Login"
3227
  msgstr "Login"
3228
 
3229
  # @ squirrly-seo
3230
+ #: view/Blocklogin.php:15
3231
  msgid "Register"
3232
  msgstr "Registrieren"
3233
 
3234
  # @ squirrly-seo
3235
+ #: view/Blocklogin.php:15
3236
  msgid "Register to Squirrly.co"
3237
  msgstr "Bei Squirrly.co registrieren"
3238
 
3239
  # @ squirrly-seo
3240
+ #: view/Blocklogin.php:16
3241
  msgid "Lost password?"
3242
  msgstr "Passwort vergessen?"
3243
 
3244
  # @ squirrly-seo
3245
+ #: view/Blocklogin.php:16
3246
  msgid "Lost password"
3247
  msgstr "Passwort vergessen"
3248
 
3249
  # @ squirrly-seo
3250
+ #: view/Blocklogin.php:21
3251
  msgid "Enter your email"
3252
  msgstr "In Artikel einfügen"
3253
 
3254
+ #: view/Blocklogin.php:23
3255
  msgid "Your Email:"
3256
  msgstr ""
3257
 
3258
+ #: view/Blocklogin.php:31
3259
+ #, php-format
3260
+ msgid "I Agree with the %sSquirrly Terms%s"
3261
+ msgstr ""
3262
+
3263
+ #: view/Blocklogin.php:33
3264
  msgid "Sign Up"
3265
  msgstr "Anmelden"
3266
 
3267
+ #: view/Blocklogin.php:34
3268
  msgid "I already have an account"
3269
  msgstr ""
3270
 
3271
+ #: view/Blocklogin.php:35
3272
  msgid "This email connects you to Squirrly.co"
3273
  msgstr "This email connects you to Squirrly.co"
3274
 
3275
  # @ squirrly-seo
3276
+ #: view/Blocklogin.php:46
3277
  msgid "The email address is invalid!"
3278
  msgstr "Die E-Mail-Adresse ist ungültig!"
3279
 
3280
  # @ squirrly-seo
3281
+ #: view/Blocklogin.php:47
3282
  msgid "Click on Sign Up button and try again ..."
3283
  msgstr "Klicken Sie auf das Bild und versuchen Sie es erneut ..."
3284
 
3285
  # @ squirrly-seo
3286
+ #: view/Blocklogin.php:48
3287
  msgid "An error occured while logging in!"
3288
  msgstr "Bei der Anmeldung ist ein Fehler aufgetreten!"
3289
 
3290
  # @ squirrly-seo
3291
+ #: view/Blocklogin.php:49
3292
  msgid "Connecting ..."
3293
  msgstr "Verbinden ..."
3294
 
3295
+ #: view/Blocklogin.php:59
 
 
 
 
3296
  msgid "Congratulations! You are ready to use all the features from Squirrly"
3297
  msgstr ""
3298
 
3299
+ #: view/Blocksearch.php:2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3300
  msgid "Waiting for your editor to load .. "
3301
  msgstr ""
3302
 
3303
+ #: view/Blocksearch.php:3
3304
  msgid ""
3305
  "Javascript is disabled! You need to activate the javascript in order to use "
3306
  "Squirrly SEO."
3307
  msgstr ""
3308
 
3309
+ #: view/Blocksearch.php:6
3310
  msgid "Optimize for Keyword"
3311
  msgstr "Schlüsselwort optimieren"
3312
 
3313
+ #: view/Blocksearch.php:7
3314
+ msgid "Squirrly Briefcase"
3315
+ msgstr ""
3316
+
3317
+ #: view/Blocksearch.php:14
3318
+ msgid "Add keyword to briefcase ..."
3319
+ msgstr ""
3320
+
3321
  # @ squirrly-seo
3322
+ #: view/Blocksearch.php:28
3323
  msgid "Enter a keyword"
3324
  msgstr "Ein Schlüsselwort eingeben"
3325
 
3326
  # @ squirrly-seo
3327
+ #: view/Blocksearch.php:29
3328
  msgid "for Squirrly Live SEO optimization"
3329
  msgstr "Live-SEO-Optimierung für Squirrly"
3330
 
3331
  # @ squirrly-seo
3332
+ #: view/Blocksearch.php:44
3333
  msgid "Do a research"
3334
  msgstr "Recherchieren"
3335
 
3336
  # @ squirrly-seo
3337
+ #: view/Blocksearch.php:45
3338
+ msgid "Use this keyword"
3339
+ msgstr "Dieses Schlüsselwort verwenden"
3340
+
3341
+ # @ squirrly-seo
3342
+ #: view/Blocksearch.php:49
3343
  msgid "Enter a keyword above!"
3344
  msgstr "Geben Sie oben ein Schlüsselwort ein!"
3345
 
3346
  # @ squirrly-seo
3347
+ #: view/Blocksearch.php:50
3348
  msgid "I have more then one keyword!"
3349
  msgstr "Ich habe mehr als ein Schlüsselwort!"
3350
 
3351
  # @ squirrly-seo
3352
+ #: view/Blocksearch.php:56
3353
  msgid "Images"
3354
  msgstr "Bilder"
3355
 
3356
  # @ squirrly-seo
3357
+ #: view/Blocksearch.php:57
3358
  msgid "Twitter"
3359
  msgstr "Twitter"
3360
 
3361
  # @ squirrly-seo
3362
+ #: view/Blocksearch.php:58
3363
  msgid "Wiki"
3364
  msgstr "Wiki"
3365
 
3366
  # @ squirrly-seo
3367
+ #: view/Blocksearch.php:59
 
 
 
 
 
3368
  msgid "Blogs"
3369
  msgstr "Blogs"
3370
 
3371
  # @ squirrly-seo
3372
+ #: view/Blocksearch.php:60
3373
  msgid "My articles"
3374
  msgstr "Meine Artikel"
3375
 
3376
  # @ squirrly-seo
3377
+ #: view/Blocksearch.php:68
3378
  msgid "Show only Copyright Free images"
3379
  msgstr "Nur urheberrechtfreie Bilder zeigen"
3380
 
3381
+ #: view/Blockseo.php:13
3382
+ msgid "Split Window"
3383
+ msgstr ""
3384
+
3385
+ #: view/FrontMenu.php:38
3386
+ msgid "Saved!"
3387
+ msgstr ""
3388
+
3389
+ #: view/FrontMenu.php:39
3390
+ msgid "Saved! This is how the preview looks like"
3391
+ msgstr ""
3392
+
3393
+ #: view/FrontMenu.php:45
3394
+ msgid "Activate Squirrly SEO for this page"
3395
+ msgstr ""
3396
+
3397
+ #: view/FrontMenu.php:61
3398
+ msgid "META"
3399
+ msgstr ""
3400
+
3401
+ #: view/FrontMenu.php:64
3402
+ msgid "FACEBOOK"
3403
+ msgstr ""
3404
+
3405
+ #: view/FrontMenu.php:67
3406
+ msgid "TWITTER"
3407
+ msgstr ""
3408
+
3409
+ #: view/FrontMenu.php:70
3410
+ msgid "ADVANCED"
3411
+ msgstr ""
3412
+
3413
+ #: view/FrontMenu.php:83
3414
+ msgid "How this page will appear on Search Engines"
3415
+ msgstr ""
3416
+
3417
+ #: view/FrontMenu.php:88
3418
+ msgid "Edit Snippet"
3419
+ msgstr ""
3420
+
3421
+ #: view/FrontMenu.php:103 view/FrontMenu.php:294 view/FrontMenu.php:434
3422
+ msgid "Cancel"
3423
+ msgstr ""
3424
+
3425
+ #: view/FrontMenu.php:104 view/FrontMenu.php:295 view/FrontMenu.php:435
3426
+ #: view/FrontMenu.php:496
3427
+ msgid "Save"
3428
+ msgstr ""
3429
+
3430
+ #: view/FrontMenu.php:111
3431
+ msgid "SEO Title"
3432
+ msgstr ""
3433
+
3434
+ #: view/FrontMenu.php:114 view/FrontMenu.php:164
3435
+ msgid "Pattern: "
3436
+ msgstr ""
3437
+
3438
+ #: view/FrontMenu.php:119
3439
+ msgid "Current Title"
3440
+ msgstr ""
3441
+
3442
+ #: view/FrontMenu.php:124
3443
+ msgid "Default Title"
3444
+ msgstr ""
3445
+
3446
+ #: view/FrontMenu.php:144 view/FrontMenu.php:191
3447
+ msgid "Pattern"
3448
+ msgstr ""
3449
+
3450
+ #: view/FrontMenu.php:161
3451
+ msgid "META Description"
3452
+ msgstr ""
3453
+
3454
+ #: view/FrontMenu.php:168
3455
+ msgid "Current Description"
3456
+ msgstr ""
3457
+
3458
+ #: view/FrontMenu.php:173
3459
+ msgid "Default Description"
3460
+ msgstr ""
3461
+
3462
+ #: view/FrontMenu.php:207
3463
+ msgid "Meta Keywords"
3464
+ msgstr ""
3465
+
3466
+ # @ squirrly-seo
3467
+ #: view/FrontMenu.php:211
3468
+ msgid "+ Add keyword"
3469
+ msgstr "Fügen Sie ein anderes Schlüsselwort ein"
3470
+
3471
+ #: view/FrontMenu.php:219
3472
+ msgid "Canonical link"
3473
+ msgstr ""
3474
+
3475
+ #: view/FrontMenu.php:222
3476
+ msgid "Found: "
3477
+ msgstr ""
3478
+
3479
+ #: view/FrontMenu.php:228
3480
+ msgid "Current"
3481
+ msgstr ""
3482
+
3483
+ #: view/FrontMenu.php:234
3484
+ msgid "Default Link"
3485
+ msgstr ""
3486
+
3487
+ #: view/FrontMenu.php:245
3488
+ msgid ""
3489
+ "To edit the snippet, you have to activate Squirrly SEO for this page first"
3490
+ msgstr ""
3491
+
3492
+ #: view/FrontMenu.php:246 view/FrontMenu.php:389 view/FrontMenu.php:489
3493
+ #: view/FrontMenu.php:545
3494
+ msgid "or Click here"
3495
+ msgstr ""
3496
+
3497
+ #: view/FrontMenu.php:254
3498
+ msgid "How this page appears on Facebook"
3499
+ msgstr ""
3500
+
3501
+ #: view/FrontMenu.php:259
3502
+ msgid "Edit Open Graph"
3503
+ msgstr ""
3504
+
3505
+ #: view/FrontMenu.php:267 view/FrontMenu.php:408
3506
+ msgid "The image size must be at least 500 pixels wide"
3507
+ msgstr ""
3508
+
3509
+ #: view/FrontMenu.php:281 view/FrontMenu.php:422
3510
+ msgid ""
3511
+ "This is the Featured Image. You can changin it if you edit the snippet and "
3512
+ "upload anothe image."
3513
+ msgstr ""
3514
+
3515
+ #: view/FrontMenu.php:301
3516
+ msgid "Media Image"
3517
+ msgstr ""
3518
+
3519
+ #: view/FrontMenu.php:306 view/FrontMenu.php:447
3520
+ msgid "Image size must be at least 500 pixels wide"
3521
+ msgstr ""
3522
+
3523
+ #: view/FrontMenu.php:320
3524
+ msgid "OG Title"
3525
+ msgstr ""
3526
+
3527
+ #: view/FrontMenu.php:333
3528
+ msgid "OG Description"
3529
+ msgstr ""
3530
+
3531
+ #: view/FrontMenu.php:346
3532
+ msgid "Author Link"
3533
+ msgstr ""
3534
+
3535
+ #: view/FrontMenu.php:351
3536
+ msgid "if there are more authors, separate their facebook links with commas"
3537
+ msgstr ""
3538
+
3539
+ #: view/FrontMenu.php:357
3540
+ msgid "Page type"
3541
+ msgstr ""
3542
+
3543
+ #: view/FrontMenu.php:361
3544
+ msgid "Website"
3545
+ msgstr ""
3546
+
3547
+ #: view/FrontMenu.php:367
3548
+ msgid "Article"
3549
+ msgstr ""
3550
+
3551
+ #: view/FrontMenu.php:370
3552
+ msgid "Book"
3553
+ msgstr ""
3554
+
3555
+ #: view/FrontMenu.php:373
3556
+ msgid "Music"
3557
+ msgstr ""
3558
+
3559
+ #: view/FrontMenu.php:376
3560
+ msgid "Product"
3561
+ msgstr ""
3562
+
3563
+ #: view/FrontMenu.php:379
3564
+ msgid "Video"
3565
+ msgstr ""
3566
+
3567
+ #: view/FrontMenu.php:388
3568
+ msgid ""
3569
+ "To edit the Open Graph, you have to activate Squirrly SEO for this page first"
3570
+ msgstr ""
3571
+
3572
+ #: view/FrontMenu.php:397
3573
+ msgid "How this page appears on Twitter"
3574
+ msgstr ""
3575
+
3576
+ #: view/FrontMenu.php:400
3577
+ msgid "Edit Twitter Card"
3578
+ msgstr ""
3579
+
3580
+ #: view/FrontMenu.php:442
3581
+ msgid "Twitter Image"
3582
+ msgstr ""
3583
+
3584
+ #: view/FrontMenu.php:460
3585
+ msgid "Twitter Card Title"
3586
+ msgstr ""
3587
+
3588
+ #: view/FrontMenu.php:473
3589
+ msgid "Twitter Card Description"
3590
+ msgstr ""
3591
+
3592
+ #: view/FrontMenu.php:488
3593
+ msgid ""
3594
+ "To edit the Twitter Card, you have to activate Squirrly SEO for this page "
3595
+ "first"
3596
+ msgstr ""
3597
+
3598
+ #: view/FrontMenu.php:503
3599
+ msgid "Let Google Index This Page"
3600
+ msgstr ""
3601
+
3602
+ #: view/FrontMenu.php:516
3603
+ msgid "Pass Link Juice to This Page"
3604
+ msgstr ""
3605
+
3606
+ #: view/FrontMenu.php:529
3607
+ msgid "Show it in Sitemap.xml"
3608
+ msgstr ""
3609
+
3610
+ #: view/FrontMenu.php:544
3611
+ msgid "To edit, you have to activate Squirrly SEO for this page first."
3612
+ msgstr ""
3613
+
3614
+ #: view/FrontMenu.php:564
3615
+ msgid "post type"
3616
+ msgstr ""
3617
+
3618
+ #: view/FrontMenu.php:566
3619
+ msgid "og type"
3620
+ msgstr ""
3621
+
3622
+ #: view/FrontMenu.php:588
3623
+ msgid "No data for this URL. You can change the SEO in Frontend"
3624
  msgstr ""
3625
 
3626
+ #: view/FrontMenu.php:608
3627
+ msgid "Enable Squirrly SEO to load Squirrly Snippet"
3628
  msgstr ""
3629
 
3630
+ #: view/FrontMenu.php:632
3631
+ #, php-format
3632
+ msgid "%sPlease connect to Squirrly first%s"
3633
  msgstr ""
3634
 
3635
+ # @ squirrly-seo
3636
+ #~ msgid "Exact search:"
3637
+ #~ msgstr "Exakte Suche:"
3638
+
3639
+ # @ squirrly-seo
3640
+ #~ msgid "For Squirrly to work, you have to have tinymce editor installed!"
3641
+ #~ msgstr "Damit Squirrly arbeitet, muss tinymce installiert sein!"
3642
+
3643
+ # @ squirrly-seo
3644
+ #~ msgid ":( I lost my squirrel. Please reload the page."
3645
+ #~ msgstr ":( Ich verlor meine Eichhörnchen. Laden Sie die Seite erneut."
3646
+
3647
+ # @ squirrly-seo
3648
+ #~ msgid "Switch to Visual editor!"
3649
+ #~ msgstr "Zum Visual Editor wechseln !"
3650
+
3651
+ # @ squirrly-seo
3652
+ #~ msgid "Tips: 2-4 keywords"
3653
+ #~ msgstr "Tipp: Länge 2-4 Schlüsselwörter"
3654
+
3655
+ # @ squirrly-seo
3656
+ #~ msgid "Go to:"
3657
+ #~ msgstr "Gehe zu:"
3658
+
3659
+ # @ squirrly-seo
3660
+ #~ msgid "support page"
3661
+ #~ msgstr "Support Page"
3662
+
3663
+ # @ squirrly-seo
3664
+ #~ msgid "Clear"
3665
+ #~ msgstr "Löschen"
3666
+
3667
+ # @ squirrly-seo
3668
+ #~ msgid "Do the research"
3669
+ #~ msgstr "Recherchieren"
3670
+
3671
+ # @ squirrly-seo
3672
+ #~ msgid "Enter even more keywords."
3673
+ #~ msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
3674
+
3675
+ # @ squirrly-seo
3676
+ #~ msgid "Let some keywords for the next time as well!"
3677
+ #~ msgstr "Lassen Sie ein paar Schlüsselwörter auch für das nächste Mal!"
3678
+
3679
+ # @ squirrly-seo
3680
+ #~ msgid "News"
3681
+ #~ msgstr "News"
3682
+
3683
  # @ squirrly-seo
3684
  #~ msgid "Notice: "
3685
  #~ msgstr "Hinweis: "
languages/squirrly-seo-ro_RO.mo CHANGED
Binary file
languages/squirrly-seo-ro_RO.po CHANGED
@@ -1,22 +1,22 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: squirrly_seo\n"
4
- "POT-Creation-Date: 2014-12-15 11:36+0200\n"
5
- "PO-Revision-Date: 2014-12-15 11:40+0200\n"
6
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
7
  "Language-Team: Squirrly UK <support@squirrly.co>\n"
8
  "Language: ro_RO\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.6.10\n"
13
  "X-Poedit-KeywordsList: __;_e\n"
14
- "X-Poedit-Basepath: D:\\pagini_net\\se_lucreaza\\github\\wordpress\\wp-content"
15
- "\\plugins\\squirrly-seo\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
- #: classes/SQ_Error.php:16
20
  msgid ""
21
  "Function get_class does not exists! Is required for Squirrly to work "
22
  "properly."
@@ -24,7 +24,7 @@ msgstr ""
24
  "Functia get_class nu exista! E necesara pentru a functiona corect pluginul "
25
  "Squirrly"
26
 
27
- #: classes/SQ_Error.php:19
28
  msgid ""
29
  "Function file_exists does not exists! Is required for Squirrly to work "
30
  "properly."
@@ -32,51 +32,75 @@ msgstr ""
32
  "Functia file_exists nu exista! E necesara pentru a functiona corect pluginul "
33
  "Squirrly"
34
 
35
- #: classes/SQ_Error.php:23
36
  msgid "The home directory is not set!"
37
  msgstr "Directorul home nu este setat!"
38
 
39
- #: classes/SQ_Error.php:27
40
  msgid "The PHP version has to be greater then 4.0"
41
  msgstr "Versiunea PHP trebuie sa fie mai mare de 4.0"
42
 
43
- #: classes/SQ_Error.php:62
44
  msgid "Turn off warnings!"
45
  msgstr "Opreste avertizarile"
46
 
47
- #: classes/SQ_Error.php:63
48
- msgid "Notice: "
49
- msgstr "Atentie:"
50
-
51
- #: classes/SQ_Error.php:67
52
- msgid "Note: "
53
- msgstr "Atentie:"
54
 
55
- #: classes/SQ_Tools.php:59 controllers/SQ_Menu.php:117
56
  msgid "Getting started"
57
  msgstr "Ajutor"
58
 
59
- #: classes/SQ_Tools.php:62 controllers/SQ_Menu.php:126
60
- msgid "Dashboard"
61
- msgstr "Dashboard"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
- #: classes/SQ_Tools.php:358
64
  msgid "Fix it for me!"
65
  msgstr "Repara-l"
66
 
67
- #: classes/SQ_Tools.php:366
68
- msgid "Let Squirrly optimize your SEO automatically (recommended)"
69
- msgstr "Lasa Squirrly sa optimizeze SEO automat (recomandat)"
70
 
71
- #: classes/SQ_Tools.php:379
72
  msgid ""
73
- "You have META Description Duplicates. Disable the Squirrly SEO Description "
74
- "or disable the other SEO Plugins"
 
 
 
 
 
 
75
  msgstr ""
76
- "Aveti duplicate in META Descriere. Opriti Squirrly Seo Description sau "
77
- "dezactivati alte plugin-uri de SEO"
78
 
79
- #: classes/SQ_Tools.php:387
80
  msgid ""
81
  "You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or "
82
  "disable the other SEO Plugins"
@@ -84,7 +108,7 @@ msgstr ""
84
  "Aveti duplicate in META Open Graph. Opriti Squirrly Seo Open Graph sau "
85
  "dezactivati alte plugin-uri de SEO"
86
 
87
- #: classes/SQ_Tools.php:395
88
  msgid ""
89
  "You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card "
90
  "or disable the other SEO Plugins"
@@ -92,11 +116,11 @@ msgstr ""
92
  "Aveti duplicate in META Twitter Card. Opriti Squirrly Seo Twitter Card sau "
93
  "dezactivati alte plugin-uri de SEO"
94
 
95
- #: classes/SQ_Tools.php:406
96
  msgid "You're blocking google from indexing your site!"
97
  msgstr "Blochezi accesul la google spre indexarea site-ului"
98
 
99
- #: classes/SQ_Tools.php:413
100
  msgid ""
101
  "It is highly recommended that you include the %postname% variable in the "
102
  "permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
@@ -106,139 +130,399 @@ msgstr ""
106
  ">Mergi la Setari > Legaturi permanente si adauga /%postname%/ in campul "
107
  "Structură personalizată"
108
 
109
- #: controllers/SQ_Menu.php:97
110
  msgid ""
111
- "Check out your SEO Audit and the Performance Analytics section. <a href="
112
- "\"admin.php?page=sq_dashboard\" title=\"Squirrly Dashboard\">Click here</a>"
113
  msgstr ""
114
 
115
- #: controllers/SQ_Menu.php:116
116
- msgid " getting started"
117
- msgstr "ajutor"
118
 
119
- #: controllers/SQ_Menu.php:125
120
- msgid " dashboard"
121
- msgstr "dashboard"
122
 
123
- #: controllers/SQ_Menu.php:133
124
- #, fuzzy
125
- msgid " post list"
126
- msgstr "Vezi in "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
 
128
- #: controllers/SQ_Menu.php:134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  msgid "Performance <br />Analytics"
130
  msgstr ""
131
 
132
- #: controllers/SQ_Menu.php:141
133
- msgid " account info"
134
  msgstr ""
135
 
136
- #: controllers/SQ_Menu.php:142
137
- msgid "Account Info"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  msgstr ""
139
 
140
- #: controllers/SQ_Menu.php:149
141
- msgid " settings"
142
- msgstr "setari"
143
 
144
- #: controllers/SQ_Menu.php:150
145
  #, fuzzy
146
  msgid "SEO Settings"
147
  msgstr "Setari"
148
 
149
- #: controllers/SQ_Menu.php:158
150
- msgid "Make money with "
151
- msgstr "Castiga bani cu"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
 
153
- #: controllers/SQ_Menu.php:159
154
- msgid "Make money"
155
- msgstr "Castiga Bani"
156
 
157
- #: controllers/SQ_PostsList.php:95
158
  msgid "Squirrly"
159
  msgstr "Squirrly"
160
 
161
- #: controllers/SQ_PostsList.php:130
162
  msgid "Custom description: "
163
  msgstr "Descrierea:"
164
 
165
- #: controllers/SQ_PostsList.php:130
166
  msgid "Custom title: "
167
  msgstr "Titlul"
168
 
169
- #: controllers/SQ_PostsList.php:163
170
  msgid "SEO Analytics, by Squirrly"
171
  msgstr "SEO Analytics, de la Squirrly"
172
 
173
- #: controllers/SQ_PostsList.php:164 core/SQ_Blockseo/SQ_Blockseo.php:25
174
  msgid "Update"
175
  msgstr "Update"
176
 
177
- #: controllers/SQ_PostsList.php:168
178
  msgid "Not Public"
179
  msgstr "Ciorna"
180
 
181
- #: controllers/SQ_PostsList.php:169
182
  msgid "Could not process"
183
  msgstr "Nu s-a putut verifica"
184
 
185
- #: controllers/SQ_PostsList.php:311 controllers/SQ_PostsList.php:325
186
- #: models/SQ_BlockPostsAnalytics.php:391
187
- msgid "Could not receive data from google (Err: blocked IP)"
188
- msgstr "Nu s-au putut lua informatii de la google (IP Blocat)"
189
-
190
- #: controllers/SQ_PostsList.php:313 models/SQ_BlockPostsAnalytics.php:393
191
- msgid "> 100"
192
  msgstr ""
193
 
194
- #: controllers/SQ_PostsList.php:315 models/SQ_BlockPostsAnalytics.php:395
195
- #, fuzzy
196
- msgid "URL Indexed"
197
- msgstr "Indexare Google"
198
 
199
- #: controllers/SQ_PostsList.php:317 models/SQ_BlockPostsAnalytics.php:397
 
200
  #, php-format
201
  msgid "%s"
202
  msgstr ""
203
 
204
- #: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:34
205
  #, php-format
206
  msgid "Error: %s"
207
  msgstr "Eroare: %s"
208
 
209
- #: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:37
210
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:86
211
  msgid "An error occured. Mabe a network error :("
212
  msgstr "A aparut o eroare. Probabil o eroare de retea :("
213
 
214
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  msgid "Plugin Feedback"
216
  msgstr "Feedback Squirrly"
217
 
218
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:58
219
  msgid "Thank you for your feedback"
220
  msgstr "Multumesc pentru feedback"
221
 
222
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:61
223
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:99
224
  msgid "Could not send the email..."
225
  msgstr "Nu s-a putut trimite email ..."
226
 
227
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:65
228
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:103
229
  msgid "No message."
230
  msgstr "Nici un mesaj."
231
 
232
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:85
233
  msgid "Plugin Support"
234
  msgstr "Suport la plugin"
235
 
236
- #: core/SQ_BlockSupport/SQ_BlockSupport.php:96
237
  #, fuzzy
238
  msgid "Message sent. Thank you!"
239
  msgstr "Mesajul a fost trimis..."
240
 
241
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:81
242
  #, php-format
243
  msgid ""
244
  "We found your email, so it means you already have a Squirrly.co account. "
@@ -249,567 +533,603 @@ msgstr ""
249
  "Conecteaza-te cu contul tau de Squirrly. Daca ai uitat parola atunci apasa "
250
  "%saici%s"
251
 
252
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:89
 
 
 
 
 
 
 
253
  #, php-format
254
  msgid ""
255
  "Could not send your informations to squirrly. Please register %smanually%s."
256
  msgstr ""
257
  "Nu s-a putut trimite informatia la Squirrly. Inregistreaza-te %smanual%s."
258
 
259
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:129
260
  msgid "Wrong email or password!"
261
  msgstr "Email sau Parola gresita!"
262
 
263
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:132
264
  msgid "You can use this account only for the URL you registered first!"
265
  msgstr "Poti folosi acest cont doar pentru URL-ul inregistrat la inceput!"
266
 
267
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:137
268
  msgid "An error occured."
269
  msgstr "A aparut o eroare."
270
 
271
- #: core/SQ_Blocklogin/SQ_Blocklogin.php:139
272
  msgid "Both fields are required."
273
  msgstr "Ambele campuri sunt obligatorii!"
274
 
275
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
 
 
 
 
 
 
 
 
 
 
 
 
276
  msgid "Recent discussions:"
277
  msgstr "Discutii recente:"
278
 
279
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
280
- msgid "Exact search:"
281
- msgstr "Cautari exacte:"
282
 
283
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
284
  msgid "Competition:"
285
  msgstr "Competitia:"
286
 
287
- #: core/SQ_Blockresearch/SQ_Blockresearch.php:13
288
  msgid "Trend:"
289
  msgstr "Trend:"
290
 
291
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
 
 
 
 
292
  msgid "date"
293
  msgstr "data"
294
 
295
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
296
  msgid "Read it!"
297
  msgstr "Citeste!"
298
 
299
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
300
  msgid "Insert it!"
301
  msgstr "Adauga!"
302
 
303
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
304
  msgid "Reference"
305
  msgstr "Referinta"
306
 
307
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
308
  msgid "Insert as box"
309
  msgstr "Adauga"
310
 
311
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
 
 
 
 
312
  msgid "Not relevant?"
313
  msgstr "Nu e ce doresti?"
314
 
315
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
316
  msgid "Insert in your article"
317
  msgstr "Adauga paragraf in articol"
318
 
319
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
320
- msgid "For Squirrly to work, you have to have tinymce editor installed!"
321
  msgstr ""
322
- "Pentru ca Squirrly sa functioneze, trebuie sa ai editorul TinyMCE instalat"
323
-
324
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
325
- msgid ":( I lost my squirrel. Please reload the page."
326
- msgstr ":( Am pierdut veverita. Te rog sa dai refresh la pagina."
327
 
328
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
329
  msgid "No results found!"
330
  msgstr "Nu s-a gasit nimic ..."
331
 
332
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
333
- msgid "Switch to Visual editor!"
334
- msgstr "Schimba in Editor Vizual!"
335
-
336
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
337
- msgid "Use more words in one keyword"
338
- msgstr "Am mai multe cuvinte"
339
 
340
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
341
  msgid "Takes too long to check this keyword ..."
342
  msgstr "Ia prea mult timp sa verifice cuvantul ..."
343
 
344
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
345
  msgid "Do a research!"
346
  msgstr "Mai multe detalii!"
347
 
348
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
349
  msgid "Do more research!"
350
  msgstr "Mai multe detalii!"
351
 
352
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
353
  #, php-format
354
  msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
355
  msgstr ""
356
  "[ ATTRIBUTE: Verificati: %s pentru a vedea conditile de atribuire a "
357
  "imaginii ]"
358
 
359
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
360
  msgid "Has creative commons attributes"
361
  msgstr "Are conditii de atribuire"
362
 
363
- #: core/SQ_Blocksearch/SQ_Blocksearch.php:50
364
  msgid "No known copyright restrictions"
365
  msgstr "Nu sunt restrictii de copyright cunoscute"
366
 
367
- #: core/SQ_Blockseo/SQ_Blockseo.php:15
368
- msgid "Save changes"
369
- msgstr "Salveaza"
 
 
 
 
370
 
371
- #: core/SQ_Blockseo/SQ_Blockseo.php:16
372
- msgid "Cancel"
373
- msgstr "Renunta"
374
 
375
- #: core/SQ_Blockseo/SQ_Blockseo.php:17
376
- msgid "Reset"
377
- msgstr "Resetare"
378
 
379
- #: core/SQ_Blockseo/SQ_Blockseo.php:19
380
- #, fuzzy
381
- msgid "Customize Meta"
382
- msgstr "Modificare META"
383
 
384
- #: core/SQ_Blockseo/SQ_Blockseo.php:20
385
- msgid "manage keywords"
386
- msgstr "administrare cuvinte cheie"
387
 
388
- #: core/SQ_Blockseo/SQ_Blockseo.php:21 themes/default/SQ_Menu.php:521
389
- msgid "Too short"
390
- msgstr "Prea scurt"
 
391
 
392
- #: core/SQ_Blockseo/SQ_Blockseo.php:22 themes/default/SQ_Menu.php:522
393
- msgid "Too long"
394
- msgstr "Prea lung"
 
395
 
396
- #: core/SQ_Blockseo/SQ_Blockseo.php:24 themes/default/SQ_Menu.php:231
397
- msgid "Squirrly Snippet"
398
- msgstr "Snipet Squirrly"
 
399
 
400
- #: core/SQ_Blockseo/SQ_Blockseo.php:26
401
- msgid "snippet"
 
 
 
 
 
402
  msgstr ""
403
 
404
- #: core/SQ_Blockseo/SQ_Blockseo.php:28
405
- msgid ""
406
- "Click the Update button (to the right) to see the snippet from your website."
407
- msgstr "Click pe butonul Update pentru a vedea snipetul site-ului"
408
 
409
- #: core/SQ_Blockseo/SQ_Blockseo.php:29
410
- msgid "Enter a title above for the snippet to get data."
411
- msgstr "Adauga un titlu pentru a putea vedea datele in snipet"
 
412
 
413
- #: core/SQ_Loading/SQ_Loading.php:21
414
- msgid ""
415
- "For Squirrly to work properly you have to use a higher version of Internet "
416
- "Explorer. <br /> We recommend you to use Chrome or Mozilla."
417
- msgstr ""
418
- "Pentru a functiona Squirrly, trebui sa folosesti o versiune mai noua de "
419
- "Internet explorer. <br /> Recomandam sa folosesti Chrome sau Mozilla."
420
 
421
- #: core/SQ_Loading/SQ_Loading.php:29
422
- msgid ""
423
- "You haven`t used Squirrly SEO to optimize your article. Do you want to "
424
- "optimize for a keyword before publishing?"
425
- msgstr ""
426
- "Nu ai folosit Squirrly SEO pentru a optimiza articolul. Vrei sa il "
427
- "optimizezi inainte de publicare?"
 
 
 
 
 
 
 
428
 
429
- #: models/SQ_BlockPostsAnalytics.php:270
 
 
 
 
 
430
  msgid "Type"
431
  msgstr ""
432
 
433
- #: models/SQ_BlockPostsAnalytics.php:273
434
  msgid "Author"
435
  msgstr ""
436
 
437
- #: models/SQ_BlockPostsAnalytics.php:276
438
- #, fuzzy
439
  msgid "Keywords"
440
  msgstr "Cuvinte cheie:"
441
 
442
- #: models/SQ_BlockPostsAnalytics.php:278
443
  #, php-format
444
  msgid "Google.%s Position"
445
  msgstr ""
446
 
447
- #: models/SQ_BlockPostsAnalytics.php:279
448
- msgid "Monthly Traffic"
449
- msgstr "Trafic lunar"
450
-
451
- #: models/SQ_BlockPostsAnalytics.php:280
452
  msgid "Date"
453
  msgstr "Data"
454
 
455
- #: models/SQ_BlockPostsAnalytics.php:293
456
  msgid "Reset Filters"
457
  msgstr "Resetare Filtre"
458
 
459
- #: models/SQ_BlockPostsAnalytics.php:352
 
 
 
 
460
  #, php-format
461
  msgid "Edit &#8220;%s&#8221;"
462
  msgstr ""
463
 
464
- #: models/SQ_BlockPostsAnalytics.php:355
465
  msgid "Edit this item"
466
  msgstr ""
467
 
468
- #: models/SQ_BlockPostsAnalytics.php:355
469
  msgid "Edit"
470
  msgstr ""
471
 
472
- #: models/SQ_BlockPostsAnalytics.php:360
473
  #, php-format
474
  msgid "Preview &#8220;%s&#8221;"
475
  msgstr ""
476
 
477
- #: models/SQ_BlockPostsAnalytics.php:360
478
  msgid "Preview"
479
  msgstr ""
480
 
481
- #: models/SQ_BlockPostsAnalytics.php:362
482
  #, php-format
483
  msgid "View &#8220;%s&#8221;"
484
  msgstr ""
485
 
486
- #: models/SQ_BlockPostsAnalytics.php:362
487
  msgid "View"
488
  msgstr ""
489
 
490
- #: models/SQ_BlockPostsAnalytics.php:383
491
  msgid "No Tags"
492
  msgstr ""
493
 
494
- #: models/SQ_BlockPostsAnalytics.php:399
495
- msgid "Force recheck"
496
- msgstr ""
497
-
498
- #: models/SQ_BlockPostsAnalytics.php:401
499
- msgid "Not yet verified"
500
- msgstr ""
501
 
502
- #: models/SQ_BlockPostsAnalytics.php:414
503
- msgid "Unpublished"
504
  msgstr ""
505
 
506
- #: models/SQ_BlockPostsAnalytics.php:423
507
- #, php-format
508
- msgid "%s ago"
509
  msgstr ""
510
 
511
- #: models/SQ_BlockPostsAnalytics.php:425
512
- msgid "Y/m/d"
513
  msgstr ""
514
 
515
- #: models/SQ_BlockPostsAnalytics.php:430
516
- msgid "Published"
517
  msgstr ""
518
 
519
- #: models/SQ_BlockPostsAnalytics.php:433
520
- msgid "Missed schedule"
521
  msgstr ""
522
 
523
- #: models/SQ_BlockPostsAnalytics.php:435
524
- msgid "Scheduled"
 
525
  msgstr ""
526
 
527
- #: models/SQ_BlockPostsAnalytics.php:437
528
- msgid "Last Modified"
529
  msgstr ""
530
 
531
- #: models/SQ_BlockStatus.php:128
532
  #, php-format
533
- msgid "%s More Traffic for you!"
534
- msgstr ""
535
-
536
- #: models/SQ_BlockStatus.php:128
537
- msgid "[close this box]"
538
  msgstr ""
539
 
540
- #: models/SQ_BlockStatus.php:133
541
- msgid "CONGRATULATIONS!!"
542
  msgstr ""
543
 
544
- #: models/SQ_BlockStatus.php:136
545
- msgid "Your Traffic Increased by:"
546
  msgstr ""
547
 
548
- #: models/SQ_BlockStatus.php:141
549
- #, php-format
550
- msgid ""
551
- "the articles you’ve optimized with Squirrly SEO bring you %s more traffic "
552
- "than the other ones."
553
  msgstr ""
554
 
555
- #: models/SQ_Frontend.php:375 models/SQ_Frontend.php:389
556
- #: models/SQ_Frontend.php:396 models/SQ_Frontend.php:533
557
- #: models/SQ_Frontend.php:551 models/SQ_Frontend.php:563
558
- msgid "Page"
559
  msgstr ""
560
 
561
- #: models/SQ_Frontend.php:386
562
- msgid "About"
563
  msgstr ""
564
 
565
- #: models/SQ_Menu.php:145
566
  msgid "The code for Google Webmaster Tool is incorrect."
567
  msgstr "Codul google pentru Webmaster Tool este gresit."
568
 
569
- #: models/SQ_Menu.php:172
570
  msgid "The code for Google Analytics is incorrect."
571
  msgstr "Codul Google Analytics este incorect."
572
 
573
- #: models/SQ_Menu.php:198
574
  msgid "The code for Facebook is incorrect."
575
  msgstr "Codul Facbook este gresit."
576
 
577
- #: models/SQ_Menu.php:223
578
  #, fuzzy
579
  msgid "The code for Pinterest is incorrect."
580
  msgstr "Codul Bing este gresit."
581
 
582
- #: models/SQ_Menu.php:248
583
  msgid "The code for Bing is incorrect."
584
  msgstr "Codul Bing este gresit."
585
 
586
- #: models/SQ_Menu.php:281
587
  #, fuzzy
588
  msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
589
  msgstr "Eroare fisier: Doar fisierele JPEG,JPG,GIF sau PNG sunt permise"
590
 
591
- #: models/SQ_Menu.php:287
592
  msgid "GD error: The GD library must be installed on your server."
593
  msgstr ""
594
  "Eroare librarie GD: Trebuie sa instalezi libraria GD pe server pentru a "
595
  "putea adauga imaginea"
596
 
597
- #: models/SQ_Menu.php:293
598
  msgid "Delete error: Could not delete the old favicon."
599
  msgstr "Eroare Stergere: Nu se poate sterge icoana veche"
600
 
601
- #: models/SQ_Menu.php:300
602
  msgid "Upload error: Could not upload the favicon."
603
  msgstr "Eroare Upload: Nu se poate urca pe server imaginea"
604
 
605
- #: models/SQ_Menu.php:306
606
  msgid "Permission error: Could not change the favicon permissions."
607
  msgstr "Eroare Fisier: Nu se poate schimba permisiunea fisierului"
608
 
609
- #: models/SQ_Menu.php:332
610
  msgid ""
611
  "ICO Error: Could not create the ICO from file. Try with another file type."
612
  msgstr "Eroare ICO: Nu se poate transforma imaginea in fisier ICO"
613
 
614
- #: models/SQ_Menu.php:338
615
  msgid "The favicon has been updated."
616
  msgstr "Icoana a fost adaugata pe server"
617
 
618
- #: models/SQ_Post.php:69
619
  msgid "Squirrly could not find any results for: "
620
  msgstr "Squirrly nu a putut gasi rezultate pentru: "
621
 
622
- #: models/SQ_Post.php:132
623
  msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
624
  msgstr ""
625
 
626
- #: models/SQ_Post.php:133
627
  msgid ""
628
  "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
629
  "the HTML form."
630
  msgstr ""
631
 
632
- #: models/SQ_Post.php:134
633
  msgid "The uploaded file was only partially uploaded."
634
  msgstr ""
635
 
636
- #: models/SQ_Post.php:135
637
  msgid "No file was uploaded."
638
  msgstr ""
639
 
640
- #: models/SQ_Post.php:137
641
  msgid "Missing a temporary folder."
642
  msgstr ""
643
 
644
- #: models/SQ_Post.php:138
645
  msgid "Failed to write file to disk."
646
  msgstr ""
647
 
648
- #: models/SQ_Post.php:139
649
  msgid "File upload stopped by extension."
650
  msgstr ""
651
 
652
- #: models/SQ_Post.php:156
653
  msgid "Invalid form submission."
654
  msgstr ""
655
 
656
- #: models/SQ_Post.php:166
657
  msgid "File is empty. Please upload something more substantial."
658
  msgstr ""
659
 
660
- #: models/SQ_Post.php:168
661
  msgid ""
662
  "File is empty. Please upload something more substantial. This error could "
663
  "also be caused by uploads being disabled in your php.ini or by post_max_size "
664
  "being defined as smaller than upload_max_filesize in php.ini."
665
  msgstr ""
666
 
667
- #: models/SQ_Post.php:174
668
  msgid "Specified file failed upload test."
669
  msgstr ""
670
 
671
- #: models/SQ_Post.php:187
672
  msgid "Sorry, this file type is not permitted for security reasons."
673
  msgstr ""
674
 
675
- #: models/SQ_Post.php:212
676
  #, php-format
677
  msgid "The uploaded file could not be moved to %s."
678
  msgstr ""
679
 
680
- #: models/SQ_PostsList.php:30 themes/default/SQ_BlockAnalytics.php:234
681
- msgid "Visits"
682
- msgstr "Vizite"
683
-
684
- #: models/SQ_PostsList.php:34
685
- msgid "monthly traffic"
686
  msgstr ""
687
 
688
- #: models/SQ_PostsList.php:37
689
  msgid "See Analytics"
690
  msgstr ""
691
 
692
- #: models/SQ_PostsList.php:39
693
  msgid "Optimize it with Squirrly to see the Analytics"
694
  msgstr ""
695
 
696
- #: models/SQ_PostsList.php:91
697
  msgid "This post's current position in Google"
698
  msgstr ""
699
 
700
- #: models/SQ_PostsList.php:94
701
  msgid "The total traffic for the last 30 days, for the current post"
702
  msgstr ""
703
 
704
- #: models/SQ_PostsList.php:97
705
  msgid "The total number of shares on social media channels for this post"
706
  msgstr ""
707
 
708
- #: models/SQ_PostsList.php:100
709
  #, fuzzy
710
  msgid "The total authority for this post"
711
  msgstr "Nu sunt suficiente informatii pentru acest post"
712
 
713
- #: models/SQ_PostsList.php:103
714
  msgid "The total number of inbound links to this post"
715
  msgstr ""
716
 
717
- #: squirrly.php:52
718
- msgid ""
719
- "For Squirrly to work, the PHP version has to be equal or greater then 5.1"
720
- msgstr "Versiunea PHP trebuie sa fie mai mare de 5.1"
721
 
722
- #: themes/default/SQ_BlockAccount.php:7
723
- #, fuzzy
724
- msgid "Squirrly account information"
725
- msgstr "Vezi Squirrly in actiune"
726
 
727
- #: themes/default/SQ_BlockAccount.php:11
728
- msgid "Hey,"
729
  msgstr ""
730
 
731
- #: themes/default/SQ_BlockAccount.php:13
732
  msgid ""
733
- "Thanks for joining Squirrly. We love our users and we like it when they "
734
- "reach out to us."
735
  msgstr ""
736
 
737
- #: themes/default/SQ_BlockAccount.php:14
738
- msgid ""
739
- "If you wouldn’t mind, I’d love it if you answered one quick question: why "
740
- "did you sign up for Squirrly?"
741
  msgstr ""
742
 
743
- #: themes/default/SQ_BlockAccount.php:18
744
- #, fuzzy
745
- msgid "[stop showing this message]"
746
- msgstr "u afisa aceasta pagina"
 
 
 
 
 
 
 
 
747
 
748
- #: themes/default/SQ_BlockAccount.php:18
749
- msgid "Send Reply"
 
 
 
 
750
  msgstr ""
751
 
752
- #: themes/default/SQ_BlockAccount.php:34 themes/default/SQ_Menu.php:7
 
 
 
 
 
753
  #, fuzzy
754
  msgid "Go to dashboard"
755
  msgstr "dashboard"
756
 
757
- #: themes/default/SQ_BlockAffiliate.php:5
758
- #: themes/default/SQ_BlockAffiliate.php:16
759
- msgid "Join Squirrly today!"
760
- msgstr "Alatura-te lui Squirrly!"
 
 
 
761
 
762
- #: themes/default/SQ_BlockAffiliate.php:17
763
  #, php-format
764
  msgid "%sHow I Started Making Money With the Squirrly Affiliate Program%s"
765
  msgstr ""
766
 
767
- #: themes/default/SQ_BlockAffiliate.php:20
768
  msgid "Affiliate Benefits"
769
  msgstr "Beneficii afiliere"
770
 
771
- #: themes/default/SQ_BlockAffiliate.php:25
772
  #, php-format
773
- msgid "- Recurring 45%s commission"
774
- msgstr "- Comision 45%s din abonament"
775
 
776
- #: themes/default/SQ_BlockAffiliate.php:30
777
  msgid "- No cost"
778
  msgstr "- Fara costuri"
779
 
780
- #: themes/default/SQ_BlockAffiliate.php:35
781
  msgid "- Monthly payments in your Paypal account"
782
  msgstr "- Platy lunare in contul tau de Paypal"
783
 
784
- #: themes/default/SQ_BlockAffiliate.php:46
 
 
 
 
 
 
 
785
  msgid ""
786
  "To redirect users to your site, just change \"squirrly.co\" with your domain."
787
  msgstr ""
788
  "Pentru a redirecta userii spre site-ul tau, schimba doar \"squirrly.co\" cu "
789
  "domeniul tau"
790
 
791
- #: themes/default/SQ_BlockAffiliate.php:48
792
  msgid "Generate affiliate link"
793
  msgstr "Generare link de afiliat"
794
 
795
- #: themes/default/SQ_BlockAffiliate.php:56
796
  msgid ""
797
  "Your affiliate account is set and ready to go. Above you have the affiliate "
798
  "link. "
799
  msgstr ""
800
  "Linkul tau de afiliere e gata. Mai sus aveti link-ul care il puteti folosi"
801
 
802
- #: themes/default/SQ_BlockAffiliate.php:58
803
  #, php-format
804
  msgid "Check your affiliate page: %sAffiliate page%s"
805
  msgstr "Verifica pagina ta de afiliat: %sAffiliate page%s"
806
 
807
- #: themes/default/SQ_BlockAffiliate.php:60
808
- #, php-format
809
- msgid "%sTerms of Use for our Affiliate Program%s"
810
- msgstr "%sTermeni si conditii de afiliere%s"
811
-
812
- #: themes/default/SQ_BlockAffiliate.php:63
813
  msgid ""
814
  "After you connect to Squirrly you can begin to use your free Squirrly "
815
  "affiliate link immediately!"
@@ -817,1153 +1137,2671 @@ msgstr ""
817
  "Dupa ce te conectezi la Squirrly vei putea incepe sa folosesti link-ul tau "
818
  "de afiliat"
819
 
820
- #: themes/default/SQ_BlockAffiliate.php:72
821
  msgid "Squirrly banners you can use"
822
  msgstr "Bannere Squirrly"
823
 
824
- #: themes/default/SQ_BlockAffiliate.php:96
825
- msgid "Go to settings"
826
- msgstr "Mergi la setari"
827
-
828
- #: themes/default/SQ_BlockAffiliate.php:97
829
- msgid "See dashboard"
830
- msgstr "Vezi Dashboard"
831
-
832
- #: themes/default/SQ_BlockAffiliate.php:100 themes/default/SQ_BlockHelp.php:34
833
  msgid "<< START HERE >>"
834
  msgstr ""
835
 
836
- #: themes/default/SQ_BlockAnalytics.php:53
837
  msgid "Moz Inbound Links"
838
  msgstr ""
839
 
840
- #: themes/default/SQ_BlockAnalytics.php:64
 
 
 
 
841
  msgid "Moz Authority"
842
  msgstr ""
843
 
844
- #: themes/default/SQ_BlockAnalytics.php:69
845
  msgid "Moz Rank"
846
  msgstr ""
847
 
848
- #: themes/default/SQ_BlockAnalytics.php:76
849
  #, fuzzy
850
  msgid "Google Page Rank"
851
  msgstr "URL Google Plus:"
852
 
853
- #: themes/default/SQ_BlockAnalytics.php:83
854
- #, fuzzy
855
- msgid "Squirrly Audit Score"
856
- msgstr "Squirrly article rank"
857
 
858
- #: themes/default/SQ_BlockAnalytics.php:99
859
  msgid "Facebook shares"
860
  msgstr ""
861
 
862
- #: themes/default/SQ_BlockAnalytics.php:104
863
  msgid "Facebook likes"
864
  msgstr ""
865
 
866
- #: themes/default/SQ_BlockAnalytics.php:109
867
  #, fuzzy
868
  msgid "Twitter shares"
869
  msgstr "Twitter"
870
 
871
- #: themes/default/SQ_BlockAnalytics.php:114
872
  #, fuzzy
873
  msgid "Google+ shares"
874
  msgstr "Rezultate Google pentru:"
875
 
876
- #: themes/default/SQ_BlockAnalytics.php:119
877
  msgid "LinkedIn Shares"
878
  msgstr ""
879
 
880
- #: themes/default/SQ_BlockAnalytics.php:124
881
  msgid "StumbleUpon shares"
882
  msgstr ""
883
 
884
- #: themes/default/SQ_BlockAnalytics.php:129
885
  msgid "Reddit shares"
886
  msgstr ""
887
 
888
- #: themes/default/SQ_BlockAnalytics.php:161
889
  msgid "Nicely done! Now you can focus on the other tasks"
890
  msgstr ""
891
 
892
- #: themes/default/SQ_BlockAnalytics.php:161
893
  msgid ""
894
  "I know you can improve this. Please follow the documentation for a quicker "
895
  "progress"
896
  msgstr ""
897
 
898
- #: themes/default/SQ_BlockAnalytics.php:247
 
 
 
 
899
  #, fuzzy
900
  msgid "Current: "
901
  msgstr "Pozitia curenta"
902
 
903
- #: themes/default/SQ_BlockAnalytics.php:248
904
  msgid "Lowest: "
905
  msgstr ""
906
 
907
- #: themes/default/SQ_BlockAnalytics.php:249
908
  msgid "Highest: "
909
  msgstr ""
910
 
911
- #: themes/default/SQ_BlockAnalytics.php:253
912
  #, fuzzy
913
  msgid "last 30 days"
914
  msgstr "Ultimele 30 zile"
915
 
916
- #: themes/default/SQ_BlockAudit.php:2
917
- msgid ""
918
- "Your site audit is not yet ready. It may take up to 7 days to audit your "
919
- "blog."
920
  msgstr ""
921
 
922
- #: themes/default/SQ_BlockDashboard.php:3
923
- msgid "Squirrly dashboard"
924
- msgstr "Dashboard Squirrly"
925
 
926
- #: themes/default/SQ_BlockDashboard.php:4
 
927
  msgid ""
928
- "from this menu, you can start using all the great features of Squirrly (that "
929
- "you won’t find in any other seo plugins for wordpress)"
 
930
  msgstr ""
931
 
932
- #: themes/default/SQ_BlockDashboard.php:43
 
933
  msgid ""
934
- "To see the analytics for your posts, you have to start optimizing your "
935
- "articles using Squirrly. That will enable tracking, and we'll be able to "
936
- "send you valuable data about your post."
937
  msgstr ""
938
 
939
- #: themes/default/SQ_BlockHelp.php:3
940
- #, fuzzy
941
- msgid "Connect to Squirrly.co"
942
- msgstr "Inregistreaza-te la Squirrly.co"
943
-
944
- #: themes/default/SQ_BlockHelp.php:25
945
  msgid ""
946
- "Get Excellent SEO with Better Content and SEO Stats. For Both Humans and "
947
- "Search Bots."
948
  msgstr ""
949
 
950
- #: themes/default/SQ_BlockHelp.php:28
951
- msgid "Squirrly SEO Plugin is for the NON-SEO expert. "
 
952
  msgstr ""
953
 
954
- #: themes/default/SQ_BlockHelp.php:29
955
- #, fuzzy
956
- msgid "See all the Squirrly SEO features at: "
957
- msgstr "Ai nevoie de ajutor cu Squirrly SEO?"
958
 
959
- #: themes/default/SQ_BlockHelp.php:32
960
- msgid "Connect to Squirrly and start optimizing your site"
 
961
  msgstr ""
962
 
963
- #: themes/default/SQ_BlockPostsAnalytics.php:3
964
- #, fuzzy
965
- msgid "Squirrly Analytics"
966
- msgstr "Optiuni Squirrly"
967
 
968
- #: themes/default/SQ_BlockPostsAnalytics.php:4
969
- msgid ""
970
- "Don't see all your pages here? Make sure you optimize them with Squirrly, so "
971
- "that we can track them, and display you the analytics"
 
 
972
  msgstr ""
973
 
974
- #: themes/default/SQ_BlockPostsAnalytics.php:5
975
  msgid ""
976
- "If you recheck the google rank, let 10-20 seconds between requests to "
977
- "prevent google to block your IP for an hour."
978
  msgstr ""
979
 
980
- #: themes/default/SQ_BlockSupport.php:7
981
- msgid "Go to Profile"
982
- msgstr "Profilul tau din Squirrly"
983
 
984
- #: themes/default/SQ_BlockSupport.php:7
985
- msgid "Profile"
986
- msgstr "Profil"
987
 
988
- #: themes/default/SQ_BlockSupport.php:17
989
- msgid "Support"
990
- msgstr "Suport"
991
 
992
- #: themes/default/SQ_BlockSupport.php:20
993
- msgid "Need Help with Squirrly SEO?"
994
- msgstr "Ai nevoie de ajutor cu Squirrly SEO?"
 
 
 
 
995
 
996
- #: themes/default/SQ_BlockSupport.php:24
997
- msgid "Send Question"
998
- msgstr "Trimite"
 
 
999
 
1000
- #: themes/default/SQ_BlockSupport.php:27 themes/default/SQ_BlockSupport.php:68
1001
- msgid "Go to:"
1002
- msgstr "Mergi la:"
 
 
1003
 
1004
- #: themes/default/SQ_BlockSupport.php:27 themes/default/SQ_BlockSupport.php:68
1005
- msgid "support page"
1006
- msgstr "pagina suport"
 
 
1007
 
1008
- #: themes/default/SQ_BlockSupport.php:39
1009
- msgid "How was your Squirrly experience today?"
1010
- msgstr "Cum a fost experienta de azi cu Squirrly?"
1011
 
1012
- #: themes/default/SQ_BlockSupport.php:48
1013
- msgid "How was Squirrly today?"
1014
- msgstr "Cum a fost Squirrly azi?"
 
 
1015
 
1016
- #: themes/default/SQ_BlockSupport.php:52
1017
- msgid "Angry"
1018
  msgstr ""
1019
 
1020
- #: themes/default/SQ_BlockSupport.php:53
1021
- msgid "Sad"
1022
  msgstr ""
1023
 
1024
- #: themes/default/SQ_BlockSupport.php:54
1025
- msgid "Happy"
1026
  msgstr ""
1027
 
1028
- #: themes/default/SQ_BlockSupport.php:55
1029
- msgid "Excited"
 
 
1030
  msgstr ""
1031
 
1032
- #: themes/default/SQ_BlockSupport.php:56
1033
- msgid "Love it"
1034
  msgstr ""
1035
 
1036
- #: themes/default/SQ_BlockSupport.php:61
1037
- msgid "Please tell us why?"
1038
- msgstr "De ce?"
1039
 
1040
- #: themes/default/SQ_BlockSupport.php:64
1041
- msgid "Send feedback"
1042
- msgstr "Trimite"
 
 
 
1043
 
1044
- #: themes/default/SQ_BlockSupport.php:73
1045
- msgid "Thank you! You can send us a happy face tomorow too."
1046
- msgstr "Multumim! Ne poti trimite o fata vesela si maine."
 
 
 
1047
 
1048
- #: themes/default/SQ_Blocklogin.php:2
1049
- msgid "Squirrly.co Login"
1050
- msgstr "Conectare la Squirrly"
 
 
 
1051
 
1052
- #: themes/default/SQ_Blocklogin.php:9
1053
- msgid "Email:"
1054
- msgstr "Email:"
 
1055
 
1056
- #: themes/default/SQ_Blocklogin.php:10
1057
- msgid "Password:"
1058
- msgstr "Parola:"
 
1059
 
1060
- #: themes/default/SQ_Blocklogin.php:11
1061
- msgid "Login"
1062
- msgstr "Logare"
 
1063
 
1064
- #: themes/default/SQ_Blocklogin.php:12
1065
- msgid "Register"
1066
- msgstr "Cont nou"
 
1067
 
1068
- #: themes/default/SQ_Blocklogin.php:12
1069
- msgid "Register to Squirrly.co"
1070
- msgstr "Inregistreaza-te la Squirrly.co"
1071
 
1072
- #: themes/default/SQ_Blocklogin.php:13
1073
- msgid "Lost password?"
1074
- msgstr "Ai uitat parola?"
1075
 
1076
- #: themes/default/SQ_Blocklogin.php:13
1077
- msgid "Lost password"
1078
- msgstr "Am uitat parola"
1079
 
1080
- #: themes/default/SQ_Blocklogin.php:17
1081
- msgid "Enter your email"
1082
- msgstr "Adauga adresa email"
1083
 
1084
- #: themes/default/SQ_Blocklogin.php:18
1085
- msgid "Your E-mail:"
1086
- msgstr "Emailul tau:"
 
1087
 
1088
- #: themes/default/SQ_Blocklogin.php:19
1089
- msgid "Sign Up"
1090
- msgstr "Sign Up"
1091
 
1092
- #: themes/default/SQ_Blocklogin.php:20
1093
- msgid "I already have an account"
1094
- msgstr "Am deja un cont"
1095
 
1096
- #: themes/default/SQ_Blocklogin.php:21
1097
- msgid "This email connects you to Squirrly.co"
1098
- msgstr "Acest email te conecteaza la Squirrly"
 
 
 
1099
 
1100
- #: themes/default/SQ_Blocklogin.php:30
1101
- msgid "The email address is invalid!"
1102
- msgstr "Adresa de email este invalida!"
1103
 
1104
- #: themes/default/SQ_Blocklogin.php:31
1105
- msgid "Click on Sign Up button and try again ..."
1106
- msgstr "Apasa butonul Sign Up pentru a incerca din nou ..."
1107
 
1108
- #: themes/default/SQ_Blocklogin.php:32
1109
- msgid "An error occured while logging in!"
1110
- msgstr "A aparut o eroare la logare."
1111
 
1112
- #: themes/default/SQ_Blocklogin.php:33
1113
- msgid "Connecting ..."
1114
- msgstr "Conectare ..."
1115
 
1116
- #: themes/default/SQ_Blocklogin.php:42
1117
- msgid "Congratulations! Now write a new article with:"
1118
- msgstr "Felicitari! Acum scrie un nou articol cu:"
1119
 
1120
- #: themes/default/SQ_Blockresearch.php:2
1121
- msgid "Squirrly Keyword Research"
1122
- msgstr " Cercetare cuvinte cheie"
1123
 
1124
- #: themes/default/SQ_Blockresearch.php:3
1125
- msgid "Clear"
1126
- msgstr "Alta cautare"
 
 
1127
 
1128
- #: themes/default/SQ_Blockresearch.php:9
1129
- msgid "Keyword:"
1130
- msgstr "Cuvant cheie:"
1131
 
1132
- #: themes/default/SQ_Blockresearch.php:11 themes/default/SQ_Blocksearch.php:27
1133
- msgid "Use this keyword"
1134
- msgstr "Foloseste acest cuvant"
1135
 
1136
- #: themes/default/SQ_Blockresearch.php:20
1137
- msgid "+ Add keyword"
1138
- msgstr "Adauga cuvant cheie"
1139
 
1140
- #: themes/default/SQ_Blockresearch.php:21
1141
- msgid "Do the research"
1142
- msgstr "Trimite >>"
1143
 
1144
- #: themes/default/SQ_Blockresearch.php:24
1145
- msgid "Enter even more keywords."
1146
- msgstr "Adauga mai multe cuvinte"
 
 
 
1147
 
1148
- #: themes/default/SQ_Blockresearch.php:25
1149
- msgid "Let some keywords for the next time as well!"
1150
- msgstr "Mai lasa cuvinte si pentru viitor!"
1151
 
1152
- #: themes/default/SQ_Blocksearch.php:1
1153
- msgid "Waiting for your editor to load .. "
 
 
 
1154
  msgstr ""
1155
 
1156
- #: themes/default/SQ_Blocksearch.php:3
1157
- msgid "Optimize for Keyword"
1158
- msgstr "Optimizare dupa cuvant cheie"
1159
 
1160
- #: themes/default/SQ_Blocksearch.php:11
1161
- msgid "Enter a keyword"
1162
- msgstr "Adauga cuvant"
1163
 
1164
- #: themes/default/SQ_Blocksearch.php:11
1165
- msgid "for Squirrly Live SEO optimization"
1166
- msgstr "Pentru optimizare cu Squirrly SEO"
1167
 
1168
- #: themes/default/SQ_Blocksearch.php:26
1169
- msgid "Do a research"
1170
- msgstr "Mai multe detalii"
1171
 
1172
- #: themes/default/SQ_Blocksearch.php:31
1173
- msgid "Enter a keyword above!"
1174
- msgstr "Adauga cuvinte cheie mai sus!"
1175
 
1176
- #: themes/default/SQ_Blocksearch.php:32
1177
- msgid "I have more then one keyword!"
1178
- msgstr "Am mai multe cuvinte!"
1179
 
1180
- #: themes/default/SQ_Blocksearch.php:38
1181
- msgid "Images"
1182
- msgstr "Imagini"
1183
 
1184
- #: themes/default/SQ_Blocksearch.php:39
1185
- msgid "Twitter"
1186
- msgstr "Twitter"
1187
 
1188
- #: themes/default/SQ_Blocksearch.php:40
1189
- msgid "Wiki"
1190
- msgstr "Wiki"
1191
 
1192
- #: themes/default/SQ_Blocksearch.php:41
1193
- msgid "News"
1194
- msgstr "News"
1195
 
1196
- #: themes/default/SQ_Blocksearch.php:42
1197
- msgid "Blogs"
1198
- msgstr "Bloguri"
1199
 
1200
- #: themes/default/SQ_Blocksearch.php:43
1201
- msgid "My articles"
1202
- msgstr "Articolele mele"
 
1203
 
1204
- #: themes/default/SQ_Blocksearch.php:48
1205
- msgid "Show only Copyright Free images"
1206
- msgstr "Arata doar imagini fara copyright"
1207
 
1208
- #: themes/default/SQ_Blockseo.php:3
1209
- #, fuzzy
1210
- msgid "Squirrly SEO Live Assistant"
1211
- msgstr "Asistent SEO Live"
1212
 
1213
- #: themes/default/SQ_Menu.php:4
1214
- msgid "Squirrly settings"
1215
- msgstr "Setari Squirrly"
 
 
 
 
1216
 
1217
- #: themes/default/SQ_Menu.php:6 themes/default/SQ_Menu.php:515
1218
- msgid "Save settings"
1219
- msgstr "Salveaza setari"
 
 
 
 
 
 
 
 
 
 
 
1220
 
1221
- #: themes/default/SQ_Menu.php:12
1222
- msgid "Let Squirrly automatically optimize my blog"
1223
- msgstr "Lasa Squirrly sa imi optimizeze blogul automat"
 
 
 
 
1224
 
1225
- #: themes/default/SQ_Menu.php:13
1226
  msgid ""
1227
- "<strong>For SEO Setting you can use \"All In One SEO\", \"Wordpress SEO by "
1228
- "Yoast\", or other such plugins.</strong>"
1229
  msgstr ""
1230
 
1231
- #: themes/default/SQ_Menu.php:15
 
1232
  msgid ""
1233
- "If you want, you can also use the built-in settings from Squirrly (useful "
1234
- "for beginners), by switching Yes below."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1235
  msgstr ""
1236
 
1237
- #: themes/default/SQ_Menu.php:19 themes/default/SQ_Menu.php:38
1238
- #: themes/default/SQ_Menu.php:55 themes/default/SQ_Menu.php:72
1239
- #: themes/default/SQ_Menu.php:89 themes/default/SQ_Menu.php:122
1240
- #: themes/default/SQ_Menu.php:139 themes/default/SQ_Menu.php:167
1241
- #: themes/default/SQ_Menu.php:183 themes/default/SQ_Menu.php:259
1242
- #: themes/default/SQ_Menu.php:270 themes/default/SQ_Menu.php:281
1243
- #: themes/default/SQ_Menu.php:293 themes/default/SQ_Menu.php:304
1244
- #: themes/default/SQ_Menu.php:424
 
 
 
 
 
 
 
1245
  msgid "Yes"
1246
  msgstr "Da"
1247
 
1248
- #: themes/default/SQ_Menu.php:21 themes/default/SQ_Menu.php:40
1249
- #: themes/default/SQ_Menu.php:57 themes/default/SQ_Menu.php:74
1250
- #: themes/default/SQ_Menu.php:91 themes/default/SQ_Menu.php:124
1251
- #: themes/default/SQ_Menu.php:141 themes/default/SQ_Menu.php:169
1252
- #: themes/default/SQ_Menu.php:185 themes/default/SQ_Menu.php:261
1253
- #: themes/default/SQ_Menu.php:272 themes/default/SQ_Menu.php:283
1254
- #: themes/default/SQ_Menu.php:295 themes/default/SQ_Menu.php:306
1255
- #: themes/default/SQ_Menu.php:426
 
 
 
 
 
 
 
1256
  msgid "No"
1257
  msgstr "Nu"
1258
 
1259
- #: themes/default/SQ_Menu.php:28
1260
- msgid "What does Squirrly automatically do for SEO?"
1261
- msgstr "Ce face Squirrly in mod automat pentru SEO?"
 
 
 
 
 
 
 
 
 
1262
 
1263
- #: themes/default/SQ_Menu.php:43
1264
  #, php-format
1265
  msgid ""
1266
- "Add <strong>%scanonical link%s</strong>, <strong>%srel=\"prev\" and rel="
1267
- "\"next\"%s</strong> metas"
 
1268
  msgstr ""
1269
 
1270
- #: themes/default/SQ_Menu.php:60
1271
- #, fuzzy, php-format
1272
- msgid "Add the <strong>%sXML Sitemap%s</strong> for search engines"
1273
- msgstr "Adauga <strong>Harta XML</strong> pentru motoarele de cautare"
 
 
1274
 
1275
- #: themes/default/SQ_Menu.php:77
 
1276
  msgid ""
1277
- "Add the required METAs for home page (<strong>icon, author, language, dc "
1278
- "publisher</strong>, etc.)"
1279
  msgstr ""
1280
- "Adauga cerintele META in pagina acasa (<strong>icon, author, language, dc "
1281
- "publisher</strong>, etc.)"
1282
 
1283
- #: themes/default/SQ_Menu.php:94
 
1284
  msgid ""
1285
- "Add the <strong>favicon</strong> and the <strong>icon for Apple devices</"
1286
- "strong>."
 
1287
  msgstr ""
1288
- "Adauga <strong>favicon</strong> si <strong>icoana pentru dispozitivele "
1289
- "Apple</strong>."
1290
 
1291
- #: themes/default/SQ_Menu.php:104
1292
  #, fuzzy
1293
- msgid "Social Media Options"
1294
  msgstr "Optiuni Squirrly"
1295
 
1296
- #: themes/default/SQ_Menu.php:105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1297
  #, php-format
1298
- msgid "%sHow to pop out in Social Media with your links%s"
1299
  msgstr ""
1300
 
1301
- #: themes/default/SQ_Menu.php:106
1302
  #, php-format
1303
- msgid "%sGet busy with Facebook’s new Search Engine functions%s"
 
 
 
 
 
1304
  msgstr ""
1305
 
1306
- #: themes/default/SQ_Menu.php:107
1307
  #, php-format
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1308
  msgid ""
1309
- "%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s"
 
1310
  msgstr ""
1311
 
1312
- #: themes/default/SQ_Menu.php:112
1313
- #, fuzzy
1314
- msgid "What does Squirrly automatically do for Social Media?"
1315
- msgstr "Ce face Squirrly in mod automat pentru SEO?"
1316
 
1317
- #: themes/default/SQ_Menu.php:127
1318
- #, fuzzy
1319
  msgid ""
1320
- "Add the <strong>Social Open Graph objects</strong> for a good looking share. "
 
1321
  msgstr ""
1322
- "Adauga <strong>Facebook meta objects</strong> pentru o afisare mai frumoasa "
1323
- "in Facebook"
1324
 
1325
- #: themes/default/SQ_Menu.php:144
1326
- msgid "Add the <strong>Twitter card</strong> in your tweets. "
1327
- msgstr "Adauga <strong>titlul</strong> corect in pagina acasa"
1328
 
1329
- #: themes/default/SQ_Menu.php:147
1330
- msgid "Your twitter account: "
1331
- msgstr "Contul tau de twitter:"
 
 
1332
 
1333
- #: themes/default/SQ_Menu.php:155
1334
- #, fuzzy
1335
- msgid "First page optimization"
1336
- msgstr "Optimizare cu Squirrly SEO"
 
 
 
 
 
1337
 
1338
- #: themes/default/SQ_Menu.php:156
1339
  #, php-format
1340
- msgid "%sThe best SEO approach to Meta information%s"
1341
  msgstr ""
1342
 
1343
- #: themes/default/SQ_Menu.php:158
1344
- #, fuzzy
1345
- msgid "Add meta <strong>title</strong> in Home Page"
1346
- msgstr "Adauga <strong>titlul</strong> corect in pagina acasa"
1347
 
1348
- #: themes/default/SQ_Menu.php:174
1349
- #, fuzzy
1350
  msgid ""
1351
- "Add meta <strong>description</strong> and <strong>keywords</strong> in Home "
1352
- "Page"
1353
  msgstr ""
1354
- "Aadauga <strong>descrierea</strong> si <strong>cuvintele cheie</strong> "
1355
- "corecte in prima pagina"
1356
 
1357
- #: themes/default/SQ_Menu.php:216
1358
- msgid "Title:"
1359
- msgstr "Titlu:"
1360
 
1361
- #: themes/default/SQ_Menu.php:217
1362
- msgid "Tips: Length 10-75 chars"
1363
- msgstr "Atentie: Lungimea 10-75 caractere"
1364
 
1365
- #: themes/default/SQ_Menu.php:220
1366
- msgid "Description:"
1367
- msgstr "Descrierea:"
1368
 
1369
- #: themes/default/SQ_Menu.php:221
1370
- msgid "Tips: Length 70-165 chars"
1371
- msgstr "Atentie: Lungimea 70-165 caractere"
1372
 
1373
- #: themes/default/SQ_Menu.php:224
1374
- msgid "Keywords:"
1375
- msgstr "Cuvinte cheie:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1376
 
1377
- #: themes/default/SQ_Menu.php:225
1378
- msgid "Tips: 2-4 keywords"
1379
- msgstr "Atentie: 2-4 cuvinte cheie"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1380
 
1381
- #: themes/default/SQ_Menu.php:229
 
 
 
 
 
 
 
 
 
 
 
 
1382
  #, fuzzy
1383
- msgid "You First Page Preview (Title, Description, Keywords)"
1384
- msgstr "Optimizare prima pagina (Titlu, Descriere, Cuvinte cheie)"
1385
 
1386
- #: themes/default/SQ_Menu.php:237
1387
- msgid "Check with google ..."
1388
- msgstr "Verificat cu google ..."
1389
 
1390
- #: themes/default/SQ_Menu.php:240
1391
- msgid ""
1392
- "If you don't see any changes in custom optimization, check if another SEO "
1393
- "plugin affects Squirrly SEO"
1394
  msgstr ""
1395
- "Daca nu sunt modificari in titlu prin aceasta optimizate, verifica daca nu e "
1396
- "afectat de alte pluginuri instalate."
1397
 
1398
- #: themes/default/SQ_Menu.php:246
1399
- msgid "Squirrly Options"
1400
- msgstr "Optiuni Squirrly"
1401
 
1402
- #: themes/default/SQ_Menu.php:247
1403
- #, php-format
1404
- msgid "%sThe right premises in working with Squirrly, WordPress SEO plugin%s"
1405
  msgstr ""
1406
 
1407
- #: themes/default/SQ_Menu.php:248
1408
- #, php-format
1409
- msgid "%sGetting inspired with Squirrly WordPress SEO plugin%s"
1410
  msgstr ""
1411
 
1412
- #: themes/default/SQ_Menu.php:250
1413
- #, php-format
1414
- msgid "%sThere is a New SEO Live Assistant from Squirrly%s"
1415
  msgstr ""
1416
 
1417
- #: themes/default/SQ_Menu.php:251
1418
- #, php-format
1419
- msgid "%sHow to create Human friendly content with the WordPress SEO plugin?%s"
1420
  msgstr ""
1421
 
1422
- #: themes/default/SQ_Menu.php:264
1423
- msgid "Let Squirrly warn me if there are errors related to SEO settings"
1424
- msgstr "Lasa Squirrly sa ma anunte daca sunt erori SEO in setari"
1425
 
1426
- #: themes/default/SQ_Menu.php:275
1427
- msgid ""
1428
- "Show <strong>\"Enter a keyword\"</strong> bubble when posting a new article."
1429
  msgstr ""
1430
- "Afiseaza balonul <strong>\"Adauga un keyword\"</strong>cand se posteaza un "
1431
- "nou articol."
1432
 
1433
- #: themes/default/SQ_Menu.php:286
1434
- msgid ""
1435
- "Always show <strong>Keyword Informations</strong> about the selected keyword."
1436
  msgstr ""
1437
- "Afiseaza <strong>Informatii de cuvint cheie</strong> dupa alegerea "
1438
- "cuvantului la postare."
1439
 
1440
- #: themes/default/SQ_Menu.php:298
1441
- msgid "Use <strong> the NEW version of the SEO Live Assistant</strong>."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1442
  msgstr ""
1443
 
1444
- #: themes/default/SQ_Menu.php:309
1445
- msgid "Add the Post tags in meta keyword."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1446
  msgstr ""
1447
 
1448
- #: themes/default/SQ_Menu.php:315
1449
- msgid ""
1450
- "Select the google extension for which Squirrly will check the google rank"
1451
  msgstr ""
1452
 
1453
- #: themes/default/SQ_Menu.php:319
1454
- msgid "Default"
1455
  msgstr ""
1456
 
1457
- #: themes/default/SQ_Menu.php:320
1458
- msgid "American Samoa"
1459
  msgstr ""
1460
 
1461
- #: themes/default/SQ_Menu.php:321
1462
- msgid "Anguilla"
1463
  msgstr ""
1464
 
1465
- #: themes/default/SQ_Menu.php:322
1466
- msgid "Antigua and Barbuda"
1467
  msgstr ""
1468
 
1469
- #: themes/default/SQ_Menu.php:323
1470
- msgid "Argentina"
1471
  msgstr ""
1472
 
1473
- #: themes/default/SQ_Menu.php:324
1474
- msgid "Australia"
1475
  msgstr ""
1476
 
1477
- #: themes/default/SQ_Menu.php:325
1478
- msgid "Austria"
1479
  msgstr ""
1480
 
1481
- #: themes/default/SQ_Menu.php:326
1482
- msgid "Azerbaijan"
1483
  msgstr ""
1484
 
1485
- #: themes/default/SQ_Menu.php:327
1486
- msgid "Belgium"
1487
- msgstr ""
1488
 
1489
- #: themes/default/SQ_Menu.php:328
1490
- msgid "Brazil"
 
1491
  msgstr ""
1492
 
1493
- #: themes/default/SQ_Menu.php:329
1494
- msgid "British Virgin Islands"
1495
  msgstr ""
1496
 
1497
- #: themes/default/SQ_Menu.php:330
1498
- msgid "Burundi"
1499
  msgstr ""
1500
 
1501
- #: themes/default/SQ_Menu.php:331
1502
- msgid "Canada"
1503
  msgstr ""
1504
 
1505
- #: themes/default/SQ_Menu.php:332
1506
- msgid "Chad"
1507
  msgstr ""
1508
 
1509
- #: themes/default/SQ_Menu.php:333
1510
- msgid "Chile"
1511
  msgstr ""
1512
 
1513
- #: themes/default/SQ_Menu.php:334
1514
- msgid "Colombia"
1515
  msgstr ""
1516
 
1517
- #: themes/default/SQ_Menu.php:335
1518
- msgid "Costa Rica"
1519
  msgstr ""
1520
 
1521
- #: themes/default/SQ_Menu.php:336
1522
- msgid "Côte d'Ivoire"
1523
  msgstr ""
1524
 
1525
- #: themes/default/SQ_Menu.php:337
1526
- msgid "Cuba"
1527
  msgstr ""
1528
 
1529
- #: themes/default/SQ_Menu.php:338
1530
- msgid "Czech Republic"
1531
- msgstr ""
1532
 
1533
- #: themes/default/SQ_Menu.php:339
1534
- msgid "Dem. Rep. of the Congo"
1535
  msgstr ""
1536
 
1537
- #: themes/default/SQ_Menu.php:340
1538
- msgid "Denmark"
1539
  msgstr ""
1540
 
1541
- #: themes/default/SQ_Menu.php:341
1542
- msgid "Djibouti"
1543
  msgstr ""
1544
 
1545
- #: themes/default/SQ_Menu.php:342
1546
- msgid "Dominican Republic"
1547
  msgstr ""
1548
 
1549
- #: themes/default/SQ_Menu.php:343
1550
- msgid "Ecuador"
 
1551
  msgstr ""
1552
 
1553
- #: themes/default/SQ_Menu.php:344
1554
- msgid "El Salvador"
 
1555
  msgstr ""
1556
 
1557
- #: themes/default/SQ_Menu.php:345
1558
- msgid "Federated States of Micronesia"
1559
  msgstr ""
1560
 
1561
- #: themes/default/SQ_Menu.php:346
1562
- msgid "Fiji"
1563
  msgstr ""
1564
 
1565
- #: themes/default/SQ_Menu.php:347
1566
- msgid "Finland"
1567
  msgstr ""
1568
 
1569
- #: themes/default/SQ_Menu.php:348
1570
- #, fuzzy
1571
- msgid "France"
1572
- msgstr "Renunta"
1573
-
1574
- #: themes/default/SQ_Menu.php:349
1575
- msgid "The Gambia"
1576
  msgstr ""
1577
 
1578
- #: themes/default/SQ_Menu.php:350
1579
- msgid "Georgia"
1580
  msgstr ""
1581
 
1582
- #: themes/default/SQ_Menu.php:351
1583
- msgid "Germany"
1584
  msgstr ""
1585
 
1586
- #: themes/default/SQ_Menu.php:352
1587
- msgid "Gibraltar"
1588
  msgstr ""
1589
 
1590
- #: themes/default/SQ_Menu.php:353
1591
- msgid "Greece"
1592
  msgstr ""
1593
 
1594
- #: themes/default/SQ_Menu.php:354
1595
- msgid "Greenland"
1596
  msgstr ""
1597
 
1598
- #: themes/default/SQ_Menu.php:355
1599
- msgid "Guernsey"
1600
  msgstr ""
1601
 
1602
- #: themes/default/SQ_Menu.php:356
1603
- msgid "Honduras"
1604
  msgstr ""
1605
 
1606
- #: themes/default/SQ_Menu.php:357
1607
- msgid "Hong Kong"
1608
  msgstr ""
1609
 
1610
- #: themes/default/SQ_Menu.php:358
1611
- msgid "Hungary"
1612
  msgstr ""
1613
 
1614
- #: themes/default/SQ_Menu.php:359
1615
- msgid "India"
1616
  msgstr ""
1617
 
1618
- #: themes/default/SQ_Menu.php:360
1619
- msgid "Ireland"
1620
  msgstr ""
1621
 
1622
- #: themes/default/SQ_Menu.php:361
1623
- msgid "Isle of Man"
1624
  msgstr ""
1625
 
1626
- #: themes/default/SQ_Menu.php:362
1627
- msgid "Israel"
1628
  msgstr ""
1629
 
1630
- #: themes/default/SQ_Menu.php:363
1631
- msgid "Italy"
 
1632
  msgstr ""
1633
 
1634
- #: themes/default/SQ_Menu.php:364
1635
- msgid "Jamaica"
1636
  msgstr ""
1637
 
1638
- #: themes/default/SQ_Menu.php:365
1639
- msgid "Japan"
1640
  msgstr ""
1641
 
1642
- #: themes/default/SQ_Menu.php:366
1643
- msgid "Jersey"
1644
  msgstr ""
1645
 
1646
- #: themes/default/SQ_Menu.php:367
1647
- msgid "Kazakhstan"
1648
  msgstr ""
1649
 
1650
- #: themes/default/SQ_Menu.php:368
1651
- msgid "Korea"
1652
  msgstr ""
1653
 
1654
- #: themes/default/SQ_Menu.php:369
1655
- msgid "Latvia"
 
 
1656
  msgstr ""
1657
 
1658
- #: themes/default/SQ_Menu.php:370
1659
- msgid "Lesotho"
1660
  msgstr ""
1661
 
1662
- #: themes/default/SQ_Menu.php:371
1663
- msgid "Liechtenstein"
1664
  msgstr ""
1665
 
1666
- #: themes/default/SQ_Menu.php:372
1667
- msgid "Lithuania"
1668
  msgstr ""
1669
 
1670
- #: themes/default/SQ_Menu.php:373
1671
- msgid "Luxembourg"
1672
  msgstr ""
1673
 
1674
- #: themes/default/SQ_Menu.php:374
1675
- msgid "Malawi"
1676
  msgstr ""
1677
 
1678
- #: themes/default/SQ_Menu.php:375
1679
- msgid "Malaysia"
1680
  msgstr ""
1681
 
1682
- #: themes/default/SQ_Menu.php:376
1683
- msgid "Malta"
1684
  msgstr ""
1685
 
1686
- #: themes/default/SQ_Menu.php:377
1687
- msgid "Mauritius"
1688
  msgstr ""
1689
 
1690
- #: themes/default/SQ_Menu.php:378
1691
- msgid "México"
 
1692
  msgstr ""
1693
 
1694
- #: themes/default/SQ_Menu.php:379
1695
- msgid "Montserrat"
1696
- msgstr ""
1697
 
1698
- #: themes/default/SQ_Menu.php:380
1699
- msgid "Namibia"
1700
- msgstr ""
1701
 
1702
- #: themes/default/SQ_Menu.php:381
1703
- msgid "Nepal"
1704
- msgstr ""
1705
 
1706
- #: themes/default/SQ_Menu.php:382
1707
- msgid "Netherlands"
1708
- msgstr ""
1709
 
1710
- #: themes/default/SQ_Menu.php:383
1711
- msgid "New Zealand"
1712
- msgstr ""
 
 
 
1713
 
1714
- #: themes/default/SQ_Menu.php:384
1715
- msgid "Nicaragua"
1716
- msgstr ""
1717
 
1718
- #: themes/default/SQ_Menu.php:385
1719
- msgid "Norfolk Island"
1720
- msgstr ""
1721
 
1722
- #: themes/default/SQ_Menu.php:386
1723
- msgid "Pakistan"
1724
- msgstr ""
1725
 
1726
- #: themes/default/SQ_Menu.php:387
1727
- msgid "Panamá"
1728
- msgstr ""
1729
 
1730
- #: themes/default/SQ_Menu.php:388
1731
- msgid "Paraguay"
1732
- msgstr ""
 
 
 
1733
 
1734
- #: themes/default/SQ_Menu.php:389
1735
- msgid "Perú"
1736
- msgstr ""
1737
 
1738
- #: themes/default/SQ_Menu.php:390
1739
- msgid "Philippines"
1740
- msgstr ""
1741
 
1742
- #: themes/default/SQ_Menu.php:391
1743
- msgid "Pitcairn Islands"
1744
- msgstr ""
1745
 
1746
- #: themes/default/SQ_Menu.php:392
1747
- msgid "Poland"
1748
- msgstr ""
1749
 
1750
- #: themes/default/SQ_Menu.php:393
1751
- msgid "Portugal"
1752
- msgstr ""
1753
 
1754
- #: themes/default/SQ_Menu.php:394
1755
- msgid "Puerto Rico"
1756
- msgstr ""
1757
 
1758
- #: themes/default/SQ_Menu.php:395
1759
- msgid "Rep. of the Congo"
1760
- msgstr ""
1761
 
1762
- #: themes/default/SQ_Menu.php:396
1763
- msgid "Romania"
1764
- msgstr ""
1765
 
1766
- #: themes/default/SQ_Menu.php:397
1767
- msgid "Russia"
1768
- msgstr ""
1769
 
1770
- #: themes/default/SQ_Menu.php:398
1771
- msgid "Rwanda"
1772
- msgstr ""
1773
 
1774
- #: themes/default/SQ_Menu.php:399
1775
- msgid "Saint Helena"
1776
- msgstr ""
1777
 
1778
- #: themes/default/SQ_Menu.php:400
1779
- msgid "San Marino"
1780
- msgstr ""
1781
 
1782
- #: themes/default/SQ_Menu.php:401
1783
- msgid "Singapore"
1784
- msgstr ""
1785
 
1786
- #: themes/default/SQ_Menu.php:402
1787
- msgid "Slovakia"
1788
- msgstr ""
1789
 
1790
- #: themes/default/SQ_Menu.php:403
1791
- msgid "South Africa"
1792
- msgstr ""
1793
 
1794
- #: themes/default/SQ_Menu.php:404
1795
- msgid "Spain"
1796
- msgstr ""
 
1797
 
1798
- #: themes/default/SQ_Menu.php:405
1799
- msgid "Sweden"
1800
- msgstr ""
1801
 
1802
- #: themes/default/SQ_Menu.php:406
1803
- msgid "Switzerland"
1804
- msgstr ""
1805
 
1806
- #: themes/default/SQ_Menu.php:407
1807
- msgid "Taiwan"
1808
- msgstr ""
1809
 
1810
- #: themes/default/SQ_Menu.php:408
1811
- msgid "Thailand"
1812
- msgstr ""
1813
 
1814
- #: themes/default/SQ_Menu.php:409
1815
- msgid "Trinidad and Tobago"
1816
- msgstr ""
1817
 
1818
- #: themes/default/SQ_Menu.php:410
1819
- msgid "Turkey"
1820
- msgstr ""
1821
 
1822
- #: themes/default/SQ_Menu.php:411
1823
- msgid "Ukraine"
1824
- msgstr ""
1825
 
1826
- #: themes/default/SQ_Menu.php:412
1827
- msgid "United Arab Emirates"
1828
- msgstr ""
1829
 
1830
- #: themes/default/SQ_Menu.php:413
1831
- msgid "United Kingdom"
1832
- msgstr ""
1833
 
1834
- #: themes/default/SQ_Menu.php:414
1835
- msgid "Uruguay"
1836
- msgstr ""
1837
 
1838
- #: themes/default/SQ_Menu.php:415
1839
- msgid "Uzbekistan"
1840
- msgstr ""
1841
 
1842
- #: themes/default/SQ_Menu.php:416
1843
- msgid "Vanuatu"
1844
- msgstr ""
1845
 
1846
- #: themes/default/SQ_Menu.php:417
1847
- msgid "Venezuela"
1848
- msgstr ""
1849
 
1850
- #: themes/default/SQ_Menu.php:429
1851
- msgid ""
1852
- "Restricts search results to results originating in the above particular "
1853
- "country."
1854
- msgstr ""
1855
 
1856
- #: themes/default/SQ_Menu.php:438
1857
- msgid "Change the Website Icon"
1858
- msgstr "Schimba icoana site-ului"
1859
 
1860
- #: themes/default/SQ_Menu.php:439
1861
- msgid ""
1862
- "Now even the tablets and smartphone browsers also make use of your icons. "
1863
- "This has led to an increasesd importance to having a good favicon."
1864
- msgstr ""
1865
 
1866
- #: themes/default/SQ_Menu.php:440
1867
- #, php-format
1868
- msgid ""
1869
- "You can use %shttp://convertico.com/%s to convert your photo to icon and "
1870
- "upload it here after that."
1871
- msgstr ""
1872
- "Poti folosi %shttp://convertico.com/%s pentru a converti imaginea in icoana "
1873
- "si poti incarca icoana aici"
1874
 
1875
- #: themes/default/SQ_Menu.php:445
1876
- msgid "File types: JPG, JPEG, GIF and PNG."
1877
- msgstr "Tip fisiere JPEG,JPG,GIF sau PNG "
1878
 
1879
- #: themes/default/SQ_Menu.php:449
1880
- msgid "Upload file:"
1881
- msgstr "Urca fisier:"
1882
 
1883
- #: themes/default/SQ_Menu.php:454
1884
- msgid "Upload"
1885
- msgstr "Upload"
1886
 
1887
- #: themes/default/SQ_Menu.php:458
1888
- msgid ""
1889
- "If you don't see the new icon in your browser, empty the browser cache and "
1890
- "refresh the page."
1891
- msgstr ""
1892
- "Daca nu vezi noua icoana in browser, goleste cache-ul din browser si da "
1893
- "refresh la pagina."
1894
 
1895
- #: themes/default/SQ_Menu.php:463
1896
- msgid "Tracking Tools"
1897
- msgstr ""
1898
 
1899
- #: themes/default/SQ_Menu.php:464
1900
- #, php-format
1901
- msgid "%sLink your Google+ profile to the content you create%s"
1902
- msgstr ""
 
 
1903
 
1904
- #: themes/default/SQ_Menu.php:465
1905
- #, php-format
1906
- msgid ""
1907
- "%sStarBox, the author box that’s pushing content marketing to the stars%s"
1908
- msgstr ""
 
1909
 
1910
- #: themes/default/SQ_Menu.php:466
1911
- #, php-format
1912
- msgid "%sHow to Get the Most Out of Google Analytics%s"
1913
- msgstr ""
1914
 
1915
- #: themes/default/SQ_Menu.php:467
1916
- #, php-format
1917
- msgid "%sA Beginner’s Guide to Facebook Insights%s"
1918
- msgstr ""
 
 
 
1919
 
1920
- #: themes/default/SQ_Menu.php:473
1921
- msgid "Google Plus URL:"
1922
- msgstr "URL Google Plus:"
1923
 
1924
- #: themes/default/SQ_Menu.php:477
1925
- #, fuzzy, php-format
1926
- msgid "Google %sAnalytics ID%s:"
1927
- msgstr "Google %sAnalytics ID%s:"
1928
 
1929
- #: themes/default/SQ_Menu.php:481
1930
- #, fuzzy, php-format
1931
- msgid "Facebook META code (for %sInsights%s ):"
1932
- msgstr "Facebook META code (pentru %sInsights%s):"
1933
 
1934
- #: themes/default/SQ_Menu.php:485
1935
- msgid "Pinterest META code:"
1936
- msgstr ""
 
 
 
 
1937
 
1938
- #: themes/default/SQ_Menu.php:491
1939
  #, fuzzy
1940
- msgid "Search Engines Tools"
1941
- msgstr "Pentru motoare de cautare"
1942
 
1943
- #: themes/default/SQ_Menu.php:492
1944
- #, php-format
1945
- msgid "%sBest practices to help Google find, crawl, and index your site%s"
1946
- msgstr ""
1947
 
1948
- #: themes/default/SQ_Menu.php:493
1949
- #, php-format
1950
- msgid "%sBing Webmaster Tools Help & How-To Center%s"
1951
- msgstr ""
1952
 
1953
- #: themes/default/SQ_Menu.php:499
1954
- #, fuzzy, php-format
1955
- msgid "Google META verification code for %sWebmaster Tool%s:"
1956
- msgstr "Cod META pentru %sGoogle Webmaster Tool%s"
1957
 
1958
- #: themes/default/SQ_Menu.php:503
1959
- #, fuzzy, php-format
1960
- msgid "Bing META code (for %sWebmaster Tool%s ):"
1961
- msgstr "Bing META code (pentru %sWebmaster Tool%s):"
 
 
1962
 
1963
- #: themes/default/SQ_Menu.php:507
1964
- #, fuzzy, php-format
1965
- msgid "Alexa META code (for %sAlexa Tool%s ):"
1966
- msgstr "Bing META code (pentru %sWebmaster Tool%s):"
 
 
 
 
 
 
 
 
 
 
 
 
 
1967
 
1968
  #~ msgid "Squirrly article rank"
1969
  #~ msgstr "Squirrly article rank"
@@ -2055,9 +3893,6 @@ msgstr "Bing META code (pentru %sWebmaster Tool%s):"
2055
  #~ msgid "Beginner"
2056
  #~ msgstr "Incepator"
2057
 
2058
- #~ msgid "Advanced"
2059
- #~ msgstr "Avansat"
2060
-
2061
  #~ msgid "Select Advanced only if you have SEO knowledge."
2062
  #~ msgstr "Alege Avansat doar daca ai cunostinte SEO"
2063
 
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: squirrly_seo\n"
4
+ "POT-Creation-Date: 2017-10-24 10:08+0300\n"
5
+ "PO-Revision-Date: 2017-10-24 10:08+0300\n"
6
  "Last-Translator: Squirrly <contact@squirrly.co>\n"
7
  "Language-Team: Squirrly UK <support@squirrly.co>\n"
8
  "Language: ro_RO\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.8.2\n"
13
  "X-Poedit-KeywordsList: __;_e\n"
14
+ "X-Poedit-Basepath: d:/Work/localhost/wordpress/wp/wp-content/plugins/"
15
+ "squirrly-seo\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
+ #: classes/Error.php:16
20
  msgid ""
21
  "Function get_class does not exists! Is required for Squirrly to work "
22
  "properly."
24
  "Functia get_class nu exista! E necesara pentru a functiona corect pluginul "
25
  "Squirrly"
26
 
27
+ #: classes/Error.php:19
28
  msgid ""
29
  "Function file_exists does not exists! Is required for Squirrly to work "
30
  "properly."
32
  "Functia file_exists nu exista! E necesara pentru a functiona corect pluginul "
33
  "Squirrly"
34
 
35
+ #: classes/Error.php:23
36
  msgid "The home directory is not set!"
37
  msgstr "Directorul home nu este setat!"
38
 
39
+ #: classes/Error.php:27
40
  msgid "The PHP version has to be greater then 4.0"
41
  msgstr "Versiunea PHP trebuie sa fie mai mare de 4.0"
42
 
43
+ #: classes/Error.php:65
44
  msgid "Turn off warnings!"
45
  msgstr "Opreste avertizarile"
46
 
47
+ #: classes/Error.php:73
48
+ msgid "Don't bother me!"
49
+ msgstr ""
 
 
 
 
50
 
51
+ #: classes/Tools.php:59
52
  msgid "Getting started"
53
  msgstr "Ajutor"
54
 
55
+ #: classes/Tools.php:238
56
+ msgid "Format"
57
+ msgstr ""
58
+
59
+ #: classes/Tools.php:246 classes/Tools.php:262
60
+ msgid "Category"
61
+ msgstr ""
62
+
63
+ #: classes/Tools.php:254 classes/Tools.php:270
64
+ msgid "Tag"
65
+ msgstr ""
66
+
67
+ #: classes/Tools.php:278
68
+ msgid "Shipping Option"
69
+ msgstr ""
70
+
71
+ #: classes/Tools.php:286
72
+ msgid "Author at"
73
+ msgstr ""
74
+
75
+ #: classes/Tools.php:318
76
+ msgid "You searched for"
77
+ msgstr ""
78
+
79
+ #: classes/Tools.php:334
80
+ msgid "Page not found"
81
+ msgstr ""
82
 
83
+ #: classes/Tools.php:855
84
  msgid "Fix it for me!"
85
  msgstr "Repara-l"
86
 
87
+ #: classes/Tools.php:861
88
+ msgid "Activate the Squirrly SEO for your blog (recommended)"
89
+ msgstr ""
90
 
91
+ #: classes/Tools.php:872
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:880
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:888
104
  msgid ""
105
  "You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or "
106
  "disable the other SEO Plugins"
108
  "Aveti duplicate in META Open Graph. Opriti Squirrly Seo Open Graph sau "
109
  "dezactivati alte plugin-uri de SEO"
110
 
111
+ #: classes/Tools.php:896
112
  msgid ""
113
  "You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card "
114
  "or disable the other SEO Plugins"
116
  "Aveti duplicate in META Twitter Card. Opriti Squirrly Seo Twitter Card sau "
117
  "dezactivati alte plugin-uri de SEO"
118
 
119
+ #: classes/Tools.php:905
120
  msgid "You're blocking google from indexing your site!"
121
  msgstr "Blochezi accesul la google spre indexarea site-ului"
122
 
123
+ #: classes/Tools.php:912
124
  msgid ""
125
  "It is highly recommended that you include the %postname% variable in the "
126
  "permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
130
  ">Mergi la Setari > Legaturi permanente si adauga /%postname%/ in campul "
131
  "Structură personalizată"
132
 
133
+ #: classes/Tools.php:919
134
  msgid ""
135
+ "It is highly recommended to change or remove the default Wordpress Tagline. "
136
+ "<br />Go to Settings > General > Tagline"
137
  msgstr ""
138
 
139
+ #: classes/Tools.php:925
140
+ msgid "Great! We didn't find any issue in your site."
141
+ msgstr ""
142
 
143
+ #: classes/Tools.php:1070
144
+ msgid "Just another WordPress site"
145
+ msgstr ""
146
 
147
+ #: config/config.php:43
148
+ msgid "Displays the date of the post/page once it's published"
149
+ msgstr ""
150
+
151
+ #: config/config.php:44
152
+ msgid "Adds the title of the post/page once it’s published"
153
+ msgstr ""
154
+
155
+ #: config/config.php:45
156
+ msgid "Displays the number of the current page (i.e. 1 of 6)"
157
+ msgstr ""
158
+
159
+ #: config/config.php:46
160
+ msgid "Adds the title of a page's parent page"
161
+ msgstr ""
162
+
163
+ #: config/config.php:47
164
+ msgid "Adds the site's name to the post description"
165
+ msgstr ""
166
+
167
+ #: config/config.php:48
168
+ msgid "Adds the tagline/description of your site"
169
+ msgstr ""
170
+
171
+ #: config/config.php:49
172
+ msgid ""
173
+ "Will display an excerpt from the post/page (if not customized, the excerpt "
174
+ "will be auto-generated)"
175
+ msgstr ""
176
+
177
+ #: config/config.php:50
178
+ msgid "Will display an excerpt from the post/page (no auto-generation)"
179
+ msgstr ""
180
+
181
+ #: config/config.php:51
182
+ msgid "Adds the current tag(s) to the post description"
183
+ msgstr ""
184
+
185
+ #: config/config.php:52
186
+ msgid "Adds the post category (several categories will be comma-separated)"
187
+ msgstr ""
188
+
189
+ #: config/config.php:53
190
+ msgid "Adds the primary category of the post/page"
191
+ msgstr ""
192
+
193
+ #: config/config.php:54
194
+ msgid "Adds the category description to the post description"
195
+ msgstr ""
196
+
197
+ #: config/config.php:55
198
+ msgid "Adds the tag description"
199
+ msgstr ""
200
+
201
+ #: config/config.php:56
202
+ msgid "Adds the term description"
203
+ msgstr ""
204
+
205
+ #: config/config.php:57
206
+ msgid "Adds the term name"
207
+ msgstr ""
208
+
209
+ #: config/config.php:58
210
+ msgid "Displays the search phrase (if it appears in the post)"
211
+ msgstr ""
212
+
213
+ #: config/config.php:59
214
+ msgid "Places a separator between the elements of the post description"
215
+ msgstr ""
216
+
217
+ #: config/config.php:60
218
+ msgid "Replaces the publication date of a post/page with the modified one"
219
+ msgstr ""
220
 
221
+ #: config/config.php:61
222
+ msgid "Displays the author's nicename"
223
+ msgstr ""
224
+
225
+ #: config/config.php:62
226
+ msgid "Adds the author's biographical info to the post description"
227
+ msgstr ""
228
+
229
+ #: config/config.php:63
230
+ msgid "Displays the current date of a post/page"
231
+ msgstr ""
232
+
233
+ #: config/config.php:64
234
+ msgid "Adds the post's keyword to the post description"
235
+ msgstr ""
236
+
237
+ #: controllers/Api.php:40
238
+ msgid "Connection expired. Please try again"
239
+ msgstr ""
240
+
241
+ #: controllers/Api.php:54 controllers/Api.php:57 controllers/Api.php:60
242
+ msgid "Author not found"
243
+ msgstr ""
244
+
245
+ #: controllers/FrontMenu.php:32
246
+ msgid "You don't have enough pemission to edit this article"
247
+ msgstr ""
248
+
249
+ #: controllers/Menu.php:44 controllers/Menu.php:55
250
+ #, php-format
251
+ msgid ""
252
+ "Good news, %s is integrated in Squirrly SEO now and you don't have to run 2 "
253
+ "plugins anymore"
254
+ msgstr ""
255
+
256
+ #: controllers/Menu.php:99
257
+ msgid "See Your Rank on Google"
258
+ msgstr ""
259
+
260
+ #: controllers/Menu.php:151
261
+ msgid "Custom SEO"
262
+ msgstr ""
263
+
264
+ #: controllers/Menu.php:194
265
+ msgid ""
266
+ "Check out the Squirrly Analytics section. <a href=\"admin.php?page=sq_posts"
267
+ "\" title=\"Squirrly Analytics\">Click here</a>"
268
+ msgstr ""
269
+
270
+ #: controllers/Menu.php:213
271
+ msgid " Dashboard"
272
+ msgstr ""
273
+
274
+ #: controllers/Menu.php:214
275
+ msgid "First Step"
276
+ msgstr ""
277
+
278
+ #: controllers/Menu.php:214
279
+ msgid "Dashboard"
280
+ msgstr "Dashboard"
281
+
282
+ #: controllers/Menu.php:223
283
+ msgid " Performance Analytics"
284
+ msgstr ""
285
+
286
+ #: controllers/Menu.php:224
287
  msgid "Performance <br />Analytics"
288
  msgstr ""
289
 
290
+ #: controllers/Menu.php:232
291
+ msgid " Keyword Research"
292
  msgstr ""
293
 
294
+ #: controllers/Menu.php:233
295
+ msgid "Keyword Research"
296
+ msgstr ""
297
+
298
+ #: controllers/Menu.php:240
299
+ msgid " Live Assistant"
300
+ msgstr ""
301
+
302
+ #: controllers/Menu.php:241
303
+ msgid "Live Assistant"
304
+ msgstr ""
305
+
306
+ #: controllers/Menu.php:247
307
+ msgid " Copywriting"
308
+ msgstr ""
309
+
310
+ #: controllers/Menu.php:248
311
+ msgid "Copywriting"
312
+ msgstr ""
313
+
314
+ #: controllers/Menu.php:256
315
+ msgid " SEO Audit"
316
+ msgstr ""
317
+
318
+ #: controllers/Menu.php:257
319
+ msgid "Site Audit"
320
  msgstr ""
321
 
322
+ #: controllers/Menu.php:265
323
+ msgid " SEO Settings"
324
+ msgstr ""
325
 
326
+ #: controllers/Menu.php:266 view/BlockToolbar.php:4
327
  #, fuzzy
328
  msgid "SEO Settings"
329
  msgstr "Setari"
330
 
331
+ #: controllers/Menu.php:274
332
+ msgid " Advanced Settings"
333
+ msgstr ""
334
+
335
+ #: controllers/Menu.php:275 view/BlockSettings.php:22
336
+ msgid "Advanced Settings"
337
+ msgstr ""
338
+
339
+ #: controllers/Menu.php:282
340
+ msgid " SEO Patterns"
341
+ msgstr ""
342
+
343
+ #: controllers/Menu.php:283 view/BlockToolbar.php:14
344
+ msgid "Patterns"
345
+ msgstr ""
346
+
347
+ #: controllers/Menu.php:290
348
+ msgid " Account Info"
349
+ msgstr ""
350
+
351
+ #: controllers/Menu.php:291
352
+ msgid "Account Info"
353
+ msgstr ""
354
+
355
+ #: controllers/Menu.php:298
356
+ msgid " Support"
357
+ msgstr ""
358
+
359
+ #: controllers/Menu.php:299 view/BlockSupport.php:18
360
+ msgid "Support"
361
+ msgstr "Suport"
362
+
363
+ #: controllers/Menu.php:306
364
+ msgid "Become an Affiliate with "
365
+ msgstr ""
366
+
367
+ #: controllers/Menu.php:307
368
+ msgid "Become an Affiliate"
369
+ msgstr ""
370
+
371
+ #: controllers/Menu.php:315
372
+ msgid "Import SEO "
373
+ msgstr ""
374
+
375
+ #: controllers/Menu.php:316 view/BlockImport.php:77
376
+ msgid "Import SEO"
377
+ msgstr ""
378
+
379
+ #: controllers/Menu.php:343
380
+ #, php-format
381
+ msgid "Go back and complete the Squirrly Tasks for today %sContinue%s"
382
+ msgstr ""
383
 
384
+ #: controllers/Menu.php:355
385
+ msgid "SEO Snippet"
386
+ msgstr ""
387
 
388
+ #: controllers/PostsList.php:102
389
  msgid "Squirrly"
390
  msgstr "Squirrly"
391
 
392
+ #: controllers/PostsList.php:129
393
  msgid "Custom description: "
394
  msgstr "Descrierea:"
395
 
396
+ #: controllers/PostsList.php:129
397
  msgid "Custom title: "
398
  msgstr "Titlul"
399
 
400
+ #: controllers/PostsList.php:167
401
  msgid "SEO Analytics, by Squirrly"
402
  msgstr "SEO Analytics, de la Squirrly"
403
 
404
+ #: controllers/PostsList.php:168 view/Blockseo.php:10
405
  msgid "Update"
406
  msgstr "Update"
407
 
408
+ #: controllers/PostsList.php:172
409
  msgid "Not Public"
410
  msgstr "Ciorna"
411
 
412
+ #: controllers/PostsList.php:173
413
  msgid "Could not process"
414
  msgstr "Nu s-a putut verifica"
415
 
416
+ #: controllers/PostsList.php:328 controllers/PostsList.php:346
417
+ #, php-format
418
+ msgid "Not in top 100 for: %s"
 
 
 
 
419
  msgstr ""
420
 
421
+ #: controllers/PostsList.php:330 controllers/PostsList.php:348
422
+ msgid "The URL is Indexed"
423
+ msgstr ""
 
424
 
425
+ #: controllers/PostsList.php:332 controllers/PostsList.php:350
426
+ #: models/BlockPostsAnalytics.php:438
427
  #, php-format
428
  msgid "%s"
429
  msgstr ""
430
 
431
+ #: core/BlockAffiliate.php:38
432
  #, php-format
433
  msgid "Error: %s"
434
  msgstr "Eroare: %s"
435
 
436
+ #: core/BlockAffiliate.php:41
 
437
  msgid "An error occured. Mabe a network error :("
438
  msgstr "A aparut o eroare. Probabil o eroare de retea :("
439
 
440
+ #: core/BlockImport.php:32
441
+ msgid "All the Plugin settings were imported successfuly!"
442
+ msgstr ""
443
+
444
+ #: core/BlockImport.php:34
445
+ msgid "No settings found for this plugin/theme."
446
+ msgstr ""
447
+
448
+ #: core/BlockImport.php:56
449
+ #, php-format
450
+ msgid ""
451
+ "%s SEO records were imported successfuly! You can now deactivate the %s "
452
+ "plugin"
453
+ msgstr ""
454
+
455
+ #: core/BlockImport.php:58
456
+ #, php-format
457
+ msgid ""
458
+ "There are no SEO records with this plugin. You can now deactivate the %s "
459
+ "plugin"
460
+ msgstr ""
461
+
462
+ #: core/BlockSettingsSeo.php:26
463
+ #, php-format
464
+ msgid "You can now import into Squirrly SEO all the SEO Settings from %s"
465
+ msgstr ""
466
+
467
+ #: core/BlockSettingsSeo.php:35 core/Blockseo.php:13
468
+ msgid "Too short"
469
+ msgstr "Prea scurt"
470
+
471
+ #: core/BlockSettingsSeo.php:36 core/Blockseo.php:14
472
+ msgid "Too long"
473
+ msgstr "Prea lung"
474
+
475
+ #: core/BlockSettingsSeo.php:63
476
+ msgid "You don't have enough pemission to activate this feature"
477
+ msgstr ""
478
+
479
+ #: core/BlockSettingsSeo.php:435
480
+ msgid "Great! The backup is restored."
481
+ msgstr ""
482
+
483
+ #: core/BlockSettingsSeo.php:437 core/BlockSettingsSeo.php:440
484
+ #: core/BlockSettingsSeo.php:485 core/BlockSettingsSeo.php:488
485
+ msgid "Error! The backup is not valid."
486
+ msgstr ""
487
+
488
+ #: core/BlockSettingsSeo.php:443 core/BlockSettingsSeo.php:491
489
+ msgid "Error! You have to enter a previous saved backup file."
490
+ msgstr ""
491
+
492
+ #: core/BlockSettingsSeo.php:482
493
+ msgid "Great! The SEO backup is restored."
494
+ msgstr ""
495
+
496
+ #: core/BlockSettingsSeo.php:498
497
+ msgid "Great! Squirrly Data Settings is up to date now."
498
+ msgstr ""
499
+
500
+ #: core/BlockSupport.php:22
501
  msgid "Plugin Feedback"
502
  msgstr "Feedback Squirrly"
503
 
504
+ #: core/BlockSupport.php:58
505
  msgid "Thank you for your feedback"
506
  msgstr "Multumesc pentru feedback"
507
 
508
+ #: core/BlockSupport.php:61 core/BlockSupport.php:99
 
509
  msgid "Could not send the email..."
510
  msgstr "Nu s-a putut trimite email ..."
511
 
512
+ #: core/BlockSupport.php:65 core/BlockSupport.php:103
 
513
  msgid "No message."
514
  msgstr "Nici un mesaj."
515
 
516
+ #: core/BlockSupport.php:85
517
  msgid "Plugin Support"
518
  msgstr "Suport la plugin"
519
 
520
+ #: core/BlockSupport.php:96
521
  #, fuzzy
522
  msgid "Message sent. Thank you!"
523
  msgstr "Mesajul a fost trimis..."
524
 
525
+ #: core/Blocklogin.php:81
526
  #, php-format
527
  msgid ""
528
  "We found your email, so it means you already have a Squirrly.co account. "
533
  "Conecteaza-te cu contul tau de Squirrly. Daca ai uitat parola atunci apasa "
534
  "%saici%s"
535
 
536
+ #: core/Blocklogin.php:86
537
+ msgid ""
538
+ "Error: Couldn't connect to host :( . Please contact your site's webhost (or "
539
+ "webmaster) and request them to add http://api.squirrly.co/ to their IP "
540
+ "whitelist."
541
+ msgstr ""
542
+
543
+ #: core/Blocklogin.php:89
544
  #, php-format
545
  msgid ""
546
  "Could not send your informations to squirrly. Please register %smanually%s."
547
  msgstr ""
548
  "Nu s-a putut trimite informatia la Squirrly. Inregistreaza-te %smanual%s."
549
 
550
+ #: core/Blocklogin.php:129
551
  msgid "Wrong email or password!"
552
  msgstr "Email sau Parola gresita!"
553
 
554
+ #: core/Blocklogin.php:132
555
  msgid "You can use this account only for the URL you registered first!"
556
  msgstr "Poti folosi acest cont doar pentru URL-ul inregistrat la inceput!"
557
 
558
+ #: core/Blocklogin.php:137
559
  msgid "An error occured."
560
  msgstr "A aparut o eroare."
561
 
562
+ #: core/Blocklogin.php:139
563
  msgid "Both fields are required."
564
  msgstr "Ambele campuri sunt obligatorii!"
565
 
566
+ #: core/Blockseo.php:15
567
+ msgid "snippet"
568
+ msgstr ""
569
+
570
+ #: core/Loading.php:21
571
+ msgid ""
572
+ "For Squirrly to work properly you have to use a higher version of Internet "
573
+ "Explorer. <br /> We recommend you to use Chrome or Mozilla."
574
+ msgstr ""
575
+ "Pentru a functiona Squirrly, trebui sa folosesti o versiune mai noua de "
576
+ "Internet explorer. <br /> Recomandam sa folosesti Chrome sau Mozilla."
577
+
578
+ #: core/Loading.php:47
579
  msgid "Recent discussions:"
580
  msgstr "Discutii recente:"
581
 
582
+ #: core/Loading.php:47
583
+ msgid "SEO Search Volume:"
584
+ msgstr ""
585
 
586
+ #: core/Loading.php:47
587
  msgid "Competition:"
588
  msgstr "Competitia:"
589
 
590
+ #: core/Loading.php:47
591
  msgid "Trend:"
592
  msgstr "Trend:"
593
 
594
+ #: core/Loading.php:48
595
+ msgid "Keyword:"
596
+ msgstr "Cuvant cheie:"
597
+
598
+ #: core/Loading.php:49
599
  msgid "date"
600
  msgstr "data"
601
 
602
+ #: core/Loading.php:50
603
  msgid "Read it!"
604
  msgstr "Citeste!"
605
 
606
+ #: core/Loading.php:51
607
  msgid "Insert it!"
608
  msgstr "Adauga!"
609
 
610
+ #: core/Loading.php:52
611
  msgid "Reference"
612
  msgstr "Referinta"
613
 
614
+ #: core/Loading.php:53
615
  msgid "Insert as box"
616
  msgstr "Adauga"
617
 
618
+ #: core/Loading.php:54
619
+ msgid "Insert Link"
620
+ msgstr ""
621
+
622
+ #: core/Loading.php:55
623
  msgid "Not relevant?"
624
  msgstr "Nu e ce doresti?"
625
 
626
+ #: core/Loading.php:56
627
  msgid "Insert in your article"
628
  msgstr "Adauga paragraf in articol"
629
 
630
+ #: core/Loading.php:57
631
+ msgid ":( An error occurred while processing your request. Please try again"
632
  msgstr ""
 
 
 
 
 
633
 
634
+ #: core/Loading.php:58
635
  msgid "No results found!"
636
  msgstr "Nu s-a gasit nimic ..."
637
 
638
+ #: core/Loading.php:59
639
+ msgid "Enter one more word to find relevant results"
640
+ msgstr ""
 
 
 
 
641
 
642
+ #: core/Loading.php:60
643
  msgid "Takes too long to check this keyword ..."
644
  msgstr "Ia prea mult timp sa verifice cuvantul ..."
645
 
646
+ #: core/Loading.php:61
647
  msgid "Do a research!"
648
  msgstr "Mai multe detalii!"
649
 
650
+ #: core/Loading.php:62
651
  msgid "Do more research!"
652
  msgstr "Mai multe detalii!"
653
 
654
+ #: core/Loading.php:63
655
  #, php-format
656
  msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
657
  msgstr ""
658
  "[ ATTRIBUTE: Verificati: %s pentru a vedea conditile de atribuire a "
659
  "imaginii ]"
660
 
661
+ #: core/Loading.php:64
662
  msgid "Has creative commons attributes"
663
  msgstr "Are conditii de atribuire"
664
 
665
+ #: core/Loading.php:65
666
  msgid "No known copyright restrictions"
667
  msgstr "Nu sunt restrictii de copyright cunoscute"
668
 
669
+ #: core/Loading.php:66
670
+ msgid ""
671
+ "You haven`t used Squirrly SEO to optimize your article. Do you want to "
672
+ "optimize for a keyword before publishing?"
673
+ msgstr ""
674
+ "Nu ai folosit Squirrly SEO pentru a optimiza articolul. Vrei sa il "
675
+ "optimizezi inainte de publicare?"
676
 
677
+ #: core/Loading.php:67
678
+ msgid "Keyword Research limit exceeded"
679
+ msgstr ""
680
 
681
+ #: core/Loading.php:68
682
+ msgid "Your Subscription has Expired"
683
+ msgstr ""
684
 
685
+ #: core/Loading.php:69
686
+ msgid "Add 20 Keyword Researches"
687
+ msgstr ""
 
688
 
689
+ #: core/Loading.php:70
690
+ msgid "There are no keywords saved in briefcase yet"
691
+ msgstr ""
692
 
693
+ #: core/Loading.php:71
694
+ #, php-format
695
+ msgid "Congratulations! Your article is 100% optimized!"
696
+ msgstr ""
697
 
698
+ #: core/Loading.php:72
699
+ #, php-format
700
+ msgid "appears too many times. Try to remove %s of them"
701
+ msgstr "apare de prea multe ori. Sterge %s cuvint(e) cheie"
702
 
703
+ #: core/Loading.php:73
704
+ #, php-format
705
+ msgid "write %s more words"
706
+ msgstr "mai adauga %s cuvinte"
707
 
708
+ #: core/Loading.php:74
709
+ #, php-format
710
+ msgid "Add the keyword in the %s of your article"
711
+ msgstr "Adauga cuvantul cheie la %s articolului"
712
+
713
+ #: core/Loading.php:75
714
+ msgid "Click to keep the highlight on"
715
  msgstr ""
716
 
717
+ #: core/Loading.php:76
718
+ msgid "introduction"
719
+ msgstr ""
 
720
 
721
+ #: core/Loading.php:77
722
+ #, php-format
723
+ msgid "Write more words after the %s keyword"
724
+ msgstr "Scrie mai multe cuvinte dupa %s cuvant cheie"
725
 
726
+ #: core/Loading.php:78
727
+ msgid "or use synonyms"
728
+ msgstr "sau foloseste sinonime"
 
 
 
 
729
 
730
+ #: core/Loading.php:79
731
+ #, php-format
732
+ msgid "add %s more word(s)"
733
+ msgstr "Mai adauga %s cuvinte"
734
+
735
+ #: core/Loading.php:80
736
+ #, php-format
737
+ msgid "or remove %s word(s)"
738
+ msgstr "sau sterge %s cuvinte"
739
+
740
+ #: core/Loading.php:81
741
+ #, php-format
742
+ msgid "add %s more keyword(s)"
743
+ msgstr "mai adauga %s cuvint(e) cheie"
744
 
745
+ #: core/Loading.php:82
746
+ #, php-format
747
+ msgid "write %s more words to start calculating"
748
+ msgstr "Scrie %s cuvinte pentru a se putea verifica"
749
+
750
+ #: models/BlockPostsAnalytics.php:292
751
  msgid "Type"
752
  msgstr ""
753
 
754
+ #: models/BlockPostsAnalytics.php:295 view/FrontMenu.php:364
755
  msgid "Author"
756
  msgstr ""
757
 
758
+ #: models/BlockPostsAnalytics.php:298
 
759
  msgid "Keywords"
760
  msgstr "Cuvinte cheie:"
761
 
762
+ #: models/BlockPostsAnalytics.php:300
763
  #, php-format
764
  msgid "Google.%s Position"
765
  msgstr ""
766
 
767
+ #: models/BlockPostsAnalytics.php:303 view/BlockAudit.php:48
 
 
 
 
768
  msgid "Date"
769
  msgstr "Data"
770
 
771
+ #: models/BlockPostsAnalytics.php:317
772
  msgid "Reset Filters"
773
  msgstr "Resetare Filtre"
774
 
775
+ #: models/BlockPostsAnalytics.php:322
776
+ msgid "Search Posts"
777
+ msgstr ""
778
+
779
+ #: models/BlockPostsAnalytics.php:390
780
  #, php-format
781
  msgid "Edit &#8220;%s&#8221;"
782
  msgstr ""
783
 
784
+ #: models/BlockPostsAnalytics.php:393
785
  msgid "Edit this item"
786
  msgstr ""
787
 
788
+ #: models/BlockPostsAnalytics.php:393
789
  msgid "Edit"
790
  msgstr ""
791
 
792
+ #: models/BlockPostsAnalytics.php:398
793
  #, php-format
794
  msgid "Preview &#8220;%s&#8221;"
795
  msgstr ""
796
 
797
+ #: models/BlockPostsAnalytics.php:398
798
  msgid "Preview"
799
  msgstr ""
800
 
801
+ #: models/BlockPostsAnalytics.php:400
802
  #, php-format
803
  msgid "View &#8220;%s&#8221;"
804
  msgstr ""
805
 
806
+ #: models/BlockPostsAnalytics.php:400
807
  msgid "View"
808
  msgstr ""
809
 
810
+ #: models/BlockPostsAnalytics.php:422
811
  msgid "No Tags"
812
  msgstr ""
813
 
814
+ #: models/BlockPostsAnalytics.php:432
815
+ msgid "Could not receive data from google (Err: blocked IP)"
816
+ msgstr "Nu s-au putut lua informatii de la google (IP Blocat)"
 
 
 
 
817
 
818
+ #: models/BlockPostsAnalytics.php:434
819
+ msgid "Not in top 100 for: <br /> \""
820
  msgstr ""
821
 
822
+ #: models/BlockPostsAnalytics.php:436
823
+ msgid "The URL is indexed"
 
824
  msgstr ""
825
 
826
+ #: models/BlockPostsAnalytics.php:440
827
+ msgid "Force recheck"
828
  msgstr ""
829
 
830
+ #: models/BlockPostsAnalytics.php:442
831
+ msgid "Not yet verified"
832
  msgstr ""
833
 
834
+ #: models/BlockPostsAnalytics.php:442
835
+ msgid "Check now"
836
  msgstr ""
837
 
838
+ #: models/BlockPostsAnalytics.php:445
839
+ #, php-format
840
+ msgid "Enable Ranking in %sAdvanced Settings%s"
841
  msgstr ""
842
 
843
+ #: models/BlockPostsAnalytics.php:457
844
+ msgid "Unpublished"
845
  msgstr ""
846
 
847
+ #: models/BlockPostsAnalytics.php:466
848
  #, php-format
849
+ msgid "%s ago"
 
 
 
 
850
  msgstr ""
851
 
852
+ #: models/BlockPostsAnalytics.php:468
853
+ msgid "Y/m/d"
854
  msgstr ""
855
 
856
+ #: models/BlockPostsAnalytics.php:473
857
+ msgid "Published"
858
  msgstr ""
859
 
860
+ #: models/BlockPostsAnalytics.php:476
861
+ msgid "Missed schedule"
 
 
 
862
  msgstr ""
863
 
864
+ #: models/BlockPostsAnalytics.php:478
865
+ msgid "Scheduled"
 
 
866
  msgstr ""
867
 
868
+ #: models/BlockPostsAnalytics.php:480
869
+ msgid "Last Modified"
870
  msgstr ""
871
 
872
+ #: models/BlockSettingsSeo.php:71
873
  msgid "The code for Google Webmaster Tool is incorrect."
874
  msgstr "Codul google pentru Webmaster Tool este gresit."
875
 
876
+ #: models/BlockSettingsSeo.php:98
877
  msgid "The code for Google Analytics is incorrect."
878
  msgstr "Codul Google Analytics este incorect."
879
 
880
+ #: models/BlockSettingsSeo.php:144
881
  msgid "The code for Facebook is incorrect."
882
  msgstr "Codul Facbook este gresit."
883
 
884
+ #: models/BlockSettingsSeo.php:169
885
  #, fuzzy
886
  msgid "The code for Pinterest is incorrect."
887
  msgstr "Codul Bing este gresit."
888
 
889
+ #: models/BlockSettingsSeo.php:194
890
  msgid "The code for Bing is incorrect."
891
  msgstr "Codul Bing este gresit."
892
 
893
+ #: models/BlockSettingsSeo.php:320
894
  #, fuzzy
895
  msgid "File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed."
896
  msgstr "Eroare fisier: Doar fisierele JPEG,JPG,GIF sau PNG sunt permise"
897
 
898
+ #: models/BlockSettingsSeo.php:326
899
  msgid "GD error: The GD library must be installed on your server."
900
  msgstr ""
901
  "Eroare librarie GD: Trebuie sa instalezi libraria GD pe server pentru a "
902
  "putea adauga imaginea"
903
 
904
+ #: models/BlockSettingsSeo.php:332
905
  msgid "Delete error: Could not delete the old favicon."
906
  msgstr "Eroare Stergere: Nu se poate sterge icoana veche"
907
 
908
+ #: models/BlockSettingsSeo.php:339
909
  msgid "Upload error: Could not upload the favicon."
910
  msgstr "Eroare Upload: Nu se poate urca pe server imaginea"
911
 
912
+ #: models/BlockSettingsSeo.php:345
913
  msgid "Permission error: Could not change the favicon permissions."
914
  msgstr "Eroare Fisier: Nu se poate schimba permisiunea fisierului"
915
 
916
+ #: models/BlockSettingsSeo.php:367
917
  msgid ""
918
  "ICO Error: Could not create the ICO from file. Try with another file type."
919
  msgstr "Eroare ICO: Nu se poate transforma imaginea in fisier ICO"
920
 
921
+ #: models/BlockSettingsSeo.php:386
922
  msgid "The favicon has been updated."
923
  msgstr "Icoana a fost adaugata pe server"
924
 
925
+ #: models/Post.php:69
926
  msgid "Squirrly could not find any results for: "
927
  msgstr "Squirrly nu a putut gasi rezultate pentru: "
928
 
929
+ #: models/Post.php:138
930
  msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
931
  msgstr ""
932
 
933
+ #: models/Post.php:139
934
  msgid ""
935
  "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
936
  "the HTML form."
937
  msgstr ""
938
 
939
+ #: models/Post.php:140
940
  msgid "The uploaded file was only partially uploaded."
941
  msgstr ""
942
 
943
+ #: models/Post.php:141
944
  msgid "No file was uploaded."
945
  msgstr ""
946
 
947
+ #: models/Post.php:143
948
  msgid "Missing a temporary folder."
949
  msgstr ""
950
 
951
+ #: models/Post.php:144
952
  msgid "Failed to write file to disk."
953
  msgstr ""
954
 
955
+ #: models/Post.php:145
956
  msgid "File upload stopped by extension."
957
  msgstr ""
958
 
959
+ #: models/Post.php:162
960
  msgid "Invalid form submission."
961
  msgstr ""
962
 
963
+ #: models/Post.php:172
964
  msgid "File is empty. Please upload something more substantial."
965
  msgstr ""
966
 
967
+ #: models/Post.php:174
968
  msgid ""
969
  "File is empty. Please upload something more substantial. This error could "
970
  "also be caused by uploads being disabled in your php.ini or by post_max_size "
971
  "being defined as smaller than upload_max_filesize in php.ini."
972
  msgstr ""
973
 
974
+ #: models/Post.php:180
975
  msgid "Specified file failed upload test."
976
  msgstr ""
977
 
978
+ #: models/Post.php:193
979
  msgid "Sorry, this file type is not permitted for security reasons."
980
  msgstr ""
981
 
982
+ #: models/Post.php:218
983
  #, php-format
984
  msgid "The uploaded file could not be moved to %s."
985
  msgstr ""
986
 
987
+ #: models/PostsList.php:27
988
+ msgid "Optimized:"
 
 
 
 
989
  msgstr ""
990
 
991
+ #: models/PostsList.php:28
992
  msgid "See Analytics"
993
  msgstr ""
994
 
995
+ #: models/PostsList.php:30
996
  msgid "Optimize it with Squirrly to see the Analytics"
997
  msgstr ""
998
 
999
+ #: models/PostsList.php:83
1000
  msgid "This post's current position in Google"
1001
  msgstr ""
1002
 
1003
+ #: models/PostsList.php:86
1004
  msgid "The total traffic for the last 30 days, for the current post"
1005
  msgstr ""
1006
 
1007
+ #: models/PostsList.php:89
1008
  msgid "The total number of shares on social media channels for this post"
1009
  msgstr ""
1010
 
1011
+ #: models/PostsList.php:92
1012
  #, fuzzy
1013
  msgid "The total authority for this post"
1014
  msgstr "Nu sunt suficiente informatii pentru acest post"
1015
 
1016
+ #: models/PostsList.php:95
1017
  msgid "The total number of inbound links to this post"
1018
  msgstr ""
1019
 
1020
+ #: models/domain/Patterns.php:214
1021
+ msgid "Page"
1022
+ msgstr ""
 
1023
 
1024
+ #: models/domain/Patterns.php:215
1025
+ msgid "of"
1026
+ msgstr ""
 
1027
 
1028
+ #: models/services/Robots.php:13
1029
+ msgid "Squirrly SEO Robots"
1030
  msgstr ""
1031
 
1032
+ #: models/services/Robots.php:16
1033
  msgid ""
1034
+ "Your blog is not public. Please see Site Visibility on Settings > Reading."
 
1035
  msgstr ""
1036
 
1037
+ #: models/services/Robots.php:31
1038
+ msgid "No Squirrly SEO Robots found."
 
 
1039
  msgstr ""
1040
 
1041
+ #: squirrly.php:63
1042
+ msgid ""
1043
+ "For Squirrly to work, the PHP version has to be equal or greater then 5.1"
1044
+ msgstr "Versiunea PHP trebuie sa fie mai mare de 5.1"
1045
+
1046
+ #: view/BlockAccount.php:7 view/BlockAffiliate.php:7 view/BlockAudit.php:7
1047
+ #: view/BlockDashboard.php:6 view/BlockImport.php:7
1048
+ #: view/BlockKeywordResearch.php:7 view/BlockPatterns.php:7
1049
+ #: view/BlockPostsAnalytics.php:7 view/BlockSettings.php:7
1050
+ #: view/BlockSettingsSeo.php:7
1051
+ msgid "Connect to Squirrly Data Cloud"
1052
+ msgstr ""
1053
 
1054
+ #: view/BlockAccount.php:13 view/BlockAffiliate.php:13 view/BlockAudit.php:13
1055
+ #: view/BlockDashboard.php:28 view/BlockImport.php:13
1056
+ #: view/BlockKeywordResearch.php:13 view/BlockPatterns.php:13
1057
+ #: view/BlockPostsAnalytics.php:13 view/BlockSettings.php:13
1058
+ #: view/BlockSettingsSeo.php:13 view/Blocklogin.php:38
1059
+ msgid "START HERE"
1060
  msgstr ""
1061
 
1062
+ #: view/BlockAccount.php:23
1063
+ #, fuzzy
1064
+ msgid "Squirrly account information"
1065
+ msgstr "Vezi Squirrly in actiune"
1066
+
1067
+ #: view/BlockAccount.php:25 view/BlockAffiliate.php:23
1068
  #, fuzzy
1069
  msgid "Go to dashboard"
1070
  msgstr "dashboard"
1071
 
1072
+ #: view/BlockAccount.php:26
1073
+ msgid "See ALL of Your Activity so Far"
1074
+ msgstr ""
1075
+
1076
+ #: view/BlockAffiliate.php:21 view/BlockAffiliate.php:33
1077
+ msgid "Join our affiliate program"
1078
+ msgstr ""
1079
 
1080
+ #: view/BlockAffiliate.php:34
1081
  #, php-format
1082
  msgid "%sHow I Started Making Money With the Squirrly Affiliate Program%s"
1083
  msgstr ""
1084
 
1085
+ #: view/BlockAffiliate.php:37
1086
  msgid "Affiliate Benefits"
1087
  msgstr "Beneficii afiliere"
1088
 
1089
+ #: view/BlockAffiliate.php:42
1090
  #, php-format
1091
+ msgid "- Up to recurring 45%s commission"
1092
+ msgstr ""
1093
 
1094
+ #: view/BlockAffiliate.php:47
1095
  msgid "- No cost"
1096
  msgstr "- Fara costuri"
1097
 
1098
+ #: view/BlockAffiliate.php:52
1099
  msgid "- Monthly payments in your Paypal account"
1100
  msgstr "- Platy lunare in contul tau de Paypal"
1101
 
1102
+ #: view/BlockAffiliate.php:61
1103
+ #, php-format
1104
+ msgid ""
1105
+ "Before joining our affiliate program, please read the Terms of Use %shttps://"
1106
+ "www.squirrly.co/terms/%s."
1107
+ msgstr ""
1108
+
1109
+ #: view/BlockAffiliate.php:69
1110
  msgid ""
1111
  "To redirect users to your site, just change \"squirrly.co\" with your domain."
1112
  msgstr ""
1113
  "Pentru a redirecta userii spre site-ul tau, schimba doar \"squirrly.co\" cu "
1114
  "domeniul tau"
1115
 
1116
+ #: view/BlockAffiliate.php:72
1117
  msgid "Generate affiliate link"
1118
  msgstr "Generare link de afiliat"
1119
 
1120
+ #: view/BlockAffiliate.php:81
1121
  msgid ""
1122
  "Your affiliate account is set and ready to go. Above you have the affiliate "
1123
  "link. "
1124
  msgstr ""
1125
  "Linkul tau de afiliere e gata. Mai sus aveti link-ul care il puteti folosi"
1126
 
1127
+ #: view/BlockAffiliate.php:83
1128
  #, php-format
1129
  msgid "Check your affiliate page: %sAffiliate page%s"
1130
  msgstr "Verifica pagina ta de afiliat: %sAffiliate page%s"
1131
 
1132
+ #: view/BlockAffiliate.php:86
 
 
 
 
 
1133
  msgid ""
1134
  "After you connect to Squirrly you can begin to use your free Squirrly "
1135
  "affiliate link immediately!"
1137
  "Dupa ce te conectezi la Squirrly vei putea incepe sa folosesti link-ul tau "
1138
  "de afiliat"
1139
 
1140
+ #: view/BlockAffiliate.php:96
1141
  msgid "Squirrly banners you can use"
1142
  msgstr "Bannere Squirrly"
1143
 
1144
+ #: view/BlockAffiliate.php:121
 
 
 
 
 
 
 
 
1145
  msgid "<< START HERE >>"
1146
  msgstr ""
1147
 
1148
+ #: view/BlockAnalytics.php:55
1149
  msgid "Moz Inbound Links"
1150
  msgstr ""
1151
 
1152
+ #: view/BlockAnalytics.php:62
1153
+ msgid "Ahrefs Inbound Links"
1154
+ msgstr ""
1155
+
1156
+ #: view/BlockAnalytics.php:74
1157
  msgid "Moz Authority"
1158
  msgstr ""
1159
 
1160
+ #: view/BlockAnalytics.php:79
1161
  msgid "Moz Rank"
1162
  msgstr ""
1163
 
1164
+ #: view/BlockAnalytics.php:86
1165
  #, fuzzy
1166
  msgid "Google Page Rank"
1167
  msgstr "URL Google Plus:"
1168
 
1169
+ #: view/BlockAnalytics.php:92
1170
+ msgid "Ahrefs Rank"
1171
+ msgstr ""
 
1172
 
1173
+ #: view/BlockAnalytics.php:108
1174
  msgid "Facebook shares"
1175
  msgstr ""
1176
 
1177
+ #: view/BlockAnalytics.php:113
1178
  msgid "Facebook likes"
1179
  msgstr ""
1180
 
1181
+ #: view/BlockAnalytics.php:118
1182
  #, fuzzy
1183
  msgid "Twitter shares"
1184
  msgstr "Twitter"
1185
 
1186
+ #: view/BlockAnalytics.php:123
1187
  #, fuzzy
1188
  msgid "Google+ shares"
1189
  msgstr "Rezultate Google pentru:"
1190
 
1191
+ #: view/BlockAnalytics.php:128
1192
  msgid "LinkedIn Shares"
1193
  msgstr ""
1194
 
1195
+ #: view/BlockAnalytics.php:133
1196
  msgid "StumbleUpon shares"
1197
  msgstr ""
1198
 
1199
+ #: view/BlockAnalytics.php:138
1200
  msgid "Reddit shares"
1201
  msgstr ""
1202
 
1203
+ #: view/BlockAnalytics.php:170
1204
  msgid "Nicely done! Now you can focus on the other tasks"
1205
  msgstr ""
1206
 
1207
+ #: view/BlockAnalytics.php:170
1208
  msgid ""
1209
  "I know you can improve this. Please follow the documentation for a quicker "
1210
  "progress"
1211
  msgstr ""
1212
 
1213
+ #: view/BlockAnalytics.php:243
1214
+ msgid "Visits"
1215
+ msgstr "Vizite"
1216
+
1217
+ #: view/BlockAnalytics.php:256
1218
  #, fuzzy
1219
  msgid "Current: "
1220
  msgstr "Pozitia curenta"
1221
 
1222
+ #: view/BlockAnalytics.php:257
1223
  msgid "Lowest: "
1224
  msgstr ""
1225
 
1226
+ #: view/BlockAnalytics.php:258
1227
  msgid "Highest: "
1228
  msgstr ""
1229
 
1230
+ #: view/BlockAnalytics.php:262
1231
  #, fuzzy
1232
  msgid "last 30 days"
1233
  msgstr "Ultimele 30 zile"
1234
 
1235
+ #: view/BlockAudit.php:24
1236
+ msgid "Squirrly Site Audit"
 
 
1237
  msgstr ""
1238
 
1239
+ #: view/BlockAudit.php:31
1240
+ msgid "What the Audit offers:"
1241
+ msgstr ""
1242
 
1243
+ #: view/BlockAudit.php:32
1244
+ #, php-format
1245
  msgid ""
1246
+ "%sTracks all the areas of your Content Marketing Strategy:%s: Blogging, "
1247
+ "Traffic, SEO, Social Signals, Links, Authority. Every single week, you get a "
1248
+ "new report by email."
1249
  msgstr ""
1250
 
1251
+ #: view/BlockAudit.php:33
1252
+ #, php-format
1253
  msgid ""
1254
+ "%sIt gives you professional advice on how to fix issues in those 6 areas%s. "
1255
+ "You can easily find out how to improve your content marketing strategy."
 
1256
  msgstr ""
1257
 
1258
+ #: view/BlockAudit.php:34
1259
+ #, php-format
 
 
 
 
1260
  msgid ""
1261
+ "%sMonitors your progress, week by week.%s You’ll get to see if your site "
1262
+ "audit has improved since you last checked it. "
1263
  msgstr ""
1264
 
1265
+ #: view/BlockAudit.php:35
1266
+ #, php-format
1267
+ msgid "%sAnalyze any single article.%s See how it improves over time."
1268
  msgstr ""
1269
 
1270
+ #: view/BlockAudit.php:36
1271
+ #, php-format
1272
+ msgid "%sLearn More About The Site Audit%s"
1273
+ msgstr ""
1274
 
1275
+ #: view/BlockAudit.php:37
1276
+ #, php-format
1277
+ msgid "%sRequest an Audit Now%s"
1278
  msgstr ""
1279
 
1280
+ #: view/BlockAudit.php:43
1281
+ msgid "\"Your current site audit score:"
1282
+ msgstr ""
 
1283
 
1284
+ #: view/BlockAudit.php:47
1285
+ msgid "Score"
1286
+ msgstr ""
1287
+
1288
+ #: view/BlockAudit.php:50
1289
+ msgid "See the Audit"
1290
  msgstr ""
1291
 
1292
+ #: view/BlockAudit.php:53
1293
  msgid ""
1294
+ "It seems that no audit has been generated yet. You can request an audit down "
1295
+ "below. It should be ready in 5-10 minutes."
1296
  msgstr ""
1297
 
1298
+ #: view/BlockAudit.php:55
1299
+ msgid "Request an Audit Now"
1300
+ msgstr ""
1301
 
1302
+ #: view/BlockAudit.php:62
1303
+ msgid "This is an example of a Site Audit"
1304
+ msgstr ""
1305
 
1306
+ #: view/BlockCopyright.php:9
1307
+ msgid "Squirrly Copywriting Options"
1308
+ msgstr ""
1309
 
1310
+ #: view/BlockCopyright.php:11
1311
+ msgid ""
1312
+ "Referencing other articles, ideas, and relevant Tweets adds value to your "
1313
+ "original content. This established journalist practice makes the content "
1314
+ "more trustworthy and helps readers shape a well-rounded understanding of the "
1315
+ "subject."
1316
+ msgstr ""
1317
 
1318
+ #: view/BlockCopyright.php:20
1319
+ msgid ""
1320
+ "The toolkit's intended purpose is to help you save time and find the best "
1321
+ "sources to include in your articles. "
1322
+ msgstr ""
1323
 
1324
+ #: view/BlockCopyright.php:24
1325
+ msgid ""
1326
+ "Squirrly has never encouraged and will never encourage users to create "
1327
+ "duplicate content."
1328
+ msgstr ""
1329
 
1330
+ #: view/BlockCopyright.php:25
1331
+ msgid ""
1332
+ "Squirrly will not take responsibility if an user copies an entire article "
1333
+ "from another source."
1334
+ msgstr ""
1335
 
1336
+ #: view/BlockCopyright.php:27
1337
+ msgid "Best Practices for Using the Inspiration Box from Squirrly: "
1338
+ msgstr ""
1339
 
1340
+ #: view/BlockCopyright.php:31
1341
+ msgid ""
1342
+ "Focus on creating original content. Citing sources should complement your "
1343
+ "original ideas"
1344
+ msgstr ""
1345
 
1346
+ #: view/BlockCopyright.php:32
1347
+ msgid "Try to limit yourself to 2 or 3 quotes per article"
1348
  msgstr ""
1349
 
1350
+ #: view/BlockCopyright.php:33
1351
+ msgid "Always include a link to your sources"
1352
  msgstr ""
1353
 
1354
+ #: view/BlockCopyright.php:39 view/BlockCopyright.php:50
1355
+ msgid "Use Squirrly's Inspiration box"
1356
  msgstr ""
1357
 
1358
+ #: view/BlockCopyright.php:42 view/BlockCopyright.php:47
1359
+ msgid ""
1360
+ "I've read and understood how to correctly use the Inspiration Box from "
1361
+ "Squirrly."
1362
  msgstr ""
1363
 
1364
+ #: view/BlockCustomerService.php:5
1365
+ msgid "Squirrly Customer Service"
1366
  msgstr ""
1367
 
1368
+ #: view/BlockCustomerService.php:12
1369
+ msgid "Support Channels"
1370
+ msgstr ""
1371
 
1372
+ #: view/BlockCustomerService.php:13
1373
+ #, php-format
1374
+ msgid ""
1375
+ "%sHowto.squirrly.co%s > Knowledge Base. Find out how to get the most out of "
1376
+ "Squirrly SEO"
1377
+ msgstr ""
1378
 
1379
+ #: view/BlockCustomerService.php:14
1380
+ #, php-format
1381
+ msgid ""
1382
+ "%sPlugin.squirrly.co%s >> Case studies, ideas on how to better use Squirrly "
1383
+ "SEO for Content Marketing"
1384
+ msgstr ""
1385
 
1386
+ #: view/BlockCustomerService.php:15
1387
+ #, php-format
1388
+ msgid ""
1389
+ "%sFacebook page%s >> You can send us your support requests in private "
1390
+ "messages"
1391
+ msgstr ""
1392
 
1393
+ #: view/BlockCustomerService.php:16
1394
+ #, php-format
1395
+ msgid "%sSupport Community%s >> Join us on Google Plus"
1396
+ msgstr ""
1397
 
1398
+ #: view/BlockCustomerService.php:17
1399
+ #, php-format
1400
+ msgid "%sLive Chat%s >> on Youtube. Thursday 4 PM"
1401
+ msgstr ""
1402
 
1403
+ #: view/BlockCustomerService.php:18
1404
+ #, php-format
1405
+ msgid "%sNew Lessons%s >> Mon. and Tue. on Twitter"
1406
+ msgstr ""
1407
 
1408
+ #: view/BlockCustomerService.php:19
1409
+ #, php-format
1410
+ msgid "%sEmail Support%s >> 8 AM to 4 PM (London Time): Mon-Fri.."
1411
+ msgstr ""
1412
 
1413
+ #: view/BlockCustomerService.php:25 view/BlockSupport.php:21
1414
+ msgid "Need Help with Squirrly SEO?"
1415
+ msgstr "Ai nevoie de ajutor cu Squirrly SEO?"
1416
 
1417
+ #: view/BlockCustomerService.php:33 view/BlockSupport.php:27
1418
+ msgid "Send Question"
1419
+ msgstr "Trimite"
1420
 
1421
+ #: view/BlockDashboard.php:11
1422
+ msgid "Restore Squirrly Settings"
1423
+ msgstr ""
1424
 
1425
+ #: view/BlockDashboard.php:16 view/BlockImport.php:110
1426
+ msgid "Upload the file with the saved Squirrly Settings"
1427
+ msgstr ""
1428
 
1429
+ #: view/BlockDashboard.php:21 view/BlockImport.php:115
1430
+ #: view/BlockImport.php:137
1431
+ msgid "Restore Backup"
1432
+ msgstr ""
1433
 
1434
+ #: view/BlockDashboard.php:27
1435
+ msgid "Connect to Squirrly and start optimizing your site"
1436
+ msgstr ""
1437
 
1438
+ #: view/BlockDashboard.php:35
1439
+ msgid "Squirrly dashboard"
1440
+ msgstr "Dashboard Squirrly"
1441
 
1442
+ #: view/BlockDashboard.php:44
1443
+ #, php-format
1444
+ msgid ""
1445
+ "%sHelp Center%s - learn more about Squirrly SEO features and unhinge your "
1446
+ "SEO potential"
1447
+ msgstr ""
1448
 
1449
+ #: view/BlockDashboard.php:49
1450
+ msgid "Now with a fresh one right out of our Squirrly Labs!"
1451
+ msgstr ""
1452
 
1453
+ #: view/BlockDashboard.php:52
1454
+ msgid "Get It Here"
1455
+ msgstr ""
1456
 
1457
+ #: view/BlockDashboard.php:128
1458
+ msgid "Next Feature"
1459
+ msgstr ""
1460
 
1461
+ #: view/BlockDashboard.php:129
1462
+ msgid "Previous Feature"
1463
+ msgstr ""
1464
 
1465
+ #: view/BlockImport.php:22 view/BlockPatterns.php:22
1466
+ msgid "SEO Patterns"
1467
+ msgstr ""
1468
 
1469
+ #: view/BlockImport.php:34
1470
+ msgid "Import SEO settings from other SEO plugins or themes"
1471
+ msgstr ""
1472
 
1473
+ #: view/BlockImport.php:35
1474
+ msgid ""
1475
+ "If you were already using an SEO plugin, then you can import all the SEO "
1476
+ "settings in Squirrly. Just follow the steps presented on the right side."
1477
+ msgstr ""
1478
 
1479
+ #: view/BlockImport.php:42
1480
+ msgid "Select the plugin or theme you want to import the Settings from."
1481
+ msgstr ""
1482
 
1483
+ #: view/BlockImport.php:56
1484
+ msgid "Import Settings"
1485
+ msgstr ""
1486
 
1487
+ #: view/BlockImport.php:58 view/BlockImport.php:79
1488
+ msgid "We couldn't find any SEO plugin or theme to import from."
1489
+ msgstr ""
1490
 
1491
+ #: view/BlockImport.php:65
1492
+ msgid "Select the plugin or theme you want to import the SEO settings from."
1493
+ msgstr ""
1494
 
1495
+ #: view/BlockImport.php:86
1496
+ msgid ""
1497
+ "Note! If you import the SEO settings from other plugins or themes, you will "
1498
+ "lose all the settings that you had in Squirrly SEO. Make sure you backup "
1499
+ "your settings from the panel below before you do this. "
1500
+ msgstr ""
1501
 
1502
+ #: view/BlockImport.php:91
1503
+ msgid "Backup & Restore Squirrly SEO Settings"
1504
+ msgstr ""
1505
 
1506
+ #: view/BlockImport.php:92
1507
+ msgid ""
1508
+ "You can now download your Squirrly settings in an sql file before you go "
1509
+ "ahead and import the SEO settings from another plugin. That way, you can "
1510
+ "always go back to your Squirrly settings. "
1511
  msgstr ""
1512
 
1513
+ #: view/BlockImport.php:99
1514
+ msgid "Backup & Restore Squirrly Settings"
1515
+ msgstr ""
1516
 
1517
+ #: view/BlockImport.php:103
1518
+ msgid "Backup Settings"
1519
+ msgstr ""
1520
 
1521
+ #: view/BlockImport.php:104
1522
+ msgid "Restore Settings"
1523
+ msgstr ""
1524
 
1525
+ #: view/BlockImport.php:115 view/BlockImport.php:137
1526
+ msgid "Are you sure you want to restore your settings?"
1527
+ msgstr ""
1528
 
1529
+ #: view/BlockImport.php:120
1530
+ msgid "Backup & Restore all the pages optimized with Squirrly SEO"
1531
+ msgstr ""
1532
 
1533
+ #: view/BlockImport.php:124
1534
+ msgid "Backup SEO"
1535
+ msgstr ""
1536
 
1537
+ #: view/BlockImport.php:125
1538
+ msgid "Restore SEO"
1539
+ msgstr ""
1540
 
1541
+ #: view/BlockImport.php:131
1542
+ msgid "Upload the file with the saved Squirrly SEO SQL file"
1543
+ msgstr ""
1544
 
1545
+ #: view/BlockImport.php:152
1546
+ msgid "Click to reset all the saved setting to default."
1547
+ msgstr ""
1548
 
1549
+ #: view/BlockImport.php:156
1550
+ msgid "Are you sure you want to remove all the saved settings?"
1551
+ msgstr ""
1552
 
1553
+ #: view/BlockImport.php:156
1554
+ msgid "Reset Settings"
1555
+ msgstr ""
1556
 
1557
+ #: view/BlockImport.php:162
1558
+ msgid ""
1559
+ "Note! Make sure you backup your data first in case you change your mind."
1560
+ msgstr ""
1561
 
1562
+ #: view/BlockKeywordResearch.php:27
1563
+ msgid "Squirrly Keyword Research"
1564
+ msgstr " Cercetare cuvinte cheie"
1565
 
1566
+ #: view/BlockLiveAssistant.php:9 view/Blockseo.php:7
1567
+ msgid "Squirrly Live Assistant"
1568
+ msgstr ""
 
1569
 
1570
+ #: view/BlockLiveAssistant.php:11
1571
+ #, php-format
1572
+ msgid ""
1573
+ "Using the Live Assistant from Squirrly SEO is like having a consultant "
1574
+ "sitting right next to you. It helps you get a 100% optimized page for both "
1575
+ "Humans and Search Engines."
1576
+ msgstr ""
1577
 
1578
+ #: view/BlockLiveAssistant.php:20
1579
+ msgid ""
1580
+ "You just have to type in the keyword you want the page to be optimized for."
1581
+ msgstr ""
1582
+
1583
+ #: view/BlockLiveAssistant.php:25
1584
+ msgid "Use Squirrly Live Assistant"
1585
+ msgstr ""
1586
+
1587
+ #: view/BlockPatterns.php:36
1588
+ msgid ""
1589
+ "Control how post types are displayed on your site and within search engine "
1590
+ "results and social media feeds."
1591
+ msgstr ""
1592
 
1593
+ #: view/BlockPatterns.php:37
1594
+ msgid ""
1595
+ "In Squirrly, each post type in your site comes with a predefined posting "
1596
+ "pattern when displayed onto your website. However, based on your site's "
1597
+ "purpose and needs, you can also decide what information these patterns will "
1598
+ "include."
1599
+ msgstr ""
1600
 
1601
+ #: view/BlockPatterns.php:38
1602
  msgid ""
1603
+ "Once you set up a pattern for a particular post type, only the content "
1604
+ "required by your custom sequence will be displayed."
1605
  msgstr ""
1606
 
1607
+ #: view/BlockPatterns.php:39
1608
+ #, php-format
1609
  msgid ""
1610
+ "Squirrly lets you see how the customized patterns will apply when posts/"
1611
+ "pages are shared across social media or search engine feeds. You just need "
1612
+ "to go to the %sSquirrly SEO Snippet%s box, press <strong>Edit Snippet</"
1613
+ "strong> and you'll get a live preview after you customize the meta "
1614
+ "information."
1615
+ msgstr ""
1616
+
1617
+ #: view/BlockPatterns.php:43
1618
+ msgid "Set the custom patterns for each post type"
1619
+ msgstr ""
1620
+
1621
+ #: view/BlockPatterns.php:51
1622
+ msgid "+ Add Post Type"
1623
+ msgstr ""
1624
+
1625
+ #: view/BlockPatterns.php:51
1626
+ msgid "Add a post type from your Wordpress website"
1627
+ msgstr ""
1628
+
1629
+ #: view/BlockPatterns.php:54
1630
+ msgid "Add Post Type"
1631
+ msgstr ""
1632
+
1633
+ #: view/BlockPatterns.php:71
1634
+ msgid "Add"
1635
+ msgstr ""
1636
+
1637
+ #: view/BlockPatterns.php:81
1638
+ #, php-format
1639
+ msgid "Are you sure you want to remove the post type: %s"
1640
+ msgstr ""
1641
+
1642
+ #: view/BlockPatterns.php:81
1643
+ msgid "Remove Post Type"
1644
+ msgstr ""
1645
+
1646
+ #: view/BlockPatterns.php:86 view/FrontMenu.php:134
1647
+ msgid "Title"
1648
+ msgstr ""
1649
+
1650
+ #: view/BlockPatterns.php:92 view/FrontMenu.php:182
1651
+ msgid "Description"
1652
+ msgstr ""
1653
+
1654
+ #: view/BlockPatterns.php:98
1655
+ msgid "Separator"
1656
+ msgstr ""
1657
+
1658
+ #: view/BlockPatterns.php:113
1659
+ msgid "Let Google Index it"
1660
  msgstr ""
1661
 
1662
+ #: view/BlockPatterns.php:118 view/BlockPatterns.php:132
1663
+ #: view/BlockPatterns.php:149 view/BlockSettings.php:135
1664
+ #: view/BlockSettings.php:146 view/BlockSettings.php:157
1665
+ #: view/BlockSettings.php:168 view/BlockSettings.php:180
1666
+ #: view/BlockSettings.php:192 view/BlockSettings.php:355
1667
+ #: view/BlockSettingsSeo.php:53 view/BlockSettingsSeo.php:95
1668
+ #: view/BlockSettingsSeo.php:112 view/BlockSettingsSeo.php:128
1669
+ #: view/BlockSettingsSeo.php:144 view/BlockSettingsSeo.php:160
1670
+ #: view/BlockSettingsSeo.php:176 view/BlockSettingsSeo.php:192
1671
+ #: view/BlockSettingsSeo.php:220 view/BlockSettingsSeo.php:236
1672
+ #: view/BlockSettingsSeo.php:252 view/BlockSettingsSeo.php:271
1673
+ #: view/BlockSettingsSeo.php:546 view/BlockSettingsSeo.php:578
1674
+ #: view/BlockSettingsSeo.php:586 view/BlockSettingsSeo.php:684
1675
+ #: view/BlockSettingsSeo.php:1030 view/FrontMenu.php:49 view/FrontMenu.php:508
1676
+ #: view/FrontMenu.php:521 view/FrontMenu.php:534
1677
  msgid "Yes"
1678
  msgstr "Da"
1679
 
1680
+ #: view/BlockPatterns.php:120 view/BlockPatterns.php:134
1681
+ #: view/BlockPatterns.php:151 view/BlockSettings.php:137
1682
+ #: view/BlockSettings.php:148 view/BlockSettings.php:159
1683
+ #: view/BlockSettings.php:170 view/BlockSettings.php:182
1684
+ #: view/BlockSettings.php:194 view/BlockSettings.php:357
1685
+ #: view/BlockSettingsSeo.php:55 view/BlockSettingsSeo.php:97
1686
+ #: view/BlockSettingsSeo.php:114 view/BlockSettingsSeo.php:130
1687
+ #: view/BlockSettingsSeo.php:146 view/BlockSettingsSeo.php:162
1688
+ #: view/BlockSettingsSeo.php:178 view/BlockSettingsSeo.php:194
1689
+ #: view/BlockSettingsSeo.php:222 view/BlockSettingsSeo.php:238
1690
+ #: view/BlockSettingsSeo.php:254 view/BlockSettingsSeo.php:273
1691
+ #: view/BlockSettingsSeo.php:548 view/BlockSettingsSeo.php:580
1692
+ #: view/BlockSettingsSeo.php:588 view/BlockSettingsSeo.php:686
1693
+ #: view/BlockSettingsSeo.php:1032 view/FrontMenu.php:51 view/FrontMenu.php:510
1694
+ #: view/FrontMenu.php:523 view/FrontMenu.php:536
1695
  msgid "No"
1696
  msgstr "Nu"
1697
 
1698
+ #: view/BlockPatterns.php:127
1699
+ msgid "Pass Link Juice"
1700
+ msgstr ""
1701
+
1702
+ #: view/BlockPatterns.php:141
1703
+ msgid "Do SEO"
1704
+ msgstr ""
1705
+
1706
+ #: view/BlockPatterns.php:185 view/BlockSettingsSeo.php:29
1707
+ #: view/BlockSettingsSeo.php:1082
1708
+ msgid "Save SEO"
1709
+ msgstr ""
1710
 
1711
+ #: view/BlockPostsAnalytics.php:24
1712
  #, php-format
1713
  msgid ""
1714
+ "The IP %s is calling the rank too often and google stopped the calls for %s "
1715
+ "mins. Lower the Rank check rate in Squirrly > Advanced > Rank Option. %sMore "
1716
+ "details%s"
1717
  msgstr ""
1718
 
1719
+ #: view/BlockPostsAnalytics.php:29
1720
+ #, php-format
1721
+ msgid ""
1722
+ "To be able to check the RANK please activate cURL for PHP on your server "
1723
+ "%sDetails%s"
1724
+ msgstr ""
1725
 
1726
+ #: view/BlockPostsAnalytics.php:33
1727
+ #, php-format
1728
  msgid ""
1729
+ "To be able to check the RANK please set the \"open_basedir\" to NULL on your "
1730
+ "server %sDetails%s"
1731
  msgstr ""
 
 
1732
 
1733
+ #: view/BlockPostsAnalytics.php:38
1734
+ #, php-format
1735
  msgid ""
1736
+ "To see the Google Ranking for each article you need to select how many pages "
1737
+ "to be checked by google rank every hour from %sSquirrly > Advanced > Google "
1738
+ "Rank Option%s. "
1739
  msgstr ""
 
 
1740
 
1741
+ #: view/BlockPostsAnalytics.php:47
1742
  #, fuzzy
1743
+ msgid "Squirrly Analytics"
1744
  msgstr "Optiuni Squirrly"
1745
 
1746
+ #: view/BlockPostsAnalytics.php:48
1747
+ msgid ""
1748
+ "Don't see all your pages here? Make sure you optimize them with Squirrly, so "
1749
+ "that we can track them, and display you the analytics"
1750
+ msgstr ""
1751
+
1752
+ #: view/BlockSettings.php:24 view/BlockSettings.php:405
1753
+ msgid "Save settings"
1754
+ msgstr "Salveaza setari"
1755
+
1756
+ #: view/BlockSettings.php:41
1757
+ msgid "Post/Page Edit"
1758
+ msgstr ""
1759
+
1760
+ #: view/BlockSettings.php:42
1761
  #, php-format
1762
+ msgid "%sThe right method in working with Squirrly, SEO plugin%s"
1763
  msgstr ""
1764
 
1765
+ #: view/BlockSettings.php:43
1766
  #, php-format
1767
+ msgid "%sGetting inspired with Squirrly WordPress SEO plugin%s"
1768
+ msgstr ""
1769
+
1770
+ #: view/BlockSettings.php:45
1771
+ #, php-format
1772
+ msgid "%sThere is a New SEO Live Assistant from Squirrly%s"
1773
  msgstr ""
1774
 
1775
+ #: view/BlockSettings.php:46
1776
  #, php-format
1777
+ msgid "%sHow to create Human friendly content with the WordPress SEO plugin?%s"
1778
+ msgstr ""
1779
+
1780
+ #: view/BlockSettings.php:52
1781
+ msgid "Inspiration Box G17"
1782
+ msgstr ""
1783
+
1784
+ #: view/BlockSettings.php:55 view/BlockSettings.php:56
1785
+ #: view/BlockSettings.php:69 view/BlockSettings.php:70
1786
+ #: view/BlockSettings.php:83 view/BlockSettings.php:84
1787
+ #: view/BlockSettingsSeo.php:66 view/BlockSettingsSeo.php:78
1788
+ #: view/BlockSettingsSeo.php:287 view/BlockSettingsSeo.php:526
1789
+ #: view/BlockSettingsSeo.php:852 view/BlockSettingsSeo.php:946
1790
+ #: view/BlockSettingsSeo.php:958 view/BlockSettingsSeo.php:970
1791
+ msgid "see how this improved since 2016"
1792
+ msgstr ""
1793
+
1794
+ #: view/BlockSettings.php:66
1795
+ msgid "Keyword Research G17"
1796
+ msgstr ""
1797
+
1798
+ #: view/BlockSettings.php:80
1799
+ msgid "Inner Links G17"
1800
+ msgstr ""
1801
+
1802
+ #: view/BlockSettings.php:93
1803
+ msgid "Load Squirrly Live Assistant for"
1804
+ msgstr ""
1805
+
1806
+ #: view/BlockSettings.php:97 view/BlockSettingsSeo.php:707
1807
+ msgid "Posts"
1808
+ msgstr ""
1809
+
1810
+ #: view/BlockSettings.php:100 view/BlockSettingsSeo.php:736
1811
+ msgid "Pages"
1812
+ msgstr ""
1813
+
1814
+ #: view/BlockSettings.php:104 view/BlockSettingsSeo.php:721
1815
+ msgid "Products"
1816
+ msgstr ""
1817
+
1818
+ #: view/BlockSettings.php:140
1819
  msgid ""
1820
+ "Show <strong>Squirrly Tooltips</strong> when posting a new article (e.g. "
1821
+ "\"Enter a keyword\")."
1822
  msgstr ""
1823
 
1824
+ #: view/BlockSettings.php:151
1825
+ msgid ""
1826
+ "Always show <strong>Keyword Research</strong> about the selected keyword."
1827
+ msgstr ""
1828
 
1829
+ #: view/BlockSettings.php:162
 
1830
  msgid ""
1831
+ "Send optimization data to Squirrly API when the post is saved (don't use "
1832
+ "cron)"
1833
  msgstr ""
 
 
1834
 
1835
+ #: view/BlockSettings.php:173
1836
+ msgid "Use <strong> the NEW version of the SEO Live Assistant</strong>."
1837
+ msgstr ""
1838
 
1839
+ #: view/BlockSettings.php:185
1840
+ msgid ""
1841
+ "Download <strong>remote images</strong> in your <strong>Media Library</"
1842
+ "strong> for the new posts."
1843
+ msgstr ""
1844
 
1845
+ #: view/BlockSettings.php:197
1846
+ msgid ""
1847
+ "Correct my <strong>feed links</strong> and <strong>images</strong> (convert "
1848
+ "from relative to absolute)."
1849
+ msgstr ""
1850
+
1851
+ #: view/BlockSettings.php:207
1852
+ msgid "Google Rank Options"
1853
+ msgstr ""
1854
 
1855
+ #: view/BlockSettings.php:208
1856
  #, php-format
1857
+ msgid "%sCountry targeting%s"
1858
  msgstr ""
1859
 
1860
+ #: view/BlockSettings.php:209
1861
+ #, php-format
1862
+ msgid "%sPowerful SEO Tool For Strong Google Rankings%s"
1863
+ msgstr ""
1864
 
1865
+ #: view/BlockSettings.php:216
 
1866
  msgid ""
1867
+ "Select the Google extension for which Squirrly will check the Google rank."
 
1868
  msgstr ""
 
 
1869
 
1870
+ #: view/BlockSettings.php:221
1871
+ msgid "Default"
1872
+ msgstr ""
1873
 
1874
+ #: view/BlockSettings.php:222
1875
+ msgid "American Samoa"
1876
+ msgstr ""
1877
 
1878
+ #: view/BlockSettings.php:223
1879
+ msgid "Anguilla"
1880
+ msgstr ""
1881
 
1882
+ #: view/BlockSettings.php:224
1883
+ msgid "Antigua and Barbuda"
1884
+ msgstr ""
1885
 
1886
+ #: view/BlockSettings.php:225
1887
+ msgid "Argentina"
1888
+ msgstr ""
1889
+
1890
+ #: view/BlockSettings.php:226
1891
+ msgid "Australia"
1892
+ msgstr ""
1893
+
1894
+ #: view/BlockSettings.php:227
1895
+ msgid "Austria"
1896
+ msgstr ""
1897
+
1898
+ #: view/BlockSettings.php:228
1899
+ msgid "Azerbaijan"
1900
+ msgstr ""
1901
+
1902
+ #: view/BlockSettings.php:229
1903
+ msgid "Belgium"
1904
+ msgstr ""
1905
+
1906
+ #: view/BlockSettings.php:230
1907
+ msgid "Brazil"
1908
+ msgstr ""
1909
+
1910
+ #: view/BlockSettings.php:231
1911
+ msgid "British Virgin Islands"
1912
+ msgstr ""
1913
+
1914
+ #: view/BlockSettings.php:232
1915
+ msgid "Burundi"
1916
+ msgstr ""
1917
+
1918
+ #: view/BlockSettings.php:233
1919
+ msgid "Bulgaria"
1920
+ msgstr ""
1921
+
1922
+ #: view/BlockSettings.php:234
1923
+ msgid "Canada"
1924
+ msgstr ""
1925
+
1926
+ #: view/BlockSettings.php:235
1927
+ msgid "Chad"
1928
+ msgstr ""
1929
+
1930
+ #: view/BlockSettings.php:236
1931
+ msgid "Chile"
1932
+ msgstr ""
1933
+
1934
+ #: view/BlockSettings.php:237
1935
+ msgid "Colombia"
1936
+ msgstr ""
1937
+
1938
+ #: view/BlockSettings.php:238
1939
+ msgid "Costa Rica"
1940
+ msgstr ""
1941
+
1942
+ #: view/BlockSettings.php:239
1943
+ msgid "Côte d'Ivoire"
1944
+ msgstr ""
1945
+
1946
+ #: view/BlockSettings.php:240
1947
+ msgid "Cuba"
1948
+ msgstr ""
1949
+
1950
+ #: view/BlockSettings.php:241
1951
+ msgid "Czech Republic"
1952
+ msgstr ""
1953
+
1954
+ #: view/BlockSettings.php:242
1955
+ msgid "Dem. Rep. of the Congo"
1956
+ msgstr ""
1957
 
1958
+ #: view/BlockSettings.php:243
1959
+ msgid "Denmark"
1960
+ msgstr ""
1961
+
1962
+ #: view/BlockSettings.php:244
1963
+ msgid "Djibouti"
1964
+ msgstr ""
1965
+
1966
+ #: view/BlockSettings.php:245
1967
+ msgid "Dominican Republic"
1968
+ msgstr ""
1969
+
1970
+ #: view/BlockSettings.php:246
1971
+ msgid "Ecuador"
1972
+ msgstr ""
1973
+
1974
+ #: view/BlockSettings.php:247
1975
+ msgid "El Salvador"
1976
+ msgstr ""
1977
+
1978
+ #: view/BlockSettings.php:248
1979
+ msgid "Estonia"
1980
+ msgstr ""
1981
 
1982
+ #: view/BlockSettings.php:249
1983
+ msgid "Federated States of Micronesia"
1984
+ msgstr ""
1985
+
1986
+ #: view/BlockSettings.php:250
1987
+ msgid "Fiji"
1988
+ msgstr ""
1989
+
1990
+ #: view/BlockSettings.php:251
1991
+ msgid "Finland"
1992
+ msgstr ""
1993
+
1994
+ #: view/BlockSettings.php:252
1995
  #, fuzzy
1996
+ msgid "France"
1997
+ msgstr "Renunta"
1998
 
1999
+ #: view/BlockSettings.php:253
2000
+ msgid "The Gambia"
2001
+ msgstr ""
2002
 
2003
+ #: view/BlockSettings.php:254
2004
+ msgid "Georgia"
 
 
2005
  msgstr ""
 
 
2006
 
2007
+ #: view/BlockSettings.php:255
2008
+ msgid "Germany"
2009
+ msgstr ""
2010
 
2011
+ #: view/BlockSettings.php:256
2012
+ msgid "Gibraltar"
 
2013
  msgstr ""
2014
 
2015
+ #: view/BlockSettings.php:257
2016
+ msgid "Greece"
 
2017
  msgstr ""
2018
 
2019
+ #: view/BlockSettings.php:258
2020
+ msgid "Greenland"
 
2021
  msgstr ""
2022
 
2023
+ #: view/BlockSettings.php:259
2024
+ msgid "Guernsey"
 
2025
  msgstr ""
2026
 
2027
+ #: view/BlockSettings.php:260
2028
+ msgid "Honduras"
2029
+ msgstr ""
2030
 
2031
+ #: view/BlockSettings.php:261
2032
+ msgid "Hong Kong"
 
2033
  msgstr ""
 
 
2034
 
2035
+ #: view/BlockSettings.php:262
2036
+ msgid "Hungary"
 
2037
  msgstr ""
 
 
2038
 
2039
+ #: view/BlockSettings.php:263
2040
+ msgid "India"
2041
+ msgstr ""
2042
+
2043
+ #: view/BlockSettings.php:264
2044
+ msgid "Indonesia"
2045
+ msgstr ""
2046
+
2047
+ #: view/BlockSettings.php:265
2048
+ msgid "Ireland"
2049
+ msgstr ""
2050
+
2051
+ #: view/BlockSettings.php:266
2052
+ msgid "Isle of Man"
2053
+ msgstr ""
2054
+
2055
+ #: view/BlockSettings.php:267
2056
+ msgid "Israel"
2057
  msgstr ""
2058
 
2059
+ #: view/BlockSettings.php:268
2060
+ msgid "Italy"
2061
+ msgstr ""
2062
+
2063
+ #: view/BlockSettings.php:269
2064
+ msgid "Jamaica"
2065
+ msgstr ""
2066
+
2067
+ #: view/BlockSettings.php:270
2068
+ msgid "Japan"
2069
+ msgstr ""
2070
+
2071
+ #: view/BlockSettings.php:271
2072
+ msgid "Jersey"
2073
+ msgstr ""
2074
+
2075
+ #: view/BlockSettings.php:272
2076
+ msgid "Kazakhstan"
2077
+ msgstr ""
2078
+
2079
+ #: view/BlockSettings.php:273
2080
+ msgid "Korea"
2081
+ msgstr ""
2082
+
2083
+ #: view/BlockSettings.php:274
2084
+ msgid "Latvia"
2085
+ msgstr ""
2086
+
2087
+ #: view/BlockSettings.php:275
2088
+ msgid "Lesotho"
2089
+ msgstr ""
2090
+
2091
+ #: view/BlockSettings.php:276
2092
+ msgid "Liechtenstein"
2093
+ msgstr ""
2094
+
2095
+ #: view/BlockSettings.php:277
2096
+ msgid "Lithuania"
2097
+ msgstr ""
2098
+
2099
+ #: view/BlockSettings.php:278
2100
+ msgid "Luxembourg"
2101
+ msgstr ""
2102
+
2103
+ #: view/BlockSettings.php:279
2104
+ msgid "Malawi"
2105
+ msgstr ""
2106
+
2107
+ #: view/BlockSettings.php:280
2108
+ msgid "Malaysia"
2109
+ msgstr ""
2110
+
2111
+ #: view/BlockSettings.php:281
2112
+ msgid "Malta"
2113
+ msgstr ""
2114
+
2115
+ #: view/BlockSettings.php:282
2116
+ msgid "Mauritius"
2117
+ msgstr ""
2118
+
2119
+ #: view/BlockSettings.php:283
2120
+ msgid "México"
2121
+ msgstr ""
2122
+
2123
+ #: view/BlockSettings.php:284
2124
+ msgid "Montserrat"
2125
+ msgstr ""
2126
+
2127
+ #: view/BlockSettings.php:285
2128
+ msgid "Namibia"
2129
+ msgstr ""
2130
+
2131
+ #: view/BlockSettings.php:286
2132
+ msgid "Nepal"
2133
+ msgstr ""
2134
+
2135
+ #: view/BlockSettings.php:287
2136
+ msgid "Netherlands"
2137
+ msgstr ""
2138
+
2139
+ #: view/BlockSettings.php:288
2140
+ msgid "New Zealand"
2141
+ msgstr ""
2142
+
2143
+ #: view/BlockSettings.php:289
2144
+ msgid "Nicaragua"
2145
+ msgstr ""
2146
+
2147
+ #: view/BlockSettings.php:290
2148
+ msgid "Norfolk Island"
2149
+ msgstr ""
2150
+
2151
+ #: view/BlockSettings.php:291
2152
+ msgid "Norway"
2153
+ msgstr ""
2154
+
2155
+ #: view/BlockSettings.php:292
2156
+ msgid "Pakistan"
2157
+ msgstr ""
2158
+
2159
+ #: view/BlockSettings.php:293
2160
+ msgid "Panamá"
2161
+ msgstr ""
2162
+
2163
+ #: view/BlockSettings.php:294
2164
+ msgid "Paraguay"
2165
+ msgstr ""
2166
+
2167
+ #: view/BlockSettings.php:295
2168
+ msgid "Perú"
2169
+ msgstr ""
2170
+
2171
+ #: view/BlockSettings.php:296
2172
+ msgid "Philippines"
2173
+ msgstr ""
2174
+
2175
+ #: view/BlockSettings.php:297
2176
+ msgid "Pitcairn Islands"
2177
+ msgstr ""
2178
+
2179
+ #: view/BlockSettings.php:298
2180
+ msgid "Poland"
2181
+ msgstr ""
2182
+
2183
+ #: view/BlockSettings.php:299
2184
+ msgid "Portugal"
2185
+ msgstr ""
2186
+
2187
+ #: view/BlockSettings.php:300
2188
+ msgid "Puerto Rico"
2189
+ msgstr ""
2190
+
2191
+ #: view/BlockSettings.php:301
2192
+ msgid "Rep. of the Congo"
2193
+ msgstr ""
2194
+
2195
+ #: view/BlockSettings.php:302
2196
+ msgid "Romania"
2197
+ msgstr ""
2198
+
2199
+ #: view/BlockSettings.php:303
2200
+ msgid "Russia"
2201
+ msgstr ""
2202
+
2203
+ #: view/BlockSettings.php:304
2204
+ msgid "Rwanda"
2205
+ msgstr ""
2206
+
2207
+ #: view/BlockSettings.php:305
2208
+ msgid "Saint Helena"
2209
+ msgstr ""
2210
+
2211
+ #: view/BlockSettings.php:306
2212
+ msgid "San Marino"
2213
+ msgstr ""
2214
+
2215
+ #: view/BlockSettings.php:307
2216
+ msgid "Saudi Arabia"
2217
+ msgstr ""
2218
+
2219
+ #: view/BlockSettings.php:308
2220
+ msgid "Singapore"
2221
+ msgstr ""
2222
+
2223
+ #: view/BlockSettings.php:309
2224
+ msgid "Slovakia"
2225
+ msgstr ""
2226
+
2227
+ #: view/BlockSettings.php:310
2228
+ msgid "South Africa"
2229
+ msgstr ""
2230
+
2231
+ #: view/BlockSettings.php:311
2232
+ msgid "Spain"
2233
+ msgstr ""
2234
+
2235
+ #: view/BlockSettings.php:312
2236
+ msgid "Sri Lanka"
2237
+ msgstr ""
2238
+
2239
+ #: view/BlockSettings.php:313
2240
+ msgid "Sweden"
2241
+ msgstr ""
2242
+
2243
+ #: view/BlockSettings.php:314
2244
+ msgid "Switzerland"
2245
+ msgstr ""
2246
+
2247
+ #: view/BlockSettings.php:315
2248
+ msgid "Taiwan"
2249
+ msgstr ""
2250
+
2251
+ #: view/BlockSettings.php:316
2252
+ msgid "Thailand"
2253
+ msgstr ""
2254
+
2255
+ #: view/BlockSettings.php:317
2256
+ msgid "Trinidad and Tobago"
2257
+ msgstr ""
2258
+
2259
+ #: view/BlockSettings.php:318
2260
+ msgid "Turkey"
2261
+ msgstr ""
2262
+
2263
+ #: view/BlockSettings.php:319
2264
+ msgid "Ukraine"
2265
+ msgstr ""
2266
+
2267
+ #: view/BlockSettings.php:320
2268
+ msgid "United Arab Emirates"
2269
+ msgstr ""
2270
+
2271
+ #: view/BlockSettings.php:321
2272
+ msgid "United Kingdom"
2273
+ msgstr ""
2274
+
2275
+ #: view/BlockSettings.php:322
2276
+ msgid "United States"
2277
+ msgstr ""
2278
+
2279
+ #: view/BlockSettings.php:323
2280
+ msgid "Uruguay"
2281
+ msgstr ""
2282
+
2283
+ #: view/BlockSettings.php:324
2284
+ msgid "Uzbekistan"
2285
+ msgstr ""
2286
+
2287
+ #: view/BlockSettings.php:325
2288
+ msgid "Vanuatu"
2289
+ msgstr ""
2290
+
2291
+ #: view/BlockSettings.php:326
2292
+ msgid "Venezuela"
2293
+ msgstr ""
2294
+
2295
+ #: view/BlockSettings.php:327
2296
+ msgid "Vietnam"
2297
+ msgstr ""
2298
+
2299
+ #: view/BlockSettings.php:331
2300
+ #, php-format
2301
+ msgid ""
2302
+ "Select how many pages to be checked in the Performance Analytics section "
2303
+ "every hour. %s(not recommended for shared hosting plan)%s"
2304
+ msgstr ""
2305
+
2306
+ #: view/BlockSettings.php:338
2307
+ msgid "page"
2308
+ msgstr ""
2309
+
2310
+ #: view/BlockSettings.php:340
2311
+ msgid "pages"
2312
+ msgstr ""
2313
+
2314
+ #: view/BlockSettings.php:346
2315
+ msgid "h"
2316
+ msgstr ""
2317
+
2318
+ #: view/BlockSettings.php:360
2319
+ msgid ""
2320
+ "Restricts search results to results originating in the above particular "
2321
+ "country."
2322
+ msgstr ""
2323
+
2324
+ #: view/BlockSettings.php:370
2325
+ msgid "Robots.txt Editor"
2326
+ msgstr ""
2327
+
2328
+ #: view/BlockSettings.php:371
2329
+ #, php-format
2330
+ msgid "%sLearn about robots.txt files%s"
2331
+ msgstr ""
2332
+
2333
+ #: view/BlockSettings.php:372
2334
+ #, php-format
2335
+ msgid "%sHow to use Robots.txt%s"
2336
+ msgstr ""
2337
+
2338
+ #: view/BlockSettings.php:378
2339
+ msgid "Edit the Robots.txt data"
2340
+ msgstr ""
2341
+
2342
+ #: view/BlockSettings.php:391
2343
+ msgid ""
2344
+ "Does not physically create the robots.txt file. The best option for "
2345
+ "Multisites."
2346
+ msgstr ""
2347
+
2348
+ #: view/BlockSettings.php:396
2349
+ msgid "Save Robots"
2350
+ msgstr ""
2351
+
2352
+ #: view/BlockSettingsSeo.php:27
2353
+ msgid "SEO"
2354
+ msgstr ""
2355
+
2356
+ #: view/BlockSettingsSeo.php:31 view/BlockSettingsSeo.php:204
2357
+ msgid "Check for SEO issues in your site"
2358
+ msgstr ""
2359
+
2360
+ #: view/BlockSettingsSeo.php:46
2361
+ msgid "Let Squirrly SEO Optimize This Blog"
2362
+ msgstr ""
2363
+
2364
+ #: view/BlockSettingsSeo.php:47
2365
+ #, php-format
2366
+ msgid "%sIs Squirrly SEO better than WordPress SEO by Yoast?%s"
2367
+ msgstr ""
2368
+
2369
+ #: view/BlockSettingsSeo.php:49
2370
+ msgid ""
2371
+ "Activate the built-in SEO settings from Squirrly by switching Yes below. "
2372
+ "<strong>Works well with Multisites and Ecommerce.</strong>"
2373
+ msgstr ""
2374
+
2375
+ #: view/BlockSettingsSeo.php:63
2376
+ msgid "New SEO Settings For Google 2017"
2377
+ msgstr ""
2378
+
2379
+ #: view/BlockSettingsSeo.php:75
2380
+ msgid "Fastest SEO Plugin in 2017"
2381
+ msgstr ""
2382
+
2383
+ #: view/BlockSettingsSeo.php:86
2384
+ msgid "What does Squirrly automatically do for SEO?"
2385
+ msgstr "Ce face Squirrly in mod automat pentru SEO?"
2386
+
2387
+ #: view/BlockSettingsSeo.php:100
2388
+ #, php-format
2389
+ msgid ""
2390
+ "adds <strong>%scanonical link%s</strong>, <strong>%srel=\"prev\" and rel="
2391
+ "\"next\"%s</strong> metas in Header"
2392
+ msgstr ""
2393
+
2394
+ #: view/BlockSettingsSeo.php:117
2395
+ msgid "adds the required METAs (<strong>Dublin Core, Language</strong>, etc.)"
2396
+ msgstr ""
2397
+
2398
+ #: view/BlockSettingsSeo.php:133
2399
+ #, php-format
2400
+ msgid "adds the <strong>%sXML Sitemap%s</strong> for search engines: %s"
2401
+ msgstr ""
2402
+
2403
+ #: view/BlockSettingsSeo.php:149
2404
+ #, php-format
2405
+ msgid "adds <strong>Feed style</strong> to your blog feed (eg. %s/feed)"
2406
+ msgstr ""
2407
+
2408
+ #: view/BlockSettingsSeo.php:165
2409
+ #, php-format
2410
+ msgid ""
2411
+ "adds the <strong>%sfavicon.ico%s</strong> and the <strong>%sicons for "
2412
+ "tablets and smartphones%s</strong>"
2413
+ msgstr ""
2414
+
2415
+ #: view/BlockSettingsSeo.php:181
2416
+ #, php-format
2417
+ msgid "adds the <strong>%sJson-LD%s</strong> metas for Semantic SEO"
2418
+ msgstr ""
2419
+
2420
+ #: view/BlockSettingsSeo.php:197
2421
+ #, php-format
2422
+ msgid ""
2423
+ "adds the <strong>%sNoindex%s</strong>, <strong>%sNofollow%s</strong> metas "
2424
+ "for your desired pages"
2425
+ msgstr ""
2426
+
2427
+ #: view/BlockSettingsSeo.php:201
2428
+ msgid ""
2429
+ "Note! By switching the <strong>Json-LD</strong>, <strong>XML Sitemap</"
2430
+ "strong> and <strong>Favicon</strong> on, you open new options below"
2431
+ msgstr ""
2432
+
2433
+ #: view/BlockSettingsSeo.php:210
2434
+ msgid "First Page Optimization"
2435
+ msgstr ""
2436
+
2437
+ #: view/BlockSettingsSeo.php:211
2438
+ #, php-format
2439
+ msgid "%sThe best SEO approach to Meta information%s"
2440
+ msgstr ""
2441
+
2442
+ #: view/BlockSettingsSeo.php:212
2443
+ msgid "Optimize the <strong>Titles</strong>"
2444
+ msgstr ""
2445
+
2446
+ #: view/BlockSettingsSeo.php:227
2447
+ #, php-format
2448
+ msgid "Optimize %sDescriptions%s "
2449
+ msgstr ""
2450
+
2451
+ #: view/BlockSettingsSeo.php:243
2452
+ #, php-format
2453
+ msgid "Optimize %sKeywords%s "
2454
+ msgstr ""
2455
+
2456
+ #: view/BlockSettingsSeo.php:259
2457
+ msgid "SEO for all post/pages"
2458
+ msgstr ""
2459
+
2460
+ #: view/BlockSettingsSeo.php:260
2461
+ #, php-format
2462
+ msgid ""
2463
+ "To customize the Title and Description for all the Posts and Pages in your "
2464
+ "site use the %sSquirrly Snippet Tool%s"
2465
+ msgstr ""
2466
+
2467
+ #: view/BlockSettingsSeo.php:262
2468
+ msgid "Add the Post tags in <strong>Keyword META</strong>."
2469
+ msgstr ""
2470
+
2471
+ #: view/BlockSettingsSeo.php:284
2472
+ msgid "Squirrly Snippet G17-True Render"
2473
+ msgstr ""
2474
+
2475
+ #: view/BlockSettingsSeo.php:308
2476
+ msgid "First Page Optimization:"
2477
+ msgstr ""
2478
+
2479
+ #: view/BlockSettingsSeo.php:314
2480
+ msgid "Title:"
2481
+ msgstr "Titlu:"
2482
+
2483
+ #: view/BlockSettingsSeo.php:319
2484
+ msgid "Tips: Length 10-75 chars"
2485
+ msgstr "Atentie: Lungimea 10-75 caractere"
2486
+
2487
+ #: view/BlockSettingsSeo.php:323
2488
+ msgid "Description:"
2489
+ msgstr "Descrierea:"
2490
+
2491
+ #: view/BlockSettingsSeo.php:327
2492
+ msgid "Tips: Length 70-165 chars"
2493
+ msgstr "Atentie: Lungimea 70-165 caractere"
2494
+
2495
+ #: view/BlockSettingsSeo.php:330
2496
+ msgid "Keywords:"
2497
+ msgstr "Cuvinte cheie:"
2498
+
2499
+ #: view/BlockSettingsSeo.php:331
2500
+ msgid "Tips: use 2-4 keywords"
2501
+ msgstr ""
2502
+
2503
+ #: view/BlockSettingsSeo.php:334
2504
+ msgid "OG Image:"
2505
+ msgstr ""
2506
+
2507
+ #: view/BlockSettingsSeo.php:335
2508
+ msgid "Select Open Graph Image"
2509
+ msgstr ""
2510
+
2511
+ #: view/BlockSettingsSeo.php:340
2512
+ msgid "First Page Preview (Title, Description, Keywords)"
2513
+ msgstr ""
2514
+
2515
+ #: view/BlockSettingsSeo.php:342
2516
+ msgid "Squirrly Snippet"
2517
+ msgstr "Snipet Squirrly"
2518
+
2519
+ #: view/BlockSettingsSeo.php:354
2520
+ msgid ""
2521
+ "If you don't see any changes in your Google snippet, check if other SEO "
2522
+ "themes or plugins affect Squirrly."
2523
+ msgstr ""
2524
+
2525
+ #: view/BlockSettingsSeo.php:358
2526
+ #, php-format
2527
+ msgid ""
2528
+ "Use the %s<strong>Squirrly Snippet Tool</strong>%s while editing a Post/Page "
2529
+ "to customize the Title and the Description."
2530
+ msgstr ""
2531
+
2532
+ #: view/BlockSettingsSeo.php:367
2533
+ #, fuzzy
2534
+ msgid "Social Media Options"
2535
+ msgstr "Optiuni Squirrly"
2536
+
2537
+ #: view/BlockSettingsSeo.php:369
2538
+ msgid "Select the language you're using on Social Media"
2539
+ msgstr ""
2540
+
2541
+ #: view/BlockSettingsSeo.php:515
2542
+ #, php-format
2543
+ msgid "%sHow to pop out in Social Media with your links%s"
2544
+ msgstr ""
2545
+
2546
+ #: view/BlockSettingsSeo.php:516
2547
+ #, php-format
2548
+ msgid "%sGet busy with Facebook’s new Search Engine functions%s"
2549
+ msgstr ""
2550
+
2551
+ #: view/BlockSettingsSeo.php:517
2552
+ #, php-format
2553
+ msgid ""
2554
+ "%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s"
2555
+ msgstr ""
2556
+
2557
+ #: view/BlockSettingsSeo.php:523
2558
+ msgid "Open Graph G17 - 2017 Settings"
2559
+ msgstr ""
2560
+
2561
+ #: view/BlockSettingsSeo.php:535
2562
+ msgid "Squirrly Adds the Best Codes for Open Graph and Twitter Cards"
2563
+ msgstr ""
2564
+
2565
+ #: view/BlockSettingsSeo.php:551
2566
+ #, php-format
2567
+ msgid ""
2568
+ "Add the Social Open Graph protocol so that your Facebook shares look good. "
2569
+ "%sCheck here%s. "
2570
+ msgstr ""
2571
+
2572
+ #: view/BlockSettingsSeo.php:555
2573
+ msgid "Facebook App ID"
2574
+ msgstr ""
2575
+
2576
+ #: view/BlockSettingsSeo.php:556
2577
+ #, php-format
2578
+ msgid "Add the %sFacebook App%s ID "
2579
+ msgstr ""
2580
+
2581
+ #: view/BlockSettingsSeo.php:573
2582
+ msgid "You need to add your <strong>Twitter account</strong> below"
2583
+ msgstr ""
2584
+
2585
+ #: view/BlockSettingsSeo.php:583
2586
+ msgid "Add the <strong>Twitter card</strong> in your tweets. "
2587
+ msgstr "Adauga <strong>titlul</strong> corect in pagina acasa"
2588
+
2589
+ #: view/BlockSettingsSeo.php:591
2590
+ #, php-format
2591
+ msgid ""
2592
+ "Use <strong>Twitter %ssummary_large_image%s</strong> for your Twitter Card. "
2593
+ msgstr ""
2594
+
2595
+ #: view/BlockSettingsSeo.php:603
2596
+ msgid "Social Media Accounts"
2597
+ msgstr ""
2598
+
2599
+ #: view/BlockSettingsSeo.php:604
2600
+ #, php-format
2601
+ msgid "%sLink your Google+ profile to the content you create%s"
2602
+ msgstr ""
2603
+
2604
+ #: view/BlockSettingsSeo.php:605
2605
+ #, php-format
2606
+ msgid ""
2607
+ "%sTwitter account is mandatory for <strong>Twitter Card Validation</strong>%s"
2608
+ msgstr ""
2609
+
2610
+ #: view/BlockSettingsSeo.php:606
2611
+ #, php-format
2612
+ msgid ""
2613
+ "%sAdd all your social accounts for <strong>JSON-LD Semantic SEO</strong>%s"
2614
+ msgstr ""
2615
+
2616
+ #: view/BlockSettingsSeo.php:607 view/BlockSettingsSeo.php:843
2617
+ #, php-format
2618
+ msgid "%sSpecify your social profiles to Google%s"
2619
+ msgstr ""
2620
+
2621
+ #: view/BlockSettingsSeo.php:615
2622
+ msgid "Your Twitter Account:"
2623
+ msgstr ""
2624
+
2625
+ #: view/BlockSettingsSeo.php:622
2626
+ msgid "Google Plus Profile:"
2627
+ msgstr ""
2628
+
2629
+ #: view/BlockSettingsSeo.php:629
2630
+ msgid "Facebook Profile:"
2631
+ msgstr ""
2632
+
2633
+ #: view/BlockSettingsSeo.php:636
2634
+ msgid "Linkedin Profile:"
2635
+ msgstr ""
2636
+
2637
+ #: view/BlockSettingsSeo.php:643
2638
+ msgid "Pinterest Profile:"
2639
+ msgstr ""
2640
+
2641
+ #: view/BlockSettingsSeo.php:650
2642
+ msgid "Instagram Profile:"
2643
+ msgstr ""
2644
+
2645
+ #: view/BlockSettingsSeo.php:657
2646
+ msgid "Youtube Profile:"
2647
+ msgstr ""
2648
+
2649
+ #: view/BlockSettingsSeo.php:667
2650
+ msgid "XML Sitemap for Google"
2651
+ msgstr ""
2652
+
2653
+ #: view/BlockSettingsSeo.php:668
2654
+ msgid ""
2655
+ "Squirrly Sitemap is the fastest way to tell Google about the pages on your "
2656
+ "site. <strong>Supports Multisites, Google News, Images, Videos, Custom Post "
2657
+ "Types, Custom Taxonomies and Ecommerce products</strong>"
2658
+ msgstr ""
2659
+
2660
+ #: view/BlockSettingsSeo.php:669
2661
+ #, php-format
2662
+ msgid "%sHow to submit your sitemap.xml in Google Webmaster Tool%s"
2663
+ msgstr ""
2664
+
2665
+ #: view/BlockSettingsSeo.php:670
2666
+ #, php-format
2667
+ msgid ""
2668
+ "%s10 Vital To Dos to Feed Your SEO Content Machine After You Post Articles%s"
2669
+ msgstr ""
2670
+
2671
+ #: view/BlockSettingsSeo.php:671
2672
+ #, php-format
2673
+ msgid ""
2674
+ "For Google News Sitemap, ensure that your site is included in %sGoogle News%s"
2675
+ msgstr ""
2676
+
2677
+ #: view/BlockSettingsSeo.php:680
2678
+ msgid "XML Sitemap Options"
2679
+ msgstr ""
2680
+
2681
+ #: view/BlockSettingsSeo.php:689
2682
+ msgid "Ping your sitemap to Google and Bing when a new post is published"
2683
+ msgstr ""
2684
+
2685
+ #: view/BlockSettingsSeo.php:695
2686
+ msgid "Build Sitemaps for"
2687
+ msgstr ""
2688
+
2689
+ #: view/BlockSettingsSeo.php:703
2690
+ msgid "Google News"
2691
+ msgstr ""
2692
+
2693
+ #: view/BlockSettingsSeo.php:715
2694
+ msgid "Categories"
2695
+ msgstr ""
2696
+
2697
+ #: view/BlockSettingsSeo.php:729
2698
+ msgid "Tags"
2699
+ msgstr ""
2700
+
2701
+ #: view/BlockSettingsSeo.php:744
2702
+ msgid "Archive"
2703
+ msgstr ""
2704
+
2705
+ #: view/BlockSettingsSeo.php:752
2706
+ msgid "Custom Taxonomies"
2707
+ msgstr ""
2708
+
2709
+ #: view/BlockSettingsSeo.php:759
2710
+ msgid "Custom Posts"
2711
+ msgstr ""
2712
+
2713
+ #: view/BlockSettingsSeo.php:763
2714
+ #, php-format
2715
+ msgid ""
2716
+ "Select only the Post Types that have links in them. Your sitemap will be %s"
2717
+ msgstr ""
2718
+
2719
+ #: view/BlockSettingsSeo.php:767
2720
+ msgid "Include in Sitemaps"
2721
+ msgstr ""
2722
+
2723
+ #: view/BlockSettingsSeo.php:770
2724
+ msgid "<strong>Images</strong> from posts/pages"
2725
+ msgstr ""
2726
+
2727
+ #: view/BlockSettingsSeo.php:773
2728
+ msgid "<strong>Videos</strong> (embeded and local media)"
2729
+ msgstr ""
2730
+
2731
+ #: view/BlockSettingsSeo.php:778
2732
+ msgid "How often do you update your site?"
2733
+ msgstr ""
2734
+
2735
+ #: view/BlockSettingsSeo.php:780
2736
+ msgid "every day"
2737
+ msgstr ""
2738
+
2739
+ #: view/BlockSettingsSeo.php:781
2740
+ msgid "1-3 times per week"
2741
+ msgstr ""
2742
+
2743
+ #: view/BlockSettingsSeo.php:782
2744
+ msgid "1-3 times per month"
2745
+ msgstr ""
2746
+
2747
+ #: view/BlockSettingsSeo.php:783
2748
+ msgid "1-3 times per year"
2749
+ msgstr ""
2750
+
2751
+ #: view/BlockSettingsSeo.php:787
2752
+ msgid "Feed Pagination: How many Posts per page to show in sitemap?"
2753
+ msgstr ""
2754
+
2755
+ #: view/BlockSettingsSeo.php:802
2756
+ msgid "Change the Website Icon"
2757
+ msgstr "Schimba icoana site-ului"
2758
+
2759
+ #: view/BlockSettingsSeo.php:803
2760
+ msgid ""
2761
+ "Now, even tablet & smartphone browsers make use of your icons. This makes "
2762
+ "having a good favicon even more important."
2763
+ msgstr ""
2764
+
2765
+ #: view/BlockSettingsSeo.php:804
2766
+ #, php-format
2767
+ msgid ""
2768
+ "You can use %shttp://convertico.com/%s to convert your photo to icon and "
2769
+ "upload it here after that."
2770
+ msgstr ""
2771
+ "Poti folosi %shttp://convertico.com/%s pentru a converti imaginea in icoana "
2772
+ "si poti incarca icoana aici"
2773
+
2774
+ #: view/BlockSettingsSeo.php:810
2775
+ msgid "Upload file:"
2776
+ msgstr "Urca fisier:"
2777
+
2778
+ #: view/BlockSettingsSeo.php:823 view/FrontMenu.php:305 view/FrontMenu.php:446
2779
+ msgid "Upload"
2780
+ msgstr "Upload"
2781
+
2782
+ #: view/BlockSettingsSeo.php:827
2783
+ msgid ""
2784
+ "If you don't see the new icon in your browser, empty the browser cache and "
2785
+ "refresh the page."
2786
+ msgstr ""
2787
+ "Daca nu vezi noua icoana in browser, goleste cache-ul din browser si da "
2788
+ "refresh la pagina."
2789
+
2790
+ #: view/BlockSettingsSeo.php:829
2791
+ msgid "File types: JPG, JPEG, GIF and PNG."
2792
+ msgstr "Tip fisiere JPEG,JPG,GIF sau PNG "
2793
+
2794
+ #: view/BlockSettingsSeo.php:831
2795
+ msgid ""
2796
+ "Does not physically create the favicon.ico file. The best option for "
2797
+ "Multisites."
2798
+ msgstr ""
2799
+
2800
+ #: view/BlockSettingsSeo.php:839
2801
+ msgid "JSON-LD for Semantic SEO"
2802
+ msgstr ""
2803
+
2804
+ #: view/BlockSettingsSeo.php:840
2805
+ msgid ""
2806
+ "Squirrly will automatically add the JSON-LD Structured Data in your site."
2807
+ msgstr ""
2808
+
2809
+ #: view/BlockSettingsSeo.php:841
2810
+ #, php-format
2811
+ msgid "%sJSON-LD's Big Day at Google%s"
2812
+ msgstr ""
2813
+
2814
+ #: view/BlockSettingsSeo.php:842
2815
+ #, php-format
2816
+ msgid "%sGoogle Testing Tool%s"
2817
+ msgstr ""
2818
+
2819
+ #: view/BlockSettingsSeo.php:849
2820
+ msgid "JSON-LD G17 -2x More Options"
2821
+ msgstr ""
2822
+
2823
+ #: view/BlockSettingsSeo.php:866
2824
+ msgid "Your site type:"
2825
+ msgstr ""
2826
+
2827
+ #: view/BlockSettingsSeo.php:868
2828
+ msgid "Organization"
2829
+ msgstr ""
2830
+
2831
+ #: view/BlockSettingsSeo.php:869
2832
+ msgid "Personal"
2833
+ msgstr ""
2834
+
2835
+ #: view/BlockSettingsSeo.php:875
2836
+ msgid "Your Organization Name:"
2837
+ msgstr ""
2838
+
2839
+ #: view/BlockSettingsSeo.php:876
2840
+ msgid "Your Name:"
2841
+ msgstr ""
2842
+
2843
+ #: view/BlockSettingsSeo.php:880
2844
+ msgid "Job Title:"
2845
+ msgstr ""
2846
+
2847
+ #: view/BlockSettingsSeo.php:884
2848
+ msgid "Logo Url:"
2849
+ msgstr ""
2850
+
2851
+ #: view/BlockSettingsSeo.php:885
2852
+ msgid "Image Url:"
2853
+ msgstr ""
2854
+
2855
+ #: view/BlockSettingsSeo.php:886
2856
+ msgid "Select Image"
2857
+ msgstr ""
2858
+
2859
+ #: view/BlockSettingsSeo.php:890
2860
+ msgid "Contact Phone:"
2861
+ msgstr ""
2862
+
2863
+ #: view/BlockSettingsSeo.php:894
2864
+ msgid "Contact Type:"
2865
+ msgstr ""
2866
+
2867
+ #: view/BlockSettingsSeo.php:896
2868
+ msgid "Customer Service"
2869
+ msgstr ""
2870
+
2871
+ #: view/BlockSettingsSeo.php:897
2872
+ msgid "Technical Support"
2873
+ msgstr ""
2874
+
2875
+ #: view/BlockSettingsSeo.php:898
2876
+ msgid "Billing Support"
2877
+ msgstr ""
2878
+
2879
+ #: view/BlockSettingsSeo.php:899
2880
+ msgid "Bill Payment"
2881
+ msgstr ""
2882
+
2883
+ #: view/BlockSettingsSeo.php:900
2884
+ msgid "Sales"
2885
+ msgstr ""
2886
+
2887
+ #: view/BlockSettingsSeo.php:901
2888
+ msgid "Reservations"
2889
+ msgstr ""
2890
+
2891
+ #: view/BlockSettingsSeo.php:902
2892
+ msgid "Credit Card Support"
2893
+ msgstr ""
2894
+
2895
+ #: view/BlockSettingsSeo.php:903
2896
+ msgid "Emergency"
2897
+ msgstr ""
2898
+
2899
+ #: view/BlockSettingsSeo.php:904
2900
+ msgid "Baggage Tracking"
2901
+ msgstr ""
2902
+
2903
+ #: view/BlockSettingsSeo.php:905
2904
+ msgid "Roadside Assistance"
2905
+ msgstr ""
2906
+
2907
+ #: view/BlockSettingsSeo.php:906
2908
+ msgid "Package Tracking"
2909
+ msgstr ""
2910
+
2911
+ #: view/BlockSettingsSeo.php:911
2912
+ msgid "Short Description:"
2913
+ msgstr ""
2914
+
2915
+ #: view/BlockSettingsSeo.php:919
2916
+ msgid "Add your social accounts for Json-LD"
2917
+ msgstr ""
2918
+
2919
+ #: view/BlockSettingsSeo.php:924
2920
+ msgid "How the search results will look like once Google grabs your data."
2921
+ msgstr ""
2922
+
2923
+ #: view/BlockSettingsSeo.php:933 view/BlockToolbar.php:8
2924
+ msgid "Tracking Tools"
2925
+ msgstr ""
2926
+
2927
+ #: view/BlockSettingsSeo.php:934
2928
+ #, php-format
2929
+ msgid "%sHow to Get the Most Out of Google Analytics%s"
2930
+ msgstr ""
2931
+
2932
+ #: view/BlockSettingsSeo.php:935
2933
+ #, php-format
2934
+ msgid "%sWhat is Facebook Pixel?%s"
2935
+ msgstr ""
2936
+
2937
+ #: view/BlockSettingsSeo.php:936
2938
+ #, php-format
2939
+ msgid "%sA Beginner’s Guide to Facebook Insights%s"
2940
+ msgstr ""
2941
+
2942
+ #: view/BlockSettingsSeo.php:943
2943
+ msgid "Google Tracking G17"
2944
+ msgstr ""
2945
+
2946
+ #: view/BlockSettingsSeo.php:955
2947
+ msgid "Facebook Tracking G17"
2948
+ msgstr ""
2949
+
2950
+ #: view/BlockSettingsSeo.php:967
2951
+ msgid "Rich Pins G17"
2952
+ msgstr ""
2953
+
2954
+ #: view/BlockSettingsSeo.php:984 view/BlockSettingsSeo.php:994
2955
+ #: view/BlockSettingsSeo.php:1007
2956
+ #, php-format
2957
+ msgid "Facebook Admin ID (for %sInsights%s ):"
2958
+ msgstr ""
2959
+
2960
+ #: view/BlockSettingsSeo.php:987 view/BlockSettingsSeo.php:997
2961
+ #: view/BlockSettingsSeo.php:1010
2962
+ msgid "Facebook ID or https://www.facebook.com/YourProfileName"
2963
+ msgstr ""
2964
+
2965
+ #: view/BlockSettingsSeo.php:1002
2966
+ msgid "Add a Facebook Admin ID"
2967
+ msgstr ""
2968
+
2969
+ #: view/BlockSettingsSeo.php:1016
2970
+ #, fuzzy, php-format
2971
+ msgid "Google %sAnalytics ID%s:"
2972
+ msgstr "Google %sAnalytics ID%s:"
2973
+
2974
+ #: view/BlockSettingsSeo.php:1021
2975
+ #, php-format
2976
+ msgid "Facebook %sPixel ID%s:"
2977
+ msgstr ""
2978
+
2979
+ #: view/BlockSettingsSeo.php:1035
2980
+ #, php-format
2981
+ msgid ""
2982
+ "Load <strong>%sGoogle Analytics AMP%s</strong> and <strong>%sFacebook Pixel "
2983
+ "AMP%s</strong> tracking%s(Warning! The tracking works only for AMP Themes.%s)"
2984
+ msgstr ""
2985
+
2986
+ #: view/BlockSettingsSeo.php:1042
2987
+ msgid "Measure Your Success"
2988
+ msgstr ""
2989
+
2990
+ #: view/BlockSettingsSeo.php:1043
2991
+ #, php-format
2992
+ msgid "%sHow to set the Google Webmaster Tool%s"
2993
+ msgstr ""
2994
+
2995
+ #: view/BlockSettingsSeo.php:1044
2996
+ #, php-format
2997
+ msgid "%sBest practices to help Google find, crawl, and index your site%s"
2998
+ msgstr ""
2999
+
3000
+ #: view/BlockSettingsSeo.php:1045
3001
+ #, php-format
3002
+ msgid "%sBing Webmaster Tools Help & How-To Center%s"
3003
+ msgstr ""
3004
+
3005
+ #: view/BlockSettingsSeo.php:1046
3006
+ #, php-format
3007
+ msgid "%sRich Pins Validator%s"
3008
+ msgstr ""
3009
+
3010
+ #: view/BlockSettingsSeo.php:1052
3011
+ #, fuzzy, php-format
3012
+ msgid "Google META verification code for %sWebmaster Tool%s:"
3013
+ msgstr "Cod META pentru %sGoogle Webmaster Tool%s"
3014
+
3015
+ #: view/BlockSettingsSeo.php:1058
3016
+ #, fuzzy, php-format
3017
+ msgid "Bing META code (for %sWebmaster Tool%s ):"
3018
+ msgstr "Bing META code (pentru %sWebmaster Tool%s):"
3019
+
3020
+ #: view/BlockSettingsSeo.php:1065
3021
+ #, fuzzy, php-format
3022
+ msgid "Alexa META code (for %sAlexa Tool%s ):"
3023
+ msgstr "Bing META code (pentru %sWebmaster Tool%s):"
3024
+
3025
+ #: view/BlockSettingsSeo.php:1071
3026
+ #, php-format
3027
+ msgid "Pinterest Website Validator Code: (validate %sRich Pins%s )"
3028
+ msgstr ""
3029
+
3030
+ #: view/BlockSupport.php:7
3031
+ msgid "Go to Profile"
3032
+ msgstr "Profilul tau din Squirrly"
3033
+
3034
+ #: view/BlockSupport.php:7 view/BlockSupport.php:8
3035
+ msgid "Profile"
3036
+ msgstr "Profil"
3037
+
3038
+ #: view/BlockSupport.php:32 view/BlockSupport.php:87
3039
+ msgid "For more support:"
3040
+ msgstr ""
3041
+
3042
+ #: view/BlockSupport.php:33 view/BlockSupport.php:88
3043
+ #, php-format
3044
+ msgid "10 AM to 4 PM (GMT): Mon-Fri %sby email%s."
3045
+ msgstr ""
3046
+
3047
+ #: view/BlockSupport.php:34 view/BlockSupport.php:90
3048
+ #, php-format
3049
+ msgid "%sLive Chat%s on Youtube. Thursday 4 PM."
3050
+ msgstr ""
3051
+
3052
+ #: view/BlockSupport.php:35 view/BlockSupport.php:91
3053
+ #, php-format
3054
+ msgid "Google Plus %sSupport Community%s."
3055
+ msgstr ""
3056
+
3057
+ #: view/BlockSupport.php:36 view/BlockSupport.php:92
3058
+ #, php-format
3059
+ msgid "New Lessons Mon. and Tue. on %sTwitter%s."
3060
+ msgstr ""
3061
+
3062
+ #: view/BlockSupport.php:48
3063
+ msgid "How was your Squirrly experience today?"
3064
+ msgstr "Cum a fost experienta de azi cu Squirrly?"
3065
+
3066
+ #: view/BlockSupport.php:57
3067
+ msgid "How was Squirrly today?"
3068
+ msgstr "Cum a fost Squirrly azi?"
3069
+
3070
+ #: view/BlockSupport.php:62
3071
+ msgid "Angry"
3072
+ msgstr ""
3073
+
3074
+ #: view/BlockSupport.php:62
3075
+ msgid "Annoying"
3076
+ msgstr ""
3077
+
3078
+ #: view/BlockSupport.php:65
3079
+ msgid "Sad"
3080
+ msgstr ""
3081
+
3082
+ #: view/BlockSupport.php:65
3083
+ msgid "Bad"
3084
+ msgstr ""
3085
+
3086
+ #: view/BlockSupport.php:68
3087
+ msgid "Happy"
3088
+ msgstr ""
3089
+
3090
+ #: view/BlockSupport.php:68
3091
+ msgid "Nice"
3092
+ msgstr ""
3093
+
3094
+ #: view/BlockSupport.php:71
3095
+ msgid "Excited"
3096
+ msgstr ""
3097
+
3098
+ #: view/BlockSupport.php:71
3099
+ msgid "Great"
3100
+ msgstr ""
3101
+
3102
+ #: view/BlockSupport.php:74
3103
+ msgid "Love it"
3104
+ msgstr ""
3105
+
3106
+ #: view/BlockSupport.php:80
3107
+ msgid "Please tell us why?"
3108
+ msgstr "De ce?"
3109
+
3110
+ #: view/BlockSupport.php:83
3111
+ msgid "Send feedback"
3112
+ msgstr "Trimite"
3113
+
3114
+ #: view/BlockSupport.php:89
3115
+ #, php-format
3116
+ msgid "%sSupport button%s here in WordPress (^^)"
3117
+ msgstr ""
3118
+
3119
+ #: view/BlockSupport.php:97
3120
+ msgid "Thank you! You can send us a happy face tomorow too."
3121
+ msgstr "Multumim! Ne poti trimite o fata vesela si maine."
3122
+
3123
+ #: view/BlockToolbar.php:5
3124
+ msgid "Structured Data"
3125
+ msgstr ""
3126
+
3127
+ #: view/BlockToolbar.php:6
3128
+ msgid "Social Media"
3129
+ msgstr ""
3130
+
3131
+ #: view/BlockToolbar.php:7
3132
+ msgid "Site Icon"
3133
+ msgstr ""
3134
+
3135
+ #: view/BlockToolbar.php:9
3136
+ msgid "Connections"
3137
+ msgstr ""
3138
+
3139
+ #: view/BlockToolbar.php:10
3140
+ msgid "Sitemap XML"
3141
+ msgstr ""
3142
+
3143
+ #: view/BlockToolbar.php:11
3144
+ msgid "Ranking Options"
3145
+ msgstr ""
3146
+
3147
+ #: view/BlockToolbar.php:12
3148
+ msgid "Advanced"
3149
+ msgstr "Avansat"
3150
+
3151
+ #: view/BlockToolbar.php:13
3152
+ msgid "Robots.txt"
3153
+ msgstr ""
3154
+
3155
+ #: view/BlockToolbar.php:15
3156
+ msgid "Import"
3157
+ msgstr ""
3158
+
3159
+ #: view/Blocklogin.php:2
3160
+ msgid "Squirrly.co Login"
3161
+ msgstr "Conectare la Squirrly"
3162
+
3163
+ #: view/Blocklogin.php:9
3164
+ msgid "Email:"
3165
+ msgstr "Email:"
3166
+
3167
+ #: view/Blocklogin.php:11
3168
+ msgid "Password:"
3169
+ msgstr "Parola:"
3170
+
3171
+ #: view/Blocklogin.php:13
3172
+ msgid "Login"
3173
+ msgstr "Logare"
3174
+
3175
+ #: view/Blocklogin.php:15
3176
+ msgid "Register"
3177
+ msgstr "Cont nou"
3178
+
3179
+ #: view/Blocklogin.php:15
3180
+ msgid "Register to Squirrly.co"
3181
+ msgstr "Inregistreaza-te la Squirrly.co"
3182
+
3183
+ #: view/Blocklogin.php:16
3184
+ msgid "Lost password?"
3185
+ msgstr "Ai uitat parola?"
3186
+
3187
+ #: view/Blocklogin.php:16
3188
+ msgid "Lost password"
3189
+ msgstr "Am uitat parola"
3190
+
3191
+ #: view/Blocklogin.php:21
3192
+ msgid "Enter your email"
3193
+ msgstr "Adauga adresa email"
3194
+
3195
+ #: view/Blocklogin.php:23
3196
+ msgid "Your Email:"
3197
+ msgstr ""
3198
+
3199
+ #: view/Blocklogin.php:31
3200
+ #, php-format
3201
+ msgid "I Agree with the %sSquirrly Terms%s"
3202
+ msgstr ""
3203
+
3204
+ #: view/Blocklogin.php:33
3205
+ msgid "Sign Up"
3206
+ msgstr "Sign Up"
3207
+
3208
+ #: view/Blocklogin.php:34
3209
+ msgid "I already have an account"
3210
+ msgstr "Am deja un cont"
3211
+
3212
+ #: view/Blocklogin.php:35
3213
+ msgid "This email connects you to Squirrly.co"
3214
+ msgstr "Acest email te conecteaza la Squirrly"
3215
+
3216
+ #: view/Blocklogin.php:46
3217
+ msgid "The email address is invalid!"
3218
+ msgstr "Adresa de email este invalida!"
3219
+
3220
+ #: view/Blocklogin.php:47
3221
+ msgid "Click on Sign Up button and try again ..."
3222
+ msgstr "Apasa butonul Sign Up pentru a incerca din nou ..."
3223
+
3224
+ #: view/Blocklogin.php:48
3225
+ msgid "An error occured while logging in!"
3226
+ msgstr "A aparut o eroare la logare."
3227
+
3228
+ #: view/Blocklogin.php:49
3229
+ msgid "Connecting ..."
3230
+ msgstr "Conectare ..."
3231
+
3232
+ #: view/Blocklogin.php:59
3233
+ msgid "Congratulations! You are ready to use all the features from Squirrly"
3234
+ msgstr ""
3235
+
3236
+ #: view/Blocksearch.php:2
3237
+ msgid "Waiting for your editor to load .. "
3238
+ msgstr ""
3239
+
3240
+ #: view/Blocksearch.php:3
3241
+ msgid ""
3242
+ "Javascript is disabled! You need to activate the javascript in order to use "
3243
+ "Squirrly SEO."
3244
+ msgstr ""
3245
+
3246
+ #: view/Blocksearch.php:6
3247
+ msgid "Optimize for Keyword"
3248
+ msgstr "Optimizare dupa cuvant cheie"
3249
+
3250
+ #: view/Blocksearch.php:7
3251
+ msgid "Squirrly Briefcase"
3252
+ msgstr ""
3253
+
3254
+ #: view/Blocksearch.php:14
3255
+ msgid "Add keyword to briefcase ..."
3256
+ msgstr ""
3257
+
3258
+ #: view/Blocksearch.php:28
3259
+ msgid "Enter a keyword"
3260
+ msgstr "Adauga cuvant"
3261
+
3262
+ #: view/Blocksearch.php:29
3263
+ msgid "for Squirrly Live SEO optimization"
3264
+ msgstr "Pentru optimizare cu Squirrly SEO"
3265
+
3266
+ #: view/Blocksearch.php:44
3267
+ msgid "Do a research"
3268
+ msgstr "Mai multe detalii"
3269
+
3270
+ #: view/Blocksearch.php:45
3271
+ msgid "Use this keyword"
3272
+ msgstr "Foloseste acest cuvant"
3273
+
3274
+ #: view/Blocksearch.php:49
3275
+ msgid "Enter a keyword above!"
3276
+ msgstr "Adauga cuvinte cheie mai sus!"
3277
+
3278
+ #: view/Blocksearch.php:50
3279
+ msgid "I have more then one keyword!"
3280
+ msgstr "Am mai multe cuvinte!"
3281
+
3282
+ #: view/Blocksearch.php:56
3283
+ msgid "Images"
3284
+ msgstr "Imagini"
3285
+
3286
+ #: view/Blocksearch.php:57
3287
+ msgid "Twitter"
3288
+ msgstr "Twitter"
3289
+
3290
+ #: view/Blocksearch.php:58
3291
+ msgid "Wiki"
3292
+ msgstr "Wiki"
3293
+
3294
+ #: view/Blocksearch.php:59
3295
+ msgid "Blogs"
3296
+ msgstr "Bloguri"
3297
+
3298
+ #: view/Blocksearch.php:60
3299
+ msgid "My articles"
3300
+ msgstr "Articolele mele"
3301
+
3302
+ #: view/Blocksearch.php:68
3303
+ msgid "Show only Copyright Free images"
3304
+ msgstr "Arata doar imagini fara copyright"
3305
+
3306
+ #: view/Blockseo.php:13
3307
+ msgid "Split Window"
3308
  msgstr ""
3309
 
3310
+ #: view/FrontMenu.php:38
3311
+ msgid "Saved!"
 
3312
  msgstr ""
3313
 
3314
+ #: view/FrontMenu.php:39
3315
+ msgid "Saved! This is how the preview looks like"
3316
  msgstr ""
3317
 
3318
+ #: view/FrontMenu.php:45
3319
+ msgid "Activate Squirrly SEO for this page"
3320
  msgstr ""
3321
 
3322
+ #: view/FrontMenu.php:61
3323
+ msgid "META"
3324
  msgstr ""
3325
 
3326
+ #: view/FrontMenu.php:64
3327
+ msgid "FACEBOOK"
3328
  msgstr ""
3329
 
3330
+ #: view/FrontMenu.php:67
3331
+ msgid "TWITTER"
3332
  msgstr ""
3333
 
3334
+ #: view/FrontMenu.php:70
3335
+ msgid "ADVANCED"
3336
  msgstr ""
3337
 
3338
+ #: view/FrontMenu.php:83
3339
+ msgid "How this page will appear on Search Engines"
3340
  msgstr ""
3341
 
3342
+ #: view/FrontMenu.php:88
3343
+ msgid "Edit Snippet"
3344
  msgstr ""
3345
 
3346
+ #: view/FrontMenu.php:103 view/FrontMenu.php:294 view/FrontMenu.php:434
3347
+ msgid "Cancel"
3348
+ msgstr "Renunta"
3349
 
3350
+ #: view/FrontMenu.php:104 view/FrontMenu.php:295 view/FrontMenu.php:435
3351
+ #: view/FrontMenu.php:496
3352
+ msgid "Save"
3353
  msgstr ""
3354
 
3355
+ #: view/FrontMenu.php:111
3356
+ msgid "SEO Title"
3357
  msgstr ""
3358
 
3359
+ #: view/FrontMenu.php:114 view/FrontMenu.php:164
3360
+ msgid "Pattern: "
3361
  msgstr ""
3362
 
3363
+ #: view/FrontMenu.php:119
3364
+ msgid "Current Title"
3365
  msgstr ""
3366
 
3367
+ #: view/FrontMenu.php:124
3368
+ msgid "Default Title"
3369
  msgstr ""
3370
 
3371
+ #: view/FrontMenu.php:144 view/FrontMenu.php:191
3372
+ msgid "Pattern"
3373
  msgstr ""
3374
 
3375
+ #: view/FrontMenu.php:161
3376
+ msgid "META Description"
3377
  msgstr ""
3378
 
3379
+ #: view/FrontMenu.php:168
3380
+ msgid "Current Description"
3381
  msgstr ""
3382
 
3383
+ #: view/FrontMenu.php:173
3384
+ msgid "Default Description"
3385
  msgstr ""
3386
 
3387
+ #: view/FrontMenu.php:207
3388
+ msgid "Meta Keywords"
3389
  msgstr ""
3390
 
3391
+ #: view/FrontMenu.php:211
3392
+ msgid "+ Add keyword"
3393
+ msgstr "Adauga cuvant cheie"
3394
 
3395
+ #: view/FrontMenu.php:219
3396
+ msgid "Canonical link"
3397
  msgstr ""
3398
 
3399
+ #: view/FrontMenu.php:222
3400
+ msgid "Found: "
3401
  msgstr ""
3402
 
3403
+ #: view/FrontMenu.php:228
3404
+ msgid "Current"
3405
  msgstr ""
3406
 
3407
+ #: view/FrontMenu.php:234
3408
+ msgid "Default Link"
3409
  msgstr ""
3410
 
3411
+ #: view/FrontMenu.php:245
3412
+ msgid ""
3413
+ "To edit the snippet, you have to activate Squirrly SEO for this page first"
3414
  msgstr ""
3415
 
3416
+ #: view/FrontMenu.php:246 view/FrontMenu.php:389 view/FrontMenu.php:489
3417
+ #: view/FrontMenu.php:545
3418
+ msgid "or Click here"
3419
  msgstr ""
3420
 
3421
+ #: view/FrontMenu.php:254
3422
+ msgid "How this page appears on Facebook"
3423
  msgstr ""
3424
 
3425
+ #: view/FrontMenu.php:259
3426
+ msgid "Edit Open Graph"
3427
  msgstr ""
3428
 
3429
+ #: view/FrontMenu.php:267 view/FrontMenu.php:408
3430
+ msgid "The image size must be at least 500 pixels wide"
3431
  msgstr ""
3432
 
3433
+ #: view/FrontMenu.php:281 view/FrontMenu.php:422
3434
+ msgid ""
3435
+ "This is the Featured Image. You can changin it if you edit the snippet and "
3436
+ "upload anothe image."
 
 
 
3437
  msgstr ""
3438
 
3439
+ #: view/FrontMenu.php:301
3440
+ msgid "Media Image"
3441
  msgstr ""
3442
 
3443
+ #: view/FrontMenu.php:306 view/FrontMenu.php:447
3444
+ msgid "Image size must be at least 500 pixels wide"
3445
  msgstr ""
3446
 
3447
+ #: view/FrontMenu.php:320
3448
+ msgid "OG Title"
3449
  msgstr ""
3450
 
3451
+ #: view/FrontMenu.php:333
3452
+ msgid "OG Description"
3453
  msgstr ""
3454
 
3455
+ #: view/FrontMenu.php:346
3456
+ msgid "Author Link"
3457
  msgstr ""
3458
 
3459
+ #: view/FrontMenu.php:351
3460
+ msgid "if there are more authors, separate their facebook links with commas"
3461
  msgstr ""
3462
 
3463
+ #: view/FrontMenu.php:357
3464
+ msgid "Page type"
3465
  msgstr ""
3466
 
3467
+ #: view/FrontMenu.php:361
3468
+ msgid "Website"
3469
  msgstr ""
3470
 
3471
+ #: view/FrontMenu.php:367
3472
+ msgid "Article"
3473
  msgstr ""
3474
 
3475
+ #: view/FrontMenu.php:370
3476
+ msgid "Book"
3477
  msgstr ""
3478
 
3479
+ #: view/FrontMenu.php:373
3480
+ msgid "Music"
3481
  msgstr ""
3482
 
3483
+ #: view/FrontMenu.php:376
3484
+ msgid "Product"
3485
  msgstr ""
3486
 
3487
+ #: view/FrontMenu.php:379
3488
+ msgid "Video"
3489
  msgstr ""
3490
 
3491
+ #: view/FrontMenu.php:388
3492
+ msgid ""
3493
+ "To edit the Open Graph, you have to activate Squirrly SEO for this page first"
3494
  msgstr ""
3495
 
3496
+ #: view/FrontMenu.php:397
3497
+ msgid "How this page appears on Twitter"
3498
  msgstr ""
3499
 
3500
+ #: view/FrontMenu.php:400
3501
+ msgid "Edit Twitter Card"
3502
  msgstr ""
3503
 
3504
+ #: view/FrontMenu.php:442
3505
+ msgid "Twitter Image"
3506
  msgstr ""
3507
 
3508
+ #: view/FrontMenu.php:460
3509
+ msgid "Twitter Card Title"
3510
  msgstr ""
3511
 
3512
+ #: view/FrontMenu.php:473
3513
+ msgid "Twitter Card Description"
3514
  msgstr ""
3515
 
3516
+ #: view/FrontMenu.php:488
3517
+ msgid ""
3518
+ "To edit the Twitter Card, you have to activate Squirrly SEO for this page "
3519
+ "first"
3520
  msgstr ""
3521
 
3522
+ #: view/FrontMenu.php:503
3523
+ msgid "Let Google Index This Page"
3524
  msgstr ""
3525
 
3526
+ #: view/FrontMenu.php:516
3527
+ msgid "Pass Link Juice to This Page"
3528
  msgstr ""
3529
 
3530
+ #: view/FrontMenu.php:529
3531
+ msgid "Show it in Sitemap.xml"
3532
  msgstr ""
3533
 
3534
+ #: view/FrontMenu.php:544
3535
+ msgid "To edit, you have to activate Squirrly SEO for this page first."
3536
  msgstr ""
3537
 
3538
+ #: view/FrontMenu.php:564
3539
+ msgid "post type"
3540
  msgstr ""
3541
 
3542
+ #: view/FrontMenu.php:566
3543
+ msgid "og type"
3544
  msgstr ""
3545
 
3546
+ #: view/FrontMenu.php:588
3547
+ msgid "No data for this URL. You can change the SEO in Frontend"
3548
  msgstr ""
3549
 
3550
+ #: view/FrontMenu.php:608
3551
+ msgid "Enable Squirrly SEO to load Squirrly Snippet"
3552
  msgstr ""
3553
 
3554
+ #: view/FrontMenu.php:632
3555
+ #, php-format
3556
+ msgid "%sPlease connect to Squirrly first%s"
3557
  msgstr ""
3558
 
3559
+ #~ msgid ":( I lost my squirrel. Please reload the page."
3560
+ #~ msgstr ":( Am pierdut veverita. Te rog sa dai refresh la pagina."
 
3561
 
3562
+ #~ msgid "Join Squirrly today!"
3563
+ #~ msgstr "Alatura-te lui Squirrly!"
 
3564
 
3565
+ #~ msgid "- Recurring 45%s commission"
3566
+ #~ msgstr "- Comision 45%s din abonament"
 
3567
 
3568
+ #~ msgid "Tips: 2-4 keywords"
3569
+ #~ msgstr "Atentie: 2-4 cuvinte cheie"
 
3570
 
3571
+ #~ msgid ""
3572
+ #~ "If you don't see any changes in custom optimization, check if another SEO "
3573
+ #~ "plugin affects Squirrly SEO"
3574
+ #~ msgstr ""
3575
+ #~ "Daca nu sunt modificari in titlu prin aceasta optimizate, verifica daca "
3576
+ #~ "nu e afectat de alte pluginuri instalate."
3577
 
3578
+ #~ msgid "Add the keyword in the %sintroduction%s of your article"
3579
+ #~ msgstr "Adauga keyword-ul in %s "
 
3580
 
3581
+ #~ msgid "Notice: "
3582
+ #~ msgstr "Atentie:"
 
3583
 
3584
+ #~ msgid "Note: "
3585
+ #~ msgstr "Atentie:"
 
3586
 
3587
+ #~ msgid "Let Squirrly optimize your SEO automatically (recommended)"
3588
+ #~ msgstr "Lasa Squirrly sa optimizeze SEO automat (recomandat)"
 
3589
 
3590
+ #~ msgid ""
3591
+ #~ "You have META Description Duplicates. Disable the Squirrly SEO "
3592
+ #~ "Description or disable the other SEO Plugins"
3593
+ #~ msgstr ""
3594
+ #~ "Aveti duplicate in META Descriere. Opriti Squirrly Seo Description sau "
3595
+ #~ "dezactivati alte plugin-uri de SEO"
3596
 
3597
+ #~ msgid " getting started"
3598
+ #~ msgstr "ajutor"
 
3599
 
3600
+ #~ msgid " dashboard"
3601
+ #~ msgstr "dashboard"
 
3602
 
3603
+ #, fuzzy
3604
+ #~ msgid " post list"
3605
+ #~ msgstr "Vezi in "
3606
 
3607
+ #~ msgid " settings"
3608
+ #~ msgstr "setari"
 
3609
 
3610
+ #~ msgid "Make money with "
3611
+ #~ msgstr "Castiga bani cu"
 
3612
 
3613
+ #~ msgid "Make money"
3614
+ #~ msgstr "Castiga Bani"
 
3615
 
3616
+ #, fuzzy
3617
+ #~ msgid "URL Indexed"
3618
+ #~ msgstr "Indexare Google"
3619
 
3620
+ #~ msgid "Exact search:"
3621
+ #~ msgstr "Cautari exacte:"
 
3622
 
3623
+ #~ msgid "For Squirrly to work, you have to have tinymce editor installed!"
3624
+ #~ msgstr ""
3625
+ #~ "Pentru ca Squirrly sa functioneze, trebuie sa ai editorul TinyMCE instalat"
3626
 
3627
+ #~ msgid "Switch to Visual editor!"
3628
+ #~ msgstr "Schimba in Editor Vizual!"
 
3629
 
3630
+ #~ msgid "Use more words in one keyword"
3631
+ #~ msgstr "Am mai multe cuvinte"
 
3632
 
3633
+ #~ msgid "Save changes"
3634
+ #~ msgstr "Salveaza"
 
3635
 
3636
+ #~ msgid "Reset"
3637
+ #~ msgstr "Resetare"
 
3638
 
3639
+ #, fuzzy
3640
+ #~ msgid "Customize Meta"
3641
+ #~ msgstr "Modificare META"
3642
 
3643
+ #~ msgid "manage keywords"
3644
+ #~ msgstr "administrare cuvinte cheie"
 
3645
 
3646
+ #~ msgid ""
3647
+ #~ "Click the Update button (to the right) to see the snippet from your "
3648
+ #~ "website."
3649
+ #~ msgstr "Click pe butonul Update pentru a vedea snipetul site-ului"
3650
 
3651
+ #~ msgid "Enter a title above for the snippet to get data."
3652
+ #~ msgstr "Adauga un titlu pentru a putea vedea datele in snipet"
 
3653
 
3654
+ #~ msgid "Monthly Traffic"
3655
+ #~ msgstr "Trafic lunar"
 
3656
 
3657
+ #, fuzzy
3658
+ #~ msgid "[stop showing this message]"
3659
+ #~ msgstr "u afisa aceasta pagina"
3660
 
3661
+ #~ msgid "%sTerms of Use for our Affiliate Program%s"
3662
+ #~ msgstr "%sTermeni si conditii de afiliere%s"
 
3663
 
3664
+ #~ msgid "Go to settings"
3665
+ #~ msgstr "Mergi la setari"
 
3666
 
3667
+ #~ msgid "See dashboard"
3668
+ #~ msgstr "Vezi Dashboard"
 
3669
 
3670
+ #, fuzzy
3671
+ #~ msgid "Squirrly Audit Score"
3672
+ #~ msgstr "Squirrly article rank"
3673
 
3674
+ #, fuzzy
3675
+ #~ msgid "Connect to Squirrly.co"
3676
+ #~ msgstr "Inregistreaza-te la Squirrly.co"
3677
 
3678
+ #, fuzzy
3679
+ #~ msgid "See all the Squirrly SEO features at: "
3680
+ #~ msgstr "Ai nevoie de ajutor cu Squirrly SEO?"
3681
 
3682
+ #~ msgid "Go to:"
3683
+ #~ msgstr "Mergi la:"
 
3684
 
3685
+ #~ msgid "support page"
3686
+ #~ msgstr "pagina suport"
 
3687
 
3688
+ #~ msgid "Your E-mail:"
3689
+ #~ msgstr "Emailul tau:"
 
3690
 
3691
+ #~ msgid "Congratulations! Now write a new article with:"
3692
+ #~ msgstr "Felicitari! Acum scrie un nou articol cu:"
 
3693
 
3694
+ #~ msgid "Clear"
3695
+ #~ msgstr "Alta cautare"
 
 
 
3696
 
3697
+ #~ msgid "Do the research"
3698
+ #~ msgstr "Trimite >>"
 
3699
 
3700
+ #~ msgid "Enter even more keywords."
3701
+ #~ msgstr "Adauga mai multe cuvinte"
 
 
 
3702
 
3703
+ #~ msgid "Let some keywords for the next time as well!"
3704
+ #~ msgstr "Mai lasa cuvinte si pentru viitor!"
 
 
 
 
 
 
3705
 
3706
+ #~ msgid "News"
3707
+ #~ msgstr "News"
 
3708
 
3709
+ #, fuzzy
3710
+ #~ msgid "Squirrly SEO Live Assistant"
3711
+ #~ msgstr "Asistent SEO Live"
3712
 
3713
+ #~ msgid "Squirrly settings"
3714
+ #~ msgstr "Setari Squirrly"
 
3715
 
3716
+ #~ msgid "Let Squirrly automatically optimize my blog"
3717
+ #~ msgstr "Lasa Squirrly sa imi optimizeze blogul automat"
 
 
 
 
 
3718
 
3719
+ #, fuzzy
3720
+ #~ msgid "Add the <strong>%sXML Sitemap%s</strong> for search engines"
3721
+ #~ msgstr "Adauga <strong>Harta XML</strong> pentru motoarele de cautare"
3722
 
3723
+ #~ msgid ""
3724
+ #~ "Add the required METAs for home page (<strong>icon, author, language, dc "
3725
+ #~ "publisher</strong>, etc.)"
3726
+ #~ msgstr ""
3727
+ #~ "Adauga cerintele META in pagina acasa (<strong>icon, author, language, dc "
3728
+ #~ "publisher</strong>, etc.)"
3729
 
3730
+ #~ msgid ""
3731
+ #~ "Add the <strong>favicon</strong> and the <strong>icon for Apple devices</"
3732
+ #~ "strong>."
3733
+ #~ msgstr ""
3734
+ #~ "Adauga <strong>favicon</strong> si <strong>icoana pentru dispozitivele "
3735
+ #~ "Apple</strong>."
3736
 
3737
+ #, fuzzy
3738
+ #~ msgid "What does Squirrly automatically do for Social Media?"
3739
+ #~ msgstr "Ce face Squirrly in mod automat pentru SEO?"
 
3740
 
3741
+ #, fuzzy
3742
+ #~ msgid ""
3743
+ #~ "Add the <strong>Social Open Graph objects</strong> for a good looking "
3744
+ #~ "share. "
3745
+ #~ msgstr ""
3746
+ #~ "Adauga <strong>Facebook meta objects</strong> pentru o afisare mai "
3747
+ #~ "frumoasa in Facebook"
3748
 
3749
+ #~ msgid "Your twitter account: "
3750
+ #~ msgstr "Contul tau de twitter:"
 
3751
 
3752
+ #, fuzzy
3753
+ #~ msgid "First page optimization"
3754
+ #~ msgstr "Optimizare cu Squirrly SEO"
 
3755
 
3756
+ #, fuzzy
3757
+ #~ msgid "Add meta <strong>title</strong> in Home Page"
3758
+ #~ msgstr "Adauga <strong>titlul</strong> corect in pagina acasa"
 
3759
 
3760
+ #, fuzzy
3761
+ #~ msgid ""
3762
+ #~ "Add meta <strong>description</strong> and <strong>keywords</strong> in "
3763
+ #~ "Home Page"
3764
+ #~ msgstr ""
3765
+ #~ "Aadauga <strong>descrierea</strong> si <strong>cuvintele cheie</strong> "
3766
+ #~ "corecte in prima pagina"
3767
 
 
3768
  #, fuzzy
3769
+ #~ msgid "You First Page Preview (Title, Description, Keywords)"
3770
+ #~ msgstr "Optimizare prima pagina (Titlu, Descriere, Cuvinte cheie)"
3771
 
3772
+ #~ msgid "Check with google ..."
3773
+ #~ msgstr "Verificat cu google ..."
 
 
3774
 
3775
+ #~ msgid "Squirrly Options"
3776
+ #~ msgstr "Optiuni Squirrly"
 
 
3777
 
3778
+ #~ msgid "Let Squirrly warn me if there are errors related to SEO settings"
3779
+ #~ msgstr "Lasa Squirrly sa ma anunte daca sunt erori SEO in setari"
 
 
3780
 
3781
+ #~ msgid ""
3782
+ #~ "Show <strong>\"Enter a keyword\"</strong> bubble when posting a new "
3783
+ #~ "article."
3784
+ #~ msgstr ""
3785
+ #~ "Afiseaza balonul <strong>\"Adauga un keyword\"</strong>cand se posteaza "
3786
+ #~ "un nou articol."
3787
 
3788
+ #~ msgid ""
3789
+ #~ "Always show <strong>Keyword Informations</strong> about the selected "
3790
+ #~ "keyword."
3791
+ #~ msgstr ""
3792
+ #~ "Afiseaza <strong>Informatii de cuvint cheie</strong> dupa alegerea "
3793
+ #~ "cuvantului la postare."
3794
+
3795
+ #~ msgid "Google Plus URL:"
3796
+ #~ msgstr "URL Google Plus:"
3797
+
3798
+ #, fuzzy
3799
+ #~ msgid "Facebook META code (for %sInsights%s ):"
3800
+ #~ msgstr "Facebook META code (pentru %sInsights%s):"
3801
+
3802
+ #, fuzzy
3803
+ #~ msgid "Search Engines Tools"
3804
+ #~ msgstr "Pentru motoare de cautare"
3805
 
3806
  #~ msgid "Squirrly article rank"
3807
  #~ msgstr "Squirrly article rank"
3893
  #~ msgid "Beginner"
3894
  #~ msgstr "Incepator"
3895
 
 
 
 
3896
  #~ msgid "Select Advanced only if you have SEO knowledge."
3897
  #~ msgstr "Alege Avansat doar daca ai cunostinte SEO"
3898
 
models/{SQ_BlockPostsAnalytics.php → BlockPostsAnalytics.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
4
 
5
  public $_column_headers;
6
  public $posts; //save post list for Squirrly call
@@ -80,7 +80,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
80
 
81
  $meta_key = '';
82
  $count_p = 99999;
83
- $posts = SQ_ObjController::getModel('SQ_Post')->getPostWithKeywords();
84
  if ($posts !== false && !empty($posts)) {
85
  //sort descending
86
  foreach ($posts as $post) {
@@ -90,7 +90,6 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
90
 
91
  //if rank filter
92
  if (isset($q['rank'])) {
93
-
94
  if (!isset($post->meta_value->rank) || $q['rank'] <> $post->meta_value->rank) {
95
  continue;
96
  }
@@ -139,6 +138,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
139
 
140
  $query['post__in'] = (array)$post__in;
141
 
 
142
  wp($query);
143
  return $avail_post_stati;
144
  }
@@ -217,7 +217,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
217
  'type' => 'type',
218
  'author' => 'author',
219
  );
220
- if (SQ_Tools::$options['sq_google_ranksperhour'] > 0) {
221
  $columns['rank'] = 'rank';
222
  }
223
 
@@ -297,7 +297,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
297
  if (empty($post_type) || is_object_in_taxonomy($post_type, 'post_tag'))
298
  $posts_columns['keywords'] = __('Keywords');
299
 
300
- $posts_columns['rank'] = sprintf(__('Google.%s Position'), SQ_Tools::$options['sq_google_country']);
301
 
302
  $posts_columns['traffic'] = '';
303
  $posts_columns['date'] = __('Date');
@@ -318,7 +318,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
318
  </div>
319
  <?php if ('top' == $which) { ?>
320
  <div class="alignleft actions">
321
- <input type="search" id="post-search-input" autofocus name="s" value="<?php echo SQ_Tools::getValue('s') ?>" onkeypress="if(sq_check_enter(event)){jQuery('#search-submit').trigger('click')}">
322
  <input type="submit" id="search-submit" class="button" onclick="location.href = '?page=sq_posts&s=' + encodeURIComponent(jQuery('#post-search-input').val());" value="<?php echo __('Search Posts') ?>">
323
  <script>
324
  function sq_check_enter(e) {
@@ -381,7 +381,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
381
  $title = _draft_or_post_title();
382
  $post_type_object = get_post_type_object($post->post_type);
383
  $can_edit_post = current_user_can($post_type_object->cap->edit_post, $post->ID);
384
- $json = SQ_ObjController::getModel('SQ_Post')->getKeyword($post->ID);
385
  foreach ($columns as $key => $column) {
386
  switch ($key) {
387
  case 'title':
@@ -425,7 +425,7 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
425
 
426
  case 'rank':
427
  $value = '';
428
- if(SQ_Tools::$options['sq_google_ranksperhour'] > 0) {
429
 
430
  if (isset($json->rank)) {
431
  if ($json->rank == -2) {
@@ -437,9 +437,9 @@ class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
437
  } elseif ($json->rank > 0) {
438
  $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 . ')' : '');
439
  }
440
- $value = sprintf('<a id="sq_rank_value' . $post->ID . '" href="%s" style="display:block; width: 120px; margin: 0 auto; text-align:right;">%s</a><span class="sq_rank_column_button_recheck sq_rank_column_button" onclick="sq_recheckRank(' . $post->ID . ')">%s</span>', esc_url(add_query_arg(array('page' => 'sq_posts', 'rank' => $json->rank), 'admin.php')), $value, __('Force recheck', _SQ_PLUGIN_NAME_));
441
  } else {
442
- $value = sprintf('<a id="sq_rank_value' . $post->ID . '" href="%s" style="display:block; width: 120px; margin: 0 auto; text-align:right;">%s</a><span class="sq_rank_column_button_recheck sq_rank_column_button" onclick="sq_recheckRank(' . $post->ID . ')">%s</span>', esc_url(add_query_arg(array('page' => 'sq_posts', 'rank' => false), 'admin.php')), __('Not yet verified'), __('Check now', _SQ_PLUGIN_NAME_));
443
  }
444
  }else{
445
  $value = sprintf(__('Enable Ranking in %sAdvanced Settings%s'),'<br /><a href="'.admin_url('admin.php?page=sq_settings').'">','</a>');
1
  <?php
2
 
3
+ class SQ_Models_BlockPostsAnalytics extends WP_List_Table {
4
 
5
  public $_column_headers;
6
  public $posts; //save post list for Squirrly call
80
 
81
  $meta_key = '';
82
  $count_p = 99999;
83
+ $posts = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getPostWithKeywords();
84
  if ($posts !== false && !empty($posts)) {
85
  //sort descending
86
  foreach ($posts as $post) {
90
 
91
  //if rank filter
92
  if (isset($q['rank'])) {
 
93
  if (!isset($post->meta_value->rank) || $q['rank'] <> $post->meta_value->rank) {
94
  continue;
95
  }
138
 
139
  $query['post__in'] = (array)$post__in;
140
 
141
+ remove_all_actions('pre_get_posts');
142
  wp($query);
143
  return $avail_post_stati;
144
  }
217
  'type' => 'type',
218
  'author' => 'author',
219
  );
220
+ if (SQ_Classes_Tools::getOption('sq_google_ranksperhour') > 0) {
221
  $columns['rank'] = 'rank';
222
  }
223
 
297
  if (empty($post_type) || is_object_in_taxonomy($post_type, 'post_tag'))
298
  $posts_columns['keywords'] = __('Keywords');
299
 
300
+ $posts_columns['rank'] = sprintf(__('Google.%s Position'), SQ_Classes_Tools::getOption('sq_google_country'));
301
 
302
  $posts_columns['traffic'] = '';
303
  $posts_columns['date'] = __('Date');
318
  </div>
319
  <?php if ('top' == $which) { ?>
320
  <div class="alignleft actions">
321
+ <input type="search" id="post-search-input" autofocus name="s" value="<?php echo SQ_Classes_Tools::getValue('s') ?>" onkeypress="if(sq_check_enter(event)){jQuery('#search-submit').trigger('click')}">
322
  <input type="submit" id="search-submit" class="button" onclick="location.href = '?page=sq_posts&s=' + encodeURIComponent(jQuery('#post-search-input').val());" value="<?php echo __('Search Posts') ?>">
323
  <script>
324
  function sq_check_enter(e) {
381
  $title = _draft_or_post_title();
382
  $post_type_object = get_post_type_object($post->post_type);
383
  $can_edit_post = current_user_can($post_type_object->cap->edit_post, $post->ID);
384
+ $json = SQ_Classes_ObjController::getClass('SQ_Models_Post')->getKeyword($post->ID);
385
  foreach ($columns as $key => $column) {
386
  switch ($key) {
387
  case 'title':
425
 
426
  case 'rank':
427
  $value = '';
428
+ if(SQ_Classes_Tools::getOption('sq_google_ranksperhour') > 0) {
429
 
430
  if (isset($json->rank)) {
431
  if ($json->rank == -2) {
437
  } elseif ($json->rank > 0) {
438
  $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 . ')' : '');
439
  }
440
+ $value = sprintf('<a id="sq_rank_value' . $post->ID . '" href="%s" style="display:block; width: 120px; margin: 0 auto; text-align:right;">%s</a><span class="sq_rank_column_button_recheck sq_rank_column_button" onclick="jQuery.sq_recheckRank(' . $post->ID . ')">%s</span>', esc_url(add_query_arg(array('page' => 'sq_posts', 'rank' => $json->rank), 'admin.php')), $value, __('Force recheck', _SQ_PLUGIN_NAME_));
441
  } else {
442
+ $value = sprintf('<a id="sq_rank_value' . $post->ID . '" href="%s" style="display:block; width: 120px; margin: 0 auto; text-align:right;">%s</a><span class="sq_rank_column_button_recheck sq_rank_column_button" onclick="jQuery.sq_recheckRank(' . $post->ID . ')">%s</span>', esc_url(add_query_arg(array('page' => 'sq_posts', 'rank' => false), 'admin.php')), __('Not yet verified'), __('Check now', _SQ_PLUGIN_NAME_));
443
  }
444
  }else{
445
  $value = sprintf(__('Enable Ranking in %sAdvanced Settings%s'),'<br /><a href="'.admin_url('admin.php?page=sq_settings').'">','</a>');
models/BlockSettingsSeo.php ADDED
@@ -0,0 +1,1026 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_BlockSettingsSeo {
4
+
5
+ var $eTypes;
6
+ var $appleSizes;
7
+
8
+ public function __construct() {
9
+ $this->appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
10
+ //add_filter('sq_plugins', array($this, 'getAvailablePlugins'), 10, 1);
11
+ add_filter('sq_themes', array($this, 'getAvailableThemes'), 10, 1);
12
+ add_filter('sq_importList', array($this, 'importList'));
13
+ }
14
+
15
+
16
+ public function db_insert($url, $url_hash, $post_id, $seo, $date_time) {
17
+ global $wpdb;
18
+ $seo = addslashes($seo);
19
+ $blog_id = get_current_blog_id();
20
+
21
+ $sq_query = "INSERT INTO " . $wpdb->prefix . strtolower(_SQ_DB_) . " (blog_id, URL, url_hash, post_id, seo, date_time)
22
+ VALUES ('$blog_id','$url','$url_hash','$post_id','$seo','$date_time')
23
+ ON DUPLICATE KEY
24
+ UPDATE blog_id = '$blog_id', URL = '$url', url_hash = '$url_hash', post_id = '$post_id', seo = '$seo', date_time = '$date_time'";
25
+
26
+ return $wpdb->query($sq_query);
27
+ }
28
+
29
+ /**
30
+ * Check if ecommerce is installed
31
+ * @return boolean
32
+ */
33
+ public function isEcommerce() {
34
+ if (isset($this->eTypes)) {
35
+ return $this->eTypes;
36
+ }
37
+
38
+
39
+ $this->eTypes = array('product', 'wpsc-product');
40
+ foreach ($this->eTypes as $key => $type) {
41
+ if (!in_array($type, get_post_types())) {
42
+ unset($this->eTypes[$key]);
43
+ }
44
+ }
45
+
46
+ if (!empty($this->eTypes)) {
47
+ return $this->eTypes;
48
+ }
49
+
50
+ return false;
51
+ }
52
+
53
+ /**
54
+ * Check the google code saved at settings
55
+ *
56
+ * @return string
57
+ */
58
+ public function checkGoogleWTCode($code) {
59
+
60
+ if ($code <> '') {
61
+ $code = stripslashes($code);
62
+ if (strpos($code, 'content') !== false) {
63
+ @preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
64
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
65
+ }
66
+ if (strpos($code, '"') !== false) {
67
+ @preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
68
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
69
+ }
70
+
71
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Google Webmaster Tool is incorrect.", _SQ_PLUGIN_NAME_));
72
+ }
73
+ return $code;
74
+ }
75
+
76
+ /**
77
+ * Check the google code saved at settings
78
+ *
79
+ * @return string
80
+ */
81
+ public function checkGoogleAnalyticsCode($code) {
82
+ //echo $code;
83
+ if ($code <> '') {
84
+ $code = stripslashes($code);
85
+
86
+ if (strpos($code, 'GoogleAnalyticsObject') !== false) {
87
+ preg_match('/ga\(\'create\',[^\'"]*[\'"]([^\'"]+)[\'"],/i', $code, $result);
88
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
89
+ }
90
+
91
+ if (strpos($code, '"') !== false) {
92
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
93
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
94
+ }
95
+
96
+ if (strpos($code, 'UA-') === false) {
97
+ $code = '';
98
+ SQ_Classes_Error::setError(__("The code for Google Analytics is incorrect.", _SQ_PLUGIN_NAME_));
99
+ }
100
+ }
101
+ return trim($code);
102
+ }
103
+
104
+ /**
105
+ * Check the Facebook code saved at settings
106
+ *
107
+ * @return string
108
+ */
109
+ public function checkFavebookAdminCode($code) {
110
+ $id = '';
111
+ if ($code <> '') {
112
+ $code = trim($code);
113
+ if (strpos($code, '"') !== false) {
114
+ preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
115
+ if (isset($result[1]) && !empty($result[1])) {
116
+ $id = $result[1];
117
+ }
118
+ }
119
+
120
+ if (strpos($code, 'facebook.com/') !== false) {
121
+ preg_match('/facebook.com\/([^\/]+)/i', $code, $result);
122
+ if (isset($result[1]) && !empty($result[1])) {
123
+ if (is_string($result[1])) {
124
+ $response = SQ_Classes_Action::apiCall('sq/seo/facebook-id', array('profile' => $result[1]));
125
+ if ($response && $json = json_decode($response)) {
126
+ $id = $json->code;
127
+ }
128
+ } elseif (is_numeric($result[1])) {
129
+ $id = $result[1];
130
+ }
131
+ }
132
+ } else {
133
+ if (is_string($code)) {
134
+ $response = SQ_Classes_Action::apiCall('sq/seo/facebook-id', array('profile' => $code));
135
+ if ($response && $json = json_decode($response)) {
136
+ $id = $json->code;
137
+ }
138
+ } elseif (is_numeric($code)) {
139
+ $id = $code;
140
+ }
141
+ }
142
+
143
+ if ($id == '') {
144
+ SQ_Classes_Error::setError(__("The code for Facebook is incorrect.", _SQ_PLUGIN_NAME_));
145
+ }
146
+ }
147
+ return $id;
148
+ }
149
+
150
+ /**
151
+ * Check the Pinterest code saved at settings
152
+ *
153
+ * @return string
154
+ */
155
+ public function checkPinterestCode($code) {
156
+ if ($code <> '') {
157
+ $code = stripslashes($code);
158
+
159
+ if (strpos($code, 'content') !== false) {
160
+ preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
161
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
162
+ }
163
+
164
+ if (strpos($code, '"') !== false) {
165
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
166
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
167
+ }
168
+
169
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Pinterest is incorrect.", _SQ_PLUGIN_NAME_));
170
+ }
171
+ return $code;
172
+ }
173
+
174
+ /**
175
+ * Check the Bing code saved at settings
176
+ *
177
+ * @return string
178
+ */
179
+ public function checkBingWTCode($code) {
180
+ if ($code <> '') {
181
+ $code = stripslashes($code);
182
+
183
+
184
+ if (strpos($code, 'content') !== false) {
185
+ preg_match('/content\\s*=\\s*[\"]([^\"]+)[\"]/i', $code, $result);
186
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
187
+ }
188
+
189
+ if (strpos($code, '"') !== false) {
190
+ preg_match('/[\"]([^\"]+)[\"]/i', $code, $result);
191
+ if (isset($result[1]) && !empty($result[1])) $code = $result[1];
192
+ }
193
+
194
+ if ($code == '') SQ_Classes_Error::setError(__("The code for Bing is incorrect.", _SQ_PLUGIN_NAME_));
195
+ }
196
+ return $code;
197
+ }
198
+
199
+ /**
200
+ * Check the twitter account
201
+ *
202
+ * @return string
203
+ */
204
+ public function checkTwitterAccount($account) {
205
+ if ($account <> '' && strpos($account, 'twitter.') === false) {
206
+ $account = 'https://twitter.com/' . $account;
207
+ }
208
+
209
+ return $account;
210
+ }
211
+
212
+ /**
213
+ * Check the twitter account
214
+ *
215
+ * @return string
216
+ */
217
+ public function checkTwitterAccountName($account) {
218
+ if ($account <> '' && strpos($account, 'twitter.') !== false) {
219
+ $account = parse_url($account, PHP_URL_PATH);
220
+ }
221
+
222
+ return $account;
223
+ }
224
+
225
+ /**
226
+ * Check the google + account
227
+ *
228
+ * @return string
229
+ */
230
+ public function checkGoogleAccount($account) {
231
+ if ($account <> '' && strpos($account, 'google.') === false) {
232
+ $account = 'https://plus.google.com/' . $account;
233
+ }
234
+ return str_replace(" ", "+", $account);
235
+ }
236
+
237
+ /**
238
+ * Check the google + account
239
+ *
240
+ * @return string
241
+ */
242
+ public function checkLinkeinAccount($account) {
243
+ if ($account <> '' && strpos($account, 'linkedin.') === false) {
244
+ $account = 'https://www.linkedin.com/in/' . $account;
245
+ }
246
+ return $account;
247
+ }
248
+
249
+ /**
250
+ * Check the facebook account
251
+ *
252
+ * @return string
253
+ */
254
+ public function checkFacebookAccount($account) {
255
+ if ($account <> '' && strpos($account, 'facebook.com') === false) {
256
+ $account = 'https://www.facebook.com/' . $account;
257
+ }
258
+ return $account;
259
+ }
260
+
261
+ public function checkPinterestAccount($account) {
262
+ if ($account <> '' && strpos($account, 'pinterest.com') === false) {
263
+ $account = 'https://www.pinterest.com/' . $account;
264
+ }
265
+ return $account;
266
+ }
267
+
268
+ public function checkInstagramAccount($account) {
269
+ if ($account <> '' && strpos($account, 'instagram.com') === false) {
270
+ $account = 'https://www.instagram.com/' . $account;
271
+ }
272
+ return $account;
273
+ }
274
+
275
+ public function checkMySpaceAccount($account) {
276
+ if ($account <> '' && strpos($account, 'myspace.com') === false) {
277
+ $account = 'https://myspace.com/' . $account;
278
+ }
279
+ return $account;
280
+ }
281
+
282
+ public function checkYoutubeAccount($account) {
283
+ if ($account <> '' && strpos($account, 'youtube.com') === false) {
284
+ if (strpos($account, 'user/') === false && strpos($account, 'channel/') === false) {
285
+ $account = 'https://www.youtube.com/channel/' . $account;
286
+ }
287
+ }
288
+ return $account;
289
+ }
290
+
291
+ /**
292
+ * Add the image to the root path
293
+ *
294
+ * @param string $file
295
+ * @param string $path
296
+ * @return array [name (the name of the file), favicon (the path of the ico), message (the returned message)]
297
+ *
298
+ */
299
+ public function addFavicon($file, $path = ABSPATH) {
300
+
301
+ /* get the file extension */
302
+ $file_name = explode('.', $file['name']);
303
+ $file_type = strtolower($file_name[count($file_name) - 1]);
304
+
305
+ $out = array();
306
+ $out['tmp'] = _SQ_CACHE_DIR_ . strtolower(md5($file['name']) . '_tmp.' . $file_type);
307
+ $out['favicon'] = _SQ_CACHE_DIR_ . strtolower(md5($file['name']) . '.' . $file_type);
308
+ foreach ($this->appleSizes as $size) {
309
+ $out['favicon' . $size] = _SQ_CACHE_DIR_ . strtolower(md5($file['name']) . '.' . $file_type . $size);
310
+ }
311
+
312
+ /* if the file has a name */
313
+ if (!empty($file['name'])) {
314
+ /* Check the extension */
315
+ $file_type = strtolower($file_type);
316
+ $files = array('ico', 'jpeg', 'jpg', 'gif', 'png');
317
+ $key = in_array($file_type, $files);
318
+
319
+ if (!$key) {
320
+ SQ_Classes_Error::setError(__("File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed.", _SQ_PLUGIN_NAME_));
321
+ return;
322
+ }
323
+
324
+ /* Check for error messages */
325
+ if (!$this->checkFunctions()) {
326
+ SQ_Classes_Error::setError(__("GD error: The GD library must be installed on your server.", _SQ_PLUGIN_NAME_));
327
+ return;
328
+ } else {
329
+ /* Delete the previous file if exists */
330
+ if (is_file($out['favicon'])) {
331
+ if (!unlink($out['favicon'])) {
332
+ SQ_Classes_Error::setError(__("Delete error: Could not delete the old favicon.", _SQ_PLUGIN_NAME_));
333
+ return;
334
+ }
335
+ }
336
+
337
+ /* Upload the file */
338
+ if (!move_uploaded_file($file['tmp_name'], $out['tmp'])) {
339
+ SQ_Classes_Error::setError(__("Upload error: Could not upload the favicon.", _SQ_PLUGIN_NAME_));
340
+ return;
341
+ }
342
+
343
+ /* Change the permision */
344
+ if (!chmod($out['tmp'], 0755)) {
345
+ SQ_Classes_Error::setError(__("Permission error: Could not change the favicon permissions.", _SQ_PLUGIN_NAME_));
346
+ return;
347
+ }
348
+
349
+ if ($file_type <> 'ico') {
350
+ /* Save the file */
351
+ if ($out['tmp']) {
352
+ $ico = SQ_Classes_ObjController::getClass('SQ_Models_Ico');
353
+ $ico->set_image($out['tmp'], array(32, 32));
354
+ if ($ico->save_ico($out['favicon'])) {
355
+ if (file_exists($path . "/" . 'favicon.ico')) {
356
+ $ico->remove_ico($path . "/" . 'favicon.ico');
357
+ }
358
+ if (!is_multisite()) {
359
+ $ico->save_ico($path . "/" . 'favicon.ico');
360
+ }
361
+ }
362
+ foreach ($this->appleSizes as $size) {
363
+ $ico->set_image($out['tmp'], array($size, $size));
364
+ $ico->save_ico($out['favicon' . $size]);
365
+ }
366
+ } else {
367
+ SQ_Classes_Error::setError(__("ICO Error: Could not create the ICO from file. Try with another file type.", _SQ_PLUGIN_NAME_));
368
+ }
369
+ } else {
370
+ copy($out['tmp'], $out['favicon']);
371
+ foreach ($this->appleSizes as $size) {
372
+ copy($out['tmp'], $out['favicon' . $size]);
373
+ }
374
+
375
+ unset($out['tmp']);
376
+ if (file_exists($path . "/" . 'favicon.ico')) {
377
+ $ico = SQ_Classes_ObjController::getClass('SQ_Models_Ico');
378
+ $ico->remove_ico($path . "/" . 'favicon.ico');
379
+ }
380
+ if (!is_multisite()) {
381
+ $ico = SQ_Classes_ObjController::getClass('SQ_Models_Ico');
382
+ $ico->save_ico($path . "/" . 'favicon.ico');
383
+ }
384
+ }
385
+ unset($out['tmp']);
386
+ $out['message'] = __("The favicon has been updated.", _SQ_PLUGIN_NAME_);
387
+
388
+ return $out;
389
+ }
390
+ }
391
+ }
392
+
393
+ private function checkFunctions() {
394
+ $required_functions = array('getimagesize', 'imagecreatefromstring', 'imagecreatetruecolor', 'imagecolortransparent', 'imagecolorallocatealpha', 'imagealphablending', 'imagesavealpha', 'imagesx', 'imagesy', 'imagecopyresampled',);
395
+
396
+ foreach ($required_functions as $function) {
397
+ if (!function_exists($function)) {
398
+ SQ_Classes_Error::setError("The PHP_ICO class was unable to find the $function function, which is part of the GD library. Ensure that the system has the GD library installed and that PHP has access to it through a PHP interface, such as PHP's GD module. Since this function was not found, the library will be unable to create ICO files.");
399
+ return false;
400
+ }
401
+ }
402
+
403
+ return true;
404
+ }
405
+
406
+
407
+ public function importList() {
408
+ if ($list = SQ_Classes_Tools::getOption('importList')) {
409
+ return $list;
410
+ }
411
+
412
+ $themes = array(
413
+ 'builder' => array(
414
+ 'title' => '_builder_seo_title',
415
+ 'descriptionn' => '_builder_seo_description',
416
+ 'keywords' => '_builder_seo_keywords',
417
+ ),
418
+ 'catalyst' => array(
419
+ 'title' => '_catalyst_title',
420
+ 'descriptionn' => '_catalyst_description',
421
+ 'keywords' => '_catalyst_keywords',
422
+ 'noindex' => '_catalyst_noindex',
423
+ 'nofollow' => '_catalyst_nofollow',
424
+ 'noarchive' => '_catalyst_noarchive',
425
+ ),
426
+ 'frugal' => array(
427
+ 'title' => '_title',
428
+ 'descriptionn' => '_description',
429
+ 'keywords' => '_keywords',
430
+ 'noindex' => '_noindex',
431
+ 'nofollow' => '_nofollow',
432
+ ),
433
+ 'genesis' => array(
434
+ 'title' => '_genesis_title',
435
+ 'descriptionn' => '_genesis_description',
436
+ 'keywords' => '_genesis_keywords',
437
+ 'noindex' => '_genesis_noindex',
438
+ 'nofollow' => '_genesis_nofollow',
439
+ 'noarchive' => '_genesis_noarchive',
440
+ 'canonical' => '_genesis_canonical_uri',
441
+ 'redirect' => 'redirect',
442
+ ),
443
+ 'headway' => array(
444
+ 'title' => '_title',
445
+ 'descriptionn' => '_description',
446
+ 'keywords' => '_keywords',
447
+ ),
448
+ 'hybrid' => array(
449
+ 'title' => 'Title',
450
+ 'descriptionn' => 'Description',
451
+ 'keywords' => 'Keywords',
452
+ ),
453
+ 'thesis' => array(
454
+ 'title' => 'thesis_title',
455
+ 'description' => 'thesis_description',
456
+ 'keywords' => 'thesis_keywords',
457
+ 'redirect' => 'thesis_redirect',
458
+ ),
459
+ 'wooframework' => array(
460
+ 'title' => 'seo_title',
461
+ 'description' => 'seo_description',
462
+ 'keywords' => 'seo_keywords',
463
+ ),
464
+ );
465
+
466
+ $plugins = array(
467
+ 'add-meta-tags' => array(
468
+ 'title' => '_amt_title',
469
+ 'description' => '_amt_description',
470
+ 'keywords' => '_amt_keywords',
471
+ ),
472
+ 'gregs-high-performance-seo' => array(
473
+ 'title' => '_ghpseo_secondary_title',
474
+ 'description' => '_ghpseo_alternative_description',
475
+ 'keywords' => '_ghpseo_keywords',
476
+ ),
477
+ 'headspace2' => array(
478
+ 'title' => '_headspace_page_title',
479
+ 'description' => '_headspace_description',
480
+ 'keywords' => '_headspace_keywords',
481
+ ),
482
+ 'wpmu-dev-seo' => array(
483
+ 'title' => '_wds_title',
484
+ 'description' => '_wds_metadesc',
485
+ 'keywords' => '_wds_keywords',
486
+ 'noindex' => '_wds_meta-robots-noindex',
487
+ 'nofollow' => '_wds_meta-robots-nofollow',
488
+ 'robots' => '_wds_meta-robots-adv',
489
+ 'canonical' => '_wds_canonical',
490
+ 'redirect' => '_wds_redirect',
491
+ ),
492
+ 'jetpack' => array(
493
+ 'description' => 'advanced_seo_description',
494
+ ),
495
+ 'platinum-seo-pack' => array(
496
+ 'title' => 'title',
497
+ 'description' => 'description',
498
+ 'keywords' => 'keywords',
499
+ ),
500
+ 'seo-pressor' => array(
501
+ 'title' => '_seopressor_meta_title',
502
+ 'description' => '_seopressor_meta_description',
503
+ ),
504
+ 'seo-title-tag' => array(
505
+ 'Custom Doctitle' => 'title_tag',
506
+ 'META Description' => 'meta_description',
507
+ ),
508
+ 'seo-ultimate' => array(
509
+ 'title' => '_su_title',
510
+ 'description' => '_su_description',
511
+ 'keywords' => '_su_keywords',
512
+ 'noindex' => '_su_meta_robots_noindex',
513
+ 'nofollow' => '_su_meta_robots_nofollow',
514
+ ),
515
+ 'wordpress-seo' => array(
516
+ 'title' => '_yoast_wpseo_title',
517
+ 'description' => '_yoast_wpseo_metadesc',
518
+ 'keywords' => '_yoast_wpseo_focuskw',
519
+ 'noindex' => '_yoast_wpseo_meta-robots-noindex',
520
+ 'nofollow' => '_yoast_wpseo_meta-robots-nofollow',
521
+ 'robots' => '_yoast_wpseo_meta-robots-adv',
522
+ 'canonical' => '_yoast_wpseo_canonical',
523
+ 'redirect' => '_yoast_wpseo_redirect',
524
+ 'cornerstone' => 'yst_is_cornerstone',
525
+ 'og_title' => '_yoast_wpseo_opengraph-title',
526
+ 'og_description' => '_yoast_wpseo_opengraph-description',
527
+ 'og_media' => '_yoast_wpseo_opengraph-image',
528
+ 'tw_title' => '_yoast_wpseo_twitter-title',
529
+ 'tw_description' => '_yoast_wpseo_twitter-description',
530
+ 'tw_media' => '_yoast_wpseo_twitter-image',
531
+ ),
532
+ 'all-in-one-seo-pack' => array(
533
+ 'title' => '_aioseop_title',
534
+ 'description' => '_aioseop_description',
535
+ 'keywords' => '_aioseop_keywords',
536
+ 'noindex' => '_aioseop_noindex',
537
+ 'nofollow' => '_aioseop_nofollow',
538
+ 'canonical' => '_aioseop_custom_link',
539
+ ),
540
+ 'squirrly-seo' => array(
541
+ 'title' => '_sq_fp_title',
542
+ 'description' => '_sq_fp_description',
543
+ 'keywords' => '_sq_fp_keywords',
544
+ 'canonical' => '_sq_canonical',
545
+ ),
546
+ 'quickseo-by-squirrly' => array(),
547
+ 'premium-seo-pack' => array(),
548
+ );
549
+ $themes = apply_filters('sq_themes', $themes);
550
+ $plugins = apply_filters('sq_plugins', $plugins);
551
+
552
+ $list = array_merge((array)$plugins, (array)$themes);
553
+ return $list;
554
+ }
555
+
556
+ /**
557
+ * Get the actual name of the plugin/theme
558
+ * @param $path
559
+ * @return string
560
+ */
561
+ public function getName($path) {
562
+ switch ($path) {
563
+ case 'wpmu-dev-seo':
564
+ return 'Infinite SEO';
565
+ case 'wordpress-seo':
566
+ return 'Yoast SEO';
567
+ case 'squirrly-seo':
568
+ return 'Squirrly SEO version < 8.2';
569
+ default:
570
+ return ucwords(str_replace('-', ' ', $path));
571
+ }
572
+ }
573
+
574
+
575
+ /**
576
+ * Rename all the plugin names with a hash
577
+ */
578
+ public function getAvailablePlugins($plugins) {
579
+ $found = array();
580
+
581
+ $all_plugins = array_keys(get_plugins());
582
+ if (is_multisite()) {
583
+ $all_plugins = array_merge($all_plugins, array_keys(get_mu_plugins()));
584
+ }
585
+ foreach ($all_plugins as $plugin) {
586
+ if (strpos($plugin, '/') !== false) {
587
+ $plugin = substr($plugin, 0, strpos($plugin, '/'));
588
+ }
589
+ if (isset($plugins[$plugin])) {
590
+ $found[$plugin] = $plugins[$plugin];
591
+ }
592
+ }
593
+ return $found;
594
+ }
595
+
596
+ /**
597
+ * Rename all the themes name with a hash
598
+ */
599
+ public function getAvailableThemes($themes) {
600
+ $found = array();
601
+
602
+ $all_themes = search_theme_directories();
603
+
604
+ foreach ($all_themes as $theme => $value) {
605
+ if (isset($themes[$theme])) {
606
+ $found[] = $themes[$theme];
607
+ }
608
+ }
609
+
610
+ return $found;
611
+ }
612
+
613
+ /**
614
+ * @param $platform
615
+ * @return boolean
616
+ */
617
+ public function importDBSettings($platform) {
618
+ $imported = false;
619
+ $platforms = apply_filters('sq_importList', false);
620
+ if ($platform <> '' && isset($platforms[$platform])) {
621
+
622
+ if ($platform == 'wordpress-seo') {
623
+
624
+ if ($yoast_socials = get_option('wpseo_social')) {
625
+ $socials = SQ_Classes_Tools::getOption('socials');
626
+ $codes = SQ_Classes_Tools::getOption('codes');
627
+ foreach ($yoast_socials as $key => $yoast_social) {
628
+ if ($yoast_social <> '' && isset($socials[$key])) {
629
+ $socials[$key] = $yoast_social;
630
+ }
631
+ }
632
+ if (!empty($socials)) {
633
+ if (isset($yoast_socials['plus-publisher']) && $yoast_socials['plus-publisher'] <> '') {
634
+ $socials['plus_publisher'] = $yoast_socials['plus-publisher'];
635
+ }
636
+ if (isset($yoast_socials['pinterestverify']) && $yoast_socials['plus-publisher'] <> '') {
637
+ $codes['pinterest_verify'] = $yoast_socials['pinterestverify'];
638
+ }
639
+ SQ_Classes_Tools::saveOptions('socials', $socials);
640
+ SQ_Classes_Tools::saveOptions('codes', $codes);
641
+ $imported = true;
642
+ }
643
+ }
644
+ }
645
+
646
+ if ($platform == 'all-in-one-seo-pack') {
647
+ if ($options = get_option('aioseop_options')) {
648
+ $socials = SQ_Classes_Tools::getOption('socials');
649
+ $codes = SQ_Classes_Tools::getOption('codes');
650
+
651
+ if (isset($options['aiosp_google_publisher']) && $options['aiosp_google_publisher'] <> '') $socials['plus_publisher'] = $options['aiosp_google_publisher'];
652
+
653
+ SQ_Classes_Tools::saveOptions('socials', $socials);
654
+
655
+ if (isset($options['aiosp_google_verify']) && $options['aiosp_google_verify'] <> '') $codes['google_wt'] = $options['aiosp_google_verify'];
656
+ if (isset($options['aiosp_bing_verify']) && $options['aiosp_bing_verify'] <> '') $codes['bing_wt'] = $options['aiosp_bing_verify'];
657
+ if (isset($options['aiosp_pinterest_verify']) && $options['aiosp_pinterest_verify'] <> '') $codes['pinterest_verify'] = $options['aiosp_pinterest_verify'];
658
+ if (isset($options['aiosp_google_analytics_id']) && $options['aiosp_google_analytics_id'] <> '') $codes['google_analytics'] = $options['aiosp_google_analytics_id'];
659
+
660
+ SQ_Classes_Tools::saveOptions('codes', $codes);
661
+
662
+ $imported = true;
663
+ }
664
+ }
665
+
666
+ if ($platform == 'squirrly-seo') {
667
+ if ($options = json_decode(get_option('sq_options'), true)) {
668
+ $socials = SQ_Classes_Tools::getOption('socials');
669
+ $codes = SQ_Classes_Tools::getOption('codes');
670
+ $jsonld = SQ_Classes_Tools::getOption('sq_jsonld');
671
+
672
+ if (isset($options['sq_facebook_insights']) && $options['sq_facebook_insights'] <> '') $socials['fb_admins'] = array(array('id' => $options['sq_facebook_insights']));
673
+ if (isset($options['sq_facebook_account']) && $options['sq_facebook_account'] <> '') $socials['facebook_site'] = $options['sq_facebook_account'];
674
+ if (isset($options['sq_twitter_account']) && $options['sq_twitter_account'] <> '') $socials['twitter_site'] = $options['sq_twitter_account'];
675
+ if (isset($options['sq_twitter_account']) && $options['sq_twitter_account'] <> '') $socials['twitter'] = $options['sq_twitter_account'];
676
+ if (isset($options['sq_instagram_account']) && $options['sq_instagram_account'] <> '') $socials['instagram_url'] = $options['sq_instagram_account'];
677
+ if (isset($options['sq_linkedin_account']) && $options['sq_linkedin_account'] <> '') $socials['linkedin_url'] = $options['sq_linkedin_account'];
678
+ if (isset($options['sq_pinterest_account']) && $options['sq_pinterest_account'] <> '') $socials['pinterest_url'] = $options['sq_pinterest_account'];
679
+ if (isset($options['sq_google_plus']) && $options['sq_google_plus'] <> '') $socials['google_plus_url'] = $options['sq_google_plus'];
680
+ if (isset($options['sq_auto_twittersize']) && $options['sq_auto_twittersize'] <> '') $socials['twitter_card_type'] = ($options['sq_auto_twittersize'] == 0) ? 'summary' : 'summary_large_image';
681
+
682
+ SQ_Classes_Tools::saveOptions('socials', $socials);
683
+
684
+ if (isset($options['sq_google_wt']) && $options['sq_google_wt'] <> '') $codes['google_wt'] = $options['sq_google_wt'];
685
+ if (isset($options['sq_google_analytics']) && $options['sq_google_analytics'] <> '') $codes['google_analytics'] = $options['sq_google_analytics'];
686
+ if (isset($options['sq_facebook_analytics']) && $options['sq_facebook_analytics'] <> '') $codes['facebook_pixel'] = $options['sq_facebook_analytics'];
687
+ if (isset($options['sq_bing_wt']) && $options['sq_bing_wt'] <> '') $codes['bing_wt'] = $options['sq_bing_wt'];
688
+ if (isset($options['sq_pinterest']) && $options['sq_pinterest'] <> '') $codes['pinterest_verify'] = $options['sq_pinterest'];
689
+ if (isset($options['sq_alexa']) && $options['sq_alexa'] <> '') $codes['alexa_verify'] = $options['sq_alexa'];
690
+
691
+ SQ_Classes_Tools::saveOptions('codes', $codes);
692
+
693
+ if (isset($options['sq_jsonld_type']) && $options['sq_jsonld_type'] <> '') SQ_Classes_Tools::saveOptions('sq_jsonld_type', $options['sq_jsonld_type']);
694
+ if (isset($options['sq_jsonld_type']) && $options['sq_jsonld_type'] <> '') $jsonld[$options['sq_jsonld_type']] = $options['sq_jsonld'][$options['sq_jsonld_type']];
695
+
696
+ SQ_Classes_Tools::saveOptions('sq_jsonld', $jsonld);
697
+
698
+ $imported = true;
699
+ }
700
+ }
701
+
702
+ if ($platform == 'quickseo-by-squirrly') {
703
+ if ($options = json_decode(get_option('_qss_options'), true)) {
704
+ $socials = $options['socials'];
705
+ $codes = $options['codes'];
706
+ $jsonld = $options['qss_jsonld'];
707
+
708
+ SQ_Classes_Tools::saveOptions('socials', $socials);
709
+ SQ_Classes_Tools::saveOptions('codes', $codes);
710
+ SQ_Classes_Tools::saveOptions('sq_jsonld', $jsonld);
711
+
712
+ $imported = true;
713
+ }
714
+ }
715
+
716
+ if ($platform == 'premium-seo-pack') {
717
+ if ($options = json_decode(get_option('_psp_options'), true)) {
718
+ $socials = $options['socials'];
719
+ $codes = $options['codes'];
720
+ $jsonld = $options['psp_jsonld'];
721
+
722
+ SQ_Classes_Tools::saveOptions('socials', $socials);
723
+ SQ_Classes_Tools::saveOptions('codes', $codes);
724
+ SQ_Classes_Tools::saveOptions('sq_jsonld', $jsonld);
725
+
726
+ $imported = true;
727
+ }
728
+ }
729
+ }
730
+
731
+ return $imported;
732
+ }
733
+
734
+ public function importDBSeo($platform) {
735
+ global $wpdb;
736
+
737
+ $platforms = apply_filters('sq_importList', false);
738
+
739
+ if ($platform <> '' && isset($platforms[$platform])) {
740
+ $meta_keys = $platforms[$platform];
741
+ $metas = array();
742
+
743
+ if (!empty($meta_keys)) {
744
+ $query = "SELECT * FROM " . $wpdb->postmeta . " WHERE meta_key IN ('" . join("','", array_values($meta_keys)) . "');";
745
+ $meta_keys = array_flip($meta_keys);
746
+
747
+ if ($rows = $wpdb->get_results($query, OBJECT)) {
748
+ foreach ($rows as $row) {
749
+
750
+ if (isset($meta_keys[$row->meta_key]) && $row->meta_value <> '') {
751
+ $metas[md5($row->post_id)]['post_id'] = $row->post_id;
752
+ $metas[md5($row->post_id)]['url'] = get_permalink($row->post_id);
753
+
754
+ $value = $row->meta_value;
755
+ if (function_exists('mb_detect_encoding') && function_exists('iconv')) {
756
+ if ($encoding = mb_detect_encoding($value)) {
757
+ SQ_Classes_Tools::dump($encoding);
758
+ if ($encoding <> 'UTF-8') {
759
+ $value = iconv($encoding, 'UTF-8', $value);
760
+ }
761
+ }
762
+ }
763
+ $metas[md5($row->post_id)][$meta_keys[$row->meta_key]] = stripslashes($value);
764
+ }
765
+ }
766
+ }
767
+
768
+ if ($platform == 'wordpress-seo') {
769
+ //get taxonomies
770
+ if ($taxonomies = get_option('wpseo_taxonomy_meta')) {
771
+ if (!empty($taxonomies)) {
772
+ foreach ($taxonomies as $taxonomie => $terms) {
773
+ if (!empty($terms)) {
774
+ if ($taxonomie <> 'category') {
775
+ $taxonomie = 'tax-' . $taxonomie;
776
+ }
777
+ foreach ($terms as $term_id => $taxmetas) {
778
+ if (!empty($taxmetas)) {
779
+ if (!is_wp_error(get_term_link($term_id))) {
780
+ $metas[md5($taxonomie . $term_id)]['url'] = get_term_link($term_id);
781
+ foreach ($taxmetas as $meta_key => $meta_value) {
782
+ if ($meta_key == 'wpseo_desc') {
783
+ $meta_key = '_yoast_wpseo_metadesc';
784
+ } else {
785
+ $meta_key = '_yoast_' . $meta_key;
786
+ }
787
+
788
+ if (isset($meta_keys[$meta_key])) {
789
+ $metas[md5($taxonomie . $term_id)][$meta_keys[$meta_key]] = stripslashes($meta_value);
790
+ }
791
+ }
792
+ }
793
+ }
794
+ }
795
+ }
796
+ }
797
+ }
798
+ }
799
+
800
+ //get all patterns from Yoast
801
+ if ($yoast_patterns = get_option('wpseo_titles')) {
802
+ if (!empty($yoast_patterns)) {
803
+ $patterns = SQ_Classes_Tools::getOption('patterns');
804
+ foreach ($patterns as $path => &$values) {
805
+ if ($path == 'profile') {
806
+ $path = 'author';
807
+ }
808
+ if (isset($yoast_patterns['separator']) && $yoast_patterns['separator'] <> '') {
809
+ $values['sep'] = $yoast_patterns['separator'];
810
+ }
811
+ if (isset($yoast_patterns["title-$path-wpseo"]) && $yoast_patterns["title-$path-wpseo"] <> '') {
812
+ $values['title'] = preg_replace('/%%([^\%]+)%%/', '{{$1}}', $yoast_patterns["title-$path-wpseo"]);
813
+ }
814
+ if (isset($yoast_patterns["metadesc-$path-wpseo"]) && $yoast_patterns["metadesc-$path-wpseo"] <> '') {
815
+ $values['description'] = preg_replace('/%%([^\%]+)%%/', '{{$1}}', $yoast_patterns["metadesc-$path-wpseo"]);
816
+ }
817
+ if (isset($yoast_patterns["noindex-$path-wpseo"])) {
818
+ $values['noindex'] = (int)$yoast_patterns["noindex-$path-wpseo"];
819
+ }
820
+ if (isset($yoast_patterns["disable-$path-wpseo"])) {
821
+ $values['disable'] = (int)$yoast_patterns["disable-$path-wpseo"];
822
+ }
823
+
824
+ if (isset($yoast_patterns["title-$path"]) && $yoast_patterns["title-$path"] <> '') {
825
+ $values['title'] = preg_replace('/%%([^\%]+)%%/', '{{$1}}', $yoast_patterns["title-$path"]);
826
+ }
827
+ if (isset($yoast_patterns["metadesc-$path"]) && $yoast_patterns["metadesc-$path"] <> '') {
828
+ $values['description'] = preg_replace('/%%([^\%]+)%%/', '{{$1}}', $yoast_patterns["metadesc-$path"]);
829
+ }
830
+ if (isset($yoast_patterns["noindex-$path"])) {
831
+ $values['noindex'] = (int)$yoast_patterns["noindex-$path"];
832
+ }
833
+ if (isset($yoast_patterns["disable-$path"])) {
834
+ $values['disable'] = (int)$yoast_patterns["disable-$path"];
835
+ }
836
+ }
837
+
838
+ SQ_Classes_Tools::saveOptions('patterns', $patterns);
839
+ }
840
+ }
841
+ }
842
+
843
+ if ($platform == 'all-in-one-seo-pack') {
844
+ if ($options = get_option('aioseop_options')) {
845
+ $patterns = SQ_Classes_Tools::getOption('patterns');
846
+
847
+ $find = array('page_title', 'post_title', 'archive_title', 'blog_title', 'blog_description', 'category_title', 'author', 'page_author_nicename', 'description', 'request_words', 'search', 'current_date');
848
+ $replace = array('title', 'title', 'title', 'sitename', 'sitedesc', 'category', 'name', 'name', 'excerpt', 'searchphrase', 'searchphrase', 'currentdate');
849
+
850
+ if (isset($options['aiosp_page_title_format']) && $options['aiosp_page_title_format'] <> '') {
851
+ $patterns['home']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_page_title_format']));
852
+ };
853
+ if (isset($options['aiosp_post_title_format']) && $options['aiosp_post_title_format'] <> '') {
854
+ $patterns['post']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_post_title_format']));
855
+ };
856
+ if (isset($options['aiosp_category_title_format']) && $options['aiosp_category_title_format'] <> '') {
857
+ $patterns['category']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_category_title_format']));
858
+ };
859
+ if (isset($options['aiosp_archive_title_format']) && $options['aiosp_archive_title_format'] <> '') {
860
+ $patterns['archive']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_archive_title_format']));
861
+ };
862
+ if (isset($options['aiosp_author_title_format']) && $options['aiosp_author_title_format'] <> '') {
863
+ $patterns['profile']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_author_title_format']));
864
+ };
865
+ if (isset($options['aiosp_tag_title_format']) && $options['aiosp_tag_title_format'] <> '') {
866
+ $patterns['tag']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_tag_title_format']));
867
+ };
868
+ if (isset($options['aiosp_search_title_format']) && $options['aiosp_search_title_format'] <> '') {
869
+ $patterns['search']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_search_title_format']));
870
+ };
871
+ if (isset($options['aiosp_404_title_format']) && $options['aiosp_404_title_format'] <> '') {
872
+ $patterns['404']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_404_title_format']));
873
+ };
874
+ if (isset($options['aiosp_product_title_format']) && $options['aiosp_product_title_format'] <> '') {
875
+ $patterns['product']['title'] = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace($find, $replace, $options['aiosp_product_title_format']));
876
+ };
877
+
878
+ SQ_Classes_Tools::saveOptions('patterns', $patterns);
879
+ }
880
+ }
881
+
882
+
883
+ }
884
+
885
+ if ($platform == 'squirrly-seo') {
886
+ $title = SQ_Classes_Tools::getOption('sq_fp_title');
887
+ $description = SQ_Classes_Tools::getOption('sq_fp_description');
888
+ $keywords = SQ_Classes_Tools::getOption('sq_fp_keywords');
889
+
890
+ if ($title <> '' || $description <> '' || $keywords <> '') {
891
+ if ($post_id = get_option('page_on_front')) {
892
+ $hash = md5($post_id);
893
+ $url = home_url();
894
+ } elseif ($post_id = get_option('page_for_posts')) {
895
+ $hash = md5($post_id);
896
+ $url = home_url();
897
+ } else {
898
+ $hash = md5('wp_homepage');
899
+ $url = home_url();
900
+ $post_id = 0;
901
+ }
902
+
903
+
904
+ $metas[$hash]['post_id'] = $post_id;
905
+ $metas[$hash]['url'] = $url;
906
+ $metas[$hash]['title'] = $title;
907
+ $metas[$hash]['description'] = $description;
908
+ $metas[$hash]['keywords'] = $keywords;
909
+ }
910
+
911
+ }
912
+
913
+ if ($platform == 'quickseo-by-squirrly') {
914
+ global $wpdb;
915
+
916
+ $tables = $wpdb->get_col('SHOW TABLES');
917
+ foreach ($tables as $table) {
918
+ if ($table == $wpdb->prefix . strtolower('psp')) {
919
+ $query = "SELECT * FROM " . $wpdb->prefix . "qss";
920
+ if ($rows = $wpdb->get_results($query, OBJECT)) {
921
+ foreach ($rows as $row) {
922
+ if (isset($row->post_id)) {
923
+ $metas[$row->url_hash]['post_id'] = $row->post_id;
924
+ } else {
925
+ $metas[$row->url_hash]['post_id'] = 0;
926
+ }
927
+ $metas[$row->url_hash]['url'] = $row->URL;
928
+ $metas[$row->url_hash]['seo'] = $row->seo;
929
+ }
930
+ }
931
+ break;
932
+ }
933
+ }
934
+ return $metas;
935
+ }
936
+
937
+ if ($platform == 'premium-seo-pack') {
938
+ global $wpdb;
939
+
940
+ $tables = $wpdb->get_col('SHOW TABLES');
941
+ foreach ($tables as $table) {
942
+ if ($table == $wpdb->prefix . strtolower('psp')) {
943
+ $query = "SELECT * FROM " . $wpdb->prefix . "psp";
944
+ if ($rows = $wpdb->get_results($query, OBJECT)) {
945
+ foreach ($rows as $row) {
946
+ if (isset($row->post_id)) {
947
+ $metas[$row->url_hash]['post_id'] = $row->post_id;
948
+ } else {
949
+ $metas[$row->url_hash]['post_id'] = 0;
950
+ }
951
+ $metas[$row->url_hash]['url'] = $row->URL;
952
+ $metas[$row->url_hash]['seo'] = $row->seo;
953
+ }
954
+ }
955
+ break;
956
+ }
957
+ }
958
+ return $metas;
959
+ }
960
+ }
961
+
962
+ return $metas;
963
+ }
964
+
965
+
966
+ function createTableBackup() {
967
+ global $wpdb;
968
+
969
+ $tables = $wpdb->get_col('SHOW TABLES');
970
+ $output = '';
971
+ foreach ($tables as $table) {
972
+ if ($table == $wpdb->prefix . strtolower(_SQ_DB_)) {
973
+ $result = $wpdb->get_results("SELECT * FROM {$table}", ARRAY_N);
974
+ $columns = $wpdb->get_results('SHOW COLUMNS FROM ' . $table, ARRAY_N);
975
+ $row2 = $wpdb->get_row('SHOW CREATE TABLE ' . $table, ARRAY_N);
976
+ $output .= "\n\n" . str_replace('CREATE TABLE ', 'CREATE TABLE IF NOT EXISTS ', $row2[1]) . ";\n\n";
977
+ for ($i = 0; $i < count($result); $i++) {
978
+ $row = $result[$i];
979
+ $output .= 'INSERT INTO ' . $table . ' (';
980
+ for ($col = 0; $col < count($columns); $col++) {
981
+ $output .= (isset($columns[$col][0]) ? $columns[$col][0] : "''");
982
+ if ($col < (count($columns) - 1)) {
983
+ $output .= ',';
984
+ }
985
+ }
986
+ $output .= ') VALUES(';
987
+ for ($j = 0; $j < count($result[0]); $j++) {
988
+ $output .= (isset($row[$j]) ? "'" . $row[$j] . "'" : "''");
989
+ if ($j < (count($result[0]) - 1)) {
990
+ $output .= ',';
991
+ }
992
+ }
993
+ $output .= ") ON DUPLICATE KEY UPDATE ";
994
+ for ($j = 0; $j < count($result[0]); $j++) {
995
+ $output .= $columns[$j][0] . '=' . (isset($row[$j]) ? "'" . $row[$j] . "'" : "''");
996
+ if ($j < (count($result[0]) - 1)) {
997
+ $output .= ',';
998
+ }
999
+ }
1000
+ $output .= ";\n";
1001
+ }
1002
+ $output .= "\n";
1003
+ break;
1004
+ }
1005
+ }
1006
+ $wpdb->flush();
1007
+
1008
+ return $output;
1009
+ }
1010
+
1011
+ public function executeSql($queries) {
1012
+ if (is_array($queries) && !empty($queries)) {
1013
+ global $wpdb;
1014
+
1015
+ for ($i = 0; $i < count($queries); $i++) {
1016
+ if (strlen($queries[$i]) > 1) {
1017
+ $wpdb->query($queries[$i]);
1018
+ }
1019
+ }
1020
+ $wpdb->flush();
1021
+
1022
+ return true;
1023
+ }
1024
+ return false;
1025
+ }
1026
+ }
models/Blocksearch.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The model class for SQ_Core_Blocksearch
5
+ *
6
+ */
7
+ class SQ_Models_Blocksearch {
8
+
9
+
10
+ }
models/Blockseo.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The model class for SQ_Core_Blockseo
5
+ *
6
+ */
7
+ class SQ_Models_Blockseo {
8
+
9
+ /**
10
+ * Get the advanced SEO from database
11
+ * @global integer $sq_postID
12
+ * @return string
13
+ */
14
+ public function getAdvSeo() {
15
+ global $sq_postID;
16
+
17
+ if ((int) $sq_postID == 0)
18
+ return array();
19
+
20
+ $sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getAdvancedMeta($sq_postID, 'title');
21
+
22
+ return array('_sq_fp_title' => SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getAdvancedMeta($sq_postID, 'title'),
23
+ '_sq_fp_description' => (isset($sq->description) ? $sq->description : ''),
24
+ '_sq_fp_keywords' => (isset($sq->keywords) ? $sq->keywords : ''),
25
+ '_sq_fp_ogimage' => (isset($sq->og_media) ? $sq->og_media : ''),
26
+ '_sq_fp_canonical' => (isset($sq->canonical) ? $sq->canonical : ''));
27
+ }
28
+
29
+ }
models/Frontend.php ADDED
@@ -0,0 +1,812 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Frontend {
4
+
5
+ private $_post;
6
+ private $_loaded = false;
7
+
8
+ public function __construct() {
9
+ //initiate the post
10
+ $this->_post = false;
11
+
12
+ add_filter('sq_post', array($this, 'getWpPost'), 11, 1);
13
+ add_filter('sq_post', array($this, 'getPostDetails'), 12, 1);
14
+
15
+ add_filter('sq_post', array($this, 'replacePatterns'), 13, 1);
16
+ add_filter('sq_post', array($this, 'addPaged'), 14, 1);
17
+
18
+ //change the buffer
19
+ add_filter('sq_buffer', array($this, 'setMetaInBuffer'), 10, 1);
20
+ //pack html prefix if needed
21
+ add_filter('sq_html_prefix', array($this, 'packPrefix'), 99);
22
+ }
23
+
24
+ public function setStart() {
25
+ return "\n\n<!-- Squirrly SEO Plugin " . SQ_VERSION . ", visit: https://plugin.squirrly.co/ -->\n";
26
+
27
+ }
28
+
29
+ /**
30
+ * End the signature
31
+ * @return string
32
+ */
33
+ public function setEnd() {
34
+ return "<!-- /Squirrly SEO Plugin -->\n\n";
35
+
36
+ }
37
+
38
+ /**
39
+ * Start the buffer record
40
+ * @return string html
41
+ */
42
+ public function startBuffer() {
43
+ ob_start(array($this, 'getBuffer'));
44
+ }
45
+
46
+ /**
47
+ * Get the loaded buffer and change it
48
+ *
49
+ * @param string $buffer
50
+ * @return string
51
+ */
52
+ public function getBuffer($buffer) {
53
+ //prevend from loading again
54
+ if ($this->_loaded) {
55
+ return $buffer;
56
+ }
57
+
58
+ return apply_filters('sq_buffer', $buffer);
59
+ }
60
+
61
+
62
+ /**
63
+ * Change the title, description and keywords in site's buffer
64
+ * @param string $buffer
65
+ * @return string
66
+ */
67
+ public function setMetaInBuffer($buffer) {
68
+ //if is enabled sq for this page
69
+ if ($this->runSEOForThisPage()) {
70
+ if (strpos($buffer, '</head') !== false) {
71
+ if ($header = $this->getHeader()) {
72
+
73
+ //set loaded true
74
+ $this->_loaded = true;
75
+
76
+ //clear the existing tags to avoid duplicates
77
+ if (isset($header['sq_title']) && $header['sq_title'] <> '' && SQ_Classes_Tools::getOption('sq_auto_title')) {
78
+ $buffer = @preg_replace('/<title[^<>]*>([^<>]*)<\/title>/si', '', $buffer, -1);
79
+ }
80
+ if (isset($header['sq_description']) && $header['sq_description'] <> '' && SQ_Classes_Tools::getOption('sq_auto_description')) {
81
+ $buffer = @preg_replace('/<meta[^>]*(name|property)=["\']description["\'][^>]*content=["\'][^"\'>]*["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
82
+ }
83
+ if (isset($header['sq_keywords']) && $header['sq_keywords'] <> '' && SQ_Classes_Tools::getOption('sq_auto_keywords')) {
84
+ $buffer = @preg_replace('/<meta[^>]*(name|property)=["\']keywords["\'][^>]*content=["\'][^"\'>]*["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
85
+ }
86
+ if (isset($header['sq_canonical']) && $header['sq_canonical'] <> '' && SQ_Classes_Tools::getOption('sq_auto_canonical')) {
87
+ $buffer = @preg_replace('/<link[^>]*rel=["\']canonical["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
88
+ $buffer = @preg_replace('/<link[^>]*rel=["\'](prev|next)["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
89
+ }
90
+ if (isset($header['sq_sitemap']) && $header['sq_sitemap'] <> '' && SQ_Classes_Tools::getOption('sq_auto_sitemap')) {
91
+ $buffer = @preg_replace('/<link[^>]*rel=["\']alternate["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
92
+ }
93
+ if (isset($header['sq_noindex']) && $header['sq_noindex'] <> '' && SQ_Classes_Tools::getOption('sq_auto_noindex')) {
94
+ $buffer = @preg_replace('/<meta[^>]*name=["\']robots["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
95
+ }
96
+ if (isset($header['sq_open_graph']) && $header['sq_open_graph'] <> '' && SQ_Classes_Tools::getOption('sq_auto_facebook')) {
97
+ $buffer = @preg_replace('/<meta[^>]*(name|property)=["\'](og:|article:)[^"\'>]+["\'][^>]*content=["\'][^"\'>]+["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
98
+ }
99
+ if (isset($header['sq_twitter_card']) && $header['sq_twitter_card'] <> '' && SQ_Classes_Tools::getOption('sq_auto_twitter')) {
100
+ $buffer = @preg_replace('/<meta[^>]*(name|property)=["\'](twitter:)[^"\'>]+["\'][^>]*content=["\'][^"\'>]+["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
101
+ }
102
+ if (isset($header['sq_json_ld']) && $header['sq_json_ld'] <> '' && SQ_Classes_Tools::getOption('sq_auto_jsonld')) {
103
+ $buffer = @preg_replace('/<script[^>]*type=["\']application\/ld\+json["\'][^>]*>[^>]*<\/script>[\n\r]*/si', '', $buffer, -1);
104
+ }
105
+ if (isset($header['sq_favicon']) && $header['sq_favicon'] <> '' && SQ_Classes_Tools::getOption('sq_auto_favicon')) {
106
+ $buffer = @preg_replace('/<link[^>]*rel=["\'](shortcut icon)["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
107
+ }
108
+
109
+ $buffer = @preg_replace('/(<head(\s[^>]*|)>)/si', sprintf("$1\n%s", join("\n", $header)) . "\n", $buffer, 1);
110
+ $buffer = @preg_replace('/(<html(\s[^>]*|))/si', sprintf("$1%s", apply_filters('sq_html_prefix', false)), $buffer, 1);
111
+
112
+ }
113
+ }
114
+ }
115
+
116
+ return $buffer;
117
+ }
118
+
119
+
120
+ /**
121
+ * Overwrite the header with the correct parameters
122
+ *
123
+ * @return array | false
124
+ */
125
+ public function getHeader() {
126
+ //Load the SEO Library before calling the filters
127
+ $this->loadSeoLibrary();
128
+
129
+ //Build the Header
130
+ $header = array();
131
+ $header['sq_title'] = apply_filters('sq_title', false);
132
+
133
+
134
+ //Get all header in array
135
+ $header['sq_start'] = $this->setStart();
136
+
137
+ $header['sq_noindex'] = apply_filters('sq_noindex', false); //
138
+ //Add description in homepage if is set or add description in other pages if is not home page
139
+ $header['sq_description'] = apply_filters('sq_description', false); //
140
+ $header['sq_keywords'] = apply_filters('sq_keywords', false); //
141
+
142
+ $header['sq_canonical'] = apply_filters('sq_canonical', false); //
143
+ $header['sq_prevnext'] = apply_filters('sq_prevnext', false); //
144
+
145
+ $header['sq_sitemap'] = apply_filters('sq_sitemap', false);
146
+ $header['sq_favicon'] = apply_filters('sq_favicon', false);
147
+ $header['sq_language'] = apply_filters('sq_language', false);
148
+ $header['sq_dublin_core'] = apply_filters('sq_dublin_core', false);
149
+
150
+ $header['sq_open_graph'] = apply_filters('sq_open_graph', false); //
151
+ $header['sq_publisher'] = apply_filters('sq_publisher', false); //
152
+ $header['sq_twitter_card'] = apply_filters('sq_twitter_card', false); //
153
+
154
+ /* SEO optimizer tool */
155
+ $header['sq_verify'] = apply_filters('sq_verify', false); //
156
+ $header['sq_google_analytics'] = apply_filters('sq_google_analytics', false); //
157
+ $header['sq_facebook_pixel'] = apply_filters('sq_facebook_pixel', false); //
158
+
159
+ /* Structured Data */
160
+ $header['sq_json_ld'] = apply_filters('sq_json_ld', false);
161
+ $header['sq_end'] = $this->setEnd();
162
+
163
+ //flush the header
164
+ $header = @array_filter($header);
165
+
166
+ if (count($header) == 2) {
167
+ return false;
168
+ }
169
+ return $header;
170
+ }
171
+
172
+ /**
173
+ * Show in footer
174
+ */
175
+ public function getFooter() {
176
+
177
+ $footer = array();
178
+
179
+ if ($this->_post && $this->_post->sq->doseo) {
180
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Analytics');
181
+ $footer['sq_google_analytics'] = apply_filters('sq_google_analytics_amp', false);
182
+
183
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Pixel');
184
+ $footer['sq_facebook_pixel'] = apply_filters('sq_facebook_pixel_amp', false);
185
+ }
186
+
187
+ $footer = @array_filter($footer);
188
+
189
+ if (count($footer) > 0) {
190
+ return join("\n", $footer);
191
+ }
192
+
193
+ return false;
194
+ }
195
+ /**************************************************************************************************/
196
+
197
+ /**
198
+ * Load all SEO classes
199
+ */
200
+ public function loadSeoLibrary() {
201
+ if ($this->_post && $this->_post->sq->doseo) {
202
+ //load all services
203
+ if (SQ_Classes_Tools::getOption('sq_auto_title')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Title');
204
+ if (SQ_Classes_Tools::getOption('sq_auto_description')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Description');
205
+ if (SQ_Classes_Tools::getOption('sq_auto_keywords')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Keywords');
206
+ if (SQ_Classes_Tools::getOption('sq_auto_canonical')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Canonical');
207
+ if (SQ_Classes_Tools::getOption('sq_auto_canonical')) SQ_Classes_ObjController::getClass('SQ_Models_Services_PrevNext');
208
+ if (SQ_Classes_Tools::getOption('sq_auto_sitemap')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Sitemap');
209
+ if (SQ_Classes_Tools::getOption('sq_auto_noindex')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Noindex');
210
+ if (SQ_Classes_Tools::getOption('sq_auto_facebook')) {
211
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_OpenGraph');
212
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Publisher');
213
+
214
+ }
215
+ if (SQ_Classes_Tools::getOption('sq_auto_twitter')) SQ_Classes_ObjController::getClass('SQ_Models_Services_TwitterCard');
216
+ if (SQ_Classes_Tools::getOption('sq_auto_favicon')) SQ_Classes_ObjController::getClass('SQ_Models_Services_Favicon');
217
+
218
+ if (SQ_Classes_Tools::getOption('sq_auto_meta')) {
219
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_DublinCore');
220
+ }
221
+
222
+ //SQ_Models_Services_Favicon
223
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Verify');
224
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Pixel');
225
+ SQ_Classes_ObjController::getClass('SQ_Models_Services_Analytics');
226
+
227
+ if (SQ_Classes_Tools::getOption('sq_auto_jsonld')) SQ_Classes_ObjController::getClass('SQ_Models_Services_JsonLD');
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Set the post for the frontend
233
+ * @param WP_Post $curpost
234
+ * @return SQ_Models_Frontend
235
+ */
236
+ public function setPost($curpost = null) {
237
+ //Load the post with all the filters applied
238
+ if($this->_post = apply_filters('sq_post', $curpost)) {
239
+ SQ_Classes_Tools::dump($this->_post);
240
+ SQ_Classes_Tools::dump($this->_post->sq);
241
+ //SQ_Classes_Tools::dump('Show Squirrly', 'isHomePage: ' . $this->isHomePage(), 'is_single: ' . is_single(), 'is_preview: ' . is_preview(), 'is_page: ' . is_page(), 'is_archive: ' . is_archive(), 'is_author: ' . is_author(), 'is_category: ' . is_category(), 'is_tag: ' . is_tag(), 'is_tax: ' . is_tax(), 'is_search: ' . is_search(), 'in_array: ' . (!empty($this->post_types) && in_array($this->post_type, $this->post_types)));
242
+ }
243
+ return $this;
244
+ }
245
+
246
+ /**
247
+ * Return the post
248
+ * @return SQ_Models_Domain_Post
249
+ */
250
+ public function getPost() {
251
+ return $this->_post;
252
+ }
253
+
254
+ /**
255
+ * Get the current post from Wordpress
256
+ * @param integer $current_post
257
+ * @return WP_Post
258
+ */
259
+ public function getWpPost($current_post) {
260
+ global $post;
261
+
262
+ if ($current_post instanceof WP_Post) {
263
+ $post = $current_post;
264
+ } else {
265
+ if (function_exists('is_shop') && is_shop()) {
266
+ $current_post = get_post(wc_get_page_id('shop'));
267
+ } elseif ((is_single() || is_singular()) && isset($post->ID)) {
268
+ $current_post = get_post($post->ID);
269
+ }
270
+ }
271
+
272
+ $current_post = apply_filters('sq_current_post', $current_post);
273
+ SQ_Classes_Tools::dump($current_post);
274
+ // global $wp_query;
275
+ // SQ_Classes_Tools::dump($wp_query);
276
+
277
+ return $current_post;
278
+ }
279
+
280
+
281
+ /**
282
+ * Replace the patterns from tags
283
+ *
284
+ * @param SQ_Models_Domain_Post $post
285
+ * @return SQ_Models_Domain_Post | false
286
+ */
287
+ public function replacePatterns($post) {
288
+ if ($post instanceof SQ_Models_Domain_Post) {
289
+ $patterns = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Patterns', $post->toArray());
290
+ SQ_Classes_Tools::dump($patterns);
291
+ if ($sq_array = $post->sq->toArray()) {
292
+ if (!empty($sq_array)) {
293
+ foreach ($sq_array as $name => $value) {
294
+ if ($name == 'sep' && $value <> '') {
295
+ //set the current post type sep loded in SQ_Models_Domain_Post domain
296
+ $patterns->sep = $value;
297
+ }
298
+
299
+ if (strpos($value, '{{') !== false && strpos($value, '}}') !== false) {
300
+ $sq_with_patterns[$name] = $value;
301
+ }
302
+ }
303
+
304
+ if (!empty($sq_with_patterns)) {
305
+ foreach ($patterns->getPatterns() as $key => $pattern) {
306
+ foreach ($sq_with_patterns as $name => $value) {
307
+ if (strpos($value, $pattern) !== false) {
308
+ $post->sq->$name = str_replace($pattern, $patterns->$key, $post->sq->$name);
309
+ }
310
+ }
311
+ }
312
+ }
313
+
314
+ // SQ_Classes_Tools::dump($post, $patterns);
315
+ return $post;
316
+ }
317
+ }
318
+ }
319
+ return false;
320
+ }
321
+
322
+
323
+ /**
324
+ * Build the current post with all the data required
325
+ * @param WP_Post $post
326
+ * @return SQ_Models_Domain_Post | false
327
+ */
328
+ public function getPostDetails($post) {
329
+ if ($post instanceof WP_Post) {
330
+ $post = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Post', $post);
331
+ SQ_Classes_Tools::dump($post);
332
+
333
+ if ($post->ID > 0 && $post->post_type <> '') {
334
+ //If it's front page
335
+ if ($post->ID == get_option('page_on_front')) {
336
+ $post->debug = 'page_on_front:' . $post->ID;
337
+ $post->post_type = 'home';
338
+ $post->hash = md5($post->ID);
339
+ $post->url = home_url();
340
+ return $post;
341
+ }
342
+
343
+ //If it's front post
344
+ if ($post->ID == get_option('page_for_posts')) {
345
+ $post->debug = 'page_for_posts:' . $post->ID;
346
+ $post->post_type = 'home';
347
+ $post->hash = md5($post->ID);
348
+ $post->url = home_url();
349
+ return $post;
350
+ }
351
+
352
+ //If it's a product
353
+ if ($post->post_type == 'product') {
354
+ $post->debug = 'product:' . $post->ID;
355
+
356
+ $post->post_type = 'product';
357
+ $post->hash = md5($post->ID);
358
+ $post->url = get_permalink($post->ID);
359
+ $cat = get_the_terms($post->ID, 'product_cat');
360
+ if (!empty($cat) && count($cat) > 0) {
361
+ $post->category = $cat[0]->name;
362
+ if (isset($cat[0]->description)) $post->category_description = $cat[0]->description;
363
+ }
364
+ return $post;
365
+ }
366
+
367
+ //If it's a shop
368
+ if ($post->post_type == 'page' && function_exists('wc_get_page_id') && $post->ID == wc_get_page_id('shop')) {
369
+ $post->debug = 'shop:' . $post->post_type . $post->ID;
370
+ $post->post_type = 'shop';
371
+ $post->hash = md5($post->ID);
372
+ $post->url = get_permalink($post->ID);
373
+ return $post;
374
+ }
375
+
376
+ if ($post->post_type == 'post' || $post->post_type == 'page' || $post->post_type == 'product') {
377
+ $post->debug = 'post/page/product:' . $post->ID;
378
+ $post->hash = md5($post->ID);
379
+ $post->url = get_permalink($post->ID);
380
+ return $post;
381
+ }
382
+
383
+
384
+ if ($post->post_type == 'attachment') {
385
+ $post->debug = 'attachment:' . $post->ID;
386
+ $post->hash = md5($post->ID);
387
+ $post->url = get_permalink($post->ID);
388
+ return $post;
389
+ }
390
+
391
+ if ($post->post_type = $this->getCutomPostType()) {
392
+ SQ_Classes_Tools::dump($post->post_type);
393
+
394
+ $post->debug = 'getCutomPostType1:' . $post->post_type . $post->ID;
395
+ $post->hash = md5($post->post_type . $post->ID);
396
+ $post->url = get_permalink($post->ID);
397
+ return $post;
398
+ }
399
+
400
+ }
401
+
402
+ if ($post->post_type = $this->getCutomPostType()) {
403
+ if ($post->post_name <> '') {
404
+ $post->debug = 'getCutomPostType2:' . $post->post_type . $post->post_name;
405
+ $post->hash = md5($post->post_type . $post->post_name);
406
+ } else {
407
+ $post->debug = 'getCutomPostType3:' . $post->post_type;
408
+ $post->hash = md5($post->post_type);
409
+ }
410
+
411
+ $post->url = get_post_type_archive_link($post->post_type);
412
+ return $post;
413
+ }
414
+ } else {
415
+ if ($post instanceof SQ_Models_Domain_Post) {
416
+ return $post;
417
+ }
418
+
419
+ SQ_Classes_Tools::dump('No WP Post');
420
+ $post = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Post', $post);
421
+ }
422
+
423
+
424
+ if ($this->isHomePage()) {
425
+ $post->debug = 'isHomePage';
426
+ $post->post_type = 'home';
427
+ $post->hash = md5('wp_homepage');
428
+ $post->post_title = get_bloginfo('name');
429
+ $post->post_excerpt = get_bloginfo('description');
430
+ $post->url = home_url();
431
+ return $post;
432
+ }
433
+
434
+ if (is_tag()) {
435
+ $tag = $this->getTagDetails();
436
+ $post->post_type = 'tag';
437
+ if (isset($tag->term_id)) {
438
+ $post->post_title = $tag->name;
439
+ $post->url = get_tag_link($tag->term_id);
440
+ $post->debug = 'is_tag:' . $post->post_type . $tag->term_id;
441
+ $post->hash = md5($post->post_type . $tag->term_id);
442
+ $post->url = get_tag_link($tag->term_id);
443
+ //
444
+ $post->term_taxonomy_id = $tag->term_id;
445
+ $post->taxonomy = $tag->taxonomy;
446
+ }
447
+
448
+ return $post;
449
+ }
450
+
451
+ if (is_tax()) {
452
+ if ($tax = $this->getTaxonomyDetails()) {
453
+ if (isset($tax->taxonomy) && $tax->taxonomy <> '') {
454
+ $post->post_type = 'tax-' . $tax->taxonomy;
455
+ if (isset($tax->term_id)) {
456
+ $post->debug = 'is_tax:' . $post->post_type . $tax->term_id;
457
+ $post->hash = md5($post->post_type . $tax->term_id);
458
+ $post->url = get_term_link($tax->term_id);
459
+ $post->post_title = ((isset($tax->name)) ? $tax->name : '');
460
+ $post->post_excerpt = ((isset($tax->description)) ? $tax->description : '');
461
+ //
462
+ $post->term_taxonomy_id = $tax->term_id;
463
+ $post->taxonomy = $tax->taxonomy;
464
+ }
465
+ return $post;
466
+ }
467
+ }
468
+
469
+ }
470
+
471
+ if (is_category()) {
472
+ $category = $this->getCategoryDetails();
473
+ $post->post_type = 'category';
474
+ if (isset($category->term_id)) {
475
+ $post->debug = 'is_category:' . $post->post_type . $category->term_id;
476
+
477
+ $post->hash = md5($post->post_type . $category->term_id);
478
+ $post->guid = $category->slug;
479
+ $post->url = get_term_link($category->term_id);
480
+ $post->post_title = $category->cat_name;
481
+ $post->post_excerpt = $category->description;
482
+ $post->category = $category->cat_name;
483
+ $post->category_description = $category->description;
484
+ //
485
+ $post->term_taxonomy_id = $category->term_id;
486
+ $post->taxonomy = 'category';
487
+ }
488
+ return $post;
489
+ }
490
+
491
+ if (is_search()) {
492
+ $post->debug = 'is_search:' . $post->guid;
493
+ $post->post_type = 'search';
494
+ $post->hash = md5($post->post_type);
495
+
496
+ //Set the search guid
497
+ $post->url = home_url() . '/' . $post->post_type . '/';
498
+ $search = get_query_var('s');
499
+ if ($search !== '') {
500
+ $post->url .= $search;
501
+ $post->hash = md5($post->post_type . $search);
502
+ }
503
+
504
+ if ($post->post_name <> '') {
505
+ $post->hash = md5($post->guid);
506
+ }
507
+ return $post;
508
+ }
509
+
510
+ if (is_author()) {
511
+ if ($author = $this->getAuthorDetails()) {
512
+ $post->post_type = 'profile';
513
+ if (isset($author->ID)) {
514
+ $post->debug = 'is_author:' . $post->post_type . $author->ID;
515
+
516
+ $post->hash = md5($post->post_type . $author->ID);
517
+ $post->post_author = $author->display_name;
518
+ $post->post_title = $author->display_name;
519
+ $post->post_excerpt = $author->description;
520
+
521
+ //If buddypress installed
522
+ if (function_exists('bp_core_get_user_domain')) {
523
+ $post->url = bp_core_get_user_domain($author->ID);
524
+ } else {
525
+ $post->url = get_author_posts_url($author->ID);
526
+ }
527
+
528
+ }
529
+ return $post;
530
+ }
531
+
532
+ }
533
+
534
+ //In case of post type in archieve like gurutheme
535
+ if ($post->post_type = $this->getCutomPostType()) {
536
+ $post->debug = 'cutomPostType:' . $post->post_type;
537
+ SQ_Classes_Tools::dump($post);
538
+ $post->hash = md5($post->post_type);
539
+
540
+ if ((int)$post->term_taxonomy_id > 0) {
541
+ $post->url = get_term_link($post->term_taxonomy_id);
542
+ } else {
543
+ $post->url = get_post_type_archive_link($post->post_type);
544
+ }
545
+ return $post;
546
+ }
547
+
548
+ if (is_archive()) {
549
+ if ($archive = $this->getArchiveDetails()) {
550
+ $post->post_type = 'archive';
551
+ if ($archive->path <> '') {
552
+ $post->debug = 'is_archive:' . $post->post_type . $archive->path;
553
+
554
+ $post->hash = md5($post->post_type . $archive->path);
555
+ $post->url = $archive->url;
556
+ $post->post_date = date(get_option('date_format'), strtotime($archive->path));
557
+ }
558
+
559
+ return $post;
560
+ }
561
+ }
562
+
563
+ if (is_404()) {
564
+ $post->debug = 'is_404:' . $post->post_type;
565
+ $post->post_type = '404';
566
+ $post->hash = md5($post->post_type);
567
+ if ($post->post_name <> '') {
568
+ $post->hash = md5($post->post_type . $post->post_name);
569
+ }
570
+ return $post;
571
+ }
572
+
573
+ return false;
574
+ }
575
+
576
+
577
+ /**
578
+ * Get the Sq from database
579
+ * @param string $hash
580
+ * @param integer $post_id
581
+ * @return mixed|null
582
+ */
583
+ public function getSqSeo($hash = null, $post_id = 0, $meta = null) {
584
+ global $wpdb;
585
+ $metas = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Sq');
586
+ if (isset($hash) && $hash <> '') {
587
+ $blog_id = get_current_blog_id();
588
+
589
+ $query = "SELECT * FROM " . $wpdb->prefix . strtolower(_SQ_DB_) . " WHERE blog_id = '" . (int)$blog_id . "' AND url_hash = '" . $hash . "';";
590
+
591
+ if ($row = $wpdb->get_row($query, OBJECT)) {
592
+ $metas = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Sq', maybe_unserialize($row->seo));
593
+ }
594
+ } elseif ((int)$post_id > 0) {
595
+ $blog_id = get_current_blog_id();
596
+
597
+ $query = "SELECT * FROM " . $wpdb->prefix . strtolower(_SQ_DB_) . " WHERE blog_id = '" . (int)$blog_id . "' AND post_id = '" . (int)$post_id . "';";
598
+
599
+ if ($row = $wpdb->get_row($query, OBJECT)) {
600
+ $metas = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Sq', maybe_unserialize($row->seo));
601
+ }
602
+ }
603
+
604
+ if (isset($meta) && isset($metas->$meta)) {
605
+ return $metas->$meta;
606
+ }
607
+ return $metas;
608
+ }
609
+
610
+ /**
611
+ * Check if other plugin are/were installed and don't change the SEO
612
+ *
613
+ * @param integer $post_id
614
+ * @param string $meta
615
+ * @return boolean
616
+ */
617
+ public function getAdvancedMeta($post_id, $meta = null) {
618
+ return $this->getSqSeo(null, $post_id, $meta);
619
+ }
620
+
621
+ /**
622
+ * Add page if needed
623
+ * @param $url
624
+ * @return string
625
+ */
626
+ public function addPaged($post) {
627
+ if (is_paged() && isset($post->url) && $post->url <> '') {
628
+ $page = (int)get_query_var('paged');
629
+ if ($page && $page > 1) {
630
+ $post->url = trailingslashit($post->url) . "page/" . "$page/";
631
+ }
632
+ }
633
+ return $post;
634
+ }
635
+
636
+ /**
637
+ * Get information about the Archive
638
+ * @return array|bool|mixed|object
639
+ */
640
+ private function getArchiveDetails() {
641
+ if (is_date()) {
642
+ $archive = false;
643
+ if (is_day()) {
644
+ $archive = array(
645
+ 'path' => get_query_var('year') . '-' . get_query_var('monthnum') . '-' . get_query_var('day'),
646
+ 'url' => get_day_link(get_query_var('year'), get_query_var('monthnum'), get_query_var('day')),
647
+ );
648
+ } elseif (is_month()) {
649
+ $archive = array(
650
+ 'path' => get_query_var('year') . '-' . get_query_var('monthnum'),
651
+ 'url' => get_month_link(get_query_var('year'), get_query_var('monthnum')),
652
+ );
653
+ } elseif (is_year()) {
654
+ $archive = array(
655
+ 'path' => get_query_var('year'),
656
+ 'url' => get_year_link(get_query_var('year')),
657
+ );
658
+ }
659
+
660
+ if (!empty($archive)) {
661
+ return json_decode(json_encode($archive));
662
+ }
663
+ }
664
+
665
+ return false;
666
+ }
667
+
668
+ /**
669
+ * Get the keyword fof this URL
670
+ * @return array|bool|false|mixed|null|object|string|WP_Error|WP_Term
671
+ */
672
+ private function getTagDetails() {
673
+ global $tag;
674
+ $temp = str_replace('&#8230;', '...', single_tag_title('', false));
675
+
676
+ foreach (get_taxonomies() as $tax) {
677
+ if ($tax <> 'category') {
678
+ if ($tag = get_term_by('name', $temp, $tax))
679
+ break;
680
+ }
681
+ }
682
+
683
+ return $tag;
684
+ }
685
+
686
+ /**
687
+ * Get the taxonomies details for this URL
688
+ * @return array|bool|false|mixed|null|object|string|WP_Error|WP_Term
689
+ */
690
+ private function getTaxonomyDetails() {
691
+ $term = false;
692
+
693
+ if ($id = get_queried_object_id()) {
694
+ $term = get_term($id);
695
+ SQ_Classes_Tools::dump($id, $term);
696
+ }
697
+ return $term;
698
+ }
699
+
700
+ /**
701
+ * Get the category details for this URL
702
+ * @return array|null|object|WP_Error
703
+ */
704
+ private function getCategoryDetails() {
705
+ return get_category(get_query_var('cat'), false);
706
+ }
707
+
708
+ /**
709
+ * Get the profile details for this URL
710
+ * @return object
711
+ */
712
+ public function getAuthorDetails() {
713
+ $author = false;
714
+ global $authordata;
715
+ if (isset($authordata->data)) {
716
+ $author = $authordata->data;
717
+ $author->description = get_the_author_meta('description');
718
+ SQ_Classes_Tools::dump($author);
719
+ }
720
+ return $author;
721
+ }
722
+
723
+
724
+ /**
725
+ * Get the custom post type
726
+ * @return object
727
+ */
728
+ public function getCutomPostType() {
729
+ if ($post_type = get_query_var('post_type')) {
730
+ if (is_array($post_type) && !empty($post_type)) {
731
+ $post_type = current($post_type);
732
+ }
733
+ }
734
+
735
+ if ($post_type <> '') {
736
+ return $post_type;
737
+ }
738
+
739
+ return false;
740
+ }
741
+
742
+ /**
743
+ * Check if is the homepage
744
+ *
745
+ * @return bool
746
+ */
747
+ public function isHomePage() {
748
+ global $wp_query;
749
+
750
+ return (is_home() || (isset($wp_query->query) && empty($wp_query->query) && !is_preview()));
751
+ }
752
+
753
+ /**
754
+ * Check if the header is an HTML Header
755
+ * @return bool
756
+ */
757
+ public function isHtmlHeader() {
758
+ $headers = headers_list();
759
+
760
+ foreach ($headers as $index => $value) {
761
+ if (strpos($value, ':') !== false) {
762
+ $exploded = @explode(': ', $value);
763
+ if (count($exploded) > 1) {
764
+ $headers[$exploded[0]] = $exploded[1];
765
+ }
766
+ }
767
+ }
768
+ if (isset($headers['Content-Type'])) {
769
+ if (strpos($headers['Content-Type'], 'text/html') !== false) {
770
+ return true;
771
+ }
772
+ } else {
773
+ return false;
774
+ }
775
+
776
+ return false;
777
+ }
778
+
779
+ /**
780
+ * Is Quick SEO enabled for this page?
781
+ * @return bool
782
+ */
783
+ public function runSEOForThisPage() {
784
+
785
+ if (SQ_Classes_Tools::getValue('sq_use') == 'off') {
786
+ return false;
787
+ }
788
+
789
+ if (!$this->isHtmlHeader()) {
790
+ return false;
791
+ }
792
+
793
+ if ($this->_post && isset($this->_post->hash)) {
794
+ return true;
795
+ }
796
+
797
+ return false;
798
+ }
799
+
800
+ /**
801
+ * Pack HTML prefix if exists
802
+ * @param $prefix
803
+ * @return string
804
+ */
805
+ public function packPrefix($prefix) {
806
+ if ($prefix <> '') {
807
+ return ' prefix="' . $prefix . '"';
808
+ }
809
+ return '';
810
+ }
811
+
812
+ }
models/{SQ_Ico.php → Ico.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Model_SQ_Ico {
4
 
5
  /**
6
  * Images in the BMP format.
1
  <?php
2
 
3
+ class SQ_Models_Ico {
4
 
5
  /**
6
  * Images in the BMP format.
models/{SQ_Menu.php → Menu.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Model_SQ_Menu {
4
 
5
  /** @var array with the menu content
6
  *
1
  <?php
2
 
3
+ class SQ_Models_Menu {
4
 
5
  /** @var array with the menu content
6
  *
models/{SQ_Post.php → Post.php} RENAMED
@@ -1,10 +1,10 @@
1
  <?php
2
 
3
  /**
4
- * Shown in the Post page (called from SQ_Menu)
5
  *
6
  */
7
- class Model_SQ_Post {
8
 
9
  /**
10
  * Set the callback to tinymce with javascript SQ_eventChange function call on event
@@ -14,9 +14,9 @@ class Model_SQ_Post {
14
  public function setCallback($init) {
15
 
16
  if (wp_default_editor() == 'tinymce') {
17
- $init['setup'] = 'window.sq_tinymce.setup';
18
- $init['onchange_callback'] = 'window.sq_tinymce.callback';
19
- $init['content_css'] = ((isset($init['content_css']) && $init['content_css'] <> '') ? $init['content_css'] . ',' : '' ) . _SQ_THEME_URL_ . 'css/sq_frontend.css';
20
  }
21
 
22
  return $init;
@@ -31,7 +31,7 @@ class Model_SQ_Post {
31
  }
32
 
33
  public function addHeadingButton($plugin_array) {
34
- $plugin_array['heading'] = _SQ_THEME_URL_ . 'js/tinymce.js';
35
  return $plugin_array;
36
  }
37
 
@@ -88,6 +88,12 @@ class Model_SQ_Post {
88
  return $text;
89
  }
90
 
 
 
 
 
 
 
91
  /**
92
  * Add the image for Open Graph
93
  *
@@ -423,7 +429,7 @@ class Model_SQ_Post {
423
  }
424
  if ($common != true) {
425
  if (!preg_match("/http/i", $value) && !preg_match("/mailto:/i", $value)) {
426
- $keywords[] = SQ_Tools::i18n($value);
427
  $words_sum++;
428
  }
429
  }
1
  <?php
2
 
3
  /**
4
+ * Shown in the Post page (called from SQ_Controllers_Menu)
5
  *
6
  */
7
+ class SQ_Models_Post {
8
 
9
  /**
10
  * Set the callback to tinymce with javascript SQ_eventChange function call on event
14
  public function setCallback($init) {
15
 
16
  if (wp_default_editor() == 'tinymce') {
17
+ $init['setup'] = 'jQuery.sq_tinymce.setup';
18
+ $init['onchange_callback'] = 'jQuery.sq_tinymce.callback';
19
+ $init['content_css'] = ((isset($init['content_css']) && $init['content_css'] <> '') ? $init['content_css'] . ',' : '' ) . _SQ_THEME_URL_ . 'css/frontend' . (SQ_DEBUG ? '' : '.min') . '.css?ver=' . SQ_VERSION_ID;
20
  }
21
 
22
  return $init;
31
  }
32
 
33
  public function addHeadingButton($plugin_array) {
34
+ $plugin_array['heading'] = _SQ_THEME_URL_ . 'js/tinymce' . (SQ_DEBUG ? '' : '.min') . '.js';
35
  return $plugin_array;
36
  }
37
 
88
  return $text;
89
  }
90
 
91
+ // retrieves the attachment from the file URL
92
+ function findAttachmentByUrl($image_url) {
93
+ global $wpdb;
94
+ return $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE `post_type` = 'attachment' AND `guid` like '%%%s';", $image_url));
95
+ }
96
+
97
  /**
98
  * Add the image for Open Graph
99
  *
429
  }
430
  if ($common != true) {
431
  if (!preg_match("/http/i", $value) && !preg_match("/mailto:/i", $value)) {
432
+ $keywords[] = SQ_Classes_Tools::i18n($value);
433
  $words_sum++;
434
  }
435
  }
models/{SQ_PostsList.php → PostsList.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Model_SQ_PostsList {
4
 
5
  /** @var integer */
6
  public $post_id;
@@ -12,7 +12,7 @@ class Model_SQ_PostsList {
12
  */
13
  public function getTotal($response) {
14
  if (isset($response->posts)) {
15
- $ranking = SQ_ObjController::getController('SQ_Ranking', false);
16
 
17
  foreach ($response->posts as $post_id => &$values) {
18
  if (isset($values->error)) {
1
  <?php
2
 
3
+ class SQ_Models_PostsList {
4
 
5
  /** @var integer */
6
  public $post_id;
12
  */
13
  public function getTotal($response) {
14
  if (isset($response->posts)) {
15
+ $ranking = SQ_Classes_ObjController::getClass('SQ_Classes_Ranking');
16
 
17
  foreach ($response->posts as $post_id => &$values) {
18
  if (isset($values->error)) {
models/SQ_BlockSettingsSeo.php DELETED
@@ -1,355 +0,0 @@
1
- <?php
2
-
3
- class Model_SQ_BlockSettingsSeo {
4
-
5
- var $eTypes;
6
- var $appleSizes;
7
-
8
- public function __construct() {
9
- $this->appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
10
- }
11
-
12
- /**
13
- * Check if ecommerce is installed
14
- * @return boolean
15
- */
16
- public function isEcommerce() {
17
- if (isset($this->eTypes)) {
18
- return $this->eTypes;
19
- }
20
-
21
-
22
- $this->eTypes = array('product', 'wpsc-product');
23
- foreach ($this->eTypes as $key => $type) {
24
- if (!in_array($type, get_post_types())) {
25
- unset($this->eTypes[$key]);
26
- }
27
- }
28
-
29
- if (!empty($this->eTypes)) {
30
- return $this->eTypes;
31
- }
32
-
33
- return false;
34
- }
35
-
36
- /**
37
- * Check the google code saved at settings
38
- *
39
- * @return string
40
- */
41
- public function checkGoogleWTCode($code) {
42
-
43
- if ($code <> '') {
44
- if (strpos($code, 'content') !== false) {
45
- preg_match('/content\\s*=\\s*[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
46
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
47
- }
48
- if (strpos($code, '"') !== false) {
49
- preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
50
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
51
- }
52
-
53
- if ($code == '') SQ_Error::setError(__("The code for Google Webmaster Tool is incorrect.", _SQ_PLUGIN_NAME_));
54
- }
55
- return $code;
56
- }
57
-
58
- /**
59
- * Check the google code saved at settings
60
- *
61
- * @return string
62
- */
63
- public function checkGoogleAnalyticsCode($code) {
64
- //echo $code;
65
- if ($code <> '') {
66
- if (strpos($code, 'GoogleAnalyticsObject') !== false) {
67
- preg_match('/ga\(\'create\',[^\'"]*[\'"]([^\'"]+)[\'"],/i', $code, $result);
68
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
69
- }
70
-
71
- if (strpos($code, '"') !== false) {
72
- preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
73
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
74
- }
75
-
76
- if (strpos($code, 'UA-') === false) {
77
- $code = '';
78
- SQ_Error::setError(__("The code for Google Analytics is incorrect.", _SQ_PLUGIN_NAME_));
79
- }
80
- }
81
- return trim($code);
82
- }
83
-
84
- /**
85
- * Check the Facebook code saved at settings
86
- *
87
- * @return string
88
- */
89
- public function checkFavebookInsightsCode($code) {
90
- $id = '';
91
- if ($code <> '') {
92
- $code = trim($code);
93
- if (strpos($code, '"') !== false) {
94
- preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
95
- if (isset($result[1]) && !empty($result[1])) {
96
- $id = $result[1];
97
- }
98
- }
99
-
100
- if (strpos($code, 'facebook.com/') !== false) {
101
- preg_match('/facebook.com\/([^\/]+)/i', $code, $result);
102
- if (isset($result[1]) && !empty($result[1])) {
103
- if (is_string($result[1])) {
104
- $response = SQ_Action::apiCall('sq/seo/facebook-id', array('profile' => $result[1]));
105
- if ($response && $json = json_decode($response)) {
106
- $id = $json->code;
107
- }
108
- } elseif (is_numeric($result[1])) {
109
- $id = $result[1];
110
- }
111
- }
112
- }else {
113
- if (is_string($code)) {
114
- $response = SQ_Action::apiCall('sq/seo/facebook-id', array('profile' => $code));
115
- if ($response && $json = json_decode($response)) {
116
- $id = $json->code;
117
- }
118
- } elseif (is_numeric($code)) {
119
- $id = $code;
120
- }
121
- }
122
-
123
- if ($id == '') {
124
- SQ_Error::setError(__("The code for Facebook is incorrect.", _SQ_PLUGIN_NAME_));
125
- }
126
- }
127
- return $id;
128
- }
129
-
130
- /**
131
- * Check the Pinterest code saved at settings
132
- *
133
- * @return string
134
- */
135
- public function checkPinterestCode($code) {
136
- if ($code <> '') {
137
- if (strpos($code, 'content') !== false) {
138
- preg_match('/content\\s*=\\s*[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
139
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
140
- }
141
-
142
- if (strpos($code, '"') !== false) {
143
- preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
144
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
145
- }
146
-
147
- if ($code == '') SQ_Error::setError(__("The code for Pinterest is incorrect.", _SQ_PLUGIN_NAME_));
148
- }
149
- return $code;
150
- }
151
-
152
- /**
153
- * Check the Bing code saved at settings
154
- *
155
- * @return string
156
- */
157
- public function checkBingWTCode($code) {
158
- if ($code <> '') {
159
- if (strpos($code, 'content') !== false) {
160
- preg_match('/content\\s*=\\s*[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
161
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
162
- }
163
-
164
- if (strpos($code, '"') !== false) {
165
- preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
166
- if (isset($result[1]) && !empty($result[1])) $code = $result[1];
167
- }
168
-
169
- if ($code == '') SQ_Error::setError(__("The code for Bing is incorrect.", _SQ_PLUGIN_NAME_));
170
- }
171
- return $code;
172
- }
173
-
174
- /**
175
- * Check the twitter account
176
- *
177
- * @return string
178
- */
179
- public function checkTwitterAccount($account) {
180
- if (SQ_ObjController::getModel('SQ_Frontend')->getTwitterAccount($account) === false) {
181
- SQ_Error::setError(__("The twitter account is incorrect", _SQ_PLUGIN_NAME_));
182
- }
183
- if ($account <> '' && strpos($account, 'twitter.') === false) {
184
- $account = 'https://twitter.com/' . $account;
185
- }
186
- return $account;
187
- }
188
-
189
- /**
190
- * Check the google + account
191
- *
192
- * @return string
193
- */
194
- public function checkGoogleAccount($account) {
195
- if ($account <> '' && strpos($account, 'google.') === false) {
196
- $account = 'https://plus.google.com/' . $account;
197
- }
198
- return str_replace(" ", "+", $account);
199
- }
200
-
201
- /**
202
- * Check the google + account
203
- *
204
- * @return string
205
- */
206
- public function checkLinkeinAccount($account) {
207
- if ($account <> '' && strpos($account, 'linkedin.') === false) {
208
- $account = 'https://www.linkedin.com/in/' . $account;
209
- }
210
- return $account;
211
- }
212
-
213
- /**
214
- * Check the facebook account
215
- *
216
- * @return string
217
- */
218
- public function checkFacebookAccount($account) {
219
- if ($account <> '' && strpos($account, 'facebook.com') === false) {
220
- $account = 'https://www.facebook.com/' . $account;
221
- }
222
- return $account;
223
- }
224
-
225
- public function checkPinterestAccount($account) {
226
- if ($account <> '' && strpos($account, 'pinterest.com') === false) {
227
- $account = 'https://www.pinterest.com/' . $account;
228
- }
229
- return $account;
230
- }
231
-
232
- public function checkInstagramAccount($account) {
233
- if ($account <> '' && strpos($account, 'instagram.com') === false) {
234
- $account = 'https://www.instagram.com/' . $account;
235
- }
236
- return $account;
237
- }
238
-
239
-
240
- /**
241
- * Add the image to the root path
242
- *
243
- * @param string $file
244
- * @param string $path
245
- * @return array [name (the name of the file), favicon (the path of the ico), message (the returned message)]
246
- *
247
- */
248
- public function addFavicon($file, $path = ABSPATH) {
249
-
250
- /* get the file extension */
251
- $file_name = explode('.', $file['name']);
252
- $file_type = strtolower($file_name[count($file_name) - 1]);
253
-
254
- $out = array();
255
- $out['tmp'] = _SQ_CACHE_DIR_ . strtolower(md5($file['name']) . '_tmp.' . $file_type);
256
- $out['favicon'] = _SQ_CACHE_DIR_ . strtolower(md5($file['name']) . '.' . $file_type);
257
- foreach ($this->appleSizes as $size) {
258
- $out['favicon' . $size] = _SQ_CACHE_DIR_ . strtolower(md5($file['name']) . '.' . $file_type . $size);
259
- }
260
-
261
- /* if the file has a name */
262
- if (!empty($file['name'])) {
263
- /* Check the extension */
264
- $file_type = strtolower($file_type);
265
- $files = array('ico', 'jpeg', 'jpg', 'gif', 'png');
266
- $key = in_array($file_type, $files);
267
-
268
- if (!$key) {
269
- SQ_Error::setError(__("File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed.", _SQ_PLUGIN_NAME_));
270
- return;
271
- }
272
-
273
- /* Check for error messages */
274
- if (!$this->checkFunctions()) {
275
- SQ_Error::setError(__("GD error: The GD library must be installed on your server.", _SQ_PLUGIN_NAME_));
276
- return;
277
- } else {
278
- /* Delete the previous file if exists */
279
- if (is_file($out['favicon'])) {
280
- if (!unlink($out['favicon'])) {
281
- SQ_Error::setError(__("Delete error: Could not delete the old favicon.", _SQ_PLUGIN_NAME_));
282
- return;
283
- }
284
- }
285
-
286
- /* Upload the file */
287
- if (!move_uploaded_file($file['tmp_name'], $out['tmp'])) {
288
- SQ_Error::setError(__("Upload error: Could not upload the favicon.", _SQ_PLUGIN_NAME_));
289
- return;
290
- }
291
-
292
- /* Change the permision */
293
- if (!chmod($out['tmp'], 0755)) {
294
- SQ_Error::setError(__("Permission error: Could not change the favicon permissions.", _SQ_PLUGIN_NAME_));
295
- return;
296
- }
297
-
298
- if ($file_type <> 'ico') {
299
- /* Save the file */
300
- if ($out['tmp']) {
301
- $ico = SQ_ObjController::getModel('SQ_Ico');
302
- $ico->set_image($out['tmp'], array(32, 32));
303
- if ($ico->save_ico($out['favicon'])) {
304
- if (file_exists($path . "/" . 'favicon.ico')) {
305
- $ico->remove_ico($path . "/" . 'favicon.ico');
306
- }
307
- if (!is_multisite()) {
308
- $ico->save_ico($path . "/" . 'favicon.ico');
309
- }
310
- }
311
- foreach ($this->appleSizes as $size) {
312
- $ico->set_image($out['tmp'], array($size, $size));
313
- $ico->save_ico($out['favicon' . $size]);
314
- }
315
- } else {
316
- SQ_Error::setError(__("ICO Error: Could not create the ICO from file. Try with another file type.", _SQ_PLUGIN_NAME_));
317
- }
318
- } else {
319
- copy($out['tmp'], $out['favicon']);
320
- foreach ($this->appleSizes as $size) {
321
- copy($out['tmp'], $out['favicon' . $size]);
322
- }
323
-
324
- unset($out['tmp']);
325
- if (file_exists($path . "/" . 'favicon.ico')) {
326
- $ico = SQ_ObjController::getModel('SQ_Ico');
327
- $ico->remove_ico($path . "/" . 'favicon.ico');
328
- }
329
- if (!is_multisite()) {
330
- $ico = SQ_ObjController::getModel('SQ_Ico');
331
- $ico->save_ico($path . "/" . 'favicon.ico');
332
- }
333
- }
334
- unset($out['tmp']);
335
- $out['message'] = __("The favicon has been updated.", _SQ_PLUGIN_NAME_);
336
-
337
- return $out;
338
- }
339
- }
340
- }
341
-
342
- private function checkFunctions() {
343
- $required_functions = array('getimagesize', 'imagecreatefromstring', 'imagecreatetruecolor', 'imagecolortransparent', 'imagecolorallocatealpha', 'imagealphablending', 'imagesavealpha', 'imagesx', 'imagesy', 'imagecopyresampled',);
344
-
345
- foreach ($required_functions as $function) {
346
- if (!function_exists($function)) {
347
- SQ_Error::setError("The PHP_ICO class was unable to find the $function function, which is part of the GD library. Ensure that the system has the GD library installed and that PHP has access to it through a PHP interface, such as PHP's GD module. Since this function was not found, the library will be unable to create ICO files.");
348
- return false;
349
- }
350
- }
351
-
352
- return true;
353
- }
354
-
355
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/SQ_Blocksearch.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * The model class for SQ_Blocksearch
5
- *
6
- */
7
- class Model_SQ_Blocksearch {
8
-
9
-
10
- }
 
 
 
 
 
 
 
 
 
 
models/SQ_Blockseo.php DELETED
@@ -1,41 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * The model class for SQ_Blockseo
5
- *
6
- */
7
- class Model_SQ_Blockseo {
8
-
9
- /**
10
- * Get the advanced SEO from database
11
- * @global integer $sq_postID
12
- * @global type $wpdb
13
- * @return string
14
- */
15
- public function getAdvSeo() {
16
- global $sq_postID, $wpdb;
17
- $meta = array();
18
- $str = '';
19
-
20
- if ((int) $sq_postID == 0)
21
- return;
22
-
23
- $meta = array('_sq_fp_title' => '',
24
- '_sq_fp_description' => '',
25
- '_sq_fp_ogimage' => '');
26
-
27
- $sql = "SELECT `meta_id`, `meta_value`, `meta_key`
28
- FROM `" . $wpdb->postmeta . "`
29
- WHERE `post_id`=" . (int) $sq_postID;
30
-
31
- $rows = $wpdb->get_results($sql);
32
-
33
- foreach ($rows as $row) {
34
- if (array_key_exists($row->meta_key, $meta))
35
- $meta[$row->meta_key] = $row->meta_value;
36
- }
37
-
38
- return $meta;
39
- }
40
-
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/SQ_Frontend.php DELETED
@@ -1,2136 +0,0 @@
1
- <?php
2
-
3
- class Model_SQ_Frontend {
4
-
5
- public $buffer;
6
-
7
- /** @var object Current post */
8
- private $post = null;
9
-
10
- private $post_type;
11
- private $post_types;
12
-
13
- /** @var string url */
14
- private $url;
15
- private $author;
16
-
17
- /** @var string */
18
- private $title;
19
-
20
- /** @var string */
21
- private $description;
22
-
23
- /** @var array */
24
- private $keywords;
25
-
26
- /** @var array */
27
- private $thumb_images;
28
- private $thumb_video;
29
- private $custom_og_image = false;
30
-
31
- /** @var integer */
32
- private $min_title_length = 20;
33
-
34
- /** @var integer */
35
- private $max_title_length = 75;
36
-
37
- /** @var integer */
38
- private $max_description_length = 170;
39
-
40
- /** @var integer */
41
- private $min_description_length = 70;
42
-
43
- /** @var integer */
44
- private $max_keywords = 8;
45
-
46
- /** @var array Meta custom content */
47
- private $meta = array();
48
-
49
- public function __construct() {
50
- SQ_ObjController::getController('SQ_Tools', false);
51
- $this->post_types = SQ_Tools::$options['sq_post_types'];
52
- }
53
-
54
- /** @var meta from other plugins */
55
- /**
56
- * Write the signature
57
- * @return string
58
- */
59
- public function setStart() {
60
- return "\n\n<!-- Squirrly SEO Plugin " . SQ_VERSION . ", visit: http://plugin.squirrly.co/ -->\n";
61
- }
62
-
63
- /**
64
- * Set the post
65
- *
66
- * @param null|WP_Post $newpost
67
- * @return array|null|object|WP_Post
68
- */
69
- public function setPost($newpost = null) {
70
- global $post;
71
-
72
- if (isset($newpost)) {
73
- $post = $newpost;
74
- }
75
-
76
- if (function_exists('is_shop') && is_shop()) {
77
- $this->post = get_post(wc_get_page_id('shop'));
78
- $this->post_type = 'shop';
79
- } else {
80
- if (isset($post->ID)) {
81
- $this->post = get_post($post->ID);
82
- }
83
-
84
- if (function_exists('is_product') && is_product()) {
85
- $this->post_type = 'product';
86
- } elseif (function_exists('is_checkout') && is_checkout()) {
87
- $this->post_type = 'checkout';
88
- } elseif (is_single()) {
89
- $this->post_type = 'post';
90
- } elseif (is_page()) {
91
- $this->post_type = 'page';
92
- } elseif (is_category()) {
93
- $this->post_type = 'category';
94
- } elseif (is_tag()) {
95
- $this->post_type = 'tag';
96
- } elseif (is_author()) {
97
- $this->post_type = 'author';
98
- } elseif (is_search()) {
99
- $this->post_type = 'search';
100
- } elseif (is_archive()) {
101
- $this->post_type = 'archive';
102
- } else {
103
- $this->post_type = get_post_type();
104
- }
105
- }
106
- }
107
-
108
- /**
109
- * End the signature
110
- * @return string
111
- */
112
- public function setEnd() {
113
- return "<!-- /Squirrly SEO Plugin -->\n\n";
114
- }
115
-
116
- /* * *****USE BUFFER****** */
117
-
118
- /**
119
- * Start the buffer record
120
- * @return string
121
- */
122
- public function startBuffer() {
123
- ob_start(array($this, 'getBuffer'));
124
- }
125
-
126
- /**
127
- * Get the loaded buffer and change it
128
- *
129
- * @param string $buffer
130
- * @return string
131
- */
132
- public function getBuffer($buffer) {
133
- if (isset($this->buffer)) {
134
- return $this->buffer;
135
- }
136
-
137
- $this->buffer = $this->setMetaInBuffer($buffer);
138
- return $this->buffer;
139
- }
140
-
141
- public function checkHandles() {
142
- try {
143
- if (function_exists('ob_list_handlers')) {
144
- $buffers = @ob_list_handlers();
145
-
146
- if (sizeof($buffers) > 0) {
147
- if (!in_array(get_class($this) . '::getBuffer', $buffers)) {
148
- $this->startBuffer();
149
- }
150
- }
151
- }
152
- } catch (Exception $ex) {
153
- //error
154
- }
155
- }
156
-
157
- /**
158
- * Should Squirrly Load for this page?
159
- * @return bool
160
- */
161
- public function is_squirrly() {
162
- if (SQ_Tools::getValue('sq_use') == 'off') {
163
- return false;
164
- }
165
-
166
- if (!$this->isHtmlHeader()) {
167
- return false;
168
- }
169
-
170
- if (is_404()){
171
- return false;
172
- }
173
-
174
- if ($this->isHomePage() || is_single() || is_preview() || is_page() || is_archive() || is_author() || is_category() || is_tag() || is_search() || (!empty($this->post_types) && in_array($this->post_type, $this->post_types))) {
175
- return true;
176
- }
177
-
178
- return false;
179
- }
180
-
181
- /**
182
- * Change the title, description and keywords in site's buffer
183
- *
184
- * @return string
185
- */
186
- public function setMetaInBuffer($buffer) {
187
-
188
- //if the title is already shown
189
- if (isset($this->url)) {
190
- return $buffer;
191
- }
192
- //get the post from shop if woocommerce is installed
193
- if (!isset($this->post)) {
194
- $this->setPost();
195
- }
196
-
197
- if ($this->is_squirrly()) {
198
- //update ... please monitor
199
- if (is_single() || is_page()) {
200
- if (!isset($this->post->ID)) {
201
- return $buffer;
202
- }
203
- }
204
-
205
- if (strpos($buffer, '<head') !== false) {
206
- $this->meta['blogname'] = get_bloginfo('name');
207
- //Get the url
208
- $this->url = $this->getCanonicalUrl();
209
- //Get the title
210
- $this->title = $this->getCustomTitle();
211
- //Set the description and Keywords in case of default
212
- $this->getCustomDescription();
213
- $this->getCustomKeyword();
214
-
215
- /* Get the thumb image from post */
216
- $this->thumb_images = $this->getImagesFromContent();
217
-
218
- if (SQ_Tools::$options['sq_auto_title'] == 1 && isset($this->title) && $this->title <> '') {
219
- $buffer = @preg_replace('/<title[^<>]*>([^<>]*)<\/title>/si', '', $buffer, -1);
220
- }
221
- if (SQ_Tools::$options['sq_auto_description'] == 1) {
222
- //clear the existing description and keywords
223
- $buffer = @preg_replace('/<meta[^>]*(name|property)=["\'](description|keywords)["\'][^>]*content=["\'][^"\'>]*["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
224
- }
225
- if (SQ_Tools::$options['sq_auto_facebook'] == 1) {
226
- $buffer = @preg_replace('/<meta[^>]*(name|property)=["\'](og:|article:)[^"\'>]+["\'][^>]*content=["\'][^"\'>]+["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
227
- }
228
- if (SQ_Tools::$options['sq_auto_twitter'] == 1) {
229
- $buffer = @preg_replace('/<meta[^>]*(name|property)=["\'](twitter:)[^"\'>]+["\'][^>]*content=["\'][^"\'>]+["\'][^>]*>[\n\r]*/si', '', $buffer, -1);
230
- }
231
-
232
- if (SQ_Tools::$options['sq_auto_favicon'] == 1) {
233
- $buffer = @preg_replace('/<link[^>]*rel=[^>]*(shortcut icon)[^>]*>[\n\r]*/si', '', $buffer, -1);
234
- }
235
-
236
- if (SQ_Tools::$options['sq_auto_canonical'] == 1) {
237
- $buffer = @preg_replace('/<link[^>]*rel=[^>]*(canonical)[^>]*>[\n\r]*/si', '', $buffer, -1);
238
- }
239
- if (SQ_Tools::$options['sq_auto_jsonld'] == 1) {
240
- $buffer = @preg_replace('/<script[^>]*type=["\']application\/ld\+json["\'][^>]*>[^>]*<\/script>[\n\r]*/si', '', $buffer, -1);
241
- }
242
-
243
- $buffer = @preg_replace('/(<head(\s[^>]*|)>)/si', sprintf("$1\n%s", $this->getHeader()) . "\n", $buffer, 1);
244
-
245
- return $buffer;
246
- }
247
- } else {
248
- global $sq_is_sitemap;
249
- if (isset($sq_is_sitemap) && $sq_is_sitemap) {
250
- $buffer = @preg_replace('/<\/sitemapindex>(.*)?/si', "</sitemapindex>", $buffer);
251
- $buffer = @preg_replace('/<\/urlset>(.*)?/si', "</urlset>", $buffer);
252
- $buffer = trim($buffer);
253
- }
254
- }
255
-
256
-
257
- return $buffer;
258
- }
259
-
260
- /* * ********************** */
261
-
262
- /**
263
- * Overwrite the header with the correct parameters
264
- *
265
- * @return string
266
- */
267
- public function getHeader() {
268
- $ret = '';
269
-
270
- if (SQ_Tools::$options['sq_auto_title'] == 1 && isset($this->title) && $this->title <> '') {
271
- $ret .= sprintf("<title>%s</title>", $this->title) . "\n";
272
- }
273
-
274
- $ret .= $this->setStart();
275
- //Add description in homepage if is set or add description in other pages if is not home page
276
- if ((SQ_Tools::$options['sq_auto_description'] == 1 && $this->isHomePage()) || !$this->isHomePage()) {
277
- $ret .= $this->getCustomDescription() . "\n";
278
- $ret .= $this->getCustomKeyword() . "\n";
279
- }
280
-
281
- if (SQ_Tools::$options['sq_auto_canonical'] == 1) {
282
- $ret .= $this->setCanonical();
283
- $ret .= $this->setRelPrevNext();
284
- }
285
-
286
- if (SQ_Tools::$options['sq_auto_sitemap'] == 1) {
287
- $ret .= $this->getXMLSitemap();
288
- }
289
- /* Auto setting */
290
-
291
- if (SQ_Tools::$options['sq_auto_favicon'] == 1) {
292
- $ret .= $this->getFavicon();
293
- }
294
-
295
- if (SQ_Tools::$options['sq_auto_meta'] == 1) {
296
- $ret .= "\n";
297
- $ret .= $this->getGooglePlusMeta();
298
- $ret .= $this->getLanguage();
299
- $ret .= $this->getCopyright();
300
- $ret .= $this->getDublinCore();
301
- }
302
- if (SQ_Tools::$options['sq_auto_facebook'] == 1) {
303
- add_filter('jetpack_enable_opengraph', '__return_false', 99);
304
- $ret .= $this->getOpenGraph() . "\n";
305
- }
306
-
307
- if (SQ_Tools::$options['sq_auto_twitter'] == 1) {
308
- $ret .= $this->getTwitterCard() . "\n";
309
- }
310
- /* SEO optimizer tool */
311
- $ret .= $this->getGoogleWT();
312
- $ret .= $this->getGoogleAnalytics();
313
- $ret .= $this->getFacebookPixel();
314
- $ret .= $this->getFacebookIns();
315
- $ret .= $this->getBingWT();
316
- $ret .= $this->getPinterest();
317
- $ret .= $this->getAlexaT();
318
-
319
- if (SQ_Tools::$options['sq_auto_jsonld'] == 1) {
320
- $ret .= $this->getJsonLD() . "\n";
321
- }
322
-
323
- $ret .= $this->setEnd();
324
- return $ret;
325
- }
326
-
327
-
328
- public function getTwitterCard() {
329
- $meta = "\n";
330
-
331
- //Title and Description is required
332
- if ($this->title == '' || $this->description == '') {
333
- return;
334
- }
335
-
336
- $sq_twitter_creator = SQ_Tools::$options['sq_twitter_account'];
337
- $sq_twitter_site = SQ_Tools::$options['sq_twitter_account'];
338
-
339
- if (SQ_Tools::$options['sq_auto_twittersize'] == 'summary_large_image' && !empty($this->thumb_images)) {
340
- $meta .= '<meta name="twitter:card" content="summary_large_image" />' . "\n";
341
- } else {
342
- $meta .= '<meta name="twitter:card" content="summary" />' . "\n";
343
- }
344
-
345
- $meta .= (($sq_twitter_creator <> '') ? sprintf('<meta name="twitter:creator" content="%s" />', $this->getTwitterAccount($sq_twitter_creator)) . "\n" : '');
346
- $meta .= (($sq_twitter_site <> '') ? sprintf('<meta name="twitter:site" content="%s" />', $this->getTwitterAccount($sq_twitter_creator)) . "\n" : '');
347
- $meta .= sprintf('<meta name="twitter:url" content="%s">', $this->url) . "\n";
348
- $meta .= sprintf('<meta name="twitter:title" content="%s">', apply_filters('sq_twitter_card_title', $this->title)) . "\n";
349
- $meta .= (($this->description <> '') ? sprintf('<meta name="twitter:description" content="%s">', apply_filters('sq_twitter_card_description', ($this->description . ' | ' . $this->meta['blogname']))) . "\n" : '');
350
- $meta .= (!empty($this->thumb_images) ? sprintf('<meta name="twitter:image" content="%s">', $this->thumb_images[0]['src']) . "\n" : '');
351
- $meta .= (($this->meta['blogname'] <> '') ? sprintf('<meta name="twitter:domain" content="%s">', $this->meta['blogname']) . "\n" : '');
352
-
353
- return apply_filters('sq_twitter_card_meta', $meta);
354
- }
355
-
356
- /**
357
- * Get the twitter account from url
358
- *
359
- * @param string $account
360
- * @return string | false
361
- */
362
- public function getTwitterAccount($account) {
363
- if ($account <> '') {
364
- if (strpos($account, 'twitter.com') !== false) {
365
- preg_match('/twitter.com\/([@1-9a-z_-]+)/i', $account, $result);
366
- if (isset($result[1]) && !empty($result[1])) {
367
- return '@' . str_replace('@', '', $result[1]);
368
- }
369
- } else {
370
- preg_match('/([@1-9a-z_-]+)/i', $account, $result);
371
- if (isset($result[1]) && !empty($result[1])) {
372
- return '@' . str_replace('@', '', $result[1]);
373
- }
374
- }
375
- } else {
376
- return '';
377
- }
378
- return false;
379
- }
380
-
381
- /**
382
- * Get the Open Graph Protocol
383
- * @return string
384
- */
385
- public function getOpenGraph() {
386
- $meta = "\n";
387
- $image = '';
388
-
389
- //Title and Description is required
390
- if ($this->title == '' || $this->description == '') {
391
- return;
392
- }
393
-
394
- if (!isset($this->thumb_video) || $this->thumb_video == '') {
395
- $videos = $this->getVideosFromContent();
396
- if (isset($videos[0])) {
397
- $this->thumb_video = $videos[0];
398
- }
399
- }
400
-
401
- if ($image == '' && $this->url == '') {
402
- return;
403
- }
404
- //GET THE URL
405
- $meta .= sprintf('<meta property="og:url" content="%s" />', apply_filters('sq_open_graph_url', $this->url)) . "\n";
406
- if (!empty($this->thumb_images)) {
407
- foreach ($this->thumb_images as $image) {
408
- $meta .= sprintf('<meta property="og:image" content="%s" />', $image['src']) . "\n";
409
- $meta .= sprintf('<meta property="og:image:width" content="%s" />', ((isset($image['width']) && $image['width'] <> '') ? (int)$image['width'] : 500)) . "\n";
410
- if (isset($image['height']) && $image['height'] <> '')
411
- $meta .= sprintf('<meta property="og:image:height" content="%s" />', (int)$image['height']) . "\n";
412
- }
413
- }
414
-
415
- if ((isset($this->thumb_video) && $this->thumb_video <> '')) {
416
- $this->thumb_video = preg_replace('/(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"\'>\s]+)/si', "https://www.youtube.com/v/$1", $this->thumb_video);
417
- $meta .= sprintf('<meta property="og:video" content="%s" />', $this->thumb_video) . "\n";
418
- $meta .= sprintf('<meta property="og:video:width" content="%s" />', 500) . "\n";
419
- $meta .= sprintf('<meta property="og:video:height" content="%s" />', 280) . "\n";
420
- }
421
-
422
- $meta .= sprintf('<meta property="og:title" content="%s" />', apply_filters('sq_open_graph_title', $this->title)) . "\n";
423
- $meta .= sprintf('<meta property="og:description" content="%s" />', apply_filters('sq_open_graph_description', $this->description)) . "\n";
424
- $meta .= (($this->meta['blogname'] <> '') ? sprintf('<meta property="og:site_name" content="%s" />', apply_filters('sq_open_graph_site', $this->meta['blogname'])) . "\n" : '');
425
-
426
-
427
- $meta .= sprintf('<meta property="og:locale" content="%s" />', SQ_Tools::$options['sq_og_locale']) . "\n";
428
-
429
- if (is_author()) {
430
- $author = get_queried_object();
431
-
432
- $meta .= sprintf('<meta property="og:type" content="%s" />', 'profile') . "\n";
433
- $meta .= sprintf('<meta property="profile:first_name" content="%s" />', get_the_author_meta('first_name', $author->ID)) . "\n";
434
- $meta .= sprintf('<meta property="profile:last_name" content="%s" />', get_the_author_meta('last_name', $author->ID)) . "\n";
435
- } elseif (function_exists('is_product') && is_product()) {
436
- $meta .= sprintf('<meta property="og:type" content="%s" />', 'product') . "\n";
437
-
438
- $cat = get_the_terms($this->post->ID, 'product_cat');
439
- if (!empty($cat) && count($cat) > 0) {
440
- $meta .= sprintf('<meta property="product:category" content="%s" />', $cat[0]->name) . "\n";
441
- }
442
-
443
- if (class_exists('WC_Product')) {
444
- $product = new WC_Product($this->post->ID);
445
- if (isset($product->regular_price)) {
446
- if ((int)$product->regular_price > 0 && $product->regular_price <> $product->price && function_exists('get_woocommerce_currency')) {
447
- $meta .= sprintf('<meta property="product:original_price:amount" content="%s" />', $product->regular_price) . "\n";
448
- $meta .= sprintf('<meta property="product:original_price:currency" content="%s" />', get_woocommerce_currency()) . "\n";
449
- }
450
- }
451
-
452
- if (isset($product->price)) {
453
- if ((int)$product->price > 0 && function_exists('get_woocommerce_currency')) {
454
- $meta .= sprintf('<meta property="product:price:amount" content="%s" />', $product->price) . "\n";
455
- $meta .= sprintf('<meta property="product:price:currency" content="%s" />', get_woocommerce_currency()) . "\n";
456
- }
457
- }
458
-
459
- if (isset($product->sale_price)) {
460
- if ((int)$product->sale_price > 0 && function_exists('get_woocommerce_currency')) {
461
- $sales_price_from = get_post_meta($this->post->ID, '_sale_price_dates_from', true);
462
- $sales_price_to = get_post_meta($this->post->ID, '_sale_price_dates_to', true);
463
-
464
- $meta .= sprintf('<meta property="product:sale_price:amount" content="%s" />', $product->sale_price) . "\n";
465
- $meta .= sprintf('<meta property="product:sale_price:currency" content="%s" />', get_woocommerce_currency()) . "\n";
466
- if ($sales_price_from > 0) {
467
- $meta .= sprintf('<meta property="product:sale_price:start" content="%s" />', date("Y-m-d H:i:s", $sales_price_from)) . "\n";
468
- }
469
- if ($sales_price_to) {
470
- $meta .= sprintf('<meta property="product:sale_price:end" content="%s" />', date("Y-m-d H:i:s", $sales_price_to)) . "\n";
471
- }
472
-
473
- }
474
- }
475
- if (isset($product->weight)) {
476
- if ((int)$product->weight > 0 && get_option('woocommerce_weight_unit') <> '') {
477
- $meta .= sprintf('<meta property="product:weight:value" content="%s" />', $product->weight) . "\n";
478
- $meta .= sprintf('<meta property="product:weight:units" content="%s" />', get_option('woocommerce_weight_unit')) . "\n";
479
- }
480
- }
481
- }
482
-
483
- } elseif (!$this->isHomePage() && (is_single() || is_page())) {
484
- $meta .= sprintf('<meta property="og:type" content="%s" />', 'article') . "\n";
485
- $meta .= sprintf('<meta property="article:published_time" content="%s" />', get_the_time('c', $this->post->ID)) . "\n";
486
- if (SQ_Tools::$options['sq_facebook_account'] <> '') {
487
- $meta .= sprintf('<meta property="article:publisher" content="%s" />', SQ_Tools::$options['sq_facebook_account']) . "\n";
488
- }
489
- $category = get_the_category($this->post->ID);
490
- if (!empty($category) && $category[0]->cat_name <> 'Uncategorized') {
491
- $meta .= sprintf('<meta property="article:section" content="%s" />', $category[0]->cat_name) . "\n";
492
- }
493
- if ($this->keywords <> '') {
494
- $keywords = preg_split('/[,]+/', $this->keywords);
495
- if (is_array($keywords) && !empty($keywords)) {
496
- foreach ($keywords as $keyword) {
497
- $meta .= sprintf('<meta property="article:tag" content="%s" />', $keyword) . "\n";
498
- }
499
- }
500
- }
501
- } else {
502
- $meta .= sprintf('<meta property="og:type" content="%s" />', 'website') . "\n";
503
- }
504
-
505
- return apply_filters('sq_open_graph_meta', $meta);
506
- }
507
-
508
- /**
509
- * Get the canonical link for the current page
510
- *
511
- * @return string
512
- */
513
- public function setCanonical() {
514
- if ($url = $this->getCanonicalUrl(true)) {
515
- remove_action('wp_head', 'rel_canonical');
516
-
517
- return sprintf("<link rel=\"canonical\" href=\"%s\" />", $url) . "\n";
518
- }
519
-
520
- return '';
521
- }
522
-
523
- public function setRelPrevNext() {
524
- global $paged;
525
- $meta = "";
526
- if (!$this->isHomePage()) {
527
- if (get_previous_posts_link()) {
528
- $meta .= sprintf('<link rel="prev" href="%s" />', apply_filters('sq_prev_link', get_pagenum_link($paged - 1))) . "\n";
529
- }
530
- if (get_next_posts_link()) {
531
- $meta .= sprintf('<link rel="next" href="%s" />', apply_filters('sq_next_link', get_pagenum_link($paged + 1))) . "\n";
532
- }
533
- }
534
-
535
- return (($meta <> '') ? apply_filters('sq_prevnext_meta', $meta) . "\n" : '');
536
- }
537
-
538
- public function getTitle() {
539
- $this->getCustomTitle();
540
- return $this->title;
541
- }
542
-
543
- /**
544
- * Get the correct title of the article
545
- *
546
- * @return string
547
- */
548
- public function getCustomTitle() {
549
- $sep = ' | ';
550
-
551
- if (isset($this->title)) {
552
- return $this->title;
553
- }
554
-
555
- //If its a post/page
556
- if (!$this->isHomePage()) {
557
- //If is category
558
- if (is_category()) { //for category
559
- $category = get_category(get_query_var('cat'), false);
560
- $this->title = $category->cat_name;
561
- if ($this->title == '') {
562
- $this->title = $this->grabTitleFromPost();
563
- }
564
- if (is_paged()) {
565
- $this->title .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
566
- }
567
- } elseif (is_author()) { //for author
568
- if ($this->title == '') {
569
- $this->title = $this->grabTitleFromPost() . $sep . ucfirst($this->getAuthor('display_name'));
570
- }
571
- if ($this->title == '') {
572
- $this->title = __('About') . " " . ucfirst($this->getAuthor('display_name'));
573
- }
574
- if (is_paged()) {
575
- $this->title .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
576
- }
577
- } elseif (is_tag()) { //for tags
578
- if (is_paged()) {
579
- $tag = get_query_var('tag');
580
- $this->title = ucfirst(str_replace('-', ' ', $tag)) . $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
581
- }
582
- } elseif (is_archive()) { //for archive and products
583
- if (isset($this->post) && isset($this->post->ID)) {
584
- $this->title = $this->grabTitleFromPost($this->post->ID);
585
-
586
- //if woocommerce is installed and is a product category
587
- if (function_exists('is_product_category') && is_product_category()) {
588
- global $wp_query;
589
- $cat = $wp_query->get_queried_object();
590
- if (!empty($cat) && $cat->name <> '') {
591
- $this->title = $cat->name;
592
- }
593
- } else {
594
- $cat = get_the_terms($this->post->ID, 'category');
595
- if (!empty($cat)) {
596
- $this->title .= $sep . $cat[0]->name;
597
- }
598
- }
599
- }
600
-
601
- if (is_paged()) {
602
- $this->title .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
603
- }
604
- } elseif (is_single() || is_page() || is_singular() || in_array($this->post_type, $this->post_types)) {
605
- if (isset($this->post) && isset($this->post->ID)) {
606
- //is a post page
607
- $this->title = $this->grabTitleFromPost($this->post->ID);
608
-
609
- //if woocommerce is installed and is a product
610
- if (function_exists('is_product') && is_product()) {
611
- $cat = get_the_terms($this->post->ID, 'product_cat');
612
- if (!empty($cat) && count($cat) > 1) {
613
- $this->title .= $sep . $cat[0]->name;
614
- }
615
- }
616
- }
617
- }
618
-
619
- } elseif (SQ_Tools::$options ['sq_auto_title'] == 1) { /* Check if is a predefined Title for home page */
620
-
621
- //If the home page is a static page that has custom snippet
622
- if (is_page() && isset($this->post) && isset($this->post->ID) && $this->getAdvancedMeta($this->post->ID, 'title') <> '') {
623
- $this->title = $this->getAdvancedMeta($this->post->ID, 'title');
624
- } elseif (SQ_Tools::$options['sq_fp_title'] <> '') {
625
- $this->title = SQ_Tools::$options['sq_fp_title'];
626
- } else {
627
- if (isset($this->post->ID)) {
628
- $this->title = $this->grabTitleFromPost($this->post->ID);
629
- if ($this->title <> "" && $this->meta['blogname'] <> '') {
630
- $this->title .= $sep . $this->meta['blogname'];
631
- }
632
- } else {
633
- $this->title = get_the_title();
634
- }
635
- }
636
- } else {
637
- $this->title = get_the_title();
638
- }
639
- return apply_filters('sq_title', $this->title);
640
- }
641
-
642
- public function clearTitle($title) {
643
- if ($title <> '') {
644
- $title = SQ_Tools::i18n(trim(esc_html(ent2ncr(strip_tags($title)))));
645
- $title = addcslashes($title, '$');
646
- }
647
- return $title;
648
- }
649
-
650
- /**
651
- * Get the image from content
652
- * @global WP_Query $wp_query
653
- * @param integer $id Post ID
654
- * @return array
655
- */
656
- public function getImagesFromContent($id = null, $all = false) {
657
- $images = array();
658
- $post = $this->post;
659
-
660
- if (isset($id) && !$post = get_post($id)) {
661
- return $images;
662
- }
663
-
664
- //if not a specific post and description is sqitched on
665
- if (!isset($id) && SQ_Tools::$options['sq_auto_description'] == 1) { //
666
- if (($this->isHomePage() && SQ_Tools::$options['sq_fp_ogimage'] <> '')) {
667
- $images[] = array(
668
- 'src' => esc_url(SQ_Tools::$options['sq_fp_ogimage']),
669
- 'title' => $this->clearTitle($this->grabTitleFromPost($post->ID)),
670
- 'description' => $this->clearDescription($this->grabDescriptionFromPost($post->ID)),
671
- 'width' => null,
672
- 'height' => null,
673
- );
674
-
675
- return $images;
676
- }
677
- }
678
-
679
- if ($post && isset($post->ID)) {
680
- if ($url = $this->getAdvancedMeta($post->ID, 'ogimage')) {
681
- $images[] = array(
682
- 'src' => esc_url($url),
683
- 'title' => $this->clearTitle($this->grabTitleFromPost($post->ID)),
684
- 'description' => $this->clearDescription($this->grabDescriptionFromPost($post->ID)),
685
- 'width' => null,
686
- 'height' => null,
687
- );
688
- //don't add other images in OG to overwrite the custom image
689
- $this->custom_og_image = true;
690
- }
691
- if ($all || empty($images)) {
692
- if (has_post_thumbnail($post->ID)) {
693
- $attachment = get_post(get_post_thumbnail_id($post->ID));
694
- $url = wp_get_attachment_image_src($attachment->ID, 'full');
695
- $images[] = array(
696
- 'src' => esc_url($url[0]),
697
- 'title' => $this->clearTitle($attachment->post_title),
698
- 'description' => $this->clearDescription($attachment->post_excerpt),
699
- 'width' => $url[1],
700
- 'height' => $url[2],
701
- );
702
- }
703
- }
704
- if ($all || empty($images)) {
705
- if (isset($post->post_content)) {
706
- preg_match('/<img[^>]*src="([^"]*)"[^>]*>/i', $post->post_content, $match);
707
-
708
- if (!empty($match)) {
709
- preg_match('/alt="([^"]*)"/i', $match[0], $alt);
710
-
711
- if (strpos($match[1], '//') === false) {
712
- $match[1] = get_bloginfo('url') . $match[1];
713
- }
714
-
715
- $images[] = array(
716
- 'src' => esc_url($match[1]),
717
- 'title' => $this->clearTitle(!empty($alt[1]) ? $alt[1] : ''),
718
- 'description' => '',
719
- 'width' => null,
720
- 'height' => null,
721
- );
722
- }
723
- }
724
- }
725
- }
726
-
727
- return $images;
728
- }
729
-
730
- /**
731
- * Get the video from content
732
- * @param integer $id Post ID
733
- * @return type
734
- */
735
- public function getVideosFromContent($id = null) {
736
- $videos = array();
737
-
738
- if (isset($id)) {
739
- $post = get_post($id);
740
- } else {
741
- $post = $this->post;
742
- }
743
-
744
- if ($post && isset($post->ID)) {
745
- //if not
746
- if (!$this->custom_og_image) {
747
- if (isset($post->post_content)) {
748
- preg_match('/(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed)\/)([^\?&\"\'>\s]+)/si', $post->post_content, $match);
749
-
750
- if (isset($match[0])) {
751
- if (strpos($match[0], '//') !== false && strpos($match[0], 'http') === false) {
752
- $match[0] = 'http:' . $match[0];
753
- }
754
- $videos[] = esc_url($match[0]);
755
- }
756
-
757
- // preg_match('/(?:http(?:s)?:\/\/)?(?:fast\.wistia\.net\/(?:embed)\/(?:iframe)\/)([^\?&\"\'>\s]+)/si', $post->post_content, $match);
758
- //
759
- // if (isset($match[0])) {
760
- // if (strpos($match[0], '//') !== false && strpos($match[0], 'http') === false) {
761
- // $match[0] = 'http:' . $match[0];
762
- // }
763
- // $videos[] = esc_url($match[0]);
764
- // }
765
-
766
- preg_match('/(?:http(?:s)?:\/\/)?(?:fwd4\.wistia\.com\/(?:medias)\/)([^\?&\"\'>\s]+)/si', $post->post_content, $match);
767
-
768
- if (isset($match[0])) {
769
- $videos[] = esc_url('http://fast.wistia.net/embed/iframe/' . $match[1]);
770
- }
771
-
772
- preg_match('/class=["|\']([^"\']*wistia_async_([^\?&\"\'>\s]+)[^"\']*["|\'])/si', $post->post_content, $match);
773
-
774
- if (isset($match[0])) {
775
- $videos[] = esc_url('http://fast.wistia.net/embed/iframe/' . $match[2]);
776
- }
777
-
778
- preg_match('/src=["|\']([^"\']*(.mpg|.mpeg|.mp4|.mov|.wmv|.asf|.avi|.ra|.ram|.rm|.flv)["|\'])/i', $post->post_content, $match);
779
-
780
- if (isset($match[1])) {
781
- $videos[] = esc_url($match[1]);
782
- }
783
- }
784
- }
785
- }
786
-
787
- return $videos;
788
- }
789
-
790
- public function getDescription() {
791
- $this->getCustomDescription();
792
- return $this->description;
793
- }
794
-
795
- /**
796
- * Get the description from last/current article
797
- *
798
- * @return string
799
- */
800
- public function getCustomDescription() {
801
-
802
- $sep = ' | ';
803
- $description = '';
804
-
805
- //If not homepage
806
- if (!$this->isHomePage()) {
807
- //If is a category
808
- if (is_category()) { //for categories
809
- $category = get_category(get_query_var('cat'), false);
810
- $description = $category->category_description;
811
- if ($description == '') {
812
- $description = $category->cat_name;
813
- }
814
- if ($description == '') {
815
- $description = $this->grabDescriptionFromPost();
816
- }
817
-
818
- if (is_paged()) {
819
- $description .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
820
- }
821
-
822
- if ($this->isHomePage() && $description <> '') {
823
- if ($this->meta['blogname'] <> '') {
824
- $description .= $sep . $this->meta['blogname'];
825
- }
826
- }
827
- } elseif (is_author()) { //for author
828
- $description = $this->getAuthor('user_description');
829
- if ($description == '') {
830
- $description = $this->grabDescriptionFromPost() . $sep . $this->getAuthor('display_name');
831
- }
832
- if (is_paged()) {
833
- $description .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
834
- }
835
- } elseif (is_tag()) { //for tags
836
- $description = tag_description();
837
- if ($description == '') {
838
- $tag = single_tag_title('', false);
839
- $description = ucfirst($tag) . $sep . $this->grabDescriptionFromPost();
840
- }
841
- if (is_paged()) {
842
- $description .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
843
- }
844
- } elseif (is_archive()) { //for archive and products
845
- if (isset($this->post) && isset($this->post->ID)) {
846
- $description = $this->grabDescriptionFromPost($this->post->ID);
847
-
848
- //if woocommerce is installed and is a product category
849
- if (function_exists('is_product_category') && is_product_category()) {
850
- global $wp_query;
851
- $cat = $wp_query->get_queried_object();
852
- if (!empty($cat)) {
853
- if ($cat->description <> '' && strlen($cat->description) > 10) {
854
- $description = $cat->description;
855
- } else {
856
- $description .= $sep . $cat->name;
857
- }
858
- }
859
- } else {
860
- $cat = get_the_terms($this->post->ID, 'category');
861
- if (!empty($cat)) {
862
- $description .= $sep . $cat[0]->name;
863
- }
864
- }
865
- }
866
-
867
- if (is_paged()) {
868
- $description .= $sep . __('Page', _SQ_PLUGIN_NAME_) . " " . (int)get_query_var('paged');
869
- }
870
- } elseif (is_single() || is_page() || is_singular() || $this->checkPostsPage() || in_array($this->post_type, $this->post_types)) {
871
- if (isset($this->post) && isset($this->post->ID)) {
872
- //is a post page
873
- $description .= $this->grabDescriptionFromPost($this->post->ID);
874
-
875
- //if woocommerce is installed and is a product
876
- if (function_exists('is_product') && is_product()) {
877
- $cat = get_the_terms($this->post->ID, 'product_cat');
878
- if (!empty($cat) && count($cat) > 1) {
879
- $description .= $sep . $cat[0]->name;
880
- }
881
- }
882
- }
883
- }
884
- } elseif (SQ_Tools::$options['sq_auto_description'] == 1) {
885
- /* Check if is a predefined TitleIn Snippet */
886
- //If the home page is a static page that has custom snippet
887
- if (is_page() && isset($this->post) && isset($this->post->ID) && $this->getAdvancedMeta($this->post->ID, 'description') <> '') {
888
- $description = $this->getAdvancedMeta($this->post->ID, 'description');
889
- } elseif (SQ_Tools::$options ['sq_fp_description'] <> '') {
890
- $description = strip_tags(SQ_Tools::$options['sq_fp_description']);
891
- } else {
892
- $description = $this->grabDescriptionFromPost();
893
- }
894
- } else {
895
- $description = get_bloginfo('description');
896
- }
897
-
898
- $description = (($description <> '') ? $description : $this->title);
899
- if ($description <> '') {
900
-
901
- $this->description = apply_filters('sq_description', $description);
902
- if ($this->description <> '') { //prevent blank description
903
- return sprintf("<meta name=\"description\" content=\"%s\" />", $this->description);
904
- }
905
- }
906
-
907
- return '';
908
- }
909
-
910
- public function clearDescription($description) {
911
- if ($description <> '') {
912
- $search = array("'<script[^>]*?>.*?<\/script>'si", // strip out javascript
913
- "/<form.*?<\/form>/si",
914
- "/<iframe.*?<\/iframe>/si");
915
-
916
- if (function_exists('preg_replace')) {
917
- $description = preg_replace($search, '', $description);
918
- }
919
-
920
- $description = SQ_Tools::i18n(trim(esc_html(ent2ncr(strip_tags($description)))));
921
- $description = addcslashes($description, '$');
922
- }
923
-
924
- return $description;
925
- }
926
-
927
- /**
928
- * Get the keywords from articles
929
- *
930
- * @return string
931
- */
932
- public function getCustomKeyword() {
933
- $keywords = '';
934
-
935
- if ($this->checkPostsPage() && SQ_Tools::$options['sq_auto_description'] == 1) {
936
- $keywords = stripcslashes(SQ_Tools::i18n($this->grabKeywordsFromPost($this->post->ID)));
937
- } elseif (is_single() || is_page()) {
938
- $keywords = stripcslashes(SQ_Tools::i18n($this->grabKeywordsFromPost($this->post->ID)));
939
- } elseif (SQ_Tools::$options['sq_auto_description'] == 1) {
940
- $keywords = trim(SQ_Tools::i18n($this->grabKeywordsFromPost()));
941
- }
942
-
943
- /* Check if is a predefined Keyword */
944
- if (SQ_Tools::$options['sq_auto_description'] == 1) { //
945
- if (($this->isHomePage() &&
946
- SQ_Tools::$options['sq_fp_keywords'] <> '')
947
- ) {
948
- $keywords = strip_tags(SQ_Tools::$options ['sq_fp_keywords']);
949
- }
950
- }
951
-
952
- if (isset($keywords) && !empty($keywords) && !(is_home() && is_paged())) {
953
- $this->keywords = apply_filters('sq_keywords', str_replace('"', '', $keywords));
954
-
955
- return sprintf("<meta name=\"keywords\" content=\"%s\" />", $this->keywords);
956
- }
957
-
958
- return false;
959
- }
960
-
961
- /**
962
- * Get the copyright meta
963
- *
964
- * @return string
965
- */
966
- public function getCopyright() {
967
- $meta = '';
968
-
969
- $name = $this->getAuthor('display_name');
970
- if ($name == '') {
971
- $name = $this->meta['blogname'];
972
- }
973
-
974
- if ($name <> '') {
975
- $meta = sprintf("<meta name=\"dcterms.rightsHolder\" content=\"%s\" />" . "\n", apply_filters('sq_copyright', $name));
976
- }
977
-
978
- return apply_filters('sq_copyright_meta', $meta);
979
- }
980
-
981
- /**
982
- * Get the Google Plus Author meta
983
- *
984
- * @return string
985
- */
986
- public function getGooglePlusMeta() {
987
- $meta = '';
988
- $author = SQ_Tools::$options['sq_google_plus'];
989
-
990
- if (strpos($author, 'plus.google.com') === false && is_numeric($author)) {
991
- $author = 'https://plus.google.com/' . $author;
992
- }
993
-
994
- if ($author <> '' && !class_exists('ABH_Classes_ObjController')) {
995
- $meta = '<link rel="publisher" href="' . $author . '" />' . "\n";
996
- }
997
-
998
- return apply_filters('sq_publisher_meta', $meta);
999
- }
1000
-
1001
- /**
1002
- * Get the icons for serachengines
1003
- *
1004
- * @return string
1005
- */
1006
- public function getFavicon() {
1007
- $meta = '';
1008
- $rnd = '';
1009
-
1010
- if (current_user_can('manage_options')) {
1011
- $rnd = '?' . md5(SQ_Tools::$options['favicon']);
1012
- }
1013
-
1014
- if (SQ_Tools::$options['favicon'] <> '' && file_exists(_SQ_CACHE_DIR_ . SQ_Tools::$options['favicon'])) {
1015
- $meta .= "\n";
1016
-
1017
- if (!get_option('permalink_structure')) {
1018
- $favicon = get_bloginfo('wpurl') . '/index.php?sq_get=favicon';
1019
- $touchicon = get_bloginfo('wpurl') . '/index.php?sq_get=touchicon';
1020
- } else {
1021
- $favicon = get_bloginfo('wpurl') . '/favicon.icon' . $rnd;
1022
- $touchicon = get_bloginfo('wpurl') . '/touch-icon.png' . $rnd;
1023
- }
1024
- $meta .= sprintf("<link rel=\"shortcut icon\" href=\"%s\" />" . "\n", $favicon);
1025
- $meta .= sprintf("<link rel=\"apple-touch-icon\" href=\"%s\" />" . "\n", $touchicon);
1026
-
1027
- $appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
1028
- foreach ($appleSizes as $size) {
1029
- if (!get_option('permalink_structure')) {
1030
- $favicon = get_bloginfo('wpurl') . '/index.php?sq_get=touchicon&sq_size=' . $size;
1031
- } else {
1032
- $favicon = get_bloginfo('wpurl') . '/touch-icon' . $size . '.png' . $rnd;
1033
- }
1034
- $meta .= sprintf("<link rel=\"apple-touch-icon\" sizes=\"" . $size . "x" . $size . "\" href=\"%s\" />" . "\n", $favicon);
1035
- }
1036
- } else {
1037
- if (file_exists(ABSPATH . 'favicon.ico')) {
1038
- $meta .= sprintf("<link rel=\"shortcut icon\" href=\"%s\" />" . "\n", get_bloginfo('wpurl') . '/favicon.ico');
1039
- }
1040
- }
1041
- return apply_filters('sq_publisher_meta', $meta);
1042
- }
1043
-
1044
- /**
1045
- * Get the language meta
1046
- *
1047
- * @return string
1048
- */
1049
- public function getLanguage() {
1050
- $meta = '';
1051
- $language = get_bloginfo('language');
1052
-
1053
- if ($language <> '') {
1054
- $url = get_bloginfo('url');
1055
- if (strpos($language, '-') !== false) {
1056
- $hreflang = substr($language, 0, strpos($language, '-'));
1057
- }
1058
-
1059
-
1060
- $meta .= sprintf("<meta name=\"dc.language\" content=\"%s\" />", $language) . "\n";
1061
- }
1062
-
1063
- return apply_filters('sq_language_meta', $meta);
1064
- }
1065
-
1066
- /**
1067
- * Get the DC.publisher meta
1068
- *
1069
- * @return string
1070
- */
1071
- public function getDublinCore() {
1072
- $date = null;
1073
- $meta = '';
1074
-
1075
- $name = $this->getAuthor('display_name');
1076
- if (!$name) {
1077
- $name = $this->meta['blogname'];
1078
- }
1079
-
1080
- if ($name <> '') {
1081
- $meta .= sprintf("<meta name=\"dc.publisher\" content=\"%s\" />", $name) . "\n";
1082
- }
1083
-
1084
- $meta .= sprintf('<meta name="dc.title" content="%s" />', $this->title) . "\n";
1085
- $meta .= sprintf('<meta name="dc.description" content="%s" />', $this->description) . "\n";
1086
-
1087
- if ($this->isHomePage()) {
1088
- $date = date('Y-m-d', strtotime(get_lastpostmodified('gmt')));
1089
- } elseif (is_single() && isset($this->post->post_date)) {
1090
- $date = date('Y-m-d', strtotime($this->post->post_date));
1091
- }
1092
-
1093
- if (isset($date)) {
1094
- $meta .= sprintf("<meta name=\"dc.date.issued\" content=\"%s\" />", $date) . "\n";
1095
- }
1096
-
1097
- return apply_filters('sq_dublin_meta', $meta);
1098
- }
1099
-
1100
- /**
1101
- * Get the XML Sitemap meta
1102
- *
1103
- * @return string
1104
- */
1105
- public function getXMLSitemap() {
1106
- $meta = '';
1107
-
1108
- $xml_url = SQ_ObjController::getController('SQ_Sitemaps')->getXmlUrl('sitemap');
1109
-
1110
- if ($xml_url <> '') {
1111
- $meta = sprintf("<link rel=\"alternate\" type=\"application/rss+xml\" " . (($this->title <> '') ? "title=\"%s\"" : "") . " href=\"%s\" />", $this->title, $xml_url) . "\n";
1112
- }
1113
-
1114
- return apply_filters('sq_sitemap_meta', $meta);
1115
- }
1116
-
1117
- /**
1118
- * Get the google Webmaster Tool code
1119
- *
1120
- * @return string
1121
- */
1122
- public function getGoogleWT() {
1123
- $sq_google_wt = SQ_Tools::$options['sq_google_wt'];
1124
-
1125
- if ($this->isHomePage() && $sq_google_wt <> '') {
1126
- return sprintf("<meta name=\"google-site-verification\" content=\"%s\" />", $sq_google_wt) . "\n";
1127
- }
1128
-
1129
- return false;
1130
- }
1131
-
1132
- /**
1133
- * Get the google Analytics code
1134
- *
1135
- * @return string
1136
- */
1137
- public function getGoogleAnalytics() {
1138
- $sq_google_analytics = SQ_Tools::$options['sq_google_analytics'];
1139
-
1140
- if ($sq_google_analytics <> '') {
1141
- if (SQ_Tools::$options['sq_auto_amp']) {
1142
- return '<script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script>' . "\n";
1143
- } else {
1144
- SQ_ObjController::getController('SQ_DisplayController', false)
1145
- ->loadMedia('https://www.google-analytics.com/analytics.js');
1146
-
1147
- return sprintf("<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '%s', 'auto');ga('send', 'pageview');</script>", $sq_google_analytics);
1148
- }
1149
- }
1150
-
1151
- return false;
1152
- }
1153
-
1154
- public function getGoogleAnalyticsAMPBody() {
1155
- $sq_google_analytics = SQ_Tools::$options['sq_google_analytics'];
1156
-
1157
- if ($sq_google_analytics <> '') {
1158
- if (SQ_Tools::$options['sq_auto_amp']) {
1159
- return sprintf('<amp-analytics type="googleanalytics" id="analytics1"><script type="application/json">{"vars": {"account": "%s"},"triggers": {"trackPageview": {"on": "visible","request": "pageview"}}}</script></amp-analytics>', $sq_google_analytics) . "\n";
1160
- }
1161
- }
1162
- return '';
1163
- }
1164
-
1165
- public function getFacebookPixel() {
1166
- $sq_facebook_analytics = SQ_Tools::$options['sq_facebook_analytics'];
1167
- if ($sq_facebook_analytics <> '') {
1168
- $this->setPost($this->post);
1169
- $domain = str_replace(array('http://', 'http://', 'www.'), '', get_bloginfo('url'));
1170
- if ($this->isHomePage()) {
1171
- $events[] = array(
1172
- 'type' => 'track',
1173
- 'name' => 'PageView',
1174
- 'params' => array('page' => get_bloginfo('url'), 'domain' => $domain)
1175
- );
1176
- } else {
1177
- if (isset($this->post->ID)) {
1178
- $params['content_ids'] = array((string)$this->post->ID);
1179
- }
1180
-
1181
- $params['content_type'] = $this->post_type;
1182
-
1183
- if ($this->post_type == 'category') {
1184
- $category = get_category(get_query_var('cat'), false);
1185
- if (isset($category->name)) {
1186
- $params['content_category'] = $category->name;
1187
- }
1188
- } elseif ($this->post_type == 'product') {
1189
- $params['content_name'] = $this->post->post_title;
1190
- $cat = get_the_terms($this->post->ID, 'product_cat');
1191
- if (!empty($cat)) {
1192
- $params['content_category'] = $cat[0]->name;
1193
- }
1194
-
1195
- if (isset($_POST['product_id']) && isset($params['content_ids']) && isset($params['content_type'])) {
1196
- if (function_exists('wc_get_product') && function_exists('get_woocommerce_currency')) {
1197
- if ($product = wc_get_product((int)$_POST['product_id'])) {
1198
- $params['value'] = $product->get_price();
1199
- $params['currency'] = get_woocommerce_currency();
1200
- }
1201
- }
1202
-
1203
- $events[] = array(
1204
- 'type' => 'track',
1205
- 'name' => 'AddToCart',
1206
- 'params' => $params
1207
- );
1208
- }
1209
- } elseif ($this->post_type == 'search') {
1210
- $search = get_search_query(true);
1211
- if ($search <> '') {
1212
- $params['search_string'] = $search;
1213
- $events[] = array(
1214
- 'type' => 'track',
1215
- 'name' => 'Search',
1216
- 'params' => $params
1217
- );
1218
- }
1219
- } elseif ($this->post_type == 'checkout' && isset($this->post->ID)) {
1220
- global $woocommerce;
1221
- if (isset($woocommerce->cart->total) && $woocommerce->cart->total > 0) {
1222
- $params['value'] = $woocommerce->cart->total;
1223
-
1224
- if (isset($woocommerce->cart->cart_contents) && !empty($woocommerce->cart->cart_contents)) {
1225
- $quantity = 0;
1226
- foreach ($woocommerce->cart->cart_contents as $product) {
1227
- $quantity += $product['quantity'];
1228
- }
1229
- if ($quantity > 0) {
1230
- $params['num_items'] = $quantity;
1231
- }
1232
- }
1233
- $events[] = array(
1234
- 'type' => 'track',
1235
- 'name' => 'InitiateCheckout',
1236
- 'params' => $params
1237
- );
1238
- } elseif (SQ_Tools::getIsset('key')) {
1239
- $params['content_type'] = 'purchase';
1240
- global $wpdb;
1241
- $sql = "SELECT `post_id`
1242
- FROM `" . $wpdb->postmeta . "`
1243
- WHERE `meta_key` = '_order_key' AND `meta_value`='" . SQ_Tools::getValue('key') . "'";
1244
-
1245
- if ($post = $wpdb->get_row($sql)) {
1246
- if ($order = wc_get_order($post->post_id)) {
1247
- $params['content_type'] = "checkout";
1248
- $params['value'] = $order->get_total();
1249
- $params['currency'] = $order->get_order_currency();
1250
-
1251
- $events[] = array(
1252
- 'type' => 'track',
1253
- 'name' => 'Purchase',
1254
- 'params' => $params
1255
- );
1256
- }
1257
- }
1258
- }
1259
-
1260
-
1261
- } else {
1262
- $cat = get_the_terms($this->post->ID, 'category');
1263
- if (!empty($cat)) {
1264
- $params['content_category'] = $cat[0]->name;
1265
- }
1266
- }
1267
-
1268
- $params['page'] = $this->getCanonicalUrl();
1269
- $params['domain'] = $domain;
1270
-
1271
- if (isset($params['content_ids']) && isset($params['content_type'])) {
1272
- $events[] = array(
1273
- 'type' => 'track',
1274
- 'name' => 'ViewContent',
1275
- 'params' => $params
1276
- );
1277
- } else {
1278
- $events[] = array(
1279
- 'type' => 'trackCustom',
1280
- 'name' => 'GeneralEvent',
1281
- 'params' => $params
1282
- );
1283
- }
1284
-
1285
- $events[] = array(
1286
- 'type' => 'track',
1287
- 'name' => 'PageView',
1288
- 'params' => array('page' => $params['page'], 'domain' => $params['domain'])
1289
- );
1290
- }
1291
- $track = '';
1292
- foreach ($events as $event) {
1293
- $track .= "fbq('" . $event['type'] . "', '" . $event['name'] . "', '" . json_encode($event['params']) . "');";
1294
- }
1295
- //$track .= json_encode($this->post);
1296
- if ($sq_facebook_analytics <> '') {
1297
- if (SQ_Tools::$options['sq_auto_amp']) {
1298
- //not yet supported
1299
- } else {
1300
- return sprintf("<script>!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '%s');%s</script><noscript><img height='1' width='1' style='display:none'src='https://www.facebook.com/tr?id=%s&ev=PageView&noscript=1'/></noscript>" . "\n", $sq_facebook_analytics, $track, $sq_facebook_analytics);
1301
- }
1302
- }
1303
- }
1304
- return false;
1305
- }
1306
-
1307
- /**
1308
- * Get the Facebook Insights code
1309
- *
1310
- * @return string
1311
- */
1312
- public function getFacebookIns() {
1313
- $sq_facebook_insights = SQ_Tools::$options ['sq_facebook_insights'];
1314
-
1315
- if ($this->isHomePage() && $sq_facebook_insights <> '') {
1316
- return sprintf("<meta property=\"fb:admins\" content=\"%s\" />", $sq_facebook_insights) . "\n";
1317
- }
1318
-
1319
- return false;
1320
- }
1321
-
1322
- /**
1323
- * Get the Pinterest code
1324
- *
1325
- * @return string
1326
- */
1327
- public function getPinterest() {
1328
- $sq_pinterest = SQ_Tools::$options['sq_pinterest'];
1329
-
1330
- if ($this->isHomePage() && $sq_pinterest <> '') {
1331
- return sprintf("<meta name=\"p:domain_verify\" content=\"%s\" />", $sq_pinterest) . "\n";
1332
- }
1333
-
1334
- return false;
1335
- }
1336
-
1337
- /**
1338
- * Get the Alexa Tool code
1339
- *
1340
- * @return string
1341
- */
1342
- public function getAlexaT() {
1343
- $sq_alexa = SQ_Tools::$options['sq_alexa'];
1344
-
1345
- if ($this->isHomePage() && $sq_alexa <> '') {
1346
- return sprintf("<meta name=\"alexaVerifyID\" content=\"%s\" />", $sq_alexa) . "\n";
1347
- }
1348
-
1349
- return false;
1350
- }
1351
-
1352
- /**
1353
- * Get the bing Webmaster Tool code
1354
- *
1355
- * @return string
1356
- */
1357
- public function getBingWT() {
1358
- $sq_bing_wt = SQ_Tools::$options['sq_bing_wt'];
1359
-
1360
- if ($this->isHomePage() && $sq_bing_wt <> '') {
1361
- return sprintf("<meta name=\"msvalidate.01\" content=\"%s\" />", $sq_bing_wt) . "\n";
1362
- }
1363
-
1364
- return false;
1365
- }
1366
-
1367
- /**
1368
- * Get the JsonLD meta for this site
1369
- * @return string
1370
- */
1371
- public function getJsonLD() {
1372
- $meta = '';
1373
- $sep = ",\n";
1374
- $jsonld = SQ_ObjController::getModelService('JsonLD');
1375
- $markup = array();
1376
- if ($this->isHomePage()) {
1377
- if (isset(SQ_Tools::$options['sq_jsonld'][SQ_Tools::$options['sq_jsonld_type']])) {
1378
- $markup['@type'] = SQ_Tools::$options['sq_jsonld_type'];
1379
- $markup['@id'] = $this->url;
1380
- $markup['url'] = $this->url;
1381
-
1382
- foreach (SQ_Tools::$options['sq_jsonld'][SQ_Tools::$options['sq_jsonld_type']] as $key => $value) {
1383
- if ($value <> '') {
1384
- if ($key == 'contactType' || (SQ_Tools::$options['sq_jsonld_type'] == 'Organization' && $key == 'jobTitle')) {
1385
- continue;
1386
- }
1387
- if (SQ_Tools::$options['sq_jsonld_type'] == 'Organization' && $key == 'telephone') {
1388
- $markup['contactPoint'] = array(
1389
- '@type' => 'ContactPoint',
1390
- 'telephone' => $value,
1391
- 'contactType' => SQ_Tools::$options['sq_jsonld'][SQ_Tools::$options['sq_jsonld_type']]['contactType'],
1392
-
1393
- );
1394
- }
1395
-
1396
- if ($key == 'logo') {
1397
- if (SQ_Tools::$options['sq_jsonld_type'] == 'Person') {
1398
- $key = 'image';
1399
- }
1400
- $markup[$key] = array(
1401
- '@type' => 'ImageObject',
1402
- 'url' => $value,
1403
- );
1404
- } else {
1405
- $markup[$key] = $value;
1406
- }
1407
-
1408
- }
1409
- }
1410
- }
1411
- if (!empty($markup)) {
1412
- $socials = array();
1413
- if (SQ_Tools::$options['sq_twitter_account'] <> '') {
1414
- $socials[] = SQ_Tools::$options['sq_twitter_account'];
1415
- }
1416
- if (SQ_Tools::$options['sq_facebook_account'] <> '') {
1417
- $socials[] = SQ_Tools::$options['sq_facebook_account'];
1418
- }
1419
- if (SQ_Tools::$options['sq_google_plus'] <> '') {
1420
- $socials[] = SQ_Tools::$options['sq_google_plus'];
1421
- }
1422
- if (SQ_Tools::$options['sq_linkedin_account'] <> '') {
1423
- $socials[] = SQ_Tools::$options['sq_linkedin_account'];
1424
- }
1425
- if (SQ_Tools::$options['sq_pinterest_account'] <> '') {
1426
- $socials[] = SQ_Tools::$options['sq_pinterest_account'];
1427
- }
1428
- if (SQ_Tools::$options['sq_instagram_account'] <> '') {
1429
- $socials[] = SQ_Tools::$options['sq_instagram_account'];
1430
- }
1431
-
1432
- $markup['potentialAction'] = array(
1433
- '@type' => 'SearchAction',
1434
- 'target' => get_bloginfo('url') . '?s={search_string}',
1435
- 'query-input' => 'required name=search_string',
1436
- );
1437
-
1438
- if (!empty($socials)) {
1439
- $markup['sameAs'] = $socials;
1440
- }
1441
- }
1442
- //add current markup
1443
- $jsonld->set_data($markup);
1444
- } elseif ($this->post_type == 'post') {
1445
- $markup['@type'] = 'Article';
1446
- $markup['@id'] = $this->url;
1447
- $markup['url'] = $this->url;
1448
- if (isset($this->title)) {
1449
- $markup['name'] = $this->truncate($this->title, $this->min_title_length, $this->max_title_length);
1450
- }
1451
- if (isset($this->description)) {
1452
- $markup['headline'] = $this->truncate($this->description, $this->min_description_length, 110);
1453
- }
1454
- $markup['mainEntityOfPage'] = array(
1455
- '@type' => 'WebPage',
1456
- 'url' => $this->url
1457
- );
1458
-
1459
- if (!empty($this->thumb_images)) {
1460
- $markup['thumbnailUrl'] = $this->thumb_images[0]['src'];
1461
- }
1462
- if (isset($this->post->post_date)) {
1463
- $markup['datePublished'] = date('c', strtotime($this->post->post_date));
1464
- }
1465
- if (isset($this->post->post_modified)) {
1466
- $markup['dateModified'] = date('c', strtotime($this->post->post_modified));
1467
- }
1468
- if (!empty($this->thumb_images)) {
1469
- foreach ($this->thumb_images as $image) {
1470
- $markup['image'] = array(
1471
- "@type" => "ImageObject",
1472
- "url" => $image['src'],
1473
- "height" => ((isset($image['height']) && $image['height'] <> '') ? (int)$image['height'] : 500),
1474
- "width" => ((isset($image['width']) && $image['width'] <> '') ? (int)$image['width'] : 700),
1475
- );
1476
- break;
1477
- }
1478
- }
1479
- $markup['author'] = array(
1480
- "@type" => "Person",
1481
- "url" => $this->getAuthor('user_url'),
1482
- "name" => $this->getAuthor('display_name'),
1483
- );
1484
-
1485
- if (SQ_Tools::$options['sq_jsonld_type'] == 'Organization' && isset(SQ_Tools::$options['sq_jsonld'][SQ_Tools::$options['sq_jsonld_type']])) {
1486
-
1487
- $markup['publisher'] = array(
1488
- "@type" => SQ_Tools::$options['sq_jsonld_type'],
1489
- "url" => $this->url,
1490
- "name" => $this->getAuthor('display_name'),
1491
- );
1492
-
1493
- foreach (SQ_Tools::$options['sq_jsonld'][SQ_Tools::$options['sq_jsonld_type']] as $key => $value) {
1494
- if ($value <> '') {
1495
- if ($key == 'contactType' || $key == 'telephone') {
1496
- continue;
1497
- }
1498
-
1499
- if ($key == 'logo') {
1500
- $markup['publisher']['logo'] = array(
1501
- "@type" => "ImageObject",
1502
- "url" => $value
1503
- );
1504
-
1505
- } else {
1506
- $markup['publisher'][$key] = $value;
1507
- }
1508
- }
1509
- }
1510
- }
1511
- $markup['keywords'] = str_replace(',', '","', $this->grabKeywordsFromPost());
1512
-
1513
- //add current markup
1514
- $jsonld->set_data($markup);
1515
- } elseif (is_author()) {
1516
- $markup['@type'] = 'Person';
1517
- $markup['@id'] = $this->getAuthor('user_url');
1518
- $markup['url'] = $this->getAuthor('user_url');
1519
- $markup['name'] = $this->getAuthor('display_name');
1520
-
1521
- //add current markup
1522
- $jsonld->set_data($markup);
1523
- }
1524
-
1525
- return apply_filters('sq_json_ld_meta', $jsonld->getStructuredData());
1526
- }
1527
-
1528
- /**
1529
- * *******************************************************************
1530
- * ******************************************************************** */
1531
-
1532
- /**
1533
- * Get the title from the curent/last post
1534
- *
1535
- * @return string
1536
- */
1537
- public function grabTitleFromPost($id = null) {
1538
- global $wp_query;
1539
- $post = null;
1540
- $title = '';
1541
- $advtitle = '';
1542
-
1543
- if (isset($id)) {
1544
- $post = get_post($id);
1545
- }
1546
-
1547
- if (!$post) {
1548
- if (!empty($wp_query->posts))
1549
- foreach ($wp_query->posts as $post) {
1550
- $id = (is_attachment()) ? ($post->post_parent) : ($post->ID);
1551
- $post = get_post($id);
1552
-
1553
- break;
1554
- }
1555
- }
1556
-
1557
- if ($post) {
1558
- if (!$this->isHomePage())
1559
- $title = SQ_Tools::i18n($post->post_title);
1560
-
1561
- //If there is title saved in database
1562
- if ($advtitle = $this->getAdvancedMeta($post->ID, 'title')) {
1563
- $title = SQ_Tools::i18n($advtitle);
1564
- } elseif ($advtitle = $this->getOtherPluginsMeta($post->ID, 'title')) {
1565
- $title = SQ_Tools::i18n($advtitle);
1566
- }
1567
- }
1568
-
1569
- return $title;
1570
- }
1571
-
1572
- /**
1573
- * Get the description from the curent/last post
1574
- *
1575
- * @return string
1576
- */
1577
- public function grabDescriptionFromPost($id = null) {
1578
- global $wp_query;
1579
- $post = null;
1580
-
1581
- if (isset($id)) {
1582
- $post = get_post($id);
1583
- }
1584
-
1585
- $description = '';
1586
- $advdescription = '';
1587
- //echo 'post: ' . get_the_ID();
1588
- if (!$post) {
1589
- if (!empty($wp_query->posts))
1590
- foreach ($wp_query->posts as $post) {
1591
- $id = (is_attachment()) ? ($post->post_parent) : ($post->ID);
1592
- $post = get_post($id);
1593
- break;
1594
- }
1595
- }
1596
-
1597
-
1598
- if ($post) {
1599
- if (!$this->isHomePage()) {
1600
- $description = $this->truncate(SQ_Tools::i18n($post->post_excerpt), $this->min_description_length, $this->max_description_length);
1601
- if (!$description) {
1602
- $description = $this->truncate(SQ_Tools::i18n($post->post_content), $this->min_description_length, $this->max_description_length);
1603
- }
1604
- }
1605
-
1606
- //If there is description saved in database
1607
- if ($advdescription = $this->getAdvancedMeta($post->ID, 'description')) {
1608
- $description = SQ_Tools::i18n($advdescription);
1609
- } elseif ($advdescription = $this->getOtherPluginsMeta($post->ID, 'description')) {
1610
- $description = SQ_Tools::i18n($advdescription);
1611
- }
1612
- }
1613
- // "internal whitespace trim"
1614
-
1615
- $description = preg_replace("/\s\s+/u", " ", $description);
1616
-
1617
- return $description;
1618
- }
1619
-
1620
- /**
1621
- * Get the keywords from the curent/last post and from density
1622
- *
1623
- * @return array
1624
- */
1625
- public function grabKeywordsFromPost($id = null) {
1626
- global $wp_query;
1627
-
1628
- $this->max_keywords = ($this->max_keywords > 0 ? ($this->max_keywords - 1) : 0);
1629
- if ($this->max_keywords == 0) {
1630
- return;
1631
- }
1632
-
1633
- $keywords = array();
1634
- $advkeywords = '';
1635
-
1636
-
1637
- if (isset($id) && $post = get_post($id)) {
1638
- $density = array();
1639
-
1640
- if (SQ_Tools::$options['sq_keywordtag'] == 1) {
1641
- foreach (wp_get_post_tags($id) as $keyword) {
1642
- $keywords[] = SQ_Tools::i18n($keyword->name);
1643
- }
1644
- } else {
1645
- if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($post->ID)) {
1646
- if (isset($json->keyword)) {
1647
- $keywords[] = SQ_Tools::i18n($json->keyword);
1648
- }
1649
- }
1650
- }
1651
-
1652
- if (count($keywords) <= $this->max_keywords) {
1653
- if ($advkeywords = $this->getAdvancedMeta($post->ID, 'keywords')) {
1654
- $keywords[] = SQ_Tools::i18n($advkeywords);
1655
- }
1656
- }
1657
- if (sizeof($keywords) > $this->max_keywords) {
1658
- $keywords = array_slice($keywords, 0, $this->max_keywords);
1659
- }
1660
- } else {
1661
- if (is_404()) {
1662
- return null;
1663
- }
1664
-
1665
- if (!is_home() && !is_page() && !is_single() && !$this->checkFrontPage() && !$this->checkPostsPage()) {
1666
- return null;
1667
- }
1668
-
1669
- if (is_home()) {
1670
- if (isset($wp_query->posts) && !empty($wp_query->posts)) {
1671
- $posts = (array)$wp_query->posts;
1672
-
1673
- if (SQ_Tools::$options['sq_keywordtag'] == 1) {
1674
- foreach ($posts as $post) {
1675
- foreach (wp_get_post_tags($post->ID) as $keyword) {
1676
- $keywords[] = SQ_Tools::i18n($keyword->name);
1677
- }
1678
- }
1679
- }
1680
-
1681
- if (sizeof($keywords) > $this->max_keywords) {
1682
- $keywords = array_slice($keywords, 0, $this->max_keywords);
1683
- }
1684
- }
1685
- }
1686
- if (count($keywords) <= $this->max_keywords) {
1687
- if (isset($wp_query->posts) && !empty($wp_query->posts)) {
1688
- $posts = (array)$wp_query->posts;
1689
-
1690
- foreach ($posts as $post) {
1691
- $id = (is_attachment()) ? ($post->post_parent) : ($post->ID);
1692
-
1693
- if (SQ_Tools::$options['sq_keywordtag'] == 1) {
1694
- foreach (wp_get_post_tags($id) as $keyword) {
1695
- $keywords[] = SQ_Tools::i18n($keyword->name);
1696
- }
1697
- }
1698
- // autometa
1699
- $autometa = stripcslashes(get_post_meta($id, 'autometa', true));
1700
- //$autometa = stripcslashes(get_post_meta($post->ID, "autometa", true));
1701
- if (isset($autometa) && !empty($autometa)) {
1702
-
1703
- $autometa_array = explode(' ', $autometa);
1704
- foreach ($autometa_array as $e) {
1705
- $keywords[] = SQ_Tools::i18n($e);
1706
- }
1707
- }
1708
- }
1709
- }
1710
- }
1711
- }
1712
-
1713
- //If there are keywords saved in database
1714
- if ($advkeywords = $this->getAdvancedMeta($post->ID, 'keyword')) {
1715
- $keywords[] = SQ_Tools::i18n($advkeywords);
1716
- }
1717
-
1718
- //If there are keywords in other plugins
1719
- if ($advkeywords = $this->getOtherPluginsMeta($post->ID, 'keyword')) {
1720
- $keywords[] = SQ_Tools::i18n($advkeywords);
1721
- }
1722
-
1723
- return $this->getUniqueKeywords($keywords);
1724
- }
1725
-
1726
- /**
1727
- * Find the correct canonical url
1728
- *
1729
- * @return string
1730
- */
1731
- public function getCanonicalUrl($external = false) {
1732
- global $wp_query;
1733
-
1734
- if (!isset($wp_query) || is_404() || is_search()) {
1735
- return false;
1736
- }
1737
-
1738
- //If external is TRUE, get the original canonical link set
1739
- if ($external) {
1740
- if (isset($this->post->ID) && $link = $this->getAdvancedMeta($this->post->ID, 'canonical')) {
1741
- if ($link <> '') {
1742
- return apply_filters('sq_canonical', $link);
1743
- }
1744
- }
1745
- }
1746
-
1747
- //If we have the Post ID
1748
- if (isset($this->post->ID)) {
1749
- $link = get_permalink($this->post->ID);
1750
- $link = $this->getPaged($link);
1751
- if ($link <> '') {
1752
- return apply_filters('sq_canonical', $link);
1753
- }
1754
- }
1755
-
1756
- //Find the canonical
1757
- $haspost = (count($wp_query->posts) > 0);
1758
-
1759
- if (get_query_var('m') <> '') {
1760
- $m = preg_replace('/[^0-9]/', '', get_query_var('m'));
1761
- switch (strlen($m)) {
1762
- case 4:
1763
- $link = get_year_link($m);
1764
- break;
1765
- case 6:
1766
- $link = get_month_link(substr($m, 0, 4), substr($m, 4, 2));
1767
- break;
1768
- case 8:
1769
- $link = get_day_link(substr($m, 0, 4), substr($m, 4, 2), substr($m, 6, 2));
1770
- break;
1771
- default:
1772
- return false;
1773
- }
1774
- } elseif ((is_single() || is_page()) && $haspost) {
1775
- $post = $wp_query->posts[0];
1776
- $link = get_permalink($post->ID);
1777
- $link = $this->getPaged($link);
1778
- } elseif ((is_single() || is_page()) && $haspost) {
1779
- $post = $wp_query->posts[0];
1780
- $link = get_permalink($post->ID);
1781
- $link = $this->getPaged($link);
1782
- } elseif (is_author() && $haspost) {
1783
- $link = $this->getAuthor('user_url');
1784
- } elseif (is_category() && $haspost) {
1785
- $link = $this->getPaged(get_category_link(get_query_var('cat')));
1786
- } else if (is_tag() && $haspost) {
1787
- $tag = get_term_by('slug', get_query_var('tag'), 'post_tag');
1788
- if (!empty($tag->term_id)) {
1789
- $link = get_tag_link($tag->term_id);
1790
- }
1791
- $link = $this->getPaged($link);
1792
- } elseif (is_day() && $haspost) {
1793
- $link = get_day_link(get_query_var('year'), get_query_var('monthnum'), get_query_var('day'));
1794
- } elseif (is_month() && $haspost) {
1795
- $link = get_month_link(get_query_var('year'), get_query_var('monthnum'));
1796
- } elseif (is_year() && $haspost) {
1797
- $link = get_year_link(get_query_var('year'));
1798
- } elseif (is_home()) {
1799
- if ((get_option('show_on_front') == 'page') && ($pageid = get_option('page_for_posts'))) {
1800
- $link = trailingslashit($this->getPaged(get_permalink($pageid)));
1801
- } else {
1802
- if (function_exists('icl_get_home_url')) {
1803
- $link = icl_get_home_url();
1804
- } else {
1805
- $link = get_option('home');
1806
- }
1807
- $link = trailingslashit($this->getPaged($link));
1808
- }
1809
- } elseif (is_tax() && $haspost) {
1810
- $taxonomy = get_query_var('taxonomy');
1811
- $term = get_query_var('term');
1812
- $link = $this->getPaged(
1813
- get_term_link($term, $taxonomy));
1814
- } else {
1815
- return false;
1816
- }
1817
-
1818
- return apply_filters('sq_canonical', $link);
1819
- }
1820
-
1821
- public function getAuthor($what = 'user_nicename') {
1822
- if (!isset($this->author)) {
1823
- if (is_author()) {
1824
- $this->author = get_userdata(get_query_var('author'));
1825
- } elseif (is_single() && isset($this->post->post_author)) {
1826
- $this->author = get_userdata((int)$this->post->post_author)->data;
1827
- }
1828
- }
1829
-
1830
- if (isset($this->author)) {
1831
-
1832
- if ($what == 'user_url' && $this->author->$what == '') {
1833
- return get_author_posts_url($this->author->ID, $this->author->user_nicename);
1834
- }
1835
- if (isset($this->author->$what)) {
1836
- return $this->author->$what;
1837
- }
1838
- }
1839
-
1840
- return false;
1841
- }
1842
-
1843
- public function getPaged($link) {
1844
- $page = (int)get_query_var('paged');
1845
- if ($page && $page > 1) {
1846
- $link = trailingslashit($link) . "page/" . "$page/";
1847
- }
1848
- return $link;
1849
- }
1850
-
1851
- /**
1852
- * Check if is the homepage
1853
- *
1854
- * @return bool
1855
- */
1856
- public function isHomePage() {
1857
- global $wp_query;
1858
-
1859
- if (isset($wp_query->queried_object_id)) {
1860
- $this->post = get_post($wp_query->queried_object_id);
1861
-
1862
- }
1863
-
1864
- //Check if blog posts page
1865
- if (is_home() && $wp_query->is_posts_page) {
1866
- return false;
1867
- }
1868
-
1869
- return (is_home() || (isset($wp_query->query) && empty($wp_query->query) && !is_preview()));
1870
- }
1871
-
1872
- public function isHtmlHeader() {
1873
- $headers = headers_list();
1874
-
1875
- foreach ($headers as $index => $value) {
1876
- if (strpos($value, ':') !== false) {
1877
- $exploded = @explode(': ', $value);
1878
- if (count($exploded) > 1) {
1879
- $headers[$exploded[0]] = $exploded[1];
1880
- }
1881
- }
1882
- }
1883
-
1884
- if (isset($headers['Content-Type'])) {
1885
- if (strpos($headers['Content-Type'], 'text/html') !== false) {
1886
- return true;
1887
- }
1888
- } else {
1889
- return false;
1890
- }
1891
-
1892
- return false;
1893
- }
1894
-
1895
- /**
1896
- * Check if page is shown in front
1897
- *
1898
- * @return bool
1899
- */
1900
- public function checkFrontPage() {
1901
- return is_page() && get_option('show_on_front') == 'page' && isset($this->post->ID) && $this->post->ID == get_option('page_on_front');
1902
- }
1903
-
1904
- /**
1905
- * Check if page is shown in home
1906
- *
1907
- * @return bool
1908
- */
1909
- public function checkPostsPage() {
1910
- return is_home() && get_option('show_on_front') == 'page' && isset($this->post->ID) && $this->post->ID == get_option('page_for_posts');
1911
- }
1912
-
1913
- public function truncate($text, $min, $max) {
1914
- if (function_exists('strip_tags')) {
1915
- $text = strip_tags($text);
1916
- }
1917
- $text = str_replace(']]>', ']]&gt;', $text);
1918
- $text = @preg_replace('|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);
1919
- $text = strip_tags($text);
1920
-
1921
- if ($max < strlen($text)) {
1922
- while ($text[$max] != ' ' && $max > $min) {
1923
- $max--;
1924
- }
1925
- }
1926
- $text = substr($text, 0, $max);
1927
- return trim(stripcslashes($text));
1928
- }
1929
-
1930
-
1931
- /**
1932
- * Show just distinct keywords
1933
- *
1934
- * @return string
1935
- */
1936
- public function getUniqueKeywords($keywords) {
1937
- $all = array();
1938
- if (is_array($keywords)) {
1939
- foreach ($keywords as $word) {
1940
- if (function_exists('mb_strtolower')) {
1941
- $all[] = mb_strtolower($word, get_bloginfo('charset'));
1942
- } else {
1943
- $all[] = strtolower($word);
1944
- }
1945
- }
1946
- }
1947
-
1948
- if (is_array($all) && count($all) > 0) {
1949
- $all = array_unique($all);
1950
- if (sizeof($all) > $this->max_keywords) {
1951
- $all = array_slice($all, 0, $this->max_keywords);
1952
- }
1953
-
1954
- return implode(',', $all);
1955
- }
1956
-
1957
- return '';
1958
- }
1959
-
1960
- /**
1961
- * Check if other plugin are/were installed and don't change the SEO
1962
- *
1963
- * @param type $post_id
1964
- * @return boolean
1965
- */
1966
- public function getAdvancedMeta($post_id, $meta = 'title') {
1967
- global $wpdb;
1968
-
1969
- $field = '';
1970
- $cond = '';
1971
-
1972
- if (!isset($post_id) || (int)$post_id == 0) {
1973
- return '';
1974
- }
1975
-
1976
- switch ($meta) {
1977
- case 'title':
1978
- $field = '_sq_fp_title';
1979
- break;
1980
- case 'description':
1981
- $field = '_sq_fp_description';
1982
- break;
1983
- case 'keyword':
1984
- $field = '_sq_fp_keywords';
1985
- break;
1986
- case 'ogimage':
1987
- $field = '_sq_fp_ogimage';
1988
- break;
1989
- case 'canonical':
1990
- $field = '_sq_canonical';
1991
- break;
1992
- default:
1993
- $field = '_sq_fp_title';
1994
- }
1995
-
1996
- if ($field <> '' && isset($this->meta[$post_id][$field])) {
1997
- return $this->meta[$post_id][$field];
1998
- }
1999
-
2000
- // Get the custom Squirrly meta
2001
- //////////////////////////////////////////
2002
- $fields = array('_sq_fp_title' => '', '_sq_fp_description' => '', '_sq_fp_keywords' => '', '_sq_fp_ogimage' => '', '_sq_canonical' => '');
2003
-
2004
- $sql = "SELECT `meta_key`, `meta_value`
2005
- FROM `" . $wpdb->postmeta . "`
2006
- WHERE `post_id`=" . (int)$post_id;
2007
-
2008
- if ($rows = $wpdb->get_results($sql)) {
2009
- foreach ($rows as $row) {
2010
- if (array_key_exists($row->meta_key, $fields)) {
2011
- $this->meta[$post_id][$row->meta_key] = $row->meta_value;
2012
- }
2013
- }
2014
- }
2015
- if (isset($this->meta[$post_id]) && is_array($this->meta[$post_id])) {
2016
- $this->meta[$post_id] = array_merge($fields, $this->meta[$post_id]);
2017
- } else {
2018
- $this->meta[$post_id] = $fields;
2019
- }
2020
- //////////////////////////////////////////
2021
-
2022
- if ($field <> '') {
2023
- return $this->meta[$post_id][$field];
2024
- }
2025
- /////////////
2026
- return false;
2027
- }
2028
-
2029
- /**
2030
- * Check if other plugin are/were installed and don't change the SEO
2031
- *
2032
- * @param type $post_id
2033
- * @return boolean
2034
- */
2035
- public function getOtherPluginsMeta($post_id, $meta = 'title') {
2036
- global $wpdb;
2037
-
2038
- $field = '';
2039
- $cond = '';
2040
-
2041
- if (!isset($post_id) || (int)$post_id == 0) {
2042
- return '';
2043
- }
2044
-
2045
- //check yoast
2046
- switch ($meta) {
2047
- case 'title':
2048
- $field = '_yoast_wpseo_title';
2049
- break;
2050
- case 'description':
2051
- $field = '_yoast_wpseo_metadesc';
2052
- break;
2053
- case 'keyword':
2054
- $field = '_yoast_wpseo_focuskw';
2055
- break;
2056
- default:
2057
- $field = '_yoast_wpseo_title';
2058
- }
2059
-
2060
- if ($field <> '' && isset($this->meta[$post_id][$field])) {
2061
- return $this->meta[$post_id][$field];
2062
- }
2063
-
2064
- // Get the custom Squirrly meta
2065
- //////////////////////////////////////////
2066
- $fields = array('_yoast_wpseo_title' => '', '_yoast_wpseo_metadesc' => '', '_yoast_wpseo_focuskw' => '');
2067
-
2068
- $sql = "SELECT `meta_key`, `meta_value`
2069
- FROM `" . $wpdb->postmeta . "`
2070
- WHERE `post_id`=" . (int)$post_id;
2071
-
2072
- $rows = $wpdb->get_results($sql);
2073
- if ($rows) {
2074
- foreach ($rows as $row) {
2075
- if (array_key_exists($row->meta_key, $fields)) {
2076
- $this->meta[$post_id][$row->meta_key] = $row->meta_value;
2077
- }
2078
- }
2079
- }
2080
- if (isset($this->meta[$post_id]) && is_array($this->meta[$post_id])) {
2081
- $this->meta[$post_id] = array_merge($fields, $this->meta[$post_id]);
2082
- } else {
2083
- $this->meta[$post_id] = $fields;
2084
- }
2085
- //////////////////////////////////////////
2086
- if ($field <> '') {
2087
- return $this->meta[$post_id][$field];
2088
- }
2089
- /////////////
2090
- return false;
2091
- }
2092
-
2093
- /**
2094
- * ROBOTSTXT
2095
- */
2096
- // add sitemap location in robots.txt generated by WP
2097
- public function robots($content = '') {
2098
- global $blog_id;
2099
-
2100
- /** display robots.txt */
2101
- header('Status: 200 OK', true, 200);
2102
- header('Content-type: text/plain; charset=' . get_bloginfo('charset'));
2103
-
2104
-
2105
- echo "\n# Squirrly SEO Robots";
2106
-
2107
- if (get_option('blog_public') != 1) {
2108
- echo "\n# Squirrly Sitemaps is disabled. Please see Site Visibility on Settings > Reading.";
2109
- } else {
2110
- if (SQ_Tools::$options['sq_auto_sitemap'] == 1) {
2111
- foreach ((array)SQ_Tools::$options['sq_sitemap'] as $name => $sitemap) {
2112
- if ($name == 'sitemap-product' && !SQ_ObjController::getModel('SQ_BlockSettingsSeo')->isEcommerce()) {
2113
- continue;
2114
- }
2115
- if ($sitemap[1] == 1 || $sitemap[1] == 2) {
2116
- echo "\nSitemap: " . trailingslashit(get_bloginfo('url')) . $sitemap[0];
2117
- }
2118
- }
2119
- }
2120
-
2121
- if (empty(SQ_Tools::$options['sq_sitemap']))
2122
- echo "\n# No Squirrly SEO Robots found. ";
2123
- }
2124
- echo "\n\n";
2125
-
2126
- if (!empty(SQ_Tools::$options['sq_robots_permission'])) {
2127
- foreach ((array)SQ_Tools::$options['sq_robots_permission'] as $robot_txt)
2128
- echo $robot_txt . "\n";
2129
- }
2130
- echo "\n\n";
2131
-
2132
- echo $content;
2133
- exit;
2134
- }
2135
-
2136
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/SQ_Sitemaps.php DELETED
@@ -1,453 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Squirrly SEO - Sitemap Model
5
- *
6
- * Used to get the sitemap format for each type
7
- *
8
- * @class Model_SQ_Sitemaps
9
- */
10
- class Model_SQ_Sitemaps {
11
-
12
- var $args = array();
13
- var $frequency;
14
- var $type;
15
-
16
- public function __construct() {
17
- //For sitemap ping
18
- $this->args['timeout'] = 5;
19
-
20
- $this->frequency = array();
21
- $this->frequency['daily'] = array('sitemap-home' => array(1, 'daily'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'daily'), 'sitemap-page' => array(0.6, 'weekly'), 'sitemap-category' => array(0.5, 'weekly'), 'sitemap-post_tag' => array(0.5, 'daily'), 'sitemap-archive' => array(0.3, 'monthly'), 'sitemap-author' => array(0.3, 'weekly'), 'sitemap-custom-tax' => array(0.3, 'weekly'), 'sitemap-custom-post' => array(0.8, 'daily'));
22
- $this->frequency['weekly'] = array('sitemap-home' => array(1, 'weekly'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'weekly'), 'sitemap-page' => array(0.6, 'monthly'), 'sitemap-category' => array(0.3, 'monthly'), 'sitemap-post_tag' => array(0.5, 'weekly'), 'sitemap-archive' => array(0.3, 'monthly'), 'sitemap-author' => array(0.3, 'weekly'), 'sitemap-custom-tax' => array(0.3, 'weekly'), 'sitemap-custom-post' => array(0.8, 'weekly'));
23
- $this->frequency['monthly'] = array('sitemap-home' => array(1, 'monthly'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'monthly'), 'sitemap-page' => array(0.6, 'monthly'), 'sitemap-category' => array(0.3, 'monthly'), 'sitemap-post_tag' => array(0.5, 'monthly'), 'sitemap-archive' => array(0.3, 'monthly'), 'sitemap-author' => array(0.3, 'monthly'), 'sitemap-custom-tax' => array(0.3, 'monthly'), 'sitemap-custom-post' => array(0.8, 'monthly'));
24
- $this->frequency['yearly'] = array('sitemap-home' => array(1, 'monthly'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'monthly'), 'sitemap-page' => array(0.6, 'yearly'), 'sitemap-category' => array(0.3, 'yearly'), 'sitemap-post_tag' => array(0.5, 'monthly'), 'sitemap-archive' => array(0.3, 'yearly'), 'sitemap-author' => array(0.3, 'yearly'), 'sitemap-custom-tax' => array(0.3, 'yearly'), 'sitemap-custom-post' => array(0.8, 'monthly'));
25
- }
26
-
27
- /**
28
- * Add the Sitemap Index
29
- * @global type $polylang
30
- * @return type
31
- */
32
- public function getHomeLink() {
33
- $homes = array();
34
- $homes['contains'] = array();
35
- global $polylang;
36
-
37
- if (isset($polylang)) {
38
- foreach ($polylang->get_languages_list() as $term) {
39
- $xml = array();
40
- $xml['loc'] = esc_url($polylang->get_home_url($term));
41
- $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
42
- $xml['changefreq'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']]['sitemap-home'][1];
43
- $xml['priority'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']]['sitemap-home'][0];
44
- $homes[] = $xml;
45
- }
46
- } else {
47
- $xml = array();
48
- $xml['loc'] = home_url();
49
- $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
50
- $xml['changefreq'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']]['sitemap-home'][1];
51
- $xml['priority'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']]['sitemap-home'][0];
52
- if ($post_id = get_option('page_on_front')) {
53
- if (SQ_Tools::$options['sq_sitemap_show']['images'] == 1) {
54
- if ($images = SQ_ObjController::getModel('SQ_Frontend')->getImagesFromContent($post_id, true)) {
55
- array_push($homes['contains'], 'image');
56
- $xml['image:image'] = array();
57
- foreach ($images as $image) {
58
- if (empty($image['src'])) {
59
- continue;
60
- }
61
-
62
-
63
- $xml['image:image'][] = array(
64
- 'image:loc' => $image['src'],
65
- 'image:title' => SQ_ObjController::getModel('SQ_Frontend')->clearTitle($image['title']),
66
- 'image:caption' => SQ_ObjController::getModel('SQ_Frontend')->clearDescription($image['description']),
67
- );
68
- }
69
- }
70
- }
71
- }
72
- $homes[] = $xml;
73
- unset($xml);
74
- }
75
-
76
- return $homes;
77
- }
78
-
79
- /**
80
- * Add posts/pages in sitemap
81
- * @return type
82
- */
83
- public function getListPosts() {
84
- global $wp_query;
85
- $wp_query->get_posts();
86
- $posts = array();
87
- $posts['contains'] = array();
88
- if (have_posts()) {
89
- while (have_posts()) {
90
- the_post();
91
-
92
- //do not incude password protected pages in sitemap
93
- if (post_password_required()) {
94
- continue;
95
- }
96
-
97
- $post = get_post();
98
-
99
- $xml = array();
100
- $xml['loc'] = esc_url(get_permalink());
101
- $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
102
- $xml['changefreq'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$this->type][1];
103
- $xml['priority'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$this->type][0];
104
-
105
- if (SQ_Tools::$options['sq_sitemap_show']['images'] == 1) {
106
- if ($images = SQ_ObjController::getModel('SQ_Frontend')->getImagesFromContent($post->ID, true)) {
107
-
108
- array_push($posts['contains'], 'image');
109
- $xml['image:image'] = array();
110
- foreach ($images as $image) {
111
- if (empty($image['src'])) {
112
- continue;
113
- }
114
-
115
- $xml['image:image'][] = array(
116
- 'image:loc' => $image['src'],
117
- 'image:title' => SQ_ObjController::getModel('SQ_Frontend')->clearTitle($image['title']),
118
- 'image:caption' => SQ_ObjController::getModel('SQ_Frontend')->clearDescription($image['description']),
119
- );
120
- }
121
- }
122
- }
123
-
124
- if (SQ_Tools::$options['sq_sitemap_show']['videos'] == 1) {
125
- $images = SQ_ObjController::getModel('SQ_Frontend')->getImagesFromContent($post->ID, true);
126
- if (isset($images[0]['src']) && $videos = SQ_ObjController::getModel('SQ_Frontend')->getVideosFromContent($post->ID)) {
127
- array_push($posts['contains'], 'video');
128
- $xml['video:video'] = array();
129
-
130
- foreach ($videos as $video) {
131
- if ($video == '') {
132
- continue;
133
- }
134
-
135
- $xml['video:video'][$post->ID] = array(
136
- 'video:player_loc' => $video,
137
- 'video:thumbnail_loc' => $images[0]['src'],
138
- 'video:title' => SQ_ObjController::getModel('SQ_Frontend')->clearTitle(SQ_ObjController::getModel('SQ_Frontend')->grabTitleFromPost($post->ID)),
139
- 'video:description' => SQ_ObjController::getModel('SQ_Frontend')->clearDescription(SQ_ObjController::getModel('SQ_Frontend')->grabDescriptionFromPost($post->ID)),
140
- );
141
-
142
- //set the first keyword for this video
143
- $keywords = SQ_ObjController::getModel('SQ_Frontend')->grabKeywordsFromPost($post->ID);
144
- $keywords = preg_split('/,/', $keywords);
145
- if (is_array($keywords)) {
146
- $xml['video:video'][$post->ID]['video:tag'] = $keywords[0];
147
- }
148
- }
149
- }
150
- }
151
- $posts[] = $xml;
152
- unset($xml);
153
- }
154
- }
155
-
156
- return $posts;
157
- }
158
-
159
- /**
160
- * Add the post news in sitemap
161
- * If the site is registeres for google news
162
- * @return type
163
- */
164
- public function getListNews() {
165
- global $wp_query;
166
- $wp_query->get_posts();
167
-
168
- $posts = array();
169
- $posts['contains'] = array();
170
-
171
- if (have_posts()) {
172
- while (have_posts()) {
173
- the_post();
174
- $post = get_post();
175
-
176
- $xml = array();
177
-
178
- $xml['loc'] = esc_url(get_permalink());
179
- $language = convert_chars(strip_tags(get_bloginfo('language')));
180
- $language = substr($language, 0, strpos($language, '-'));
181
- if ($language == '')
182
- $language = 'en';
183
-
184
- $xml['news:news'][$post->ID] = array(
185
- 'news:publication' => array(
186
- 'news:name' => $this->sanitizeString(get_bloginfo('name')),
187
- 'news:language' => $language
188
- )
189
- );
190
- $xml['news:news'][$post->ID]['news:publication_date'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
191
- $xml['news:news'][$post->ID]['news:title'] = $this->sanitizeString(get_the_title());
192
- $xml['news:news'][$post->ID]['news:keywords'] = (string) SQ_ObjController::getModel('SQ_Frontend')->grabKeywordsFromPost($post->ID);
193
-
194
-
195
- if (SQ_Tools::$options['sq_sitemap_show']['images'] == 1) {
196
- if ($images = SQ_ObjController::getModel('SQ_Frontend')->getImagesFromContent($post->ID, true)) {
197
- array_push($posts['contains'], 'image');
198
- $xml['image:image'] = array();
199
- foreach ($images as $image) {
200
- if (empty($image['src'])) {
201
- continue;
202
- }
203
-
204
- $xml['image:image'][] = array(
205
- 'image:loc' => $image['src'],
206
- 'image:title' => SQ_ObjController::getModel('SQ_Frontend')->clearTitle($image['title']),
207
- 'image:caption' => SQ_ObjController::getModel('SQ_Frontend')->clearDescription($image['description']),
208
- );
209
- }
210
- }
211
- }
212
-
213
- if (SQ_Tools::$options['sq_sitemap_show']['videos'] == 1) {
214
- $images = SQ_ObjController::getModel('SQ_Frontend')->getImagesFromContent($post->ID, true);
215
- if (isset($images[0]['src']) && $videos = SQ_ObjController::getModel('SQ_Frontend')->getVideosFromContent($post->ID)) {
216
- array_push($posts['contains'], 'video');
217
- $xml['video:video'] = array();
218
- foreach ($videos as $video) {
219
- if ($video == '') {
220
- continue;
221
- }
222
-
223
- $xml['video:video'][$post->ID] = array(
224
- 'video:player_loc' => $video,
225
- 'video:thumbnail_loc' => $images[0]['src'],
226
- 'video:title' => SQ_ObjController::getModel('SQ_Frontend')->clearTitle(SQ_ObjController::getModel('SQ_Frontend')->grabTitleFromPost($post->ID)),
227
- 'video:description' => SQ_ObjController::getModel('SQ_Frontend')->clearDescription(SQ_ObjController::getModel('SQ_Frontend')->grabDescriptionFromPost($post->ID)),
228
- );
229
-
230
- //set the first keyword for this video
231
- $keywords = SQ_ObjController::getModel('SQ_Frontend')->grabKeywordsFromPost($post->ID);
232
- $keywords = preg_split('/,/', $keywords);
233
- if (is_array($keywords)) {
234
- $xml['video:video'][$post->ID]['video:tag'] = $keywords[0];
235
- }
236
- }
237
- }
238
- }
239
- $posts[] = $xml;
240
- unset($xml);
241
- }
242
- }
243
-
244
- return $posts;
245
- }
246
-
247
- /**
248
- * Add the Taxonomies in sitemap
249
- * @param type $type
250
- * @return type
251
- */
252
- public function getListTerms($type = null) {
253
- if (!isset($type)) {
254
- $type = $this->type;
255
- }
256
-
257
- $terms = $array = array();
258
- $array['contains'] = array();
259
- if ($type == 'sitemap-custom-tax') {
260
- $taxonomies = $this->excludeTypes(get_taxonomies(), array('category', 'post_tag', 'nav_menu', 'link_category', 'post_format'));
261
- if (!empty($taxonomies)) {
262
- $taxonomies = array_unique($taxonomies);
263
- }
264
- foreach ($taxonomies as $taxonomy) {
265
- $array = array_merge($array, $this->getListTerms($taxonomy));
266
- }
267
- } else {
268
- $terms = get_terms(str_replace('sitemap-', '', $type));
269
- }
270
-
271
- if (!isset(SQ_Tools::$options['sq_sitemap'][$type])) {
272
- $type = 'sitemap-custom-tax';
273
- }
274
-
275
- if (!empty($terms)) {
276
- foreach ($terms AS $term) {
277
- $xml = array();
278
- if (!isset($term->lastmod)){
279
- continue;
280
- }
281
-
282
- $xml['loc'] = esc_url(get_term_link($term, $term->taxonomy));
283
- $xml['lastmod'] = date('Y-m-d\TH:i:s+00:00', $term->lastmod);
284
- $xml['changefreq'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$type][1];
285
- $xml['priority'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$type][0];
286
-
287
- $array[] = $xml;
288
- }
289
- }
290
- return $array;
291
- }
292
-
293
- /**
294
- * Add the authors in sitemap
295
- * @return type
296
- */
297
- public function getListAuthors() {
298
- $authors = $array = array();
299
- $authors = apply_filters('sq-sitemap-authors', $this->type);
300
-
301
- if (!empty($authors)) {
302
- foreach ($authors AS $author) {
303
- $xml = array();
304
-
305
- $xml['loc'] = get_author_posts_url($author->ID, $author->user_nicename);
306
- if (isset($author->lastmod) && $author->lastmod <> '')
307
- $xml['lastmod'] = date('Y-m-d\TH:i:s+00:00', strtotime($author->lastmod));
308
- $xml['changefreq'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$this->type][1];
309
- $xml['priority'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$this->type][0];
310
-
311
- $array[] = $xml;
312
- }
313
- }
314
- return $array;
315
- }
316
-
317
- /**
318
- * Add the archive in sitemap
319
- * @return type
320
- */
321
- public function getListArchive() {
322
- $array = array();
323
- $archives = apply_filters('sq-sitemap-archive', $this->type);
324
- if (!empty($archives)) {
325
- foreach ($archives as $archive) {
326
- $xml = array();
327
-
328
- $xml['loc'] = get_month_link($archive->year, $archive->month);
329
- if (isset($archive->lastmod) && $archive->lastmod <> '')
330
- $xml['lastmod'] = date('Y-m-d\TH:i:s+00:00', strtotime($archive->lastmod));
331
-
332
- $xml['changefreq'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$this->type][1];
333
- $xml['priority'] = $this->frequency[SQ_Tools::$options['sq_sitemap_frequency']][$this->type][0];
334
-
335
- $array[] = $xml;
336
- }
337
- }
338
-
339
- return $array;
340
- }
341
-
342
- private function sanitizeString($string) {
343
- return esc_html(ent2ncr(strip_tags($string)));
344
- }
345
-
346
- /**
347
- * Get the last modified date for the specific post/page
348
- *
349
- * @global WP_Post $post
350
- * @param string $sitemap
351
- * @param string $term
352
- * @return string
353
- */
354
- public function lastModified($sitemap = 'post_type', $term = '') {
355
- if ('post_type' == $sitemap) :
356
-
357
- global $post;
358
-
359
- if (isset($post->ID)) {
360
- if (empty($this->postmodified[$post->ID])) {
361
- $postmodified = get_post_modified_time('Y-m-d H:i:s', true, $post->ID);
362
- $options = get_option('post_types');
363
-
364
- if (!empty($options[$post->post_type]['update_lastmod_on_comments']))
365
- $lastcomment = get_comments(array(
366
- 'status' => 'approve',
367
- 'number' => 1,
368
- 'post_id' => $post->ID,
369
- ));
370
-
371
- if (isset($lastcomment[0]->comment_date_gmt))
372
- if (mysql2date('U', $lastcomment[0]->comment_date_gmt) > mysql2date('U', $postmodified))
373
- $postmodified = $lastcomment[0]->comment_date_gmt;
374
-
375
- $this->postmodified[$post->ID] = $postmodified;
376
- }
377
- }
378
- return $this->postmodified[$post->ID];
379
-
380
- elseif (!empty($term)) :
381
-
382
- if (is_object($term)) {
383
- if (!isset($this->termmodified[$term->term_id])) {
384
- // get the latest post in this taxonomy item, to use its post_date as lastmod
385
- $posts = get_posts(array(
386
- 'post_type' => 'any',
387
- 'numberposts' => 1,
388
- 'no_found_rows' => true,
389
- 'update_post_meta_cache' => false,
390
- 'update_post_term_cache' => false,
391
- 'update_cache' => false,
392
- 'tax_query' => array(
393
- array(
394
- 'taxonomy' => $term->taxonomy,
395
- 'field' => 'slug',
396
- 'terms' => $term->slug
397
- )
398
- )
399
- )
400
- );
401
- $this->termmodified[$term->term_id] = isset($posts[0]->post_date_gmt) ? $posts[0]->post_date_gmt : '';
402
- }
403
- return $this->termmodified[$term->term_id];
404
- } else {
405
- $obj = get_taxonomy($term);
406
- return get_lastdate('gmt', $obj->object_type);
407
- }
408
-
409
- else :
410
-
411
- return '0000-00-00 00:00:00';
412
-
413
- endif;
414
- }
415
-
416
- /**
417
- * Check if the current page is the home page
418
- * @global type $polylang
419
- * @param type $id
420
- * @return type
421
- */
422
- public function is_home($id) {
423
- $home = array();
424
- $id = get_option('page_for_posts');
425
-
426
- if (!empty($id)) {
427
- global $polylang;
428
- if (isset($polylang)) {
429
- $home = $polylang->get_translations('post', $id);
430
- } else {
431
- $home = array($id);
432
- }
433
- }
434
-
435
- return in_array($id, $home);
436
- }
437
-
438
- /**
439
- * Excude types from array
440
- * @param array $types
441
- * @param array $exclude
442
- * @return array
443
- */
444
- public function excludeTypes($types, $exclude) {
445
- foreach ($exclude as $value) {
446
- if (in_array($value, $types)) {
447
- unset($types[$value]);
448
- }
449
- }
450
- return $types;
451
- }
452
-
453
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
models/Sitemaps.php ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Squirrly SEO - Sitemap Model
5
+ *
6
+ * Used to get the sitemap format for each type
7
+ *
8
+ * @class SQ_Models_Sitemaps
9
+ */
10
+ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
11
+
12
+ var $args = array();
13
+ var $frequency;
14
+ var $type;
15
+
16
+ public function __construct() {
17
+ //parent::__construct();
18
+ //For sitemap ping
19
+ $this->args['timeout'] = 5;
20
+
21
+ $this->frequency = array();
22
+ $this->frequency['daily'] = array('sitemap-home' => array(1, 'daily'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'daily'), 'sitemap-page' => array(0.6, 'weekly'), 'sitemap-category' => array(0.5, 'weekly'), 'sitemap-post_tag' => array(0.5, 'daily'), 'sitemap-archive' => array(0.3, 'monthly'), 'sitemap-author' => array(0.3, 'weekly'), 'sitemap-custom-tax' => array(0.3, 'weekly'), 'sitemap-custom-post' => array(0.8, 'daily'));
23
+ $this->frequency['weekly'] = array('sitemap-home' => array(1, 'weekly'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'weekly'), 'sitemap-page' => array(0.6, 'monthly'), 'sitemap-category' => array(0.3, 'monthly'), 'sitemap-post_tag' => array(0.5, 'weekly'), 'sitemap-archive' => array(0.3, 'monthly'), 'sitemap-author' => array(0.3, 'weekly'), 'sitemap-custom-tax' => array(0.3, 'weekly'), 'sitemap-custom-post' => array(0.8, 'weekly'));
24
+ $this->frequency['monthly'] = array('sitemap-home' => array(1, 'monthly'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'monthly'), 'sitemap-page' => array(0.6, 'monthly'), 'sitemap-category' => array(0.3, 'monthly'), 'sitemap-post_tag' => array(0.5, 'monthly'), 'sitemap-archive' => array(0.3, 'monthly'), 'sitemap-author' => array(0.3, 'monthly'), 'sitemap-custom-tax' => array(0.3, 'monthly'), 'sitemap-custom-post' => array(0.8, 'monthly'));
25
+ $this->frequency['yearly'] = array('sitemap-home' => array(1, 'monthly'), 'sitemap-product' => array(0.8, 'weekly'), 'sitemap-post' => array(0.8, 'monthly'), 'sitemap-page' => array(0.6, 'yearly'), 'sitemap-category' => array(0.3, 'yearly'), 'sitemap-post_tag' => array(0.5, 'monthly'), 'sitemap-archive' => array(0.3, 'yearly'), 'sitemap-author' => array(0.3, 'yearly'), 'sitemap-custom-tax' => array(0.3, 'yearly'), 'sitemap-custom-post' => array(0.8, 'monthly'));
26
+ }
27
+
28
+ /**
29
+ * Add the Sitemap Index
30
+ * @global $polylang
31
+ * @return array
32
+ */
33
+ public function getHomeLink() {
34
+ $homes = array();
35
+ $homes['contains'] = array();
36
+ global $polylang;
37
+
38
+ if (isset($polylang)) {
39
+ foreach ($polylang->get_languages_list() as $term) {
40
+ $xml = array();
41
+ $xml['loc'] = esc_url($polylang->get_home_url($term));
42
+ $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
43
+ $xml['changefreq'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')]['sitemap-home'][1];
44
+ $xml['priority'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')]['sitemap-home'][0];
45
+ $homes[] = $xml;
46
+ }
47
+ } else {
48
+ $xml = array();
49
+ $xml['loc'] = home_url();
50
+ $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
51
+ $xml['changefreq'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')]['sitemap-home'][1];
52
+ $xml['priority'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')]['sitemap-home'][0];
53
+ if ($post_id = get_option('page_on_front')) {
54
+ if (SQ_Classes_Tools::$options['sq_sitemap_show']['images'] == 1) {
55
+ if ($images = $this->getPostImages($post_id, true)) {
56
+ array_push($homes['contains'], 'image');
57
+ $xml['image:image'] = array();
58
+ foreach ($images as $image) {
59
+ if (empty($image['src'])) {
60
+ continue;
61
+ }
62
+
63
+
64
+ $xml['image:image'][] = array(
65
+ 'image:loc' => $image['src'],
66
+ 'image:title' => $this->clearTitle($image['title']),
67
+ 'image:caption' => $this->clearDescription($image['description']),
68
+ );
69
+ }
70
+ }
71
+ }
72
+ }
73
+ $homes[] = $xml;
74
+ unset($xml);
75
+ }
76
+
77
+ return $homes;
78
+ }
79
+
80
+ /**
81
+ * Add posts/pages in sitemap
82
+ * @return array
83
+ */
84
+ public function getListPosts() {
85
+ global $wp_query;
86
+ $wp_query->get_posts();
87
+ $posts = array();
88
+ $posts['contains'] = array();
89
+ if (have_posts()) {
90
+ while (have_posts()) {
91
+ the_post();
92
+
93
+ //do not incude password protected pages in sitemap
94
+ if (post_password_required()) {
95
+ continue;
96
+ }
97
+
98
+ if (function_exists('pll_get_post_translations')) {
99
+ $translates = pll_get_post_translations(get_post()->ID);
100
+
101
+ if (!empty($translates)) {
102
+ foreach ($translates as $post_id) {
103
+
104
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Controllers_Menu')->setPostByID(get_post($post_id))) {
105
+ if ($post->sq->nositemap) {
106
+ continue;
107
+ }
108
+
109
+ $posts[] = $this->_getPostXml($post);
110
+ }
111
+ }
112
+ //the polylang has both posts so continue
113
+ continue;
114
+ }
115
+ }
116
+
117
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Controllers_Menu')->setPostByID(get_post())) {
118
+ if ($post->sq->nositemap) {
119
+ continue;
120
+ }
121
+
122
+ $posts[] = $this->_getPostXml($post);
123
+ }
124
+
125
+
126
+ }
127
+ }
128
+
129
+ foreach ($posts as $post) {
130
+ if (array_key_exists('image:image', $post)) {
131
+ array_push($posts['contains'], 'image');
132
+ }
133
+ if (array_key_exists('video:video', $post)) {
134
+ array_push($posts['contains'], 'video');
135
+ }
136
+ }
137
+
138
+ return $posts;
139
+ }
140
+
141
+ private function _getPostXml($post) {
142
+ $xml = array();
143
+ $xml['loc'] = esc_url(get_permalink());
144
+ $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
145
+ $xml['changefreq'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$this->type][1];
146
+ $xml['priority'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$this->type][0];
147
+
148
+ if (SQ_Classes_Tools::$options['sq_sitemap_show']['images'] == 1) {
149
+ if ($images = $this->getPostImages($post->ID, true)) {
150
+ $xml['image:image'] = array();
151
+ foreach ($images as $image) {
152
+ if (empty($image['src'])) {
153
+ continue;
154
+ }
155
+
156
+ $xml['image:image'][] = array(
157
+ 'image:loc' => $image['src'],
158
+ 'image:title' => $this->clearTitle($image['title']),
159
+ 'image:caption' => $this->clearDescription($image['description']),
160
+ );
161
+ }
162
+ }
163
+ }
164
+
165
+ if (SQ_Classes_Tools::$options['sq_sitemap_show']['videos'] == 1) {
166
+ $images = $this->getPostImages($post->ID, true);
167
+ if (isset($images[0]['src']) && $videos = $this->getPostVideos($post->ID)) {
168
+ $xml['video:video'] = array();
169
+ foreach ($videos as $video) {
170
+ if ($video == '') {
171
+ continue;
172
+ }
173
+
174
+ $xml['video:video'][$post->ID] = array(
175
+ 'video:player_loc' => $video,
176
+ 'video:thumbnail_loc' => $images[0]['src'],
177
+ 'video:title' => $this->clearTitle($post->sq->title),
178
+ 'video:description' => $this->clearDescription($post->sq->description),
179
+ );
180
+
181
+ //set the first keyword for this video
182
+ $keywords = $post->sq->keywords;
183
+ $keywords = preg_split('/,/', $keywords);
184
+ if (is_array($keywords)) {
185
+ $xml['video:video'][$post->ID]['video:tag'] = $keywords[0];
186
+ }
187
+ }
188
+ }
189
+ }
190
+ return $xml;
191
+ }
192
+
193
+ /**
194
+ * Add the post news in sitemap
195
+ * If the site is registeres for google news
196
+ * @return array
197
+ */
198
+ public function getListNews() {
199
+ global $wp_query;
200
+ $wp_query->get_posts();
201
+
202
+ $posts = array();
203
+ $posts['contains'] = array();
204
+
205
+ if (have_posts()) {
206
+ while (have_posts()) {
207
+ the_post();
208
+
209
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->setPost(get_post())->getPost()) {
210
+ if ($post->sq->nositemap) {
211
+ continue;
212
+ }
213
+
214
+ $xml = array();
215
+
216
+ $xml['loc'] = esc_url(get_permalink());
217
+ $language = convert_chars(strip_tags(get_bloginfo('language')));
218
+ $language = substr($language, 0, strpos($language, '-'));
219
+ if ($language == '')
220
+ $language = 'en';
221
+
222
+ $xml['news:news'][$post->ID] = array(
223
+ 'news:publication' => array(
224
+ 'news:name' => $this->sanitizeString(get_bloginfo('name')),
225
+ 'news:language' => $language
226
+ )
227
+ );
228
+ $xml['news:news'][$post->ID]['news:publication_date'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified(), false));
229
+ $xml['news:news'][$post->ID]['news:title'] = $this->sanitizeString($post->sq->title);
230
+ $xml['news:news'][$post->ID]['news:keywords'] = $post->sq->keywords;
231
+
232
+
233
+ if (SQ_Classes_Tools::$options['sq_sitemap_show']['images'] == 1) {
234
+ if ($images = $this->getPostImages($post->ID, true)) {
235
+ array_push($posts['contains'], 'image');
236
+ $xml['image:image'] = array();
237
+ foreach ($images as $image) {
238
+ if (empty($image['src'])) {
239
+ continue;
240
+ }
241
+
242
+ $xml['image:image'][] = array(
243
+ 'image:loc' => $image['src'],
244
+ 'image:title' => $this->clearTitle($image['title']),
245
+ 'image:caption' => $this->clearDescription($image['description']),
246
+ );
247
+ }
248
+ }
249
+ }
250
+
251
+ if (SQ_Classes_Tools::$options['sq_sitemap_show']['videos'] == 1) {
252
+ $images = $this->getPostImages($post->ID, true);
253
+ if (isset($images[0]['src']) && $videos = $this->getPostVideos($post->ID)) {
254
+ array_push($posts['contains'], 'video');
255
+ $xml['video:video'] = array();
256
+ foreach ($videos as $video) {
257
+ if ($video == '') {
258
+ continue;
259
+ }
260
+
261
+
262
+ $xml['video:video'][$post->ID] = array(
263
+ 'video:player_loc' => $video,
264
+ 'video:thumbnail_loc' => $images[0]['src'],
265
+ 'video:title' => $this->clearTitle($post->sq->title),
266
+ 'video:description' => $this->clearDescription($post->sq->description),
267
+ );
268
+
269
+ //set the first keyword for this video
270
+ $keywords = $post->sq->keywords;
271
+ $keywords = preg_split('/,/', $keywords);
272
+ if (is_array($keywords)) {
273
+ $xml['video:video'][$post->ID]['video:tag'] = $keywords[0];
274
+ }
275
+ }
276
+ }
277
+ }
278
+ $posts[] = $xml;
279
+ unset($xml);
280
+ }
281
+ }
282
+ }
283
+
284
+ return $posts;
285
+ }
286
+
287
+ /**
288
+ * Add the Taxonomies in sitemap
289
+ * @param string $type
290
+ * @return array
291
+ */
292
+ public function getListTerms($type = null) {
293
+ if (!isset($type)) {
294
+ $type = $this->type;
295
+ }
296
+
297
+ $terms = $array = array();
298
+ $array['contains'] = array();
299
+ if ($type == 'sitemap-custom-tax') {
300
+ $taxonomies = $this->excludeTypes(get_taxonomies(), array('category', 'post_tag', 'nav_menu', 'link_category', 'post_format'));
301
+ if (!empty($taxonomies)) {
302
+ $taxonomies = array_unique($taxonomies);
303
+ }
304
+ foreach ($taxonomies as $taxonomy) {
305
+ $array = array_merge($array, $this->getListTerms($taxonomy));
306
+
307
+ }
308
+ } else {
309
+ $terms = get_terms(str_replace('sitemap-', '', $type));
310
+ }
311
+
312
+ if (!isset(SQ_Classes_Tools::$options['sq_sitemap'][$type])) {
313
+ $type = 'sitemap-custom-tax';
314
+ }
315
+
316
+ if (!empty($terms)) {
317
+ foreach ($terms AS $term) {
318
+ $xml = array();
319
+ if (!isset($term->taxonomy)) {
320
+ continue;
321
+ }
322
+ $term->lastmod = (isset($term->lastmod) ? $term->lastmod : time());
323
+ $xml['loc'] = esc_url(get_term_link($term, $term->taxonomy));
324
+ $xml['lastmod'] = date('Y-m-d\TH:i:s+00:00', $term->lastmod);
325
+ $xml['changefreq'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$type][1];
326
+ $xml['priority'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$type][0];
327
+
328
+ $array[] = $xml;
329
+ }
330
+ }
331
+
332
+ return $array;
333
+ }
334
+
335
+ /**
336
+ * Add the authors in sitemap
337
+ * @return array
338
+ */
339
+ public function getListAuthors() {
340
+ $array = array();
341
+ $authors = apply_filters('sq-sitemap-authors', $this->type);
342
+
343
+ if (!empty($authors)) {
344
+ foreach ($authors AS $author) {
345
+ $xml = array();
346
+
347
+ $xml['loc'] = get_author_posts_url($author->ID, $author->user_nicename);
348
+ if (isset($author->lastmod) && $author->lastmod <> '')
349
+ $xml['lastmod'] = date('Y-m-d\TH:i:s+00:00', strtotime($author->lastmod));
350
+ $xml['changefreq'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$this->type][1];
351
+ $xml['priority'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$this->type][0];
352
+
353
+ $array[] = $xml;
354
+ }
355
+ }
356
+ return $array;
357
+ }
358
+
359
+ /**
360
+ * Add the archive in sitemap
361
+ * @return array
362
+ */
363
+ public function getListArchive() {
364
+ $array = array();
365
+ $archives = apply_filters('sq-sitemap-archive', $this->type);
366
+ if (!empty($archives)) {
367
+ foreach ($archives as $archive) {
368
+ $xml = array();
369
+
370
+ $xml['loc'] = get_month_link($archive->year, $archive->month);
371
+ if (isset($archive->lastmod) && $archive->lastmod <> '')
372
+ $xml['lastmod'] = date('Y-m-d\TH:i:s+00:00', strtotime($archive->lastmod));
373
+
374
+ $xml['changefreq'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$this->type][1];
375
+ $xml['priority'] = $this->frequency[SQ_Classes_Tools::getOption('sq_sitemap_frequency')][$this->type][0];
376
+
377
+ $array[] = $xml;
378
+ }
379
+ }
380
+
381
+ return $array;
382
+ }
383
+
384
+ private function sanitizeString($string) {
385
+ return esc_html(ent2ncr(strip_tags($string)));
386
+ }
387
+
388
+ /**
389
+ * Get the last modified date for the specific post/page
390
+ *
391
+ * @global WP_Post $post
392
+ * @param string $sitemap
393
+ * @param string $term
394
+ * @return string
395
+ */
396
+ public function lastModified($sitemap = 'post_type', $term = '') {
397
+ if ('post_type' == $sitemap) :
398
+
399
+ global $post;
400
+
401
+ if (isset($post->ID)) {
402
+ if (empty($this->postmodified[$post->ID])) {
403
+ $postmodified = get_post_modified_time('Y-m-d H:i:s', true, $post->ID);
404
+ $options = get_option('post_types');
405
+
406
+ if (!empty($options[$post->post_type]['update_lastmod_on_comments']))
407
+ $lastcomment = get_comments(array(
408
+ 'status' => 'approve',
409
+ 'number' => 1,
410
+ 'post_id' => $post->ID,
411
+ ));
412
+
413
+ if (isset($lastcomment[0]->comment_date_gmt))
414
+ if (mysql2date('U', $lastcomment[0]->comment_date_gmt) > mysql2date('U', $postmodified))
415
+ $postmodified = $lastcomment[0]->comment_date_gmt;
416
+
417
+ $this->postmodified[$post->ID] = $postmodified;
418
+ }
419
+ }
420
+ return $this->postmodified[$post->ID];
421
+
422
+ elseif (!empty($term)) :
423
+
424
+ if (is_object($term)) {
425
+ if (!isset($this->termmodified[$term->term_id])) {
426
+ // get the latest post in this taxonomy item, to use its post_date as lastmod
427
+ $posts = get_posts(array(
428
+ 'post_type' => 'any',
429
+ 'numberposts' => 1,
430
+ 'no_found_rows' => true,
431
+ 'update_post_meta_cache' => false,
432
+ 'update_post_term_cache' => false,
433
+ 'update_cache' => false,
434
+ 'tax_query' => array(
435
+ array(
436
+ 'taxonomy' => $term->taxonomy,
437
+ 'field' => 'slug',
438
+ 'terms' => $term->slug
439
+ )
440
+ )
441
+ )
442
+ );
443
+ $this->termmodified[$term->term_id] = isset($posts[0]->post_date_gmt) ? $posts[0]->post_date_gmt : '';
444
+ }
445
+ return $this->termmodified[$term->term_id];
446
+ } else {
447
+ $obj = get_taxonomy($term);
448
+ return get_lastdate('gmt', $obj->object_type);
449
+ }
450
+
451
+ else :
452
+
453
+ return '0000-00-00 00:00:00';
454
+
455
+ endif;
456
+ }
457
+
458
+ /**
459
+ * Check if the current page is the home page
460
+ * @global $polylang
461
+ * @param integer $id
462
+ * @return boolean
463
+ */
464
+ public function is_home($id) {
465
+ $home = array();
466
+ $id = get_option('page_for_posts');
467
+
468
+ if (!empty($id)) {
469
+ global $polylang;
470
+ if (isset($polylang)) {
471
+ $home = $polylang->get_translations('post', $id);
472
+ } else {
473
+ $home = array($id);
474
+ }
475
+ }
476
+
477
+ return in_array($id, $home);
478
+ }
479
+
480
+ /**
481
+ * Excude types from array
482
+ * @param array $types
483
+ * @param array $exclude
484
+ * @return array
485
+ */
486
+ public function excludeTypes($types, $exclude) {
487
+ foreach ($exclude as $value) {
488
+ if (in_array($value, $types)) {
489
+ unset($types[$value]);
490
+ }
491
+ }
492
+ return $types;
493
+ }
494
+
495
+ }
models/abstract/Domain.php ADDED
@@ -0,0 +1,457 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ObjectAbstract
5
+ *
6
+ * Abstract base class for domain objects.
7
+ * Magic setters and getters and get<Property>/set<Property> based on protected properies defined.
8
+ */
9
+ abstract class SQ_Models_Abstract_Domain implements ArrayAccess {
10
+
11
+ public function __construct($properties = null) {
12
+ if (isset($properties)) {
13
+ if (!is_array($properties)) {
14
+ $properties = (array)$properties;
15
+ }
16
+
17
+ if (isset($properties) && !empty($properties)) {
18
+ foreach ($properties as $key => $value) {
19
+ // assign value to key
20
+ $this->$key = $value;
21
+ }
22
+ }
23
+ }
24
+ }
25
+
26
+ // -----------------------------------------------------------------------
27
+
28
+ /**
29
+ * Magic methods
30
+ */
31
+
32
+ /**
33
+ * Magic isset
34
+ */
35
+ public function __isset($name) {
36
+ // map name to key; prepend _
37
+ $key = '_' . $name;
38
+
39
+ // if there is no such property
40
+ if (!property_exists($this, $key))
41
+ return FALSE;
42
+
43
+ return isset($this->$key);
44
+ }
45
+
46
+ /**
47
+ * Magic getter
48
+ *
49
+ * @param string $name the name of the property
50
+ * @return mixed the value of the property
51
+ */
52
+ public function __get($name) {
53
+ // map name to getter method; prepend 'get'
54
+ $method = 'get' . ucfirst($name);
55
+ return $this->$method();
56
+ }
57
+
58
+ /**
59
+ * Magic setter
60
+ * $object->innerAttribute = $value; will call setInnerAttribute($value)
61
+ *
62
+ * @param string $name the name of the property
63
+ * @param mixed $value the value to assign
64
+ */
65
+ public function __set($name, $value) {
66
+ // map name to setter method; prepend 'set'
67
+ $method = 'set' . ucfirst($name);
68
+ $this->$method($value);
69
+ }
70
+
71
+ /**
72
+ * Magic unset
73
+ */
74
+ public function __unset($name) {
75
+ $this->$name = null;
76
+ }
77
+
78
+ /**
79
+ * Return the string representation of this model.
80
+ *
81
+ * @return string
82
+ */
83
+ public function __toString() {
84
+ return get_class($this);
85
+ }
86
+
87
+ /**
88
+ * Magic call to implement default setters and getters.
89
+ *
90
+ * get<MyProperty>
91
+ * set<MyProperty>
92
+ * maps to $_myProperty if property exists
93
+ *
94
+ * @param string $name
95
+ * @param array $arguments
96
+ * @return mixed
97
+ */
98
+ public function __call($method, array $arguments) {
99
+ $matches = array();
100
+
101
+ // generate default getters
102
+ if (preg_match('/^get(\w+?)?$/', $method, $matches)) {
103
+ // matches[0] = method
104
+ // matches[1] = property
105
+ // map name to property; prepend _
106
+ if (function_exists('lcfirst'))
107
+ $property = lcfirst($matches[1]);
108
+ else
109
+ $property = strtolower(substr($matches[1], 0, 1)) . substr($matches[1], 1);
110
+
111
+ $_property = "_" . $property;
112
+
113
+ if (!property_exists($this, $_property))
114
+ return null;
115
+ // no property, throw exception
116
+ // throw new Exception('Object does not have property [' . $property . ']');
117
+
118
+ return $this->$_property;
119
+ }
120
+
121
+ if (preg_match('/^set(\w+?)?$/', $method, $matches)) {
122
+
123
+ // matches[0] = method
124
+ // matches[1] = property
125
+ // map name to property; prepend _
126
+ if ($matches[1] == 'ID') {
127
+ $property = $matches[1];
128
+ } elseif (function_exists('lcfirst')) {
129
+ $property = lcfirst($matches[1]);
130
+ } else {
131
+ $property = strtolower(substr($matches[1], 0, 1)) . substr($matches[1], 1);
132
+ }
133
+
134
+ $value = $arguments[0];
135
+
136
+ $_property = "_" . $property;
137
+ // echo $_property . ' = ' . $value . '<br />';
138
+ if (property_exists($this, $_property)) {
139
+
140
+ // no property, throw exception
141
+ // throw new Exception('Object does not have property [' . $property . ']');
142
+ // property exists, assign the value
143
+ $this->$_property = $value;
144
+ }
145
+ // return $this to provide fluid interface
146
+ return $this;
147
+ }
148
+ }
149
+
150
+ // -----------------------------------------------------------------------
151
+
152
+ /**
153
+ * Utility methods
154
+ *
155
+ */
156
+
157
+ /**
158
+ * Return this model as an array.
159
+ * Any properties of type object will be converted to string.
160
+ *
161
+ * @return array
162
+ */
163
+ public function toArray() {
164
+ $args = func_get_args();
165
+
166
+ $data = array();
167
+ if (empty($args)) {
168
+
169
+ // iterate over each property in this object
170
+ foreach ($this->_getProperties() as $property => $value) {
171
+
172
+ // if the property is ignored, just skip it
173
+ if (in_array($property, $this->_getIgnoredProperties()))
174
+ continue;
175
+
176
+ // if the property value is traversable
177
+ if ($value instanceof Traversable) {
178
+
179
+ // if value is an array or an object traversable using foreach
180
+ $tmp = array();
181
+ foreach ($value as $k => $v) {
182
+ if (is_object($v) && method_exists($v, 'toArray'))
183
+ $tmp[$k] = $v->toArray();
184
+ else
185
+ $tmp[$k] = $v . '';
186
+ }
187
+
188
+ // if value is an iterator (or subclass), rewind it
189
+ if ($value instanceof Iterator)
190
+ $value->rewind();
191
+
192
+ $data[$property] = $tmp;
193
+ } elseif (is_object($value)) {
194
+
195
+ if (method_exists($value, 'toArray'))
196
+ $data[$property] = $value->toArray();
197
+ elseif (method_exists($value, 'toString'))
198
+ $data[$property] = $value->toString();
199
+ else
200
+ $data[$property] = $value;
201
+ } elseif (is_array($value)) {
202
+ $data[$property] = current($value);
203
+ } else {
204
+ $data[$property] = $value . '';
205
+ }
206
+ }
207
+ } else {
208
+
209
+ foreach ($args as $arg)
210
+ if (isset($this->$arg))
211
+ $data[$arg] = $this->$arg;
212
+ }
213
+
214
+ return $data;
215
+ }
216
+
217
+ /**
218
+ * Return this model as an array.
219
+ * Any properties of type object will be converted to string.
220
+ *
221
+ * @return array
222
+ */
223
+ public function prepareDB() {
224
+ $args = func_get_args();
225
+
226
+ $data = array();
227
+ if (empty($args)) {
228
+
229
+ // iterate over each property in this object
230
+ foreach ($this->_getProperties() as $property => $value) {
231
+
232
+ // if the property is ignored, just skip it
233
+ if (in_array($property, $this->_getIgnoredProperties()))
234
+ continue;
235
+
236
+ // if the property value is traversable
237
+ if ($value instanceof Traversable) {
238
+
239
+ // if value is an array or an object traversable using foreach
240
+ $tmp = array();
241
+ foreach ($value as $k => $v) {
242
+ if (is_object($v) && method_exists($v, 'toArray'))
243
+ $tmp[$k] = $v->prepareDB();
244
+ else
245
+ $tmp[$k] = $v . '';
246
+ }
247
+
248
+ // if value is an iterator (or subclass), rewind it
249
+ if ($value instanceof Iterator)
250
+ $value->rewind();
251
+
252
+ $data[$property] = $tmp;
253
+ } // if the property is a object
254
+ else if (is_object($value)) {
255
+
256
+ if (method_exists($value, 'toArray'))
257
+ $data[$property] = $value->prepareDB();
258
+ elseif (method_exists($value, 'toString'))
259
+ $data[$property] = $value->toString();
260
+ else
261
+ $data[$property] = $value;
262
+ } // otherwise
263
+ else {
264
+ if (isset($value))
265
+ $data[$property] = $value . '';
266
+ }
267
+ }
268
+ } else {
269
+
270
+ foreach ($args as $arg)
271
+ if (isset($this->$arg))
272
+ $data[$arg] = $this->$arg;
273
+ }
274
+
275
+ return $data;
276
+ }
277
+
278
+ /**
279
+ * Return this model as json.
280
+ * Any properties of type object will be converted to string.
281
+ *
282
+ * @return string
283
+ */
284
+ public function toJson() {
285
+ return json_encode($this->toArray());
286
+ }
287
+
288
+ /**
289
+ * Return this model as xml.
290
+ * Any properties of type object will be converted to string.
291
+ *
292
+ * @return string
293
+ */
294
+ public function toXml() {
295
+ $schema = $this->_xmlSchema();
296
+
297
+ // the dom document
298
+ $dom = new DOMDocument;
299
+ $dom->formatOutput = true;
300
+
301
+ // the node
302
+ $nodeKey = key($schema);
303
+ $node = $dom->createElement($nodeKey);
304
+
305
+ // attributes
306
+ $attributes = @$schema[$nodeKey]['attributes'];
307
+ if (isset($attributes) && is_array($attributes))
308
+ foreach ($attributes as $key => $value) {
309
+ $attribute = $dom->createAttribute($key);
310
+ $attribute->value = htmlentities($value);
311
+ $node->appendChild($attribute);
312
+ }
313
+
314
+ // elements
315
+ $elements = @$schema[$nodeKey]['elements'];
316
+ if (isset($elements) && is_array($elements))
317
+ foreach ($elements as $key => $element) {
318
+ if (is_array($element) || ($element instanceof Traversable)) {
319
+ if (is_int($key)) {
320
+ foreach ($element as $e) {
321
+ $tmpDom = new DOMDocument;
322
+ $tmpDom->loadXML($e->toXml());
323
+ $iNode = $tmpDom->getElementsByTagName('*')->item(0);
324
+ $node->appendChild($dom->importNode($iNode, true));
325
+ }
326
+ } elseif (is_string($key)) {
327
+ $tmp = $dom->createElement($key);
328
+ foreach ($element as $e) {
329
+ $tmpDom = new DOMDocument;
330
+ $tmpDom->loadXML($e->toXml());
331
+ $iNode = $tmpDom->getElementsByTagName('*')->item(0);
332
+ $tmp->appendChild($dom->importNode($iNode, true));
333
+ }
334
+ $node->appendChild($tmp);
335
+ }
336
+ } else {
337
+ $tmpDom = new DOMDocument;
338
+ $tmpDom->loadXML($element->toXml());
339
+ $iNode = $tmpDom->getElementsByTagName('*')->item(0);
340
+ $node->appendChild($dom->importNode($iNode, true));
341
+ }
342
+ }
343
+
344
+ // add node to the dom
345
+ $dom->appendChild($node);
346
+
347
+ // only get node xml
348
+ return $dom->saveXML($node);
349
+ }
350
+
351
+ /**
352
+ * The xml schema is an array that defines how the xml is build from the current object.
353
+ * This method may be overriden in child classes which may add/modify attributes/elements.
354
+ *
355
+ * @return array
356
+ */
357
+ protected function _xmlSchema() {
358
+ $className = get_class($this);
359
+ $classParts = explode('_', $className);
360
+ $node = array_pop($classParts);
361
+
362
+ // build an xml schema automatically based on data members' name and value
363
+ $attributes = array();
364
+ $elements = array();
365
+
366
+ // traverse all dtaa members, getting the key (name of the variable) and value
367
+ foreach ($this->_getProperties() as $property => $value) {
368
+ if (is_scalar($value) || !isset($value))
369
+ // if the value is scalar or null
370
+ // treat is as an attribute
371
+ $attributes[ucfirst($property)] = $value;
372
+ else
373
+ if (is_array($value))
374
+ $elements[ucfirst($property)] = $value;
375
+ }
376
+
377
+ return array(
378
+ // node name => node content
379
+ $node => array(
380
+ 'attributes' => $attributes,
381
+ 'elements' => $elements,
382
+ )
383
+ );
384
+ }
385
+
386
+ // -----------------------------------------------------------------------
387
+
388
+ /**
389
+ * Methods required by the ArrayAccess interface.
390
+ * Allows to access object properties using the array notation, with [].
391
+ */
392
+ public function offsetExists($offset) {
393
+ return isset($this->$offset);
394
+ }
395
+
396
+ public function offsetGet($offset) {
397
+ return $this->offsetExists($offset) ? $this->$offset : null;
398
+ }
399
+
400
+ public function offsetSet($offset, $value) {
401
+ $this->$offset = $value;
402
+ }
403
+
404
+ public function offsetUnset($offset) {
405
+ $this->$offset = null;
406
+ }
407
+
408
+ // -----------------------------------------------------------------------
409
+
410
+ /**
411
+ * Get ignored properties
412
+ *
413
+ * Allows to define a list of property names that will be ignored
414
+ * when converting the object to array, json, xml.
415
+ *
416
+ * There may be multiple reasons to ignore properties:
417
+ * - we don't want to export the value for the property
418
+ * - to resolve circular reference
419
+ * (eg. an object contains one or more children objects, which will each
420
+ * contain a reference back to the parent; we may set the 'parent' property
421
+ * as ignored in the child object to eliminate circular toArray() calls
422
+ * which result in 'out of memory' error)
423
+ *
424
+ * @return array
425
+ */
426
+ protected function _getIgnoredProperties() {
427
+ return array();
428
+ }
429
+
430
+ /**
431
+ * Get an array with the object's properties.
432
+ *
433
+ * The valid object's properties are
434
+ * - protected
435
+ * - start with one underscore
436
+ *
437
+ * Private properties will be ignored.
438
+ *
439
+ * @return array
440
+ * @throws Exception
441
+ */
442
+ protected function _getProperties() {
443
+ $properties = array();
444
+
445
+ // get object vars
446
+ $vars = get_object_vars($this);
447
+ foreach ($vars as $key => $value)
448
+ $properties[substr($key, 1)] = $value;
449
+
450
+ // if no properies are found
451
+ if (empty($properties))
452
+ throw new Exception('no properties found');
453
+
454
+ return $properties;
455
+ }
456
+
457
+ }
models/abstract/Seo.php ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class SQ_Models_Abstract_Seo {
4
+ protected $_post;
5
+ protected $_patterns;
6
+ protected $_sq_use;
7
+
8
+ public function __construct() {
9
+ //SQ_Classes_Tools::dump("apply post");
10
+ $this->_post = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
11
+ if (class_exists('SQ_Classes_Tools')) {
12
+ $this->_sq_use = SQ_Classes_Tools::getOption('sq_use');
13
+ }
14
+ }
15
+
16
+ /**************************** CLEAR THE VALUES *************************************/
17
+ /***********************************************************************************/
18
+ /**
19
+ * Clear and format the title for all languages
20
+ * @param $title
21
+ * @return string
22
+ */
23
+ public function clearTitle($title) {
24
+ return SQ_Classes_Tools::clearTitle($title);;
25
+ }
26
+
27
+ /**
28
+ * Clear and format the descrition for all languages
29
+ * @param $description
30
+ * @return mixed|string
31
+ */
32
+ public function clearDescription($description) {
33
+ return SQ_Classes_Tools::clearDescription($description);
34
+ }
35
+
36
+ public function clearKeywords($keywords) {
37
+ if ($keywords <> '') {
38
+ $keywords = SQ_Classes_Tools::i18n(trim(esc_html(ent2ncr(strip_tags($keywords)))));
39
+ $keywords = addcslashes($keywords, '$');
40
+
41
+ $keywords = preg_replace('/\s{2,}/', ' ', $keywords);
42
+ }
43
+ return $keywords;
44
+ }
45
+
46
+ /**
47
+ * Get the image from post
48
+ *
49
+ * @return array
50
+ * @param integer $post_id Custom post is
51
+ * @param boolean $all take all the images or stop at the first one
52
+ * @return array
53
+ */
54
+ public function getPostImages($post_id = null, $all = false) {
55
+ $images = array();
56
+
57
+ //for sitemap calls
58
+ if (isset($post_id)) {
59
+ $this->_post = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Post');
60
+ $this->_post->ID = (int)$post_id;
61
+ }
62
+
63
+ if ((int)$this->_post->ID == 0) {
64
+ return $images;
65
+ }
66
+
67
+ if (has_post_thumbnail($this->_post->ID)) {
68
+ $attachment = get_post(get_post_thumbnail_id($this->_post->ID));
69
+ if (isset($attachment->ID)) {
70
+ $url = wp_get_attachment_image_src($attachment->ID, 'full');
71
+ $images[] = array(
72
+ 'src' => esc_url($url[0]),
73
+ 'title' => $this->clearTitle($this->_post->post_title),
74
+ 'description' => $this->clearDescription($this->_post->post_excerpt),
75
+ 'width' => $url[1],
76
+ 'height' => $url[2],
77
+ );
78
+ }
79
+ }
80
+
81
+ if ($all || empty($images)) {
82
+ if (isset($this->_post->post_content)) {
83
+ preg_match('/<img[^>]*src="([^"]*)"[^>]*>/i', $this->_post->post_content, $match);
84
+
85
+ if (!empty($match)) {
86
+ preg_match('/alt="([^"]*)"/i', $match[0], $alt);
87
+
88
+ if (strpos($match[1], '//') === false) {
89
+ $match[1] = get_bloginfo('url') . $match[1];
90
+ }
91
+
92
+ $images[] = array(
93
+ 'src' => esc_url($match[1]),
94
+ 'title' => $this->clearTitle(!empty($alt[1]) ? $alt[1] : ''),
95
+ 'description' => '',
96
+ 'width' => '500',
97
+ 'height' => null,
98
+ );
99
+ }
100
+ }
101
+ }
102
+
103
+
104
+ return $images;
105
+ }
106
+
107
+ /**
108
+ * Get the video from content
109
+ * @param integer $post_id Custom post is
110
+ * @return array
111
+ */
112
+ public function getPostVideos($post_id = null) {
113
+ $videos = array();
114
+
115
+ //for sitemap calls
116
+ if (isset($post_id)) {
117
+ $this->_post = SQ_Classes_ObjController::getDomain('SQ_Models_Domain_Post');
118
+ $this->_post->ID = (int)$post_id;
119
+ }
120
+
121
+ if ((int)$this->_post->ID == 0) {
122
+ return $videos;
123
+ }
124
+
125
+ if (isset($this->_post->post_content)) {
126
+ preg_match('/(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed)\/)([^\?&\"\'>\s]+)/si', $this->_post->post_content, $match);
127
+
128
+ if (isset($match[0])) {
129
+ if (strpos($match[0], '//') !== false && strpos($match[0], 'http') === false) {
130
+ $match[0] = 'http:' . $match[0];
131
+ }
132
+ $videos[] = esc_url($match[0]);
133
+ }
134
+
135
+ preg_match('/(?:http(?:s)?:\/\/)?(?:fwd4\.wistia\.com\/(?:medias)\/)([^\?&\"\'>\s]+)/si', $this->_post->post_content, $match);
136
+
137
+ if (isset($match[0])) {
138
+ $videos[] = esc_url('http://fast.wistia.net/embed/iframe/' . $match[1]);
139
+ }
140
+
141
+ preg_match('/class=["|\']([^"\']*wistia_async_([^\?&\"\'>\s]+)[^"\']*["|\'])/si', $this->_post->post_content, $match);
142
+
143
+ if (isset($match[0])) {
144
+ $videos[] = esc_url('http://fast.wistia.net/embed/iframe/' . $match[2]);
145
+ }
146
+
147
+ preg_match('/src=["|\']([^"\']*(.mpg|.mpeg|.mp4|.mov|.wmv|.asf|.avi|.ra|.ram|.rm|.flv)["|\'])/i', $this->_post->post_content, $match);
148
+
149
+ if (isset($match[1])) {
150
+ $videos[] = esc_url($match[1]);
151
+ }
152
+ }
153
+
154
+ return $videos;
155
+ }
156
+
157
+ /**
158
+ * Check if is the homepage
159
+ *
160
+ * @return bool
161
+ */
162
+ public function isHomePage() {
163
+ return SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->isHomePage();
164
+ }
165
+
166
+ public function getPost() {
167
+ return SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getPost();
168
+ }
169
+
170
+ public function returnFalse() {
171
+ return false;
172
+ }
173
+
174
+ public function truncate($text, $min = 100, $max = 110) {
175
+ if ($text <> '' && strlen($text) > $max) {
176
+ if (function_exists('strip_tags')) {
177
+ $text = strip_tags($text);
178
+ }
179
+ $text = str_replace(']]>', ']]&gt;', $text);
180
+ $text = @preg_replace('|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);
181
+ $text = strip_tags($text);
182
+
183
+ if ($max < strlen($text)) {
184
+ while ($text[$max] != ' ' && $max > $min) {
185
+ $max--;
186
+ }
187
+ }
188
+ $text = substr($text, 0, $max);
189
+ return trim(stripcslashes($text));
190
+ }
191
+
192
+ return $text;
193
+ }
194
+ }
models/domain/Patterns.php ADDED
@@ -0,0 +1,366 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Domain_Patterns extends SQ_Models_Abstract_Domain {
4
+
5
+ protected $_id; //Replaced with the post/page ID
6
+ protected $_post_type; //Replaced with the post/page type
7
+ protected $_guid; //Replaced with the post/page slug
8
+
9
+ public function setId($id) {
10
+ $this->_id = $id;
11
+ }
12
+
13
+ /*********************************************************************************/
14
+ protected $_date; //Replaced with the date of the post/page
15
+
16
+ public function setPost_date($value) {
17
+ $this->_date = $value;
18
+ }
19
+
20
+ //
21
+ protected $_title; //Replaced with the title of the post/page
22
+
23
+ public function setPost_title($value) {
24
+ if ($value <> '') {
25
+ $this->_title = $value;
26
+ }
27
+ }
28
+
29
+ //
30
+ protected $_post_parent;
31
+ protected $_parent_title; //Replaced with the title of the parent page of the current page
32
+
33
+ public function getParent_title() {
34
+ if (isset($this->_post_parent) && (int)$this->_post_parent > 0) {
35
+ if ($post = $this->_getPost($this->_post_parent)) {
36
+ $this->_parent_title = $post->post_title;
37
+ }
38
+ }
39
+
40
+ return $this->_parent_title;
41
+ }
42
+
43
+ protected $_sitename; //The site's name
44
+
45
+ public function getSitename() {
46
+ return get_bloginfo('name');
47
+ }
48
+
49
+ //
50
+ protected $_sitedesc; //The site's tag line / description
51
+
52
+ public function getSitedesc() {
53
+ return $this->truncate(get_bloginfo('description'), 100, $this->_sq->description_maxlength);
54
+ }
55
+
56
+ //
57
+ protected $_excerpt; //Replaced with the post/page excerpt (or auto-generated if it does not exist)
58
+
59
+ public function setPost_excerpt($value) {
60
+ if ($value <> '') {
61
+ $this->_excerpt = $value;
62
+ }
63
+ }
64
+
65
+ public function getExcerpt() {
66
+ if (!isset($this->_excerpt)) {
67
+ if ($post = $this->_currentPost()) {
68
+ if ($post->post_excerpt <> '') {
69
+ $this->_excerpt = $post->post_excerpt;
70
+ } elseif ($post->post_content <> '') {
71
+ $this->_excerpt = $this->truncate($post->post_content, 100, $this->_sq->description_maxlength);
72
+ }
73
+ }
74
+ }
75
+ return $this->_excerpt;
76
+ }
77
+
78
+ protected $_excerpt_only; //Replaced with the post/page excerpt (without auto-generation)
79
+
80
+ public function getExcerpt_only() {
81
+ if (!isset($this->_excerpt_only) && isset($this->_id)) {
82
+ $this->_excerpt_only = get_the_excerpt($this->_id);
83
+ }
84
+ return $this->_excerpt_only;
85
+ }
86
+
87
+ //
88
+ protected $_category; //Replaced with the post categories (comma separated)
89
+
90
+ public function getCategory() {
91
+ if (!isset($this->_category)) {
92
+ $this->_category = $this->_title;
93
+ }
94
+ return $this->_category;
95
+ }
96
+
97
+ protected $_primary_category; //Replaced with the primary category of the post/page
98
+
99
+ public function getPrimary_category() {
100
+ if (!isset($this->_primary_category)) {
101
+ if ($category = get_category_by_slug($this->_guid)) {
102
+ $args = array(
103
+ 'type' => 'post',
104
+ 'child_of' => $category->term_id,
105
+ 'orderby' => 'name',
106
+ 'order' => 'ASC', // or any order you like
107
+ 'hide_empty' => FALSE,
108
+ 'hierarchical' => 1,
109
+ 'taxonomy' => 'category',
110
+ );
111
+ if ($child_categories = get_categories($args)) {
112
+ if (!empty($child_categories)) {
113
+ $this->_primary_category = $child_categories[0]->name;
114
+ }
115
+ }
116
+ }
117
+
118
+ }
119
+ return $this->_primary_category;
120
+ }
121
+
122
+ //
123
+ protected $_category_description; //Replaced with the category description
124
+
125
+ public function getCategory_description() {
126
+ if (!isset($this->_category_description)) {
127
+ $this->_category_description = $this->_excerpt;
128
+ }
129
+
130
+ return $this->truncate($this->_category_description, 100, $this->_sq->description_maxlength);
131
+ }
132
+
133
+ protected $_tag; //Replaced with the current tag/tags
134
+
135
+ public function getTag() {
136
+ if (!isset($this->_tag)) {
137
+ $this->_tag = $this->_title;
138
+ }
139
+ return $this->_tag;
140
+ }
141
+
142
+ protected $_tag_description; //Replaced with the tag description
143
+
144
+ public function getTag_description() {
145
+ if (!isset($this->_tag_description)) {
146
+ $this->_tag_description = $this->_excerpt;
147
+ }
148
+
149
+ return $this->truncate($this->_tag_description, 100, $this->_sq->description_maxlength);
150
+ }
151
+
152
+ protected $_term_title; //Replaced with the term name
153
+
154
+ public function getTerm_title() {
155
+ if (!isset($this->_term_title)) {
156
+ $this->_term_title = $this->_title;
157
+ }
158
+
159
+ return $this->truncate($this->_term_title, 10,$this->_sq->title_maxlength);
160
+ }
161
+
162
+ protected $_term_description; //Replaced with the term description
163
+
164
+ public function getTerm_description() {
165
+ if (!isset($this->_term_description)) {
166
+ $this->_term_description = $this->_excerpt;
167
+ }
168
+
169
+ return $this->truncate($this->_term_description, 100,$this->_sq->description_maxlength);
170
+ }
171
+
172
+ //
173
+ protected $_searchphrase; //Replaced with the current search phrase
174
+
175
+ public function getSearchphrase() {
176
+ if (!isset($this->_searchphrase)) {
177
+ $search = get_query_var('s');
178
+ if ($search !== '') {
179
+ $this->_searchphrase = esc_html($search);
180
+ }
181
+ }
182
+ return $this->_searchphrase;
183
+ }
184
+
185
+ //
186
+ protected $_sep; //The separator defined in your theme's wp_title tag
187
+
188
+ public function setSep($sep = null) {
189
+ if (isset($sep)) {
190
+ $this->_sep = $sep;
191
+ }
192
+ }
193
+
194
+ public function getSep() {
195
+ if (!isset($this->_sep)) {
196
+ $this->_sep = SQ_Classes_Tools::getOption('sq_separator');
197
+ }
198
+
199
+ $seps = json_decode(SQ_ALL_SEP, true);
200
+
201
+ if (isset($seps[$this->_sep])) {
202
+ return $seps[$this->_sep];
203
+ } else {
204
+ return $this->_sep;
205
+ }
206
+ }
207
+
208
+ /*********************************************************************************/
209
+ //
210
+ protected $_page; //Replaced with the current page number with context (i.e. page 2 of 4)
211
+
212
+ public function getPage() {
213
+ if (is_paged()) {
214
+ return $this->sep . ' ' . __('Page', _SQ_PLUGIN_NAME_) . ' ' . (int)get_query_var('paged') . ' ' .
215
+ __('of', _SQ_PLUGIN_NAME_) . ' ' . $this->pagetotal;
216
+ }
217
+ return '';
218
+ }
219
+
220
+ //
221
+ protected $_pagetotal; //Replaced with the current page total
222
+
223
+ public function getPagetotal() {
224
+ global $wp_query;
225
+ if (isset($wp_query->max_num_pages))
226
+ return (int)$wp_query->max_num_pages;
227
+
228
+ return '';
229
+ }
230
+
231
+ protected $_pagenumber; //Replaced with the current page number
232
+
233
+ //
234
+ public function getPagenumber() {
235
+ if (is_paged()) {
236
+ return (int)get_query_var('paged');
237
+ }
238
+ return '';
239
+ }
240
+
241
+ //
242
+ protected $_pt_single; //Replaced with the post type single label
243
+ protected $_pt_plural; //Replaced with the post type plural label
244
+ protected $_modified; //Replaced with the post/page modified time
245
+
246
+ public function setPost_modified($value) {
247
+ if ($value <> '') {
248
+ $this->_modified = $value;
249
+ }
250
+ }
251
+
252
+
253
+ protected $_name; //Replaced with the post/page author's 'nicename'
254
+
255
+ public function setPost_author($value) {
256
+ if ($value <> '') {
257
+ $this->_name = $value;
258
+ }
259
+ }
260
+
261
+ protected $_user_description; //Replaced with the post/page author's 'Biographical Info'
262
+
263
+ public function getUser_description() {
264
+ if (!isset($this->_user_description)) {
265
+ $this->_user_description = $this->_excerpt;
266
+ }
267
+
268
+ return $this->truncate($this->_user_description, 100, $this->_sq->description_maxlength);
269
+ }
270
+
271
+ protected $_userid; //Replaced with the post/page author's userid
272
+ protected $_currenttime; //Replaced with the current time
273
+
274
+ public function getCurrenttime() {
275
+ return date(get_option('time_format'));
276
+ }
277
+
278
+ protected $_currentdate; //Replaced with the current date
279
+
280
+ public function getCurrentdate() {
281
+ return date(get_option('date_format'));
282
+ }
283
+
284
+ protected $_currentday; //Replaced with the current day
285
+
286
+ public function getCurrentday() {
287
+ return date('d');
288
+ }
289
+
290
+ protected $_currentmonth; //Replaced with the current month
291
+
292
+ public function getCurrentmonth() {
293
+ return date('m');
294
+ }
295
+
296
+ protected $_currentyear; //Replaced with the current year
297
+
298
+ public function getCurrentyear() {
299
+ return date('y');
300
+ }
301
+
302
+ protected $_caption; //Attachment caption
303
+ protected $_keyword; //Replaced with the posts focus keyword
304
+ protected $_focuskw; //Same as keyword
305
+ protected $_term404; //Replaced with the slug which caused the 404
306
+ /*********************************************************************************/
307
+
308
+ //get the sq for title and description limits
309
+ protected $_sq;
310
+
311
+ ///////////
312
+ public function getPatterns() {
313
+ $patterns = array();
314
+ foreach ($this->_getProperties() as $property => $value) {
315
+ $patterns[$property] = '{{' . $property . '}}';
316
+ }
317
+
318
+ return $patterns;
319
+ }
320
+
321
+ protected $_currentpost;
322
+
323
+ private function _currentPost() {
324
+ if (!isset($this->_currentpost)) {
325
+ if (isset($this->id) && (int)$this->id > 0) {
326
+ $this->_currentpost = $this->_getPost($this->id);
327
+ }
328
+ }
329
+
330
+ return $this->_currentpost;
331
+ }
332
+
333
+ private function _getPost($id = null) {
334
+ $post = false;
335
+
336
+ if (isset($id)) {
337
+ if (isset($this->id) && (int)$this->id > 0) {
338
+ $post = get_post($id);
339
+ }
340
+ }
341
+
342
+ return $post;
343
+ }
344
+
345
+ public function truncate($text, $min = 100, $max = 110) {
346
+ if ($text <> '' && strlen($text) > $max) {
347
+ if (function_exists('strip_tags')) {
348
+ $text = strip_tags($text);
349
+ }
350
+ $text = str_replace(']]>', ']]&gt;', $text);
351
+ $text = @preg_replace('|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);
352
+ $text = strip_tags($text);
353
+
354
+ if ($max < strlen($text)) {
355
+ while ($text[$max] != ' ' && $max > $min) {
356
+ $max--;
357
+ }
358
+ }
359
+ $text = substr($text, 0, $max);
360
+ return trim(stripcslashes($text));
361
+ }
362
+
363
+ return $text;
364
+ }
365
+
366
+ }
models/domain/Post.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Domain_Post extends SQ_Models_Abstract_Domain {
4
+
5
+ protected $_ID;
6
+ protected $_term_taxonomy_id;
7
+ protected $_taxonomy;
8
+ protected $_post_type;
9
+ protected $_url; //set the canonical link for this post type
10
+ protected $_hash;
11
+ protected $_sq;
12
+ protected $_sq_adm;
13
+ protected $_socials;
14
+ protected $_patterns;
15
+ //
16
+ protected $_post_name;
17
+ protected $_guid;
18
+ protected $_post_author;
19
+ protected $_post_date;
20
+ protected $_post_title;
21
+ protected $_post_excerpt;
22
+ protected $_post_attachment;
23
+ protected $_post_content;
24
+ protected $_post_status;
25
+ protected $_post_password;
26
+
27
+ protected $_post_parent;
28
+ protected $_post_modified;
29
+ protected $_category;
30
+ protected $_category_description;
31
+ protected $_noindex;
32
+
33
+ protected $_debug;
34
+
35
+ public function getSocials() {
36
+ if (!isset($this->_socials)) {
37
+ $this->_socials = json_decode(json_encode(SQ_Classes_Tools::getOption('socials')));
38
+ }
39
+
40
+ return $this->_socials;
41
+ }
42
+
43
+ public function getSq() {
44
+ if (!isset($this->_sq) && isset($this->_post_type) && $this->_post_type <> '') {
45
+ //Get the saved sq settings
46
+ $this->_sq = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($this->_hash);
47
+ if (!empty($this->_sq)) {
48
+ $patterns = SQ_Classes_Tools::getOption('patterns');
49
+ //print_R($patterns);
50
+ if (!empty($patterns) && $sq_array = $this->_sq->toArray()) {
51
+ if (!empty($sq_array))
52
+ foreach ($sq_array as $key => $value) {
53
+ if ($value == '') {
54
+ if (isset($patterns[$this->_post_type])) {
55
+ if (isset($patterns[$this->_post_type][$key])) {
56
+ $this->_sq->$key = $patterns[$this->_post_type][$key];
57
+ if (isset($patterns[$this->_post_type]['sep'])) $this->_sq->sep = $patterns[$this->_post_type]['sep'];
58
+ if (isset($patterns[$this->_post_type]['noindex']) && !$this->_sq->noindex) $this->_sq->noindex = $patterns[$this->_post_type]['noindex'];
59
+ if (isset($patterns[$this->_post_type]['nofollow']) && !$this->_sq->nofollow) $this->_sq->nofollow = $patterns[$this->_post_type]['nofollow'];
60
+ }
61
+ } else {
62
+ if (isset($patterns['custom'][$key])) {
63
+ $this->_sq->$key = $patterns['custom'][$key];
64
+ if (isset($patterns['custom']['sep'])) $this->_sq->sep = $patterns['custom']['sep'];
65
+ if (isset($patterns['custom']['noindex']) && !$this->_sq->noindex) $this->_sq->noindex = $patterns['custom']['noindex'];
66
+ if (isset($patterns['custom']['nofollow']) && !$this->_sq->nofollow) $this->_sq->nofollow = $patterns['custom']['nofollow'];
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+
75
+ }
76
+
77
+ return $this->_sq;
78
+ }
79
+
80
+ public function getSq_adm() {
81
+
82
+ if (!isset($this->_sq_adm) && isset($this->_post_type) && $this->_post_type <> '') {
83
+ if (is_user_logged_in()) {
84
+ $this->_sq_adm = SQ_Classes_ObjController::getClass('SQ_Models_Frontend')->getSqSeo($this->_hash, $this->ID);
85
+
86
+ if (!empty($this->_sq_adm)) {
87
+ $patterns = SQ_Classes_Tools::getOption('patterns');
88
+ //print_R($this);
89
+ if (!empty($patterns) && $sq_array = $this->_sq_adm->toArray()) {
90
+ if (!empty($sq_array))
91
+ foreach ($sq_array as $key => $value) {
92
+ if ($value == '') {
93
+ if (isset($patterns[$this->_post_type])) {
94
+ $this->_sq_adm->patterns = json_decode(json_encode($patterns[$this->_post_type]));
95
+ } else {
96
+ $this->_sq_adm->patterns = json_decode(json_encode($patterns['custom']));
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }
104
+ return $this->_sq_adm;
105
+ }
106
+
107
+ public function getID() {
108
+ return $this->_ID;
109
+ }
110
+
111
+ public function importSEO() {
112
+ if (isset($this->_ID) && (int)$this->_ID > 0) {
113
+ $platforms = apply_filters('sq_importList', false);
114
+ $import = array();
115
+
116
+ if (!empty($platforms)) {
117
+ foreach ($platforms as $path => &$metas) {
118
+ if ($metas = SQ_Classes_ObjController::getClass('SQ_Models_Admin')->getDBSeo($this->_ID, $metas)) {
119
+ if (strpos($metas, '%%') !== false) {
120
+ $metas = preg_replace('/%%([^\%]+)%%/', '{{$1}}', $metas);
121
+ }
122
+ $import[SQ_Classes_ObjController::getClass('SQ_Models_Admin')->getName($path)] = $metas;
123
+ }
124
+ }
125
+ }
126
+
127
+ return $import;
128
+ }
129
+ }
130
+
131
+ public function getPost_attachment() {
132
+ if (!isset($this->_post_attachment) && isset($this->_ID) && (int)$this->_ID > 0) {
133
+ if (has_post_thumbnail($this->_ID)) {
134
+ $attachment = get_post(get_post_thumbnail_id($this->_ID));
135
+ if (isset($attachment->ID)) {
136
+ $url = wp_get_attachment_image_src($attachment->ID, 'full');
137
+ $this->_post_attachment = esc_url($url[0]);
138
+ }
139
+ }
140
+ }
141
+
142
+ return $this->_post_attachment;
143
+ }
144
+
145
+ public function toArray() {
146
+ $array = parent::toArray();
147
+ $array['sq'] = $this->sq;
148
+
149
+ return $array;
150
+ }
151
+ }
models/domain/Sq.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Domain_Sq extends SQ_Models_Abstract_Domain {
4
+
5
+ protected $_doseo;
6
+ protected $_noindex;
7
+ protected $_nofollow;
8
+ protected $_nositemap;
9
+ //
10
+ protected $_title;
11
+ protected $_description;
12
+ protected $_keywords;
13
+ protected $_canonical;
14
+
15
+ protected $_robots;
16
+ protected $_cornerstone;
17
+ //
18
+ protected $_tw_media;
19
+ protected $_tw_title;
20
+ protected $_tw_description;
21
+ protected $_tw_type;
22
+ //
23
+ protected $_og_title;
24
+ protected $_og_description;
25
+ protected $_og_author;
26
+ protected $_og_type;
27
+ protected $_og_media;
28
+
29
+ //
30
+ // protected $_jsonld_title;
31
+ // protected $_jsonld_description;
32
+ // protected $_jsonld_type;
33
+ // protected $_jsonld_media;
34
+
35
+ // lengths
36
+ protected $_title_maxlength = 75;
37
+ protected $_description_maxlength = 165;
38
+ protected $_og_title_maxlength = 75;
39
+ protected $_og_description_maxlength = 110;
40
+ protected $_tw_title_maxlength = 75;
41
+ protected $_tw_description_maxlength = 100;
42
+ protected $_jsonld_title_maxlength = 75;
43
+ protected $_jsonld_description_maxlength = 110;
44
+
45
+ // for sq_adm patterns
46
+ protected $_patterns;
47
+ //get custom post type separator
48
+ protected $_sep;
49
+
50
+
51
+ public function getDoseo() {
52
+ if (!isset($this->_doseo)) {
53
+ $this->_doseo = 1;
54
+ }
55
+
56
+ return (int)$this->_doseo;
57
+ }
58
+
59
+ public function getNoindex() {
60
+ if (!isset($this->_noindex)) {
61
+ $this->_noindex = 0;
62
+ }
63
+
64
+ return (int)$this->_noindex;
65
+ }
66
+
67
+ public function getNositemap() {
68
+ if (!isset($this->_nositemap)) {
69
+ $this->_nositemap = 0;
70
+ }
71
+
72
+ return (int)$this->_nositemap;
73
+ }
74
+
75
+ public function getNofollow() {
76
+ if (!isset($this->_nofollow)) {
77
+ $this->_nofollow = 0;
78
+ }
79
+
80
+ return (int)$this->_nofollow;
81
+ }
82
+
83
+ public function getOg_type() {
84
+ if (!isset($this->_og_type)) {
85
+ global $post;
86
+ if (isset($post->post_type)) {
87
+ $this->_og_type = $this->getPostType($post->post_type);
88
+ }
89
+ }
90
+
91
+ return $this->_og_type;
92
+ }
93
+
94
+
95
+ public function getPostType($type) {
96
+ $types = array(
97
+ 'home' => 'website',
98
+ 'profile' => 'profile',
99
+ 'post' => 'article',
100
+ 'page' => 'article',
101
+ 'book' => 'book',
102
+ 'music' => 'music',
103
+ 'product' => 'product',
104
+ 'video' => 'video');
105
+
106
+ if (in_array($type, array_keys($types))) {
107
+ return $types[$type];
108
+ }
109
+
110
+ return $types['home'];
111
+ }
112
+
113
+ public function getClearedTitle() {
114
+ if (isset($this->_title)) {
115
+ $this->_title = $this->clearTitle($this->_title);
116
+ }
117
+
118
+ return $this->_title;
119
+ }
120
+
121
+ public function getClearedDescription() {
122
+ if (isset($this->_description)) {
123
+ $this->_description = $this->clearDescription($this->_description);
124
+ }
125
+
126
+ return $this->_description;
127
+ }
128
+
129
+ /**
130
+ * Clear and format the title for all languages
131
+ * @param $title
132
+ * @return string
133
+ */
134
+ public function clearTitle($title) {
135
+ return SQ_Classes_Tools::clearTitle($title);
136
+ }
137
+
138
+ /**
139
+ * Clear and format the descrition for all languages
140
+ * @param $description
141
+ * @return mixed|string
142
+ */
143
+ public function clearDescription($description) {
144
+ return SQ_Classes_Tools::clearDescription($description);
145
+ }
146
+ }
models/services/Analytics.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Analytics extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ if (!SQ_Classes_Tools::getOption('sq_auto_amp')) {
10
+ add_filter('sq_google_analytics', array($this, 'generateGoogleAnalytics'));
11
+ add_filter('sq_google_analytics', array($this, 'packGoogleAnalytics'), 99);
12
+ } else {
13
+ add_filter('sq_google_analytics', array($this, 'generateGoogleAnalyticsAMP'));
14
+ add_filter('sq_google_analytics_amp', array($this, 'packGoogleAnalyticsAMP'));
15
+ }
16
+ } else {
17
+ add_filter('sq_google_analytics', array($this, 'returnFalse'));
18
+ add_filter('sq_google_analytics_footer', array($this, 'returnFalse'));
19
+ }
20
+ }
21
+
22
+ public function generateGoogleAnalytics($track = '') {
23
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
24
+
25
+ if (isset($codes->google_analytics) && $codes->google_analytics <> '') {
26
+ $track = $codes->google_analytics;
27
+ }
28
+
29
+ return $track;
30
+ }
31
+
32
+ public function packGoogleAnalytics($track = '') {
33
+ if ($track <> '') {
34
+ return sprintf("<script async src='https://www.google-analytics.com/analytics.js'></script><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '%s', 'auto');ga('send', 'pageview');</script>", $track);
35
+ }
36
+
37
+ return false;
38
+ }
39
+
40
+ /*************************** FOR AMP VERSION**********************************/
41
+
42
+ public function generateGoogleAnalyticsAMP() {
43
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
44
+
45
+ if (isset($codes->google_analytics) && $codes->google_analytics <> '') {
46
+ return '<script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script>';
47
+ }
48
+
49
+ return false;
50
+ }
51
+
52
+ /**
53
+ * Return the AMP Analytics
54
+ * @return string
55
+ */
56
+ public function packGoogleAnalyticsAMP() {
57
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
58
+
59
+ if (isset($codes->google_analytics) && $codes->google_analytics <> '') {
60
+ return sprintf('<amp-analytics type="googleanalytics"><script type="application/json">{"vars": {"account": "%s"},"triggers": {"trackPageview": {"on": "visible","request": "pageview"}}}</script></amp-analytics>', $codes->google_analytics);
61
+ }
62
+
63
+ }
64
+ }
models/services/Canonical.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Canonical extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_canonical', array($this, 'generateCanonical'));
10
+ add_filter('sq_canonical', array($this, 'packCanonical'), 99);
11
+ } else {
12
+ add_filter('sq_canonical', array($this, 'returnFalse'));
13
+ }
14
+ }
15
+
16
+ public function generateCanonical($canonical = '') {
17
+ if (SQ_Classes_Tools::getOption('sq_auto_canonical') && isset($this->_post->sq->canonical) && $this->_post->sq->canonical <> '') {
18
+ $canonical = esc_url($this->_post->sq->canonical);
19
+ }else{
20
+ $canonical = urldecode(esc_url($this->_post->url));
21
+ }
22
+
23
+ return $canonical;
24
+ }
25
+
26
+ public function packCanonical($canonical = '') {
27
+ if ($canonical <> '') {
28
+ return sprintf("<link rel=\"canonical\" href=\"%s\" />", $canonical);
29
+ }
30
+
31
+ return false;
32
+ }
33
+ }
models/services/Description.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Description extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_description', array($this, 'generateDescription'));
10
+ add_filter('sq_description', array($this, 'clearDescription'), 98);
11
+ add_filter('sq_description', array($this, 'packDescription'), 99);
12
+ } else {
13
+ add_filter('sq_description', array($this, 'returnFalse'));
14
+ }
15
+
16
+ }
17
+
18
+ public function generateDescription($description = '') {
19
+
20
+ if ( $this->_post->sq->description <> '') {
21
+ $description = $this->_post->sq->description;
22
+ }
23
+
24
+ return $description;
25
+ }
26
+
27
+ public function packDescription($description) {
28
+ if ($description <> '') {
29
+ return sprintf("<meta name=\"description\" content=\"%s\" />", $description);
30
+ }
31
+ return false;
32
+ }
33
+ }
models/services/DublinCore.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_DublinCore extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_dublin_core', array($this, 'generateMeta'));
10
+ add_filter('sq_dublin_core', array($this, 'packMeta'), 99);
11
+ } else {
12
+ add_filter('sq_dublin_core', array($this, 'returnFalse'));
13
+ }
14
+
15
+ }
16
+
17
+ /**
18
+ * Get all metas for Dublin Core
19
+ * @param string $metas
20
+ * @return string
21
+ */
22
+ public function generateMeta($metas = array()) {
23
+ $date = null;
24
+ if (get_bloginfo('language') <> '') {
25
+ $metas['dc.language'] = get_bloginfo('language');
26
+ $metas['dc.language.iso'] = str_replace('-', '_', get_bloginfo('language'));
27
+ }
28
+ if (!$name = $this->getAuthor('display_name')) {
29
+ $name = get_bloginfo('name');
30
+ }
31
+
32
+ if ($name <> '') {
33
+ $metas['dc.publisher'] = $name;
34
+ }
35
+ if ($this->_post->sq->title <> '') {
36
+ $metas['dc.title'] = $this->clearTitle($this->_post->sq->title);
37
+ }
38
+ if ($this->_post->sq->description <> '') {
39
+ $metas['dc.description'] = $this->clearDescription($this->_post->sq->description);
40
+ }
41
+
42
+ if ($this->_post->post_type == 'home') {
43
+ $metas['dc.date.issued'] = date('Y-m-d', strtotime(get_lastpostmodified('gmt')));
44
+ } elseif ($this->_post->post_date <> '') {
45
+ $metas['dc.date.issued'] = date('Y-m-d', strtotime($this->_post->post_date));
46
+ }
47
+
48
+ if (isset($this->_post->post_modified) && $this->_post->post_modified <> '') {
49
+ $og['dc.date.updated'] = $this->_post->post_modified;
50
+ }
51
+
52
+ return $metas;
53
+ }
54
+
55
+ /**
56
+ * Get the author
57
+ * @param string $what
58
+ * @return bool|mixed|string
59
+ */
60
+ protected function getAuthor($what = 'user_nicename') {
61
+ if (!isset($this->author)) {
62
+ if (is_author()) {
63
+ $this->author = get_userdata(get_query_var('author'));
64
+ } elseif (is_single() && isset($this->_post->post_author)) {
65
+ $this->author = get_userdata((int)$this->_post->post_author)->data;
66
+ }
67
+ }
68
+
69
+ if (isset($this->author)) {
70
+
71
+ if ($what == 'user_url' && $this->author->$what == '') {
72
+ return get_author_posts_url($this->author->ID, $this->author->user_nicename);
73
+ }
74
+ if (isset($this->author->$what)) {
75
+ return $this->author->$what;
76
+ }
77
+ }
78
+
79
+ return false;
80
+ }
81
+
82
+ /**
83
+ * Pack the Dublin Core
84
+ * @param array $metas
85
+ * @return bool|string
86
+ */
87
+ public function packMeta($metas = array()) {
88
+ if (!empty($metas)) {
89
+ foreach ($metas as $key => &$meta) {
90
+ $meta = sprintf('<meta name="%s" content="%s" />', $key, $meta);
91
+ }
92
+
93
+ return "\n" . join("\n", array_values($metas));
94
+ }
95
+
96
+ return false;
97
+ }
98
+
99
+ }
models/services/Favicon.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Favicon extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+ if ($this->_post->sq->doseo) {
8
+ add_filter('sq_favicon', array($this, 'generateFavicon'));
9
+ add_filter('sq_favicon', array($this, 'packFavicon'), 99);
10
+ } else {
11
+ add_filter('sq_favicon', array($this, 'returnFalse'));
12
+ }
13
+ }
14
+
15
+ public function generateFavicon($favicons = array()) {
16
+ $rnd = '';
17
+
18
+ if (current_user_can('manage_options')) {
19
+ $rnd = '?' . md5(SQ_Classes_Tools::getOption('favicon'));
20
+ }
21
+
22
+ if (SQ_Classes_Tools::getOption('favicon') <> '' && file_exists(_SQ_CACHE_DIR_ . SQ_Classes_Tools::getOption('favicon'))) {
23
+ if (!get_option('permalink_structure')) {
24
+ $favicon = home_url() . '/index.php?sq_get=favicon';
25
+ $touchicon = home_url() . '/index.php?sq_get=touchicon';
26
+ } else {
27
+ $favicon = home_url() . '/favicon.icon' . $rnd;
28
+ $touchicon = home_url() . '/touch-icon.png' . $rnd;
29
+ }
30
+
31
+ $favicons['shortcut icon'] = $favicon;
32
+ $favicons['apple-touch-icon']['32'] = $touchicon;
33
+
34
+ $appleSizes = preg_split('/[,]+/', _SQ_MOBILE_ICON_SIZES);
35
+ foreach ($appleSizes as $size) {
36
+ if (!get_option('permalink_structure')) {
37
+ $favicon = home_url() . '/index.php?sq_get=touchicon&sq_size=' . $size;
38
+ } else {
39
+ $favicon = home_url() . '/touch-icon' . $size . '.png' . $rnd;
40
+ }
41
+ $favicons['apple-touch-icon'][$size] = $favicon;
42
+ }
43
+ } else {
44
+ if (file_exists(ABSPATH . 'favicon.ico')) {
45
+ $favicons['shortcut icon'] = home_url() . '/favicon.ico';
46
+ }
47
+ }
48
+
49
+ return $favicons;
50
+ }
51
+
52
+ public function packFavicon($favicons = array()) {
53
+ $allfavicons = array();
54
+ if (!empty($favicons)) {
55
+ foreach ($favicons as $key => $favicon) {
56
+ if (!is_array($favicon)) {
57
+ $allfavicons[] = sprintf('<link rel="%s" href="%s" />', $key, $favicon);
58
+ } elseif (!empty($favicon)) {
59
+ foreach ($favicon as $size => $value) {
60
+ $allfavicons[] = sprintf('<link rel="%s" sizes="%s" href="%s" />', $key, $size . 'x' . $size, $value);
61
+ }
62
+ }
63
+ }
64
+
65
+ return "\n" . join("\n", array_values($allfavicons));
66
+ }
67
+
68
+ return false;
69
+ }
70
+
71
+ }
models/services/JsonLD.php CHANGED
@@ -1,24 +1,55 @@
1
  <?php
2
 
3
- class Model_Service_JsonLD {
4
  private $_data = array();
5
  private $_types = array();
6
 
7
- /**
8
- * Constructor.
9
- */
10
  public function __construct() {
11
- if (class_exists('WooCommerce')) {
12
- // Generate structured data for Woocommerce 3.
13
- add_action('woocommerce_before_main_content', array($this, 'generate_website_data'), 31);
14
- add_action('woocommerce_breadcrumb', array($this, 'generate_breadcrumblist_data'), 11);
15
- add_action('woocommerce_shop_loop', array($this, 'generate_product_data'), 11);
16
- add_action('woocommerce_single_product_summary', array($this, 'generate_product_data'), 61);
17
- add_action('woocommerce_review_meta', array($this, 'generate_review_data'), 21);
18
- add_action('woocommerce_email_order_details', array($this, 'generate_order_data'), 21, 3);
 
 
 
 
 
 
 
 
 
19
  } else {
20
- add_action('template_redirect', array($this, 'generate_breadcrumblist_data_blog'), 99);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
 
 
22
  }
23
 
24
  /**
@@ -54,6 +85,7 @@ class Model_Service_JsonLD {
54
  return $this->_data;
55
  }
56
 
 
57
  /**
58
  * Structures and returns data.
59
  *
@@ -79,7 +111,7 @@ class Model_Service_JsonLD {
79
  // Wrap the multiple values of each type inside a graph... Then add context to each type.
80
  foreach ($data as $type => $value) {
81
  $data[$type] = count($value) > 1 ? array('@graph' => $value) : $value[0];
82
- $data[$type] = apply_filters('sq_structured_data_context', array('@context' => 'http://schema.org/'), $data, $type, $value) + $data[$type];
83
  }
84
 
85
  // If requested types, pick them up... Finally change the associative array to an indexed one.
@@ -110,25 +142,210 @@ class Model_Service_JsonLD {
110
  return array_filter(apply_filters('sq_structured_data_type_for_page', $this->_types));
111
  }
112
 
113
- /**
114
- * Sanitizes, encodes and outputs structured data.
115
- *
116
- * Hooked into `wp_footer` action hook.
117
- * Hooked into `sq_email_order_details` action hook.
118
- */
119
- public function getStructuredData() {
120
- $types = $this->get_data_type_for_page();
121
- if ($data = $this->clean($this->get_structured_data($types))) {
122
- return '<script type="application/ld+json">' . wp_json_encode($data) . '</script>';
123
- }
124
- }
125
 
126
  public function clean($var) {
127
  if (is_array($var)) {
128
  return array_map(array($this, 'clean'), $var);
129
  } else {
130
- return is_scalar($var) ? sanitize_text_field($var) : $var;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  }
 
 
 
 
 
 
 
 
 
 
 
 
132
  }
133
 
134
 
@@ -172,19 +389,19 @@ class Model_Service_JsonLD {
172
  }
173
  }
174
 
175
- $this->set_data(apply_filters('sq_structured_data_breadcrumblist', $markup, $crumbs));
176
  }
177
 
178
  /**
179
  * Generates Product structured data.
180
  *
181
- * Hooked into `sq_single_product_summary` action hook.
182
- * Hooked into `sq_shop_loop` action hook.
183
  *
184
  * @param WC_Product $product Product data (default: null).
185
  */
186
  public function generate_product_data($product = null) {
187
- if (!is_object($product)) {
188
  global $product;
189
  }
190
 
@@ -203,8 +420,8 @@ class Model_Service_JsonLD {
203
  $markup['name'] = $product->get_title();
204
  }
205
 
206
- if (apply_filters('sq_structured_data_product_limit', is_product_taxonomy() || is_shop())) {
207
- $this->set_data(apply_filters('sq_structured_data_product_limited', $markup, $product));
208
  return;
209
  }
210
 
@@ -212,8 +429,8 @@ class Model_Service_JsonLD {
212
  '@type' => 'Offer',
213
  'priceCurrency' => $currency,
214
  'availability' => 'http://schema.org/' . $stock = ($product->is_in_stock() ? 'InStock' : 'OutOfStock'),
215
- 'sku' => $product->get_sku(),
216
- 'image' => wp_get_attachment_url($product->get_image_id()),
217
  'description' => (method_exists($product, 'get_description') ? $product->get_description() : $product->get_title()),
218
  'seller' => array(
219
  '@type' => 'Organization',
@@ -223,7 +440,7 @@ class Model_Service_JsonLD {
223
  );
224
 
225
  if ($product->is_type('variable') && method_exists($product, 'get_variation_prices')) {
226
- $prices = $product->get_variation_prices();
227
 
228
  $markup_offer['priceSpecification'] = array(
229
  'price' => wc_format_decimal($product->get_price(), wc_get_price_decimals()),
@@ -235,7 +452,7 @@ class Model_Service_JsonLD {
235
  $markup_offer['price'] = wc_format_decimal($product->get_price(), wc_get_price_decimals());
236
  }
237
 
238
- $markup['offers'] = array(apply_filters('sq_structured_data_product_offer', $markup_offer, $product));
239
 
240
  if ($product->get_rating_count()) {
241
  $markup['aggregateRating'] = array(
@@ -246,13 +463,13 @@ class Model_Service_JsonLD {
246
  );
247
  }
248
 
249
- $this->set_data(apply_filters('sq_structured_data_product', $markup, $product));
250
  }
251
 
252
  /**
253
  * Generates Review structured data.
254
  *
255
- * Hooked into `sq_review_meta` action hook.
256
  *
257
  * @param WP_Comment $comment Comment data.
258
  */
@@ -279,13 +496,12 @@ class Model_Service_JsonLD {
279
  'name' => get_comment_author($comment->comment_ID),
280
  );
281
 
282
- $this->set_data(apply_filters('sq_structured_data_review', $markup, $comment));
283
  }
284
 
285
  /**
286
  * Generates BreadcrumbList structured data.
287
  *
288
- * Hooked into `sq_breadcrumb` action hook.
289
  *
290
  * @param WC_Breadcrumb $breadcrumbs Breadcrumb data.
291
  */
@@ -310,13 +526,12 @@ class Model_Service_JsonLD {
310
  }
311
  }
312
 
313
- $this->set_data(apply_filters('sq_structured_data_breadcrumblist', $markup, $breadcrumbs));
314
  }
315
 
316
  /**
317
  * Generates WebSite structured data.
318
  *
319
- * Hooked into `sq_before_main_content` action hook.
320
  */
321
  public function generate_website_data() {
322
  $markup = array();
@@ -329,13 +544,12 @@ class Model_Service_JsonLD {
329
  'query-input' => 'required name=search_term_string',
330
  );
331
 
332
- $this->set_data(apply_filters('sq_structured_data_website', $markup));
333
  }
334
 
335
  /**
336
  * Generates Order structured data.
337
  *
338
- * Hooked into `sq_email_order_details` action hook.
339
  *
340
  * @param WP_Order $order Order data.
341
  * @param bool $sent_to_admin Send to admin (default: false).
@@ -361,11 +575,11 @@ class Model_Service_JsonLD {
361
 
362
  $markup_offers = array();
363
  foreach ($order->get_items() as $item) {
364
- if (!apply_filters('sq_order_item_visible', true, $item)) {
365
  continue;
366
  }
367
 
368
- $product = apply_filters('sq_order_item_product', $order->get_product_from_item($item), $item);
369
  $product_exists = is_object($product);
370
  $is_visible = $product_exists && $product->is_visible();
371
 
@@ -378,12 +592,12 @@ class Model_Service_JsonLD {
378
  'priceCurrency' => $order->get_currency(),
379
  'eligibleQuantity' => array(
380
  '@type' => 'QuantitativeValue',
381
- 'value' => apply_filters('sq_email_order_item_quantity', $item['qty'], $item),
382
  ),
383
  ),
384
  'itemOffered' => array(
385
  '@type' => 'Product',
386
- 'name' => apply_filters('sq_order_item_name', $item['name'], $item, $is_visible),
387
  'sku' => $product_exists ? $product->get_sku() : '',
388
  'image' => $product_exists ? wp_get_attachment_image_url($product->get_image_id()) : '',
389
  'url' => $is_visible ? get_permalink($product->get_id()) : get_home_url(),
@@ -439,6 +653,6 @@ class Model_Service_JsonLD {
439
  'target' => $order_url,
440
  );
441
 
442
- $this->set_data(apply_filters('sq_structured_data_order', $markup, $sent_to_admin, $order), true);
443
  }
444
  }
1
  <?php
2
 
3
+ class SQ_Models_Services_JsonLD extends SQ_Models_Abstract_Seo {
4
  private $_data = array();
5
  private $_types = array();
6
 
7
+
 
 
8
  public function __construct() {
9
+ parent::__construct();
10
+ if ($this->_post->sq->doseo) {
11
+ if (class_exists('WooCommerce')) {
12
+ // Generate structured data for Woocommerce 3.
13
+ add_action('woocommerce_before_main_content', array($this, 'generate_website_data'), 31);
14
+ add_action('woocommerce_breadcrumb', array($this, 'generate_breadcrumblist_data'), 11);
15
+ add_action('woocommerce_shop_loop', array($this, 'generate_product_data'), 11);
16
+ add_action('woocommerce_single_product_summary', array($this, 'generate_product_data'), 61);
17
+ add_action('woocommerce_review_meta', array($this, 'generate_review_data'), 21);
18
+ add_action('woocommerce_email_order_details', array($this, 'generate_order_data'), 21, 3);
19
+ } else {
20
+ add_filter('sq_json_ld', array($this, 'generate_breadcrumblist_data_blog'), 9);
21
+ }
22
+ add_filter('sq_json_ld', array($this, 'generate_structured_data_blog'), 9);
23
+
24
+ add_filter('sq_json_ld', array($this, 'generateJsonLd'));
25
+ add_filter('sq_json_ld', array($this, 'packJsonLd'), 99);
26
  } else {
27
+ add_filter('sq_json_ld', array($this, 'returnFalse'));
28
+ }
29
+ }
30
+
31
+
32
+ /**
33
+ * Sanitizes, encodes and outputs structured data.
34
+ *
35
+ * @return array|string
36
+ */
37
+ public function generateJsonLd() {
38
+ $types = $this->get_data_type_for_page();
39
+ $data = $this->clean($this->get_structured_data($types));
40
+
41
+ return $data;
42
+ }
43
+
44
+ /**
45
+ * Pack the Structured Data
46
+ */
47
+ public function packJsonLd($data = array()) {
48
+ if (!empty($data)) {
49
+ return '<script type="application/ld+json">' . wp_json_encode($data) . '</script>';
50
  }
51
+
52
+ return false;
53
  }
54
 
55
  /**
85
  return $this->_data;
86
  }
87
 
88
+
89
  /**
90
  * Structures and returns data.
91
  *
111
  // Wrap the multiple values of each type inside a graph... Then add context to each type.
112
  foreach ($data as $type => $value) {
113
  $data[$type] = count($value) > 1 ? array('@graph' => $value) : $value[0];
114
+ $data[$type] = apply_filters('woocommerce_structured_data_context', array('@context' => 'http://schema.org/'), $data, $type, $value) + $data[$type];
115
  }
116
 
117
  // If requested types, pick them up... Finally change the associative array to an indexed one.
142
  return array_filter(apply_filters('sq_structured_data_type_for_page', $this->_types));
143
  }
144
 
 
 
 
 
 
 
 
 
 
 
 
 
145
 
146
  public function clean($var) {
147
  if (is_array($var)) {
148
  return array_map(array($this, 'clean'), $var);
149
  } else {
150
+ return is_string($var) ? ((strpos($var,'://') !== false) ? esc_url($var) : sanitize_text_field($var)) : $var;
151
+ }
152
+ }
153
+
154
+ public function generate_structured_data_blog() {
155
+ $jsonld = SQ_Classes_Tools::getOption('sq_jsonld');
156
+ $jsonld_type = SQ_Classes_Tools::getOption('sq_jsonld_type');
157
+ $socials = SQ_Classes_Tools::getOption('socials');
158
+
159
+ if ($this->_post->post_type == 'home') {
160
+ $markup['@type'] = $jsonld_type;
161
+ $markup['@id'] = $this->_post->url;
162
+ $markup['url'] = $this->_post->url;
163
+
164
+ if (isset($jsonld[$jsonld_type])) {
165
+ foreach ($jsonld[$jsonld_type] as $key => $value) {
166
+ if ($value <> '') {
167
+ if ($key == 'contactType' || ($jsonld_type == 'Organization' && $key == 'jobTitle') ) {
168
+ continue;
169
+ }
170
+ if ($jsonld_type == 'Organization' && $key == 'telephone' ) {
171
+ $markup['contactPoint'] = array(
172
+ '@type' => 'ContactPoint',
173
+ 'telephone' => $value,
174
+ 'contactType' => $jsonld[$jsonld_type]['contactType'],
175
+
176
+ );
177
+ }
178
+
179
+ if ($key == 'logo') {
180
+ if ($jsonld_type == 'Person') {
181
+ $key = 'image';
182
+ }
183
+ $markup[$key] = array(
184
+ '@type' => 'ImageObject',
185
+ 'url' => $value,
186
+ );
187
+ } else {
188
+ $markup[$key] = $value;
189
+ }
190
+
191
+ }
192
+ }
193
+ }
194
+
195
+ if (!empty($markup)) {
196
+ $jsonld_socials = array();
197
+ if (isset($socials['facebook_site']) && $socials['facebook_site'] <> '') {
198
+ $jsonld_socials[] = $socials['facebook_site'];
199
+ }
200
+ if (isset($socials['twitter_site']) && $socials['twitter_site'] <> '') {
201
+ $jsonld_socials[] = $socials['twitter_site'];
202
+ }
203
+ if (isset($socials['instagram_url']) && $socials['instagram_url'] <> '') {
204
+ $jsonld_socials[] = $socials['instagram_url'];
205
+ }
206
+ if (isset($socials['linkedin_url']) && $socials['linkedin_url'] <> '') {
207
+ $jsonld_socials[] = $socials['linkedin_url'];
208
+ }
209
+ if (isset($socials['myspace_url']) && $socials['myspace_url'] <> '') {
210
+ $jsonld_socials[] = $socials['myspace_url'];
211
+ }
212
+ if (isset($socials['twitter']) && $socials['twitter'] <> '') {
213
+ $jsonld_socials[] = $socials['twitter'];
214
+ }
215
+ if (isset($socials['pinterest_url']) && $socials['pinterest_url'] <> '') {
216
+ $jsonld_socials[] = $socials['pinterest_url'];
217
+ }
218
+ if (isset($socials['youtube_url']) && $socials['youtube_url'] <> '') {
219
+ $jsonld_socials[] = $socials['youtube_url'];
220
+ }
221
+ if (isset($socials['google_plus_url']) && $socials['google_plus_url'] <> '') {
222
+ $jsonld_socials[] = $socials['google_plus_url'];
223
+ }
224
+
225
+ $markup['potentialAction'] = array(
226
+ '@type' => 'SearchAction',
227
+ 'target' => get_bloginfo('url') . '?s={search_string}',
228
+ 'query-input' => 'required name=search_string',
229
+ );
230
+
231
+ if (!empty($jsonld_socials)) {
232
+ $markup['sameAs'] = $jsonld_socials;
233
+ }
234
+ }
235
+ //add current markup
236
+ $this->set_data($markup);
237
+ } elseif ($this->_post->post_type == 'post' || $this->_post->sq->og_type == 'article') {
238
+
239
+ $markup['@type'] = 'Article';
240
+ $markup['@id'] = $this->_post->url;
241
+ $markup['url'] = $this->_post->url;
242
+
243
+ if (isset($this->_post->sq->title)) {
244
+ $markup['name'] = $this->truncate($this->_post->sq->title, 0, $this->_post->sq->jsonld_title_maxlength);
245
+ }
246
+
247
+ if (isset($this->_post->sq->description)) {
248
+ $markup['headline'] = $this->truncate($this->_post->sq->description, 0, $this->_post->sq->jsonld_description_maxlength);
249
+ }
250
+ $markup['mainEntityOfPage'] = array(
251
+ '@type' => 'WebPage',
252
+ 'url' => $this->_post->url
253
+ );
254
+
255
+ if (isset($this->_post->sq->og_media) && $this->_post->sq->og_media <> '') {
256
+ $markup['thumbnailUrl'] = $this->_post->sq->og_media;
257
+ }
258
+ if (isset($this->_post->post_date)) {
259
+ $markup['datePublished'] = date('c', strtotime($this->_post->post_date));
260
+ }
261
+ if (isset($this->_post->post_modified)) {
262
+ $markup['dateModified'] = date('c', strtotime($this->_post->post_modified));
263
+ }
264
+
265
+ if (isset($this->_post->sq->og_media) && $this->_post->sq->og_media <> '') {
266
+ $markup['image'] = array(
267
+ "@type" => "ImageObject",
268
+ "url" => $this->_post->sq->og_media,
269
+ "height" => 500,
270
+ "width" => 700,
271
+ );
272
+ }
273
+
274
+ $markup['author'] = array(
275
+ "@type" => "Person",
276
+ "url" => $this->getAuthor('user_url'),
277
+ "name" => $this->getAuthor('display_name'),
278
+ );
279
+
280
+
281
+
282
+ if ($jsonld_type == 'Organization' && isset($jsonld[$jsonld_type])) {
283
+ $markup['publisher'] = array(
284
+ "@type" => $jsonld_type,
285
+ "url" => $this->_post->url,
286
+ "name" => $this->getAuthor('display_name'),
287
+ );
288
+
289
+ foreach ($jsonld[$jsonld_type] as $key => $value) {
290
+ if ($value <> '') {
291
+ if ($key == 'contactType' || $key == 'telephone' || $key == 'jobTitle') {
292
+ continue;
293
+ }
294
+
295
+ if ($key == 'logo') {
296
+ $markup['publisher']['logo'] = array(
297
+ "@type" => "ImageObject",
298
+ "url" => $value
299
+ );
300
+
301
+ } else {
302
+ $markup['publisher'][$key] = $value;
303
+ }
304
+ }
305
+ }
306
+ }
307
+
308
+ if ($this->_post->sq->keywords <> '') {
309
+ $markup['keywords'] = $this->_post->sq->keywords;
310
+ }
311
+ //add current markup
312
+ $this->set_data($markup);
313
+ } elseif (is_author()) {
314
+ $markup['@type'] = 'Person';
315
+ $markup['@id'] = $this->getAuthor('user_url');
316
+ $markup['url'] = $this->getAuthor('user_url');
317
+ $markup['name'] = $this->getAuthor('display_name');
318
+
319
+ //add current markup
320
+ $this->set_data($markup);
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Get the author
326
+ * @param string $what
327
+ * @return bool|mixed|string
328
+ */
329
+ protected function getAuthor($what = 'user_nicename') {
330
+ if (!isset($this->author)) {
331
+ if (is_author()) {
332
+ $this->author = get_userdata(get_query_var('author'));
333
+ } elseif (is_single() && isset($this->_post->post_author)) {
334
+ $this->author = get_userdata((int)$this->_post->post_author)->data;
335
+ }
336
  }
337
+
338
+ if (isset($this->author)) {
339
+
340
+ if ($what == 'user_url' && $this->author->$what == '') {
341
+ return get_author_posts_url($this->author->ID, $this->author->user_nicename);
342
+ }
343
+ if (isset($this->author->$what)) {
344
+ return $this->author->$what;
345
+ }
346
+ }
347
+
348
+ return false;
349
  }
350
 
351
 
389
  }
390
  }
391
 
392
+ $this->set_data($markup);
393
  }
394
 
395
  /**
396
  * Generates Product structured data.
397
  *
398
+ * Hooked into `woocommerce_single_product_summary` action hook.
399
+ * Hooked into `woocommerce_shop_loop` action hook.
400
  *
401
  * @param WC_Product $product Product data (default: null).
402
  */
403
  public function generate_product_data($product = null) {
404
+ if (!$product instanceof WC_Product) {
405
  global $product;
406
  }
407
 
420
  $markup['name'] = $product->get_title();
421
  }
422
 
423
+ if (apply_filters('woocommerce_structured_data_product_limit', is_product_taxonomy() || is_shop())) {
424
+ $this->set_data(apply_filters('woocommerce_structured_data_product_limited', $markup, $product));
425
  return;
426
  }
427
 
429
  '@type' => 'Offer',
430
  'priceCurrency' => $currency,
431
  'availability' => 'http://schema.org/' . $stock = ($product->is_in_stock() ? 'InStock' : 'OutOfStock'),
432
+ 'sku' => (method_exists($product, 'get_sku')) ? $product->get_sku() : '',
433
+ 'image' => (method_exists($product, 'get_image_id')) ? wp_get_attachment_url($product->get_image_id()) : '',
434
  'description' => (method_exists($product, 'get_description') ? $product->get_description() : $product->get_title()),
435
  'seller' => array(
436
  '@type' => 'Organization',
440
  );
441
 
442
  if ($product->is_type('variable') && method_exists($product, 'get_variation_prices')) {
443
+ $prices = $product->get_variation_prices();
444
 
445
  $markup_offer['priceSpecification'] = array(
446
  'price' => wc_format_decimal($product->get_price(), wc_get_price_decimals()),
452
  $markup_offer['price'] = wc_format_decimal($product->get_price(), wc_get_price_decimals());
453
  }
454
 
455
+ $markup['offers'] = $markup_offer;
456
 
457
  if ($product->get_rating_count()) {
458
  $markup['aggregateRating'] = array(
463
  );
464
  }
465
 
466
+ $this->set_data($markup);
467
  }
468
 
469
  /**
470
  * Generates Review structured data.
471
  *
472
+ * Hooked into `generate_review_data` action hook.
473
  *
474
  * @param WP_Comment $comment Comment data.
475
  */
496
  'name' => get_comment_author($comment->comment_ID),
497
  );
498
 
499
+ $this->set_data($markup);
500
  }
501
 
502
  /**
503
  * Generates BreadcrumbList structured data.
504
  *
 
505
  *
506
  * @param WC_Breadcrumb $breadcrumbs Breadcrumb data.
507
  */
526
  }
527
  }
528
 
529
+ $this->set_data($markup);
530
  }
531
 
532
  /**
533
  * Generates WebSite structured data.
534
  *
 
535
  */
536
  public function generate_website_data() {
537
  $markup = array();
544
  'query-input' => 'required name=search_term_string',
545
  );
546
 
547
+ $this->set_data($markup);
548
  }
549
 
550
  /**
551
  * Generates Order structured data.
552
  *
 
553
  *
554
  * @param WP_Order $order Order data.
555
  * @param bool $sent_to_admin Send to admin (default: false).
575
 
576
  $markup_offers = array();
577
  foreach ($order->get_items() as $item) {
578
+ if (!apply_filters('woocommerce_order_item_visible', true, $item)) {
579
  continue;
580
  }
581
 
582
+ $product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item);
583
  $product_exists = is_object($product);
584
  $is_visible = $product_exists && $product->is_visible();
585
 
592
  'priceCurrency' => $order->get_currency(),
593
  'eligibleQuantity' => array(
594
  '@type' => 'QuantitativeValue',
595
+ 'value' => apply_filters('woocommerce_email_order_item_quantity', $item['qty'], $item),
596
  ),
597
  ),
598
  'itemOffered' => array(
599
  '@type' => 'Product',
600
+ 'name' => apply_filters('woocommerce_order_item_name', $item['name'], $item, $is_visible),
601
  'sku' => $product_exists ? $product->get_sku() : '',
602
  'image' => $product_exists ? wp_get_attachment_image_url($product->get_image_id()) : '',
603
  'url' => $is_visible ? get_permalink($product->get_id()) : get_home_url(),
653
  'target' => $order_url,
654
  );
655
 
656
+ $this->set_data(apply_filters('woocommerce_structured_data_order', $markup, $sent_to_admin, $order), true);
657
  }
658
  }
models/services/Keywords.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Keywords extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_keywords', array($this, 'generateKeywords'));
10
+ add_filter('sq_keywords', array($this, 'clearKeywords'), 98);
11
+ add_filter('sq_keywords', array($this, 'packKeywords'), 99);
12
+ } else {
13
+ add_filter('sq_keywords', array($this, 'returnFalse'));
14
+ }
15
+ }
16
+
17
+ public function generateKeywords($keywords = '') {
18
+
19
+ if (($this->_post->sq->keywords <> -1) && $this->_post->sq->keywords <> '') {
20
+ $keywords = $this->_post->sq->keywords;
21
+ }
22
+
23
+ if ($keywords == '' && SQ_Classes_Tools::getOption('sq_keywordtag')) {
24
+ $posttags = get_the_tags($this->_post->post_id);
25
+ if (!empty($posttags)) {
26
+ foreach($posttags as $tag) {
27
+ $tags[] = $tag->name;
28
+ }
29
+ $keywords = join(',', $tags);
30
+ }
31
+ }
32
+
33
+ return $keywords;
34
+ }
35
+
36
+ public function packKeywords($keywords = '') {
37
+ if ($keywords <> '') {
38
+ return sprintf("<meta name=\"keywords\" content=\"%s\" />", $keywords);
39
+ }
40
+ return '';
41
+ }
42
+ }
models/services/Noindex.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Noindex extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+ if ($this->_post->sq->doseo) {
8
+ add_filter('sq_noindex', array($this, 'generateNoindex'));
9
+ add_filter('sq_noindex', array($this, 'packNoindex'), 99);
10
+ } else {
11
+ add_filter('sq_noindex', array($this, 'returnFalse'));
12
+ }
13
+ }
14
+
15
+ public function generateNoindex($robots = array()) {
16
+ if ((int)$this->_post->sq->noindex == 1) {
17
+ $robots[] = 'noindex';
18
+ }
19
+ if ((int)$this->_post->sq->nofollow == 1) {
20
+ $robots[] = 'nofollow';
21
+ } elseif (!empty($robots)) {
22
+ $robots[] = 'follow';
23
+ }
24
+
25
+ return $robots;
26
+ }
27
+
28
+ public function packNoindex($robots = array()) {
29
+ if (!empty($robots)) {
30
+ return sprintf("<meta name=\"robots\" content=\"%s\">", join(',', $robots));
31
+ }
32
+
33
+ return false;
34
+ }
35
+
36
+ }
models/services/OpenGraph.php ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_OpenGraph extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('locale', array($this, 'setLocale'));
10
+ add_filter('sq_html_prefix', array($this, 'addOGPrefix'));
11
+
12
+ add_filter('sq_open_graph', array($this, 'generateOpenGraph'));
13
+ add_filter('sq_open_graph', array($this, 'packOpenGraph'), 99);
14
+ } else {
15
+ add_filter('sq_open_graph', array($this, 'returnFalse'));
16
+ }
17
+
18
+ }
19
+
20
+ public function addOGPrefix($prefix = '') {
21
+ $prefix .= 'og: http://ogp.me/ns#';
22
+ if (!empty($this->_post->socials->fb_admins) || $this->_post->socials->fbadminapp <> '') {
23
+ $prefix .= ' fb: http://ogp.me/ns/fb#';
24
+ }
25
+
26
+ return $prefix;
27
+ }
28
+
29
+ public function generateOpenGraph($og = array()) {
30
+ if (SQ_Classes_Tools::getOption('sq_auto_facebook')) {
31
+ if ($this->_post->url <> '') {
32
+ $og['og:url'] = urldecode(esc_url($this->_post->url));
33
+ }
34
+
35
+ if ($this->_post->sq->og_title <> '') {
36
+ $og['og:title'] = $this->clearTitle($this->_post->sq->og_title);
37
+ } else {
38
+ $og['og:title'] = $this->clearTitle($this->_post->sq->title);
39
+ }
40
+
41
+ if ($this->_post->sq->og_description <> '') {
42
+ $og['og:description'] = $this->clearDescription($this->_post->sq->og_description);
43
+ } else {
44
+ $og['og:description'] = $this->clearDescription($this->_post->sq->description);
45
+ }
46
+
47
+
48
+ if ($this->_post->sq->og_type <> '') {
49
+ $og['og:type'] = $this->_post->sq->og_type;
50
+ } else {
51
+ $og['og:type'] = 'website';
52
+ }
53
+
54
+ if (!isset($og['og:image'])) {
55
+ if ($this->_post->sq->og_media <> '') {
56
+ $og['og:image'] = $this->_post->sq->og_media;
57
+ $og['og:image:width'] = '500';
58
+ if ($og['og:type'] == 'video') {
59
+ $this->_setMedia($og);
60
+ }
61
+ } else {
62
+ $this->_setMedia($og);
63
+ }
64
+ }
65
+
66
+ $og['og:site_name'] = get_bloginfo('title');
67
+ $og['og:locale'] = get_locale();
68
+
69
+ if ($this->_post->socials->fbadminapp <> '') {
70
+ $og['fb:app_id'] = $this->_post->socials->fbadminapp;
71
+ }
72
+
73
+ if (!empty($this->_post->socials->fb_admins)){
74
+ foreach ($this->_post->socials->fb_admins as $admin){
75
+ if (isset($admin->id)) {
76
+ $og['fb:admins'][] = $admin->id;
77
+ }
78
+ }
79
+ }
80
+ if ($this->_post->post_type == 'post') {
81
+ if (isset($this->_post->post_date) && $this->_post->post_date <> '') {
82
+ $og['article:published_time'] = $this->_post->post_date;
83
+ }
84
+ if (isset($this->_post->post_modified) && $this->_post->post_modified <> '') {
85
+ $og['article:modified_time'] = $this->_post->post_modified;
86
+ }
87
+ if (isset($this->_post->category) && $this->_post->category <> '') {
88
+ $og['article:section'] = $this->_post->category;
89
+ }else{
90
+ $category = get_the_category($this->_post->ID);
91
+ if (!empty($category) && $category[0]->cat_name <> 'Uncategorized') {
92
+ $og['article:section'] = $category[0]->cat_name;
93
+ }
94
+ }
95
+
96
+ if ($this->_post->sq->keywords <> ''){
97
+ $keywords = explode(',',$this->_post->sq->keywords);
98
+ }
99
+ if (!empty($keywords)) {
100
+ foreach ($keywords as $keyword) {
101
+ $og['article:tags'][] = $keyword;
102
+ }
103
+ }
104
+ }elseif ($this->_post->post_type == 'profile' && $this->_post->post_author <> '') {
105
+ if (strpos($this->_post->post_author, " ") !== false) {
106
+ $author = explode(" ", $this->_post->post_author);
107
+ } else {
108
+ $author = array($this->_post->post_author);
109
+ }
110
+ $og['profile:first_name'] = $author[0];
111
+ if (isset($author[1])) $og['profile:last_name'] = $author[1];
112
+ }elseif ($this->_post->post_type === 'product') {
113
+ if ($this->_post->category <> '') {
114
+ $og['product:category'] = $this->_post->category;
115
+ }
116
+
117
+ global $product;
118
+ if ($product instanceof WC_Product) {
119
+ $currency = 'USD';
120
+ $regular_price = $sale_price = $price = $sales_price_from = $sales_price_to = 0;
121
+
122
+ if (method_exists($product, 'get_regular_price')) {
123
+ $regular_price = $product->get_regular_price();
124
+ }
125
+ if (method_exists($product, 'get_sale_price')) {
126
+ $sale_price = $product->get_sale_price();
127
+ if ($sale_price > 0 && method_exists($product, 'get_date_on_sale_from')) {
128
+ $sales_price_from = $product->get_date_on_sale_from();
129
+ $sale_price = $product->get_date_on_sale_from();
130
+ }
131
+ }
132
+ if (method_exists($product, 'get_price')) {
133
+ $price = $product->get_price();
134
+ }
135
+
136
+ if (function_exists('get_woocommerce_currency')) {
137
+ $currency = get_woocommerce_currency();
138
+ }
139
+
140
+ if ($regular_price > 0 && $regular_price <> $price) {
141
+ $og['product:original_price:amount'] = wc_format_decimal($regular_price, wc_get_price_decimals());
142
+ $og['product:original_price:currency'] = $currency;
143
+ }
144
+
145
+ if ($price > 0) {
146
+ $og['product:price:amount'] = wc_format_decimal($price, wc_get_price_decimals());
147
+ $og['product:price:currency'] = $currency;
148
+ }
149
+
150
+ if ($sale_price > 0) {
151
+ $og['product:sale_price:amount'] = wc_format_decimal($sale_price, wc_get_price_decimals());
152
+ $og['product:sale_price:currency'] = $currency;
153
+
154
+ if ($sales_price_from > 0) {
155
+ $og['product:sale_price:start'] = date("Y-m-d H:i:s", $sales_price_from);
156
+ }
157
+ if ($sales_price_to) {
158
+ $og['product:sale_price:end'] = date("Y-m-d H:i:s", $sales_price_to);
159
+ }
160
+
161
+ }
162
+
163
+
164
+ }
165
+ }
166
+
167
+ }
168
+ return $og;
169
+ }
170
+
171
+ protected function _setMedia(&$og) {
172
+ if ($og['og:type'] == 'video') {
173
+ $videos = $this->getPostVideos();
174
+ if (!empty($videos)) {
175
+ $video = current($videos);
176
+ if ($video <> '') {
177
+ $video = preg_replace('/(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"\'>\s]+)/si', "https://www.youtube.com/v/$1", $video);
178
+
179
+ $og['og:video'] = $video;
180
+ $og['og:video:width'] = '500';
181
+ $og['og:video:height'] = '280';
182
+ }
183
+ }
184
+ } else {
185
+ $images = $this->getPostImages();
186
+ if (!empty($images)) {
187
+ $image = current($images);
188
+ if (isset($image['src'])) {
189
+ $og['og:image'] = $image['src'];
190
+ if (isset($image['width'])) {
191
+ $og['og:image:width'] = $image['width'];
192
+ }
193
+ if (isset($image['height'])) {
194
+ $og['og:image:height'] = $image['height'];
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }
200
+
201
+ public function setLocale($locale) {
202
+ if (function_exists('wpml_get_language_information') && (int)$this->_post->ID > 0) {
203
+ if ($language = wpml_get_language_information((int)$this->_post->ID)) {
204
+ if (isset($language['locale'])) {
205
+ $locale = $language['locale'];
206
+ }
207
+ }
208
+ }
209
+
210
+ return $locale;
211
+ }
212
+
213
+ public function packOpenGraph($og = array()) {
214
+ if (!empty($og)) {
215
+ foreach ($og as $key => &$value) {
216
+ if (is_array($value)){
217
+ $str = '';
218
+ foreach ($value as $subvalue){
219
+ $str .= '<meta property="' . $key . '" content="' . $subvalue . '" />' . ((count($value) > 1) ? "\n" : '');
220
+ }
221
+ $value = $str;
222
+ }else {
223
+ $value = '<meta property="' . $key . '" content="' . $value . '" />';
224
+ }
225
+ }
226
+ return "\n" . join("\n", array_values($og));
227
+ }
228
+
229
+ return false;
230
+ }
231
+
232
+ }
models/services/Pixel.php ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Pixel extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ if (!SQ_Classes_Tools::getOption('sq_auto_amp')) {
10
+ add_filter('sq_facebook_pixel', array($this, 'generatePixel'));
11
+ add_filter('sq_facebook_pixel', array($this, 'packPixel'), 99);
12
+ } else {
13
+ add_filter('sq_facebook_pixel', array($this, 'returnFalse'));
14
+ add_filter('sq_facebook_pixel_amp', array($this, 'packPixelAMP'), 99);
15
+ }
16
+ } else {
17
+ add_filter('sq_facebook_pixel', array($this, 'returnFalse'));
18
+ }
19
+ }
20
+
21
+ public function addOGPrefix($prefix = '') {
22
+ $prefix .= 'og: http://ogp.me/ns#';
23
+
24
+ return $prefix;
25
+ }
26
+
27
+ public function generatePixel($events = array()) {
28
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
29
+
30
+ if (isset($codes->facebook_pixel) && $codes->facebook_pixel <> '') {
31
+ $domain = str_replace(array('http://', 'http://', 'www.'), '', get_bloginfo('url'));
32
+
33
+ if ($this->isHomePage()) {
34
+ $events[] = array(
35
+ 'type' => 'track',
36
+ 'name' => 'PageView',
37
+ 'params' => array('page' => get_bloginfo('url'), 'domain' => $domain)
38
+ );
39
+ } else {
40
+ if (isset($this->_post->ID)) {
41
+ $params['content_ids'] = array((string)$this->_post->ID);
42
+ }
43
+
44
+ $params['content_type'] = $this->_post->post_type;
45
+
46
+ if ($this->_post->post_type == 'category') {
47
+ $category = get_category(get_query_var('cat'), false);
48
+ if (isset($category->name)) {
49
+ $params['content_category'] = $category->name;
50
+ }
51
+ } elseif ($this->_post->post_type == 'product') {
52
+ $params['content_name'] = $this->_post->post_title;
53
+ $cat = get_the_terms($this->_post->ID, 'product_cat');
54
+ if (!empty($cat)) {
55
+ $params['content_category'] = $cat[0]->name;
56
+ }
57
+
58
+ if (isset($_POST['product_id']) && isset($params['content_ids']) && isset($params['content_type'])) {
59
+ if (function_exists('wc_get_product') && function_exists('get_woocommerce_currency')) {
60
+ if ($product = wc_get_product((int)$_POST['product_id'])) {
61
+ $params['value'] = $product->get_price();
62
+ $params['currency'] = get_woocommerce_currency();
63
+ }
64
+ }
65
+
66
+ $events[] = array(
67
+ 'type' => 'track',
68
+ 'name' => 'AddToCart',
69
+ 'params' => $params
70
+ );
71
+ }
72
+ } elseif ($this->_post->post_type == 'search') {
73
+ $search = get_search_query(true);
74
+ if ($search <> '') {
75
+ $params['search_string'] = $search;
76
+ $events[] = array(
77
+ 'type' => 'track',
78
+ 'name' => 'Search',
79
+ 'params' => $params
80
+ );
81
+ }
82
+ } elseif ($this->_post->post_type == 'checkout' && isset($this->_post->ID)) {
83
+ global $woocommerce;
84
+ if (isset($woocommerce->cart->total) && $woocommerce->cart->total > 0) {
85
+ $params['value'] = $woocommerce->cart->total;
86
+
87
+ if (isset($woocommerce->cart->cart_contents) && !empty($woocommerce->cart->cart_contents)) {
88
+ $quantity = 0;
89
+ foreach ($woocommerce->cart->cart_contents as $product) {
90
+ $quantity += $product['quantity'];
91
+ }
92
+ if ($quantity > 0) {
93
+ $params['num_items'] = $quantity;
94
+ }
95
+ }
96
+ $events[] = array(
97
+ 'type' => 'track',
98
+ 'name' => 'InitiateCheckout',
99
+ 'params' => $params
100
+ );
101
+ } elseif (SQ_Classes_Tools::getIsset('key')) {
102
+ $params['content_type'] = 'purchase';
103
+ global $wpdb;
104
+ $sql = "SELECT `post_id`
105
+ FROM `" . $wpdb->postmeta . "`
106
+ WHERE `meta_key` = '_order_key' AND `meta_value`='" . SQ_Classes_Tools::getValue('key') . "'";
107
+
108
+ if ($post = $wpdb->get_row($sql)) {
109
+ if ($order = wc_get_order($post->post_id)) {
110
+ $params['content_type'] = "checkout";
111
+ $params['value'] = $order->get_total();
112
+ $params['currency'] = $order->get_order_currency();
113
+
114
+ $events[] = array(
115
+ 'type' => 'track',
116
+ 'name' => 'Purchase',
117
+ 'params' => $params
118
+ );
119
+ }
120
+ }
121
+ }
122
+
123
+
124
+ } else {
125
+ $cat = get_the_terms($this->_post->ID, 'category');
126
+ if (!empty($cat)) {
127
+ $params['content_category'] = $cat[0]->name;
128
+ }
129
+ }
130
+
131
+ $params['page'] = $this->_post->url;
132
+ $params['domain'] = $domain;
133
+
134
+ if (isset($params['content_ids']) && isset($params['content_type'])) {
135
+ $events[] = array(
136
+ 'type' => 'track',
137
+ 'name' => 'ViewContent',
138
+ 'params' => $params
139
+ );
140
+ } else {
141
+ $events[] = array(
142
+ 'type' => 'trackCustom',
143
+ 'name' => 'GeneralEvent',
144
+ 'params' => $params
145
+ );
146
+ }
147
+
148
+ $events[] = array(
149
+ 'type' => 'track',
150
+ 'name' => 'PageView',
151
+ 'params' => array('page' => $params['page'], 'domain' => $params['domain'])
152
+ );
153
+ }
154
+ }
155
+
156
+ return $this->clean($events);
157
+ }
158
+
159
+ public function clean($var) {
160
+ if (is_array($var)) {
161
+ return array_map(array($this, 'clean'), $var);
162
+ } else {
163
+ return is_string($var) ? ((strpos($var,'://') !== false) ? esc_url($var) : sanitize_text_field($var)) : $var;
164
+ }
165
+ }
166
+
167
+ public function packPixel($events = '') {
168
+ if (!empty($events)) {
169
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
170
+
171
+ $track = '';
172
+ foreach ($events as $event) {
173
+ $track .= "fbq('" . $event['type'] . "', '" . $event['name'] . "', '" . json_encode($event['params']) . "');";
174
+ }
175
+
176
+ return sprintf("<script>!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '%s');%s</script><noscript><img height='1' width='1' style='display:none'src='https://www.facebook.com/tr?id=%s&ev=PageView&noscript=1'/></noscript>" . "\n", $codes->facebook_pixel, $track, $codes->facebook_pixel);
177
+ }
178
+
179
+ return false;
180
+ }
181
+
182
+
183
+ public function packPixelAMP() {
184
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
185
+
186
+ if (isset($codes->facebook_pixel) && $codes->facebook_pixel <> '') {
187
+ $events = $this->generatePixel();
188
+ $track = '';
189
+
190
+ foreach ($events as $event) {
191
+ if (isset($event['params'])) {
192
+ $cd = '';
193
+ foreach ($event['params'] as $key => $value) {
194
+ if (is_array($value) && !empty($value)) {
195
+ $cd .= sprintf('&cd[%s]=%s', $key, join(',', $value));
196
+ } else {
197
+ $cd .= sprintf('&cd[%s]=%s', $key, urlencode($value));
198
+ }
199
+ }
200
+ }
201
+ $track .= sprintf('<amp-pixel src="https://www.facebook.com/tr?id=%s&ev=%s%s&noscript=1"></amp-pixel>', $codes->facebook_pixel, $event['name'], $cd) . "\n";
202
+
203
+ }
204
+
205
+ return $track;
206
+ }
207
+
208
+ return false;
209
+ }
210
+ }
models/services/PrevNext.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_PrevNext extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_prevnext', array($this, 'generateMeta'));
10
+ add_filter('sq_prevnext', array($this, 'packMeta'), 99);
11
+ } else {
12
+ add_filter('sq_prevnext', array($this, 'returnFalse'));
13
+ }
14
+
15
+ }
16
+
17
+ public function generateMeta($meta = "") {
18
+ global $paged;
19
+
20
+ if (!$this->isHomePage()) {
21
+ if (get_previous_posts_link()) {
22
+ $meta['prev'] = get_pagenum_link($paged - 1);
23
+ }
24
+ if (get_next_posts_link()) {
25
+ $meta['next'] = get_pagenum_link($paged + 1);
26
+ }
27
+ }
28
+
29
+ return $meta;
30
+ }
31
+
32
+ public function packMeta($metas = array()) {
33
+ if (!empty($metas)) {
34
+ foreach ($metas as $key => &$value) {
35
+ $value = '<link rel="' . $key . '" href="' . $value . '" />';
36
+ }
37
+ return "\n" . join("\n", array_values($metas));
38
+ }
39
+
40
+ return false;
41
+ }
42
+
43
+ }
models/services/Publisher.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Publisher extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_publisher', array($this, 'generatePublisher'));
10
+ add_filter('sq_publisher', array($this, 'packPublisher'), 99);
11
+ } else {
12
+ add_filter('sq_publisher', array($this, 'returnFalse'));
13
+ }
14
+ }
15
+
16
+ public function generatePublisher($publisher = array()) {
17
+ if ($this->_post->post_type == 'post' || $this->_post->post_type == 'product') {
18
+ if (SQ_Classes_Tools::getOption('sq_auto_facebook') && isset($this->_post->socials->facebook_site) && $this->_post->socials->facebook_site <> '') {
19
+ $publisher['article:publisher'] = $this->_post->socials->facebook_site;
20
+ }
21
+ if (SQ_Classes_Tools::getOption('sq_auto_facebook') ) {
22
+ if(isset($this->_post->sq->og_author) && $this->_post->sq->og_author <> '') {
23
+ $authors = explode(',', $this->_post->sq->og_author);
24
+ foreach ($authors as $author) {
25
+ if ($author <> '') {
26
+ $publisher['article:author'][] = $author;
27
+ }
28
+ }
29
+ }
30
+ } else {
31
+ $publisher['article:author'] = $this->getAuthor('display_name');
32
+ }
33
+ }
34
+
35
+ return $publisher;
36
+ }
37
+
38
+
39
+ /**
40
+ * Get the author
41
+ * @param string $what
42
+ * @return bool|mixed|string
43
+ */
44
+ protected function getAuthor($what = 'user_nicename') {
45
+ if (!isset($this->author)) {
46
+ if (is_author()) {
47
+ $this->author = get_userdata(get_query_var('author'));
48
+ } elseif (is_single() && isset($this->_post->post_author)) {
49
+ $this->author = get_userdata((int)$this->_post->post_author)->data;
50
+ }
51
+ }
52
+
53
+ if (isset($this->author)) {
54
+
55
+ if ($what == 'user_url' && $this->author->$what == '') {
56
+ return get_author_posts_url($this->author->ID, $this->author->user_nicename);
57
+ }
58
+ if (isset($this->author->$what)) {
59
+ return $this->author->$what;
60
+ }
61
+ }
62
+
63
+ return false;
64
+ }
65
+
66
+ public function packPublisher($publisher = array()) {
67
+ if (!empty($publisher)) {
68
+ foreach ($publisher as $key => &$value) {
69
+ if (is_array($value)) {
70
+ $str = '';
71
+ foreach ($value as $subvalue) {
72
+ $str .= '<meta property="' . $key . '" content="' . $subvalue . '" />' . ((count($value) > 1) ? "\n" : '');
73
+ }
74
+ $value = $str;
75
+ } else {
76
+ $value = '<meta property="' . $key . '" content="' . $value . '" />';
77
+ }
78
+ }
79
+ return "\n" . join("\n", array_values($publisher));
80
+ }
81
+
82
+ return false;
83
+ }
84
+ }
models/services/Robots.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Robots extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ add_filter('sq_robots', array($this, 'generateRobots'));
9
+ add_filter('sq_robots', array($this, 'showRobots'), 11);
10
+ }
11
+
12
+ public function generateRobots($robots = '') {
13
+ $robots .= "\n# " . __('Squirrly SEO Robots', _SQ_PLUGIN_NAME_);
14
+
15
+ if (get_option('blog_public') != 1) {
16
+ $robots .= "\n# " . __('Your blog is not public. Please see Site Visibility on Settings > Reading.', _SQ_PLUGIN_NAME_);
17
+ } else {
18
+ $sq_sitemap = SQ_Classes_Tools::getOption('sq_sitemap');
19
+ if (SQ_Classes_Tools::getOption('sq_auto_sitemap') == 1) {
20
+ foreach ((array)$sq_sitemap as $name => $sitemap) {
21
+ if ($name == 'sitemap-product' && !SQ_Classes_ObjController::getClass('SQ_Models_BlockSettingsSeo')->isEcommerce()) {
22
+ continue;
23
+ }
24
+ if ($sitemap[1] == 1 || $sitemap[1] == 2) {
25
+ $robots .= "\nSitemap: " . trailingslashit(get_bloginfo('url')) . $sitemap[0];
26
+ }
27
+ }
28
+ }
29
+
30
+ if (empty($sq_sitemap)) {
31
+ $robots .= "\n# " . __('No Squirrly SEO Robots found.', _SQ_PLUGIN_NAME_);
32
+ }
33
+ }
34
+ $robots .= "\n\n";
35
+
36
+ $robots_permission = SQ_Classes_Tools::getOption('sq_robots_permission');
37
+ if (!empty($robots_permission)) {
38
+ foreach ((array)$robots_permission as $robot_txt)
39
+ $robots .= $robot_txt . "\n";
40
+ }
41
+ $robots .= "\n\n";
42
+
43
+ return apply_filters('sq_custom_robots', $robots);
44
+ }
45
+
46
+ public function showRobots($robots = '') {
47
+ /** display robots.txt */
48
+ header('Status: 200 OK', true, 200);
49
+ header('Content-type: text/plain; charset=' . get_bloginfo('charset'));
50
+
51
+ echo $robots;
52
+ exit();
53
+ }
54
+ }
models/services/Sitemap.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Sitemap extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_sitemap', array($this, 'generateMeta'));
10
+ add_filter('sq_sitemap', array($this, 'packMeta'), 99);
11
+ } else {
12
+ add_filter('sq_sitemap', array($this, 'returnFalse'));
13
+ }
14
+
15
+ }
16
+
17
+ public function generateMeta() {
18
+ return $this->_getSitemapURL();
19
+ }
20
+
21
+ /**
22
+ * Get the url for each sitemap
23
+ * @param string $sitemap
24
+ * @return string
25
+ */
26
+ protected function _getSitemapURL($sitemap = 'sitemap') {
27
+ if (class_exists('SQ_Classes_Tools')) {
28
+ return SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps')->getXmlUrl($sitemap);
29
+ }
30
+ return false;
31
+ }
32
+
33
+ public function packMeta($meta = '') {
34
+ if ($meta <> '') {
35
+ return '<link rel="alternate" type="application/rss+xml" href="' . $meta . '" />';
36
+ }
37
+
38
+ }
39
+
40
+ }
models/services/Title.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Title extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+
9
+ if ($this->_post->sq->doseo) {
10
+ add_filter('sq_title', array($this, 'generateTitle'));
11
+ add_filter('sq_title', array($this, 'clearTitle'), 98);
12
+ add_filter('sq_title', array($this, 'packTitle'), 99);
13
+ } else {
14
+ add_filter('sq_title', array($this, 'returnFalse'));
15
+ }
16
+
17
+ }
18
+
19
+ public function generateTitle($title = '') {
20
+
21
+ if ( $this->_post->sq->title <> '') {
22
+ $title = $this->_post->sq->title;
23
+ } else {
24
+ $title = $this->_post->post_title = get_the_title();
25
+ }
26
+
27
+ return $title;
28
+ }
29
+
30
+ public function packTitle($title = '') {
31
+ if ($title <> '') {
32
+ return sprintf("<title>%s</title>", $title);
33
+ }
34
+
35
+ return false;
36
+ }
37
+
38
+ }
models/services/TwitterCard.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_TwitterCard extends SQ_Models_Abstract_Seo {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_twitter_card', array($this, 'generateTwitterCard'), 10);
10
+ add_filter('sq_twitter_card', array($this, 'packTwitterCard'), 99);
11
+ } else {
12
+ add_filter('sq_twitter_card', array($this, 'returnFalse'));
13
+ }
14
+
15
+ }
16
+
17
+ public function generateTwitterCard($tw = array()) {
18
+
19
+ if (SQ_Classes_Tools::getOption('sq_auto_twitter')) {
20
+ if ($this->_post->url <> '') {
21
+ $tw['twitter:url'] = urldecode(esc_url($this->_post->url));
22
+ }
23
+
24
+ if ($this->_post->sq->tw_title <> '') {
25
+ $tw['twitter:title'] = $this->clearTitle($this->_post->sq->tw_title);
26
+ } else {
27
+ $tw['twitter:title'] = $this->clearTitle($this->_post->sq->title);
28
+ }
29
+
30
+ if ($this->_post->sq->tw_description <> '') {
31
+ $tw['twitter:description'] = $this->clearDescription($this->_post->sq->tw_description);
32
+ } else {
33
+ $tw['twitter:description'] = $this->clearDescription($this->_post->sq->description);
34
+ }
35
+
36
+
37
+ if ($this->_post->sq->tw_media <> '') {
38
+ $tw['twitter:image'] = $this->_post->sq->tw_media;
39
+ } else {
40
+ $this->_setMedia($tw);
41
+ }
42
+
43
+ if($account = $this->_getTwitterAccount()) {
44
+ $tw['twitter:creator'] = $account;
45
+ $tw['twitter:site'] = $account;
46
+ }
47
+
48
+ $tw['twitter:domain'] = get_bloginfo('title');
49
+ $tw['twitter:card'] = $this->_post->socials->twitter_card_type;
50
+
51
+ }
52
+
53
+ return $tw;
54
+ }
55
+
56
+ protected function _setMedia(&$tw) {
57
+ $images = $this->getPostImages();
58
+ if (!empty($images)) {
59
+ $image = current($images);
60
+ if (isset($image['src'])) {
61
+ $tw['twitter:image'] = $image['src'];
62
+ }
63
+ }
64
+ }
65
+
66
+ protected function _getTwitterAccount() {
67
+ $account = SQ_Classes_Tools::getOption('sq_tw_account');
68
+ if ($account == '') {
69
+ if (class_exists('SQ_Classes_Tools')) {
70
+ $account = SQ_Classes_Tools::getOption('sq_twitter_account');
71
+ }
72
+ }
73
+
74
+ if ($account <> '') {
75
+ if (strpos($account, 'twitter.com') !== false) {
76
+ preg_match('/twitter.com\/([@1-9a-z_-]+)/i', $account, $result);
77
+ if (isset($result[1]) && !empty($result[1])) {
78
+ return '@' . str_replace('@', '', $result[1]);
79
+ }
80
+ } else {
81
+ preg_match('/([@1-9a-z_-]+)/i', $account, $result);
82
+ if (isset($result[1]) && !empty($result[1])) {
83
+ return '@' . str_replace('@', '', $result[1]);
84
+ }
85
+ }
86
+ } else {
87
+ return '';
88
+ }
89
+ return false;
90
+ }
91
+
92
+
93
+ public function packTwitterCard($tw = array()) {
94
+ if (!empty($tw)) {
95
+ foreach ($tw as $key => &$value) {
96
+ $value = '<meta property="' . $key . '" content="' . $value . '" />';
97
+ }
98
+ return "\n" . join("\n", array_values($tw));
99
+ }
100
+
101
+ return false;
102
+ }
103
+
104
+ }
models/services/Verify.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SQ_Models_Services_Verify extends SQ_Models_Abstract_Seo {
4
+
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+ if ($this->_post->sq->doseo) {
9
+ add_filter('sq_verify', array($this, 'generateVerify'));
10
+ add_filter('sq_verify', array($this, 'packVerify'), 99);
11
+ } else {
12
+ add_filter('sq_verify', array($this, 'returnFalse'));
13
+ }
14
+ }
15
+
16
+ public function generateVerify($metas = array()) {
17
+ $codes = json_decode(json_encode(SQ_Classes_Tools::getOption('codes')));
18
+
19
+ if ($this->_post->post_type == 'home') {
20
+ if (isset($codes->google_wt) && $codes->google_wt <> '') {
21
+ $metas['google-site-verification'] = $codes->google_wt;
22
+ }
23
+ if (isset($codes->bing_wt) && $codes->bing_wt <> '') {
24
+ $metas['msvalidate.01'] = $codes->bing_wt;
25
+ }
26
+ if (isset($codes->pinterest_verify) && $codes->pinterest_verify <> '') {
27
+ $metas['p:domain_verify'] = $codes->pinterest_verify;
28
+ $metas['p:domain_verify'] = $codes->pinterest_verify;
29
+ }
30
+ }
31
+
32
+ if (isset($codes->alexa_verify) && $codes->alexa_verify <> '') {
33
+ $metas['alexaVerifyID'] = $codes->alexa_verify;
34
+ }
35
+
36
+ return $metas;
37
+ }
38
+
39
+ public function packVerify($metas = array()) {
40
+ if (!empty($metas)) {
41
+ foreach ($metas as $key => &$value) {
42
+ $value = '<meta name="' . $key . '" content="' . $value . '" />';
43
+ }
44
+ return "\n" . join("\n", array_values($metas));
45
+ }
46
+
47
+ return false;
48
+ }
49
+ }
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === SEO SQUIRRLY™ ===
2
  Contributors: cifi, calinvingan, florinmuresan, nagy.sorel
3
- Tags: seo, e-commerce, plugins, content, marketing, wordpress seo, seo plugin, seo optimization, seo content, ecommerce, keyword research, content seo, search engine optimization, XML sitemap for google, multisite SEO, squirrly, meta title, meta description, favicon, mobile, canonical, seo correction, seo title, seo meta, twitter, woocommerce, feeds, social media, blogging, google-analytics, tracking, best seo tools audit website, content audit tool, ecommerce seo strategy, marketing research tools, research tools for writers, seo audit tool, SEO keyword research tool,duplicate removal tool, ecommerce SEO, facebook open graph wordpress, google keyword planner alternative, Google ranking, how to install facebook pixel on wordpress, JSON-LD structure, Live Assistant, meta duplicate removal, open graph generator, pinterest rich pin validator, related links
4
- Requires at least: 3.5
5
  Tested up to: 4.8
6
  Stable tag: trunk
7
  Donate link: https://www.squirrly.co/wordpress-seo-by-squirrly
@@ -178,9 +178,74 @@ Type a keyword to the right of the screen and start using Squirrly Seo. Enjoy!
178
  8. Seo - Use the research tools for writers from the Inspiration box.
179
 
180
  == Upgrade Notice ==
181
- Squirrly 6.3.1 it's a stable version of Squirrly SEO and has all the SEO requirements by Search Engines
182
 
183
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  = 8.0.5 – 08/14/2017 =
185
  * Fixed HTTPS jquery load in sitemap.xml
186
  * SEO Squirrly is compatible with WP 4.8.1
1
  === SEO SQUIRRLY™ ===
2
  Contributors: cifi, calinvingan, florinmuresan, nagy.sorel
3
+ Tags: seo, e-commerce, plugins, content, marketing, wordpress seo, seo plugin, seo optimization, seo content, ecommerce, keyword research, content seo, yoast, all in one seo, search engine optimization, XML sitemap for google, multisite SEO, squirrly, meta title, meta description, favicon, mobile, canonical, seo correction, seo title, seo meta, twitter, woocommerce, feeds, social media, blogging, google-analytics, tracking, best seo tools audit website, content audit tool, ecommerce seo strategy, marketing research tools, research tools for writers, seo audit tool, SEO keyword research tool,duplicate removal tool, ecommerce SEO, facebook open graph wordpress, google keyword planner alternative, Google ranking, how to install facebook pixel on wordpress, JSON-LD structure, Live Assistant, meta duplicate removal, open graph generator, pinterest rich pin validator, related links
4
+ Requires at least: 4.0
5
  Tested up to: 4.8
6
  Stable tag: trunk
7
  Donate link: https://www.squirrly.co/wordpress-seo-by-squirrly
178
  8. Seo - Use the research tools for writers from the Inspiration box.
179
 
180
  == Upgrade Notice ==
181
+ Squirrly 8.0.5 it's a stable version of Squirrly SEO and has all the SEO requirements by Search Engines
182
 
183
  == Changelog ==
184
+ = 8.2.23 - 11/07/2017 =
185
+ * Fixed the SEO METAs in frontend for some theme
186
+ * Fixed the SEO METAs for Wp Super cache and other cache plugins
187
+ * Update Squirrly SEO Snippet Frontend is optional in Squirrly > SEO Settings Advanced
188
+ * Fixed the Sitemap to load for all subdirectories
189
+ * Fixed compatibility issues with other plugins
190
+
191
+
192
+ = 8.2.21 - 11/04/2017 =
193
+ * Update Frontend to load with the known cache plugins
194
+ * Updated the SLA to recognize more languages and keywords with special chars
195
+ * Remove the Mark tag on save in case it passes javascript
196
+ * Fixed the SLA mark option to remain active on click
197
+ * Fixed the SLA to recognize the Squirrly Snippet when loaded
198
+ * Fixed the Doublin Core name error on line 29
199
+ * Squirrly SEO is now compatible with WP 4.8.3
200
+
201
+ = 8.2.20 – 11/02/2017 =
202
+ * Fixed the Excerpt Only patterh
203
+ * Fixed Squirrly Snippet in case is empty or has special chars
204
+
205
+ = 8.2.19 – 10/30/2017 =
206
+ * Update Squirrly Live Assistant to use less resources and work faster
207
+ * Added the Post Publish option in Squirrly Split Window
208
+ * Fixed Greeck keywords optimization fixed
209
+ * Fixed the Keyword Research not to display the error message and to be able to redo the search
210
+ * Fixed the Squirrly Snippet's Title snd Description when using special chars
211
+
212
+ = 8.2.18 – 10/27/2017 =
213
+ * Update compatibility with Polylang plugin
214
+ * Fixed the yellow highlight in frontend
215
+ * Fixed Squirrly SLA loading in post edit
216
+ * Increased connection time with out API in case of slow internet access
217
+ * Fixed small bugs with article optimization in my.squirrly.co
218
+
219
+ = 8.2.17 – 10/24/2017 =
220
+ * Fixed the SLA loading issue for older WP versions
221
+ * Fixed the Keyword one letter when loading a new post/page
222
+ * Corrected the Facebook App ID
223
+
224
+ = 8.2.15 – 10/18/2017 =
225
+ * Fixed the import process when the tables have different encoding
226
+ * Fixed the Squirrly Snippet in frontend in case the js and css are not loading
227
+ * Increased the loading speed for favicon.icon and robots.txt
228
+ * Show error message in case SLA is not loading
229
+ * Update the SEO Audit with the latest METAs
230
+ * Register the Subservers for WP Multisite
231
+
232
+ = 8.2.14 – 10/12/2017 =
233
+ * Fixed compatibility with Beaver Builder
234
+ * Increased security on SEO restore in Import SEO section
235
+
236
+ = 8.2.13 – 10/11/2017 =
237
+ * Fixed the snippet preview in case some features are disabled
238
+ * Fixed the Title and Description Lenght in Frontend
239
+ * Added the option to import the old SEO settings from Squirrly SEO
240
+
241
+ = 8.2.11 – 10/10/2017 =
242
+ * Fixed remove meta from Elementor
243
+ * Fixed small bugs for Squirrly Split Window
244
+
245
+ = 8.2.10 – 10/10/2017 =
246
+ * Launching Squirrly 2018 Steve
247
+ * See all the new features here: https://howto.squirrly.co/kb/slides/
248
+
249
  = 8.0.5 – 08/14/2017 =
250
  * Fixed HTTPS jquery load in sitemap.xml
251
  * SEO Squirrly is compatible with WP 4.8.1
screenshot-1.png DELETED
Binary file
screenshot-2.png DELETED
Binary file
screenshot-3.png DELETED
Binary file
screenshot-4.png DELETED
Binary file
screenshot-5.png DELETED
Binary file
screenshot-6.png DELETED
Binary file
screenshot-7.png DELETED
Binary file
squirrly.php CHANGED
@@ -4,43 +4,45 @@
4
  Copyright (c) 2012-2017, SEO Squirrly.
5
  The copyrights to the software code in this file are licensed under the (revised) BSD open source license.
6
 
7
- Plugin Name: SEO by SQUIRRLY
8
  Plugin URI: http://www.squirrly.co
9
  Description: SEO By Squirrly is for the NON-SEO experts. Get Excellent Seo with Better Content, Ranking and Analytics. For Both Humans and Search Bots.<BR> <a href="http://my.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
10
  Author: Squirrly SEO
11
- Version: 8.0.5
12
  Author URI: http://www.squirrly.co
13
  */
14
 
15
  /* SET THE CURRENT VERSION ABOVE AND BELOW */
16
- define('SQ_VERSION', '8.0.5');
 
17
  /* Call config files */
18
  if (file_exists(dirname(__FILE__) . '/config/config.php')) {
19
- require(dirname(__FILE__) . '/config/config.php');
20
 
21
  /* important to check the PHP version */
22
  if (PHP_VERSION_ID >= 5100) {
23
  /* inport main classes */
24
- require_once(_SQ_CLASSES_DIR_ . 'SQ_ObjController.php');
25
- SQ_ObjController::getController('SQ_FrontController', false);
26
- SQ_ObjController::getController('SQ_Tools', false);
 
 
 
 
27
 
28
- if (is_admin()) {
29
- require_once(_SQ_CLASSES_DIR_ . 'SQ_BlockController.php');
30
- SQ_ObjController::getController('SQ_FrontController', false)->run();
31
 
32
  /**
33
  * Upgrade Squirrly call.
34
  */
35
- register_activation_hook(__FILE__, array(SQ_ObjController::getController('SQ_Tools', false), 'sq_activate'));
36
- register_deactivation_hook(__FILE__, array(SQ_ObjController::getController('SQ_Tools', false), 'sq_deactivate'));
37
- } elseif (SQ_Tools::$options['sq_use'] == 1) {
38
- //Load Frontend only if Squirrly SEO is enabled
39
- SQ_ObjController::getController('SQ_Frontend');
40
  }
41
 
42
- add_action('sq_processCron', array(SQ_ObjController::getController('SQ_Ranking', false), 'processCron'));
43
- add_action('sq_processApi', array(SQ_ObjController::getController('SQ_Post'), 'processCron'));
44
  } else {
45
  /* Main class call */
46
  add_action('admin_init', 'sq_phpError');
4
  Copyright (c) 2012-2017, SEO Squirrly.
5
  The copyrights to the software code in this file are licensed under the (revised) BSD open source license.
6
 
7
+ Plugin Name: Squirrly SEO 2018 (Steve)
8
  Plugin URI: http://www.squirrly.co
9
  Description: SEO By Squirrly is for the NON-SEO experts. Get Excellent Seo with Better Content, Ranking and Analytics. For Both Humans and Search Bots.<BR> <a href="http://my.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
10
  Author: Squirrly SEO
11
+ Version: 8.2.23
12
  Author URI: http://www.squirrly.co
13
  */
14
 
15
  /* SET THE CURRENT VERSION ABOVE AND BELOW */
16
+ define('SQ_VERSION', '8.2.23');
17
+
18
  /* Call config files */
19
  if (file_exists(dirname(__FILE__) . '/config/config.php')) {
20
+ require_once(dirname(__FILE__) . '/config/config.php');
21
 
22
  /* important to check the PHP version */
23
  if (PHP_VERSION_ID >= 5100) {
24
  /* inport main classes */
25
+ require_once(_SQ_CLASSES_DIR_ . 'ObjController.php');
26
+ require_once(_SQ_CLASSES_DIR_ . 'BlockController.php');
27
+
28
+ SQ_Classes_ObjController::getClass('SQ_Classes_FrontController');
29
+ SQ_Classes_ObjController::getClass('SQ_Classes_Tools');
30
+
31
+ if (is_admin() || is_network_admin()) {
32
 
33
+ SQ_Classes_ObjController::getClass('SQ_Classes_FrontController')->runAdmin();
 
 
34
 
35
  /**
36
  * Upgrade Squirrly call.
37
  */
38
+ register_activation_hook(__FILE__, array(SQ_Classes_ObjController::getClass('SQ_Classes_Tools'), 'sq_activate'));
39
+ register_deactivation_hook(__FILE__, array(SQ_Classes_ObjController::getClass('SQ_Classes_Tools'), 'sq_deactivate'));
40
+ } elseif (SQ_Classes_Tools::getOption('sq_use') == 1) {
41
+ SQ_Classes_ObjController::getClass('SQ_Classes_FrontController')->runFrontend();
 
42
  }
43
 
44
+ add_action('sq_processCron', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Cron'), 'processRankingCron'));
45
+ add_action('sq_processApi', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Cron'), 'processSEOPostCron'));
46
  } else {
47
  /* Main class call */
48
  add_action('admin_init', 'sq_phpError');
themes/default/SQ_BlockAccount.php DELETED
@@ -1,35 +0,0 @@
1
- <div id="sq_settings" class="sq_userinfo" >
2
- <?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
3
-
4
- <?php if (SQ_Tools::$options['sq_api'] <> '') { ?>
5
- <div>
6
- <span class="sq_icon"></span>
7
- <div id="sq_settings_title" ><?php _e('Squirrly account information', _SQ_PLUGIN_NAME_); ?> </div>
8
- <div id="sq_settings_title" style="text-align: right">
9
- <input id="sq_goto_dashboard" class="sq_goto_dashboard" type="button" value="<?php _e('Go to dashboard', _SQ_PLUGIN_NAME_) ?> &raquo;" />
10
- <a href="<?php echo _SQ_DASH_URL_ ?>login/?token=<?php echo SQ_Tools::$options['sq_api'] ?>&redirect_to=<?php echo _SQ_DASH_URL_ ?>user/dashboard" target="_blank" class="sq_goto_dashboard" type="button" title="<?php _e('See ALL of Your Activity so Far', _SQ_PLUGIN_NAME_) ?>"><?php _e('See ALL of Your Activity so Far', _SQ_PLUGIN_NAME_) ?> &raquo;</a>
11
- <br style="clear: both;">
12
- </div>
13
- </div>
14
- <?php } ?>
15
- <div id="sq_helpaccountside" class="sq_helpside"></div>
16
- <div id="sq_left">
17
-
18
- <?php if (SQ_Tools::$options['sq_api'] <> '') { ?>
19
- <div id="sq_settings_body" style="min-height: 400px;">
20
- <?php if (SQ_Tools::$options['sq_api'] <> '') { ?>
21
- <fieldset style="background: none; border: none; box-shadow: none;"><div id="sq_userinfo" class="sq_loading"></div></fieldset>
22
- <script type="text/javascript">
23
- jQuery(document).ready(function () {
24
- sq_getUserStatus();
25
- });
26
- </script>
27
- <?php } ?>
28
-
29
- </div>
30
-
31
- <?php } ?>
32
-
33
- </div>
34
- <div id="sq_sidehelp"></div>
35
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockAffiliate.php DELETED
@@ -1,103 +0,0 @@
1
- <div id="sq_settings" >
2
- <?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
3
- <div>
4
- <span class="sq_icon"></span>
5
- <div id="sq_settings_title" ><?php _e('Join Squirrly today!', _SQ_PLUGIN_NAME_); ?> </div>
6
- <div id="sq_settings_title" >
7
- <input id="sq_goto_dashboard" class="sq_goto_dashboard" type="button" value="<?php _e('Go to dashboard', _SQ_PLUGIN_NAME_) ?> &raquo;" />
8
- </div>
9
- </div>
10
- <div id="sq_helpaffiliateside" class="sq_helpside"></div>
11
- <div id="sq_left">
12
- <form id="sq_settings_affiliate_form" name="settings" action="" method="post" enctype="multipart/form-data">
13
- <div id="sq_settings_body">
14
-
15
- <fieldset>
16
- <legend>
17
- <span class="sq_legend_title"><?php _e('Join Squirrly today!', _SQ_PLUGIN_NAME_); ?></span>
18
- <span><?php echo sprintf(__('%sHow I Started Making Money With the Squirrly Affiliate Program%s', _SQ_PLUGIN_NAME_), '<a href="https://plugin.squirrly.co/wp-content/uploads/Squirrly-Affiliate-Program.pdf" target="_blank">', '</a>'); ?></span>
19
-
20
- <span><p class="sq_settings_affiliate_bigtitle">
21
- <?php _e('Affiliate Benefits', _SQ_PLUGIN_NAME_); ?>
22
- </p>
23
- <ul class="sq_settings_affiliate_info">
24
- <li>
25
- <div>
26
- <span><?php echo sprintf(__('- Recurring 45%s commission', _SQ_PLUGIN_NAME_), '%'); ?></span>
27
- </div>
28
- </li>
29
- <li>
30
- <div>
31
- <span><?php _e('- No cost', _SQ_PLUGIN_NAME_); ?></span>
32
- </div>
33
- </li>
34
- <li>
35
- <div>
36
- <span><?php _e('- Monthly payments in your Paypal account', _SQ_PLUGIN_NAME_); ?></span>
37
- </div>
38
- </li>
39
- </ul></span>
40
- </legend>
41
- <div>
42
- <p class="sq_settings_affiliate_bigbutton" style="margin-bottom:35px;">
43
- <?php
44
- if (SQ_Tools::$options['sq_api'] <> '') {
45
- if (SQ_Tools::$options['sq_affiliate_link'] <> '') {
46
- echo '<span>' . SQ_Tools::$options['sq_affiliate_link'] . '</span>';
47
- echo '<span class="sq_settings_info">' . __('To redirect users to your site, just change "squirrly.co" with your domain.', _SQ_PLUGIN_NAME_) . '</span>';
48
- } else {
49
- ?><input type="submit" name="sq_affiliate_link" value="<?php _e('Generate affiliate link', _SQ_PLUGIN_NAME_) ?> &raquo;" /><?php
50
- }
51
- }
52
- ?>
53
- </p>
54
-
55
- <?php
56
- if (SQ_Tools::$options['sq_api'] <> '') {
57
- if (SQ_Tools::$options['sq_affiliate_link'] <> '') {
58
- echo __('Your affiliate account is set and ready to go. Above you have the affiliate link. ', _SQ_PLUGIN_NAME_);
59
- echo '<br />';
60
- echo sprintf(__('Check your affiliate page: %sAffiliate page%s', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?token=' . SQ_Tools::$options['sq_api'] . '&redirect_to=' . _SQ_DASH_URL_ . 'user/affiliate' . '" target="_blank" style="font-weight:bold">', '</a>');
61
- }
62
- } else {
63
- echo __('After you connect to Squirrly you can begin to use your free Squirrly affiliate link immediately!', _SQ_PLUGIN_NAME_);
64
- }
65
- ?>
66
- </div>
67
-
68
- </fieldset>
69
- <?php if (SQ_Tools::$options['sq_affiliate_link'] <> '') { ?>
70
- <fieldset>
71
- <legend>
72
- <span class="sq_legend_title"><?php _e('Squirrly banners you can use', _SQ_PLUGIN_NAME_); ?></span>
73
- </legend>
74
- <div>
75
- <ul class="sq_settings_affiliate_info">
76
- <?php
77
- $sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner1.jpg';
78
- $sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner1.png';
79
- $sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner2.jpg';
80
- $sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner2.png';
81
-
82
- foreach ($sq_affiliate_images as $sq_affiliate_image) {
83
- echo '<li><a href="' . SQ_Tools::$options['sq_affiliate_link'] . '" target="_blank"><img src="' . $sq_affiliate_image . '" alt="Seo Plugin by Squirrly" /></a>';
84
- echo '<span class="sq_affiliate_banner" >';
85
- echo '<textarea style="width: 500px; height: 45px;" onclick="this.focus(); this.select();"><a href="' . SQ_Tools::$options['sq_affiliate_link'] . '" target="_blank" title="Seo Plugin by Squirrly"><img src="' . $sq_affiliate_image . '" /></a></textarea>';
86
- echo '</span></li>';
87
- }
88
- ?>
89
- </ul>
90
- </div>
91
-
92
- </fieldset>
93
- <?php } ?>
94
- </div>
95
- <br style="clear: both;"/>
96
- <div id="sq_settings_title" style="text-align: right">
97
- <a href="?page=sq_dashboard" id="sq_goto_newpost" style="display:none" /><?php _e('<< START HERE >>', _SQ_PLUGIN_NAME_) ?></a>
98
- </div>
99
- <input type="hidden" name="action" value="sq_settings_affiliate" />
100
- <input type="hidden" name="nonce" value="<?php echo wp_create_nonce(_SQ_NONCE_ID_); ?>" />
101
- </form>
102
- </div>
103
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockAudit.php DELETED
@@ -1,63 +0,0 @@
1
- <div id="sq_settings">
2
- <div class="sq_message sq_error" style="display: none"></div>
3
- <?php
4
- SQ_ObjController::getBlock('SQ_BlockSupport')->init();
5
- ?>
6
- <div>
7
- <span class="sq_icon"></span>
8
- <div id="sq_settings_title"><?php _e('Squirrly Site Audit', _SQ_PLUGIN_NAME_); ?> </div>
9
-
10
- </div>
11
- <div id="sq_left">
12
- <div id="sq_settings_body">
13
- <fieldset>
14
- <legend>
15
- <span class="sq_legend_title"><?php _e('What the Audit does:', _SQ_PLUGIN_NAME_); ?></span>
16
- <span><?php echo sprintf(__('%sTracks all the aspects of your Content Marketing Strategy%s: Blogging, Traffic, SEO, Social Signals, Links, Authority. Every single week you get a new report by email.', _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></span>
17
- <span><?php echo sprintf(__('%sIt Gives You Professional Advice on How To Fix%s any of those areas that it helps track, so you can easily find out how to improve. Content from SEO Moz (recently just MOZ), Google, Authority Labs, etc.', _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></span>
18
- <span><?php echo sprintf(__('%sMonitors Your Progress, week by week%s. You’ll get interesting data about the historical performance of each article you write and find out how to improve its seo ranking.', _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></span>
19
- <span><?php echo sprintf(__('%sAnalyze any single article.%s See how it improves over time.', _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></span>
20
- <span><?php echo sprintf(__('%sRequest an Audit Now%s', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?token=' . SQ_Tools::$options['sq_api'] . '" target="_blank">', '</a>'); ?></span>
21
-
22
- </legend>
23
-
24
- <div>
25
- <div id="sq_post_type_option" class="withborder" style="min-height: 520px;">
26
- <p style="font-weight: bold;"><?php _e('Your last Site Audit', _SQ_PLUGIN_NAME_); ?>:</p>
27
- <ul style="margin-top: 50px;">
28
- <li>
29
- <?php if (isset($view->blog->score) && $view->blog->score > 0){ ?>
30
- <p class="sq_audit_score"><?php echo __('Score', _SQ_PLUGIN_NAME_) . ': <span>' . $view->blog->score . '/100</span>'; ?></p>
31
- <p class="sq_audit_date"><?php echo __('Date', _SQ_PLUGIN_NAME_) . ': <span>' . date(get_option( 'date_format' ),strtotime($view->blog->datetime)) . '</span>'; ?></p>
32
- <p class="sq_settings_bigbutton" style="margin-bottom:35px;">
33
- <a href="<?php echo _SQ_DASH_URL_ . 'login/?token=' . SQ_Tools::$options['sq_api'] ?>" target="_blank" ><?php _e('See the Audit', _SQ_PLUGIN_NAME_) ?> &raquo;</a>
34
- </p>
35
- <?php }else{?>
36
- <p><?php _e('Seems that no Audit was made yet. You can request a new audit and it should be ready in 5-10 minutes', _SQ_PLUGIN_NAME_); ?>:</p>
37
- <p class="sq_settings_bigbutton" style="margin-bottom:35px;">
38
- <a href="<?php echo _SQ_DASH_URL_ . 'login/?token=' . SQ_Tools::$options['sq_api'] ?>" target="_blank" ><?php _e('Request an Audit Now', _SQ_PLUGIN_NAME_) ?> &raquo;</a>
39
- </p>
40
- <?php }?>
41
- </li>
42
- <?php if (isset($view->blog->score) && $view->blog->score == 0){ ?>
43
- <li>
44
- <p>
45
- <?php _e('This is an example of a Site Audit', _SQ_PLUGIN_NAME_); ?>:
46
- </p>
47
- <p>
48
- <a href="<?php echo _SQ_DASH_URL_ . 'login/?token=' . SQ_Tools::$options['sq_api'] ?>" target="_blank" >
49
- <img src="https://ps.w.org/squirrly-seo/trunk/screenshot-7.png" alt="" style="max-width: 520px">
50
- </a>
51
- </p>
52
- </li>
53
- <?php }?>
54
- </ul>
55
- </div>
56
-
57
- </div>
58
- </fieldset>
59
-
60
- </div>
61
- </div>
62
-
63
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockCopyright.php DELETED
@@ -1,31 +0,0 @@
1
- <div id="sq_settings">
2
- <div class="sq_message sq_error" style="display: none"></div>
3
-
4
- <?php
5
- SQ_ObjController::getBlock('SQ_BlockSupport')->init();
6
- ?>
7
- <div>
8
- <span class="sq_icon"></span>
9
- <div id="sq_settings_title"><?php _e('Squirrly Copywriting Options', _SQ_PLUGIN_NAME_); ?> </div>
10
- <div class="sq_subtitles">
11
- <p><?php _e('We help you find copyright-free images, news sources, awesome tweets by influential people, all of which you can use to support the points you are making in your blog posts.', _SQ_PLUGIN_NAME_); ?></p>
12
- </div>
13
- </div>
14
- <div id="sq_helpcopyrightside" class="sq_helpside"></div>
15
- <div id="sq_left">
16
- <div id="sq_settings_body">
17
-
18
- <fieldset style="background: none !important; box-shadow: none;">
19
- <div class="sq_subtitles">
20
- <p><?php _e('The inspiration Box from Squirrly helps you save time on the research you do for each article.', _SQ_PLUGIN_NAME_); ?></p>
21
- <p><img src="<?php echo _SQ_THEME_URL_ . 'img/help/copyright_options1.png' ?>" alt=""></p>
22
- <p><img src="<?php echo _SQ_THEME_URL_ . 'img/help/copyright_options2.png' ?>" alt=""></p>
23
- <p><?php _e("Once you found the image you're looking for, click on it and it will be added in your article content", _SQ_PLUGIN_NAME_); ?></p>
24
- <p><img src="<?php echo _SQ_THEME_URL_ . 'img/help/copyright_options3.png' ?>" alt=""></p>
25
- <div class="sq_button"><a href="post-new.php" target="_blank" style="margin-top: 10px; font-size: 15px; max-width: 210px;"><?php _e("Use Squirrly's Inspiration box",_SQ_PLUGIN_NAME_) ?></a></div>
26
- </div>
27
- </fieldset>
28
- </div>
29
- </div>
30
-
31
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockDashboard.php DELETED
@@ -1,111 +0,0 @@
1
- <div id="sq_settings">
2
- <?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
3
- <?php if (SQ_Tools::$options['sq_api'] == '') { ?>
4
- <span class="sq_icon"></span>
5
-
6
- <div id="sq_settings_title"><?php _e('Connect to Squirrly.co', _SQ_PLUGIN_NAME_); ?> </div>
7
- <div id="sq_settings_login">
8
- <?php SQ_ObjController::getBlock('SQ_Blocklogin')->init(); ?>
9
- </div>
10
-
11
-
12
- <div class="sq_login_link"><?php _e('Connect to Squirrly and start optimizing your site', _SQ_PLUGIN_NAME_); ?></div>
13
- <input id="sq_goto_dashboard" class="sq_goto_dashboard" style="display:none; margin: 0 auto; width: 500px; padding: 0px 10px;" type="button" value="&laquo;<?php _e('START HERE', _SQ_PLUGIN_NAME_) ?> &raquo;" />
14
-
15
- <?php
16
- } else {
17
- ?>
18
- <div>
19
- <span class="sq_icon"></span>
20
- <div id="sq_settings_title"><?php _e('Squirrly dashboard', _SQ_PLUGIN_NAME_); ?> </div>
21
- </div>
22
- <div id="sq_helpdashboardside" class="sq_helpside"></div>
23
- <div id="sq_helpdashboardcontent" class="sq_helpcontent"></div>
24
-
25
- <?php } ?>
26
-
27
- <div class="sq_helpcontent" style="display: none; clear: left; <?php echo (SQ_Tools::$options['sq_api'] == '') ? 'text-align: center;' : '' ?>">
28
- <div style="width: 700px; display: inline-block;">
29
- <div style="font-size: 24px; margin: 30px 0; color: #999;">Learn About Squirrly's Features (click on the presentations):</div>
30
-
31
- <div class="sq_mysquirrly_cta">
32
- <div class="sq_mysquirrly_cta_content">
33
- <?php _e('Now with a fresh one right out of our Squirrly Labs!', _SQ_PLUGIN_NAME_); ?>
34
- </div>
35
- <div class="sq_mysquirrly_cta_button">
36
- <a href="<?php echo _SQ_DASH_URL_ ?>login/?token=<?php echo SQ_Tools::$options['sq_api'] ?>&redirect_to=<?php echo _SQ_DASH_URL_ ?>user/dashboard" title="<?php _e('Get It Here', _SQ_PLUGIN_NAME_); ?>" target="_blank"><?php _e('Get It Here', _SQ_PLUGIN_NAME_); ?> &raquo;</a></p>
37
- </div>
38
- </div>
39
-
40
- </div>
41
-
42
-
43
- <ul class="sq_slidelist">
44
- <li>
45
- <a href="javascript:void(0);" rel="44987512" style="background-image: url('//image.slidesharecdn.com/kr-150222110827-conversion-gate01/95/squirrly-keyword-research-1-638.jpg?cb=1424624994')"></a>
46
- <div>Squirrly Keyword Research</div>
47
- </li>
48
- <li>
49
- <a href="javascript:void(0);" rel="44987943" style="background-image: url('//image.slidesharecdn.com/sla-150222112751-conversion-gate01/95/squirrly-live-assistant-1-638.jpg?cb=1424626190')"></a>
50
- <div>Squirrly Live Assistant</div>
51
- </li>
52
- <li>
53
- <a href="javascript:void(0);" rel="44987925" style="background-image: url('//image.slidesharecdn.com/snippet1-150222112635-conversion-gate01/95/squirrly-snippet-tool-1-638.jpg?cb=1424626028')"></a>
54
- <div>Squirrly Snippet Tool</div>
55
- </li>
56
- <li>
57
- <a href="javascript:void(0);" rel="45020680" style="background-image: url('//image.slidesharecdn.com/analytics-150223081607-conversion-gate02/95/squirrly-performance-analytics-1-638.jpg?cb=1424701102')"></a>
58
- <div>Squirrly Performance Analyticsl</div>
59
- </li>
60
- <li>
61
- <a href="javascript:void(0);" rel="45062956" style="background-image: url('//image.slidesharecdn.com/firstpage-150224040740-conversion-gate01/95/squirrly-first-page-optimization-1-638.jpg?cb=1427713684')"></a>
62
- <div>Squirrly First Page Optimization</div>
63
- </li>
64
- <li>
65
- <a href="javascript:void(0);" rel="45117764" style="background-image: url('//image.slidesharecdn.com/socialoption-150225050457-conversion-gate02/95/squirrly-open-graph-and-twitter-card-1-638.jpg?cb=1427713066')"></a>
66
- <div>Squirrly Open Graph and Twitter Card</div>
67
- </li>
68
- <li>
69
- <a href="javascript:void(0);" rel="45142191" style="background-image: url('//image.slidesharecdn.com/check-150225143101-conversion-gate02/95/squirrly-check-for-seo-errors-1-638.jpg?cb=1427713151')"></a>
70
- <div>Squirrly Check for SEO errors</div>
71
- </li>
72
- <li>
73
- <a href="javascript:void(0);" rel="46171871" style="background-image: url('//image.slidesharecdn.com/sitemap-150323092133-conversion-gate01/95/squirrly-sitemap-xml-1-638.jpg?cb=1427713209')"></a>
74
- <div>Squirrly Sitemap XML</div>
75
- </li>
76
- <li>
77
- <a href="javascript:void(0);" rel="46209176" style="background-image: url('//image.slidesharecdn.com/favicon-150324035827-conversion-gate01/95/squirrly-faviconico-1-638.jpg?cb=1427713276')"></a>
78
- <div>Squirrly Favicon.ico</div>
79
- </li>
80
- <li>
81
- <a href="javascript:void(0);" rel="46213739" style="background-image: url('//image.slidesharecdn.com/jsonld-150324055711-conversion-gate01/95/squirrly-jsonld-structured-data-1-638.jpg?cb=1427713334')"></a>
82
- <div>Squirrly Json-LD Structured Data</div>
83
- </li>
84
- <li>
85
- <a href="javascript:void(0);" rel="46218043" style="background-image: url('//image.slidesharecdn.com/tracking-150324074838-conversion-gate01/95/squirrly-tracking-tools-1-638.jpg?cb=1427713384')"></a>
86
- <div>Squirrly Tracking Tools</div>
87
- </li>
88
- <li>
89
- <a href="javascript:void(0);" rel="46219965" style="background-image: url('//image.slidesharecdn.com/types-150324083302-conversion-gate01/95/squirrly-settings-for-posts-and-pages-1-638.jpg?cb=1427713476')"></a>
90
- <div>Squirrly Settings for Posts and Pages</div>
91
- </li>
92
- <li>
93
- <a href="javascript:void(0);" rel="46220852" style="background-image: url('//image.slidesharecdn.com/ranking-150324085252-conversion-gate01/95/squirrly-google-rank-option-1-638.jpg?cb=1427713539')"></a>
94
- <div>Squirrly Google Rank Option</div>
95
- </li>
96
- <li>
97
- <a href="javascript:void(0);" rel="46222827" style="background-image: url('//image.slidesharecdn.com/success-150324093815-conversion-gate01/95/measure-your-success-option-from-squirrly-1-638.jpg?cb=1427713584')"></a>
98
- <div>Measure Your Success with Squirrly</div>
99
- </li>
100
- <li>
101
- <a href="javascript:void(0);" rel="46256414" style="background-image: url('//image.slidesharecdn.com/robots-150325031929-conversion-gate01/95/squirrly-robotstxt-1-638.jpg?cb=1427713635')"></a>
102
- <div>Squirrly Robots.txt</div>
103
- </li>
104
- <li>
105
- <a href="javascript:void(0);" rel="46440187" style="background-image: url('//image.slidesharecdn.com/audit-150330042921-conversion-gate01/95/squirrly-site-audit-1-638.jpg?cb=1427707809')"></a>
106
- <div>Squirrly Site Audit</div>
107
- </li>
108
- </ul>
109
- </div>
110
- </div>
111
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockKeywordResearch.php DELETED
@@ -1,37 +0,0 @@
1
- <div id="sq_settings">
2
- <div class="sq_message sq_error" style="display: none"></div>
3
-
4
- <?php
5
- SQ_ObjController::getBlock('SQ_BlockSupport')->init();
6
- SQ_ObjController::getBlock('SQ_Loading')->loadJsVars();
7
- ?>
8
- <div>
9
- <span class="sq_icon"></span>
10
- <div id="sq_settings_title"><?php _e('Squirrly Keyword Research', _SQ_PLUGIN_NAME_); ?> </div>
11
- <div class="sq_subtitles">
12
- <p>Find Long-Tail Keywords That Are Easy to Rank For. Never Miss a Ranking Opportunity. All the Details We Give Are Personalized For Each Site, Thanks to Squirrly's Market Intelligence Features.</p>
13
- </div>
14
- </div>
15
- <div id="sq_helpkeywordresearchside" class="sq_helpside"></div>
16
- <div id="sq_left">
17
- <?php if (SQ_Tools::$options['sq_api'] <> '') { ?>
18
- <div id="sq_settings_body">
19
-
20
- <?php if (SQ_Tools::$options['sq_api'] <> '') { ?>
21
- <fieldset style="background: none !important; box-shadow: none;">
22
- <div id="sq_krinfo" class="sq_loading"></div>
23
- </fieldset>
24
- <script type="text/javascript">
25
- jQuery(document).ready(function () {
26
- sq_getKR();
27
- });
28
- </script>
29
- <?php } ?>
30
-
31
- </div>
32
-
33
- <?php } ?>
34
-
35
- </div>
36
-
37
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockLiveAssistant.php DELETED
@@ -1,36 +0,0 @@
1
- <div id="sq_settings">
2
- <div class="sq_message sq_error" style="display: none"></div>
3
-
4
- <?php
5
- SQ_ObjController::getBlock('SQ_BlockSupport')->init();
6
- ?>
7
- <div>
8
- <span class="sq_icon"></span>
9
- <div id="sq_settings_title"><?php _e('Squirrly Live Assistant', _SQ_PLUGIN_NAME_); ?> </div>
10
- <div class="sq_subtitles">
11
- <p>Using the Live Assistant from Squirrly SEO is like having a consultant sitting right next to you and helping you get a 100% optimized page. For both Humans and Search Engine bots.</p>
12
- </div>
13
- </div>
14
- <div id="sq_helpliveassistantside" class="sq_helpside"></div>
15
- <div id="sq_left">
16
- <div id="sq_settings_body">
17
-
18
- <fieldset style="background: none !important; box-shadow: none;">
19
- <div class="sq_subtitles">
20
- <div class="sq_button"><a href="post-new.php" target="_blank" style="margin: 10px; font-size: 15px; max-width: 210px;"><?php _e('Use Squirrly Live Assistant',_SQ_PLUGIN_NAME_) ?></a></div>
21
-
22
- <p>You just have to type in the keyword you want the page to be optimized for.</p>
23
- <p><img src="<?php echo _SQ_THEME_URL_ . 'img/help/live_assistant1.png' ?>" alt=""></p>
24
- <p>After that, the Live Assistant guides you through the steps you need to take to fully optimize the page.</p>
25
- <p><img src="<?php echo _SQ_THEME_URL_ . 'img/help/live_assistant2.png' ?>" alt=""></p>
26
- <p><img src="<?php echo _SQ_THEME_URL_ . 'img/help/live_assistant3.png' ?>" alt=""></p>
27
-
28
- <p>When all those lights turn green, it means you have an excellent SEO article, page or product.</p>
29
- <p><a href="post-new.php" target="_blank" style="margin-top: 10px; font-size: 15px; max-width: 210px;"><img src="<?php echo _SQ_THEME_URL_ . 'img/help/live_assistant4.png' ?>" alt=""></a></p>
30
- <div class="sq_button"><a href="post-new.php" target="_blank" style="margin-top: 10px; font-size: 15px; max-width: 210px;"><?php _e('Use Squirrly Live Assistant',_SQ_PLUGIN_NAME_) ?></a></div>
31
- </div>
32
- </fieldset>
33
- </div>
34
- </div>
35
-
36
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockPostsAnalytics.php DELETED
@@ -1,56 +0,0 @@
1
- <?php
2
- if (SQ_Tools::$options['sq_google_ranksperhour'] > 0) {
3
- $blog_ip = @gethostbyname(gethostname());
4
-
5
- if (get_transient('google_blocked') !== false) {
6
- echo '<div id="notice sq_message" style="font-size: 14px;color: red;padding: 0px;margin: 0 0 15px 0;text-align: center;line-height: 15px;"><p>';
7
- if (function_exists('curl_init') && !ini_get('open_basedir')) {
8
- echo sprintf(__('The IP %s is calling the rank too often and google stopped the calls for %s mins. Lower the Rank check rate in Squirrly > Advanced > Rank Option. %sMore details%s', _SQ_PLUGIN_NAME_),$blog_ip, (((get_transient('google_blocked') - time() + 3600) > 0) ? date('i', (get_transient('google_blocked') - time() + 3600)) : 'an hour'), '<a href="http://howto.squirrly.co/wordpress-seo/could-not-receive-data-from-google-err-blocked-ip/" target="_blank" >', '</a>');
9
- }
10
- echo '</p></div>';
11
- } elseif (!function_exists('curl_init')) {
12
- echo '<div class="notice sq_message"><p>';
13
- echo sprintf(__('To be able to check the RANK please activate cURL for PHP on your server %sDetails%s', _SQ_PLUGIN_NAME_), '<a href="http://stackoverflow.com/questions/1347146/how-to-enable-curl-in-php-xampp" target="_blank">', '</a>');
14
- echo '</p></div>';
15
- } elseif (ini_get('open_basedir') <> '') {
16
- echo '<div class="notice sq_message"><p>';
17
- echo sprintf(__('To be able to check the RANK please set the "open_basedir" to NULL on your server %sDetails%s', _SQ_PLUGIN_NAME_), '<a href="http://stackoverflow.com/a/6918685" target="_blank">', '</a>');
18
- echo '</p></div>';
19
- }
20
- } else {
21
- echo '<div class="notice sq_message"><p>';
22
- echo sprintf(__('To see the Google Ranking for each article you need to select how many pages to be checked by google rank every hour from %sSquirrly > Advanced > Google Rank Option%s. ', _SQ_PLUGIN_NAME_), '<a href="' . admin_url('admin.php?page=sq_settings') . '">', '</a>');
23
- echo '</p></div>';
24
-
25
- }
26
- ?>
27
- <div id="sq_posts">
28
- <span class="sq_icon"></span>
29
-
30
-
31
- <div id="sq_posts_title"><?php _e('Squirrly Analytics', _SQ_PLUGIN_NAME_); ?> </div>
32
- <div id="sq_posts_subtitle"><?php _e('Don\'t see all your pages here? Make sure you optimize them with Squirrly, so that we can track them, and display you the analytics', _SQ_PLUGIN_NAME_); ?> </div>
33
-
34
-
35
- <?php echo $view->getNavigationTop() ?>
36
- <table class="wp-list-table widefat fixed posts" cellspacing="0">
37
- <thead>
38
- <tr>
39
- <?php echo $view->getHeaderColumns() ?>
40
- </tr>
41
- </thead>
42
-
43
- <tfoot>
44
- <tr>
45
- <?php echo $view->getHeaderColumns() ?>
46
- </tr>
47
- </tfoot>
48
-
49
- <tbody id="the-list">
50
- <?php echo $view->getRows() ?>
51
- </tbody>
52
- </table>
53
- <?php echo $view->getNavigationBottom() ?>
54
- <?php $view->hookFooter(); ?>
55
- <?php echo $view->getScripts(); ?>
56
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockSettings.php DELETED
@@ -1,416 +0,0 @@
1
- <div id="sq_settings">
2
- <?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
3
- <div>
4
- <span class="sq_icon"></span>
5
-
6
- <div id="sq_settings_title"><?php _e('Advanced Settings', _SQ_PLUGIN_NAME_); ?> </div>
7
- <div id="sq_settings_title">
8
- <input type="submit" name="sq_update" value="<?php _e('Save settings', _SQ_PLUGIN_NAME_) ?> &raquo;" />
9
- </div>
10
- </div>
11
- <div id="sq_helpsettingscontent" class="sq_helpcontent"></div>
12
- <div id="sq_helpsettingsside" class="sq_helpside"></div>
13
- <div id="sq_left">
14
- <form id="sq_settings_form" name="settings" action="" method="post" enctype="multipart/form-data">
15
- <div id="sq_settings_body">
16
- <fieldset>
17
- <legend>
18
- <span class="sq_legend_title"><?php _e('Post/Page Edit', _SQ_PLUGIN_NAME_); ?></span>
19
- <span><?php echo sprintf(__('%sThe right method in working with Squirrly, SEO plugin%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/the-right-premises-in-working-with-squirrly-wordpress-seo-plugin" target="_blank">', '</a>'); ?></span>
20
- <span><?php echo sprintf(__('%sGetting inspired with Squirrly WordPress SEO plugin%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/getting-inspired-with-squirrly-wordpress-seo-plugin" target="_blank">', '</a>'); ?></span>
21
-
22
- <span><?php echo sprintf(__('%sThere is a New SEO Live Assistant from Squirrly%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/there-is-a-new-seo-live-assistant-from-squirrly" target="_blank">', '</a>'); ?></span>
23
- <span><?php echo sprintf(__('%sHow to create Human friendly content with the WordPress SEO plugin?%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/how-to-create-human-friendly-content-with-the-a-wordpress-seo-plugin" target="_blank">', '</a>'); ?></span>
24
-
25
- <div class="sq_badge_google">
26
- <div class="sq_badge-image"></div>
27
- <div class="sq_description">
28
- <div class="sq_title">
29
- <?php _e('Inspiration Box G17', _SQ_PLUGIN_NAME_); ?>
30
- </div>
31
- <div class="sq_link">
32
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>">
33
- (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>)
34
- </a>
35
- </div>
36
- </div>
37
- </div>
38
-
39
- <div class="sq_badge_google">
40
- <div class="sq_badge-image"></div>
41
- <div class="sq_description">
42
- <div class="sq_title">
43
- <?php _e('Keyword Research G17', _SQ_PLUGIN_NAME_); ?>
44
- </div>
45
- <div class="sq_link">
46
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>">
47
- (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>)
48
- </a>
49
- </div>
50
- </div>
51
- </div>
52
-
53
- <div class="sq_badge_google">
54
- <div class="sq_badge-image"></div>
55
- <div class="sq_description">
56
- <div class="sq_title">
57
- <?php _e('Inner Links G17', _SQ_PLUGIN_NAME_); ?>
58
- </div>
59
- <div class="sq_link">
60
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>">
61
- (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>)
62
- </a>
63
- </div>
64
- </div>
65
- </div>
66
- </legend>
67
-
68
- <div>
69
- <div id="sq_post_type_option" class="withborder">
70
- <p style="font-weight: bold;"><?php _e('Load Squirrly Live Assistant for', _SQ_PLUGIN_NAME_); ?>:</p>
71
- <ul id="sq_post_types">
72
- <li class="sq_selectall"><input type="checkbox" id="sq_selectall" />Select All</li>
73
- <li>
74
- <input type="checkbox" class="sq_post_types" name="sq_post_types[]" value="post" <?php echo(in_array('post', SQ_Tools::$options['sq_post_types']) ? 'checked="checked"' : ''); ?>><?php _e('Posts', _SQ_PLUGIN_NAME_); ?>
75
- </li>
76
- <li>
77
- <input type="checkbox" class="sq_post_types" name="sq_post_types[]" value="page" <?php echo(in_array('page', SQ_Tools::$options['sq_post_types']) ? 'checked="checked"' : ''); ?>><?php _e('Pages', _SQ_PLUGIN_NAME_); ?>
78
- </li>
79
- <?php if (in_array('product', get_post_types())) { //check for ecommerce product ?>
80
- <li>
81
- <input type="checkbox" class="sq_post_types" name="sq_post_types[]" value="product" <?php echo(in_array('product', SQ_Tools::$options['sq_post_types']) ? 'checked="checked"' : ''); ?>><?php _e('Products', _SQ_PLUGIN_NAME_); ?>
82
- </li>
83
- <?php } ?>
84
- <?php
85
- $types = get_post_types();
86
- foreach (array('post', 'page', 'revision', 'nav_menu_item', 'product', 'shop_order', 'shop_coupon') as $exclude) {
87
- if (in_array($exclude, $types)) {
88
- unset($types[$exclude]);
89
- }
90
- }
91
- foreach ($types as $type) {
92
- $type_data = get_post_type_object($type);
93
- if (!isset($type_data->show_ui) || $type_data->show_ui != 1) {
94
- unset($types[$type]);
95
- } else {
96
- //echo '<pre>' . print_r($type_data, true) . '</pre>';
97
- ?>
98
- <li>
99
- <input type="checkbox" class="sq_post_types" name="sq_post_types[]" value="<?php echo $type ?>" <?php echo(in_array($type, SQ_Tools::$options['sq_post_types']) ? 'checked="checked"' : ''); ?>><?php echo $type_data->labels->name; ?>
100
- </li>
101
- <?php
102
- }
103
- }
104
- ?>
105
- </ul>
106
- </div>
107
- <br />
108
-
109
- <div class="sq_option_content">
110
- <div class="sq_switch">
111
- <input id="sq_keyword_help1" type="radio" class="sq_switch-input" name="sq_keyword_help" value="1" <?php echo((SQ_Tools::$options['sq_keyword_help'] == 1) ? "checked" : '') ?> />
112
- <label for="sq_keyword_help1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
113
- <input id="sq_keyword_help0" type="radio" class="sq_switch-input" name="sq_keyword_help" value="0" <?php echo((SQ_Tools::$options['sq_keyword_help'] == 0) ? "checked" : '') ?> />
114
- <label for="sq_keyword_help0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
115
- <span class="sq_switch-selection"></span>
116
- </div>
117
- <span><?php _e('Show <strong>Squirrly Tooltips</strong> when posting a new article (e.g. "Enter a keyword").', _SQ_PLUGIN_NAME_); ?></span>
118
- </div>
119
-
120
- <div class="sq_option_content">
121
- <div class="sq_switch">
122
- <input id="sq_keyword_information1" type="radio" class="sq_switch-input" name="sq_keyword_information" value="1" <?php echo((SQ_Tools::$options['sq_keyword_information'] == 1) ? "checked" : '') ?> />
123
- <label for="sq_keyword_information1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
124
- <input id="sq_keyword_information0" type="radio" class="sq_switch-input" name="sq_keyword_information" value="0" <?php echo((SQ_Tools::$options['sq_keyword_information'] == 0) ? "checked" : '') ?> />
125
- <label for="sq_keyword_information0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
126
- <span class="sq_switch-selection"></span>
127
- </div>
128
- <span><?php _e('Always show <strong>Keyword Research</strong> about the selected keyword.', _SQ_PLUGIN_NAME_); ?></span>
129
- </div>
130
-
131
- <div class="sq_option_content">
132
- <div class="sq_switch">
133
- <input id="sq_force_savepost1" type="radio" class="sq_switch-input" name="sq_force_savepost" value="1" <?php echo((SQ_Tools::$options['sq_force_savepost'] == 1) ? "checked" : '') ?> />
134
- <label for="sq_force_savepost1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
135
- <input id="sq_force_savepost0" type="radio" class="sq_switch-input" name="sq_force_savepost" value="0" <?php echo((SQ_Tools::$options['sq_force_savepost'] == 0) ? "checked" : '') ?> />
136
- <label for="sq_force_savepost0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
137
- <span class="sq_switch-selection"></span>
138
- </div>
139
- <span><?php _e('Send optimization data to Squirrly API when the post is saved (don\'t use cron)', _SQ_PLUGIN_NAME_); ?></span>
140
- </div>
141
-
142
- <div class="sq_option_content">
143
- <div class="sq_switch">
144
- <input id="sq_sla1" type="radio" class="sq_switch-input" name="sq_sla" value="1" <?php echo((SQ_Tools::$options['sq_sla'] == 1) ? "checked" : '') ?> />
145
- <label for="sq_sla1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
146
- <input id="sq_sla0" type="radio" class="sq_switch-input" name="sq_sla" value="0" <?php echo((SQ_Tools::$options['sq_sla'] == 0) ? "checked" : '') ?> />
147
- <label for="sq_sla0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
148
- <span class="sq_switch-selection"></span>
149
- </div>
150
- <span><?php _e('Use <strong> the NEW version of the SEO Live Assistant</strong>.', _SQ_PLUGIN_NAME_); ?></span>
151
- </div>
152
- <p></p>
153
-
154
- <div class="sq_option_content withbordertop">
155
- <div class="sq_switch">
156
- <input id="sq_keywordtag1" type="radio" class="sq_switch-input" name="sq_keywordtag" value="1" <?php echo((SQ_Tools::$options['sq_keywordtag'] == 1) ? "checked" : '') ?> />
157
- <label for="sq_keywordtag1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
158
- <input id="sq_keywordtag0" type="radio" class="sq_switch-input" name="sq_keywordtag" value="0" <?php echo((SQ_Tools::$options['sq_keywordtag'] == 0) ? "checked" : '') ?> />
159
- <label for="sq_keywordtag0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
160
- <span class="sq_switch-selection"></span>
161
- </div>
162
- <span><?php _e('Add the Post tags in <strong>Keyword META</strong>.', _SQ_PLUGIN_NAME_); ?></span>
163
- </div>
164
-
165
- <div class="sq_option_content">
166
- <div class="sq_switch">
167
- <input id="sq_local_images1" type="radio" class="sq_switch-input" name="sq_local_images" value="1" <?php echo((SQ_Tools::$options['sq_local_images'] == 1) ? "checked" : '') ?> />
168
- <label for="sq_local_images1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
169
- <input id="sq_local_images0" type="radio" class="sq_switch-input" name="sq_local_images" value="0" <?php echo((SQ_Tools::$options['sq_local_images'] == 0) ? "checked" : '') ?> />
170
- <label for="sq_local_images0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
171
- <span class="sq_switch-selection"></span>
172
- </div>
173
- <span><?php _e('Download <strong>remote images</strong> in your <strong>Media Library</strong> for the new posts.', _SQ_PLUGIN_NAME_); ?></span>
174
- </div>
175
-
176
-
177
- <div class="sq_option_content">
178
- <div class="sq_switch">
179
- <input id="sq_url_fix1" type="radio" class="sq_switch-input" name="sq_url_fix" value="1" <?php echo((SQ_Tools::$options['sq_url_fix'] == 1) ? "checked" : '') ?> />
180
- <label for="sq_url_fix1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
181
- <input id="sq_url_fix0" type="radio" class="sq_switch-input" name="sq_url_fix" value="0" <?php echo((SQ_Tools::$options['sq_url_fix'] == 0) ? "checked" : '') ?> />
182
- <label for="sq_url_fix0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
183
- <span class="sq_switch-selection"></span>
184
- </div>
185
- <span><?php _e('Correct my <strong>feed links</strong> and <strong>images</strong> (convert from relative to absolute).', _SQ_PLUGIN_NAME_); ?></span>
186
- </div>
187
-
188
- <div class="sq_option_content"></div>
189
- </div>
190
- </fieldset>
191
-
192
- <fieldset>
193
- <legend>
194
- <span class="sq_legend_title"><?php _e('Google Rank Options', _SQ_PLUGIN_NAME_); ?></span>
195
- <span><?php echo sprintf(__('%sCountry targeting%s', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/62399?hl=en" target="_blank">', '</a>'); ?></span>
196
- <span><?php echo sprintf(__('%sPowerful SEO Tool For Strong Google Rankings%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/serp-checker" target="_blank">', '</a>'); ?></span>
197
-
198
-
199
- </legend>
200
- <div>
201
- <div class="sq_option_content">
202
- <p>
203
- <span><?php _e('Select the google extension for which Squirrly will check the google rank', _SQ_PLUGIN_NAME_); ?></span>
204
- </p>
205
-
206
- <div class="abh_select withborder">
207
- <select id="sq_google_country" name="sq_google_country">
208
- <option value="com"><?php _e('Default', _SQ_PLUGIN_NAME_); ?> - Google.com (http://www.google.com/)</option>
209
- <option value="as"><?php _e('American Samoa', _SQ_PLUGIN_NAME_); ?> (http://www.google.as/)</option>
210
- <option value=".off.ai"><?php _e('Anguilla', _SQ_PLUGIN_NAME_); ?> (http://www.google.off.ai/)</option>
211
- <option value="com.ag"><?php _e('Antigua and Barbuda', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ag/)</option>
212
- <option value="com.ar"><?php _e('Argentina', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ar/)</option>
213
- <option value="com.au"><?php _e('Australia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.au/)</option>
214
- <option value="at"><?php _e('Austria', _SQ_PLUGIN_NAME_); ?> (http://www.google.at/)</option>
215
- <option value="az"><?php _e('Azerbaijan', 'seo-rank-reporter'); ?> (http://www.google.az/)</option>
216
- <option value="be"><?php _e('Belgium', _SQ_PLUGIN_NAME_); ?> (http://www.google.be/)</option>
217
- <option value="com.br"><?php _e('Brazil', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.br/)</option>
218
- <option value="vg"><?php _e('British Virgin Islands', _SQ_PLUGIN_NAME_); ?> (http://www.google.vg/)</option>
219
- <option value="bi"><?php _e('Burundi', _SQ_PLUGIN_NAME_); ?> (http://www.google.bi/)</option>
220
- <option value="bg"><?php _e('Bulgaria', _SQ_PLUGIN_NAME_); ?> (http://www.google.bg/)</option>
221
- <option value="ca"><?php _e('Canada', _SQ_PLUGIN_NAME_); ?> (http://www.google.ca/)</option>
222
- <option value="td"><?php _e('Chad', _SQ_PLUGIN_NAME_); ?> (http://www.google.td/)</option>
223
- <option value="cl"><?php _e('Chile', _SQ_PLUGIN_NAME_); ?> (http://www.google.cl/)</option>
224
- <option value="com.co"><?php _e('Colombia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.co/)</option>
225
- <option value="co.cr"><?php _e('Costa Rica', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.cr/)</option>
226
- <option value="ci"><?php _e('Côte d\'Ivoire', _SQ_PLUGIN_NAME_); ?> (http://www.google.ci/)</option>
227
- <option value="com.cu"><?php _e('Cuba', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.cu/)</option>
228
- <option value="cz"><?php _e('Czech Republic', _SQ_PLUGIN_NAME_); ?> (http://www.google.cz/)</option>
229
- <option value="cd"><?php _e('Dem. Rep. of the Congo', _SQ_PLUGIN_NAME_); ?> (http://www.google.cd/)</option>
230
- <option value="dk"><?php _e('Denmark', _SQ_PLUGIN_NAME_); ?> (http://www.google.dk/)</option>
231
- <option value="dj"><?php _e('Djibouti', _SQ_PLUGIN_NAME_); ?> (http://www.google.dj/)</option>
232
- <option value="com.do"><?php _e('Dominican Republic', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.do/)</option>
233
- <option value="com.ec"><?php _e('Ecuador', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ec/)</option>
234
- <option value="com.sv"><?php _e('El Salvador', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.sv/)</option>
235
- <option value="ee"><?php _e('Estonia', _SQ_PLUGIN_NAME_); ?> (http://www.google.ee/)</option>
236
- <option value="fm"><?php _e('Federated States of Micronesia', _SQ_PLUGIN_NAME_); ?> (http://www.google.fm/)</option>
237
- <option value="com.fj"><?php _e('Fiji', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.fj/)</option>
238
- <option value="fi"><?php _e('Finland', _SQ_PLUGIN_NAME_); ?> (http://www.google.fi/)</option>
239
- <option value="fr"><?php _e('France', _SQ_PLUGIN_NAME_); ?> (http://www.google.fr/)</option>
240
- <option value="gm"><?php _e('The Gambia', _SQ_PLUGIN_NAME_); ?> (http://www.google.gm/)</option>
241
- <option value="ge"><?php _e('Georgia', _SQ_PLUGIN_NAME_); ?> (http://www.google.ge/)</option>
242
- <option value="de"><?php _e('Germany', _SQ_PLUGIN_NAME_); ?> (http://www.google.de/)</option>
243
- <option value="com.gi"><?php _e('Gibraltar', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.gi/)</option>
244
- <option value="com.gr"><?php _e('Greece', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.gr/)</option>
245
- <option value="gl"><?php _e('Greenland', _SQ_PLUGIN_NAME_); ?> (http://www.google.gl/)</option>
246
- <option value="gg"><?php _e('Guernsey', _SQ_PLUGIN_NAME_); ?> (http://www.google.gg/)</option>
247
- <option value="hn"><?php _e('Honduras', _SQ_PLUGIN_NAME_); ?> (http://www.google.hn/)</option>
248
- <option value="com.hk"><?php _e('Hong Kong', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.hk/)</option>
249
- <option value="co.hu"><?php _e('Hungary', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.hu/)</option>
250
- <option value="co.in"><?php _e('India', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.in/)</option>
251
- <option value="co.id"><?php _e('Indonesia', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.id/)</option>
252
- <option value="ie"><?php _e('Ireland', _SQ_PLUGIN_NAME_); ?> (http://www.google.ie/)</option>
253
- <option value="co.im"><?php _e('Isle of Man', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.im/)</option>
254
- <option value="co.il"><?php _e('Israel', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.il/)</option>
255
- <option value="it"><?php _e('Italy', _SQ_PLUGIN_NAME_); ?> (http://www.google.it/)</option>
256
- <option value="com.jm"><?php _e('Jamaica', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.jm/)</option>
257
- <option value="co.jp"><?php _e('Japan', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.jp/)</option>
258
- <option value="co.je"><?php _e('Jersey', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.je/)</option>
259
- <option value="kz"><?php _e('Kazakhstan', _SQ_PLUGIN_NAME_); ?> (http://www.google.kz/)</option>
260
- <option value="co.kr"><?php _e('Korea', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.kr/)</option>
261
- <option value="lv"><?php _e('Latvia', _SQ_PLUGIN_NAME_); ?> (http://www.google.lv/)</option>
262
- <option value="co.ls"><?php _e('Lesotho', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.ls/)</option>
263
- <option value="li"><?php _e('Liechtenstein', _SQ_PLUGIN_NAME_); ?> (http://www.google.li/)</option>
264
- <option value="lt"><?php _e('Lithuania', _SQ_PLUGIN_NAME_); ?> (http://www.google.lt/)</option>
265
- <option value="lu"><?php _e('Luxembourg', _SQ_PLUGIN_NAME_); ?> (http://www.google.lu/)</option>
266
- <option value="mw"><?php _e('Malawi', _SQ_PLUGIN_NAME_); ?> (http://www.google.mw/)</option>
267
- <option value="com.my"><?php _e('Malaysia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.my/)</option>
268
- <option value="com.mt"><?php _e('Malta', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.mt/)</option>
269
- <option value="mu"><?php _e('Mauritius', _SQ_PLUGIN_NAME_); ?> (http://www.google.mu/)</option>
270
- <option value="com.mx"><?php _e('México', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.mx/)</option>
271
- <option value="ms"><?php _e('Montserrat', _SQ_PLUGIN_NAME_); ?> (http://www.google.ms/)</option>
272
- <option value="com.na"><?php _e('Namibia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.na/)</option>
273
- <option value="com.np"><?php _e('Nepal', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.np/)</option>
274
- <option value="nl"><?php _e('Netherlands', _SQ_PLUGIN_NAME_); ?> (http://www.google.nl/)</option>
275
- <option value="co.nz"><?php _e('New Zealand', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.nz/)</option>
276
- <option value="com.ni"><?php _e('Nicaragua', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ni/)</option>
277
- <option value="com.nf"><?php _e('Norfolk Island', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.nf/)</option>
278
- <option value="no"><?php _e('Norway', _SQ_PLUGIN_NAME_); ?> (http://www.google.no/)</option>
279
- <option value="com.pk"><?php _e('Pakistan', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pk/)</option>
280
- <option value="com.pa"><?php _e('Panamá', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pa/)</option>
281
- <option value="com.py"><?php _e('Paraguay', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.py/)</option>
282
- <option value="com.pe"><?php _e('Perú', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pe/)</option>
283
- <option value="com.ph"><?php _e('Philippines', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ph/)</option>
284
- <option value="pn"><?php _e('Pitcairn Islands', _SQ_PLUGIN_NAME_); ?> (http://www.google.pn/)</option>
285
- <option value="pl"><?php _e('Poland', _SQ_PLUGIN_NAME_); ?> (http://www.google.pl/)</option>
286
- <option value="pt"><?php _e('Portugal', _SQ_PLUGIN_NAME_); ?> (http://www.google.pt/)</option>
287
- <option value="com.pr"><?php _e('Puerto Rico', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pr/)</option>
288
- <option value="cg"><?php _e('Rep. of the Congo', _SQ_PLUGIN_NAME_); ?> (http://www.google.cg/)</option>
289
- <option value="ro"><?php _e('Romania', _SQ_PLUGIN_NAME_); ?> (http://www.google.ro/)</option>
290
- <option value="ru"><?php _e('Russia', _SQ_PLUGIN_NAME_); ?> (http://www.google.ru/)</option>
291
- <option value="rw"><?php _e('Rwanda', _SQ_PLUGIN_NAME_); ?> (http://www.google.rw/)</option>
292
- <option value="sh"><?php _e('Saint Helena', _SQ_PLUGIN_NAME_); ?> (http://www.google.sh/)</option>
293
- <option value="sm"><?php _e('San Marino', _SQ_PLUGIN_NAME_); ?> (http://www.google.sm/)</option>
294
- <option value="com.sa"><?php _e('Saudi Arabia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.sa/)</option>
295
- <option value="com.sg"><?php _e('Singapore', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.sg/)</option>
296
- <option value="sk"><?php _e('Slovakia', _SQ_PLUGIN_NAME_); ?> (http://www.google.sk/)</option>
297
- <option value="co.za"><?php _e('South Africa', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.za/)</option>
298
- <option value="es"><?php _e('Spain', _SQ_PLUGIN_NAME_); ?> (http://www.google.es/)</option>
299
- <option value="lk"><?php _e('Sri Lanka', _SQ_PLUGIN_NAME_); ?> (http://www.google.lk/)</option>
300
- <option value="se"><?php _e('Sweden', _SQ_PLUGIN_NAME_); ?> (http://www.google.se/)</option>
301
- <option value="ch"><?php _e('Switzerland', _SQ_PLUGIN_NAME_); ?> (http://www.google.ch/)</option>
302
- <option value="com.tw"><?php _e('Taiwan', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.tw/)</option>
303
- <option value="co.th"><?php _e('Thailand', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.th/)</option>
304
- <option value="tt"><?php _e('Trinidad and Tobago', _SQ_PLUGIN_NAME_); ?> (http://www.google.tt/)</option>
305
- <option value="com.tr"><?php _e('Turkey', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.tr/)</option>
306
- <option value="com.ua"><?php _e('Ukraine', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ua/)</option>
307
- <option value="ae"><?php _e('United Arab Emirates', _SQ_PLUGIN_NAME_); ?> (http://www.google.ae/)</option>
308
- <option value="co.uk"><?php _e('United Kingdom', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.uk/)</option>
309
- v
310
- <option value="us"><?php _e('United States', _SQ_PLUGIN_NAME_); ?> (http://www.google.us/)</option>
311
- <option value="com.uy"><?php _e('Uruguay', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.uy/)</option>
312
- <option value="uz"><?php _e('Uzbekistan', _SQ_PLUGIN_NAME_); ?> (http://www.google.uz/)</option>
313
- <option value="vu"><?php _e('Vanuatu', _SQ_PLUGIN_NAME_); ?> (http://www.google.vu/)</option>
314
- <option value="co.ve"><?php _e('Venezuela', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.ve/)</option>
315
- <option value="com.vn"><?php _e('Vietnam', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.vn/)</option>
316
- </select>
317
- </div>
318
- <p>
319
- <span><?php echo sprintf(__('Select how many pages to be checked by google rank every hour. %s(not recommended for shared hosting plan)%s', _SQ_PLUGIN_NAME_), '<br /><span style="color:#aaa;font-size:12px;">', '</span>'); ?></span>
320
- </p>
321
-
322
- <div class="withborder">
323
- <select id="sq_google_ranksperhour" name="sq_google_ranksperhour">
324
- <?php for ($i = 0; $i <= 5; $i++) {
325
- if ($i == 1) {
326
- $text = __('page', _SQ_PLUGIN_NAME_);
327
- } else {
328
- $text = __('pages', _SQ_PLUGIN_NAME_);
329
- }
330
- if ((int)SQ_Tools::$options['sq_google_ranksperhour'] > 5) {
331
- SQ_Tools::$options['sq_google_ranksperhour'] = 5;
332
- }
333
- ?>
334
- <option value="<?php echo $i ?>" <?php echo((SQ_Tools::$options['sq_google_ranksperhour'] == $i) ? "selected='selected'" : '') ?>><?php echo $i . ' ' . $text . '/' . __('h', _SQ_PLUGIN_NAME_) ?> </option>
335
- <?php } ?>
336
- </select>
337
-
338
- </div>
339
-
340
- <div class="sq_option_content">
341
- <div class="sq_switch">
342
- <input id="sq_google_country_strict1" type="radio" class="sq_switch-input" name="sq_google_country_strict" value="1" <?php echo((SQ_Tools::$options['sq_google_country_strict'] == 1) ? "checked" : '') ?> />
343
- <label for="sq_google_country_strict1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
344
- <input id="sq_google_country_strict0" type="radio" class="sq_switch-input" name="sq_google_country_strict" value="0" <?php echo((SQ_Tools::$options['sq_google_country_strict'] == 0) ? "checked" : '') ?> />
345
- <label for="sq_google_country_strict0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
346
- <span class="sq_switch-selection"></span>
347
- </div>
348
- <span><?php _e('Restricts search results to results originating in the above particular country.', _SQ_PLUGIN_NAME_); ?></span>
349
- </div>
350
-
351
-
352
- </div>
353
- </div>
354
- </fieldset>
355
-
356
- <fieldset id="sq_measure_success">
357
- <legend>
358
- <span class="sq_legend_title"><?php _e('Measure Your Success', _SQ_PLUGIN_NAME_); ?></span>
359
- <span><?php echo sprintf(__('%sHow to set the Google Webmaster Tool%s', _SQ_PLUGIN_NAME_), '<a href="http://howto.squirrly.co/wordpress-seo/how-to-set-the-google-webmaster-tool/" target="_blank">', '</a>'); ?></span>
360
- <span><?php echo sprintf(__('%sBest practices to help Google find, crawl, and index your site%s', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/35769?hl=en" target="_blank">', '</a>'); ?></span>
361
- <span><?php echo sprintf(__('%sBing Webmaster Tools Help & How-To Center%s', _SQ_PLUGIN_NAME_), '<a href="http://www.bing.com/webmaster/help/help-center-661b2d18" target="_blank">', '</a>'); ?></span>
362
-
363
- </legend>
364
- <div>
365
- <p class="withborder withcode">
366
- <span class="sq_icon sq_icon_googlewt"></span>
367
- <?php echo sprintf(__('Google META verification code for %sWebmaster Tool%s:', _SQ_PLUGIN_NAME_), '<a href="https://www.google.com/webmasters" target="_blank">', '</a>'); ?>
368
- <br><strong><input type="text" name="sq_google_wt" value="<?php echo((SQ_Tools::$options['sq_google_wt'] <> '') ? SQ_Tools::$options['sq_google_wt'] : '') ?>" size="15" /> (e.g. &lt;meta name="google-site-verification" content="XXXXXXXXXXXXXXXXXX" /&gt;)</strong>
369
- </p>
370
-
371
- <p class="withborder withcode">
372
- <span class="sq_icon sq_icon_bingwt"></span>
373
- <?php echo sprintf(__('Bing META code (for %sWebmaster Tool%s ):', _SQ_PLUGIN_NAME_), '<a href="http://www.bing.com/toolbox/webmaster/" target="_blank">', '</a>'); ?>
374
- <br><strong>
375
- <input type="text" name="sq_bing_wt" value="<?php echo((SQ_Tools::$options['sq_bing_wt'] <> '') ? SQ_Tools::$options['sq_bing_wt'] : '') ?>" size="15" /> (e.g. &lt;meta name="msvalidate.01" content="XXXXXXXXXXXXXXXXXX" /&gt;)</strong>
376
- </p>
377
-
378
- <p class="withborder withcode">
379
- <span class="sq_icon sq_icon_alexat"></span>
380
- <?php echo sprintf(__('Alexa META code (for %sAlexa Tool%s ):', _SQ_PLUGIN_NAME_), '<a href="http://www.alexa.com/pro/subscription/signup?tsver=0&puid=200" target="_blank">', '</a>'); ?>
381
- <br><strong><input type="text" name="sq_alexa" value="<?php echo((SQ_Tools::$options['sq_alexa'] <> '') ? SQ_Tools::$options['sq_alexa'] : '') ?>" size="15" /> (e.g. &lt;meta name="alexaVerifyID" content="XXXXXXXXXXXXXXXXXX" /&gt;)</strong>
382
- </p>
383
- </div>
384
- </fieldset>
385
-
386
- <div id="sq_settings_submit">
387
- <input type="hidden" name="action" value="sq_settings_update" />
388
- <input type="hidden" name="nonce" value="<?php echo wp_create_nonce(_SQ_NONCE_ID_); ?>" />
389
- <input type="submit" name="sq_update" value="<?php _e('Save settings', _SQ_PLUGIN_NAME_) ?> &raquo;" />
390
- </div>
391
- </div>
392
- </form>
393
-
394
- <div class="sq_settings_backup">
395
- <form action="" method="POST">
396
- <input type="hidden" name="action" value="sq_backup" />
397
- <input type="hidden" name="nonce" value="<?php echo wp_create_nonce(_SQ_NONCE_ID_); ?>" />
398
- <input type="submit" class="sq_button" name="sq_backup" value="<?php _e('Backup Settings', _SQ_PLUGIN_NAME_) ?>" />
399
- <input type="button" class="sq_button sq_restore" name="sq_restore" value="<?php _e('Restore Settings', _SQ_PLUGIN_NAME_) ?>" />
400
- </form>
401
- </div>
402
-
403
- <div class="sq_settings_restore sq_popup" style="display: none">
404
- <span class="sq_close">x</span>
405
- <span><?php _e('Upload the file with the saved Squirrly Settings', _SQ_PLUGIN_NAME_) ?></span>
406
-
407
- <form action="" method="POST" enctype="multipart/form-data">
408
- <input type="hidden" name="action" value="sq_restore" />
409
- <input type="file" name="sq_options" id="favicon" style="float: left;" />
410
- <input type="hidden" name="nonce" value="<?php echo wp_create_nonce(_SQ_NONCE_ID_); ?>" />
411
- <input type="submit" style="margin-top: 10px;" class="sq_button" name="sq_restore" value="<?php _e('Restore Backup', _SQ_PLUGIN_NAME_) ?>" />
412
- </form>
413
- </div>
414
- </div>
415
-
416
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
themes/default/SQ_BlockSettingsSeo.php DELETED
@@ -1,900 +0,0 @@
1
- <div id="sq_settings">
2
- <?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
3
- <div>
4
- <span class="sq_icon"></span>
5
- <div id="sq_settings_title"><?php _e('SEO', _SQ_PLUGIN_NAME_); ?> </div>
6
- <div id="sq_settings_title">
7
- <input type="submit" name="sq_update" value="<?php _e('Save SEO', _SQ_PLUGIN_NAME_) ?> &raquo;" />
8
- <?php if (SQ_Tools::$options['ignore_warn'] == 0) { ?>
9
- <div class="sq_checkissues"><?php _e('Check for SEO issues in your site', _SQ_PLUGIN_NAME_); ?></div>
10
- <?php } ?>
11
- </div>
12
- </div>
13
- <div id="sq_helpsettingsseocontent" class="sq_helpcontent"></div>
14
- <div id="sq_helpsettingsseoside" class="sq_helpside"></div>
15
-
16
- <div id="sq_left">
17
- <form id="sq_settings_form" name="settings" action="" method="post" enctype="multipart/form-data">
18
- <div id="sq_settings_body">
19
- <fieldset>
20
- <legend>
21
- <span class="sq_legend_title"><?php _e('Let Squirrly SEO optimize this blog', _SQ_PLUGIN_NAME_); ?></span>
22
- <span><?php echo sprintf(__('%sIs Squirrly SEO better then WordPress SEO by Yoast?%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/why_is_squirrly_seo_better_then_wordpress_seo_by_yoast-pagblog-article_id61980-html" target="_blank">', '</a>'); ?></span>
23
-
24
- <span><?php _e('Activate the built-in SEO settings from Squirrly by switching Yes below. <strong>Works well with Multisites and Ecommerce.</strong>', _SQ_PLUGIN_NAME_); ?></span><br />
25
- <div class="sq_option_content">
26
- <div class="sq_switch">
27
- <input id="sq_use_on" type="radio" class="sq_switch-input" name="sq_use" value="1" <?php echo((SQ_Tools::$options['sq_use'] == 1) ? "checked" : '') ?> />
28
- <label for="sq_use_on" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
29
- <input id="sq_use_off" type="radio" class="sq_switch-input" name="sq_use" value="0" <?php echo((!SQ_Tools::$options['sq_use']) ? "checked" : '') ?> />
30
- <label for="sq_use_off" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
31
- <span class="sq_switch-selection"></span>
32
- </div>
33
- </div>
34
- <div class="sq_badge_google">
35
- <div class="sq_badge-image"></div>
36
- <div class="sq_description">
37
- <div class="sq_title">
38
- <?php _e('New SEO Settings For Google 2017', _SQ_PLUGIN_NAME_); ?>
39
- </div>
40
- <div class="sq_link">
41
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>"> (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>) </a>
42
- </div>
43
- </div>
44
- </div>
45
-
46
- <div class="sq_badge_google">
47
- <div class="sq_badge-image"></div>
48
- <div class="sq_description">
49
- <div class="sq_title">
50
- <?php _e('Fastest SEO Plugin in 2017', _SQ_PLUGIN_NAME_); ?>
51
- </div>
52
- <div class="sq_link">
53
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>"> (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>) </a>
54
- </div>
55
- </div>
56
- </div>
57
-
58
- </legend>
59
- <div>
60
- <ul id="sq_settings_sq_use" class="sq_settings_info">
61
- <span><?php _e('What does Squirrly automatically do for SEO?', _SQ_PLUGIN_NAME_); ?></span>
62
- <li>
63
- <?php
64
- $auto_option = false;
65
- if (SQ_Tools::$options['sq_auto_canonical'] == 1) $auto_option = true;
66
- ?>
67
- <div class="sq_option_content sq_option_content_small">
68
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
69
- <input id="sq_auto_canonical1" type="radio" class="sq_switch-input" name="sq_auto_canonical" value="1" <?php echo($auto_option ? "checked" : '') ?> />
70
- <label for="sq_auto_canonical1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
71
- <input id="sq_auto_canonical0" type="radio" class="sq_switch-input" name="sq_auto_canonical" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
72
- <label for="sq_auto_canonical0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
73
- <span class="sq_switch-selection"></span>
74
- </div>
75
- <span><?php echo sprintf(__('adds <strong>%scanonical link%s</strong>, <strong>%srel="prev" and rel="next"%s</strong> metas in Header', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/139066" target="_blank">', '</a>', '<a href="https://support.google.com/webmasters/answer/1663744" target="_blank">', '</a>'); ?></span>
76
- </div>
77
- </li>
78
-
79
- <li>
80
- <?php
81
- $auto_option = false;
82
- if (SQ_Tools::$options['sq_auto_meta'] == 1) $auto_option = true;
83
- ?>
84
- <div class="sq_option_content sq_option_content_small">
85
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
86
- <input id="sq_auto_meta1" type="radio" class="sq_switch-input" name="sq_auto_meta" value="1" <?php echo($auto_option ? "checked" : '') ?> />
87
- <label for="sq_auto_meta1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
88
- <input id="sq_auto_meta0" type="radio" class="sq_switch-input" name="sq_auto_meta" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
89
- <label for="sq_auto_meta0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
90
- <span class="sq_switch-selection"></span>
91
- </div>
92
- <span><?php _e('adds the required METAs (<strong>dublincore, google hreflang</strong>, etc.)', _SQ_PLUGIN_NAME_); ?></span>
93
- </div>
94
- </li>
95
- <li>
96
- <?php
97
- $auto_option = false;
98
- if (SQ_Tools::$options['sq_auto_sitemap'] == 1) $auto_option = true;
99
- ?>
100
- <div class="sq_option_content sq_option_content_small">
101
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
102
- <input id="sq_auto_sitemap1" type="radio" class="sq_switch-input" name="sq_auto_sitemap" value="1" <?php echo($auto_option ? "checked" : '') ?> />
103
- <label for="sq_auto_sitemap1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
104
- <input id="sq_auto_sitemap0" type="radio" class="sq_switch-input" name="sq_auto_sitemap" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
105
- <label for="sq_auto_sitemap0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
106
- <span class="sq_switch-selection"></span>
107
- </div>
108
- <span><?php echo sprintf(__('adds the <strong>%sXML Sitemap%s</strong> for search engines: %s', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/156184?rd=1" target="_blank">', '</a>', '<strong><a href="' . SQ_ObjController::getController('SQ_Sitemaps')->getXmlUrl('sitemap') . '" target="_blank">' . SQ_ObjController::getController('SQ_Sitemaps')->getXmlUrl('sitemap') . '</a></strong>'); ?></span>
109
- </div>
110
- </li>
111
- <li>
112
- <?php
113
- $auto_option = false;
114
- if (SQ_Tools::$options['sq_auto_feed'] == 1) $auto_option = true;
115
- ?>
116
- <div class="sq_option_content sq_option_content_small">
117
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
118
- <input id="sq_auto_feed1" type="radio" class="sq_switch-input" name="sq_auto_feed" value="1" <?php echo($auto_option ? "checked" : '') ?> />
119
- <label for="sq_auto_feed1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
120
- <input id="sq_auto_feed0" type="radio" class="sq_switch-input" name="sq_auto_feed" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
121
- <label for="sq_auto_feed0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
122
- <span class="sq_switch-selection"></span>
123
- </div>
124
- <span><?php echo __('adds <strong>Feed style</strong> to your blog feed (eg. /feed)', _SQ_PLUGIN_NAME_) ?></span>
125
- </div>
126
- </li>
127
- <li>
128
- <?php
129
- $auto_option = false;
130
- if (SQ_Tools::$options['sq_auto_favicon'] == 1) $auto_option = true;
131
- ?>
132
- <div class="sq_option_content sq_option_content_small">
133
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
134
- <input id="sq_auto_favicon1" type="radio" class="sq_switch-input" name="sq_auto_favicon" value="1" <?php echo($auto_option ? "checked" : '') ?> />
135
- <label for="sq_auto_favicon1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
136
- <input id="sq_auto_favicon0" type="radio" class="sq_switch-input" name="sq_auto_favicon" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
137
- <label for="sq_auto_favicon0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
138
- <span class="sq_switch-selection"></span>
139
- </div>
140
- <span><?php echo sprintf(__('adds the <strong>%sfavicon.ico%s</strong> and the <strong>%sicons for pads and phones%s</strong>', _SQ_PLUGIN_NAME_), '<a href="https://en.wikipedia.org/wiki/Favicon" target="_blank">', '</a>', '<a href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html" target="_blank">', '</a>'); ?></span>
141
- </div>
142
- </li>
143
- <li>
144
- <?php
145
- $auto_option = false;
146
- if (SQ_Tools::$options['sq_auto_jsonld'] == 1) $auto_option = true;
147
- ?>
148
- <div class="sq_option_content sq_option_content_small">
149
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
150
- <input id="sq_auto_jsonld1" type="radio" class="sq_switch-input" name="sq_auto_jsonld" value="1" <?php echo($auto_option ? "checked" : '') ?> />
151
- <label for="sq_auto_jsonld1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
152
- <input id="sq_auto_jsonld0" type="radio" class="sq_switch-input" name="sq_auto_jsonld" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
153
- <label for="sq_auto_jsonld0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
154
- <span class="sq_switch-selection"></span>
155
- </div>
156
- <span><?php echo sprintf(__('adds the <strong>%sJson-LD%s</strong> metas for Semantic SEO', _SQ_PLUGIN_NAME_), '<a href="https://en.wikipedia.org/wiki/JSON-LD" target="_blank">', '</a>'); ?></span>
157
- </div>
158
- </li>
159
- <li>
160
- <?php
161
- $auto_option = false;
162
- if (SQ_Tools::$options['sq_auto_amp'] == 1) $auto_option = true;
163
- ?>
164
- <div class="sq_option_content sq_option_content_small">
165
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
166
- <input id="sq_auto_amp1" type="radio" class="sq_switch-input" name="sq_auto_amp" value="1" <?php echo($auto_option ? "checked" : '') ?> />
167
- <label for="sq_auto_amp1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
168
- <input id="sq_auto_amp0" type="radio" class="sq_switch-input" name="sq_auto_amp" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
169
- <label for="sq_auto_amp0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
170
- <span class="sq_switch-selection"></span>
171
- </div>
172
- <span><?php echo sprintf(__('loads <strong>%sGoogle Analytics AMP%s</strong> (Note: Only for AMP Themes!)', _SQ_PLUGIN_NAME_), '<a href="https://developers.google.com/analytics/devguides/collection/amp-analytics/" target="_blank">', '</a>'); ?></span>
173
- </div>
174
- </li>
175
- <p class="sq_option_info" style="padding-left:10px; color: darkgrey;"> <?php _e('Note! By switching the <strong>Json-LD</strong>, <strong>XML Sitemap</strong> and <strong>Favicon</strong> on, you open new options below', _SQ_PLUGIN_NAME_); ?></p>
176
- </ul>
177
- <div style="text-align: center;">
178
- <div class="sq_checkissues"><?php _e('Check for SEO issues in your site', _SQ_PLUGIN_NAME_); ?></div>
179
- </div>
180
- </div>
181
- </fieldset>
182
- <fieldset id="sq_title_description_keywords" <?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'class="deactivated"' : ''); ?> <?php echo((SQ_Tools::$options['sq_fp_title'] == '' || SQ_Tools::$options['sq_auto_seo'] == 1) ? '' : 'class="sq_custom_title"'); ?>>
183
- <legend>
184
- <span class="sq_legend_title"><?php _e('Page Optimization', _SQ_PLUGIN_NAME_); ?></span>
185
- <span><?php echo sprintf(__('%sThe best SEO approach to Meta information%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/the-best-seo-approach-to-meta-information" target="_blank">', '</a>'); ?></span>
186
- <span><?php _e('Optimize the <strong>Titles</strong>', _SQ_PLUGIN_NAME_); ?></span>
187
- <?php
188
- $auto_option = false;
189
- if (SQ_Tools::$options['sq_auto_title'] == 1) $auto_option = true;
190
- ?>
191
- <div class="sq_option_content sq_option_content">
192
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
193
- <input id="sq_auto_title1" type="radio" class="sq_switch-input" name="sq_auto_title" value="1" <?php echo($auto_option ? "checked" : '') ?> />
194
- <label for="sq_auto_title1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
195
- <input id="sq_auto_title0" type="radio" class="sq_switch-input" name="sq_auto_title" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
196
- <label for="sq_auto_title0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
197
- <span class="sq_switch-selection"></span>
198
- </div>
199
- </div>
200
-
201
- <span><?php _e('Optimize <strong>Descriptions</strong> and <strong>Keywords</strong>', _SQ_PLUGIN_NAME_); ?></span>
202
-
203
- <?php
204
- $auto_option = false;
205
- if (SQ_Tools::$options['sq_auto_description'] == 1) $auto_option = true;
206
- ?>
207
- <div class="sq_option_content sq_option_content">
208
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
209
- <input id="sq_auto_description1" type="radio" class="sq_switch-input" name="sq_auto_description" value="1" <?php echo($auto_option ? "checked" : '') ?> />
210
- <label for="sq_auto_description1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
211
- <input id="sq_auto_description0" type="radio" class="sq_switch-input" name="sq_auto_description" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
212
- <label for="sq_auto_description0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
213
- <span class="sq_switch-selection"></span>
214
- </div>
215
- </div>
216
- <span class="withborder"></span>
217
- <span class="sq_legend_title"><?php _e('SEO for all post/pages', _SQ_PLUGIN_NAME_); ?></span>
218
- <span><?php echo sprintf(__('To customize the Title and Description for all the Posts and Pages in your site use the %sSquirrly Snippet Tool%s', _SQ_PLUGIN_NAME_), '<a href="http://howto.squirrly.co/sides/squirrly-snippet-tool/" target="_blank" >', '</a>'); ?></span>
219
-
220
- <div class="sq_badge_google">
221
- <div class="sq_badge-image"></div>
222
- <div class="sq_description">
223
- <div class="sq_title">
224
- <?php _e('Squirrly Snippet G17-True Render', _SQ_PLUGIN_NAME_); ?>
225
- </div>
226
- <div class="sq_link">
227
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>"> (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>) </a>
228
- </div>
229
- </div>
230
- </div>
231
-
232
- </legend>
233
-
234
- <div>
235
- <?php
236
- $auto_option = false;
237
- if (SQ_Tools::$options['sq_fp_title'] == '') $auto_option = true;
238
-
239
- if ($pageId = get_option('page_on_front')) {
240
- if (SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'title') <> '') {
241
- SQ_Tools::$options['sq_fp_title'] = SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'title');
242
- SQ_Tools::$options['sq_fp_description'] = SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'description');
243
- SQ_Tools::$options['sq_fp_ogimage'] = SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'ogimage');
244
-
245
- if (!SQ_Tools::$options['sq_fp_keywords'] = SQ_ObjController::getModel('SQ_Frontend')->getAdvancedMeta($pageId, 'keyword')) {
246
- $json = SQ_ObjController::getModel('SQ_Post')->getKeyword($pageId);
247
- if (isset($json) && isset($json->keyword) && $json->keyword <> '') {
248
- SQ_Tools::$options['sq_fp_keywords'] = $json->keyword;
249
- }
250
- }
251
- }
252
- }
253
- ?>
254
- <ul id="sq_settings_sq_use" class="sq_settings_info">
255
- <span><?php _e('First Page Optimization:', _SQ_PLUGIN_NAME_); ?></span>
256
- <li>
257
- <input id="sq_customize" type="hidden" name="sq_auto_seo" value="0">
258
- <div id="sq_customize_settings">
259
- <p class="withborder">
260
- <span style="width: 65px;display: inline-block; vertical-align: top;"><?php _e('Title:', _SQ_PLUGIN_NAME_); ?></span><input type="text" name="sq_fp_title" value="<?php echo((SQ_Tools::$options['sq_fp_title'] <> '') ? SQ_Tools::$options['sq_fp_title'] : '') ?>" size="75" /><span id="sq_title_info" />
261
- <span id="sq_fp_title_length"></span><span class="sq_settings_info"><?php _e('Tips: Length 10-75 chars', _SQ_PLUGIN_NAME_); ?></span>
262
- </p>
263
- <p class="withborder">
264
- <span style="width: 65px;display: inline-block; vertical-align: top;"><?php _e('Description:', _SQ_PLUGIN_NAME_); ?></span><textarea name="sq_fp_description" cols="70" rows="3"><?php echo((SQ_Tools::$options['sq_fp_description'] <> '') ? SQ_Tools::$options['sq_fp_description'] : '') ?></textarea><span id="sq_description_info" />
265
- <span id="sq_fp_description_length"></span><span class="sq_settings_info"><?php _e('Tips: Length 70-165 chars', _SQ_PLUGIN_NAME_); ?></span>
266
- </p>
267
- <p class="withborder">
268
- <span style="width: 65px;display: inline-block; vertical-align: top;"><?php _e('Keywords:', _SQ_PLUGIN_NAME_); ?></span><input type="text" name="sq_fp_keywords" value="<?php echo((SQ_Tools::$options['sq_fp_keywords'] <> '') ? SQ_Tools::$options['sq_fp_keywords'] : '') ?>" size="70" />
269
- <span id="sq_fp_keywords_length"></span><span class="sq_settings_info"><?php _e('Tips: 2-4 keywords', _SQ_PLUGIN_NAME_); ?></span>
270
- </p>
271
- <p class="withborder sq_select_ogimage" <?php echo((SQ_Tools::$options['sq_auto_facebook'] == 1) ? '' : 'style="display:none"') ?>>
272
- <span style="width: 65px;display: inline-block; vertical-align: top;"><?php _e('OG Image:', _SQ_PLUGIN_NAME_); ?></span>
273
- <strong><input type="text" name="sq_fp_ogimage" value="<?php echo((SQ_Tools::$options['sq_fp_ogimage'] <> '') ? SQ_Tools::$options['sq_fp_ogimage'] : '') ?>" size="60" style="display:none;" /><input id="sq_fp_imageselect" type="button" class="sq_button" value="<?php echo __('Select Open Graph Image', _SQ_PLUGIN_NAME_) ?>" /></strong>
274
- </p>
275
- </div>
276
- </li>
277
- <li>
278
- <span class="sq_option_info"><?php _e('First Page Preview (Title, Description, Keywords)', _SQ_PLUGIN_NAME_); ?></span>
279
- <div id="sq_snippet">
280
- <div id="sq_snippet_name"><?php _e('Squirrly Snippet', _SQ_PLUGIN_NAME_) ?></div>
281
-
282
- <ul id="sq_snippet_ul">
283
- <div class="sq_select_ogimage_preview" <?php echo((SQ_Tools::$options['sq_auto_facebook'] == 1) ? '' : 'style="display:none"') ?>>
284
- <div class="sq_fp_ogimage_close" <?php echo((SQ_Tools::$options['sq_fp_ogimage'] <> '') ? '' : 'style="display:none;"') ?>>x</div>
285
- <div class="sq_fp_ogimage"><?php echo((SQ_Tools::$options['sq_fp_ogimage'] <> '') ? '<img src="' . SQ_Tools::$options['sq_fp_ogimage'] . '" />' : '') ?></div>
286
- </div>
287
- <li id="sq_snippet_title"></li>
288
- <li id="sq_snippet_url"></li>
289
- <li id="sq_snippet_description"></li>
290
- </ul>
291
-
292
- <div id="sq_snippet_disclaimer"><?php _e('If you don\'t see any changes in custom optimization, check if another SEO plugin affects Squirrly SEO', _SQ_PLUGIN_NAME_) ?></div>
293
- </div>
294
- </li>
295
- <li>
296
- <span class="sq_option_info"><?php echo sprintf(__('Use the %s<strong>Squirrly Snippet Tool</strong>%s while edit a Post/Page to customize the Title and Description for all the Posts and Pages', _SQ_PLUGIN_NAME_), '<a href="http://howto.squirrly.co/sides/squirrly-snippet-tool/" target="_blank" >', '</a>'); ?></span>
297
-
298
- </li>
299
- <li class="withborder"></li>
300
- </ul>
301
- </div>
302
- </fieldset>
303
- <fieldset id="sq_social_media" <?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'class="deactivated"' : ''); ?>>
304
- <legend>
305
- <span class="sq_legend_title"><?php _e('Social Media Options', _SQ_PLUGIN_NAME_); ?></span>
306
- <p>
307
- <span><?php _e('Select the language you\'re using on Social Media', _SQ_PLUGIN_NAME_); ?></span>
308
- </p>
309
- <div class="abh_select withborder">
310
- <select id="sq_og_locale" name="sq_og_locale">
311
- <option value="en_US">English (US)</option>
312
- <option value="af_ZA">Afrikaans</option>
313
- <option value="ak_GH">Akan</option>
314
- <option value="am_ET">Amharic</option>
315
- <option value="ar_AR">Arabic</option>
316
- <option value="as_IN">Assamese</option>
317
- <option value="ay_BO">Aymara</option>
318
- <option value="az_AZ">Azerbaijani</option>
319
- <option value="be_BY">Belarusian</option>
320
- <option value="bg_BG">Bulgarian</option>
321
- <option value="bn_IN">Bengali</option>
322
- <option value="br_FR">Breton</option>
323
- <option value="bs_BA">Bosnian</option>
324
- <option value="ca_ES">Catalan</option>
325
- <option value="cb_IQ">Sorani Kurdish</option>
326
- <option value="ck_US">Cherokee</option>
327
- <option value="co_FR">Corsican</option>
328
- <option value="cs_CZ">Czech</option>
329
- <option value="cx_PH">Cebuano</option>
330
- <option value="cy_GB">Welsh</option>
331
- <option value="da_DK">Danish</option>
332
- <option value="de_DE">German</option>
333
- <option value="el_GR">Greek</option>
334
- <option value="en_GB">English (UK)</option>
335
- <option value="en_IN">English (India)</option>
336
- <option value="en_PI">English (Pirate)</option>
337
- <option value="en_UD">English (Upside Down)</option>
338
- <option value="eo_EO">Esperanto</option>
339
- <option value="es_CL">Spanish (Chile)</option>
340
- <option value="es_CO">Spanish (Colombia)</option>
341
- <option value="es_ES">Spanish (Spain)</option>
342
- <option value="es_LA">Spanish</option>
343
- <option value="es_MX">Spanish (Mexico)</option>
344
- <option value="es_VE">Spanish (Venezuela)</option>
345
- <option value="et_EE">Estonian</option>
346
- <option value="eu_ES">Basque</option>
347
- <option value="fa_IR">Persian</option>
348
- <option value="fb_LT">Leet Speak</option>
349
- <option value="ff_NG">Fulah</option>
350
- <option value="fi_FI">Finnish</option>
351
- <option value="fo_FO">Faroese</option>
352
- <option value="fr_CA">French (Canada)</option>
353
- <option value="fr_FR">French (France)</option>
354
- <option value="fy_NL">Frisian</option>
355
- <option value="ga_IE">Irish</option>
356
- <option value="gl_ES">Galician</option>
357
- <option value="gn_PY">Guarani</option>
358
- <option value="gu_IN">Gujarati</option>
359
- <option value="gx_GR">Classical Greek</option>
360
- <option value="ha_NG">Hausa</option>
361
- <option value="he_IL">Hebrew</option>
362
- <option value="hi_IN">Hindi</option>
363
- <option value="hr_HR">Croatian</option>
364
- <option value="hu_HU">Hungarian</option>
365
- <option value="hy_AM">Armenian</option>
366
- <option value="id_ID">Indonesian</option>
367
- <option value="ig_NG">Igbo</option>
368
- <option value="is_IS">Icelandic</option>
369
- <option value="it_IT">Italian</option>
370
- <option value="ja_JP">Japanese</option>
371
- <option value="ja_KS">Japanese (Kansai)</option>
372
- <option value="jv_ID">Javanese</option>
373
- <option value="ka_GE">Georgian</option>
374
- <option value="kk_KZ">Kazakh</option>
375
- <option value="km_KH">Khmer</option>
376
- <option value="kn_IN">Kannada</option>
377
- <option value="ko_KR">Korean</option>
378
- <option value="ku_TR">Kurdish (Kurmanji)</option>
379
- <option value="la_VA">Latin</option>
380
- <option value="lg_UG">Ganda</option>
381
- <option value="li_NL">Limburgish</option>
382
- <option value="ln_CD">Lingala</option>
383
- <option value="lo_LA">Lao</option>
384
- <option value="lt_LT">Lithuanian</option>
385
- <option value="lv_LV">Latvian</option>
386
- <option value="mg_MG">Malagasy</option>
387
- <option value="mk_MK">Macedonian</option>
388
- <option value="ml_IN">Malayalam</option>
389
- <option value="mn_MN">Mongolian</option>
390
- <option value="mr_IN">Marathi</option>
391
- <option value="ms_MY">Malay</option>
392
- <option value="mt_MT">Maltese</option>
393
- <option value="my_MM">Burmese</option>
394
- <option value="nb_NO">Norwegian (bokmal)</option>
395
- <option value="nd_ZW">Ndebele</option>
396
- <option value="ne_NP">Nepali</option>
397
- <option value="nl_BE">Dutch (België)</option>
398
- <option value="nl_NL">Dutch</option>
399
- <option value="nn_NO">Norwegian (nynorsk)</option>
400
- <option value="ny_MW">Chewa</option>
401
- <option value="or_IN">Oriya</option>
402
- <option value="pa_IN">Punjabi</option>
403
- <option value="pl_PL">Polish</option>
404
- <option value="ps_AF">Pashto</option>
405
- <option value="pt_BR">Portuguese (Brazil)</option>
406
- <option value="pt_PT">Portuguese (Portugal)</option>
407
- <option value="qu_PE">Quechua</option>
408
- <option value="rm_CH">Romansh</option>
409
- <option value="ro_RO">Romanian</option>
410
- <option value="ru_RU">Russian</option>
411
- <option value="rw_RW">Kinyarwanda</option>
412
- <option value="sa_IN">Sanskrit</option>
413
- <option value="sc_IT">Sardinian</option>
414
- <option value="se_NO">Northern Sámi</option>
415
- <option value="si_LK">Sinhala</option>
416
- <option value="sk_SK">Slovak</option>
417
- <option value="sl_SI">Slovenian</option>
418
- <option value="sn_ZW">Shona</option>
419
- <option value="so_SO">Somali</option>
420
- <option value="sq_AL">Albanian</option>
421
- <option value="sr_RS">Serbian</option>
422
- <option value="sv_SE">Swedish</option>
423
- <option value="sw_KE">Swahili</option>
424
- <option value="sy_SY">Syriac</option>
425
- <option value="sz_PL">Silesian</option>
426
- <option value="ta_IN">Tamil</option>
427
- <option value="te_IN">Telugu</option>
428
- <option value="tg_TJ">Tajik</option>
429
- <option value="th_TH">Thai</option>
430
- <option value="tk_TM">Turkmen</option>
431
- <option value="tl_PH">Filipino</option>
432
- <option value="tl_ST">Klingon</option>
433
- <option value="tr_TR">Turkish</option>
434
- <option value="tt_RU">Tatar</option>
435
- <option value="tz_MA">Tamazight</option>
436
- <option value="uk_UA">Ukrainian</option>
437
- <option value="ur_PK">Urdu</option>
438
- <option value="uz_UZ">Uzbek</option>
439
- <option value="vi_VN">Vietnamese</option>
440
- <option value="wo_SN">Wolof</option>
441
- <option value="xh_ZA">Xhosa</option>
442
- <option value="yi_DE">Yiddish</option>
443
- <option value="yo_NG">Yoruba</option>
444
- <option value="zh_CN">Simplified Chinese (China)</option>
445
- <option value="zh_HK">Traditional Chinese (Hong Kong)</option>
446
- <option value="zh_TW">Traditional Chinese (Taiwan)</option>
447
- <option value="zu_ZA">Zulu</option>
448
- <option value="zz_TR">Zazaki</option>
449
- </select>
450
-
451
- </div>
452
- <br />
453
- <span><?php echo sprintf(__('%sHow to pop out in Social Media with your links%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/how-to-pop-out-in-social-media-with-your-links." target="_blank">', '</a>'); ?></span>
454
- <span><?php echo sprintf(__('%sGet busy with Facebook’s new Search Engine functions%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/get-busy-with-facebooks-new-search-engine-functions" target="_blank">', '</a>'); ?></span>
455
- <span><?php echo sprintf(__('%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/inbound_marketing_twitter_cards-pagblog-article_id62232.html" target="_blank">', '</a>'); ?></span>
456
-
457
- <div class="sq_badge_google">
458
- <div class="sq_badge-image"></div>
459
- <div class="sq_description">
460
- <div class="sq_title">
461
- <?php _e('Open Graph G17 - 2017 Settings', _SQ_PLUGIN_NAME_); ?>
462
- </div>
463
- <div class="sq_link">
464
- <a href="https://howto.squirrly.co/wordpress-seo/what-can-you-tell-us-about-squirrly-seo-2016-vs-squirrly-seo-2017/" target="_blank" title="<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>"> (<?php _e('see how this improved since 2016', _SQ_PLUGIN_NAME_); ?>) </a>
465
- </div>
466
- </div>
467
- </div>
468
-
469
- </legend>
470
-
471
- <div>
472
- <ul id="sq_settings_sq_use" class="sq_settings_info">
473
- <span><?php _e('Squirrly Adds the Best Codes for Open Graph and Twitter Cards', _SQ_PLUGIN_NAME_); ?></span>
474
- <li id="sq_option_facebook">
475
- <?php
476
- $auto_option = false;
477
- if (SQ_Tools::$options['sq_auto_facebook'] == 1) $auto_option = true;
478
- ?>
479
- <div class="sq_option_img"></div>
480
- <div class="sq_option_content sq_option_content_small">
481
-
482
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
483
- <input id="sq_auto_facebook1" type="radio" class="sq_switch-input" name="sq_auto_facebook" value="1" <?php echo($auto_option ? "checked" : '') ?> />
484
- <label for="sq_auto_facebook1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
485
- <input id="sq_auto_facebook0" type="radio" class="sq_switch-input" name="sq_auto_facebook" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
486
- <label for="sq_auto_facebook0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
487
- <span class="sq_switch-selection"></span>
488
- </div>
489
- <span><?php echo __('Add the <strong>Social Open Graph objects</strong> for a good looking share. ', _SQ_PLUGIN_NAME_) . ' <a href="https://developers.facebook.com/tools/debug/og/object?q=' . urlencode(get_bloginfo('wpurl')) . '" target="_blank" title="Facebook Object Validator">Check here</a>'; ?></span>
490
- </div>
491
- </li>
492
-
493
- <span class="withborder" style="min-height: 0;"></span>
494
- <li id="sq_option_twitter">
495
- <?php
496
- $auto_option = false;
497
- if (SQ_Tools::$options['sq_auto_twitter'] == 1) $auto_option = true;
498
- ?>
499
- <div class="sq_option_img"></div>
500
- <div class="sq_option_content sq_option_content_small">
501
-
502
-
503
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
504
- <input id="sq_auto_twitter1" type="radio" class="sq_switch-input" name="sq_auto_twitter" value="1" <?php echo($auto_option ? "checked" : '') ?> />
505
- <label for="sq_auto_twitter1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
506
- <input id="sq_auto_twitter0" type="radio" class="sq_switch-input" name="sq_auto_twitter" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
507
- <label for="sq_auto_twitter0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
508
- <span class="sq_switch-selection"></span>
509
- </div>
510
- <span><?php echo __('Add the <strong>Twitter card</strong> in your tweets. ', _SQ_PLUGIN_NAME_) . ' <a href="https://cards-dev.twitter.com/validator" target="_blank" title="Twitter Card Validator">Check here</a> to validate your site'; ?></span>
511
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
512
- <input id="sq_auto_twittersize1" type="radio" class="sq_switch-input" name="sq_auto_twittersize" value="summary_large_image" <?php echo((SQ_Tools::$options['sq_auto_twittersize'] <> 'summary') ? "checked" : '') ?> />
513
- <label for="sq_auto_twittersize1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
514
- <input id="sq_auto_twittersize0" type="radio" class="sq_switch-input" name="sq_auto_twittersize" value="summary" <?php echo((SQ_Tools::$options['sq_auto_twittersize'] == 'summary') ? "checked" : '') ?> />
515
- <label for="sq_auto_twittersize0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
516
- <span class="sq_switch-selection"></span>
517
- </div>
518
- <span><?php echo sprintf(__('Use <strong>Twitter %ssummary_large_image%s</strong> for your tweeter card. ', _SQ_PLUGIN_NAME_), '<a href="https://dev.twitter.com/cards/types/summary-large-image" target="_blank" title="Twitter Large Summary">', '</a> ') . ''; ?></span>
519
- <span style="color: #f7681a; margin-top: 9px; text-align: center; <?php echo((SQ_Tools::$options['sq_twitter_account'] <> '') ? 'display:none' : '') ?>"><?php echo __('You need to add your <strong>Twitter account</strong> below', _SQ_PLUGIN_NAME_); ?></span>
520
-
521
- </div>
522
- </li>
523
- <span class="withborder" style="min-height: 15px;"></span>
524
-
525
- </ul>
526
-
527
- </div>
528
- </fieldset>
529
- <fieldset id="sq_sitemap" <?php echo((SQ_Tools::$options['sq_use'] == 0 || SQ_Tools::$options['sq_auto_sitemap'] == 0) ? 'class="deactivated"' : ''); ?>>
530
- <legend>
531
- <span class="sq_legend_title"><?php _e('XML Sitemap for Google', _SQ_PLUGIN_NAME_); ?></span>
532
- <span><?php echo __('Squirrly Sitemap is the fastest way to tell Google about your site links. <strong>Supports Multisites, Google News, Images, Videos, Custom Post Types, Custom Taxonomies and Ecommerce products</strong>', _SQ_PLUGIN_NAME_) ?></span>
533
- <span><?php echo sprintf(__('%sHow to submit your sitemap.xml in Google Webmaster Tool%s', _SQ_PLUGIN_NAME_), '<a href="http://howto.squirrly.co/wordpress-seo/how-to-submit-your-sitemap-xml-in-google-sitemap/" target="_blank">', '</a>'); ?></span>
534
- <span><?php echo sprintf(__('%s10 Vital To Dos to Feed Your SEO Content Machine After You Post Articles%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/10_vital_to_dos_to_feed_your_seo_content_machine_after_you_post_articles-pagblog-article_id62194-html" target="_blank">', '</a>'); ?></span>
535
- <span><?php echo sprintf(__('For Google News Sitemap, ensure that your site is included in %sGoogle News%s', _SQ_PLUGIN_NAME_), '<a href="https://partnerdash.google.com/partnerdash/d/news" target="_blank">', '</a>'); ?></span>
536
- </legend>
537
-
538
- <div>
539
- <?php
540
- $auto_option = false;
541
- if (SQ_Tools::$options['sq_sitemap_ping'] == 1) $auto_option = true;
542
- ?>
543
- <ul id="sq_sitemap_option" class="sq_settings_info">
544
- <span><?php _e('XML Sitemap Options', _SQ_PLUGIN_NAME_); ?></span>
545
- <div class="sq_option_content sq_option_content_small">
546
- <div class="sq_switch sq_seo_switch_condition" style="<?php echo((SQ_Tools::$options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
547
- <input id="sq_sitemap_ping1" type="radio" class="sq_switch-input" name="sq_sitemap_ping" value="1" <?php echo($auto_option ? "checked" : '') ?> />
548
- <label for="sq_sitemap_ping1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
549
- <input id="sq_sitemap_ping0" type="radio" class="sq_switch-input" name="sq_sitemap_ping" value="0" <?php echo(!$auto_option ? "checked" : '') ?> />
550
- <label for="sq_sitemap_ping0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
551
- <span class="sq_switch-selection"></span>
552
- </div>
553
- <span><?php echo __('Ping your sitemap to Google and Bing when a new post is published', _SQ_PLUGIN_NAME_); ?></span>
554
- </div>
555
- <li>
556
- <p><?php _e('Build Sitemaps for', _SQ_PLUGIN_NAME_); ?>:</p>
557
- <ul id="sq_sitemap_buid">
558
- <li class="sq_selectall"><input type="checkbox" id="sq_selectall" />Select All</li>
559
- <li>
560
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-news" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-news'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Google News', _SQ_PLUGIN_NAME_); ?>
561
- <a href="https://partnerdash.google.com/partnerdash/d/news" target="_blank">Read first!</a>
562
- </li>
563
- <li>
564
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-category" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-category'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Categories', _SQ_PLUGIN_NAME_); ?>
565
- </li>
566
- <?php if (SQ_ObjController::getModel('SQ_BlockSettingsSeo')->isEcommerce()) { //check for ecommerce product ?>
567
- <li>
568
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-product" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-product'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Products', _SQ_PLUGIN_NAME_); ?>
569
- </li><?php } ?>
570
- <li>
571
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-post" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-post'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Posts', _SQ_PLUGIN_NAME_); ?>
572
- </li>
573
- <li>
574
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-post_tag" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-post_tag'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Tags', _SQ_PLUGIN_NAME_); ?>
575
- </li>
576
- <li>
577
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-page" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-page'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Pages', _SQ_PLUGIN_NAME_); ?>
578
- </li>
579
- <li>
580
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-archive" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-archive'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Archive', _SQ_PLUGIN_NAME_); ?>
581
- </li>
582
- <li>
583
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-custom-tax" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-custom-tax'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Custom Taxonomies', _SQ_PLUGIN_NAME_); ?>
584
- </li>
585
- <li>
586
- <input type="checkbox" class="sq_sitemap" name="sq_sitemap[]" value="sitemap-custom-post" <?php echo((SQ_Tools::$options['sq_sitemap']['sitemap-custom-post'][1] == 1) ? 'checked="checked"' : ''); ?>><?php _e('Custom Posts', _SQ_PLUGIN_NAME_); ?>
587
- </li>
588
- </ul>
589
- <span style="color: red; margin: 10px; line-height: 20px; display: block;"><?php echo sprintf(__('Select only the Post Types that have links in them. Your sitemap will be %s', _SQ_PLUGIN_NAME_), '<a href="' . SQ_ObjController::getController('SQ_Sitemaps')->getXmlUrl('sitemap') . '" target="_blank">' . SQ_ObjController::getController('SQ_Sitemaps')->getXmlUrl('sitemap') . '</a></strong>'); ?></span>
590
-
591
- </li>
592
- <li>
593
- <p><?php _e('Include in Sitemaps', _SQ_PLUGIN_NAME_); ?>:</p>
594
- <ul id="sq_sitemap_include">
595
- <li>
596
- <input type="checkbox" class="sq_sitemap_show" name="sq_sitemap_show[]" value="images" <?php echo((SQ_Tools::$options['sq_sitemap_show']['images'] == 1) ? 'checked="checked"' : ''); ?>><?php _e('<strong>Images</strong> from posts/pages', _SQ_PLUGIN_NAME_); ?>
597
- </li>
598
- <li>
599
- <input type="checkbox" class="sq_sitemap_show" name="sq_sitemap_show[]" value="videos" <?php echo((SQ_Tools::$options['sq_sitemap_show']['videos'] == 1) ? 'checked="checked"' : ''); ?>><?php _e('<strong>Videos</strong> (embeded and local media)', _SQ_PLUGIN_NAME_); ?>
600
- </li>
601
- </ul>
602
- </li>
603
- <li>
604
- <p><?php _e('How often do you update your site?', _SQ_PLUGIN_NAME_); ?></p>
605
- <select name="sq_sitemap_frequency">
606
- <option value="daily" <?php echo((SQ_Tools::$options['sq_sitemap_frequency'] == 'daily') ? 'selected="selected"' : ''); ?>><?php _e('every day', _SQ_PLUGIN_NAME_); ?></option>
607
- <option value="weekly" <?php echo((SQ_Tools::$options['sq_sitemap_frequency'] == 'weekly') ? 'selected="selected"' : ''); ?>><?php _e('1-3 times per week', _SQ_PLUGIN_NAME_); ?></option>
608
- <option value="monthly" <?php echo((SQ_Tools::$options['sq_sitemap_frequency'] == 'monthly') ? 'selected="selected"' : ''); ?>><?php _e('1-3 times per month', _SQ_PLUGIN_NAME_); ?></option>
609
- <option value="yearly" <?php echo((SQ_Tools::$options['sq_sitemap_frequency'] == 'yearly') ? 'selected="selected"' : ''); ?>><?php _e('1-3 times per year', _SQ_PLUGIN_NAME_); ?></option>
610
- </select>
611
- </li>
612
- </ul>
613
- </div>
614
- </fieldset>
615
- <a name="sq_favicon_anchor"></a>
616
- <fieldset id="sq_favicon" <?php echo((SQ_Tools::$options['sq_use'] == 0 || SQ_Tools::$options['sq_auto_favicon'] == 0) ? 'class="deactivated"' : ''); ?>>
617
- <legend>
618
- <span class="sq_legend_title"><?php _e('Change the Website Icon', _SQ_PLUGIN_NAME_); ?></span>
619
- <span><?php _e('Now, even tablet & smartphone browsers make use of your icons. This makes having a good favicon even more important.', _SQ_PLUGIN_NAME_); ?> </span>
620
- <span><?php echo sprintf(__('You can use %shttp://convertico.com/%s to convert your photo to icon and upload it here after that.', _SQ_PLUGIN_NAME_), '<a href="http://convertico.com/" target="_blank">', '</a>'); ?></span>
621
-
622
- </legend>
623
- <div>
624
- <?php echo((defined('SQ_MESSAGE_FAVICON')) ? '<span class="sq_message sq_error" style="display: block; padding: 11px 0;">' . SQ_MESSAGE_FAVICON . '</span>' : '') ?>
625
- <p>
626
- <?php _e('Upload file:', _SQ_PLUGIN_NAME_); ?><br /><br />
627
- <?php
628
- if (SQ_Tools::$options['favicon'] <> '' && file_exists(_SQ_CACHE_DIR_ . SQ_Tools::$options['favicon'])) {
629
- if (!get_option('permalink_structure')) {
630
- $favicon = get_bloginfo('wpurl') . '/index.php?sq_get=favicon';
631
- } else {
632
- $favicon = get_bloginfo('wpurl') . '/favicon.icon' . '?' . time();
633
- }
634
- ?>
635
- <img src="<?php ec