WP Statistics - Version 9.6.5

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 Icon 128x128 WP Statistics
Version 9.6.5
Comparing to
See all releases

Code changes from version 9.6.4 to 9.6.5

Files changed (37) hide show
  1. includes/functions/purge.php +1 -1
  2. includes/log/widgets/summary.php +1 -1
  3. languages/wp_statistics-id_ID.mo +0 -0
  4. languages/wp_statistics-id_ID.po +71 -71
  5. languages/wp_statistics-ru_RU.mo +0 -0
  6. languages/wp_statistics-ru_RU.po +108 -106
  7. readme.txt +12 -1
  8. vendor/browscap/browscap-php/.editorconfig +24 -0
  9. vendor/browscap/browscap-php/.gitattributes +7 -0
  10. vendor/browscap/browscap-php/.gitignore +6 -0
  11. vendor/browscap/browscap-php/.scrutinizer.yml +4 -0
  12. vendor/browscap/browscap-php/.travis.yml +23 -0
  13. vendor/browscap/browscap-php/CHANGELOG.md +55 -0
  14. vendor/browscap/browscap-php/LICENSE +19 -0
  15. vendor/browscap/browscap-php/README.md +57 -0
  16. vendor/browscap/browscap-php/composer.json +47 -0
  17. vendor/browscap/browscap-php/composer.lock +970 -0
  18. vendor/browscap/browscap-php/phpunit.xml +15 -0
  19. vendor/browscap/browscap-php/phpunit.xml.dist +15 -0
  20. {includes/classes → vendor/browscap/browscap-php/src/phpbrowscap}/Browscap.php +199 -107
  21. vendor/browscap/browscap-php/tests/bootstrap.php +26 -0
  22. vendor/browscap/browscap-php/tests/phpbrowscapTest/BrowscapTest.php +454 -0
  23. vendor/browscap/browscap-php/tests/phpbrowscapTest/CompareBrowscapWithOriginalTest.php +223 -0
  24. vendor/browscap/browscap-php/tests/phpbrowscapTest/TestCase.php +98 -0
  25. vendor/composer/autoload_files.php +10 -0
  26. vendor/composer/installed.json +44 -44
  27. vendor/donatj/phpuseragentparser/.travis.yml +2 -1
  28. vendor/donatj/phpuseragentparser/CONTRIBUTING.md +2 -2
  29. vendor/donatj/phpuseragentparser/Source/UserAgentParser.php +7 -4
  30. vendor/donatj/phpuseragentparser/Tests/UserAgentParserTest.php +5 -0
  31. vendor/donatj/phpuseragentparser/Tests/user_agents.json +25 -5
  32. vendor/donatj/phpuseragentparser/composer.json +2 -1
  33. vendor/maxmind/web-service-common/CHANGELOG.md +6 -0
  34. vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php +1 -1
  35. vendor/maxmind/web-service-common/tests/MaxMind/Test/WebService/Http/CurlRequestTest.php +52 -0
  36. wp-statistics.php +4 -4
  37. 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, 'type' => 'uri', 'uri' => $row->uri, 'page_id' => wp_statistics_uri_to_id($row->uri) ) );
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(); ?><a></span>
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-04-22 00:39:59+0000\n"
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 "Kedua"
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 check akurat online pengguna di situs. Sekarang: %s kedua"
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 "Miscellaneous"
582
 
583
  #: includes/settings/tabs/wps-general.php:239
584
  msgid "Show stats in menu bar"
585
- msgstr "Menampilkan statistik pada menu bar"
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 "Menyembunyikan admin pemberitahuan tentang fitur bebas 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,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 "Menghapus 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,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, melakukan begitu akan mengakibatkan semua mesin pencari yang aktif."
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-14 23:24:51+0000\n"
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 "Заполнить недостающие GeoIP после обновление GeoIP дБ"
 
 
682
 
683
  #: includes/settings/tabs/wps-externals.php:110
684
  msgid "Update any missing GeoIP data after downloading a new database."
