Version Description
Have you updated your database indexes and search table? If not please go to Statistics->Optimization->Database after you have installed the update and run the updates.
Download this release
Release Info
Developer | GregRoss |
Plugin | WP Statistics |
Version | 9.6.5 |
Comparing to | |
See all releases |
Code changes from version 9.6.4 to 9.6.5
- includes/functions/purge.php +1 -1
- includes/log/widgets/summary.php +1 -1
- languages/wp_statistics-id_ID.mo +0 -0
- languages/wp_statistics-id_ID.po +71 -71
- languages/wp_statistics-ru_RU.mo +0 -0
- languages/wp_statistics-ru_RU.po +108 -106
- readme.txt +12 -1
- vendor/browscap/browscap-php/.editorconfig +24 -0
- vendor/browscap/browscap-php/.gitattributes +7 -0
- vendor/browscap/browscap-php/.gitignore +6 -0
- vendor/browscap/browscap-php/.scrutinizer.yml +4 -0
- vendor/browscap/browscap-php/.travis.yml +23 -0
- vendor/browscap/browscap-php/CHANGELOG.md +55 -0
- vendor/browscap/browscap-php/LICENSE +19 -0
- vendor/browscap/browscap-php/README.md +57 -0
- vendor/browscap/browscap-php/composer.json +47 -0
- vendor/browscap/browscap-php/composer.lock +970 -0
- vendor/browscap/browscap-php/phpunit.xml +15 -0
- vendor/browscap/browscap-php/phpunit.xml.dist +15 -0
- {includes/classes → vendor/browscap/browscap-php/src/phpbrowscap}/Browscap.php +199 -107
- vendor/browscap/browscap-php/tests/bootstrap.php +26 -0
- vendor/browscap/browscap-php/tests/phpbrowscapTest/BrowscapTest.php +454 -0
- vendor/browscap/browscap-php/tests/phpbrowscapTest/CompareBrowscapWithOriginalTest.php +223 -0
- vendor/browscap/browscap-php/tests/phpbrowscapTest/TestCase.php +98 -0
- vendor/composer/autoload_files.php +10 -0
- vendor/composer/installed.json +44 -44
- vendor/donatj/phpuseragentparser/.travis.yml +2 -1
- vendor/donatj/phpuseragentparser/CONTRIBUTING.md +2 -2
- vendor/donatj/phpuseragentparser/Source/UserAgentParser.php +7 -4
- vendor/donatj/phpuseragentparser/Tests/UserAgentParserTest.php +5 -0
- vendor/donatj/phpuseragentparser/Tests/user_agents.json +25 -5
- vendor/donatj/phpuseragentparser/composer.json +2 -1
- vendor/maxmind/web-service-common/CHANGELOG.md +6 -0
- vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php +1 -1
- vendor/maxmind/web-service-common/tests/MaxMind/Test/WebService/Http/CurlRequestTest.php +52 -0
- wp-statistics.php +4 -4
- wps-updates.php +11 -4
includes/functions/purge.php
CHANGED
@@ -82,7 +82,7 @@
|
|
82 |
|
83 |
// If we failed it's because this is the first time we've seen this URI/pageid so let's create a historical row for it.
|
84 |
if( $uresult == 0 ) {
|
85 |
-
$wpdb->insert( $wpdb->prefix . "statistics_historical", array( 'value' => $historical, '
|
86 |
}
|
87 |
}
|
88 |
}
|
82 |
|
83 |
// If we failed it's because this is the first time we've seen this URI/pageid so let's create a historical row for it.
|
84 |
if( $uresult == 0 ) {
|
85 |
+
$wpdb->insert( $wpdb->prefix . "statistics_historical", array( 'value' => $historical, 'category' => 'uri', 'uri' => $row->uri, 'page_id' => wp_statistics_uri_to_id($row->uri) ) );
|
86 |
}
|
87 |
}
|
88 |
}
|
includes/log/widgets/summary.php
CHANGED
@@ -25,7 +25,7 @@
|
|
25 |
<tr>
|
26 |
<th><?php _e('User(s) Online', 'wp_statistics'); ?>:</th>
|
27 |
<th colspan="2" id="th-colspan">
|
28 |
-
<span><a href="admin.php?page=wps_online_menu"><?php echo wp_statistics_useronline();
|
29 |
</th>
|
30 |
</tr>
|
31 |
<?php }
|
25 |
<tr>
|
26 |
<th><?php _e('User(s) Online', 'wp_statistics'); ?>:</th>
|
27 |
<th colspan="2" id="th-colspan">
|
28 |
+
<span><a href="admin.php?page=wps_online_menu"><?php echo wp_statistics_useronline(); ?></a></span>
|
29 |
</th>
|
30 |
</tr>
|
31 |
<?php }
|
languages/wp_statistics-id_ID.mo
CHANGED
Binary file
|
languages/wp_statistics-id_ID.po
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
# This file is distributed under the same license as the WP Statistics package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"PO-Revision-Date: 2015-
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -13,19 +13,19 @@ msgstr ""
|
|
13 |
#: includes/settings/tabs/wps-maintenance.php:35
|
14 |
#: includes/settings/tabs/wps-maintenance.php:63
|
15 |
msgid "Enabled"
|
16 |
-
msgstr ""
|
17 |
|
18 |
#: includes/settings/tabs/wps-maintenance.php:30
|
19 |
msgid "Purge Old Data Daily"
|
20 |
-
msgstr ""
|
21 |
|
22 |
#: includes/settings/tabs/wps-maintenance.php:41
|
23 |
msgid "A WP Cron job will be run daily to purge any data older than a set number of days."
|
24 |
-
msgstr ""
|
25 |
|
26 |
#: includes/settings/tabs/wps-maintenance.php:47
|
27 |
msgid "Purge data older than"
|
28 |
-
msgstr ""
|
29 |
|
30 |
#: includes/settings/tabs/wps-maintenance.php:58
|
31 |
msgid "Purge High Hit Count Visitors Daily"
|
@@ -69,19 +69,19 @@ msgstr ""
|
|
69 |
|
70 |
#: wp-statistics.php:170
|
71 |
msgid "Database updates are required, please go to %s and update the following: %s"
|
72 |
-
msgstr ""
|
73 |
|
74 |
#: wp-statistics.php:161
|
75 |
msgid "countries database index"
|
76 |
-
msgstr ""
|
77 |
|
78 |
#: wp-statistics.php:154
|
79 |
msgid "search table"
|
80 |
-
msgstr ""
|
81 |
|
82 |
#: wp-statistics.php:148 wp-statistics.php:170
|
83 |
msgid "settings page"
|
84 |
-
msgstr ""
|
85 |
|
86 |
#: wp-statistics.php:148 wp-statistics.php:170
|
87 |
msgid ","
|
@@ -105,23 +105,23 @@ msgstr ""
|
|
105 |
|
106 |
#: includes/optimization/wps-optimization.php:196
|
107 |
msgid "Search table conversion complete, %d rows added."
|
108 |
-
msgstr ""
|
109 |
|
110 |
#: includes/optimization/tabs/wps-optimization-database.php:113
|
111 |
msgid "Older installs of WP Statistics store details of searches in the visitors table which can become a performance issue on large datasets. A new table has been created to hold this information in a more scalable fashion."
|
112 |
-
msgstr ""
|
113 |
|
114 |
#: includes/optimization/tabs/wps-optimization-database.php:94
|
115 |
msgid "Search Table"
|
116 |
-
msgstr ""
|
117 |
|
118 |
#: includes/optimization/tabs/wps-optimization-database.php:99
|
119 |
msgid "Convert"
|
120 |
-
msgstr ""
|
121 |
|
122 |
#: includes/optimization/tabs/wps-optimization-database.php:106
|
123 |
msgid "Convert Now!"
|
124 |
-
msgstr ""
|
125 |
|
126 |
#: includes/optimization/tabs/wps-optimization-database.php:107
|
127 |
msgid "Older installs of WP Statistics store details of searches in the visitors table which can become a performance issue on large datasets. A new table has been created to hold this information in a more scalable fashion, however the old data must first be converted to the new format before it can be used."
|
@@ -177,7 +177,7 @@ msgstr ""
|
|
177 |
|
178 |
#: includes/log/top-visitors.php:26
|
179 |
msgid "Date"
|
180 |
-
msgstr ""
|
181 |
|
182 |
#: includes/settings/tabs/wps-exclusions.php:151
|
183 |
msgid "Treat any visitor with corrupt browser info (missing IP address or empty user agent string) as a robot."
|
@@ -222,31 +222,31 @@ msgstr ""
|
|
222 |
|
223 |
#: includes/functions/purge-hits.php:25
|
224 |
msgid "%s records purged successfully."
|
225 |
-
msgstr ""
|
226 |
|
227 |
#: ajax.php:178 includes/functions/purge-hits.php:32
|
228 |
msgid "Number of hits must be greater than or equal to 10!"
|
229 |
-
msgstr ""
|
230 |
|
231 |
#: shortcode.php:141
|
232 |
msgid "Page Visits"
|
233 |
-
msgstr ""
|
234 |
|
235 |
#: shortcode.php:144
|
236 |
msgid "Page Count"
|
237 |
-
msgstr ""
|
238 |
|
239 |
#: shortcode.php:145
|
240 |
msgid "Comment Count"
|
241 |
-
msgstr ""
|
242 |
|
243 |
#: shortcode.php:146
|
244 |
msgid "Spam Count"
|
245 |
-
msgstr ""
|
246 |
|
247 |
#: shortcode.php:147
|
248 |
msgid "User Count"
|
249 |
-
msgstr ""
|
250 |
|
251 |
#: shortcode.php:148
|
252 |
msgid "Post Average"
|
@@ -262,7 +262,7 @@ msgstr ""
|
|
262 |
|
263 |
#: shortcode.php:162
|
264 |
msgid "Search Provider"
|
265 |
-
msgstr ""
|
266 |
|
267 |
#: shortcode.php:165
|
268 |
msgid "The search provider to get statistics on."
|
@@ -270,7 +270,7 @@ msgstr ""
|
|
270 |
|
271 |
#: shortcode.php:169
|
272 |
msgid "Number Format"
|
273 |
-
msgstr ""
|
274 |
|
275 |
#: shortcode.php:172
|
276 |
msgid "The format to display numbers in: i18n, english, none."
|
@@ -282,11 +282,11 @@ msgstr ""
|
|
282 |
|
283 |
#: shortcode.php:177
|
284 |
msgid "International"
|
285 |
-
msgstr ""
|
286 |
|
287 |
#: includes/log/exclusions.php:191 includes/log/hit-statistics.php:163
|
288 |
msgid "Hits Statistics Summary"
|
289 |
-
msgstr ""
|
290 |
|
291 |
#: includes/log/exclusions.php:201 includes/log/hit-statistics.php:174
|
292 |
msgid "Chart Total"
|
@@ -306,67 +306,67 @@ msgstr ""
|
|
306 |
|
307 |
#: includes/settings/tabs/wps-about.php:24
|
308 |
msgid "Fell like showing us how much you enjoy WP Statistics? Drop by our %s page and show us some love!"
|
309 |
-
msgstr ""
|
310 |
|
311 |
#: includes/settings/tabs/wps-about.php:24
|
312 |
msgid "donation"
|
313 |
-
msgstr ""
|
314 |
|
315 |
#: includes/log/log.php:57
|
316 |
msgid "Donate Now!"
|
317 |
-
msgstr ""
|
318 |
|
319 |
#: includes/log/log.php:57
|
320 |
msgid "Close"
|
321 |
-
msgstr ""
|
322 |
|
323 |
#: shortcode.php:135
|
324 |
msgid "Select the statistic you wish to display."
|
325 |
-
msgstr ""
|
326 |
|
327 |
#: shortcode.php:132
|
328 |
msgid "Statistic"
|
329 |
-
msgstr ""
|
330 |
|
331 |
#: shortcode.php:143
|
332 |
msgid "Post Count"
|
333 |
-
msgstr ""
|
334 |
|
335 |
#: shortcode.php:155
|
336 |
msgid "Time Frame"
|
337 |
-
msgstr ""
|
338 |
|
339 |
#: includes/functions/functions.php:982
|
340 |
msgid "to"
|
341 |
-
msgstr ""
|
342 |
|
343 |
#: includes/functions/functions.php:982 includes/log/top-visitors.php:29
|
344 |
msgid "Go"
|
345 |
-
msgstr ""
|
346 |
|
347 |
#: includes/log/top-pages.php:95
|
348 |
msgid "Rank #5"
|
349 |
-
msgstr ""
|
350 |
|
351 |
#: includes/log/top-pages.php:95
|
352 |
msgid "Rank #4"
|
353 |
-
msgstr ""
|
354 |
|
355 |
#: includes/log/top-pages.php:95
|
356 |
msgid "Rank #3"
|
357 |
-
msgstr ""
|
358 |
|
359 |
#: includes/log/top-pages.php:95
|
360 |
msgid "Rank #1"
|
361 |
-
msgstr ""
|
362 |
|
363 |
#: includes/log/top-pages.php:95
|
364 |
msgid "Rank #2"
|
365 |
-
msgstr ""
|
366 |
|
367 |
#: includes/optimization/tabs/wps-optimization-database.php:60
|
368 |
msgid "Visits Table"
|
369 |
-
msgstr ""
|
370 |
|
371 |
#: includes/optimization/tabs/wps-optimization-database.php:75
|
372 |
msgid "Older installs of WP Statistics allow for duplicate entries in the visits table in a corner case. Newer installs protect against this with a unique index on the table. To create the index on the older installs duplicate entries must be deleted first. Clicking \"Update Now\" will scan the vistits table, delete duplicate entries and add the index."
|
@@ -382,11 +382,11 @@ msgstr ""
|
|
382 |
|
383 |
#: includes/log/last-visitor.php:68
|
384 |
msgid "Filtered by"
|
385 |
-
msgstr ""
|
386 |
|
387 |
#: includes/functions/functions.php:975 includes/functions/functions.php:978
|
388 |
msgid "Range"
|
389 |
-
msgstr ""
|
390 |
|
391 |
#: includes/functions/functions.php:982 includes/log/top-visitors.php:29
|
392 |
msgid "MM/DD/YYYY"
|
@@ -398,11 +398,11 @@ msgstr ""
|
|
398 |
|
399 |
#: includes/settings/tabs/wps-general.php:336
|
400 |
msgid "Force English"
|
401 |
-
msgstr ""
|
402 |
|
403 |
#: includes/settings/tabs/wps-general.php:331
|
404 |
msgid "Languages"
|
405 |
-
msgstr ""
|
406 |
|
407 |
#: includes/settings/tabs/wps-exclusions.php:227
|
408 |
msgid "Note: this option will NOT handle url parameters (anything after the ?), only to the script name. Entries less than two characters will be ignored."
|
@@ -422,43 +422,43 @@ msgstr ""
|
|
422 |
|
423 |
#: includes/log/widgets/summary.php:66
|
424 |
msgid "Last 365 Days (Year)"
|
425 |
-
msgstr ""
|
426 |
|
427 |
#: includes/log/widgets/summary.php:60
|
428 |
msgid "Last 30 Days (Month)"
|
429 |
-
msgstr ""
|
430 |
|
431 |
#: includes/log/widgets/summary.php:54
|
432 |
msgid "Last 7 Days (Week)"
|
433 |
-
msgstr ""
|
434 |
|
435 |
#: includes/functions/functions.php:406
|
436 |
msgid "Yahoo!"
|
437 |
-
msgstr ""
|
438 |
|
439 |
#: includes/functions/functions.php:407
|
440 |
msgid "Yandex"
|
441 |
-
msgstr ""
|
442 |
|
443 |
#: includes/functions/functions.php:403
|
444 |
msgid "clearch.org"
|
445 |
-
msgstr ""
|
446 |
|
447 |
#: includes/functions/functions.php:404
|
448 |
msgid "DuckDuckGo"
|
449 |
-
msgstr ""
|
450 |
|
451 |
#: includes/functions/functions.php:402
|
452 |
msgid "Bing"
|
453 |
-
msgstr ""
|
454 |
|
455 |
#: includes/functions/functions.php:401
|
456 |
msgid "Baidu"
|
457 |
-
msgstr ""
|
458 |
|
459 |
#: editor.php:69
|
460 |
msgid "Hits in the last 20 days"
|
461 |
-
msgstr ""
|
462 |
|
463 |
#: includes/log/exclusions.php:24
|
464 |
msgid "Feeds"
|
@@ -470,11 +470,11 @@ msgstr ""
|
|
470 |
|
471 |
#: includes/log/exclusions.php:24
|
472 |
msgid "Login Page"
|
473 |
-
msgstr ""
|
474 |
|
475 |
#: includes/log/exclusions.php:24
|
476 |
msgid "Admin Page"
|
477 |
-
msgstr ""
|
478 |
|
479 |
#: includes/log/exclusions.php:24
|
480 |
msgid "Self Referral"
|
@@ -482,15 +482,15 @@ msgstr ""
|
|
482 |
|
483 |
#: includes/log/exclusions.php:24
|
484 |
msgid "IP Match"
|
485 |
-
msgstr ""
|
486 |
|
487 |
#: includes/log/exclusions.php:24
|
488 |
msgid "Robot"
|
489 |
-
msgstr ""
|
490 |
|
491 |
#: includes/log/online.php:100
|
492 |
msgid "Currently there are no users online in the site."
|
493 |
-
msgstr ""
|
494 |
|
495 |
#: includes/log/exclusions.php:24
|
496 |
msgid "Robot Threshold"
|
@@ -524,15 +524,15 @@ msgstr "Mengecek user online setiap"
|
|
524 |
|
525 |
#: includes/settings/tabs/wps-general.php:104
|
526 |
msgid "Second"
|
527 |
-
msgstr "
|
528 |
|
529 |
#: includes/settings/tabs/wps-general.php:105
|
530 |
msgid "Time for the check accurate online user in the site. Now: %s Second"
|
531 |
-
msgstr "Waktu untuk
|
532 |
|
533 |
#: includes/settings/tabs/wps-general.php:111
|
534 |
msgid "Record all user"
|
535 |
-
msgstr ""
|
536 |
|
537 |
#: includes/settings/tabs/wps-general.php:117
|
538 |
msgid "Ignores the exclusion settings and records all users that are online (including self referrals and robots). Should only be used for troubleshooting."
|
@@ -566,11 +566,11 @@ msgstr "Melacak semua halaman"
|
|
566 |
|
567 |
#: includes/settings/tabs/wps-general.php:209
|
568 |
msgid "Strip parameters from URI"
|
569 |
-
msgstr ""
|
570 |
|
571 |
#: includes/settings/tabs/wps-general.php:215
|
572 |
msgid "This will remove anything after the ? in a URL."
|
573 |
-
msgstr ""
|
574 |
|
575 |
#: includes/settings/tabs/wps-general.php:223
|
576 |
msgid "Disable hits column in post/pages list"
|
@@ -578,11 +578,11 @@ msgstr "Menonaktifkan hits kolom di daftar posting/halaman"
|
|
578 |
|
579 |
#: includes/settings/tabs/wps-general.php:234
|
580 |
msgid "Miscellaneous"
|
581 |
-
msgstr "
|
582 |
|
583 |
#: includes/settings/tabs/wps-general.php:239
|
584 |
msgid "Show stats in menu bar"
|
585 |
-
msgstr "
|
586 |
|
587 |
#: includes/settings/tabs/wps-general.php:244
|
588 |
msgid "No"
|
@@ -598,7 +598,7 @@ msgstr "Menampilkan statistik pada halaman admin"
|
|
598 |
|
599 |
#: includes/settings/tabs/wps-general.php:253
|
600 |
msgid "Hide admin notices about non active features"
|
601 |
-
msgstr "
|
602 |
|
603 |
#: includes/settings/tabs/wps-general.php:259
|
604 |
msgid "By default WP Statistics displays an alert if any of the core features are disabled on every admin page, this option will disable these notices."
|
@@ -606,7 +606,7 @@ msgstr "Secara default WP Statistics menampilkan peringatan jika salah satu fitu
|
|
606 |
|
607 |
#: includes/settings/tabs/wps-general.php:265
|
608 |
msgid "Delete the manual"
|
609 |
-
msgstr "
|
610 |
|
611 |
#: includes/settings/tabs/wps-general.php:271
|
612 |
msgid "By default WP Statistics stores the admin manual in the plugin directory (~5 meg), if this option is enabled it will be deleted now and during upgrades in the future."
|
@@ -618,7 +618,7 @@ msgstr ""
|
|
618 |
|
619 |
#: includes/settings/tabs/wps-general.php:293
|
620 |
msgid "Disabling all search engines is not allowed, doing so will result in all search engines being active."
|
621 |
-
msgstr "Menonaktifkan semua mesin pencari tidak diperbolehkan
|
622 |
|
623 |
#: includes/settings/tabs/wps-general.php:308
|
624 |
msgid "disable"
|
2 |
# This file is distributed under the same license as the WP Statistics package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"PO-Revision-Date: 2015-09-17 08:16:31+0000\n"
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
13 |
#: includes/settings/tabs/wps-maintenance.php:35
|
14 |
#: includes/settings/tabs/wps-maintenance.php:63
|
15 |
msgid "Enabled"
|
16 |
+
msgstr "Diaktifkan"
|
17 |
|
18 |
#: includes/settings/tabs/wps-maintenance.php:30
|
19 |
msgid "Purge Old Data Daily"
|
20 |
+
msgstr "Hapus data lama per hari"
|
21 |
|
22 |
#: includes/settings/tabs/wps-maintenance.php:41
|
23 |
msgid "A WP Cron job will be run daily to purge any data older than a set number of days."
|
24 |
+
msgstr "WP Cron Job akan dijalankan setiap hari untuk membersihkan data lebih tua dari jumlah hari yang ditetapkan."
|
25 |
|
26 |
#: includes/settings/tabs/wps-maintenance.php:47
|
27 |
msgid "Purge data older than"
|
28 |
+
msgstr "Hapus data lebih lama dari"
|
29 |
|
30 |
#: includes/settings/tabs/wps-maintenance.php:58
|
31 |
msgid "Purge High Hit Count Visitors Daily"
|
69 |
|
70 |
#: wp-statistics.php:170
|
71 |
msgid "Database updates are required, please go to %s and update the following: %s"
|
72 |
+
msgstr "Perbarui database yang diperlukan, kunjungi %s dan perbarui:%s"
|
73 |
|
74 |
#: wp-statistics.php:161
|
75 |
msgid "countries database index"
|
76 |
+
msgstr "indeks database negara"
|
77 |
|
78 |
#: wp-statistics.php:154
|
79 |
msgid "search table"
|
80 |
+
msgstr "tabel pencarian"
|
81 |
|
82 |
#: wp-statistics.php:148 wp-statistics.php:170
|
83 |
msgid "settings page"
|
84 |
+
msgstr "halaman pengaturan"
|
85 |
|
86 |
#: wp-statistics.php:148 wp-statistics.php:170
|
87 |
msgid ","
|
105 |
|
106 |
#: includes/optimization/wps-optimization.php:196
|
107 |
msgid "Search table conversion complete, %d rows added."
|
108 |
+
msgstr "Pencarian konversi tabel selesai,%d baris ditambahkan."
|
109 |
|
110 |
#: includes/optimization/tabs/wps-optimization-database.php:113
|
111 |
msgid "Older installs of WP Statistics store details of searches in the visitors table which can become a performance issue on large datasets. A new table has been created to hold this information in a more scalable fashion."
|
112 |
+
msgstr "Instalasi WP Statistics versi lama menyimpan hasil pencarian di tabel pengunjung an bisa mengakibatkan masalah performa pada data berukuran besar. Sebuah tabel baru telah dibuat untuk menyimpan informasi ini secara lebih rapi."
|
113 |
|
114 |
#: includes/optimization/tabs/wps-optimization-database.php:94
|
115 |
msgid "Search Table"
|
116 |
+
msgstr "Cari Tabel"
|
117 |
|
118 |
#: includes/optimization/tabs/wps-optimization-database.php:99
|
119 |
msgid "Convert"
|
120 |
+
msgstr "Konversi"
|
121 |
|
122 |
#: includes/optimization/tabs/wps-optimization-database.php:106
|
123 |
msgid "Convert Now!"
|
124 |
+
msgstr "Lakukan konversi sekarang!"
|
125 |
|
126 |
#: includes/optimization/tabs/wps-optimization-database.php:107
|
127 |
msgid "Older installs of WP Statistics store details of searches in the visitors table which can become a performance issue on large datasets. A new table has been created to hold this information in a more scalable fashion, however the old data must first be converted to the new format before it can be used."
|
177 |
|
178 |
#: includes/log/top-visitors.php:26
|
179 |
msgid "Date"
|
180 |
+
msgstr "Tanggal"
|
181 |
|
182 |
#: includes/settings/tabs/wps-exclusions.php:151
|
183 |
msgid "Treat any visitor with corrupt browser info (missing IP address or empty user agent string) as a robot."
|
222 |
|
223 |
#: includes/functions/purge-hits.php:25
|
224 |
msgid "%s records purged successfully."
|
225 |
+
msgstr "%s catatan berhasil dibersihkan."
|
226 |
|
227 |
#: ajax.php:178 includes/functions/purge-hits.php:32
|
228 |
msgid "Number of hits must be greater than or equal to 10!"
|
229 |
+
msgstr "Jumlah kunjungan harus lebih besar dari atau sama dengan 10!"
|
230 |
|
231 |
#: shortcode.php:141
|
232 |
msgid "Page Visits"
|
233 |
+
msgstr "Jumlah Kunjungan Halaman"
|
234 |
|
235 |
#: shortcode.php:144
|
236 |
msgid "Page Count"
|
237 |
+
msgstr "Jumlah Halaman"
|
238 |
|
239 |
#: shortcode.php:145
|
240 |
msgid "Comment Count"
|
241 |
+
msgstr "Jumlah Komentar"
|
242 |
|
243 |
#: shortcode.php:146
|
244 |
msgid "Spam Count"
|
245 |
+
msgstr "Jumlah Spam"
|
246 |
|
247 |
#: shortcode.php:147
|
248 |
msgid "User Count"
|
249 |
+
msgstr "Jumlah Pengguna"
|
250 |
|
251 |
#: shortcode.php:148
|
252 |
msgid "Post Average"
|
262 |
|
263 |
#: shortcode.php:162
|
264 |
msgid "Search Provider"
|
265 |
+
msgstr "Penyedia Layanan Pencarian"
|
266 |
|
267 |
#: shortcode.php:165
|
268 |
msgid "The search provider to get statistics on."
|
270 |
|
271 |
#: shortcode.php:169
|
272 |
msgid "Number Format"
|
273 |
+
msgstr "Format Angka"
|
274 |
|
275 |
#: shortcode.php:172
|
276 |
msgid "The format to display numbers in: i18n, english, none."
|
282 |
|
283 |
#: shortcode.php:177
|
284 |
msgid "International"
|
285 |
+
msgstr "Internasional"
|
286 |
|
287 |
#: includes/log/exclusions.php:191 includes/log/hit-statistics.php:163
|
288 |
msgid "Hits Statistics Summary"
|
289 |
+
msgstr "Ringkasan Statistik Hits"
|
290 |
|
291 |
#: includes/log/exclusions.php:201 includes/log/hit-statistics.php:174
|
292 |
msgid "Chart Total"
|
306 |
|
307 |
#: includes/settings/tabs/wps-about.php:24
|
308 |
msgid "Fell like showing us how much you enjoy WP Statistics? Drop by our %s page and show us some love!"
|
309 |
+
msgstr "Ingin menunjukkan kepada kami betapa Anda menikmati WP Statistics? Mampir halaman %s kami dan tunjukkan cinta Anda!"
|
310 |
|
311 |
#: includes/settings/tabs/wps-about.php:24
|
312 |
msgid "donation"
|
313 |
+
msgstr "donasi"
|
314 |
|
315 |
#: includes/log/log.php:57
|
316 |
msgid "Donate Now!"
|
317 |
+
msgstr "Kirim Donasi Sekarang!"
|
318 |
|
319 |
#: includes/log/log.php:57
|
320 |
msgid "Close"
|
321 |
+
msgstr "Tutup"
|
322 |
|
323 |
#: shortcode.php:135
|
324 |
msgid "Select the statistic you wish to display."
|
325 |
+
msgstr "Pilih statistik yang ingin ditampilkan."
|
326 |
|
327 |
#: shortcode.php:132
|
328 |
msgid "Statistic"
|
329 |
+
msgstr "Statistik"
|
330 |
|
331 |
#: shortcode.php:143
|
332 |
msgid "Post Count"
|
333 |
+
msgstr "Jumlah Posting"
|
334 |
|
335 |
#: shortcode.php:155
|
336 |
msgid "Time Frame"
|
337 |
+
msgstr "Rentang Waktu"
|
338 |
|
339 |
#: includes/functions/functions.php:982
|
340 |
msgid "to"
|
341 |
+
msgstr "sampai"
|
342 |
|
343 |
#: includes/functions/functions.php:982 includes/log/top-visitors.php:29
|
344 |
msgid "Go"
|
345 |
+
msgstr "Mulai"
|
346 |
|
347 |
#: includes/log/top-pages.php:95
|
348 |
msgid "Rank #5"
|
349 |
+
msgstr "Peringkat 5"
|
350 |
|
351 |
#: includes/log/top-pages.php:95
|
352 |
msgid "Rank #4"
|
353 |
+
msgstr "Peringkat 4"
|
354 |
|
355 |
#: includes/log/top-pages.php:95
|
356 |
msgid "Rank #3"
|
357 |
+
msgstr "Peringkat 3"
|
358 |
|
359 |
#: includes/log/top-pages.php:95
|
360 |
msgid "Rank #1"
|
361 |
+
msgstr "Peringkat 1"
|
362 |
|
363 |
#: includes/log/top-pages.php:95
|
364 |
msgid "Rank #2"
|
365 |
+
msgstr "Peringkat 2"
|
366 |
|
367 |
#: includes/optimization/tabs/wps-optimization-database.php:60
|
368 |
msgid "Visits Table"
|
369 |
+
msgstr "Tabel Kunjungan"
|
370 |
|
371 |
#: includes/optimization/tabs/wps-optimization-database.php:75
|
372 |
msgid "Older installs of WP Statistics allow for duplicate entries in the visits table in a corner case. Newer installs protect against this with a unique index on the table. To create the index on the older installs duplicate entries must be deleted first. Clicking \"Update Now\" will scan the vistits table, delete duplicate entries and add the index."
|
382 |
|
383 |
#: includes/log/last-visitor.php:68
|
384 |
msgid "Filtered by"
|
385 |
+
msgstr "Disaring berdasarkan"
|
386 |
|
387 |
#: includes/functions/functions.php:975 includes/functions/functions.php:978
|
388 |
msgid "Range"
|
389 |
+
msgstr "Rentang"
|
390 |
|
391 |
#: includes/functions/functions.php:982 includes/log/top-visitors.php:29
|
392 |
msgid "MM/DD/YYYY"
|
398 |
|
399 |
#: includes/settings/tabs/wps-general.php:336
|
400 |
msgid "Force English"
|
401 |
+
msgstr "Gunakan bahasa Inggris"
|
402 |
|
403 |
#: includes/settings/tabs/wps-general.php:331
|
404 |
msgid "Languages"
|
405 |
+
msgstr "Bahasa"
|
406 |
|
407 |
#: includes/settings/tabs/wps-exclusions.php:227
|
408 |
msgid "Note: this option will NOT handle url parameters (anything after the ?), only to the script name. Entries less than two characters will be ignored."
|
422 |
|
423 |
#: includes/log/widgets/summary.php:66
|
424 |
msgid "Last 365 Days (Year)"
|
425 |
+
msgstr "365 Hari Terakhir (Tahun)"
|
426 |
|
427 |
#: includes/log/widgets/summary.php:60
|
428 |
msgid "Last 30 Days (Month)"
|
429 |
+
msgstr "30 Hari Terakhir (Bulan)"
|
430 |
|
431 |
#: includes/log/widgets/summary.php:54
|
432 |
msgid "Last 7 Days (Week)"
|
433 |
+
msgstr "7 Hari Terakhir (Minggu)"
|
434 |
|
435 |
#: includes/functions/functions.php:406
|
436 |
msgid "Yahoo!"
|
437 |
+
msgstr "Yahoo!"
|
438 |
|
439 |
#: includes/functions/functions.php:407
|
440 |
msgid "Yandex"
|
441 |
+
msgstr "Yandex"
|
442 |
|
443 |
#: includes/functions/functions.php:403
|
444 |
msgid "clearch.org"
|
445 |
+
msgstr "clearch.org"
|
446 |
|
447 |
#: includes/functions/functions.php:404
|
448 |
msgid "DuckDuckGo"
|
449 |
+
msgstr "DuckDuckGo"
|
450 |
|
451 |
#: includes/functions/functions.php:402
|
452 |
msgid "Bing"
|
453 |
+
msgstr "Bing"
|
454 |
|
455 |
#: includes/functions/functions.php:401
|
456 |
msgid "Baidu"
|
457 |
+
msgstr "Baidu"
|
458 |
|
459 |
#: editor.php:69
|
460 |
msgid "Hits in the last 20 days"
|
461 |
+
msgstr "Hits dalam 20 hari terakhir"
|
462 |
|
463 |
#: includes/log/exclusions.php:24
|
464 |
msgid "Feeds"
|
470 |
|
471 |
#: includes/log/exclusions.php:24
|
472 |
msgid "Login Page"
|
473 |
+
msgstr "Halaman Login"
|
474 |
|
475 |
#: includes/log/exclusions.php:24
|
476 |
msgid "Admin Page"
|
477 |
+
msgstr "Halaman Admin"
|
478 |
|
479 |
#: includes/log/exclusions.php:24
|
480 |
msgid "Self Referral"
|
482 |
|
483 |
#: includes/log/exclusions.php:24
|
484 |
msgid "IP Match"
|
485 |
+
msgstr "Pencocokan IP"
|
486 |
|
487 |
#: includes/log/exclusions.php:24
|
488 |
msgid "Robot"
|
489 |
+
msgstr "Robot"
|
490 |
|
491 |
#: includes/log/online.php:100
|
492 |
msgid "Currently there are no users online in the site."
|
493 |
+
msgstr "Saat ini tidak ada pengguna yang online."
|
494 |
|
495 |
#: includes/log/exclusions.php:24
|
496 |
msgid "Robot Threshold"
|
524 |
|
525 |
#: includes/settings/tabs/wps-general.php:104
|
526 |
msgid "Second"
|
527 |
+
msgstr "Detik"
|
528 |
|
529 |
#: includes/settings/tabs/wps-general.php:105
|
530 |
msgid "Time for the check accurate online user in the site. Now: %s Second"
|
531 |
+
msgstr "Waktu untuk cek akurat pengguna online di situs. Sekarang: %s detik"
|
532 |
|
533 |
#: includes/settings/tabs/wps-general.php:111
|
534 |
msgid "Record all user"
|
535 |
+
msgstr "Rekam semua pengguna"
|
536 |
|
537 |
#: includes/settings/tabs/wps-general.php:117
|
538 |
msgid "Ignores the exclusion settings and records all users that are online (including self referrals and robots). Should only be used for troubleshooting."
|
566 |
|
567 |
#: includes/settings/tabs/wps-general.php:209
|
568 |
msgid "Strip parameters from URI"
|
569 |
+
msgstr "Buang parameter dari URI"
|
570 |
|
571 |
#: includes/settings/tabs/wps-general.php:215
|
572 |
msgid "This will remove anything after the ? in a URL."
|
573 |
+
msgstr "Anda akan menghapus semua setelah ? dalam URL."
|
574 |
|
575 |
#: includes/settings/tabs/wps-general.php:223
|
576 |
msgid "Disable hits column in post/pages list"
|
578 |
|
579 |
#: includes/settings/tabs/wps-general.php:234
|
580 |
msgid "Miscellaneous"
|
581 |
+
msgstr "Lain-lain"
|
582 |
|
583 |
#: includes/settings/tabs/wps-general.php:239
|
584 |
msgid "Show stats in menu bar"
|
585 |
+
msgstr "Tampilkan statistik pada menu bar"
|
586 |
|
587 |
#: includes/settings/tabs/wps-general.php:244
|
588 |
msgid "No"
|
598 |
|
599 |
#: includes/settings/tabs/wps-general.php:253
|
600 |
msgid "Hide admin notices about non active features"
|
601 |
+
msgstr "Sembunyikan pemberitahuan untuk admin tentang fitur yang tidak aktif"
|
602 |
|
603 |
#: includes/settings/tabs/wps-general.php:259
|
604 |
msgid "By default WP Statistics displays an alert if any of the core features are disabled on every admin page, this option will disable these notices."
|
606 |
|
607 |
#: includes/settings/tabs/wps-general.php:265
|
608 |
msgid "Delete the manual"
|
609 |
+
msgstr "Hapus manual"
|
610 |
|
611 |
#: includes/settings/tabs/wps-general.php:271
|
612 |
msgid "By default WP Statistics stores the admin manual in the plugin directory (~5 meg), if this option is enabled it will be deleted now and during upgrades in the future."
|
618 |
|
619 |
#: includes/settings/tabs/wps-general.php:293
|
620 |
msgid "Disabling all search engines is not allowed, doing so will result in all search engines being active."
|
621 |
+
msgstr "Menonaktifkan semua mesin pencari tidak diperbolehkan. Apabila dilakukan, semua mesin pencari akan aktif."
|
622 |
|
623 |
#: includes/settings/tabs/wps-general.php:308
|
624 |
msgid "disable"
|
languages/wp_statistics-ru_RU.mo
CHANGED
Binary file
|
languages/wp_statistics-ru_RU.po
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
# This file is distributed under the same license as the WP Statistics package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"PO-Revision-Date: 2015-09-
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -169,7 +169,7 @@ msgstr ""
|
|
169 |
|
170 |
#: includes/settings/tabs/wps-exclusions.php:148
|
171 |
msgid "Treat corrupt browser info as a bot"
|
172 |
-
msgstr ""
|
173 |
|
174 |
#: includes/log/exclusions.php:24
|
175 |
msgid "404 Pages"
|
@@ -181,15 +181,15 @@ msgstr "Дата"
|
|
181 |
|
182 |
#: includes/settings/tabs/wps-exclusions.php:151
|
183 |
msgid "Treat any visitor with corrupt browser info (missing IP address or empty user agent string) as a robot."
|
184 |
-
msgstr ""
|
185 |
|
186 |
#: includes/settings/tabs/wps-exclusions.php:215
|
187 |
msgid "Excluded 404 pages"
|
188 |
-
msgstr ""
|
189 |
|
190 |
#: includes/settings/tabs/wps-exclusions.php:218
|
191 |
msgid "Exclude any URL that returns a \"404 - Not Found\" message."
|
192 |
-
msgstr ""
|
193 |
|
194 |
#: wps-updates.php:29
|
195 |
msgid "Error creating GeoIP database directory, make sure your web server has permissions to create directories in : %s"
|
@@ -302,15 +302,15 @@ msgstr "Задумывались ли вы о пожертвовании в по
|
|
302 |
|
303 |
#: includes/settings/tabs/wps-about.php:20 wp-statistics.php:392
|
304 |
msgid "Donate"
|
305 |
-
msgstr ""
|
306 |
|
307 |
#: includes/settings/tabs/wps-about.php:24
|
308 |
msgid "Fell like showing us how much you enjoy WP Statistics? Drop by our %s page and show us some love!"
|
309 |
-
msgstr ""
|
310 |
|
311 |
#: includes/settings/tabs/wps-about.php:24
|
312 |
msgid "donation"
|
313 |
-
msgstr ""
|
314 |
|
315 |
#: includes/log/log.php:57
|
316 |
msgid "Donate Now!"
|
@@ -406,15 +406,15 @@ msgstr ""
|
|
406 |
|
407 |
#: includes/settings/tabs/wps-exclusions.php:227
|
408 |
msgid "Note: this option will NOT handle url parameters (anything after the ?), only to the script name. Entries less than two characters will be ignored."
|
409 |
-
msgstr ""
|
410 |
|
411 |
#: includes/settings/tabs/wps-exclusions.php:225
|
412 |
msgid "A list of local urls (ie. /wordpress/about, one per line) to exclude from statistics collection."
|
413 |
-
msgstr ""
|
414 |
|
415 |
#: includes/settings/tabs/wps-exclusions.php:222
|
416 |
msgid "Excluded URLs list"
|
417 |
-
msgstr ""
|
418 |
|
419 |
#: includes/log/exclusions.php:24
|
420 |
msgid "Excluded URL"
|
@@ -678,39 +678,41 @@ msgstr "Этот параметр также скачать базы данны
|
|
678 |
|
679 |
#: includes/settings/tabs/wps-externals.php:104
|
680 |
msgid "Populate missing GeoIP after update of GeoIP DB"
|
681 |
-
msgstr "
|
|
|
|
|
682 |
|
683 |
#: includes/settings/tabs/wps-externals.php:110
|
684 |
msgid "Update any missing GeoIP data after downloading a new database."
|
685 |
-
msgstr "
|
686 |
|
687 |
#: includes/settings/tabs/wps-externals.php:116
|
688 |
msgid "Country code for private IP addresses"
|
689 |
-
msgstr ""
|
690 |
|
691 |
#: includes/settings/tabs/wps-externals.php:121
|
692 |
msgid "The international standard two letter country code (ie. US = United States, CA = Canada, etc.) for private (non-routable) IP addresses (ie. 10.0.0.1, 192.158.1.1, 127.0.0.1, etc.). Use \"000\" (three zeros) to use \"Unknown\" as the country code."
|
693 |
-
msgstr ""
|
694 |
|
695 |
#: includes/settings/tabs/wps-externals.php:132
|
696 |
msgid "GeoIP collection is disabled due to the following reasons:"
|
697 |
-
msgstr "
|
698 |
|
699 |
#: includes/settings/tabs/wps-externals.php:135
|
700 |
msgid "GeoIP collection requires PHP %s or above, it is currently disabled due to the installed PHP version being "
|
701 |
-
msgstr "GeoIP
|
702 |
|
703 |
#: includes/settings/tabs/wps-externals.php:140
|
704 |
msgid "GeoIP collection requires the cURL PHP extension and it is not loaded on your version of PHP!"
|
705 |
-
msgstr "GeoIP
|
706 |
|
707 |
#: includes/settings/tabs/wps-externals.php:146
|
708 |
msgid "GeoIP collection requires the BC Math PHP extension and it is not loaded on your version of PHP!"
|
709 |
-
msgstr "GeoIP
|
710 |
|
711 |
#: includes/settings/tabs/wps-externals.php:152
|
712 |
msgid "PHP safe mode detected! GeoIP collection is not supported with PHP's safe mode enabled!"
|
713 |
-
msgstr "
|
714 |
|
715 |
#: includes/settings/tabs/wps-maintenance.php:20
|
716 |
msgid "This will permanently delete data from the database each day, are you sure you want to enable this option?"
|
@@ -1056,7 +1058,7 @@ msgstr ""
|
|
1056 |
#: includes/settings/tabs/wps-overview-display.php:388
|
1057 |
#: includes/settings/tabs/wps-removal.php:42
|
1058 |
msgid "Update"
|
1059 |
-
msgstr "
|
1060 |
|
1061 |
#: schedule.php:10
|
1062 |
msgid "Once Weekly"
|
@@ -2091,7 +2093,7 @@ msgstr "Безопасный режим PHP"
|
|
2091 |
|
2092 |
#: includes/optimization/tabs/wps-optimization-resources.php:163
|
2093 |
msgid "Is PHP Safe Mode active. The GeoIP code is not supported in Safe Mode."
|
2094 |
-
msgstr "Активен ли
|
2095 |
|
2096 |
#: includes/optimization/tabs/wps-optimization-resources.php:169
|
2097 |
msgid "jQuery Version"
|
@@ -2213,15 +2215,15 @@ msgstr "Платформа (операционная система) клиен
|
|
2213 |
|
2214 |
#: includes/optimization/tabs/wps-optimization-updates.php:4
|
2215 |
msgid "This will replace all IP addresses in the database with hash values and cannot be undo, are you sure?"
|
2216 |
-
msgstr "Это заменит все IP-адреса в базе данных
|
2217 |
|
2218 |
#: includes/optimization/tabs/wps-optimization-updates.php:16
|
2219 |
msgid "GeoIP Options"
|
2220 |
-
msgstr "
|
2221 |
|
2222 |
#: includes/optimization/tabs/wps-optimization-updates.php:26
|
2223 |
msgid "Updates any unknown location data in the database, this may take a while"
|
2224 |
-
msgstr "Обновляет все
|
2225 |
|
2226 |
#: includes/optimization/tabs/wps-optimization-updates.php:31
|
2227 |
#: includes/settings/tabs/wps-general.php:66
|
@@ -2231,23 +2233,23 @@ msgstr "IP-адреса"
|
|
2231 |
#: includes/optimization/tabs/wps-optimization-updates.php:36
|
2232 |
#: includes/settings/tabs/wps-general.php:71
|
2233 |
msgid "Hash IP Addresses"
|
2234 |
-
msgstr "
|
2235 |
|
2236 |
#: includes/optimization/tabs/wps-optimization-updates.php:41
|
2237 |
msgid "Replace IP addresses in the database with hash values, you will not be able to recover the IP addresses in the future to populate location information afterwards and this may take a while"
|
2238 |
-
msgstr "
|
2239 |
|
2240 |
#: includes/optimization/wps-optimization.php:43
|
2241 |
msgid "IP Addresses replaced with hash values."
|
2242 |
-
msgstr "IP-адреса заменяются
|
2243 |
|
2244 |
#: includes/optimization/wps-optimization.php:51
|
2245 |
msgid "Install routine complete."
|
2246 |
-
msgstr "
|
2247 |
|
2248 |
#: includes/optimization/wps-optimization.php:234
|
2249 |
msgid "Resources/Information"
|
2250 |
-
msgstr "
|
2251 |
|
2252 |
#: includes/optimization/wps-optimization.php:236
|
2253 |
msgid "Purging"
|
@@ -2263,7 +2265,7 @@ msgstr "Обновления"
|
|
2263 |
|
2264 |
#: includes/optimization/wps-optimization.php:239
|
2265 |
msgid "Historical"
|
2266 |
-
msgstr ""
|
2267 |
|
2268 |
#: includes/settings/tabs/wps-about.php:8
|
2269 |
msgid "WP Statistics V%s"
|
@@ -2271,47 +2273,47 @@ msgstr "WP Statistics V %s"
|
|
2271 |
|
2272 |
#: includes/settings/tabs/wps-about.php:28
|
2273 |
msgid "Visit Us Online"
|
2274 |
-
msgstr "Посетите
|
2275 |
|
2276 |
#: includes/settings/tabs/wps-about.php:32
|
2277 |
msgid "Come visit our great new %s and keep up to date on the latest news about WP Statistics."
|
2278 |
-
msgstr "
|
2279 |
|
2280 |
#: includes/settings/tabs/wps-about.php:32
|
2281 |
msgid "website"
|
2282 |
-
msgstr "
|
2283 |
|
2284 |
#: includes/settings/tabs/wps-about.php:36
|
2285 |
msgid "Rate and Review at WordPress.org"
|
2286 |
-
msgstr "Оценить и
|
2287 |
|
2288 |
#: includes/settings/tabs/wps-about.php:40
|
2289 |
msgid "Thanks for installing WP Statistics, we encourage you to submit a "
|
2290 |
-
msgstr "Спасибо за установку WP Statistics,
|
2291 |
|
2292 |
#: includes/settings/tabs/wps-about.php:40
|
2293 |
msgid "rating and review"
|
2294 |
-
msgstr "
|
2295 |
|
2296 |
#: includes/settings/tabs/wps-about.php:40
|
2297 |
msgid "over at WordPress.org. Your feedback is greatly appreciated!"
|
2298 |
-
msgstr "
|
2299 |
|
2300 |
#: includes/settings/tabs/wps-about.php:44
|
2301 |
msgid "Translations"
|
2302 |
-
msgstr "
|
2303 |
|
2304 |
#: includes/settings/tabs/wps-about.php:48
|
2305 |
msgid "WP Statistics supports internationalization and we encourage our users to submit translations, please visit our %s to see the current status and %s if you would like to help."
|
2306 |
-
msgstr "WP
|
2307 |
|
2308 |
#: includes/settings/tabs/wps-about.php:48
|
2309 |
msgid "translation collaboration site"
|
2310 |
-
msgstr "
|
2311 |
|
2312 |
#: includes/settings/tabs/wps-about.php:48
|
2313 |
msgid "drop us a line"
|
2314 |
-
msgstr "
|
2315 |
|
2316 |
#: includes/settings/tabs/wps-about.php:52
|
2317 |
msgid "Support"
|
@@ -2319,12 +2321,12 @@ msgstr "Поддержка"
|
|
2319 |
|
2320 |
#: includes/settings/tabs/wps-about.php:57
|
2321 |
msgid "We're sorry you're having problem with WP Statistics and we're happy to help out. Here are a few things to do before contacting us:"
|
2322 |
-
msgstr "Нам очень
|
2323 |
|
2324 |
#: includes/settings/tabs/wps-about.php:60
|
2325 |
#: includes/settings/tabs/wps-about.php:61
|
2326 |
msgid "Have you read the %s?"
|
2327 |
-
msgstr "Вы читали
|
2328 |
|
2329 |
#: includes/settings/tabs/wps-about.php:60
|
2330 |
msgid "FAQs"
|
@@ -2332,71 +2334,71 @@ msgstr "Часто задаваемые вопросы"
|
|
2332 |
|
2333 |
#: includes/settings/tabs/wps-about.php:61
|
2334 |
msgid "manual"
|
2335 |
-
msgstr "
|
2336 |
|
2337 |
#: includes/settings/tabs/wps-about.php:62
|
2338 |
msgid "Have you search the %s for a similar issue?"
|
2339 |
-
msgstr "
|
2340 |
|
2341 |
#: includes/settings/tabs/wps-about.php:62
|
2342 |
msgid "support forum"
|
2343 |
-
msgstr "
|
2344 |
|
2345 |
#: includes/settings/tabs/wps-about.php:63
|
2346 |
msgid "Have you search the Internet for any error messages you are receiving?"
|
2347 |
-
msgstr "
|
2348 |
|
2349 |
#: includes/settings/tabs/wps-about.php:64
|
2350 |
msgid "Make sure you have access to your PHP error logs."
|
2351 |
-
msgstr ""
|
2352 |
|
2353 |
#: includes/settings/tabs/wps-about.php:67
|
2354 |
msgid "And a few things to double-check:"
|
2355 |
-
msgstr "И
|
2356 |
|
2357 |
#: includes/settings/tabs/wps-about.php:70
|
2358 |
msgid "How's your memory_limit in php.ini?"
|
2359 |
-
msgstr "
|
2360 |
|
2361 |
#: includes/settings/tabs/wps-about.php:71
|
2362 |
msgid "Have you tried disabling any other plugins you may have installed?"
|
2363 |
-
msgstr "Вы пробовали отключить другие плагины, которые
|
2364 |
|
2365 |
#: includes/settings/tabs/wps-about.php:72
|
2366 |
msgid "Have you tried using the default WordPress theme?"
|
2367 |
-
msgstr "
|
2368 |
|
2369 |
#: includes/settings/tabs/wps-about.php:73
|
2370 |
msgid "Have you double checked the plugin settings?"
|
2371 |
-
msgstr "
|
2372 |
|
2373 |
#: includes/settings/tabs/wps-about.php:74
|
2374 |
msgid "Do you have all the required PHP extensions installed?"
|
2375 |
-
msgstr "У вас
|
2376 |
|
2377 |
#: includes/settings/tabs/wps-about.php:75
|
2378 |
msgid "Are you getting a blank or incomplete page displayed in your browser? Did you view the source for the page and check for any fatal errors?"
|
2379 |
-
msgstr "Вы получаете
|
2380 |
|
2381 |
#: includes/settings/tabs/wps-about.php:76
|
2382 |
msgid "Have you checked your PHP and web server error logs?"
|
2383 |
-
msgstr "Вы проверили
|
2384 |
|
2385 |
#: includes/settings/tabs/wps-about.php:79
|
2386 |
msgid "Still not having any luck?"
|
2387 |
-
msgstr "До сих пор не
|
2388 |
|
2389 |
#: includes/settings/tabs/wps-about.php:79
|
2390 |
msgid "Then please open a new thread on the %s and we'll respond as soon as possible."
|
2391 |
-
msgstr "
|
2392 |
|
2393 |
#: includes/settings/tabs/wps-about.php:79
|
2394 |
msgid "WordPress.org support forum"
|
2395 |
-
msgstr "
|
2396 |
|
2397 |
#: includes/settings/tabs/wps-about.php:83
|
2398 |
msgid "Alternatively %s support is available as well."
|
2399 |
-
msgstr "
|
2400 |
|
2401 |
#: includes/settings/tabs/wps-about.php:83
|
2402 |
msgid "Farsi"
|
@@ -2404,11 +2406,11 @@ msgstr "Фарси"
|
|
2404 |
|
2405 |
#: includes/settings/tabs/wps-exclusions.php:21
|
2406 |
msgid "WP Statistics Honey Pot Page"
|
2407 |
-
msgstr ""
|
2408 |
|
2409 |
#: includes/settings/tabs/wps-exclusions.php:22
|
2410 |
msgid "This is the honey pot for WP Statistics to use, do not delete."
|
2411 |
-
msgstr ""
|
2412 |
|
2413 |
#: includes/settings/tabs/wps-access-level.php:23
|
2414 |
#: includes/settings/wps-settings.php:103
|
@@ -2417,31 +2419,31 @@ msgstr "Уровни доступа"
|
|
2417 |
|
2418 |
#: includes/settings/tabs/wps-access-level.php:52
|
2419 |
msgid "Required user level to view WP Statistics"
|
2420 |
-
msgstr "Требуемый уровень пользователя для просмотра
|
2421 |
|
2422 |
#: includes/settings/tabs/wps-access-level.php:67
|
2423 |
msgid "Required user level to manage WP Statistics"
|
2424 |
-
msgstr "
|
2425 |
|
2426 |
#: includes/settings/tabs/wps-access-level.php:75
|
2427 |
msgid "See the %s for details on capability levels."
|
2428 |
-
msgstr "
|
2429 |
|
2430 |
#: includes/settings/tabs/wps-access-level.php:75
|
2431 |
msgid "WordPress Roles and Capabilities page"
|
2432 |
-
msgstr "
|
2433 |
|
2434 |
#: includes/settings/tabs/wps-access-level.php:76
|
2435 |
msgid "Hint: manage_network = Super Admin Network, manage_options = Administrator, edit_others_posts = Editor, publish_posts = Author, edit_posts = Contributor, read = Everyone."
|
2436 |
-
msgstr "Подсказка: manage_network =
|
2437 |
|
2438 |
#: includes/settings/tabs/wps-access-level.php:77
|
2439 |
msgid "Each of the above casscades the rights upwards in the default WordPress configuration. So for example selecting publish_posts grants the right to Authors, Editors, Admins and Super Admins."
|
2440 |
-
msgstr "Каждый
|
2441 |
|
2442 |
#: includes/settings/tabs/wps-access-level.php:78
|
2443 |
msgid "If you need a more robust solution to delegate access you might want to look at %s in the WordPress plugin directory."
|
2444 |
-
msgstr "Если вам
|
2445 |
|
2446 |
#: includes/log/exclusions.php:197 includes/settings/tabs/wps-exclusions.php:46
|
2447 |
#: includes/settings/wps-settings.php:104 wp-statistics.php:378
|
@@ -2451,22 +2453,22 @@ msgstr "Исключения"
|
|
2451 |
|
2452 |
#: includes/settings/tabs/wps-exclusions.php:50
|
2453 |
msgid "Record exclusions"
|
2454 |
-
msgstr "
|
2455 |
|
2456 |
#: includes/settings/tabs/wps-exclusions.php:52
|
2457 |
#: includes/settings/tabs/wps-exclusions.php:106
|
2458 |
#: includes/settings/tabs/wps-exclusions.php:133
|
2459 |
#: includes/settings/tabs/wps-exclusions.php:150
|
2460 |
msgid "Enable"
|
2461 |
-
msgstr "
|
2462 |
|
2463 |
#: includes/settings/tabs/wps-exclusions.php:53
|
2464 |
msgid "This will record all the excluded hits in a separate table with the reasons why it was excluded but no other information. This will generate a lot of data but is useful if you want to see the total number of hits your site gets, not just actual user visits."
|
2465 |
-
msgstr "
|
2466 |
|
2467 |
#: includes/settings/tabs/wps-exclusions.php:58
|
2468 |
msgid "Exclude User Roles"
|
2469 |
-
msgstr "
|
2470 |
|
2471 |
#: includes/settings/tabs/wps-exclusions.php:74
|
2472 |
#: includes/settings/tabs/wps-exclusions.php:196
|
@@ -2478,39 +2480,39 @@ msgstr "Исключить"
|
|
2478 |
|
2479 |
#: includes/settings/tabs/wps-exclusions.php:75
|
2480 |
msgid "Exclude %s role from data collection."
|
2481 |
-
msgstr "
|
2482 |
|
2483 |
#: includes/settings/tabs/wps-exclusions.php:81
|
2484 |
msgid "IP/Robot Exclusions"
|
2485 |
-
msgstr "
|
2486 |
|
2487 |
#: includes/settings/tabs/wps-exclusions.php:85
|
2488 |
msgid "Robot list"
|
2489 |
-
msgstr "
|
2490 |
|
2491 |
#: includes/settings/tabs/wps-exclusions.php:98
|
2492 |
msgid "A list of words (one per line) to match against to detect robots. Entries must be at least 4 characters long or they will be ignored."
|
2493 |
-
msgstr "Список слов (
|
2494 |
|
2495 |
#: includes/settings/tabs/wps-exclusions.php:99
|
2496 |
msgid "Reset to Default"
|
2497 |
-
msgstr "
|
2498 |
|
2499 |
#: includes/settings/tabs/wps-exclusions.php:104
|
2500 |
msgid "Force robot list update after upgrades"
|
2501 |
-
msgstr "Обновление списка
|
2502 |
|
2503 |
#: includes/settings/tabs/wps-exclusions.php:107
|
2504 |
msgid "Force the robot list to be reset to the default after an update to WP Statistics takes place. Note if this option is enabled any custom robots you have added to the list will be lost."
|
2505 |
-
msgstr "
|
2506 |
|
2507 |
#: includes/settings/tabs/wps-exclusions.php:112
|
2508 |
msgid "Robot visit threshold"
|
2509 |
-
msgstr ""
|
2510 |
|
2511 |
#: includes/settings/tabs/wps-exclusions.php:115
|
2512 |
msgid "Treat visitors with more than this number of visits per day as robots. 0 = disabled."
|
2513 |
-
msgstr ""
|
2514 |
|
2515 |
#: includes/settings/tabs/wps-exclusions.php:120
|
2516 |
msgid "Excluded IP address list"
|
@@ -2518,7 +2520,7 @@ msgstr "Список исключенных IP-адресов"
|
|
2518 |
|
2519 |
#: includes/settings/tabs/wps-exclusions.php:123
|
2520 |
msgid "A list of IP addresses and subnet masks (one per line) to exclude from statistics collection (both 192.168.0.0/24 and 192.168.0.0/255.255.255.0 formats are accepted). To specify an IP address only, use a subnet value of 32 or 255.255.255.255."
|
2521 |
-
msgstr "Список IP-адресов и подсетей
|
2522 |
|
2523 |
#: includes/settings/tabs/wps-exclusions.php:124
|
2524 |
msgid "Add 10.0.0.0"
|
@@ -2534,91 +2536,91 @@ msgstr "Добавить 192.168.0.0"
|
|
2534 |
|
2535 |
#: includes/settings/tabs/wps-exclusions.php:131
|
2536 |
msgid "Use honey pot"
|
2537 |
-
msgstr ""
|
2538 |
|
2539 |
#: includes/settings/tabs/wps-exclusions.php:134
|
2540 |
msgid "Use a honey pot page to identify robots."
|
2541 |
-
msgstr ""
|
2542 |
|
2543 |
#: includes/settings/tabs/wps-exclusions.php:139
|
2544 |
msgid "Honey pot post id"
|
2545 |
-
msgstr ""
|
2546 |
|
2547 |
#: includes/settings/tabs/wps-exclusions.php:142
|
2548 |
msgid "The post id to use for the honeypot page."
|
2549 |
-
msgstr ""
|
2550 |
|
2551 |
#: includes/settings/tabs/wps-exclusions.php:143
|
2552 |
msgid "Create a new honey pot page"
|
2553 |
-
msgstr ""
|
2554 |
|
2555 |
#: includes/settings/tabs/wps-exclusions.php:156
|
2556 |
msgid "GeoIP Exclusions"
|
2557 |
-
msgstr ""
|
2558 |
|
2559 |
#: includes/settings/tabs/wps-exclusions.php:160
|
2560 |
msgid "Excluded countries list"
|
2561 |
-
msgstr ""
|
2562 |
|
2563 |
#: includes/settings/tabs/wps-exclusions.php:163
|
2564 |
msgid "A list of country codes (one per line, two letters each) to exclude from statistics collection. Use \"000\" (three zeros) to exclude unknown countries."
|
2565 |
-
msgstr ""
|
2566 |
|
2567 |
#: includes/settings/tabs/wps-exclusions.php:168
|
2568 |
msgid "Included countries list"
|
2569 |
-
msgstr ""
|
2570 |
|
2571 |
#: includes/settings/tabs/wps-exclusions.php:171
|
2572 |
msgid "A list of country codes (one per line, two letters each) to include in statistics collection, if this list is not empty, only visitors from the included countries will be recorded. Use \"000\" (three zeros) to exclude unknown countries."
|
2573 |
-
msgstr ""
|
2574 |
|
2575 |
#: includes/settings/tabs/wps-exclusions.php:176
|
2576 |
msgid "Host Exclusions"
|
2577 |
-
msgstr ""
|
2578 |
|
2579 |
#: includes/settings/tabs/wps-exclusions.php:180
|
2580 |
msgid "Excluded hosts list"
|
2581 |
-
msgstr ""
|
2582 |
|
2583 |
#: includes/settings/tabs/wps-exclusions.php:183
|
2584 |
msgid "A list of fully qualified host names (ie. server.example.com, one per line) to exclude from statistics collection."
|
2585 |
-
msgstr ""
|
2586 |
|
2587 |
#: includes/settings/tabs/wps-exclusions.php:185
|
2588 |
msgid "Note: this option will NOT perform a reverse DNS lookup on each page load but instead cache the IP address for the provided hostnames for one hour. If you are excluding dynamically assigned hosts you may find some degree of overlap when the host changes it's IP address and when the cache is updated resulting in some hits recorded."
|
2589 |
-
msgstr ""
|
2590 |
|
2591 |
#: includes/settings/tabs/wps-exclusions.php:190
|
2592 |
msgid "Site URL Exclusions"
|
2593 |
-
msgstr "
|
2594 |
|
2595 |
#: includes/settings/tabs/wps-exclusions.php:194
|
2596 |
msgid "Excluded login page"
|
2597 |
-
msgstr "
|
2598 |
|
2599 |
#: includes/settings/tabs/wps-exclusions.php:197
|
2600 |
msgid "Exclude the login page for registering as a hit."
|
2601 |
-
msgstr "
|
2602 |
|
2603 |
#: includes/settings/tabs/wps-exclusions.php:201
|
2604 |
msgid "Excluded admin pages"
|
2605 |
-
msgstr "
|
2606 |
|
2607 |
#: includes/settings/tabs/wps-exclusions.php:204
|
2608 |
msgid "Exclude the admin pages for registering as a hit."
|
2609 |
-
msgstr "
|
2610 |
|
2611 |
#: includes/settings/tabs/wps-exclusions.php:208
|
2612 |
msgid "Excluded RSS feeds"
|
2613 |
-
msgstr ""
|
2614 |
|
2615 |
#: includes/settings/tabs/wps-exclusions.php:211
|
2616 |
msgid "Exclude the RSS feeds for registering as a hit."
|
2617 |
-
msgstr ""
|
2618 |
|
2619 |
#: includes/settings/tabs/wps-externals.php:162
|
2620 |
msgid "browscap settings"
|
2621 |
-
msgstr "browscap
|
2622 |
|
2623 |
#: includes/settings/tabs/wps-externals.php:167
|
2624 |
msgid "browscap usage"
|
2 |
# This file is distributed under the same license as the WP Statistics package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"PO-Revision-Date: 2015-09-17 23:29:00+0000\n"
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
169 |
|
170 |
#: includes/settings/tabs/wps-exclusions.php:148
|
171 |
msgid "Treat corrupt browser info as a bot"
|
172 |
+
msgstr "Расценивать неверные данные браузера как робота"
|
173 |
|
174 |
#: includes/log/exclusions.php:24
|
175 |
msgid "404 Pages"
|
181 |
|
182 |
#: includes/settings/tabs/wps-exclusions.php:151
|
183 |
msgid "Treat any visitor with corrupt browser info (missing IP address or empty user agent string) as a robot."
|
184 |
+
msgstr "Расценивать любого посетителя с неверными данными браузера (отсутствие IP-адреса или User Agent`а) как робота."
|
185 |
|
186 |
#: includes/settings/tabs/wps-exclusions.php:215
|
187 |
msgid "Excluded 404 pages"
|
188 |
+
msgstr "Исключить страницы 404"
|
189 |
|
190 |
#: includes/settings/tabs/wps-exclusions.php:218
|
191 |
msgid "Exclude any URL that returns a \"404 - Not Found\" message."
|
192 |
+
msgstr "Не учитывать просмотры любых страниц, которые возвращают "404 Not Found"."
|
193 |
|
194 |
#: wps-updates.php:29
|
195 |
msgid "Error creating GeoIP database directory, make sure your web server has permissions to create directories in : %s"
|
302 |
|
303 |
#: includes/settings/tabs/wps-about.php:20 wp-statistics.php:392
|
304 |
msgid "Donate"
|
305 |
+
msgstr "Пожертвовать"
|
306 |
|
307 |
#: includes/settings/tabs/wps-about.php:24
|
308 |
msgid "Fell like showing us how much you enjoy WP Statistics? Drop by our %s page and show us some love!"
|
309 |
+
msgstr "Покажите насколько вам нравится WP Statistics. Пожертвуйте на развитие проекта на странице %s."
|
310 |
|
311 |
#: includes/settings/tabs/wps-about.php:24
|
312 |
msgid "donation"
|
313 |
+
msgstr "пожертвований"
|
314 |
|
315 |
#: includes/log/log.php:57
|
316 |
msgid "Donate Now!"
|
406 |
|
407 |
#: includes/settings/tabs/wps-exclusions.php:227
|
408 |
msgid "Note: this option will NOT handle url parameters (anything after the ?), only to the script name. Entries less than two characters will be ignored."
|
409 |
+
msgstr "Примечание: опция учитывает только имя скрипта, его параметры (все, что после ?) НЕ учитывается. Записи менее двух символов будут проигнорированы."
|
410 |
|
411 |
#: includes/settings/tabs/wps-exclusions.php:225
|
412 |
msgid "A list of local urls (ie. /wordpress/about, one per line) to exclude from statistics collection."
|
413 |
+
msgstr "Список внутренних адресов (например /wordpress/about, один адрес на строку), которые нужно исключить из статистики."
|
414 |
|
415 |
#: includes/settings/tabs/wps-exclusions.php:222
|
416 |
msgid "Excluded URLs list"
|
417 |
+
msgstr "Список исключенных URL-адресов"
|
418 |
|
419 |
#: includes/log/exclusions.php:24
|
420 |
msgid "Excluded URL"
|
678 |
|
679 |
#: includes/settings/tabs/wps-externals.php:104
|
680 |
msgid "Populate missing GeoIP after update of GeoIP DB"
|
681 |
+
msgstr ""
|
682 |
+
"Заполнить недостающие GeoIP после обновление GeoIP дБ\n"
|
683 |
+
"Обновить неизвестные данные GeoIP, после его обновления"
|
684 |
|
685 |
#: includes/settings/tabs/wps-externals.php:110
|
686 |
msgid "Update any missing GeoIP data after downloading a new database."
|
687 |
+
msgstr "Обновит любые недостающие GeoIP данные, после загрузки новой базы данных."
|
688 |
|
689 |
#: includes/settings/tabs/wps-externals.php:116
|
690 |
msgid "Country code for private IP addresses"
|
691 |
+
msgstr "Код страны, для внутренних IP-адресов"
|
692 |
|
693 |
#: includes/settings/tabs/wps-externals.php:121
|
694 |
msgid "The international standard two letter country code (ie. US = United States, CA = Canada, etc.) for private (non-routable) IP addresses (ie. 10.0.0.1, 192.158.1.1, 127.0.0.1, etc.). Use \"000\" (three zeros) to use \"Unknown\" as the country code."
|
695 |
+
msgstr "Международные стандарты регламентируют двухбуквенный код страны (например US = США, RU = Россия и т.д.) для указания внутренних IP-адресов (например 10.0.0.1, 192.158.1.1, 127.0.0.1 и т.д.). Используйте \"000\" в качестве кода страны (три нуля) для указания \"Неизвестно\" в поле Страна."
|
696 |
|
697 |
#: includes/settings/tabs/wps-externals.php:132
|
698 |
msgid "GeoIP collection is disabled due to the following reasons:"
|
699 |
+
msgstr "Работа GeoIP отключена по следующим причинам:"
|
700 |
|
701 |
#: includes/settings/tabs/wps-externals.php:135
|
702 |
msgid "GeoIP collection requires PHP %s or above, it is currently disabled due to the installed PHP version being "
|
703 |
+
msgstr "Для GeoIP требуется PHP версии %s или выше, обновите версию PHP."
|
704 |
|
705 |
#: includes/settings/tabs/wps-externals.php:140
|
706 |
msgid "GeoIP collection requires the cURL PHP extension and it is not loaded on your version of PHP!"
|
707 |
+
msgstr "Для GeoIP требуется расширение PHP cURL и оно недоступно в вашей версии PHP!"
|
708 |
|
709 |
#: includes/settings/tabs/wps-externals.php:146
|
710 |
msgid "GeoIP collection requires the BC Math PHP extension and it is not loaded on your version of PHP!"
|
711 |
+
msgstr "Для GeoIP требуется расширение PHP BC Math и оно недоступно в вашей версии PHP!"
|
712 |
|
713 |
#: includes/settings/tabs/wps-externals.php:152
|
714 |
msgid "PHP safe mode detected! GeoIP collection is not supported with PHP's safe mode enabled!"
|
715 |
+
msgstr "Включен безопасный режим PHP! Работа GeoIP невозможна при включенном безопасном режиме PHP!"
|
716 |
|
717 |
#: includes/settings/tabs/wps-maintenance.php:20
|
718 |
msgid "This will permanently delete data from the database each day, are you sure you want to enable this option?"
|
1058 |
#: includes/settings/tabs/wps-overview-display.php:388
|
1059 |
#: includes/settings/tabs/wps-removal.php:42
|
1060 |
msgid "Update"
|
1061 |
+
msgstr "Обновить"
|
1062 |
|
1063 |
#: schedule.php:10
|
1064 |
msgid "Once Weekly"
|
2093 |
|
2094 |
#: includes/optimization/tabs/wps-optimization-resources.php:163
|
2095 |
msgid "Is PHP Safe Mode active. The GeoIP code is not supported in Safe Mode."
|
2096 |
+
msgstr "Активен ли безопасный режим в PHP. GeoIP код в безопасном режиме не поддерживается."
|
2097 |
|
2098 |
#: includes/optimization/tabs/wps-optimization-resources.php:169
|
2099 |
msgid "jQuery Version"
|
2215 |
|
2216 |
#: includes/optimization/tabs/wps-optimization-updates.php:4
|
2217 |
msgid "This will replace all IP addresses in the database with hash values and cannot be undo, are you sure?"
|
2218 |
+
msgstr "Это заменит все IP-адреса в базе данных на хеш-значения. Операцию невозможно отменить, вы уверены?"
|
2219 |
|
2220 |
#: includes/optimization/tabs/wps-optimization-updates.php:16
|
2221 |
msgid "GeoIP Options"
|
2222 |
+
msgstr "Опции GeoIP"
|
2223 |
|
2224 |
#: includes/optimization/tabs/wps-optimization-updates.php:26
|
2225 |
msgid "Updates any unknown location data in the database, this may take a while"
|
2226 |
+
msgstr "Обновляет все неизвестные данные о странах в базе данных , это может занять некоторое время."
|
2227 |
|
2228 |
#: includes/optimization/tabs/wps-optimization-updates.php:31
|
2229 |
#: includes/settings/tabs/wps-general.php:66
|
2233 |
#: includes/optimization/tabs/wps-optimization-updates.php:36
|
2234 |
#: includes/settings/tabs/wps-general.php:71
|
2235 |
msgid "Hash IP Addresses"
|
2236 |
+
msgstr "Хешировать IP-адреса"
|
2237 |
|
2238 |
#: includes/optimization/tabs/wps-optimization-updates.php:41
|
2239 |
msgid "Replace IP addresses in the database with hash values, you will not be able to recover the IP addresses in the future to populate location information afterwards and this may take a while"
|
2240 |
+
msgstr "Заменит IP-адреса в базе данных на хеш-значения, обратная операция невозможна и она может занять некоторое время."
|
2241 |
|
2242 |
#: includes/optimization/wps-optimization.php:43
|
2243 |
msgid "IP Addresses replaced with hash values."
|
2244 |
+
msgstr "IP-адреса заменяются хеш-значениями."
|
2245 |
|
2246 |
#: includes/optimization/wps-optimization.php:51
|
2247 |
msgid "Install routine complete."
|
2248 |
+
msgstr "Переустановка завершена."
|
2249 |
|
2250 |
#: includes/optimization/wps-optimization.php:234
|
2251 |
msgid "Resources/Information"
|
2252 |
+
msgstr "Ресурсы/Информация"
|
2253 |
|
2254 |
#: includes/optimization/wps-optimization.php:236
|
2255 |
msgid "Purging"
|
2265 |
|
2266 |
#: includes/optimization/wps-optimization.php:239
|
2267 |
msgid "Historical"
|
2268 |
+
msgstr "История"
|
2269 |
|
2270 |
#: includes/settings/tabs/wps-about.php:8
|
2271 |
msgid "WP Statistics V%s"
|
2273 |
|
2274 |
#: includes/settings/tabs/wps-about.php:28
|
2275 |
msgid "Visit Us Online"
|
2276 |
+
msgstr "Посетите наш сайт"
|
2277 |
|
2278 |
#: includes/settings/tabs/wps-about.php:32
|
2279 |
msgid "Come visit our great new %s and keep up to date on the latest news about WP Statistics."
|
2280 |
+
msgstr "Приходите на наш новый %s и будьте в курсе последних новостей WP Statistics."
|
2281 |
|
2282 |
#: includes/settings/tabs/wps-about.php:32
|
2283 |
msgid "website"
|
2284 |
+
msgstr "сайт"
|
2285 |
|
2286 |
#: includes/settings/tabs/wps-about.php:36
|
2287 |
msgid "Rate and Review at WordPress.org"
|
2288 |
+
msgstr "Оценить и оставьте отзыв на WordPress.org"
|
2289 |
|
2290 |
#: includes/settings/tabs/wps-about.php:40
|
2291 |
msgid "Thanks for installing WP Statistics, we encourage you to submit a "
|
2292 |
+
msgstr "Спасибо за установку WP Statistics, пожалуйста"
|
2293 |
|
2294 |
#: includes/settings/tabs/wps-about.php:40
|
2295 |
msgid "rating and review"
|
2296 |
+
msgstr "оцените и оставьте отзыв о плагине"
|
2297 |
|
2298 |
#: includes/settings/tabs/wps-about.php:40
|
2299 |
msgid "over at WordPress.org. Your feedback is greatly appreciated!"
|
2300 |
+
msgstr "на WordPress.org. Ваши отзывы очень важны для нас!"
|
2301 |
|
2302 |
#: includes/settings/tabs/wps-about.php:44
|
2303 |
msgid "Translations"
|
2304 |
+
msgstr "Локализации"
|
2305 |
|
2306 |
#: includes/settings/tabs/wps-about.php:48
|
2307 |
msgid "WP Statistics supports internationalization and we encourage our users to submit translations, please visit our %s to see the current status and %s if you would like to help."
|
2308 |
+
msgstr "WP Statistics имеет поддержку множества языков и мы призываем наших пользователей расширять доступные языки. Посетите наш %s, чтобы увидеть текущее состояние перевода и %s, если вы хотите помочь."
|
2309 |
|
2310 |
#: includes/settings/tabs/wps-about.php:48
|
2311 |
msgid "translation collaboration site"
|
2312 |
+
msgstr "сайт локализации"
|
2313 |
|
2314 |
#: includes/settings/tabs/wps-about.php:48
|
2315 |
msgid "drop us a line"
|
2316 |
+
msgstr "напишите нам"
|
2317 |
|
2318 |
#: includes/settings/tabs/wps-about.php:52
|
2319 |
msgid "Support"
|
2321 |
|
2322 |
#: includes/settings/tabs/wps-about.php:57
|
2323 |
msgid "We're sorry you're having problem with WP Statistics and we're happy to help out. Here are a few things to do before contacting us:"
|
2324 |
+
msgstr "Нам очень жаль, что у вас возникли проблемы с WP Statistics и мы будем рады вам помочь. Вот несколько вещей, которые нужно сделать, прежде чем связаться с нами:"
|
2325 |
|
2326 |
#: includes/settings/tabs/wps-about.php:60
|
2327 |
#: includes/settings/tabs/wps-about.php:61
|
2328 |
msgid "Have you read the %s?"
|
2329 |
+
msgstr "Вы читали %s?"
|
2330 |
|
2331 |
#: includes/settings/tabs/wps-about.php:60
|
2332 |
msgid "FAQs"
|
2334 |
|
2335 |
#: includes/settings/tabs/wps-about.php:61
|
2336 |
msgid "manual"
|
2337 |
+
msgstr "инструкцию"
|
2338 |
|
2339 |
#: includes/settings/tabs/wps-about.php:62
|
2340 |
msgid "Have you search the %s for a similar issue?"
|
2341 |
+
msgstr "Вы искали подобную проблему на %s?"
|
2342 |
|
2343 |
#: includes/settings/tabs/wps-about.php:62
|
2344 |
msgid "support forum"
|
2345 |
+
msgstr "форуме поддержки"
|
2346 |
|
2347 |
#: includes/settings/tabs/wps-about.php:63
|
2348 |
msgid "Have you search the Internet for any error messages you are receiving?"
|
2349 |
+
msgstr "Вы искали в интернете по поводу получаемых вами сообщениях об ошибках."
|
2350 |
|
2351 |
#: includes/settings/tabs/wps-about.php:64
|
2352 |
msgid "Make sure you have access to your PHP error logs."
|
2353 |
+
msgstr "Убедитесь, что у вас есть доступ к журналам ошибок PHP."
|
2354 |
|
2355 |
#: includes/settings/tabs/wps-about.php:67
|
2356 |
msgid "And a few things to double-check:"
|
2357 |
+
msgstr "И проверьте еще раз:"
|
2358 |
|
2359 |
#: includes/settings/tabs/wps-about.php:70
|
2360 |
msgid "How's your memory_limit in php.ini?"
|
2361 |
+
msgstr "Какой memory_limit установлен в php.ini?"
|
2362 |
|
2363 |
#: includes/settings/tabs/wps-about.php:71
|
2364 |
msgid "Have you tried disabling any other plugins you may have installed?"
|
2365 |
+
msgstr "Вы пробовали отключить другие плагины, которые у вас установлены?"
|
2366 |
|
2367 |
#: includes/settings/tabs/wps-about.php:72
|
2368 |
msgid "Have you tried using the default WordPress theme?"
|
2369 |
+
msgstr "Вы пробовали использовать стандартную тему оформления Wordpress?"
|
2370 |
|
2371 |
#: includes/settings/tabs/wps-about.php:73
|
2372 |
msgid "Have you double checked the plugin settings?"
|
2373 |
+
msgstr "Проверили еще раз настройки плагина?"
|
2374 |
|
2375 |
#: includes/settings/tabs/wps-about.php:74
|
2376 |
msgid "Do you have all the required PHP extensions installed?"
|
2377 |
+
msgstr "У вас установлены все необходимые расширения PHP?"
|
2378 |
|
2379 |
#: includes/settings/tabs/wps-about.php:75
|
2380 |
msgid "Are you getting a blank or incomplete page displayed in your browser? Did you view the source for the page and check for any fatal errors?"
|
2381 |
+
msgstr "Вы получаете пустую или неполная страница отображается в браузере? Вы можете просмотреть исходный код страницы и проверить на наличие любых критических ошибок?"
|
2382 |
|
2383 |
#: includes/settings/tabs/wps-about.php:76
|
2384 |
msgid "Have you checked your PHP and web server error logs?"
|
2385 |
+
msgstr "Вы проверили ваш PHP и журналы ошибок вебсервера?"
|
2386 |
|
2387 |
#: includes/settings/tabs/wps-about.php:79
|
2388 |
msgid "Still not having any luck?"
|
2389 |
+
msgstr "До сих пор не удалось исправить проблему?"
|
2390 |
|
2391 |
#: includes/settings/tabs/wps-about.php:79
|
2392 |
msgid "Then please open a new thread on the %s and we'll respond as soon as possible."
|
2393 |
+
msgstr "Тогда, пожалуйста, откройте новую тему на %s и мы ответим вам, как только это будет возможно"
|
2394 |
|
2395 |
#: includes/settings/tabs/wps-about.php:79
|
2396 |
msgid "WordPress.org support forum"
|
2397 |
+
msgstr "форуме поддержки WordPress.org"
|
2398 |
|
2399 |
#: includes/settings/tabs/wps-about.php:83
|
2400 |
msgid "Alternatively %s support is available as well."
|
2401 |
+
msgstr "Также есть поддержка %s."
|
2402 |
|
2403 |
#: includes/settings/tabs/wps-about.php:83
|
2404 |
msgid "Farsi"
|
2406 |
|
2407 |
#: includes/settings/tabs/wps-exclusions.php:21
|
2408 |
msgid "WP Statistics Honey Pot Page"
|
2409 |
+
msgstr "Страница-приманка WP Statistics"
|
2410 |
|
2411 |
#: includes/settings/tabs/wps-exclusions.php:22
|
2412 |
msgid "This is the honey pot for WP Statistics to use, do not delete."
|
2413 |
+
msgstr "Эта страница-приманка используется WP Statistics, не удаляйте её."
|
2414 |
|
2415 |
#: includes/settings/tabs/wps-access-level.php:23
|
2416 |
#: includes/settings/wps-settings.php:103
|
2419 |
|
2420 |
#: includes/settings/tabs/wps-access-level.php:52
|
2421 |
msgid "Required user level to view WP Statistics"
|
2422 |
+
msgstr "Требуемый уровень пользователя для просмотра WP Statistics"
|
2423 |
|
2424 |
#: includes/settings/tabs/wps-access-level.php:67
|
2425 |
msgid "Required user level to manage WP Statistics"
|
2426 |
+
msgstr "Требуемый уровень пользователя для управления WP Statistics"
|
2427 |
|
2428 |
#: includes/settings/tabs/wps-access-level.php:75
|
2429 |
msgid "See the %s for details on capability levels."
|
2430 |
+
msgstr "Подробнее о возможных уровнях доступа: %s."
|
2431 |
|
2432 |
#: includes/settings/tabs/wps-access-level.php:75
|
2433 |
msgid "WordPress Roles and Capabilities page"
|
2434 |
+
msgstr "Роли и возможностей пользователей Wordpress"
|
2435 |
|
2436 |
#: includes/settings/tabs/wps-access-level.php:76
|
2437 |
msgid "Hint: manage_network = Super Admin Network, manage_options = Administrator, edit_others_posts = Editor, publish_posts = Author, edit_posts = Contributor, read = Everyone."
|
2438 |
+
msgstr "Подсказка: manage_network = Cупер администратор сети, manage_options = Администратор, edit_others_posts = Редактор, publish_posts = Автор, edit_posts = Корректор, читать = Все остальные."
|
2439 |
|
2440 |
#: includes/settings/tabs/wps-access-level.php:77
|
2441 |
msgid "Each of the above casscades the rights upwards in the default WordPress configuration. So for example selecting publish_posts grants the right to Authors, Editors, Admins and Super Admins."
|
2442 |
+
msgstr "Каждый уровень прав по умолчанию в Wordpress каскадно доступен высшим уровням. Например, publish_posts дает право Авторам, Редактора, Администраторам и Супер Администраторам."
|
2443 |
|
2444 |
#: includes/settings/tabs/wps-access-level.php:78
|
2445 |
msgid "If you need a more robust solution to delegate access you might want to look at %s in the WordPress plugin directory."
|
2446 |
+
msgstr "Если вам требуется более надежное решение, для распределения прав доступа, посмотрите в сторону %s в каталоге плагинов Wordpress."
|
2447 |
|
2448 |
#: includes/log/exclusions.php:197 includes/settings/tabs/wps-exclusions.php:46
|
2449 |
#: includes/settings/wps-settings.php:104 wp-statistics.php:378
|
2453 |
|
2454 |
#: includes/settings/tabs/wps-exclusions.php:50
|
2455 |
msgid "Record exclusions"
|
2456 |
+
msgstr "Записывать исключения"
|
2457 |
|
2458 |
#: includes/settings/tabs/wps-exclusions.php:52
|
2459 |
#: includes/settings/tabs/wps-exclusions.php:106
|
2460 |
#: includes/settings/tabs/wps-exclusions.php:133
|
2461 |
#: includes/settings/tabs/wps-exclusions.php:150
|
2462 |
msgid "Enable"
|
2463 |
+
msgstr "Да"
|
2464 |
|
2465 |
#: includes/settings/tabs/wps-exclusions.php:53
|
2466 |
msgid "This will record all the excluded hits in a separate table with the reasons why it was excluded but no other information. This will generate a lot of data but is useful if you want to see the total number of hits your site gets, not just actual user visits."
|
2467 |
+
msgstr "Будет записывать записывать исключенные записи в отдельной таблице, с причиной исключения. При этом генерируется много данных, но если вам нужно общее количество просмотров сайта, а не актуальное значение, тогда используйте эту опцию."
|
2468 |
|
2469 |
#: includes/settings/tabs/wps-exclusions.php:58
|
2470 |
msgid "Exclude User Roles"
|
2471 |
+
msgstr "Исключение ролей пользоваетелей"
|
2472 |
|
2473 |
#: includes/settings/tabs/wps-exclusions.php:74
|
2474 |
#: includes/settings/tabs/wps-exclusions.php:196
|
2480 |
|
2481 |
#: includes/settings/tabs/wps-exclusions.php:75
|
2482 |
msgid "Exclude %s role from data collection."
|
2483 |
+
msgstr "Исключить роль %s из статистики."
|
2484 |
|
2485 |
#: includes/settings/tabs/wps-exclusions.php:81
|
2486 |
msgid "IP/Robot Exclusions"
|
2487 |
+
msgstr "Исключение IP/Роботов"
|
2488 |
|
2489 |
#: includes/settings/tabs/wps-exclusions.php:85
|
2490 |
msgid "Robot list"
|
2491 |
+
msgstr "Список роботов"
|
2492 |
|
2493 |
#: includes/settings/tabs/wps-exclusions.php:98
|
2494 |
msgid "A list of words (one per line) to match against to detect robots. Entries must be at least 4 characters long or they will be ignored."
|
2495 |
+
msgstr "Список слов (одно на строку), позволяющих идентифицировать роботов. Записи должны быть длиной минимум 4 символа, иначе они будут проигнорированы."
|
2496 |
|
2497 |
#: includes/settings/tabs/wps-exclusions.php:99
|
2498 |
msgid "Reset to Default"
|
2499 |
+
msgstr "Сбросить изменения"
|
2500 |
|
2501 |
#: includes/settings/tabs/wps-exclusions.php:104
|
2502 |
msgid "Force robot list update after upgrades"
|
2503 |
+
msgstr "Обновление списка роботов после обновления плагина"
|
2504 |
|
2505 |
#: includes/settings/tabs/wps-exclusions.php:107
|
2506 |
msgid "Force the robot list to be reset to the default after an update to WP Statistics takes place. Note if this option is enabled any custom robots you have added to the list will be lost."
|
2507 |
+
msgstr "Список роботов будет сброшен до стандартного после обновления WP Statistics. Если данная опция включена, все добавленные вручную записи будут утеряны после обновления."
|
2508 |
|
2509 |
#: includes/settings/tabs/wps-exclusions.php:112
|
2510 |
msgid "Robot visit threshold"
|
2511 |
+
msgstr "Количество визитов для робота"
|
2512 |
|
2513 |
#: includes/settings/tabs/wps-exclusions.php:115
|
2514 |
msgid "Treat visitors with more than this number of visits per day as robots. 0 = disabled."
|
2515 |
+
msgstr "Расценивать посетителей с числом посещений больше указанного количества в день, как роботов. 0 отключит эту функцию."
|
2516 |
|
2517 |
#: includes/settings/tabs/wps-exclusions.php:120
|
2518 |
msgid "Excluded IP address list"
|
2520 |
|
2521 |
#: includes/settings/tabs/wps-exclusions.php:123
|
2522 |
msgid "A list of IP addresses and subnet masks (one per line) to exclude from statistics collection (both 192.168.0.0/24 and 192.168.0.0/255.255.255.0 formats are accepted). To specify an IP address only, use a subnet value of 32 or 255.255.255.255."
|
2523 |
+
msgstr "Список IP-адресов и масок подсетей (по одной записи в строке), которые требуется исключить из статистики (разрешены оба формата записи 192.168.0.0/24 и 192.168.0.0/255.255.255.0). Для указания только IP адреса, используйте подсеть 32 или 255.255.255.255."
|
2524 |
|
2525 |
#: includes/settings/tabs/wps-exclusions.php:124
|
2526 |
msgid "Add 10.0.0.0"
|
2536 |
|
2537 |
#: includes/settings/tabs/wps-exclusions.php:131
|
2538 |
msgid "Use honey pot"
|
2539 |
+
msgstr "Использовать приманку"
|
2540 |
|
2541 |
#: includes/settings/tabs/wps-exclusions.php:134
|
2542 |
msgid "Use a honey pot page to identify robots."
|
2543 |
+
msgstr "Использовать страницу-приманку, для определения роботов."
|
2544 |
|
2545 |
#: includes/settings/tabs/wps-exclusions.php:139
|
2546 |
msgid "Honey pot post id"
|
2547 |
+
msgstr "ID страницы-приманки"
|
2548 |
|
2549 |
#: includes/settings/tabs/wps-exclusions.php:142
|
2550 |
msgid "The post id to use for the honeypot page."
|
2551 |
+
msgstr "ID сообщения (записи), используемого в качестве приманки."
|
2552 |
|
2553 |
#: includes/settings/tabs/wps-exclusions.php:143
|
2554 |
msgid "Create a new honey pot page"
|
2555 |
+
msgstr "Создать новую страницу-приманку"
|
2556 |
|
2557 |
#: includes/settings/tabs/wps-exclusions.php:156
|
2558 |
msgid "GeoIP Exclusions"
|
2559 |
+
msgstr "Исключения GeoIP"
|
2560 |
|
2561 |
#: includes/settings/tabs/wps-exclusions.php:160
|
2562 |
msgid "Excluded countries list"
|
2563 |
+
msgstr "Список исключенных стран"
|
2564 |
|
2565 |
#: includes/settings/tabs/wps-exclusions.php:163
|
2566 |
msgid "A list of country codes (one per line, two letters each) to exclude from statistics collection. Use \"000\" (three zeros) to exclude unknown countries."
|
2567 |
+
msgstr "Список кодов стран (по одному в каждой строке, по два символа каждый), которые требуется исключить из статистики. Используйте "000" (три нуля), чтобы исключить неизвестные страны."
|
2568 |
|
2569 |
#: includes/settings/tabs/wps-exclusions.php:168
|
2570 |
msgid "Included countries list"
|
2571 |
+
msgstr "Список включенных стран"
|
2572 |
|
2573 |
#: includes/settings/tabs/wps-exclusions.php:171
|
2574 |
msgid "A list of country codes (one per line, two letters each) to include in statistics collection, if this list is not empty, only visitors from the included countries will be recorded. Use \"000\" (three zeros) to exclude unknown countries."
|
2575 |
+
msgstr "Список кодов стран (по одному в каждой строке, по два символа каждый), которые требуется включить в статистику, если этот список не пуст, то только посетители из этих стран будут добавлены в статистику. Используйте "000" (три нуля), чтобы исключить неизвестные страны."
|
2576 |
|
2577 |
#: includes/settings/tabs/wps-exclusions.php:176
|
2578 |
msgid "Host Exclusions"
|
2579 |
+
msgstr "DNS исключения"
|
2580 |
|
2581 |
#: includes/settings/tabs/wps-exclusions.php:180
|
2582 |
msgid "Excluded hosts list"
|
2583 |
+
msgstr "Список DNS-имен"
|
2584 |
|
2585 |
#: includes/settings/tabs/wps-exclusions.php:183
|
2586 |
msgid "A list of fully qualified host names (ie. server.example.com, one per line) to exclude from statistics collection."
|
2587 |
+
msgstr "Список полных DNS-имен серверов (например server.example.com, по одному в строке), которые требуется исключить из статистики."
|
2588 |
|
2589 |
#: includes/settings/tabs/wps-exclusions.php:185
|
2590 |
msgid "Note: this option will NOT perform a reverse DNS lookup on each page load but instead cache the IP address for the provided hostnames for one hour. If you are excluding dynamically assigned hosts you may find some degree of overlap when the host changes it's IP address and when the cache is updated resulting in some hits recorded."
|
2591 |
+
msgstr "Примечание: эта опция не выполняет поиск обратного DNS-имя при каждой загрузке страницы, вместо этого она кеширует DNS-имя соответствующее IP-адресу на час. Если вы исключили динамически назначаемые DNS-имена, могут случиться наложения, связанные с одинаковыми данными в кеше и измененным IP-адресе."
|
2592 |
|
2593 |
#: includes/settings/tabs/wps-exclusions.php:190
|
2594 |
msgid "Site URL Exclusions"
|
2595 |
+
msgstr "Исключение адресов сайтов"
|
2596 |
|
2597 |
#: includes/settings/tabs/wps-exclusions.php:194
|
2598 |
msgid "Excluded login page"
|
2599 |
+
msgstr "Исключить страницу авторизации"
|
2600 |
|
2601 |
#: includes/settings/tabs/wps-exclusions.php:197
|
2602 |
msgid "Exclude the login page for registering as a hit."
|
2603 |
+
msgstr "Не учитывать просмотры страницы авторизации."
|
2604 |
|
2605 |
#: includes/settings/tabs/wps-exclusions.php:201
|
2606 |
msgid "Excluded admin pages"
|
2607 |
+
msgstr "Исключить страницы админпанели"
|
2608 |
|
2609 |
#: includes/settings/tabs/wps-exclusions.php:204
|
2610 |
msgid "Exclude the admin pages for registering as a hit."
|
2611 |
+
msgstr "Не учитывать просмотры страниц админпанели."
|
2612 |
|
2613 |
#: includes/settings/tabs/wps-exclusions.php:208
|
2614 |
msgid "Excluded RSS feeds"
|
2615 |
+
msgstr "Исключить RSS ленты"
|
2616 |
|
2617 |
#: includes/settings/tabs/wps-exclusions.php:211
|
2618 |
msgid "Exclude the RSS feeds for registering as a hit."
|
2619 |
+
msgstr "Не учитывать просмотры RSS ленты."
|
2620 |
|
2621 |
#: includes/settings/tabs/wps-externals.php:162
|
2622 |
msgid "browscap settings"
|
2623 |
+
msgstr "Настройки browscap"
|
2624 |
|
2625 |
#: includes/settings/tabs/wps-externals.php:167
|
2626 |
msgid "browscap usage"
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: http://wp-statistics.com/donate/
|
|
4 |
Tags: statistics, stats, visit, visitors, chart, browser, blog, today, yesterday, week, month, year, total, post, page, sidebar, summary, feedburner, hits, pagerank, google, alexa, live visit
|
5 |
Requires at least: 3.0
|
6 |
Tested up to: 4.3
|
7 |
-
Stable tag: 9.6.
|
8 |
License: GPL3
|
9 |
|
10 |
Complete statistics for your WordPress site.
|
@@ -235,6 +235,9 @@ If you still have issues open a new thread on the support forum and we'll try an
|
|
235 |
10. View latest search engine referrers Statistics page.
|
236 |
|
237 |
== Upgrade Notice ==
|
|
|
|
|
|
|
238 |
= 9.6.4 =
|
239 |
Have you updated your database indexes and search table? If not please go to Statistics->Optimization->Database after you have installed the update and run the updates.
|
240 |
|
@@ -295,6 +298,14 @@ BACKUP YOUR DATABASE BEFORE INSTALLING! This release alters the table structure
|
|
295 |
This release updates some core code to do with timezones, hence the change to version 9.0, if you see any issues with timezones, please let us know. In addition, you may see an increase in your visits count as a race condition that dropped some visits has been resolved.
|
296 |
|
297 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
298 |
= 9.6.4 =
|
299 |
* Release Date: September 15, 2015
|
300 |
* Updated: Support new browscap.ini file format.
|
4 |
Tags: statistics, stats, visit, visitors, chart, browser, blog, today, yesterday, week, month, year, total, post, page, sidebar, summary, feedburner, hits, pagerank, google, alexa, live visit
|
5 |
Requires at least: 3.0
|
6 |
Tested up to: 4.3
|
7 |
+
Stable tag: 9.6.5
|
8 |
License: GPL3
|
9 |
|
10 |
Complete statistics for your WordPress site.
|
235 |
10. View latest search engine referrers Statistics page.
|
236 |
|
237 |
== Upgrade Notice ==
|
238 |
+
= 9.6.5 =
|
239 |
+
Have you updated your database indexes and search table? If not please go to Statistics->Optimization->Database after you have installed the update and run the updates.
|
240 |
+
|
241 |
= 9.6.4 =
|
242 |
Have you updated your database indexes and search table? If not please go to Statistics->Optimization->Database after you have installed the update and run the updates.
|
243 |
|
298 |
This release updates some core code to do with timezones, hence the change to version 9.0, if you see any issues with timezones, please let us know. In addition, you may see an increase in your visits count as a race condition that dropped some visits has been resolved.
|
299 |
|
300 |
== Changelog ==
|
301 |
+
= 9.6.5 =
|
302 |
+
* Release Date: September 18, 2015
|
303 |
+
* Updated: Updated support libraries, including browscap (2.0.5) and GeoIP (webservices).
|
304 |
+
* Updated: The hits column in the post/pages list no longer requires manage permissions but instead view permission.
|
305 |
+
* Fixed: New browscap.ini format was causing fatal errors in certain circumstances.
|
306 |
+
* Fixed: Missing close tag on the summary widget's users online link.
|
307 |
+
* Fixed: When purging data an incorrect column name was used when updating the historical table.
|
308 |
+
|
309 |
= 9.6.4 =
|
310 |
* Release Date: September 15, 2015
|
311 |
* Updated: Support new browscap.ini file format.
|
vendor/browscap/browscap-php/.editorconfig
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This file is for unifying the coding style for different editors and IDEs
|
2 |
+
# editorconfig.org
|
3 |
+
|
4 |
+
root = true
|
5 |
+
|
6 |
+
[*]
|
7 |
+
end_of_line = lf
|
8 |
+
charset = utf-8
|
9 |
+
trim_trailing_whitespace = true
|
10 |
+
|
11 |
+
[**.{js,json,md,markdown}]
|
12 |
+
indent_style = space
|
13 |
+
indent_size = 2
|
14 |
+
insert_final_newline = true
|
15 |
+
|
16 |
+
[**.{html}]
|
17 |
+
indent_style = space
|
18 |
+
indent_size = 2
|
19 |
+
insert_final_newline = false
|
20 |
+
|
21 |
+
[**.{php}]
|
22 |
+
indent_style = space
|
23 |
+
indent_size = 4
|
24 |
+
insert_final_newline = true
|
vendor/browscap/browscap-php/.gitattributes
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#Ensure the markdown uses lf
|
2 |
+
*.markdown text eol=lf
|
3 |
+
*.js text eol=lf
|
4 |
+
*.json text eol=lf
|
5 |
+
*.md text eol=lf
|
6 |
+
*.html text eol=lf
|
7 |
+
*.php text eol=lf
|
vendor/browscap/browscap-php/.gitignore
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
vendor/
|
2 |
+
.idea/
|
3 |
+
.buildpath
|
4 |
+
.settings
|
5 |
+
.project
|
6 |
+
composer.phar
|
vendor/browscap/browscap-php/.scrutinizer.yml
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
inherit: true
|
2 |
+
|
3 |
+
tools:
|
4 |
+
external_code_coverage: true
|
vendor/browscap/browscap-php/.travis.yml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
language: php
|
2 |
+
sudo: false
|
3 |
+
|
4 |
+
php:
|
5 |
+
- 5.3
|
6 |
+
- 5.4
|
7 |
+
- 5.5
|
8 |
+
- 5.6
|
9 |
+
- 7
|
10 |
+
- hhvm
|
11 |
+
|
12 |
+
before_script:
|
13 |
+
- wget http://browscap.org/stream?q=Full_PHP_BrowsCapINI -O /tmp/browscap.ini
|
14 |
+
- composer self-update
|
15 |
+
- composer install -o --prefer-source
|
16 |
+
|
17 |
+
script:
|
18 |
+
- php -d zend.enable_gc=0 -d browscap=/tmp/browscap.ini vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover --colors --verbose
|
19 |
+
|
20 |
+
after_script:
|
21 |
+
- wget https://scrutinizer-ci.com/ocular.phar
|
22 |
+
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
|
23 |
+
|
vendor/browscap/browscap-php/CHANGELOG.md
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Changelog
|
2 |
+
-------
|
3 |
+
|
4 |
+
### Version 2.0.0 - June 23, 2014
|
5 |
+
- #25 for caching error
|
6 |
+
- #14 reducing memory consumption slightly
|
7 |
+
- #22 use the "normal" version instead of "full" version
|
8 |
+
- #15 general improvements
|
9 |
+
- #13 code formatting improvements
|
10 |
+
- #12 allow proxy settings via fsockopen with context
|
11 |
+
- #9 default timeout settings fix
|
12 |
+
- #11, #27 improved tests
|
13 |
+
|
14 |
+
### Version 2.0.0-beta - August 25, 2013
|
15 |
+
- Added a new method to retrieve the source file version `$browscap->getSourceVersion()`.
|
16 |
+
- Added a safety feature to regenerate the cache file always when `Browscap::CACHE_FILE_VERSION` changes.
|
17 |
+
- Updated source file download URLs to new temporary URLs.
|
18 |
+
- Added new lines `\n` to the cache files for readability.
|
19 |
+
- Default download URL is changed so it will get and parse the full file instead of 'standard'.
|
20 |
+
[ua-speed-tests](https://github.com/quentin389/ua-speed-tests) shows that there is only a small performance difference between
|
21 |
+
using those two versions.
|
22 |
+
- Performance upgrades (see [ua-speed-tests](https://github.com/quentin389/ua-speed-tests) for performance tests):
|
23 |
+
* **5 times faster** for real user agents, with opcache on
|
24 |
+
* **11 times faster** for user agents that do not match anything, with opcache on
|
25 |
+
* **3 times faster** for real user agents, without using opcache
|
26 |
+
* **5 times faster** for user agents that do not match anything, without using opcache
|
27 |
+
* Regular expression pattern matches are being grouped by version numbers. The matches are performed
|
28 |
+
in two stages. 1 - standard regular expression match with numbers that differ across source file
|
29 |
+
patterns replaced with single character wildcard match. 2 - a check is performed on found numeric
|
30 |
+
values to see if any of the grouped values are an exact match. If not, then the searching process resumes.
|
31 |
+
This is the main source of the speed optimization. It greatly reduces the source file size and
|
32 |
+
greatly increases matching performance.
|
33 |
+
* Data that is not required to perform matches or return results was removed from the cache files.
|
34 |
+
That includes the source file match strings, which can be recreated from the regex ones, and a large set
|
35 |
+
of browser name entries which were never used because they had parents. Decreasing the cache file size
|
36 |
+
is very important for when you don't use any PHP opcache, because loading large data structures into
|
37 |
+
PHP takes a very long time.
|
38 |
+
* Arrays that are not used in `foreach` loops were serialized in the cache file. This also decreases the time
|
39 |
+
it takes to load the cache file when not using opcache. It's generally a very bad idea to load large arrays
|
40 |
+
with subarrays into PHP. Serializing does a great job when optimizing performance.
|
41 |
+
* The above changes address performance issues brought up in https://github.com/GaretJax/phpbrowscap/issues/26
|
42 |
+
- Bug fixes:
|
43 |
+
* Fixed https://github.com/GaretJax/phpbrowscap/issues/35
|
44 |
+
* Fixed https://github.com/GaretJax/phpbrowscap/issues/34
|
45 |
+
* Fixed https://github.com/GaretJax/phpbrowscap/issues/33
|
46 |
+
* Fixed https://github.com/GaretJax/phpbrowscap/issues/32
|
47 |
+
* Bug https://github.com/GaretJax/phpbrowscap/issues/17 is resolved, although that was fixed even before.
|
48 |
+
* Merged https://github.com/GaretJax/phpbrowscap/pull/25 - those are mainly comment changes but there are also two fixes
|
49 |
+
for `$browscap->clearProxySettings()` method, which did not work properly when an optional `$wrapper` parameter was passed.
|
50 |
+
- Added a new testing class that compares result of `Browscap` to `get_browser()` for as many browsers as possible
|
51 |
+
and checks if there are any differences in parsing. It also compares the parsing speed (in a simplistic way,
|
52 |
+
more advanced tests are available at https://github.com/quentin389/ua-speed-tests).
|
53 |
+
|
54 |
+
### Version 1.0.0 - July 22, 2012
|
55 |
+
- Initial version
|
vendor/browscap/browscap-php/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2007-2010 Jonathan Stoppani <jonathan.stoppani@gmail.com>
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is
|
8 |
+
furnished to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in
|
11 |
+
all copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/browscap/browscap-php/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Browser Capabilities PHP Project
|
2 |
+
================================
|
3 |
+
|
4 |
+
This is a userland replacement for PHP's native `get_browser()` function, which is _officially supported_ by the Browser Capabilities Project.
|
5 |
+
|
6 |
+
Forked from https://github.com/GaretJax/phpbrowscap.
|
7 |
+
|
8 |
+
[![Build Status](https://secure.travis-ci.org/browscap/browscap-php.png?branch=master)](http://travis-ci.org/browsecap/browscap-php) [![Code Coverage](https://scrutinizer-ci.com/g/browscap/browscap-php/badges/coverage.png?s=61cb32ca83d2053ed9b140690b6e18dfa00e4639)](https://scrutinizer-ci.com/g/browscap/browscap-php/) [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/browscap/browscap-php/badges/quality-score.png?s=db1cc1699b1cb6ac6ae46754ef9612217eba5526)](https://scrutinizer-ci.com/g/browscap/browscap-php/)
|
9 |
+
|
10 |
+
Installation
|
11 |
+
------------
|
12 |
+
|
13 |
+
Run the command below to install via Composer
|
14 |
+
|
15 |
+
```shell
|
16 |
+
composer require browscap/browscap-php
|
17 |
+
```
|
18 |
+
|
19 |
+
Then you may identify the current user agent like so:
|
20 |
+
|
21 |
+
```php
|
22 |
+
use phpbrowscap\Browscap;
|
23 |
+
|
24 |
+
$browscap = new Browscap();
|
25 |
+
$info = $browscap->getBrowser();
|
26 |
+
```
|
27 |
+
|
28 |
+
Recommended Setup
|
29 |
+
-----------------
|
30 |
+
|
31 |
+
It is highly recommended that you disable the auto update functionality, and create a background cron script to perform the update. This way, you do not make another request every time. So your usual usage would look like this:
|
32 |
+
|
33 |
+
```php
|
34 |
+
use phpbrowscap\Browscap;
|
35 |
+
|
36 |
+
$browscap = new Browscap($cacheDir);
|
37 |
+
$browscap->doAutoUpdate = false;
|
38 |
+
$info = $browscap->getBrowser();
|
39 |
+
```
|
40 |
+
|
41 |
+
And you could write a cron script such as this, to run once a day:
|
42 |
+
|
43 |
+
```php
|
44 |
+
use phpbrowscap\Browscap;
|
45 |
+
|
46 |
+
$browscap = new Browscap($cacheDir);
|
47 |
+
$browscap->updateCache();
|
48 |
+
```
|
49 |
+
|
50 |
+
Issues and feature requests
|
51 |
+
---------------------------
|
52 |
+
|
53 |
+
Please report your issues and ask for new features on the GitHub Issue Tracker
|
54 |
+
at https://github.com/browscap/browscap-php/issues
|
55 |
+
|
56 |
+
Please report incorrectly identified User Agents and browser detect in the browscap.ini
|
57 |
+
file here: https://github.com/browscap/browscap/issues
|
vendor/browscap/browscap-php/composer.json
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "browscap/browscap-php",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Standalone replacement for php's native get_browser() function",
|
5 |
+
"keywords": [
|
6 |
+
"get_browser",
|
7 |
+
"browser",
|
8 |
+
"capabilities",
|
9 |
+
"user agent"
|
10 |
+
],
|
11 |
+
"homepage": "https://github.com/browscap/browscap-php",
|
12 |
+
"license": "MIT",
|
13 |
+
"authors": [
|
14 |
+
{
|
15 |
+
"name": "Jonathan Stoppani",
|
16 |
+
"email": "jonathan.stoppani@gmail.com"
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"name": "James Titcumb",
|
20 |
+
"email": "james@asgrim.com"
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"name": "Thomas Mueller",
|
24 |
+
"email": "t_mueller_stolzenhain@yahoo.de"
|
25 |
+
}
|
26 |
+
],
|
27 |
+
"support": {
|
28 |
+
"issues": "https://github.com/browscap/browscap-php/issues",
|
29 |
+
"source": "https://github.com/browscap/browscap-php"
|
30 |
+
},
|
31 |
+
"require": {
|
32 |
+
"php": ">=5.3.0"
|
33 |
+
},
|
34 |
+
"require-dev": {
|
35 |
+
"phpunit/phpunit": "*"
|
36 |
+
},
|
37 |
+
"autoload": {
|
38 |
+
"psr-0": {
|
39 |
+
"phpbrowscap\\": "src/"
|
40 |
+
}
|
41 |
+
},
|
42 |
+
"autoload-dev": {
|
43 |
+
"psr-0": {
|
44 |
+
"phpbrowscapTest\\": "tests/"
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
vendor/browscap/browscap-php/composer.lock
ADDED
@@ -0,0 +1,970 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_readme": [
|
3 |
+
"This file locks the dependencies of your project to a known state",
|
4 |
+
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
5 |
+
"This file is @generated automatically"
|
6 |
+
],
|
7 |
+
"hash": "e1d26f56d73bd22d506f6784c0e5561a",
|
8 |
+
"packages": [],
|
9 |
+
"packages-dev": [
|
10 |
+
{
|
11 |
+
"name": "doctrine/instantiator",
|
12 |
+
"version": "1.0.5",
|
13 |
+
"source": {
|
14 |
+
"type": "git",
|
15 |
+
"url": "https://github.com/doctrine/instantiator.git",
|
16 |
+
"reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
|
17 |
+
},
|
18 |
+
"dist": {
|
19 |
+
"type": "zip",
|
20 |
+
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
|
21 |
+
"reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
|
22 |
+
"shasum": ""
|
23 |
+
},
|
24 |
+
"require": {
|
25 |
+
"php": ">=5.3,<8.0-DEV"
|
26 |
+
},
|
27 |
+
"require-dev": {
|
28 |
+
"athletic/athletic": "~0.1.8",
|
29 |
+
"ext-pdo": "*",
|
30 |
+
"ext-phar": "*",
|
31 |
+
"phpunit/phpunit": "~4.0",
|
32 |
+
"squizlabs/php_codesniffer": "~2.0"
|
33 |
+
},
|
34 |
+
"type": "library",
|
35 |
+
"extra": {
|
36 |
+
"branch-alias": {
|
37 |
+
"dev-master": "1.0.x-dev"
|
38 |
+
}
|
39 |
+
},
|
40 |
+
"autoload": {
|
41 |
+
"psr-4": {
|
42 |
+
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
|
43 |
+
}
|
44 |
+
},
|
45 |
+
"notification-url": "https://packagist.org/downloads/",
|
46 |
+
"license": [
|
47 |
+
"MIT"
|
48 |
+
],
|
49 |
+
"authors": [
|
50 |
+
{
|
51 |
+
"name": "Marco Pivetta",
|
52 |
+
"email": "ocramius@gmail.com",
|
53 |
+
"homepage": "http://ocramius.github.com/"
|
54 |
+
}
|
55 |
+
],
|
56 |
+
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
|
57 |
+
"homepage": "https://github.com/doctrine/instantiator",
|
58 |
+
"keywords": [
|
59 |
+
"constructor",
|
60 |
+
"instantiate"
|
61 |
+
],
|
62 |
+
"time": "2015-06-14 21:17:01"
|
63 |
+
},
|
64 |
+
{
|
65 |
+
"name": "phpdocumentor/reflection-docblock",
|
66 |
+
"version": "2.0.4",
|
67 |
+
"source": {
|
68 |
+
"type": "git",
|
69 |
+
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
70 |
+
"reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
|
71 |
+
},
|
72 |
+
"dist": {
|
73 |
+
"type": "zip",
|
74 |
+
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
|
75 |
+
"reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
|
76 |
+
"shasum": ""
|
77 |
+
},
|
78 |
+
"require": {
|
79 |
+
"php": ">=5.3.3"
|
80 |
+
},
|
81 |
+
"require-dev": {
|
82 |
+
"phpunit/phpunit": "~4.0"
|
83 |
+
},
|
84 |
+
"suggest": {
|
85 |
+
"dflydev/markdown": "~1.0",
|
86 |
+
"erusev/parsedown": "~1.0"
|
87 |
+
},
|
88 |
+
"type": "library",
|
89 |
+
"extra": {
|
90 |
+
"branch-alias": {
|
91 |
+
"dev-master": "2.0.x-dev"
|
92 |
+
}
|
93 |
+
},
|
94 |
+
"autoload": {
|
95 |
+
"psr-0": {
|
96 |
+
"phpDocumentor": [
|
97 |
+
"src/"
|
98 |
+
]
|
99 |
+
}
|
100 |
+
},
|
101 |
+
"notification-url": "https://packagist.org/downloads/",
|
102 |
+
"license": [
|
103 |
+
"MIT"
|
104 |
+
],
|
105 |
+
"authors": [
|
106 |
+
{
|
107 |
+
"name": "Mike van Riel",
|
108 |
+
"email": "mike.vanriel@naenius.com"
|
109 |
+
}
|
110 |
+
],
|
111 |
+
"time": "2015-02-03 12:10:50"
|
112 |
+
},
|
113 |
+
{
|
114 |
+
"name": "phpspec/prophecy",
|
115 |
+
"version": "v1.4.1",
|
116 |
+
"source": {
|
117 |
+
"type": "git",
|
118 |
+
"url": "https://github.com/phpspec/prophecy.git",
|
119 |
+
"reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373"
|
120 |
+
},
|
121 |
+
"dist": {
|
122 |
+
"type": "zip",
|
123 |
+
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373",
|
124 |
+
"reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373",
|
125 |
+
"shasum": ""
|
126 |
+
},
|
127 |
+
"require": {
|
128 |
+
"doctrine/instantiator": "^1.0.2",
|
129 |
+
"phpdocumentor/reflection-docblock": "~2.0",
|
130 |
+
"sebastian/comparator": "~1.1"
|
131 |
+
},
|
132 |
+
"require-dev": {
|
133 |
+
"phpspec/phpspec": "~2.0"
|
134 |
+
},
|
135 |
+
"type": "library",
|
136 |
+
"extra": {
|
137 |
+
"branch-alias": {
|
138 |
+
"dev-master": "1.4.x-dev"
|
139 |
+
}
|
140 |
+
},
|
141 |
+
"autoload": {
|
142 |
+
"psr-0": {
|
143 |
+
"Prophecy\\": "src/"
|
144 |
+
}
|
145 |
+
},
|
146 |
+
"notification-url": "https://packagist.org/downloads/",
|
147 |
+
"license": [
|
148 |
+
"MIT"
|
149 |
+
],
|
150 |
+
"authors": [
|
151 |
+
{
|
152 |
+
"name": "Konstantin Kudryashov",
|
153 |
+
"email": "ever.zet@gmail.com",
|
154 |
+
"homepage": "http://everzet.com"
|
155 |
+
},
|
156 |
+
{
|
157 |
+
"name": "Marcello Duarte",
|
158 |
+
"email": "marcello.duarte@gmail.com"
|
159 |
+
}
|
160 |
+
],
|
161 |
+
"description": "Highly opinionated mocking framework for PHP 5.3+",
|
162 |
+
"homepage": "https://github.com/phpspec/prophecy",
|
163 |
+
"keywords": [
|
164 |
+
"Double",
|
165 |
+
"Dummy",
|
166 |
+
"fake",
|
167 |
+
"mock",
|
168 |
+
"spy",
|
169 |
+
"stub"
|
170 |
+
],
|
171 |
+
"time": "2015-04-27 22:15:08"
|
172 |
+
},
|
173 |
+
{
|
174 |
+
"name": "phpunit/php-code-coverage",
|
175 |
+
"version": "2.1.6",
|
176 |
+
"source": {
|
177 |
+
"type": "git",
|
178 |
+
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
179 |
+
"reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44"
|
180 |
+
},
|
181 |
+
"dist": {
|
182 |
+
"type": "zip",
|
183 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
|
184 |
+
"reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
|
185 |
+
"shasum": ""
|
186 |
+
},
|
187 |
+
"require": {
|
188 |
+
"php": ">=5.3.3",
|
189 |
+
"phpunit/php-file-iterator": "~1.3",
|
190 |
+
"phpunit/php-text-template": "~1.2",
|
191 |
+
"phpunit/php-token-stream": "~1.3",
|
192 |
+
"sebastian/environment": "~1.0",
|
193 |
+
"sebastian/version": "~1.0"
|
194 |
+
},
|
195 |
+
"require-dev": {
|
196 |
+
"ext-xdebug": ">=2.1.4",
|
197 |
+
"phpunit/phpunit": "~4"
|
198 |
+
},
|
199 |
+
"suggest": {
|
200 |
+
"ext-dom": "*",
|
201 |
+
"ext-xdebug": ">=2.2.1",
|
202 |
+
"ext-xmlwriter": "*"
|
203 |
+
},
|
204 |
+
"type": "library",
|
205 |
+
"extra": {
|
206 |
+
"branch-alias": {
|
207 |
+
"dev-master": "2.1.x-dev"
|
208 |
+
}
|
209 |
+
},
|
210 |
+
"autoload": {
|
211 |
+
"classmap": [
|
212 |
+
"src/"
|
213 |
+
]
|
214 |
+
},
|
215 |
+
"notification-url": "https://packagist.org/downloads/",
|
216 |
+
"license": [
|
217 |
+
"BSD-3-Clause"
|
218 |
+
],
|
219 |
+
"authors": [
|
220 |
+
{
|
221 |
+
"name": "Sebastian Bergmann",
|
222 |
+
"email": "sb@sebastian-bergmann.de",
|
223 |
+
"role": "lead"
|
224 |
+
}
|
225 |
+
],
|
226 |
+
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
|
227 |
+
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
|
228 |
+
"keywords": [
|
229 |
+
"coverage",
|
230 |
+
"testing",
|
231 |
+
"xunit"
|
232 |
+
],
|
233 |
+
"time": "2015-06-19 07:11:55"
|
234 |
+
},
|
235 |
+
{
|
236 |
+
"name": "phpunit/php-file-iterator",
|
237 |
+
"version": "1.4.0",
|
238 |
+
"source": {
|
239 |
+
"type": "git",
|
240 |
+
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
|
241 |
+
"reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
|
242 |
+
},
|
243 |
+
"dist": {
|
244 |
+
"type": "zip",
|
245 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
|
246 |
+
"reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
|
247 |
+
"shasum": ""
|
248 |
+
},
|
249 |
+
"require": {
|
250 |
+
"php": ">=5.3.3"
|
251 |
+
},
|
252 |
+
"type": "library",
|
253 |
+
"extra": {
|
254 |
+
"branch-alias": {
|
255 |
+
"dev-master": "1.4.x-dev"
|
256 |
+
}
|
257 |
+
},
|
258 |
+
"autoload": {
|
259 |
+
"classmap": [
|
260 |
+
"src/"
|
261 |
+
]
|
262 |
+
},
|
263 |
+
"notification-url": "https://packagist.org/downloads/",
|
264 |
+
"license": [
|
265 |
+
"BSD-3-Clause"
|
266 |
+
],
|
267 |
+
"authors": [
|
268 |
+
{
|
269 |
+
"name": "Sebastian Bergmann",
|
270 |
+
"email": "sb@sebastian-bergmann.de",
|
271 |
+
"role": "lead"
|
272 |
+
}
|
273 |
+
],
|
274 |
+
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
|
275 |
+
"homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
|
276 |
+
"keywords": [
|
277 |
+
"filesystem",
|
278 |
+
"iterator"
|
279 |
+
],
|
280 |
+
"time": "2015-04-02 05:19:05"
|
281 |
+
},
|
282 |
+
{
|
283 |
+
"name": "phpunit/php-text-template",
|
284 |
+
"version": "1.2.1",
|
285 |
+
"source": {
|
286 |
+
"type": "git",
|
287 |
+
"url": "https://github.com/sebastianbergmann/php-text-template.git",
|
288 |
+
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
|
289 |
+
},
|
290 |
+
"dist": {
|
291 |
+
"type": "zip",
|
292 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
|
293 |
+
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
|
294 |
+
"shasum": ""
|
295 |
+
},
|
296 |
+
"require": {
|
297 |
+
"php": ">=5.3.3"
|
298 |
+
},
|
299 |
+
"type": "library",
|
300 |
+
"autoload": {
|
301 |
+
"classmap": [
|
302 |
+
"src/"
|
303 |
+
]
|
304 |
+
},
|
305 |
+
"notification-url": "https://packagist.org/downloads/",
|
306 |
+
"license": [
|
307 |
+
"BSD-3-Clause"
|
308 |
+
],
|
309 |
+
"authors": [
|
310 |
+
{
|
311 |
+
"name": "Sebastian Bergmann",
|
312 |
+
"email": "sebastian@phpunit.de",
|
313 |
+
"role": "lead"
|
314 |
+
}
|
315 |
+
],
|
316 |
+
"description": "Simple template engine.",
|
317 |
+
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
|
318 |
+
"keywords": [
|
319 |
+
"template"
|
320 |
+
],
|
321 |
+
"time": "2015-06-21 13:50:34"
|
322 |
+
},
|
323 |
+
{
|
324 |
+
"name": "phpunit/php-timer",
|
325 |
+
"version": "1.0.6",
|
326 |
+
"source": {
|
327 |
+
"type": "git",
|
328 |
+
"url": "https://github.com/sebastianbergmann/php-timer.git",
|
329 |
+
"reference": "83fe1bdc5d47658b727595c14da140da92b3d66d"
|
330 |
+
},
|
331 |
+
"dist": {
|
332 |
+
"type": "zip",
|
333 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d",
|
334 |
+
"reference": "83fe1bdc5d47658b727595c14da140da92b3d66d",
|
335 |
+
"shasum": ""
|
336 |
+
},
|
337 |
+
"require": {
|
338 |
+
"php": ">=5.3.3"
|
339 |
+
},
|
340 |
+
"type": "library",
|
341 |
+
"autoload": {
|
342 |
+
"classmap": [
|
343 |
+
"src/"
|
344 |
+
]
|
345 |
+
},
|
346 |
+
"notification-url": "https://packagist.org/downloads/",
|
347 |
+
"license": [
|
348 |
+
"BSD-3-Clause"
|
349 |
+
],
|
350 |
+
"authors": [
|
351 |
+
{
|
352 |
+
"name": "Sebastian Bergmann",
|
353 |
+
"email": "sb@sebastian-bergmann.de",
|
354 |
+
"role": "lead"
|
355 |
+
}
|
356 |
+
],
|
357 |
+
"description": "Utility class for timing",
|
358 |
+
"homepage": "https://github.com/sebastianbergmann/php-timer/",
|
359 |
+
"keywords": [
|
360 |
+
"timer"
|
361 |
+
],
|
362 |
+
"time": "2015-06-13 07:35:30"
|
363 |
+
},
|
364 |
+
{
|
365 |
+
"name": "phpunit/php-token-stream",
|
366 |
+
"version": "1.4.3",
|
367 |
+
"source": {
|
368 |
+
"type": "git",
|
369 |
+
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
|
370 |
+
"reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
|
371 |
+
},
|
372 |
+
"dist": {
|
373 |
+
"type": "zip",
|
374 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
|
375 |
+
"reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
|
376 |
+
"shasum": ""
|
377 |
+
},
|
378 |
+
"require": {
|
379 |
+
"ext-tokenizer": "*",
|
380 |
+
"php": ">=5.3.3"
|
381 |
+
},
|
382 |
+
"require-dev": {
|
383 |
+
"phpunit/phpunit": "~4.2"
|
384 |
+
},
|
385 |
+
"type": "library",
|
386 |
+
"extra": {
|
387 |
+
"branch-alias": {
|
388 |
+
"dev-master": "1.4-dev"
|
389 |
+
}
|
390 |
+
},
|
391 |
+
"autoload": {
|
392 |
+
"classmap": [
|
393 |
+
"src/"
|
394 |
+
]
|
395 |
+
},
|
396 |
+
"notification-url": "https://packagist.org/downloads/",
|
397 |
+
"license": [
|
398 |
+
"BSD-3-Clause"
|
399 |
+
],
|
400 |
+
"authors": [
|
401 |
+
{
|
402 |
+
"name": "Sebastian Bergmann",
|
403 |
+
"email": "sebastian@phpunit.de"
|
404 |
+
}
|
405 |
+
],
|
406 |
+
"description": "Wrapper around PHP's tokenizer extension.",
|
407 |
+
"homepage": "https://github.com/sebastianbergmann/php-token-stream/",
|
408 |
+
"keywords": [
|
409 |
+
"tokenizer"
|
410 |
+
],
|
411 |
+
"time": "2015-06-19 03:43:16"
|
412 |
+
},
|
413 |
+
{
|
414 |
+
"name": "phpunit/phpunit",
|
415 |
+
"version": "4.7.5",
|
416 |
+
"source": {
|
417 |
+
"type": "git",
|
418 |
+
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
419 |
+
"reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc"
|
420 |
+
},
|
421 |
+
"dist": {
|
422 |
+
"type": "zip",
|
423 |
+
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f6701ef3faea759acd1910a7751d8d102a7fd5bc",
|
424 |
+
"reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc",
|
425 |
+
"shasum": ""
|
426 |
+
},
|
427 |
+
"require": {
|
428 |
+
"ext-dom": "*",
|
429 |
+
"ext-json": "*",
|
430 |
+
"ext-pcre": "*",
|
431 |
+
"ext-reflection": "*",
|
432 |
+
"ext-spl": "*",
|
433 |
+
"php": ">=5.3.3",
|
434 |
+
"phpspec/prophecy": "~1.3,>=1.3.1",
|
435 |
+
"phpunit/php-code-coverage": "~2.1",
|
436 |
+
"phpunit/php-file-iterator": "~1.4",
|
437 |
+
"phpunit/php-text-template": "~1.2",
|
438 |
+
"phpunit/php-timer": ">=1.0.6",
|
439 |
+
"phpunit/phpunit-mock-objects": "~2.3",
|
440 |
+
"sebastian/comparator": "~1.1",
|
441 |
+
"sebastian/diff": "~1.2",
|
442 |
+
"sebastian/environment": "~1.2",
|
443 |
+
"sebastian/exporter": "~1.2",
|
444 |
+
"sebastian/global-state": "~1.0",
|
445 |
+
"sebastian/version": "~1.0",
|
446 |
+
"symfony/yaml": "~2.1|~3.0"
|
447 |
+
},
|
448 |
+
"suggest": {
|
449 |
+
"phpunit/php-invoker": "~1.1"
|
450 |
+
},
|
451 |
+
"bin": [
|
452 |
+
"phpunit"
|
453 |
+
],
|
454 |
+
"type": "library",
|
455 |
+
"extra": {
|
456 |
+
"branch-alias": {
|
457 |
+
"dev-master": "4.7.x-dev"
|
458 |
+
}
|
459 |
+
},
|
460 |
+
"autoload": {
|
461 |
+
"classmap": [
|
462 |
+
"src/"
|
463 |
+
]
|
464 |
+
},
|
465 |
+
"notification-url": "https://packagist.org/downloads/",
|
466 |
+
"license": [
|
467 |
+
"BSD-3-Clause"
|
468 |
+
],
|
469 |
+
"authors": [
|
470 |
+
{
|
471 |
+
"name": "Sebastian Bergmann",
|
472 |
+
"email": "sebastian@phpunit.de",
|
473 |
+
"role": "lead"
|
474 |
+
}
|
475 |
+
],
|
476 |
+
"description": "The PHP Unit Testing framework.",
|
477 |
+
"homepage": "https://phpunit.de/",
|
478 |
+
"keywords": [
|
479 |
+
"phpunit",
|
480 |
+
"testing",
|
481 |
+
"xunit"
|
482 |
+
],
|
483 |
+
"time": "2015-06-21 07:23:36"
|
484 |
+
},
|
485 |
+
{
|
486 |
+
"name": "phpunit/phpunit-mock-objects",
|
487 |
+
"version": "2.3.4",
|
488 |
+
"source": {
|
489 |
+
"type": "git",
|
490 |
+
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
|
491 |
+
"reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35"
|
492 |
+
},
|
493 |
+
"dist": {
|
494 |
+
"type": "zip",
|
495 |
+
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/92408bb1968a81b3217a6fdf6c1a198da83caa35",
|
496 |
+
"reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35",
|
497 |
+
"shasum": ""
|
498 |
+
},
|
499 |
+
"require": {
|
500 |
+
"doctrine/instantiator": "~1.0,>=1.0.2",
|
501 |
+
"php": ">=5.3.3",
|
502 |
+
"phpunit/php-text-template": "~1.2"
|
503 |
+
},
|
504 |
+
"require-dev": {
|
505 |
+
"phpunit/phpunit": "~4.4"
|
506 |
+
},
|
507 |
+
"suggest": {
|
508 |
+
"ext-soap": "*"
|
509 |
+
},
|
510 |
+
"type": "library",
|
511 |
+
"extra": {
|
512 |
+
"branch-alias": {
|
513 |
+
"dev-master": "2.3.x-dev"
|
514 |
+
}
|
515 |
+
},
|
516 |
+
"autoload": {
|
517 |
+
"classmap": [
|
518 |
+
"src/"
|
519 |
+
]
|
520 |
+
},
|
521 |
+
"notification-url": "https://packagist.org/downloads/",
|
522 |
+
"license": [
|
523 |
+
"BSD-3-Clause"
|
524 |
+
],
|
525 |
+
"authors": [
|
526 |
+
{
|
527 |
+
"name": "Sebastian Bergmann",
|
528 |
+
"email": "sb@sebastian-bergmann.de",
|
529 |
+
"role": "lead"
|
530 |
+
}
|
531 |
+
],
|
532 |
+
"description": "Mock Object library for PHPUnit",
|
533 |
+
"homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
|
534 |
+
"keywords": [
|
535 |
+
"mock",
|
536 |
+
"xunit"
|
537 |
+
],
|
538 |
+
"time": "2015-06-11 15:55:48"
|
539 |
+
},
|
540 |
+
{
|
541 |
+
"name": "sebastian/comparator",
|
542 |
+
"version": "1.1.1",
|
543 |
+
"source": {
|
544 |
+
"type": "git",
|
545 |
+
"url": "https://github.com/sebastianbergmann/comparator.git",
|
546 |
+
"reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
|
547 |
+
},
|
548 |
+
"dist": {
|
549 |
+
"type": "zip",
|
550 |
+
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
|
551 |
+
"reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
|
552 |
+
"shasum": ""
|
553 |
+
},
|
554 |
+
"require": {
|
555 |
+
"php": ">=5.3.3",
|
556 |
+
"sebastian/diff": "~1.2",
|
557 |
+
"sebastian/exporter": "~1.2"
|
558 |
+
},
|
559 |
+
"require-dev": {
|
560 |
+
"phpunit/phpunit": "~4.4"
|
561 |
+
},
|
562 |
+
"type": "library",
|
563 |
+
"extra": {
|
564 |
+
"branch-alias": {
|
565 |
+
"dev-master": "1.1.x-dev"
|
566 |
+
}
|
567 |
+
},
|
568 |
+
"autoload": {
|
569 |
+
"classmap": [
|
570 |
+
"src/"
|
571 |
+
]
|
572 |
+
},
|
573 |
+
"notification-url": "https://packagist.org/downloads/",
|
574 |
+
"license": [
|
575 |
+
"BSD-3-Clause"
|
576 |
+
],
|
577 |
+
"authors": [
|
578 |
+
{
|
579 |
+
"name": "Jeff Welch",
|
580 |
+
"email": "whatthejeff@gmail.com"
|
581 |
+
},
|
582 |
+
{
|
583 |
+
"name": "Volker Dusch",
|
584 |
+
"email": "github@wallbash.com"
|
585 |
+
},
|
586 |
+
{
|
587 |
+
"name": "Bernhard Schussek",
|
588 |
+
"email": "bschussek@2bepublished.at"
|
589 |
+
},
|
590 |
+
{
|
591 |
+
"name": "Sebastian Bergmann",
|
592 |
+
"email": "sebastian@phpunit.de"
|
593 |
+
}
|
594 |
+
],
|
595 |
+
"description": "Provides the functionality to compare PHP values for equality",
|
596 |
+
"homepage": "http://www.github.com/sebastianbergmann/comparator",
|
597 |
+
"keywords": [
|
598 |
+
"comparator",
|
599 |
+
"compare",
|
600 |
+
"equality"
|
601 |
+
],
|
602 |
+
"time": "2015-01-29 16:28:08"
|
603 |
+
},
|
604 |
+
{
|
605 |
+
"name": "sebastian/diff",
|
606 |
+
"version": "1.3.0",
|
607 |
+
"source": {
|
608 |
+
"type": "git",
|
609 |
+
"url": "https://github.com/sebastianbergmann/diff.git",
|
610 |
+
"reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
|
611 |
+
},
|
612 |
+
"dist": {
|
613 |
+
"type": "zip",
|
614 |
+
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
|
615 |
+
"reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
|
616 |
+
"shasum": ""
|
617 |
+
},
|
618 |
+
"require": {
|
619 |
+
"php": ">=5.3.3"
|
620 |
+
},
|
621 |
+
"require-dev": {
|
622 |
+
"phpunit/phpunit": "~4.2"
|
623 |
+
},
|
624 |
+
"type": "library",
|
625 |
+
"extra": {
|
626 |
+
"branch-alias": {
|
627 |
+
"dev-master": "1.3-dev"
|
628 |
+
}
|
629 |
+
},
|
630 |
+
"autoload": {
|
631 |
+
"classmap": [
|
632 |
+
"src/"
|
633 |
+
]
|
634 |
+
},
|
635 |
+
"notification-url": "https://packagist.org/downloads/",
|
636 |
+
"license": [
|
637 |
+
"BSD-3-Clause"
|
638 |
+
],
|
639 |
+
"authors": [
|
640 |
+
{
|
641 |
+
"name": "Kore Nordmann",
|
642 |
+
"email": "mail@kore-nordmann.de"
|
643 |
+
},
|
644 |
+
{
|
645 |
+
"name": "Sebastian Bergmann",
|
646 |
+
"email": "sebastian@phpunit.de"
|
647 |
+
}
|
648 |
+
],
|
649 |
+
"description": "Diff implementation",
|
650 |
+
"homepage": "http://www.github.com/sebastianbergmann/diff",
|
651 |
+
"keywords": [
|
652 |
+
"diff"
|
653 |
+
],
|
654 |
+
"time": "2015-02-22 15:13:53"
|
655 |
+
},
|
656 |
+
{
|
657 |
+
"name": "sebastian/environment",
|
658 |
+
"version": "1.2.2",
|
659 |
+
"source": {
|
660 |
+
"type": "git",
|
661 |
+
"url": "https://github.com/sebastianbergmann/environment.git",
|
662 |
+
"reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
|
663 |
+
},
|
664 |
+
"dist": {
|
665 |
+
"type": "zip",
|
666 |
+
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
|
667 |
+
"reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
|
668 |
+
"shasum": ""
|
669 |
+
},
|
670 |
+
"require": {
|
671 |
+
"php": ">=5.3.3"
|
672 |
+
},
|
673 |
+
"require-dev": {
|
674 |
+
"phpunit/phpunit": "~4.4"
|
675 |
+
},
|
676 |
+
"type": "library",
|
677 |
+
"extra": {
|
678 |
+
"branch-alias": {
|
679 |
+
"dev-master": "1.3.x-dev"
|
680 |
+
}
|
681 |
+
},
|
682 |
+
"autoload": {
|
683 |
+
"classmap": [
|
684 |
+
"src/"
|
685 |
+
]
|
686 |
+
},
|
687 |
+
"notification-url": "https://packagist.org/downloads/",
|
688 |
+
"license": [
|
689 |
+
"BSD-3-Clause"
|
690 |
+
],
|
691 |
+
"authors": [
|
692 |
+
{
|
693 |
+
"name": "Sebastian Bergmann",
|
694 |
+
"email": "sebastian@phpunit.de"
|
695 |
+
}
|
696 |
+
],
|
697 |
+
"description": "Provides functionality to handle HHVM/PHP environments",
|
698 |
+
"homepage": "http://www.github.com/sebastianbergmann/environment",
|
699 |
+
"keywords": [
|
700 |
+
"Xdebug",
|
701 |
+
"environment",
|
702 |
+
"hhvm"
|
703 |
+
],
|
704 |
+
"time": "2015-01-01 10:01:08"
|
705 |
+
},
|
706 |
+
{
|
707 |
+
"name": "sebastian/exporter",
|
708 |
+
"version": "1.2.0",
|
709 |
+
"source": {
|
710 |
+
"type": "git",
|
711 |
+
"url": "https://github.com/sebastianbergmann/exporter.git",
|
712 |
+
"reference": "84839970d05254c73cde183a721c7af13aede943"
|
713 |
+
},
|
714 |
+
"dist": {
|
715 |
+
"type": "zip",
|
716 |
+
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
|
717 |
+
"reference": "84839970d05254c73cde183a721c7af13aede943",
|
718 |
+
"shasum": ""
|
719 |
+
},
|
720 |
+
"require": {
|
721 |
+
"php": ">=5.3.3",
|
722 |
+
"sebastian/recursion-context": "~1.0"
|
723 |
+
},
|
724 |
+
"require-dev": {
|
725 |
+
"phpunit/phpunit": "~4.4"
|
726 |
+
},
|
727 |
+
"type": "library",
|
728 |
+
"extra": {
|
729 |
+
"branch-alias": {
|
730 |
+
"dev-master": "1.2.x-dev"
|
731 |
+
}
|
732 |
+
},
|
733 |
+
"autoload": {
|
734 |
+
"classmap": [
|
735 |
+
"src/"
|
736 |
+
]
|
737 |
+
},
|
738 |
+
"notification-url": "https://packagist.org/downloads/",
|
739 |
+
"license": [
|
740 |
+
"BSD-3-Clause"
|
741 |
+
],
|
742 |
+
"authors": [
|
743 |
+
{
|
744 |
+
"name": "Jeff Welch",
|
745 |
+
"email": "whatthejeff@gmail.com"
|
746 |
+
},
|
747 |
+
{
|
748 |
+
"name": "Volker Dusch",
|
749 |
+
"email": "github@wallbash.com"
|
750 |
+
},
|
751 |
+
{
|
752 |
+
"name": "Bernhard Schussek",
|
753 |
+
"email": "bschussek@2bepublished.at"
|
754 |
+
},
|
755 |
+
{
|
756 |
+
"name": "Sebastian Bergmann",
|
757 |
+
"email": "sebastian@phpunit.de"
|
758 |
+
},
|
759 |
+
{
|
760 |
+
"name": "Adam Harvey",
|
761 |
+
"email": "aharvey@php.net"
|
762 |
+
}
|
763 |
+
],
|
764 |
+
"description": "Provides the functionality to export PHP variables for visualization",
|
765 |
+
"homepage": "http://www.github.com/sebastianbergmann/exporter",
|
766 |
+
"keywords": [
|
767 |
+
"export",
|
768 |
+
"exporter"
|
769 |
+
],
|
770 |
+
"time": "2015-01-27 07:23:06"
|
771 |
+
},
|
772 |
+
{
|
773 |
+
"name": "sebastian/global-state",
|
774 |
+
"version": "1.0.0",
|
775 |
+
"source": {
|
776 |
+
"type": "git",
|
777 |
+
"url": "https://github.com/sebastianbergmann/global-state.git",
|
778 |
+
"reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01"
|
779 |
+
},
|
780 |
+
"dist": {
|
781 |
+
"type": "zip",
|
782 |
+
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
|
783 |
+
"reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
|
784 |
+
"shasum": ""
|
785 |
+
},
|
786 |
+
"require": {
|
787 |
+
"php": ">=5.3.3"
|
788 |
+
},
|
789 |
+
"require-dev": {
|
790 |
+
"phpunit/phpunit": "~4.2"
|
791 |
+
},
|
792 |
+
"suggest": {
|
793 |
+
"ext-uopz": "*"
|
794 |
+
},
|
795 |
+
"type": "library",
|
796 |
+
"extra": {
|
797 |
+
"branch-alias": {
|
798 |
+
"dev-master": "1.0-dev"
|
799 |
+
}
|
800 |
+
},
|
801 |
+
"autoload": {
|
802 |
+
"classmap": [
|
803 |
+
"src/"
|
804 |
+
]
|
805 |
+
},
|
806 |
+
"notification-url": "https://packagist.org/downloads/",
|
807 |
+
"license": [
|
808 |
+
"BSD-3-Clause"
|
809 |
+
],
|
810 |
+
"authors": [
|
811 |
+
{
|
812 |
+
"name": "Sebastian Bergmann",
|
813 |
+
"email": "sebastian@phpunit.de"
|
814 |
+
}
|
815 |
+
],
|
816 |
+
"description": "Snapshotting of global state",
|
817 |
+
"homepage": "http://www.github.com/sebastianbergmann/global-state",
|
818 |
+
"keywords": [
|
819 |
+
"global state"
|
820 |
+
],
|
821 |
+
"time": "2014-10-06 09:23:50"
|
822 |
+
},
|
823 |
+
{
|
824 |
+
"name": "sebastian/recursion-context",
|
825 |
+
"version": "1.0.0",
|
826 |
+
"source": {
|
827 |
+
"type": "git",
|
828 |
+
"url": "https://github.com/sebastianbergmann/recursion-context.git",
|
829 |
+
"reference": "3989662bbb30a29d20d9faa04a846af79b276252"
|
830 |
+
},
|
831 |
+
"dist": {
|
832 |
+
"type": "zip",
|
833 |
+
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
|
834 |
+
"reference": "3989662bbb30a29d20d9faa04a846af79b276252",
|
835 |
+
"shasum": ""
|
836 |
+
},
|
837 |
+
"require": {
|
838 |
+
"php": ">=5.3.3"
|
839 |
+
},
|
840 |
+
"require-dev": {
|
841 |
+
"phpunit/phpunit": "~4.4"
|
842 |
+
},
|
843 |
+
"type": "library",
|
844 |
+
"extra": {
|
845 |
+
"branch-alias": {
|
846 |
+
"dev-master": "1.0.x-dev"
|
847 |
+
}
|
848 |
+
},
|
849 |
+
"autoload": {
|
850 |
+
"classmap": [
|
851 |
+
"src/"
|
852 |
+
]
|
853 |
+
},
|
854 |
+
"notification-url": "https://packagist.org/downloads/",
|
855 |
+
"license": [
|
856 |
+
"BSD-3-Clause"
|
857 |
+
],
|
858 |
+
"authors": [
|
859 |
+
{
|
860 |
+
"name": "Jeff Welch",
|
861 |
+
"email": "whatthejeff@gmail.com"
|
862 |
+
},
|
863 |
+
{
|
864 |
+
"name": "Sebastian Bergmann",
|
865 |
+
"email": "sebastian@phpunit.de"
|
866 |
+
},
|
867 |
+
{
|
868 |
+
"name": "Adam Harvey",
|
869 |
+
"email": "aharvey@php.net"
|
870 |
+
}
|
871 |
+
],
|
872 |
+
"description": "Provides functionality to recursively process PHP variables",
|
873 |
+
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
|
874 |
+
"time": "2015-01-24 09:48:32"
|
875 |
+
},
|
876 |
+
{
|
877 |
+
"name": "sebastian/version",
|
878 |
+
"version": "1.0.6",
|
879 |
+
"source": {
|
880 |
+
"type": "git",
|
881 |
+
"url": "https://github.com/sebastianbergmann/version.git",
|
882 |
+
"reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
|
883 |
+
},
|
884 |
+
"dist": {
|
885 |
+
"type": "zip",
|
886 |
+
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
|
887 |
+
"reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
|
888 |
+
"shasum": ""
|
889 |
+
},
|
890 |
+
"type": "library",
|
891 |
+
"autoload": {
|
892 |
+
"classmap": [
|
893 |
+
"src/"
|
894 |
+
]
|
895 |
+
},
|
896 |
+
"notification-url": "https://packagist.org/downloads/",
|
897 |
+
"license": [
|
898 |
+
"BSD-3-Clause"
|
899 |
+
],
|
900 |
+
"authors": [
|
901 |
+
{
|
902 |
+
"name": "Sebastian Bergmann",
|
903 |
+
"email": "sebastian@phpunit.de",
|
904 |
+
"role": "lead"
|
905 |
+
}
|
906 |
+
],
|
907 |
+
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
|
908 |
+
"homepage": "https://github.com/sebastianbergmann/version",
|
909 |
+
"time": "2015-06-21 13:59:46"
|
910 |
+
},
|
911 |
+
{
|
912 |
+
"name": "symfony/yaml",
|
913 |
+
"version": "v2.7.1",
|
914 |
+
"source": {
|
915 |
+
"type": "git",
|
916 |
+
"url": "https://github.com/symfony/Yaml.git",
|
917 |
+
"reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160"
|
918 |
+
},
|
919 |
+
"dist": {
|
920 |
+
"type": "zip",
|
921 |
+
"url": "https://api.github.com/repos/symfony/Yaml/zipball/9808e75c609a14f6db02f70fccf4ca4aab53c160",
|
922 |
+
"reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160",
|
923 |
+
"shasum": ""
|
924 |
+
},
|
925 |
+
"require": {
|
926 |
+
"php": ">=5.3.9"
|
927 |
+
},
|
928 |
+
"require-dev": {
|
929 |
+
"symfony/phpunit-bridge": "~2.7"
|
930 |
+
},
|
931 |
+
"type": "library",
|
932 |
+
"extra": {
|
933 |
+
"branch-alias": {
|
934 |
+
"dev-master": "2.7-dev"
|
935 |
+
}
|
936 |
+
},
|
937 |
+
"autoload": {
|
938 |
+
"psr-4": {
|
939 |
+
"Symfony\\Component\\Yaml\\": ""
|
940 |
+
}
|
941 |
+
},
|
942 |
+
"notification-url": "https://packagist.org/downloads/",
|
943 |
+
"license": [
|
944 |
+
"MIT"
|
945 |
+
],
|
946 |
+
"authors": [
|
947 |
+
{
|
948 |
+
"name": "Fabien Potencier",
|
949 |
+
"email": "fabien@symfony.com"
|
950 |
+
},
|
951 |
+
{
|
952 |
+
"name": "Symfony Community",
|
953 |
+
"homepage": "https://symfony.com/contributors"
|
954 |
+
}
|
955 |
+
],
|
956 |
+
"description": "Symfony Yaml Component",
|
957 |
+
"homepage": "https://symfony.com",
|
958 |
+
"time": "2015-06-10 15:30:22"
|
959 |
+
}
|
960 |
+
],
|
961 |
+
"aliases": [],
|
962 |
+
"minimum-stability": "stable",
|
963 |
+
"stability-flags": [],
|
964 |
+
"prefer-stable": false,
|
965 |
+
"prefer-lowest": false,
|
966 |
+
"platform": {
|
967 |
+
"php": ">=5.3.0"
|
968 |
+
},
|
969 |
+
"platform-dev": []
|
970 |
+
}
|
vendor/browscap/browscap-php/phpunit.xml
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
|
3 |
+
<phpunit bootstrap="tests/bootstrap.php" colors="true">
|
4 |
+
<testsuites>
|
5 |
+
<testsuite name="phpbrowscap Test Suite">
|
6 |
+
<directory>tests/phpbrowscapTest/</directory>
|
7 |
+
</testsuite>
|
8 |
+
</testsuites>
|
9 |
+
|
10 |
+
<filter>
|
11 |
+
<whitelist>
|
12 |
+
<directory suffix=".php">src/phpbrowscap/</directory>
|
13 |
+
</whitelist>
|
14 |
+
</filter>
|
15 |
+
</phpunit>
|
vendor/browscap/browscap-php/phpunit.xml.dist
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
|
3 |
+
<phpunit bootstrap="tests/bootstrap.php" colors="true">
|
4 |
+
<testsuites>
|
5 |
+
<testsuite name="phpbrowscap Test Suite">
|
6 |
+
<directory>tests/phpbrowscap/</directory>
|
7 |
+
</testsuite>
|
8 |
+
</testsuites>
|
9 |
+
|
10 |
+
<filter>
|
11 |
+
<whitelist>
|
12 |
+
<directory suffix=".php">src/phpbrowscap/</directory>
|
13 |
+
</whitelist>
|
14 |
+
</filter>
|
15 |
+
</phpunit>
|
{includes/classes → vendor/browscap/browscap-php/src/phpbrowscap}/Browscap.php
RENAMED
@@ -41,9 +41,9 @@ class Browscap
|
|
41 |
/**
|
42 |
* Current version of the class.
|
43 |
*/
|
44 |
-
const VERSION = '2.0.
|
45 |
|
46 |
-
const CACHE_FILE_VERSION = '2.0.
|
47 |
|
48 |
/**
|
49 |
* Different ways to access remote and local files.
|
@@ -121,7 +121,7 @@ class Browscap
|
|
121 |
*
|
122 |
* @var string
|
123 |
*/
|
124 |
-
public $userAgent = '
|
125 |
|
126 |
/**
|
127 |
* Flag to enable only lowercase indexes in the result.
|
@@ -250,6 +250,37 @@ class Browscap
|
|
250 |
return $this->_source_version;
|
251 |
}
|
252 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
/**
|
254 |
* XXX parse
|
255 |
*
|
@@ -264,49 +295,31 @@ class Browscap
|
|
264 |
*/
|
265 |
public function getBrowser($user_agent = null, $return_array = false)
|
266 |
{
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
$
|
277 |
-
|
278 |
-
|
279 |
-
$update_cache = true;
|
280 |
-
|
281 |
-
if (file_exists($cache_file) && file_exists($ini_file) && ($interval <= $this->updateInterval)) {
|
282 |
-
if ($this->_loadCache($cache_file)) {
|
283 |
-
$update_cache = false;
|
284 |
-
}
|
285 |
-
}
|
286 |
-
|
287 |
-
if ($update_cache) {
|
288 |
-
try {
|
289 |
-
$this->updateCache();
|
290 |
-
} catch (Exception $e) {
|
291 |
-
if (file_exists($ini_file)) {
|
292 |
-
// Adjust the filemtime to the $errorInterval
|
293 |
-
touch($ini_file, time() - $this->updateInterval + $this->errorInterval);
|
294 |
-
} elseif ($this->silent) {
|
295 |
-
// Return an array if silent mode is active and the ini db doesn't exsist
|
296 |
-
return array();
|
297 |
-
}
|
298 |
-
|
299 |
-
if (!$this->silent) {
|
300 |
-
throw $e;
|
301 |
-
}
|
302 |
}
|
303 |
|
304 |
-
if (!$this->
|
305 |
-
throw
|
306 |
}
|
307 |
}
|
308 |
}
|
309 |
|
|
|
|
|
|
|
|
|
|
|
310 |
// Automatically detect the useragent
|
311 |
if (!isset($user_agent)) {
|
312 |
if (isset($_SERVER['HTTP_USER_AGENT'])) {
|
@@ -513,8 +526,12 @@ class Browscap
|
|
513 |
{
|
514 |
$lockfile = $this->cacheDir . 'cache.lock';
|
515 |
|
516 |
-
|
517 |
-
|
|
|
|
|
|
|
|
|
518 |
}
|
519 |
|
520 |
$ini_path = $this->cacheDir . $this->iniFilename;
|
@@ -522,7 +539,7 @@ class Browscap
|
|
522 |
|
523 |
// Choose the right url
|
524 |
if ($this->_getUpdateMethod() == self::UPDATE_LOCAL) {
|
525 |
-
$url = $this->localFile;
|
526 |
} else {
|
527 |
$url = $this->remoteIniUrl;
|
528 |
}
|
@@ -557,7 +574,10 @@ class Browscap
|
|
557 |
$user_agents_keys = array_flip($tmp_user_agents);
|
558 |
$properties_keys = array_flip($this->_properties);
|
559 |
|
560 |
-
$tmp_patterns
|
|
|
|
|
|
|
561 |
|
562 |
foreach ($tmp_user_agents as $i => $user_agent) {
|
563 |
|
@@ -592,13 +612,12 @@ class Browscap
|
|
592 |
};
|
593 |
|
594 |
$browser = array();
|
595 |
-
foreach ($browsers[$user_agent] as $
|
596 |
-
if (!isset($properties_keys[$
|
597 |
continue;
|
598 |
}
|
599 |
|
600 |
-
$
|
601 |
-
$browser[$key] = $value;
|
602 |
}
|
603 |
|
604 |
$this->_browsers[] = $browser;
|
@@ -622,18 +641,22 @@ class Browscap
|
|
622 |
}
|
623 |
}
|
624 |
|
625 |
-
//
|
626 |
-
$cache = $this->_buildCache();
|
627 |
$dir = dirname($cache_path);
|
628 |
|
629 |
// "tempnam" did not work with VFSStream for tests
|
630 |
$tmpFile = $dir . '/temp_' . md5(time() . basename($cache_path));
|
631 |
|
632 |
// asume that all will be ok
|
633 |
-
if (false ===
|
|
|
|
|
|
|
|
|
634 |
// writing to the temparary file failed
|
635 |
-
throw new Exception('
|
636 |
}
|
|
|
637 |
|
638 |
if (false === rename($tmpFile, $cache_path)) {
|
639 |
// renaming file failed, remove temp file
|
@@ -642,7 +665,10 @@ class Browscap
|
|
642 |
throw new Exception('could not rename temporary file to the cache file');
|
643 |
}
|
644 |
|
|
|
|
|
645 |
@unlink($lockfile);
|
|
|
646 |
|
647 |
return true;
|
648 |
}
|
@@ -814,28 +840,61 @@ class Browscap
|
|
814 |
}
|
815 |
|
816 |
/**
|
817 |
-
* Parses the array to cache and
|
|
|
|
|
818 |
*
|
819 |
-
* @return
|
820 |
*/
|
821 |
-
protected function _buildCache()
|
822 |
{
|
823 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
824 |
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
829 |
|
830 |
-
return
|
831 |
-
$cacheTpl,
|
832 |
-
"'" . $this->_source_version . "'",
|
833 |
-
"'" . self::CACHE_FILE_VERSION . "'",
|
834 |
-
$propertiesArray,
|
835 |
-
$browsersArray,
|
836 |
-
$userAgentsArray,
|
837 |
-
$patternsArray
|
838 |
-
);
|
839 |
}
|
840 |
|
841 |
/**
|
@@ -866,6 +925,11 @@ class Browscap
|
|
866 |
*/
|
867 |
protected function _getRemoteIniFile($url, $path)
|
868 |
{
|
|
|
|
|
|
|
|
|
|
|
869 |
// Check version
|
870 |
if (file_exists($path) && filesize($path)) {
|
871 |
$local_tmstp = filemtime($path);
|
@@ -876,7 +940,7 @@ class Browscap
|
|
876 |
$remote_tmstp = $this->_getRemoteMTime();
|
877 |
}
|
878 |
|
879 |
-
if ($remote_tmstp
|
880 |
// No update needed, return
|
881 |
touch($path);
|
882 |
|
@@ -884,47 +948,65 @@ class Browscap
|
|
884 |
}
|
885 |
}
|
886 |
|
887 |
-
if
|
888 |
-
|
889 |
-
if (
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
895 |
} else {
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
fclose($test_file);
|
900 |
-
unlink($path);
|
901 |
-
} else {
|
902 |
-
throw new Exception(
|
903 |
-
'Could not write to "' . $path . '" (check the permissions of the cache directory).'
|
904 |
-
);
|
905 |
-
}
|
906 |
}
|
|
|
907 |
|
908 |
-
|
909 |
-
|
910 |
-
$browscap = explode("\n", $browscap);
|
911 |
-
$pattern = self::REGEX_DELIMITER . '(' . self::VALUES_TO_QUOTE . ')="?([^"]*)"?$' . self::REGEX_DELIMITER;
|
912 |
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
|
920 |
-
if (!file_put_contents($path, $content)) {
|
921 |
-
throw new Exception("Could not write .ini content to $path");
|
922 |
-
}
|
923 |
}
|
924 |
|
925 |
return true;
|
926 |
}
|
927 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
928 |
/**
|
929 |
* Gets the remote ini file update timestamp
|
930 |
*
|
@@ -965,13 +1047,16 @@ class Browscap
|
|
965 |
* convert strings to numbers.
|
966 |
*
|
967 |
* @param array $array the array to parse and convert
|
|
|
968 |
*
|
969 |
-
* @return
|
970 |
*/
|
971 |
-
protected function _array2string($array)
|
972 |
{
|
973 |
-
$
|
974 |
-
|
|
|
|
|
975 |
foreach ($array as $key => $value) {
|
976 |
if (is_int($key)) {
|
977 |
$key = '';
|
@@ -989,10 +1074,17 @@ class Browscap
|
|
989 |
$value = "'" . str_replace("'", "\'", $value) . "'";
|
990 |
}
|
991 |
|
992 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
993 |
}
|
994 |
|
995 |
-
return
|
996 |
}
|
997 |
|
998 |
/**
|
41 |
/**
|
42 |
* Current version of the class.
|
43 |
*/
|
44 |
+
const VERSION = '2.0.5';
|
45 |
|
46 |
+
const CACHE_FILE_VERSION = '2.0.5';
|
47 |
|
48 |
/**
|
49 |
* Different ways to access remote and local files.
|
121 |
*
|
122 |
* @var string
|
123 |
*/
|
124 |
+
public $userAgent = 'http://browscap.org/ - PHP Browscap/%v %m';
|
125 |
|
126 |
/**
|
127 |
* Flag to enable only lowercase indexes in the result.
|
250 |
return $this->_source_version;
|
251 |
}
|
252 |
|
253 |
+
/**
|
254 |
+
* @return bool
|
255 |
+
*/
|
256 |
+
public function shouldCacheBeUpdated()
|
257 |
+
{
|
258 |
+
// Load the cache at the first request
|
259 |
+
if ($this->_cacheLoaded) {
|
260 |
+
return false;
|
261 |
+
}
|
262 |
+
|
263 |
+
$cache_file = $this->cacheDir . $this->cacheFilename;
|
264 |
+
$ini_file = $this->cacheDir . $this->iniFilename;
|
265 |
+
|
266 |
+
// Set the interval only if needed
|
267 |
+
if ($this->doAutoUpdate && file_exists($ini_file)) {
|
268 |
+
$interval = time() - filemtime($ini_file);
|
269 |
+
} else {
|
270 |
+
$interval = 0;
|
271 |
+
}
|
272 |
+
|
273 |
+
$shouldBeUpdated = true;
|
274 |
+
|
275 |
+
if (file_exists($cache_file) && file_exists($ini_file) && ($interval <= $this->updateInterval)) {
|
276 |
+
if ($this->_loadCache($cache_file)) {
|
277 |
+
$shouldBeUpdated = false;
|
278 |
+
}
|
279 |
+
}
|
280 |
+
|
281 |
+
return $shouldBeUpdated;
|
282 |
+
}
|
283 |
+
|
284 |
/**
|
285 |
* XXX parse
|
286 |
*
|
295 |
*/
|
296 |
public function getBrowser($user_agent = null, $return_array = false)
|
297 |
{
|
298 |
+
if ($this->shouldCacheBeUpdated()) {
|
299 |
+
try {
|
300 |
+
$this->updateCache();
|
301 |
+
} catch (Exception $e) {
|
302 |
+
$ini_file = $this->cacheDir . $this->iniFilename;
|
303 |
+
|
304 |
+
if (file_exists($ini_file)) {
|
305 |
+
// Adjust the filemtime to the $errorInterval
|
306 |
+
touch($ini_file, time() - $this->updateInterval + $this->errorInterval);
|
307 |
+
} elseif ($this->silent) {
|
308 |
+
// Return an array if silent mode is active and the ini db doesn't exsist
|
309 |
+
return array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
310 |
}
|
311 |
|
312 |
+
if (!$this->silent) {
|
313 |
+
throw $e;
|
314 |
}
|
315 |
}
|
316 |
}
|
317 |
|
318 |
+
$cache_file = $this->cacheDir . $this->cacheFilename;
|
319 |
+
if (!$this->_cacheLoaded && !$this->_loadCache($cache_file)) {
|
320 |
+
throw new Exception('Cannot load cache file - the cache format is not compatible.');
|
321 |
+
}
|
322 |
+
|
323 |
// Automatically detect the useragent
|
324 |
if (!isset($user_agent)) {
|
325 |
if (isset($_SERVER['HTTP_USER_AGENT'])) {
|
526 |
{
|
527 |
$lockfile = $this->cacheDir . 'cache.lock';
|
528 |
|
529 |
+
$lockRes = fopen($lockfile, 'w+');
|
530 |
+
if (false === $lockRes) {
|
531 |
+
throw new Exception(sprintf('error opening lockfile %s', $lockfile));
|
532 |
+
}
|
533 |
+
if (false === flock($lockRes, LOCK_EX | LOCK_NB)) {
|
534 |
+
throw new Exception(sprintf('error locking lockfile %s', $lockfile));
|
535 |
}
|
536 |
|
537 |
$ini_path = $this->cacheDir . $this->iniFilename;
|
539 |
|
540 |
// Choose the right url
|
541 |
if ($this->_getUpdateMethod() == self::UPDATE_LOCAL) {
|
542 |
+
$url = realpath($this->localFile);
|
543 |
} else {
|
544 |
$url = $this->remoteIniUrl;
|
545 |
}
|
574 |
$user_agents_keys = array_flip($tmp_user_agents);
|
575 |
$properties_keys = array_flip($this->_properties);
|
576 |
|
577 |
+
$tmp_patterns = array();
|
578 |
+
$this->_browsers = array();
|
579 |
+
$this->_userAgents = array();
|
580 |
+
$this->_patterns = array();
|
581 |
|
582 |
foreach ($tmp_user_agents as $i => $user_agent) {
|
583 |
|
612 |
};
|
613 |
|
614 |
$browser = array();
|
615 |
+
foreach ($browsers[$user_agent] as $propertyName => $propertyValue) {
|
616 |
+
if (!isset($properties_keys[$propertyName])) {
|
617 |
continue;
|
618 |
}
|
619 |
|
620 |
+
$browser[$properties_keys[$propertyName]] = $propertyValue;
|
|
|
621 |
}
|
622 |
|
623 |
$this->_browsers[] = $browser;
|
641 |
}
|
642 |
}
|
643 |
|
644 |
+
// Write out new cache file
|
|
|
645 |
$dir = dirname($cache_path);
|
646 |
|
647 |
// "tempnam" did not work with VFSStream for tests
|
648 |
$tmpFile = $dir . '/temp_' . md5(time() . basename($cache_path));
|
649 |
|
650 |
// asume that all will be ok
|
651 |
+
if (false === ($fileRes = fopen($tmpFile, 'w+'))) {
|
652 |
+
// opening the temparary file failed
|
653 |
+
throw new Exception('opening temporary file failed');
|
654 |
+
}
|
655 |
+
if (false === $this->_buildCache($fileRes)) {
|
656 |
// writing to the temparary file failed
|
657 |
+
throw new Exception('writing to temporary file failed');
|
658 |
}
|
659 |
+
fclose($fileRes);
|
660 |
|
661 |
if (false === rename($tmpFile, $cache_path)) {
|
662 |
// renaming file failed, remove temp file
|
665 |
throw new Exception('could not rename temporary file to the cache file');
|
666 |
}
|
667 |
|
668 |
+
@flock($lockRes, LOCK_UN);
|
669 |
+
@fclose($lockRes);
|
670 |
@unlink($lockfile);
|
671 |
+
$this->_cacheLoaded = false;
|
672 |
|
673 |
return true;
|
674 |
}
|
840 |
}
|
841 |
|
842 |
/**
|
843 |
+
* Parses the array to cache and writes the resulting PHP string to disk
|
844 |
+
*
|
845 |
+
* @param ressource $fileRes File ressource to write to
|
846 |
*
|
847 |
+
* @return boolean False on write error, true otherwise
|
848 |
*/
|
849 |
+
protected function _buildCache($fileRes)
|
850 |
{
|
851 |
+
if (false === fwrite($fileRes, sprintf(
|
852 |
+
"<?php\n\$source_version=%s;\n\$cache_version=%s",
|
853 |
+
"'" . $this->_source_version . "'",
|
854 |
+
"'" . self::CACHE_FILE_VERSION . "'"
|
855 |
+
))) {
|
856 |
+
// write error
|
857 |
+
return false;
|
858 |
+
}
|
859 |
|
860 |
+
if (false === fwrite($fileRes, ";\n\$properties=")) {
|
861 |
+
// write error
|
862 |
+
return false;
|
863 |
+
}
|
864 |
+
if (false === $this->_array2string($this->_properties, $fileRes)) {
|
865 |
+
// write error
|
866 |
+
return false;
|
867 |
+
}
|
868 |
+
if (false === fwrite($fileRes, ";\n\$browsers=")) {
|
869 |
+
// write error
|
870 |
+
return false;
|
871 |
+
}
|
872 |
+
if (false === $this->_array2string($this->_browsers, $fileRes)) {
|
873 |
+
// write error
|
874 |
+
return false;
|
875 |
+
}
|
876 |
+
if (false === fwrite($fileRes, ";\n\$userAgents=")) {
|
877 |
+
// write error
|
878 |
+
return false;
|
879 |
+
}
|
880 |
+
if (false === $this->_array2string($this->_userAgents, $fileRes)) {
|
881 |
+
// write error
|
882 |
+
return false;
|
883 |
+
}
|
884 |
+
if (false === fwrite($fileRes, ";\n\$patterns=")) {
|
885 |
+
// write error
|
886 |
+
return false;
|
887 |
+
}
|
888 |
+
if (false === $this->_array2string($this->_patterns, $fileRes)) {
|
889 |
+
// write error
|
890 |
+
return false;
|
891 |
+
}
|
892 |
+
if (false === fwrite($fileRes, ";\n")) {
|
893 |
+
// write error
|
894 |
+
return false;
|
895 |
+
}
|
896 |
|
897 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
898 |
}
|
899 |
|
900 |
/**
|
925 |
*/
|
926 |
protected function _getRemoteIniFile($url, $path)
|
927 |
{
|
928 |
+
// local and remote file are the same, no update possible
|
929 |
+
if ($url == $path) {
|
930 |
+
return false;
|
931 |
+
}
|
932 |
+
|
933 |
// Check version
|
934 |
if (file_exists($path) && filesize($path)) {
|
935 |
$local_tmstp = filemtime($path);
|
940 |
$remote_tmstp = $this->_getRemoteMTime();
|
941 |
}
|
942 |
|
943 |
+
if ($remote_tmstp <= $local_tmstp) {
|
944 |
// No update needed, return
|
945 |
touch($path);
|
946 |
|
948 |
}
|
949 |
}
|
950 |
|
951 |
+
// Check if it's possible to write to the .ini file.
|
952 |
+
if (is_file($path)) {
|
953 |
+
if (!is_writable($path)) {
|
954 |
+
throw new Exception(
|
955 |
+
'Could not write to "' . $path . '" (check the permissions of the current/old ini file).'
|
956 |
+
);
|
957 |
+
}
|
958 |
+
} else {
|
959 |
+
// Test writability by creating a file only if one already doesn't exist, so we can safely delete it after
|
960 |
+
// the test.
|
961 |
+
$test_file = fopen($path, 'a');
|
962 |
+
if ($test_file) {
|
963 |
+
fclose($test_file);
|
964 |
+
unlink($path);
|
965 |
} else {
|
966 |
+
throw new Exception(
|
967 |
+
'Could not write to "' . $path . '" (check the permissions of the cache directory).'
|
968 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
969 |
}
|
970 |
+
}
|
971 |
|
972 |
+
// Get updated .ini file
|
973 |
+
$content = $this->_getRemoteData($url);
|
|
|
|
|
974 |
|
975 |
+
if (!is_string($content) || strlen($content) < 1) {
|
976 |
+
throw new Exception('Could not load .ini content from "' . $url . '"');
|
977 |
+
}
|
978 |
+
|
979 |
+
if (false !== strpos('rate limit', $content)) {
|
980 |
+
throw new Exception(
|
981 |
+
'Could not load .ini content from "' . $url . '" because the rate limit is exeeded for your IP'
|
982 |
+
);
|
983 |
+
}
|
984 |
+
|
985 |
+
// replace opening and closing php and asp tags
|
986 |
+
$content = $this->sanitizeContent($content);
|
987 |
+
|
988 |
+
if (!file_put_contents($path, $content)) {
|
989 |
+
throw new Exception('Could not write .ini content to "' . $path . '"');
|
990 |
|
|
|
|
|
|
|
991 |
}
|
992 |
|
993 |
return true;
|
994 |
}
|
995 |
|
996 |
+
/**
|
997 |
+
* @param string $content
|
998 |
+
*
|
999 |
+
* @return mixed
|
1000 |
+
*/
|
1001 |
+
protected function sanitizeContent($content)
|
1002 |
+
{
|
1003 |
+
// replace everything between opening and closing php and asp tags
|
1004 |
+
$content = preg_replace('/<[?%].*[?%]>/', '', $content);
|
1005 |
+
|
1006 |
+
// replace opening and closing php and asp tags
|
1007 |
+
return str_replace(array('<?', '<%', '?>', '%>'), '', $content);
|
1008 |
+
}
|
1009 |
+
|
1010 |
/**
|
1011 |
* Gets the remote ini file update timestamp
|
1012 |
*
|
1047 |
* convert strings to numbers.
|
1048 |
*
|
1049 |
* @param array $array the array to parse and convert
|
1050 |
+
* @param ressource $fileRes Ressource to write the parsed string to
|
1051 |
*
|
1052 |
+
* @return boolean False on write error, true otherwise
|
1053 |
*/
|
1054 |
+
protected function _array2string($array, $fileRes)
|
1055 |
{
|
1056 |
+
if (false === fwrite($fileRes, "array(\n")) {
|
1057 |
+
// write error
|
1058 |
+
return false;
|
1059 |
+
}
|
1060 |
foreach ($array as $key => $value) {
|
1061 |
if (is_int($key)) {
|
1062 |
$key = '';
|
1074 |
$value = "'" . str_replace("'", "\'", $value) . "'";
|
1075 |
}
|
1076 |
|
1077 |
+
if (false === fwrite($fileRes, $key . $value . ",\n")) {
|
1078 |
+
// write error
|
1079 |
+
return false;
|
1080 |
+
}
|
1081 |
+
}
|
1082 |
+
if (false === fwrite($fileRes, "\n)")) {
|
1083 |
+
// write error
|
1084 |
+
return false;
|
1085 |
}
|
1086 |
|
1087 |
+
return true;
|
1088 |
}
|
1089 |
|
1090 |
/**
|
vendor/browscap/browscap-php/tests/bootstrap.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This makes our life easier when dealing with paths. Everything is relative
|
4 |
+
* to the application root now.
|
5 |
+
*/
|
6 |
+
chdir(dirname(__DIR__));
|
7 |
+
|
8 |
+
$autoloadPaths = array(
|
9 |
+
'vendor/autoload.php',
|
10 |
+
'../../autoload.php',
|
11 |
+
);
|
12 |
+
|
13 |
+
$foundVendorAutoload = false;
|
14 |
+
foreach ($autoloadPaths as $path) {
|
15 |
+
if (file_exists($path)) {
|
16 |
+
require $path;
|
17 |
+
$foundVendorAutoload = true;
|
18 |
+
break;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
if (!$foundVendorAutoload) {
|
23 |
+
throw new Exception('Could not find autoload path in any of the searched locations');
|
24 |
+
}
|
25 |
+
|
26 |
+
ini_set('memory_limit', '-1');
|
vendor/browscap/browscap-php/tests/phpbrowscapTest/BrowscapTest.php
ADDED
@@ -0,0 +1,454 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace phpbrowscapTest;
|
4 |
+
|
5 |
+
use phpbrowscap\Browscap;
|
6 |
+
use ReflectionClass;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Browscap.ini parsing class with caching and update capabilities
|
10 |
+
*
|
11 |
+
* PHP version 5
|
12 |
+
*
|
13 |
+
* Copyright (c) 2006-2012 Jonathan Stoppani
|
14 |
+
*
|
15 |
+
* Permission is hereby granted, free of charge, to any person obtaining a
|
16 |
+
* copy of this software and associated documentation files (the "Software"),
|
17 |
+
* to deal in the Software without restriction, including without limitation
|
18 |
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
19 |
+
* and/or sell copies of the Software, and to permit persons to whom the
|
20 |
+
* Software is furnished to do so, subject to the following conditions:
|
21 |
+
*
|
22 |
+
* The above copyright notice and this permission notice shall be included
|
23 |
+
* in all copies or substantial portions of the Software.
|
24 |
+
*
|
25 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
26 |
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
27 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
28 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
29 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
30 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
31 |
+
* THE SOFTWARE.
|
32 |
+
*
|
33 |
+
* @package Browscap
|
34 |
+
* @author Vítor Brandão <noisebleed@noiselabs.org>
|
35 |
+
* @copyright Copyright (c) 2006-2012 Jonathan Stoppani
|
36 |
+
* @version 1.0
|
37 |
+
* @license http://www.opensource.org/licenses/MIT MIT License
|
38 |
+
* @link https://github.com/GaretJax/phpbrowscap/
|
39 |
+
*/
|
40 |
+
class BrowscapTest extends TestCase
|
41 |
+
{
|
42 |
+
/**
|
43 |
+
* @expectedException \PHPUnit_Framework_Error_Warning
|
44 |
+
*/
|
45 |
+
public function testConstructorFails()
|
46 |
+
{
|
47 |
+
new Browscap();
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @expectedException \phpbrowscap\Exception
|
52 |
+
* @expectedExceptionMessage You have to provide a path to read/store the browscap cache file
|
53 |
+
*/
|
54 |
+
public function testConstructorFails2()
|
55 |
+
{
|
56 |
+
new Browscap(null);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
*
|
61 |
+
*/
|
62 |
+
public function testConstructorFails3()
|
63 |
+
{
|
64 |
+
$path = '/abc/test';
|
65 |
+
|
66 |
+
$this->setExpectedException(
|
67 |
+
'\\phpbrowscap\\Exception',
|
68 |
+
'The cache path ' . $path . ' is invalid. Are you sure that it exists and that you have permission to access it?'
|
69 |
+
);
|
70 |
+
|
71 |
+
new Browscap($path);
|
72 |
+
}
|
73 |
+
|
74 |
+
public function testProxyAutoDetection()
|
75 |
+
{
|
76 |
+
$browscap = $this->createBrowscap();
|
77 |
+
|
78 |
+
putenv('http_proxy=http://proxy.example.com:3128');
|
79 |
+
putenv('https_proxy=http://proxy.example.com:3128');
|
80 |
+
putenv('ftp_proxy=http://proxy.example.com:3128');
|
81 |
+
|
82 |
+
$browscap->autodetectProxySettings();
|
83 |
+
$options = $browscap->getStreamContextOptions();
|
84 |
+
|
85 |
+
self::assertEquals($options['http']['proxy'], 'tcp://proxy.example.com:3128');
|
86 |
+
self::assertTrue($options['http']['request_fulluri']);
|
87 |
+
|
88 |
+
self::assertEquals($options['https']['proxy'], 'tcp://proxy.example.com:3128');
|
89 |
+
self::assertTrue($options['https']['request_fulluri']);
|
90 |
+
|
91 |
+
self::assertEquals($options['ftp']['proxy'], 'tcp://proxy.example.com:3128');
|
92 |
+
self::assertTrue($options['ftp']['request_fulluri']);
|
93 |
+
}
|
94 |
+
|
95 |
+
public function testAddProxySettings()
|
96 |
+
{
|
97 |
+
$browscap = $this->createBrowscap();
|
98 |
+
|
99 |
+
$browscap->addProxySettings('proxy.example.com', 3128, 'http');
|
100 |
+
$options = $browscap->getStreamContextOptions();
|
101 |
+
|
102 |
+
self::assertEquals($options['http']['proxy'], 'tcp://proxy.example.com:3128');
|
103 |
+
self::assertTrue($options['http']['request_fulluri']);
|
104 |
+
}
|
105 |
+
|
106 |
+
public function testAddProxySettingsWithUsername()
|
107 |
+
{
|
108 |
+
$browscap = $this->createBrowscap();
|
109 |
+
|
110 |
+
$browscap->addProxySettings('proxy.example.com', 3128, 'http', 'test', 'test');
|
111 |
+
$options = $browscap->getStreamContextOptions();
|
112 |
+
|
113 |
+
self::assertEquals($options['http']['proxy'], 'tcp://proxy.example.com:3128');
|
114 |
+
self::assertEquals($options['http']['header'], 'Proxy-Authorization: Basic dGVzdDp0ZXN0');
|
115 |
+
self::assertTrue($options['http']['request_fulluri']);
|
116 |
+
}
|
117 |
+
|
118 |
+
public function testClearProxySettings()
|
119 |
+
{
|
120 |
+
$browscap = $this->createBrowscap();
|
121 |
+
|
122 |
+
$browscap->addProxySettings('proxy.example.com', 3128, 'http');
|
123 |
+
$options = $browscap->getStreamContextOptions();
|
124 |
+
|
125 |
+
self::assertEquals($options['http']['proxy'], 'tcp://proxy.example.com:3128');
|
126 |
+
self::assertTrue($options['http']['request_fulluri']);
|
127 |
+
|
128 |
+
$clearedWrappers = $browscap->clearProxySettings();
|
129 |
+
$options = $browscap->getStreamContextOptions();
|
130 |
+
|
131 |
+
$defaultStreamContextOptions = array(
|
132 |
+
'http' => array(
|
133 |
+
'timeout' => $browscap->timeout,
|
134 |
+
)
|
135 |
+
);
|
136 |
+
|
137 |
+
$this->assertEquals($defaultStreamContextOptions, $options);
|
138 |
+
self::assertEquals($clearedWrappers, array('http'));
|
139 |
+
}
|
140 |
+
|
141 |
+
public function testGetStreamContext()
|
142 |
+
{
|
143 |
+
$cacheDir = $this->createCacheDir();
|
144 |
+
|
145 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
146 |
+
$method = $class->getMethod('_getStreamContext');
|
147 |
+
$method->setAccessible(true);
|
148 |
+
|
149 |
+
$browscap = new Browscap($cacheDir);
|
150 |
+
|
151 |
+
$browscap->addProxySettings('proxy.example.com', 3128, 'http');
|
152 |
+
|
153 |
+
$resource = $method->invoke($browscap);
|
154 |
+
|
155 |
+
self::assertTrue(is_resource($resource));
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* @expectedException \phpbrowscap\Exception
|
160 |
+
* @expectedExceptionMessage Local file is not readable
|
161 |
+
*/
|
162 |
+
public function testGetLocalMTimeFails()
|
163 |
+
{
|
164 |
+
$cacheDir = $this->createCacheDir();
|
165 |
+
|
166 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
167 |
+
$method = $class->getMethod('_getLocalMTime');
|
168 |
+
$method->setAccessible(true);
|
169 |
+
|
170 |
+
$browscap = new Browscap($cacheDir);
|
171 |
+
|
172 |
+
$method->invoke($browscap);
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
*
|
177 |
+
*/
|
178 |
+
public function testGetLocalMTime()
|
179 |
+
{
|
180 |
+
$cacheDir = $this->createCacheDir();
|
181 |
+
|
182 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
183 |
+
$method = $class->getMethod('_getLocalMTime');
|
184 |
+
$method->setAccessible(true);
|
185 |
+
|
186 |
+
$browscap = new Browscap($cacheDir);
|
187 |
+
$browscap->localFile = __FILE__;
|
188 |
+
|
189 |
+
$mtime = $method->invoke($browscap);
|
190 |
+
$expected = filemtime(__FILE__);
|
191 |
+
|
192 |
+
self::assertSame($expected, $mtime);
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* @expectedException \phpbrowscap\Exception
|
197 |
+
* @expectedExceptionMessage Bad datetime format from http://browscap.org/version
|
198 |
+
*/
|
199 |
+
public function testGetRemoteMTimeFails()
|
200 |
+
{
|
201 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
202 |
+
$method = $class->getMethod('_getRemoteMTime');
|
203 |
+
$method->setAccessible(true);
|
204 |
+
|
205 |
+
$browscap = $this->getMock('\\phpbrowscap\\Browscap', array('_getRemoteData'), array(), '', false);
|
206 |
+
$browscap->expects($this->any())
|
207 |
+
->method('_getRemoteData')
|
208 |
+
->will(self::returnValue(null));
|
209 |
+
|
210 |
+
$method->invoke($browscap);
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
*
|
215 |
+
*/
|
216 |
+
public function testGetRemoteMTime()
|
217 |
+
{
|
218 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
219 |
+
$method = $class->getMethod('_getRemoteMTime');
|
220 |
+
$method->setAccessible(true);
|
221 |
+
|
222 |
+
$expected = 'Mon, 29 Jul 2013 22:22:31 -0000';
|
223 |
+
|
224 |
+
$browscap = $this->getMock('\\phpbrowscap\\Browscap', array('_getRemoteData'), array(), '', false);
|
225 |
+
$browscap->expects($this->any())
|
226 |
+
->method('_getRemoteData')
|
227 |
+
->will(self::returnValue($expected));
|
228 |
+
|
229 |
+
$mtime = $method->invoke($browscap);
|
230 |
+
|
231 |
+
self::assertSame(strtotime($expected), $mtime);
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
*
|
236 |
+
*/
|
237 |
+
public function testArray2string()
|
238 |
+
{
|
239 |
+
$cacheDir = $this->createCacheDir();
|
240 |
+
|
241 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
242 |
+
$method = $class->getMethod('_array2string');
|
243 |
+
$method->setAccessible(true);
|
244 |
+
|
245 |
+
$browscap = new Browscap($cacheDir);
|
246 |
+
|
247 |
+
$result = 'array(' . "\n" . '\'a\'=>1,' . "\n" . '\'b\'=>\'abc\',' . "\n" . '1=>\'cde\',' . "\n" . '\'def\',' . "\n" . '\'a:3:{i:0;s:3:"abc";i:1;i:1;i:2;i:2;}\',' . "\n" . "\n" . ')';
|
248 |
+
|
249 |
+
// "tempnam" did not work with VFSStream for tests
|
250 |
+
$tmpFile = $cacheDir . '/temp_test_' . md5(time());
|
251 |
+
|
252 |
+
if (false == ($fileRes = fopen($tmpFile, 'w+'))) {
|
253 |
+
throw new \RuntimeException(sprintf('Unable to create temporary file "%s"', $tmpFile));
|
254 |
+
}
|
255 |
+
|
256 |
+
self::assertTrue($method->invoke($browscap, array('a' => 1, 'b' => 'abc', '1.0' => 'cde', 1 => 'def', 2 => array('abc', 1, 2)), $fileRes));
|
257 |
+
|
258 |
+
fclose($fileRes);
|
259 |
+
|
260 |
+
self::assertSame($result, file_get_contents($tmpFile));
|
261 |
+
|
262 |
+
unlink($tmpFile);
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
*
|
267 |
+
*/
|
268 |
+
public function testGetUpdateMethodReturnsFopen()
|
269 |
+
{
|
270 |
+
$cacheDir = $this->createCacheDir();
|
271 |
+
|
272 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
273 |
+
$method = $class->getMethod('_getUpdateMethod');
|
274 |
+
$method->setAccessible(true);
|
275 |
+
|
276 |
+
$browscap = new Browscap($cacheDir);
|
277 |
+
$browscap->updateMethod = null;
|
278 |
+
|
279 |
+
$expected = Browscap::UPDATE_FOPEN;
|
280 |
+
|
281 |
+
self::assertSame($expected, $method->invoke($browscap));
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
*
|
286 |
+
*/
|
287 |
+
public function testGetUpdateMethodReturnsLocal()
|
288 |
+
{
|
289 |
+
$cacheDir = $this->createCacheDir();
|
290 |
+
|
291 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
292 |
+
$method = $class->getMethod('_getUpdateMethod');
|
293 |
+
$method->setAccessible(true);
|
294 |
+
|
295 |
+
$browscap = new Browscap($cacheDir);
|
296 |
+
$browscap->updateMethod = null;
|
297 |
+
$browscap->localFile = __FILE__;
|
298 |
+
|
299 |
+
$expected = Browscap::UPDATE_LOCAL;
|
300 |
+
|
301 |
+
self::assertSame($expected, $method->invoke($browscap));
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
*
|
306 |
+
*/
|
307 |
+
public function testGetUserAgent()
|
308 |
+
{
|
309 |
+
$cacheDir = $this->createCacheDir();
|
310 |
+
|
311 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
312 |
+
$method = $class->getMethod('_getUserAgent');
|
313 |
+
$method->setAccessible(true);
|
314 |
+
|
315 |
+
$browscap = new Browscap($cacheDir);
|
316 |
+
|
317 |
+
$expected = 'http://browscap.org/ - PHP Browscap/';
|
318 |
+
|
319 |
+
self::assertContains($expected, $method->invoke($browscap));
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
*
|
324 |
+
*/
|
325 |
+
public function testPregQuote()
|
326 |
+
{
|
327 |
+
$cacheDir = $this->createCacheDir();
|
328 |
+
|
329 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
330 |
+
$method = $class->getMethod('_pregQuote');
|
331 |
+
$method->setAccessible(true);
|
332 |
+
|
333 |
+
$browscap = new Browscap($cacheDir);
|
334 |
+
|
335 |
+
$expected = '@^Mozilla/.\.0 \(compatible; Ask Jeeves/Teoma.*\)$@';
|
336 |
+
|
337 |
+
self::assertSame($expected, $method->invoke($browscap, 'Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)'));
|
338 |
+
}
|
339 |
+
|
340 |
+
/**
|
341 |
+
*
|
342 |
+
*/
|
343 |
+
public function testPregUnQuote()
|
344 |
+
{
|
345 |
+
$cacheDir = $this->createCacheDir();
|
346 |
+
|
347 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
348 |
+
$method = $class->getMethod('_pregUnQuote');
|
349 |
+
$method->setAccessible(true);
|
350 |
+
|
351 |
+
$browscap = new Browscap($cacheDir);
|
352 |
+
|
353 |
+
$expected = 'Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)';
|
354 |
+
|
355 |
+
self::assertSame($expected, $method->invoke($browscap, '@^Mozilla/.\.0 \(compatible; Ask Jeeves/Teoma.*\)$@', array()));
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* @dataProvider dataCompareBcStrings
|
360 |
+
*/
|
361 |
+
public function testCompareBcStrings($a, $b, $expected)
|
362 |
+
{
|
363 |
+
$cacheDir = $this->createCacheDir();
|
364 |
+
|
365 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
366 |
+
$method = $class->getMethod('compareBcStrings');
|
367 |
+
$method->setAccessible(true);
|
368 |
+
|
369 |
+
$browscap = new Browscap($cacheDir);
|
370 |
+
|
371 |
+
self::assertSame($expected, $method->invoke($browscap, $a, $b));
|
372 |
+
}
|
373 |
+
|
374 |
+
public function dataCompareBcStrings()
|
375 |
+
{
|
376 |
+
return array(
|
377 |
+
array('Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)', 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)', 1),
|
378 |
+
array('Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)', 'Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)', -1),
|
379 |
+
array('Mozilla/5.0 (Danger hiptop 3.*; U; rv:1.7.*) Gecko/*', 'Mozilla/5.0 (Danger hiptop 3.0; U; rv:1.7.*) Gecko/*', 1),
|
380 |
+
array('Mozilla/5.0 (Danger hiptop 3.0; U; rv:1.7.*) Gecko/*', 'Mozilla/5.0 (Danger hiptop 3.*; U; rv:1.7.*) Gecko/*', -1),
|
381 |
+
array('Mozilla/5.0 (Danger hiptop 3.0; U; rv:1.7.*) Gecko/*', 'Mozilla/5.0 (Danger hiptop 3.0; U; rv:1.7.*) Gecko/*', 0)
|
382 |
+
);
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* @dataProvider dataSanitizeContent
|
387 |
+
*/
|
388 |
+
public function testSanitizeContent($content, $expected)
|
389 |
+
{
|
390 |
+
$cacheDir = $this->createCacheDir();
|
391 |
+
|
392 |
+
$class = new ReflectionClass('\\phpbrowscap\\Browscap');
|
393 |
+
$method = $class->getMethod('sanitizeContent');
|
394 |
+
$method->setAccessible(true);
|
395 |
+
|
396 |
+
$browscap = new Browscap($cacheDir);
|
397 |
+
|
398 |
+
self::assertSame($expected, $method->invoke($browscap, $content));
|
399 |
+
}
|
400 |
+
|
401 |
+
public function dataSanitizeContent()
|
402 |
+
{
|
403 |
+
return array(
|
404 |
+
array(
|
405 |
+
'[GJK_Browscap_Version]
|
406 |
+
Version=6004
|
407 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
408 |
+
Format=asp\'?><?php exit(\'\'); ?>
|
409 |
+
Type=',
|
410 |
+
'[GJK_Browscap_Version]
|
411 |
+
Version=6004
|
412 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
413 |
+
Format=asp\'
|
414 |
+
Type=',
|
415 |
+
),
|
416 |
+
array(
|
417 |
+
'[GJK_Browscap_Version]
|
418 |
+
Version=6004
|
419 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
420 |
+
Format=asp\'?><?php
|
421 |
+
Type=',
|
422 |
+
'[GJK_Browscap_Version]
|
423 |
+
Version=6004
|
424 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
425 |
+
Format=asp\'php
|
426 |
+
Type=',
|
427 |
+
),
|
428 |
+
array(
|
429 |
+
'[GJK_Browscap_Version]
|
430 |
+
Version=6004
|
431 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
432 |
+
Format=asp\'?><?= exit(\'\'); ?>
|
433 |
+
Type=',
|
434 |
+
'[GJK_Browscap_Version]
|
435 |
+
Version=6004
|
436 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
437 |
+
Format=asp\'
|
438 |
+
Type=',
|
439 |
+
),
|
440 |
+
array(
|
441 |
+
'[GJK_Browscap_Version]
|
442 |
+
Version=6004
|
443 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
444 |
+
Format=asp\'?><% exit(\'\'); %>
|
445 |
+
Type=',
|
446 |
+
'[GJK_Browscap_Version]
|
447 |
+
Version=6004
|
448 |
+
Released=Wed, 10 Jun 2015 07:48:33 +0000
|
449 |
+
Format=asp\'
|
450 |
+
Type=',
|
451 |
+
),
|
452 |
+
);
|
453 |
+
}
|
454 |
+
}
|
vendor/browscap/browscap-php/tests/phpbrowscapTest/CompareBrowscapWithOriginalTest.php
ADDED
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace phpbrowscapTest;
|
3 |
+
|
4 |
+
use phpbrowscap\Browscap;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Compares get_browser results for all matches in browscap.ini with results from Browscap class.
|
8 |
+
* Also compares the execution times.
|
9 |
+
*/
|
10 |
+
class CompareBrowscapWithOriginalTest extends \PHPUnit_Framework_TestCase
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @var Browscap
|
14 |
+
*/
|
15 |
+
private $object = null;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private static $cacheDir = null;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @var array
|
24 |
+
*/
|
25 |
+
private $properties = array(
|
26 |
+
'browser_name_regex' => null,
|
27 |
+
'browser_name_pattern' => null,
|
28 |
+
'Parent' => null,
|
29 |
+
'Comment' => 'Default Browser',
|
30 |
+
'Browser' => 'Default Browser',
|
31 |
+
'Browser_Type' => 'unknown',
|
32 |
+
'Browser_Bits' => '0',
|
33 |
+
'Browser_Maker' => 'unknown',
|
34 |
+
'Browser_Modus' => 'unknown',
|
35 |
+
'Version' => '0.0',
|
36 |
+
'MajorVer' => '0',
|
37 |
+
'MinorVer' => '0',
|
38 |
+
'Platform' => 'unknown',
|
39 |
+
'Platform_Version' => 'unknown',
|
40 |
+
'Platform_Description' => 'unknown',
|
41 |
+
'Platform_Bits' => '0',
|
42 |
+
'Platform_Maker' => 'unknown',
|
43 |
+
'Alpha' => 'false',
|
44 |
+
'Beta' => 'false',
|
45 |
+
'Win16' => 'false',
|
46 |
+
'Win32' => 'false',
|
47 |
+
'Win64' => 'false',
|
48 |
+
'Frames' => 'false',
|
49 |
+
'IFrames' => 'false',
|
50 |
+
'Tables' => 'false',
|
51 |
+
'Cookies' => 'false',
|
52 |
+
'BackgroundSounds' => 'false',
|
53 |
+
'JavaScript' => 'false',
|
54 |
+
'VBScript' => 'false',
|
55 |
+
'JavaApplets' => 'false',
|
56 |
+
'ActiveXControls' => 'false',
|
57 |
+
'isMobileDevice' => 'false',
|
58 |
+
'isTablet' => 'false',
|
59 |
+
'isSyndicationReader' => 'false',
|
60 |
+
'Crawler' => 'false',
|
61 |
+
'CssVersion' => '0',
|
62 |
+
'AolVersion' => '0',
|
63 |
+
'Device_Name' => 'unknown',
|
64 |
+
'Device_Maker' => 'unknown',
|
65 |
+
'Device_Type' => 'unknown',
|
66 |
+
'Device_Pointing_Method' => 'unknown',
|
67 |
+
'Device_Code_Name' => 'unknown',
|
68 |
+
'Device_Brand_Name' => 'unknown',
|
69 |
+
'RenderingEngine_Name' => 'unknown',
|
70 |
+
'RenderingEngine_Version' => 'unknown',
|
71 |
+
'RenderingEngine_Description' => 'unknown',
|
72 |
+
'RenderingEngine_Maker' => 'unknown',
|
73 |
+
);
|
74 |
+
|
75 |
+
/**
|
76 |
+
* This method is called before the first test of this test class is run.
|
77 |
+
*
|
78 |
+
* @since Method available since Release 3.4.0
|
79 |
+
*/
|
80 |
+
public static function setUpBeforeClass()
|
81 |
+
{
|
82 |
+
$cacheDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'browscap_testing';
|
83 |
+
|
84 |
+
if (!is_dir($cacheDir)) {
|
85 |
+
if (false === @mkdir($cacheDir, 0777, true)) {
|
86 |
+
throw new \RuntimeException(sprintf('Unable to create the "%s" directory', $cacheDir));
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
self::$cacheDir = $cacheDir;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Sets up the fixture, for example, opens a network connection.
|
95 |
+
* This method is called before a test is executed.
|
96 |
+
*/
|
97 |
+
protected function setUp()
|
98 |
+
{
|
99 |
+
parent::setUp();
|
100 |
+
|
101 |
+
$objectIniPath = ini_get('browscap');
|
102 |
+
|
103 |
+
if (!is_file($objectIniPath)) {
|
104 |
+
self::markTestSkipped('browscap not defined in php.ini');
|
105 |
+
}
|
106 |
+
|
107 |
+
$this->object = new Browscap(self::$cacheDir);
|
108 |
+
$this->object->localFile = $objectIniPath;
|
109 |
+
}
|
110 |
+
|
111 |
+
public function testCheckProperties()
|
112 |
+
{
|
113 |
+
$libProperties = get_object_vars(get_browser('x'));
|
114 |
+
$bcProperties = get_object_vars($this->object->getBrowser('x'));
|
115 |
+
|
116 |
+
unset($bcProperties['Parents']);
|
117 |
+
unset($bcProperties['browser_name']);
|
118 |
+
unset($libProperties['browser_name']);
|
119 |
+
unset($libProperties['renderingengine_description']);
|
120 |
+
|
121 |
+
$libPropertyKeys = array_map('strtolower', array_keys($libProperties));
|
122 |
+
$bcPropertyKeys = array_map('strtolower', array_keys($bcProperties));
|
123 |
+
|
124 |
+
self::assertSame($libPropertyKeys, $bcPropertyKeys);
|
125 |
+
|
126 |
+
foreach (array_keys($bcProperties) as $bcProp) {
|
127 |
+
self::assertArrayHasKey(
|
128 |
+
strtolower($bcProp),
|
129 |
+
$libProperties,
|
130 |
+
'Property `' . $bcProp . '` from Browscap doesn\'t match anything in get_browser.'
|
131 |
+
);
|
132 |
+
|
133 |
+
unset($libProperties[strtolower($bcProp)]);
|
134 |
+
}
|
135 |
+
|
136 |
+
self::assertSame(
|
137 |
+
0,
|
138 |
+
count($libProperties),
|
139 |
+
'There are ' . count($libProperties) . '(' . implode(', ', array_keys($libProperties))
|
140 |
+
. ') properties in get_browser that do not match those in Browscap.'
|
141 |
+
);
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* @dataProvider providerUserAgent
|
146 |
+
* @depends testCheckProperties
|
147 |
+
*
|
148 |
+
* @param string $userAgent
|
149 |
+
*
|
150 |
+
* @throws \Exception
|
151 |
+
* @throws \phpbrowscap\Exception
|
152 |
+
*/
|
153 |
+
public function testCompare($userAgent)
|
154 |
+
{
|
155 |
+
$libResult = get_browser($userAgent);
|
156 |
+
$bcResult = $this->object->getBrowser($userAgent);
|
157 |
+
|
158 |
+
$doNotCheck = array('browser_name_regex', 'browser_name_pattern', 'Parent', 'RenderingEngine_Description');
|
159 |
+
|
160 |
+
foreach (array_keys($this->properties) as $bcProp) {
|
161 |
+
if (in_array($bcProp, $doNotCheck)) {
|
162 |
+
continue;
|
163 |
+
}
|
164 |
+
|
165 |
+
$libProp = strtolower($bcProp);
|
166 |
+
|
167 |
+
$libValue = (string) $libResult->{$libProp};
|
168 |
+
$bcValue = (string) $bcResult->{$bcProp};
|
169 |
+
|
170 |
+
self::assertSame(
|
171 |
+
$libValue,
|
172 |
+
$bcValue,
|
173 |
+
$bcProp . ': ' . $libValue . ' != ' . $bcValue
|
174 |
+
);
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
public function providerUserAgent()
|
179 |
+
{
|
180 |
+
return array(
|
181 |
+
array('BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103'),
|
182 |
+
array('check_http/v1.4.15 (nagios-plugins 1.4.15)'),
|
183 |
+
array('facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)'),
|
184 |
+
array('Googlebot/2.1 (+http://www.googlebot.com/bot.html)'),
|
185 |
+
array('HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'),
|
186 |
+
array('HTC_Touch_HD_T8282 Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)'),
|
187 |
+
array('ichiro/3.0 (http://search.goo.ne.jp/option/use/sub4/sub4-1/)'),
|
188 |
+
array('KDDI-KC31 UP.Browser/6.2.0.5 (GUI) MMP/2.0'),
|
189 |
+
array('LG-CT810/V10x IEMobile/7.11 Profile/MIDP-2.0 Configuration/CLDC-1.1 Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)'),
|
190 |
+
array('MOT 24.1 _/00.62 UP.Browser/6.2.3.4.c.1.120 (GUI) MMP/2.0'),
|
191 |
+
array('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; chromeframe/28.0.1500.72; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MATM)'),
|
192 |
+
array('Mozilla/5.0 (Android; Mobile; rv:19.0) Gecko/19.0 Firefox/19.0'),
|
193 |
+
array('Mozilla/5.0 (BlackBerry; U; BlackBerry 9700; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.448 Mobile Safari/534.8+'),
|
194 |
+
array('Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 822)'),
|
195 |
+
array('Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-S7530)'),
|
196 |
+
array('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) CriOS/27.0.1453.10 Mobile/10A403 Safari/8536.25'),
|
197 |
+
array('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A407 Safari/8536.25'),
|
198 |
+
array('Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5'),
|
199 |
+
array('Mozilla/5.0 (iPod; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3'),
|
200 |
+
array('Mozilla/5.0 (Linux; Android 4.0.4; GT-P5100 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'),
|
201 |
+
array('Mozilla/5.0 (Linux; Android 4.1.2; GT-I9300 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Mobile Safari/537.36 OPR/15.0.1162.60140'),
|
202 |
+
array('Mozilla/5.0 (Linux; U; Android 4.0.4; pl-pl; HTC_DesireS_S510e Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'),
|
203 |
+
array('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7'),
|
204 |
+
array('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31'),
|
205 |
+
array('Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8500/S8500PMLB2; U; Bada/2.0; pl-pl) AppleWebKit/534.20 (KHTML, like Gecko) Dolfin/3.0 Mobile WVGA SMM-MMS/1.2.0 OPN-B'),
|
206 |
+
array('Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5230/40.0.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.4 3gpp-gba'),
|
207 |
+
array('Mozilla/5.0 (Windows NT 5.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1'),
|
208 |
+
array('Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.96 Safari/537.4'),
|
209 |
+
array('Mozilla/5.0 (Windows NT 6.0; rv:24.0) Gecko/20130719 Firefox/24.0'),
|
210 |
+
array('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.68 Safari/537.36'),
|
211 |
+
array('Mozilla/5.0 (X11; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0'),
|
212 |
+
array('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Safari/537.36'),
|
213 |
+
array('Opera/9.80 (J2ME/MIDP; Opera Mini/7.1.32052/30.3341; U; pl) Presto/2.8.119 Version/11.10'),
|
214 |
+
array('Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.9.168 Version/11.52'),
|
215 |
+
array('Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.289 Version/12.00'),
|
216 |
+
array('Outlook-Express/7.0 (MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; McAfee; AskTbORJ/5.15.23.36191; TmstmpExt)'),
|
217 |
+
array('SAMSUNG-SGH-A867/A867UCHJ3 SHP/VPP/R5 NetFront/35 SMM-MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1 UP.Link/6.3.0.0.0'),
|
218 |
+
array('WordPress/3.5.1; http://greenconsulting.ecolivingfan.info'),
|
219 |
+
array('Der gro\\xdfe BilderSauger 2.00u'),
|
220 |
+
array('\\x22Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)\\x22'),
|
221 |
+
);
|
222 |
+
}
|
223 |
+
}
|
vendor/browscap/browscap-php/tests/phpbrowscapTest/TestCase.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace phpbrowscapTest;
|
4 |
+
|
5 |
+
use phpbrowscap\Browscap;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Browscap.ini parsing class with caching and update capabilities
|
9 |
+
*
|
10 |
+
* PHP version 5
|
11 |
+
*
|
12 |
+
* Copyright (c) 2006-2012 Jonathan Stoppani
|
13 |
+
*
|
14 |
+
* Permission is hereby granted, free of charge, to any person obtaining a
|
15 |
+
* copy of this software and associated documentation files (the "Software"),
|
16 |
+
* to deal in the Software without restriction, including without limitation
|
17 |
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
18 |
+
* and/or sell copies of the Software, and to permit persons to whom the
|
19 |
+
* Software is furnished to do so, subject to the following conditions:
|
20 |
+
*
|
21 |
+
* The above copyright notice and this permission notice shall be included
|
22 |
+
* in all copies or substantial portions of the Software.
|
23 |
+
*
|
24 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
25 |
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
26 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
27 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
28 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
29 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
30 |
+
* THE SOFTWARE.
|
31 |
+
*
|
32 |
+
* @package Browscap
|
33 |
+
* @author Vítor Brandão <noisebleed@noiselabs.org>
|
34 |
+
* @copyright Copyright (c) 2006-2012 Jonathan Stoppani
|
35 |
+
* @version 1.0
|
36 |
+
* @license http://www.opensource.org/licenses/MIT MIT License
|
37 |
+
* @link https://github.com/GaretJax/phpbrowscap/
|
38 |
+
*/
|
39 |
+
class TestCase extends \PHPUnit_Framework_TestCase
|
40 |
+
{
|
41 |
+
/**
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
protected $cacheDir;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Sets up the fixture, for example, open a network connection.
|
48 |
+
* This method is called before a test is executed.
|
49 |
+
*/
|
50 |
+
protected function setUp()
|
51 |
+
{
|
52 |
+
}
|
53 |
+
|
54 |
+
protected function createCacheDir()
|
55 |
+
{
|
56 |
+
$cacheDir = sys_get_temp_dir().DIRECTORY_SEPARATOR.'browscap_testing';
|
57 |
+
|
58 |
+
if (!is_dir($cacheDir)) {
|
59 |
+
if (false === @mkdir($cacheDir, 0777, true)) {
|
60 |
+
throw new \RuntimeException(sprintf('Unable to create the "%s" directory', $cacheDir));
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
$this->cacheDir = $cacheDir;
|
65 |
+
|
66 |
+
return $this->cacheDir;
|
67 |
+
}
|
68 |
+
|
69 |
+
protected function createBrowscap()
|
70 |
+
{
|
71 |
+
$cacheDir = $this->createCacheDir();
|
72 |
+
|
73 |
+
return new Browscap($cacheDir);
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* removes the temporary cache directory
|
78 |
+
*/
|
79 |
+
protected function removeCacheDir()
|
80 |
+
{
|
81 |
+
if (isset($this->cacheDir) && is_dir($this->cacheDir)) {
|
82 |
+
if (false === @rmdir($this->cacheDir)) {
|
83 |
+
throw new \RuntimeException(sprintf('Unable to remove the "%s" directory', $this->cacheDir));
|
84 |
+
}
|
85 |
+
|
86 |
+
$this->cacheDir = null;
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Tears down the fixture, for example, close a network connection.
|
92 |
+
* This method is called after a test is executed.
|
93 |
+
*/
|
94 |
+
protected function tearDown()
|
95 |
+
{
|
96 |
+
$this->removeCacheDir();
|
97 |
+
}
|
98 |
+
}
|
vendor/composer/autoload_files.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_files.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
$vendorDir . '/donatj/phpuseragentparser/Source/UserAgentParser.php',
|
10 |
+
);
|
vendor/composer/installed.json
CHANGED
@@ -1,48 +1,4 @@
|
|
1 |
[
|
2 |
-
{
|
3 |
-
"name": "maxmind/web-service-common",
|
4 |
-
"version": "v0.0.3",
|
5 |
-
"version_normalized": "0.0.3.0",
|
6 |
-
"source": {
|
7 |
-
"type": "git",
|
8 |
-
"url": "https://github.com/maxmind/web-service-common-php.git",
|
9 |
-
"reference": "cc395e9ecd585b3a3b6197cec219f432da21f1c6"
|
10 |
-
},
|
11 |
-
"dist": {
|
12 |
-
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/cc395e9ecd585b3a3b6197cec219f432da21f1c6",
|
14 |
-
"reference": "cc395e9ecd585b3a3b6197cec219f432da21f1c6",
|
15 |
-
"shasum": ""
|
16 |
-
},
|
17 |
-
"require": {
|
18 |
-
"ext-curl": "*",
|
19 |
-
"ext-json": "*",
|
20 |
-
"php": ">=5.3"
|
21 |
-
},
|
22 |
-
"require-dev": {
|
23 |
-
"phpunit/phpunit": "4.6.*"
|
24 |
-
},
|
25 |
-
"time": "2015-06-30 18:56:25",
|
26 |
-
"type": "library",
|
27 |
-
"installation-source": "dist",
|
28 |
-
"autoload": {
|
29 |
-
"psr-4": {
|
30 |
-
"MaxMind\\": "src"
|
31 |
-
}
|
32 |
-
},
|
33 |
-
"notification-url": "https://packagist.org/downloads/",
|
34 |
-
"license": [
|
35 |
-
"Apache-2.0"
|
36 |
-
],
|
37 |
-
"authors": [
|
38 |
-
{
|
39 |
-
"name": "Gregory Oschwald",
|
40 |
-
"email": "goschwald@maxmind.com"
|
41 |
-
}
|
42 |
-
],
|
43 |
-
"description": "Internal MaxMind Web Service API",
|
44 |
-
"homepage": "https://github.com/maxmind/mm-web-service-api-php"
|
45 |
-
},
|
46 |
{
|
47 |
"name": "maxmind-db/reader",
|
48 |
"version": "v1.0.3",
|
@@ -146,5 +102,49 @@
|
|
146 |
"geolocation",
|
147 |
"maxmind"
|
148 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
}
|
150 |
]
|
1 |
[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
{
|
3 |
"name": "maxmind-db/reader",
|
4 |
"version": "v1.0.3",
|
102 |
"geolocation",
|
103 |
"maxmind"
|
104 |
]
|
105 |
+
},
|
106 |
+
{
|
107 |
+
"name": "maxmind/web-service-common",
|
108 |
+
"version": "v0.0.4",
|
109 |
+
"version_normalized": "0.0.4.0",
|
110 |
+
"source": {
|
111 |
+
"type": "git",
|
112 |
+
"url": "https://github.com/maxmind/web-service-common-php.git",
|
113 |
+
"reference": "f26fce5281290973beeeca3e33847887177dd138"
|
114 |
+
},
|
115 |
+
"dist": {
|
116 |
+
"type": "zip",
|
117 |
+
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/f26fce5281290973beeeca3e33847887177dd138",
|
118 |
+
"reference": "f26fce5281290973beeeca3e33847887177dd138",
|
119 |
+
"shasum": ""
|
120 |
+
},
|
121 |
+
"require": {
|
122 |
+
"ext-curl": "*",
|
123 |
+
"ext-json": "*",
|
124 |
+
"php": ">=5.3"
|
125 |
+
},
|
126 |
+
"require-dev": {
|
127 |
+
"phpunit/phpunit": "4.6.*"
|
128 |
+
},
|
129 |
+
"time": "2015-07-21 20:07:31",
|
130 |
+
"type": "library",
|
131 |
+
"installation-source": "dist",
|
132 |
+
"autoload": {
|
133 |
+
"psr-4": {
|
134 |
+
"MaxMind\\": "src"
|
135 |
+
}
|
136 |
+
},
|
137 |
+
"notification-url": "https://packagist.org/downloads/",
|
138 |
+
"license": [
|
139 |
+
"Apache-2.0"
|
140 |
+
],
|
141 |
+
"authors": [
|
142 |
+
{
|
143 |
+
"name": "Gregory Oschwald",
|
144 |
+
"email": "goschwald@maxmind.com"
|
145 |
+
}
|
146 |
+
],
|
147 |
+
"description": "Internal MaxMind Web Service API",
|
148 |
+
"homepage": "https://github.com/maxmind/mm-web-service-api-php"
|
149 |
}
|
150 |
]
|
vendor/donatj/phpuseragentparser/.travis.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
language: php
|
|
|
2 |
|
3 |
php:
|
4 |
- 5.3
|
@@ -16,4 +17,4 @@ install: composer install --no-dev
|
|
16 |
script: phpunit --coverage-clover=coverage.clover
|
17 |
after_script:
|
18 |
- wget https://scrutinizer-ci.com/ocular.phar
|
19 |
-
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
|
1 |
language: php
|
2 |
+
sudo: false
|
3 |
|
4 |
php:
|
5 |
- 5.3
|
17 |
script: phpunit --coverage-clover=coverage.clover
|
18 |
after_script:
|
19 |
- wget https://scrutinizer-ci.com/ocular.phar
|
20 |
+
# - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
|
vendor/donatj/phpuseragentparser/CONTRIBUTING.md
CHANGED
@@ -7,7 +7,7 @@ Issues can be reported via the [Github Issues](https://github.com/donatj/PhpUser
|
|
7 |
- **Detail is key**: If a browser is being misidentified, one or more sample user agent strings are key to getting it resolved.
|
8 |
- **Missing Browser**: Is it modern? What is it being misidentified as? There are a lot of dead browsers out there that there is no reason to support.
|
9 |
|
10 |
-
Please do not file any requests for OS identification.
|
11 |
|
12 |
## Pull Requests
|
13 |
|
@@ -15,4 +15,4 @@ Pull requests are truly appreciated. While I try my best to stay on top of brows
|
|
15 |
|
16 |
- **Formatting**: Indentation **must** use tabs. Please try to match internal formatting and spacing to existing code.
|
17 |
- **Tests**: If you're adding support for a new browser be sure to add test user agents for if at all possible ***every platform*** the browser is available on. Untested code will take much longer to be merged.
|
18 |
-
- **Terseness**: Try to be terse. Be clever. Take up as little space as possible. The point of this project initially was to be smaller than the other guys.
|
7 |
- **Detail is key**: If a browser is being misidentified, one or more sample user agent strings are key to getting it resolved.
|
8 |
- **Missing Browser**: Is it modern? What is it being misidentified as? There are a lot of dead browsers out there that there is no reason to support.
|
9 |
|
10 |
+
Please do not file any requests for OS version identification. It is not a desired feature.
|
11 |
|
12 |
## Pull Requests
|
13 |
|
15 |
|
16 |
- **Formatting**: Indentation **must** use tabs. Please try to match internal formatting and spacing to existing code.
|
17 |
- **Tests**: If you're adding support for a new browser be sure to add test user agents for if at all possible ***every platform*** the browser is available on. Untested code will take much longer to be merged.
|
18 |
+
- **Terseness**: Try to be terse. Be clever. Take up as little space as possible. The point of this project initially was to be smaller than the other guys.
|
vendor/donatj/phpuseragentparser/Source/UserAgentParser.php
CHANGED
@@ -29,7 +29,7 @@ function parse_user_agent( $u_agent = null ) {
|
|
29 |
|
30 |
if( preg_match('/\((.*?)\)/im', $u_agent, $parent_matches) ) {
|
31 |
|
32 |
-
preg_match_all('/(?P<platform>BB\d+;|Android|CrOS|Tizen|iPhone|iPad|Linux|Macintosh|Windows(\ Phone)?|Silk|linux-gnu|BlackBerry|PlayBook|(New\ )?Nintendo\ (WiiU?|
|
33 |
(?:\ [^;]*)?
|
34 |
(?:;|$)/imx', $parent_matches[1], $result, PREG_PATTERN_ORDER);
|
35 |
|
@@ -62,9 +62,8 @@ function parse_user_agent( $u_agent = null ) {
|
|
62 |
|
63 |
// If nothing matched, return null (to avoid undefined index errors)
|
64 |
if( !isset($result['browser'][0]) || !isset($result['version'][0]) ) {
|
65 |
-
if(
|
66 |
-
|
67 |
-
return array( 'platform' => null, 'browser' => $result['browser'], 'version' => isset($result['version']) ? $result['version'] ?: null : null );
|
68 |
}
|
69 |
|
70 |
return $empty;
|
@@ -128,6 +127,10 @@ function parse_user_agent( $u_agent = null ) {
|
|
128 |
} else {
|
129 |
$version = $rv_result ?: $result['version'][$key];
|
130 |
}
|
|
|
|
|
|
|
|
|
131 |
} elseif( $find('Vivaldi', $key) ) {
|
132 |
$browser = 'Vivaldi';
|
133 |
$version = $result['version'][$key];
|
29 |
|
30 |
if( preg_match('/\((.*?)\)/im', $u_agent, $parent_matches) ) {
|
31 |
|
32 |
+
preg_match_all('/(?P<platform>BB\d+;|Android|CrOS|Tizen|iPhone|iPad|Linux|Macintosh|Windows(\ Phone)?|Silk|linux-gnu|BlackBerry|PlayBook|(New\ )?Nintendo\ (WiiU?|3?DS)|Xbox(\ One)?)
|
33 |
(?:\ [^;]*)?
|
34 |
(?:;|$)/imx', $parent_matches[1], $result, PREG_PATTERN_ORDER);
|
35 |
|
62 |
|
63 |
// If nothing matched, return null (to avoid undefined index errors)
|
64 |
if( !isset($result['browser'][0]) || !isset($result['version'][0]) ) {
|
65 |
+
if( preg_match('%^(?!Mozilla)(?P<browser>[A-Z0-9\-]+)(/(?P<version>[0-9A-Z.]+))?%ix', $u_agent, $result) ) {
|
66 |
+
return array( 'platform' => $platform ?: null, 'browser' => $result['browser'], 'version' => isset($result['version']) ? $result['version'] ?: null : null );
|
|
|
67 |
}
|
68 |
|
69 |
return $empty;
|
127 |
} else {
|
128 |
$version = $rv_result ?: $result['version'][$key];
|
129 |
}
|
130 |
+
|
131 |
+
if( version_compare($version, '12', '>=') ) {
|
132 |
+
$browser = 'Edge';
|
133 |
+
}
|
134 |
} elseif( $find('Vivaldi', $key) ) {
|
135 |
$browser = 'Vivaldi';
|
136 |
$version = $result['version'][$key];
|
vendor/donatj/phpuseragentparser/Tests/UserAgentParserTest.php
CHANGED
@@ -41,4 +41,9 @@ class UserAgentParser_test extends \PHPUnit_Framework_TestCase {
|
|
41 |
parse_user_agent();
|
42 |
}
|
43 |
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
41 |
parse_user_agent();
|
42 |
}
|
43 |
|
44 |
+
function test_global_user_agent(){
|
45 |
+
$_SERVER['HTTP_USER_AGENT'] = 'Test/1.0';
|
46 |
+
$this->assertEquals(array('platform'=>null, 'browser' => 'Test', 'version' => '1.0'), parse_user_agent());
|
47 |
+
}
|
48 |
+
|
49 |
}
|
vendor/donatj/phpuseragentparser/Tests/user_agents.json
CHANGED
@@ -89,6 +89,16 @@
|
|
89 |
"browser": "Chrome",
|
90 |
"version": "30.0.1599.17"
|
91 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
"Mozilla\/5.0 (X11; U; Linux i386; en-US; rv:1.7.5) Gecko\/20041109 Firefox\/1.0": {
|
93 |
"platform": "Linux",
|
94 |
"browser": "Firefox",
|
@@ -239,11 +249,6 @@
|
|
239 |
"browser": "MSIE",
|
240 |
"version": "11.0"
|
241 |
},
|
242 |
-
"Mozilla\/5.0 (Windows NT 6.4; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36 Edge\/12.0": {
|
243 |
-
"platform": "Windows",
|
244 |
-
"browser": "MSIE",
|
245 |
-
"version": "12.0"
|
246 |
-
},
|
247 |
"Opera\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; Edition MacAppStore; en) Presto\/2.10.229 Version\/11.61": {
|
248 |
"platform": "Macintosh",
|
249 |
"browser": "Opera",
|
@@ -459,6 +464,11 @@
|
|
459 |
"browser": "NintendoBrowser",
|
460 |
"version": "1.7552.EU"
|
461 |
},
|
|
|
|
|
|
|
|
|
|
|
462 |
"Opera\/9.00 (Nintendo Wii; U; ; 1038-58; Wii Shop Channel\/1.0; en)": {
|
463 |
"platform": "Nintendo Wii",
|
464 |
"browser": "Opera",
|
@@ -514,6 +524,11 @@
|
|
514 |
"browser": "TizenBrowser",
|
515 |
"version": "2"
|
516 |
},
|
|
|
|
|
|
|
|
|
|
|
517 |
"Mozilla\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\/3.1; IEMobile\/7.0) Asus;Galaxy6": {
|
518 |
"platform": "Windows Phone",
|
519 |
"browser": "IEMobile",
|
@@ -549,6 +564,11 @@
|
|
549 |
"browser": "IEMobile",
|
550 |
"version": "10.0"
|
551 |
},
|
|
|
|
|
|
|
|
|
|
|
552 |
"Mozilla\/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident\/7.0; Touch; rv:11.0; IEMobile\/11.0; NOKIA; Lumia 920; Vodafone ES) like iPhone OS 7_0_3 Mac OS X AppleWebkit\/537 (KHTML, like Gecko) Mobile Safari\/537": {
|
553 |
"platform": "Windows Phone",
|
554 |
"browser": "IEMobile",
|
89 |
"browser": "Chrome",
|
90 |
"version": "30.0.1599.17"
|
91 |
},
|
92 |
+
"Mozilla\/5.0 (Windows NT 6.4; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36 Edge\/12.0": {
|
93 |
+
"platform": "Windows",
|
94 |
+
"browser": "Edge",
|
95 |
+
"version": "12.0"
|
96 |
+
},
|
97 |
+
"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.135 Safari\/537.36 Edge\/12.10240": {
|
98 |
+
"platform": "Windows",
|
99 |
+
"browser": "Edge",
|
100 |
+
"version": "12.10240"
|
101 |
+
},
|
102 |
"Mozilla\/5.0 (X11; U; Linux i386; en-US; rv:1.7.5) Gecko\/20041109 Firefox\/1.0": {
|
103 |
"platform": "Linux",
|
104 |
"browser": "Firefox",
|
249 |
"browser": "MSIE",
|
250 |
"version": "11.0"
|
251 |
},
|
|
|
|
|
|
|
|
|
|
|
252 |
"Opera\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; Edition MacAppStore; en) Presto\/2.10.229 Version\/11.61": {
|
253 |
"platform": "Macintosh",
|
254 |
"browser": "Opera",
|
464 |
"browser": "NintendoBrowser",
|
465 |
"version": "1.7552.EU"
|
466 |
},
|
467 |
+
"Bunjalloo\/0.7.6(Nintendo DS;U;en)": {
|
468 |
+
"platform": "Nintendo DS",
|
469 |
+
"browser": "Bunjalloo",
|
470 |
+
"version": "0.7.6"
|
471 |
+
},
|
472 |
"Opera\/9.00 (Nintendo Wii; U; ; 1038-58; Wii Shop Channel\/1.0; en)": {
|
473 |
"platform": "Nintendo Wii",
|
474 |
"browser": "Opera",
|
524 |
"browser": "TizenBrowser",
|
525 |
"version": "2"
|
526 |
},
|
527 |
+
"Mozilla\/5.0 (Windows Phone 10.0; Android 4.2.1; Nokia; Lumia 520) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.135 Mobile Safari\/537.36 Edge\/12.10130": {
|
528 |
+
"platform": "Windows Phone",
|
529 |
+
"browser": "Edge",
|
530 |
+
"version": "12.10130"
|
531 |
+
},
|
532 |
"Mozilla\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\/3.1; IEMobile\/7.0) Asus;Galaxy6": {
|
533 |
"platform": "Windows Phone",
|
534 |
"browser": "IEMobile",
|
564 |
"browser": "IEMobile",
|
565 |
"version": "10.0"
|
566 |
},
|
567 |
+
"Mozilla\/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident\/7.0; Touch; rv:11.0; IEMobile\/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit\/537 (KHTML, like Gecko) Mobile Safari\/537": {
|
568 |
+
"platform": "Windows Phone",
|
569 |
+
"browser": "IEMobile",
|
570 |
+
"version": "11.0"
|
571 |
+
},
|
572 |
"Mozilla\/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident\/7.0; Touch; rv:11.0; IEMobile\/11.0; NOKIA; Lumia 920; Vodafone ES) like iPhone OS 7_0_3 Mac OS X AppleWebkit\/537 (KHTML, like Gecko) Mobile Safari\/537": {
|
573 |
"platform": "Windows Phone",
|
574 |
"browser": "IEMobile",
|
vendor/donatj/phpuseragentparser/composer.json
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
"name": "donatj/phpuseragentparser",
|
3 |
"type": "library",
|
4 |
"description": "Simple, streamlined PHP user-agent parser",
|
5 |
-
"keywords": ["user agent", "useragent", "parser"],
|
6 |
"homepage": "http://donatstudios.com/PHP-Parser-HTTP_USER_AGENT",
|
7 |
"license": "MIT",
|
8 |
"require": {
|
@@ -10,6 +10,7 @@
|
|
10 |
},
|
11 |
"require-dev": {
|
12 |
"camspiers/json-pretty": "0.1.*",
|
|
|
13 |
"donatj/drop": "*"
|
14 |
},
|
15 |
"authors": [
|
2 |
"name": "donatj/phpuseragentparser",
|
3 |
"type": "library",
|
4 |
"description": "Simple, streamlined PHP user-agent parser",
|
5 |
+
"keywords": ["user agent", "useragent", "parser", "browser", "browser detection"],
|
6 |
"homepage": "http://donatstudios.com/PHP-Parser-HTTP_USER_AGENT",
|
7 |
"license": "MIT",
|
8 |
"require": {
|
10 |
},
|
11 |
"require-dev": {
|
12 |
"camspiers/json-pretty": "0.1.*",
|
13 |
+
"phpunit/phpunit": "4.*",
|
14 |
"donatj/drop": "*"
|
15 |
},
|
16 |
"authors": [
|
vendor/maxmind/web-service-common/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
0.0.3 (2015-06-30)
|
5 |
------------------
|
6 |
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
4 |
+
0.0.4 (2015-07-21)
|
5 |
+
------------------
|
6 |
+
|
7 |
+
* Added extremely basic tests for the curl calls.
|
8 |
+
* Fixed broken POSTs.
|
9 |
+
|
10 |
0.0.3 (2015-06-30)
|
11 |
------------------
|
12 |
|
vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php
CHANGED
@@ -35,7 +35,7 @@ class CurlRequest implements Request
|
|
35 |
curl_setopt($curl, CURLOPT_POST, true);
|
36 |
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
|
37 |
|
38 |
-
return $this->execute(curl);
|
39 |
}
|
40 |
|
41 |
public function get()
|
35 |
curl_setopt($curl, CURLOPT_POST, true);
|
36 |
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
|
37 |
|
38 |
+
return $this->execute($curl);
|
39 |
}
|
40 |
|
41 |
public function get()
|
vendor/maxmind/web-service-common/tests/MaxMind/Test/WebService/Http/CurlRequestTest.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Test\WebService\Http;
|
4 |
+
|
5 |
+
use MaxMind\WebService\Http\CurlRequest;
|
6 |
+
|
7 |
+
// These tests are totally insufficient, but they do test that most of our
|
8 |
+
// curl calls are at least syntactically valid and available in each PHP
|
9 |
+
// version. Doing more sophisticated testing would require setting up a
|
10 |
+
// server, which is very painful to do in PHP 5.3. For 5.4+, there are
|
11 |
+
// various solutions. When we increase our required PHP version, we should
|
12 |
+
// look into those.
|
13 |
+
class CurlRequestTest extends \PHPUnit_Framework_TestCase
|
14 |
+
{
|
15 |
+
|
16 |
+
private $options = array(
|
17 |
+
'caBundle'=> null,
|
18 |
+
'headers' => array(),
|
19 |
+
'userAgent' => 'Test',
|
20 |
+
'connectTimeout' => 0,
|
21 |
+
'timeout' => 0,
|
22 |
+
);
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @expectedException MaxMind\Exception\HttpException
|
26 |
+
* @expectedExceptionMessage cURL error (6):
|
27 |
+
*/
|
28 |
+
public function testGet()
|
29 |
+
{
|
30 |
+
$cr = new CurlRequest(
|
31 |
+
'invalid host',
|
32 |
+
$this->options
|
33 |
+
);
|
34 |
+
|
35 |
+
$cr->get();
|
36 |
+
}
|
37 |
+
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @expectedException MaxMind\Exception\HttpException
|
41 |
+
* @expectedExceptionMessage cURL error (6):
|
42 |
+
*/
|
43 |
+
public function testPost()
|
44 |
+
{
|
45 |
+
$cr = new CurlRequest(
|
46 |
+
'invalid host',
|
47 |
+
$this->options
|
48 |
+
);
|
49 |
+
|
50 |
+
$cr->post('POST BODY');
|
51 |
+
}
|
52 |
+
}
|
wp-statistics.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: WP Statistics
|
4 |
Plugin URI: http://wp-statistics.com/
|
5 |
Description: Complete statistics for your WordPress site.
|
6 |
-
Version: 9.6.
|
7 |
Author: Mostafa Soufi & Greg Ross
|
8 |
Author URI: http://wp-statistics.com/
|
9 |
Text Domain: wp_statistics
|
@@ -12,7 +12,7 @@ License: GPL2
|
|
12 |
*/
|
13 |
|
14 |
// These defines are used later for various reasons.
|
15 |
-
define('WP_STATISTICS_VERSION', '9.6.
|
16 |
define('WP_STATISTICS_MANUAL', 'manual/WP Statistics Admin Manual.');
|
17 |
define('WP_STATISTICS_REQUIRED_PHP_VERSION', '5.3.0');
|
18 |
define('WP_STATISTICS_REQUIRED_GEOIP_PHP_VERSION', WP_STATISTICS_REQUIRED_PHP_VERSION);
|
@@ -314,9 +314,9 @@ License: GPL2
|
|
314 |
function wp_statistics_load_edit_init() {
|
315 |
GLOBAL $WP_Statistics;
|
316 |
|
317 |
-
$
|
318 |
|
319 |
-
if( current_user_can( $
|
320 |
$post_types = (array)get_post_types( array( 'show_ui' => true ), 'object' );
|
321 |
|
322 |
foreach( $post_types as $type ) {
|
3 |
Plugin Name: WP Statistics
|
4 |
Plugin URI: http://wp-statistics.com/
|
5 |
Description: Complete statistics for your WordPress site.
|
6 |
+
Version: 9.6.5
|
7 |
Author: Mostafa Soufi & Greg Ross
|
8 |
Author URI: http://wp-statistics.com/
|
9 |
Text Domain: wp_statistics
|
12 |
*/
|
13 |
|
14 |
// These defines are used later for various reasons.
|
15 |
+
define('WP_STATISTICS_VERSION', '9.6.5');
|
16 |
define('WP_STATISTICS_MANUAL', 'manual/WP Statistics Admin Manual.');
|
17 |
define('WP_STATISTICS_REQUIRED_PHP_VERSION', '5.3.0');
|
18 |
define('WP_STATISTICS_REQUIRED_GEOIP_PHP_VERSION', WP_STATISTICS_REQUIRED_PHP_VERSION);
|
314 |
function wp_statistics_load_edit_init() {
|
315 |
GLOBAL $WP_Statistics;
|
316 |
|
317 |
+
$read_cap = wp_statistics_validate_capability( $WP_Statistics->get_option('read_capability', 'manage_options') );
|
318 |
|
319 |
+
if( current_user_can( $read_cap ) && $WP_Statistics->get_option('pages') && !$WP_Statistics->get_option('disable_column') ) {
|
320 |
$post_types = (array)get_post_types( array( 'show_ui' => true ), 'object' );
|
321 |
|
322 |
foreach( $post_types as $type ) {
|
wps-updates.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
<?php
|
2 |
-
include_once dirname( __FILE__ ) . '/
|
3 |
|
4 |
use phpbrowscap\Browscap;
|
5 |
|
@@ -203,12 +203,19 @@
|
|
203 |
// We have three sections we need to copy verbatium so don't do the standard processing for them.
|
204 |
if( $title != 'GJK_Browscap_Version' && $title != 'DefaultProperties' && $title != '*' && $title != '')
|
205 |
{
|
206 |
-
//
|
207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
{
|
209 |
// Write out the section with just the parent/crawler setting saved.
|
210 |
fwrite( $outfile, "[" . $title . "]\n" );
|
211 |
-
fwrite( $outfile, 'Parent="' . $parent . '"' . "\n");
|
212 |
fwrite( $outfile, "Crawler=\"true\"\n" );
|
213 |
}
|
214 |
}
|
1 |
<?php
|
2 |
+
include_once dirname( __FILE__ ) . '/vendor/browscap/browscap-php/src/phpbrowscap/Browscap.php';
|
3 |
|
4 |
use phpbrowscap\Browscap;
|
5 |
|
203 |
// We have three sections we need to copy verbatium so don't do the standard processing for them.
|
204 |
if( $title != 'GJK_Browscap_Version' && $title != 'DefaultProperties' && $title != '*' && $title != '')
|
205 |
{
|
206 |
+
// Write out the section if:
|
207 |
+
// the current section is a crawler and there is no parent
|
208 |
+
// OR
|
209 |
+
// the current section is a crawler, has a parent and the parent is a crawler as well (Note, this will drop some crawlers who's parent's aren't because we haven't written out all the parent's that aren't crawlers this could cause mis-identificaton of some users as crawlers).
|
210 |
+
// OR
|
211 |
+
// the current section isn't a crawler but the parent is
|
212 |
+
//
|
213 |
+
if( ( $crawler == 2 && $parent == '' ) ||
|
214 |
+
( $crawler == 2 && $parent != '' && array_key_exists( $parent, $parents ) ) ||
|
215 |
+
( $crawler == 0 && array_key_exists( $parent, $parents ) ) )
|
216 |
{
|
217 |
// Write out the section with just the parent/crawler setting saved.
|
218 |
fwrite( $outfile, "[" . $title . "]\n" );
|
|
|
219 |
fwrite( $outfile, "Crawler=\"true\"\n" );
|
220 |
}
|
221 |
}
|