Favicon by RealFaviconGenerator - Version 1.3.21

Version Description

Download this release

Release Info

Developer phbernard
Plugin Icon 128x128 Favicon by RealFaviconGenerator
Version 1.3.21
Comparing to
See all releases

Code changes from version 1.1.0 to 1.3.21

Files changed (61) hide show
  1. README.txt +190 -7
  2. admin/assets/css/admin.css +1 -1
  3. admin/class-favicon-by-realfavicongenerator-admin.php +282 -40
  4. admin/class-favicon-by-realfavicongenerator-api-response.php +164 -79
  5. admin/views/appearance.php +317 -0
  6. admin/views/keep_active_notice.php +10 -0
  7. admin/views/settings.php +18 -217
  8. favicon-by-realfavicongenerator.php +8 -4
  9. languages/favicon-by-realfavicongenerator-cs_CZ.mo +0 -0
  10. languages/favicon-by-realfavicongenerator-cs_CZ.po +239 -0
  11. languages/favicon-by-realfavicongenerator-da_DK.mo +0 -0
  12. languages/favicon-by-realfavicongenerator-da_DK.po +244 -0
  13. languages/favicon-by-realfavicongenerator-fr_FR.mo +0 -0
  14. languages/favicon-by-realfavicongenerator-fr_FR.po +171 -48
  15. languages/favicon-by-realfavicongenerator-id_ID.mo +0 -0
  16. languages/favicon-by-realfavicongenerator-id_ID.po +200 -0
  17. languages/favicon-by-realfavicongenerator-nl_NL.mo +0 -0
  18. languages/favicon-by-realfavicongenerator-nl_NL.po +188 -0
  19. languages/favicon-by-realfavicongenerator-pl_PL.mo +0 -0
  20. languages/favicon-by-realfavicongenerator-pl_PL.po +246 -0
  21. languages/favicon-by-realfavicongenerator-pt_BR.mo +0 -0
  22. languages/favicon-by-realfavicongenerator-pt_BR.po +188 -0
  23. languages/favicon-by-realfavicongenerator-ru_RU.mo +0 -0
  24. languages/favicon-by-realfavicongenerator-ru_RU.po +242 -0
  25. languages/favicon-by-realfavicongenerator-sv_SE.mo +0 -0
  26. languages/favicon-by-realfavicongenerator-sv_SE.po +186 -124
  27. languages/favicon-by-realfavicongenerator.pot +220 -0
  28. public/class-favicon-by-realfavicongenerator-common.php +351 -17
  29. public/class-favicon-by-realfavicongenerator.php +6 -60
  30. trunk/LICENSE.txt +339 -0
  31. trunk/README.txt +295 -0
  32. trunk/admin/assets/css/admin.css +5 -0
  33. trunk/admin/class-favicon-by-realfavicongenerator-admin.php +520 -0
  34. trunk/admin/class-favicon-by-realfavicongenerator-api-response.php +307 -0
  35. trunk/admin/views/appearance.php +317 -0
  36. trunk/admin/views/keep_active_notice.php +10 -0
  37. trunk/admin/views/settings.php +36 -0
  38. trunk/favicon-by-realfavicongenerator.php +51 -0
  39. trunk/languages/favicon-by-realfavicongenerator-cs_CZ.mo +0 -0
  40. trunk/languages/favicon-by-realfavicongenerator-cs_CZ.po +239 -0
  41. trunk/languages/favicon-by-realfavicongenerator-da_DK.mo +0 -0
  42. trunk/languages/favicon-by-realfavicongenerator-da_DK.po +244 -0
  43. trunk/languages/favicon-by-realfavicongenerator-fr_FR.mo +0 -0
  44. trunk/languages/favicon-by-realfavicongenerator-fr_FR.po +245 -0
  45. trunk/languages/favicon-by-realfavicongenerator-id_ID.mo +0 -0
  46. trunk/languages/favicon-by-realfavicongenerator-id_ID.po +200 -0
  47. trunk/languages/favicon-by-realfavicongenerator-nl_NL.mo +0 -0
  48. trunk/languages/favicon-by-realfavicongenerator-nl_NL.po +188 -0
  49. trunk/languages/favicon-by-realfavicongenerator-pl_PL.mo +0 -0
  50. trunk/languages/favicon-by-realfavicongenerator-pl_PL.po +246 -0
  51. trunk/languages/favicon-by-realfavicongenerator-pt_BR.mo +0 -0
  52. trunk/languages/favicon-by-realfavicongenerator-pt_BR.po +188 -0
  53. trunk/languages/favicon-by-realfavicongenerator-ru_RU.mo +0 -0
  54. trunk/languages/favicon-by-realfavicongenerator-ru_RU.po +242 -0
  55. trunk/languages/favicon-by-realfavicongenerator-sv_SE.mo +0 -0
  56. trunk/languages/favicon-by-realfavicongenerator-sv_SE.po +186 -0
  57. trunk/languages/favicon-by-realfavicongenerator.pot +220 -0
  58. trunk/public/class-favicon-by-realfavicongenerator-common.php +475 -0
  59. trunk/public/class-favicon-by-realfavicongenerator.php +38 -0
  60. trunk/uninstall.php +39 -0
  61. uninstall.php +7 -3
README.txt CHANGED
@@ -1,13 +1,14 @@
1
- === Favicon by RealFaviconGenerator ===
2
  Contributors: phbernard
3
- Tags: favicon, apple-touch-icon, realfavicongenerator
 
4
  Requires at least: 3.5
5
- Tested up to: 3.9.1
6
- Stable tag: 1.1.0
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
- Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, Android devices, Windows 8 tablets...
11
 
12
  == Description ==
13
 
@@ -35,6 +36,15 @@ We take compatibility very seriously. See http://realfavicongenerator.net/favico
35
  * English (`en_EN`) by [Philippe Bernard](http://realfavicongenerator.net/)
36
  * French (`fr_FR`) by [Philippe Bernard](http://realfavicongenerator.net/)
37
  * Swedish (`sv_SE`) by [Linus Wileryd](https://twitter.com/wileryd)
 
 
 
 
 
 
 
 
 
38
 
39
  == Installation ==
40
 
@@ -62,13 +72,185 @@ We take compatibility very seriously. See http://realfavicongenerator.net/favico
62
 
63
  1. Initial favicon setup screen. You are invited to setup your favicon.
64
  2. Select a master picture from the Media Library (optional)
65
- 3. Once you hit the Generate Favicon button, you are redirected to <a href="http://realfavicongenerator.net/">RealFaviconGenerator</a>,
66
  where you can design your favicon: adding a background to your iOS picture, using a saturated version of your master picture for Windows 8...
67
  4. When you are done with the favicon editor, you are redirected to the WordPress Dashboard. The favicon is installed automatically.
68
  This screen presents you a preview of the favicon you various platforms, so you know how your blog looks like on various platforms.
 
69
 
70
  == Changelog ==
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  = 1.1.0 =
73
 
74
  - Run RealFaviconGenerator's favicon checker from the admin interface.
@@ -101,7 +283,8 @@ This screen presents you a preview of the favicon you various platforms, so you
101
 
102
  - Favicon admin settings are now in the Appearance menu.
103
  - Fix in favicon package download.
104
- - Fix in error management during favicon installation.
105
 
106
  = 1.0 =
 
107
  Initial version.
1
+ === Favicon by RealFaviconGenerator ===
2
  Contributors: phbernard
3
+ Donate link: http://realfavicongenerator.net/donate
4
+ Tags: favicon, favicon icon, favicon image, favicon code, favicon change, favicon manager, short icon, addressbar logo, apple touch icon, icon, iphone, admin, wordpress, realfavicongenerator, real favicon generator
5
  Requires at least: 3.5
6
+ Tested up to: 5.6
7
+ Stable tag: 1.3.20
8
  License: GPLv2
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Create and install your favicon for all platforms: PC/Mac, iPhone/iPad, Android devices, Windows 8 tablets...
12
 
13
  == Description ==
14
 
36
  * English (`en_EN`) by [Philippe Bernard](http://realfavicongenerator.net/)
37
  * French (`fr_FR`) by [Philippe Bernard](http://realfavicongenerator.net/)
38
  * Swedish (`sv_SE`) by [Linus Wileryd](https://twitter.com/wileryd)
39
+ * Brazilian Portuguese (`pt_BR`) by Marcelo Volgarini, [Criação de Sites](http://www.techload.com.br/criacao-de-sites-ribeirao-preto)
40
+ * Dutch (`nl_NL`) by [Axel Vanderhaeghen](https://eco13.eu)
41
+ * Danish (`da_DK`) by [Alexander Leo-Hansen](http://alexanderleohansen.dk/)
42
+ * Czech (`cs_CZ`) by an anonymous translator
43
+ * Polish (`pl_PL`) by [Maciej Gryniuk](http://maciej-gryniuk.tk/)
44
+ * Russian (`ru_RU`) by Natasha Diatko, [UStarCash](https://www.ustarcash.com)
45
+ * Indonesian (`id_ID`) by [Jordan Silaen](https://www.chameleonjohn.com/)
46
+
47
+ [](http://coderisk.com/wp/plugin/favicon-by-realfavicongenerator/RIPS-TVYsdQTMAr)
48
 
49
  == Installation ==
50
 
72
 
73
  1. Initial favicon setup screen. You are invited to setup your favicon.
74
  2. Select a master picture from the Media Library (optional)
75
+ 3. Once you hit the Generate Favicon button, you are redirected to <a href="http://realfavicongenerator.net/">RealFaviconGenerator</a>,
76
  where you can design your favicon: adding a background to your iOS picture, using a saturated version of your master picture for Windows 8...
77
  4. When you are done with the favicon editor, you are redirected to the WordPress Dashboard. The favicon is installed automatically.
78
  This screen presents you a preview of the favicon you various platforms, so you know how your blog looks like on various platforms.
79
+ 5. You can also trigger RealFaviconGenerator's favicon checker, to make sure your favicon is correctly setup.
80
 
81
  == Changelog ==
82
 
83
+ = 1.3.20 =
84
+
85
+ - Fix: media selection works again
86
+ - Plugin was tested up to WordPress 5.6
87
+
88
+ = 1.3.19 =
89
+
90
+ - Plugin was tested up to WordPress 5.5.3
91
+
92
+ = 1.3.18 =
93
+
94
+ - Remove reference to deprecated function screen_icon
95
+ - Plugin was tested up to WordPress 5.4
96
+
97
+ = 1.3.17 =
98
+
99
+ - Changes to clear security warnings from CodeRisk
100
+
101
+ = 1.3.16 =
102
+
103
+ - Plugin was tested up to WordPress 5.3.2
104
+
105
+ = 1.3.15 =
106
+
107
+ - Plugin was tested up to WordPress 5.1
108
+
109
+ = 1.3.14 =
110
+
111
+ - Plugin was tested up to WordPress 5.0-beta5
112
+
113
+ = 1.3.13 =
114
+
115
+ - Plugin was tested up to WordPress 4.9.7
116
+
117
+ = 1.3.12 =
118
+
119
+ Never published, no change
120
+
121
+ = 1.3.11 =
122
+
123
+ - id/ID translation added, thanks to Jordan Silaen
124
+ - Plugin was tested up to WordPress 4.8.1
125
+
126
+ = 1.3.10 =
127
+
128
+ - Always access RealFaviconGenerator via HTTPS
129
+ - Clarification in local path separators for Windows
130
+ - Plugin was tested up to WordPress 4.7.1
131
+ - Notice to ask administrator to not deactivate the plugin
132
+
133
+ = 1.3.9 =
134
+
135
+ - Plugin was tested up to WordPress 4.7
136
+
137
+ = 1.3.8 =
138
+
139
+ - Plugin was tested up to WordPress 4.6
140
+
141
+ = 1.3.7 =
142
+
143
+ - Fix: Plugin keywords rephrased (some were not taken into account).
144
+
145
+ = 1.3.6 =
146
+
147
+ - Fix: the icons path was sometimes wrong when the upload directory was the root directory
148
+
149
+ = 1.3.5 =
150
+
151
+ - pl/PL translation added, thanks to Maciej Gryniuk
152
+ - ru/RU translation added, thanks to Natasha Diatko
153
+
154
+ = 1.3.4 =
155
+
156
+ - Plugin was tested up to WordPress 4.5
157
+
158
+ = 1.3.3 =
159
+
160
+ - Deactivate debug logs
161
+
162
+ = 1.3.2 =
163
+
164
+ - Typos in French translations
165
+ - Warning fix for PHP7
166
+ - Tested up to WordPress 4.4.1
167
+ - cs/CZ translation added, thanks to an anonymous translator
168
+
169
+ = 1.3.1 =
170
+
171
+ - Hotfix in previous version.
172
+
173
+ = 1.3.0 =
174
+
175
+ - The plugin takes advantage of RealFaviconGenerator's non-interactive API to upgrade the favicon automatically whenever a new version is available.
176
+
177
+ = 1.2.15 =
178
+
179
+ - Donation link added.
180
+ - Plugin now works when access to file system is via FTP (not direct). See https://wordpress.org/support/topic/no-images-created
181
+
182
+ = 1.2.14 =
183
+
184
+ - Security improvement.
185
+ - Warning fix regarding NONCE_ACTION_NAME.
186
+ - Useless PHP closing tags removed.
187
+ - Error checking added to favicon package unzipping.
188
+
189
+ = 1.2.13 =
190
+
191
+ - XSS vulnerability fixed, reported by [Kacper Szurek](http://security.szurek.pl/)
192
+
193
+ = 1.2.12 =
194
+
195
+ - Performance improvements: favicon update checking is now done in the Admin section (not the Public section), locales are not loaded in the Public section anymore.
196
+ - Take advantage of the Rewrite API (when available) to make the files appear to be in the root directory. So http://example.com/favicon.ico works (eg. when requested by Yandex).
197
+ - nl/NL translation added, thanks to Axel Vanderhaeghen.
198
+
199
+ = 1.2.11 =
200
+
201
+ - When the admin's browser cannot get the picture selected from the Media Library, the UI fails gracefully.
202
+ - Favicon package unzipping is more robust.
203
+ - Notice to ask users to rank the plugin on WordPress.org.
204
+
205
+ = 1.2.10 =
206
+
207
+ - Warning fix when used with BuddyPress (bp_setup_current_user). See https://wordpress.org/support/topic/wp_debug-notice-for-bp_setup_current_user.
208
+
209
+ = 1.2.9 =
210
+
211
+ - When selected from the Media Library, the master picture is now retrieved by WP administrator's browser to prevent several issues (locally hosted blogs, blogs protected in a way or another, etc.).
212
+
213
+ = 1.2.8 =
214
+
215
+ - Plugin successfully tested against WordPress 4.1.
216
+
217
+ = 1.2.7 =
218
+
219
+ - Fix for WordPress sites hosted on Windows.
220
+
221
+ = 1.2.6 =
222
+
223
+ - The plugin is now compatible with multisite.
224
+
225
+ = 1.2.5 =
226
+
227
+ - Fix for login page: favicon code was not injected in this particular page.
228
+
229
+ = 1.2.4 =
230
+
231
+ - Remove debug messages to avoid false positives in error log.
232
+
233
+ = 1.2.3 =
234
+
235
+ - Update notifications can be dismissed once for all.
236
+ - New Settings page to enable/disable update notifications.
237
+
238
+ = 1.2.2 =
239
+
240
+ - Fix for the 403 issue with HostGator hosting service (http://wordpress.org/support/topic/403-error-when-generating-favicon).
241
+
242
+ = 1.2.1 =
243
+
244
+ - Fix in plugin removal and update checking.
245
+
246
+ = 1.2.0 =
247
+
248
+ - The plugin now warns the user when RealFaviconGenerator was updated and the favicon should be generated again.
249
+
250
+ = 1.1.1 =
251
+
252
+ - Rewrite API usage disabled. Favicon files do not appear to be in the root directory of the blog anymore.
253
+
254
  = 1.1.0 =
255
 
256
  - Run RealFaviconGenerator's favicon checker from the admin interface.
283
 
284
  - Favicon admin settings are now in the Appearance menu.
285
  - Fix in favicon package download.
286
+ - Fix in error management during favicon installation.
287
 
288
  = 1.0 =
289
+
290
  Initial version.
admin/assets/css/admin.css CHANGED
@@ -1,4 +1,4 @@
1
- /* Copyright 2014 RealFaviconGenerator */
2
 
3
  .wrap img {
4
  border: 2px solid #aaa;
1
+ /* Copyright 2014-2016 RealFaviconGenerator */
2
 
3
  .wrap img {
4
  border: 2px solid #aaa;
admin/class-favicon-by-realfavicongenerator-admin.php CHANGED
@@ -1,11 +1,18 @@
1
  <?php
2
- // Copyright 2014 RealFaviconGenerator
3
 
4
- require_once plugin_dir_path( __FILE__ ) . '../public/class-favicon-by-realfavicongenerator-common.php';
 
5
  require_once plugin_dir_path( __FILE__ ) . 'class-favicon-by-realfavicongenerator-api-response.php';
6
 
7
  class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenerator_Common {
8
 
 
 
 
 
 
 
9
  protected static $instance = null;
10
 
11
  private function __construct() {
@@ -15,19 +22,15 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
15
 
16
  // Deactivate Genesis default favicon
17
  add_filter( 'genesis_pre_load_favicon', array( $this, 'return_empty_favicon_for_genesis' ) );
18
-
19
- // Except for the headers, everything is accessible only to the admin
20
- if ( ! is_super_admin() ) {
21
- return;
22
- }
23
 
24
- add_action( 'admin_menu',
25
- array( $this, 'create_favicon_settings_menu' ) );
 
 
 
26
 
27
- add_action('wp_ajax_' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon',
28
- array( $this, 'install_new_favicon' ) );
29
- add_action('wp_ajax_nopriv_' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon',
30
- array( $this, 'install_new_favicon' ) );
31
  }
32
 
33
  /**
@@ -47,19 +50,65 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
47
  return self::$instance;
48
  }
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  public function create_favicon_settings_menu() {
51
- add_theme_page( __( 'Favicon Settings', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
52
- __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), 'manage_options', __FILE__ . 'favicon_settings_menu',
 
 
 
 
53
  array( $this, 'create_favicon_settings_page' ) );
54
  }
55
 
56
  public function create_favicon_settings_page() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  $result = NULL;
58
 
59
  // Prepare settings page
60
 
61
  // Option to allow user to not use the Rewrite API: display it only when the Rewrite API is available
62
- $can_rewrite = $this->can_access_pics_with_url_rewrite();
 
 
 
63
  $pic_path = $this->get_full_picture_path();
64
 
65
  $favicon_configured = $this->is_favicon_configured();
@@ -79,14 +128,21 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
79
  $new_favicon_params_url = NULL;
80
  }
81
 
 
 
 
82
  // External files
83
  wp_enqueue_script( 'jquery' );
84
  wp_enqueue_script( 'jquery-ui' );
 
85
  wp_enqueue_media();
86
- wp_enqueue_style( 'fbrfg_admin_style', plugins_url( 'assets/css/admin.css', __FILE__ ) );
 
 
87
 
88
  // Template time!
89
- include_once( plugin_dir_path(__FILE__) . 'views/settings.php' );
 
90
  }
91
 
92
  private function download_result_json( $url ) {
@@ -108,27 +164,39 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
108
 
109
  try {
110
  // URL is explicitely decoded to compensate the extra encoding performed while generating the settings page
111
- $url = $_REQUEST['json_result_url'];
112
 
113
  $result = $this->download_result_json( $url );
114
 
115
  $response = new Favicon_By_RealFaviconGenerator_Api_Response( $result );
116
 
117
- $zip_path = Favicon_By_RealFaviconGenerator_Common::get_tmp_dir();
118
- if ( ! file_exists( $zip_path ) ) {
119
- mkdir( $zip_path, 0777, true );
 
 
 
 
 
120
  }
121
- $response->downloadAndUnpack( $zip_path );
 
 
 
 
 
 
 
122
 
123
- $this->store_pictures( $response );
124
 
125
- $this->store_preview( $response->getPreviewPath() );
126
 
127
- Favicon_By_RealFaviconGenerator_Common::remove_directory( $zip_path );
128
 
129
- update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE, $response->getHtmlCode() );
130
-
131
- $this->set_favicon_configured( true, $response->isFilesInRoot() );
132
  ?>
133
  {
134
  "status": "success",
@@ -136,6 +204,7 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
136
  "favicon_in_root": <?php echo json_encode( $this->is_favicon_in_root() ) ?>
137
  }
138
  <?php
 
139
  }
140
  catch(Exception $e) {
141
  ?>
@@ -178,7 +247,8 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
178
  if ( ! $preview_file_name ) {
179
  $preview_file_name = $this->get_preview_file_name();
180
  }
181
- return $this->get_picture_dir() . 'preview' . DIRECTORY_SEPARATOR . $preview_file_name;
 
182
  }
183
 
184
  public function get_preview_url( $preview_file_name = NULL ) {
@@ -201,14 +271,14 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
201
  return NULL;
202
  }
203
  else {
204
- $preview_file_name = 'preview_' . md5( 'RFB stuff here ' . rand() . microtime() ) . '.png';
205
  }
206
 
207
  if ( ! file_exists( dirname( $this->get_preview_path( $preview_file_name ) ) ) ) {
208
- mkdir( dirname( $this->get_preview_path( $preview_file_name ) ) );
209
  }
210
 
211
- rename( $preview_path, $this->get_preview_path( $preview_file_name ) );
212
 
213
  $this->set_preview_file_name( $preview_file_name );
214
  }
@@ -223,24 +293,27 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
223
  unlink( $file );
224
  }
225
  }
226
- $files = glob( $rfg_response->getProductionPackagePath() . DIRECTORY_SEPARATOR . '*' );
227
  foreach( $files as $file ) {
228
  if ( is_file( $file ) ) {
229
- rename( $file, $working_dir . basename( $file ) );
230
  }
231
  }
232
 
233
- if ( $rfg_response->isFilesInRoot() ) {
 
 
 
234
  $this->rewrite_pictures_url( $working_dir );
235
  flush_rewrite_rules();
236
  }
237
  }
238
 
239
  public function rewrite_pictures_url( $pic_dir ) {
240
- foreach ( scandir($pic_dir) as $file ) {
241
  if ( ! is_dir( $pic_dir . DIRECTORY_SEPARATOR . $file ) ) {
242
- add_rewrite_rule( str_replace( '.', '\.', $file ),
243
- trim( $this->get_picture_path(), '/') . '/' . $file );
244
  }
245
  }
246
  }
@@ -274,5 +347,174 @@ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenera
274
  $path = parse_url( home_url(), PHP_URL_PATH );
275
  return ( ($path == NULL) || (strlen( $path ) == 0) );
276
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
277
  }
278
- ?>
1
  <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
 
4
+ require_once plugin_dir_path( __FILE__ ) . '..' . DIRECTORY_SEPARATOR .
5
+ 'public' . DIRECTORY_SEPARATOR . 'class-favicon-by-realfavicongenerator-common.php';
6
  require_once plugin_dir_path( __FILE__ ) . 'class-favicon-by-realfavicongenerator-api-response.php';
7
 
8
  class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenerator_Common {
9
 
10
+ const DISMISS_UPDATE_NOTIICATION = 'fbrfg_dismiss_update_notification';
11
+ const DISMISS_AUTOMATIC_UPDATE_NOTIICATION = 'fbrfg_dismiss_autmatic_update_notification';
12
+ const DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS = 'fbrfg_dismiss_all_update_notifications';
13
+ const SETTINGS_FORM = 'fbrfg_settings_form';
14
+ const NONCE_ACTION_NAME = 'favicon_generation';
15
+
16
  protected static $instance = null;
17
 
18
  private function __construct() {
22
 
23
  // Deactivate Genesis default favicon
24
  add_filter( 'genesis_pre_load_favicon', array( $this, 'return_empty_favicon_for_genesis' ) );
 
 
 
 
 
25
 
26
+ // See
27
+ // - https://wordpress.org/support/topic/wp_debug-notice-for-bp_setup_current_user
28
+ // - https://buddypress.org/support/topic/wp_debug-notice-for-bp_setup_current_user
29
+ // The idea: is_super_admin must not be called too soon.
30
+ add_action( 'init', array( $this, 'register_admin_actions' ) );
31
 
32
+ // Check for updates
33
+ add_action( Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE, array( $this, 'check_for_updates' ) );
 
 
34
  }
35
 
36
  /**
50
  return self::$instance;
51
  }
52
 
53
+ public function register_admin_actions() {
54
+ // Except for the headers, everything is accessible only to the admin
55
+ if ( ! is_super_admin() ) {
56
+ return;
57
+ }
58
+
59
+ add_action( 'admin_menu',
60
+ array( $this, 'create_favicon_settings_menu' ) );
61
+
62
+ add_action('wp_ajax_' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon',
63
+ array( $this, 'install_new_favicon' ) );
64
+ add_action('wp_ajax_nopriv_' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon',
65
+ array( $this, 'install_new_favicon' ) );
66
+
67
+ // Update notice
68
+ add_action('admin_notices', array( $this, 'display_update_notice' ) );
69
+ add_action('admin_init', array( $this, 'process_ignored_notice' ) );
70
+
71
+ // Schedule update check
72
+ if ( ! wp_next_scheduled( Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE ) ) {
73
+ wp_schedule_event( time(), 'daily', Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE );
74
+ }
75
+ }
76
+
77
  public function create_favicon_settings_menu() {
78
+ add_theme_page( __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
79
+ __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), 'manage_options', __FILE__ . 'favicon_appearance_menu',
80
+ array( $this, 'create_favicon_appearance_page' ) );
81
+
82
+ add_options_page( __( 'Favicon Settings', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
83
+ __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), 'manage_options', __FILE__ . 'favicon_settings_menu',
84
  array( $this, 'create_favicon_settings_page' ) );
85
  }
86
 
87
  public function create_favicon_settings_page() {
88
+ global $current_user;
89
+
90
+ $user_id = $current_user->ID;
91
+
92
+ // Prepare variables
93
+ $favicon_appearance_url = admin_url( 'themes.php?page=' . __FILE__ . 'favicon_appearance_menu' );
94
+ $favicon_admin_url = admin_url( 'options-general.php?page=' . __FILE__ . 'favicon_settings_menu' );
95
+ $display_update_notifications = ! $this->get_boolean_user_option(
96
+ Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE );
97
+
98
+ // Template time!
99
+ include_once( plugin_dir_path(__FILE__) . 'views' . DIRECTORY_SEPARATOR . 'settings.php' );
100
+ }
101
+
102
+ public function create_favicon_appearance_page() {
103
  $result = NULL;
104
 
105
  // Prepare settings page
106
 
107
  // Option to allow user to not use the Rewrite API: display it only when the Rewrite API is available
108
+ // Due to too many problems with the rewrite API (for example, http://wordpress.org/support/topic/do-not-work-8),
109
+ // it was deciced to turn the feature off once for all
110
+ $can_rewrite = false;
111
+
112
  $pic_path = $this->get_full_picture_path();
113
 
114
  $favicon_configured = $this->is_favicon_configured();
128
  $new_favicon_params_url = NULL;
129
  }
130
 
131
+ // Nonce
132
+ $nonce = wp_create_nonce( Favicon_By_RealFaviconGenerator_Admin::NONCE_ACTION_NAME );
133
+
134
  // External files
135
  wp_enqueue_script( 'jquery' );
136
  wp_enqueue_script( 'jquery-ui' );
137
+ wp_enqueue_script( 'jquery-effects-pulsate' );
138
  wp_enqueue_media();
139
+ wp_enqueue_style( 'fbrfg_admin_style', plugins_url(
140
+ 'assets' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'admin.css',
141
+ __FILE__ ) );
142
 
143
  // Template time!
144
+ include_once( plugin_dir_path(__FILE__) . 'views' . DIRECTORY_SEPARATOR .
145
+ 'appearance.php' );
146
  }
147
 
148
  private function download_result_json( $url ) {
164
 
165
  try {
166
  // URL is explicitely decoded to compensate the extra encoding performed while generating the settings page
167
+ $url = 'https://realfavicongenerator.net' . $_REQUEST['json_result_url'];
168
 
169
  $result = $this->download_result_json( $url );
170
 
171
  $response = new Favicon_By_RealFaviconGenerator_Api_Response( $result );
172
 
173
+ if ( ! wp_verify_nonce( $response->getCustomParameter(), Favicon_By_RealFaviconGenerator_Admin::NONCE_ACTION_NAME ) ) {
174
+ // Attack in progress?
175
+ ?>
176
+ {
177
+ "status": "error",
178
+ "message": "<?php _e( 'Nonce was not recognized. This case is supposed to happen only in case of XSS attack. If you feel like something is wrong, please <a href=\"mailto:contact@realfavicongenerator.net\">contact us</a>.', FBRFG_PLUGIN_SLUG ) ?>"
179
+ }
180
+ <?php
181
  }
182
+ else {
183
+ $zip_path = Favicon_By_RealFaviconGenerator_Common::get_tmp_dir();
184
+ if ( ! file_exists( $zip_path ) ) {
185
+ if ( mkdir( $zip_path, 0755, true ) !== true ) {
186
+ throw new InvalidArgumentException( sprintf( __( 'Cannot create directory %s to store the favicon package', FBRFG_PLUGIN_SLUG), $zip_path ) );
187
+ }
188
+ }
189
+ $response->downloadAndUnpack( $zip_path );
190
 
191
+ $this->store_pictures( $response );
192
 
193
+ $this->store_preview( $response->getPreviewPath() );
194
 
195
+ Favicon_By_RealFaviconGenerator_Common::remove_directory( $zip_path );
196
 
197
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE, $response->getHtmlCode() );
198
+
199
+ $this->set_favicon_configured( true, $response->isFilesInRoot(), $response->getVersion(), $response->getNonInteractiveAPIRequest() );
200
  ?>
201
  {
202
  "status": "success",
204
  "favicon_in_root": <?php echo json_encode( $this->is_favicon_in_root() ) ?>
205
  }
206
  <?php
207
+ }
208
  }
209
  catch(Exception $e) {
210
  ?>
247
  if ( ! $preview_file_name ) {
248
  $preview_file_name = $this->get_preview_file_name();
249
  }
250
+ return $this->get_picture_dir() . 'preview' . DIRECTORY_SEPARATOR .
251
+ $preview_file_name;
252
  }
253
 
254
  public function get_preview_url( $preview_file_name = NULL ) {
271
  return NULL;
272
  }
273
  else {
274
+ $preview_file_name = 'preview_' . hash( 'sha256', 'RFB stuff here ' . rand() . microtime() ) . '.png';
275
  }
276
 
277
  if ( ! file_exists( dirname( $this->get_preview_path( $preview_file_name ) ) ) ) {
278
+ mkdir( dirname( $this->get_preview_path( $preview_file_name ) ), 0755 );
279
  }
280
 
281
+ $this->portable_rename( $preview_path, $this->get_preview_path( $preview_file_name ) );
282
 
283
  $this->set_preview_file_name( $preview_file_name );
284
  }
293
  unlink( $file );
294
  }
295
  }
296
+ $files = glob( $rfg_response->getProductionPackagePath() . '/*' );
297
  foreach( $files as $file ) {
298
  if ( is_file( $file ) ) {
299
+ $this->portable_rename( $file, $working_dir . basename( $file ) );
300
  }
301
  }
302
 
303
+ // Even if the package was not supposed to be put in root, make the files (also) appear at the root of the site
304
+ // So /favicon.ico works, for example.
305
+ // See https://wordpress.org/support/topic/choose-between-rewrite-api-and-dedicated-directory
306
+ if ( $this->can_access_pics_with_url_rewrite() ) {
307
  $this->rewrite_pictures_url( $working_dir );
308
  flush_rewrite_rules();
309
  }
310
  }
311
 
312
  public function rewrite_pictures_url( $pic_dir ) {
313
+ foreach ( scandir( $pic_dir ) as $file ) {
314
  if ( ! is_dir( $pic_dir . DIRECTORY_SEPARATOR . $file ) ) {
315
+ add_rewrite_rule( str_replace( '.', '\.', $file ),
316
+ trim( $this->get_picture_path(), '/' ) . '/' . $file );
317
  }
318
  }
319
  }
347
  $path = parse_url( home_url(), PHP_URL_PATH );
348
  return ( ($path == NULL) || (strlen( $path ) == 0) );
349
  }
350
+
351
+ public function set_boolean_user_option( $option_name, $option_value ) {
352
+ global $current_user;
353
+ $user_id = $current_user->ID;
354
+
355
+ update_user_option( $user_id, $option_name, $option_value );
356
+ }
357
+
358
+ public function get_boolean_user_option( $option_name ) {
359
+ global $current_user;
360
+ $user_id = $current_user->ID;
361
+
362
+ return get_user_option( $option_name );
363
+ }
364
+
365
+ public function is_manual_update_notice_to_be_displayed() {
366
+ $this->log_info( 'Check if manual update notice should be displayed' );
367
+
368
+ if ( isset($_REQUEST['json_result_url'] ) ) {
369
+ $this->log_info( 'Favicon installation in progress, disable notice' );
370
+ return false;
371
+ }
372
+
373
+ // Did the user prevent all notices?
374
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE ) ) {
375
+ $this->log_info( 'User disabled all update notices' );
376
+ return false;
377
+ }
378
+
379
+ // No update
380
+ if ( $this->get_latest_manual_available_update() == NULL ) {
381
+ $this->log_info( 'There is no pending manual update' );
382
+ return false;
383
+ }
384
+
385
+ // Did the user prevent the notice for this particular version?
386
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE_FOR_VERSION . $this->get_latest_manual_available_update() ) ) {
387
+ $this->log_info( 'User disabled update notices for ' . $this->get_latest_manual_available_update() );
388
+ return false;
389
+ }
390
+
391
+ // If, for some reasons, the current version matches the "latest update",
392
+ // then the updated was already done.
393
+ $result = ( $this->get_latest_manual_available_update() != $this->get_favicon_current_version() );
394
+ $this->log_info( 'Compare current version (' . $this->get_favicon_current_version() . ') and latest update (' .
395
+ $this->get_latest_manual_available_update() . '): ' . ( $result ? 'true' : 'false' ) );
396
+
397
+ return $result;
398
+ }
399
+
400
+ public function is_automatic_update_notice_to_be_displayed() {
401
+ $this->log_info( 'Check if automatic update notice should be displayed' );
402
+
403
+ if ( isset($_REQUEST['json_result_url'] ) ) {
404
+ $this->log_info( 'Favicon installation in progress, disable notice' );
405
+ return false;
406
+ }
407
+
408
+ // Did the user prevent all notices?
409
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE ) ) {
410
+ $this->log_info( 'User disabled all update notices' );
411
+ return false;
412
+ }
413
+
414
+ $versions = $this->get_most_recent_automatic_update();
415
+ // Was there an update?
416
+ if ( $versions == NULL ) {
417
+ $this->log_info( 'There was no automatic update' );
418
+ return false;
419
+ }
420
+
421
+ // Did the user prevent the notice for this particular version?
422
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_AUTOMATIC_UPDATE_NOTICE_FOR_VERSION . $versions[0] . '_' . $versions[1] ) ) {
423
+ $this->log_info( 'User disabled update notice for update from ' . $versions[0] . ' to ' . $versions[1] );
424
+ return false;
425
+ }
426
+
427
+ $this->log_info( 'Automatic update notice should be displayed' );
428
+ return true;
429
+ }
430
+
431
+ public function display_update_notice() {
432
+ if ( $this->is_manual_update_notice_to_be_displayed() ) {
433
+ $this->log_info( 'Display manual update notice' );
434
+
435
+ $description = $this->get_updates_description( $this->get_favicon_current_version(), $this->get_latest_manual_available_update() );
436
+ ?>
437
+ <div class="update-nag">
438
+ <p>
439
+ <strong><?php _e( 'An update is available on RealFaviconGenerator:', FBRFG_PLUGIN_SLUG ) ?></strong>
440
+ </p>
441
+
442
+ <?php echo $description ?>
443
+
444
+ <p>
445
+ <?php printf( __( 'You might want to <a href="%s">generate your favicon again</a>',
446
+ FBRFG_PLUGIN_SLUG ), admin_url( 'themes.php?page=' . __FILE__ . 'favicon_appearance_menu') ) ?>
447
+ </p>
448
+
449
+ <p>
450
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_NOTIICATION . '=0' ) ?>">
451
+ <?php _e( 'Hide this notice', FBRFG_PLUGIN_SLUG) ?>
452
+ </a>
453
+ |
454
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS . '=0' ) ?>">
455
+ <?php _e( 'Do not warn me again in case of update', FBRFG_PLUGIN_SLUG) ?>
456
+ </a>
457
+ </p>
458
+ </div>
459
+ <?php
460
+ }
461
+ else if ( $this->is_automatic_update_notice_to_be_displayed() ) {
462
+ $this->log_info( 'Display automatic update notice' );
463
+
464
+ $auto_versions = $this->get_most_recent_automatic_update();
465
+ $description = $this->get_updates_description( $auto_versions[0], $auto_versions[1] );
466
+ ?>
467
+ <div class="update-nag">
468
+ <p><strong><?php _e( 'Your favicon was updated automatically:', FBRFG_PLUGIN_SLUG ) ?></strong></p>
469
+
470
+ <?php echo $description ?>
471
+
472
+ <p>
473
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_AUTOMATIC_UPDATE_NOTIICATION . '=0' ) ?>">
474
+ <?php _e( 'Hide this notice', FBRFG_PLUGIN_SLUG) ?>
475
+ </a>
476
+ |
477
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS . '=0' ) ?>">
478
+ <?php _e( 'Do not warn me again in case of update', FBRFG_PLUGIN_SLUG) ?>
479
+ </a>
480
+ </p>
481
+ </div>
482
+ <?php
483
+ }
484
+ }
485
+
486
+ public function process_ignored_notice() {
487
+ global $current_user;
488
+ $user_id = $current_user->ID;
489
+
490
+ if ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_NOTIICATION] ) &&
491
+ '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_NOTIICATION] ) {
492
+ $this->log_info( 'Disable manual update notice for ' . $this->get_latest_manual_available_update() );
493
+ $this->set_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE_FOR_VERSION . $this->get_latest_manual_available_update(), true );
494
+ }
495
+
496
+ if ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_AUTOMATIC_UPDATE_NOTIICATION] ) &&
497
+ '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_AUTOMATIC_UPDATE_NOTIICATION] ) {
498
+ $versions = $this->get_most_recent_automatic_update();
499
+ $this->log_info( 'Disable automatic update notice for ' . $versions[0] . '-' . $versions[1] );
500
+ $this->set_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_AUTOMATIC_UPDATE_NOTICE_FOR_VERSION .
501
+ $versions[0] . '_' . $versions[1], true );
502
+ }
503
+
504
+ $no_notices = NULL;
505
+ if ( ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) &&
506
+ '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) ) {
507
+ // The "no more notifications" link was clicked in the notification itself
508
+ $no_notices = true;
509
+ }
510
+ if ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::SETTINGS_FORM] ) &&
511
+ '1' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::SETTINGS_FORM] ) {
512
+ // The settings form was validated
513
+ $no_notices = ( ! isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) ||
514
+ ( '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) );
515
+ }
516
+ if ( $no_notices !== NULL ) {
517
+ $this->set_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE, $no_notices );
518
+ }
519
+ }
520
  }
 
admin/class-favicon-by-realfavicongenerator-api-response.php CHANGED
@@ -1,13 +1,16 @@
1
  <?php
2
- // Copyright 2014 RealFaviconGenerator
3
 
4
- define( 'RFG_PACKAGE_URL', 'package_url' );
5
- define( 'RFG_COMPRESSION', 'compression' );
6
- define( 'RFG_HTML_CODE', 'html_code' );
7
- define( 'RFG_FILES_IN_ROOT', 'files_in_root' );
8
- define( 'RFG_FILES_PATH', 'files_path' );
9
- define( 'RFG_PREVIEW_PICTURE_URL', 'preview_picture_url' );
10
- define( 'RFG_CUSTOM_PARAMETER', 'custom_parameter' );
 
 
 
11
 
12
  define( 'RFG_FAVICON_PRODUCTION_PACKAGE_PATH', 'favicon_production_package_path' );
13
  define( 'RFG_FAVICON_COMPRESSED_PACKAGE_PATH', 'favicon_compressed_package_path' );
@@ -15,42 +18,46 @@ define( 'RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH', 'favicon_uncompressed_package_p
15
  define( 'RFG_PREVIEW_PATH', 'preview_path' );
16
 
17
  class Favicon_By_RealFaviconGenerator_Api_Response {
18
-
19
  private $params = array();
20
-
21
- public function Favicon_By_RealFaviconGenerator_Api_Response( $json ) {
22
  if ( $json == NULL ) {
23
  throw new InvalidArgumentException( "No response from RealFaviconGenerator" );
24
  }
25
-
26
  $response = json_decode( $json, true );
27
-
28
  if ( $response == NULL ) {
29
  throw new InvalidArgumentException( "JSON could not be parsed" );
30
  }
31
-
32
  $response = $this->getParam( $response, 'favicon_generation_result' );
33
  $result = $this->getParam( $response, 'result' );
34
  $status = $this->getParam( $result, 'status' );
35
-
36
  if ( $status != 'success' ) {
37
  $msg = $this->getParam( $result, 'error_message', false );
38
  $msg = $msg != NULL ? $msg : 'An error occured';
39
  throw new InvalidArgumentException( $msg );
40
  }
41
-
42
  $favicon = $this->getParam( $response, 'favicon' );
43
  $this->params[RFG_PACKAGE_URL] = $this->getParam( $favicon, 'package_url' );
44
  $this->params[RFG_COMPRESSION] = $this->getParam( $favicon, 'compression' ) == 'true';
45
  $this->params[RFG_HTML_CODE] = $this->getParam( $favicon, 'html_code' );
46
-
 
47
  $filesLoc = $this->getParam( $response, 'files_location' );
48
  $this->params[RFG_FILES_IN_ROOT] = $this->getParam( $filesLoc, 'type' ) == 'root';
49
  $this->params[RFG_FILES_PATH] = $this->params[RFG_FILES_IN_ROOT] ? '/' : $this->getParam( $filesLoc, 'path' );
50
-
51
  $this->params[RFG_PREVIEW_PICTURE_URL] = $this->getParam( $response, 'preview_picture_url', false );
52
-
53
  $this->params[RFG_CUSTOM_PARAMETER] = $this->getParam( $response, 'custom_parameter', false );
 
 
 
54
  }
55
 
56
  /**
@@ -59,7 +66,14 @@ class Favicon_By_RealFaviconGenerator_Api_Response {
59
  public function getPackageUrl() {
60
  return $this->params[RFG_PACKAGE_URL];
61
  }
62
-
 
 
 
 
 
 
 
63
  /**
64
  * For example: <code>"&lt;link ..."</code>
65
  */
@@ -69,7 +83,7 @@ class Favicon_By_RealFaviconGenerator_Api_Response {
69
 
70
  /**
71
  * <code>true</code> if the user chose to compress the pictures, <code>false</code> otherwise.
72
- */
73
  public function isCompressed() {
74
  return $this->params[RFG_COMPRESSION];
75
  }
@@ -83,25 +97,39 @@ class Favicon_By_RealFaviconGenerator_Api_Response {
83
 
84
  /**
85
  * Indicate where the favicon files should be stored in the target web site. For example: <code>"/"</code>, <code>"/path/to/icons"</code>.
86
- */
87
  public function getFilesLocation() {
88
  return $this->params[RFG_FILES_PATH];
89
  }
90
 
91
  /**
92
  * For example: <code>"http://realfavicongenerator.net/files/1234f5d2s34f3ds2/preview.png"</code>
93
- */
94
  public function getPreviewUrl() {
95
  return $this->params[RFG_PREVIEW_PICTURE_URL];
96
  }
97
-
98
  /**
99
  * Return the customer parameter, as it was transmitted during the invocation of the API.
100
  */
101
  public function getCustomParameter() {
102
  return $this->params[RFG_CUSTOM_PARAMETER];
103
  }
104
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  private function getParam( $params, $paramName, $throwIfNotFound = true ) {
106
  if ( isset( $params[$paramName] ) ) {
107
  return $params[$paramName];
@@ -112,70 +140,112 @@ class Favicon_By_RealFaviconGenerator_Api_Response {
112
  }
113
 
114
  /**
115
- * Download and extract the files referenced by the response sent back by RealFaviconGenerator.
116
- *
117
  * Warning: as this method does HTTP accesses, calling it can take a few seconds. Better invoke it
118
  * in an Ajax call, to not slow down the user experience.
119
  */
120
  public function downloadAndUnpack( $outputDirectory = NULL ) {
 
121
  if ( $outputDirectory == NULL ) {
122
- $outputDirectory = sys_get_temp_dir();
123
  }
124
-
 
 
125
  if ( $this->getPackageUrl() != NULL ) {
126
- $packagePath = $outputDirectory . DIRECTORY_SEPARATOR . 'favicon_package.zip';
127
- $this->downloadFile( $packagePath, $this->getPackageUrl() );
128
-
129
- $zip = new ZipArchive();
130
- $r = $zip->open( $packagePath );
131
- if ($r === TRUE) {
132
- $extractedPath = $outputDirectory . DIRECTORY_SEPARATOR . 'favicon_package';
133
- if ( ! file_exists( $extractedPath ) ) {
134
- mkdir( $extractedPath );
135
- }
136
-
137
- $zip->extractTo( $extractedPath );
138
- $zip->close();
139
-
140
- if ( $this->isCompressed() ) {
141
- // As of today, when the user chooses the compress the picture,
142
- // the package is provided in two flavors, in two distinct directories.
143
- // Later, only the compressed version will be provided. Thus, the following code
144
- // handles both scenarios.
145
- if ( is_dir( $extractedPath . DIRECTORY_SEPARATOR . 'compressed' ) ) {
146
- $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath . DIRECTORY_SEPARATOR . 'compressed';
147
- } else {
148
- $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath;
149
- }
150
-
151
- if ( is_dir( $extractedPath . DIRECTORY_SEPARATOR . 'uncompressed' ) ) {
152
- $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath . DIRECTORY_SEPARATOR . 'uncompressed';
153
- } else {
154
- $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
155
- }
156
-
157
- $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH];
158
- }
159
- else {
160
- $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = NULL;
161
- $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
162
- $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH];
163
  }
164
  }
165
- else {
166
- throw new InvalidArgumentException( 'Cannot open package. Invalid Zip file?!' );
 
 
 
 
 
167
  }
168
  }
169
-
170
  if ( $this->getPreviewUrl() != NULL ) {
171
- $previewPath = $outputDirectory . DIRECTORY_SEPARATOR . 'favicon_preview.png';
172
  $this->downloadFile( $previewPath, $this->getPreviewUrl() );
173
  $this->params[RFG_PREVIEW_PATH] = $previewPath;
174
  }
175
  }
176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  /**
178
- * Directory where the compressed files are stored. Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
179
  * Can be <code>NULL</code>.
180
  */
181
  public function getCompressedPackagePath() {
@@ -183,7 +253,7 @@ class Favicon_By_RealFaviconGenerator_Api_Response {
183
  }
184
 
185
  /**
186
- * Directory where the uncompressed files are stored. Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
187
  * Can be <code>NULL</code>.
188
  */
189
  public function getUncompressedPackagePath() {
@@ -199,24 +269,39 @@ class Favicon_By_RealFaviconGenerator_Api_Response {
199
  public function getProductionPackagePath() {
200
  return $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH];
201
  }
202
-
203
  /**
204
  * Path to the preview picture.
205
  */
206
  public function getPreviewPath() {
207
  return $this->params[RFG_PREVIEW_PATH];
208
  }
209
-
210
  private function downloadFile( $localPath, $url ) {
211
  $resp = wp_remote_get( $url, array( 'filename' => $localPath, 'stream' => true ) );
212
- if ( ( $resp == NULL ) || ( $resp == false ) || ( $resp['response'] == NULL ) ||
213
  ( $resp['response']['code'] == NULL ) || ( $resp['response']['code'] != 200 ) ) {
214
- throw new InvalidArgumentException( "Cannot download file at " . $url );
 
 
215
  }
216
  if ( ( ! file_exists( $localPath ) ) || ( filesize( $localPath ) <= 0 ) ) {
217
- throw new InvalidArgumentException( "Cannot store downloaded file locally" );
218
  }
219
  }
220
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  }
222
- ?>
1
  <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
 
4
+ define( 'RFG_PACKAGE_URL', 'package_url' );
5
+ define( 'RFG_COMPRESSION', 'compression' );
6
+ define( 'RFG_HTML_CODE', 'html_code' );
7
+ define( 'RFG_FILES_URLS', 'files_url' );
8
+ define( 'RFG_FILES_IN_ROOT', 'files_in_root' );
9
+ define( 'RFG_FILES_PATH', 'files_path' );
10
+ define( 'RFG_PREVIEW_PICTURE_URL', 'preview_picture_url' );
11
+ define( 'RFG_CUSTOM_PARAMETER', 'custom_parameter' );
12
+ define( 'RFG_VERSION', 'version' );
13
+ define( 'RFG_NON_INTERACTIVE_API_REQUEST', 'non_interactive_api_request' );
14
 
15
  define( 'RFG_FAVICON_PRODUCTION_PACKAGE_PATH', 'favicon_production_package_path' );
16
  define( 'RFG_FAVICON_COMPRESSED_PACKAGE_PATH', 'favicon_compressed_package_path' );
18
  define( 'RFG_PREVIEW_PATH', 'preview_path' );
19
 
20
  class Favicon_By_RealFaviconGenerator_Api_Response {
21
+
22
  private $params = array();
23
+
24
+ public function __construct( $json ) {
25
  if ( $json == NULL ) {
26
  throw new InvalidArgumentException( "No response from RealFaviconGenerator" );
27
  }
28
+
29
  $response = json_decode( $json, true );
30
+
31
  if ( $response == NULL ) {
32
  throw new InvalidArgumentException( "JSON could not be parsed" );
33
  }
34
+
35
  $response = $this->getParam( $response, 'favicon_generation_result' );
36
  $result = $this->getParam( $response, 'result' );
37
  $status = $this->getParam( $result, 'status' );
38
+
39
  if ( $status != 'success' ) {
40
  $msg = $this->getParam( $result, 'error_message', false );
41
  $msg = $msg != NULL ? $msg : 'An error occured';
42
  throw new InvalidArgumentException( $msg );
43
  }
44
+
45
  $favicon = $this->getParam( $response, 'favicon' );
46
  $this->params[RFG_PACKAGE_URL] = $this->getParam( $favicon, 'package_url' );
47
  $this->params[RFG_COMPRESSION] = $this->getParam( $favicon, 'compression' ) == 'true';
48
  $this->params[RFG_HTML_CODE] = $this->getParam( $favicon, 'html_code' );
49
+ $this->params[RFG_FILES_URLS] = $this->getParam( $favicon, 'files_urls' );
50
+
51
  $filesLoc = $this->getParam( $response, 'files_location' );
52
  $this->params[RFG_FILES_IN_ROOT] = $this->getParam( $filesLoc, 'type' ) == 'root';
53
  $this->params[RFG_FILES_PATH] = $this->params[RFG_FILES_IN_ROOT] ? '/' : $this->getParam( $filesLoc, 'path' );
54
+
55
  $this->params[RFG_PREVIEW_PICTURE_URL] = $this->getParam( $response, 'preview_picture_url', false );
56
+
57
  $this->params[RFG_CUSTOM_PARAMETER] = $this->getParam( $response, 'custom_parameter', false );
58
+ $this->params[RFG_VERSION] = $this->getParam($response, 'version', false );
59
+
60
+ $this->params[RFG_NON_INTERACTIVE_API_REQUEST] = $this->getParam($response, 'non_interactive_request', false );
61
  }
62
 
63
  /**
66
  public function getPackageUrl() {
67
  return $this->params[RFG_PACKAGE_URL];
68
  }
69
+
70
+ /**
71
+ * For example: <code>array( "http://realfavicongenerator.net/files/1234f5d2s34f3ds2/apple-touch-icon.png", ... )</code>
72
+ */
73
+ public function getFilesURLs() {
74
+ return $this->params[RFG_FILES_URLS];
75
+ }
76
+
77
  /**
78
  * For example: <code>"&lt;link ..."</code>
79
  */
83
 
84
  /**
85
  * <code>true</code> if the user chose to compress the pictures, <code>false</code> otherwise.
86
+ */
87
  public function isCompressed() {
88
  return $this->params[RFG_COMPRESSION];
89
  }
97
 
98
  /**
99
  * Indicate where the favicon files should be stored in the target web site. For example: <code>"/"</code>, <code>"/path/to/icons"</code>.
100
+ */
101
  public function getFilesLocation() {
102
  return $this->params[RFG_FILES_PATH];
103
  }
104
 
105
  /**
106
  * For example: <code>"http://realfavicongenerator.net/files/1234f5d2s34f3ds2/preview.png"</code>
107
+ */
108
  public function getPreviewUrl() {
109
  return $this->params[RFG_PREVIEW_PICTURE_URL];
110
  }
111
+
112
  /**
113
  * Return the customer parameter, as it was transmitted during the invocation of the API.
114
  */
115
  public function getCustomParameter() {
116
  return $this->params[RFG_CUSTOM_PARAMETER];
117
  }
118
+
119
+ /**
120
+ * Return version of RealFaviconGenerator used to generate the favicon. Save this value to later check for updates.
121
+ */
122
+ public function getVersion() {
123
+ return $this->params[RFG_VERSION];
124
+ }
125
+
126
+ /**
127
+ * Return the non-interactive API request that matches the current interactive request.
128
+ */
129
+ public function getNonInteractiveAPIRequest() {
130
+ return $this->params[RFG_NON_INTERACTIVE_API_REQUEST];
131
+ }
132
+
133
  private function getParam( $params, $paramName, $throwIfNotFound = true ) {
134
  if ( isset( $params[$paramName] ) ) {
135
  return $params[$paramName];
140
  }
141
 
142
  /**
143
+ * Download and extract the files referenced by the response sent back by RealFaviconGenerator.
144
+ *
145
  * Warning: as this method does HTTP accesses, calling it can take a few seconds. Better invoke it
146
  * in an Ajax call, to not slow down the user experience.
147
  */
148
  public function downloadAndUnpack( $outputDirectory = NULL ) {
149
+ global $wp_filesystem;
150
  if ( $outputDirectory == NULL ) {
151
+ $outputDirectory = get_temp_dir();
152
  }
153
+
154
+ $outputDirectory = $this->append_directory_separator( $outputDirectory );
155
+
156
  if ( $this->getPackageUrl() != NULL ) {
157
+ $extractedPath = $outputDirectory . 'favicon_package';
158
+ if ( ! file_exists( $extractedPath ) ) {
159
+ if ( mkdir( $extractedPath, 0755, true ) !== true ) {
160
+ throw new InvalidArgumentException(
161
+ sprintf( __( 'Cannot create directory %s to store the favicon package content', FBRFG_PLUGIN_SLUG), $extractedPath ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  }
163
  }
164
+
165
+ try {
166
+ $this->downloadZipFile( $outputDirectory, $extractedPath, $this->getPackageUrl() );
167
+ }
168
+ catch(Exception $e) {
169
+ // Zip file download failed, try getting files directly
170
+ $this->downloadFilesDirectly( $extractedPath, array() );
171
  }
172
  }
173
+
174
  if ( $this->getPreviewUrl() != NULL ) {
175
+ $previewPath = $outputDirectory . 'favicon_preview.png';
176
  $this->downloadFile( $previewPath, $this->getPreviewUrl() );
177
  $this->params[RFG_PREVIEW_PATH] = $previewPath;
178
  }
179
  }
180
 
181
+ public function downloadFilesDirectly( $outputDirectory, $filesURLs ) {
182
+ foreach($this->getFilesURLs() as $fileURL ) {
183
+ $parts = parse_url( $fileURL );
184
+ $filePath = $outputDirectory . DIRECTORY_SEPARATOR .
185
+ basename( $parts['path'] );
186
+ $this->downloadFile( $filePath, $fileURL );
187
+ }
188
+
189
+ $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $outputDirectory;
190
+ if ( $this->isCompressed() ) {
191
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath;
192
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = NULL;
193
+ }
194
+ else {
195
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = NULL;
196
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
197
+ }
198
+ }
199
+
200
+ public function downloadZipFile( $packageDirectory, $extractedPath, $packageUrl ) {
201
+ $packagePath = $packageDirectory . 'favicon_package.zip';
202
+ $this->downloadFile( $packagePath, $packageUrl );
203
+
204
+ $ret = WP_Filesystem();
205
+ $result = unzip_file( $packagePath, $extractedPath );
206
+ if ( $result !== true ) {
207
+ $explanation = ( is_wp_error( $result ) )
208
+ ? $result->get_error_message()
209
+ : __( 'Unknown reason', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG );
210
+ if ( get_class($wp_filesystem) != 'WP_Filesystem_Direct' ) {
211
+ $explanation .= ' ' . __( "Apparently WordPress has no direct access to the file system (it uses another mean such as FTP). " .
212
+ "This may be the root cause of this issue.", Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG );
213
+ }
214
+ throw new InvalidArgumentException(
215
+ sprintf( __( 'Error while unziping the favicon package %s to directory %s', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
216
+ $packagePath, $extractedPath ) . ': ' . $explanation );
217
+ }
218
+
219
+ if ( $this->isCompressed() ) {
220
+ // As of today, when the user chooses the compress the picture,
221
+ // the package is provided in two flavors, in two distinct directories.
222
+ // Later, only the compressed version will be provided. Thus, the following code
223
+ // handles both scenarios.
224
+ if ( is_dir( $extractedPath . DIRECTORY_SEPARATOR . 'compressed' ) ) {
225
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath .
226
+ DIRECTORY_SEPARATOR . 'compressed';
227
+ } else {
228
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath;
229
+ }
230
+
231
+ if ( is_dir( $extractedPath . DIRECTORY_SEPARATOR . 'uncompressed' ) ) {
232
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath .
233
+ DIRECTORY_SEPARATOR . 'uncompressed';
234
+ } else {
235
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
236
+ }
237
+
238
+ $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH];
239
+ }
240
+ else {
241
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = NULL;
242
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
243
+ $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH];
244
+ }
245
+ }
246
+
247
  /**
248
+ * Directory where the compressed files are stored. Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
249
  * Can be <code>NULL</code>.
250
  */
251
  public function getCompressedPackagePath() {
253
  }
254
 
255
  /**
256
+ * Directory where the uncompressed files are stored. Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
257
  * Can be <code>NULL</code>.
258
  */
259
  public function getUncompressedPackagePath() {
269
  public function getProductionPackagePath() {
270
  return $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH];
271
  }
272
+
273
  /**
274
  * Path to the preview picture.
275
  */
276
  public function getPreviewPath() {
277
  return $this->params[RFG_PREVIEW_PATH];
278
  }
279
+
280
  private function downloadFile( $localPath, $url ) {
281
  $resp = wp_remote_get( $url, array( 'filename' => $localPath, 'stream' => true ) );
282
+ if ( ( $resp == NULL ) || ( $resp == false ) || ( is_wp_error( $resp ) ) || ( $resp['response'] == NULL ) ||
283
  ( $resp['response']['code'] == NULL ) || ( $resp['response']['code'] != 200 ) ) {
284
+ $explanation = is_wp_error( $resp ) ? ( ': ' . $resp->get_error_message() ) : '' ;
285
+ throw new InvalidArgumentException(
286
+ sprintf( __( 'Cannot download file at %s', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), $url ) . $explanation );
287
  }
288
  if ( ( ! file_exists( $localPath ) ) || ( filesize( $localPath ) <= 0 ) ) {
289
+ throw new InvalidArgumentException( __( 'Cannot store downloaded file locally', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ) );
290
  }
291
  }
292
+
293
+ public function append_directory_separator( $filename ) {
294
+ return $filename .
295
+ ( ( $this->ends_with( $filename, DIRECTORY_SEPARATOR ))
296
+ ? ''
297
+ : DIRECTORY_SEPARATOR );
298
+ }
299
+
300
+ // See http://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php#answer-10473026
301
+ public function ends_with( $haystack, $needle ) {
302
+ return $needle === "" ||
303
+ ( ( $temp = strlen( $haystack ) - strlen( $needle ) ) >= 0
304
+ && strpos( $haystack, $needle, $temp ) !== false );
305
+ }
306
+
307
  }
 
admin/views/appearance.php ADDED
@@ -0,0 +1,317 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+ ?>
4
+
5
+ <div class="wrap">
6
+
7
+ <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
8
+
9
+ <?php if ( $new_favicon_params_url ) { ?>
10
+ <div id="install_in_progress_message" class="updated">
11
+ <p><?php _e( 'Favicon installation in progress. Please wait...', FBRFG_PLUGIN_SLUG ) ?></p>
12
+ </div>
13
+
14
+ <div id="install_completed_message" class="updated" style="display:none">
15
+ <p>
16
+ <?php _e( 'Favicon installed!', FBRFG_PLUGIN_SLUG ) ?>
17
+ <span id="rank_notice" style="display:none">
18
+ <?php printf( __( 'Do you like the result? If so, would you like to <a %s>rate the plugin</a>?', FBRFG_PLUGIN_SLUG ),
19
+ 'target="_blank" href="https://wordpress.org/support/view/plugin-reviews/favicon-by-realfavicongenerator"' ) ?>
20
+ </span>
21
+ </p>
22
+ </div>
23
+ <div id="install_error_message" class="error" style="display:none"><p></p></div>
24
+
25
+ <div id="install_completed_container" style="display:none">
26
+ <h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
27
+
28
+ <?php include_once( plugin_dir_path(__FILE__) . DIRECTORY_SEPARATOR .
29
+ 'keep_active_notice.php' ); ?>
30
+
31
+ <p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
32
+ <img id="preview_image">
33
+
34
+ <p>
35
+ <?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
36
+ 'id="checker_link" class="button-primary" href="#"' ) ?>
37
+ <?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
38
+ </p>
39
+ </div>
40
+ <?php } else { ?>
41
+ <h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
42
+
43
+ <?php if ( $favicon_configured) { ?>
44
+ <?php include_once( plugin_dir_path(__FILE__) . DIRECTORY_SEPARATOR .
45
+ 'keep_active_notice.php' ); ?>
46
+ <p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
47
+ <?php } else { ?>
48
+ <p><?php _e( 'No favicon has been configured yet.', FBRFG_PLUGIN_SLUG ) ?></p>
49
+ <?php } ?>
50
+
51
+ <?php if ( $favicon_configured ) {
52
+ if ( $preview_url ) { ?>
53
+
54
+ <img src="<?php echo $preview_url ?>">
55
+
56
+ <?php } ?>
57
+ <p>
58
+ <?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
59
+ 'class="button-primary" ' .
60
+ 'href="https://realfavicongenerator.net/favicon_checker?site=' . urlencode( home_url() ) . ($favicon_in_root ? '' : '&ignore_root_issues=on') . '"' ) ?>
61
+ <?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
62
+ </p>
63
+ <?php
64
+ }
65
+ } ?>
66
+
67
+ <div id="favicon_form_container" <?php echo $new_favicon_params_url ? 'style="display:none"' : '' ?>>
68
+ <h3><?php _e( 'Favicon generation', FBRFG_PLUGIN_SLUG ) ?></h3>
69
+ <?php if ( $favicon_configured || $new_favicon_params_url ) { ?>
70
+ <p><?php _e( 'You can replace the existing favicon.', FBRFG_PLUGIN_SLUG ) ?></p>
71
+ <?php } ?>
72
+ <form role="form" method="post" action="https://realfavicongenerator.net/api/favicon_generator" id="favicon_form">
73
+ <input type="hidden" name="json_params" id="json_params"/>
74
+ <table class="form-table"><tbody>
75
+ <tr valign="top">
76
+ <th scope="row">
77
+ <label for="master_picture_url"><?php _e( 'Master picture URL', FBRFG_PLUGIN_SLUG ) ?></label>
78
+ </th>
79
+ <td>
80
+ <input id="master_picture_url" name="master_picture_url" size="55">
81
+ <button id="upload_image_button" value="<?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>">
82
+ <?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>
83
+ </button>
84
+ <p class="description">
85
+ <?php _e( 'Submit a square picture, at least 70x70 (recommended: 260x260 or more)', FBRFG_PLUGIN_SLUG ) ?>
86
+ <br>
87
+ <?php _e( 'If the picture is on your hard drive, you can leave this field blank and upload the picture from RealFaviconGenerator.', FBRFG_PLUGIN_SLUG ) ?>
88
+ </p>
89
+ </td>
90
+ </tr>
91
+
92
+ <?php if ( $can_rewrite ) { ?>
93
+ <tr valign="top">
94
+ <th scope="row">
95
+ <label for="rewrite"><?php _e( 'Favicon files in root directory', FBRFG_PLUGIN_SLUG ) ?></label>
96
+ </th>
97
+ <td>
98
+ <input type="checkbox" name="rewrite" id="rewrite" checked="true">
99
+ <p class="description">
100
+ <?php _e( 'The plugin always stores the favicon files in a dedicated directory.', FBRFG_PLUGIN_SLUG ) ?>
101
+ <br>
102
+ <?php _e( 'However, if this option is enabled, the plugin takes advantage of the permalink feature and the favicon files appear to be in the root directory', FBRFG_PLUGIN_SLUG ) ?>
103
+ (<a href="https://realfavicongenerator.net/faq#why_icons_in_root"><?php _e( 'recommended', FBRFG_PLUGIN_SLUG ) ?></a>)
104
+ </p>
105
+ </td>
106
+ </tr>
107
+ <?php } ?>
108
+ </tbody></table>
109
+
110
+ <p class="submit">
111
+ <input type="submit" name="Generate favicon" id="generate_favicon_button" class="button-primary"
112
+ value="<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>">
113
+ </p>
114
+ </form>
115
+ </div>
116
+ </div>
117
+
118
+ <script type="text/javascript">
119
+ var picData = null;
120
+
121
+ function urlToBase64(url, callback) {
122
+ var img = new Image();
123
+ img.onload = function() {
124
+ callback(getBase64Image(img));
125
+ }
126
+ img.onerror = function() {
127
+ callback(null);
128
+ }
129
+ img.src = url;
130
+ }
131
+
132
+ // See http://stackoverflow.com/questions/934012/get-image-data-in-javascript
133
+ // Credits: Matthew Crumley
134
+ function getBase64Image(img) {
135
+ try {
136
+ var canvas = document.createElement("canvas");
137
+ canvas.width = img.width;
138
+ canvas.height = img.height;
139
+
140
+ var ctx = canvas.getContext("2d");
141
+ ctx.drawImage(img, 0, 0);
142
+
143
+ var dataURL = canvas.toDataURL("image/png");
144
+
145
+ return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
146
+ }
147
+ catch(err) {
148
+ console.log("Cannot get the picture from the Media Library: " + err);
149
+ return null;
150
+ }
151
+ }
152
+
153
+ function computeJson() {
154
+ var params = { favicon_generation: {
155
+ callback: {},
156
+ master_picture: {},
157
+ files_location: {},
158
+ api_key: "87d5cd739b05c00416c4a19cd14a8bb5632ea563"
159
+ }};
160
+
161
+ if (jQuery('#master_picture_url').val().length <= 0) {
162
+ params.favicon_generation.master_picture.type = "no_picture";
163
+ params.favicon_generation.master_picture.demo = true;
164
+ }
165
+ else if (pictureContent != null) {
166
+ params.favicon_generation.master_picture.type = "inline";
167
+ params.favicon_generation.master_picture.content = pictureContent;
168
+ }
169
+ else {
170
+ params.favicon_generation.master_picture.type = "url";
171
+ params.favicon_generation.master_picture.url = jQuery('#master_picture_url').val();
172
+ }
173
+
174
+ <?php if ( $can_rewrite ) { ?>
175
+ if ( jQuery("#rewrite").is(':checked') ) {
176
+ params.favicon_generation.files_location.type = 'root';
177
+ }
178
+ else {
179
+ params.favicon_generation.files_location.type = 'path';
180
+ params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
181
+ }
182
+ <?php } else { ?>
183
+ params.favicon_generation.files_location.type = 'path';
184
+ params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
185
+ <?php } ?>
186
+
187
+ params.favicon_generation.callback.type = 'url';
188
+ params.favicon_generation.callback.url = "<?php echo admin_url('themes.php?page=' . ( ( isset( $_REQUEST['page'] ) )
189
+ ? $_REQUEST['page']
190
+ : 'favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-admin.phpfavicon_appearance_menu' ) ) ?>";
191
+ params.favicon_generation.callback.short_url = 'true';
192
+ params.favicon_generation.callback.path_only = 'true';
193
+ params.favicon_generation.callback.custom_parameter = "<?php echo $nonce ?>";
194
+
195
+ return params;
196
+ }
197
+
198
+ var pictureContent = null;
199
+ var pictureContentTimestamp = null;
200
+
201
+ function prepareInlinePicture(pictureUrl) {
202
+ var timestamp = new Date().getTime();
203
+ pictureContentTimestamp = timestamp;
204
+
205
+ jQuery('#generate_favicon_button').attr('disabled', 'disabled');
206
+ jQuery('#generate_favicon_button').val("<?php _e( 'Preparing master picture...', FBRFG_PLUGIN_SLUG ) ?>");
207
+
208
+ pictureContent = null;
209
+
210
+ urlToBase64(pictureUrl, function(content) {
211
+ if (content != null) {
212
+ pictureContent = content;
213
+ }
214
+ restoreGenerateFaviconButton();
215
+ });
216
+
217
+ setTimeout(function() {
218
+ if (pictureContentTimestamp == timestamp) {
219
+ restoreGenerateFaviconButton();
220
+ }
221
+ }, 3000);
222
+ }
223
+
224
+ function restoreGenerateFaviconButton() {
225
+ jQuery('#generate_favicon_button').removeAttr('disabled');
226
+ jQuery('#generate_favicon_button').val("<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>");
227
+ }
228
+
229
+ <?php if ( $new_favicon_params_url ) { ?>
230
+ var data = {
231
+ action: '<?php echo Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon' ?>',
232
+ json_result_url: '<?php echo $new_favicon_params_url ?>'
233
+ };
234
+ <?php } ?>
235
+
236
+ jQuery(document).ready(function() {
237
+ jQuery('#favicon_form').submit(function(e) {
238
+ jQuery('#json_params').val(JSON.stringify(computeJson()));
239
+ });
240
+
241
+ <?php if ( $new_favicon_params_url ) { ?>
242
+ jQuery.get('<?php echo $ajax_url ?>', data)
243
+ .done(function(response) {
244
+ if (response.status == 'success') {
245
+ jQuery('#preview_image').attr('src', response.preview_url);
246
+ var checkerUrl = "https://realfavicongenerator.net/favicon_checker?site=<?php echo urlencode( home_url() ) ?>" +
247
+ (response.favicon_in_root ? '' : '&ignore_root_issues=on');
248
+ jQuery('#checker_link').attr('href', checkerUrl);
249
+ jQuery('#install_in_progress_message').fadeOut(function() {
250
+ jQuery('#install_completed_message').fadeIn(function() {
251
+ jQuery('#rank_notice').fadeIn(function() {
252
+ jQuery('#rank_notice').effect('pulsate', {
253
+ times: 3,
254
+ duration: 2000
255
+ });
256
+ });
257
+ });
258
+ jQuery('#install_completed_container').fadeIn();
259
+ jQuery('#favicon_form_container').fadeIn();
260
+ });
261
+ }
262
+ else {
263
+ var msg = "<?php _e( "An error occured", FBRFG_PLUGIN_SLUG ) ?>";
264
+ if (response.message != null) {
265
+ msg += ": " + response.message;
266
+ }
267
+ jQuery('#install_error_message p').html(msg);
268
+ jQuery('#install_in_progress_message').fadeOut(function() {
269
+ jQuery('#install_error_message').fadeIn();
270
+ });
271
+ }
272
+ })
273
+ .fail(function() {
274
+ var msg = "<?php _e( "An internal error occurred", FBRFG_PLUGIN_SLUG ) ?>";
275
+ jQuery('#install_error_message p').html(msg);
276
+ jQuery('#install_in_progress_message').fadeOut(function() {
277
+ jQuery('#install_error_message').fadeIn();
278
+ });
279
+ });
280
+ <?php } ?>
281
+
282
+ var fileFrame;
283
+
284
+ jQuery('#upload_image_button').on('click', function(event) {
285
+ event.preventDefault();
286
+
287
+ if (fileFrame) {
288
+ fileFrame.open();
289
+ return;
290
+ }
291
+
292
+ // Create the media frame.
293
+ fileFrame = wp.media.frames.file_frame = wp.media({
294
+ title: jQuery(this).data('uploader_title'),
295
+ button: {
296
+ text: jQuery(this).data('uploader_button_text'),
297
+ },
298
+ multiple: false
299
+ });
300
+
301
+ fileFrame.on('select', function() {
302
+ attachment = fileFrame.state().get('selection').first().toJSON();
303
+ jQuery('#master_picture_url').val(attachment.url);
304
+ prepareInlinePicture(attachment.url);
305
+ });
306
+
307
+ fileFrame.open();
308
+ });
309
+
310
+
311
+ jQuery('#master_picture_url').change(function() {
312
+ // Whatever the previous content of the field, forget its cached data
313
+ pictureContent = null;
314
+ restoreGenerateFaviconButton();
315
+ });
316
+ });
317
+ </script>
admin/views/keep_active_notice.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <div id="keep_active_notice" class="notice notice-info">
2
+ <p>
3
+ <?php _e( "You should keep this plugin active. As soon as you deactive it, your favicon is disabled, too.",
4
+ FBRFG_PLUGIN_SLUG ) ?>
5
+ <?php printf( __( 'You may wonder <a %s>why it works that way</a>.',
6
+ FBRFG_PLUGIN_SLUG ), 'target="_blank" href="https://realfavicongenerator.net/blog/why-does-the-favicon-by-realfavicongenerator-wordpress-plugin-need-to-be-activated-all-the-time/"') ?>
7
+ <?php printf( __( 'In any case, <a %s>the plugin is super lightweight</a> and will not affect the performance of your site.',
8
+ FBRFG_PLUGIN_SLUG ), 'target="_blank" href="https://realfavicongenerator.net/blog/rfgs-wordpress-plugin-and-performance/"') ?>
9
+ </p>
10
+ </div>
admin/views/settings.php CHANGED
@@ -1,235 +1,36 @@
1
  <?php
2
- // Copyright 2014 RealFaviconGenerator
3
  ?>
4
 
5
  <div class="wrap">
6
-
7
  <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
8
 
9
- <?php if ( $new_favicon_params_url ) { ?>
10
- <div id="install_in_progress_message" class="updated">
11
- <p><?php _e( 'Favicon installation in progress. Please wait...', FBRFG_PLUGIN_SLUG ) ?></p>
12
- </div>
13
-
14
- <div id="install_completed_message" class="updated" style="display:none">
15
- <p><?php _e( 'Favicon installed!', FBRFG_PLUGIN_SLUG ) ?></p>
16
- </div>
17
- <div id="install_error_message" class="error" style="display:none"><p></p></div>
18
-
19
- <div id="install_completed_container" style="display:none">
20
- <h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
21
- <p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
22
- <img id="preview_image">
23
-
24
- <p>
25
- <?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
26
- 'id="checker_link" class="button-primary" href="#"' ) ?>
27
- <?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
28
- </p>
29
- </div>
30
- <?php } else { ?>
31
- <h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
32
-
33
- <?php if ( $favicon_configured) { ?>
34
- <p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
35
- <?php } else { ?>
36
- <p><?php _e( 'No favicon has been configured yet.', FBRFG_PLUGIN_SLUG ) ?></p>
37
- <?php } ?>
38
-
39
- <?php if ( $favicon_configured ) {
40
- if ( $preview_url ) { ?>
41
-
42
- <img src="<?php echo $preview_url ?>">
43
-
44
- <?php } ?>
45
  <p>
46
- <?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
47
- 'class="button-primary" ' .
48
- 'href="http://realfavicongenerator.net/favicon_checker?site=' . urlencode( home_url() ) . ($favicon_in_root ? '' : '&ignore_root_issues=on') . '"' ) ?>
49
- <?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
50
  </p>
51
- <?php
52
- }
53
- } ?>
54
 
55
- <div id="favicon_form_container" <?php echo $new_favicon_params_url ? 'style="display:none"' : '' ?>>
56
- <h3><?php _e( 'Favicon generation', FBRFG_PLUGIN_SLUG ) ?></h3>
57
- <?php if ( $favicon_configured || $new_favicon_params_url ) { ?>
58
- <p><?php _e( 'You can replace the existing favicon.', FBRFG_PLUGIN_SLUG ) ?></p>
59
- <?php } ?>
60
- <form role="form" method="post" action="http://realfavicongenerator.net/api/favicon_generator" id="favicon_form">
61
- <input type="hidden" name="json_params" id="json_params"/>
62
- <table class="form-table"><tbody>
63
- <tr valign="top">
64
- <th scope="row">
65
- <label for="master_picture_url"><?php _e( 'Master picture URL', FBRFG_PLUGIN_SLUG ) ?></label>
66
- </th>
67
- <td>
68
- <input id="master_picture_url" name="master_picture_url" size="55">
69
- <button id="upload_image_button" value="<?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>">
70
- <?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>
71
- </button>
72
- <p class="description">
73
- <?php _e( 'Submit a square picture, at least 70x70 (recommended: 260x260 or more)', FBRFG_PLUGIN_SLUG ) ?>
74
- <br>
75
- <?php _e( 'If the picture is on your hard drive, you can leave this field blank and upload the picture from RealFaviconGenerator.', FBRFG_PLUGIN_SLUG ) ?>
76
- </p>
77
- </td>
78
- </tr>
79
 
80
- <?php if ( $can_rewrite ) { ?>
81
- <tr valign="top">
82
- <th scope="row">
83
- <label for="rewrite"><?php _e( 'Favicon files in root directory', FBRFG_PLUGIN_SLUG ) ?></label>
84
- </th>
85
  <td>
86
- <input type="checkbox" name="rewrite" id="rewrite" checked="true">
 
87
  <p class="description">
88
- <?php _e( 'The plugin always stores the favicon files in a dedicated directory.', FBRFG_PLUGIN_SLUG ) ?>
89
- <br>
90
- <?php _e( 'However, if this option is enabled, the plugin takes advantage of the permalink feature and the favicon files appear to be in the root directory', FBRFG_PLUGIN_SLUG ) ?>
91
- (<a href="http://realfavicongenerator.net/faq#why_icons_in_root"><?php _e( 'recommended', FBRFG_PLUGIN_SLUG ) ?></a>)
92
  </p>
93
  </td>
94
  </tr>
95
- <?php } ?>
96
- </tbody></table>
97
-
98
- <p class="submit">
99
- <input type="submit" name="Generate favicon" id="generate_favicon_button" class="button-primary"
100
- value="<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>">
101
- </p>
102
- </form>
103
- </div>
104
- </div>
105
-
106
- <script type="text/javascript">
107
- var picData = null;
108
-
109
- // See http://stackoverflow.com/questions/934012/get-image-data-in-javascript
110
- // Credits: Matthew Crumley
111
- function getBase64Image(img) {
112
- var canvas = document.createElement("canvas");
113
- canvas.width = img.width;
114
- canvas.height = img.height;
115
-
116
- var ctx = canvas.getContext("2d");
117
- ctx.drawImage(img, 0, 0);
118
-
119
- var dataURL = canvas.toDataURL("image/png");
120
-
121
- return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
122
- }
123
-
124
- function computeJson() {
125
- var params = { favicon_generation: {
126
- callback: {},
127
- master_picture: {},
128
- files_location: {},
129
- api_key: "87d5cd739b05c00416c4a19cd14a8bb5632ea563"
130
- }};
131
-
132
- if (jQuery('#master_picture_url').val().length <= 0) {
133
- params.favicon_generation.master_picture.type = "no_picture";
134
- params.favicon_generation.master_picture.demo = true;
135
- }
136
- else {
137
- params.favicon_generation.master_picture.type = "url";
138
- params.favicon_generation.master_picture.url = jQuery('#master_picture_url').val();
139
- }
140
 
141
- <?php if ( $can_rewrite ) { ?>
142
- if ( jQuery("#rewrite").is(':checked') ) {
143
- params.favicon_generation.files_location.type = 'root';
144
- }
145
- else {
146
- params.favicon_generation.files_location.type = 'path';
147
- params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
148
- }
149
- <?php } else { ?>
150
- params.favicon_generation.files_location.type = 'path';
151
- params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
152
- <?php } ?>
153
 
154
- params.favicon_generation.callback.type = 'url';
155
- params.favicon_generation.callback.url = "<?php echo admin_url('themes.php?page=favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-admin.phpfavicon_settings_menu') ?>";
156
- params.favicon_generation.callback.short_url = 'true';
157
 
158
- return params;
159
- }
160
-
161
- <?php if ( $new_favicon_params_url ) { ?>
162
- var data = {
163
- action: '<?php echo Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon' ?>',
164
- json_result_url: '<?php echo $new_favicon_params_url ?>'
165
- };
166
- <?php } ?>
167
-
168
- jQuery(document).ready(function() {
169
- jQuery('#favicon_form').submit(function(e) {
170
- jQuery('#json_params').val(JSON.stringify(computeJson()));
171
- });
172
-
173
- <?php if ( $new_favicon_params_url ) { ?>
174
- jQuery.get('<?php echo $ajax_url ?>', data)
175
- .done(function(response) {
176
- if (response.status == 'success') {
177
- jQuery('#preview_image').attr('src', response.preview_url);
178
- var checkerUrl = "http://realfavicongenerator.net/favicon_checker?site=<?php echo urlencode( home_url() ) ?>" +
179
- (response.favicon_in_root ? '' : '&ignore_root_issues=on');
180
- jQuery('#checker_link').attr('href', checkerUrl);
181
- jQuery('#install_in_progress_message').fadeOut(function() {
182
- jQuery('#install_completed_message').fadeIn();
183
- jQuery('#install_completed_container').fadeIn();
184
- jQuery('#favicon_form_container').fadeIn();
185
- });
186
- }
187
- else {
188
- var msg = "<?php _e( "An error occured", FBRFG_PLUGIN_SLUG ) ?>";
189
- if (response.message != null) {
190
- msg += ": " + response.message;
191
- }
192
- jQuery('#install_error_message p').html(msg);
193
- jQuery('#install_in_progress_message').fadeOut(function() {
194
- jQuery('#install_error_message').fadeIn();
195
- });
196
- }
197
- })
198
- .fail(function() {
199
- var msg = "<?php _e( "An internal error occurred", FBRFG_PLUGIN_SLUG ) ?>";
200
- jQuery('#install_error_message p').html(msg);
201
- jQuery('#install_in_progress_message').fadeOut(function() {
202
- jQuery('#install_error_message').fadeIn();
203
- });
204
- });
205
- <?php } ?>
206
-
207
- var fileFrame;
208
-
209
- jQuery('#upload_image_button').live('click', function(event) {
210
- event.preventDefault();
211
-
212
- if (fileFrame) {
213
- fileFrame.open();
214
- return;
215
- }
216
-
217
- // Create the media frame.
218
- fileFrame = wp.media.frames.file_frame = wp.media({
219
- title: jQuery(this).data('uploader_title'),
220
- button: {
221
- text: jQuery(this).data('uploader_button_text'),
222
- },
223
- multiple: false
224
- });
225
-
226
- fileFrame.on('select', function() {
227
- attachment = fileFrame.state().get('selection').first().toJSON();
228
- jQuery('#master_picture_url').val(attachment.url);
229
- });
230
-
231
- fileFrame.open();
232
- });
233
-
234
- });
235
- </script>
1
  <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
  ?>
4
 
5
  <div class="wrap">
 
6
  <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  <p>
9
+ <?php printf(
10
+ __( 'Do you want to setup your favicon? Go to <a href="%s">Appearance &gt; Favicon</a>', FBRFG_PLUGIN_SLUG ),
11
+ $favicon_appearance_url ) ?>
 
12
  </p>
 
 
 
13
 
14
+ <form action="<?php echo $favicon_admin_url ?>" method="post">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
+ <table class="form-table">
17
+ <tbody>
18
+ <tr>
19
+ <th scope="row"><?php _e('Display update notifications', FBRFG_PLUGIN_SLUG ) ?></th>
 
20
  <td>
21
+ <input type="checkbox" name="<?php echo Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS ?>"
22
+ value="1" <?php echo( $display_update_notifications ? 'checked="checked"' : '' ) ?>>
23
  <p class="description">
24
+ <?php _e('Get notifications when RealFaviconGenerator is updated. For example, when Apple releases a new version of iOS or a new platform is supported.', FBRFG_PLUGIN_SLUG ) ?>
 
 
 
25
  </p>
26
  </td>
27
  </tr>
28
+ </tbody>
29
+ </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ <input type="hidden" name="<?php echo Favicon_By_RealFaviconGenerator_Admin::SETTINGS_FORM ?>" value="1">
 
 
 
 
 
 
 
 
 
 
 
32
 
33
+ <input name="Submit" type="submit" class="button-primary" value="<?php _e( 'Save changes', FBRFG_PLUGIN_SLUG ) ?>">
34
+ </form>
 
35
 
36
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
favicon-by-realfavicongenerator.php CHANGED
@@ -11,12 +11,14 @@
11
  * @wordpress-plugin
12
  * Plugin Name: Favicon by RealFaviconGenerator
13
  * Plugin URI: http://realfavicongenerator.net/extensions/wordpress
14
- * Description: Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, Android devices, Windows 8 tablets, etc.
15
- * Version: 1.1.0
16
  * Author: Philippe Bernard
17
  * Author URI: http://realfavicongenerator.net/
18
  * License: GPLv2
19
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
 
20
  */
21
 
22
  // If this file is called directly, abort.
@@ -28,7 +30,8 @@ if ( ! defined( 'WPINC' ) ) {
28
  * Public-Facing Functionality
29
  *----------------------------------------------------------------------------*/
30
 
31
- require_once( plugin_dir_path( __FILE__ ) . 'public/class-favicon-by-realfavicongenerator.php' );
 
32
 
33
  register_activation_hook( __FILE__, array( 'Favicon_By_RealFaviconGenerator', 'activate' ) );
34
  register_deactivation_hook( __FILE__, array( 'Favicon_By_RealFaviconGenerator', 'deactivate' ) );
@@ -41,7 +44,8 @@ add_action( 'plugins_loaded', array( 'Favicon_By_RealFaviconGenerator', 'get_ins
41
 
42
  if ( is_admin() ) {
43
 
44
- require_once( plugin_dir_path( __FILE__ ) . 'admin/class-favicon-by-realfavicongenerator-admin.php' );
 
45
  add_action( 'plugins_loaded', array( 'Favicon_By_RealFaviconGenerator_Admin', 'get_instance' ) );
46
 
47
  }
11
  * @wordpress-plugin
12
  * Plugin Name: Favicon by RealFaviconGenerator
13
  * Plugin URI: http://realfavicongenerator.net/extensions/wordpress
14
+ * Description: Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, Android devices, Windows 8 tablets, etc.
15
+ * Version: 1.3.20
16
  * Author: Philippe Bernard
17
  * Author URI: http://realfavicongenerator.net/
18
  * License: GPLv2
19
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
20
+ * Text Domain: favicon-by-realfavicongenerator
21
+ * Domain Path: /languages/
22
  */
23
 
24
  // If this file is called directly, abort.
30
  * Public-Facing Functionality
31
  *----------------------------------------------------------------------------*/
32
 
33
+ require_once( plugin_dir_path( __FILE__ ) . 'public' . DIRECTORY_SEPARATOR .
34
+ 'class-favicon-by-realfavicongenerator.php' );
35
 
36
  register_activation_hook( __FILE__, array( 'Favicon_By_RealFaviconGenerator', 'activate' ) );
37
  register_deactivation_hook( __FILE__, array( 'Favicon_By_RealFaviconGenerator', 'deactivate' ) );
44
 
45
  if ( is_admin() ) {
46
 
47
+ require_once( plugin_dir_path( __FILE__ ) . 'admin' . DIRECTORY_SEPARATOR .
48
+ 'class-favicon-by-realfavicongenerator-admin.php' );
49
  add_action( 'plugins_loaded', array( 'Favicon_By_RealFaviconGenerator_Admin', 'get_instance' ) );
50
 
51
  }
languages/favicon-by-realfavicongenerator-cs_CZ.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-cs_CZ.po ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2015-11-22 17:39+0100\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-11-22 18:18+0100\n"
13
+ "Language-Team: \n"
14
+ "X-Generator: Poedit 1.8.6\n"
15
+ "Last-Translator: nothing <nothing@nothing.com>\n"
16
+ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17
+ "Language: cs_CZ\n"
18
+
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
22
+ msgid "Favicon"
23
+ msgstr "Favikona"
24
+
25
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
26
+ msgid "Favicon Settings"
27
+ msgstr "Nastavení favikony"
28
+
29
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
30
+ msgid ""
31
+ "Nonce was not recognized. This case is supposed to happen only in case of "
32
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
33
+ "contact@realfavicongenerator.net\\\">contact us</a>."
34
+ msgstr ""
35
+ "Nonce nebyl rozpoznán. Tento stav se stává pouze v případě XSS útoku. Pokud "
36
+ "je něco v nepořádku, prosím neprodleně <a href=\\\"mailto:"
37
+ "contact@realfavicongenerator.net\\\">nás kontaktujte</a>."
38
+
39
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
40
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
41
+ msgid "Cannot create directory %s to store the favicon package"
42
+ msgstr "Nelze vytvořit adresář %s pro uložení balíčku favikon"
43
+
44
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
45
+ msgid "An update is available on RealFaviconGenerator:"
46
+ msgstr "Aktualizace RealFaviconGenerator je dostupná:"
47
+
48
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
49
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
50
+ msgstr "Možná je potřeba <a href=\"%s\">znovu vytvořit favikon</a>"
51
+
52
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
53
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
54
+ msgid "Hide this notice"
55
+ msgstr "Skrýt toto oznámení"
56
+
57
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
58
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
59
+ msgid "Do not warn me again in case of update"
60
+ msgstr "Nikdy již neupozornit na novou verzi"
61
+
62
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
63
+ msgid "Your favicon was updated automatically:"
64
+ msgstr "Vaše favikona byla automaticky aktualizována:"
65
+
66
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
67
+ msgid "Cannot create directory %s to store the favicon package content"
68
+ msgstr "Nelze vytvořit adresář %s pro uložení obsah balíčku favikon"
69
+
70
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
71
+ msgid "Unknown reason"
72
+ msgstr "Neznámý důvod selhání."
73
+
74
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
75
+ msgid "Error while unziping the favicon package %s to directory %s"
76
+ msgstr "Nastala chyba při rozbalování balíčku favikon %s ve složce %s"
77
+
78
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
79
+ msgid "Cannot download file at %s"
80
+ msgstr "Soubor %s nelze stáhnout"
81
+
82
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
83
+ msgid "Cannot store downloaded file locally"
84
+ msgstr "Soubor nelze uložit"
85
+
86
+ #: admin/views/appearance.php:11
87
+ msgid "Favicon installation in progress. Please wait..."
88
+ msgstr "Instalace favikony probíhá. Prosím, čekejte..."
89
+
90
+ #: admin/views/appearance.php:16
91
+ msgid "Favicon installed!"
92
+ msgstr "Favikona nainstalována!"
93
+
94
+ #: admin/views/appearance.php:18
95
+ msgid ""
96
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
97
+ msgstr ""
98
+ "Líbí se Vám výsledek? Pokud ano, můžete prosím <a %s>ohodnotit plugin</a>?"
99
+
100
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
101
+ msgid "Current favicon"
102
+ msgstr "Stávající favikona"
103
+
104
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
105
+ msgid "The favicon is up and ready."
106
+ msgstr "Favikona je připravená."
107
+
108
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
109
+ msgid ""
110
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
111
+ msgstr "<a %s>Zkontrolovat favikony</a> přes službu RealFaviconGenerator."
112
+
113
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
114
+ msgid "This option works only if your site is accessible from the outside."
115
+ msgstr "Funguje pouze v případě webu dostupného z internetu."
116
+
117
+ #: admin/views/appearance.php:42
118
+ msgid "No favicon has been configured yet."
119
+ msgstr "Favikona není vytvořena."
120
+
121
+ #: admin/views/appearance.php:62
122
+ msgid "Favicon generation"
123
+ msgstr "Vygenerovat favikonu"
124
+
125
+ #: admin/views/appearance.php:64
126
+ msgid "You can replace the existing favicon."
127
+ msgstr "Můžete nahradit stávající favikon."
128
+
129
+ #: admin/views/appearance.php:71
130
+ msgid "Master picture URL"
131
+ msgstr "Obrázek"
132
+
133
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
134
+ msgid "Select from the Media Library"
135
+ msgstr "Vybrat z knihovny médií"
136
+
137
+ #: admin/views/appearance.php:79
138
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
139
+ msgstr ""
140
+ "Obrázek musí být čtverec, alespoň 70x70px (doporučeno je však 260x260 a "
141
+ "více)"
142
+
143
+ #: admin/views/appearance.php:81
144
+ msgid ""
145
+ "If the picture is on your hard drive, you can leave this field blank and "
146
+ "upload the picture from RealFaviconGenerator."
147
+ msgstr ""
148
+ "Pokud je obrázek uložen na Vašem pevném disku, můžete nechat pole prázdné a "
149
+ "nahrát obrázek přímo přes službu RealFaviconGenerator."
150
+
151
+ #: admin/views/appearance.php:89
152
+ msgid "Favicon files in root directory"
153
+ msgstr "Soubory favikony v kořenovém adresáři"
154
+
155
+ #: admin/views/appearance.php:94
156
+ msgid "The plugin always stores the favicon files in a dedicated directory."
157
+ msgstr "Plugin vždy ukládá soubory favikon do vyhrazeného adresáře."
158
+
159
+ #: admin/views/appearance.php:96
160
+ msgid ""
161
+ "However, if this option is enabled, the plugin takes advantage of the "
162
+ "permalink feature and the favicon files appear to be in the root directory"
163
+ msgstr ""
164
+ "Pokud je však tato možnost povolena, plugin využije funkce permalink a "
165
+ "soubory favikon umístí do kořenového adresáře webu."
166
+
167
+ #: admin/views/appearance.php:97
168
+ msgid "recommended"
169
+ msgstr "doporučeno"
170
+
171
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
172
+ msgid "Generate favicon"
173
+ msgstr "Vygenerovat favikonu"
174
+
175
+ #: admin/views/appearance.php:200
176
+ msgid "Preparing master picture..."
177
+ msgstr "Připravuje se obrázek..."
178
+
179
+ #: admin/views/appearance.php:257
180
+ msgid "An error occured"
181
+ msgstr "Nastala chyba"
182
+
183
+ #: admin/views/appearance.php:268
184
+ msgid "An internal error occurred"
185
+ msgstr "Nastala vnitřní chyba"
186
+
187
+ #: admin/views/settings.php:13
188
+ msgid ""
189
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
190
+ "Favicon</a>"
191
+ msgstr ""
192
+ "Chcete nastavit favikonu? Přejděte na <a href=\"%s\">Vzhled &gt; Favikona</"
193
+ "a>"
194
+
195
+ #: admin/views/settings.php:22
196
+ msgid "Display update notifications"
197
+ msgstr "Zobrazit oznámení o aktualizaci"
198
+
199
+ #: admin/views/settings.php:27
200
+ msgid ""
201
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
202
+ "Apple releases a new version of iOS or a new platform is supported."
203
+ msgstr ""
204
+ "Zobrazí upozornění, jakmile je favikona upravena na nejnovější verzi "
205
+ "RealFaviconGenerator. Například, když Apple vydá nový iOS."
206
+
207
+ #: admin/views/settings.php:36
208
+ msgid "Save changes"
209
+ msgstr "Uložit změny"
210
+
211
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
212
+ msgid ""
213
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
214
+ "update"
215
+ msgstr "Navštivte <a href=\"%s\">RFG's historii změn</a>"
216
+
217
+ #. Plugin Name of the plugin/theme
218
+ msgid "Favicon by RealFaviconGenerator"
219
+ msgstr ""
220
+
221
+ #. Plugin URI of the plugin/theme
222
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
223
+ msgstr ""
224
+
225
+ #. Description of the plugin/theme
226
+ msgid ""
227
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
228
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
229
+ msgstr ""
230
+ "Vytvořit a nainstalovat favikony nejen pro známé platformy PC/Mac, ale také "
231
+ "iPhone/iPad, zařízení Android, tablety Windows 8, a další."
232
+
233
+ #. Author of the plugin/theme
234
+ msgid "Philippe Bernard"
235
+ msgstr ""
236
+
237
+ #. Author URI of the plugin/theme
238
+ msgid "http://realfavicongenerator.net/"
239
+ msgstr ""
languages/favicon-by-realfavicongenerator-da_DK.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-da_DK.po ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2015-06-24 10:34+0100\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-06-24 10:48+0100\n"
13
+ "Last-Translator: Alexander Leo-Hansen <alexanderleoh@gmail.com>\n"
14
+ "Language-Team: \n"
15
+ "X-Generator: Poedit 1.8.1\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "Language: da_DK\n"
18
+
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
22
+ #, fuzzy
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
27
+ msgid "Favicon Settings"
28
+ msgstr "Favicon indstillinger"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
31
+ msgid ""
32
+ "Nonce was not recognized. This case is supposed to happen only in case of "
33
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
34
+ "contact@realfavicongenerator.net\\\">contact us</a>."
35
+ msgstr ""
36
+ "Nonce blev ikke genkendt. Det er kun mening at dette skal skal ske i "
37
+ "tilfælde af et XSS angreb. Hvis du tror noget er galt, kan du <a href=\\"
38
+ "\"mailto:contact@realfavicongenerator.net\\\">kontakte os</a>."
39
+
40
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
41
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
42
+ msgid "Cannot create directory %s to store the favicon package"
43
+ msgstr "Kan ikke oprette mappen %s til opbevaring af favicon."
44
+
45
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
46
+ msgid "An update is available on RealFaviconGenerator:"
47
+ msgstr "En opdatering er tilgængelig på RealFaviconGenerator:"
48
+
49
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
50
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
51
+ msgstr "Du kan <a href=\"%s\">generere</a> dit favicon igen"
52
+
53
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
54
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
55
+ #, fuzzy
56
+ msgid "Hide this notice"
57
+ msgstr "Skjul denne meddelse"
58
+
59
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
60
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
61
+ msgid "Do not warn me again in case of update"
62
+ msgstr "Advar mig ikke om fremtidige opdateringer"
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
65
+ msgid "Your favicon was updated automatically:"
66
+ msgstr "Dit favicon blev automatisk opdateret:"
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
69
+ msgid "Cannot create directory %s to store the favicon package content"
70
+ msgstr "Kan ikke oprette mappen %s til opbevaring af favicon"
71
+
72
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
73
+ msgid "Unknown reason"
74
+ msgstr "Ukendte årsag"
75
+
76
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
77
+ msgid "Error while unziping the favicon package %s to directory %s"
78
+ msgstr "Der skete en fejl under udpakningen af favicon %s til mappen %s"
79
+
80
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
81
+ msgid "Cannot download file at %s"
82
+ msgstr "Kan ikke downloade filen på %s"
83
+
84
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
85
+ msgid "Cannot store downloaded file locally"
86
+ msgstr "Kan ikke opbevare den downloadede fil"
87
+
88
+ #: admin/views/appearance.php:11
89
+ msgid "Favicon installation in progress. Please wait..."
90
+ msgstr "Favicon er ved at blive installeret. Vent venligst…"
91
+
92
+ #: admin/views/appearance.php:16
93
+ msgid "Favicon installed!"
94
+ msgstr "Favicon blev installeret!"
95
+
96
+ #: admin/views/appearance.php:18
97
+ msgid ""
98
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
99
+ msgstr ""
100
+ "Kan du lidt resultatet? I så fald, må du gerne <a %s>bedømme vores plugin</"
101
+ "a>"
102
+
103
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
104
+ msgid "Current favicon"
105
+ msgstr "Nuværende favicon"
106
+
107
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
108
+ msgid "The favicon is up and ready."
109
+ msgstr "Dit favicon er klar."
110
+
111
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
112
+ msgid ""
113
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
114
+ msgstr ""
115
+ "<a %s>Tje kdit favicon</a> med RealFaviconGenerator's favicon tjekker."
116
+
117
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
118
+ msgid "This option works only if your site is accessible from the outside."
119
+ msgstr "Denne indstillinger virker kun, hvis du kan connecte til dit website."
120
+
121
+ #: admin/views/appearance.php:42
122
+ msgid "No favicon has been configured yet."
123
+ msgstr "Der er endnu ikke blevet konfigureret et favicon."
124
+
125
+ #: admin/views/appearance.php:62
126
+ msgid "Favicon generation"
127
+ msgstr "Generering af favicon"
128
+
129
+ #: admin/views/appearance.php:64
130
+ msgid "You can replace the existing favicon."
131
+ msgstr "Du kan erstatte det eksisterende favicon."
132
+
133
+ #: admin/views/appearance.php:71
134
+ msgid "Master picture URL"
135
+ msgstr "Master billede URL"
136
+
137
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
138
+ msgid "Select from the Media Library"
139
+ msgstr "Vælg fra Medie biblioteket"
140
+
141
+ #: admin/views/appearance.php:79
142
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
143
+ msgstr ""
144
+ "Indsend et firkantet billede, mindst 70x70 (anbefalet: 260x260 eller mere)"
145
+
146
+ #: admin/views/appearance.php:81
147
+ msgid ""
148
+ "If the picture is on your hard drive, you can leave this field blank and "
149
+ "upload the picture from RealFaviconGenerator."
150
+ msgstr ""
151
+ "Hvis billedet er på din harddisk, kan du lade dette felt være tomt og "
152
+ "uploade billedet fra RealFaviconGenerator."
153
+
154
+ #: admin/views/appearance.php:89
155
+ msgid "Favicon files in root directory"
156
+ msgstr "Favicon filerne er i roden"
157
+
158
+ #: admin/views/appearance.php:94
159
+ msgid "The plugin always stores the favicon files in a dedicated directory."
160
+ msgstr "Dette plugin opbevare altid favicon filerne i en dedikeret mappe."
161
+
162
+ #: admin/views/appearance.php:96
163
+ msgid ""
164
+ "However, if this option is enabled, the plugin takes advantage of the "
165
+ "permalink feature and the favicon files appear to be in the root directory"
166
+ msgstr ""
167
+ "Hvis denne indstilling er aktiveret, vil pluginnet drage fordel af "
168
+ "permalink og favicon filerne vil være i rodmappen"
169
+
170
+ #: admin/views/appearance.php:97
171
+ msgid "recommended"
172
+ msgstr "anbefalet"
173
+
174
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
175
+ msgid "Generate favicon"
176
+ msgstr "Generere favicon"
177
+
178
+ #: admin/views/appearance.php:200
179
+ msgid "Preparing master picture..."
180
+ msgstr "Forbereder master billede…"
181
+
182
+ #: admin/views/appearance.php:257
183
+ msgid "An error occured"
184
+ msgstr "En uventet fejl opstod"
185
+
186
+ #: admin/views/appearance.php:268
187
+ msgid "An internal error occurred"
188
+ msgstr "En intern fejl opstod"
189
+
190
+ #: admin/views/settings.php:13
191
+ msgid ""
192
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
193
+ "Favicon</a>"
194
+ msgstr ""
195
+ "Vil du opsætte dit favicon? Gå til <a href=\"%s\">Appearance &gt; Favicon</"
196
+ "a>"
197
+
198
+ #: admin/views/settings.php:22
199
+ msgid "Display update notifications"
200
+ msgstr "Vis opdateringsnotifikationer"
201
+
202
+ #: admin/views/settings.php:27
203
+ msgid ""
204
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
205
+ "Apple releases a new version of iOS or a new platform is supported."
206
+ msgstr ""
207
+ "Få besked når RealFaviconGenerator opdateres. For eksempel når Apple "
208
+ "frigiver en ny version af iOS eller en ny platform er understøttet."
209
+
210
+ #: admin/views/settings.php:36
211
+ msgid "Save changes"
212
+ msgstr "Gem indstillinger"
213
+
214
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
215
+ msgid ""
216
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
217
+ "update"
218
+ msgstr ""
219
+ "Besøg <a href=\"%s\">RFG's changelog</a> for at se indholdet for "
220
+ "opdateringen"
221
+
222
+ #. Plugin Name of the plugin/theme
223
+ msgid "Favicon by RealFaviconGenerator"
224
+ msgstr "Favicon by RealFaviconGenerator"
225
+
226
+ #. Plugin URI of the plugin/theme
227
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
228
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
229
+
230
+ #. Description of the plugin/theme
231
+ msgid ""
232
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
233
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
234
+ msgstr ""
235
+ "Opret og installer dit favicon på alle platforme: PC / Mac, men også "
236
+ "iPhone / iPad, Android-enheder, Windows 8 tabletter, etc."
237
+
238
+ #. Author of the plugin/theme
239
+ msgid "Philippe Bernard"
240
+ msgstr "Philippe Bernard"
241
+
242
+ #. Author URI of the plugin/theme
243
+ msgid "http://realfavicongenerator.net/"
244
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator-fr_FR.mo CHANGED
Binary file
languages/favicon-by-realfavicongenerator-fr_FR.po CHANGED
@@ -1,101 +1,211 @@
1
- # Copyright (C) 2014 Favicon by RealFaviconGenerator
2
  # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Favicon by RealFaviconGenerator 1.0.4\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
- "realfavicongenerator\n"
8
- "POT-Creation-Date: 2014-05-23 13:22:05+00:00\n"
 
 
 
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n"
13
- "Last-Translator: Philippe Bernard <philippe@realfavicongenerator.net>\n"
14
- "Language-Team: LANGUAGE <LL@li.org>\n"
15
- "Language: fr_FR\n"
16
 
17
- #: admin/class-favicon-by-realfavicongenerator-admin.php:48
18
- msgid "Favicon Settings"
19
- msgstr "Réglages du favicon"
20
-
21
- #: admin/class-favicon-by-realfavicongenerator-admin.php:49
22
  msgid "Favicon"
23
  msgstr "Favicon"
24
 
25
- #: admin/views/settings.php:11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  msgid "Favicon installation in progress. Please wait..."
27
  msgstr "Installation du favicon en cours. Veuillez patienter..."
28
-
29
- #: admin/views/settings.php:15
30
  msgid "Favicon installed!"
31
  msgstr "Favicon installé !"
32
-
33
- #: admin/views/settings.php:20 admin/views/settings.php:25
 
 
 
 
34
  msgid "Current favicon"
35
  msgstr "Favicon actuel"
36
 
37
- #: admin/views/settings.php:21 admin/views/settings.php:28
38
  msgid "The favicon is up and ready."
39
  msgstr "Le favicon est installé."
40
 
41
- #: admin/views/settings.php:30
 
 
 
 
 
 
 
 
 
 
42
  msgid "No favicon has been configured yet."
43
  msgstr "Aucun favicon n'a été configuré pour le moment."
44
 
45
- #: admin/views/settings.php:43
46
  msgid "Favicon generation"
47
  msgstr "Génération du favicon"
48
 
49
- #: admin/views/settings.php:45
50
  msgid "You can replace the existing favicon."
51
  msgstr "Vous pouvez remplacer le favicon existant."
52
 
53
- #: admin/views/settings.php:52
54
  msgid "Master picture URL"
55
  msgstr "URL de l'image de base"
56
 
57
- #: admin/views/settings.php:56 admin/views/settings.php:57
58
  msgid "Select from the Media Library"
59
  msgstr "Sélectionner dans la Bibliothèque de médias"
60
 
61
- #: admin/views/settings.php:60
62
  msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
63
- msgstr ""
64
- "Utilisez une image carrée en 70x70 minimum (recommandé: 260x260 ou plus)"
65
 
66
- #: admin/views/settings.php:62
67
  msgid ""
68
- "If the picture is on your hard drive, you can leave this field blank and "
69
- "upload the picture from RealFaviconGenerator."
70
  msgstr ""
71
- "Si l'image est sur votre disque dur, vous pouvez laisser ce champ vide et "
72
- "envoyer une image depuis l'interface de RealFaviconGenerator"
73
 
74
- #: admin/views/settings.php:70
75
  msgid "Favicon files in root directory"
76
  msgstr "Fichiers du favicon dans le répertoire racine"
77
 
78
- #: admin/views/settings.php:75
79
  msgid "The plugin always stores the favicon files in a dedicated directory."
80
  msgstr "Le plugin conserve toujours les fichiers du favicon dans un répertoire dédié."
81
 
82
- #: admin/views/settings.php:77
83
  msgid ""
84
- "However, if this option is enabled, the plugin takes advantage of the "
85
- "permalink feature and the favicon files appear to be in the root directory"
86
  msgstr ""
87
- "Cependant, si cette option est activée, "
88
- "le plugin tire parti des permaliens "
89
- "pour faire apparaitre les fichiers du favicon dans le répertoire racine"
90
 
91
- #: admin/views/settings.php:78
92
  msgid "recommended"
93
  msgstr "recommandé"
94
 
95
- #: admin/views/settings.php:87
96
  msgid "Generate favicon"
97
  msgstr "Générer le favicon"
98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  #. Plugin Name of the plugin/theme
100
  msgid "Favicon by RealFaviconGenerator"
101
  msgstr "Favicon par RealFaviconGenerator"
@@ -106,12 +216,11 @@ msgstr "http://realfavicongenerator.net/extensions/wordpress"
106
 
107
  #. Description of the plugin/theme
108
  msgid ""
109
- "Create and install your favicon for all platforms: PC/Mac of course, but "
110
- "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
111
  msgstr ""
112
- "Créez et installez votre favicon pour toutes les plateformes : PC/Mac "
113
- "évidemment, mais aussi iPhone/iPad, appareils Android, tablettes Windows 8, "
114
- "etc."
115
 
116
  #. Author of the plugin/theme
117
  msgid "Philippe Bernard"
@@ -120,3 +229,17 @@ msgstr "Philippe Bernard"
120
  #. Author URI of the plugin/theme
121
  msgid "http://realfavicongenerator.net/"
122
  msgstr "http://realfavicongenerator.net/"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014-2016 Favicon by RealFaviconGenerator
2
  # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.1.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-realfavicongenerator\n"
7
+ "POT-Creation-Date: 2015-06-24 10:16+0100\n"
8
+ "PO-Revision-Date: 2015-07-15 11:46+0200\n"
9
+ "Last-Translator: Philippe Bernard <philippe@realfavicongenerator.net>\n"
10
+ "Language-Team: \n"
11
+ "Language: fr_FR\n"
12
  "MIME-Version: 1.0\n"
13
  "Content-Type: text/plain; charset=UTF-8\n"
14
  "Content-Transfer-Encoding: 8bit\n"
15
+ "X-Generator: Poedit 1.8.2\n"
 
 
 
16
 
17
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
 
 
20
  msgid "Favicon"
21
  msgstr "Favicon"
22
 
23
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
24
+ msgid "Favicon Settings"
25
+ msgstr "Réglages du favicon"
26
+
27
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
28
+ msgid ""
29
+ "Nonce was not recognized. This case is supposed to happen only in case of XSS attack. If you "
30
+ "feel like something is wrong, please <a href=\\\"mailto:contact@realfavicongenerator.net\\"
31
+ "\">contact us</a>."
32
+ msgstr ""
33
+ "Le nonce n'a pas été reconnu. Cela n'est censé arriver qu'en cas d'attaque XSS. Si vous pensez "
34
+ "que quelque chose ne va pas, veuillez <a href=\\\"mailto:contact@realfavicongenerator.net\\"
35
+ "\">nous contacter</a>."
36
+
37
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
38
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
39
+ msgid "Cannot create directory %s to store the favicon package"
40
+ msgstr "Impossible de créer le répertoire %s afin d'y stocker le package du favicon"
41
+
42
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
43
+ msgid "An update is available on RealFaviconGenerator:"
44
+ msgstr "Une mise à jour est disponible sur RealFaviconGenerator"
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
47
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
48
+ msgstr "Vous voulez peut-être <a href=\"%s\">générer votre favicon</a> à nouveau"
49
+
50
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
51
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
52
+ msgid "Hide this notice"
53
+ msgstr "Masquer cette notice"
54
+
55
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
56
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
57
+ msgid "Do not warn me again in case of update"
58
+ msgstr "Ne plus m'avertir en cas de mise à jour"
59
+
60
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
61
+ msgid "Your favicon was updated automatically:"
62
+ msgstr "Votre favicon a été mis à jour automatiquement :"
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
65
+ msgid "Cannot create directory %s to store the favicon package content"
66
+ msgstr "Impossible de créer le répertoire %s afin d'y stocker le contenu du package du favicon"
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
69
+ msgid "Unknown reason"
70
+ msgstr "Raison inconnu"
71
+
72
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
73
+ msgid "Error while unziping the favicon package %s to directory %s"
74
+ msgstr "Erreur lors de la décompression du package du favicon %s dans le répertoire %s"
75
+
76
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
77
+ msgid "Cannot download file at %s"
78
+ msgstr "Impossible de télécharger le fichier à l'adresse %s"
79
+
80
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
81
+ msgid "Cannot store downloaded file locally"
82
+ msgstr "Impossible de stocker localement le fichier téléchargé"
83
+
84
+ #: admin/views/appearance.php:11
85
  msgid "Favicon installation in progress. Please wait..."
86
  msgstr "Installation du favicon en cours. Veuillez patienter..."
87
+
88
+ #: admin/views/appearance.php:16
89
  msgid "Favicon installed!"
90
  msgstr "Favicon installé !"
91
+
92
+ #: admin/views/appearance.php:18
93
+ msgid "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
94
+ msgstr "Satisfait du résultat ? Voudriez-vous <a %s>évaluer le plugin</a> ?"
95
+
96
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
97
  msgid "Current favicon"
98
  msgstr "Favicon actuel"
99
 
100
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
101
  msgid "The favicon is up and ready."
102
  msgstr "Le favicon est installé."
103
 
104
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
105
+ msgid "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
106
+ msgstr ""
107
+ "<a %s>Vérifiez votre favicon</a> avec l'outil de vérification de favicon de "
108
+ "RealFaviconGenerator."
109
+
110
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
111
+ msgid "This option works only if your site is accessible from the outside."
112
+ msgstr "Cette option ne fonctionne que si votre site est accessible depuis l'extérieur."
113
+
114
+ #: admin/views/appearance.php:42
115
  msgid "No favicon has been configured yet."
116
  msgstr "Aucun favicon n'a été configuré pour le moment."
117
 
118
+ #: admin/views/appearance.php:62
119
  msgid "Favicon generation"
120
  msgstr "Génération du favicon"
121
 
122
+ #: admin/views/appearance.php:64
123
  msgid "You can replace the existing favicon."
124
  msgstr "Vous pouvez remplacer le favicon existant."
125
 
126
+ #: admin/views/appearance.php:71
127
  msgid "Master picture URL"
128
  msgstr "URL de l'image de base"
129
 
130
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
131
  msgid "Select from the Media Library"
132
  msgstr "Sélectionner dans la Bibliothèque de médias"
133
 
134
+ #: admin/views/appearance.php:79
135
  msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
136
+ msgstr "Utilisez une image carrée en 70x70 minimum (recommandé: 260x260 ou plus)"
 
137
 
138
+ #: admin/views/appearance.php:81
139
  msgid ""
140
+ "If the picture is on your hard drive, you can leave this field blank and upload the picture "
141
+ "from RealFaviconGenerator."
142
  msgstr ""
143
+ "Si l'image est sur votre disque dur, vous pouvez laisser ce champ vide et envoyer une image "
144
+ "depuis l'interface de RealFaviconGenerator"
145
 
146
+ #: admin/views/appearance.php:89
147
  msgid "Favicon files in root directory"
148
  msgstr "Fichiers du favicon dans le répertoire racine"
149
 
150
+ #: admin/views/appearance.php:94
151
  msgid "The plugin always stores the favicon files in a dedicated directory."
152
  msgstr "Le plugin conserve toujours les fichiers du favicon dans un répertoire dédié."
153
 
154
+ #: admin/views/appearance.php:96
155
  msgid ""
156
+ "However, if this option is enabled, the plugin takes advantage of the permalink feature and "
157
+ "the favicon files appear to be in the root directory"
158
  msgstr ""
159
+ "Cependant, si cette option est activée, le plugin tire parti des permaliens pour faire "
160
+ "apparaitre les fichiers du favicon dans le répertoire racine"
 
161
 
162
+ #: admin/views/appearance.php:97
163
  msgid "recommended"
164
  msgstr "recommandé"
165
 
166
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
167
  msgid "Generate favicon"
168
  msgstr "Générer le favicon"
169
 
170
+ #: admin/views/appearance.php:200
171
+ msgid "Preparing master picture..."
172
+ msgstr "Nous préparons l'image..."
173
+
174
+ #: admin/views/appearance.php:257
175
+ msgid "An error occured"
176
+ msgstr "Une erreur est survenue"
177
+
178
+ #: admin/views/appearance.php:268
179
+ msgid "An internal error occurred"
180
+ msgstr "Une erreur interne est survenue"
181
+
182
+ #: admin/views/settings.php:13
183
+ msgid "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; Favicon</a>"
184
+ msgstr ""
185
+ "Voulez-vous mettre en place votre favicon? Allez dans <a href=\"%s\">Apparance &gt; Favicon</a>"
186
+
187
+ #: admin/views/settings.php:22
188
+ msgid "Display update notifications"
189
+ msgstr "Afficher les notifications de mise à jour"
190
+
191
+ #: admin/views/settings.php:27
192
+ msgid ""
193
+ "Get notifications when RealFaviconGenerator is updated. For example, when Apple releases a new "
194
+ "version of iOS or a new platform is supported."
195
+ msgstr ""
196
+ "Afficher des notifications lorsque RealFaviconGenerator est mis à jour. Par exemple, "
197
+ "lorsqu'Apple sort une nouvelle version d'iOS ou lorsqu'une nouvelle plateforme est supportée."
198
+
199
+ #: admin/views/settings.php:36
200
+ msgid "Save changes"
201
+ msgstr "Enregistrer les modifications"
202
+
203
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
204
+ msgid "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the update"
205
+ msgstr ""
206
+ "Afficher le <a href=\"%s\">journal des modifications</a> pour voir le contenu de cette mise à "
207
+ "jour"
208
+
209
  #. Plugin Name of the plugin/theme
210
  msgid "Favicon by RealFaviconGenerator"
211
  msgstr "Favicon par RealFaviconGenerator"
216
 
217
  #. Description of the plugin/theme
218
  msgid ""
219
+ "Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, "
220
+ "Android devices, Windows 8 tablets, etc."
221
  msgstr ""
222
+ "Créez et installez votre favicon pour toutes les plateformes : PC/Mac évidemment, mais aussi "
223
+ "iPhone/iPad, appareils Android, tablettes Windows 8, etc."
 
224
 
225
  #. Author of the plugin/theme
226
  msgid "Philippe Bernard"
229
  #. Author URI of the plugin/theme
230
  msgid "http://realfavicongenerator.net/"
231
  msgstr "http://realfavicongenerator.net/"
232
+
233
+ #~ msgid ""
234
+ #~ "<a href=\"%s\" target=\"_blank\">An update is available</a> on RealFaviconGenerator. You "
235
+ #~ "might want to <a href=\"%s\">generate your favicon again</a>."
236
+ #~ msgstr ""
237
+ #~ "<a href=\"%s\" target=\"_blank\">Une mise à jour est disponible</a> à partir de "
238
+ #~ "RealFaviconGenerator. Vous souhaitez peut-être <a href=\"%s\">générer votre favicon à "
239
+ #~ "nouveau</a>."
240
+
241
+ #~ msgid " | <a href=\"%s\">Hide this notice</a>"
242
+ #~ msgstr " | <a href=\"%s\">Masquer cette notification</a>"
243
+
244
+ #~ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
245
+ #~ msgstr " | <a href=\"%s\">Ne plus me prévenir en cas de mise à jour</a>"
languages/favicon-by-realfavicongenerator-id_ID.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-id_ID.po ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-realfavicongenerator\n"
7
+ "POT-Creation-Date: 2015-11-22 17:39+0100\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-04-19 16:01+0200\n"
12
+ "Language-Team: ChameleonJohn.com\n"
13
+ "X-Generator: Poedit 2.0.1\n"
14
+ "Last-Translator: Jordan Silaen <jordan.silaen@chameleonjohn.com>\n"
15
+ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
16
+ "Language: id_ID\n"
17
+
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77 admin/class-favicon-by-realfavicongenerator-admin.php:78 admin/class-favicon-by-realfavicongenerator-admin.php:82
19
+ msgid "Favicon"
20
+ msgstr "Favicon"
21
+
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
23
+ msgid "Favicon Settings"
24
+ msgstr "Pengaturan Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
27
+ msgid "Nonce was not recognized. This case is supposed to happen only in case of XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:contact@realfavicongenerator.net\\\">contact us</a>."
28
+ msgstr "Nonce tidak diakui. Kasus ini seharusnya terjadi hanya dalam kasus serangan XSS. Jika Anda merasa seperti ada sesuatu yang salah, <a href=\\\"mailto:contact@realfavicongenerator.net\\\"> hubungi kami </a>."
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190 public/class-favicon-by-realfavicongenerator-common.php:414
31
+ msgid "Cannot create directory %s to store the favicon package"
32
+ msgstr "Tidak bisa membuat direktori %s untuk menyimpan paket favicon"
33
+
34
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
35
+ msgid "An update is available on RealFaviconGenerator:"
36
+ msgstr "Pembaruan tersedia pada RealFaviconGenerator:"
37
+
38
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
39
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
40
+ msgstr "Anda mungkin ingin <a href=\"%s\"> menghasilkan favicon Anda lagi </a>"
41
+
42
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454 admin/class-favicon-by-realfavicongenerator-admin.php:477
43
+ msgid "Hide this notice"
44
+ msgstr "Sembunyikan pemberitahuan ini"
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458 admin/class-favicon-by-realfavicongenerator-admin.php:481
47
+ msgid "Do not warn me again in case of update"
48
+ msgstr "Tidak memperingatkan saya lagi dalam kasus pembaruan"
49
+
50
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
51
+ msgid "Your favicon was updated automatically:"
52
+ msgstr "favicon Anda telah diperbarui secara otomatis:"
53
+
54
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
55
+ msgid "Cannot create directory %s to store the favicon package content"
56
+ msgstr "Tidak bisa membuat direktori %s untuk menyimpan konten paket favicon"
57
+
58
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
59
+ msgid "Unknown reason"
60
+ msgstr "Alasan yang tidak diketahui"
61
+
62
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
63
+ msgid "Error while unziping the favicon package %s to directory %s"
64
+ msgstr "Kesalahan saat unziping paket favicon %s ke direktori %s"
65
+
66
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
67
+ msgid "Cannot download file at %s"
68
+ msgstr "Tidak dapat men-download file pada %s"
69
+
70
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
71
+ msgid "Cannot store downloaded file locally"
72
+ msgstr "tidak bisa menyimpan file yang didownload secara lokal"
73
+
74
+ #: admin/views/appearance.php:11
75
+ msgid "Favicon installation in progress. Please wait..."
76
+ msgstr "instalasi favicon berlangsung. Mohon tunggu..."
77
+
78
+ #: admin/views/appearance.php:16
79
+ msgid "Favicon installed!"
80
+ msgstr "Favicon diinstal!"
81
+
82
+ #: admin/views/appearance.php:18
83
+ msgid "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
84
+ msgstr "Apakah Anda suka hasilnya? Jika demikian, apakah Anda ingin <a %s> menilai plugin </a>?"
85
+
86
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
87
+ msgid "Current favicon"
88
+ msgstr "favicon saat ini"
89
+
90
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
91
+ msgid "The favicon is up and ready."
92
+ msgstr "favicon adalah dan siap."
93
+
94
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
95
+ msgid "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
96
+ msgstr "<a %s> Periksa favicon Anda </a> dengan RealFaviconGenerator ini favicon checker."
97
+
98
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
99
+ msgid "This option works only if your site is accessible from the outside."
100
+ msgstr "Opsi ini hanya bekerja jika situs Anda dapat diakses dari luar."
101
+
102
+ #: admin/views/appearance.php:42
103
+ msgid "No favicon has been configured yet."
104
+ msgstr "Tidak ada favicon telah dikonfigurasi belum."
105
+
106
+ #: admin/views/appearance.php:62
107
+ msgid "Favicon generation"
108
+ msgstr "generasi favicon"
109
+
110
+ #: admin/views/appearance.php:64
111
+ msgid "You can replace the existing favicon."
112
+ msgstr "Anda dapat mengganti favicon yang ada."
113
+
114
+ #: admin/views/appearance.php:71
115
+ msgid "Master picture URL"
116
+ msgstr "URL gambar Guru"
117
+
118
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
119
+ msgid "Select from the Media Library"
120
+ msgstr "Pilih dari Perpustakaan Media"
121
+
122
+ #: admin/views/appearance.php:79
123
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
124
+ msgstr "Mengirimkan gambar persegi, setidaknya 70x70 (disarankan: 260x260 atau lebih)"
125
+
126
+ #: admin/views/appearance.php:81
127
+ msgid "If the picture is on your hard drive, you can leave this field blank and upload the picture from RealFaviconGenerator."
128
+ msgstr "Jika gambar pada hard drive Anda, Anda dapat meninggalkan bidang ini kosong dan meng-upload gambar dari RealFaviconGenerator."
129
+
130
+ #: admin/views/appearance.php:89
131
+ msgid "Favicon files in root directory"
132
+ msgstr "file favicon di direktori root"
133
+
134
+ #: admin/views/appearance.php:94
135
+ msgid "The plugin always stores the favicon files in a dedicated directory."
136
+ msgstr "Plugin selalu menyimpan file favicon di direktori khusus."
137
+
138
+ #: admin/views/appearance.php:96
139
+ msgid "However, if this option is enabled, the plugin takes advantage of the permalink feature and the favicon files appear to be in the root directory"
140
+ msgstr "Namun, jika opsi ini diaktifkan, plugin mengambil keuntungan dari fitur permalink dan file favicon tampak di direktori root"
141
+
142
+ #: admin/views/appearance.php:97
143
+ msgid "recommended"
144
+ msgstr "direkomendasikan"
145
+
146
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
147
+ msgid "Generate favicon"
148
+ msgstr "menghasilkan favicon"
149
+
150
+ #: admin/views/appearance.php:200
151
+ msgid "Preparing master picture..."
152
+ msgstr "Mempersiapkan gambar Master ..."
153
+
154
+ #: admin/views/appearance.php:257
155
+ msgid "An error occured"
156
+ msgstr "Kesalahan terjadi"
157
+
158
+ #: admin/views/appearance.php:268
159
+ msgid "An internal error occurred"
160
+ msgstr "Terjadi kesalahan internal"
161
+
162
+ #: admin/views/settings.php:13
163
+ msgid "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; Favicon</a>"
164
+ msgstr "Apakah Anda ingin setup favicon Anda? Pergi ke <a href=\" %s \"> Penampilan & gt; favicon </a>"
165
+
166
+ #: admin/views/settings.php:22
167
+ msgid "Display update notifications"
168
+ msgstr "pemberitahuan update tampilan"
169
+
170
+ #: admin/views/settings.php:27
171
+ msgid "Get notifications when RealFaviconGenerator is updated. For example, when Apple releases a new version of iOS or a new platform is supported."
172
+ msgstr "Dapatkan pemberitahuan bila RealFaviconGenerator diperbarui. Sebagai contoh, ketika Apple merilis versi baru dari iOS atau platform baru didukung."
173
+
174
+ #: admin/views/settings.php:36
175
+ msgid "Save changes"
176
+ msgstr "Simpan perubahan"
177
+
178
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
179
+ msgid "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the update"
180
+ msgstr "Kunjungi <a href=\" %s \"> perubahan log RFG </a> untuk melihat isi update"
181
+
182
+ #. Plugin Name of the plugin/theme
183
+ msgid "Favicon by RealFaviconGenerator"
184
+ msgstr "Favicon oleh RealFaviconGenerator"
185
+
186
+ #. Plugin URI of the plugin/theme
187
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
188
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
189
+
190
+ #. Description of the plugin/theme
191
+ msgid "Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, Android devices, Windows 8 tablets, etc."
192
+ msgstr "Membuat dan memasang favicon Anda untuk semua platform: PC / Mac tentu saja, tetapi juga iPhone / iPad, perangkat Android, Windows 8 tablet, dll"
193
+
194
+ #. Author of the plugin/theme
195
+ msgid "Philippe Bernard"
196
+ msgstr "Philippe Bernard"
197
+
198
+ #. Author URI of the plugin/theme
199
+ msgid "http://realfavicongenerator.net/"
200
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator-nl_NL.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-nl_NL.po ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014-2016 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon door RealFaviconGenerator 1.2.2\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2014-10-22 20:10:01+00:00\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-03-02 15:00+0100\n"
13
+ "Last-Translator: Axel <axel@eco13.eu>\n"
14
+ "Language-Team: \n"
15
+ "X-Generator: Poedit 1.7.3\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "Language: nl_NL\n"
18
+ "X-Poedit-SourceCharset: UTF-8\n"
19
+
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:65
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:66
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:70
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:69
27
+ msgid "Favicon Settings"
28
+ msgstr "Favicon Instellingen"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:351
31
+ msgid ""
32
+ "<a href=\"%s\" target=\"_blank\">An update is available</a> on "
33
+ "RealFaviconGenerator. You might want to <a href=\"%s\">generate your favicon "
34
+ "again</a>."
35
+ msgstr ""
36
+ "<a href=\"%s\" target=\"_blank\">Een update is beschikbaar</a> op "
37
+ "RealFaviconGenerator. Misschien wil je <a href=\"%s\">je favicon opnieuw "
38
+ "genereren</a>."
39
+
40
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:354
41
+ msgid " | <a href=\"%s\">Hide this notice</a>"
42
+ msgstr " | <a href=\"%s\">Verberg dit bericht</a>"
43
+
44
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:356
45
+ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
46
+ msgstr " | <a href=\"%s\">Hou me niet langer op de hoogte van updates</a>"
47
+
48
+ #: admin/views/appearance.php:11
49
+ msgid "Favicon installation in progress. Please wait..."
50
+ msgstr "Favicon wordt geïnstalleerd. Graag even geduld..."
51
+
52
+ #: admin/views/appearance.php:15
53
+ msgid "Favicon installed!"
54
+ msgstr "Favicon werd geïnstalleerd!"
55
+
56
+ #: admin/views/appearance.php:20 admin/views/appearance.php:31
57
+ msgid "Current favicon"
58
+ msgstr "Huidige favicon"
59
+
60
+ #: admin/views/appearance.php:21 admin/views/appearance.php:34
61
+ msgid "The favicon is up and ready."
62
+ msgstr "De favicon is klaar voor gebruik."
63
+
64
+ #: admin/views/appearance.php:25 admin/views/appearance.php:46
65
+ msgid ""
66
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
67
+ msgstr ""
68
+ "<a %s>Controleer je favicon</a> met de RealFaviconGenerator's favicon "
69
+ "checker."
70
+
71
+ #: admin/views/appearance.php:27 admin/views/appearance.php:49
72
+ msgid "This option works only if your site is accessible from the outside."
73
+ msgstr "Deze optie werkt enkel indien je site van buitenaf toegankelijk is."
74
+
75
+ #: admin/views/appearance.php:36
76
+ msgid "No favicon has been configured yet."
77
+ msgstr "Er werd nog geen favicon geconfigureerd."
78
+
79
+ #: admin/views/appearance.php:56
80
+ msgid "Favicon generation"
81
+ msgstr "Faviconcreatie"
82
+
83
+ #: admin/views/appearance.php:58
84
+ msgid "You can replace the existing favicon."
85
+ msgstr "Je kunt de bestaande favicon vervangen."
86
+
87
+ #: admin/views/appearance.php:65
88
+ msgid "Master picture URL"
89
+ msgstr "URL bronafbeelding"
90
+
91
+ #: admin/views/appearance.php:69 admin/views/appearance.php:70
92
+ msgid "Select from the Media Library"
93
+ msgstr "Selecteer uit de mediabibliotheek"
94
+
95
+ #: admin/views/appearance.php:73
96
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
97
+ msgstr ""
98
+ "Gebruik een vierkant beeld van min. 70x70px (aanbevolen: 260x260 of meer)"
99
+
100
+ #: admin/views/appearance.php:75
101
+ msgid ""
102
+ "If the picture is on your hard drive, you can leave this field blank and "
103
+ "upload the picture from RealFaviconGenerator."
104
+ msgstr ""
105
+ "Staat de afbeelding op je harde schijf, dan kun je dit veld leeg laten en "
106
+ "het beeld vanaf RealFaviconGenerator uploaden."
107
+
108
+ #: admin/views/appearance.php:83
109
+ msgid "Favicon files in root directory"
110
+ msgstr "Faviconbestanden in de root"
111
+
112
+ #: admin/views/appearance.php:88
113
+ msgid "The plugin always stores the favicon files in a dedicated directory."
114
+ msgstr "De plugin slaat de faviconbestanden steeds op in specifieke map."
115
+
116
+ #: admin/views/appearance.php:90
117
+ msgid ""
118
+ "However, if this option is enabled, the plugin takes advantage of the "
119
+ "permalink feature and the favicon files appear to be in the root directory"
120
+ msgstr ""
121
+ "Indien deze optie is ingeschakeld, maakt de plugin evenwel gebruik van de "
122
+ "permalink feature, waardoor het lijkt alsof de faviconbestanden in de root "
123
+ "te vinden zijn"
124
+
125
+ #: admin/views/appearance.php:91
126
+ msgid "recommended"
127
+ msgstr "aanbevolen"
128
+
129
+ #: admin/views/appearance.php:100
130
+ msgid "Generate favicon"
131
+ msgstr "Genereer favicon"
132
+
133
+ #: admin/views/appearance.php:189
134
+ msgid "An error occured"
135
+ msgstr "Er trad een fout op"
136
+
137
+ #: admin/views/appearance.php:200
138
+ msgid "An internal error occurred"
139
+ msgstr "Er trad een interne fout op"
140
+
141
+ #: admin/views/settings.php:13
142
+ msgid ""
143
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
144
+ "Favicon</a>"
145
+ msgstr ""
146
+ "Wil je je favicon installeren? Ga naar <a href=\"%s\">Weergave &gt; Favicon</"
147
+ "a>"
148
+
149
+ #: admin/views/settings.php:22
150
+ msgid "Display update notifications"
151
+ msgstr "Toon updatemeldingen"
152
+
153
+ #: admin/views/settings.php:27
154
+ msgid ""
155
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
156
+ "Apple releases a new version of iOS or a new platform is supported."
157
+ msgstr ""
158
+ "Ontvang een melding als RealFaviconGenerator wordt bijgewerkt, bijvoorbeeld "
159
+ "als Apple een nieuwe iOS versie lanceert, of als een nieuw platform wordt "
160
+ "ondersteund."
161
+
162
+ #: admin/views/settings.php:36
163
+ msgid "Save changes"
164
+ msgstr "Wijzigingen opslaan"
165
+
166
+ #. Plugin Name of the plugin/theme
167
+ msgid "Favicon by RealFaviconGenerator"
168
+ msgstr "Favicon door RealFaviconGenerator"
169
+
170
+ #. Plugin URI of the plugin/theme
171
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
172
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
173
+
174
+ #. Description of the plugin/theme
175
+ msgid ""
176
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
177
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
178
+ msgstr ""
179
+ "Maak en installeer je favicon voor alle platformen: PC en Mac natuurlijk, "
180
+ "maar ook iPhone en iPad, Androidapparaten, Windows 8 tablets, etc."
181
+
182
+ #. Author of the plugin/theme
183
+ msgid "Philippe Bernard"
184
+ msgstr "Philippe Bernard"
185
+
186
+ #. Author URI of the plugin/theme
187
+ msgid "http://realfavicongenerator.net/"
188
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator-pl_PL.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-pl_PL.po ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2016-04-10 20:35+0200\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2016-04-10 21:09+0200\n"
13
+ "Language-Team: \n"
14
+ "X-Generator: Poedit 1.8.7\n"
15
+ "Last-Translator: Maciej Gryniuk <maciejka45@gmail.com>\n"
16
+ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n"
17
+ "%100<10 || n%100>=20) ? 1 : 2);\n"
18
+ "Language: pl\n"
19
+
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
27
+ msgid "Favicon Settings"
28
+ msgstr "Ustawienia favicon"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
31
+ msgid ""
32
+ "Nonce was not recognized. This case is supposed to happen only in case of "
33
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
34
+ "contact@realfavicongenerator.net\\\">contact us</a>."
35
+ msgstr ""
36
+ "Identyfikator jednorazowy nie został rozpoznany. Prawdopodobnie jedyną tego "
37
+ "przyczyną może być atak XSS. Jeżeli sądzisz, że coś działa nieprawidłowo, "
38
+ "prosimy o <a href=\\\"mailto:contact@realfavicongenerator.net\\\">kontakt</"
39
+ "a>."
40
+
41
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
42
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
43
+ msgid "Cannot create directory %s to store the favicon package"
44
+ msgstr "Nie można utworzyć katalogu %s do przechowania paczki favicon"
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
47
+ msgid "An update is available on RealFaviconGenerator:"
48
+ msgstr "Dostępna aktualizacja na RealFaviconGenerator:"
49
+
50
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
51
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
52
+ msgstr "Być może zechcesz <a href=\"%s\">ponownie wygenerować favicon</a>"
53
+
54
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
55
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
56
+ msgid "Hide this notice"
57
+ msgstr "Ukryj to powiadomienie"
58
+
59
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
60
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
61
+ msgid "Do not warn me again in case of update"
62
+ msgstr "Nie powiadamiaj mnie ponownie"
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
65
+ msgid "Your favicon was updated automatically:"
66
+ msgstr "Twój favicon został automatycznie zaktualizowany:"
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
69
+ msgid "Cannot create directory %s to store the favicon package content"
70
+ msgstr ""
71
+ "Nie można utworzyć katalogu %s do przechowania zawartości paczki favicon"
72
+
73
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
74
+ msgid "Unknown reason"
75
+ msgstr "Nieznany powód"
76
+
77
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
78
+ msgid "Error while unziping the favicon package %s to directory %s"
79
+ msgstr "Błąd podczas rozpakowywania paczki favicon %s do katalogu %s"
80
+
81
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
82
+ msgid "Cannot download file at %s"
83
+ msgstr "Nie można pobrać pliku z %s"
84
+
85
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
86
+ msgid "Cannot store downloaded file locally"
87
+ msgstr "Nie można przechować pobranego pliku lokalnie"
88
+
89
+ #: admin/views/appearance.php:11
90
+ msgid "Favicon installation in progress. Please wait..."
91
+ msgstr "Instalacja favicon w toku. Proszę czekać..."
92
+
93
+ #: admin/views/appearance.php:16
94
+ msgid "Favicon installed!"
95
+ msgstr "Favicon zainstalowany!"
96
+
97
+ #: admin/views/appearance.php:18
98
+ msgid ""
99
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
100
+ msgstr ""
101
+ "Podoba Ci się osiągnięty rezultat? Jeżeli tak, będziemy wdzięczni za <a "
102
+ "%s>ocenę wtyczki</a>."
103
+
104
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
105
+ msgid "Current favicon"
106
+ msgstr "Bieżący favicon"
107
+
108
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
109
+ msgid "The favicon is up and ready."
110
+ msgstr "Favicon jest zainstalowany."
111
+
112
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
113
+ msgid ""
114
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
115
+ msgstr "<a %s>Sprawdź swój favicon</a> poprzez system RealFaviconGenerator."
116
+
117
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
118
+ msgid "This option works only if your site is accessible from the outside."
119
+ msgstr ""
120
+ "Ta opcja zadziała, tylko jeżeli Twoja strona jest publicznie dostępna."
121
+
122
+ #: admin/views/appearance.php:42
123
+ msgid "No favicon has been configured yet."
124
+ msgstr "Jeszcze nie skonfigurowano favicon."
125
+
126
+ #: admin/views/appearance.php:62
127
+ msgid "Favicon generation"
128
+ msgstr "Tworzenie favicon'a"
129
+
130
+ #: admin/views/appearance.php:64
131
+ msgid "You can replace the existing favicon."
132
+ msgstr "Możesz zastąpić bieżącego favicon'a."
133
+
134
+ #: admin/views/appearance.php:71
135
+ msgid "Master picture URL"
136
+ msgstr "Adres URL głównej grafiki"
137
+
138
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
139
+ msgid "Select from the Media Library"
140
+ msgstr "Wybierz z Biblioteki mediów"
141
+
142
+ #: admin/views/appearance.php:79
143
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
144
+ msgstr ""
145
+ "Prześlij kwadratową grafikę, wymiarów przynajmniej 70x70 (zalecane: 260x260 "
146
+ "lub więcej)"
147
+
148
+ #: admin/views/appearance.php:81
149
+ msgid ""
150
+ "If the picture is on your hard drive, you can leave this field blank and "
151
+ "upload the picture from RealFaviconGenerator."
152
+ msgstr ""
153
+ "Jeżeli grafika znajduje się na Twoim dysku twardym, możesz zostawić to pole "
154
+ "puste i przesłać ją poprzez RealFaviconGenerator."
155
+
156
+ #: admin/views/appearance.php:89
157
+ msgid "Favicon files in root directory"
158
+ msgstr "Pliki favicon w katalogu głównym"
159
+
160
+ #: admin/views/appearance.php:94
161
+ msgid "The plugin always stores the favicon files in a dedicated directory."
162
+ msgstr "Wtyczka zawsze przechowuje pliki favicon w wydzielonym katalogu."
163
+
164
+ #: admin/views/appearance.php:96
165
+ msgid ""
166
+ "However, if this option is enabled, the plugin takes advantage of the "
167
+ "permalink feature and the favicon files appear to be in the root directory"
168
+ msgstr ""
169
+ "Jednakże, jeżeli aktywujesz tę opcję, wtyczka skorzysta ze struktury "
170
+ "bezpośrednich odnośników i pliki favicon pojawią się w katalogu głównym"
171
+
172
+ #: admin/views/appearance.php:97
173
+ msgid "recommended"
174
+ msgstr "zalecane"
175
+
176
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
177
+ msgid "Generate favicon"
178
+ msgstr "Stwórz favicon"
179
+
180
+ #: admin/views/appearance.php:200
181
+ msgid "Preparing master picture..."
182
+ msgstr "Przygotowywanie głównej grafiki..."
183
+
184
+ #: admin/views/appearance.php:257
185
+ msgid "An error occured"
186
+ msgstr "Wystąpił błąd"
187
+
188
+ #: admin/views/appearance.php:268
189
+ msgid "An internal error occurred"
190
+ msgstr "Wystąpił błąd wewnętrzny"
191
+
192
+ #: admin/views/settings.php:13
193
+ msgid ""
194
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
195
+ "Favicon</a>"
196
+ msgstr ""
197
+ "Chcesz zainstalować swój favicon? Przejdź do <a href=\"%s\">Wygląd &gt; "
198
+ "Favicon</a>"
199
+
200
+ #: admin/views/settings.php:22
201
+ msgid "Display update notifications"
202
+ msgstr "Wyświetlaj powiadomienia o aktualizacji"
203
+
204
+ #: admin/views/settings.php:27
205
+ msgid ""
206
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
207
+ "Apple releases a new version of iOS or a new platform is supported."
208
+ msgstr ""
209
+ "Otrzymuj powiadomienia o aktualizacjach RealFaviconGenerator. Przykładowo - "
210
+ "Apple wydało nową wersję iOS lub wspieramy nową platformę."
211
+
212
+ #: admin/views/settings.php:36
213
+ msgid "Save changes"
214
+ msgstr "Zapisz zmiany"
215
+
216
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
217
+ msgid ""
218
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
219
+ "update"
220
+ msgstr ""
221
+ "Przejdź do <a href=\"%s\">dziennika zmian RFG</a>, aby przejrzeć treść "
222
+ "aktualizacji"
223
+
224
+ #. Plugin Name of the plugin/theme
225
+ msgid "Favicon by RealFaviconGenerator"
226
+ msgstr "Favicon od RealFaviconGenerator"
227
+
228
+ #. Plugin URI of the plugin/theme
229
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
230
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
231
+
232
+ #. Description of the plugin/theme
233
+ msgid ""
234
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
235
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
236
+ msgstr ""
237
+ "Twórz i instaluj favicon'a dla wszystkich platform: PC/Mac, iPhone/iPad, "
238
+ "Android, Windows 8, tablety itp."
239
+
240
+ #. Author of the plugin/theme
241
+ msgid "Philippe Bernard"
242
+ msgstr "Philippe Bernard"
243
+
244
+ #. Author URI of the plugin/theme
245
+ msgid "http://realfavicongenerator.net/"
246
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator-pt_BR.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-pt_BR.po ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Favicon by RealFaviconGenerator\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/favicon-by-"
5
+ "realfavicongenerator\n"
6
+ "POT-Creation-Date: 2014-10-22 20:10:01+00:00\n"
7
+ "PO-Revision-Date: \n"
8
+ "Last-Translator: Techload <contato@techload.com.br>\n"
9
+ "Language-Team: Techload\n"
10
+ "Language: pt_BR\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: 8bit\n"
14
+ "X-Generator: Poedit 1.6.9\n"
15
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
16
+ "X-Poedit-KeywordsList: _;__e\n"
17
+ "X-Poedit-Basepath: .\n"
18
+
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:65
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:66
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:70
22
+ msgid "Favicon"
23
+ msgstr "Favicon"
24
+
25
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:69
26
+ msgid "Favicon Settings"
27
+ msgstr "Configurações do Favicon"
28
+
29
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:351
30
+ msgid ""
31
+ "<a href=\"%s\" target=\"_blank\">An update is available</a> on "
32
+ "RealFaviconGenerator. You might want to <a href=\"%s\">generate your favicon "
33
+ "again</a>."
34
+ msgstr ""
35
+ "<a href=\"%s\" target=\"_blank\">Uma atualização está disponível</a> em "
36
+ "RealFaviconGenerator. Você pode querer <a href=\"%s\">gerar seu favicon "
37
+ "novamente</a>."
38
+
39
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:354
40
+ msgid " | <a href=\"%s\">Hide this notice</a>"
41
+ msgstr " | <a href=\"%s\">Ocultar este aviso</a>"
42
+
43
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:356
44
+ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
45
+ msgstr ""
46
+ " | <a href=\"%s\">Não me avisar novamente quando houver atualizações</a>"
47
+
48
+ #: admin/views/appearance.php:11
49
+ msgid "Favicon installation in progress. Please wait..."
50
+ msgstr "Instalação do Favicon em andamento. Por favor, aguarde..."
51
+
52
+ #: admin/views/appearance.php:15
53
+ msgid "Favicon installed!"
54
+ msgstr "Favicon instalado!"
55
+
56
+ #: admin/views/appearance.php:20 admin/views/appearance.php:31
57
+ msgid "Current favicon"
58
+ msgstr "Favicon atual"
59
+
60
+ #: admin/views/appearance.php:21 admin/views/appearance.php:34
61
+ msgid "The favicon is up and ready."
62
+ msgstr "O favicon está pronto."
63
+
64
+ #: admin/views/appearance.php:25 admin/views/appearance.php:46
65
+ msgid ""
66
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
67
+ msgstr ""
68
+ "<a %s>Verifique o seu favicon</a> com o verificador de favicon do "
69
+ "RealFaviconGenerator."
70
+
71
+ #: admin/views/appearance.php:27 admin/views/appearance.php:49
72
+ msgid "This option works only if your site is accessible from the outside."
73
+ msgstr "Esta opção só funciona se o site está acessível publicamente."
74
+
75
+ #: admin/views/appearance.php:36
76
+ msgid "No favicon has been configured yet."
77
+ msgstr "Nenhum favicon foi configurado ainda."
78
+
79
+ #: admin/views/appearance.php:56
80
+ msgid "Favicon generation"
81
+ msgstr "Geração do Favicon"
82
+
83
+ #: admin/views/appearance.php:58
84
+ msgid "You can replace the existing favicon."
85
+ msgstr "Você pode substituir o favicon existente."
86
+
87
+ #: admin/views/appearance.php:65
88
+ msgid "Master picture URL"
89
+ msgstr "URL da imagem"
90
+
91
+ #: admin/views/appearance.php:69 admin/views/appearance.php:70
92
+ msgid "Select from the Media Library"
93
+ msgstr "Selecione a partir da Biblioteca de Mídia"
94
+
95
+ #: admin/views/appearance.php:73
96
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
97
+ msgstr ""
98
+ "Enviar uma imagem quadrada, pelo menos 70x70 (recomendado: 260x260 ou mais)"
99
+
100
+ #: admin/views/appearance.php:75
101
+ msgid ""
102
+ "If the picture is on your hard drive, you can leave this field blank and "
103
+ "upload the picture from RealFaviconGenerator."
104
+ msgstr ""
105
+ "Se a imagem estiver em seu disco rígido, você pode deixar este campo em "
106
+ "branco e fazer o upload da imagem a partir do RealFaviconGenerator."
107
+
108
+ #: admin/views/appearance.php:83
109
+ msgid "Favicon files in root directory"
110
+ msgstr "Arquivos do favicon no diretório raiz"
111
+
112
+ #: admin/views/appearance.php:88
113
+ msgid "The plugin always stores the favicon files in a dedicated directory."
114
+ msgstr ""
115
+ "O plugin sempre armazena os arquivos favicon em um diretório específico."
116
+
117
+ #: admin/views/appearance.php:90
118
+ msgid ""
119
+ "However, if this option is enabled, the plugin takes advantage of the "
120
+ "permalink feature and the favicon files appear to be in the root directory"
121
+ msgstr ""
122
+ "No entanto, se esta opção estiver habilitada, o plugin aproveita os recursos "
123
+ "do permalink e os arquivos favicon parecem estar no diretório raiz"
124
+
125
+ #: admin/views/appearance.php:91
126
+ msgid "recommended"
127
+ msgstr "recomendado"
128
+
129
+ #: admin/views/appearance.php:100
130
+ msgid "Generate favicon"
131
+ msgstr "Gerar o favicon"
132
+
133
+ #: admin/views/appearance.php:189
134
+ msgid "An error occured"
135
+ msgstr "Ocorreu um erro"
136
+
137
+ #: admin/views/appearance.php:200
138
+ msgid "An internal error occurred"
139
+ msgstr "Ocorreu um erro interno"
140
+
141
+ #: admin/views/settings.php:13
142
+ msgid ""
143
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
144
+ "Favicon</a>"
145
+ msgstr ""
146
+ "Deseja configurar seu favicon? Vá até <a href=\"%s\">Aparência &gt; Favicon</"
147
+ "a>"
148
+
149
+ #: admin/views/settings.php:22
150
+ msgid "Display update notifications"
151
+ msgstr "Exibir notificações de atualizações"
152
+
153
+ #: admin/views/settings.php:27
154
+ msgid ""
155
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
156
+ "Apple releases a new version of iOS or a new platform is supported."
157
+ msgstr ""
158
+ "Receber notificações quando o RealFaviconGenerator for atualizado. Por "
159
+ "exemplo, quando a Apple lançar uma nova versão do iOS ou quando uma nova "
160
+ "plataforma for suportada."
161
+
162
+ #: admin/views/settings.php:36
163
+ msgid "Save changes"
164
+ msgstr "Salvar mudanças"
165
+
166
+ #. Plugin Name of the plugin/theme
167
+ msgid "Favicon by RealFaviconGenerator"
168
+ msgstr "Favicon por RealFaviconGenerator"
169
+
170
+ #. Plugin URI of the plugin/theme
171
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
172
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
173
+
174
+ #. Description of the plugin/theme
175
+ msgid ""
176
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
177
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
178
+ msgstr ""
179
+ "Crie e instale o seu favicon para todas as plataformas: PC/Mac, é claro, mas "
180
+ "também para o iPhone/iPad, dispositivos Android, tablets com Windows 8, etc."
181
+
182
+ #. Author of the plugin/theme
183
+ msgid "Philippe Bernard"
184
+ msgstr "Philippe Bernard"
185
+
186
+ #. Author URI of the plugin/theme
187
+ msgid "http://realfavicongenerator.net/"
188
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator-ru_RU.mo ADDED
Binary file
languages/favicon-by-realfavicongenerator-ru_RU.po ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of Development (trunk) in Russian
2
+ # This file is distributed under the same license as the Development (trunk) package.
3
+ msgid ""
4
+ msgstr ""
5
+ "PO-Revision-Date: 2016-05-17 16:05+0300\n"
6
+ "MIME-Version: 1.0\n"
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
10
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
11
+ "X-Generator: Poedit 1.8.7\n"
12
+ "Project-Id-Version: Development (trunk)\n"
13
+ "POT-Creation-Date: \n"
14
+ "Language-Team: \n"
15
+ "Last-Translator: \n"
16
+ "Language: ru_RU\n"
17
+
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
21
+ msgid "Favicon"
22
+ msgstr "Favicon"
23
+
24
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
25
+ msgid "Favicon Settings"
26
+ msgstr "Настройки Favicon"
27
+
28
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:174
29
+ msgid ""
30
+ "Nonce was not recognized. This case is supposed to happen only in case of "
31
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
32
+ "contact@realfavicongenerator.net\\\">contact us</a>."
33
+ msgstr ""
34
+ "Специальное слово не распознается. Такое происхоит только в случае атак "
35
+ "XSS. Если Вам кажется, что что-то не так, пожалуйста, <a href=\"\\\"mailto:"
36
+ "contact@realfavicongenerator.net\\\"\">свяжитесь с нами</a>."
37
+
38
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
39
+ #: public/class-favicon-by-realfavicongenerator-common.php:415
40
+ msgid "Cannot create directory %s to store the favicon package"
41
+ msgstr "Не удается создать каталог %s для хранения пакета значков"
42
+
43
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:434
44
+ msgid "An update is available on RealFaviconGenerator:"
45
+ msgstr "Обновление доступно на RealFaviconGenerator:"
46
+
47
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:440
48
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
49
+ msgstr "Может потребоваться <a href=\"%s\">создать свой значок снова</a>"
50
+
51
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:446
52
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:469
53
+ msgid "Hide this notice"
54
+ msgstr "Скрыть это уведомление"
55
+
56
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:450
57
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:473
58
+ msgid "Do not warn me again in case of update"
59
+ msgstr "Не предупреждать в случае обновления"
60
+
61
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:463
62
+ msgid "Your favicon was updated automatically:"
63
+ msgstr "Ваш значок был обновлен автоматически:"
64
+
65
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
66
+ msgid "Cannot create directory %s to store the favicon package content"
67
+ msgstr "Не удается создать каталог %s для хранения содержимого пакета значков"
68
+
69
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
70
+ msgid "Unknown reason"
71
+ msgstr "Неизвестная причина"
72
+
73
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
74
+ msgid "Error while unziping the favicon package %s to directory %s"
75
+ msgstr "Ошибка при распаковке favicon пакета в директорию % S"
76
+
77
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
78
+ msgid "Cannot download file at %s"
79
+ msgstr "Не удается загрузить файл на %s"
80
+
81
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
82
+ msgid "Cannot store downloaded file locally"
83
+ msgstr "Не удается сохранить загруженный файл локально"
84
+
85
+ #: admin/views/appearance.php:11
86
+ msgid "Favicon installation in progress. Please wait..."
87
+ msgstr "Идет установка Favicon. Пожалуйста, подождите..."
88
+
89
+ #: admin/views/appearance.php:16
90
+ msgid "Favicon installed!"
91
+ msgstr "Favicon установлен!"
92
+
93
+ #: admin/views/appearance.php:18
94
+ msgid ""
95
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
96
+ msgstr ""
97
+ "Вам нравится реультат? Если да, то вам хотелось бы <a %s> оценить плагин </"
98
+ "a>?"
99
+
100
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
101
+ msgid "Current favicon"
102
+ msgstr "Текущий значок"
103
+
104
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
105
+ msgid "The favicon is up and ready."
106
+ msgstr "Favicon установлен и готов к работе."
107
+
108
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
109
+ msgid ""
110
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
111
+ msgstr "<a %s> Проверьте favicon</a> через RealFaviconGenerator favicon."
112
+
113
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
114
+ msgid "This option works only if your site is accessible from the outside."
115
+ msgstr "Эта опция работает только для сайтов, которые доступны извне."
116
+
117
+ #: admin/views/appearance.php:42
118
+ msgid "No favicon has been configured yet."
119
+ msgstr "Ни один значок пока не настроен."
120
+
121
+ #: admin/views/appearance.php:62
122
+ msgid "Favicon generation"
123
+ msgstr "Favicon генерация "
124
+
125
+ #: admin/views/appearance.php:64
126
+ msgid "You can replace the existing favicon."
127
+ msgstr "Вы можете заменить существующий фавикон."
128
+
129
+ #: admin/views/appearance.php:71
130
+ msgid "Master picture URL"
131
+ msgstr "URL главного изображения"
132
+
133
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
134
+ msgid "Select from the Media Library"
135
+ msgstr "Выберите из библиотеки мультимедиа"
136
+
137
+ #: admin/views/appearance.php:79
138
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
139
+ msgstr ""
140
+ "Добавьте квадратную картину размером не менее 70 х 70 (рекомендованный "
141
+ "размер: 260x260 или более)"
142
+
143
+ #: admin/views/appearance.php:81
144
+ msgid ""
145
+ "If the picture is on your hard drive, you can leave this field blank and "
146
+ "upload the picture from RealFaviconGenerator."
147
+ msgstr ""
148
+ "Если изображение находится на вашем жестком диске, вы можете оставить это "
149
+ "поле пустым и загрузить изображение из RealFaviconGenerator."
150
+
151
+ #: admin/views/appearance.php:89
152
+ msgid "Favicon files in root directory"
153
+ msgstr "Favicon файлы в корневой директории"
154
+
155
+ #: admin/views/appearance.php:94
156
+ msgid "The plugin always stores the favicon files in a dedicated directory."
157
+ msgstr "Плагин всегда сохраняет favicon файлы в отдельную директорию."
158
+
159
+ #: admin/views/appearance.php:96
160
+ msgid ""
161
+ "However, if this option is enabled, the plugin takes advantage of the "
162
+ "permalink feature and the favicon files appear to be in the root directory"
163
+ msgstr ""
164
+ "Однако, если эта опция включена, плагин использует преимущества функции "
165
+ "постоянной ссылки и фавикон файлы появятся в корневом каталоге"
166
+
167
+ #: admin/views/appearance.php:97
168
+ msgid "recommended"
169
+ msgstr "рекомендуется"
170
+
171
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
172
+ msgid "Generate favicon"
173
+ msgstr "Генерировать favicon"
174
+
175
+ #: admin/views/appearance.php:200
176
+ msgid "Preparing master picture..."
177
+ msgstr "Подготовка главного изображения ..."
178
+
179
+ #: admin/views/appearance.php:257
180
+ msgid "An error occured"
181
+ msgstr "Произошла ошибка"
182
+
183
+ #: admin/views/appearance.php:268
184
+ msgid "An internal error occurred"
185
+ msgstr "Произошла внутренняя ошибка"
186
+
187
+ #: admin/views/settings.php:13
188
+ msgid ""
189
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
190
+ "Favicon</a>"
191
+ msgstr ""
192
+ "Вы хотите настроить свой favicon? Перейти к <a href=\"%s\"> Appearance &gt; "
193
+ "Favicon </a>"
194
+
195
+ #: admin/views/settings.php:22
196
+ msgid "Display update notifications"
197
+ msgstr "Отображать уведомления об обновлениях"
198
+
199
+ #: admin/views/settings.php:27
200
+ msgid ""
201
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
202
+ "Apple releases a new version of iOS or a new platform is supported."
203
+ msgstr ""
204
+ "Получать уведомления, когда RealFaviconGenerator обновляется. Например, "
205
+ "когда компания Apple выпускает новую версию iOS или поддержку новой "
206
+ "платформы."
207
+
208
+ #: admin/views/settings.php:36
209
+ msgid "Save changes"
210
+ msgstr "Сохранить изменения"
211
+
212
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
213
+ msgid ""
214
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
215
+ "update"
216
+ msgstr ""
217
+ "Посетите <a href=\"%s\">журнал изменений RFG</a> чтобы просмотреть "
218
+ "содержимое обновления"
219
+
220
+ #. Plugin Name of the plugin/theme
221
+ msgid "Favicon by RealFaviconGenerator"
222
+ msgstr "Favicon от RealFaviconGenerator"
223
+
224
+ #. Plugin URI of the plugin/theme
225
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
226
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
227
+
228
+ #. Description of the plugin/theme
229
+ msgid ""
230
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
231
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
232
+ msgstr ""
233
+ "Создайте и установите фавикон на всех платформах: конечно, PC / Mac, но так "
234
+ "же и на iPhone / Ipad, Android устройствах, Windows 8 планшетах и т.д."
235
+
236
+ #. Author of the plugin/theme
237
+ msgid "Philippe Bernard"
238
+ msgstr "Филиппе Бернар"
239
+
240
+ #. Author URI of the plugin/theme
241
+ msgid "http://realfavicongenerator.net/"
242
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator-sv_SE.mo CHANGED
Binary file
languages/favicon-by-realfavicongenerator-sv_SE.po CHANGED
@@ -1,124 +1,186 @@
1
- # Copyright (C) 2014 Favicon by RealFaviconGenerator
2
- # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Favicon by RealFaviconGenerator 1.0.4\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
- "realfavicongenerator\n"
8
- "POT-Creation-Date: 2014-05-23 13:22:05+00:00\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2014-06-05 12:24+0100\n"
13
- "Last-Translator: Linus <linus@cutup.se>\n"
14
- "Language-Team: Linus <linus@cutup.se>\n"
15
- "Language: sv_SE\n"
16
- "X-Generator: Poedit 1.6.5\n"
17
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
- "X-Poedit-SourceCharset: UTF-8\n"
19
-
20
- #: admin/class-favicon-by-realfavicongenerator-admin.php:48
21
- msgid "Favicon Settings"
22
- msgstr "Favicon-inställningar"
23
-
24
- #: admin/class-favicon-by-realfavicongenerator-admin.php:49
25
- msgid "Favicon"
26
- msgstr "Favicon"
27
-
28
- #: admin/views/settings.php:11
29
- msgid "Favicon installation in progress. Please wait..."
30
- msgstr "Favicon installeras just nu. Var vänlig vänta..."
31
-
32
- #: admin/views/settings.php:15
33
- msgid "Favicon installed!"
34
- msgstr "Favicon installerad!"
35
-
36
- #: admin/views/settings.php:20 admin/views/settings.php:25
37
- msgid "Current favicon"
38
- msgstr "Aktuell favicon"
39
-
40
- #: admin/views/settings.php:21 admin/views/settings.php:28
41
- msgid "The favicon is up and ready."
42
- msgstr "Favicon är uppladdad och redo."
43
-
44
- #: admin/views/settings.php:30
45
- msgid "No favicon has been configured yet."
46
- msgstr "Ingen favicon har konfigurerats ännu."
47
-
48
- #: admin/views/settings.php:43
49
- msgid "Favicon generation"
50
- msgstr "Genererande av favicon"
51
-
52
- #: admin/views/settings.php:45
53
- msgid "You can replace the existing favicon."
54
- msgstr "Du kan ersätta den favicon som existerar."
55
-
56
- #: admin/views/settings.php:52
57
- msgid "Master picture URL"
58
- msgstr "Originalbildlänk"
59
-
60
- #: admin/views/settings.php:56 admin/views/settings.php:57
61
- msgid "Select from the Media Library"
62
- msgstr "Välj från Mediabiblioteket"
63
-
64
- #: admin/views/settings.php:60
65
- msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
66
- msgstr ""
67
- "Skicka in en kvadratisk bild, minst 70x70 (rekommenderat: 260x260 eller "
68
- "högre)"
69
-
70
- #: admin/views/settings.php:62
71
- msgid ""
72
- "If the picture is on your hard drive, you can leave this field blank and "
73
- "upload the picture from RealFaviconGenerator."
74
- msgstr ""
75
- "Om bilden finns din hårddisk kan du lämna fältet blankt och ladda upp "
76
- "bilden från RealFaviconGenerator."
77
-
78
- #: admin/views/settings.php:70
79
- msgid "Favicon files in root directory"
80
- msgstr "Favicon-filer i rotmappen"
81
-
82
- #: admin/views/settings.php:75
83
- msgid "The plugin always stores the favicon files in a dedicated directory."
84
- msgstr "Tillägget sparar alltid favicon-filerna i en dedikerad mapp."
85
-
86
- #: admin/views/settings.php:77
87
- msgid ""
88
- "However, if this option is enabled, the plugin takes advantage of the "
89
- "permalink feature and the favicon files appear to be in the root directory"
90
- msgstr ""
91
- "Hursomhelst, om detta tillval är aktiverat använder tillägget sig av "
92
- "permalänk-funktionen och favicon-filerna ser ut att finnas i rotmappen"
93
-
94
- #: admin/views/settings.php:78
95
- msgid "recommended"
96
- msgstr "rekommenderat"
97
-
98
- #: admin/views/settings.php:87
99
- msgid "Generate favicon"
100
- msgstr "Generera favicon"
101
-
102
- #. Plugin Name of the plugin/theme
103
- msgid "Favicon by RealFaviconGenerator"
104
- msgstr "Favicon av RealFaviconGenerator"
105
-
106
- #. Plugin URI of the plugin/theme
107
- msgid "http://realfavicongenerator.net/extensions/wordpress"
108
- msgstr "http://realfavicongenerator.net/extensions/wordpress"
109
-
110
- #. Description of the plugin/theme
111
- msgid ""
112
- "Create and install your favicon for all platforms: PC/Mac of course, but "
113
- "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
114
- msgstr ""
115
- "Skapa och installera din favicon för alla plattformar: PC/Mac såklart, men "
116
- "också iPhone/iPad, Android-enheter, Windows 8-surfplattor etc."
117
-
118
- #. Author of the plugin/theme
119
- msgid "Philippe Bernard"
120
- msgstr "Philippe Bernard"
121
-
122
- #. Author URI of the plugin/theme
123
- msgid "http://realfavicongenerator.net/"
124
- msgstr "http://realfavicongenerator.net/"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014-2016 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.0.4\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2014-10-22 20:10:01+00:00\n"
9
+ "PO-Revision-Date: 2014-11-15 09:54+0100\n"
10
+ "Last-Translator: Linus Wileryd <linus@cutup.se>\n"
11
+ "Language-Team: Linus <linus@cutup.se>\n"
12
+ "Language: sv_SE\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "X-Generator: Poedit 1.6.10\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "X-Poedit-SourceCharset: UTF-8\n"
19
+
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:65
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:66
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:70
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:69
27
+ msgid "Favicon Settings"
28
+ msgstr "Favicon-inställningar"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:351
31
+ msgid ""
32
+ "<a href=\"%s\" target=\"_blank\">An update is available</a> on "
33
+ "RealFaviconGenerator. You might want to <a href=\"%s\">generate your favicon "
34
+ "again</a>."
35
+ msgstr ""
36
+ "<a href=\"%s\" target=\"_blank\">En uppdatering finns tillgänglig</a> hos "
37
+ "RealFaviconGenerator. Du vill förmodligen <a href=\"%s\">generera din "
38
+ "favicon på nytt</a>."
39
+
40
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:354
41
+ msgid " | <a href=\"%s\">Hide this notice</a>"
42
+ msgstr " | <a href=\"%s\">Dölj denna notis</a>"
43
+
44
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:356
45
+ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
46
+ msgstr " | <a href=\"%s\">Varna mig inte igen om ev. uppdateringar</a>"
47
+
48
+ #: admin/views/appearance.php:11
49
+ msgid "Favicon installation in progress. Please wait..."
50
+ msgstr "Favicon installeras just nu. Var vänlig vänta..."
51
+
52
+ #: admin/views/appearance.php:15
53
+ msgid "Favicon installed!"
54
+ msgstr "Favicon installerad!"
55
+
56
+ #: admin/views/appearance.php:20 admin/views/appearance.php:31
57
+ msgid "Current favicon"
58
+ msgstr "Aktuell favicon"
59
+
60
+ #: admin/views/appearance.php:21 admin/views/appearance.php:34
61
+ msgid "The favicon is up and ready."
62
+ msgstr "Favicon är uppladdad och redo."
63
+
64
+ #: admin/views/appearance.php:25 admin/views/appearance.php:46
65
+ msgid ""
66
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
67
+ msgstr ""
68
+ "<a %s>Granska din favicon</a> med RealFaviconGenerators favicon-granskare."
69
+
70
+ #: admin/views/appearance.php:27 admin/views/appearance.php:49
71
+ msgid "This option works only if your site is accessible from the outside."
72
+ msgstr "Detta tillval fungerar endast om din sajt är åtkomlig utifrån."
73
+
74
+ #: admin/views/appearance.php:36
75
+ msgid "No favicon has been configured yet."
76
+ msgstr "Ingen favicon har konfigurerats ännu."
77
+
78
+ #: admin/views/appearance.php:56
79
+ msgid "Favicon generation"
80
+ msgstr "Genererande av favicon"
81
+
82
+ #: admin/views/appearance.php:58
83
+ msgid "You can replace the existing favicon."
84
+ msgstr "Du kan ersätta den favicon som existerar."
85
+
86
+ #: admin/views/appearance.php:65
87
+ msgid "Master picture URL"
88
+ msgstr "Originalbildlänk"
89
+
90
+ #: admin/views/appearance.php:69 admin/views/appearance.php:70
91
+ msgid "Select from the Media Library"
92
+ msgstr "Välj från Mediabiblioteket"
93
+
94
+ #: admin/views/appearance.php:73
95
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
96
+ msgstr ""
97
+ "Skicka in en kvadratisk bild, minst 70x70 (rekommenderat: 260x260 eller "
98
+ "högre)"
99
+
100
+ #: admin/views/appearance.php:75
101
+ msgid ""
102
+ "If the picture is on your hard drive, you can leave this field blank and "
103
+ "upload the picture from RealFaviconGenerator."
104
+ msgstr ""
105
+ "Om bilden finns på din hårddisk kan du lämna fältet blankt och ladda upp "
106
+ "bilden från RealFaviconGenerator."
107
+
108
+ #: admin/views/appearance.php:83
109
+ msgid "Favicon files in root directory"
110
+ msgstr "Favicon-filer i rotmappen"
111
+
112
+ #: admin/views/appearance.php:88
113
+ msgid "The plugin always stores the favicon files in a dedicated directory."
114
+ msgstr "Tillägget sparar alltid favicon-filerna i en dedikerad mapp."
115
+
116
+ #: admin/views/appearance.php:90
117
+ msgid ""
118
+ "However, if this option is enabled, the plugin takes advantage of the "
119
+ "permalink feature and the favicon files appear to be in the root directory"
120
+ msgstr ""
121
+ "Hursomhelst, om detta tillval är aktiverat använder tillägget sig av "
122
+ "permalänk-funktionen och favicon-filerna ser ut att finnas i rotmappen"
123
+
124
+ #: admin/views/appearance.php:91
125
+ msgid "recommended"
126
+ msgstr "rekommenderat"
127
+
128
+ #: admin/views/appearance.php:100
129
+ msgid "Generate favicon"
130
+ msgstr "Generera favicon"
131
+
132
+ #: admin/views/appearance.php:189
133
+ msgid "An error occured"
134
+ msgstr "Ett fel uppstod"
135
+
136
+ #: admin/views/appearance.php:200
137
+ msgid "An internal error occurred"
138
+ msgstr "Ett internt fel uppstod"
139
+
140
+ #: admin/views/settings.php:13
141
+ msgid ""
142
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
143
+ "Favicon</a>"
144
+ msgstr ""
145
+ "Vill du ställa in din favicon? Gå till <a href=\"%s\">Utseende &gt; Favicon</"
146
+ "a>"
147
+
148
+ #: admin/views/settings.php:22
149
+ msgid "Display update notifications"
150
+ msgstr "Visa uppdateringsnotiser"
151
+
152
+ #: admin/views/settings.php:27
153
+ msgid ""
154
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
155
+ "Apple releases a new version of iOS or a new platform is supported."
156
+ msgstr ""
157
+ "Få notifieringar när RealFaviconGenerator uppdateras t.ex. när Apple släpper "
158
+ "en ny version av iOS eller att det införs stöd för en ny plattform."
159
+
160
+ #: admin/views/settings.php:36
161
+ msgid "Save changes"
162
+ msgstr "Spara ändringar"
163
+
164
+ #. Plugin Name of the plugin/theme
165
+ msgid "Favicon by RealFaviconGenerator"
166
+ msgstr "Favicon av RealFaviconGenerator"
167
+
168
+ #. Plugin URI of the plugin/theme
169
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
170
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
171
+
172
+ #. Description of the plugin/theme
173
+ msgid ""
174
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
175
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
176
+ msgstr ""
177
+ "Skapa och installera din favicon för alla plattformar: PC/Mac såklart, men "
178
+ "också iPhone/iPad, Android-enheter, Windows 8-surfplattor etc."
179
+
180
+ #. Author of the plugin/theme
181
+ msgid "Philippe Bernard"
182
+ msgstr "Philippe Bernard"
183
+
184
+ #. Author URI of the plugin/theme
185
+ msgid "http://realfavicongenerator.net/"
186
+ msgstr "http://realfavicongenerator.net/"
languages/favicon-by-realfavicongenerator.pot ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2015-06-24 08:06:10+00:00\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+
16
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
17
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
19
+ msgid "Favicon"
20
+ msgstr ""
21
+
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
23
+ msgid "Favicon Settings"
24
+ msgstr ""
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
27
+ msgid ""
28
+ "Nonce was not recognized. This case is supposed to happen only in case of "
29
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
30
+ "contact@realfavicongenerator.net\\\">contact us</a>."
31
+ msgstr ""
32
+
33
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
34
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
35
+ msgid "Cannot create directory %s to store the favicon package"
36
+ msgstr ""
37
+
38
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
39
+ msgid "An update is available on RealFaviconGenerator:"
40
+ msgstr ""
41
+
42
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
43
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
44
+ msgstr ""
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
47
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
48
+ msgid "Hide this notice"
49
+ msgstr ""
50
+
51
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
52
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
53
+ msgid "Do not warn me again in case of update"
54
+ msgstr ""
55
+
56
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
57
+ msgid "Your favicon was updated automatically:"
58
+ msgstr ""
59
+
60
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
61
+ msgid "Cannot create directory %s to store the favicon package content"
62
+ msgstr ""
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
65
+ msgid "Unknown reason"
66
+ msgstr ""
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
69
+ msgid "Error while unziping the favicon package %s to directory %s"
70
+ msgstr ""
71
+
72
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
73
+ msgid "Cannot download file at %s"
74
+ msgstr ""
75
+
76
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
77
+ msgid "Cannot store downloaded file locally"
78
+ msgstr ""
79
+
80
+ #: admin/views/appearance.php:11
81
+ msgid "Favicon installation in progress. Please wait..."
82
+ msgstr ""
83
+
84
+ #: admin/views/appearance.php:16
85
+ msgid "Favicon installed!"
86
+ msgstr ""
87
+
88
+ #: admin/views/appearance.php:18
89
+ msgid ""
90
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
91
+ msgstr ""
92
+
93
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
94
+ msgid "Current favicon"
95
+ msgstr ""
96
+
97
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
98
+ msgid "The favicon is up and ready."
99
+ msgstr ""
100
+
101
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
102
+ msgid ""
103
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
104
+ msgstr ""
105
+
106
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
107
+ msgid "This option works only if your site is accessible from the outside."
108
+ msgstr ""
109
+
110
+ #: admin/views/appearance.php:42
111
+ msgid "No favicon has been configured yet."
112
+ msgstr ""
113
+
114
+ #: admin/views/appearance.php:62
115
+ msgid "Favicon generation"
116
+ msgstr ""
117
+
118
+ #: admin/views/appearance.php:64
119
+ msgid "You can replace the existing favicon."
120
+ msgstr ""
121
+
122
+ #: admin/views/appearance.php:71
123
+ msgid "Master picture URL"
124
+ msgstr ""
125
+
126
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
127
+ msgid "Select from the Media Library"
128
+ msgstr ""
129
+
130
+ #: admin/views/appearance.php:79
131
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
132
+ msgstr ""
133
+
134
+ #: admin/views/appearance.php:81
135
+ msgid ""
136
+ "If the picture is on your hard drive, you can leave this field blank and "
137
+ "upload the picture from RealFaviconGenerator."
138
+ msgstr ""
139
+
140
+ #: admin/views/appearance.php:89
141
+ msgid "Favicon files in root directory"
142
+ msgstr ""
143
+
144
+ #: admin/views/appearance.php:94
145
+ msgid "The plugin always stores the favicon files in a dedicated directory."
146
+ msgstr ""
147
+
148
+ #: admin/views/appearance.php:96
149
+ msgid ""
150
+ "However, if this option is enabled, the plugin takes advantage of the "
151
+ "permalink feature and the favicon files appear to be in the root directory"
152
+ msgstr ""
153
+
154
+ #: admin/views/appearance.php:97
155
+ msgid "recommended"
156
+ msgstr ""
157
+
158
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
159
+ msgid "Generate favicon"
160
+ msgstr ""
161
+
162
+ #: admin/views/appearance.php:200
163
+ msgid "Preparing master picture..."
164
+ msgstr ""
165
+
166
+ #: admin/views/appearance.php:257
167
+ msgid "An error occured"
168
+ msgstr ""
169
+
170
+ #: admin/views/appearance.php:268
171
+ msgid "An internal error occurred"
172
+ msgstr ""
173
+
174
+ #: admin/views/settings.php:13
175
+ msgid ""
176
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
177
+ "Favicon</a>"
178
+ msgstr ""
179
+
180
+ #: admin/views/settings.php:22
181
+ msgid "Display update notifications"
182
+ msgstr ""
183
+
184
+ #: admin/views/settings.php:27
185
+ msgid ""
186
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
187
+ "Apple releases a new version of iOS or a new platform is supported."
188
+ msgstr ""
189
+
190
+ #: admin/views/settings.php:36
191
+ msgid "Save changes"
192
+ msgstr ""
193
+
194
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
195
+ msgid ""
196
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
197
+ "update"
198
+ msgstr ""
199
+
200
+ #. Plugin Name of the plugin/theme
201
+ msgid "Favicon by RealFaviconGenerator"
202
+ msgstr ""
203
+
204
+ #. Plugin URI of the plugin/theme
205
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
206
+ msgstr ""
207
+
208
+ #. Description of the plugin/theme
209
+ msgid ""
210
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
211
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
212
+ msgstr ""
213
+
214
+ #. Author of the plugin/theme
215
+ msgid "Philippe Bernard"
216
+ msgstr ""
217
+
218
+ #. Author URI of the plugin/theme
219
+ msgid "http://realfavicongenerator.net/"
220
+ msgstr ""
public/class-favicon-by-realfavicongenerator-common.php CHANGED
@@ -1,25 +1,57 @@
1
  <?php
2
- // Copyright 2014 RealFaviconGenerator
3
 
4
  class Favicon_By_RealFaviconGenerator_Common {
5
-
6
  const PLUGIN_PREFIX = 'fbrfg';
7
 
8
- const OPTION_FAVICON_CONFIGURED = 'fbrfg_favicon_configured';
9
- const OPTION_FAVICON_IN_ROOT = 'fbrfg_favicon_in_root';
10
- const OPTION_PREVIEW_FILE_NAME = 'fbrfg_preview_file_name';
11
- const OPTION_HTML_CODE = 'fbrfg_html_code';
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
  public static function get_options_list() {
14
  return array(
15
- Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED,
16
- Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT,
17
  Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME,
18
- Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE );
 
 
 
 
 
 
 
 
19
  }
20
 
21
  const PLUGIN_SLUG = 'favicon-by-realfavicongenerator';
22
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  /**
24
  * Indicate if a favicon was configured.
25
  */
@@ -36,11 +68,154 @@ class Favicon_By_RealFaviconGenerator_Common {
36
  return ( $opt == 1 ) && $this->is_favicon_configured();
37
  }
38
 
39
- public function set_favicon_configured( $configured = true, $favicon_in_root = false ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED,
41
  $configured ? 1 : 0 );
42
  update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT,
43
  $favicon_in_root ? 1 : 0 );
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
46
  public function is_preview_available() {
@@ -53,7 +228,7 @@ class Favicon_By_RealFaviconGenerator_Common {
53
  }
54
 
55
  public function set_preview_file_name($preview_file_name) {
56
- update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME,
57
  $preview_file_name);
58
  }
59
 
@@ -92,7 +267,7 @@ class Favicon_By_RealFaviconGenerator_Common {
92
  */
93
  public static function get_files_dir() {
94
  $up_dir = wp_upload_dir();
95
- return $up_dir['basedir'] . DIRECTORY_SEPARATOR . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . DIRECTORY_SEPARATOR;
96
  }
97
 
98
  /**
@@ -100,18 +275,26 @@ class Favicon_By_RealFaviconGenerator_Common {
100
  */
101
  public static function get_files_url() {
102
  $up_dir = wp_upload_dir();
103
- return $up_dir['baseurl'] . DIRECTORY_SEPARATOR . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . DIRECTORY_SEPARATOR;
 
 
 
 
 
 
 
104
  }
105
 
106
  public static function get_tmp_dir() {
107
- return Favicon_By_RealFaviconGenerator_Common::get_files_dir() . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR;
108
  }
109
 
110
  public static function remove_directory($directory) {
111
  foreach( scandir( $directory ) as $v ) {
112
  if ( is_dir( $directory . DIRECTORY_SEPARATOR . $v ) ) {
113
  if ( $v != '.' && $v != '..' ) {
114
- Favicon_By_RealFaviconGenerator_Common::remove_directory( $directory . DIRECTORY_SEPARATOR . $v );
 
115
  }
116
  }
117
  else {
@@ -130,9 +313,160 @@ class Favicon_By_RealFaviconGenerator_Common {
130
  $domain = Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG;
131
  $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
132
 
133
- load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
134
- load_plugin_textdomain( $domain, FALSE, basename( plugin_dir_path( dirname( __FILE__ ) ) ) . '/languages/' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
 
 
 
 
 
136
  }
137
 
138
  }
1
  <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
 
4
  class Favicon_By_RealFaviconGenerator_Common {
5
+
6
  const PLUGIN_PREFIX = 'fbrfg';
7
 
8
+ const OPTION_FAVICON_CONFIGURED = 'fbrfg_favicon_configured';
9
+ const OPTION_FAVICON_IN_ROOT = 'fbrfg_favicon_in_root';
10
+ const OPTION_PREVIEW_FILE_NAME = 'fbrfg_preview_file_name';
11
+ const OPTION_HTML_CODE = 'fbrfg_html_code';
12
+ const OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST = 'fbrfg_favicon_non_interactive_api_request';
13
+
14
+ const OPTION_FAVICON_CURRENT_VERSION = 'fbrfg_favicon_current_version';
15
+ const OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM = 'fbrfg_most_recent_automatic_update_from';
16
+ const OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO = 'fbrfg_most_recent_automatic_update_to';
17
+ const OPTION_LATEST_MANUAL_AVAILABLE_UPDATE = 'fbrfg_latest_manual_available_update';
18
+ const OPTION_UPDATES_DATA = 'fbrfg_updates_data';
19
+ const OPTION_UPDATES_LIST = 'fbrfg_updates_list';
20
+
21
+ const META_NO_UPDATE_NOTICE_FOR_VERSION = 'fbrfg_ignore_update_notice_';
22
+ const META_NO_AUTOMATIC_UPDATE_NOTICE_FOR_VERSION = 'fbrfg_ignore_automatic_update_notice_';
23
+ const META_NO_UPDATE_NOTICE = 'fbrfg_no_update_notice';
24
 
25
  public static function get_options_list() {
26
  return array(
27
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED,
28
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT,
29
  Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME,
30
+ Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE,
31
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST,
32
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CURRENT_VERSION,
33
+ Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM,
34
+ Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO,
35
+ Favicon_By_RealFaviconGenerator_Common::OPTION_LATEST_MANUAL_AVAILABLE_UPDATE,
36
+ Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA,
37
+ Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST,
38
+ Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE );
39
  }
40
 
41
  const PLUGIN_SLUG = 'favicon-by-realfavicongenerator';
42
 
43
+ const ACTION_CHECK_FOR_UPDATE = 'fbrfg_check_for_updates';
44
+
45
+ const RFG_DEBUG = 'false';
46
+
47
+ public function log_info( $message ) {
48
+ if ( ( ( constant( 'WP_DEBUG') == 'true' ) || ( constant( 'WP_DEBUG') == 1 ) ) &&
49
+ ( ( constant( 'Favicon_By_RealFaviconGenerator_Common::RFG_DEBUG') == 'true' ) ||
50
+ ( constant( 'Favicon_By_RealFaviconGenerator_Common::RFG_DEBUG') == 1 ) ) ) {
51
+ error_log( 'RealFaviconGenerator - ' . $message );
52
+ }
53
+ }
54
+
55
  /**
56
  * Indicate if a favicon was configured.
57
  */
68
  return ( $opt == 1 ) && $this->is_favicon_configured();
69
  }
70
 
71
+ public function get_favicon_current_version() {
72
+ // Before the "version" feature was implemented, all favicons generated by the plugin
73
+ // were generated with RFG v0.7
74
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CURRENT_VERSION, "0.7" );
75
+ }
76
+
77
+ public function set_favicon_current_version( $version ) {
78
+ return update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CURRENT_VERSION, $version );
79
+ }
80
+
81
+ public function set_most_recent_automatic_update( $from_version, $to_version ) {
82
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM,
83
+ $from_version );
84
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO,
85
+ $to_version );
86
+ }
87
+
88
+ /**
89
+ * Return the last automatic update that *has been* run.
90
+ * If favicon was automatically updated from version 0.6 to 0.8, this function returns array('0.6', '0.8').
91
+ */
92
+ public function get_most_recent_automatic_update() {
93
+ $from = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM );
94
+ $to = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO );
95
+ return ( ( $from == NULL ) || ( $to == NULL ) ) ? NULL : array( $from, $to );
96
+ }
97
+
98
+ public function set_latest_manual_available_update( $version ) {
99
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_LATEST_MANUAL_AVAILABLE_UPDATE,
100
+ $version );
101
+ }
102
+
103
+ /**
104
+ * Return the lastest available update (to be proposed to the user).
105
+ */
106
+ public function get_latest_manual_available_update() {
107
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_LATEST_MANUAL_AVAILABLE_UPDATE );
108
+ }
109
+
110
+ /**
111
+ * Save the versions data, as returned by https://realfavicongenerator.net/api/versions
112
+ */
113
+ public function set_updates_data( $versions_data ) {
114
+ $this->log_info( 'Set updates data' );
115
+
116
+ $data = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA );
117
+ if ( ! $data ) {
118
+ $data = array();
119
+ }
120
+ $list = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST );
121
+ if ( ! $list ) {
122
+ $list = array();
123
+ }
124
+ foreach($versions_data as $version ) {
125
+ $this->log_info( 'Store data of ' . $version['version']);
126
+ $data[$version['version']] = $version;
127
+ if ( ! in_array($version['version'], $list ) ) {
128
+ array_push( $list, $version['version'] );
129
+ }
130
+ }
131
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA, $data );
132
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST, $list );
133
+ }
134
+
135
+ /**
136
+ * Returns the data of a particular update. Format is similar to what is returned by
137
+ * https://realfavicongenerator.net/api/versions
138
+ */
139
+ public function get_update_data( $version ) {
140
+ $data = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA );
141
+ if ( ! $data ) {
142
+ return NULL;
143
+ }
144
+ else {
145
+ return $data[$version];
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Return the list of versions. For example, if versions are know from 0.3 to 0.11 and $from = '0.6' and $to = '0.10',
151
+ * then this function returns array('0.7', '0.8', '0.9', '0.10'). Yes, '0.6' is not included while '0.10' is.
152
+ */
153
+ public function get_updates_list( $from, $to ) {
154
+ $this->log_info( 'Getting versions list from ' . $from . ' to ' . $to );
155
+
156
+ $list = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST );
157
+ if ( ! $list ) {
158
+ return NULL;
159
+ }
160
+
161
+ $listing = ! in_array( $from, $list );
162
+ $sub_list = array();
163
+
164
+ foreach( $list as $version ) {
165
+ if ( $listing ) {
166
+ array_push( $sub_list, $version );
167
+ }
168
+ if ( $version == $from ) {
169
+ $listing = true;
170
+ }
171
+ if ( $version == $to ) {
172
+ return $sub_list;
173
+ }
174
+ }
175
+
176
+ return $sub_list;
177
+ }
178
+
179
+ public function get_updates_description( $from, $to ) {
180
+ $this->log_info( 'Getting description from ' . $from . ' to ' . $to );
181
+
182
+ $versions = $this->get_updates_list( $from, $to );
183
+ if ( $versions == NULL ) {
184
+ $this->log_info( 'No versions, return a link to the change log description' );
185
+ return sprintf( __( "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the update" ),
186
+ 'https://realfavicongenerator.net/change_log?since=' . $from );
187
+ }
188
+
189
+ $this->log_info( 'Versions to describe: ' . implode( ', ', $versions ) );
190
+
191
+ $descriptions = array();
192
+ foreach( $versions as $version ) {
193
+ $update = $this->get_update_data( $version );
194
+ array_push( $descriptions,
195
+ '<p>' . $update['description'] . '</p>' );
196
+ }
197
+ return implode($descriptions);
198
+ }
199
+
200
+ public function get_non_interactive_api_request() {
201
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST );
202
+ }
203
+
204
+ public function set_favicon_configured( $configured, $favicon_in_root, $version, $non_interactive_api_request = NULL ) {
205
  update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED,
206
  $configured ? 1 : 0 );
207
  update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT,
208
  $favicon_in_root ? 1 : 0 );
209
+
210
+ $this->set_favicon_current_version( $version );
211
+
212
+ // Reset the update stuff
213
+ $this->set_latest_manual_available_update( NULL );
214
+
215
+ if ( $non_interactive_api_request != NULL ) {
216
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST,
217
+ $non_interactive_api_request );
218
+ }
219
  }
220
 
221
  public function is_preview_available() {
228
  }
229
 
230
  public function set_preview_file_name($preview_file_name) {
231
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME,
232
  $preview_file_name);
233
  }
234
 
267
  */
268
  public static function get_files_dir() {
269
  $up_dir = wp_upload_dir();
270
+ return $up_dir['basedir'] . '/' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '/';
271
  }
272
 
273
  /**
275
  */
276
  public static function get_files_url() {
277
  $up_dir = wp_upload_dir();
278
+ $baseUrl = $up_dir['baseurl'];
279
+ // Make sure to no duplicate the '/'
280
+ // This is especially important when the base URL is the root directory:
281
+ // When this happens, the generated URL would be
282
+ // "http//somesite.com//fbrfg/" and then "//fbrfg/" when the host name is
283
+ // stripped. But this path is wrong, as it looks like a "same protocol" URL.
284
+ $separator = (substr($baseUrl, -1) == '/') ? '' : '/';
285
+ return $baseUrl . $separator . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '/';
286
  }
287
 
288
  public static function get_tmp_dir() {
289
+ return Favicon_By_RealFaviconGenerator_Common::get_files_dir() . 'tmp' . DIRECTORY_SEPARATOR;
290
  }
291
 
292
  public static function remove_directory($directory) {
293
  foreach( scandir( $directory ) as $v ) {
294
  if ( is_dir( $directory . DIRECTORY_SEPARATOR . $v ) ) {
295
  if ( $v != '.' && $v != '..' ) {
296
+ Favicon_By_RealFaviconGenerator_Common::remove_directory(
297
+ $directory . DIRECTORY_SEPARATOR . $v );
298
  }
299
  }
300
  else {
313
  $domain = Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG;
314
  $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
315
 
316
+ load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . DIRECTORY_SEPARATOR . $domain . '-' . $locale . '.mo' );
317
+ load_plugin_textdomain( $domain, FALSE,
318
+ basename( plugin_dir_path( dirname( __FILE__ ) ) ) . DIRECTORY_SEPARATOR .
319
+ 'languages' . DIRECTORY_SEPARATOR );
320
+ }
321
+
322
+ // See http://webcheatsheet.com/php/get_current_page_url.php
323
+ public function current_page_url() {
324
+ // See https://mekshq.com/get-current-page-url-wordpress/
325
+ global $wp;
326
+ $current_url = home_url( add_query_arg( array(), $wp->request ) );
327
+ return $current_url;
328
+ }
329
+
330
+ public function add_parameter_to_current_url( $param_and_value ) {
331
+ $url = $this->current_page_url();
332
+ if ( strpos( $url, '?') !== false) {
333
+ return $url . '&' . $param_and_value;
334
+ }
335
+ else {
336
+ return $url . '?' . $param_and_value;
337
+ }
338
+ }
339
+
340
+ public function check_for_updates() {
341
+ $this->log_info( 'Checking for updates...' );
342
+
343
+ if ( ! $this->is_favicon_configured() ) {
344
+ // No favicon so nothing to update
345
+ $this->log_info( 'No favicon configured so nothing to update' );
346
+ return;
347
+ }
348
+
349
+ $version = $this->get_favicon_current_version();
350
+ $this->log_info( 'Current version is ' . $version );
351
+
352
+ if ( $version == NULL ) {
353
+ // No version for some reason. Let's leave.
354
+ $this->log_info( 'Current favicon version not available' );
355
+ return;
356
+ }
357
+
358
+ $checkUrl = 'https://realfavicongenerator.net/api/versions?since=' . $version;
359
+ $resp = wp_remote_get( $checkUrl );
360
+ if ( ( $resp == NULL ) || ( $resp == false ) || ( is_wp_error( $resp ) ) ||
361
+ ( $resp['response'] == NULL ) || ( $resp['response']['code'] == NULL ) || ( $resp['response']['code'] != 200 ) ) {
362
+ // Error of some kind? Return
363
+ $this->log_info( 'Cannot get latest version from RealFaviconGenerator ' .
364
+ ( is_wp_error( $resp ) ? ': ' . $resp->get_error_message() : '' ) . ' (URL was ' . $checkUrl . ')' );
365
+ return;
366
+ }
367
+
368
+ $json = json_decode( $resp['body'], true );
369
+ if ( empty( $json ) ) {
370
+ $this->log_info( 'No change since version ' . $version . ' or cannot parse JSON (JSON parsing error code is ' . json_last_error() . ')' );
371
+ return;
372
+ }
373
+
374
+ $this->log_info( 'Update versions database' );
375
+ $this->set_updates_data( $json );
376
+
377
+ // Check update relevancy
378
+ $manual = false;
379
+ $automatic = false;
380
+ foreach($json as $version) {
381
+ if ( $version['relevance']['manual_update'] ) {
382
+ $manual = true;
383
+ }
384
+ if ( $version['relevance']['automated_update'] ) {
385
+ $automatic = true;
386
+ }
387
+ }
388
+
389
+ $this->log_info( "Automated updates to run: " . ( $automatic ? 'true' : 'false') );
390
+ $this->log_info( "Manual updates to run: " . ( $manual ? 'true' : 'false' ) );
391
+
392
+ if ( $manual || ( $automatic && ( ! $this->get_non_interactive_api_request() ) ) ) {
393
+ $this->log_info( 'Manual update, or automatic update but we have no non-interactive request to do it automatically' );
394
+
395
+ // We only note the latest available version.
396
+ // For example, if we receive version 0.8, 0.9 and 0.10 (in this order), we only note 0.10
397
+ $last = $json[count( $json ) - 1];
398
+ $latest_version = $last['version'];
399
+
400
+ // Save the fact that we should update
401
+ $this->log_info( 'There is a manual update to go to ' . $latest_version );
402
+ $this->set_latest_manual_available_update( $latest_version );
403
+ }
404
+ else if ( $automatic && $this->get_non_interactive_api_request() ) {
405
+ // Automatic update
406
+
407
+ $this->log_info( 'Automatic update to be performed' );
408
+
409
+ // Do not run it when the update is also manual, because we are going to ask the user to
410
+ // update anyway.
411
+
412
+ try {
413
+ $result = $this->run_non_interactive_api_request( $this->get_non_interactive_api_request() );
414
+
415
+ $response = new Favicon_By_RealFaviconGenerator_Api_Response( $result );
416
+
417
+ $zip_path = Favicon_By_RealFaviconGenerator_Common::get_tmp_dir();
418
+ if ( ! file_exists( $zip_path ) ) {
419
+ if ( mkdir( $zip_path, 0755, true ) !== true ) {
420
+ throw new InvalidArgumentException( sprintf( __( 'Cannot create directory %s to store the favicon package', FBRFG_PLUGIN_SLUG), $zip_path ) );
421
+ }
422
+ }
423
+ $response->downloadAndUnpack( $zip_path );
424
+
425
+ $this->store_pictures( $response );
426
+
427
+ $this->store_preview( $response->getPreviewPath() );
428
+
429
+ Favicon_By_RealFaviconGenerator_Common::remove_directory( $zip_path );
430
+
431
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE, $response->getHtmlCode() );
432
+
433
+ $version_before_update = $this->get_favicon_current_version();
434
+
435
+ $this->set_favicon_configured( true, $response->isFilesInRoot(), $response->getVersion() );
436
+
437
+ // Remember about this update
438
+ $this->log_info( 'Save the fact that we updated from ' . $version_before_update . ' to ' . $response->getVersion() );
439
+ $this->set_most_recent_automatic_update( $version_before_update, $response->getVersion() );
440
+ }
441
+ catch( Exception $e ) {
442
+ $this->log_info( 'Cannot update favicon automatically: ' . $e->getMessage() );
443
+ }
444
+ }
445
+ }
446
+
447
+ public function run_non_interactive_api_request( $request ) {
448
+ $resp = wp_remote_post( 'https://realfavicongenerator.net/api/favicon',
449
+ array( 'body' => $request, 'timeout' => 45 ) );
450
+ if ( is_wp_error( $resp )) {
451
+ throw new InvalidArgumentException( "Cannot run the non-interactive API request for update: " . $resp->get_error_message() );
452
+ }
453
+
454
+ $json = wp_remote_retrieve_body( $resp );
455
+ if ( empty( $json ) ) {
456
+ throw new InvalidArgumentException( "Empty JSON document while running the non-interactive API request" );
457
+ }
458
+
459
+ return $json;
460
+ }
461
+
462
+ public function portable_filename( $filename ) {
463
+ return str_replace( '/', DIRECTORY_SEPARATOR, $filename );
464
+ }
465
 
466
+ public function portable_rename( $from, $to ) {
467
+ $from = $this->portable_filename( $from );
468
+ $to = $this->portable_filename( $to );
469
+ rename( $from, $to );
470
  }
471
 
472
  }
public/class-favicon-by-realfavicongenerator.php CHANGED
@@ -1,15 +1,16 @@
1
  <?php
2
- // Copyright 2014 RealFaviconGenerator
3
 
4
- require_once plugin_dir_path( __FILE__ ) . '../public/class-favicon-by-realfavicongenerator-common.php';
 
5
 
6
  class Favicon_By_RealFaviconGenerator extends Favicon_By_RealFaviconGenerator_Common {
7
 
8
  protected static $instance = null;
9
 
10
  private function __construct() {
11
- add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
12
  add_action( 'wp_head', array( $this, 'add_favicon_markups' ) );
 
13
 
14
  // Deactivate Genesis default favicon
15
  add_filter( 'genesis_pre_load_favicon', array( $this, 'return_empty_favicon_for_genesis' ) );
@@ -27,66 +28,11 @@ class Favicon_By_RealFaviconGenerator extends Favicon_By_RealFaviconGenerator_Co
27
 
28
 
29
  public static function activate( $network_wide ) {
30
-
31
- if ( function_exists( 'is_multisite' ) && is_multisite() ) {
32
-
33
- if ( $network_wide ) {
34
-
35
- // Get all blog ids
36
- $blog_ids = self::get_blog_ids();
37
-
38
- foreach ( $blog_ids as $blog_id ) {
39
-
40
- switch_to_blog( $blog_id );
41
- self::single_activate();
42
- }
43
-
44
- restore_current_blog();
45
-
46
- } else {
47
- self::single_activate();
48
- }
49
-
50
- } else {
51
- self::single_activate();
52
- }
53
-
54
- }
55
-
56
- public static function deactivate( $network_wide ) {
57
-
58
- if ( function_exists( 'is_multisite' ) && is_multisite() ) {
59
-
60
- if ( $network_wide ) {
61
-
62
- // Get all blog ids
63
- $blog_ids = self::get_blog_ids();
64
-
65
- foreach ( $blog_ids as $blog_id ) {
66
-
67
- switch_to_blog( $blog_id );
68
- self::single_deactivate();
69
-
70
- }
71
-
72
- restore_current_blog();
73
-
74
- } else {
75
- self::single_deactivate();
76
- }
77
-
78
- } else {
79
- self::single_deactivate();
80
- }
81
-
82
- }
83
-
84
- private static function single_activate() {
85
  // Nothing to do
86
  }
87
 
88
- private static function single_deactivate() {
89
- // Nothing to do
90
  }
91
 
92
  }
1
  <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
 
4
+ require_once plugin_dir_path( __FILE__ ) . '..' . DIRECTORY_SEPARATOR .
5
+ 'public' . DIRECTORY_SEPARATOR . 'class-favicon-by-realfavicongenerator-common.php';
6
 
7
  class Favicon_By_RealFaviconGenerator extends Favicon_By_RealFaviconGenerator_Common {
8
 
9
  protected static $instance = null;
10
 
11
  private function __construct() {
 
12
  add_action( 'wp_head', array( $this, 'add_favicon_markups' ) );
13
+ add_action( 'login_head', array( $this, 'add_favicon_markups' ) );
14
 
15
  // Deactivate Genesis default favicon
16
  add_filter( 'genesis_pre_load_favicon', array( $this, 'return_empty_favicon_for_genesis' ) );
28
 
29
 
30
  public static function activate( $network_wide ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  // Nothing to do
32
  }
33
 
34
+ public static function deactivate( $network_wide ) {
35
+ wp_clear_scheduled_hook( Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE );
36
  }
37
 
38
  }
trunk/LICENSE.txt ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ <signature of Ty Coon>, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
trunk/README.txt ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Favicon by RealFaviconGenerator ===
2
+ Contributors: phbernard
3
+ Donate link: http://realfavicongenerator.net/donate
4
+ Tags: favicon, favicon icon, favicon image, favicon code, favicon change, favicon manager, short icon, addressbar logo, apple touch icon, icon, iphone, admin, wordpress, realfavicongenerator, real favicon generator
5
+ Requires at least: 3.5
6
+ Tested up to: 5.8
7
+ Stable tag: 1.3.21
8
+ License: GPLv2
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ Create and install your favicon for all platforms: PC/Mac, iPhone/iPad, Android devices, Windows 8 tablets...
12
+
13
+ == Description ==
14
+
15
+ Generate and setup a favicon for desktop browsers, iPhone/iPad, Android devices, Windows 8 tablets and more. In a matter of seconds, design an icon that looks great on all major platforms.
16
+
17
+ Favicon is not just a single `favicon.ico` file dropped in the middle of your site. Nowadays, with so many different platforms and devices, you need a bunch of pictures to get the job done. With RealFaviconGenerator, generate all the icons you need for desktop browsers, iPhone/iPad, Android devices, Windows 8 devices, and more.
18
+
19
+ iOS devices use a high resolution Apple touch icon to illustrate bookmarks and home screen shortcuts. A first generation iPhone needs a 57x57 picture, whereas a brand new iPad with Retina screen looks for a 152x152 picture. Android Chrome also use these pictures if it finds them. Windows 8 takes another route with a dedicated set of icons and HTML declarations.
20
+
21
+ Favicon is not only a matter of pictures with different resolutions. The various platforms coms with different UI guidelines. For example, the classic desktop favicons often use transparency. But iOS requires opaque icons. And Windows 8 has its own recommendations.
22
+
23
+ Save hours of research and image edition with RealFaviconGenerator and its companion plugin. In a matter of seconds, you setup a favicon compatible with:
24
+
25
+ - Windows (IE, Chrome, Firefox, Opera, Safari)
26
+ - Mac (Safari, Chrome, Firefox, Opera, Camino)
27
+ - iOS (Safari, Chrome, Coast)
28
+ - Android (Chrome, Firefox)
29
+ - Surface (IE)
30
+ - And more
31
+
32
+ We take compatibility very seriously. See http://realfavicongenerator.net/favicon_compatibility for the full list.
33
+
34
+ ** Localization **
35
+
36
+ * English (`en_EN`) by [Philippe Bernard](http://realfavicongenerator.net/)
37
+ * French (`fr_FR`) by [Philippe Bernard](http://realfavicongenerator.net/)
38
+ * Swedish (`sv_SE`) by [Linus Wileryd](https://twitter.com/wileryd)
39
+ * Brazilian Portuguese (`pt_BR`) by Marcelo Volgarini, [Criação de Sites](http://www.techload.com.br/criacao-de-sites-ribeirao-preto)
40
+ * Dutch (`nl_NL`) by [Axel Vanderhaeghen](https://eco13.eu)
41
+ * Danish (`da_DK`) by [Alexander Leo-Hansen](http://alexanderleohansen.dk/)
42
+ * Czech (`cs_CZ`) by an anonymous translator
43
+ * Polish (`pl_PL`) by [Maciej Gryniuk](http://maciej-gryniuk.tk/)
44
+ * Russian (`ru_RU`) by Natasha Diatko, [UStarCash](https://www.ustarcash.com)
45
+ * Indonesian (`id_ID`) by [Jordan Silaen](https://www.chameleonjohn.com/)
46
+
47
+ [](http://coderisk.com/wp/plugin/favicon-by-realfavicongenerator/RIPS-TVYsdQTMAr)
48
+
49
+ == Installation ==
50
+
51
+ = Using The WordPress Dashboard =
52
+
53
+ 1. Navigate to the 'Add New' in the plugins dashboard
54
+ 2. Search for 'Favicon by RealFaviconGenerator'
55
+ 3. Click 'Install Now'
56
+ 4. Activate the plugin on the Plugin dashboard
57
+ 5. Navigate to the 'Favicon' entry in the Appearance menu
58
+ 6. Select a master picture from the Media Library (optional)
59
+ 7. Click the 'Generate Favicon' button and follow the instructions.
60
+
61
+ = Using FTP =
62
+
63
+ 1. Download `favicon-by-realfavicongenerator.zip`
64
+ 2. Extract the `favicon-by-realfavicongenerator` directory to your computer
65
+ 3. Upload the `favicon-by-realfavicongenerator` directory to the `/wp-content/plugins/` directory
66
+ 4. Activate the plugin on the Plugin dashboard
67
+ 5. Navigate to the 'Favicon' entry in the Appearance menu
68
+ 6. Select a master picture from the Media Library (optional)
69
+ 7. Click the 'Generate Favicon' button and follow the instructions.
70
+
71
+ == Screenshots ==
72
+
73
+ 1. Initial favicon setup screen. You are invited to setup your favicon.
74
+ 2. Select a master picture from the Media Library (optional)
75
+ 3. Once you hit the Generate Favicon button, you are redirected to <a href="http://realfavicongenerator.net/">RealFaviconGenerator</a>,
76
+ where you can design your favicon: adding a background to your iOS picture, using a saturated version of your master picture for Windows 8...
77
+ 4. When you are done with the favicon editor, you are redirected to the WordPress Dashboard. The favicon is installed automatically.
78
+ This screen presents you a preview of the favicon you various platforms, so you know how your blog looks like on various platforms.
79
+ 5. You can also trigger RealFaviconGenerator's favicon checker, to make sure your favicon is correctly setup.
80
+
81
+ == Changelog ==
82
+
83
+ = 1.3.21 =
84
+
85
+ - Plugin was tested up to WordPress 5.8
86
+ - Fix XSS security issue, reported by WPSpan.com. See https://wpscan.com/vulnerability/ed9d26be-cc96-4274-a05b-0b7ad9d8cfd9?fbclid=IwAR2aRMXRjbGm9ppoI9tM-OHm26Q0ax4yt0MkcP5sp0-pz9D4eVIEHQwvG1Y
87
+
88
+ = 1.3.20 =
89
+
90
+ - Fix: media selection works again
91
+ - Plugin was tested up to WordPress 5.6
92
+
93
+ = 1.3.19 =
94
+
95
+ - Plugin was tested up to WordPress 5.5.3
96
+
97
+ = 1.3.18 =
98
+
99
+ - Remove reference to deprecated function screen_icon
100
+ - Plugin was tested up to WordPress 5.4
101
+
102
+ = 1.3.17 =
103
+
104
+ - Changes to clear security warnings from CodeRisk
105
+
106
+ = 1.3.16 =
107
+
108
+ - Plugin was tested up to WordPress 5.3.2
109
+
110
+ = 1.3.15 =
111
+
112
+ - Plugin was tested up to WordPress 5.1
113
+
114
+ = 1.3.14 =
115
+
116
+ - Plugin was tested up to WordPress 5.0-beta5
117
+
118
+ = 1.3.13 =
119
+
120
+ - Plugin was tested up to WordPress 4.9.7
121
+
122
+ = 1.3.12 =
123
+
124
+ Never published, no change
125
+
126
+ = 1.3.11 =
127
+
128
+ - id/ID translation added, thanks to Jordan Silaen
129
+ - Plugin was tested up to WordPress 4.8.1
130
+
131
+ = 1.3.10 =
132
+
133
+ - Always access RealFaviconGenerator via HTTPS
134
+ - Clarification in local path separators for Windows
135
+ - Plugin was tested up to WordPress 4.7.1
136
+ - Notice to ask administrator to not deactivate the plugin
137
+
138
+ = 1.3.9 =
139
+
140
+ - Plugin was tested up to WordPress 4.7
141
+
142
+ = 1.3.8 =
143
+
144
+ - Plugin was tested up to WordPress 4.6
145
+
146
+ = 1.3.7 =
147
+
148
+ - Fix: Plugin keywords rephrased (some were not taken into account).
149
+
150
+ = 1.3.6 =
151
+
152
+ - Fix: the icons path was sometimes wrong when the upload directory was the root directory
153
+
154
+ = 1.3.5 =
155
+
156
+ - pl/PL translation added, thanks to Maciej Gryniuk
157
+ - ru/RU translation added, thanks to Natasha Diatko
158
+
159
+ = 1.3.4 =
160
+
161
+ - Plugin was tested up to WordPress 4.5
162
+
163
+ = 1.3.3 =
164
+
165
+ - Deactivate debug logs
166
+
167
+ = 1.3.2 =
168
+
169
+ - Typos in French translations
170
+ - Warning fix for PHP7
171
+ - Tested up to WordPress 4.4.1
172
+ - cs/CZ translation added, thanks to an anonymous translator
173
+
174
+ = 1.3.1 =
175
+
176
+ - Hotfix in previous version.
177
+
178
+ = 1.3.0 =
179
+
180
+ - The plugin takes advantage of RealFaviconGenerator's non-interactive API to upgrade the favicon automatically whenever a new version is available.
181
+
182
+ = 1.2.15 =
183
+
184
+ - Donation link added.
185
+ - Plugin now works when access to file system is via FTP (not direct). See https://wordpress.org/support/topic/no-images-created
186
+
187
+ = 1.2.14 =
188
+
189
+ - Security improvement.
190
+ - Warning fix regarding NONCE_ACTION_NAME.
191
+ - Useless PHP closing tags removed.
192
+ - Error checking added to favicon package unzipping.
193
+
194
+ = 1.2.13 =
195
+
196
+ - XSS vulnerability fixed, reported by [Kacper Szurek](http://security.szurek.pl/)
197
+
198
+ = 1.2.12 =
199
+
200
+ - Performance improvements: favicon update checking is now done in the Admin section (not the Public section), locales are not loaded in the Public section anymore.
201
+ - Take advantage of the Rewrite API (when available) to make the files appear to be in the root directory. So http://example.com/favicon.ico works (eg. when requested by Yandex).
202
+ - nl/NL translation added, thanks to Axel Vanderhaeghen.
203
+
204
+ = 1.2.11 =
205
+
206
+ - When the admin's browser cannot get the picture selected from the Media Library, the UI fails gracefully.
207
+ - Favicon package unzipping is more robust.
208
+ - Notice to ask users to rank the plugin on WordPress.org.
209
+
210
+ = 1.2.10 =
211
+
212
+ - Warning fix when used with BuddyPress (bp_setup_current_user). See https://wordpress.org/support/topic/wp_debug-notice-for-bp_setup_current_user.
213
+
214
+ = 1.2.9 =
215
+
216
+ - When selected from the Media Library, the master picture is now retrieved by WP administrator's browser to prevent several issues (locally hosted blogs, blogs protected in a way or another, etc.).
217
+
218
+ = 1.2.8 =
219
+
220
+ - Plugin successfully tested against WordPress 4.1.
221
+
222
+ = 1.2.7 =
223
+
224
+ - Fix for WordPress sites hosted on Windows.
225
+
226
+ = 1.2.6 =
227
+
228
+ - The plugin is now compatible with multisite.
229
+
230
+ = 1.2.5 =
231
+
232
+ - Fix for login page: favicon code was not injected in this particular page.
233
+
234
+ = 1.2.4 =
235
+
236
+ - Remove debug messages to avoid false positives in error log.
237
+
238
+ = 1.2.3 =
239
+
240
+ - Update notifications can be dismissed once for all.
241
+ - New Settings page to enable/disable update notifications.
242
+
243
+ = 1.2.2 =
244
+
245
+ - Fix for the 403 issue with HostGator hosting service (http://wordpress.org/support/topic/403-error-when-generating-favicon).
246
+
247
+ = 1.2.1 =
248
+
249
+ - Fix in plugin removal and update checking.
250
+
251
+ = 1.2.0 =
252
+
253
+ - The plugin now warns the user when RealFaviconGenerator was updated and the favicon should be generated again.
254
+
255
+ = 1.1.1 =
256
+
257
+ - Rewrite API usage disabled. Favicon files do not appear to be in the root directory of the blog anymore.
258
+
259
+ = 1.1.0 =
260
+
261
+ - Run RealFaviconGenerator's favicon checker from the admin interface.
262
+
263
+ = 1.0.7 =
264
+
265
+ - Deactivate default Genesis favicon when one is configured in FbRFG.
266
+
267
+ = 1.0.6 =
268
+
269
+ - Error management improved during favicon install.
270
+
271
+ = 1.0.5 =
272
+
273
+ - Do not try to rewrite the favicon files URL when .htaccess is not writable.
274
+
275
+ = 1.0.4 =
276
+
277
+ - Option to not rewrite the favicon files URL, even when this is possible.
278
+
279
+ = 1.0.3 =
280
+
281
+ - Plugin code syntax changed to fit older versions of PHP.
282
+
283
+ = 1.0.2 =
284
+
285
+ - Callback URL was too long for some servers. It has been shorten.
286
+
287
+ = 1.0.1 =
288
+
289
+ - Favicon admin settings are now in the Appearance menu.
290
+ - Fix in favicon package download.
291
+ - Fix in error management during favicon installation.
292
+
293
+ = 1.0 =
294
+
295
+ Initial version.
trunk/admin/assets/css/admin.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /* Copyright 2014-2016 RealFaviconGenerator */
2
+
3
+ .wrap img {
4
+ border: 2px solid #aaa;
5
+ }
trunk/admin/class-favicon-by-realfavicongenerator-admin.php ADDED
@@ -0,0 +1,520 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+
4
+ require_once plugin_dir_path( __FILE__ ) . '..' . DIRECTORY_SEPARATOR .
5
+ 'public' . DIRECTORY_SEPARATOR . 'class-favicon-by-realfavicongenerator-common.php';
6
+ require_once plugin_dir_path( __FILE__ ) . 'class-favicon-by-realfavicongenerator-api-response.php';
7
+
8
+ class Favicon_By_RealFaviconGenerator_Admin extends Favicon_By_RealFaviconGenerator_Common {
9
+
10
+ const DISMISS_UPDATE_NOTIICATION = 'fbrfg_dismiss_update_notification';
11
+ const DISMISS_AUTOMATIC_UPDATE_NOTIICATION = 'fbrfg_dismiss_autmatic_update_notification';
12
+ const DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS = 'fbrfg_dismiss_all_update_notifications';
13
+ const SETTINGS_FORM = 'fbrfg_settings_form';
14
+ const NONCE_ACTION_NAME = 'favicon_generation';
15
+
16
+ protected static $instance = null;
17
+
18
+ private function __construct() {
19
+ add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
20
+
21
+ add_action( 'admin_head', array( $this, 'add_favicon_markups' ) );
22
+
23
+ // Deactivate Genesis default favicon
24
+ add_filter( 'genesis_pre_load_favicon', array( $this, 'return_empty_favicon_for_genesis' ) );
25
+
26
+ // See
27
+ // - https://wordpress.org/support/topic/wp_debug-notice-for-bp_setup_current_user
28
+ // - https://buddypress.org/support/topic/wp_debug-notice-for-bp_setup_current_user
29
+ // The idea: is_super_admin must not be called too soon.
30
+ add_action( 'init', array( $this, 'register_admin_actions' ) );
31
+
32
+ // Check for updates
33
+ add_action( Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE, array( $this, 'check_for_updates' ) );
34
+ }
35
+
36
+ /**
37
+ * Return an instance of this class.
38
+ *
39
+ * @since 1.0
40
+ *
41
+ * @return object A single instance of this class.
42
+ */
43
+ public static function get_instance() {
44
+
45
+ // If the single instance hasn't been set, set it now.
46
+ if ( null == self::$instance ) {
47
+ self::$instance = new self;
48
+ }
49
+
50
+ return self::$instance;
51
+ }
52
+
53
+ public function register_admin_actions() {
54
+ // Except for the headers, everything is accessible only to the admin
55
+ if ( ! is_super_admin() ) {
56
+ return;
57
+ }
58
+
59
+ add_action( 'admin_menu',
60
+ array( $this, 'create_favicon_settings_menu' ) );
61
+
62
+ add_action('wp_ajax_' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon',
63
+ array( $this, 'install_new_favicon' ) );
64
+ add_action('wp_ajax_nopriv_' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon',
65
+ array( $this, 'install_new_favicon' ) );
66
+
67
+ // Update notice
68
+ add_action('admin_notices', array( $this, 'display_update_notice' ) );
69
+ add_action('admin_init', array( $this, 'process_ignored_notice' ) );
70
+
71
+ // Schedule update check
72
+ if ( ! wp_next_scheduled( Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE ) ) {
73
+ wp_schedule_event( time(), 'daily', Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE );
74
+ }
75
+ }
76
+
77
+ public function create_favicon_settings_menu() {
78
+ add_theme_page( __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
79
+ __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), 'manage_options', __FILE__ . 'favicon_appearance_menu',
80
+ array( $this, 'create_favicon_appearance_page' ) );
81
+
82
+ add_options_page( __( 'Favicon Settings', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
83
+ __( 'Favicon', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), 'manage_options', __FILE__ . 'favicon_settings_menu',
84
+ array( $this, 'create_favicon_settings_page' ) );
85
+ }
86
+
87
+ public function create_favicon_settings_page() {
88
+ global $current_user;
89
+
90
+ $user_id = $current_user->ID;
91
+
92
+ // Prepare variables
93
+ $favicon_appearance_url = admin_url( 'themes.php?page=' . __FILE__ . 'favicon_appearance_menu' );
94
+ $favicon_admin_url = admin_url( 'options-general.php?page=' . __FILE__ . 'favicon_settings_menu' );
95
+ $display_update_notifications = ! $this->get_boolean_user_option(
96
+ Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE );
97
+
98
+ // Template time!
99
+ include_once( plugin_dir_path(__FILE__) . 'views' . DIRECTORY_SEPARATOR . 'settings.php' );
100
+ }
101
+
102
+ public function create_favicon_appearance_page() {
103
+ $result = NULL;
104
+
105
+ // Prepare settings page
106
+
107
+ // Option to allow user to not use the Rewrite API: display it only when the Rewrite API is available
108
+ // Due to too many problems with the rewrite API (for example, http://wordpress.org/support/topic/do-not-work-8),
109
+ // it was deciced to turn the feature off once for all
110
+ $can_rewrite = false;
111
+
112
+ $pic_path = $this->get_full_picture_path();
113
+
114
+ $favicon_configured = $this->is_favicon_configured();
115
+ $favicon_in_root = $this->is_favicon_in_root();
116
+
117
+ $preview_url = $this->is_preview_available() ? $this->get_preview_url() : NULL;
118
+
119
+ if ( isset( $_REQUEST['json_result_url'] ) ) {
120
+ // New favicon to install:
121
+ // Parameters will be processed with an Ajax call
122
+
123
+ $new_favicon_params_url = filter_var ( $_REQUEST['json_result_url'], FILTER_SANITIZE_URL );
124
+ $ajax_url = admin_url( 'admin-ajax.php', isset( $_SERVER['HTTPS'] ) ? 'https://' : 'http://' );
125
+ }
126
+ else {
127
+ // No new favicon, simply display the settings page
128
+ $new_favicon_params_url = NULL;
129
+ }
130
+
131
+ // Nonce
132
+ $nonce = wp_create_nonce( Favicon_By_RealFaviconGenerator_Admin::NONCE_ACTION_NAME );
133
+
134
+ // External files
135
+ wp_enqueue_script( 'jquery' );
136
+ wp_enqueue_script( 'jquery-ui' );
137
+ wp_enqueue_script( 'jquery-effects-pulsate' );
138
+ wp_enqueue_media();
139
+ wp_enqueue_style( 'fbrfg_admin_style', plugins_url(
140
+ 'assets' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'admin.css',
141
+ __FILE__ ) );
142
+
143
+ // Template time!
144
+ include_once( plugin_dir_path(__FILE__) . 'views' . DIRECTORY_SEPARATOR .
145
+ 'appearance.php' );
146
+ }
147
+
148
+ private function download_result_json( $url ) {
149
+ $resp = wp_remote_get( $url );
150
+ if ( is_wp_error( $resp )) {
151
+ throw new InvalidArgumentException( "Cannot download JSON file at " . htmlspecialchars( $url ) . ": " . $resp->get_error_message() );
152
+ }
153
+
154
+ $json = wp_remote_retrieve_body( $resp );
155
+ if ( empty( $json ) ) {
156
+ throw new InvalidArgumentException( "Empty JSON document at " . $url );
157
+ }
158
+
159
+ return $json;
160
+ }
161
+
162
+ public function install_new_favicon() {
163
+ header("Content-type: application/json");
164
+
165
+ try {
166
+ // URL is explicitely decoded to compensate the extra encoding performed while generating the settings page
167
+ $url = 'https://realfavicongenerator.net' . $_REQUEST['json_result_url'];
168
+
169
+ $result = $this->download_result_json( $url );
170
+
171
+ $response = new Favicon_By_RealFaviconGenerator_Api_Response( $result );
172
+
173
+ if ( ! wp_verify_nonce( $response->getCustomParameter(), Favicon_By_RealFaviconGenerator_Admin::NONCE_ACTION_NAME ) ) {
174
+ // Attack in progress?
175
+ ?>
176
+ {
177
+ "status": "error",
178
+ "message": "<?php _e( 'Nonce was not recognized. This case is supposed to happen only in case of XSS attack. If you feel like something is wrong, please <a href=\"mailto:contact@realfavicongenerator.net\">contact us</a>.', FBRFG_PLUGIN_SLUG ) ?>"
179
+ }
180
+ <?php
181
+ }
182
+ else {
183
+ $zip_path = Favicon_By_RealFaviconGenerator_Common::get_tmp_dir();
184
+ if ( ! file_exists( $zip_path ) ) {
185
+ if ( mkdir( $zip_path, 0755, true ) !== true ) {
186
+ throw new InvalidArgumentException( sprintf( __( 'Cannot create directory %s to store the favicon package', FBRFG_PLUGIN_SLUG), $zip_path ) );
187
+ }
188
+ }
189
+ $response->downloadAndUnpack( $zip_path );
190
+
191
+ $this->store_pictures( $response );
192
+
193
+ $this->store_preview( $response->getPreviewPath() );
194
+
195
+ Favicon_By_RealFaviconGenerator_Common::remove_directory( $zip_path );
196
+
197
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE, $response->getHtmlCode() );
198
+
199
+ $this->set_favicon_configured( true, $response->isFilesInRoot(), $response->getVersion(), $response->getNonInteractiveAPIRequest() );
200
+ ?>
201
+ {
202
+ "status": "success",
203
+ "preview_url": <?php echo json_encode( $this->get_preview_url() ) ?>,
204
+ "favicon_in_root": <?php echo json_encode( $this->is_favicon_in_root() ) ?>
205
+ }
206
+ <?php
207
+ }
208
+ }
209
+ catch(Exception $e) {
210
+ ?>
211
+ {
212
+ "status": "error",
213
+ "message": <?php echo json_encode( $e->getMessage() ) ?>
214
+ }
215
+ <?php
216
+ }
217
+
218
+ die();
219
+ }
220
+
221
+ public function get_picture_dir() {
222
+ return Favicon_By_RealFaviconGenerator_Common::get_files_dir();
223
+ }
224
+
225
+ /**
226
+ * Returns http//somesite.com/blog/wp-content/upload/fbrfg/
227
+ */
228
+ public function get_picture_url() {
229
+ return Favicon_By_RealFaviconGenerator_Common::get_files_url();
230
+ }
231
+
232
+ /**
233
+ * Returns /blog/wp-content/upload/fbrfg/
234
+ */
235
+ public function get_full_picture_path() {
236
+ return parse_url( $this->get_picture_url(), PHP_URL_PATH );
237
+ }
238
+
239
+ /**
240
+ * Returns wp-content/upload/fbrfg/
241
+ */
242
+ public function get_picture_path() {
243
+ return substr( $this->get_picture_url(), strlen( home_url() ) );
244
+ }
245
+
246
+ public function get_preview_path( $preview_file_name = NULL ) {
247
+ if ( ! $preview_file_name ) {
248
+ $preview_file_name = $this->get_preview_file_name();
249
+ }
250
+ return $this->get_picture_dir() . 'preview' . DIRECTORY_SEPARATOR .
251
+ $preview_file_name;
252
+ }
253
+
254
+ public function get_preview_url( $preview_file_name = NULL ) {
255
+ if ( ! $preview_file_name ) {
256
+ $preview_file_name = $this->get_preview_file_name();
257
+ }
258
+ return $this->get_picture_url() . '/preview/' . $preview_file_name;
259
+ }
260
+
261
+ public function store_preview( $preview_path ) {
262
+ // Remove previous preview, if any
263
+ $previous_preview = $this->get_preview_file_name();
264
+ if ( $previous_preview != NULL && ( file_exists( $this->get_preview_path( $previous_preview ) ) ) ) {
265
+ unlink( $this->get_preview_path( $previous_preview ) );
266
+ }
267
+
268
+ if ( $preview_path == NULL ) {
269
+ // "Unregister" previous preview, if any
270
+ $this->set_preview_file_name( NULL );
271
+ return NULL;
272
+ }
273
+ else {
274
+ $preview_file_name = 'preview_' . hash( 'sha256', 'RFB stuff here ' . rand() . microtime() ) . '.png';
275
+ }
276
+
277
+ if ( ! file_exists( dirname( $this->get_preview_path( $preview_file_name ) ) ) ) {
278
+ mkdir( dirname( $this->get_preview_path( $preview_file_name ) ), 0755 );
279
+ }
280
+
281
+ $this->portable_rename( $preview_path, $this->get_preview_path( $preview_file_name ) );
282
+
283
+ $this->set_preview_file_name( $preview_file_name );
284
+ }
285
+
286
+ public function store_pictures( $rfg_response ) {
287
+ $working_dir = $this->get_picture_dir();
288
+
289
+ // Move pictures to production directory
290
+ $files = glob( $working_dir . '*' );
291
+ foreach( $files as $file ) {
292
+ if ( is_file( $file ) ) {
293
+ unlink( $file );
294
+ }
295
+ }
296
+ $files = glob( $rfg_response->getProductionPackagePath() . '/*' );
297
+ foreach( $files as $file ) {
298
+ if ( is_file( $file ) ) {
299
+ $this->portable_rename( $file, $working_dir . basename( $file ) );
300
+ }
301
+ }
302
+
303
+ // Even if the package was not supposed to be put in root, make the files (also) appear at the root of the site
304
+ // So /favicon.ico works, for example.
305
+ // See https://wordpress.org/support/topic/choose-between-rewrite-api-and-dedicated-directory
306
+ if ( $this->can_access_pics_with_url_rewrite() ) {
307
+ $this->rewrite_pictures_url( $working_dir );
308
+ flush_rewrite_rules();
309
+ }
310
+ }
311
+
312
+ public function rewrite_pictures_url( $pic_dir ) {
313
+ foreach ( scandir( $pic_dir ) as $file ) {
314
+ if ( ! is_dir( $pic_dir . DIRECTORY_SEPARATOR . $file ) ) {
315
+ add_rewrite_rule( str_replace( '.', '\.', $file ),
316
+ trim( $this->get_picture_path(), '/' ) . '/' . $file );
317
+ }
318
+ }
319
+ }
320
+
321
+ /**
322
+ * Indicate if it is possible to create URLs such as /favicon.ico
323
+ */
324
+ public function can_access_pics_with_url_rewrite() {
325
+ global $wp_rewrite;
326
+
327
+ // If blog is in root AND rewriting is available (http://wordpress.stackexchange.com/questions/142273/checking-that-the-rewrite-api-is-available),
328
+ // we can produce URLs such as /favicon.ico
329
+ $rewrite = ( $this->wp_in_root() && $wp_rewrite->using_permalinks() );
330
+ if ( ! $rewrite ) {
331
+ return false;
332
+ }
333
+
334
+ // See http://wordpress.org/support/topic/fbrfg-not-updating-htaccess-rewrite-rules
335
+ $htaccess = get_home_path() . DIRECTORY_SEPARATOR . '.htaccess';
336
+ // Two cases:
337
+ // - There is no .htaccess. Either we are not using Apache (so the Rewrite API is supposed to handle
338
+ // the rewriting differently) or there is a problem with Apache/WordPress config, but this is not our job.
339
+ // - .htaccess is present. If so, it should be writable.
340
+ return ( ( ! file_exists( $htaccess ) ) || is_writable( $htaccess ) );
341
+ }
342
+
343
+ /**
344
+ * Indicate if WP is installed in the root of the web site (eg. http://mysite.com) or not (eg. http://mysite.com/blog).
345
+ */
346
+ public function wp_in_root() {
347
+ $path = parse_url( home_url(), PHP_URL_PATH );
348
+ return ( ($path == NULL) || (strlen( $path ) == 0) );
349
+ }
350
+
351
+ public function set_boolean_user_option( $option_name, $option_value ) {
352
+ global $current_user;
353
+ $user_id = $current_user->ID;
354
+
355
+ update_user_option( $user_id, $option_name, $option_value );
356
+ }
357
+
358
+ public function get_boolean_user_option( $option_name ) {
359
+ global $current_user;
360
+ $user_id = $current_user->ID;
361
+
362
+ return get_user_option( $option_name );
363
+ }
364
+
365
+ public function is_manual_update_notice_to_be_displayed() {
366
+ $this->log_info( 'Check if manual update notice should be displayed' );
367
+
368
+ if ( isset($_REQUEST['json_result_url'] ) ) {
369
+ $this->log_info( 'Favicon installation in progress, disable notice' );
370
+ return false;
371
+ }
372
+
373
+ // Did the user prevent all notices?
374
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE ) ) {
375
+ $this->log_info( 'User disabled all update notices' );
376
+ return false;
377
+ }
378
+
379
+ // No update
380
+ if ( $this->get_latest_manual_available_update() == NULL ) {
381
+ $this->log_info( 'There is no pending manual update' );
382
+ return false;
383
+ }
384
+
385
+ // Did the user prevent the notice for this particular version?
386
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE_FOR_VERSION . $this->get_latest_manual_available_update() ) ) {
387
+ $this->log_info( 'User disabled update notices for ' . $this->get_latest_manual_available_update() );
388
+ return false;
389
+ }
390
+
391
+ // If, for some reasons, the current version matches the "latest update",
392
+ // then the updated was already done.
393
+ $result = ( $this->get_latest_manual_available_update() != $this->get_favicon_current_version() );
394
+ $this->log_info( 'Compare current version (' . $this->get_favicon_current_version() . ') and latest update (' .
395
+ $this->get_latest_manual_available_update() . '): ' . ( $result ? 'true' : 'false' ) );
396
+
397
+ return $result;
398
+ }
399
+
400
+ public function is_automatic_update_notice_to_be_displayed() {
401
+ $this->log_info( 'Check if automatic update notice should be displayed' );
402
+
403
+ if ( isset($_REQUEST['json_result_url'] ) ) {
404
+ $this->log_info( 'Favicon installation in progress, disable notice' );
405
+ return false;
406
+ }
407
+
408
+ // Did the user prevent all notices?
409
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE ) ) {
410
+ $this->log_info( 'User disabled all update notices' );
411
+ return false;
412
+ }
413
+
414
+ $versions = $this->get_most_recent_automatic_update();
415
+ // Was there an update?
416
+ if ( $versions == NULL ) {
417
+ $this->log_info( 'There was no automatic update' );
418
+ return false;
419
+ }
420
+
421
+ // Did the user prevent the notice for this particular version?
422
+ if ( $this->get_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_AUTOMATIC_UPDATE_NOTICE_FOR_VERSION . $versions[0] . '_' . $versions[1] ) ) {
423
+ $this->log_info( 'User disabled update notice for update from ' . $versions[0] . ' to ' . $versions[1] );
424
+ return false;
425
+ }
426
+
427
+ $this->log_info( 'Automatic update notice should be displayed' );
428
+ return true;
429
+ }
430
+
431
+ public function display_update_notice() {
432
+ if ( $this->is_manual_update_notice_to_be_displayed() ) {
433
+ $this->log_info( 'Display manual update notice' );
434
+
435
+ $description = $this->get_updates_description( $this->get_favicon_current_version(), $this->get_latest_manual_available_update() );
436
+ ?>
437
+ <div class="update-nag">
438
+ <p>
439
+ <strong><?php _e( 'An update is available on RealFaviconGenerator:', FBRFG_PLUGIN_SLUG ) ?></strong>
440
+ </p>
441
+
442
+ <?php echo $description ?>
443
+
444
+ <p>
445
+ <?php printf( __( 'You might want to <a href="%s">generate your favicon again</a>',
446
+ FBRFG_PLUGIN_SLUG ), admin_url( 'themes.php?page=' . __FILE__ . 'favicon_appearance_menu') ) ?>
447
+ </p>
448
+
449
+ <p>
450
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_NOTIICATION . '=0' ) ?>">
451
+ <?php _e( 'Hide this notice', FBRFG_PLUGIN_SLUG) ?>
452
+ </a>
453
+ |
454
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS . '=0' ) ?>">
455
+ <?php _e( 'Do not warn me again in case of update', FBRFG_PLUGIN_SLUG) ?>
456
+ </a>
457
+ </p>
458
+ </div>
459
+ <?php
460
+ }
461
+ else if ( $this->is_automatic_update_notice_to_be_displayed() ) {
462
+ $this->log_info( 'Display automatic update notice' );
463
+
464
+ $auto_versions = $this->get_most_recent_automatic_update();
465
+ $description = $this->get_updates_description( $auto_versions[0], $auto_versions[1] );
466
+ ?>
467
+ <div class="update-nag">
468
+ <p><strong><?php _e( 'Your favicon was updated automatically:', FBRFG_PLUGIN_SLUG ) ?></strong></p>
469
+
470
+ <?php echo $description ?>
471
+
472
+ <p>
473
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_AUTOMATIC_UPDATE_NOTIICATION . '=0' ) ?>">
474
+ <?php _e( 'Hide this notice', FBRFG_PLUGIN_SLUG) ?>
475
+ </a>
476
+ |
477
+ <a href="<?php echo $this->add_parameter_to_current_url( Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS . '=0' ) ?>">
478
+ <?php _e( 'Do not warn me again in case of update', FBRFG_PLUGIN_SLUG) ?>
479
+ </a>
480
+ </p>
481
+ </div>
482
+ <?php
483
+ }
484
+ }
485
+
486
+ public function process_ignored_notice() {
487
+ global $current_user;
488
+ $user_id = $current_user->ID;
489
+
490
+ if ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_NOTIICATION] ) &&
491
+ '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_NOTIICATION] ) {
492
+ $this->log_info( 'Disable manual update notice for ' . $this->get_latest_manual_available_update() );
493
+ $this->set_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE_FOR_VERSION . $this->get_latest_manual_available_update(), true );
494
+ }
495
+
496
+ if ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_AUTOMATIC_UPDATE_NOTIICATION] ) &&
497
+ '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_AUTOMATIC_UPDATE_NOTIICATION] ) {
498
+ $versions = $this->get_most_recent_automatic_update();
499
+ $this->log_info( 'Disable automatic update notice for ' . $versions[0] . '-' . $versions[1] );
500
+ $this->set_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_AUTOMATIC_UPDATE_NOTICE_FOR_VERSION .
501
+ $versions[0] . '_' . $versions[1], true );
502
+ }
503
+
504
+ $no_notices = NULL;
505
+ if ( ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) &&
506
+ '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) ) {
507
+ // The "no more notifications" link was clicked in the notification itself
508
+ $no_notices = true;
509
+ }
510
+ if ( isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::SETTINGS_FORM] ) &&
511
+ '1' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::SETTINGS_FORM] ) {
512
+ // The settings form was validated
513
+ $no_notices = ( ! isset( $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) ||
514
+ ( '0' == $_REQUEST[Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS] ) );
515
+ }
516
+ if ( $no_notices !== NULL ) {
517
+ $this->set_boolean_user_option( Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE, $no_notices );
518
+ }
519
+ }
520
+ }
trunk/admin/class-favicon-by-realfavicongenerator-api-response.php ADDED
@@ -0,0 +1,307 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+
4
+ define( 'RFG_PACKAGE_URL', 'package_url' );
5
+ define( 'RFG_COMPRESSION', 'compression' );
6
+ define( 'RFG_HTML_CODE', 'html_code' );
7
+ define( 'RFG_FILES_URLS', 'files_url' );
8
+ define( 'RFG_FILES_IN_ROOT', 'files_in_root' );
9
+ define( 'RFG_FILES_PATH', 'files_path' );
10
+ define( 'RFG_PREVIEW_PICTURE_URL', 'preview_picture_url' );
11
+ define( 'RFG_CUSTOM_PARAMETER', 'custom_parameter' );
12
+ define( 'RFG_VERSION', 'version' );
13
+ define( 'RFG_NON_INTERACTIVE_API_REQUEST', 'non_interactive_api_request' );
14
+
15
+ define( 'RFG_FAVICON_PRODUCTION_PACKAGE_PATH', 'favicon_production_package_path' );
16
+ define( 'RFG_FAVICON_COMPRESSED_PACKAGE_PATH', 'favicon_compressed_package_path' );
17
+ define( 'RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH', 'favicon_uncompressed_package_path' );
18
+ define( 'RFG_PREVIEW_PATH', 'preview_path' );
19
+
20
+ class Favicon_By_RealFaviconGenerator_Api_Response {
21
+
22
+ private $params = array();
23
+
24
+ public function __construct( $json ) {
25
+ if ( $json == NULL ) {
26
+ throw new InvalidArgumentException( "No response from RealFaviconGenerator" );
27
+ }
28
+
29
+ $response = json_decode( $json, true );
30
+
31
+ if ( $response == NULL ) {
32
+ throw new InvalidArgumentException( "JSON could not be parsed" );
33
+ }
34
+
35
+ $response = $this->getParam( $response, 'favicon_generation_result' );
36
+ $result = $this->getParam( $response, 'result' );
37
+ $status = $this->getParam( $result, 'status' );
38
+
39
+ if ( $status != 'success' ) {
40
+ $msg = $this->getParam( $result, 'error_message', false );
41
+ $msg = $msg != NULL ? $msg : 'An error occured';
42
+ throw new InvalidArgumentException( $msg );
43
+ }
44
+
45
+ $favicon = $this->getParam( $response, 'favicon' );
46
+ $this->params[RFG_PACKAGE_URL] = $this->getParam( $favicon, 'package_url' );
47
+ $this->params[RFG_COMPRESSION] = $this->getParam( $favicon, 'compression' ) == 'true';
48
+ $this->params[RFG_HTML_CODE] = $this->getParam( $favicon, 'html_code' );
49
+ $this->params[RFG_FILES_URLS] = $this->getParam( $favicon, 'files_urls' );
50
+
51
+ $filesLoc = $this->getParam( $response, 'files_location' );
52
+ $this->params[RFG_FILES_IN_ROOT] = $this->getParam( $filesLoc, 'type' ) == 'root';
53
+ $this->params[RFG_FILES_PATH] = $this->params[RFG_FILES_IN_ROOT] ? '/' : $this->getParam( $filesLoc, 'path' );
54
+
55
+ $this->params[RFG_PREVIEW_PICTURE_URL] = $this->getParam( $response, 'preview_picture_url', false );
56
+
57
+ $this->params[RFG_CUSTOM_PARAMETER] = $this->getParam( $response, 'custom_parameter', false );
58
+ $this->params[RFG_VERSION] = $this->getParam($response, 'version', false );
59
+
60
+ $this->params[RFG_NON_INTERACTIVE_API_REQUEST] = $this->getParam($response, 'non_interactive_request', false );
61
+ }
62
+
63
+ /**
64
+ * For example: <code>"http://realfavicongenerator.net/files/1234f5d2s34f3ds2/package.zip"</code>
65
+ */
66
+ public function getPackageUrl() {
67
+ return $this->params[RFG_PACKAGE_URL];
68
+ }
69
+
70
+ /**
71
+ * For example: <code>array( "http://realfavicongenerator.net/files/1234f5d2s34f3ds2/apple-touch-icon.png", ... )</code>
72
+ */
73
+ public function getFilesURLs() {
74
+ return $this->params[RFG_FILES_URLS];
75
+ }
76
+
77
+ /**
78
+ * For example: <code>"&lt;link ..."</code>
79
+ */
80
+ public function getHtmlCode() {
81
+ return $this->params[RFG_HTML_CODE];
82
+ }
83
+
84
+ /**
85
+ * <code>true</code> if the user chose to compress the pictures, <code>false</code> otherwise.
86
+ */
87
+ public function isCompressed() {
88
+ return $this->params[RFG_COMPRESSION];
89
+ }
90
+
91
+ /**
92
+ * <code>true</code> if the favicon files are to be stored in the root directory of the target web site, <code>false</code> otherwise.
93
+ */
94
+ public function isFilesInRoot() {
95
+ return $this->params[RFG_FILES_IN_ROOT];
96
+ }
97
+
98
+ /**
99
+ * Indicate where the favicon files should be stored in the target web site. For example: <code>"/"</code>, <code>"/path/to/icons"</code>.
100
+ */
101
+ public function getFilesLocation() {
102
+ return $this->params[RFG_FILES_PATH];
103
+ }
104
+
105
+ /**
106
+ * For example: <code>"http://realfavicongenerator.net/files/1234f5d2s34f3ds2/preview.png"</code>
107
+ */
108
+ public function getPreviewUrl() {
109
+ return $this->params[RFG_PREVIEW_PICTURE_URL];
110
+ }
111
+
112
+ /**
113
+ * Return the customer parameter, as it was transmitted during the invocation of the API.
114
+ */
115
+ public function getCustomParameter() {
116
+ return $this->params[RFG_CUSTOM_PARAMETER];
117
+ }
118
+
119
+ /**
120
+ * Return version of RealFaviconGenerator used to generate the favicon. Save this value to later check for updates.
121
+ */
122
+ public function getVersion() {
123
+ return $this->params[RFG_VERSION];
124
+ }
125
+
126
+ /**
127
+ * Return the non-interactive API request that matches the current interactive request.
128
+ */
129
+ public function getNonInteractiveAPIRequest() {
130
+ return $this->params[RFG_NON_INTERACTIVE_API_REQUEST];
131
+ }
132
+
133
+ private function getParam( $params, $paramName, $throwIfNotFound = true ) {
134
+ if ( isset( $params[$paramName] ) ) {
135
+ return $params[$paramName];
136
+ }
137
+ else if ( $throwIfNotFound ) {
138
+ throw new InvalidArgumentException( "Cannot find parameter " . $paramName );
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Download and extract the files referenced by the response sent back by RealFaviconGenerator.
144
+ *
145
+ * Warning: as this method does HTTP accesses, calling it can take a few seconds. Better invoke it
146
+ * in an Ajax call, to not slow down the user experience.
147
+ */
148
+ public function downloadAndUnpack( $outputDirectory = NULL ) {
149
+ global $wp_filesystem;
150
+ if ( $outputDirectory == NULL ) {
151
+ $outputDirectory = get_temp_dir();
152
+ }
153
+
154
+ $outputDirectory = $this->append_directory_separator( $outputDirectory );
155
+
156
+ if ( $this->getPackageUrl() != NULL ) {
157
+ $extractedPath = $outputDirectory . 'favicon_package';
158
+ if ( ! file_exists( $extractedPath ) ) {
159
+ if ( mkdir( $extractedPath, 0755, true ) !== true ) {
160
+ throw new InvalidArgumentException(
161
+ sprintf( __( 'Cannot create directory %s to store the favicon package content', FBRFG_PLUGIN_SLUG), $extractedPath ) );
162
+ }
163
+ }
164
+
165
+ try {
166
+ $this->downloadZipFile( $outputDirectory, $extractedPath, $this->getPackageUrl() );
167
+ }
168
+ catch(Exception $e) {
169
+ // Zip file download failed, try getting files directly
170
+ $this->downloadFilesDirectly( $extractedPath, array() );
171
+ }
172
+ }
173
+
174
+ if ( $this->getPreviewUrl() != NULL ) {
175
+ $previewPath = $outputDirectory . 'favicon_preview.png';
176
+ $this->downloadFile( $previewPath, $this->getPreviewUrl() );
177
+ $this->params[RFG_PREVIEW_PATH] = $previewPath;
178
+ }
179
+ }
180
+
181
+ public function downloadFilesDirectly( $outputDirectory, $filesURLs ) {
182
+ foreach($this->getFilesURLs() as $fileURL ) {
183
+ $parts = parse_url( $fileURL );
184
+ $filePath = $outputDirectory . DIRECTORY_SEPARATOR .
185
+ basename( $parts['path'] );
186
+ $this->downloadFile( $filePath, $fileURL );
187
+ }
188
+
189
+ $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $outputDirectory;
190
+ if ( $this->isCompressed() ) {
191
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath;
192
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = NULL;
193
+ }
194
+ else {
195
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = NULL;
196
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
197
+ }
198
+ }
199
+
200
+ public function downloadZipFile( $packageDirectory, $extractedPath, $packageUrl ) {
201
+ $packagePath = $packageDirectory . 'favicon_package.zip';
202
+ $this->downloadFile( $packagePath, $packageUrl );
203
+
204
+ $ret = WP_Filesystem();
205
+ $result = unzip_file( $packagePath, $extractedPath );
206
+ if ( $result !== true ) {
207
+ $explanation = ( is_wp_error( $result ) )
208
+ ? $result->get_error_message()
209
+ : __( 'Unknown reason', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG );
210
+ if ( get_class($wp_filesystem) != 'WP_Filesystem_Direct' ) {
211
+ $explanation .= ' ' . __( "Apparently WordPress has no direct access to the file system (it uses another mean such as FTP). " .
212
+ "This may be the root cause of this issue.", Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG );
213
+ }
214
+ throw new InvalidArgumentException(
215
+ sprintf( __( 'Error while unziping the favicon package %s to directory %s', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ),
216
+ $packagePath, $extractedPath ) . ': ' . $explanation );
217
+ }
218
+
219
+ if ( $this->isCompressed() ) {
220
+ // As of today, when the user chooses the compress the picture,
221
+ // the package is provided in two flavors, in two distinct directories.
222
+ // Later, only the compressed version will be provided. Thus, the following code
223
+ // handles both scenarios.
224
+ if ( is_dir( $extractedPath . DIRECTORY_SEPARATOR . 'compressed' ) ) {
225
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath .
226
+ DIRECTORY_SEPARATOR . 'compressed';
227
+ } else {
228
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = $extractedPath;
229
+ }
230
+
231
+ if ( is_dir( $extractedPath . DIRECTORY_SEPARATOR . 'uncompressed' ) ) {
232
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath .
233
+ DIRECTORY_SEPARATOR . 'uncompressed';
234
+ } else {
235
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
236
+ }
237
+
238
+ $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH];
239
+ }
240
+ else {
241
+ $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH] = NULL;
242
+ $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH] = $extractedPath;
243
+ $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH] = $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH];
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Directory where the compressed files are stored. Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
249
+ * Can be <code>NULL</code>.
250
+ */
251
+ public function getCompressedPackagePath() {
252
+ return $this->params[RFG_FAVICON_COMPRESSED_PACKAGE_PATH];
253
+ }
254
+
255
+ /**
256
+ * Directory where the uncompressed files are stored. Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
257
+ * Can be <code>NULL</code>.
258
+ */
259
+ public function getUncompressedPackagePath() {
260
+ return $this->params[RFG_FAVICON_UNCOMPRESSED_PACKAGE_PATH];
261
+ }
262
+
263
+ /**
264
+ * Directory where the production favicon files are stored.
265
+ * These are the files to deployed to the targeted web site. When the user asked for compression,
266
+ * this is the path to the compressed folder. Else, this is the path to the regular files folder.
267
+ * Method <code>downloadAndUnpack</code> must be called first in order to populate this field.
268
+ */
269
+ public function getProductionPackagePath() {
270
+ return $this->params[RFG_FAVICON_PRODUCTION_PACKAGE_PATH];
271
+ }
272
+
273
+ /**
274
+ * Path to the preview picture.
275
+ */
276
+ public function getPreviewPath() {
277
+ return $this->params[RFG_PREVIEW_PATH];
278
+ }
279
+
280
+ private function downloadFile( $localPath, $url ) {
281
+ $resp = wp_remote_get( $url, array( 'filename' => $localPath, 'stream' => true ) );
282
+ if ( ( $resp == NULL ) || ( $resp == false ) || ( is_wp_error( $resp ) ) || ( $resp['response'] == NULL ) ||
283
+ ( $resp['response']['code'] == NULL ) || ( $resp['response']['code'] != 200 ) ) {
284
+ $explanation = is_wp_error( $resp ) ? ( ': ' . $resp->get_error_message() ) : '' ;
285
+ throw new InvalidArgumentException(
286
+ sprintf( __( 'Cannot download file at %s', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ), $url ) . $explanation );
287
+ }
288
+ if ( ( ! file_exists( $localPath ) ) || ( filesize( $localPath ) <= 0 ) ) {
289
+ throw new InvalidArgumentException( __( 'Cannot store downloaded file locally', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG ) );
290
+ }
291
+ }
292
+
293
+ public function append_directory_separator( $filename ) {
294
+ return $filename .
295
+ ( ( $this->ends_with( $filename, DIRECTORY_SEPARATOR ))
296
+ ? ''
297
+ : DIRECTORY_SEPARATOR );
298
+ }
299
+
300
+ // See http://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php#answer-10473026
301
+ public function ends_with( $haystack, $needle ) {
302
+ return $needle === "" ||
303
+ ( ( $temp = strlen( $haystack ) - strlen( $needle ) ) >= 0
304
+ && strpos( $haystack, $needle, $temp ) !== false );
305
+ }
306
+
307
+ }
trunk/admin/views/appearance.php ADDED
@@ -0,0 +1,317 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+ ?>
4
+
5
+ <div class="wrap">
6
+
7
+ <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
8
+
9
+ <?php if ( $new_favicon_params_url ) { ?>
10
+ <div id="install_in_progress_message" class="updated">
11
+ <p><?php _e( 'Favicon installation in progress. Please wait...', FBRFG_PLUGIN_SLUG ) ?></p>
12
+ </div>
13
+
14
+ <div id="install_completed_message" class="updated" style="display:none">
15
+ <p>
16
+ <?php _e( 'Favicon installed!', FBRFG_PLUGIN_SLUG ) ?>
17
+ <span id="rank_notice" style="display:none">
18
+ <?php printf( __( 'Do you like the result? If so, would you like to <a %s>rate the plugin</a>?', FBRFG_PLUGIN_SLUG ),
19
+ 'target="_blank" href="https://wordpress.org/support/view/plugin-reviews/favicon-by-realfavicongenerator"' ) ?>
20
+ </span>
21
+ </p>
22
+ </div>
23
+ <div id="install_error_message" class="error" style="display:none"><p></p></div>
24
+
25
+ <div id="install_completed_container" style="display:none">
26
+ <h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
27
+
28
+ <?php include_once( plugin_dir_path(__FILE__) . DIRECTORY_SEPARATOR .
29
+ 'keep_active_notice.php' ); ?>
30
+
31
+ <p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
32
+ <img id="preview_image">
33
+
34
+ <p>
35
+ <?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
36
+ 'id="checker_link" class="button-primary" href="#"' ) ?>
37
+ <?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
38
+ </p>
39
+ </div>
40
+ <?php } else { ?>
41
+ <h3><?php _e( 'Current favicon', FBRFG_PLUGIN_SLUG ) ?></h3>
42
+
43
+ <?php if ( $favicon_configured) { ?>
44
+ <?php include_once( plugin_dir_path(__FILE__) . DIRECTORY_SEPARATOR .
45
+ 'keep_active_notice.php' ); ?>
46
+ <p><?php _e( 'The favicon is up and ready.', FBRFG_PLUGIN_SLUG ) ?></p>
47
+ <?php } else { ?>
48
+ <p><?php _e( 'No favicon has been configured yet.', FBRFG_PLUGIN_SLUG ) ?></p>
49
+ <?php } ?>
50
+
51
+ <?php if ( $favicon_configured ) {
52
+ if ( $preview_url ) { ?>
53
+
54
+ <img src="<?php echo $preview_url ?>">
55
+
56
+ <?php } ?>
57
+ <p>
58
+ <?php printf( __( '<a %s>Check your favicon</a> with RealFaviconGenerator\'s favicon checker.', FBRFG_PLUGIN_SLUG ),
59
+ 'class="button-primary" ' .
60
+ 'href="https://realfavicongenerator.net/favicon_checker?site=' . urlencode( home_url() ) . ($favicon_in_root ? '' : '&ignore_root_issues=on') . '"' ) ?>
61
+ <?php _e( 'This option works only if your site is accessible from the outside.', FBRFG_PLUGIN_SLUG ) ?>
62
+ </p>
63
+ <?php
64
+ }
65
+ } ?>
66
+
67
+ <div id="favicon_form_container" <?php echo $new_favicon_params_url ? 'style="display:none"' : '' ?>>
68
+ <h3><?php _e( 'Favicon generation', FBRFG_PLUGIN_SLUG ) ?></h3>
69
+ <?php if ( $favicon_configured || $new_favicon_params_url ) { ?>
70
+ <p><?php _e( 'You can replace the existing favicon.', FBRFG_PLUGIN_SLUG ) ?></p>
71
+ <?php } ?>
72
+ <form role="form" method="post" action="https://realfavicongenerator.net/api/favicon_generator" id="favicon_form">
73
+ <input type="hidden" name="json_params" id="json_params"/>
74
+ <table class="form-table"><tbody>
75
+ <tr valign="top">
76
+ <th scope="row">
77
+ <label for="master_picture_url"><?php _e( 'Master picture URL', FBRFG_PLUGIN_SLUG ) ?></label>
78
+ </th>
79
+ <td>
80
+ <input id="master_picture_url" name="master_picture_url" size="55">
81
+ <button id="upload_image_button" value="<?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>">
82
+ <?php _e( 'Select from the Media Library', FBRFG_PLUGIN_SLUG ) ?>
83
+ </button>
84
+ <p class="description">
85
+ <?php _e( 'Submit a square picture, at least 70x70 (recommended: 260x260 or more)', FBRFG_PLUGIN_SLUG ) ?>
86
+ <br>
87
+ <?php _e( 'If the picture is on your hard drive, you can leave this field blank and upload the picture from RealFaviconGenerator.', FBRFG_PLUGIN_SLUG ) ?>
88
+ </p>
89
+ </td>
90
+ </tr>
91
+
92
+ <?php if ( $can_rewrite ) { ?>
93
+ <tr valign="top">
94
+ <th scope="row">
95
+ <label for="rewrite"><?php _e( 'Favicon files in root directory', FBRFG_PLUGIN_SLUG ) ?></label>
96
+ </th>
97
+ <td>
98
+ <input type="checkbox" name="rewrite" id="rewrite" checked="true">
99
+ <p class="description">
100
+ <?php _e( 'The plugin always stores the favicon files in a dedicated directory.', FBRFG_PLUGIN_SLUG ) ?>
101
+ <br>
102
+ <?php _e( 'However, if this option is enabled, the plugin takes advantage of the permalink feature and the favicon files appear to be in the root directory', FBRFG_PLUGIN_SLUG ) ?>
103
+ (<a href="https://realfavicongenerator.net/faq#why_icons_in_root"><?php _e( 'recommended', FBRFG_PLUGIN_SLUG ) ?></a>)
104
+ </p>
105
+ </td>
106
+ </tr>
107
+ <?php } ?>
108
+ </tbody></table>
109
+
110
+ <p class="submit">
111
+ <input type="submit" name="Generate favicon" id="generate_favicon_button" class="button-primary"
112
+ value="<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>">
113
+ </p>
114
+ </form>
115
+ </div>
116
+ </div>
117
+
118
+ <script type="text/javascript">
119
+ var picData = null;
120
+
121
+ function urlToBase64(url, callback) {
122
+ var img = new Image();
123
+ img.onload = function() {
124
+ callback(getBase64Image(img));
125
+ }
126
+ img.onerror = function() {
127
+ callback(null);
128
+ }
129
+ img.src = url;
130
+ }
131
+
132
+ // See http://stackoverflow.com/questions/934012/get-image-data-in-javascript
133
+ // Credits: Matthew Crumley
134
+ function getBase64Image(img) {
135
+ try {
136
+ var canvas = document.createElement("canvas");
137
+ canvas.width = img.width;
138
+ canvas.height = img.height;
139
+
140
+ var ctx = canvas.getContext("2d");
141
+ ctx.drawImage(img, 0, 0);
142
+
143
+ var dataURL = canvas.toDataURL("image/png");
144
+
145
+ return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
146
+ }
147
+ catch(err) {
148
+ console.log("Cannot get the picture from the Media Library: " + err);
149
+ return null;
150
+ }
151
+ }
152
+
153
+ function computeJson() {
154
+ var params = { favicon_generation: {
155
+ callback: {},
156
+ master_picture: {},
157
+ files_location: {},
158
+ api_key: "87d5cd739b05c00416c4a19cd14a8bb5632ea563"
159
+ }};
160
+
161
+ if (jQuery('#master_picture_url').val().length <= 0) {
162
+ params.favicon_generation.master_picture.type = "no_picture";
163
+ params.favicon_generation.master_picture.demo = true;
164
+ }
165
+ else if (pictureContent != null) {
166
+ params.favicon_generation.master_picture.type = "inline";
167
+ params.favicon_generation.master_picture.content = pictureContent;
168
+ }
169
+ else {
170
+ params.favicon_generation.master_picture.type = "url";
171
+ params.favicon_generation.master_picture.url = jQuery('#master_picture_url').val();
172
+ }
173
+
174
+ <?php if ( $can_rewrite ) { ?>
175
+ if ( jQuery("#rewrite").is(':checked') ) {
176
+ params.favicon_generation.files_location.type = 'root';
177
+ }
178
+ else {
179
+ params.favicon_generation.files_location.type = 'path';
180
+ params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
181
+ }
182
+ <?php } else { ?>
183
+ params.favicon_generation.files_location.type = 'path';
184
+ params.favicon_generation.files_location.path = '<?php echo $pic_path ?>';
185
+ <?php } ?>
186
+
187
+ params.favicon_generation.callback.type = 'url';
188
+ params.favicon_generation.callback.url = "<?php echo admin_url('themes.php?page=' . ( ( isset( $_REQUEST['page'] ) )
189
+ ? $_REQUEST['page']
190
+ : 'favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-admin.phpfavicon_appearance_menu' ) ) ?>";
191
+ params.favicon_generation.callback.short_url = 'true';
192
+ params.favicon_generation.callback.path_only = 'true';
193
+ params.favicon_generation.callback.custom_parameter = "<?php echo $nonce ?>";
194
+
195
+ return params;
196
+ }
197
+
198
+ var pictureContent = null;
199
+ var pictureContentTimestamp = null;
200
+
201
+ function prepareInlinePicture(pictureUrl) {
202
+ var timestamp = new Date().getTime();
203
+ pictureContentTimestamp = timestamp;
204
+
205
+ jQuery('#generate_favicon_button').attr('disabled', 'disabled');
206
+ jQuery('#generate_favicon_button').val("<?php _e( 'Preparing master picture...', FBRFG_PLUGIN_SLUG ) ?>");
207
+
208
+ pictureContent = null;
209
+
210
+ urlToBase64(pictureUrl, function(content) {
211
+ if (content != null) {
212
+ pictureContent = content;
213
+ }
214
+ restoreGenerateFaviconButton();
215
+ });
216
+
217
+ setTimeout(function() {
218
+ if (pictureContentTimestamp == timestamp) {
219
+ restoreGenerateFaviconButton();
220
+ }
221
+ }, 3000);
222
+ }
223
+
224
+ function restoreGenerateFaviconButton() {
225
+ jQuery('#generate_favicon_button').removeAttr('disabled');
226
+ jQuery('#generate_favicon_button').val("<?php _e( 'Generate favicon', FBRFG_PLUGIN_SLUG ) ?>");
227
+ }
228
+
229
+ <?php if ( $new_favicon_params_url ) { ?>
230
+ var data = {
231
+ action: '<?php echo Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '_install_new_favicon' ?>',
232
+ json_result_url: '<?php echo $new_favicon_params_url ?>'
233
+ };
234
+ <?php } ?>
235
+
236
+ jQuery(document).ready(function() {
237
+ jQuery('#favicon_form').submit(function(e) {
238
+ jQuery('#json_params').val(JSON.stringify(computeJson()));
239
+ });
240
+
241
+ <?php if ( $new_favicon_params_url ) { ?>
242
+ jQuery.get('<?php echo $ajax_url ?>', data)
243
+ .done(function(response) {
244
+ if (response.status == 'success') {
245
+ jQuery('#preview_image').attr('src', response.preview_url);
246
+ var checkerUrl = "https://realfavicongenerator.net/favicon_checker?site=<?php echo urlencode( home_url() ) ?>" +
247
+ (response.favicon_in_root ? '' : '&ignore_root_issues=on');
248
+ jQuery('#checker_link').attr('href', checkerUrl);
249
+ jQuery('#install_in_progress_message').fadeOut(function() {
250
+ jQuery('#install_completed_message').fadeIn(function() {
251
+ jQuery('#rank_notice').fadeIn(function() {
252
+ jQuery('#rank_notice').effect('pulsate', {
253
+ times: 3,
254
+ duration: 2000
255
+ });
256
+ });
257
+ });
258
+ jQuery('#install_completed_container').fadeIn();
259
+ jQuery('#favicon_form_container').fadeIn();
260
+ });
261
+ }
262
+ else {
263
+ var msg = "<?php _e( "An error occured", FBRFG_PLUGIN_SLUG ) ?>";
264
+ if (response.message != null) {
265
+ msg += ": " + response.message;
266
+ }
267
+ jQuery('#install_error_message p').html(msg);
268
+ jQuery('#install_in_progress_message').fadeOut(function() {
269
+ jQuery('#install_error_message').fadeIn();
270
+ });
271
+ }
272
+ })
273
+ .fail(function() {
274
+ var msg = "<?php _e( "An internal error occurred", FBRFG_PLUGIN_SLUG ) ?>";
275
+ jQuery('#install_error_message p').html(msg);
276
+ jQuery('#install_in_progress_message').fadeOut(function() {
277
+ jQuery('#install_error_message').fadeIn();
278
+ });
279
+ });
280
+ <?php } ?>
281
+
282
+ var fileFrame;
283
+
284
+ jQuery('#upload_image_button').on('click', function(event) {
285
+ event.preventDefault();
286
+
287
+ if (fileFrame) {
288
+ fileFrame.open();
289
+ return;
290
+ }
291
+
292
+ // Create the media frame.
293
+ fileFrame = wp.media.frames.file_frame = wp.media({
294
+ title: jQuery(this).data('uploader_title'),
295
+ button: {
296
+ text: jQuery(this).data('uploader_button_text'),
297
+ },
298
+ multiple: false
299
+ });
300
+
301
+ fileFrame.on('select', function() {
302
+ attachment = fileFrame.state().get('selection').first().toJSON();
303
+ jQuery('#master_picture_url').val(attachment.url);
304
+ prepareInlinePicture(attachment.url);
305
+ });
306
+
307
+ fileFrame.open();
308
+ });
309
+
310
+
311
+ jQuery('#master_picture_url').change(function() {
312
+ // Whatever the previous content of the field, forget its cached data
313
+ pictureContent = null;
314
+ restoreGenerateFaviconButton();
315
+ });
316
+ });
317
+ </script>
trunk/admin/views/keep_active_notice.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <div id="keep_active_notice" class="notice notice-info">
2
+ <p>
3
+ <?php _e( "You should keep this plugin active. As soon as you deactive it, your favicon is disabled, too.",
4
+ FBRFG_PLUGIN_SLUG ) ?>
5
+ <?php printf( __( 'You may wonder <a %s>why it works that way</a>.',
6
+ FBRFG_PLUGIN_SLUG ), 'target="_blank" href="https://realfavicongenerator.net/blog/why-does-the-favicon-by-realfavicongenerator-wordpress-plugin-need-to-be-activated-all-the-time/"') ?>
7
+ <?php printf( __( 'In any case, <a %s>the plugin is super lightweight</a> and will not affect the performance of your site.',
8
+ FBRFG_PLUGIN_SLUG ), 'target="_blank" href="https://realfavicongenerator.net/blog/rfgs-wordpress-plugin-and-performance/"') ?>
9
+ </p>
10
+ </div>
trunk/admin/views/settings.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+ ?>
4
+
5
+ <div class="wrap">
6
+ <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
7
+
8
+ <p>
9
+ <?php printf(
10
+ __( 'Do you want to setup your favicon? Go to <a href="%s">Appearance &gt; Favicon</a>', FBRFG_PLUGIN_SLUG ),
11
+ $favicon_appearance_url ) ?>
12
+ </p>
13
+
14
+ <form action="<?php echo $favicon_admin_url ?>" method="post">
15
+
16
+ <table class="form-table">
17
+ <tbody>
18
+ <tr>
19
+ <th scope="row"><?php _e('Display update notifications', FBRFG_PLUGIN_SLUG ) ?></th>
20
+ <td>
21
+ <input type="checkbox" name="<?php echo Favicon_By_RealFaviconGenerator_Admin::DISMISS_UPDATE_ALL_UPDATE_NOTIICATIONS ?>"
22
+ value="1" <?php echo( $display_update_notifications ? 'checked="checked"' : '' ) ?>>
23
+ <p class="description">
24
+ <?php _e('Get notifications when RealFaviconGenerator is updated. For example, when Apple releases a new version of iOS or a new platform is supported.', FBRFG_PLUGIN_SLUG ) ?>
25
+ </p>
26
+ </td>
27
+ </tr>
28
+ </tbody>
29
+ </table>
30
+
31
+ <input type="hidden" name="<?php echo Favicon_By_RealFaviconGenerator_Admin::SETTINGS_FORM ?>" value="1">
32
+
33
+ <input name="Submit" type="submit" class="button-primary" value="<?php _e( 'Save changes', FBRFG_PLUGIN_SLUG ) ?>">
34
+ </form>
35
+
36
+ </div>
trunk/favicon-by-realfavicongenerator.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Favicon by RealFaviconGenerator.
4
+ *
5
+ * @package favicon-by-realfavicongenerator
6
+ * @author Philippe Bernard <philippe@realfavicongenerator.net>
7
+ * @license GPLv2
8
+ * @link http://www.gnu.org/licenses/gpl-2.0.html
9
+ * @copyright 2014 RealFaviconGenerator
10
+ *
11
+ * @wordpress-plugin
12
+ * Plugin Name: Favicon by RealFaviconGenerator
13
+ * Plugin URI: http://realfavicongenerator.net/extensions/wordpress
14
+ * Description: Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, Android devices, Windows 8 tablets, etc.
15
+ * Version: 1.3.21
16
+ * Author: Philippe Bernard
17
+ * Author URI: http://realfavicongenerator.net/
18
+ * License: GPLv2
19
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
20
+ * Text Domain: favicon-by-realfavicongenerator
21
+ * Domain Path: /languages/
22
+ */
23
+
24
+ // If this file is called directly, abort.
25
+ if ( ! defined( 'WPINC' ) ) {
26
+ die;
27
+ }
28
+
29
+ /*----------------------------------------------------------------------------*
30
+ * Public-Facing Functionality
31
+ *----------------------------------------------------------------------------*/
32
+
33
+ require_once( plugin_dir_path( __FILE__ ) . 'public' . DIRECTORY_SEPARATOR .
34
+ 'class-favicon-by-realfavicongenerator.php' );
35
+
36
+ register_activation_hook( __FILE__, array( 'Favicon_By_RealFaviconGenerator', 'activate' ) );
37
+ register_deactivation_hook( __FILE__, array( 'Favicon_By_RealFaviconGenerator', 'deactivate' ) );
38
+
39
+ add_action( 'plugins_loaded', array( 'Favicon_By_RealFaviconGenerator', 'get_instance' ) );
40
+
41
+ /*----------------------------------------------------------------------------*
42
+ * Dashboard and Administrative Functionality
43
+ *----------------------------------------------------------------------------*/
44
+
45
+ if ( is_admin() ) {
46
+
47
+ require_once( plugin_dir_path( __FILE__ ) . 'admin' . DIRECTORY_SEPARATOR .
48
+ 'class-favicon-by-realfavicongenerator-admin.php' );
49
+ add_action( 'plugins_loaded', array( 'Favicon_By_RealFaviconGenerator_Admin', 'get_instance' ) );
50
+
51
+ }
trunk/languages/favicon-by-realfavicongenerator-cs_CZ.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-cs_CZ.po ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2015-11-22 17:39+0100\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-11-22 18:18+0100\n"
13
+ "Language-Team: \n"
14
+ "X-Generator: Poedit 1.8.6\n"
15
+ "Last-Translator: nothing <nothing@nothing.com>\n"
16
+ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17
+ "Language: cs_CZ\n"
18
+
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
22
+ msgid "Favicon"
23
+ msgstr "Favikona"
24
+
25
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
26
+ msgid "Favicon Settings"
27
+ msgstr "Nastavení favikony"
28
+
29
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
30
+ msgid ""
31
+ "Nonce was not recognized. This case is supposed to happen only in case of "
32
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
33
+ "contact@realfavicongenerator.net\\\">contact us</a>."
34
+ msgstr ""
35
+ "Nonce nebyl rozpoznán. Tento stav se stává pouze v případě XSS útoku. Pokud "
36
+ "je něco v nepořádku, prosím neprodleně <a href=\\\"mailto:"
37
+ "contact@realfavicongenerator.net\\\">nás kontaktujte</a>."
38
+
39
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
40
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
41
+ msgid "Cannot create directory %s to store the favicon package"
42
+ msgstr "Nelze vytvořit adresář %s pro uložení balíčku favikon"
43
+
44
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
45
+ msgid "An update is available on RealFaviconGenerator:"
46
+ msgstr "Aktualizace RealFaviconGenerator je dostupná:"
47
+
48
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
49
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
50
+ msgstr "Možná je potřeba <a href=\"%s\">znovu vytvořit favikon</a>"
51
+
52
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
53
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
54
+ msgid "Hide this notice"
55
+ msgstr "Skrýt toto oznámení"
56
+
57
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
58
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
59
+ msgid "Do not warn me again in case of update"
60
+ msgstr "Nikdy již neupozornit na novou verzi"
61
+
62
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
63
+ msgid "Your favicon was updated automatically:"
64
+ msgstr "Vaše favikona byla automaticky aktualizována:"
65
+
66
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
67
+ msgid "Cannot create directory %s to store the favicon package content"
68
+ msgstr "Nelze vytvořit adresář %s pro uložení obsah balíčku favikon"
69
+
70
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
71
+ msgid "Unknown reason"
72
+ msgstr "Neznámý důvod selhání."
73
+
74
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
75
+ msgid "Error while unziping the favicon package %s to directory %s"
76
+ msgstr "Nastala chyba při rozbalování balíčku favikon %s ve složce %s"
77
+
78
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
79
+ msgid "Cannot download file at %s"
80
+ msgstr "Soubor %s nelze stáhnout"
81
+
82
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
83
+ msgid "Cannot store downloaded file locally"
84
+ msgstr "Soubor nelze uložit"
85
+
86
+ #: admin/views/appearance.php:11
87
+ msgid "Favicon installation in progress. Please wait..."
88
+ msgstr "Instalace favikony probíhá. Prosím, čekejte..."
89
+
90
+ #: admin/views/appearance.php:16
91
+ msgid "Favicon installed!"
92
+ msgstr "Favikona nainstalována!"
93
+
94
+ #: admin/views/appearance.php:18
95
+ msgid ""
96
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
97
+ msgstr ""
98
+ "Líbí se Vám výsledek? Pokud ano, můžete prosím <a %s>ohodnotit plugin</a>?"
99
+
100
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
101
+ msgid "Current favicon"
102
+ msgstr "Stávající favikona"
103
+
104
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
105
+ msgid "The favicon is up and ready."
106
+ msgstr "Favikona je připravená."
107
+
108
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
109
+ msgid ""
110
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
111
+ msgstr "<a %s>Zkontrolovat favikony</a> přes službu RealFaviconGenerator."
112
+
113
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
114
+ msgid "This option works only if your site is accessible from the outside."
115
+ msgstr "Funguje pouze v případě webu dostupného z internetu."
116
+
117
+ #: admin/views/appearance.php:42
118
+ msgid "No favicon has been configured yet."
119
+ msgstr "Favikona není vytvořena."
120
+
121
+ #: admin/views/appearance.php:62
122
+ msgid "Favicon generation"
123
+ msgstr "Vygenerovat favikonu"
124
+
125
+ #: admin/views/appearance.php:64
126
+ msgid "You can replace the existing favicon."
127
+ msgstr "Můžete nahradit stávající favikon."
128
+
129
+ #: admin/views/appearance.php:71
130
+ msgid "Master picture URL"
131
+ msgstr "Obrázek"
132
+
133
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
134
+ msgid "Select from the Media Library"
135
+ msgstr "Vybrat z knihovny médií"
136
+
137
+ #: admin/views/appearance.php:79
138
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
139
+ msgstr ""
140
+ "Obrázek musí být čtverec, alespoň 70x70px (doporučeno je však 260x260 a "
141
+ "více)"
142
+
143
+ #: admin/views/appearance.php:81
144
+ msgid ""
145
+ "If the picture is on your hard drive, you can leave this field blank and "
146
+ "upload the picture from RealFaviconGenerator."
147
+ msgstr ""
148
+ "Pokud je obrázek uložen na Vašem pevném disku, můžete nechat pole prázdné a "
149
+ "nahrát obrázek přímo přes službu RealFaviconGenerator."
150
+
151
+ #: admin/views/appearance.php:89
152
+ msgid "Favicon files in root directory"
153
+ msgstr "Soubory favikony v kořenovém adresáři"
154
+
155
+ #: admin/views/appearance.php:94
156
+ msgid "The plugin always stores the favicon files in a dedicated directory."
157
+ msgstr "Plugin vždy ukládá soubory favikon do vyhrazeného adresáře."
158
+
159
+ #: admin/views/appearance.php:96
160
+ msgid ""
161
+ "However, if this option is enabled, the plugin takes advantage of the "
162
+ "permalink feature and the favicon files appear to be in the root directory"
163
+ msgstr ""
164
+ "Pokud je však tato možnost povolena, plugin využije funkce permalink a "
165
+ "soubory favikon umístí do kořenového adresáře webu."
166
+
167
+ #: admin/views/appearance.php:97
168
+ msgid "recommended"
169
+ msgstr "doporučeno"
170
+
171
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
172
+ msgid "Generate favicon"
173
+ msgstr "Vygenerovat favikonu"
174
+
175
+ #: admin/views/appearance.php:200
176
+ msgid "Preparing master picture..."
177
+ msgstr "Připravuje se obrázek..."
178
+
179
+ #: admin/views/appearance.php:257
180
+ msgid "An error occured"
181
+ msgstr "Nastala chyba"
182
+
183
+ #: admin/views/appearance.php:268
184
+ msgid "An internal error occurred"
185
+ msgstr "Nastala vnitřní chyba"
186
+
187
+ #: admin/views/settings.php:13
188
+ msgid ""
189
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
190
+ "Favicon</a>"
191
+ msgstr ""
192
+ "Chcete nastavit favikonu? Přejděte na <a href=\"%s\">Vzhled &gt; Favikona</"
193
+ "a>"
194
+
195
+ #: admin/views/settings.php:22
196
+ msgid "Display update notifications"
197
+ msgstr "Zobrazit oznámení o aktualizaci"
198
+
199
+ #: admin/views/settings.php:27
200
+ msgid ""
201
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
202
+ "Apple releases a new version of iOS or a new platform is supported."
203
+ msgstr ""
204
+ "Zobrazí upozornění, jakmile je favikona upravena na nejnovější verzi "
205
+ "RealFaviconGenerator. Například, když Apple vydá nový iOS."
206
+
207
+ #: admin/views/settings.php:36
208
+ msgid "Save changes"
209
+ msgstr "Uložit změny"
210
+
211
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
212
+ msgid ""
213
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
214
+ "update"
215
+ msgstr "Navštivte <a href=\"%s\">RFG's historii změn</a>"
216
+
217
+ #. Plugin Name of the plugin/theme
218
+ msgid "Favicon by RealFaviconGenerator"
219
+ msgstr ""
220
+
221
+ #. Plugin URI of the plugin/theme
222
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
223
+ msgstr ""
224
+
225
+ #. Description of the plugin/theme
226
+ msgid ""
227
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
228
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
229
+ msgstr ""
230
+ "Vytvořit a nainstalovat favikony nejen pro známé platformy PC/Mac, ale také "
231
+ "iPhone/iPad, zařízení Android, tablety Windows 8, a další."
232
+
233
+ #. Author of the plugin/theme
234
+ msgid "Philippe Bernard"
235
+ msgstr ""
236
+
237
+ #. Author URI of the plugin/theme
238
+ msgid "http://realfavicongenerator.net/"
239
+ msgstr ""
trunk/languages/favicon-by-realfavicongenerator-da_DK.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-da_DK.po ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2015-06-24 10:34+0100\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-06-24 10:48+0100\n"
13
+ "Last-Translator: Alexander Leo-Hansen <alexanderleoh@gmail.com>\n"
14
+ "Language-Team: \n"
15
+ "X-Generator: Poedit 1.8.1\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "Language: da_DK\n"
18
+
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
22
+ #, fuzzy
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
27
+ msgid "Favicon Settings"
28
+ msgstr "Favicon indstillinger"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
31
+ msgid ""
32
+ "Nonce was not recognized. This case is supposed to happen only in case of "
33
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
34
+ "contact@realfavicongenerator.net\\\">contact us</a>."
35
+ msgstr ""
36
+ "Nonce blev ikke genkendt. Det er kun mening at dette skal skal ske i "
37
+ "tilfælde af et XSS angreb. Hvis du tror noget er galt, kan du <a href=\\"
38
+ "\"mailto:contact@realfavicongenerator.net\\\">kontakte os</a>."
39
+
40
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
41
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
42
+ msgid "Cannot create directory %s to store the favicon package"
43
+ msgstr "Kan ikke oprette mappen %s til opbevaring af favicon."
44
+
45
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
46
+ msgid "An update is available on RealFaviconGenerator:"
47
+ msgstr "En opdatering er tilgængelig på RealFaviconGenerator:"
48
+
49
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
50
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
51
+ msgstr "Du kan <a href=\"%s\">generere</a> dit favicon igen"
52
+
53
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
54
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
55
+ #, fuzzy
56
+ msgid "Hide this notice"
57
+ msgstr "Skjul denne meddelse"
58
+
59
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
60
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
61
+ msgid "Do not warn me again in case of update"
62
+ msgstr "Advar mig ikke om fremtidige opdateringer"
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
65
+ msgid "Your favicon was updated automatically:"
66
+ msgstr "Dit favicon blev automatisk opdateret:"
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
69
+ msgid "Cannot create directory %s to store the favicon package content"
70
+ msgstr "Kan ikke oprette mappen %s til opbevaring af favicon"
71
+
72
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
73
+ msgid "Unknown reason"
74
+ msgstr "Ukendte årsag"
75
+
76
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
77
+ msgid "Error while unziping the favicon package %s to directory %s"
78
+ msgstr "Der skete en fejl under udpakningen af favicon %s til mappen %s"
79
+
80
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
81
+ msgid "Cannot download file at %s"
82
+ msgstr "Kan ikke downloade filen på %s"
83
+
84
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
85
+ msgid "Cannot store downloaded file locally"
86
+ msgstr "Kan ikke opbevare den downloadede fil"
87
+
88
+ #: admin/views/appearance.php:11
89
+ msgid "Favicon installation in progress. Please wait..."
90
+ msgstr "Favicon er ved at blive installeret. Vent venligst…"
91
+
92
+ #: admin/views/appearance.php:16
93
+ msgid "Favicon installed!"
94
+ msgstr "Favicon blev installeret!"
95
+
96
+ #: admin/views/appearance.php:18
97
+ msgid ""
98
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
99
+ msgstr ""
100
+ "Kan du lidt resultatet? I så fald, må du gerne <a %s>bedømme vores plugin</"
101
+ "a>"
102
+
103
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
104
+ msgid "Current favicon"
105
+ msgstr "Nuværende favicon"
106
+
107
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
108
+ msgid "The favicon is up and ready."
109
+ msgstr "Dit favicon er klar."
110
+
111
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
112
+ msgid ""
113
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
114
+ msgstr ""
115
+ "<a %s>Tje kdit favicon</a> med RealFaviconGenerator's favicon tjekker."
116
+
117
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
118
+ msgid "This option works only if your site is accessible from the outside."
119
+ msgstr "Denne indstillinger virker kun, hvis du kan connecte til dit website."
120
+
121
+ #: admin/views/appearance.php:42
122
+ msgid "No favicon has been configured yet."
123
+ msgstr "Der er endnu ikke blevet konfigureret et favicon."
124
+
125
+ #: admin/views/appearance.php:62
126
+ msgid "Favicon generation"
127
+ msgstr "Generering af favicon"
128
+
129
+ #: admin/views/appearance.php:64
130
+ msgid "You can replace the existing favicon."
131
+ msgstr "Du kan erstatte det eksisterende favicon."
132
+
133
+ #: admin/views/appearance.php:71
134
+ msgid "Master picture URL"
135
+ msgstr "Master billede URL"
136
+
137
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
138
+ msgid "Select from the Media Library"
139
+ msgstr "Vælg fra Medie biblioteket"
140
+
141
+ #: admin/views/appearance.php:79
142
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
143
+ msgstr ""
144
+ "Indsend et firkantet billede, mindst 70x70 (anbefalet: 260x260 eller mere)"
145
+
146
+ #: admin/views/appearance.php:81
147
+ msgid ""
148
+ "If the picture is on your hard drive, you can leave this field blank and "
149
+ "upload the picture from RealFaviconGenerator."
150
+ msgstr ""
151
+ "Hvis billedet er på din harddisk, kan du lade dette felt være tomt og "
152
+ "uploade billedet fra RealFaviconGenerator."
153
+
154
+ #: admin/views/appearance.php:89
155
+ msgid "Favicon files in root directory"
156
+ msgstr "Favicon filerne er i roden"
157
+
158
+ #: admin/views/appearance.php:94
159
+ msgid "The plugin always stores the favicon files in a dedicated directory."
160
+ msgstr "Dette plugin opbevare altid favicon filerne i en dedikeret mappe."
161
+
162
+ #: admin/views/appearance.php:96
163
+ msgid ""
164
+ "However, if this option is enabled, the plugin takes advantage of the "
165
+ "permalink feature and the favicon files appear to be in the root directory"
166
+ msgstr ""
167
+ "Hvis denne indstilling er aktiveret, vil pluginnet drage fordel af "
168
+ "permalink og favicon filerne vil være i rodmappen"
169
+
170
+ #: admin/views/appearance.php:97
171
+ msgid "recommended"
172
+ msgstr "anbefalet"
173
+
174
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
175
+ msgid "Generate favicon"
176
+ msgstr "Generere favicon"
177
+
178
+ #: admin/views/appearance.php:200
179
+ msgid "Preparing master picture..."
180
+ msgstr "Forbereder master billede…"
181
+
182
+ #: admin/views/appearance.php:257
183
+ msgid "An error occured"
184
+ msgstr "En uventet fejl opstod"
185
+
186
+ #: admin/views/appearance.php:268
187
+ msgid "An internal error occurred"
188
+ msgstr "En intern fejl opstod"
189
+
190
+ #: admin/views/settings.php:13
191
+ msgid ""
192
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
193
+ "Favicon</a>"
194
+ msgstr ""
195
+ "Vil du opsætte dit favicon? Gå til <a href=\"%s\">Appearance &gt; Favicon</"
196
+ "a>"
197
+
198
+ #: admin/views/settings.php:22
199
+ msgid "Display update notifications"
200
+ msgstr "Vis opdateringsnotifikationer"
201
+
202
+ #: admin/views/settings.php:27
203
+ msgid ""
204
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
205
+ "Apple releases a new version of iOS or a new platform is supported."
206
+ msgstr ""
207
+ "Få besked når RealFaviconGenerator opdateres. For eksempel når Apple "
208
+ "frigiver en ny version af iOS eller en ny platform er understøttet."
209
+
210
+ #: admin/views/settings.php:36
211
+ msgid "Save changes"
212
+ msgstr "Gem indstillinger"
213
+
214
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
215
+ msgid ""
216
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
217
+ "update"
218
+ msgstr ""
219
+ "Besøg <a href=\"%s\">RFG's changelog</a> for at se indholdet for "
220
+ "opdateringen"
221
+
222
+ #. Plugin Name of the plugin/theme
223
+ msgid "Favicon by RealFaviconGenerator"
224
+ msgstr "Favicon by RealFaviconGenerator"
225
+
226
+ #. Plugin URI of the plugin/theme
227
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
228
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
229
+
230
+ #. Description of the plugin/theme
231
+ msgid ""
232
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
233
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
234
+ msgstr ""
235
+ "Opret og installer dit favicon på alle platforme: PC / Mac, men også "
236
+ "iPhone / iPad, Android-enheder, Windows 8 tabletter, etc."
237
+
238
+ #. Author of the plugin/theme
239
+ msgid "Philippe Bernard"
240
+ msgstr "Philippe Bernard"
241
+
242
+ #. Author URI of the plugin/theme
243
+ msgid "http://realfavicongenerator.net/"
244
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator-fr_FR.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-fr_FR.po ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014-2016 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.1.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-realfavicongenerator\n"
7
+ "POT-Creation-Date: 2015-06-24 10:16+0100\n"
8
+ "PO-Revision-Date: 2015-07-15 11:46+0200\n"
9
+ "Last-Translator: Philippe Bernard <philippe@realfavicongenerator.net>\n"
10
+ "Language-Team: \n"
11
+ "Language: fr_FR\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "X-Generator: Poedit 1.8.2\n"
16
+
17
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
20
+ msgid "Favicon"
21
+ msgstr "Favicon"
22
+
23
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
24
+ msgid "Favicon Settings"
25
+ msgstr "Réglages du favicon"
26
+
27
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
28
+ msgid ""
29
+ "Nonce was not recognized. This case is supposed to happen only in case of XSS attack. If you "
30
+ "feel like something is wrong, please <a href=\\\"mailto:contact@realfavicongenerator.net\\"
31
+ "\">contact us</a>."
32
+ msgstr ""
33
+ "Le nonce n'a pas été reconnu. Cela n'est censé arriver qu'en cas d'attaque XSS. Si vous pensez "
34
+ "que quelque chose ne va pas, veuillez <a href=\\\"mailto:contact@realfavicongenerator.net\\"
35
+ "\">nous contacter</a>."
36
+
37
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
38
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
39
+ msgid "Cannot create directory %s to store the favicon package"
40
+ msgstr "Impossible de créer le répertoire %s afin d'y stocker le package du favicon"
41
+
42
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
43
+ msgid "An update is available on RealFaviconGenerator:"
44
+ msgstr "Une mise à jour est disponible sur RealFaviconGenerator"
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
47
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
48
+ msgstr "Vous voulez peut-être <a href=\"%s\">générer votre favicon</a> à nouveau"
49
+
50
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
51
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
52
+ msgid "Hide this notice"
53
+ msgstr "Masquer cette notice"
54
+
55
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
56
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
57
+ msgid "Do not warn me again in case of update"
58
+ msgstr "Ne plus m'avertir en cas de mise à jour"
59
+
60
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
61
+ msgid "Your favicon was updated automatically:"
62
+ msgstr "Votre favicon a été mis à jour automatiquement :"
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
65
+ msgid "Cannot create directory %s to store the favicon package content"
66
+ msgstr "Impossible de créer le répertoire %s afin d'y stocker le contenu du package du favicon"
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
69
+ msgid "Unknown reason"
70
+ msgstr "Raison inconnu"
71
+
72
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
73
+ msgid "Error while unziping the favicon package %s to directory %s"
74
+ msgstr "Erreur lors de la décompression du package du favicon %s dans le répertoire %s"
75
+
76
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
77
+ msgid "Cannot download file at %s"
78
+ msgstr "Impossible de télécharger le fichier à l'adresse %s"
79
+
80
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
81
+ msgid "Cannot store downloaded file locally"
82
+ msgstr "Impossible de stocker localement le fichier téléchargé"
83
+
84
+ #: admin/views/appearance.php:11
85
+ msgid "Favicon installation in progress. Please wait..."
86
+ msgstr "Installation du favicon en cours. Veuillez patienter..."
87
+
88
+ #: admin/views/appearance.php:16
89
+ msgid "Favicon installed!"
90
+ msgstr "Favicon installé !"
91
+
92
+ #: admin/views/appearance.php:18
93
+ msgid "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
94
+ msgstr "Satisfait du résultat ? Voudriez-vous <a %s>évaluer le plugin</a> ?"
95
+
96
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
97
+ msgid "Current favicon"
98
+ msgstr "Favicon actuel"
99
+
100
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
101
+ msgid "The favicon is up and ready."
102
+ msgstr "Le favicon est installé."
103
+
104
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
105
+ msgid "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
106
+ msgstr ""
107
+ "<a %s>Vérifiez votre favicon</a> avec l'outil de vérification de favicon de "
108
+ "RealFaviconGenerator."
109
+
110
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
111
+ msgid "This option works only if your site is accessible from the outside."
112
+ msgstr "Cette option ne fonctionne que si votre site est accessible depuis l'extérieur."
113
+
114
+ #: admin/views/appearance.php:42
115
+ msgid "No favicon has been configured yet."
116
+ msgstr "Aucun favicon n'a été configuré pour le moment."
117
+
118
+ #: admin/views/appearance.php:62
119
+ msgid "Favicon generation"
120
+ msgstr "Génération du favicon"
121
+
122
+ #: admin/views/appearance.php:64
123
+ msgid "You can replace the existing favicon."
124
+ msgstr "Vous pouvez remplacer le favicon existant."
125
+
126
+ #: admin/views/appearance.php:71
127
+ msgid "Master picture URL"
128
+ msgstr "URL de l'image de base"
129
+
130
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
131
+ msgid "Select from the Media Library"
132
+ msgstr "Sélectionner dans la Bibliothèque de médias"
133
+
134
+ #: admin/views/appearance.php:79
135
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
136
+ msgstr "Utilisez une image carrée en 70x70 minimum (recommandé: 260x260 ou plus)"
137
+
138
+ #: admin/views/appearance.php:81
139
+ msgid ""
140
+ "If the picture is on your hard drive, you can leave this field blank and upload the picture "
141
+ "from RealFaviconGenerator."
142
+ msgstr ""
143
+ "Si l'image est sur votre disque dur, vous pouvez laisser ce champ vide et envoyer une image "
144
+ "depuis l'interface de RealFaviconGenerator"
145
+
146
+ #: admin/views/appearance.php:89
147
+ msgid "Favicon files in root directory"
148
+ msgstr "Fichiers du favicon dans le répertoire racine"
149
+
150
+ #: admin/views/appearance.php:94
151
+ msgid "The plugin always stores the favicon files in a dedicated directory."
152
+ msgstr "Le plugin conserve toujours les fichiers du favicon dans un répertoire dédié."
153
+
154
+ #: admin/views/appearance.php:96
155
+ msgid ""
156
+ "However, if this option is enabled, the plugin takes advantage of the permalink feature and "
157
+ "the favicon files appear to be in the root directory"
158
+ msgstr ""
159
+ "Cependant, si cette option est activée, le plugin tire parti des permaliens pour faire "
160
+ "apparaitre les fichiers du favicon dans le répertoire racine"
161
+
162
+ #: admin/views/appearance.php:97
163
+ msgid "recommended"
164
+ msgstr "recommandé"
165
+
166
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
167
+ msgid "Generate favicon"
168
+ msgstr "Générer le favicon"
169
+
170
+ #: admin/views/appearance.php:200
171
+ msgid "Preparing master picture..."
172
+ msgstr "Nous préparons l'image..."
173
+
174
+ #: admin/views/appearance.php:257
175
+ msgid "An error occured"
176
+ msgstr "Une erreur est survenue"
177
+
178
+ #: admin/views/appearance.php:268
179
+ msgid "An internal error occurred"
180
+ msgstr "Une erreur interne est survenue"
181
+
182
+ #: admin/views/settings.php:13
183
+ msgid "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; Favicon</a>"
184
+ msgstr ""
185
+ "Voulez-vous mettre en place votre favicon? Allez dans <a href=\"%s\">Apparance &gt; Favicon</a>"
186
+
187
+ #: admin/views/settings.php:22
188
+ msgid "Display update notifications"
189
+ msgstr "Afficher les notifications de mise à jour"
190
+
191
+ #: admin/views/settings.php:27
192
+ msgid ""
193
+ "Get notifications when RealFaviconGenerator is updated. For example, when Apple releases a new "
194
+ "version of iOS or a new platform is supported."
195
+ msgstr ""
196
+ "Afficher des notifications lorsque RealFaviconGenerator est mis à jour. Par exemple, "
197
+ "lorsqu'Apple sort une nouvelle version d'iOS ou lorsqu'une nouvelle plateforme est supportée."
198
+
199
+ #: admin/views/settings.php:36
200
+ msgid "Save changes"
201
+ msgstr "Enregistrer les modifications"
202
+
203
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
204
+ msgid "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the update"
205
+ msgstr ""
206
+ "Afficher le <a href=\"%s\">journal des modifications</a> pour voir le contenu de cette mise à "
207
+ "jour"
208
+
209
+ #. Plugin Name of the plugin/theme
210
+ msgid "Favicon by RealFaviconGenerator"
211
+ msgstr "Favicon par RealFaviconGenerator"
212
+
213
+ #. Plugin URI of the plugin/theme
214
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
215
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
216
+
217
+ #. Description of the plugin/theme
218
+ msgid ""
219
+ "Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, "
220
+ "Android devices, Windows 8 tablets, etc."
221
+ msgstr ""
222
+ "Créez et installez votre favicon pour toutes les plateformes : PC/Mac évidemment, mais aussi "
223
+ "iPhone/iPad, appareils Android, tablettes Windows 8, etc."
224
+
225
+ #. Author of the plugin/theme
226
+ msgid "Philippe Bernard"
227
+ msgstr "Philippe Bernard"
228
+
229
+ #. Author URI of the plugin/theme
230
+ msgid "http://realfavicongenerator.net/"
231
+ msgstr "http://realfavicongenerator.net/"
232
+
233
+ #~ msgid ""
234
+ #~ "<a href=\"%s\" target=\"_blank\">An update is available</a> on RealFaviconGenerator. You "
235
+ #~ "might want to <a href=\"%s\">generate your favicon again</a>."
236
+ #~ msgstr ""
237
+ #~ "<a href=\"%s\" target=\"_blank\">Une mise à jour est disponible</a> à partir de "
238
+ #~ "RealFaviconGenerator. Vous souhaitez peut-être <a href=\"%s\">générer votre favicon à "
239
+ #~ "nouveau</a>."
240
+
241
+ #~ msgid " | <a href=\"%s\">Hide this notice</a>"
242
+ #~ msgstr " | <a href=\"%s\">Masquer cette notification</a>"
243
+
244
+ #~ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
245
+ #~ msgstr " | <a href=\"%s\">Ne plus me prévenir en cas de mise à jour</a>"
trunk/languages/favicon-by-realfavicongenerator-id_ID.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-id_ID.po ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-realfavicongenerator\n"
7
+ "POT-Creation-Date: 2015-11-22 17:39+0100\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-04-19 16:01+0200\n"
12
+ "Language-Team: ChameleonJohn.com\n"
13
+ "X-Generator: Poedit 2.0.1\n"
14
+ "Last-Translator: Jordan Silaen <jordan.silaen@chameleonjohn.com>\n"
15
+ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
16
+ "Language: id_ID\n"
17
+
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77 admin/class-favicon-by-realfavicongenerator-admin.php:78 admin/class-favicon-by-realfavicongenerator-admin.php:82
19
+ msgid "Favicon"
20
+ msgstr "Favicon"
21
+
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
23
+ msgid "Favicon Settings"
24
+ msgstr "Pengaturan Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
27
+ msgid "Nonce was not recognized. This case is supposed to happen only in case of XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:contact@realfavicongenerator.net\\\">contact us</a>."
28
+ msgstr "Nonce tidak diakui. Kasus ini seharusnya terjadi hanya dalam kasus serangan XSS. Jika Anda merasa seperti ada sesuatu yang salah, <a href=\\\"mailto:contact@realfavicongenerator.net\\\"> hubungi kami </a>."
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190 public/class-favicon-by-realfavicongenerator-common.php:414
31
+ msgid "Cannot create directory %s to store the favicon package"
32
+ msgstr "Tidak bisa membuat direktori %s untuk menyimpan paket favicon"
33
+
34
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
35
+ msgid "An update is available on RealFaviconGenerator:"
36
+ msgstr "Pembaruan tersedia pada RealFaviconGenerator:"
37
+
38
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
39
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
40
+ msgstr "Anda mungkin ingin <a href=\"%s\"> menghasilkan favicon Anda lagi </a>"
41
+
42
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454 admin/class-favicon-by-realfavicongenerator-admin.php:477
43
+ msgid "Hide this notice"
44
+ msgstr "Sembunyikan pemberitahuan ini"
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458 admin/class-favicon-by-realfavicongenerator-admin.php:481
47
+ msgid "Do not warn me again in case of update"
48
+ msgstr "Tidak memperingatkan saya lagi dalam kasus pembaruan"
49
+
50
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
51
+ msgid "Your favicon was updated automatically:"
52
+ msgstr "favicon Anda telah diperbarui secara otomatis:"
53
+
54
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
55
+ msgid "Cannot create directory %s to store the favicon package content"
56
+ msgstr "Tidak bisa membuat direktori %s untuk menyimpan konten paket favicon"
57
+
58
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
59
+ msgid "Unknown reason"
60
+ msgstr "Alasan yang tidak diketahui"
61
+
62
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
63
+ msgid "Error while unziping the favicon package %s to directory %s"
64
+ msgstr "Kesalahan saat unziping paket favicon %s ke direktori %s"
65
+
66
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
67
+ msgid "Cannot download file at %s"
68
+ msgstr "Tidak dapat men-download file pada %s"
69
+
70
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
71
+ msgid "Cannot store downloaded file locally"
72
+ msgstr "tidak bisa menyimpan file yang didownload secara lokal"
73
+
74
+ #: admin/views/appearance.php:11
75
+ msgid "Favicon installation in progress. Please wait..."
76
+ msgstr "instalasi favicon berlangsung. Mohon tunggu..."
77
+
78
+ #: admin/views/appearance.php:16
79
+ msgid "Favicon installed!"
80
+ msgstr "Favicon diinstal!"
81
+
82
+ #: admin/views/appearance.php:18
83
+ msgid "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
84
+ msgstr "Apakah Anda suka hasilnya? Jika demikian, apakah Anda ingin <a %s> menilai plugin </a>?"
85
+
86
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
87
+ msgid "Current favicon"
88
+ msgstr "favicon saat ini"
89
+
90
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
91
+ msgid "The favicon is up and ready."
92
+ msgstr "favicon adalah dan siap."
93
+
94
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
95
+ msgid "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
96
+ msgstr "<a %s> Periksa favicon Anda </a> dengan RealFaviconGenerator ini favicon checker."
97
+
98
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
99
+ msgid "This option works only if your site is accessible from the outside."
100
+ msgstr "Opsi ini hanya bekerja jika situs Anda dapat diakses dari luar."
101
+
102
+ #: admin/views/appearance.php:42
103
+ msgid "No favicon has been configured yet."
104
+ msgstr "Tidak ada favicon telah dikonfigurasi belum."
105
+
106
+ #: admin/views/appearance.php:62
107
+ msgid "Favicon generation"
108
+ msgstr "generasi favicon"
109
+
110
+ #: admin/views/appearance.php:64
111
+ msgid "You can replace the existing favicon."
112
+ msgstr "Anda dapat mengganti favicon yang ada."
113
+
114
+ #: admin/views/appearance.php:71
115
+ msgid "Master picture URL"
116
+ msgstr "URL gambar Guru"
117
+
118
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
119
+ msgid "Select from the Media Library"
120
+ msgstr "Pilih dari Perpustakaan Media"
121
+
122
+ #: admin/views/appearance.php:79
123
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
124
+ msgstr "Mengirimkan gambar persegi, setidaknya 70x70 (disarankan: 260x260 atau lebih)"
125
+
126
+ #: admin/views/appearance.php:81
127
+ msgid "If the picture is on your hard drive, you can leave this field blank and upload the picture from RealFaviconGenerator."
128
+ msgstr "Jika gambar pada hard drive Anda, Anda dapat meninggalkan bidang ini kosong dan meng-upload gambar dari RealFaviconGenerator."
129
+
130
+ #: admin/views/appearance.php:89
131
+ msgid "Favicon files in root directory"
132
+ msgstr "file favicon di direktori root"
133
+
134
+ #: admin/views/appearance.php:94
135
+ msgid "The plugin always stores the favicon files in a dedicated directory."
136
+ msgstr "Plugin selalu menyimpan file favicon di direktori khusus."
137
+
138
+ #: admin/views/appearance.php:96
139
+ msgid "However, if this option is enabled, the plugin takes advantage of the permalink feature and the favicon files appear to be in the root directory"
140
+ msgstr "Namun, jika opsi ini diaktifkan, plugin mengambil keuntungan dari fitur permalink dan file favicon tampak di direktori root"
141
+
142
+ #: admin/views/appearance.php:97
143
+ msgid "recommended"
144
+ msgstr "direkomendasikan"
145
+
146
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
147
+ msgid "Generate favicon"
148
+ msgstr "menghasilkan favicon"
149
+
150
+ #: admin/views/appearance.php:200
151
+ msgid "Preparing master picture..."
152
+ msgstr "Mempersiapkan gambar Master ..."
153
+
154
+ #: admin/views/appearance.php:257
155
+ msgid "An error occured"
156
+ msgstr "Kesalahan terjadi"
157
+
158
+ #: admin/views/appearance.php:268
159
+ msgid "An internal error occurred"
160
+ msgstr "Terjadi kesalahan internal"
161
+
162
+ #: admin/views/settings.php:13
163
+ msgid "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; Favicon</a>"
164
+ msgstr "Apakah Anda ingin setup favicon Anda? Pergi ke <a href=\" %s \"> Penampilan & gt; favicon </a>"
165
+
166
+ #: admin/views/settings.php:22
167
+ msgid "Display update notifications"
168
+ msgstr "pemberitahuan update tampilan"
169
+
170
+ #: admin/views/settings.php:27
171
+ msgid "Get notifications when RealFaviconGenerator is updated. For example, when Apple releases a new version of iOS or a new platform is supported."
172
+ msgstr "Dapatkan pemberitahuan bila RealFaviconGenerator diperbarui. Sebagai contoh, ketika Apple merilis versi baru dari iOS atau platform baru didukung."
173
+
174
+ #: admin/views/settings.php:36
175
+ msgid "Save changes"
176
+ msgstr "Simpan perubahan"
177
+
178
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
179
+ msgid "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the update"
180
+ msgstr "Kunjungi <a href=\" %s \"> perubahan log RFG </a> untuk melihat isi update"
181
+
182
+ #. Plugin Name of the plugin/theme
183
+ msgid "Favicon by RealFaviconGenerator"
184
+ msgstr "Favicon oleh RealFaviconGenerator"
185
+
186
+ #. Plugin URI of the plugin/theme
187
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
188
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
189
+
190
+ #. Description of the plugin/theme
191
+ msgid "Create and install your favicon for all platforms: PC/Mac of course, but also iPhone/iPad, Android devices, Windows 8 tablets, etc."
192
+ msgstr "Membuat dan memasang favicon Anda untuk semua platform: PC / Mac tentu saja, tetapi juga iPhone / iPad, perangkat Android, Windows 8 tablet, dll"
193
+
194
+ #. Author of the plugin/theme
195
+ msgid "Philippe Bernard"
196
+ msgstr "Philippe Bernard"
197
+
198
+ #. Author URI of the plugin/theme
199
+ msgid "http://realfavicongenerator.net/"
200
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator-nl_NL.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-nl_NL.po ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014-2016 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon door RealFaviconGenerator 1.2.2\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2014-10-22 20:10:01+00:00\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-03-02 15:00+0100\n"
13
+ "Last-Translator: Axel <axel@eco13.eu>\n"
14
+ "Language-Team: \n"
15
+ "X-Generator: Poedit 1.7.3\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "Language: nl_NL\n"
18
+ "X-Poedit-SourceCharset: UTF-8\n"
19
+
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:65
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:66
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:70
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:69
27
+ msgid "Favicon Settings"
28
+ msgstr "Favicon Instellingen"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:351
31
+ msgid ""
32
+ "<a href=\"%s\" target=\"_blank\">An update is available</a> on "
33
+ "RealFaviconGenerator. You might want to <a href=\"%s\">generate your favicon "
34
+ "again</a>."
35
+ msgstr ""
36
+ "<a href=\"%s\" target=\"_blank\">Een update is beschikbaar</a> op "
37
+ "RealFaviconGenerator. Misschien wil je <a href=\"%s\">je favicon opnieuw "
38
+ "genereren</a>."
39
+
40
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:354
41
+ msgid " | <a href=\"%s\">Hide this notice</a>"
42
+ msgstr " | <a href=\"%s\">Verberg dit bericht</a>"
43
+
44
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:356
45
+ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
46
+ msgstr " | <a href=\"%s\">Hou me niet langer op de hoogte van updates</a>"
47
+
48
+ #: admin/views/appearance.php:11
49
+ msgid "Favicon installation in progress. Please wait..."
50
+ msgstr "Favicon wordt geïnstalleerd. Graag even geduld..."
51
+
52
+ #: admin/views/appearance.php:15
53
+ msgid "Favicon installed!"
54
+ msgstr "Favicon werd geïnstalleerd!"
55
+
56
+ #: admin/views/appearance.php:20 admin/views/appearance.php:31
57
+ msgid "Current favicon"
58
+ msgstr "Huidige favicon"
59
+
60
+ #: admin/views/appearance.php:21 admin/views/appearance.php:34
61
+ msgid "The favicon is up and ready."
62
+ msgstr "De favicon is klaar voor gebruik."
63
+
64
+ #: admin/views/appearance.php:25 admin/views/appearance.php:46
65
+ msgid ""
66
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
67
+ msgstr ""
68
+ "<a %s>Controleer je favicon</a> met de RealFaviconGenerator's favicon "
69
+ "checker."
70
+
71
+ #: admin/views/appearance.php:27 admin/views/appearance.php:49
72
+ msgid "This option works only if your site is accessible from the outside."
73
+ msgstr "Deze optie werkt enkel indien je site van buitenaf toegankelijk is."
74
+
75
+ #: admin/views/appearance.php:36
76
+ msgid "No favicon has been configured yet."
77
+ msgstr "Er werd nog geen favicon geconfigureerd."
78
+
79
+ #: admin/views/appearance.php:56
80
+ msgid "Favicon generation"
81
+ msgstr "Faviconcreatie"
82
+
83
+ #: admin/views/appearance.php:58
84
+ msgid "You can replace the existing favicon."
85
+ msgstr "Je kunt de bestaande favicon vervangen."
86
+
87
+ #: admin/views/appearance.php:65
88
+ msgid "Master picture URL"
89
+ msgstr "URL bronafbeelding"
90
+
91
+ #: admin/views/appearance.php:69 admin/views/appearance.php:70
92
+ msgid "Select from the Media Library"
93
+ msgstr "Selecteer uit de mediabibliotheek"
94
+
95
+ #: admin/views/appearance.php:73
96
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
97
+ msgstr ""
98
+ "Gebruik een vierkant beeld van min. 70x70px (aanbevolen: 260x260 of meer)"
99
+
100
+ #: admin/views/appearance.php:75
101
+ msgid ""
102
+ "If the picture is on your hard drive, you can leave this field blank and "
103
+ "upload the picture from RealFaviconGenerator."
104
+ msgstr ""
105
+ "Staat de afbeelding op je harde schijf, dan kun je dit veld leeg laten en "
106
+ "het beeld vanaf RealFaviconGenerator uploaden."
107
+
108
+ #: admin/views/appearance.php:83
109
+ msgid "Favicon files in root directory"
110
+ msgstr "Faviconbestanden in de root"
111
+
112
+ #: admin/views/appearance.php:88
113
+ msgid "The plugin always stores the favicon files in a dedicated directory."
114
+ msgstr "De plugin slaat de faviconbestanden steeds op in specifieke map."
115
+
116
+ #: admin/views/appearance.php:90
117
+ msgid ""
118
+ "However, if this option is enabled, the plugin takes advantage of the "
119
+ "permalink feature and the favicon files appear to be in the root directory"
120
+ msgstr ""
121
+ "Indien deze optie is ingeschakeld, maakt de plugin evenwel gebruik van de "
122
+ "permalink feature, waardoor het lijkt alsof de faviconbestanden in de root "
123
+ "te vinden zijn"
124
+
125
+ #: admin/views/appearance.php:91
126
+ msgid "recommended"
127
+ msgstr "aanbevolen"
128
+
129
+ #: admin/views/appearance.php:100
130
+ msgid "Generate favicon"
131
+ msgstr "Genereer favicon"
132
+
133
+ #: admin/views/appearance.php:189
134
+ msgid "An error occured"
135
+ msgstr "Er trad een fout op"
136
+
137
+ #: admin/views/appearance.php:200
138
+ msgid "An internal error occurred"
139
+ msgstr "Er trad een interne fout op"
140
+
141
+ #: admin/views/settings.php:13
142
+ msgid ""
143
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
144
+ "Favicon</a>"
145
+ msgstr ""
146
+ "Wil je je favicon installeren? Ga naar <a href=\"%s\">Weergave &gt; Favicon</"
147
+ "a>"
148
+
149
+ #: admin/views/settings.php:22
150
+ msgid "Display update notifications"
151
+ msgstr "Toon updatemeldingen"
152
+
153
+ #: admin/views/settings.php:27
154
+ msgid ""
155
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
156
+ "Apple releases a new version of iOS or a new platform is supported."
157
+ msgstr ""
158
+ "Ontvang een melding als RealFaviconGenerator wordt bijgewerkt, bijvoorbeeld "
159
+ "als Apple een nieuwe iOS versie lanceert, of als een nieuw platform wordt "
160
+ "ondersteund."
161
+
162
+ #: admin/views/settings.php:36
163
+ msgid "Save changes"
164
+ msgstr "Wijzigingen opslaan"
165
+
166
+ #. Plugin Name of the plugin/theme
167
+ msgid "Favicon by RealFaviconGenerator"
168
+ msgstr "Favicon door RealFaviconGenerator"
169
+
170
+ #. Plugin URI of the plugin/theme
171
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
172
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
173
+
174
+ #. Description of the plugin/theme
175
+ msgid ""
176
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
177
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
178
+ msgstr ""
179
+ "Maak en installeer je favicon voor alle platformen: PC en Mac natuurlijk, "
180
+ "maar ook iPhone en iPad, Androidapparaten, Windows 8 tablets, etc."
181
+
182
+ #. Author of the plugin/theme
183
+ msgid "Philippe Bernard"
184
+ msgstr "Philippe Bernard"
185
+
186
+ #. Author URI of the plugin/theme
187
+ msgid "http://realfavicongenerator.net/"
188
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator-pl_PL.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-pl_PL.po ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2016-04-10 20:35+0200\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2016-04-10 21:09+0200\n"
13
+ "Language-Team: \n"
14
+ "X-Generator: Poedit 1.8.7\n"
15
+ "Last-Translator: Maciej Gryniuk <maciejka45@gmail.com>\n"
16
+ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n"
17
+ "%100<10 || n%100>=20) ? 1 : 2);\n"
18
+ "Language: pl\n"
19
+
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
27
+ msgid "Favicon Settings"
28
+ msgstr "Ustawienia favicon"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
31
+ msgid ""
32
+ "Nonce was not recognized. This case is supposed to happen only in case of "
33
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
34
+ "contact@realfavicongenerator.net\\\">contact us</a>."
35
+ msgstr ""
36
+ "Identyfikator jednorazowy nie został rozpoznany. Prawdopodobnie jedyną tego "
37
+ "przyczyną może być atak XSS. Jeżeli sądzisz, że coś działa nieprawidłowo, "
38
+ "prosimy o <a href=\\\"mailto:contact@realfavicongenerator.net\\\">kontakt</"
39
+ "a>."
40
+
41
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
42
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
43
+ msgid "Cannot create directory %s to store the favicon package"
44
+ msgstr "Nie można utworzyć katalogu %s do przechowania paczki favicon"
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
47
+ msgid "An update is available on RealFaviconGenerator:"
48
+ msgstr "Dostępna aktualizacja na RealFaviconGenerator:"
49
+
50
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
51
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
52
+ msgstr "Być może zechcesz <a href=\"%s\">ponownie wygenerować favicon</a>"
53
+
54
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
55
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
56
+ msgid "Hide this notice"
57
+ msgstr "Ukryj to powiadomienie"
58
+
59
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
60
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
61
+ msgid "Do not warn me again in case of update"
62
+ msgstr "Nie powiadamiaj mnie ponownie"
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
65
+ msgid "Your favicon was updated automatically:"
66
+ msgstr "Twój favicon został automatycznie zaktualizowany:"
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
69
+ msgid "Cannot create directory %s to store the favicon package content"
70
+ msgstr ""
71
+ "Nie można utworzyć katalogu %s do przechowania zawartości paczki favicon"
72
+
73
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
74
+ msgid "Unknown reason"
75
+ msgstr "Nieznany powód"
76
+
77
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
78
+ msgid "Error while unziping the favicon package %s to directory %s"
79
+ msgstr "Błąd podczas rozpakowywania paczki favicon %s do katalogu %s"
80
+
81
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
82
+ msgid "Cannot download file at %s"
83
+ msgstr "Nie można pobrać pliku z %s"
84
+
85
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
86
+ msgid "Cannot store downloaded file locally"
87
+ msgstr "Nie można przechować pobranego pliku lokalnie"
88
+
89
+ #: admin/views/appearance.php:11
90
+ msgid "Favicon installation in progress. Please wait..."
91
+ msgstr "Instalacja favicon w toku. Proszę czekać..."
92
+
93
+ #: admin/views/appearance.php:16
94
+ msgid "Favicon installed!"
95
+ msgstr "Favicon zainstalowany!"
96
+
97
+ #: admin/views/appearance.php:18
98
+ msgid ""
99
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
100
+ msgstr ""
101
+ "Podoba Ci się osiągnięty rezultat? Jeżeli tak, będziemy wdzięczni za <a "
102
+ "%s>ocenę wtyczki</a>."
103
+
104
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
105
+ msgid "Current favicon"
106
+ msgstr "Bieżący favicon"
107
+
108
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
109
+ msgid "The favicon is up and ready."
110
+ msgstr "Favicon jest zainstalowany."
111
+
112
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
113
+ msgid ""
114
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
115
+ msgstr "<a %s>Sprawdź swój favicon</a> poprzez system RealFaviconGenerator."
116
+
117
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
118
+ msgid "This option works only if your site is accessible from the outside."
119
+ msgstr ""
120
+ "Ta opcja zadziała, tylko jeżeli Twoja strona jest publicznie dostępna."
121
+
122
+ #: admin/views/appearance.php:42
123
+ msgid "No favicon has been configured yet."
124
+ msgstr "Jeszcze nie skonfigurowano favicon."
125
+
126
+ #: admin/views/appearance.php:62
127
+ msgid "Favicon generation"
128
+ msgstr "Tworzenie favicon'a"
129
+
130
+ #: admin/views/appearance.php:64
131
+ msgid "You can replace the existing favicon."
132
+ msgstr "Możesz zastąpić bieżącego favicon'a."
133
+
134
+ #: admin/views/appearance.php:71
135
+ msgid "Master picture URL"
136
+ msgstr "Adres URL głównej grafiki"
137
+
138
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
139
+ msgid "Select from the Media Library"
140
+ msgstr "Wybierz z Biblioteki mediów"
141
+
142
+ #: admin/views/appearance.php:79
143
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
144
+ msgstr ""
145
+ "Prześlij kwadratową grafikę, wymiarów przynajmniej 70x70 (zalecane: 260x260 "
146
+ "lub więcej)"
147
+
148
+ #: admin/views/appearance.php:81
149
+ msgid ""
150
+ "If the picture is on your hard drive, you can leave this field blank and "
151
+ "upload the picture from RealFaviconGenerator."
152
+ msgstr ""
153
+ "Jeżeli grafika znajduje się na Twoim dysku twardym, możesz zostawić to pole "
154
+ "puste i przesłać ją poprzez RealFaviconGenerator."
155
+
156
+ #: admin/views/appearance.php:89
157
+ msgid "Favicon files in root directory"
158
+ msgstr "Pliki favicon w katalogu głównym"
159
+
160
+ #: admin/views/appearance.php:94
161
+ msgid "The plugin always stores the favicon files in a dedicated directory."
162
+ msgstr "Wtyczka zawsze przechowuje pliki favicon w wydzielonym katalogu."
163
+
164
+ #: admin/views/appearance.php:96
165
+ msgid ""
166
+ "However, if this option is enabled, the plugin takes advantage of the "
167
+ "permalink feature and the favicon files appear to be in the root directory"
168
+ msgstr ""
169
+ "Jednakże, jeżeli aktywujesz tę opcję, wtyczka skorzysta ze struktury "
170
+ "bezpośrednich odnośników i pliki favicon pojawią się w katalogu głównym"
171
+
172
+ #: admin/views/appearance.php:97
173
+ msgid "recommended"
174
+ msgstr "zalecane"
175
+
176
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
177
+ msgid "Generate favicon"
178
+ msgstr "Stwórz favicon"
179
+
180
+ #: admin/views/appearance.php:200
181
+ msgid "Preparing master picture..."
182
+ msgstr "Przygotowywanie głównej grafiki..."
183
+
184
+ #: admin/views/appearance.php:257
185
+ msgid "An error occured"
186
+ msgstr "Wystąpił błąd"
187
+
188
+ #: admin/views/appearance.php:268
189
+ msgid "An internal error occurred"
190
+ msgstr "Wystąpił błąd wewnętrzny"
191
+
192
+ #: admin/views/settings.php:13
193
+ msgid ""
194
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
195
+ "Favicon</a>"
196
+ msgstr ""
197
+ "Chcesz zainstalować swój favicon? Przejdź do <a href=\"%s\">Wygląd &gt; "
198
+ "Favicon</a>"
199
+
200
+ #: admin/views/settings.php:22
201
+ msgid "Display update notifications"
202
+ msgstr "Wyświetlaj powiadomienia o aktualizacji"
203
+
204
+ #: admin/views/settings.php:27
205
+ msgid ""
206
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
207
+ "Apple releases a new version of iOS or a new platform is supported."
208
+ msgstr ""
209
+ "Otrzymuj powiadomienia o aktualizacjach RealFaviconGenerator. Przykładowo - "
210
+ "Apple wydało nową wersję iOS lub wspieramy nową platformę."
211
+
212
+ #: admin/views/settings.php:36
213
+ msgid "Save changes"
214
+ msgstr "Zapisz zmiany"
215
+
216
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
217
+ msgid ""
218
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
219
+ "update"
220
+ msgstr ""
221
+ "Przejdź do <a href=\"%s\">dziennika zmian RFG</a>, aby przejrzeć treść "
222
+ "aktualizacji"
223
+
224
+ #. Plugin Name of the plugin/theme
225
+ msgid "Favicon by RealFaviconGenerator"
226
+ msgstr "Favicon od RealFaviconGenerator"
227
+
228
+ #. Plugin URI of the plugin/theme
229
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
230
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
231
+
232
+ #. Description of the plugin/theme
233
+ msgid ""
234
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
235
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
236
+ msgstr ""
237
+ "Twórz i instaluj favicon'a dla wszystkich platform: PC/Mac, iPhone/iPad, "
238
+ "Android, Windows 8, tablety itp."
239
+
240
+ #. Author of the plugin/theme
241
+ msgid "Philippe Bernard"
242
+ msgstr "Philippe Bernard"
243
+
244
+ #. Author URI of the plugin/theme
245
+ msgid "http://realfavicongenerator.net/"
246
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator-pt_BR.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-pt_BR.po ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Favicon by RealFaviconGenerator\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/favicon-by-"
5
+ "realfavicongenerator\n"
6
+ "POT-Creation-Date: 2014-10-22 20:10:01+00:00\n"
7
+ "PO-Revision-Date: \n"
8
+ "Last-Translator: Techload <contato@techload.com.br>\n"
9
+ "Language-Team: Techload\n"
10
+ "Language: pt_BR\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: 8bit\n"
14
+ "X-Generator: Poedit 1.6.9\n"
15
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
16
+ "X-Poedit-KeywordsList: _;__e\n"
17
+ "X-Poedit-Basepath: .\n"
18
+
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:65
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:66
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:70
22
+ msgid "Favicon"
23
+ msgstr "Favicon"
24
+
25
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:69
26
+ msgid "Favicon Settings"
27
+ msgstr "Configurações do Favicon"
28
+
29
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:351
30
+ msgid ""
31
+ "<a href=\"%s\" target=\"_blank\">An update is available</a> on "
32
+ "RealFaviconGenerator. You might want to <a href=\"%s\">generate your favicon "
33
+ "again</a>."
34
+ msgstr ""
35
+ "<a href=\"%s\" target=\"_blank\">Uma atualização está disponível</a> em "
36
+ "RealFaviconGenerator. Você pode querer <a href=\"%s\">gerar seu favicon "
37
+ "novamente</a>."
38
+
39
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:354
40
+ msgid " | <a href=\"%s\">Hide this notice</a>"
41
+ msgstr " | <a href=\"%s\">Ocultar este aviso</a>"
42
+
43
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:356
44
+ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
45
+ msgstr ""
46
+ " | <a href=\"%s\">Não me avisar novamente quando houver atualizações</a>"
47
+
48
+ #: admin/views/appearance.php:11
49
+ msgid "Favicon installation in progress. Please wait..."
50
+ msgstr "Instalação do Favicon em andamento. Por favor, aguarde..."
51
+
52
+ #: admin/views/appearance.php:15
53
+ msgid "Favicon installed!"
54
+ msgstr "Favicon instalado!"
55
+
56
+ #: admin/views/appearance.php:20 admin/views/appearance.php:31
57
+ msgid "Current favicon"
58
+ msgstr "Favicon atual"
59
+
60
+ #: admin/views/appearance.php:21 admin/views/appearance.php:34
61
+ msgid "The favicon is up and ready."
62
+ msgstr "O favicon está pronto."
63
+
64
+ #: admin/views/appearance.php:25 admin/views/appearance.php:46
65
+ msgid ""
66
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
67
+ msgstr ""
68
+ "<a %s>Verifique o seu favicon</a> com o verificador de favicon do "
69
+ "RealFaviconGenerator."
70
+
71
+ #: admin/views/appearance.php:27 admin/views/appearance.php:49
72
+ msgid "This option works only if your site is accessible from the outside."
73
+ msgstr "Esta opção só funciona se o site está acessível publicamente."
74
+
75
+ #: admin/views/appearance.php:36
76
+ msgid "No favicon has been configured yet."
77
+ msgstr "Nenhum favicon foi configurado ainda."
78
+
79
+ #: admin/views/appearance.php:56
80
+ msgid "Favicon generation"
81
+ msgstr "Geração do Favicon"
82
+
83
+ #: admin/views/appearance.php:58
84
+ msgid "You can replace the existing favicon."
85
+ msgstr "Você pode substituir o favicon existente."
86
+
87
+ #: admin/views/appearance.php:65
88
+ msgid "Master picture URL"
89
+ msgstr "URL da imagem"
90
+
91
+ #: admin/views/appearance.php:69 admin/views/appearance.php:70
92
+ msgid "Select from the Media Library"
93
+ msgstr "Selecione a partir da Biblioteca de Mídia"
94
+
95
+ #: admin/views/appearance.php:73
96
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
97
+ msgstr ""
98
+ "Enviar uma imagem quadrada, pelo menos 70x70 (recomendado: 260x260 ou mais)"
99
+
100
+ #: admin/views/appearance.php:75
101
+ msgid ""
102
+ "If the picture is on your hard drive, you can leave this field blank and "
103
+ "upload the picture from RealFaviconGenerator."
104
+ msgstr ""
105
+ "Se a imagem estiver em seu disco rígido, você pode deixar este campo em "
106
+ "branco e fazer o upload da imagem a partir do RealFaviconGenerator."
107
+
108
+ #: admin/views/appearance.php:83
109
+ msgid "Favicon files in root directory"
110
+ msgstr "Arquivos do favicon no diretório raiz"
111
+
112
+ #: admin/views/appearance.php:88
113
+ msgid "The plugin always stores the favicon files in a dedicated directory."
114
+ msgstr ""
115
+ "O plugin sempre armazena os arquivos favicon em um diretório específico."
116
+
117
+ #: admin/views/appearance.php:90
118
+ msgid ""
119
+ "However, if this option is enabled, the plugin takes advantage of the "
120
+ "permalink feature and the favicon files appear to be in the root directory"
121
+ msgstr ""
122
+ "No entanto, se esta opção estiver habilitada, o plugin aproveita os recursos "
123
+ "do permalink e os arquivos favicon parecem estar no diretório raiz"
124
+
125
+ #: admin/views/appearance.php:91
126
+ msgid "recommended"
127
+ msgstr "recomendado"
128
+
129
+ #: admin/views/appearance.php:100
130
+ msgid "Generate favicon"
131
+ msgstr "Gerar o favicon"
132
+
133
+ #: admin/views/appearance.php:189
134
+ msgid "An error occured"
135
+ msgstr "Ocorreu um erro"
136
+
137
+ #: admin/views/appearance.php:200
138
+ msgid "An internal error occurred"
139
+ msgstr "Ocorreu um erro interno"
140
+
141
+ #: admin/views/settings.php:13
142
+ msgid ""
143
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
144
+ "Favicon</a>"
145
+ msgstr ""
146
+ "Deseja configurar seu favicon? Vá até <a href=\"%s\">Aparência &gt; Favicon</"
147
+ "a>"
148
+
149
+ #: admin/views/settings.php:22
150
+ msgid "Display update notifications"
151
+ msgstr "Exibir notificações de atualizações"
152
+
153
+ #: admin/views/settings.php:27
154
+ msgid ""
155
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
156
+ "Apple releases a new version of iOS or a new platform is supported."
157
+ msgstr ""
158
+ "Receber notificações quando o RealFaviconGenerator for atualizado. Por "
159
+ "exemplo, quando a Apple lançar uma nova versão do iOS ou quando uma nova "
160
+ "plataforma for suportada."
161
+
162
+ #: admin/views/settings.php:36
163
+ msgid "Save changes"
164
+ msgstr "Salvar mudanças"
165
+
166
+ #. Plugin Name of the plugin/theme
167
+ msgid "Favicon by RealFaviconGenerator"
168
+ msgstr "Favicon por RealFaviconGenerator"
169
+
170
+ #. Plugin URI of the plugin/theme
171
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
172
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
173
+
174
+ #. Description of the plugin/theme
175
+ msgid ""
176
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
177
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
178
+ msgstr ""
179
+ "Crie e instale o seu favicon para todas as plataformas: PC/Mac, é claro, mas "
180
+ "também para o iPhone/iPad, dispositivos Android, tablets com Windows 8, etc."
181
+
182
+ #. Author of the plugin/theme
183
+ msgid "Philippe Bernard"
184
+ msgstr "Philippe Bernard"
185
+
186
+ #. Author URI of the plugin/theme
187
+ msgid "http://realfavicongenerator.net/"
188
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator-ru_RU.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-ru_RU.po ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of Development (trunk) in Russian
2
+ # This file is distributed under the same license as the Development (trunk) package.
3
+ msgid ""
4
+ msgstr ""
5
+ "PO-Revision-Date: 2016-05-17 16:05+0300\n"
6
+ "MIME-Version: 1.0\n"
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
10
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
11
+ "X-Generator: Poedit 1.8.7\n"
12
+ "Project-Id-Version: Development (trunk)\n"
13
+ "POT-Creation-Date: \n"
14
+ "Language-Team: \n"
15
+ "Last-Translator: \n"
16
+ "Language: ru_RU\n"
17
+
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
19
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
21
+ msgid "Favicon"
22
+ msgstr "Favicon"
23
+
24
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
25
+ msgid "Favicon Settings"
26
+ msgstr "Настройки Favicon"
27
+
28
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:174
29
+ msgid ""
30
+ "Nonce was not recognized. This case is supposed to happen only in case of "
31
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
32
+ "contact@realfavicongenerator.net\\\">contact us</a>."
33
+ msgstr ""
34
+ "Специальное слово не распознается. Такое происхоит только в случае атак "
35
+ "XSS. Если Вам кажется, что что-то не так, пожалуйста, <a href=\"\\\"mailto:"
36
+ "contact@realfavicongenerator.net\\\"\">свяжитесь с нами</a>."
37
+
38
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
39
+ #: public/class-favicon-by-realfavicongenerator-common.php:415
40
+ msgid "Cannot create directory %s to store the favicon package"
41
+ msgstr "Не удается создать каталог %s для хранения пакета значков"
42
+
43
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:434
44
+ msgid "An update is available on RealFaviconGenerator:"
45
+ msgstr "Обновление доступно на RealFaviconGenerator:"
46
+
47
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:440
48
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
49
+ msgstr "Может потребоваться <a href=\"%s\">создать свой значок снова</a>"
50
+
51
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:446
52
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:469
53
+ msgid "Hide this notice"
54
+ msgstr "Скрыть это уведомление"
55
+
56
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:450
57
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:473
58
+ msgid "Do not warn me again in case of update"
59
+ msgstr "Не предупреждать в случае обновления"
60
+
61
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:463
62
+ msgid "Your favicon was updated automatically:"
63
+ msgstr "Ваш значок был обновлен автоматически:"
64
+
65
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
66
+ msgid "Cannot create directory %s to store the favicon package content"
67
+ msgstr "Не удается создать каталог %s для хранения содержимого пакета значков"
68
+
69
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
70
+ msgid "Unknown reason"
71
+ msgstr "Неизвестная причина"
72
+
73
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
74
+ msgid "Error while unziping the favicon package %s to directory %s"
75
+ msgstr "Ошибка при распаковке favicon пакета в директорию % S"
76
+
77
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
78
+ msgid "Cannot download file at %s"
79
+ msgstr "Не удается загрузить файл на %s"
80
+
81
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
82
+ msgid "Cannot store downloaded file locally"
83
+ msgstr "Не удается сохранить загруженный файл локально"
84
+
85
+ #: admin/views/appearance.php:11
86
+ msgid "Favicon installation in progress. Please wait..."
87
+ msgstr "Идет установка Favicon. Пожалуйста, подождите..."
88
+
89
+ #: admin/views/appearance.php:16
90
+ msgid "Favicon installed!"
91
+ msgstr "Favicon установлен!"
92
+
93
+ #: admin/views/appearance.php:18
94
+ msgid ""
95
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
96
+ msgstr ""
97
+ "Вам нравится реультат? Если да, то вам хотелось бы <a %s> оценить плагин </"
98
+ "a>?"
99
+
100
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
101
+ msgid "Current favicon"
102
+ msgstr "Текущий значок"
103
+
104
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
105
+ msgid "The favicon is up and ready."
106
+ msgstr "Favicon установлен и готов к работе."
107
+
108
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
109
+ msgid ""
110
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
111
+ msgstr "<a %s> Проверьте favicon</a> через RealFaviconGenerator favicon."
112
+
113
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
114
+ msgid "This option works only if your site is accessible from the outside."
115
+ msgstr "Эта опция работает только для сайтов, которые доступны извне."
116
+
117
+ #: admin/views/appearance.php:42
118
+ msgid "No favicon has been configured yet."
119
+ msgstr "Ни один значок пока не настроен."
120
+
121
+ #: admin/views/appearance.php:62
122
+ msgid "Favicon generation"
123
+ msgstr "Favicon генерация "
124
+
125
+ #: admin/views/appearance.php:64
126
+ msgid "You can replace the existing favicon."
127
+ msgstr "Вы можете заменить существующий фавикон."
128
+
129
+ #: admin/views/appearance.php:71
130
+ msgid "Master picture URL"
131
+ msgstr "URL главного изображения"
132
+
133
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
134
+ msgid "Select from the Media Library"
135
+ msgstr "Выберите из библиотеки мультимедиа"
136
+
137
+ #: admin/views/appearance.php:79
138
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
139
+ msgstr ""
140
+ "Добавьте квадратную картину размером не менее 70 х 70 (рекомендованный "
141
+ "размер: 260x260 или более)"
142
+
143
+ #: admin/views/appearance.php:81
144
+ msgid ""
145
+ "If the picture is on your hard drive, you can leave this field blank and "
146
+ "upload the picture from RealFaviconGenerator."
147
+ msgstr ""
148
+ "Если изображение находится на вашем жестком диске, вы можете оставить это "
149
+ "поле пустым и загрузить изображение из RealFaviconGenerator."
150
+
151
+ #: admin/views/appearance.php:89
152
+ msgid "Favicon files in root directory"
153
+ msgstr "Favicon файлы в корневой директории"
154
+
155
+ #: admin/views/appearance.php:94
156
+ msgid "The plugin always stores the favicon files in a dedicated directory."
157
+ msgstr "Плагин всегда сохраняет favicon файлы в отдельную директорию."
158
+
159
+ #: admin/views/appearance.php:96
160
+ msgid ""
161
+ "However, if this option is enabled, the plugin takes advantage of the "
162
+ "permalink feature and the favicon files appear to be in the root directory"
163
+ msgstr ""
164
+ "Однако, если эта опция включена, плагин использует преимущества функции "
165
+ "постоянной ссылки и фавикон файлы появятся в корневом каталоге"
166
+
167
+ #: admin/views/appearance.php:97
168
+ msgid "recommended"
169
+ msgstr "рекомендуется"
170
+
171
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
172
+ msgid "Generate favicon"
173
+ msgstr "Генерировать favicon"
174
+
175
+ #: admin/views/appearance.php:200
176
+ msgid "Preparing master picture..."
177
+ msgstr "Подготовка главного изображения ..."
178
+
179
+ #: admin/views/appearance.php:257
180
+ msgid "An error occured"
181
+ msgstr "Произошла ошибка"
182
+
183
+ #: admin/views/appearance.php:268
184
+ msgid "An internal error occurred"
185
+ msgstr "Произошла внутренняя ошибка"
186
+
187
+ #: admin/views/settings.php:13
188
+ msgid ""
189
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
190
+ "Favicon</a>"
191
+ msgstr ""
192
+ "Вы хотите настроить свой favicon? Перейти к <a href=\"%s\"> Appearance &gt; "
193
+ "Favicon </a>"
194
+
195
+ #: admin/views/settings.php:22
196
+ msgid "Display update notifications"
197
+ msgstr "Отображать уведомления об обновлениях"
198
+
199
+ #: admin/views/settings.php:27
200
+ msgid ""
201
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
202
+ "Apple releases a new version of iOS or a new platform is supported."
203
+ msgstr ""
204
+ "Получать уведомления, когда RealFaviconGenerator обновляется. Например, "
205
+ "когда компания Apple выпускает новую версию iOS или поддержку новой "
206
+ "платформы."
207
+
208
+ #: admin/views/settings.php:36
209
+ msgid "Save changes"
210
+ msgstr "Сохранить изменения"
211
+
212
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
213
+ msgid ""
214
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
215
+ "update"
216
+ msgstr ""
217
+ "Посетите <a href=\"%s\">журнал изменений RFG</a> чтобы просмотреть "
218
+ "содержимое обновления"
219
+
220
+ #. Plugin Name of the plugin/theme
221
+ msgid "Favicon by RealFaviconGenerator"
222
+ msgstr "Favicon от RealFaviconGenerator"
223
+
224
+ #. Plugin URI of the plugin/theme
225
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
226
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
227
+
228
+ #. Description of the plugin/theme
229
+ msgid ""
230
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
231
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
232
+ msgstr ""
233
+ "Создайте и установите фавикон на всех платформах: конечно, PC / Mac, но так "
234
+ "же и на iPhone / Ipad, Android устройствах, Windows 8 планшетах и т.д."
235
+
236
+ #. Author of the plugin/theme
237
+ msgid "Philippe Bernard"
238
+ msgstr "Филиппе Бернар"
239
+
240
+ #. Author URI of the plugin/theme
241
+ msgid "http://realfavicongenerator.net/"
242
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator-sv_SE.mo ADDED
Binary file
trunk/languages/favicon-by-realfavicongenerator-sv_SE.po ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2014-2016 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.0.4\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2014-10-22 20:10:01+00:00\n"
9
+ "PO-Revision-Date: 2014-11-15 09:54+0100\n"
10
+ "Last-Translator: Linus Wileryd <linus@cutup.se>\n"
11
+ "Language-Team: Linus <linus@cutup.se>\n"
12
+ "Language: sv_SE\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "X-Generator: Poedit 1.6.10\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "X-Poedit-SourceCharset: UTF-8\n"
19
+
20
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:65
21
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:66
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:70
23
+ msgid "Favicon"
24
+ msgstr "Favicon"
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:69
27
+ msgid "Favicon Settings"
28
+ msgstr "Favicon-inställningar"
29
+
30
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:351
31
+ msgid ""
32
+ "<a href=\"%s\" target=\"_blank\">An update is available</a> on "
33
+ "RealFaviconGenerator. You might want to <a href=\"%s\">generate your favicon "
34
+ "again</a>."
35
+ msgstr ""
36
+ "<a href=\"%s\" target=\"_blank\">En uppdatering finns tillgänglig</a> hos "
37
+ "RealFaviconGenerator. Du vill förmodligen <a href=\"%s\">generera din "
38
+ "favicon på nytt</a>."
39
+
40
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:354
41
+ msgid " | <a href=\"%s\">Hide this notice</a>"
42
+ msgstr " | <a href=\"%s\">Dölj denna notis</a>"
43
+
44
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:356
45
+ msgid " | <a href=\"%s\">Do not warn me again in case of update</a>"
46
+ msgstr " | <a href=\"%s\">Varna mig inte igen om ev. uppdateringar</a>"
47
+
48
+ #: admin/views/appearance.php:11
49
+ msgid "Favicon installation in progress. Please wait..."
50
+ msgstr "Favicon installeras just nu. Var vänlig vänta..."
51
+
52
+ #: admin/views/appearance.php:15
53
+ msgid "Favicon installed!"
54
+ msgstr "Favicon installerad!"
55
+
56
+ #: admin/views/appearance.php:20 admin/views/appearance.php:31
57
+ msgid "Current favicon"
58
+ msgstr "Aktuell favicon"
59
+
60
+ #: admin/views/appearance.php:21 admin/views/appearance.php:34
61
+ msgid "The favicon is up and ready."
62
+ msgstr "Favicon är uppladdad och redo."
63
+
64
+ #: admin/views/appearance.php:25 admin/views/appearance.php:46
65
+ msgid ""
66
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
67
+ msgstr ""
68
+ "<a %s>Granska din favicon</a> med RealFaviconGenerators favicon-granskare."
69
+
70
+ #: admin/views/appearance.php:27 admin/views/appearance.php:49
71
+ msgid "This option works only if your site is accessible from the outside."
72
+ msgstr "Detta tillval fungerar endast om din sajt är åtkomlig utifrån."
73
+
74
+ #: admin/views/appearance.php:36
75
+ msgid "No favicon has been configured yet."
76
+ msgstr "Ingen favicon har konfigurerats ännu."
77
+
78
+ #: admin/views/appearance.php:56
79
+ msgid "Favicon generation"
80
+ msgstr "Genererande av favicon"
81
+
82
+ #: admin/views/appearance.php:58
83
+ msgid "You can replace the existing favicon."
84
+ msgstr "Du kan ersätta den favicon som existerar."
85
+
86
+ #: admin/views/appearance.php:65
87
+ msgid "Master picture URL"
88
+ msgstr "Originalbildlänk"
89
+
90
+ #: admin/views/appearance.php:69 admin/views/appearance.php:70
91
+ msgid "Select from the Media Library"
92
+ msgstr "Välj från Mediabiblioteket"
93
+
94
+ #: admin/views/appearance.php:73
95
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
96
+ msgstr ""
97
+ "Skicka in en kvadratisk bild, minst 70x70 (rekommenderat: 260x260 eller "
98
+ "högre)"
99
+
100
+ #: admin/views/appearance.php:75
101
+ msgid ""
102
+ "If the picture is on your hard drive, you can leave this field blank and "
103
+ "upload the picture from RealFaviconGenerator."
104
+ msgstr ""
105
+ "Om bilden finns på din hårddisk kan du lämna fältet blankt och ladda upp "
106
+ "bilden från RealFaviconGenerator."
107
+
108
+ #: admin/views/appearance.php:83
109
+ msgid "Favicon files in root directory"
110
+ msgstr "Favicon-filer i rotmappen"
111
+
112
+ #: admin/views/appearance.php:88
113
+ msgid "The plugin always stores the favicon files in a dedicated directory."
114
+ msgstr "Tillägget sparar alltid favicon-filerna i en dedikerad mapp."
115
+
116
+ #: admin/views/appearance.php:90
117
+ msgid ""
118
+ "However, if this option is enabled, the plugin takes advantage of the "
119
+ "permalink feature and the favicon files appear to be in the root directory"
120
+ msgstr ""
121
+ "Hursomhelst, om detta tillval är aktiverat använder tillägget sig av "
122
+ "permalänk-funktionen och favicon-filerna ser ut att finnas i rotmappen"
123
+
124
+ #: admin/views/appearance.php:91
125
+ msgid "recommended"
126
+ msgstr "rekommenderat"
127
+
128
+ #: admin/views/appearance.php:100
129
+ msgid "Generate favicon"
130
+ msgstr "Generera favicon"
131
+
132
+ #: admin/views/appearance.php:189
133
+ msgid "An error occured"
134
+ msgstr "Ett fel uppstod"
135
+
136
+ #: admin/views/appearance.php:200
137
+ msgid "An internal error occurred"
138
+ msgstr "Ett internt fel uppstod"
139
+
140
+ #: admin/views/settings.php:13
141
+ msgid ""
142
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
143
+ "Favicon</a>"
144
+ msgstr ""
145
+ "Vill du ställa in din favicon? Gå till <a href=\"%s\">Utseende &gt; Favicon</"
146
+ "a>"
147
+
148
+ #: admin/views/settings.php:22
149
+ msgid "Display update notifications"
150
+ msgstr "Visa uppdateringsnotiser"
151
+
152
+ #: admin/views/settings.php:27
153
+ msgid ""
154
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
155
+ "Apple releases a new version of iOS or a new platform is supported."
156
+ msgstr ""
157
+ "Få notifieringar när RealFaviconGenerator uppdateras t.ex. när Apple släpper "
158
+ "en ny version av iOS eller att det införs stöd för en ny plattform."
159
+
160
+ #: admin/views/settings.php:36
161
+ msgid "Save changes"
162
+ msgstr "Spara ändringar"
163
+
164
+ #. Plugin Name of the plugin/theme
165
+ msgid "Favicon by RealFaviconGenerator"
166
+ msgstr "Favicon av RealFaviconGenerator"
167
+
168
+ #. Plugin URI of the plugin/theme
169
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
170
+ msgstr "http://realfavicongenerator.net/extensions/wordpress"
171
+
172
+ #. Description of the plugin/theme
173
+ msgid ""
174
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
175
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
176
+ msgstr ""
177
+ "Skapa och installera din favicon för alla plattformar: PC/Mac såklart, men "
178
+ "också iPhone/iPad, Android-enheter, Windows 8-surfplattor etc."
179
+
180
+ #. Author of the plugin/theme
181
+ msgid "Philippe Bernard"
182
+ msgstr "Philippe Bernard"
183
+
184
+ #. Author URI of the plugin/theme
185
+ msgid "http://realfavicongenerator.net/"
186
+ msgstr "http://realfavicongenerator.net/"
trunk/languages/favicon-by-realfavicongenerator.pot ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Favicon by RealFaviconGenerator
2
+ # This file is distributed under the same license as the Favicon by RealFaviconGenerator package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Favicon by RealFaviconGenerator 1.3.0\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/favicon-by-"
7
+ "realfavicongenerator\n"
8
+ "POT-Creation-Date: 2015-06-24 08:06:10+00:00\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+
16
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:77
17
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:78
18
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:82
19
+ msgid "Favicon"
20
+ msgstr ""
21
+
22
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:81
23
+ msgid "Favicon Settings"
24
+ msgstr ""
25
+
26
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:182
27
+ msgid ""
28
+ "Nonce was not recognized. This case is supposed to happen only in case of "
29
+ "XSS attack. If you feel like something is wrong, please <a href=\\\"mailto:"
30
+ "contact@realfavicongenerator.net\\\">contact us</a>."
31
+ msgstr ""
32
+
33
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:190
34
+ #: public/class-favicon-by-realfavicongenerator-common.php:414
35
+ msgid "Cannot create directory %s to store the favicon package"
36
+ msgstr ""
37
+
38
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:442
39
+ msgid "An update is available on RealFaviconGenerator:"
40
+ msgstr ""
41
+
42
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:448
43
+ msgid "You might want to <a href=\"%s\">generate your favicon again</a>"
44
+ msgstr ""
45
+
46
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:454
47
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:477
48
+ msgid "Hide this notice"
49
+ msgstr ""
50
+
51
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:458
52
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:481
53
+ msgid "Do not warn me again in case of update"
54
+ msgstr ""
55
+
56
+ #: admin/class-favicon-by-realfavicongenerator-admin.php:471
57
+ msgid "Your favicon was updated automatically:"
58
+ msgstr ""
59
+
60
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:159
61
+ msgid "Cannot create directory %s to store the favicon package content"
62
+ msgstr ""
63
+
64
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:206
65
+ msgid "Unknown reason"
66
+ msgstr ""
67
+
68
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:212
69
+ msgid "Error while unziping the favicon package %s to directory %s"
70
+ msgstr ""
71
+
72
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:281
73
+ msgid "Cannot download file at %s"
74
+ msgstr ""
75
+
76
+ #: admin/class-favicon-by-realfavicongenerator-api-response.php:284
77
+ msgid "Cannot store downloaded file locally"
78
+ msgstr ""
79
+
80
+ #: admin/views/appearance.php:11
81
+ msgid "Favicon installation in progress. Please wait..."
82
+ msgstr ""
83
+
84
+ #: admin/views/appearance.php:16
85
+ msgid "Favicon installed!"
86
+ msgstr ""
87
+
88
+ #: admin/views/appearance.php:18
89
+ msgid ""
90
+ "Do you like the result? If so, would you like to <a %s>rate the plugin</a>?"
91
+ msgstr ""
92
+
93
+ #: admin/views/appearance.php:26 admin/views/appearance.php:37
94
+ msgid "Current favicon"
95
+ msgstr ""
96
+
97
+ #: admin/views/appearance.php:27 admin/views/appearance.php:40
98
+ msgid "The favicon is up and ready."
99
+ msgstr ""
100
+
101
+ #: admin/views/appearance.php:31 admin/views/appearance.php:52
102
+ msgid ""
103
+ "<a %s>Check your favicon</a> with RealFaviconGenerator's favicon checker."
104
+ msgstr ""
105
+
106
+ #: admin/views/appearance.php:33 admin/views/appearance.php:55
107
+ msgid "This option works only if your site is accessible from the outside."
108
+ msgstr ""
109
+
110
+ #: admin/views/appearance.php:42
111
+ msgid "No favicon has been configured yet."
112
+ msgstr ""
113
+
114
+ #: admin/views/appearance.php:62
115
+ msgid "Favicon generation"
116
+ msgstr ""
117
+
118
+ #: admin/views/appearance.php:64
119
+ msgid "You can replace the existing favicon."
120
+ msgstr ""
121
+
122
+ #: admin/views/appearance.php:71
123
+ msgid "Master picture URL"
124
+ msgstr ""
125
+
126
+ #: admin/views/appearance.php:75 admin/views/appearance.php:76
127
+ msgid "Select from the Media Library"
128
+ msgstr ""
129
+
130
+ #: admin/views/appearance.php:79
131
+ msgid "Submit a square picture, at least 70x70 (recommended: 260x260 or more)"
132
+ msgstr ""
133
+
134
+ #: admin/views/appearance.php:81
135
+ msgid ""
136
+ "If the picture is on your hard drive, you can leave this field blank and "
137
+ "upload the picture from RealFaviconGenerator."
138
+ msgstr ""
139
+
140
+ #: admin/views/appearance.php:89
141
+ msgid "Favicon files in root directory"
142
+ msgstr ""
143
+
144
+ #: admin/views/appearance.php:94
145
+ msgid "The plugin always stores the favicon files in a dedicated directory."
146
+ msgstr ""
147
+
148
+ #: admin/views/appearance.php:96
149
+ msgid ""
150
+ "However, if this option is enabled, the plugin takes advantage of the "
151
+ "permalink feature and the favicon files appear to be in the root directory"
152
+ msgstr ""
153
+
154
+ #: admin/views/appearance.php:97
155
+ msgid "recommended"
156
+ msgstr ""
157
+
158
+ #: admin/views/appearance.php:106 admin/views/appearance.php:220
159
+ msgid "Generate favicon"
160
+ msgstr ""
161
+
162
+ #: admin/views/appearance.php:200
163
+ msgid "Preparing master picture..."
164
+ msgstr ""
165
+
166
+ #: admin/views/appearance.php:257
167
+ msgid "An error occured"
168
+ msgstr ""
169
+
170
+ #: admin/views/appearance.php:268
171
+ msgid "An internal error occurred"
172
+ msgstr ""
173
+
174
+ #: admin/views/settings.php:13
175
+ msgid ""
176
+ "Do you want to setup your favicon? Go to <a href=\"%s\">Appearance &gt; "
177
+ "Favicon</a>"
178
+ msgstr ""
179
+
180
+ #: admin/views/settings.php:22
181
+ msgid "Display update notifications"
182
+ msgstr ""
183
+
184
+ #: admin/views/settings.php:27
185
+ msgid ""
186
+ "Get notifications when RealFaviconGenerator is updated. For example, when "
187
+ "Apple releases a new version of iOS or a new platform is supported."
188
+ msgstr ""
189
+
190
+ #: admin/views/settings.php:36
191
+ msgid "Save changes"
192
+ msgstr ""
193
+
194
+ #: public/class-favicon-by-realfavicongenerator-common.php:181
195
+ msgid ""
196
+ "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the "
197
+ "update"
198
+ msgstr ""
199
+
200
+ #. Plugin Name of the plugin/theme
201
+ msgid "Favicon by RealFaviconGenerator"
202
+ msgstr ""
203
+
204
+ #. Plugin URI of the plugin/theme
205
+ msgid "http://realfavicongenerator.net/extensions/wordpress"
206
+ msgstr ""
207
+
208
+ #. Description of the plugin/theme
209
+ msgid ""
210
+ "Create and install your favicon for all platforms: PC/Mac of course, but "
211
+ "also iPhone/iPad, Android devices, Windows 8 tablets, etc."
212
+ msgstr ""
213
+
214
+ #. Author of the plugin/theme
215
+ msgid "Philippe Bernard"
216
+ msgstr ""
217
+
218
+ #. Author URI of the plugin/theme
219
+ msgid "http://realfavicongenerator.net/"
220
+ msgstr ""
trunk/public/class-favicon-by-realfavicongenerator-common.php ADDED
@@ -0,0 +1,475 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+
4
+ class Favicon_By_RealFaviconGenerator_Common {
5
+
6
+ const PLUGIN_PREFIX = 'fbrfg';
7
+
8
+ const OPTION_FAVICON_CONFIGURED = 'fbrfg_favicon_configured';
9
+ const OPTION_FAVICON_IN_ROOT = 'fbrfg_favicon_in_root';
10
+ const OPTION_PREVIEW_FILE_NAME = 'fbrfg_preview_file_name';
11
+ const OPTION_HTML_CODE = 'fbrfg_html_code';
12
+ const OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST = 'fbrfg_favicon_non_interactive_api_request';
13
+
14
+ const OPTION_FAVICON_CURRENT_VERSION = 'fbrfg_favicon_current_version';
15
+ const OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM = 'fbrfg_most_recent_automatic_update_from';
16
+ const OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO = 'fbrfg_most_recent_automatic_update_to';
17
+ const OPTION_LATEST_MANUAL_AVAILABLE_UPDATE = 'fbrfg_latest_manual_available_update';
18
+ const OPTION_UPDATES_DATA = 'fbrfg_updates_data';
19
+ const OPTION_UPDATES_LIST = 'fbrfg_updates_list';
20
+
21
+ const META_NO_UPDATE_NOTICE_FOR_VERSION = 'fbrfg_ignore_update_notice_';
22
+ const META_NO_AUTOMATIC_UPDATE_NOTICE_FOR_VERSION = 'fbrfg_ignore_automatic_update_notice_';
23
+ const META_NO_UPDATE_NOTICE = 'fbrfg_no_update_notice';
24
+
25
+ public static function get_options_list() {
26
+ return array(
27
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED,
28
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT,
29
+ Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME,
30
+ Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE,
31
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST,
32
+ Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CURRENT_VERSION,
33
+ Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM,
34
+ Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO,
35
+ Favicon_By_RealFaviconGenerator_Common::OPTION_LATEST_MANUAL_AVAILABLE_UPDATE,
36
+ Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA,
37
+ Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST,
38
+ Favicon_By_RealFaviconGenerator_Common::META_NO_UPDATE_NOTICE );
39
+ }
40
+
41
+ const PLUGIN_SLUG = 'favicon-by-realfavicongenerator';
42
+
43
+ const ACTION_CHECK_FOR_UPDATE = 'fbrfg_check_for_updates';
44
+
45
+ const RFG_DEBUG = 'false';
46
+
47
+ public function log_info( $message ) {
48
+ if ( ( ( constant( 'WP_DEBUG') == 'true' ) || ( constant( 'WP_DEBUG') == 1 ) ) &&
49
+ ( ( constant( 'Favicon_By_RealFaviconGenerator_Common::RFG_DEBUG') == 'true' ) ||
50
+ ( constant( 'Favicon_By_RealFaviconGenerator_Common::RFG_DEBUG') == 1 ) ) ) {
51
+ error_log( 'RealFaviconGenerator - ' . $message );
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Indicate if a favicon was configured.
57
+ */
58
+ public function is_favicon_configured() {
59
+ $opt = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED );
60
+ return ( $opt == 1 );
61
+ }
62
+
63
+ /**
64
+ * Indicate if the configured favicon is in the root directory of the web site.
65
+ */
66
+ public function is_favicon_in_root() {
67
+ $opt = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT );
68
+ return ( $opt == 1 ) && $this->is_favicon_configured();
69
+ }
70
+
71
+ public function get_favicon_current_version() {
72
+ // Before the "version" feature was implemented, all favicons generated by the plugin
73
+ // were generated with RFG v0.7
74
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CURRENT_VERSION, "0.7" );
75
+ }
76
+
77
+ public function set_favicon_current_version( $version ) {
78
+ return update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CURRENT_VERSION, $version );
79
+ }
80
+
81
+ public function set_most_recent_automatic_update( $from_version, $to_version ) {
82
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM,
83
+ $from_version );
84
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO,
85
+ $to_version );
86
+ }
87
+
88
+ /**
89
+ * Return the last automatic update that *has been* run.
90
+ * If favicon was automatically updated from version 0.6 to 0.8, this function returns array('0.6', '0.8').
91
+ */
92
+ public function get_most_recent_automatic_update() {
93
+ $from = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_FROM );
94
+ $to = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_MOST_RECENT_AUTOMATIC_UPDATE_TO );
95
+ return ( ( $from == NULL ) || ( $to == NULL ) ) ? NULL : array( $from, $to );
96
+ }
97
+
98
+ public function set_latest_manual_available_update( $version ) {
99
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_LATEST_MANUAL_AVAILABLE_UPDATE,
100
+ $version );
101
+ }
102
+
103
+ /**
104
+ * Return the lastest available update (to be proposed to the user).
105
+ */
106
+ public function get_latest_manual_available_update() {
107
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_LATEST_MANUAL_AVAILABLE_UPDATE );
108
+ }
109
+
110
+ /**
111
+ * Save the versions data, as returned by https://realfavicongenerator.net/api/versions
112
+ */
113
+ public function set_updates_data( $versions_data ) {
114
+ $this->log_info( 'Set updates data' );
115
+
116
+ $data = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA );
117
+ if ( ! $data ) {
118
+ $data = array();
119
+ }
120
+ $list = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST );
121
+ if ( ! $list ) {
122
+ $list = array();
123
+ }
124
+ foreach($versions_data as $version ) {
125
+ $this->log_info( 'Store data of ' . $version['version']);
126
+ $data[$version['version']] = $version;
127
+ if ( ! in_array($version['version'], $list ) ) {
128
+ array_push( $list, $version['version'] );
129
+ }
130
+ }
131
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA, $data );
132
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST, $list );
133
+ }
134
+
135
+ /**
136
+ * Returns the data of a particular update. Format is similar to what is returned by
137
+ * https://realfavicongenerator.net/api/versions
138
+ */
139
+ public function get_update_data( $version ) {
140
+ $data = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_DATA );
141
+ if ( ! $data ) {
142
+ return NULL;
143
+ }
144
+ else {
145
+ return $data[$version];
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Return the list of versions. For example, if versions are know from 0.3 to 0.11 and $from = '0.6' and $to = '0.10',
151
+ * then this function returns array('0.7', '0.8', '0.9', '0.10'). Yes, '0.6' is not included while '0.10' is.
152
+ */
153
+ public function get_updates_list( $from, $to ) {
154
+ $this->log_info( 'Getting versions list from ' . $from . ' to ' . $to );
155
+
156
+ $list = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_UPDATES_LIST );
157
+ if ( ! $list ) {
158
+ return NULL;
159
+ }
160
+
161
+ $listing = ! in_array( $from, $list );
162
+ $sub_list = array();
163
+
164
+ foreach( $list as $version ) {
165
+ if ( $listing ) {
166
+ array_push( $sub_list, $version );
167
+ }
168
+ if ( $version == $from ) {
169
+ $listing = true;
170
+ }
171
+ if ( $version == $to ) {
172
+ return $sub_list;
173
+ }
174
+ }
175
+
176
+ return $sub_list;
177
+ }
178
+
179
+ public function get_updates_description( $from, $to ) {
180
+ $this->log_info( 'Getting description from ' . $from . ' to ' . $to );
181
+
182
+ $versions = $this->get_updates_list( $from, $to );
183
+ if ( $versions == NULL ) {
184
+ $this->log_info( 'No versions, return a link to the change log description' );
185
+ return sprintf( __( "Visit the <a href=\"%s\">RFG's change log</a> to view the content of the update" ),
186
+ 'https://realfavicongenerator.net/change_log?since=' . $from );
187
+ }
188
+
189
+ $this->log_info( 'Versions to describe: ' . implode( ', ', $versions ) );
190
+
191
+ $descriptions = array();
192
+ foreach( $versions as $version ) {
193
+ $update = $this->get_update_data( $version );
194
+ array_push( $descriptions,
195
+ '<p>' . $update['description'] . '</p>' );
196
+ }
197
+ return implode($descriptions);
198
+ }
199
+
200
+ public function get_non_interactive_api_request() {
201
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST );
202
+ }
203
+
204
+ public function set_favicon_configured( $configured, $favicon_in_root, $version, $non_interactive_api_request = NULL ) {
205
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_CONFIGURED,
206
+ $configured ? 1 : 0 );
207
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_IN_ROOT,
208
+ $favicon_in_root ? 1 : 0 );
209
+
210
+ $this->set_favicon_current_version( $version );
211
+
212
+ // Reset the update stuff
213
+ $this->set_latest_manual_available_update( NULL );
214
+
215
+ if ( $non_interactive_api_request != NULL ) {
216
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_FAVICON_NON_INTERACTIVE_API_REQUEST,
217
+ $non_interactive_api_request );
218
+ }
219
+ }
220
+
221
+ public function is_preview_available() {
222
+ $opt = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME );
223
+ return ( ( $opt != NULL ) && ( $opt != false ) );
224
+ }
225
+
226
+ public function get_preview_file_name() {
227
+ return get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME );
228
+ }
229
+
230
+ public function set_preview_file_name($preview_file_name) {
231
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_PREVIEW_FILE_NAME,
232
+ $preview_file_name);
233
+ }
234
+
235
+ public function add_favicon_markups() {
236
+ $code = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE );
237
+ if ( $code ) {
238
+ echo $code;
239
+ }
240
+ }
241
+
242
+ public function remove_genesis_favicon() {
243
+ // See http://dreamwhisperdesigns.com/genesis-tutorials/change-default-genesis-favicon/
244
+ // However, I didn't find the right hook to trigger this code in time to deactivate Genesis hooks.
245
+ // As a consequence, this function is not used and mostly here as a reference.
246
+ remove_action( 'genesis_meta', 'genesis_load_favicon' );
247
+ remove_action( 'wp_head', 'genesis_load_favicon' );
248
+ }
249
+
250
+ public function return_empty_favicon_for_genesis( $param ) {
251
+ $code = get_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE );
252
+ if ( $code ) {
253
+ // Why NULL?
254
+ // - It is not false (ie. the exact boolean value 'false')
255
+ // - When tested with 'if ($value)', the condition fails.
256
+ // See function genesis_load_favicon for more details
257
+ return NULL;
258
+ }
259
+ else {
260
+ // Return the value as is, no interference with the rest of WordPress
261
+ return $param;
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Returns /www/wordpress/wp-content/uploaded/fbrfg
267
+ */
268
+ public static function get_files_dir() {
269
+ $up_dir = wp_upload_dir();
270
+ return $up_dir['basedir'] . '/' . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '/';
271
+ }
272
+
273
+ /**
274
+ * Returns http//somesite.com/blog/wp-content/upload/fbrfg/
275
+ */
276
+ public static function get_files_url() {
277
+ $up_dir = wp_upload_dir();
278
+ $baseUrl = $up_dir['baseurl'];
279
+ // Make sure to no duplicate the '/'
280
+ // This is especially important when the base URL is the root directory:
281
+ // When this happens, the generated URL would be
282
+ // "http//somesite.com//fbrfg/" and then "//fbrfg/" when the host name is
283
+ // stripped. But this path is wrong, as it looks like a "same protocol" URL.
284
+ $separator = (substr($baseUrl, -1) == '/') ? '' : '/';
285
+ return $baseUrl . $separator . Favicon_By_RealFaviconGenerator_Common::PLUGIN_PREFIX . '/';
286
+ }
287
+
288
+ public static function get_tmp_dir() {
289
+ return Favicon_By_RealFaviconGenerator_Common::get_files_dir() . 'tmp' . DIRECTORY_SEPARATOR;
290
+ }
291
+
292
+ public static function remove_directory($directory) {
293
+ foreach( scandir( $directory ) as $v ) {
294
+ if ( is_dir( $directory . DIRECTORY_SEPARATOR . $v ) ) {
295
+ if ( $v != '.' && $v != '..' ) {
296
+ Favicon_By_RealFaviconGenerator_Common::remove_directory(
297
+ $directory . DIRECTORY_SEPARATOR . $v );
298
+ }
299
+ }
300
+ else {
301
+ unlink( $directory . DIRECTORY_SEPARATOR . $v );
302
+ }
303
+ }
304
+ rmdir( $directory );
305
+ }
306
+
307
+
308
+ /**
309
+ * Load the plugin text domain for translation.
310
+ */
311
+ public function load_plugin_textdomain() {
312
+
313
+ $domain = Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG;
314
+ $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
315
+
316
+ load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . DIRECTORY_SEPARATOR . $domain . '-' . $locale . '.mo' );
317
+ load_plugin_textdomain( $domain, FALSE,
318
+ basename( plugin_dir_path( dirname( __FILE__ ) ) ) . DIRECTORY_SEPARATOR .
319
+ 'languages' . DIRECTORY_SEPARATOR );
320
+ }
321
+
322
+ // See http://webcheatsheet.com/php/get_current_page_url.php
323
+ public function current_page_url() {
324
+ // See https://mekshq.com/get-current-page-url-wordpress/
325
+ global $wp;
326
+ $current_url = home_url( add_query_arg( array(), $wp->request ) );
327
+ return $current_url;
328
+ }
329
+
330
+ public function add_parameter_to_current_url( $param_and_value ) {
331
+ $url = $this->current_page_url();
332
+ if ( strpos( $url, '?') !== false) {
333
+ return $url . '&' . $param_and_value;
334
+ }
335
+ else {
336
+ return $url . '?' . $param_and_value;
337
+ }
338
+ }
339
+
340
+ public function check_for_updates() {
341
+ $this->log_info( 'Checking for updates...' );
342
+
343
+ if ( ! $this->is_favicon_configured() ) {
344
+ // No favicon so nothing to update
345
+ $this->log_info( 'No favicon configured so nothing to update' );
346
+ return;
347
+ }
348
+
349
+ $version = $this->get_favicon_current_version();
350
+ $this->log_info( 'Current version is ' . $version );
351
+
352
+ if ( $version == NULL ) {
353
+ // No version for some reason. Let's leave.
354
+ $this->log_info( 'Current favicon version not available' );
355
+ return;
356
+ }
357
+
358
+ $checkUrl = 'https://realfavicongenerator.net/api/versions?since=' . $version;
359
+ $resp = wp_remote_get( $checkUrl );
360
+ if ( ( $resp == NULL ) || ( $resp == false ) || ( is_wp_error( $resp ) ) ||
361
+ ( $resp['response'] == NULL ) || ( $resp['response']['code'] == NULL ) || ( $resp['response']['code'] != 200 ) ) {
362
+ // Error of some kind? Return
363
+ $this->log_info( 'Cannot get latest version from RealFaviconGenerator ' .
364
+ ( is_wp_error( $resp ) ? ': ' . $resp->get_error_message() : '' ) . ' (URL was ' . $checkUrl . ')' );
365
+ return;
366
+ }
367
+
368
+ $json = json_decode( $resp['body'], true );
369
+ if ( empty( $json ) ) {
370
+ $this->log_info( 'No change since version ' . $version . ' or cannot parse JSON (JSON parsing error code is ' . json_last_error() . ')' );
371
+ return;
372
+ }
373
+
374
+ $this->log_info( 'Update versions database' );
375
+ $this->set_updates_data( $json );
376
+
377
+ // Check update relevancy
378
+ $manual = false;
379
+ $automatic = false;
380
+ foreach($json as $version) {
381
+ if ( $version['relevance']['manual_update'] ) {
382
+ $manual = true;
383
+ }
384
+ if ( $version['relevance']['automated_update'] ) {
385
+ $automatic = true;
386
+ }
387
+ }
388
+
389
+ $this->log_info( "Automated updates to run: " . ( $automatic ? 'true' : 'false') );
390
+ $this->log_info( "Manual updates to run: " . ( $manual ? 'true' : 'false' ) );
391
+
392
+ if ( $manual || ( $automatic && ( ! $this->get_non_interactive_api_request() ) ) ) {
393
+ $this->log_info( 'Manual update, or automatic update but we have no non-interactive request to do it automatically' );
394
+
395
+ // We only note the latest available version.
396
+ // For example, if we receive version 0.8, 0.9 and 0.10 (in this order), we only note 0.10
397
+ $last = $json[count( $json ) - 1];
398
+ $latest_version = $last['version'];
399
+
400
+ // Save the fact that we should update
401
+ $this->log_info( 'There is a manual update to go to ' . $latest_version );
402
+ $this->set_latest_manual_available_update( $latest_version );
403
+ }
404
+ else if ( $automatic && $this->get_non_interactive_api_request() ) {
405
+ // Automatic update
406
+
407
+ $this->log_info( 'Automatic update to be performed' );
408
+
409
+ // Do not run it when the update is also manual, because we are going to ask the user to
410
+ // update anyway.
411
+
412
+ try {
413
+ $result = $this->run_non_interactive_api_request( $this->get_non_interactive_api_request() );
414
+
415
+ $response = new Favicon_By_RealFaviconGenerator_Api_Response( $result );
416
+
417
+ $zip_path = Favicon_By_RealFaviconGenerator_Common::get_tmp_dir();
418
+ if ( ! file_exists( $zip_path ) ) {
419
+ if ( mkdir( $zip_path, 0755, true ) !== true ) {
420
+ throw new InvalidArgumentException( sprintf( __( 'Cannot create directory %s to store the favicon package', FBRFG_PLUGIN_SLUG), $zip_path ) );
421
+ }
422
+ }
423
+ $response->downloadAndUnpack( $zip_path );
424
+
425
+ $this->store_pictures( $response );
426
+
427
+ $this->store_preview( $response->getPreviewPath() );
428
+
429
+ Favicon_By_RealFaviconGenerator_Common::remove_directory( $zip_path );
430
+
431
+ update_option( Favicon_By_RealFaviconGenerator_Common::OPTION_HTML_CODE, $response->getHtmlCode() );
432
+
433
+ $version_before_update = $this->get_favicon_current_version();
434
+
435
+ $this->set_favicon_configured( true, $response->isFilesInRoot(), $response->getVersion() );
436
+
437
+ // Remember about this update
438
+ $this->log_info( 'Save the fact that we updated from ' . $version_before_update . ' to ' . $response->getVersion() );
439
+ $this->set_most_recent_automatic_update( $version_before_update, $response->getVersion() );
440
+ }
441
+ catch( Exception $e ) {
442
+ $this->log_info( 'Cannot update favicon automatically: ' . $e->getMessage() );
443
+ }
444
+ }
445
+ }
446
+
447
+ public function run_non_interactive_api_request( $request ) {
448
+ $resp = wp_remote_post( 'https://realfavicongenerator.net/api/favicon',
449
+ array( 'body' => $request, 'timeout' => 45 ) );
450
+ if ( is_wp_error( $resp )) {
451
+ throw new InvalidArgumentException( "Cannot run the non-interactive API request for update: " . $resp->get_error_message() );
452
+ }
453
+
454
+ $json = wp_remote_retrieve_body( $resp );
455
+ if ( empty( $json ) ) {
456
+ throw new InvalidArgumentException( "Empty JSON document while running the non-interactive API request" );
457
+ }
458
+
459
+ return $json;
460
+ }
461
+
462
+ public function portable_filename( $filename ) {
463
+ return str_replace( '/', DIRECTORY_SEPARATOR, $filename );
464
+ }
465
+
466
+ public function portable_rename( $from, $to ) {
467
+ $from = $this->portable_filename( $from );
468
+ $to = $this->portable_filename( $to );
469
+ rename( $from, $to );
470
+ }
471
+
472
+ }
473
+
474
+ // Shortcut
475
+ define('FBRFG_PLUGIN_SLUG', Favicon_By_RealFaviconGenerator_Common::PLUGIN_SLUG);
trunk/public/class-favicon-by-realfavicongenerator.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+
4
+ require_once plugin_dir_path( __FILE__ ) . '..' . DIRECTORY_SEPARATOR .
5
+ 'public' . DIRECTORY_SEPARATOR . 'class-favicon-by-realfavicongenerator-common.php';
6
+
7
+ class Favicon_By_RealFaviconGenerator extends Favicon_By_RealFaviconGenerator_Common {
8
+
9
+ protected static $instance = null;
10
+
11
+ private function __construct() {
12
+ add_action( 'wp_head', array( $this, 'add_favicon_markups' ) );
13
+ add_action( 'login_head', array( $this, 'add_favicon_markups' ) );
14
+
15
+ // Deactivate Genesis default favicon
16
+ add_filter( 'genesis_pre_load_favicon', array( $this, 'return_empty_favicon_for_genesis' ) );
17
+ }
18
+
19
+ public static function get_instance() {
20
+
21
+ // If the single instance hasn't been set, set it now.
22
+ if ( null == self::$instance ) {
23
+ self::$instance = new self;
24
+ }
25
+
26
+ return self::$instance;
27
+ }
28
+
29
+
30
+ public static function activate( $network_wide ) {
31
+ // Nothing to do
32
+ }
33
+
34
+ public static function deactivate( $network_wide ) {
35
+ wp_clear_scheduled_hook( Favicon_By_RealFaviconGenerator_Common::ACTION_CHECK_FOR_UPDATE );
36
+ }
37
+
38
+ }
trunk/uninstall.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
+
4
+ // If uninstall not called from WordPress, then exit
5
+ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
6
+ exit;
7
+ }
8
+
9
+ require_once plugin_dir_path( __FILE__ ) . 'public' . DIRECTORY_SEPARATOR .
10
+ 'class-favicon-by-realfavicongenerator-common.php';
11
+
12
+ function fbrfg_clean_site_instance() {
13
+ // Remove options
14
+ foreach( Favicon_By_RealFaviconGenerator_Common::get_options_list() as $opt ) {
15
+ delete_option( $opt );
16
+ }
17
+
18
+ // Remove files
19
+ $dir = Favicon_By_RealFaviconGenerator_Common::get_files_dir();
20
+ if ( file_exists( $dir ) ) {
21
+ Favicon_By_RealFaviconGenerator_Common::remove_directory( $dir );
22
+ }
23
+ }
24
+
25
+ if ( is_multisite() ) {
26
+ global $wpdb;
27
+ $blogs = $wpdb->get_results( "SELECT blog_id FROM {$wpdb->blogs}", ARRAY_A );
28
+ fbrfg_clean_site_instance();
29
+
30
+ if ( $blogs ) {
31
+ foreach( $blogs as $blog ) {
32
+ switch_to_blog( $blog['blog_id'] );
33
+ fbrfg_clean_site_instance();
34
+ restore_current_blog();
35
+ }
36
+ }
37
+ } else {
38
+ fbrfg_clean_site_instance();
39
+ }
uninstall.php CHANGED
@@ -1,12 +1,13 @@
1
  <?php
2
- // Copyright 2014 RealFaviconGenerator
3
 
4
  // If uninstall not called from WordPress, then exit
5
  if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
6
  exit;
7
  }
8
 
9
- require_once plugin_dir_path( __FILE__ ) . 'public/class-favicon-by-realfavicongenerator-common.php';
 
10
 
11
  function fbrfg_clean_site_instance() {
12
  // Remove options
@@ -15,7 +16,10 @@ function fbrfg_clean_site_instance() {
15
  }
16
 
17
  // Remove files
18
- Favicon_By_RealFaviconGenerator_Common::remove_directory( Favicon_By_RealFaviconGenerator_Common::get_files_dir() );
 
 
 
19
  }
20
 
21
  if ( is_multisite() ) {
1
  <?php
2
+ // Copyright 2014-2016 RealFaviconGenerator
3
 
4
  // If uninstall not called from WordPress, then exit
5
  if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
6
  exit;
7
  }
8
 
9
+ require_once plugin_dir_path( __FILE__ ) . 'public' . DIRECTORY_SEPARATOR .
10
+ 'class-favicon-by-realfavicongenerator-common.php';
11
 
12
  function fbrfg_clean_site_instance() {
13
  // Remove options
16
  }
17
 
18
  // Remove files
19
+ $dir = Favicon_By_RealFaviconGenerator_Common::get_files_dir();
20
+ if ( file_exists( $dir ) ) {
21
+ Favicon_By_RealFaviconGenerator_Common::remove_directory( $dir );
22
+ }
23
  }
24
 
25
  if ( is_multisite() ) {