685
- msgstr "Обновление любых отсутствующих данных GeoIP после загрузки новой базы данных."
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 "Коллекция GeoIP отключена по следующим причинам:"
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 коллекции требует PHP %s или выше, в настоящее время отключена из-за установленной версии PHP, в настоящее время "
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 коллекции требует расширения PHP cURL и он не загружается на вашей версии PHP!"
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 коллекции требует расширение PHP математике до н.э. и он не загружается на вашей версии PHP!"
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 "Безопасный режим PHP обнаружены! GeoIP коллекции не поддерживается в PHP безопасном режиме включен!"
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 "Активен ли PHP безопасном режиме. GeoIP код в безопасном режиме не поддерживается."
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 "Варианты GeoIP"
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 "Хэш IP-адреса"
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 "Заменить IP-адресов в базе данных с хеш-значения, вы не сможете восстановить IP-адреса в будущем для заполнения информации о местоположении потом и это может занять некоторое время"
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 "Приезжайте, наш великий новый %s и держать в курсе о последних новостях о WP статистика."
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 "Оценить и проанализировать на WordPress.org"
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 "более чем на WordPress.org. Ваши отзывы с благодарностью!"
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 статистика поддерживает интернационализацию и мы призываем наших пользователей представить переводы, пожалуйста, посетите наш %s чтобы увидеть текущее состояние и %s, если вы хотите помочь."
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 "Нам очень жаль вас возникли проблемы с WP Statistics и мы будем рады помочь. Вот несколько вещей, чтобы сделать, прежде чем связаться с нами:"
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 "Вы читали на %s?"
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 "У вас Поиск %s для подобной проблемы?"
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 "Как это ваш memory_limit в php.ini?"
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 "Пробовали ли вы с помощью WordPress тема по умолчанию?"
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 "У вас есть все необходимые расширения PHP установлены?"
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 "Вы проверили вашу PHP и веб-журналы ошибок сервера?"
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 "Затем откройте новую тему на %s, и мы ответим как можно скорее."
2392
 
2393
  #: includes/settings/tabs/wps-about.php:79
2394
  msgid "WordPress.org support forum"
2395
- msgstr "Форум поддержки WordPress.org"
2396
 
2397
  #: includes/settings/tabs/wps-about.php:83
2398
  msgid "Alternatively %s support is available as well."
2399
- msgstr "В качестве альтернативы %s поддержка также доступна."
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 "Требуемый уровень пользователя для просмотра статистики WP"
2421
 
2422
  #: includes/settings/tabs/wps-access-level.php:67
2423
  msgid "Required user level to manage WP Statistics"
2424
- msgstr "Уровень пользователя для управления WP Statistics"
2425
 
2426
  #: includes/settings/tabs/wps-access-level.php:75
2427
  msgid "See the %s for details on capability levels."
2428
- msgstr "Смотрите %s для подробной информации о возможности уровнях."
2429
 
2430
  #: includes/settings/tabs/wps-access-level.php:75
2431
  msgid "WordPress Roles and Capabilities page"
2432
- msgstr "Страница WordPress роли и возможности"
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 = супер администратора сети, manage_options = администратор, edit_others_posts = редактор, publish_posts = автор, edit_posts = вкладчика, читать = каждый."
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 "Каждый из выше casscades прав вверх в конфигурации по умолчанию WordPress. Так, например, при выборе publish_posts предоставляет право авторов, редакторов, администраторы и администраторы супер."
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 "Если вам нужно более надежное решение для делегирования доступа вы можете взглянуть на %s в WordPress плагин каталога."
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 "Исключите роль %s из сбора данных."
2482
 
2483
  #: includes/settings/tabs/wps-exclusions.php:81
2484
  msgid "IP/Robot Exclusions"
2485
- msgstr "Исключения IP/робот"
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 "Список слов (по одному в строке) для сопоставления для обнаружения роботов. Записи должны быть минимум 4 символов или они будут проигнорированы."
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 "Силы робот списка необходимо сбросить по умолчанию после обновления WP Statistics имеет место. Обратите внимание, если эта опция включена любые пользовательские роботы, которые были добавлены в список, будут потеряны."
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-адресов и подсетей маски (по одному в строке) исключить из коллекции статистики (форматы 192.168.0.0/24 и 192.168.0.0/255.255.255.0 принимаются). Чтобы указать только IP-адрес, используйте значение подсети 255.255.255.255 или 32."
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 "Исключения URL-адрес сайта"
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 "Не учитывать просмотры любых страниц, которые возвращают &quot;404 Not Found&quot;."
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 "Список кодов стран (по одному в каждой строке, по два символа каждый), которые требуется исключить из статистики. Используйте &quot;000&quot; (три нуля), чтобы исключить неизвестные страны."
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 "Список кодов стран (по одному в каждой строке, по два символа каждый), которые требуется включить в статистику, если этот список не пуст, то только посетители из этих стран будут добавлены в статистику. Используйте &quot;000&quot; (три нуля), чтобы исключить неизвестные страны."
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.4
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.4';
45
 
46
- const CACHE_FILE_VERSION = '2.0.4';
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 = 'Browser Capabilities Project - PHP Browscap/%v %m';
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
- // Load the cache at the first request
268
- if (!$this->_cacheLoaded) {
269
- $cache_file = $this->cacheDir . $this->cacheFilename;
270
- $ini_file = $this->cacheDir . $this->iniFilename;
271
-
272
- // Set the interval only if needed
273
- if ($this->doAutoUpdate && file_exists($ini_file)) {
274
- $interval = time() - filemtime($ini_file);
275
- } else {
276
- $interval = 0;
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->_loadCache($cache_file)) {
305
- throw new Exception('Cannot load this cache version - the cache format is not compatible.');
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
- if (file_exists($lockfile) || !touch($lockfile)) {
517
- throw new Exception('temporary file already exists');
 
 
 
 
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 = array();
 
 
 
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 $key => $value) {
596
- if (!isset($properties_keys[$key])) {
597
  continue;
598
  }
599
 
600
- $key = $properties_keys[$key];
601
- $browser[$key] = $value;
602
  }
603
 
604
  $this->_browsers[] = $browser;
@@ -622,18 +641,22 @@ class Browscap
622
  }
623
  }
624
 
625
- // Get the whole PHP code
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 === file_put_contents($tmpFile, $cache)) {
 
 
 
 
634
  // writing to the temparary file failed
635
- throw new Exception('wrting to temporary file failed');
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 creates the PHP string to write to disk
 
 
818
  *
819
- * @return string the PHP string to save into the cache file
820
  */
821
- protected function _buildCache()
822
  {
823
- $cacheTpl = "<?php\n\$source_version=%s;\n\$cache_version=%s;\n\$properties=%s;\n\$browsers=%s;\n\$userAgents=%s;\n\$patterns=%s;\n";
 
 
 
 
 
 
 
824
 
825
- $propertiesArray = $this->_array2string($this->_properties);
826
- $patternsArray = $this->_array2string($this->_patterns);
827
- $userAgentsArray = $this->_array2string($this->_userAgents);
828
- $browsersArray = $this->_array2string($this->_browsers);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
829
 
830
- return sprintf(
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 < $local_tmstp) {
880
  // No update needed, return
881
  touch($path);
882
 
@@ -884,47 +948,65 @@ class Browscap
884
  }
885
  }
886
 
887
- if ($url != $path) {
888
- // Check if it's possible to write to the .ini file.
889
- if (is_file($path)) {
890
- if (!is_writable($path)) {
891
- throw new Exception(
892
- 'Could not write to "' . $path . '" (check the permissions of the current/old ini file).'
893
- );
894
- }
 
 
 
 
 
 
895
  } else {
896
- // Test writability by creating a file only if one already doesn't exist, so we can safely delete it after the test.
897
- $test_file = fopen($path, 'a');
898
- if ($test_file) {
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
- // Get updated .ini file
909
- $browscap = $this->_getRemoteData($url);
910
- $browscap = explode("\n", $browscap);
911
- $pattern = self::REGEX_DELIMITER . '(' . self::VALUES_TO_QUOTE . ')="?([^"]*)"?$' . self::REGEX_DELIMITER;
912
 
913
- // Ok, lets read the file
914
- $content = '';
915
- foreach ($browscap as $subject) {
916
- $subject = trim($subject);
917
- $content .= preg_replace($pattern, '$1="$2"', $subject) . "\n";
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 string the array parsed into a PHP string
970
  */
971
- protected function _array2string($array)
972
  {
973
- $strings = array();
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
- $strings[] = $key . $value;
 
 
 
 
 
 
 
993
  }
994
 
995
- return "array(\n" . implode(",\n", $strings) . "\n)";
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?|3DS)|Xbox(\ One)?)
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( !$platform && preg_match('%^(?!Mozilla)(?P<browser>[A-Z0-9\-]+)(/(?P<version>[0-9A-Z.]+))?([;| ]\ ?.*)?$%ix', $u_agent, $result)
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.4
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.4');
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
- $manage_cap = wp_statistics_validate_capability( $WP_Statistics->get_option('manage_capability', 'manage_options') );
318
 
319
- if( current_user_can( $manage_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 ) {
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__ ) . '/includes/classes/Browscap.php';
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
- // If we found the current section is a crawler or we didn't find a crawler setting but the parent is a crawler...
207
- if( $crawler == 2 || ( $crawler == 0 && array_key_exists( $parent, $parents ) ) )
 
 
 
 
 
 
 
 
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
  }